diff --git a/src/main/java/org/olat/admin/search/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/admin/search/_i18n/LocalStrings_fr.properties
index abbd86e9d49a548cbf51e9afa87e19cacdbd47a4..c8a27c9a04b5762223c097e2abd7baa276c7c475 100644
--- a/src/main/java/org/olat/admin/search/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/admin/search/_i18n/LocalStrings_fr.properties
@@ -1,7 +1,7 @@
 #Tue Sep 09 10:42:03 CEST 2014
 button.refreshindexing=Rafra\u00EEchir les "Lucene Readers"
-button.startindexing=D\u00E9marrer d'indexer
-button.stopindexing=Arr\u00EAter d'indexer
+button.startindexing=D\u00E9marrer l'indexation
+button.stopindexing=Arr\u00EAter l'indexation
 error.index.interval.must.be.number=L'intervalle d'index doit \u00EAtre un nombre
 fullindexer.doc.counters.title=Nombre de documents par type de document index\u00E9 
 fullindexer.doc.excluded.document.count=Nombre des fichiers non index\u00E9s (taille du fichier)
diff --git a/src/main/java/org/olat/admin/sysinfo/SysinfoController.java b/src/main/java/org/olat/admin/sysinfo/SysinfoController.java
index 62a02c823dd832ef3e449d6bb241f6b815cdeb6c..8b62d6c6a4504a9cbb54e53da92a14f8c570a8bb 100644
--- a/src/main/java/org/olat/admin/sysinfo/SysinfoController.java
+++ b/src/main/java/org/olat/admin/sysinfo/SysinfoController.java
@@ -151,7 +151,7 @@ public class SysinfoController extends FormBasicController {
 		
 		//version
 		uifactory.addStaticTextElement("version", "sysinfo.version", Settings.getFullVersionInfo(), serverCont);
-		uifactory.addStaticTextElement("version.hg", "sysinfo.version.hg", WebappHelper.getChangeSet(), serverCont);
+		uifactory.addStaticTextElement("version.git", "sysinfo.version.git", WebappHelper.getChangeSet(), serverCont);
 		String buildDate = format.formatDateAndTime(Settings.getBuildDate());
 		uifactory.addStaticTextElement("version.date", "sysinfo.version.date", buildDate, serverCont);
 
diff --git a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_de.properties
index c3bbd453bc9a6ce97764fd3f271a9aad77048b59..c1c65473f2a87c97c114e05e363a07f2bbc70cf1 100644
--- a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_de.properties
@@ -180,7 +180,7 @@ sysinfo.olatdata=Daten Verzeichnis
 sysinfo.startuptime=Server Startzeit
 sysinfo.version=Version
 sysinfo.version.date=Build Datum
-sysinfo.version.hg=Git Version
+sysinfo.version.git=Git Version
 title.hibernate.statistics=Hibernate Datenbank Zugriff Statistik
 title.connection.statistics=Datenbank Connections Statistik
 usersession.title=Information \u00FCber Benutzer-Sessions
diff --git a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_en.properties
index 710c3e0d3cbc7aa65f5f603e2f6c4dd5b33ea1f1..fe8b92b186ef70ca4d029a6b9fa7b00024926bc8 100644
--- a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_en.properties
@@ -180,7 +180,7 @@ sysinfo.olatdata=Data directory
 sysinfo.startuptime=Server startup time
 sysinfo.version=Version
 sysinfo.version.date=Build date
-sysinfo.version.hg=Git version
+sysinfo.version.git=Git version
 title.connection.statistics=Database connections statistics
 title.hibernate.statistics=Hibernate database access statistics
 usersession.title=Information on user sessions
diff --git a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_fr.properties
index 43a359b7a088f85224d82501384682254b67dadc..b7a8d12b25c965b9a1338cc77ef0aebcd4fe3b67 100644
--- a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_fr.properties
@@ -180,7 +180,7 @@ sysinfo.olatdata=Dossier donn\u00E9es
 sysinfo.startuptime=temps de d\u00E9part du serveur
 sysinfo.version=Version
 sysinfo.version.date=Date de compilation
-sysinfo.version.hg=Version mercurial
+sysinfo.version.git=Version Git
 title.connection.statistics=Statistiques des connections \u00E0 la base de donn\u00E9es
 title.hibernate.statistics=Base de donn\u00E9e hibern\u00E9e acc\u00E8s statistiques
 usersession.title=Informations sur la session utilisateur
diff --git a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_it.properties
index 4c0da53c11ec4e0afa0f34dd74962fc6bf1e71c1..113e505cb6ec15c22964ec415cd797ecf45d82b8 100644
--- a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_it.properties
@@ -180,7 +180,7 @@ sysinfo.olatdata=Directory dati
 sysinfo.startuptime=Momento d'avvio del server
 sysinfo.version=Versione
 sysinfo.version.date=Data build
-sysinfo.version.hg=Versione mercurial
+sysinfo.version.git=Versione Git
 title.connection.statistics=Statistiche connessione database
 title.hibernate.statistics=Hibernate statistica accesso banca dati 
 usersession.title=Informazione sulle sessioni degli utenti
diff --git a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_pl.properties
index 194b08c72be76b1f8da74b83f33bccc10db0f8a0..37273ea0da4ac3918a3cf42b72ba47974d35c30a 100644
--- a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_pl.properties
@@ -136,6 +136,6 @@ sysinfo.memory=Informacje o pami\u0119ci
 sysinfo.startuptime=Czas uruchamiania serwera
 sysinfo.version=Wersja
 sysinfo.version.date=Data kompilacji
-sysinfo.version.hg=Wersja Mercurial
+sysinfo.version.git=Wersja Git
 title.hibernate.statistics=Hibernate database access statistics
 usersession.title=Informacje o sesjach u\u017Cytkownika
diff --git a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_pt_BR.properties
index d6691d172f49221d3abeca33d6ba5dcb6b1ac1d9..912ed1621f7ebdb774ac4e6d8dfb8f207a581a33 100644
--- a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_pt_BR.properties
@@ -180,7 +180,7 @@ sysinfo.olatdata=Diret\u00F3rio de dados
 sysinfo.startuptime=Server startup time
 sysinfo.version=Vers\u00E3o
 sysinfo.version.date=Build date
-sysinfo.version.hg=Git version
+sysinfo.version.git=Git version
 title.connection.statistics=Estat\u00EDsticas de conex\u00F5es ao banco de dados
 title.hibernate.statistics=Acesso banco de estatisticas Hibernate
 usersession.title=Informa\u00E7\u00E3o sobre sess\u00F5es do usu\u00E1rio
diff --git a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_zh_CN.properties
index 71580df57c6d5292512d25bb32c3b0086ad4a549..0d41bf8537e0884515fced0946373c4f2eac20cb 100644
--- a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_zh_CN.properties
+++ b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_zh_CN.properties
@@ -153,6 +153,6 @@ sysinfo.olatdata=\u6570\u636E\u76EE\u5F55
 sysinfo.startuptime=\u670D\u52A1\u5668\u5F00\u542F\u65F6\u95F4
 sysinfo.version=\u7248\u672C
 sysinfo.version.date=\u521B\u5EFA\u65E5\u671F
-sysinfo.version.hg=Mercurial\u7248\u672C
+sysinfo.version.git=Git\u7248\u672C
 title.hibernate.statistics=Hibernate\u6570\u636E\u5E93\u8BBF\u95EE\u7EDF\u8BA1
 usersession.title=\u7528\u6237\u4F1A\u8BDD\u4FE1\u606F
diff --git a/src/main/java/org/olat/modules/coach/ui/StudentCoursesController.java b/src/main/java/org/olat/modules/coach/ui/StudentCoursesController.java
index 31e38aa0d119749ca0e0b73931a7ade558fd85b4..fd7cd47ec9566e46ef3f8cc7099e4a523d7fc831 100644
--- a/src/main/java/org/olat/modules/coach/ui/StudentCoursesController.java
+++ b/src/main/java/org/olat/modules/coach/ui/StudentCoursesController.java
@@ -377,7 +377,8 @@ public class StudentCoursesController extends FormBasicController implements Act
 		removeAsListenerAndDispose(cmc);
 
 		ContactMessage cmsg = new ContactMessage(getIdentity());
-		ContactList contactList = new ContactList("to");
+		String fullName = userManager.getUserDisplayName(student);
+		ContactList contactList = new ContactList(fullName);
 		contactList.add(student);
 		cmsg.addEmailTo(contactList);
 		contactCtrl = new ContactFormController(ureq, getWindowControl(), true, false, false, cmsg);
diff --git a/src/main/java/org/olat/restapi/system/IndexerWebService.java b/src/main/java/org/olat/restapi/system/IndexerWebService.java
index ad614a5cf1ddd415904efa8c5b485750f2c0c7de..d2be7f89c5fd1423c33bdda41af6c954c6ac45f6 100644
--- a/src/main/java/org/olat/restapi/system/IndexerWebService.java
+++ b/src/main/java/org/olat/restapi/system/IndexerWebService.java
@@ -43,9 +43,9 @@ public class IndexerWebService {
 	/**
 	 * Return the statistics about the indexer
 	 * @response.representation.200.qname {http://www.example.com}releaseVO
-   * @response.representation.200.mediaType application/xml, application/json
-   * @response.representation.200.doc Statistics about the indexer
-   * @response.representation.200.example {@link org.olat.restapi.system.vo.Examples#SAMPLE_OO_INDEXERSTATSVO}
+	 * @response.representation.200.mediaType application/xml, application/json
+	 * @response.representation.200.doc Statistics about the indexer
+	 * @response.representation.200.example {@link org.olat.restapi.system.vo.Examples#SAMPLE_OO_INDEXERSTATSVO}
 	 * @response.representation.401.doc The roles of the authenticated user are not sufficient
 	 * @return The statistics about the indexer
 	 */
@@ -58,8 +58,8 @@ public class IndexerWebService {
 	
 	/**
 	 * Return the status of the indexer: running, stopped
-   * @response.representation.200.mediaType application/xml, application/json
-   * @response.representation.200.doc The status of the indexer
+	 * @response.representation.200.mediaType application/xml, application/json
+	 * @response.representation.200.doc The status of the indexer
 	 * @response.representation.401.doc The roles of the authenticated user are not sufficient
 	 * @return The status of the indexer
 	 */
@@ -72,15 +72,15 @@ public class IndexerWebService {
 		if(serviceStatus instanceof SearchServiceStatusImpl) {
 			status = serviceStatus.getStatus();
 		} else {
-			status = "disabled";
+			status = FullIndexerStatus.STATUS_DISABLED;
 		}
 		return Response.ok(new IndexerStatus(status)).build();
 	}
 	
 	/**
 	 * Return the status of the indexer: running, stopped
-   * @response.representation.200.mediaType text/plain
-   * @response.representation.200.doc The status of the indexer
+	 * @response.representation.200.mediaType text/plain
+	 * @response.representation.200.doc The status of the indexer
 	 * @response.representation.401.doc The roles of the authenticated user are not sufficient
 	 * @return The status of the indexer
 	 */
@@ -93,7 +93,7 @@ public class IndexerWebService {
 		if(serviceStatus instanceof SearchServiceStatusImpl) {
 			status = serviceStatus.getStatus();
 		} else {
-			status = "disabled";
+			status = FullIndexerStatus.STATUS_DISABLED;
 		}
 		return Response.ok(status).build();
 	}
@@ -101,7 +101,7 @@ public class IndexerWebService {
 	/**
 	 * Update the status of the indexer: running, stopped.
 	 * Running start the indexer, stopped, stop it.
-   * @response.representation.200.doc The status has changed
+	 * @response.representation.200.doc The status has changed
 	 * @response.representation.401.doc The roles of the authenticated user are not sufficient
 	 * @return The status of the indexer
 	 */
@@ -123,18 +123,20 @@ public class IndexerWebService {
 		if(status instanceof SearchServiceStatusImpl) {
 			SearchServiceStatusImpl statusImpl = (SearchServiceStatusImpl)status;
 			FullIndexerStatus fStatus = statusImpl.getFullIndexerStatus();
-			stats.setIndexedDocumentCount(fStatus.getDocumentCount());
-			stats.setExcludedDocumentCount(fStatus.getExcludedDocumentCount());
-			stats.setIndexSize(fStatus.getIndexSize());
-			stats.setIndexingTime(fStatus.getIndexingTime());
+			FullIndexerStatus lStatus = statusImpl.getLifeIndexerStatus();
+
+			stats.setIndexedDocumentCount(fStatus.getDocumentCount() + lStatus.getDocumentCount());
+			stats.setExcludedDocumentCount(fStatus.getExcludedDocumentCount() + lStatus.getExcludedDocumentCount());
+			stats.setIndexSize(fStatus.getIndexSize() + lStatus.getIndexSize());
+			stats.setIndexingTime(fStatus.getIndexingTime() + lStatus.getIndexingTime());
 			stats.setFullIndexStartedAt(fStatus.getFullIndexStartedAt());
-			stats.setDocumentQueueSize(fStatus.getDocumentQueueSize());
-			stats.setRunningFolderIndexerCount(fStatus.getNumberRunningFolderIndexer());
-			stats.setAvailableFolderIndexerCount(fStatus.getNumberAvailableFolderIndexer());
+			stats.setDocumentQueueSize(fStatus.getDocumentQueueSize() + lStatus.getDocumentQueueSize());
+			stats.setRunningFolderIndexerCount(fStatus.getNumberRunningFolderIndexer() + lStatus.getNumberRunningFolderIndexer());
+			stats.setAvailableFolderIndexerCount(fStatus.getNumberAvailableFolderIndexer() + lStatus.getNumberAvailableFolderIndexer());
 			stats.setLastFullIndexTime(fStatus.getLastFullIndexDateString());
 			stats.setStatus(status.getStatus());
 		} else {
-			stats.setStatus("disabled");
+			stats.setStatus(FullIndexerStatus.STATUS_DISABLED);
 		}
 		return stats;
 	}
diff --git a/src/main/java/org/olat/restapi/system/ProcSamplerJob.java b/src/main/java/org/olat/restapi/system/ProcSamplerJob.java
index 74dec32a364ad5adb40336dd97e86cede971b3bd..e86598b970947806bff6c1e2c4013d5aac01ca47 100644
--- a/src/main/java/org/olat/restapi/system/ProcSamplerJob.java
+++ b/src/main/java/org/olat/restapi/system/ProcSamplerJob.java
@@ -21,7 +21,6 @@ package org.olat.restapi.system;
 
 import java.io.File;
 import java.io.FileOutputStream;
-import java.io.IOException;
 import java.io.OutputStream;
 import java.text.SimpleDateFormat;
 import java.util.Date;
@@ -43,8 +42,6 @@ import org.olat.restapi.system.MonitoringService.Statistics;
 import org.olat.restapi.system.vo.SessionsVO;
 import org.olat.search.SearchServiceStatus;
 import org.olat.search.service.SearchServiceFactory;
-import org.olat.search.service.SearchServiceStatusImpl;
-import org.olat.search.service.indexer.FullIndexerStatus;
 import org.quartz.JobExecutionContext;
 import org.springframework.scheduling.quartz.QuartzJobBean;
 import org.w3c.dom.Document;
@@ -118,30 +115,32 @@ public class ProcSamplerJob extends QuartzJobBean {
 			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
 			format.setTimeZone(TimeZones.getUtcTimeZone());
 			SearchServiceStatus status = SearchServiceFactory.getService().getStatus();
-			if(status instanceof SearchServiceStatusImpl) {
-				SearchServiceStatusImpl statusImpl = (SearchServiceStatusImpl)status;
-				FullIndexerStatus fStatus = statusImpl.getFullIndexerStatus();
-				String date = format.format(new Date(fStatus.getLastFullIndexTime()));
-				addValue("lastFullIndexTime", date, rootEl, doc);
-			}
+
+			String date = format.format(status.getLastFullIndexTime());
+			addValue("lastFullIndexTime", date, rootEl, doc);
+
 			//marker
 			addValue("lastOpenOLATSampling", format.format(new Date()), rootEl, doc);
 
-			// Use a Transformer for output
-			try(OutputStream out = new FileOutputStream(xmlFile)) {
-				TransformerFactory tFactory = TransformerFactory.newInstance();
-				Transformer transformer = tFactory.newTransformer();
-				transformer.setOutputProperty(OutputKeys.INDENT, "yes");
-				transformer.transform(new DOMSource(doc), new StreamResult(out));
-			} catch(IOException e) {
-				log.error("", e);
-			}
+			writeDocument(xmlFile, doc);
 		} catch(Exception e) {
 			log.error("", e);
 			
 		}
 	}
 	
+	private void writeDocument(File xmlFile, Document doc) {
+		// Use a Transformer for output
+		try(OutputStream out = new FileOutputStream(xmlFile)) {
+			TransformerFactory tFactory = TransformerFactory.newInstance();
+			Transformer transformer = tFactory.newTransformer();
+			transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+			transformer.transform(new DOMSource(doc), new StreamResult(out));
+		} catch(Exception e) {
+			log.error("", e);
+		}
+	}
+	
 	private Document loadDocument(File xmlFile) {
 		try {
 			DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
diff --git a/src/main/java/org/olat/restapi/system/vo/IndexerStatus.java b/src/main/java/org/olat/restapi/system/vo/IndexerStatus.java
index 7cec28cda1f21f52f89e1e4db07398f40f39347b..097005b78ea2ce88d299eb5ad377c5165651d545 100644
--- a/src/main/java/org/olat/restapi/system/vo/IndexerStatus.java
+++ b/src/main/java/org/olat/restapi/system/vo/IndexerStatus.java
@@ -24,8 +24,6 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 
-import org.olat.search.SearchServiceStatus;
-
 /**
  * 
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
@@ -33,7 +31,7 @@ import org.olat.search.SearchServiceStatus;
  */
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlRootElement(name = "indexerStatusVO")
-public class IndexerStatus implements SearchServiceStatus {
+public class IndexerStatus {
 
 	@XmlAttribute(name="status")
 	private String status;
diff --git a/src/main/java/org/olat/search/SearchServiceStatus.java b/src/main/java/org/olat/search/SearchServiceStatus.java
index 31d70be976682667341b9e07a0de1d1b51099f60..424d9040ae3f15a3e1f26c92f604a1788f46951a 100644
--- a/src/main/java/org/olat/search/SearchServiceStatus.java
+++ b/src/main/java/org/olat/search/SearchServiceStatus.java
@@ -25,6 +25,7 @@
 
 package org.olat.search;
 
+import java.util.Date;
 
 /**
  * Collection of search-service states. Includes state of full-index, index and search.
@@ -34,5 +35,7 @@ package org.olat.search;
 public interface SearchServiceStatus {
 	
 	public String getStatus();
+	
+	public Date getLastFullIndexTime();
 
 }
diff --git a/src/main/java/org/olat/search/_spring/searchContext.xml b/src/main/java/org/olat/search/_spring/searchContext.xml
index 775eaf9d2c05f5080958a3d9a66f7742f69ab22e..b27414e82ee54dc402051a2785b05d76c74db3d9 100644
--- a/src/main/java/org/olat/search/_spring/searchContext.xml
+++ b/src/main/java/org/olat/search/_spring/searchContext.xml
@@ -304,10 +304,6 @@
 		</property>				
 	</bean>
 	
-	
-	<!-- Question items -->
-	<bean id="questionItemIndexer" class="org.olat.search.service.indexer.QuestionItemIndexer"/>
-	
 	<!-- Inject security callback to IdentityIndexer which reduce the visibility of users 
 	     via the full text search to admin and user managers -->
 	<!--
diff --git a/src/main/java/org/olat/search/service/SearchServiceImpl.java b/src/main/java/org/olat/search/service/SearchServiceImpl.java
index a6e3e07392eebe98a940c2ad1d079247b35ed31f..6e53f07c417ffeca3e779e9db5dfebdefe791a82 100644
--- a/src/main/java/org/olat/search/service/SearchServiceImpl.java
+++ b/src/main/java/org/olat/search/service/SearchServiceImpl.java
@@ -458,7 +458,7 @@ public class SearchServiceImpl implements SearchService, GenericEventListener {
 
 	@Override
 	public SearchServiceStatus getStatus() {
-		return new SearchServiceStatusImpl(indexer,this);
+		return new SearchServiceStatusImpl(indexer, lifeIndexer, this);
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/search/service/SearchServiceStatusImpl.java b/src/main/java/org/olat/search/service/SearchServiceStatusImpl.java
index 8804da7e69fe7b8107928eec926c86b4c50268c5..34f7f4dc2075e32da702359fc3bde9d139323ef7 100644
--- a/src/main/java/org/olat/search/service/SearchServiceStatusImpl.java
+++ b/src/main/java/org/olat/search/service/SearchServiceStatusImpl.java
@@ -25,10 +25,13 @@
 
 package org.olat.search.service;
 
+import java.util.Date;
+
 import org.olat.search.SearchService;
 import org.olat.search.SearchServiceStatus;
 import org.olat.search.service.indexer.FullIndexerStatus;
 import org.olat.search.service.indexer.Index;
+import org.olat.search.service.indexer.LifeFullIndexer;
 
 /**
  * Collection of search-service states. Includes state of full-index, index and search.
@@ -37,7 +40,8 @@ import org.olat.search.service.indexer.Index;
  */
 public class SearchServiceStatusImpl implements SearchServiceStatus {
 	
-	FullIndexerStatus fullIndexerStatus;
+	private final FullIndexerStatus fullIndexerStatus;
+	private final FullIndexerStatus lifeIndexerStatus;
 	
 	private boolean indexExists; 
 	private long queryCount;
@@ -50,15 +54,25 @@ public class SearchServiceStatusImpl implements SearchServiceStatus {
 	 * @param indexer  Reference to index-component.
 	 * @param search   Reference to search-component.
 	 */
-	public SearchServiceStatusImpl(Index indexer, SearchService search) {
+	public SearchServiceStatusImpl(Index indexer, LifeFullIndexer lifeIndexer, SearchService search) {
 		fullIndexerStatus = indexer.getFullIndexStatus();
+		lifeIndexerStatus = lifeIndexer.getStatus();
 		indexExists = indexer.existIndex();
 		queryCount = search.getQueryCount();
 	}
 
 	@Override
 	public String getStatus() {
-		return fullIndexerStatus.getStatus();
+		String fullStatus = fullIndexerStatus.getStatus();
+		String lifeStatus = lifeIndexerStatus.getStatus();
+		
+		String status = FullIndexerStatus.STATUS_STOPPED;
+		if(FullIndexerStatus.STATUS_RUNNING.equals(fullStatus) || FullIndexerStatus.STATUS_RUNNING.equals(lifeStatus)) {
+			status = FullIndexerStatus.STATUS_RUNNING;
+		} else if(FullIndexerStatus.STATUS_FINISHED.equals(fullStatus) || FullIndexerStatus.STATUS_FINISHED.equals(lifeStatus)) {
+			status = FullIndexerStatus.STATUS_FINISHED;
+		}
+		return status;
 	}
 
 	/**
@@ -68,6 +82,20 @@ public class SearchServiceStatusImpl implements SearchServiceStatus {
 		return fullIndexerStatus;
 	}
 	
+	/**
+	 * @return  Status of life-indexer.
+	 */
+	public FullIndexerStatus getLifeIndexerStatus() {
+		return lifeIndexerStatus;
+	}
+
+	@Override
+	public Date getLastFullIndexTime() {
+		long fullTime = fullIndexerStatus.getLastFullIndexTime();
+		long lifeTime = lifeIndexerStatus.getLastFullIndexTime();
+		return (lifeTime > fullTime) ? new Date(lifeTime) : new Date(fullTime);
+	}
+	
 	/**
 	 * @return  TRUE when an search index exists.
 	 */
diff --git a/src/main/java/org/olat/search/service/indexer/FullIndexerStatus.java b/src/main/java/org/olat/search/service/indexer/FullIndexerStatus.java
index 204ab0b856a0b38769a9d74e783fc6f86fdab79f..36df4a3ff27ace94df07dc5377605c040685ac5e 100644
--- a/src/main/java/org/olat/search/service/indexer/FullIndexerStatus.java
+++ b/src/main/java/org/olat/search/service/indexer/FullIndexerStatus.java
@@ -38,10 +38,10 @@ import org.olat.search.service.document.file.FileDocumentFactory;
  */
 public class FullIndexerStatus {
 
-	public final static String STATUS_STOPPED  = "stopped";
-	public final static String STATUS_RUNNING  = "running";
-	public final static String STATUS_FINISHED = "finished";
-	public final static String STATUS_SLEEPING = "sleeping";
+	public static final String STATUS_STOPPED  = "stopped";
+	public static final String STATUS_RUNNING  = "running";
+	public static final String STATUS_FINISHED = "finished";
+	public static final String STATUS_DISABLED = "disabled";
 
 	private long fullIndexStartedAt = 0;
 	private long lastFullIndexTime = 0;
@@ -63,8 +63,8 @@ public class FullIndexerStatus {
 		
 	public FullIndexerStatus(int numberOfPartDocumentCounters) {
 		partDocumentCounters = new int[numberOfPartDocumentCounters];
-		documentCounters = new Hashtable<String,Integer>();
-		fileTypeCounters = new Hashtable<String,Integer>();
+		documentCounters = new Hashtable<>();
+		fileTypeCounters = new Hashtable<>();
 	}
 	
 
@@ -140,8 +140,8 @@ public class FullIndexerStatus {
 		for (int i = 0; i < partDocumentCounters.length; i++) {
 			partDocumentCounters[i] = 0;
 		}
-		documentCounters = new Hashtable<String,Integer>();
-		fileTypeCounters = new Hashtable<String,Integer>();
+		documentCounters = new Hashtable<>();
+		fileTypeCounters = new Hashtable<>();
 		CoreSpringFactory.getImpl(FileDocumentFactory.class).resetExcludedFileSizeCount();
 	}
 
@@ -262,10 +262,10 @@ public class FullIndexerStatus {
 	 * @return  Return HTML formatted text with document-type names and counter-values.
 	 */
 	public String getDocumentCounters() {
-		StringBuilder buf = new StringBuilder();
-		for (String documentType : documentCounters.keySet()) {
-			Integer counterValue = documentCounters.get(documentType);
-			buf.append(documentType);
+		StringBuilder buf = new StringBuilder(1024);
+		for (Map.Entry<String, Integer> documentType : documentCounters.entrySet()) {
+			Integer counterValue = documentType.getValue();
+			buf.append(documentType.getKey());
 			buf.append("=");
 			buf.append(counterValue.toString());
 			buf.append("<br />");
@@ -285,10 +285,10 @@ public class FullIndexerStatus {
 	 * @return  Return HTML formatted text with file-type names and counter-values.
 	 */
 	public String getFileTypeCounters() {
-		StringBuilder buf = new StringBuilder();
-		for (String fileType : fileTypeCounters.keySet()) {
-			Integer counterValue = fileTypeCounters.get(fileType);
-			buf.append(fileType);
+		StringBuilder buf = new StringBuilder(1024);
+		for (Map.Entry<String, Integer> fileType : fileTypeCounters.entrySet()) {
+			Integer counterValue = fileType.getValue();
+			buf.append(fileType.getKey());
 			buf.append("=");
 			buf.append(counterValue.toString());
 			buf.append("<br />");
diff --git a/src/main/java/org/olat/search/service/indexer/JmsIndexer.java b/src/main/java/org/olat/search/service/indexer/JmsIndexer.java
index 82b7a6a02b64ec2b6880794b16537848c75ac59d..4207c8d7450a524cc0f8fb627ee546b7f607a75a 100644
--- a/src/main/java/org/olat/search/service/indexer/JmsIndexer.java
+++ b/src/main/java/org/olat/search/service/indexer/JmsIndexer.java
@@ -85,13 +85,16 @@ public class JmsIndexer implements MessageListener, LifeFullIndexer, ConfigOnOff
 	
 	private double ramBufferSizeMB;
 	private boolean indexingNode;
-	
+
+	private FullIndexerStatus fullIndexerStatus;
+
 	private List<LifeIndexer> indexers = new ArrayList<>();
 	
 	public JmsIndexer(SearchModule searchModuleConfig, CoordinatorManager coordinatorManager) {
 		indexingNode = searchModuleConfig.isSearchServiceEnabled();
 		ramBufferSizeMB = searchModuleConfig.getRAMBufferSizeMB();
 		permanentIndexPath = searchModuleConfig.getFullPermanentIndexPath();
+		fullIndexerStatus = new FullIndexerStatus(0);
 		this.coordinatorManager = coordinatorManager;
 	}
 
@@ -243,9 +246,18 @@ public class JmsIndexer implements MessageListener, LifeFullIndexer, ConfigOnOff
 	
 	@Override
 	public void fullIndex() {
+		log.info("start full reindex of life index");
+		fullIndexerStatus.indexingStarted();
 		for(LifeIndexer indexer:indexers) {
 			indexer.fullIndex(this);
 		}
+		fullIndexerStatus.indexingFinished();
+		log.info("end full reindex of life index");
+	}
+
+	@Override
+	public FullIndexerStatus getStatus() {
+		return fullIndexerStatus;
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/search/service/indexer/LifeFullIndexer.java b/src/main/java/org/olat/search/service/indexer/LifeFullIndexer.java
index 120c29a7475378ba5e3dee49b00e85cf19d98ee5..7123f6f0b54d7fa213666cb640f2c36543c44caf 100644
--- a/src/main/java/org/olat/search/service/indexer/LifeFullIndexer.java
+++ b/src/main/java/org/olat/search/service/indexer/LifeFullIndexer.java
@@ -40,6 +40,8 @@ public interface LifeFullIndexer {
 	 */
 	public void fullIndex();
 	
+	public FullIndexerStatus getStatus();
+	
 	/**
 	 * Ask to index the document with the specified key
 	 * @param type
diff --git a/src/main/java/org/olat/search/service/indexer/QuestionItemIndexer.java b/src/main/java/org/olat/search/service/indexer/QuestionItemIndexer.java
index 539ea6db9bf1e5913347966202452016953cba5c..cc87bc9cc1387221f3b166c9e5768152fcb63a28 100644
--- a/src/main/java/org/olat/search/service/indexer/QuestionItemIndexer.java
+++ b/src/main/java/org/olat/search/service/indexer/QuestionItemIndexer.java
@@ -25,6 +25,7 @@ import java.util.List;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.index.IndexWriter;
 import org.olat.core.CoreSpringFactory;
+import org.olat.core.commons.persistence.DB;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.olat.modules.qpool.QPoolService;
@@ -32,6 +33,8 @@ import org.olat.modules.qpool.QuestionItemFull;
 import org.olat.modules.qpool.manager.QuestionItemDocumentFactory;
 import org.olat.modules.qpool.model.QItemDocument;
 import org.olat.search.service.SearchResourceContext;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
 /**
  * 
@@ -39,9 +42,13 @@ import org.olat.search.service.SearchResourceContext;
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  *
  */
+@Service("questionItemIndexer")
 public class QuestionItemIndexer implements LifeIndexer {
 	private static final OLog log = Tracing.createLoggerFor(QuestionItemIndexer.class);
 	private static final int BATCH_SIZE = 100;
+	
+	@Autowired
+	private DB dbInstance;
 
 	@Override
 	public String getSupportedTypeName() {
@@ -87,12 +94,15 @@ public class QuestionItemIndexer implements LifeIndexer {
 					indexWriter.addDocument(doc, writer);
 				}
 				counter += items.size();
+				indexWriter.getStatus().addDocumentCount(items.size());
+				dbInstance.commitAndCloseSession();
 			} while(items.size() == BATCH_SIZE);
 			log.info(counter + " question items indexed.");
 		} catch (Exception e) {
 			log.error("", e);
 		} finally {
 			indexWriter.releaseWriter(writer);
+			dbInstance.commitAndCloseSession();
 		}
 	}
 }