diff --git a/src/main/java/de/bps/course/nodes/vc/_i18n/LocalStrings_pt_BR.properties b/src/main/java/de/bps/course/nodes/vc/_i18n/LocalStrings_pt_BR.properties
index cccb8ade7af8aea4c46a80c22128a2f6889f02b7..2fcfc657caad1914309f951c449a4da4a3448301 100644
--- a/src/main/java/de/bps/course/nodes/vc/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/de/bps/course/nodes/vc/_i18n/LocalStrings_pt_BR.properties
@@ -1,9 +1,7 @@
-#Fri Jul 10 22:58:33 CEST 2015
-
-
-
-
-
+#Wed Jun 15 22:56:13 CEST 2016
 condition.accessibility.title=Acesso
 config.header=Configura\u00E7\u00E3o de sala de aula virtual
 config.header.extended=Configura\u00E7\u00E3o extendida
+config.select.vc=Sistema para sala de aula virtual
+delete.meeting.text=Voc\u00EA mudou o sistema para sua sala de aula virtual. A sala de aula existente ser\u00E1 assim exclu\u00EDda. Voc\u00EA realmente quer apagar a sala de aula?
+delete.meeting.title=Excluir sala de aula virtual
diff --git a/src/main/java/org/olat/admin/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/admin/_i18n/LocalStrings_pt_BR.properties
index 4d50cd562edbf069f5bd87732360b13c1d574d48..494575363aa84be817fe2eb5b95433913ef3d203 100644
--- a/src/main/java/org/olat/admin/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/admin/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Fri Apr 29 15:02:03 CEST 2016
+#Wed Jun 15 22:56:41 CEST 2016
 bulkuserreplay.chkbx.onoff=Checkbox no meio Replay ON e AJAX OFF
 bulkuserreplay.tt=Usernames separados por linha
 data.no.save=Aten\u00E7\u00E3o\: estas altera\u00E7\u00F5es ser\u00E3o perdidas no reboot\! Para salvar permanentemente modificar o aquivo olat.properties. No futuro as altera\u00E7\u00F5es ser\u00E3o salvas automaticamente.
@@ -46,6 +46,8 @@ menu.errors=Erros
 menu.errors.alt=Erros e n\u00EDveis de log
 menu.extensions=M\u00F3dulos de software
 menu.extensions.alt=Lista de m\u00F3dulos de software enviados
+menu.external.tools=Ferramentas externas
+menu.external.tools.alt=Integra\u00E7\u00E3o \u00E0 ferramentas externas
 menu.groupcoach=Treinador do grupo
 menu.groupcoach.alt=Treinador do grupo
 menu.groupmanagergroup=Grupo gestor
diff --git a/src/main/java/org/olat/admin/security/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/admin/security/_i18n/LocalStrings_pt_BR.properties
index fee666377b3b8c93235874368a278830b2b14f28..63ffb084ffa78de788577fce7217b374fbcd474f 100644
--- a/src/main/java/org/olat/admin/security/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/admin/security/_i18n/LocalStrings_pt_BR.properties
@@ -1,14 +1,9 @@
-#Fri Jan 24 19:32:11 CET 2014
+#Wed Jun 15 22:57:07 CEST 2016
 admin.menu.title=Seguran\u00E7a
 admin.menu.title.alt=Altere as configura\u00E7\u00F5es de seguran\u00E7a
-
-
-
-
-
-
 sec.description=Escolha o n\u00EDvel de seguran\u00E7a de acordo com as exig\u00EAncias da sua institui\u00E7\u00E3o. Para conseguir os maiores n\u00EDveis de seguran\u00E7a, todos os recursos de seguran\u00E7a abaixo devem estar acionados
 sec.force.download=For\u00E7ar download de arquivos em pastas
 sec.title=Configura\u00E7\u00F5es de seguran\u00E7a
+sec.top.frame.explanation=Devido a raz\u00F5es de compatibilidade, o componente de texto HTML (TinyMCE) de OpenOLAT n\u00E3o pode ser incorporado em um quadro.
 sec.topframe=Impedir a incorpora\u00E7\u00E3o em quadros
 sec.wiki=Bloquear recursos wiki
diff --git a/src/main/java/org/olat/admin/site/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/admin/site/ui/_i18n/LocalStrings_pt_BR.properties
index 419bc371427f13ed9e3d089d10921162f79a087a..2aafb04a86eb8a9b443f07c6c7c4e4ca7aba5801 100644
--- a/src/main/java/org/olat/admin/site/ui/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/admin/site/ui/_i18n/LocalStrings_pt_BR.properties
@@ -1,10 +1,12 @@
-#Tue Feb 24 13:49:31 CET 2015
+#Wed Jun 15 22:58:01 CEST 2016
 AdminSiteDef=Adminsitra\u00E7\u00E3o
 CatalogAdminSiteDef=Administra\u00E7\u00E3o do Cat\u00E1logo
 CatalogSiteDef=Cat\u00E1logo
 CoachSiteDef=Ferramenta de Coaching
 CourseSiteDef=P\u00E1gina de informa\u00E7\u00E3o n\u00BA1
 CourseSiteDef2=P\u00E1gina de informa\u00E7\u00E3o n\u00BA2
+CourseSiteDef3=Infopage n \u00B0 3
+CourseSiteDef4=Infopage n\u00B04
 EPSiteDef=Ferramenta E-portfolio
 GUIDemoSiteDef=GUI Demo
 GroupsSiteDef=Grupos
@@ -15,6 +17,7 @@ PortalSiteDef=Portal
 QuestionPoolSiteDef=Reservat\u00F3rio de perguntas
 RepositorySiteDef=Recursos did\u00E1ticos
 UserAdminSiteDef=Administra\u00E7\u00E3o de usu\u00E1rios
+VideoSiteDef=LearnTube
 admin.menu.title=Sites
 admin.menu.title.alt=Configura\u00E7\u00E3o de Sites
 adminSiteSecurityCallback=Administradores de sistema
@@ -39,6 +42,8 @@ site.alternative=Alternativa
 site.alternative.none=Sem Alt.
 site.courseSite1=P\u00E1gina de informa\u00E7\u00E3o n\u00BA1
 site.courseSite2=P\u00E1gina de informa\u00E7\u00E3o n\u00BA2
+site.courseSite3=Infopage n \u00B0 3
+site.courseSite4=Infopage n \u00B0 4
 site.defaultOrder=Ordem Def.
 site.enabled=Ativo
 site.security=Acesso
