diff --git a/src/main/java/org/olat/commons/calendar/CalendarNotificationHandler.java b/src/main/java/org/olat/commons/calendar/CalendarNotificationHandler.java
index 1b80a9ad85dbfae3a89aa3dc0b02244f0c23a767..0c70893886f1f26a22d116b7e6799ba3d2be6965 100644
--- a/src/main/java/org/olat/commons/calendar/CalendarNotificationHandler.java
+++ b/src/main/java/org/olat/commons/calendar/CalendarNotificationHandler.java
@@ -89,7 +89,10 @@ public class CalendarNotificationHandler extends LogDelegator implements Notific
 				} else if (type.equals(CalendarController.ACTION_CALENDAR_GROUP)) {
 					BusinessGroup group = CoreSpringFactory.getImpl(BusinessGroupService.class).loadBusinessGroup(id);
 					calType = CalendarManager.TYPE_GROUP;
-					title = translator.translate("cal.notifications.header.group", new String[]{group.getName()});
+					if(group == null) {
+						return NotificationsManager.getInstance().getNoSubscriptionInfo();
+					}
+					title = translator.translate("cal.notifications.header.group", new String[]{ group.getName() });
 				}
 
 				if (calType != null) {
diff --git a/src/main/java/org/olat/modules/webFeed/search/indexer/FeedCourseNodeIndexer.java b/src/main/java/org/olat/modules/webFeed/search/indexer/FeedCourseNodeIndexer.java
index 36a324d3bf2d4e5a47893a390e51ccbaab1f920e..f7bae1ee8504c73fa0b15af33782c82c3f78f51a 100644
--- a/src/main/java/org/olat/modules/webFeed/search/indexer/FeedCourseNodeIndexer.java
+++ b/src/main/java/org/olat/modules/webFeed/search/indexer/FeedCourseNodeIndexer.java
@@ -59,36 +59,39 @@ public abstract class FeedCourseNodeIndexer extends DefaultIndexer implements Co
 	 * @see org.olat.search.service.indexer.Indexer#doIndex(org.olat.search.service.SearchResourceContext,
 	 *      java.lang.Object, org.olat.search.service.indexer.OlatFullIndexer)
 	 */
