diff --git a/.hgtags b/.hgtags
index 57b38bca53a345c50b6a05ca259b3d1bdbe5390d..b2447a857714c2926fd25cc4170f43c483827203 100644
--- a/.hgtags
+++ b/.hgtags
@@ -70,3 +70,4 @@ cee7299c2b62edf89f6164ab81f3b785a234f95b OpenOLAT 9.3.2
 4b1f3cb4957afcae660aa0823fa96aedf55a9382 OpenOLAT 9.3.3
 4e992c6a31e099192c90eb5f364950bd34cc7741 OpenOLAT 9.3.4
 3e4c2cc8495ac15f4af7397382655cfee1420336 OpenOLAT 9.3.5
+9a5d02062c328f6ab31aae75d02e7170c81fb459 OpenOLAT 9.4.0
diff --git a/src/main/java/org/olat/core/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/core/_i18n/LocalStrings_pt_BR.properties
index 271f4d622e2a3775ac4318b7ee3c7a7c7f27fda9..15cc7b87e51ed569911871680a8556a397c7e1d3 100644
--- a/src/main/java/org/olat/core/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/core/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Thu Sep 05 14:17:25 CEST 2013
+#Thu May 15 14:40:56 CEST 2014
 alert=Favor selecionar no m\u00EDnimo um objeto para sua a\u00E7\u00E3o.
 back=Voltar
 calendar.choose=Escolha uma data do mini calend\u00E1rio
@@ -60,6 +60,7 @@ rating.5.4=$\:rating.4.4
 rating.5.5=Excelente
 rating.explanation=Clique aqui para fazer avalia\u00E7\u00F5es
 save=Salvar
+save.close=Salvar e fechar
 savesas=Salvar como
 search=Buscar
 select=Selecionar
diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_pt_BR.properties
index 51b1877bc1b42b2ff92a3f3a82f807e19629d658..bc91003e577afc637beb703cbb915b378ab64447 100644
--- a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,5 @@
-#Fri Dec 17 17:13:22 CET 2010
+#Thu May 15 16:45:03 CEST 2014
+action.choose=Selecionar 
 actions.title=Modifica\u00E7\u00F5es
 chelp.del=<i>$\:subs.deleted</i>
 chelp.home=<i>$org.olat.home\:menu.root</i>
@@ -28,16 +29,13 @@ chelp.type=Nesta coluna, o tipo de objeto subscrito \u00E9 exibido. A coluna est
 chelp.unsubs=<i>$\:command.unsubscribe</i>
 command.subscribe=Inscrever
 command.unsubscribe=Desinscrever
-help.hover.notif=Ajuda para notifica\u00E7\u00F5es
-subscription.listitem.dateprefix=em {0}
-user.unknown=desconhecido
-action.choose=Selecionar 
 confirm.delete=Voc\u00EA realmente quer apagar esta notifica\u00E7\u00E3o em que voc\u00EA se inscreveu?
 email.nok=Not\u00EDcias n\u00E3o puderam ser enviadas via e-mail. Por favor, tente novamente mais tarde ou contacte a equipe de suporte.
 email.ok=Not\u00EDcias enviadas por e-mail.
 emailLink=Enviar not\u00EDcias por e-mail
 error.date=Formato de data errada (dd.mm.yyyy)
 error.publisherdeleted=O recurso foi apagado e n\u00E3o pode mais ser mostrado.
+help.hover.notif=Ajuda para notifica\u00E7\u00F5es
 info.notification.deleted=Esta notifica\u00E7\u00E3o subscrita foi exclu\u00EDda
 news.desc=A lista abaixo cont\u00E9m todas as modifica\u00E7\u00F5es dos recursos a que voc\u00EA se inscreveu. Voc\u00EA pode escolher qualquer per\u00EDodo que voc\u00EA desejar.
 news.in=encontrada em
@@ -72,7 +70,10 @@ rss.olat.title=Bem-vindo {0} ao OLAT\!
 rss.title=Not\u00EDcias OLAT para {0}
 subs.deleted=Fonte da notifica\u00E7\u00E3o apagada\!
 subs.ok=V\u00E1lido
+subscription.listitem.dateprefix=em {0}
 subscriptions.desc=Por favor, selecione uma assinatura na lista para chegar ao seu recurso. Exclua a sua assinatura se voc\u00EA n\u00E3o quiser mais receber not\u00EDcias. No entanto, \u00E9 poss\u00EDvel se inscrever novamente sempre que voc\u00EA quiser.
 subscriptions.no.subscriptions=N\u00E3o existem assinaturas neste momento. Voc\u00EA pode inscrever-se em not\u00EDcias de f\u00F3runs, wikis, pastas e v\u00E1rios outros recursos. Para inscrever, por favor, abra um recurso antes de clicar no link "Inscrever".
 subscriptions.title=Administrar assinaturas
+user.formatted={0} {1}
+user.unknown=desconhecido
 warn.nolaunch=O recursos selecionado n\u00E3o pode mais ser lan\u00E7ado.