diff --git a/src/main/java/org/olat/basesecurity/BaseSecurity.java b/src/main/java/org/olat/basesecurity/BaseSecurity.java
index eedbc943f82ad56cd93adf43ccc1622e6ff410e4..9ce13fd39fc09e409d684bf910fa3036dd752043 100644
--- a/src/main/java/org/olat/basesecurity/BaseSecurity.java
+++ b/src/main/java/org/olat/basesecurity/BaseSecurity.java
@@ -157,6 +157,8 @@ public interface BaseSecurity {
 	 */
 	public Identity findIdentityByName(String identityName);
 	
+	public Identity findIdentityByNameCaseInsensitive(String identityName);
+	
 	public List<Identity> findIdentitiesByName(Collection<String> identityName);
 
 	/**
diff --git a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
index aa88909c3b8d9b9e862b0fbae070c54e2cc6b5ee..651f1d4dd21a4fd1b0427eb32b2c3e52ee51e8c2 100644
--- a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
+++ b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
@@ -949,6 +949,20 @@ public class BaseSecurityManager implements BaseSecurity {
 		}
 		return identities.get(0);
 	}
+	
+	@Override
+	public Identity findIdentityByNameCaseInsensitive(String identityName) {
+		if (identityName == null) throw new AssertException("findIdentitybyName: name was null");
+
+		StringBuilder sb = new StringBuilder();
+		sb.append("select ident from ").append(IdentityImpl.class.getName()).append(" as ident where lower(ident.name)=:username");
+		
+		List<Identity> identities = DBFactory.getInstance().getCurrentEntityManager()
+				.createQuery(sb.toString(), Identity.class)
+				.setParameter("username", identityName.toLowerCase())
+				.getResultList();
+		return identities == null || identities.isEmpty() ? null : identities.get(0);
+	}
 
 	/**
 	 * Custom search operation by BiWa
diff --git a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pt_BR.properties
index 4a1513633519fdfd5f7467e0d5a94fc453b48261..b117a2dbafc278380592c855ca0baa974d919756 100644
--- a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Fri Apr 29 15:06:56 CEST 2016
+#Wed Jun 15 22:58:06 CEST 2016
 cal.add.event=Adicionar evento
 cal.add.readonly=(somente leitura)
 cal.color.choose=Escolher cor
diff --git a/src/main/java/org/olat/commons/info/notification/InfoMessageNotificationHandler.java b/src/main/java/org/olat/commons/info/notification/InfoMessageNotificationHandler.java
index f45963275b622e86e99bfb81294e9c3a131ae154..7bd42ab34e0c6b8a2ade2031bb8b733c6e40d389 100644
--- a/src/main/java/org/olat/commons/info/notification/InfoMessageNotificationHandler.java
+++ b/src/main/java/org/olat/commons/info/notification/InfoMessageNotificationHandler.java
@@ -26,6 +26,7 @@ import java.util.Locale;
 
 import org.olat.commons.info.manager.InfoMessageManager;
 import org.olat.commons.info.model.InfoMessage;
+import org.olat.core.commons.services.notifications.NotificationHelper;
 import org.olat.core.commons.services.notifications.NotificationsHandler;
 import org.olat.core.commons.services.notifications.NotificationsManager;
 import org.olat.core.commons.services.notifications.Publisher;
@@ -34,6 +35,7 @@ import org.olat.core.commons.services.notifications.SubscriptionInfo;
 import org.olat.core.commons.services.notifications.model.SubscriptionListItem;
 import org.olat.core.commons.services.notifications.model.TitleItem;
 import org.olat.core.gui.translator.Translator;
+import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.logging.LogDelegator;
@@ -68,13 +70,16 @@ public class InfoMessageNotificationHandler extends LogDelegator implements Noti
 				final Long resId = subscriber.getPublisher().getResId();
 				final String resName = subscriber.getPublisher().getResName();
 				String resSubPath = subscriber.getPublisher().getSubidentifier();
-				String title = RepositoryManager.getInstance().lookupDisplayNameByOLATResourceableId(resId);
+				String displayName = RepositoryManager.getInstance().lookupDisplayNameByOLATResourceableId(resId);
+				Translator translator = Util.createPackageTranslator(this.getClass(), locale);
+				String title = translator.translate("notification.title", new String[]{ displayName });
 				si = new SubscriptionInfo(subscriber.getKey(), p.getType(), new TitleItem(title, CSS_CLASS_ICON), null);
 				
 				OLATResourceable ores = OresHelper.createOLATResourceableInstance(resName, resId);
 				List<InfoMessage> infos = InfoMessageManager.getInstance().loadInfoMessageByResource(ores, resSubPath, null, compareDate, null, 0, 0);
 				for(InfoMessage info:infos) {
-					String desc = info.getTitle();
+					Identity ident = info.getAuthor();
+					String desc = translator.translate("notifications.entry", new String[] { info.getTitle(), NotificationHelper.getFormatedName(ident) });
 					String tooltip = info.getMessage();
 					String infoBusinessPath = info.getBusinessPath() + "[InfoMessage:" + info.getKey() + "]";
 					String urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(infoBusinessPath);
diff --git a/src/main/java/org/olat/commons/info/notification/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/commons/info/notification/_i18n/LocalStrings_de.properties
index 278e4dd705d084f6b3cd46acfda38ef52d191525..3f14671a2da3dc2a899294e632134b7faedfc0ab 100644
--- a/src/main/java/org/olat/commons/info/notification/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/commons/info/notification/_i18n/LocalStrings_de.properties
@@ -1,2 +1,3 @@
 #Mon Mar 02 09:54:04 CET 2009
-notification.title=Mitteilungen im Kurs "{0}"
\ No newline at end of file
+notification.title=Mitteilungen im Kurs "{0}"
+notifications.entry=Mitteilung "{0}" eingestellt von {1}
\ No newline at end of file
diff --git a/src/main/java/org/olat/commons/info/notification/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/commons/info/notification/_i18n/LocalStrings_en.properties
index 402bb7c8fa20965b6ea90fca77a2472a70377625..6247b7dea72acd61d57149fe28322500c18602f4 100644
--- a/src/main/java/org/olat/commons/info/notification/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/commons/info/notification/_i18n/LocalStrings_en.properties
@@ -1,2 +1,3 @@
 #Wed Jan 05 12:23:37 CET 2011
 notification.title=Notifications in course "{0}"
+notifications.entry=Message "{0}" added by {1}
diff --git a/src/main/java/org/olat/core/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/core/_i18n/LocalStrings_it.properties
index 83101b248b23506cb92cc4798e167e6f34423783..2813d752ef2cc38984f9082523620086f67641a6 100644
--- a/src/main/java/org/olat/core/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/core/_i18n/LocalStrings_it.properties
@@ -1,4 +1,4 @@
-#Mon Oct 29 20:05:26 CET 2012
+#Thu Jun 16 17:25:24 CEST 2016
 alert=Selezioni almeno un oggetto per l'azione desiderata, p.f.
 back=Indietro
 calendar.choose=Selezioni una data nel calendario mini
@@ -11,14 +11,19 @@ confirmation.yes.toolHelp=S\u00EC
 contact=Contatto
 delete=Eliminare
 edit=Editare
+enabled=Abilitato
 error.header=Errore
 error.jpbwrapper.renderfailed=Il componente non pu\u00F2 pi\u00F9 essere visualizzato. Richiami il componente, p.f.
 error.noformpostdata=Attenzione\! Un problema con il Suo browser ha impedito il caricamento di tutti i dati. Prema il pulsante "Torna indietro" e riprovi.
+error.post.method.mandatory=Usare un browser
 expand=Ingrandire
+export=Esporta
+extsearch=Ricerca avanzata
 finish=Concludere
 form.checkall=Selezionare tutti
 form.date.datevalid=La data deve essere valida.
 form.dirty=Attenzione\! Alcuni dati non sono stati salvati. Le modifiche andranno perse nel caso Lei clicchi OK.
+form.error.nointeger=Numero non valido. Inserire un numero intero.
 form.general.error=Si sono verificati errori d'immissione. Segua le indicazioni relative alle caselle, p.f.
 form.legende.mandatory=<i>Compili questa casella, p.f.</i>
 form.legende.wikiMarkup=<i>Questa casella permette immissioni formattate con Wiki markup</i> </br >*<b>bold</b>*<br>_<i>italic</i>_<br>* Liste elementi
@@ -26,21 +31,27 @@ form.mandatory.hover=Questa casella deve essere compilata.
 form.uncheckall=Eliminare selezione
 form.wiki.hover=Formattabile con sintassi Wiki
 help=Aiuto
+help.manual=Manuale
+help.tooltip.link=Per ulteriori informazioni cliccare su {0}
 info.header=Informazione
 info.saved=Le Sue indicazioni sono state salvate.
 input.toolong=La Sua entrata \u00E8 troppo estesa.
 logout=Log out
 module.change.warning=Per attivare i suoi cambiamenti OpenOLAT deve essere riavviato.
+new=nuovo
 new.form.mandatory=Questa casella non pu\u00F2 rimanere vuota.
 next=Avanti
 no=No
+off=spento
 ok=OK
+on=acceso
 opfailed=Operazione fallita
 opsuccess=Operazione riuscita
 page.appname=OpenOLAT
 page.title=infinite learning
 placeholder={0}
 print=Stampare
+quick.search=Ricerca rapida
 rating.1.1=S\u00EC
 rating.2.1=Non bene
 rating.2.2=Bene
@@ -57,11 +68,14 @@ rating.5.3=$\:rating.2.2
 rating.5.4=$\:rating.4.4
 rating.5.5=Ottimo
 rating.explanation=Clicchi per valutare
+reset=Azzerare
 save=Salvare
+save.close=Salva e chiudi
 savesas=Salvare come
 search=Cercare
 select=Selezionare
-
+server.no.response=L'azione richiesta non pu\u00F2 essere eseguita poich\u00E9 il server non risponde o \u00E8 sovraccarico. Si prega di eseguire nuovamente l'azione o di ricaricare la pagina.
+server.no.response.title=Errore di comunicazione
 start=Avviare
 submit=Salvare
 table.action=Azione
@@ -72,11 +86,14 @@ table.entries=Entrate
 table.entries.dative=Entrate
 table.entry=entrata/e
 table.forward=Avanti
+table.header.choice=Selezionare
+table.sEmptyTable=Nessun dato presente in tabella
+table.sInfo=Visualizzati da _START_ a _END_ di _TOTAL_ voci
 table.showall=Mostrare tutto
 table.showpages=Pagine
 this.language.in.english=Italian
 this.language.translated=Italiano
-this.language.translator.names=Giovanni Nicoli
+this.language.translator.names=Giovanni Nicoli, Lorenzo Maurizi
 tomcat.options.restart=Riavviare ora
 tomcat.options.restartonidle=Riavviare non appena l'ultimo utente \u00E8 disconnesso
 toolbox.actions=Azioni
diff --git a/src/main/java/org/olat/core/commons/chiefcontrollers/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/core/commons/chiefcontrollers/_i18n/LocalStrings_pt_BR.properties
index a9df84e511ecd76f9189d46971bdda4a965c50bd..90e5dd70a5a94643b9370c65ece0c14d5aabc3eb 100644
--- a/src/main/java/org/olat/core/commons/chiefcontrollers/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/core/commons/chiefcontrollers/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Fri Jul 10 15:14:51 CEST 2015
+#Wed Jun 15 21:42:23 CEST 2016
 AssessmentManager=Ferramenta de avalia\u00E7\u00E3o
 BusinessGroup=Grupo de neg\u00F3cios
 CalendarManager=Calend\u00E1rio
@@ -29,6 +29,7 @@ FileResource.SHAREDFOLDER=Pasta de recursos
 FileResource.SOUND=Som
 FileResource.SURVEY=Pesquisa
 FileResource.TEST=Teste
+FileResource.VIDEO=V\u00EDdeo
 FileResource.WIKI=Wiki
 FileResource.XLS=Excel
 FolderModule=Pasta
diff --git a/src/main/java/org/olat/core/commons/controllers/filechooser/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/core/commons/controllers/filechooser/_i18n/LocalStrings_it.properties
index 885f3c7f04a284a1d7dedf02407d901e2e2a5cf7..4ea7e0b609c2780b58d6181bb28df6533fb5a5a5 100644
--- a/src/main/java/org/olat/core/commons/controllers/filechooser/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/core/commons/controllers/filechooser/_i18n/LocalStrings_it.properties
@@ -1,7 +1,28 @@
-#Fri Sep 03 11:22:36 CEST 2010
+#Thu Jun 16 17:03:57 CEST 2016
+button.create=Creare
+calloutTrigerLink.select.site=Selezionare una pagina
+calloutTriggerLink=Scegliere / creare / caricare un file
+calloutTriggerLink.replace=Sostituire la pagina
+chooseLink=Scegliere un file
+command.create=Creare pagina e aprire nell'editore
+command.edit=Aprire la pagina nell'editore
+command.preview.label=Scegliere un file HTML
+createLink=Creare un file
+error.deleted=Il file configurato non esiste. Creare di nuovo il file o selezionare un altro file.
+error.name.empty=Inserire un nome per il file da creare
 filechooser.select.internallink.title=Selezionare un link interno
 filechooser.select.title=Selezionare un file esistente
 filechooser.tree.error.only.leafs=Il catalogo {0} non pu\u00F2 essere selezionato perch\u00E9 non \u00E8 un file. Selezioni un altro file, p.f.
 filechooser.tree.select.intro=Scelga un elemento nella struttura e proceda cliccando il pulsante per selezionare.
 filechooser.tree.select.title=Selezionare un file
 filechooser.upload.title=Caricare un file
+filecreator.filename=Nome del file
+filecreator.filename.placeholder=Inserire qui il nome del file, ad esempio mio_file.html
+filecreator.text.newfile=Creare una nuova pagina HTML
+flexi.form.file=File
+flexi.form.filetobig=File troppo grande
+flexi.form.mustbefilled=obbligatorio
+no.file.chosen=Nessun file selezionato
+uploadLink=Caricare file
+warning.already.exists=Vuoi creare una nuova cartella "{0}"?
+warning.already.exists.title=La cartella "{0}" \u00E8 gi\u00E0 esistente.
diff --git a/src/main/java/org/olat/core/commons/controllers/impressum/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/core/commons/controllers/impressum/_i18n/LocalStrings_it.properties
index e801334d59017a68fe7d6aba0ec863b342994480..655da34c369f55299fc645fe0ec08f8f5b405e42 100644
--- a/src/main/java/org/olat/core/commons/controllers/impressum/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/core/commons/controllers/impressum/_i18n/LocalStrings_it.properties
@@ -1,9 +1,22 @@
-#Mon Oct 29 20:50:20 CET 2012
+#Thu Jun 16 17:07:37 CEST 2016
 ContactController.menu.title=Contatto
+ContactController.menu.title.alt=Contatto
 ImpressumController.menu.title=Note legali
+ImpressumController.menu.title.alt=$\:menu.impressum
 TermsOfUseController.menu.title=Termini di utilizzo
 TermsOfUseController.menu.title.alt=Termini di utilizzo
+config.hint=Qui \u00E8 possibile attivare o disattivare la pagina delle note legali, scegliere la posizione e cambiarne il testo.
 contact.to=Segreteria
 contactform.intro=Modulo di contatto per richieste generali.
 contactform.title=Contatto
+enable=Attivato
+enable.impressum=Abilitare note legali
+impressum.file=Note legali in
 main.menu.title=Note legali
+main.menu.title.alt=$\:menu.impressum
+menu.impressum=Note legali
+menu.impressum.alt=$\:menu.impressum
+position=Posizione
+position.footer=Pi\u00E8 di pagina
+position.top=In testa
+termofuse.file=Termini di utilizzo
diff --git a/src/main/java/org/olat/core/commons/controllers/resume/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/core/commons/controllers/resume/_i18n/LocalStrings_it.properties
index 068d6251db9241d28b16a9b7425b5bf910755322..00af1b165775b7f6e70b4600aed86284bdec41c4 100644
--- a/src/main/java/org/olat/core/commons/controllers/resume/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/core/commons/controllers/resume/_i18n/LocalStrings_it.properties
@@ -1,5 +1,6 @@
-#Mon Oct 29 20:07:30 CET 2012
+#Thu Jun 16 17:07:53 CEST 2016
 askagain.label=Non chiedere pi\u00F9.
 resume=Vuole ripristinare la sua ultima sessione?
 resume.button=S\u00EC
 resume.button.cancel=No
+resume.button.landing=Pagina di destinazione
diff --git a/src/main/java/org/olat/core/commons/modules/bc/meta/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/core/commons/modules/bc/meta/_i18n/LocalStrings_pt_BR.properties
index d148683c7d598ddee1060c8f6a2468fd4845e3ca..03bac570638ebc212afd648ee6c160d81c9e9a8c 100644
--- a/src/main/java/org/olat/core/commons/modules/bc/meta/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/core/commons/modules/bc/meta/_i18n/LocalStrings_pt_BR.properties
@@ -1,7 +1,8 @@
-#Mon Feb 08 20:06:16 CET 2016
+#Wed Jun 15 21:45:17 CEST 2016
 cfile.name.notvalid=$org.olat.core.commons.modules.bc\:cfile.name.notvalid
 external.url=Link externo para este recurso
 file.name.notvalid=Por favor traduzir\! O nome do arquivo n\u00E3o \u00E9 v\u00E1lido, por favor, remova quaisquer caracteres inv\u00E1lidos\! Os caracteres inv\u00E1lidos\: non Latin-1, path char, \:, etc...
+folder.name.notvalid=Este nome de pasta cont\u00E9m caracteres inv\u00E1lidos. Por favor, remova todos os caracteres especiais\: como /,\:, etc.
 mf.author=Criado por
 mf.cancel=Cancelar
 mf.city=Localiza\u00E7\u00E3o
@@ -14,6 +15,7 @@ mf.error.filename.exists=Um objeto com esse nome j\u00E1 existe.
 mf.error.filename.invalidchars=O nome do objeto cont\u00E9m caracteres inv\u00E1lidos.
 mf.file=Arquivo
 mf.filename=Nome do arquivo
+mf.filename.warning=<I class \="o_icon o_icon_warn"> </i> Este arquivo cont\u00E9m caracteres inv\u00E1lidos que foram removidos.
 mf.header=Meta dados arquivo/pasta
 mf.language=Idioma
 mf.lastModified=\u00DAltima modifica\u00E7\u00E3o\:
diff --git a/src/main/java/org/olat/core/commons/services/image/ImageHelperBean.java b/src/main/java/org/olat/core/commons/services/image/ImageHelperBean.java
index b162ac476f767ca634d6219bd55efa1ba845b011..a06ed45abd3128cac2a80094bebb565f0d8c8443 100644
--- a/src/main/java/org/olat/core/commons/services/image/ImageHelperBean.java
+++ b/src/main/java/org/olat/core/commons/services/image/ImageHelperBean.java
@@ -49,6 +49,11 @@ public class ImageHelperBean implements ImageService {
 		return imageHelperServiceProvider.getSize(image, suffix);
 	}
 
+	@Override
+	public Size getSize(File image, String suffix) {
+		return imageHelperServiceProvider.getSize(image, suffix);
+	}
+
 	@Override
 	public boolean cropImage(File image, File cropedImage, Crop cropSelection) {
 		return imageHelperServiceProvider.cropImage(image, cropedImage, cropSelection);
diff --git a/src/main/java/org/olat/core/commons/services/image/ImageHelperSPI.java b/src/main/java/org/olat/core/commons/services/image/ImageHelperSPI.java
index 720a302870a6c939d9c2b369059980e18b86ce72..05512aa927a318e5d6b6c920e5c4cb348d040a6e 100644
--- a/src/main/java/org/olat/core/commons/services/image/ImageHelperSPI.java
+++ b/src/main/java/org/olat/core/commons/services/image/ImageHelperSPI.java
@@ -43,6 +43,8 @@ public interface ImageHelperSPI {
 	
 	public Size getSize(VFSLeaf image, String suffix);
 	
+	public Size getSize(File image, String suffix);
+	
 	public boolean cropImage(File image, File cropedImage, Crop cropSelection);
 
 	public Size scaleImage(File image, String extension, File scaledImage, int maxWidth, int maxHeight, boolean fill);
diff --git a/src/main/java/org/olat/core/commons/services/image/ImageService.java b/src/main/java/org/olat/core/commons/services/image/ImageService.java
index 093bf67a9c5ee9fa09cd2b9eb905b022d194d676..c514f6daeff98d28d0bea07144420d0a52b1468b 100644
--- a/src/main/java/org/olat/core/commons/services/image/ImageService.java
+++ b/src/main/java/org/olat/core/commons/services/image/ImageService.java
@@ -39,6 +39,8 @@ public interface ImageService {
 
 	public Size getSize(VFSLeaf image, String suffix);
 	
+	public Size getSize(File image, String suffix);
+	
 	public boolean cropImage(File image, File cropedImage, Crop cropSelection);
 
 	public Size scaleImage(File image, String extension, File scaledImage, int maxWidth, int maxHeight, boolean fill);
diff --git a/src/main/java/org/olat/core/commons/services/image/spi/AbstractImageHelper.java b/src/main/java/org/olat/core/commons/services/image/spi/AbstractImageHelper.java
index 9ad081e0efef85d1a0bca2e27b476d4d6b5a41d1..9d5a05ff090b4ddc661f6d89a44d2416478464f2 100644
--- a/src/main/java/org/olat/core/commons/services/image/spi/AbstractImageHelper.java
+++ b/src/main/java/org/olat/core/commons/services/image/spi/AbstractImageHelper.java
@@ -20,6 +20,8 @@
 package org.olat.core.commons.services.image.spi;
 
 import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Iterator;
@@ -59,6 +61,17 @@ public abstract class AbstractImageHelper implements ImageHelperSPI {
 		return size;
 	}
 	
+	public Size getSize(File image, String suffix) {
+		Size size = null;
+		if(StringHelper.containsNonWhitespace(suffix)) {
+			size = getImageSize(image, suffix);
+		}
+		if(size == null) {
+			size = getImageSizeFallback(image);
+		}
+		return size;
+	}
+	
 	private Size getImageSizeFallback(VFSLeaf media) {
 		InputStream fileStream = null;
 		BufferedImage imageSrc = null;
@@ -117,5 +130,51 @@ public abstract class AbstractImageHelper implements ImageHelperSPI {
 		}
 		return result;
 	}
+	
+	private Size getImageSize(File media, String suffix) {
+		Size result = null;
+		Iterator<ImageReader> iter = ImageIO.getImageReadersBySuffix(suffix);
+		if (iter.hasNext()) {
+			ImageReader reader = iter.next();
+			try (InputStream mediaStream = new FileInputStream(media);
+				 ImageInputStream stream = new MemoryCacheImageInputStream(mediaStream)){
+				reader.setInput(stream);
+				int readerMinIndex = reader.getMinIndex();
+				int width = reader.getWidth(readerMinIndex);
+				int height = reader.getHeight(readerMinIndex);
+				result = new Size(width, height, 0, 0, false);
+
+			} catch (IOException e) {
+				log.error(e.getMessage());
+			} finally {
+				reader.dispose();
+			}
+		} else {
+			log.error("No reader found for given format: " + suffix);
+		}
+		return result;
+	}
+	
+	private Size getImageSizeFallback(File media) {
+		BufferedImage imageSrc = null;
+		try (InputStream fileStream = new FileInputStream(media)) {
+			imageSrc = ImageIO.read(fileStream);
+			if (imageSrc == null) {
+				// happens with faulty Java implementation, e.g. on MacOSX
+				return null;
+			}
+			double realWidth = imageSrc.getWidth();
+			double realHeight = imageSrc.getHeight();
+			return new Size((int)realWidth, (int)realHeight, 0, 0, false);
+		} catch (IOException e) {
+			// log error, don't do anything else
+			log.error("Problem while setting image size to fit for resource::" + media, e);
+			return null;
+		} finally {
+			if (imageSrc != null) {
+				imageSrc.flush();
+			}
+		}
+	}
 
 }
diff --git a/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java b/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java
index 2fd0b29b21970697f0ac334733aa086308f5802a..cf07db61650bfa40996077d8d8c4b852c2fba154 100644
--- a/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java
+++ b/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java
@@ -401,7 +401,7 @@ public class NotificationsManagerImpl extends NotificationsManager implements Us
 					//no notification older than a month
 					latestEmail = defaultCompareDate;
 				}
-				subsitem = createSubscriptionItem(sub, locale, SubscriptionInfo.MIME_PLAIN, SubscriptionInfo.MIME_PLAIN, latestEmail);
+				subsitem = createSubscriptionItem(sub, locale, SubscriptionInfo.MIME_HTML, SubscriptionInfo.MIME_HTML, latestEmail);
 			}	else if(latestEmail != null && latestEmail.after(compareDate)) {
 				//already send an email within the user's settings interval
 				//veto = true;
@@ -498,7 +498,7 @@ public class NotificationsManagerImpl extends NotificationsManager implements Us
 	
 	@Override
 	public boolean sendMailToUserAndUpdateSubscriber(Identity curIdent, List<SubscriptionItem> items, Translator translator, List<Subscriber> subscribersToUpdate) {
-		boolean sentOk = sendEmail(curIdent, translator.translate("rss.title", new String[] { NotificationHelper.getFormatedName(curIdent) }), items);
+		boolean sentOk = sendEmail(curIdent, translator, items);
 		// save latest email sent date for the subscription just emailed
 		// do this only if the mail was successfully sent
 		if (sentOk) {
@@ -529,28 +529,55 @@ public class NotificationsManagerImpl extends NotificationsManager implements Us
 		}
 	}
 	
-	private boolean sendEmail(Identity to, String title, List<SubscriptionItem> subItems) {
-		StringBuilder plaintext = new StringBuilder();
+	private boolean sendEmail(Identity to, Translator translator, List<SubscriptionItem> subItems) {
+		String title = translator.translate("rss.title", new String[] { NotificationHelper.getFormatedName(to) });
+		StringBuilder htmlText = new StringBuilder();
+		htmlText.append("<style>");
+		htmlText.append(".o_m_sub h4 {margin: 0 0 10px 0;}");
+		htmlText.append(".o_m_sub ul {padding: 0 0 5px 20px; margin: 0;}");
+		htmlText.append(".o_m_sub ul li {padding: 0; margin: 1px 0;}");
+		htmlText.append(".o_m_go {padding: 5px 0 0 0}");
+		htmlText.append(".o_date {font-size: 90%; color: #888}");		
+		htmlText.append("</style>");
+		
 		for (Iterator<SubscriptionItem> it_subs = subItems.iterator(); it_subs.hasNext();) {
 			SubscriptionItem subitem = it_subs.next();
-			plaintext.append(subitem.getTitle());
-			if(StringHelper.containsNonWhitespace(subitem.getLink())) {
-				plaintext.append("\n");
-				plaintext.append(subitem.getLink());
+			// o_m_wrap class for overriding styles in master mail template		
+			htmlText.append("<div class='o_m_wrap'>");	 
+			// add background here for gmail as they ignore classes. 
+			htmlText.append("<div class='o_m_sub' style='background: #FAFAFA; padding: 5px 5px; margin: 10px 0;'>");			
+			// 1: title
+			htmlText.append(subitem.getTitle());				
+			htmlText.append("\n");
+			// 2: content
+			String desc = subitem.getDescription();
+			if(StringHelper.containsNonWhitespace(desc)) {
+				htmlText.append(desc);
 			}
-			plaintext.append("\n");
-			if(StringHelper.containsNonWhitespace(subitem.getDescription())) {
-				plaintext.append(subitem.getDescription());
+			// 3: goto-link
+			String link = subitem.getLink();
+			if(StringHelper.containsNonWhitespace(link)) {
+				htmlText.append("<div class='o_m_go'><a href=\"").append(link).append("\">");
+				SubscriptionInfo subscriptionInfo = subitem.getSubsInfo();
+				if (subscriptionInfo != null) {
+					String innerType = subscriptionInfo.getType();
+					String typeName = NewControllerFactory.translateResourceableTypeName(innerType, translator.getLocale());
+					String open = translator.translate("resource.open", new String[] { typeName });
+					htmlText.append(open);
+					htmlText.append(" &raquo;</a></div>");
+				}
 			}
-			plaintext.append("\n\n");
+
+			htmlText.append("\n");
+			htmlText.append("</div></div>");
 		}
 
 		MailerResult result = null;
 		try {
 			MailBundle bundle = new MailBundle();
 			bundle.setToId(to);
-			bundle.setContent(title, plaintext.toString());
-			result = CoreSpringFactory.getImpl(MailManager.class).sendExternMessage(bundle, null, false);
+			bundle.setContent(title, htmlText.toString());
+			result = CoreSpringFactory.getImpl(MailManager.class).sendExternMessage(bundle, null, true);
 		} catch (Exception e) {
 			// FXOLAT-294 :: sending the mail will throw nullpointer exception if To-Identity has no
 			// valid email-address!, catch it...
@@ -1140,7 +1167,9 @@ public class NotificationsManagerImpl extends NotificationsManager implements Us
 		}
 		
 		String description = subsInfo.getSpecificInfo(mimeTypeContent, locale);
-		return new SubscriptionItem(title, itemLink, description);
+		SubscriptionItem subscriptionItem =  new SubscriptionItem(title, itemLink, description);
+		subscriptionItem.setSubsInfo(subsInfo);
+		return subscriptionItem;
 	}
 	
 	/**
@@ -1152,19 +1181,16 @@ public class NotificationsManagerImpl extends NotificationsManager implements Us
 	 */
 	private String getFormatedTitle(SubscriptionInfo subsInfo, Subscriber subscriber, Locale locale, String mimeType){
 		Publisher pub = subscriber.getPublisher();
-		String innerType = pub.getType();
-		String typeName = NewControllerFactory.translateResourceableTypeName(innerType, locale);
 		StringBuilder titleSb = new StringBuilder();
-		titleSb.append(typeName);
 		
 		String title = subsInfo.getTitle(mimeType);
 		if (StringHelper.containsNonWhitespace(title)) {
-			titleSb.append(": ").append(title);
+			titleSb.append(title);
 		} else {
 			NotificationsHandler notifHandler = getNotificationsHandler(pub);
 			String titleInfo = notifHandler.createTitleInfo(subscriber, locale);
 			if (StringHelper.containsNonWhitespace(titleInfo)) {
-				titleSb.append(": ").append(titleInfo);
+				titleSb.append(titleInfo);
 			}
 		}
 		
diff --git a/src/main/java/org/olat/core/commons/services/notifications/model/LinkItemPart.java b/src/main/java/org/olat/core/commons/services/notifications/model/LinkItemPart.java
deleted file mode 100644
index c2ac42988196c010e87b9f5168099c979c4b7b8e..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/core/commons/services/notifications/model/LinkItemPart.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <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
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <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>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-package org.olat.core.commons.services.notifications.model;
-
-/**
- * Description:<br>
- * TODO: rhaag Class Description for LinkItemPart
- * 
- * <P>
- * Initial Date:  08.12.2009 <br>
- * @author rhaag
- */
-public class LinkItemPart extends SubscriptionInfoItem {
-
-	public LinkItemPart(String content, String iconCssClass) {
-		super(content, iconCssClass);
-	}
-
-	/**
-	 * @see org.olat.core.commons.services.notifications.model.SubscriptionInfoItem#getHTMLContent()
-	 */
-	@Override
-	String getHTMLContent() {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-}
diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationNewsController.java b/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationNewsController.java
index 0d89cd9092b0281678ba88832f97f09a2a56ac4b..05a8e28b1ae2efea20548df3db74e7a64ef72c35 100644
--- a/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationNewsController.java
+++ b/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationNewsController.java
@@ -161,8 +161,8 @@ public class NotificationNewsController extends BasicController implements
 			for (Subscriber subscriber : subsInfoMap.keySet()) {
 				subsList.add(subscriber);
 				SubscriptionItem item = man.createSubscriptionItem(subscriber,
-						getLocale(), SubscriptionInfo.MIME_PLAIN,
-						SubscriptionInfo.MIME_PLAIN, compareDate);
+						getLocale(), SubscriptionInfo.MIME_HTML,
+						SubscriptionInfo.MIME_HTML, compareDate);
 				if (item != null) {
 					infoList.add(item);
 				}
diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_da.properties b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_da.properties
index 6d9344c74e9188f05a3e1b45c4d9596c5db9b3d0..b567d3a5c84a1e0fd5c156d40fe5f1f2622bd0d5 100644
--- a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_da.properties
+++ b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_da.properties
@@ -19,7 +19,7 @@ rss.description=Personlig besked om nyheder omkring OLAT via RSS News Feed for b
 rss.notifications.title={0}\: {1} in {2} {3}
 rss.olat.description=Dette link vil bringe dig til OLAT.
 rss.olat.title=Velkommen {0} til OLAT
-rss.title=OLAT nyheder for {0}
+rss.title=OpenOLAT nyheder for {0}
 subs.deleted=Kilden for beskederne er slettet\!
 subs.ok=Gyldig
 warn.nolaunch=Den valgte ressource kan ikke afvikles mere.
diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_de.properties
index e4dd2f6e414fee18ec56ed4e8ed6462e5851fb7c..d27951d898c2e5bfa5402b7837987f7648469fe3 100644
--- a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_de.properties
@@ -1,34 +1,7 @@
 #Mon Mar 02 09:54:04 CET 2009
 actions.title=\u00C4nderungen
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 command.subscribe=Abonnieren
 command.unsubscribe=Abbestellen
-
 subscription.listitem.dateprefix=am {0}
 user.unknown=unbekannt
 user.formatted={0} {1}
@@ -72,7 +45,7 @@ rss.description=Benachrichtigung \u00FCber Neuigkeiten in OLAT via RSS-News-Feed
 rss.notifications.title={0}\: {1} in {2} {3}
 rss.olat.description=Mit diesem Link gelangen Sie zu OLAT. 
 rss.olat.title=Herzlich Willkommen {0} bei OLAT\!
-rss.title=OLAT-Neuigkeiten f\u00FCr {0}
+rss.title=OpenOLAT-Neuigkeiten f\u00FCr {0}
 resource.open = {0} öffnen
 subs.deleted=Quelle der Benachrichtigung gel\u00F6scht\!
 subs.ok=G\u00FCltig
diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_en.properties
index 4f833807b6643e7869b6aa920de7e8f60378e989..890f5e14f9da2548449d16a52a47ca9b2327e032 100644
--- a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_en.properties
@@ -73,7 +73,7 @@ rss.description=Notification about news regarding OLAT via RSS News Feed for {0}
 rss.notifications.title={0}\: {1} in {2} {3}
 rss.olat.description=This link will bring you to OLAT.
 rss.olat.title=Welcome {0} to OLAT\!
-rss.title=OLAT news for {0}
+rss.title=OpenOLAT news for {0}
 subs.deleted=Source of notification deleted\!
 subs.ok=Valid
 subscriptions.desc=Please select one subscription from the list to get to its resource. Delete your subscription if you do no longer wish to receive news. However, it is possible to subscribe again whenever you want to.
diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_fr.properties
index a081e51f6e6e2e093d443dfd6385b1b24b92e4ab..004f00d119d13383597ffe53eb9816fc3ab4826e 100644
--- a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_fr.properties
@@ -1,32 +1,6 @@
-#Fri Jul 18 14:07:11 CEST 2014
+#Wed Jun 15 21:54:24 CEST 2016
 action.choose=S\u00E9lectionner
 actions.title=Modifications
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 command.subscribe=S'abonner
 command.unsubscribe=Se d\u00E9sabonner
 confirm.delete=Voulez-vous vraiment supprimer cette notification abonn\u00E9s?
@@ -35,7 +9,6 @@ email.ok=Les nouvelles ont \u00E9t\u00E9 envoy\u00E9es par e-mail.
 emailLink=Envoyer les nouvelles par e-mail
 error.date=Format de date invalide (dd.mm.yyyy)
 error.publisherdeleted=La ressource a \u00E9t\u00E9 supprim\u00E9e et ne peut plus \u00EAtre affich\u00E9e.
-
 info.notification.deleted=La notification abonn\u00E9e a \u00E9t\u00E9 effac\u00E9e
 news.desc=La liste suivante montre la derni\u00E8re modification dans les ressources auxquelles vous \u00EAtes abonn\u00E9. Vous pouvez choisir la p\u00E9riode que vous souhaitez afficher.
 news.in=trouv\u00E9 dans
@@ -55,6 +28,9 @@ notificationsPortlet.single.news.in=1 modification dans {0}
 notificationsPortlet.title=Mes notifications
 overview.column.action=Action
 overview.column.action.cellvalue=Effacer
+overview.column.creationDate=Cr\u00E9\u00E9 le
+overview.column.key=ID
+overview.column.lastEmail=Dernier courriel
 overview.column.resname=Sorte
 overview.column.subidentifier=Titre
 overview.column.type=Type
diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_lt.properties b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_lt.properties
index 42112f9216e193bb73e50c5ca3c0674bbd671b0b..c46a473a4a8d0719f2cb81f76307da2cb2a5f1ef 100644
--- a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_lt.properties
+++ b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_lt.properties
@@ -41,7 +41,7 @@ rss.description=Asmeninis prane\u0161imas apie naujien\u0173 per  OLAT Naujien\u
 rss.notifications.title={0}\: {1} \u012F {2} {3}
 rss.olat.description=\u0160i nuoroda jus nukels \u012F OLAT
 rss.olat.title=Sveiki {0} atvyk\u0119 \u012F OLAT
-rss.title=OLAT naujienos {0}
+rss.title=OpenOLAT naujienos {0}
 subs.deleted=I\u0161trintas informavimo \u0161altinis\!
 subs.ok=Galiojantis
 warn.nolaunch=Pa\u017Eym\u0117tas kursas negali b\u016Bti daugiau paleistas
diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_nl_NL.properties
index 8cf3ce05a4cdf058d95060d71ff57827bbc8d513..df1f803fe72ebb5eab19e87e12833c09cba478f2 100644
--- a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_nl_NL.properties
+++ b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_nl_NL.properties
@@ -69,7 +69,7 @@ rss.description=Berichten over nieuwtjes in OLAT via RSS News Feed voor {0}.
 rss.notifications.title={0}\: {1} in {2} {3}
 rss.olat.description=Deze link brengt je naar OLAT.
 rss.olat.title=Welkom {0} bij OLAT\!
-rss.title=OLAT nieuwtjes voor {0}
+rss.title=OpenOLAT nieuwtjes voor {0}
 subs.deleted=Bron van de berichten gewist\!
 subs.ok=Geldig
 subscriptions.desc=Selecteer een abonnement van de lijst om naar het middel te gaan. Verwijder jouw abonnement als je geen nieuws meer wilt ontvangen. Je kan je altijd opnieuw abonneren.
diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_ru.properties
index 87558a0def57afaa8cc775ba77406facd9280a63..d2d1d1b2f681864ffbbe6a77da7e38692453320f 100644
--- a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_ru.properties
+++ b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_ru.properties
@@ -44,7 +44,7 @@ rss.description=\u041E\u043F\u043E\u0432\u0435\u0449\u0435\u043D\u0438\u0435 \u0
 rss.notifications.title={0}\: {1} \u0432 {2} {3}
 rss.olat.description=\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044F \u044D\u0442\u0443 \u0441\u0441\u044B\u043B\u043A\u0443, \u0412\u044B \u043F\u043E\u043F\u0430\u0434\u0451\u0442\u0435 \u0432 OLAT.
 rss.olat.title={0}, \u0434\u043E\u0431\u0440\u043E \u043F\u043E\u0436\u0430\u043B\u043E\u0432\u0430\u0442\u044C \u0432 OLAT\!
-rss.title=OLAT \u041D\u043E\u0432\u043E\u0441\u0442\u0438 \u0434\u043B\u044F {0}
+rss.title=OpenOLAT \u041D\u043E\u0432\u043E\u0441\u0442\u0438 \u0434\u043B\u044F {0}
 subs.deleted=\u0418\u0441\u0442\u043E\u0447\u043D\u0438\u043A \u043E\u043F\u043E\u0432\u0435\u0449\u0435\u043D\u0438\u044F \u0443\u0434\u0430\u043B\u0451\u043D\!
 subs.ok=\u041E\u041A
 subscriptions.desc=\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0432\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u043E\u0434\u043D\u0443 \u043F\u043E\u0434\u043F\u0438\u0441\u043A\u0443 \u0438\u0437 \u0441\u043F\u0438\u0441\u043A\u0430, \u0447\u0442\u043E\u0431\u044B \u0434\u043E\u0431\u0440\u0430\u0442\u044C\u0441\u044F \u0434\u043E \u0441\u0432\u043E\u0435\u0433\u043E \u0440\u0435\u0441\u0443\u0440\u0441\u0430. \u0423\u0434\u0430\u043B\u0438\u0442\u0435 \u0432\u0430\u0448\u0438 \u043F\u043E\u0434\u043F\u0438\u0441\u043A\u0438, \u0435\u0441\u043B\u0438 \u0432\u044B \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u0445\u043E\u0442\u0438\u0442\u0435 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u043D\u043E\u0432\u043E\u0441\u0442\u0438. \u041E\u0434\u043D\u0430\u043A\u043E, \u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u043F\u043E\u0434\u043F\u0438\u0441\u0430\u0442\u044C\u0441\u044F \u0441\u043D\u043E\u0432\u0430, \u043A\u043E\u0433\u0434\u0430 \u0437\u0430\u0445\u043E\u0442\u0438\u0442\u0435.
diff --git a/src/main/java/org/olat/core/commons/services/taskexecutor/ui/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/core/commons/services/taskexecutor/ui/_i18n/LocalStrings_it.properties
new file mode 100644
index 0000000000000000000000000000000000000000..0992a0e3926edb2997e4cdd8e4b145b137006320
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/taskexecutor/ui/_i18n/LocalStrings_it.properties
@@ -0,0 +1,6 @@
+#Thu Jun 16 17:08:24 CEST 2016
+done=Fine
+edition=Editato
+failed=Errore
+inWork=In corso
+newTask=In attesa
diff --git a/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_it.properties
new file mode 100644
index 0000000000000000000000000000000000000000..5aac261f1e67b3b7e5885fd233a73224330fbd3e
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_it.properties
@@ -0,0 +1,13 @@
+#Thu Jun 16 17:14:05 CEST 2016
+admin.menu.title=WebDAV
+admin.menu.title.alt=Accesso WebDAV
+admin.webdav.description=Attraverso WebDAV \u00E8 possibile collegare e utilizzare le cartelle OpenOLAT sul proprio desktop come se fossero cartelle locali. Abilitare questa caratteristica per renderla disponibile a tutti gli utenti della piattaforma. Consultare l'aiuto contestuale per maggiori informazioni.
+core.webdav=WebDAV
+webdav.digest=Autenticazione Digest per accesso HTTP
+webdav.for.learners.bookmarks=Permette l'accesso ai corsi contrassegnati dagli utenti come preferiti.
+webdav.for.learners.participants=Permette l'accesso ai corsi in cui l'utente \u00E8 partecipante o istruttore.
+webdav.link=Mostra link WebDAV
+webdav.module=Accesso WebDAV
+webdav.on=abilitato
+webdav.prepend.reference=Anteporre la referenza esterna al titolo del corso
+webdav.termsfolders=Raggruppare i corsi per semestre
diff --git a/src/main/java/org/olat/core/util/i18n/devtools/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/core/util/i18n/devtools/_i18n/LocalStrings_it.properties
index 9cd3e6841cd925476d488b738cca52d673d1db0a..cf175e76b86dfd5cd15febfdcd8acfa9f45bee6d 100644
--- a/src/main/java/org/olat/core/util/i18n/devtools/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/core/util/i18n/devtools/_i18n/LocalStrings_it.properties
@@ -1,16 +1,64 @@
-#Mon Aug 23 15:01:16 CEST 2010
+#Thu Jun 16 17:22:50 CEST 2016
 caching.enabled=Il caching \u00E8 attivato. Per utilizzare gli strumenti per sviluppatori occorre disattivare il caching.
 coreasjar=Il framework olatcore \u00E8 caricato come Jar, per cui non \u00E8 possibile modificarlo.
 devtools.title=Strumenti per sviluppatori per traduzioni
+devtools.warning=Il modulo di traduzione i18n deve essere attivato. Configurare la seguente linea nel tuo olat.local.properties\:<br/><br/>is.translation.server\=enabled<br/>i18n.application.src.dir\=${project.build.home.directory}/src/main/java
+menu.i18nDev=Manutenzione i18n
+submitAddKey=Aggiungere una chiave
+submitGetDupKeys=Cercare le chiavi duplicate
+submitGetDupVals=Cercare i valori duplicati
+submitMerge=Fondere
+submitMove=Spostare
+submitMoveKey=Spostare la chiave
+submitRemoveDeleted=Rimuovere chiavi eliminate
+submitRemoveEmpty=Rimuovere chiavi vuote
+submitRemoveKey=Rimuovere la chiave
+submitRemovePackage=Rimuovere il package
+submitRemoveTodo=Rimuovere le chiavi TODO
+submitRenameKey=Rinominare la chiave
+submitRenameLanguage=Rinominare la lingua
+submitSort=Ordinare
+task.add.key=Aggiungere una chiave
+task.add.key.bundle=Bundle
+task.add.key.key=Chiave
+task.add.key.locale=Locale
+task.add.key.value=Valore
 task.delete.key=Cancellare chiave
 task.delete.package=Cancellare pacchetto
 task.find.douplicates=Trovare doppioni
 task.find.unreferenced.keys=Trovare chiavi senza riferimenti
 task.merge.package=Assemblare pacchetti
 task.move.key=Spostare chiave
+task.move.key.key=Chiave
+task.move.key.to.bundle=Spostare la chiave
 task.move.language=Spostare lingua
 task.move.package=Spostare pacchetto
+task.move.package.source=Sorgente
+task.move.package.target=Destinazione
+task.remove.deletedKeys=Rimuovere chiavi eliminate
+task.remove.deletedKeysCheck=Prova
+task.remove.emptyKeys=Rimuovere chiavi vuote
+task.remove.emptyKeysCheck=Prova
+task.remove.key=Rimuovere la chiave
+task.remove.key.bundle=Bundle
+task.remove.key.key=Chiave
+task.remove.key.locale=Locale
+task.remove.package=Rimuovere il package
+task.remove.package.bundle=Bundle
+task.remove.todoKeys=Rimuovere le chiavi TODO
+task.remove.todoKeysCheck=Prova
+task.remove.xKeys=Rimuovere le chiavi X
+task.remove.xKeysCheck=Prova
 task.remove.xkeys=Eliminare chiavi x
 task.rename.key=Rinominare chiave
+task.rename.key.bundle=Bundle
+task.rename.key.orig=Nome della chiave di origine
+task.rename.key.origBundle=Bundle di origine
+task.rename.key.target=Nome della chiave di destinazione
+task.rename.key.targetBundle=Bundle di destinazione
 task.rename.language=Rinominare lingua
+task.rename.language.source=Lingua sorgente
+task.rename.language.target=Lingua di destinazione
+task.sort.check=Prova
+task.sort.keys=Ordina tutte le chiavi
 task.unknown.keys=Mostrare/cancellare chiavi errate
diff --git a/src/main/java/org/olat/core/util/mail/_content/mail_template.html b/src/main/java/org/olat/core/util/mail/_content/mail_template.html
index 0fc2397694d5c30e0e17a56755a7fc3fbb033523..f052cf88a2b8c00c2db5db0d4634c4b93281d3f3 100644
--- a/src/main/java/org/olat/core/util/mail/_content/mail_template.html
+++ b/src/main/java/org/olat/core/util/mail/_content/mail_template.html
@@ -1,4 +1,4 @@
-<body>
+<body style="font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif">
 	<div style="margin: 1em 0 1em 0;">$content</div>
 	<div style="background: #FAFAFA; border: 1px solid #eee; border-radius: 5px; padding: 0 0.5em 0.5em 0.5em; margin: 1em 0 1em 0;">$footer</div>
 </body>
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/util/vfs/VFSManager.java b/src/main/java/org/olat/core/util/vfs/VFSManager.java
index 0049c747f67e10244588c50b52f50e01be6e78a5..bf4db7bd14fa4f6c69d2cafe92b0a0078811074a 100644
--- a/src/main/java/org/olat/core/util/vfs/VFSManager.java
+++ b/src/main/java/org/olat/core/util/vfs/VFSManager.java
@@ -29,6 +29,7 @@ package org.olat.core.util.vfs;
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -758,6 +759,21 @@ public class VFSManager {
 		return false;
 	}
 	
+	/**
+	 * Copy the content of the file in the target leaf.
+	 * @param source A file
+	 * @param target The target leaf
+	 * @return
+	 */
+	public static boolean copyContent(File source, VFSLeaf target) {
+		try(InputStream inStream = new FileInputStream(source)) {
+			return copyContent(inStream, target, true);
+		} catch(IOException ex) {
+			log.error("", ex);
+			return false;
+		}
+	}
+	
 	/**
 	 * Copies the stream to the target leaf.
 	 * 
diff --git a/src/main/java/org/olat/course/certificate/CertificatesManager.java b/src/main/java/org/olat/course/certificate/CertificatesManager.java
index d9d8377ca0caa5fb83ae85d3d5723b7d1b4f253b..2f177e07609c6e476872a3308e8610d11d0b035d 100644
--- a/src/main/java/org/olat/course/certificate/CertificatesManager.java
+++ b/src/main/java/org/olat/course/certificate/CertificatesManager.java
@@ -148,6 +148,14 @@ public interface CertificatesManager {
 	
 	public boolean isCertificationAllowed(Identity identity, RepositoryEntry entry);
 	
+	/**
+	 * Get the next re-certification date or NULL if no recertification possible
+	 * @param certificate An exiting certificate
+	 * @param entry The repository entry of the course
+	 * @return Date representing the next possible recertification date or NULL if no recertification possible at this time
+	 */
+	public Date getDateNextRecertification(Certificate certificate, RepositoryEntry entry);
+	
 	public File previewCertificate(CertificateTemplate template, RepositoryEntry entry, Locale locale);
 
 	public Certificate uploadCertificate(Identity identity, Date creationDate, OLATResource resource, File certificateFile);
diff --git a/src/main/java/org/olat/course/certificate/manager/CertificatePDFFormWorker.java b/src/main/java/org/olat/course/certificate/manager/CertificatePDFFormWorker.java
index e0cc995f86fbe12865bb57b39d42dc25994b38de..6f866c6b426069632af3506a2dd49ad59a1573a6 100644
--- a/src/main/java/org/olat/course/certificate/manager/CertificatePDFFormWorker.java
+++ b/src/main/java/org/olat/course/certificate/manager/CertificatePDFFormWorker.java
@@ -68,6 +68,7 @@ public class CertificatePDFFormWorker {
 
 	private Date dateCertification;
 	private Date dateFirstCertification;
+	private Date dateNextRecertification;
 
 	private final Locale locale;
 	private final UserManager userManager;
@@ -75,7 +76,7 @@ public class CertificatePDFFormWorker {
 
 	public CertificatePDFFormWorker(Identity identity, RepositoryEntry entry,
 			Float score, Boolean passed, Date dateCertification,
-			Date dateFirstCertification, Locale locale,
+			Date dateFirstCertification, Date dateNextRecertification, Locale locale,
 			UserManager userManager, CertificatesManagerImpl certificatesManager) {
 		this.entry = entry;
 		this.score = score;
@@ -84,6 +85,7 @@ public class CertificatePDFFormWorker {
 		this.identity = identity;
 		this.dateCertification = dateCertification;
 		this.dateFirstCertification = dateFirstCertification;
+		this.dateNextRecertification = dateNextRecertification;
 		this.userManager = userManager;
 		this.certificatesManager = certificatesManager;
 	}
@@ -201,10 +203,11 @@ public class CertificatePDFFormWorker {
 		if(dateCertification == null) {
 			fillField("dateCertification", "", acroForm);
 		} else {
-			String formattedDateCertification= format.formatDate(dateCertification);
+			String formattedDateCertification = format.formatDate(dateCertification);
 			fillField("dateCertification", formattedDateCertification, acroForm);
-			String formattedDateCertificationLong= format.formatDateLong(dateCertification);
-			fillField("dateCertificationLong", formattedDateCertificationLong, acroForm);		}
+			String formattedDateCertificationLong = format.formatDateLong(dateCertification);
+			fillField("dateCertificationLong", formattedDateCertificationLong, acroForm);		
+		}
 		
 		if(dateFirstCertification == null) {
 			fillField("dateFirstCertification", "", acroForm);
@@ -212,7 +215,18 @@ public class CertificatePDFFormWorker {
 			String formattedDateFirstCertification = format.formatDate(dateFirstCertification);
 			fillField("dateFirstCertification", formattedDateFirstCertification, acroForm);
 			String formattedDateFirstCertificationLong = format.formatDate(dateFirstCertification);
-			fillField("dateFirstCertificationLong", formattedDateFirstCertificationLong, acroForm);		}
+			fillField("dateFirstCertificationLong", formattedDateFirstCertificationLong, acroForm);		
+		}
+		
+		if(dateNextRecertification == null) {
+			fillField("dateNextRecertification", "", acroForm);
+		} else {
+			String formattedDateNextRecertification = format.formatDate(dateNextRecertification);
+			fillField("dateNextRecertification", formattedDateNextRecertification, acroForm);
+			String formattedDateNextRecertificationLong = format.formatDateLong(dateNextRecertification);
+			fillField("dateNextRecertificationLong", formattedDateNextRecertificationLong, acroForm);
+		}		
+
 	}
 	
 	private void fillAssessmentInfos(PDAcroForm acroForm) throws IOException {
diff --git a/src/main/java/org/olat/course/certificate/manager/CertificatePhantomWorker.java b/src/main/java/org/olat/course/certificate/manager/CertificatePhantomWorker.java
index 2c938cbeca470f39fdc23f62896cb9eebe5a5f03..d8fc9696503064f188c211aaab894177e291c4d3 100644
--- a/src/main/java/org/olat/course/certificate/manager/CertificatePhantomWorker.java
+++ b/src/main/java/org/olat/course/certificate/manager/CertificatePhantomWorker.java
@@ -68,6 +68,7 @@ public class CertificatePhantomWorker {
 
 	private Date dateCertification;
 	private Date dateFirstCertification;
+	private Date dateNextRecertification;
 
 	private final Locale locale;
 	private final UserManager userManager;
@@ -75,7 +76,7 @@ public class CertificatePhantomWorker {
 
 	public CertificatePhantomWorker(Identity identity, RepositoryEntry entry,
 			Float score, Boolean passed, Date dateCertification,
-			Date dateFirstCertification, Locale locale,
+			Date dateFirstCertification, Date nextRecertificationDate, Locale locale,
 			UserManager userManager, CertificatesManagerImpl certificatesManager) {
 		this.entry = entry;
 		this.score = score;
@@ -84,6 +85,7 @@ public class CertificatePhantomWorker {
 		this.identity = identity;
 		this.dateCertification = dateCertification;
 		this.dateFirstCertification = dateFirstCertification;
+		this.dateNextRecertification = nextRecertificationDate;
 		this.userManager = userManager;
 		this.certificatesManager = certificatesManager;
 	}
@@ -215,9 +217,9 @@ public class CertificatePhantomWorker {
 		if(dateCertification == null) {
 			context.put("dateCertification", "");
 		} else {
-			String formattedDateCertification= format.formatDate(dateCertification);
+			String formattedDateCertification = format.formatDate(dateCertification);
 			context.put("dateCertification", formattedDateCertification);
-			String formattedDateCertificationLong= format.formatDateLong(dateCertification);
+			String formattedDateCertificationLong = format.formatDateLong(dateCertification);
 			context.put("dateCertificationLong", formattedDateCertificationLong);
 			context.put("dateCertificationRaw", dateCertification);
 		}
@@ -231,6 +233,16 @@ public class CertificatePhantomWorker {
 			context.put("dateFirstCertificationLong", formattedDateFirstCertificationLong);
 			context.put("dateFirstCertificationRaw", dateFirstCertification);
 		}
+
+		if(dateNextRecertification == null) {
+			context.put("dateNextRecertification", "");
+		} else {
+			String formattedDateNextRecertification = format.formatDate(dateNextRecertification);
+			context.put("dateNextRecertification", formattedDateNextRecertification);
+			String formattedDateNextRecertificationLong = format.formatDateLong(dateNextRecertification);
+			context.put("dateNextRecertificationLong", formattedDateNextRecertificationLong);
+			context.put("dateNextRecertificationRaw", dateNextRecertification);
+		}		
 	}
 	
 	private void fillAssessmentInfos(VelocityContext context) {
diff --git a/src/main/java/org/olat/course/certificate/manager/CertificatesManagerImpl.java b/src/main/java/org/olat/course/certificate/manager/CertificatesManagerImpl.java
index 3c73424204323aced10518e12a3b19cf049ba1a4..35aeb43617847d60c8a237edb17c8f998db9a2e2 100644
--- a/src/main/java/org/olat/course/certificate/manager/CertificatesManagerImpl.java
+++ b/src/main/java/org/olat/course/certificate/manager/CertificatesManagerImpl.java
@@ -518,24 +518,14 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList
 			ICourse course = CourseFactory.loadCourse(entry);
 			CourseConfig config = course.getCourseEnvironment().getCourseConfig();
 			if(config.isRecertificationEnabled()) {
-				int time = config.getRecertificationTimelapse();
-				RecertificationTimeUnit timeUnit = config.getRecertificationTimelapseUnit();
 				Certificate certificate =  getLastCertificate(identity, entry.getOlatResource().getKey());
 				if(certificate == null) {
 					allowed = true;
 				} else {
-					Date date = certificate.getCreationDate();
 					Calendar cal = Calendar.getInstance();
 					Date now = cal.getTime();
-					cal.setTime(date);
-					switch(timeUnit) {
-						case day: cal.add(Calendar.DATE, time); break;
-						case week: cal.add(Calendar.DATE, time * 7); break;
-						case month: cal.add(Calendar.MONTH, time); break;
-						case year: cal.add(Calendar.YEAR, time); break;
-					}
-					Date nextCertification = cal.getTime();
-					allowed = nextCertification.before(now);
+					Date nextCertificationDate = getDateNextRecertification(certificate, config);
+					allowed = (nextCertificationDate != null ? nextCertificationDate.before(now) : false);
 				}
 			} else {
 				allowed = !hasCertificate(identity, entry.getOlatResource().getKey());
@@ -546,6 +536,34 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList
 		return allowed;
 	}
 	
+	@Override
+	public Date getDateNextRecertification(Certificate certificate, RepositoryEntry entry) {
+		ICourse course = CourseFactory.loadCourse(entry);
+		CourseConfig config = course.getCourseEnvironment().getCourseConfig();
+		return getDateNextRecertification(certificate, config);
+	}
+
+	private Date getDateNextRecertification(Certificate certificate, CourseConfig config) {
+		if(config.isRecertificationEnabled() && certificate != null) {
+			int time = config.getRecertificationTimelapse();
+			RecertificationTimeUnit timeUnit = config.getRecertificationTimelapseUnit();
+			Date date = certificate.getCreationDate();
+			Calendar cal = Calendar.getInstance();
+			cal.setTime(date);
+			switch(timeUnit) {
+				case day: cal.add(Calendar.DATE, time); break;
+				case week: cal.add(Calendar.DATE, time * 7); break;
+				case month: cal.add(Calendar.MONTH, time); break;
+				case year: cal.add(Calendar.YEAR, time); break;
+			}
+			Date nextCertification = cal.getTime();
+			return nextCertification;
+		} else {
+			return null;
+		}		
+	}
+
+	
 	@Override
 	public void deleteCertificate(Certificate certificate) {
 		File certificateFile = getCertificateFile(certificate);
@@ -678,15 +696,15 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList
 		File dirFile = new File(WebappHelper.getTmpDir(), UUID.randomUUID().toString());	
 		if(template == null) {
 			CertificatePDFFormWorker worker = new CertificatePDFFormWorker(identity, entry, 2.0f, true,
-					new Date(), new Date(), locale, userManager, this);
+					new Date(), new Date(), new Date(), locale, userManager, this);
 			certificateFile = worker.fill(null, dirFile, "Certificate.pdf");
 		} else if(template.getPath().toLowerCase().endsWith("pdf")) {
 			CertificatePDFFormWorker worker = new CertificatePDFFormWorker(identity, entry, 2.0f, true,
-					new Date(), new Date(), locale, userManager, this);
+					new Date(), new Date(), new Date(), locale, userManager, this);
 			certificateFile = worker.fill(template, dirFile, "Certificate.pdf");
 		} else {
 			CertificatePhantomWorker worker = new CertificatePhantomWorker(identity, entry, 2.0f, true,
-					new Date(), new Date(), locale, userManager, this);
+					new Date(), new Date(),new Date(),  locale, userManager, this);
 			certificateFile = worker.fill(template, dirFile, "Certificate.pdf");
 		}
 		return certificateFile;
@@ -815,6 +833,7 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList
 		Boolean passed = workUnit.getPassed();
 		Date dateCertification = certificate.getCreationDate();
 		Date dateFirstCertification = getDateFirstCertification(identity, resource.getKey());
+		Date dateNextRecertification = getDateNextRecertification(certificate, entry);
 		
 		File certificateFile;
 		StringBuilder sb = new StringBuilder();
@@ -825,7 +844,7 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList
 		String filename = FileUtils.normalizeFilename(sb.toString()) + ".pdf";
 		if(template == null || template.getPath().toLowerCase().endsWith("pdf")) {
 			CertificatePDFFormWorker worker = new CertificatePDFFormWorker(identity, entry, score, passed,
-					dateCertification, dateFirstCertification, locale, userManager, this);
+					dateCertification, dateFirstCertification, dateNextRecertification, locale, userManager, this);
 			certificateFile = worker.fill(template, dirFile, filename);
 			if(certificateFile == null) {
 				certificate.setStatus(CertificateStatus.error);
@@ -834,7 +853,7 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList
 			}
 		} else {
 			CertificatePhantomWorker worker = new CertificatePhantomWorker(identity, entry, score, passed,
-					dateCertification, dateFirstCertification, locale, userManager, this);
+					dateCertification, dateFirstCertification, dateNextRecertification, locale, userManager, this);
 			certificateFile = worker.fill(template, dirFile, filename);
 			if(certificateFile == null) {
 				certificate.setStatus(CertificateStatus.error);
diff --git a/src/main/java/org/olat/course/certificate/ui/CertificatesOptionsController.java b/src/main/java/org/olat/course/certificate/ui/CertificatesOptionsController.java
index 225c859cc7cc2fdf3be5987c1b460a8ed2a62ecc..781465e94c8f53a8f4e4ebda18d485e2258e23b4 100644
--- a/src/main/java/org/olat/course/certificate/ui/CertificatesOptionsController.java
+++ b/src/main/java/org/olat/course/certificate/ui/CertificatesOptionsController.java
@@ -61,6 +61,7 @@ import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
 import org.olat.core.util.FileUtils;
 import org.olat.core.util.Util;
 import org.olat.core.util.coordinate.CoordinatorManager;
+import org.olat.core.util.coordinate.LockResult;
 import org.olat.core.util.event.EventBus;
 import org.olat.core.util.vfs.VFSLeaf;
 import org.olat.core.util.vfs.VFSMediaResource;
@@ -75,9 +76,11 @@ import org.olat.course.config.CourseConfig;
 import org.olat.course.config.CourseConfigEvent;
 import org.olat.course.config.CourseConfigEvent.CourseConfigType;
 import org.olat.course.config.ui.CourseOptionsController;
+import org.olat.course.run.RunMainController;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryEntryManagedFlag;
 import org.olat.repository.RepositoryManager;
+import org.olat.user.UserManager;
 import org.springframework.beans.factory.annotation.Autowired;
 
 /**
@@ -119,7 +122,10 @@ public class CertificatesOptionsController extends FormBasicController {
 	};
 	
 	private final String mapperUrl;
+	private LockResult lockEntry;
 
+	@Autowired
+	private UserManager userManager;
 	@Autowired
 	private CertificatesManager certificatesManager;
 	
@@ -131,13 +137,32 @@ public class CertificatesOptionsController extends FormBasicController {
 			RepositoryEntry entry, CourseConfig courseConfig, boolean editable) {
 		super(ureq, wControl);
 		setTranslator(Util.createPackageTranslator(CourseOptionsController.class, getLocale(), getTranslator()));
+		setTranslator(Util.createPackageTranslator(RunMainController.class, getLocale(), getTranslator()));
 		this.courseConfig = courseConfig;
 		this.entry = entry;
-		this.editable = editable;
 		
 		mapperUrl = registerMapper(ureq, new TemplateMapper());
-		
+		lockEntry = CoordinatorManager.getInstance().getCoordinator().getLocker()
+				.acquireLock(entry.getOlatResource(), getIdentity(), CourseFactory.COURSE_EDITOR_LOCK);
+		this.editable = (lockEntry != null && lockEntry.isSuccess()) && editable;
+
 		initForm (ureq);
+		
+		if(lockEntry != null && !lockEntry.isSuccess()) {
+			String lockerName = "???";
+			if(lockEntry.getOwner() != null) {
+				lockerName = userManager.getUserDisplayName(lockEntry.getOwner());
+			}
+			showWarning("error.editoralreadylocked", new String[] { lockerName });
+		}
+	}
+	
+	@Override
+	protected void doDispose() {
+		if (lockEntry != null && lockEntry.isSuccess()) {
+			CoordinatorManager.getInstance().getCoordinator().getLocker().releaseLock(lockEntry);
+			lockEntry = null;
+		}
 	}
 	
 	@Override
@@ -174,6 +199,7 @@ public class CertificatesOptionsController extends FormBasicController {
 		templateCont.setLabel("pdf.certificates.template", null);
 
 		selectTemplateLink = uifactory.addFormLink("select", templateCont, Link.BUTTON);
+		selectTemplateLink.setEnabled(editable);
 		Long templateId = courseConfig.getCertificateTemplate();
 		boolean hasTemplate = templateId != null && templateId.longValue() > 0;
 		if(hasTemplate) {
@@ -193,6 +219,7 @@ public class CertificatesOptionsController extends FormBasicController {
 		boolean reCertificationEnabled = courseConfig.isRecertificationEnabled();
 		reCertificationEl = uifactory.addCheckboxesHorizontal("recertification", formLayout, new String[]{ "xx" }, new String[]{ "" });
 		reCertificationEl.addActionListener(FormEvent.ONCHANGE);
+		reCertificationEl.setEnabled(editable);
 		if(reCertificationEnabled) {
 			reCertificationEl.select("xx", true);
 		}
@@ -206,6 +233,7 @@ public class CertificatesOptionsController extends FormBasicController {
 		reCertificationTimelapseEl = uifactory.addIntegerElement("timelapse", null, timelapse, recertificationCont);
 		reCertificationTimelapseEl.setDomReplacementWrapperRequired(false);
 		reCertificationTimelapseEl.setDisplaySize(4);
+		reCertificationTimelapseEl.setEnabled(editable);
 		
 		String[] timelapseUnitValues = new String[] {
 			translate("recertification.day"), translate("recertification.week"),
@@ -214,6 +242,7 @@ public class CertificatesOptionsController extends FormBasicController {
 		RecertificationTimeUnit timelapseUnit = courseConfig.getRecertificationTimelapseUnit();
 		reCertificationTimelapseUnitEl = uifactory.addDropdownSingleselect("timelapse.unit", null, recertificationCont, timelapseUnitKeys, timelapseUnitValues, null);
 		reCertificationTimelapseUnitEl.setDomReplacementWrapperRequired(false);
+		reCertificationTimelapseUnitEl.setEnabled(editable);
 		if(timelapseUnit != null) {
 			reCertificationTimelapseUnitEl.select(timelapseUnit.name(), true);
 		} else {
@@ -234,7 +263,7 @@ public class CertificatesOptionsController extends FormBasicController {
 		boolean none = !pdfCertificatesEl.isAtLeastSelected(1);
 		
 		templateCont.setVisible(!none);
-		selectTemplateLink.setEnabled(!none);
+		selectTemplateLink.setEnabled(!none && editable);
 		if(none || selectedTemplate == null) {
 			templateCont.contextPut("templateName", translate("default.template"));
 			previewTemplateLink.setEnabled(false);
@@ -247,13 +276,8 @@ public class CertificatesOptionsController extends FormBasicController {
 		
 		boolean enableRecertification = !none && reCertificationEl.isAtLeastSelected(1);
 		recertificationCont.setVisible(enableRecertification);
-		reCertificationTimelapseEl.setEnabled(enableRecertification);
-		reCertificationTimelapseUnitEl.setEnabled(enableRecertification);
-	}
-
-	@Override
-	protected void doDispose() {
-		//
+		reCertificationTimelapseEl.setEnabled(enableRecertification && editable);
+		reCertificationTimelapseUnitEl.setEnabled(enableRecertification && editable);
 	}
 
 	@Override
@@ -352,6 +376,11 @@ public class CertificatesOptionsController extends FormBasicController {
 	
 	private void doChangeConfig(UserRequest ureq) {
 		OLATResourceable courseOres = entry.getOlatResource();
+		if(CourseFactory.isCourseEditSessionOpen(courseOres.getResourceableId())) {
+			showWarning("error.editoralreadylocked", new String[] { "???" });
+			return;
+		}
+		
 		ICourse course = CourseFactory.openCourseEditSession(courseOres.getResourceableId());
 		courseConfig = course.getCourseEnvironment().getCourseConfig();
 		
diff --git a/src/main/java/org/olat/course/certificate/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/certificate/ui/_i18n/LocalStrings_pt_BR.properties
index 087d6d95fb32e69f27d0f74f72c9c43c30b226b2..e0fa5d0340d9937007e742364b7eebf9d749f45c 100644
--- a/src/main/java/org/olat/course/certificate/ui/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/course/certificate/ui/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Mon Feb 08 20:08:43 CET 2016
+#Wed Jun 15 21:46:57 CEST 2016
 admin.certificates.description=Envie formul\u00E1rios em PDF como modelos para os certificados de cursos.
 admin.certificates.title=Certificados
 admin.menu.title=Certificados
@@ -32,6 +32,7 @@ no.certificate=Nenhum certificado dispon\u00EDvel
 notifications.desc={0} recebeu um novo certificado
 notifications.header=Novos certificados para o curso "{0}".
 notifications.title=Novos Certificados no curso "{0}".
+options.certificates.descr=Cursos s\u00F3 ser\u00E3o listados como "passou" se a caixa de sele\u00E7\u00E3o <strong>Calcular pontua\u00E7\u00E3o de aprova\u00E7\u00E3o?</strong> estiver selecionado na aba "Pontua\u00E7\u00E3o" na raiz do menu do curso.
 options.certificates.title=Configura\u00E7\u00E3o dos comprovantes de conclus\u00E3o
 orientation=Orienta\u00E7\u00E3o
 pdf.certificates=Gerar certificado PDF
diff --git a/src/main/java/org/olat/course/condition/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/condition/_i18n/LocalStrings_pt_BR.properties
index b727b11ed53db4ebc9270fdc4bf122958ed3aa5a..2d5e0f67aeb7eb3f6e66a1f3cb0a0810d8d86bf2 100644
--- a/src/main/java/org/olat/course/condition/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/course/condition/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Fri Jul 10 15:21:03 CEST 2015
+#Wed Jun 15 22:27:21 CEST 2016
 apply=Aplicar
 choose=Selecionar
 command.activate.easyMode=Exibir modo simples
@@ -91,6 +91,7 @@ solution.example.date.infunction=Exemplo\: {0}("13.10.2005 18\:25")
 solution.example.institutionalname.infunction=Dica\: Coloque o nome institucional entre aspas duplas (" ").
 solution.example.name.infunction=Dica\: Fechar o nome com aspas duplas (" ").
 solution.example.node.infunction=Dica\: Fechar a identifica\u00E7\u00E3o dos elementos de curso em aspas duplas, por exemplo {0}("12345").
+solution.example.whiteSpace=Observa\u00E7\u00E3o\: O argumento n\u00E3o deve conter espa\u00E7os em branco.
 solution.provideone.areaname=Dica\: Fornecer um nome de \u00E1rea de ensino exato. Al\u00E9m disso esta \u00E1rea deve existir dentro do gerenciamento de grupo.
 solution.provideone.date=Dica\: Fornecer um ponto em tempo exato para a fun\u00E7\u00E3o "{0}". O formato \u00E9 "dd.mm.YYYY HH\:mm".
 solution.provideone.groupname=Dica\: Fornecer um nome de grupo exato. Al\u00E9m disso este grupo deve existir dentro do gerenciamento de grupo. 
diff --git a/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_en.properties
index a0000291ec1ae698dd7ad34aa60e0efd4117c2c7..c1a756daec7c374e848b106e0f702e6733fa4383 100644
--- a/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_en.properties
@@ -23,7 +23,7 @@ lock.failed=These course settings are edited since {1} by user {0}.
 selectfile=Choose file
 sf.changesfresource=Replace
 sf.notconfigured=<i>No resource folder selected</i>
-sf.resourcetitle=Selected recource folder
+sf.resourcetitle=Selected resource folder
 sf.resourcetitle.helptext=The files stored there can be found in the storage folder of your course when selecting the sub-folder "_sharedfolder".
 sf.resource.readonly=Read only
 sf.selectsfresource=Select
diff --git a/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_pt_BR.properties
index 1037feab9c036c3d7394a010bf3bea47ba180054..b339bf345fa0809122deb08f0ec56040a441ad5a 100644
--- a/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_pt_BR.properties
@@ -1,7 +1,10 @@
-#Mon Feb 08 21:31:36 CET 2016
+#Wed Jun 15 22:28:14 CEST 2016
 chkbx.calendar.onoff=Usar calend\u00E1rio
 chkbx.chat.onoff=Usar bate-papo do curso
 chkbx.efficency.onoff=Usar comprovante de conclus\u00E3o
+chkbx.menu.onoff=Menu vis\u00EDvel para os participantes e treinadores
+chkbx.toolbar.off.warning=Se voc\u00EA desativar a barra de ferramentas os participantes n\u00E3o podem usar o calend\u00E1rio, o chat e o gloss\u00E1rio.
+chkbx.toolbar.onoff=Barra de ferramentas vis\u00EDvel para os participantes
 command.choose=Escolher
 command.glossary.add=Usar um gloss\u00E1rio
 command.glossary.remove=N\u00E3o usar gloss\u00E1rio
@@ -20,6 +23,7 @@ lock.failed=As configura\u00E7\u00F5s do curso est\u00E3o editadas desde {1} pel
 selectfile=Escolher arquivo
 sf.changesfresource=Substituir
 sf.notconfigured=<i>Nenhuma pasta de recurso selecionado</i>
+sf.resource.readonly=Apenas leitura
 sf.resourcetitle=Pasta de recurso selecionado
 sf.resourcetitle.helptext=Os arquivos armazenados l\u00E1 podem ser encontrados na pasta de armazenamento do seu curso ao selecionar a sub-pasta "pasta compartilhada".
 sf.selectsfresource=Selecionar
diff --git a/src/main/java/org/olat/course/db/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/db/_i18n/LocalStrings_pt_BR.properties
index 7ebb10ea8f5b28efc6b27f5fd45c4d3fb6d122ad..0591644c41d3c2d9f37c57c346145ff8127619aa 100644
--- a/src/main/java/org/olat/course/db/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/course/db/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Fri Apr 29 14:59:37 CEST 2016
+#Wed Jun 15 22:28:26 CEST 2016
 command.new_db=Criar novo banco de dados
 customDb.category=Nome
 customDb.create=Criar
diff --git a/src/main/java/org/olat/course/nodes/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/_i18n/LocalStrings_fr.properties
index d613022ed5a9e57a3ea30d4bc7c390844fcace38..946d0ccff95223edbdd085e5aa44508aef946060 100644
--- a/src/main/java/org/olat/course/nodes/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/course/nodes/_i18n/LocalStrings_fr.properties
@@ -1,4 +1,4 @@
-#Mon Aug 25 14:39:48 CEST 2014
+#Wed Jun 15 21:54:39 CEST 2016
 editor.lock.message=Cet \u00E9l\u00E9ment de cours est bloqu\u00E9, car il est en train d'\u00EAtre \u00E9dit\u00E9.
 editor.lock.title=El\u00E9ment de cours bloqu\u00E9.
 guestnoaccess.message=Cette partie du cours n'est pas accessible pour les invit\u00E9s. <p>Pour avoir acc\u00E8s \u00E0 cette partie, vous devez vous identifier via une universit\u00E9 ou vous enregistrer dans OLAT.
@@ -17,10 +17,10 @@ title_dialog=Fichier discut\u00E9
 title_en=Inscription
 title_fo=Forum
 title_gta=Devoir de groupe
-title_ita=Devoir
 title_iqself=Auto-test
 title_iqsurv=Questionnaire
 title_iqtest=Test
+title_ita=Devoir
 title_ll=Liste de liens
 title_ms=Evaluation
 title_podcast=Podcast
@@ -30,4 +30,5 @@ title_sp=Page simple
 title_st=Structure
 title_ta=<s>Devoir</s>
 title_tu=Page externe
+title_video=Vid\u00E9o
 title_wiki=Page Wiki
diff --git a/src/main/java/org/olat/course/nodes/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/_i18n/LocalStrings_pt_BR.properties
index 46da0f7eb39ca1377a71a5eb1a3f0e863d9d4dbf..2b39eb001c56d995d4126e6df2a5c4b26f16a6f8 100644
--- a/src/main/java/org/olat/course/nodes/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/course/nodes/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Fri Jul 10 15:28:05 CEST 2015
+#Wed Jun 15 22:28:29 CEST 2016
 editor.lock.message=Este elemento de curso est\u00E1 sendo modificado e, portanto, est\u00E1 bloqueado.
 editor.lock.title=Elemento de curso trancado
 guestnoaccess.message=Esta parte do curso n\u00E3o \u00E9 acess\u00EDvel para usu\u00E1rios convidados. <p>Para acessar esta parte do curso voc\u00EA tem que estar autenticado via sua universidade ou registrado no OLAT. 
@@ -30,4 +30,5 @@ title_sp=P\u00E1gina \u00FAnica
 title_st=Estrutura
 title_ta=Tarefa
 title_tu=P\u00E1gina externa
+title_video=V\u00EDdeo
 title_wiki=Wiki
diff --git a/src/main/java/org/olat/course/nodes/gotomeeting/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/gotomeeting/_i18n/LocalStrings_pt_BR.properties
new file mode 100644
index 0000000000000000000000000000000000000000..a9f513b4a97d5fcbaca7c31c16c6fcb15b205001
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/gotomeeting/_i18n/LocalStrings_pt_BR.properties
@@ -0,0 +1,8 @@
+#Wed Jun 15 22:28:57 CEST 2016
+condition.accessibility.title=Acesso
+guestnoaccess.message=$org.olat.course.nodes\:guestnoaccess.message
+guestnoaccess.title=$org.olat.course.nodes\:guestnoaccess.title
+pane.tab.accessibility=Acesso
+pane.tab.vcconfig=Sala
+table.empty=$org.olat.modules.gotomeeting.ui\:table.empty
+title_vc=GoToMeeting
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTACoachedGroupListController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTACoachedGroupListController.java
index bd6d46574976fbaa6ad17500f549868b5a1a8179..3378a03945b841b3c1ea351f34a0ec431aa8d45c 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/GTACoachedGroupListController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTACoachedGroupListController.java
@@ -88,7 +88,9 @@ public class GTACoachedGroupListController extends GTACoachedListController {
 		columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel("select", translate("select"), "select"));
 		tableModel = new CoachGroupsTableModel(columnsModel);
 
-		tableEl = uifactory.addTableElement(getWindowControl(), "entries", tableModel, getTranslator(), formLayout);
+		tableEl = uifactory.addTableElement(getWindowControl(), "entries", tableModel, 10, false, getTranslator(), formLayout);
+		tableEl.setShowAllRowsEnabled(true);
+		tableEl.setAndLoadPersistedPreferences(ureq, "gta-coached-groups");
 	}
 	
 	protected void updateModel() {
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTACoachedParticipantListController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTACoachedParticipantListController.java
index f81ea73778c0c0a84f1fa0504d85f0e4644fcf80..8df02a7a426fb1939d515ade3cbff0035433c5f7 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/GTACoachedParticipantListController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTACoachedParticipantListController.java
@@ -173,7 +173,9 @@ public class GTACoachedParticipantListController extends GTACoachedListControlle
 		columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel("select", translate("select"), "select"));
 		tableModel = new CoachParticipantsTableModel(userPropertyHandlers, getLocale(), columnsModel);
 
-		tableEl = uifactory.addTableElement(getWindowControl(), "entries", tableModel, getTranslator(), formLayout);
+		tableEl = uifactory.addTableElement(getWindowControl(), "entries", tableModel, 10, false, getTranslator(), formLayout);
+		tableEl.setShowAllRowsEnabled(true);
+		tableEl.setAndLoadPersistedPreferences(ureq, "gta-coached-participants");
 	}
 	
 	protected void updateModel() {
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_en.properties
index 053e0b5f9ce17555eedb988e5ebe902c64121b25..9ba756015aab865ac14b3867d79bb732bc887480 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_en.properties
@@ -1,4 +1,4 @@
-#Thu Jun 02 15:29:28 CEST 2016
+#Wed Jun 15 14:04:13 CEST 2016
 add.solution=Add solution
 add.task=Add task
 assessment.group.tool=Grade group
@@ -214,6 +214,7 @@ solution.list.description=Select "$\:add.solution" or "$\:create.solution" to ad
 solution.list.title=Upload sample solutions
 solution.title=Title
 submission=Submission
+submission.add.title=Add document
 submission.confirmation=The submission of $numberOfFiles file(s) ($filename) for $first $last ($email) at $date, $time has been confirmed.
 submission.email.confirmation=Send text additionally as email
 submission.enabled=Enable solution drop box for participants
@@ -243,6 +244,7 @@ task.assignment.error=Unexpected error\!
 task.assignment.type=$org.olat.course.nodes.ta\:form.task.type
 task.assignment.type.auto=$org.olat.course.nodes.ta\:form.task.type.auto
 task.assignment.type.manual=$org.olat.course.nodes.ta\:form.task.type.manual
+task.coach.allowed.upload=Coaches can upload tasks
 task.description=Description
 task.execution=Task execution
 task.execution.group=as a group
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pt_BR.properties
index 57c23717441e9795d2ab2d690810c0f15ef33763..167af8726db8b932e3ce02fe795be7f7e8f74b55 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Fri Apr 29 15:01:30 CEST 2016
+#Wed Jun 15 22:40:49 CEST 2016
 add.solution=Adicionar solu\u00E7\u00E3o
 add.task=Adicionar tarefa
 assessment.group.tool=S\u00E9rie do grupo
@@ -18,7 +18,18 @@ choose.groups=Selecionar grupos
 choosed.areas=Areas
 choosed.groups=Grupos
 coach.assessment=S\u00E9rie
+coach.back.to.submission=Re-abrir submiss\u00E3o
+coach.back.to.submission.confirm.text=Tem certeza de que deseja reabrir a apresenta\u00E7\u00E3o tarefa para "{0}"?
+coach.back.to.submission.confirm.title=Re-abrir submiss\u00E3o
+coach.back.to.submission.desc=Esta a\u00E7\u00E3o permite-lhe resetar o status de envio, se um participante fechou acidentalmente a etapa de submiss\u00E3o.
 coach.close.revision.button=Revis\u00E3o aceita
+coach.collect.confirm.desc=No caso de um participante esquecer-se de finalizar o processo de submiss\u00E3o, os treinadores podem coletar manualmente os documentos de um participante.
+coach.collect.confirm.text=Voc\u00EA est\u00E1 prestes a fechar a apresenta\u00E7\u00E3o de "{0}". Certifique-se de todos os documentos exigidos tenham sido apresentados antes de clicar em "OK".
+coach.collect.confirm.title=Coletar documento(s)
+coach.collect.revisions=$\:coach.collect.task
+coach.collect.revisions.confirm.text=Voc\u00EA est\u00E1 prestes a fechar a revis\u00E3o de "{0}". Certifique-se de todos os documentos exigidos tenham sido apresentados antes de clicar em "OK".
+coach.collect.revisions.confirm.title=$\:coach.collect.task
+coach.collect.task=Coletar documento(s)
 coach.corrections.closed=A apresenta\u00E7\u00E3o foi aceita para a classifica\u00E7\u00E3o
 coach.corrections.description=Voc\u00EA retornou os seguintes documentos.
 coach.corrections.rejected=A apresenta\u00E7\u00E3o foi rejeitada para revis\u00E3o.
@@ -26,6 +37,8 @@ coach.corrections.waiting=A apresenta\u00E7\u00E3o est\u00E1 aguardando ser revi
 coach.document=Documentos
 coach.document.open.editor=Abrir editor de avalia\u00E7\u00E3o
 coach.documents.successfully.reviewed=Avaliado\!
+coach.feedback.documents.desc=Documentos enviados s\u00E3o vis\u00EDveis para os participantes assim que voc\u00EA tenha aceite a apresenta\u00E7\u00E3o como \u00E9, ou solicitado uma revis\u00E3o
+coach.feedback.documents.title=Prepare documentos de feedback
 coach.need.revision.button=Requer revis\u00E3o
 coach.reviewed.button=Apresenta\u00E7\u00E3o aceita
 coach.reviewed.confirm.text=Por favor, confirme a sua aceita\u00E7\u00E3o dos documentos apresentados. A tarefa est\u00E1 agora fechada para o usu\u00E1rio, e n\u00E3o h\u00E1 op\u00E7\u00E3o de revis\u00E3o dispon\u00EDveis.
@@ -39,6 +52,8 @@ coach.submit.corrections.to.revision.button=$\:coach.need.revision.button
 coach.submitted.documents.description=Estes documentos foram apresentados
 coach.submitted.nofiles=A apresenta\u00E7\u00E3o foi feita sem documentos
 coach.task.assigned.description=A tarefa seguinte foi atribu\u00EDda
+coach.verdict.desc=Documentos apresentados podem ser aceitos ou rejeitados para revis\u00E3o. Uma vez que os documentos apresentados forem aceites, o processo de submiss\u00E3o \u00E9 encerrado.
+coach.verdict.title=Dar feedback
 coach.waiting.assignment=Aguardando a atribui\u00E7\u00E3o
 coach.waiting.assignment.description=A tarefa ainda n\u00E3o foi atribu\u00EDda. A entrega e corre\u00E7\u00E3o s\u00F3 pode come\u00E7ar quando uma tarefa \u00E9 atribu\u00EDda.
 coach.waiting.submitted.documents=Aguardando documentos
@@ -156,6 +171,7 @@ run.corrections.description=Seu treinador anexou os seguintes arquivos para voc\
 run.corrections.rejected=$\:coach.corrections.rejected
 run.documents.successfully.submitted=Seus documento(s) foram submetidos com sucesso.
 run.grading=Classifica\u00E7\u00E3o
+run.manage.coach=Gerir
 run.pick.task.description=Por favor, selecione uma tarefa a partir da lista abaixo.
 run.review=Retorno e feedback
 run.review.closed=Seu treinador aceitou o trabalho apresentado para a classifica\u00E7\u00E3o.
@@ -180,6 +196,10 @@ run.submit.individual.description.all=Apresente a sua solu\u00E7\u00E3o, enviand
 run.submit.individual.description.editor=Envie sua solu\u00E7\u00E3o usando o editor escrevendo sua solu\u00E7\u00E3o aqui.
 run.submit.individual.description.upload=Submeta a sua solu\u00E7\u00E3o por meio do envio de um documento que voc\u00EA criou no seu computador.
 run.submit.revision.button=Submeter revis\u00E3o
+run.submit.revision.confirm=Por favor, confirme a submiss\u00E3o para esta revis\u00E3o. A submiss\u00E3o da revis\u00E3o \u00E9 final e n\u00E3o pode ser desfeita.
+run.submit.revision.confirm.group=$\:run.submit.revision.confirm<br/>Esta \u00E9 uma tarefa de grupo\! O documento apresentado \u00E9 v\u00E1lido para todos os membros do grupo "{0}"\!
+run.submit.revision.confirm.warning=Voc\u00EA ainda n\u00E3o fez o upload/criou um documento. Voc\u00EA ainda deseja enviar? A submiss\u00E3o da tarefa revista \u00E9 final e n\u00E3o pode ser desfeita. <br/><br/>O menu suspenso ser\u00E1 fechado. Voc\u00EA n\u00E3o ser\u00E1 capaz de carregar nenhum documento.
+run.submit.revision.confirm.warning.group=$\:run.submit.revision.confirm.warning<br/>Esta \u00E9 uma tarefa de grupo\! O documento apresentado \u00E9 v\u00E1lido para todos os membros do grupo "{0}"\!
 run.submitted.description=As solu\u00E7\u00F5es a seguir foram enviadas por voc\u00EA\:
 run.submitted.nofiles=A apresenta\u00E7\u00E3o foi feita sem documentos
 sample.solution=Solu\u00E7\u00E3o de amostra
@@ -194,6 +214,7 @@ solution.list.description=Selecione "$\:add.solution" ou "$\:create.solution" pa
 solution.list.title=Envie as solu\u00E7\u00F5es de amostra
 solution.title=T\u00EDtulo
 submission=Apresenta\u00E7\u00E3o
+submission.add.title=Adicionar documento
 submission.confirmation=A apresenta\u00E7\u00E3o do arquivo "$filename" por $first $last ($email) em $date foi confirmada.
 submission.email.confirmation=Envie texto, adicionalmente, como e-mail
 submission.enabled=Ativar menu suspenso de solu\u00E7\u00F5es para os participantes
@@ -201,6 +222,10 @@ submission.mail.subject=Confirma\u00E7\u00E3o-E-Mail-OpenOLAT
 submission.nofile=Nenhum arquivo enviado
 submission.text=Texto ap\u00F3s a entrega
 submit.deadline=Prazo para apresenta\u00E7\u00E3o
+submit.documents.desc=Antes de enviar uma tarefa, os documentos devem ser criados ou carregados. Estes documentos ainda n\u00E3o foram apresentados e, portanto, n\u00E3o \u00E9 vis\u00EDvel para o treinador.
+submit.documents.title=Passo 1\: Preparar documentos
+submit.submit.desc=A fim de submeter documentos e, assim, torn\u00E1-los vis\u00EDveis para os treinadores, \u00E9 preciso confirmar o envio, clicando no bot\u00E3o abaixo.
+submit.submit.title=Passo 2\: Submeter documentos
 table.header.author=Autor
 table.header.comment=Comente
 table.header.details.gta=$org.olat.course.nodes.ta\:table.header.details.ta
@@ -219,6 +244,7 @@ task.assignment.error=Erro inesperado\!
 task.assignment.type=$org.olat.course.nodes.ta\:form.task.type
 task.assignment.type.auto=$org.olat.course.nodes.ta\:form.task.type.auto
 task.assignment.type.manual=$org.olat.course.nodes.ta\:form.task.type.manual
+task.coach.allowed.upload=Os gestores podem fazer upload de tarefas
 task.description=Descri\u00E7\u00E3o
 task.execution=Execu\u00E7\u00E3o da tarefa
 task.execution.group=Como um grupo
@@ -241,7 +267,9 @@ warning.group.submit=Esta \u00E9 uma tarefa de grupo\! O documento apresentado \
 warning.group.task=Esta \u00E9 uma tarefa de grupo\! A atribui\u00E7\u00E3o de tarefas, a apresenta\u00E7\u00E3o de documentos e a classifica\u00E7\u00E3o s\u00E3o realizadas como um grupo. Contacte seus colegas de grupo sobre como proceder em decidir sobre uma tarefa e resolver de forma colaborativa a tarefa.
 warning.no.task.choosed=Parece que, devido a uma altera\u00E7\u00E3o na configura\u00E7\u00E3o do elemento de curso, voc\u00EA n\u00E3o foi capaz de escolher uma tarefa para este elemento.
 warning.no.task.choosed.coach=Parece que, devido a uma altera\u00E7\u00E3o na configura\u00E7\u00E3o do elemento de curso, o designado n\u00E3o foi capaz de escolher uma tarefa para este elemento.
+warning.submit.documents.edited=Voc\u00EA n\u00E3o pode enviar a tarefa. O documento "{1}" est\u00E1 sendo editado por "{0}".
 warning.tasks.in.process.delete.text=Voc\u00EA realmente deseja apagar esta tarefa? J\u00E1 existem usu\u00E1rios que iniciaram o processo da tarefa. Isso pode resultar em problemas para esses usu\u00E1rios.
 warning.tasks.in.process.delete.title=$\:warning.tasks.in.process.title
 warning.tasks.in.process.text=J\u00E1 existem usu\u00E1rios que iniciaram a tarefa. Alterar a configura\u00E7\u00E3o do Workflow pode resultar em problemas para esses usu\u00E1rios.
 warning.tasks.in.process.title=Tarefas j\u00E1 iniciadas
+warning.tasks.submitted=Voc\u00EA n\u00E3o pode editar esta tarefa mais, ela j\u00E1 foi apresentado.
diff --git a/src/main/java/org/olat/course/nodes/info/SendMailFormatterForCourse.java b/src/main/java/org/olat/course/nodes/info/SendMailFormatterForCourse.java
index a3013443d524f101e7538a6e4e286a1453d65ecc..41d9b966f1a7155b95f7bbb0b42f8f17e9559195 100644
--- a/src/main/java/org/olat/course/nodes/info/SendMailFormatterForCourse.java
+++ b/src/main/java/org/olat/course/nodes/info/SendMailFormatterForCourse.java
@@ -73,6 +73,21 @@ public class SendMailFormatterForCourse implements MailFormatter {
 		String author =	msg.getAuthor().getUser().getProperty(UserConstants.FIRSTNAME, null) + " " + msg.getAuthor().getUser().getProperty(UserConstants.LASTNAME, null);
 		String date = DateFormat.getDateInstance(DateFormat.MEDIUM, translator.getLocale()).format(msg.getCreationDate());
 		String link =	Settings.getServerContextPathURI() + "/url/" + busPath;
-		return translator.translate("mail.body", new String[]{courseTitle, author, date, msg.getMessage(), link});
+		
+		StringBuilder sb = new StringBuilder();
+		sb.append("<div style='background: #FAFAFA; border: 1px solid #eee; border-radius: 5px; padding: 0 0.5em 0.5em 0.5em; margin: 1em 0 1em 0;' class='o_m_h'>");		
+		sb.append("<h3>").append(translator.translate("mail.body.title", new String[]{courseTitle})).append("</h3>");
+		sb.append("<div style='font-size: 90%; color: #888' class='o_m_a'>").append(translator.translate("mail.body.from", new String[]{author, date})).append("</div>");
+		sb.append("</div>");
+		
+		sb.append("<div style='background: #FAFAFA; padding: 5px 5px; margin: 10px 0;' class='o_m_c'>");		
+		sb.append(msg.getMessage());
+		sb.append("<div style='margin: 2em 0 1em 0;' class='o_m_m'>").append("<a href='").append(link).append("'>");		
+		sb.append(translator.translate("mail.body.more"));		
+		sb.append(" &raquo;</a></div>");
+		
+		sb.append("</div>");
+		
+		return sb.toString();
 	}
 }
diff --git a/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_de.properties
index d9fdbe153e9ff3980fb516d1565305adce022f03..365c9347c77bcd5329e6d5f615332354bf53100c 100644
--- a/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_de.properties
@@ -3,7 +3,9 @@ title_info=Mitteilungen
 condition.accessibility.title=Mitteilungen lesen
 condition.admin.title=Mitteilungen verwalten
 condition.editable.title=Mitteilung verfassen
-mail.body=Mitteilung aus Kurs {0}\nVerfasst von {1} am {2}\n\n{3}\n\nWeitere Mitteilungen:\n{4}
+mail.body.title=Mitteilung aus Kurs {0}
+mail.body.from=Verfasst von {0} am {1}
+mail.body.more=Weitere Mitteilungen
 pane.tab.accessibility=Zugang
 pane.tab.infos_config=Mitteilungs-Konfiguration
 pane.tab.infos_config.title=$\:pane.tab.infos_config
diff --git a/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_en.properties
index 7fd07e3115309a10c9d6ecbabe0314a57ee666bd..2a82e9884e32bc9c63e5a5635d99dbc04099f79a 100644
--- a/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_en.properties
@@ -1,20 +1,11 @@
 #Wed Jan 26 19:19:32 CET 2011
 auto_subscribe=Subscribe automatically
-
-
-
-
-
-
 condition.accessibility.title=Read notifications
 condition.admin.title=Manage notifications
 condition.editable.title=Create notifications
-
-
-
-
-
-mail.body=Notification regarding course {0}\r\nWritten by {1} on {2}\r\n\r\n{3}\r\n\r\nFurther information\:\r\n{4}
+mail.body.title=Notification regarding course {0}
+mail.body.from=Written by {0} on {1}
+mail.body.more=Further information
 pane.tab.accessibility=Access
 pane.tab.infos_config=Notification configuration
 pane.tab.infos_config.all=All
diff --git a/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_fr.properties
index cba54b697ce8288eea9328b314b20948c9e60dd0..0999a110d4980681d8d3366f95f271c14183ad93 100644
--- a/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_fr.properties
@@ -1,20 +1,11 @@
 #Sun Jan 16 16:29:25 CET 2011
 auto_subscribe=S'abonner automatiquement
-
-
-
-
-
-
 condition.accessibility.title=Lire les communications
 condition.admin.title=G\u00E9rer les communications
 condition.editable.title=R\u00E9diger une communication
-
-
-
-
-
-mail.body=Communication du cours {0}\r\nR\u00E9dig\u00E9 par {1} le {2}\r\n\r\n{3}\r\n\r\nCommunications ult\u00E9rieures\:\r\n{4}
+mail.body.title=Communication du cours {0}
+mail.body.from=R\u00E9dig\u00E9 par {0} le {1}
+mail.body.more=Communications ult\u00E9rieures
 pane.tab.accessibility=Acc\u00E8s
 pane.tab.infos_config=Configuration communication
 pane.tab.infos_config.all=Tous
diff --git a/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_it.properties
index 468532d5c480da43dc5d7252d0d5906d5b7922f4..cf86794682dea3e1dcd549ff62c5cd723d409a36 100644
--- a/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_it.properties
@@ -1,20 +1,11 @@
 #Mon Jan 17 16:40:04 CET 2011
 auto_subscribe=Abbonare automaticamente
-
-
-
-
-
-
 condition.accessibility.title=Leggere le comunicazioni
 condition.admin.title=Gestire le comunicazioni
 condition.editable.title=Redigere una comunicazione
-
-
-
-
-
-mail.body=Comunicazione dal corso {0}\r\nRedatta da {1} il {2}\r\n\r\n{3}\r\n\r\nComunicazioni ulteriori\:\r\n{4}
+mail.body.title=Comunicazione dal corso {0}
+mail.body.from=Redatta da {0} il {1}
+mail.body.more=Comunicazioni ulteriori
 pane.tab.accessibility=Accesso
 pane.tab.infos_config=Configurazione comunicazione
 pane.tab.infos_config.all=Tutti
diff --git a/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_jp.properties
index 22155b75eef30b4c0515d362a45a63cd09c1a1fe..115c432b64f22c83af86d76b6c4d9122b31434c3 100644
--- a/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_jp.properties
+++ b/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_jp.properties
@@ -1,18 +1,11 @@
 #Thu Sep 08 16:42:38 CEST 2011
 auto_subscribe=\u81EA\u52D5\u7684\u306B\u767B\u9332\u3059\u308B
-
-
-
-
 condition.accessibility.title=\u901A\u77E5\u3092\u8AAD\u3080
 condition.admin.title=\u901A\u77E5\u3092\u7BA1\u7406\u3059\u308B
 condition.editable.title=\u901A\u77E5\u3092\u4F5C\u6210\u3059\u308B
-
-
-
-
-
-mail.body=\u30B3\u30FC\u30B9{0} \u306B\u95A2\u3059\u308B\u901A\u77E5\r\n\u4F5C\u6210 {1} - {2}\r\n\r\n{3}\r\n\r\n\u8A73\u7D30\u60C5\u5831\:\r\n{4}
+mail.body.title=\u30B3\u30FC\u30B9{0} \u306B\u95A2\u3059\u308B\u901A\u77E5
+mail.body.from=\u4F5C\u6210 {0} - {1}
+mail.body.more=\u8A73\u7D30\u60C5\u5831
 pane.tab.accessibility=\u30A2\u30AF\u30BB\u30B9
 pane.tab.infos_config=\u901A\u77E5\u8A2D\u5B9A
 pane.tab.infos_config.all=\u3059\u3079\u3066
diff --git a/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_nl_NL.properties
index d34a5a3c9ed70a5feff0481a0bbc5bad7ed4a41c..7e00f0cb026cd9f46defa203e9384e1d3cf53316 100644
--- a/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_nl_NL.properties
+++ b/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_nl_NL.properties
@@ -1,20 +1,11 @@
 #Thu Sep 08 16:42:44 CEST 2011
 auto_subscribe=Automatisch inschrijven
-
-
-
-
-
-
 condition.accessibility.title=Lees mededelingen
 condition.admin.title=Mededelingen beheren
 condition.editable.title=Mededelingen aanmaken
-
-
-
-
-
-mail.body=Mededelingen betreffende de cursus {0}\r\nGeschreven door {1} op {2}\r\n\r\n{3}\r\n\r\nVerdere informatie\:\r\n{4}
+mail.body.title=Mededelingen betreffende de cursus {0}
+mail.body.from=Geschreven door {0} op {1}
+mail.body.more=Verdere informatie
 pane.tab.accessibility=Toegang
 pane.tab.infos_config=Mededelingen configuratie
 pane.tab.infos_config.all=ALL
diff --git a/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_pl.properties
index 79d55f2b2612c6ffa44787bc7e114871081de0c0..fa025efae5def54126583c04b39cd259304e2b3b 100644
--- a/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_pl.properties
@@ -1,15 +1,11 @@
 #Thu Sep 08 16:42:41 CEST 2011
 auto_subscribe=Subskrybuj automatycznie
-
 condition.accessibility.title=Przeczytaj powiadomienia
 condition.admin.title=Zarz\u0105dzaj powiadomieniami
 condition.editable.title=Utw\u00F3rz powiadomienie
-
-
-
-
-
-mail.body=Powiadomienie dotycz\u0105ce kursu {0}\r\nUtworzone przez {1} dnia {2}\r\n\r\n{3}\r\n\r\nDalsze informacje\:\r\n{4}
+mail.body.title=Powiadomienie dotycz\u0105ce kursu {0}
+mail.body.from=Utworzone przez {0} dnia {1}
+mail.body.more=Dalsze informacje
 pane.tab.accessibility=Dost\u0119p
 pane.tab.infos_config=Konfiguracja powiadomienia
 pane.tab.infos_config.all=Wszystko
diff --git a/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_pt_BR.properties
index cede07c2701544b74267b21faa78916a5399fbb6..b93a116462418a04995de942bf6ab0f07d0ab2a8 100644
--- a/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/course/nodes/info/_i18n/LocalStrings_pt_BR.properties
@@ -1,20 +1,11 @@
 #Thu Sep 08 16:42:37 CEST 2011
 auto_subscribe=Inscrever-se automaticamente
-
-
-
-
-
-
 condition.accessibility.title=Ler notifica\u00E7\u00F5es
 condition.admin.title=Gerenciar as notifica\u00E7\u00F5es
 condition.editable.title=Criar notifica\u00E7\u00F5es
-
-
-
-
-
-mail.body=Notifica\u00E7\u00E3o do curso {0} \r\nEscrito por {1} em {2} \r\n\r\n{3} \r\n\r\nInforma\u00E7\u00F5es adicionais\: \r\n{4}
+mail.body.title=Notifica\u00E7\u00E3o do curso {0}
+mail.body.from=Escrito por {0} em {1}
+mail.body.more=Informa\u00E7\u00F5es adicionais
 pane.tab.accessibility=Acesso
 pane.tab.infos_config=Configura\u00E7\u00E3o de notifica\u00E7\u00E3o
 pane.tab.infos_config.all=Tudo
diff --git a/src/main/java/org/olat/course/nodes/members/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/members/_i18n/LocalStrings_pt_BR.properties
index ad6aa26352c577a3e662c46356adbbf81f99092d..a29d83137746368f207e65037c87f954c4b5b283 100644
--- a/src/main/java/org/olat/course/nodes/members/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/course/nodes/members/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Thu Apr 28 23:18:45 CEST 2016
+#Wed Jun 15 22:41:22 CEST 2016
 add.member=Adicionar
 already.all.selected=Voc\u00EA j\u00E1 escolheu todos usu\u00E1rios
 coaches=Treinadores do Curso
@@ -28,6 +28,8 @@ members.noParticipants.message=Este curso n\u00E3o tem grupos de estudo com os p
 members.owners=Administrador do curso
 members.participants=Participante
 members.to="{0}" do curso "{1}"
+message.want.coaches=Treinadores
+message.want.participants=Participantes
 msg.send.ok=$org.olat.modules.co\:msg.send.ok
 owners=Propriet\u00E1rios do curso
 owners.to=administradores do curso "{0}"
@@ -35,8 +37,6 @@ pane.tab.accessibility=Acesso
 pane.tab.membersconfig=Configura\u00E7\u00E3o
 participants=Participantes do Curso
 participants.to=participantes do curso "{0}"
+print.title=Album de Fotos
 select.members=Selecionar usu\u00E1rios
 title_info=Lista de participantes
-
-message.want.coaches=Treinadores
-message.want.participants=Participantes
diff --git a/src/main/java/org/olat/course/nodes/projectbroker/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/projectbroker/_i18n/LocalStrings_pt_BR.properties
index dc3f03fc91c166be945625ad3f119e913797fbbf..25485dcffd38aa6df0f46bf17d550c5453d15898 100644
--- a/src/main/java/org/olat/course/nodes/projectbroker/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/course/nodes/projectbroker/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Fri Apr 29 15:01:32 CEST 2016
+#Wed Jun 15 22:41:26 CEST 2016
 ENROLLMENT_EVENT=Data de registro
 HANDOUT_EVENT=Vencimento
 account.manager.groupdescription=Administrador de $\:projectbroker.themenboerse <i>{0}</i>, criado automaticamente.
diff --git a/src/main/java/org/olat/course/nodes/video/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/video/_i18n/LocalStrings_fr.properties
index c9ead54b214fc65f9ccad4b9f8fba752f6c8ace5..7cbaf04ca9904ed097bda090d086fc60dbd333af 100644
--- a/src/main/java/org/olat/course/nodes/video/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/course/nodes/video/_i18n/LocalStrings_fr.properties
@@ -1,13 +1,14 @@
-#Thu May 05 11:36:58 CEST 2016
+#Wed Jun 15 21:55:23 CEST 2016
 chosenvideo=Ressource vid\u00E9o s\u00E9lectionn\u00E9e
 command.changevideo=Remplacer la ressource vid\u00E9o
 command.choosevideo=S\u00E9lectionner une ressource vid\u00E9o
 command.closevideo=Fermer la fen\u00EAtre
 command.createvideo=S\u00E9lectionner ou importer une ressource vid\u00E9o
-description.none=Aucune
+command.preview=aper\u00E7u de la vid\u00E9o
+condition.accessibility.title=Acc\u00E8s
 description.custom=Propre description
+description.none=Aucune
 description.resource=Description de la page d'infos
-condition.accessibility.title=Acc\u00E8s
 header=S\u00E9lectionner une vid\u00E9o
 no.video.chosen=Aucune vid\u00E9o s\u00E9lectionn\u00E9e
 optionsSection=Options
diff --git a/src/main/java/org/olat/course/nodes/video/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/video/_i18n/LocalStrings_pt_BR.properties
new file mode 100644
index 0000000000000000000000000000000000000000..2958a055df8b14b82ad995a03b549d7e17f84da2
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/video/_i18n/LocalStrings_pt_BR.properties
@@ -0,0 +1,24 @@
+#Wed Jun 15 22:47:08 CEST 2016
+chosenvideo=Selecionar video
+command.changevideo=Substituir v\u00EDdeo
+command.choosevideo=Escolher v\u00EDdeo
+command.closevideo=Fechar janela
+command.createvideo=Selecionar ou importar v\u00EDdeo
+command.preview=Visualizar v\u00EDdeo
+condition.accessibility.title=Acesso
+description.custom=Descri\u00E7\u00E3o personalizada
+description.none=Nenhum
+description.resource=Descri\u00E7\u00E3o do recurso
+header=Selecionar v\u00EDdeo
+no.video.chosen=Nenhum v\u00EDdeo selecionado
+optionsSection=Op\u00E7\u00F5es
+pane.tab.accessibility=Acesso
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
+pane.tab.videoconfig=V\u00EDdeo
+preview.video=Visualiza\u00E7\u00E3o
+title_cvideo=Recursos de v\u00EDdeo
+title_video=V\u00EDdeo
+video.config.autoplay=Autoplay do v\u00EDdeo
+video.config.comments=Coment\u00E1rios do v\u00EDdeo
+video.config.description=Descri\u00E7\u00E3o
+video.config.rating=Avalia\u00E7\u00E3o do v\u00EDdeo
diff --git a/src/main/java/org/olat/group/ui/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/group/ui/_i18n/LocalStrings_it.properties
index 68edbae5598f21dbade2b89d5eceade0c9c65141..5f2478568759cc87eaf05275a58d654a2bad1ad2 100644
--- a/src/main/java/org/olat/group/ui/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/group/ui/_i18n/LocalStrings_it.properties
@@ -1,4 +1,4 @@
-#Thu Sep 03 11:24:42 CEST 2015
+#Thu Jun 16 17:24:28 CEST 2016
 LearningGroup=Gruppo di studio
 action.choose=Seleziona
 admin.menu.title=Gruppo
@@ -33,7 +33,10 @@ create.form.error.illegalName=Virgole e virgolette non sono ammesse nei nomi di
 create.form.error.illegalNames=$\:create.form.error.illegalName . I seguenti nomi di gruppo non sono validi\: {0}
 create.form.error.nameTooLong=I nomi dei gruppi non possono contenere pi\u00F9 di 100 segni
 create.form.error.numberOrNull=Immettere solo cifre o non compilare per "nessun limite".
+create.form.externalid=ID esterno
 create.form.groupcard=Biglietto da visita
+create.form.managedflags=Moduli gestiti esternamente
+create.form.managedflags.intro=Questo gruppo \u00E8 stato creato con uno strumento esterno. Per questa ragione alcune impostazioni e alcuni moduli non possono essere modificati e usati all'interno di OpenOLAT. I seguenti elementi sono bloccati all'interno di OpenOLAT\:
 create.form.message.example.group=(Esempio\: rosso,verde,blu)
 create.form.title=Creare un nuovo gruppo di studio
 create.form.title.bgname=Nome del gruppo
diff --git a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_pt_BR.properties
index 4dc720eadaccc47feeaba73016ecc737d56211d4..c21ece52707508fc88beb480ae245bd6c14882b3 100644
--- a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Mon Feb 08 19:18:25 CET 2016
+#Wed Jun 15 20:23:30 CEST 2016
 add.member=$org.olat.group.ui.main\:add.member
 allow.leaving.group=Membros podem sair do grupo
 areachoice.no.areas.admin=Nenhuma \u00E1rea de ensino encontrada. Favor criar uma \u00E1rea de ensino dentro do seu grupo gestor.
@@ -7,8 +7,11 @@ assessment=$org.olat.group.ui.main\:assessment
 chkBox.open=Publicar grupo na \u00E1rea do grupo para reserva
 chkBox.open.downloadList=Os usu\u00E1rios podem baixar a lista de membros
 chkBox.open.owners=Todos os usu\u00E1rios podem ver os treinadores
+chkBox.open.owners.help=Esta op\u00E7\u00E3o afeta todos os usu\u00E1rios do sistema e, assim, aciona automaticamente a op\u00E7\u00E3o "Os membros podem ver os treinadores".
 chkBox.open.partips=Todos os usu\u00E1rios podem ver os participantes
+chkBox.open.partips.help=Esta op\u00E7\u00E3o afeta todos os usu\u00E1rios do sistema e, assim, automaticamente marca a op\u00E7\u00E3o os "Os membros podem ver os participantes".
 chkBox.open.waitingList=Todos os usu\u00E1rios podem ver a lista de espera
+chkBox.open.waitingList.help=Esta op\u00E7\u00E3o afeta todos os usu\u00E1rios do sistema e, assim, marca automaticamente a op\u00E7\u00E3o "Os membros podem ver a lista de espera".
 chkBox.show.owners=Membros podem ver propriet\u00E1rios
 chkBox.show.partips=Membros podem ver participantes
 chkBox.show.waitingList=Membros podem ver lista de espera
diff --git a/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java b/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java
index 7dd48dca43ea36f991125a2f8a2afcac4c691f99..95306d80906718b60724994197f329038ab2ee8a 100644
--- a/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java
+++ b/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java
@@ -605,8 +605,8 @@ public abstract class AbstractMemberListController extends FormBasicController i
 	protected void doLeave(List<Identity> members, boolean sendMail) {
 		MailPackage mailing = new MailPackage(sendMail);
 		if(repoEntry != null) {
-			repositoryManager.removeMembers(getIdentity(), members, repoEntry, mailing);
 			businessGroupService.removeMembers(getIdentity(), members, repoEntry.getOlatResource(), mailing);
+			repositoryManager.removeMembers(getIdentity(), members, repoEntry, mailing);
 		} else {
 			businessGroupService.removeMembers(getIdentity(), members, businessGroup.getResource(), mailing);
 		}
diff --git a/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java b/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java
index 237a9c8306de88e9ddd17667adcb8f1099c11c5e..5d67410e46f69686471353caeb2875834ae37c50 100644
--- a/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java
+++ b/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java
@@ -437,7 +437,7 @@ public class LDAPLoginManagerImpl implements LDAPLoginManager, GenericEventListe
 				.getOlatPropertyToLdapAttribute(LDAPConstants.LDAP_USER_IDENTIFYER)));
 		String email = getAttributeValue(userAttributes.get(syncConfiguration.getOlatPropertyToLdapAttribute(UserConstants.EMAIL)));
 		// Lookup user
-		if (securityManager.findIdentityByName(uid) != null) {
+		if (securityManager.findIdentityByNameCaseInsensitive(uid) != null) {
 			log.error("Can't create user with username='" + uid + "', this username does already exist in OLAT database", null);
 			return null;
 		}
@@ -587,8 +587,9 @@ public class LDAPLoginManagerImpl implements LDAPLoginManager, GenericEventListe
 	 *         otherwise (if user exists but not managed by LDAP, error Object is
 	 *         modified)
 	 */
+	@Override
 	public Identity findIdentyByLdapAuthentication(String uid, LDAPError errors) {
-		Identity identity = securityManager.findIdentityByName(uid);
+		Identity identity = securityManager.findIdentityByNameCaseInsensitive(uid);
 		if (identity == null) {
 			return null;
 		} else {
diff --git a/src/main/java/org/olat/login/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/login/_i18n/LocalStrings_pt_BR.properties
index 2faacdefe821387be92e8329df55cd224a6f10e0..0215d5ff7cf4db720436764049c1508ba85cef61 100644
--- a/src/main/java/org/olat/login/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/login/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Thu Apr 28 23:25:18 CEST 2016
+#Wed Jun 15 22:47:10 CEST 2016
 about.copyright=Copyright e contribui\u00E7\u00F5es
 about.date=Zurique, 8 de Fevereiro de 2011
 about.elearningjournal.test.2015=O eLearning-Journal classificou o LMS OpenOLAT com o resultado "muito bom" em uma compara\u00E7\u00E3o extensa e em testes de LMS dispon\u00EDveis no mercado. Com este grande resultado, o OpenOLAT \u00E9 avaliado como a melhor solu\u00E7\u00E3o. Como grande destaque, o OpenOLAT foi nomeado devido ao grande n\u00FAmero de recursos e ferramentas dispon\u00EDveis.
diff --git a/src/main/java/org/olat/modules/gotomeeting/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/modules/gotomeeting/ui/_i18n/LocalStrings_pt_BR.properties
new file mode 100644
index 0000000000000000000000000000000000000000..7135ba1c57176917828dcdaeac4f6e03ea7449c1
--- /dev/null
+++ b/src/main/java/org/olat/modules/gotomeeting/ui/_i18n/LocalStrings_pt_BR.properties
@@ -0,0 +1,60 @@
+#Wed Jun 15 22:26:03 CEST 2016
+add.my.account=Eu tenho uma conta
+add.organizer=Adicionar um novo organizador
+add.training=Adicionar novo treinamento
+admin.menu.title=GoToTraining
+admin.menu.title.alt=Configura\u00E7\u00E3o de integra\u00E7\u00E3o com GoToMeeting
+confirm.delete.meeting=Voc\u00EA realmente quer apagar a pr\u00F3xima reuni\u00E3o "{0}"?
+confirm.remove.organizer=Voc\u00EA realmente deseja remover o organizador "{0}"?
+download=Baixar
+error.code.InvalidTrainingDatesMaxDuration=O treinamento n\u00E3o pode durar mais que 24 horas.
+error.code.NoSuchTraining=O treinamento n\u00E3o pode ser encontrado.
+error.code.TrainingInSession=O treinamento j\u00E1 come\u00E7ou
+error.code.TrainingOver=Treinamento est\u00E1 encerrado
+error.code.unkown=Um erro inesperado ocorreu no servidor GoToTraining.
+error.join=Um erro inesperado aconteceu e voc\u00EA n\u00E3o pode juntar-se ao treinamento agora.
+error.organizer.overbooked=O organizador j\u00E1 tem um treinamento previsto neste per\u00EDodo.
+error.start.after.end=A data final da reuni\u00E3o n\u00E3o deve ser anterior \u00E0 data de in\u00EDcio.
+error.training.schedule.failed=O treinamento n\u00E3o pode ser planejado
+goto.configuration=Configura\u00E7\u00E3o
+goto.module.enabled=M\u00F3dulo "GoToTraining"
+join=Entrar
+meeting.end=Encerrar
+meeting.name=Nome
+meeting.organizer=Organizador
+meeting.resource=Recurso
+meeting.start=Iniciar
+meetings.admin.title=Configura\u00E7\u00E3o
+meetings.past=Reuni\u00F5es passadas
+meetings.title=Treinamentos
+meetings.upcoming=Reuni\u00F5es futuras
+organizer.email=E-mail
+organizer.firsName=Primeiro nome
+organizer.key=Chave de organizador
+organizer.label=R\u00F3tulo
+organizer.lastName=\u00DAltimo nome
+organizer.owner=Propriet\u00E1rio
+organizer.password=Senha
+organizer.renew.date=Renovar
+organizer.username=Usu\u00E1rio
+organizers=Organizadores
+organizers.title=Organizadores
+recording.name=Nome
+recordings=Grava\u00E7\u00F5es
+recordings.empty=Esse treinamento n\u00E3o possui nenhuma grava\u00E7\u00E3o
+remove=Excluir
+renew.organizer=Renovar
+table.empty=N\u00E3o h\u00E1 treinamentos programados dispon\u00EDveis neste momento
+timezone.id=Fuso hor\u00E1rio do servidor OLAT
+training.confirm=Confirmar
+training.consumerkey=Chave de cliente do treinamento
+training.description=Descri\u00E7\u00E3o
+training.end=Fim
+training.join=Entrar
+training.name=Nome
+training.register=Registrar
+training.register.failed=Voc\u00EA n\u00E3o pode se registrar
+training.register.success=Voc\u00EA est\u00E1 registrado
+training.scheduled=O treinamento foi programado com sucesso.
+training.start=Iniciar treinamento
+warning.remove.organizer=O organizador n\u00E3o pode ser removido
diff --git a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_pt_BR.properties
index 19fb462b700f4a23fedac56cb987d864a911b61f..452db2d272963112deaa972cdc71a6290cb09033 100644
--- a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Fri Jan 23 22:15:57 CET 2015
+#Wed Jun 15 20:58:05 CEST 2016
 add=+
 add.to.list=Adicionar \u00E0 lista
 applications=Aplica\u00E7\u00F5es
@@ -49,16 +49,6 @@ general.keywords=Palavras-chave
 general.language=Idioma
 general.master.identifier=Master ID
 general.title=T\u00F3pico
-
-
-
-
-
-
-
-
-
-
 import.excellike=Importa\u00E7\u00E3o Excel via copia & cola
 import.failed=Perguntas n\u00E3o foram importadas.
 import.file=Importar arquivo
@@ -96,6 +86,11 @@ menu.admin.levels=N\u00EDvel
 menu.admin.levels.alt=N\u00EDvel
 menu.admin.licenses=Licen\u00E7a
 menu.admin.licenses.alt=Licen\u00E7a
+menu.admin.overview.1=A \u00E1rea de administra\u00E7\u00E3o do banco de quest\u00F5es fornece a gestores do banco de quest\u00E3o acesso aos cinco dom\u00EDnios da organiza\u00E7\u00E3o do banco de quest\u00F5es.
+menu.admin.overview.2=O <b>reservat\u00F3rio</b>, ou banco de dados, permite a troca de itens para os usu\u00E1rios com os direitos apropriados. Reservat\u00F3rios permitim, assim, o trabalho colaborativo para grupos espec\u00EDficos de autores.
+menu.admin.overview.3=Se autores precisarem de mais tipos de perguntas, al\u00E9m dos cinco tipos padr\u00E3o j\u00E1 existentes, voc\u00EA pode cri\u00E1-los aqui.
+menu.admin.overview.4=<b>N\u00EDvel</b> adiciona outra op\u00E7\u00E3o de categoriza\u00E7\u00E3o do banco de quest\u00F5es, e pode ser comparado com os n\u00EDveis de dificuldade. Assim como com os indiv\u00EDduos, aconselhamos aos administradores criar n\u00EDveis. Crie <b>licen\u00E7a</b> de tipos adicionais para complementar as oito licen\u00E7as padr\u00E3o j\u00E1 existentes (dos quais sete s\u00E3o da Creative Commons).
+menu.admin.overview.5=Mais informa\u00E7\u00F5es sobre as diferentes \u00E1reas podem ser encontradas na respectiva ajuda.
 menu.admin.pools=Administra\u00E7\u00E3o do reservat\u00F3rio
 menu.admin.studyfields=Assunto
 menu.admin.studyfields.alt=Assunto
diff --git a/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_de.properties
index 5ce262e041401dc8b06312133eba5e7db06a0b21..82af75162d63c987e7d74bbe104a0a5cfcd32f67 100644
--- a/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_de.properties
@@ -1,4 +1,4 @@
-#Thu Apr 21 15:21:09 CEST 2016
+#Wed Jun 15 14:04:51 CEST 2016
 add.track=Untertitel hinzuf\u00FCgen
 admin.config.enable=Videoressource einschalten
 admin.config.title=Videokonfiguration
@@ -6,24 +6,23 @@ admin.config.transcoding=Transcoding aktivieren
 admin.config.videoNode=Video Kursbaustein aktivieren
 admin.menu.title=Video
 admin.menu.title.alt=Konfiguration der Video-Resource
-poster.select=Poster ausw\u00E4hlen
-poster.help=Bild vom Typ JPG. Das Bild sollte die identischen Masse wie das Original Video haben (Selbe H\u00F6he und Weite in Pixel).
+listing.viewing.counter={0} Aufrufe
 poster.error.filetype=F\u00FCr Poster Bild werden nur Bilder vom Typ JPG unterst\u00FCtzt.
+poster.help=Bild vom Typ JPG. Das Bild sollte die identischen Masse wie das Original Video haben (Selbe H\u00F6he und Weite in Pixel).
+poster.select=Poster ausw\u00E4hlen
+quality.master=Master video
+quality.resolution.1080=1080p Full-HD
+quality.resolution.2160=2160p 4K
+quality.resolution.240=240p
+quality.resolution.360=360p
+quality.resolution.480=480p
+quality.resolution.720=720p HD
 quality.table.header.dimension=Dimension
 quality.table.header.format=Format
-quality.table.header.size=Gr\u00F6sse
 quality.table.header.resolution=Aufl\u00F6sung
+quality.table.header.size=Gr\u00F6sse
 quality.table.header.view=ansehen
 quality.view=vorschau
-quality.master=Master video
-quality.resolution.2160=2160p 4K
-quality.resolution.1080=1080p Full-HD
-quality.resolution.720=720p HD
-quality.resolution.480=480p
-quality.resolution.360=360p
-quality.resolution.240=240p
-transcoding.waiting=In Warteschlange
-transcoding.processing=In Bearbeitung
 tab.video.metaDataConfig=Metadaten
 tab.video.posterConfig=Poster konfigurieren
 tab.video.qualityConfig=Videoqualit\u00E4ten
@@ -41,6 +40,8 @@ track.table.label=Untertitel
 track.upload=Hochladen
 track.upload.error.nofile=Bitte w\u00E4hlen Sie eine Datei aus.
 track.upload.error.nolang=Bitte w\u00E4hlen Sie eine Sprache aus dieser Liste aus
+transcoding.processing=In Bearbeitung
+transcoding.waiting=In Warteschlange
 video.config.creationDate=Erstellungs Datum
 video.config.description=Beschreibung
 video.config.fileSize=Gr\u00F6sse der Videodatei
@@ -51,10 +52,10 @@ video.config.poster.hint=Hier legen Sie fest welches Bild sowohl als Poster / St
 video.config.poster.replace=Poster ersetzen
 video.config.poster.upload=Poster hochladen
 video.config.ratio=Seitenverh\u00E4ltnis
+video.config.track.error.type=nur *.vtt and *.srt Dateien sind erlaubt
 video.config.track.table.file=Untertitel Datei
 video.config.tracks=Verf\u00FCgbare Untertiteldateien
 video.config.tracks.table.add=hinzuf\u00FCgen
 video.config.tracks.table.delete=l\u00F6schen
 video.config.tracks.table.lang=Sprache
 video.config.width=Breite
-listing.viewing.counter={0} Aufrufe
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_fr.properties
index 84ab27b1d6a5634a528ca5b59bdebe1386b62db3..a29e07cb7104214e3f72ab18ce76f18aea80e248 100644
--- a/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_fr.properties
@@ -1,4 +1,4 @@
-#Thu May 05 11:40:12 CEST 2016
+#Wed Jun 15 21:53:47 CEST 2016
 add.track=Ajouter sous-titre
 admin.config.enable=Activ\u00E9 la resource de type vid\u00E9o
 admin.config.title=Configuration resource vid\u00E9o
@@ -6,6 +6,8 @@ admin.config.transcoding=Activ\u00E9 le transcodage
 admin.config.videoNode=Activ\u00E9 l'\u00E9l\u00E9ment de cours vid\u00E9o
 admin.menu.title=Vid\u00E9o
 admin.menu.title.alt=Configuration de la resource vid\u00E9o
+listing.viewing.counter={0} vues
+poster.error.filetype=Seules les illustrations au format JPG sont support\u00E9es.
 poster.select=S\u00E9lectionner l'aper\u00E7u
 quality.master=Vid\u00E9o master
 quality.resolution.1080=1080p Full-HD
@@ -25,6 +27,7 @@ tab.video.posterConfig=Configuration aper\u00E7u
 tab.video.qualityConfig=Qualit\u00E9 vid\u00E9o
 tab.video.settings=Configuration vid\u00E9o
 tab.video.trackConfig=Sous-titre
+topnav.video=LearnTube
 track.delete=Effacer
 track.langs=Langue
 track.notrack=Il n'y a pas de sous-titres disponible pour cette vid\u00E9o. Clicker le bouton "$\:add.track" pour ajouter un fichier de sous-titres.
diff --git a/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_pt_BR.properties
new file mode 100644
index 0000000000000000000000000000000000000000..9f484e96375975ba43850ce3120f2cf46e623a30
--- /dev/null
+++ b/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_pt_BR.properties
@@ -0,0 +1,60 @@
+#Wed Jun 15 21:42:08 CEST 2016
+add.track=Adicionar legenda
+admin.config.enable=Ativar recurso de v\u00EDdeo
+admin.config.title=Configura\u00E7\u00E3o do v\u00EDdeo
+admin.config.transcoding=Acionar a transcodifica\u00E7\u00E3o do v\u00EDdeo
+admin.config.videoNode=Ativar elemento de curso de v\u00EDdeo.
+admin.menu.title=V\u00EDdeo
+admin.menu.title.alt=Configura\u00E7\u00E3o do Recurso-V\u00EDdeo
+listing.viewing.counter={0} visualiza\u00E7\u00F5es
+poster.error.filetype=Para imagens (cartaz) apenas imagens do tipo JPG s\u00E3o suportados.
+poster.help=Imagem do tipo JPG. Certifique-se que o cartaz tem a mesma dimens\u00E3o exata como o v\u00EDdeo original (mesma altura e largura em pixel).
+poster.select=Escolha o enquadramento do poster
+quality.master=V\u00EDdeo mestre
+quality.resolution.1080=1080p Full-HD
+quality.resolution.2160=2160p 4K
+quality.resolution.240=240p
+quality.resolution.360=360p
+quality.resolution.480=480p
+quality.resolution.720=720p HD
+quality.table.header.dimension=Dimens\u00F5es
+quality.table.header.format=Formato
+quality.table.header.resolution=Resolu\u00E7\u00E3o
+quality.table.header.size=Tamanho
+quality.table.header.view=Amostra
+quality.view=amostra
+tab.video.metaDataConfig=Metadaten
+tab.video.posterConfig=Substituir poster
+tab.video.qualityConfig=Qualidade do v\u00EDdeo
+tab.video.settings=Configura\u00E7\u00F5es do v\u00EDdeo
+tab.video.trackConfig=Configura\u00E7\u00F5es da leganda
+topnav.video=LearnTube
+topnav.video.alt=Biblioteca com v\u00EDdeos did\u00E1ticos dispon\u00EDveis
+track.delete=Excluir
+track.langs=Idioma
+track.notrack=N\u00E3o h\u00E1 legendas dispon\u00EDveis para este v\u00EDdeo ainda. Selecione o bot\u00E3o "$\:add.track" para adicionar um arquivo de legenda.
+track.table.header.delete=Excluir
+track.table.header.file=Arquivo
+track.table.header.language=Idioma
+track.table.label=Legendas
+track.upload=Enviar
+track.upload.error.nofile=Favor selecionar um arquivo
+track.upload.error.nolang=Favor selecionar um arquivo da lista
+transcoding.processing=Processando
+transcoding.waiting=Colocando na fila
+video.config.creationDate=Data de cria\u00E7\u00E3o
+video.config.description=Descri\u00E7\u00E3o
+video.config.fileSize=Tamanho do arquivo de v\u00EDdeo
+video.config.filename=Nome do arquivo
+video.config.height=Altura
+video.config.poster=Poster
+video.config.poster.hint=Determine aqui qual a imagem ou v\u00EDdeo que voc\u00EA ainda deseja adicionar como o poster / tela de in\u00EDcio para o v\u00EDdeo no curso, bem como a imagem de t\u00EDtulo para o recurso did\u00E1tico na p\u00E1gina info.
+video.config.poster.replace=Substituir poster
+video.config.poster.upload=Enviar poster
+video.config.ratio=Propor\u00E7\u00E3o da tela
+video.config.track.table.file=Arquivo de legenda
+video.config.tracks=Arquivos de legenda dispon\u00EDveis
+video.config.tracks.table.add=adicionar
+video.config.tracks.table.delete=excluir
+video.config.tracks.table.lang=idioma
+video.config.width=Largura
diff --git a/src/main/java/org/olat/modules/vitero/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/modules/vitero/ui/_i18n/LocalStrings_pt_BR.properties
index f282c4ca1072e1474ab5f4251193cf7f76274e2c..dae2a7f4bdd0274a05c898899c1e7eaa87a7a128 100644
--- a/src/main/java/org/olat/modules/vitero/ui/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/modules/vitero/ui/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Thu Apr 28 20:31:52 CEST 2016
+#Wed Jun 15 22:27:08 CEST 2016
 admin.menu.title=vitero
 admin.menu.title.alt=Configura\u00E7\u00E3o de servidores vitero
 available.places=Existam {0} lugares dispon\u00EDveis para esta reuni\u00E3o
@@ -26,3 +26,6 @@ check.users=Validar usu\u00E1rio
 check.users.nok=Valida\u00E7\u00E3o arrumou {2} problemas.
 check.users.ok=Valida\u00E7\u00E3o n\u00E3o detectou qualquer problema
 delete.confirm=Voc\u00EA realmente quer apagar a reuni\u00E3o? A reuni\u00E3o tamb\u00E9m ser\u00E3o removidos no servidor Vitero e n\u00E3o pode ser restaurado.
+delete.nok=A reuni\u00E3o n\u00E3o p\u00F4de ser exclu\u00EDdo por raz\u00F5es desconhecidas. Por favor, tente novamente mais tarde ou entre em contato com o administrador.
+delete.ok=A reuni\u00E3o foi exclu\u00EDda com sucesso.
+enabled=ativado
diff --git a/src/main/java/org/olat/repository/RepositoryManager.java b/src/main/java/org/olat/repository/RepositoryManager.java
index c988ac692252ca17d0f6b6ed121d3cbe23138c10..3d86347e3a10fd748e2b7af406f9b5f2f66f7ecf 100644
--- a/src/main/java/org/olat/repository/RepositoryManager.java
+++ b/src/main/java/org/olat/repository/RepositoryManager.java
@@ -206,6 +206,10 @@ public class RepositoryManager {
 			currentImage.delete();
 		}
 		
+		if(newImageFile == null || !newImageFile.exists() || newImageFile.getSize() <= 0) {
+			return false;
+		}
+		
 		String targetExtension = ".png";
 		String extension = FileUtils.getFileSuffix(newImageFile.getName());
 		if("jpg".equalsIgnoreCase(extension) || "jpeg".equalsIgnoreCase(extension)) {
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_pt_BR.properties
index da0c0f0f8d177ba8c7e9e876aa79df624994ff64..c3ceb022b4133a00752d19a36717f1f183ec513d 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Thu Apr 28 23:29:26 CEST 2016
+#Wed Jun 15 22:55:15 CEST 2016
 CourseModule=Curso
 EPStructuredMapTemplate=Template/modelo de Portfolio
 Failed=A transmiss\u00E3o deste arquivo falhou.
@@ -18,6 +18,7 @@ FileResource.SHAREDFOLDER=Pasta de recursos
 FileResource.SOUND=Som
 FileResource.SURVEY=Pesquisa
 FileResource.TEST=Teste
+FileResource.VIDEO=V\u00EDdeo
 FileResource.WIKI=Wiki
 FileResource.XLS=Excel
 NoImage=Este arquivo n\u00E3o pode ser carregado como imagem.
@@ -171,6 +172,7 @@ details.chdesc=Modificar descri\u00E7\u00E3o
 details.chprop=Modificar propriedades
 details.close=Fechar detalhes
 details.close.ressoure=Fechar
+details.close.ressoure.desc=Usando este m\u00E9todo, o recurso did\u00E1tico \u00E9 transformado em um estado "desativado". Os dados do curso, incluindo os dados do usu\u00E1rio ainda est\u00E3o l\u00E1, no entanto, o curso \u00E9 usado n\u00E3o ativamente.
 details.copy=Copiar
 details.copy.confirm=Voc\u00EA gostaria de copiar este recurso did\u00E1tico? {0}
 details.copy.confirm.warning=<div class\="o_warning">Existem recursos que voc\u00EA n\u00E3o tem permiss\u00E3o para copiar.</div><p>Gostaria de duplicar os seguintes recursos did\u00E1ticos? {0}</p>
@@ -180,6 +182,7 @@ details.delete.acknowledge=Confirma\u00E7\u00E3o
 details.delete.acknowledge.error=Por favor confirme.
 details.delete.acknowledge.msg=Todos os arquivos ser\u00E3o removidos permanentemente e n\u00E3o poder\u00E3o ser recuperados.
 details.delete.alt=Excluir {0}
+details.delete.desc=Usando este m\u00E9todo, o recurso did\u00E1tico, incluindo todos os dados do usu\u00E1rio ser\u00E3o permanentemente exclu\u00EDdos e n\u00E3o poder\u00E3o ser recuperados.
 details.delete.entries=Recursos did\u00E1ticos
 details.delete.error.editor=Recurso did\u00E1tico n\u00E3o pode ser apagado. Este recurso did\u00E1tico est\u00E1 sendo editado por outro usu\u00E1rio.
 details.delete.error.references=Recurso did\u00E1tico n\u00E3o pode ser apagado. Existem refer\u00EAncias ativas para este recurso no OpenOLAT.<br /><br /><font color\="red">{0}</font>
@@ -204,6 +207,7 @@ details.label.recent=\u00DAltima visita
 details.label.score=Pontua\u00E7\u00E3o
 details.label.status=Status
 details.launch=Exibir
+details.lifecycle.change=Ciclo de vida\: desativar/excluir
 details.members=Administrar membros
 details.noreferenceinfo=N\u00E3o utilizado em nenhum curso.
 details.notypeinfo=Informa\u00E7\u00E3o especifica n\u00E3o dispon\u00EDvel.
@@ -322,6 +326,7 @@ orderby.creationDate=Data de cria\u00E7\u00E3o
 orderby.favorit=Favorito
 orderby.lastModified=\u00DAltima atualiza\u00E7\u00E3o
 orderby.lastVisited=\u00DAltima visita
+orderby.launchCounter=Visualiza\u00E7\u00F5es
 orderby.lifecycle=Per\u00EDodo de implementa\u00E7\u00E3o
 orderby.passed=Passou
 orderby.rating=Avalia\u00E7\u00E3o
diff --git a/src/main/java/org/olat/user/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/user/_i18n/LocalStrings_pt_BR.properties
index f5451eb823007f4aa573bba83fd9db299dbbbbba..bfeb894972927e0f6af922ef3255537926816eed 100644
--- a/src/main/java/org/olat/user/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/user/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Thu Apr 28 23:26:56 CEST 2016
+#Wed Jun 15 22:47:18 CEST 2016
 Failed=Falha na carga do arquivo. 
 NoImage=Este formato de arquivo n\u00E3o pode ser carregado como imagem.
 ULLimitExceeded=A imagem n\u00E3o pode exceder {0} kByte.
@@ -64,7 +64,8 @@ interval.never=Nunca
 interval.two-hourly=Cada duas horas
 interval.weekly=Semanal
 landing.pages=P\u00E1gina inicial
-logo.select=$:ul.select
+logo.header=logotipo da empresa (formatos .jpg .jpeg .png .gif apenas)
+logo.select=$\:ul.select
 mail.intern.only=Enviar e-mails para a caixa de entrada interna do OLAT
 mail.send.copy=Enviar e-mails para a caixa de entrada interna do OLAT e para o endere\u00E7o {0}
 mail.system=Entrega de E-mail
diff --git a/src/main/java/org/olat/user/notification/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/user/notification/_i18n/LocalStrings_de.properties
index 1348499e662d2d14251b7811756692edf31a299e..f9164e65bef5daeed3147aa00bf2d76e9aa1b632 100644
--- a/src/main/java/org/olat/user/notification/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/user/notification/_i18n/LocalStrings_de.properties
@@ -1,6 +1,6 @@
 e#Mon Mar 02 09:54:04 CET 2009
 notifications.header=Es wurden neue Benutzerkonten erstellt:
 notifications.entry={0} erstellt 
-notifications.title={0} neue Benutzer haben sich angemeldet
-notifications.titleOne=1 neuer Benutzer hat sich angemeldet
-notifications.table.title=Neue Benutzer angemeldet
\ No newline at end of file
+notifications.title={0} neue Benutzer wurden erstellt
+notifications.titleOne=1 neuer Benutzer wurde erstellt
+notifications.table.title=Neue Benutzer erstellt
\ No newline at end of file
diff --git a/src/main/java/org/olat/user/notification/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/user/notification/_i18n/LocalStrings_en.properties
index 6c30c67121a8f383cbcff8955374d37250ceccd4..012a059d9cf911bc774ba557d292916fc85f0338 100644
--- a/src/main/java/org/olat/user/notification/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/user/notification/_i18n/LocalStrings_en.properties
@@ -1,7 +1,7 @@
 #Wed Jan 26 18:49:19 CET 2011
 e\#Mon=Mar 02 09\:54\:04 CET 2009
-notifications.entry={0} created
 notifications.header=New user accounts have been created\:
-notifications.table.title=New users logged on
-notifications.title={0} new users have logged on
-notifications.titleOne=One new user has logged on
+notifications.entry={0} created
+notifications.title={0} new users have been created
+notifications.titleOne=One new user has been created
+notifications.table.title=New users created
diff --git a/src/main/java/org/olat/user/propertyhandlers/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/user/propertyhandlers/_i18n/LocalStrings_pt_BR.properties
index 379d6d890949b33eb52951e047139ab48fb3a399..ecba4906605006262c72e1ba3d0b31a259882768 100644
--- a/src/main/java/org/olat/user/propertyhandlers/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/user/propertyhandlers/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Thu Apr 28 23:27:18 CEST 2016
+#Wed Jun 15 22:47:19 CEST 2016
 country.code.AD=Andorra
 country.code.AE=Emirados \u00C1rabes Unidos
 country.code.AG=Ant\u00EDgua e Barbuda
@@ -345,6 +345,7 @@ form.name.telPrivate.error.empty=O campo "Telefone residencial" \u00E9 obrigat\u
 form.name.telPrivate.error.valid=Por favor ensira um n\u00FAmero telef\u00F4nico v\u00E1lido
 form.name.typeOfUser=Tipo de usu\u00E1rio
 form.name.userInterests=Expertise
+form.name.userSearchedInterests=Expertise procurada
 form.name.xing=Xing
 form.name.xing.error=Por favor, indique um nome v\u00E1lido Xing (aquele no endere\u00E7o www do seu perfil Xing, http\://www.xing.com/profile/<seu user name>)
 form.name.zipCode=CEP
diff --git a/src/test/java/org/olat/basesecurity/BaseSecurityManagerTest.java b/src/test/java/org/olat/basesecurity/BaseSecurityManagerTest.java
index a480287c3118cf1f6e86d42005dba4f638110976..26cce0367516d759dcfb9875c3e70e03f364ba9e 100644
--- a/src/test/java/org/olat/basesecurity/BaseSecurityManagerTest.java
+++ b/src/test/java/org/olat/basesecurity/BaseSecurityManagerTest.java
@@ -171,6 +171,34 @@ public class BaseSecurityManagerTest extends OlatTestCase {
 		Assert.assertEquals(id, foundId);
 	}
 	
+	@Test
+	public void findIdentityByNameCaseInsensitive() {
+		//create a user it
+		String username = "find-ME-2-" + UUID.randomUUID().toString();
+		Identity id = JunitTestHelper.createAndPersistIdentityAsUser(username);
+		Assert.assertNotNull(id);
+		Assert.assertEquals(username, id.getName());
+		dbInstance.commitAndCloseSession();
+		
+		//find it
+		Identity foundId = securityManager.findIdentityByNameCaseInsensitive(username);
+		Assert.assertNotNull(foundId);
+		Assert.assertEquals(username, foundId.getName());
+		Assert.assertEquals(id, foundId);
+		
+		//find it lower case
+		Identity foundLoweredId = securityManager.findIdentityByNameCaseInsensitive(username.toLowerCase());
+		Assert.assertNotNull(foundLoweredId);
+		Assert.assertEquals(username, foundLoweredId.getName());
+		Assert.assertEquals(id, foundLoweredId);
+		
+		//find it upper case
+		Identity foundUpperedId = securityManager.findIdentityByNameCaseInsensitive(username.toUpperCase());
+		Assert.assertNotNull(foundUpperedId);
+		Assert.assertEquals(username, foundUpperedId.getName());
+		Assert.assertEquals(id, foundUpperedId);
+	}
+	
 	@Test
 	public void testFindIdentityByNames() {
 		//create a user it
diff --git a/src/test/java/org/olat/selenium/AssessmentTest.java b/src/test/java/org/olat/selenium/AssessmentTest.java
index c2ef243da053bb4fdcd58d2ad68490f76e173114..a36fb1a4c7077c5f6a7bf5f8b1228f7b5ccda0fb 100644
--- a/src/test/java/org/olat/selenium/AssessmentTest.java
+++ b/src/test/java/org/olat/selenium/AssessmentTest.java
@@ -148,7 +148,7 @@ public class AssessmentTest {
 			.selectWithTitle(testNodeTitle);
 		
 		//check that the title of the start page of test is correct
-		WebElement testH2 = browser.findElement(By.cssSelector("div.o_titled_wrapper.o_course_run h2"));
+		WebElement testH2 = browser.findElement(By.cssSelector("div.o_course_run h2"));
 		Assert.assertEquals(testNodeTitle, testH2.getText().trim());
 		
 		//start the test
@@ -245,7 +245,7 @@ public class AssessmentTest {
 			.selectWithTitle(testNodeTitle);
 		
 		//check that the title of the start page of test is correct
-		WebElement testH2 = browser.findElement(By.cssSelector("div.o_titled_wrapper.o_course_run h2"));
+		WebElement testH2 = browser.findElement(By.cssSelector("div.o_course_run h2"));
 		Assert.assertEquals(testNodeTitle, testH2.getText().trim());
 		
 		//add Ryomou as a course member
@@ -407,7 +407,7 @@ public class AssessmentTest {
 			.clickTree()
 			.selectWithTitle(scormNodeTitle);
 		
-		By scormH2By = By.cssSelector("div.o_titled_wrapper.o_course_run h2");
+		By scormH2By = By.cssSelector("div.o_course_run h2");
 		WebElement scormH2 = ryomouBrowser.findElement(scormH2By);
 		Assert.assertEquals(scormNodeTitle, scormH2.getText().trim());
 		
@@ -509,7 +509,7 @@ public class AssessmentTest {
 		OOGraphene.closeBlueMessageWindow(browser);
 		
 		//check that the title of the start page of test is correct
-		WebElement testH2 = browser.findElement(By.cssSelector("div.o_titled_wrapper.o_course_run h2"));
+		WebElement testH2 = browser.findElement(By.cssSelector("div.o_course_run h2"));
 		Assert.assertEquals(testNodeTitle, testH2.getText().trim());
 		
 		//add Ryomou and Kanu as a course member
diff --git a/src/test/java/org/olat/selenium/CourseTest.java b/src/test/java/org/olat/selenium/CourseTest.java
index d5e0a418a4a63b1caa9fa0c7e3c8acd32358ffba..86eee946ee0c29ed8888bac516583ad74ad5672b 100644
--- a/src/test/java/org/olat/selenium/CourseTest.java
+++ b/src/test/java/org/olat/selenium/CourseTest.java
@@ -748,7 +748,7 @@ public class CourseTest {
 			.selectWithTitle(testNodeTitle);
 		
 		//check that the title of the start page of test is correct
-		WebElement testH2 = browser.findElement(By.cssSelector("div.o_titled_wrapper.o_course_run h2"));
+		WebElement testH2 = browser.findElement(By.cssSelector("div.o_course_run h2"));
 		Assert.assertEquals(testNodeTitle, testH2.getText().trim());
 	}
 	
@@ -1047,7 +1047,7 @@ public class CourseTest {
 			.select(courseTitle)//go to the details page
 			.start();
 		
-		By courseTitleBy = By.cssSelector(".o_course_run h2");
+		By courseTitleBy = By.cssSelector("div.o_course_run h2");
 		WebElement courseTitleEl = userBrowser.findElement(courseTitleBy);
 		Assert.assertTrue(courseTitleEl.getText().contains(courseTitle));
 	}