+	@Override
 	public void doIndex(SearchResourceContext searchResourceContext, ICourse course, CourseNode courseNode, OlatFullIndexer indexer)
 			throws IOException, InterruptedException {
 		RepositoryEntry repositoryEntry = courseNode.getReferencedRepositoryEntry();
-		// used for log messages
-		String repoEntryName = "*name not available*";
-		try {
-			repoEntryName = repositoryEntry.getDisplayname();
-			if (log.isDebug()) {
-				log.info("Indexing: " + repoEntryName);
-			}
-			Feed feed = FeedManager.getInstance().getFeed(repositoryEntry.getOlatResource());
-
-			// Set the document type, e.g. type.repository.entry.FileResource.BLOG
-			SearchResourceContext nodeSearchContext = new SearchResourceContext(searchResourceContext);
-			nodeSearchContext.setBusinessControlFor(courseNode);
-			nodeSearchContext.setDocumentType(getDocumentType());
-			nodeSearchContext.setTitle(courseNode.getShortTitle());
-			nodeSearchContext.setDescription(courseNode.getLongTitle());
-
-			// Create the olatDocument for the feed course node itself
-			OlatDocument feedNodeDoc = new FeedNodeDocument(feed, nodeSearchContext);
-			indexer.addDocument(feedNodeDoc.getLuceneDocument());
-			
-			// Only index items. Feed itself is indexed by RepositoryEntryIndexer.
-			for (Item item : feed.getPublishedItems()) {
-				OlatDocument itemDoc = new FeedItemDocument(item, nodeSearchContext);
-				indexer.addDocument(itemDoc.getLuceneDocument());
+		if(repositoryEntry != null) {
+			// used for log messages
+			String repoEntryName = "*name not available*";
+			try {
+				repoEntryName = repositoryEntry.getDisplayname();
+				if (log.isDebug()) {
+					log.info("Indexing: " + repoEntryName);
+				}
+				Feed feed = FeedManager.getInstance().getFeed(repositoryEntry.getOlatResource());
+	
+				// Set the document type, e.g. type.repository.entry.FileResource.BLOG
+				SearchResourceContext nodeSearchContext = new SearchResourceContext(searchResourceContext);
+				nodeSearchContext.setBusinessControlFor(courseNode);
+				nodeSearchContext.setDocumentType(getDocumentType());
+				nodeSearchContext.setTitle(courseNode.getShortTitle());
+				nodeSearchContext.setDescription(courseNode.getLongTitle());
+	
+				// Create the olatDocument for the feed course node itself
+				OlatDocument feedNodeDoc = new FeedNodeDocument(feed, nodeSearchContext);
+				indexer.addDocument(feedNodeDoc.getLuceneDocument());
+				
+				// Only index items. Feed itself is indexed by RepositoryEntryIndexer.
+				for (Item item : feed.getPublishedItems()) {
+					OlatDocument itemDoc = new FeedItemDocument(item, nodeSearchContext);
+					indexer.addDocument(itemDoc.getLuceneDocument());
+				}
+			} catch (NullPointerException e) {
+				log.error("Error indexing feed:" + repoEntryName, e);
 			}
-		} catch (NullPointerException e) {
-			log.error("Error indexing feed:" + repoEntryName, e);
 		}
 	}
 
diff --git a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java
index 974859b2b6980424ee927aac028aad317d3ff7d0..e2c54ed093fc7bb226f6628925155d57d914424c 100755
--- a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java
+++ b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java
@@ -1489,14 +1489,12 @@ public class EPStructureManager extends BasicManager {
 		sb.append("select element from ").append(EPStructureElement.class.getName()).append(" element")
 			.append(" where element.olatResource=:resource");
 		
-		DBQuery query = dbInstance.createQuery(sb.toString());
-		query.setEntity("resource", resource);
-		
-		@SuppressWarnings("unchecked")
-		List<PortfolioStructure> resources = query.list();
+		List<PortfolioStructure> resources = dbInstance.getCurrentEntityManager()
+				.createQuery(sb.toString(), PortfolioStructure.class)
+				.setParameter("resource", resource)
+				.getResultList();
 		// if not found, it is an empty list
-		if (resources.isEmpty()) return null;
-		return resources.get(0);
+		return resources.isEmpty() ? null : resources.get(0);
 	}
 	
 	/**
diff --git a/src/main/java/org/olat/repository/ui/author/RepositoryEditDescriptionController.java b/src/main/java/org/olat/repository/ui/author/RepositoryEditDescriptionController.java
index ae47e9f5e295c53e4949040642f0483a9c265c00..da8d79259edd8197313092589cba3ba8de1be9fa 100644
--- a/src/main/java/org/olat/repository/ui/author/RepositoryEditDescriptionController.java
+++ b/src/main/java/org/olat/repository/ui/author/RepositoryEditDescriptionController.java
@@ -391,13 +391,17 @@ public class RepositoryEditDescriptionController extends FormBasicController {
 	
 	private boolean validateTextElement(TextElement el, int maxLength) {
 		boolean ok;
-		String val = el.getValue();
-		el.clearError();
-		if(val != null && val.length() > maxLength) {
-			el.setErrorKey("input.toolong", new String[]{ Integer.toString(maxLength) });
-			ok = false;
-		} else {
+		if(el == null) {
 			ok = true;
+		} else {
+			String val = el.getValue();
+			el.clearError();
+			if(val != null && val.length() > maxLength) {
+				el.setErrorKey("input.toolong", new String[]{ Integer.toString(maxLength) });
+				ok = false;
+			} else {
+				ok = true;
+			}
 		}
 		return ok;
 	}
diff --git a/src/main/java/org/olat/search/service/document/file/WordOOXMLDocument.java b/src/main/java/org/olat/search/service/document/file/WordOOXMLDocument.java
index 2883e24e82ce76abdf2de096185d7fa181687102..da0e2b1771e57dad940cf6f21ce955195cf9c88b 100644
--- a/src/main/java/org/olat/search/service/document/file/WordOOXMLDocument.java
+++ b/src/main/java/org/olat/search/service/document/file/WordOOXMLDocument.java
@@ -103,6 +103,7 @@ public class WordOOXMLDocument extends FileDocument {
 		} catch (DocumentException e) {
 			throw e;
 		} catch (Exception e) {
+			e.printStackTrace();
 			throw new DocumentException(e.getMessage());
 		} finally {
 			FileUtils.closeSafely(zip);
diff --git a/src/main/java/org/olat/search/service/document/file/utils/SlicedDocument.java b/src/main/java/org/olat/search/service/document/file/utils/SlicedDocument.java
index da4afa5dd9b0e2ad6ab242e4e058ec45c437e8b7..95fba7bc4daa9288aed9cd464bcb9a0461e0b652 100644
--- a/src/main/java/org/olat/search/service/document/file/utils/SlicedDocument.java
+++ b/src/main/java/org/olat/search/service/document/file/utils/SlicedDocument.java
@@ -41,7 +41,7 @@ public class SlicedDocument {
 
 	public void setHeader(int index, StringBuilder doc) {
 		ensureSize(headers, index);
-		documents.set(index, doc);
+		headers.set(index, doc);
 		size += doc.length();
 	}
 	
diff --git a/src/main/java/org/olat/search/service/indexer/repository/course/CPCourseNodeIndexer.java b/src/main/java/org/olat/search/service/indexer/repository/course/CPCourseNodeIndexer.java
index 1611af8e2797cf4f6afccdd894e333bdb5fa8128..b6740ac4f5a66a28c3ad3b28a81ca8fa1e075b28 100644
--- a/src/main/java/org/olat/search/service/indexer/repository/course/CPCourseNodeIndexer.java
+++ b/src/main/java/org/olat/search/service/indexer/repository/course/CPCourseNodeIndexer.java
@@ -28,7 +28,6 @@ package org.olat.search.service.indexer.repository.course;
 import java.io.File;
 import java.io.IOException;
 
-import org.olat.core.logging.AssertException;
 import org.olat.core.util.vfs.LocalFolderImpl;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.course.ICourse;
@@ -53,24 +52,26 @@ public class CPCourseNodeIndexer extends FolderIndexer implements CourseNodeInde
 
 	private final static String SUPPORTED_TYPE_NAME = "org.olat.course.nodes.CPCourseNode";
 	
-	public void doIndex(SearchResourceContext repositoryResourceContext, ICourse course, CourseNode courseNode, OlatFullIndexer indexWriter) throws IOException,InterruptedException  {
-		if (isLogDebugEnabled()) logDebug("Index Content Package...");
-
-    SearchResourceContext courseNodeResourceContext = new SearchResourceContext(repositoryResourceContext);
-    courseNodeResourceContext.setBusinessControlFor(courseNode);
-    courseNodeResourceContext.setDocumentType(TYPE);
-    courseNodeResourceContext.setTitle(courseNode.getShortTitle());
-    courseNodeResourceContext.setDescription(courseNode.getLongTitle());
+	@Override
+	public void doIndex(SearchResourceContext repositoryResourceContext, ICourse course, CourseNode courseNode, OlatFullIndexer indexWriter)
+	throws IOException,InterruptedException  {
+	    RepositoryEntry re = CPEditController.getCPReference(courseNode.getModuleConfiguration(), false);
+	    if(re != null) {
+	    	SearchResourceContext courseNodeResourceContext = new SearchResourceContext(repositoryResourceContext);
+	    	courseNodeResourceContext.setBusinessControlFor(courseNode);
+	    	courseNodeResourceContext.setDocumentType(TYPE);
+	    	courseNodeResourceContext.setTitle(courseNode.getShortTitle());
+	    	courseNodeResourceContext.setDescription(courseNode.getLongTitle());
     
-    RepositoryEntry re = CPEditController.getCPReference(courseNode.getModuleConfiguration(), true);
-		if (re == null) throw new AssertException("configurationkey 'CONFIG_KEY_REPOSITORY_SOFTKEY' of BB CP was missing");
-    File cpRoot = FileResourceManager.getInstance().unzipFileResource(re.getOlatResource());
-		if (cpRoot == null) throw new AssertException("file of repository entry " + re.getKey() + "was missing");
-
-    VFSContainer rootContainer = new LocalFolderImpl(cpRoot);
-    doIndexVFSContainer(courseNodeResourceContext,rootContainer,indexWriter,"", FolderIndexerAccess.FULL_ACCESS);
+	    	File cpRoot = FileResourceManager.getInstance().unzipFileResource(re.getOlatResource());
+	    	if(cpRoot != null) {
+	    		VFSContainer rootContainer = new LocalFolderImpl(cpRoot);
+	    		doIndexVFSContainer(courseNodeResourceContext,rootContainer,indexWriter,"", FolderIndexerAccess.FULL_ACCESS);
+	    	}
+	    }
 	}
 
+	@Override
 	public String getSupportedTypeName() {
 		return SUPPORTED_TYPE_NAME;
 	}
diff --git a/src/main/java/org/olat/search/service/indexer/repository/course/ScormCourseNodeIndexer.java b/src/main/java/org/olat/search/service/indexer/repository/course/ScormCourseNodeIndexer.java
index b09630a927b758b46ec0a3182ad89305a481d8ff..a6878989c3ac391eded308487ad1285382748f1d 100644
--- a/src/main/java/org/olat/search/service/indexer/repository/course/ScormCourseNodeIndexer.java
+++ b/src/main/java/org/olat/search/service/indexer/repository/course/ScormCourseNodeIndexer.java
@@ -24,7 +24,6 @@ import java.io.IOException;
 
 import org.olat.course.ICourse;
 import org.olat.course.nodes.CourseNode;
-import org.olat.course.nodes.ScormCourseNode;
 import org.olat.fileresource.FileResourceManager;
 import org.olat.repository.RepositoryEntry;
 import org.olat.resource.OLATResource;
@@ -49,18 +48,19 @@ public class ScormCourseNodeIndexer extends ScormRepositoryIndexer implements Co
 	public void doIndex(SearchResourceContext repositoryResourceContext, ICourse course, CourseNode courseNode, OlatFullIndexer indexWriter)
 			throws IOException, InterruptedException {
 
-    SearchResourceContext courseNodeResourceContext = new SearchResourceContext(repositoryResourceContext);
-    courseNodeResourceContext.setBusinessControlFor(courseNode);
-    courseNodeResourceContext.setDocumentType(NODE_TYPE);
-    courseNodeResourceContext.setTitle(courseNode.getShortTitle());
-    courseNodeResourceContext.setDescription(courseNode.getLongTitle());
-		
-		ScormCourseNode scormNode = (ScormCourseNode)courseNode;
-		RepositoryEntry repoEntry = scormNode.getReferencedRepositoryEntry();
-		OLATResource ores = repoEntry.getOlatResource();
-		File cpRoot = FileResourceManager.getInstance().unzipFileResource(ores);
-		
-		doIndex(courseNodeResourceContext, indexWriter, cpRoot);
+		RepositoryEntry repoEntry = courseNode.getReferencedRepositoryEntry();
+		if(repoEntry != null) {
+			SearchResourceContext courseNodeResourceContext = new SearchResourceContext(repositoryResourceContext);
+			courseNodeResourceContext.setBusinessControlFor(courseNode);
+			courseNodeResourceContext.setDocumentType(NODE_TYPE);
+			courseNodeResourceContext.setTitle(courseNode.getShortTitle());
+			courseNodeResourceContext.setDescription(courseNode.getLongTitle());
+			
+			OLATResource ores = repoEntry.getOlatResource();
+			File cpRoot = FileResourceManager.getInstance().unzipFileResource(ores);
+			
+			doIndex(courseNodeResourceContext, indexWriter, cpRoot);
+		}
 	}
 
 	@Override
diff --git a/src/test/java/org/olat/portfolio/manager/EPStructureManagerTest.java b/src/test/java/org/olat/portfolio/manager/EPStructureManagerTest.java
index a9b29f4f890e1cded03feabe6af28f7d5f32f894..7120df27658011c2ecc64689a672a1bd4be34b1e 100644
--- a/src/test/java/org/olat/portfolio/manager/EPStructureManagerTest.java
+++ b/src/test/java/org/olat/portfolio/manager/EPStructureManagerTest.java
@@ -451,6 +451,20 @@ public class EPStructureManagerTest extends OlatTestCase {
 		Assert.assertEquals(map, myCloneAlt.get(0));
 	}
 	
+	@Test
+	public void loadPortfolioStructure_resourceable() {
+		Identity user = JunitTestHelper.createAndPersistIdentityAsRndUser("EP-res-tmp-");
+		//a template
+		PortfolioStructureMap template = epStructureManager.createPortfolioMapTemplate(user, "resourced-el", "resource-element");
+		epStructureManager.savePortfolioStructure(template);
+		dbInstance.commitAndCloseSession();
+		
+		OLATResource resource = template.getOlatResource();
+		PortfolioStructure structure = epStructureManager.loadPortfolioStructure(resource);
+		Assert.assertNotNull(structure);
+		Assert.assertEquals(template, structure);
+	}
+	
 	@Test
 	public void testCountStructureElementsFromOthers() {
 		Identity user = JunitTestHelper.createAndPersistIdentityAsRndUser("EP-tmp-");
@@ -464,8 +478,6 @@ public class EPStructureManagerTest extends OlatTestCase {
 		Assert.assertEquals(0, count);
 	}
 	
-	
-	
 	@Test
 	public void testMoveUp() {
 		//save parent and 5 children