diff --git a/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java b/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java
index 1c255d0096bcb0ef2b735dee5555944306125b85..b90b058a2caa976fb89d3dedad22a71f0528950f 100644
--- a/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java
+++ b/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java
@@ -426,6 +426,7 @@ public class MailManagerImpl extends BasicManager implements MailManager {
 	 */
 	@Override
 	public void delete(DBMailLight mail, Identity identity, boolean deleteMetaMail) {
+		if(mail == null) return;//already deleted
 		if(StringHelper.containsNonWhitespace(mail.getMetaId()) && deleteMetaMail) {
 			List<DBMailLight> mails = getEmailsByMetaId(mail.getMetaId());
 			for(DBMailLight childMail:mails) {
diff --git a/src/main/java/org/olat/core/util/vfs/NamedContainerImpl.java b/src/main/java/org/olat/core/util/vfs/NamedContainerImpl.java
index cb3c5894d42b50fa041be9ec73fdcf59d45a2ba5..81a056f95a7f7effceed05892d1194ec883abf2f 100644
--- a/src/main/java/org/olat/core/util/vfs/NamedContainerImpl.java
+++ b/src/main/java/org/olat/core/util/vfs/NamedContainerImpl.java
@@ -55,7 +55,8 @@ public class NamedContainerImpl extends AbstractVirtualContainer {
 
 	@Override
 	public boolean exists() {
-		return delegate != null && delegate.exists();
+		VFSContainer d = getDelegate();
+		return d != null && d.exists();
 	}
 
 	public VFSContainer getDelegate() {
diff --git a/src/main/java/org/olat/course/archiver/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/archiver/_i18n/LocalStrings_pt_BR.properties
index de3ce9fcae04ea938d493f73e436d9fd7cb48525..016d493ca8517814fbe7de39e21cb8c664756f3f 100644
--- a/src/main/java/org/olat/course/archiver/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/course/archiver/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Fri Jan 24 12:09:10 CET 2014
+#Thu May 15 16:45:46 CEST 2014
 chelp.arch-logf.title=Avaliando arquivos de hist\u00F3rico
 chelp.ass=Avalia\u00E7\u00E3o
 chelp.cont=Contexto do grupo
@@ -33,6 +33,7 @@ chelp.table1=b>Tab. 1\:</b> Poss\u00EDveis entradas nas colunas do arquivo de lo
 chelp.title=T\u00EDtulo
 chelp.uid=Identifica\u00E7\u00E3o de usu\u00E1rio
 chelp.ziel=Destino
+cl=Check-List
 cmd.download=Baixar
 cmd.start=Iniciar
 column.field.missing=-
diff --git a/src/main/java/org/olat/course/assessment/model/BulkAssessmentSettings.java b/src/main/java/org/olat/course/assessment/model/BulkAssessmentSettings.java
index e702eb1dcd5b414df42070aa611b1b59b6713123..b0267ca5590f67f91b4036baa4518273aa037508 100644
--- a/src/main/java/org/olat/course/assessment/model/BulkAssessmentSettings.java
+++ b/src/main/java/org/olat/course/assessment/model/BulkAssessmentSettings.java
@@ -49,10 +49,10 @@ public class BulkAssessmentSettings implements Serializable {
 		
 		if (courseNode instanceof TACourseNode) {
 			Boolean hasReturnBox = (Boolean)courseNode.getModuleConfiguration().get(TACourseNode.CONF_RETURNBOX_ENABLED);
-			hasReturnFiles = hasReturnBox.booleanValue();				
+			hasReturnFiles = hasReturnBox == null ? false : hasReturnBox.booleanValue();				
 		} else if (courseNode instanceof ProjectBrokerCourseNode) {
 			Boolean hasReturnBox = (Boolean)courseNode.getModuleConfiguration().get(ProjectBrokerCourseNode.CONF_RETURNBOX_ENABLED);
-			hasReturnFiles = hasReturnBox.booleanValue();				
+			hasReturnFiles = hasReturnBox == null ? false : hasReturnBox.booleanValue();				
 		} else {
 			hasReturnFiles = false;			
 		}
diff --git a/src/main/java/org/olat/course/editor/EditorMainController.java b/src/main/java/org/olat/course/editor/EditorMainController.java
index f8a14a0200dc71b6b481dba0aa084205a524752e..c5b8c561612ee830440ee24610cb07820b297bdd 100644
--- a/src/main/java/org/olat/course/editor/EditorMainController.java
+++ b/src/main/java/org/olat/course/editor/EditorMainController.java
@@ -213,14 +213,15 @@ public class EditorMainController extends MainLayoutBasicController implements G
 		getUserActivityLogger().setStickyActionType(ActionType.admin);
 		addLoggingResourceable(LoggingResourceable.wrap(CourseFactory.loadCourse(ores)));
 		
+		// try to acquire edit lock for this course.			
+		lockEntry = CoordinatorManager.getInstance().getCoordinator().getLocker().acquireLock(ores, ureq.getIdentity(), CourseFactory.COURSE_EDITOR_LOCK);
+
 		if(CourseFactory.isCourseEditSessionOpen(ores.getResourceableId())) {
 			MainPanel empty = new MainPanel("empty");
 			putInitialPanel(empty);
 			return;
 		}
 		
-		// try to acquire edit lock for this course.			
-		lockEntry = CoordinatorManager.getInstance().getCoordinator().getLocker().acquireLock(ores, ureq.getIdentity(), CourseFactory.COURSE_EDITOR_LOCK);
 		OLATResourceable lockEntryOres = OresHelper.createOLATResourceableInstance(LockEntry.class, 0l);
 		CoordinatorManager.getInstance().getCoordinator().getEventBus().registerFor(this, getIdentity(), lockEntryOres);
 		
diff --git a/src/main/java/org/olat/course/editor/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/editor/_i18n/LocalStrings_pt_BR.properties
index 0094416f09a8f333afb4bd2e7d472aee35251f27..f0d028d2a6eb4266be2942cb5926df7c95fb1456 100644
--- a/src/main/java/org/olat/course/editor/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/course/editor/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Sat Jan 18 15:45:57 CET 2014
+#Thu May 15 16:50:00 CEST 2014
 access.form.label=Acesso ao curso inteiro tem
 access.legend=Modificar acesso ao curso inteiro
 alternative=Pesquisar por elemento de curso alternativo
@@ -7,6 +7,7 @@ alternative.choose=Selecione um elemento curso alternativo e converta
 alternative.choose.description=Selecione da lista de elementos do curso alternativos, aqueles que ofere\u00E7am funcionalidade semelhante para converter este elemento de curso desativado. O t\u00EDtulo, descri\u00E7\u00E3o, regras de acesso e todo elemento subordinado ser\u00E1 copiado para o elemento convertido.
 apply=OK
 checkall=Selecionar tudo
+checklist.wizard=Check-List
 chelp.1=Voc\u00EA tem que fornecer um t\u00EDtulo curto com no m\u00E1ximo 25 caracteres.
 chelp.10=Voc\u00EA pode determinar se apenas o seu conte\u00FAdo ou o seu t\u00EDtulo e descri\u00E7\u00E3o deve ser apresentado adicionalmente na \u00E1rea de conte\u00FAdo quando clicar em um elemento de curso em sua navega\u00E7\u00E3o.
 chelp.10acc=Este elemento de curso ficar\u00E1 vis\u00EDvel somente para tutores e administradores.
@@ -331,6 +332,7 @@ command.coursepreview=Visualiza\u00E7\u00E3o? do curso
 command.deletenode=Apagar
 command.deletenode.header=A\u00E7\u00F5es
 command.movenode=Mover
+command.multi.checklist=M\u00FAltiplos Check-Lists
 command.multi.sps=M\u00FAltiplas p\u00E1ginas
 command.publish=Publicar
 condition.noAccessExplanation.title=Informa\u00E7\u00E3o se vis\u00EDvel e acesso bloqueado 
@@ -450,7 +452,9 @@ publish.notpossible.setincomplete=Os elementos selecionados a serem publicados r
 publish.nowarnings=Problemas n\u00E3o encontrados
 publish.step.title.confirm=Sum\u00E1rio de modifica\u00E7\u00F5es
 publish.step.title.messages=Informa\u00E7\u00E3o
+publish.step.update.title=Atualiza\u00E7\u00E3o em "background"
 publish.title=Publicar modifica\u00E7\u00F5es em curso em andamento
+publish.update.description=Durante a publica\u00E7\u00E3o, os seguintes processos em segundo plano devem ser executados, a fim de garantir a consist\u00EAncia dos dados. Este processo pode levar algum tempo. Por favor, aguarde com a conclus\u00E3o da publica\u00E7\u00E3o at\u00E9 que tenha recebido um retorno de acordo.
 publish.withwarnings=Aviso
 publish.wizard.title=Publica\u00E7\u00E3o
 published.latest=Este curso foi publicado pela \u00FAltima vez em {0}.
diff --git a/src/main/java/org/olat/course/member/wizard/ImportMemberOverviewIdentitiesController.java b/src/main/java/org/olat/course/member/wizard/ImportMemberOverviewIdentitiesController.java
index 5ab0271e59febe04ec18ca6673adab28e83b5b57..a7309b3a8deffc19c699428d8b17a9a58f13b499 100644
--- a/src/main/java/org/olat/course/member/wizard/ImportMemberOverviewIdentitiesController.java
+++ b/src/main/java/org/olat/course/member/wizard/ImportMemberOverviewIdentitiesController.java
@@ -181,7 +181,7 @@ public class ImportMemberOverviewIdentitiesController extends StepFormBasicContr
 		//search by names, must be lower case
 		List<Identity> identities = securityManager.findIdentitiesByName(identListLowercase);
 		for(Identity identity:identities) {
-			identListLowercase.remove(identity.getName());
+			identListLowercase.remove(identity.getName().toLowerCase());
 			if (!PersistenceHelper.containsPersistable(oks, identity)
 					&& !securityManager.isIdentityInSecurityGroup(identity, anonymousSecGroup)) {
 				oks.add(identity);
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 f091bbb4320a4719a1b3c088578a7907e15d1f96..acb1b074e35e6a98798f973d0b44c750c34ec055 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 @@
-#Wed May 26 20:48:48 CEST 2010
+#Thu May 15 16:50:08 CEST 2014
 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. 
@@ -7,6 +7,7 @@ learningObjectives.title=Descri\u00E7\u00E3o
 preview.notavailable=Nenhuma visualiza\u00E7\u00E3o est\u00E1 dispon\u00EDvel para o elemento de curso
 title_bc=Pasta
 title_blog=Blog
+title_checklist=Check-List
 title_cl=Check list
 title_co=Formul\u00E1rio de contato
 title_cp=M\u00F3dulo IMS-CP
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java
index 0bb62d0c2d7e47810b8b843b4eb5fd3a3a90a38c..e47ef4cb28992ce3cec382bc387a2eac00ad5f6f 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java
+++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java
@@ -559,6 +559,8 @@ public class CheckListAssessmentController extends FormBasicController implement
 				courseNode.updateScoreEvaluation(userCourseEnv, identity);
 			}
 		}
+		
+		reloadTable();
 	}
 	
 	private void doDisableEditingMode() {
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java
index 68d302ed76c1fcd8ce426e27b44e39d296e8e943..f78b3df68b206e1b8d923843029cae69d6831ea7 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java
+++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java
@@ -278,21 +278,26 @@ public class CheckListRunController extends FormBasicController implements Contr
 		} else {
 			theOne = wrapper.getDbCheckbox();
 		}
-
-		Float score;
-		if(checked) {
-			score = wrapper.getCheckbox().getPoints();
+		
+		if(theOne == null) {
+			//only warning because this happen in course preview
+			logWarn("A checkbox is missing: " + courseOres + " / " + courseNode.getIdent(), null);
 		} else {
-			score = 0f;
+			Float score;
+			if(checked) {
+				score = wrapper.getCheckbox().getPoints();
+			} else {
+				score = 0f;
+			}
+			checkboxManager.check(theOne, getIdentity(), score, new Boolean(checked));
+			//make sure all results is on the database before calculating some scores
+			//manager commit already DBFactory.getInstance().commit();
+			
+			courseNode.updateScoreEvaluation(userCourseEnv, getIdentity());
+			
+			Checkbox checkbox = wrapper.getCheckbox();
+			logUpdateCheck(checkbox.getCheckboxId(), checkbox.getTitle());
 		}
-		checkboxManager.check(theOne, getIdentity(), score, new Boolean(checked));
-		//make sure all results is on the database before calculating some scores
-		//manager commit already DBFactory.getInstance().commit();
-		
-		courseNode.updateScoreEvaluation(userCourseEnv, getIdentity());
-		
-		Checkbox checkbox = wrapper.getCheckbox();
-		logUpdateCheck(checkbox.getCheckboxId(), checkbox.getTitle());
 		
 		exposeUserDataToVC(flc);
 	}
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_pt_BR.properties
new file mode 100644
index 0000000000000000000000000000000000000000..a5e264026f3d0bab04f865eaf31c48e9d6aa1590
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_pt_BR.properties
@@ -0,0 +1,16 @@
+#Thu May 15 17:05:25 CEST 2014
+add.checkbox=Adicionar checkbox
+assessment=Avalia\u00E7\u00E3o
+assessment.checkbox.description=Edite por Checkbox\: Aplique o filtro de Checkbox para editar o mesmo Checkbox de todos os participantes.
+award.point.on=Pontua\u00E7\u00E3o concedida ao selecionar
+box.assessment=Editar por Checkbox
+box.check=Check
+box.points=Pontua\u00E7\u00E3o
+box.points.info=({0} pontos)
+checkbox.title=T\u00EDtulo
+checklist=Check-Lists
+checklist.point.example=Pontua\u00E7\u00E3o (min\: {0} / m\u00E1x\: {1})
+checklist.update.assessment=Atualizando as informa\u00E7\u00F5es de avalia\u00E7\u00E3o de todos os participantes do curso.
+checklist.update.efficiencystatements=Atualiza\u00E7\u00E3o os certificados de todos os usu\u00E1rios.
+chelp.assessment.checkbox.1=Acesse os participantes do curso supervisionados por voc\u00EA filtrados por checkbox. Isto pode reduzir significativamente a taxa de erro, especialmente para grandes Check-Lists com v\u00E1rios CheckBox.
+chelp.assessment.checkbox.2=Filtre a tabela de antem\u00E3o por grupo. Voc\u00EA pode, ent\u00E3o, escolher por primeiro ou \u00FAltimo nome, para facilitar a conformidade da sua lista de participantes com a lista de Check-Lists.
diff --git a/src/main/java/org/olat/course/run/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/run/_i18n/LocalStrings_en.properties
index aa6eb48dea0f3815cdfdb4fa086c41b08e06244f..fc8c16521a032148987e5f2a2f96b56862ffbbe6 100644
--- a/src/main/java/org/olat/course/run/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/run/_i18n/LocalStrings_en.properties
@@ -24,7 +24,7 @@ command.openteststatistic=Test statistics
 command.opensurveystatistic=Survey statistics
 command.openrightmngt=Rights management
 command.opensimplegroupmngt=Members management
-command.openstatistic=Course Statistics
+command.openstatistic=Course statistics
 command.personalnote=Notes
 command.settings=Learning resource settings
 course.closed=This course is closed and can therefore no longer be edited or updated.
diff --git a/src/main/java/org/olat/course/run/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/run/_i18n/LocalStrings_pl.properties
index 8f1f721c9ecf75e2d73de6d9ee51750c137df613..5537dada7addeee00a86fdb7aa305db80651b274 100644
--- a/src/main/java/org/olat/course/run/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/course/run/_i18n/LocalStrings_pl.properties
@@ -17,7 +17,8 @@ command.openarchiver=Archiwizacja
 command.openassessment=Ocenianie
 command.openeditor=Edytor
 command.opengroupmngt=Grupy
-command.openteststatistic=Statystyki QTI
+command.openteststatistic=Statystyki test
+command.opensurveystatistic=Statystyki ankiet
 command.openrightmngt=Uprawnienia
 command.opensimplegroupmngt=Cz\u0142onkowie
 command.openstatistic=Statystyki
diff --git a/src/main/java/org/olat/course/run/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/run/_i18n/LocalStrings_pt_BR.properties
index 29144c10bc77bd96278a0d64bc5b85cac29898c9..566cc366a3186a15744a61cf5b9bc2f03fd85878 100644
--- a/src/main/java/org/olat/course/run/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/course/run/_i18n/LocalStrings_pt_BR.properties
@@ -20,6 +20,7 @@ command.opendb=Banco de dados do Curso
 command.openeditor=Editor do curso
 command.opengroupmngt=Gerenciamento de grupo
 command.openteststatistic=Estat\u00EDsticas de Test
+command.opensurveystatistic=Estat\u00EDsticas de Pesquisa
 command.openrightmngt=Gerenciamento de direitos
 command.opensimplegroupmngt=Gest\u00E3o de membros
 command.openstatistic=Ajuda sobre as configura\u00E7\u00F5es das descri\u00E7\u00F5es
diff --git a/src/main/java/org/olat/ims/qti/statistics/manager/QTIStatisticsManagerImpl.java b/src/main/java/org/olat/ims/qti/statistics/manager/QTIStatisticsManagerImpl.java
index b5f5c2ae57c165738488da06ac7dcaf6e7c5fdf9..89be6c9e50332cea9389c1d18720e0a53c073af5 100644
--- a/src/main/java/org/olat/ims/qti/statistics/manager/QTIStatisticsManagerImpl.java
+++ b/src/main/java/org/olat/ims/qti/statistics/manager/QTIStatisticsManagerImpl.java
@@ -301,7 +301,7 @@ public class QTIStatisticsManagerImpl implements QTIStatisticsManager {
 
 		double averageScore = totalScore / totalResults;
 		//difficulty (p-value)
-		double difficulty = numOfCorrectAnswers / totalResults;
+		double difficulty = numOfCorrectAnswers / (double)totalResults;
 		double averageDuration = totalDuration / totalResults;
 		
 		StatisticsItem stats = new StatisticsItem();
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 bb272d5f57fe00214dcd20c05cbd55d36fffabd4..19d34846c269faf9a03e4bcdfc00cc97a3b9b8e4 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 Sep 06 13:56:30 CEST 2013
+#Thu May 15 14:41:09 CEST 2014
 add=+
 add.to.list=Adicionar \u00E0 lista
 applications=Aplica\u00E7\u00F5es
@@ -133,6 +133,8 @@ menu.pools.main=Cat\u00E1logo
 menu.pools.main.alt=Cat\u00E1logo
 menu.share=Compartilhamentos p\u00FAblicos
 metadatas=Metadados
+my.list=Minhas listas
+my.share=Meus compartilhamentos
 new.item=Criar pergunta
 next=Pr\u00F3ximo
 pool.key=ID
diff --git a/src/main/java/org/olat/search/service/SearchServiceImpl.java b/src/main/java/org/olat/search/service/SearchServiceImpl.java
index f68b96e68b1ba019a900c8bd509b1a042d96c428..8228f503663782b064445d7ec3c245554f602660 100644
--- a/src/main/java/org/olat/search/service/SearchServiceImpl.java
+++ b/src/main/java/org/olat/search/service/SearchServiceImpl.java
@@ -260,6 +260,9 @@ public class SearchServiceImpl implements SearchService {
 			Future<List<Long>> futureResults = searchExecutor.submit(run);
 			List<Long> results = futureResults.get();
 			queryCount++;
+			if(results == null) {
+				results = new ArrayList<Long>(1);
+			}
 			return results;
 		} catch (Exception e) {
 			log.error("", e);
diff --git a/src/main/webapp/static/js/jquery/openolat/jquery.statistics.chart.js b/src/main/webapp/static/js/jquery/openolat/jquery.statistics.chart.js
index 751117d62117700f6dcff4f77cbecfb7ad11aba5..bf866d51bd0c63021713ff283ca8cfc3ae669764 100644
--- a/src/main/webapp/static/js/jquery/openolat/jquery.statistics.chart.js
+++ b/src/main/webapp/static/js/jquery/openolat/jquery.statistics.chart.js
@@ -605,9 +605,12 @@
     	  height = placeholderheight - margin.top - margin.bottom;
     	
     	var cut = settings.cut;
-    	
+    	var maxScore = d3.max(values, function(d) { return d; });
+    	if(maxScore < 1.0) {
+    		maxScore = 1.0;
+    	}
     	var x = d3.scale.linear()
-    	  .domain([0, 3.0])
+    	  .domain([0, maxScore])
     	  .range([0, width]);
     	
     	var data = d3.layout.histogram()
diff --git a/src/main/webapp/static/js/jquery/openolat/jquery.statistics.chart.min.js b/src/main/webapp/static/js/jquery/openolat/jquery.statistics.chart.min.js
index 759b11bffdd7822c8ccd887eaa37ec83dbf26f71..360f9148e459797ec0daa0ffe528f931af997385 100644
--- a/src/main/webapp/static/js/jquery/openolat/jquery.statistics.chart.min.js
+++ b/src/main/webapp/static/js/jquery/openolat/jquery.statistics.chart.min.js
@@ -1 +1 @@
-(function(a){a.fn.qtiStatistics=function(d,b){var c=a.extend({values:[],colors:[],cut:null,participants:-1,barHeight:40,xTopLegend:"x Top",xBottomLegend:"x Bottom",yLeftLegend:"y Left",yRightLegend:"y Right"},b);try{if(d=="histogramScore"){histogramScore(this,c)}else{if(d=="histogramDuration"){histogramDuration(this,c)}else{if(d=="horizontalBarSingleChoice"){horizontalBarSingleChoice(this,c)}else{if(d=="rightAnswerPerItem"){rightAnswerPerItem(this,c)}else{if(d=="averageScorePerItem"){averageScorePerItem(this,c)}else{if(d=="horizontalBarMultipleChoice"){horizontalBarMultipleChoice(this,c)}else{if(d=="horizontalBarMultipleChoiceSurvey"){horizontalBarMultipleChoiceSurvey(this,c)}}}}}}}}catch(f){if(console){console.log(f)}}return this};averageScorePerItem=function(b,f){var j=b.width();var h=f.values.reverse();var m=b.height();var g={top:10,right:60,bottom:40,left:60},d=j-g.left-g.right;var n=h.length*f.barHeight;b.height(n+g.top+g.bottom+"px");var l=d3.scale.linear().domain([0,d3.max(h,function(p){return p[1]})]).range([0,d]);var e=d3.svg.axis().scale(l).orient("bottom").ticks(10);var k=d3.scale.ordinal().domain(h.map(function(p){return p[0]})).rangeRoundBands([n,0]);var c=d3.svg.axis().scale(k).orient("left");var i=d3.select("#"+b.attr("id")).append("svg").attr("width",d+g.left+g.right).attr("height",n+g.top+g.bottom).append("g").attr("transform","translate("+g.left+","+g.top+")");i.append("g").attr("class","x axis").attr("transform","translate(0,"+n+")").call(e).append("text").attr("y",(g.bottom/1.7)).attr("x",(d/2)).attr("dy","1em").style("text-anchor","middle").text(f.xBottomLegend);i.selectAll(".bar0").data(h).enter().append("rect").attr("class","bar bar_default").attr("fill","bar_default").attr("x",0).attr("y",function(p){return k(p[0])+2}).attr("width",function(p){return l(p[1])}).attr("height",k.rangeBand()-4);var o=((k.rangeBand()/2)+3)+"px";i.selectAll(".bar0").data(h).enter().append("text").attr("x",function(p){return l(p[1])}).attr("y",function(p){return k(p[0])+2}).attr("dx",-3).attr("dy",o).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(p){return(p[1]<=0)?"":d3.round(p[1],2)});i.append("g").attr("class","y axis").call(c).append("text").attr("transform","rotate(-90)").attr("y",0-(g.right/1.7)).attr("x",0-(n/2)).attr("dy","1em").style("text-anchor","middle").text(f.yLeftLegend)};rightAnswerPerItem=function(c,g){var o=c.height();var k=c.width();var i=g.values.reverse();var h={top:15,right:60,bottom:40,left:60},f=k-h.left-h.right;var p=i.length*g.barHeight;c.height(p+h.top+h.bottom+"px");var l=g.participants;var n=d3.scale.linear().domain([0,l]).range([0,f]);var e=d3.scale.linear().domain([0,1]).range([0,f]);var b=d3.svg.axis().scale(e).orient("bottom").ticks(10,"%");var m=d3.scale.ordinal().domain(i.map(function(r){return r[0]})).rangeRoundBands([p,0]);var d=d3.svg.axis().scale(m).orient("left");var j=d3.select("#"+c.attr("id")).append("svg").attr("width",f+h.left+h.right).attr("height",p+h.top+h.bottom).append("g").attr("transform","translate("+h.left+","+h.top+")");j.append("g").attr("class","x axis").attr("transform","translate(0,"+p+")").call(b).append("text").attr("y",(h.bottom/1.7)).attr("x",(f/2)).attr("dy","1em").style("text-anchor","middle").text(g.xTopLegend);j.selectAll(".bar0").data(i).enter().append("rect").attr("class","bar bar_green").attr("fill","bar_green").attr("x",0).attr("y",function(r){return m(r[0])+2}).attr("width",function(r){return n(r[1])}).attr("height",m.rangeBand()-4);var q=((m.rangeBand()/2)+3)+"px";j.selectAll(".bar0").data(i).enter().append("text").attr("x",function(r){return n(r[1])}).attr("y",function(r){return m(r[0])+2}).attr("dx",-3).attr("dy",q).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(r){return(r[1]<=0)?"":r[1]});j.append("g").attr("class","y axis").call(d).append("text").attr("transform","rotate(-90)").attr("y",0-(h.right/1.7)).attr("x",0-(p/2)).attr("dy","1em").style("text-anchor","middle").text(g.yLeftLegend)};horizontalBarMultipleChoiceSurvey=function(c,g){var k=c.width();var i=g.values.reverse();var h={top:40,right:15,bottom:40,left:40};var p=i.length*g.barHeight;c.height(p+h.top+h.bottom+"px");var f=k-h.left-h.right;var l=g.participants;var n=l;console.log(g.colors);var o=d3.scale.linear().domain([0,n]).range([0,f]);var e=d3.scale.linear().domain([0,1]).range([0,f]);var b=d3.svg.axis().scale(e).orient("bottom").ticks(10,"%");var m=d3.scale.ordinal().domain(i.map(function(r){return r[0]})).rangeRoundBands([p,0]);var d=d3.svg.axis().scale(m).orient("left");var j=d3.select("#"+c.attr("id")).append("svg").attr("width",f+h.left+h.right).attr("height",p+h.top+h.bottom).append("g").attr("transform","translate("+h.left+","+h.top+")");j.append("g").attr("class","x axis").attr("transform","translate(0,"+p+")").call(b).append("text").attr("y",(h.bottom/1.7)).attr("x",(f/2)).attr("dy","1em").style("text-anchor","middle").text(g.xBottomLegend);j.append("g").attr("class","y axis").call(d).append("text").attr("transform","rotate(-90)").attr("y",0-h.left).attr("x",0-(p/2)).attr("dy","1em").style("text-anchor","middle").text(g.yLeftLegend);j.selectAll(".bar0").data(i).enter().append("rect").attr("class","bar bar_default").attr("fill","bar_default").attr("x",0).attr("y",function(r){return m(r[0])+2}).attr("width",function(r){return o(r[1])}).attr("height",m.rangeBand()-4);var q=((m.rangeBand()/2)+3)+"px";j.selectAll(".bar0").data(i).enter().append("text").attr("x",function(r){return o(r[1])}).attr("y",function(r){return m(r[0])+2}).attr("dx",-3).attr("dy",q).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(r){return(r[1]<=0)?"":r[1]})};horizontalBarMultipleChoice=function(c,g){var k=c.width();var i=g.values.reverse();var h={top:40,right:15,bottom:40,left:40};var p=i.length*g.barHeight;c.height(p+h.top+h.bottom+"px");var f=k-h.left-h.right;var l=g.participants;var n=l;var o=d3.scale.linear().domain([0,n]).range([0,f]);var e=d3.scale.linear().domain([0,1]).range([0,f]);var b=d3.svg.axis().scale(e).orient("bottom").ticks(10,"%");var m=d3.scale.ordinal().domain(i.map(function(r){return r[0]})).rangeRoundBands([p,0]);var d=d3.svg.axis().scale(m).orient("left");var j=d3.select("#"+c.attr("id")).append("svg").attr("width",f+h.left+h.right).attr("height",p+h.top+h.bottom).append("g").attr("transform","translate("+h.left+","+h.top+")");j.append("g").attr("class","x axis").attr("transform","translate(0,"+p+")").call(b).append("text").attr("y",(h.bottom/1.7)).attr("x",(f/2)).attr("dy","1em").style("text-anchor","middle").text(g.xBottomlegend);j.append("g").attr("class","y axis").call(d).append("text").attr("transform","rotate(-90)").attr("y",0-h.left).attr("x",0-(p/2)).attr("dy","1em").style("text-anchor","middle").text(g.yLeftLegend);j.selectAll(".bar0").data(i).enter().append("rect").attr("class","bar bar_green").attr("fill","bar_green").attr("x",0).attr("y",function(r){return m(r[0])+2}).attr("width",function(r){return o(r[1])}).attr("height",m.rangeBand()-4);var q=((m.rangeBand()/2)+3)+"px";j.selectAll(".bar0").data(i).enter().append("text").attr("x",function(r){return o(r[1])}).attr("y",function(r){return m(r[0])+2}).attr("dx",-3).attr("dy",q).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(r){return(r[1]<=0)?"":r[1]});j.selectAll(".bar1").data(i).enter().append("rect").attr("class","bar bar_red").attr("fill","bar_red").attr("x",function(r){return o(r[1])}).attr("y",function(r){return m(r[0])+2}).attr("width",function(r){return o(r[2])}).attr("height",m.rangeBand()-4);j.selectAll(".bar1").data(i).enter().append("text").attr("x",function(r){return o(r[1]+r[2])}).attr("y",function(r){return m(r[0])+2}).attr("dx",-3).attr("dy",q).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(r){return(r[2]<=0)?"":r[2]});j.selectAll(".bar2").data(i).enter().append("rect").attr("class","bar bar_grey").attr("fill","bar_grey").attr("x",function(r){return o(r[1]+r[2])}).attr("y",function(r){return m(r[0])+2}).attr("width",function(r){return o(r[3])}).attr("height",m.rangeBand()-4);j.selectAll(".bar2").data(i).enter().append("text").attr("x",function(r){return o(r[1]+r[2]+r[3])}).attr("y",function(r){return m(r[0])+2}).attr("dx",-3).attr("dy",q).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(r){return(r[3]<=0)?"":r[3]})};horizontalBarSingleChoice=function(c,h){var l=c.width();var j=h.values.reverse();var d=h.colors.reverse();var i={top:15,right:15,bottom:40,left:40};var q=j.length*h.barHeight;c.height(q+i.top+i.bottom+"px");var g=l-i.left-i.right;var m=h.participants;var o=m;var p=d3.scale.linear().domain([0,o]).range([0,g]);var f=d3.scale.linear().domain([0,1]).range([0,g]);var b=d3.svg.axis().scale(f).orient("bottom").ticks(10,"%");var n=d3.scale.ordinal().domain(j.map(function(s){return s[0]})).rangeRoundBands([q,0]);var e=d3.svg.axis().scale(n).orient("left");var k=d3.select("#"+c.attr("id")).append("svg").attr("width",g+i.left+i.right).attr("height",q+i.top+i.bottom).append("g").attr("transform","translate("+i.left+","+i.top+")");k.append("g").attr("class","x axis").attr("transform","translate(0,"+q+")").call(b).append("text").attr("y",(i.bottom/1.7)).attr("x",(g/2)).attr("dy","1em").style("text-anchor","middle").text(h.xBottomLegend);k.selectAll(".bar0").data(j).enter().append("rect").attr("class",function(t,s){if(d==null){return"bar bar0 bar_default"}else{if(d.length>s){return d[s]}else{return"bar bar0 bar_default"}}}).attr("fill","bar_green").attr("x",0).attr("y",function(s){return n(s[0])+2}).attr("width",function(s){return p(s[1])}).attr("height",n.rangeBand()-4);var r=((n.rangeBand()/2)+3)+"px";k.selectAll(".bar0").data(j).enter().append("text").attr("x",function(s){return p(s[1])}).attr("y",function(s){return n(s[0])+2}).attr("dx",-3).attr("dy",r).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(s){return(s[1]<=0)?"":s[1]});k.append("g").attr("class","y axis").call(e).append("text").attr("transform","rotate(-90)").attr("y",0-i.left).attr("x",0-(q/2)).attr("dy","1em").style("text-anchor","middle").text(h.yLeftLegend)};histogramDuration=function(v,u){var c=v.height();var q=v.width();var f=u.values;var s=d3.min(f,function(x){return x});var z=d3.max(f,function(x){return x});var d="%M:%S";if(z<10){d+=":%L"}var i=new Date(2012,0,1,0,0),w=d3.format(",.f"),A=d3.time.format(d),l=function(x){return A(new Date(i.getTime()+(x*1000)))};var n={top:10,right:60,bottom:40,left:60},r=q-n.left-n.right,p=c-n.top-n.bottom;var m=d3.scale.linear().domain([0,z]).range([0,r]);var B=d3.layout.histogram().bins(m.ticks(20))(f);var h=d3.sum(B,function(x){return x.y});var k=d3.scale.linear().domain([0,d3.max(B,function(x){return x.y})]).range([p,0]);var g=d3.scale.linear().domain([0,d3.max(B,function(x){return x.y/h})]).range([p,0]);var j=d3.svg.axis().scale(m).orient("bottom").tickFormat(l);var b=d3.svg.axis().scale(k).orient("right").ticks(k.domain()[1]).tickSubdivide(0);var e=d3.svg.axis().scale(g).orient("left").ticks(10,"%");var o=d3.select("#"+v.attr("id")).append("svg").attr("width",r+n.left+n.right).attr("height",p+n.top+n.bottom).append("g").attr("transform","translate("+n.left+","+n.top+")");var t=o.selectAll(".bar").data(B).enter().append("g").attr("class","bar bar_default").attr("transform",function(x){return"translate("+m(x.x)+","+k(x.y)+")"}).append("rect").attr("x",2).attr("width",m(B[0].dx)-4).attr("height",function(x){return p-k(x.y)});o.append("g").attr("class","y axis").call(e).append("text").attr("transform","rotate(-90)").attr("y",0-n.left).attr("x",0-(p/2)).attr("dy","1em").style("text-anchor","middle").text(u.yLeftLegend);o.append("g").attr("class","x axis").attr("transform","translate(0,"+p+")").call(j).append("text").attr("y",(n.bottom/1.1)).attr("x",(r/2)).attr("dx","1em").style("text-anchor","middle").text(u.xBottomLegend);o.append("g").attr("class","y axis").attr("transform","translate("+r+",0)").call(b).append("text").attr("transform","rotate(90)").attr("y",0-(n.right)).attr("x",(p/2)).attr("dy","1em").style("text-anchor","middle").text(u.yRightLegend)};histogramScore=function(s,r){var c=s.height();var o=s.width();var d=r.values;var l={top:10,right:60,bottom:40,left:60},p=o-l.left-l.right,n=c-l.top-l.bottom;var f=r.cut;var k=d3.scale.linear().domain([0,3]).range([0,p]);var t=d3.layout.histogram().bins(k.ticks(20))(d);var h=d3.sum(t,function(u){return u.y});var j=d3.scale.linear().domain([0,d3.max(t,function(u){return u.y})]).range([n,0]);var g=d3.scale.linear().domain([0,d3.max(t,function(u){return u.y/h})]).range([n,0]);var i=d3.svg.axis().scale(k).orient("bottom").tickFormat(d3.format(".01f"));var b=d3.svg.axis().scale(j).orient("right").ticks(j.domain()[1]).tickSubdivide(0);var e=d3.svg.axis().scale(g).orient("left").ticks(10,"%");var m=d3.select("#"+s.attr("id")).append("svg").attr("width",p+l.left+l.right).attr("height",n+l.top+l.bottom).append("g").attr("transform","translate("+l.left+","+l.top+")");var q=m.selectAll(".bar").data(t).enter().append("g").attr("class",function(v,u){if(f==null){return"bar bar_default"}else{if(t[u].x<f){return"bar bar_red"}else{return"bar bar_green"}}}).attr("transform",function(u){return"translate("+k(u.x)+","+j(u.y)+")"}).append("rect").attr("x",2).attr("width",k(t[0].dx)-4).attr("height",function(u){return n-j(u.y)});m.append("g").attr("class","y axis").call(e).append("text").attr("transform","rotate(-90)").attr("y",0-l.left).attr("x",0-(n/2)).attr("dy","1em").style("text-anchor","middle").text(r.yLeftLegend);m.append("g").attr("class","x axis").attr("transform","translate(0,"+n+")").call(i).append("text").attr("y",(l.bottom/1.1)).attr("x",(p/2)).attr("dx","1em").style("text-anchor","middle").text(r.xBottomLegend);m.append("g").attr("class","y axis").attr("transform","translate("+p+",0)").call(b).append("text").attr("transform","rotate(90)").attr("y",0-(l.right)).attr("x",(n/2)).attr("dy","1em").style("text-anchor","middle").text(r.yRightLegend)}}(jQuery));
\ No newline at end of file
+(function(a){a.fn.qtiStatistics=function(d,b){var c=a.extend({values:[],colors:[],cut:null,participants:-1,barHeight:40,xTopLegend:"x Top",xBottomLegend:"x Bottom",yLeftLegend:"y Left",yRightLegend:"y Right"},b);try{if(d=="histogramScore"){histogramScore(this,c)}else{if(d=="histogramDuration"){histogramDuration(this,c)}else{if(d=="horizontalBarSingleChoice"){horizontalBarSingleChoice(this,c)}else{if(d=="rightAnswerPerItem"){rightAnswerPerItem(this,c)}else{if(d=="averageScorePerItem"){averageScorePerItem(this,c)}else{if(d=="horizontalBarMultipleChoice"){horizontalBarMultipleChoice(this,c)}else{if(d=="horizontalBarMultipleChoiceSurvey"){horizontalBarMultipleChoiceSurvey(this,c)}}}}}}}}catch(f){if(console){console.log(f)}}return this};averageScorePerItem=function(b,f){var j=b.width();var h=f.values.reverse();var m=b.height();var g={top:10,right:60,bottom:40,left:60},d=j-g.left-g.right;var n=h.length*f.barHeight;b.height(n+g.top+g.bottom+"px");var l=d3.scale.linear().domain([0,d3.max(h,function(p){return p[1]})]).range([0,d]);var e=d3.svg.axis().scale(l).orient("bottom").ticks(10);var k=d3.scale.ordinal().domain(h.map(function(p){return p[0]})).rangeRoundBands([n,0]);var c=d3.svg.axis().scale(k).orient("left");var i=d3.select("#"+b.attr("id")).append("svg").attr("width",d+g.left+g.right).attr("height",n+g.top+g.bottom).append("g").attr("transform","translate("+g.left+","+g.top+")");i.append("g").attr("class","x axis").attr("transform","translate(0,"+n+")").call(e).append("text").attr("y",(g.bottom/1.7)).attr("x",(d/2)).attr("dy","1em").style("text-anchor","middle").text(f.xBottomLegend);i.selectAll(".bar0").data(h).enter().append("rect").attr("class","bar bar_default").attr("fill","bar_default").attr("x",0).attr("y",function(p){return k(p[0])+2}).attr("width",function(p){return l(p[1])}).attr("height",k.rangeBand()-4);var o=((k.rangeBand()/2)+3)+"px";i.selectAll(".bar0").data(h).enter().append("text").attr("x",function(p){return l(p[1])}).attr("y",function(p){return k(p[0])+2}).attr("dx",-3).attr("dy",o).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(p){return(p[1]<=0)?"":d3.round(p[1],2)});i.append("g").attr("class","y axis").call(c).append("text").attr("transform","rotate(-90)").attr("y",0-(g.right/1.7)).attr("x",0-(n/2)).attr("dy","1em").style("text-anchor","middle").text(f.yLeftLegend)};rightAnswerPerItem=function(c,g){var o=c.height();var k=c.width();var i=g.values.reverse();var h={top:15,right:60,bottom:40,left:60},f=k-h.left-h.right;var p=i.length*g.barHeight;c.height(p+h.top+h.bottom+"px");var l=g.participants;var n=d3.scale.linear().domain([0,l]).range([0,f]);var e=d3.scale.linear().domain([0,1]).range([0,f]);var b=d3.svg.axis().scale(e).orient("bottom").ticks(10,"%");var m=d3.scale.ordinal().domain(i.map(function(r){return r[0]})).rangeRoundBands([p,0]);var d=d3.svg.axis().scale(m).orient("left");var j=d3.select("#"+c.attr("id")).append("svg").attr("width",f+h.left+h.right).attr("height",p+h.top+h.bottom).append("g").attr("transform","translate("+h.left+","+h.top+")");j.append("g").attr("class","x axis").attr("transform","translate(0,"+p+")").call(b).append("text").attr("y",(h.bottom/1.7)).attr("x",(f/2)).attr("dy","1em").style("text-anchor","middle").text(g.xTopLegend);j.selectAll(".bar0").data(i).enter().append("rect").attr("class","bar bar_green").attr("fill","bar_green").attr("x",0).attr("y",function(r){return m(r[0])+2}).attr("width",function(r){return n(r[1])}).attr("height",m.rangeBand()-4);var q=((m.rangeBand()/2)+3)+"px";j.selectAll(".bar0").data(i).enter().append("text").attr("x",function(r){return n(r[1])}).attr("y",function(r){return m(r[0])+2}).attr("dx",-3).attr("dy",q).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(r){return(r[1]<=0)?"":r[1]});j.append("g").attr("class","y axis").call(d).append("text").attr("transform","rotate(-90)").attr("y",0-(h.right/1.7)).attr("x",0-(p/2)).attr("dy","1em").style("text-anchor","middle").text(g.yLeftLegend)};horizontalBarMultipleChoiceSurvey=function(c,g){var k=c.width();var i=g.values.reverse();var h={top:40,right:15,bottom:40,left:40};var p=i.length*g.barHeight;c.height(p+h.top+h.bottom+"px");var f=k-h.left-h.right;var l=g.participants;var n=l;console.log(g.colors);var o=d3.scale.linear().domain([0,n]).range([0,f]);var e=d3.scale.linear().domain([0,1]).range([0,f]);var b=d3.svg.axis().scale(e).orient("bottom").ticks(10,"%");var m=d3.scale.ordinal().domain(i.map(function(r){return r[0]})).rangeRoundBands([p,0]);var d=d3.svg.axis().scale(m).orient("left");var j=d3.select("#"+c.attr("id")).append("svg").attr("width",f+h.left+h.right).attr("height",p+h.top+h.bottom).append("g").attr("transform","translate("+h.left+","+h.top+")");j.append("g").attr("class","x axis").attr("transform","translate(0,"+p+")").call(b).append("text").attr("y",(h.bottom/1.7)).attr("x",(f/2)).attr("dy","1em").style("text-anchor","middle").text(g.xBottomLegend);j.append("g").attr("class","y axis").call(d).append("text").attr("transform","rotate(-90)").attr("y",0-h.left).attr("x",0-(p/2)).attr("dy","1em").style("text-anchor","middle").text(g.yLeftLegend);j.selectAll(".bar0").data(i).enter().append("rect").attr("class","bar bar_default").attr("fill","bar_default").attr("x",0).attr("y",function(r){return m(r[0])+2}).attr("width",function(r){return o(r[1])}).attr("height",m.rangeBand()-4);var q=((m.rangeBand()/2)+3)+"px";j.selectAll(".bar0").data(i).enter().append("text").attr("x",function(r){return o(r[1])}).attr("y",function(r){return m(r[0])+2}).attr("dx",-3).attr("dy",q).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(r){return(r[1]<=0)?"":r[1]})};horizontalBarMultipleChoice=function(c,g){var k=c.width();var i=g.values.reverse();var h={top:40,right:15,bottom:40,left:40};var p=i.length*g.barHeight;c.height(p+h.top+h.bottom+"px");var f=k-h.left-h.right;var l=g.participants;var n=l;var o=d3.scale.linear().domain([0,n]).range([0,f]);var e=d3.scale.linear().domain([0,1]).range([0,f]);var b=d3.svg.axis().scale(e).orient("bottom").ticks(10,"%");var m=d3.scale.ordinal().domain(i.map(function(r){return r[0]})).rangeRoundBands([p,0]);var d=d3.svg.axis().scale(m).orient("left");var j=d3.select("#"+c.attr("id")).append("svg").attr("width",f+h.left+h.right).attr("height",p+h.top+h.bottom).append("g").attr("transform","translate("+h.left+","+h.top+")");j.append("g").attr("class","x axis").attr("transform","translate(0,"+p+")").call(b).append("text").attr("y",(h.bottom/1.7)).attr("x",(f/2)).attr("dy","1em").style("text-anchor","middle").text(g.xBottomlegend);j.append("g").attr("class","y axis").call(d).append("text").attr("transform","rotate(-90)").attr("y",0-h.left).attr("x",0-(p/2)).attr("dy","1em").style("text-anchor","middle").text(g.yLeftLegend);j.selectAll(".bar0").data(i).enter().append("rect").attr("class","bar bar_green").attr("fill","bar_green").attr("x",0).attr("y",function(r){return m(r[0])+2}).attr("width",function(r){return o(r[1])}).attr("height",m.rangeBand()-4);var q=((m.rangeBand()/2)+3)+"px";j.selectAll(".bar0").data(i).enter().append("text").attr("x",function(r){return o(r[1])}).attr("y",function(r){return m(r[0])+2}).attr("dx",-3).attr("dy",q).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(r){return(r[1]<=0)?"":r[1]});j.selectAll(".bar1").data(i).enter().append("rect").attr("class","bar bar_red").attr("fill","bar_red").attr("x",function(r){return o(r[1])}).attr("y",function(r){return m(r[0])+2}).attr("width",function(r){return o(r[2])}).attr("height",m.rangeBand()-4);j.selectAll(".bar1").data(i).enter().append("text").attr("x",function(r){return o(r[1]+r[2])}).attr("y",function(r){return m(r[0])+2}).attr("dx",-3).attr("dy",q).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(r){return(r[2]<=0)?"":r[2]});j.selectAll(".bar2").data(i).enter().append("rect").attr("class","bar bar_grey").attr("fill","bar_grey").attr("x",function(r){return o(r[1]+r[2])}).attr("y",function(r){return m(r[0])+2}).attr("width",function(r){return o(r[3])}).attr("height",m.rangeBand()-4);j.selectAll(".bar2").data(i).enter().append("text").attr("x",function(r){return o(r[1]+r[2]+r[3])}).attr("y",function(r){return m(r[0])+2}).attr("dx",-3).attr("dy",q).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(r){return(r[3]<=0)?"":r[3]})};horizontalBarSingleChoice=function(c,h){var l=c.width();var j=h.values.reverse();var d=h.colors.reverse();var i={top:15,right:15,bottom:40,left:40};var q=j.length*h.barHeight;c.height(q+i.top+i.bottom+"px");var g=l-i.left-i.right;var m=h.participants;var o=m;var p=d3.scale.linear().domain([0,o]).range([0,g]);var f=d3.scale.linear().domain([0,1]).range([0,g]);var b=d3.svg.axis().scale(f).orient("bottom").ticks(10,"%");var n=d3.scale.ordinal().domain(j.map(function(s){return s[0]})).rangeRoundBands([q,0]);var e=d3.svg.axis().scale(n).orient("left");var k=d3.select("#"+c.attr("id")).append("svg").attr("width",g+i.left+i.right).attr("height",q+i.top+i.bottom).append("g").attr("transform","translate("+i.left+","+i.top+")");k.append("g").attr("class","x axis").attr("transform","translate(0,"+q+")").call(b).append("text").attr("y",(i.bottom/1.7)).attr("x",(g/2)).attr("dy","1em").style("text-anchor","middle").text(h.xBottomLegend);k.selectAll(".bar0").data(j).enter().append("rect").attr("class",function(t,s){if(d==null){return"bar bar0 bar_default"}else{if(d.length>s){return d[s]}else{return"bar bar0 bar_default"}}}).attr("fill","bar_green").attr("x",0).attr("y",function(s){return n(s[0])+2}).attr("width",function(s){return p(s[1])}).attr("height",n.rangeBand()-4);var r=((n.rangeBand()/2)+3)+"px";k.selectAll(".bar0").data(j).enter().append("text").attr("x",function(s){return p(s[1])}).attr("y",function(s){return n(s[0])+2}).attr("dx",-3).attr("dy",r).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(s){return(s[1]<=0)?"":s[1]});k.append("g").attr("class","y axis").call(e).append("text").attr("transform","rotate(-90)").attr("y",0-i.left).attr("x",0-(q/2)).attr("dy","1em").style("text-anchor","middle").text(h.yLeftLegend)};histogramDuration=function(v,u){var c=v.height();var q=v.width();var f=u.values;var s=d3.min(f,function(x){return x});var z=d3.max(f,function(x){return x});var d="%M:%S";if(z<10){d+=":%L"}var i=new Date(2012,0,1,0,0),w=d3.format(",.f"),A=d3.time.format(d),l=function(x){return A(new Date(i.getTime()+(x*1000)))};var n={top:10,right:60,bottom:40,left:60},r=q-n.left-n.right,p=c-n.top-n.bottom;var m=d3.scale.linear().domain([0,z]).range([0,r]);var B=d3.layout.histogram().bins(m.ticks(20))(f);var h=d3.sum(B,function(x){return x.y});var k=d3.scale.linear().domain([0,d3.max(B,function(x){return x.y})]).range([p,0]);var g=d3.scale.linear().domain([0,d3.max(B,function(x){return x.y/h})]).range([p,0]);var j=d3.svg.axis().scale(m).orient("bottom").tickFormat(l);var b=d3.svg.axis().scale(k).orient("right").ticks(k.domain()[1]).tickSubdivide(0);var e=d3.svg.axis().scale(g).orient("left").ticks(10,"%");var o=d3.select("#"+v.attr("id")).append("svg").attr("width",r+n.left+n.right).attr("height",p+n.top+n.bottom).append("g").attr("transform","translate("+n.left+","+n.top+")");var t=o.selectAll(".bar").data(B).enter().append("g").attr("class","bar bar_default").attr("transform",function(x){return"translate("+m(x.x)+","+k(x.y)+")"}).append("rect").attr("x",2).attr("width",m(B[0].dx)-4).attr("height",function(x){return p-k(x.y)});o.append("g").attr("class","y axis").call(e).append("text").attr("transform","rotate(-90)").attr("y",0-n.left).attr("x",0-(p/2)).attr("dy","1em").style("text-anchor","middle").text(u.yLeftLegend);o.append("g").attr("class","x axis").attr("transform","translate(0,"+p+")").call(j).append("text").attr("y",(n.bottom/1.1)).attr("x",(r/2)).attr("dx","1em").style("text-anchor","middle").text(u.xBottomLegend);o.append("g").attr("class","y axis").attr("transform","translate("+r+",0)").call(b).append("text").attr("transform","rotate(90)").attr("y",0-(n.right)).attr("x",(p/2)).attr("dy","1em").style("text-anchor","middle").text(u.yRightLegend)};histogramScore=function(s,r){var c=s.height();var o=s.width();var e=r.values;var l={top:10,right:60,bottom:40,left:60},p=o-l.left-l.right,n=c-l.top-l.bottom;var f=r.cut;var t=d3.max(e,function(v){return v});if(t<1){t=1}var k=d3.scale.linear().domain([0,t]).range([0,p]);var u=d3.layout.histogram().bins(k.ticks(20))(e);var h=d3.sum(u,function(v){return v.y});var j=d3.scale.linear().domain([0,d3.max(u,function(v){return v.y})]).range([n,0]);var g=d3.scale.linear().domain([0,d3.max(u,function(v){return v.y/h})]).range([n,0]);var i=d3.svg.axis().scale(k).orient("bottom").tickFormat(d3.format(".01f"));var b=d3.svg.axis().scale(j).orient("right").ticks(j.domain()[1]).tickSubdivide(0);var d=d3.svg.axis().scale(g).orient("left").ticks(10,"%");var m=d3.select("#"+s.attr("id")).append("svg").attr("width",p+l.left+l.right).attr("height",n+l.top+l.bottom).append("g").attr("transform","translate("+l.left+","+l.top+")");var q=m.selectAll(".bar").data(u).enter().append("g").attr("class",function(w,v){if(f==null){return"bar bar_default"}else{if(u[v].x<f){return"bar bar_red"}else{return"bar bar_green"}}}).attr("transform",function(v){return"translate("+k(v.x)+","+j(v.y)+")"}).append("rect").attr("x",2).attr("width",k(u[0].dx)-4).attr("height",function(v){return n-j(v.y)});m.append("g").attr("class","y axis").call(d).append("text").attr("transform","rotate(-90)").attr("y",0-l.left).attr("x",0-(n/2)).attr("dy","1em").style("text-anchor","middle").text(r.yLeftLegend);m.append("g").attr("class","x axis").attr("transform","translate(0,"+n+")").call(i).append("text").attr("y",(l.bottom/1.1)).attr("x",(p/2)).attr("dx","1em").style("text-anchor","middle").text(r.xBottomLegend);m.append("g").attr("class","y axis").attr("transform","translate("+p+",0)").call(b).append("text").attr("transform","rotate(90)").attr("y",0-(l.right)).attr("x",(n/2)).attr("dy","1em").style("text-anchor","middle").text(r.yRightLegend)}}(jQuery));
\ No newline at end of file
diff --git a/src/main/webapp/static/themes/openolat/all/modules/_portlets_boxes.scss b/src/main/webapp/static/themes/openolat/all/modules/_portlets_boxes.scss
index 8e77bbfa7fd6c3b89f89d64ed878c635270c3b05..89579742b6e3505b1c16e4f80824c5e12594a5f5 100644
--- a/src/main/webapp/static/themes/openolat/all/modules/_portlets_boxes.scss
+++ b/src/main/webapp/static/themes/openolat/all/modules/_portlets_boxes.scss
@@ -102,6 +102,8 @@ div.o_home_rsslink {
 
 div.o_portlet_repository_student td.b_first_child { width: 24px;}
 div.o_portlet_repository_teacher td.b_first_child { width: 24px;}
+
+.o_links_portlet p { margin:0; }
 	
 /*  small portlet icons */
 .b_portlet .b_portlet_header { background-repeat:no-repeat; background-position: 0% 50%; padding-left:27px; padding-top:5px; padding-bottom:5px;}
diff --git a/src/test/java/org/olat/ims/qti/statistics/manager/QTIStatisticsManagerLargeTest.java b/src/test/java/org/olat/ims/qti/statistics/manager/QTIStatisticsManagerLargeTest.java
index f2aafcaefb9a67c334fc9d5f56d1f3f71451168c..4f8e542c9f15dacf284c2ee61095cbf42b36572b 100644
--- a/src/test/java/org/olat/ims/qti/statistics/manager/QTIStatisticsManagerLargeTest.java
+++ b/src/test/java/org/olat/ims/qti/statistics/manager/QTIStatisticsManagerLargeTest.java
@@ -297,7 +297,7 @@ public class QTIStatisticsManagerLargeTest extends OlatTestCase {
 		QTIStatisticSearchParams searchParams = new QTIStatisticSearchParams(olatResource, olatResourceDetail);
 		StatisticsItem stats  = qtim.getItemStatistics(itemObject.getItemIdent(), maxValue, searchParams);
 
-		double difficulty = rightAnswersQ2 / numberOfParticipants;
+		double difficulty = rightAnswersQ2 / (double)numberOfParticipants;
 		Assert.assertEquals(difficulty, stats.getDifficulty(), 0.1);
 		Assert.assertEquals(scoreQ2, stats.getAverageScore(), 0.1);
 		Assert.assertEquals(wrongAnswersQ2, stats.getNumOfIncorrectAnswers());