diff --git a/olat3/webapp/WEB-INF/src/org/olat/NewControllerFactory.java b/olat3/webapp/WEB-INF/src/org/olat/NewControllerFactory.java
index ab2bc4fb29b1eb2aa263c3defac6440174f77680..0118cd780f906e25257fdda32a52fa7abaa7429d 100644
--- a/olat3/webapp/WEB-INF/src/org/olat/NewControllerFactory.java
+++ b/olat3/webapp/WEB-INF/src/org/olat/NewControllerFactory.java
@@ -100,6 +100,20 @@ public class NewControllerFactory extends LogDelegator {
 		return contextEntryControllerCreators.containsKey(key);
 	}
 
+	/**
+	 * Check first context entry can be launched
+	 * a further check is mostly not possible, as it gets validated through the BC-stack while building the controller-chain
+	 * 
+	 * return true: if this will be launchable at least for the first step.
+	 */
+	public boolean validateCEWithContextControllerCreator(final UserRequest ureq, final WindowControl wControl, ContextEntry ce){
+		String firstType = ce.getOLATResourceable().getResourceableTypeName();
+		if (canLaunch(firstType)){
+			return contextEntryControllerCreators.get(firstType).validateContextEntryAndShowError(ce, ureq, wControl);
+		}
+		return false;
+	}
+
 	/**
 	 * Launch a controller in a tab or site in the given window from a user
 	 * request url
diff --git a/olat3/webapp/WEB-INF/src/org/olat/modules/fo/ForumController.java b/olat3/webapp/WEB-INF/src/org/olat/modules/fo/ForumController.java
index b10fa3189387521f605d7f90348cf840b680f800..e206c36eefdf52cecbea57664c8c80c87e44d91c 100644
--- a/olat3/webapp/WEB-INF/src/org/olat/modules/fo/ForumController.java
+++ b/olat3/webapp/WEB-INF/src/org/olat/modules/fo/ForumController.java
@@ -303,7 +303,8 @@ public class ForumController extends BasicController implements GenericEventList
 					scrollToCurrentMessage();					
 				} else {
 					// message not found, do nothing. Load normal start screen
-					logDebug("Invalid messageId=" , ores.getResourceableId().toString());
+					showError("deleteok");
+					logDebug("Invalid messageId=", ores.getResourceableId().toString());
 				}
 			} else {
 				//FIXME:chg: Should not happen, occurs when course-node are called
diff --git a/olat3/webapp/WEB-INF/src/org/olat/modules/wiki/WikiMainController.java b/olat3/webapp/WEB-INF/src/org/olat/modules/wiki/WikiMainController.java
index cb65863c51f16fbc28c25d2704eaf684dafd8b4b..423860cf4f42dd2d354e5a691ef90421005908f9 100644
--- a/olat3/webapp/WEB-INF/src/org/olat/modules/wiki/WikiMainController.java
+++ b/olat3/webapp/WEB-INF/src/org/olat/modules/wiki/WikiMainController.java
@@ -172,7 +172,10 @@ public class WikiMainController extends BasicController implements CloneableCont
 		ThreadLocalUserActivityLogger.log(LearningResourceLoggingAction.LEARNING_RESOURCE_OPEN, getClass());
 		// init the first page either startpage or an other page identified by initial page name
 		if (initialPageName != null && wiki.pageExists(WikiManager.generatePageId(initialPageName))) page = wiki.getPage(initialPageName, true);
-		else page = wiki.getPage(WikiPage.WIKI_INDEX_PAGE);
+		else {
+			page = wiki.getPage(WikiPage.WIKI_INDEX_PAGE);
+			if (initialPageName != null) showError("wiki.error.page.not.found");
+		}
 		this.pageId = page.getPageId();
 		
 		WikiPage menuPage = getWiki().getPage(WikiPage.WIKI_MENU_PAGE);
diff --git a/olat3/webapp/WEB-INF/src/org/olat/portfolio/ui/artefacts/view/EPArtefactViewController.java b/olat3/webapp/WEB-INF/src/org/olat/portfolio/ui/artefacts/view/EPArtefactViewController.java
index 2fa2a75c07e8d3c44be54c75f7cc55eaa58fa480..1c6e736ba30f44258cdc900f0f4aec7b090465b8 100644
--- a/olat3/webapp/WEB-INF/src/org/olat/portfolio/ui/artefacts/view/EPArtefactViewController.java
+++ b/olat3/webapp/WEB-INF/src/org/olat/portfolio/ui/artefacts/view/EPArtefactViewController.java
@@ -26,6 +26,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
+import org.olat.NewControllerFactory;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
@@ -211,7 +212,7 @@ public class EPArtefactViewController extends FormBasicController {
 
 		// build link to original source
 		if (StringHelper.containsNonWhitespace(artefact.getBusinessPath())) {
-			String sourceLink = createLinkToArtefactSource(artefact.getBusinessPath());
+			String sourceLink = createLinkToArtefactSource(ureq, artefact.getBusinessPath());
 			flc.contextPut("artefactSourceLink", sourceLink);			
 		}
 		
@@ -267,11 +268,12 @@ public class EPArtefactViewController extends FormBasicController {
 		return busLink;
 	}
 
-	private String createLinkToArtefactSource(String businessPath){
+	private String createLinkToArtefactSource(UserRequest ureq, String businessPath){
 		BusinessControlFactory bCF = BusinessControlFactory.getInstance(); 
 		List<ContextEntry> ceList = bCF.createCEListFromString(businessPath);
+		boolean valid = NewControllerFactory.getInstance().validateCEWithContextControllerCreator(ureq, getWindowControl(), ceList.get(0));
 		String busLink = bCF.getAsURIString(ceList, true); 
-		if (StringHelper.containsNonWhitespace(busLink)){
+		if (valid && StringHelper.containsNonWhitespace(busLink)){
 			return "<a href=\"" + busLink + "\">" + translate("artefact.open.source") + "</a>";
 		} else return translate("artefact.no.source");
 	}