diff --git a/src/main/java/org/olat/course/nodes/feed/FeedNodeSecurityCallback.java b/src/main/java/org/olat/course/nodes/feed/FeedNodeSecurityCallback.java
index 7f8fbc9cbee4df1fe2f0120e6778c82ac4482092..f064daf1ec71d0d46271553e44e8fe216b92f236 100644
--- a/src/main/java/org/olat/course/nodes/feed/FeedNodeSecurityCallback.java
+++ b/src/main/java/org/olat/course/nodes/feed/FeedNodeSecurityCallback.java
@@ -48,6 +48,7 @@ public class FeedNodeSecurityCallback implements FeedSecurityCallback {
 	/**
 	 * @see org.olat.modules.webFeed.FeedSecurityCallback#mayEditMetadata()
 	 */
+	@Override
 	public boolean mayEditMetadata() {
 		if (isGuestOnly) return false;
 		return ne.isCapabilityAccessible("moderator") || isOlatAdmin;
@@ -56,6 +57,7 @@ public class FeedNodeSecurityCallback implements FeedSecurityCallback {
 	/**
 	 * @see org.olat.modules.webFeed.FeedSecurityCallback#mayCreateItems()
 	 */
+	@Override
 	public boolean mayCreateItems() {
 		if (isGuestOnly) return false;
 		return ne.isCapabilityAccessible("poster") || ne.isCapabilityAccessible("moderator") || isOlatAdmin;
@@ -64,6 +66,7 @@ public class FeedNodeSecurityCallback implements FeedSecurityCallback {
 	/**
 	 * @see org.olat.modules.webFeed.FeedSecurityCallback#mayDeleteItems()
 	 */
+	@Override
 	public boolean mayDeleteItems() {
 		if (isGuestOnly) return false;
 		return ne.isCapabilityAccessible("moderator") || isOlatAdmin;
@@ -72,6 +75,7 @@ public class FeedNodeSecurityCallback implements FeedSecurityCallback {
 	/**
 	 * @see org.olat.modules.webFeed.FeedSecurityCallback#mayEditItems()
 	 */
+	@Override
 	public boolean mayEditItems() {
 		if (isGuestOnly) return false;
 		return ne.isCapabilityAccessible("moderator") || isOlatAdmin;
@@ -81,7 +85,6 @@ public class FeedNodeSecurityCallback implements FeedSecurityCallback {
 	 * @see org.olat.modules.webFeed.FeedSecurityCallback#mayViewAllDrafts()
 	 */
 	@Override
-	//fxdiff BAKS-18
 	public boolean mayViewAllDrafts() {
 		return isOwner || isOlatAdmin;
 	}
diff --git a/src/main/java/org/olat/modules/dialog/DialogElementsController.java b/src/main/java/org/olat/modules/dialog/DialogElementsController.java
index 98e9d039fd32448ccf50e30de739aa0a163cd27d..098a06eceb4588312195f5d4e0e7fb4e311f6a4c 100644
--- a/src/main/java/org/olat/modules/dialog/DialogElementsController.java
+++ b/src/main/java/org/olat/modules/dialog/DialogElementsController.java
@@ -222,7 +222,7 @@ public class DialogElementsController extends BasicController {
 			TableEvent te = (TableEvent) event;
 			String command = te.getActionId();
 			int row = te.getRowId();
-			entry = tableModel.getEntryAt(row);
+			entry = tableModel.getEntryAt(tableCtr.getSortedRow(row));
 			if (command.equals(ACTION_START_FORUM)) {
 				selectedElement = dialogElmsMgr.findDialogElement(coursePropMgr, courseNode, entry.getForumKey());
 				if(selectedElement == null){
diff --git a/src/main/java/org/olat/modules/webFeed/FeedPreviewSecurityCallback.java b/src/main/java/org/olat/modules/webFeed/FeedPreviewSecurityCallback.java
index d70092b0eab42eb6acf428fc14b28f116e13fd14..088c2d14e7b7a381893331ccf7e069b8199c1c2c 100644
--- a/src/main/java/org/olat/modules/webFeed/FeedPreviewSecurityCallback.java
+++ b/src/main/java/org/olat/modules/webFeed/FeedPreviewSecurityCallback.java
@@ -60,7 +60,6 @@ public class FeedPreviewSecurityCallback implements FeedSecurityCallback {
 	/**
 	 * @see org.olat.modules.webFeed.FeedSecurityCallback#mayViewAllDrafts()
 	 */
-	//fxdiff BAKS-18
 	@Override
 	public boolean mayViewAllDrafts() {
 		return false;
diff --git a/src/main/java/org/olat/modules/webFeed/FeedResourceSecurityCallback.java b/src/main/java/org/olat/modules/webFeed/FeedResourceSecurityCallback.java
index 4e19ba8999322c2dd3bed6f5070018c0b34e2444..22e935f953bae97546cce76bb28d06b8663b7a02 100644
--- a/src/main/java/org/olat/modules/webFeed/FeedResourceSecurityCallback.java
+++ b/src/main/java/org/olat/modules/webFeed/FeedResourceSecurityCallback.java
@@ -67,7 +67,6 @@ public class FeedResourceSecurityCallback implements FeedSecurityCallback {
 	/**
 	 * @see org.olat.modules.webFeed.FeedSecurityCallback#mayViewAllDrafts()
 	 */
-	//fxdiff BAKS-18
 	@Override
 	public boolean mayViewAllDrafts() {
 		return isAdmin || isOwner;
diff --git a/src/main/java/org/olat/modules/webFeed/RSSFeed.java b/src/main/java/org/olat/modules/webFeed/RSSFeed.java
index 9b62d55e0e2ed22a221836fbeda4bb45bb7506f0..51f1a38ccd6e8c241f35ff6fff91f58cc1b161a0 100644
--- a/src/main/java/org/olat/modules/webFeed/RSSFeed.java
+++ b/src/main/java/org/olat/modules/webFeed/RSSFeed.java
@@ -49,6 +49,8 @@ import com.sun.syndication.feed.synd.SyndImageImpl;
  */
 public class RSSFeed extends SyndFeedImpl {
 
+	private static final long serialVersionUID = 4010701266801565756L;
+
 	/**
 	 * Constructor. The identityKey is needed to generate personal URLs for the
 	 * corresponding user.
diff --git a/src/main/java/org/olat/modules/webFeed/ui/ItemController.java b/src/main/java/org/olat/modules/webFeed/ui/ItemController.java
index 38b2c1baa56cc98d42d96e032fa9b7d599ecde44..3578b30f235ccdf12be800adc0a1f8cda70271ab 100644
--- a/src/main/java/org/olat/modules/webFeed/ui/ItemController.java
+++ b/src/main/java/org/olat/modules/webFeed/ui/ItemController.java
@@ -73,9 +73,15 @@ public class ItemController extends BasicController implements Activateable2 {
 		vcItem.contextPut("helper", helper);
 		vcItem.contextPut("callback", callback);
 		if (feed.isInternal()) {
-			if (editButton != null) vcItem.put("editButton", editButton);
-			if (deleteButton != null) vcItem.put("deleteButton", deleteButton);
-			if (artefactLink != null) vcItem.put("artefactLink", artefactLink.getInitialComponent());
+			if (editButton != null) {
+				vcItem.put("editButton", editButton);
+			}
+			if (deleteButton != null) {
+				vcItem.put("deleteButton", deleteButton);
+			}
+			if (artefactLink != null) {
+				vcItem.put("artefactLink", artefactLink.getInitialComponent());
+			}
 		}
 		backLink = LinkFactory.createLinkBack(vcItem, this);
 		// Add date component
@@ -91,7 +97,7 @@ public class ItemController extends BasicController implements Activateable2 {
 			vcItem.put("commentsAndRating", commentsCtr.getInitialComponent());				
 		}
 		//
-		this.putInitialPanel(vcItem);
+		putInitialPanel(vcItem);
 		// do logging
 		ThreadLocalUserActivityLogger.log(FeedLoggingAction.FEED_ITEM_READ, getClass(), LoggingResourceable.wrap(item));
 	}
@@ -99,6 +105,7 @@ public class ItemController extends BasicController implements Activateable2 {
 	/**
 	 * @see org.olat.core.gui.control.DefaultController#doDispose()
 	 */
+	@Override
 	protected void doDispose() {
 	// nothing to do
 	}
@@ -127,5 +134,4 @@ public class ItemController extends BasicController implements Activateable2 {
 			}
 		}		
 	}
-
-}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/webFeed/ui/ItemsController.java b/src/main/java/org/olat/modules/webFeed/ui/ItemsController.java
index c25701fb2571455ed9b2133c805bd8ad7b07bf82..7ce99ded690ebf0e0cddcb3f691185a6a9a2e417 100644
--- a/src/main/java/org/olat/modules/webFeed/ui/ItemsController.java
+++ b/src/main/java/org/olat/modules/webFeed/ui/ItemsController.java
@@ -169,9 +169,9 @@ public class ItemsController extends BasicController implements Activateable2 {
 		startpageLink = LinkFactory.createLink("feed.startpage", vcItems, this);
 		startpageLink.setCustomEnabledLinkCSS("o_first_page");
 
-		if (callback.mayEditItems() || callback.mayCreateItems()) {
-			createEditButtons(ureq, feed);
-		}
+		
+		createEditButtons(ureq, feed);
+	
 		// Add item details page link
 		createItemLinks(feed);
 		// Add item user comments link and rating
@@ -218,9 +218,9 @@ public class ItemsController extends BasicController implements Activateable2 {
 	private void createEditButtons(UserRequest ureq, Feed feed) {
 		List<Item> items = feed.getCopiedListOfItems();
 
-		editButtons = new ArrayList<Link>();
-		deleteButtons = new ArrayList<Link>();
-		artefactLinks = new HashMap<Item,Controller>();
+		editButtons = new ArrayList<>();
+		deleteButtons = new ArrayList<>();
+		artefactLinks = new HashMap<>();
 		if (feed.isInternal()) {
 			addItemButton = LinkFactory.createButtonSmall("feed.add.item", vcItems, this);
 			addItemButton.setElementCssClass("o_sel_feed_item_new");
@@ -332,20 +332,32 @@ public class ItemsController extends BasicController implements Activateable2 {
 	 * the items velocity container's context.
 	 */
 	public void makeInternalAndExternalButtons() {
-		makeInternalButton = LinkFactory.createButton("feed.make.internal", vcItems, this);
-		makeExternalButton = LinkFactory.createButton("feed.make.external", vcItems, this);
+		if (callback.mayEditItems() || callback.mayCreateItems()) {
+			makeInternalButton = LinkFactory.createButton("feed.make.internal", vcItems, this);
+			makeExternalButton = LinkFactory.createButton("feed.make.external", vcItems, this);
+		}
 	}
 
 	/**
 	 * @param item
 	 */
 	private void createButtonsForItem(UserRequest ureq, Item item) {
+		boolean author = getIdentity().getKey().equals(item.getAuthorKey());
+		boolean edit = callback.mayEditItems() || author;
+		boolean delete = callback.mayDeleteItems() || author;
+
 		String guid = item.getGuid();
-		Link editButton = LinkFactory.createCustomLink("feed.edit.item." + guid, "feed.edit.item." + guid, "feed.edit.item",
-				Link.BUTTON_SMALL, vcItems, this);
+		String editId = "feed.edit.item.".concat(guid);
+		Link editButton = LinkFactory.createCustomLink(editId, editId, "feed.edit.item", Link.BUTTON_SMALL, vcItems, this);
 		editButton.setElementCssClass("o_sel_feed_item_edit");
-		Link deleteButton = LinkFactory.createCustomLink("delete." + guid, "delete." + guid, "delete", Link.BUTTON_SMALL, vcItems, this);
+		editButton.setEnabled(edit);
+		editButton.setVisible(edit);
+		
+		String deleteId = "delete.".concat(guid);
+		Link deleteButton = LinkFactory.createCustomLink(deleteId, deleteId, "delete", Link.BUTTON_SMALL, vcItems, this);
 		deleteButton.setElementCssClass("o_sel_feed_item_delete");
+		deleteButton.setEnabled(delete);
+		deleteButton.setVisible(delete);
 
 		if(feedResource.isInternal() && getIdentity().getKey() != null && getIdentity().getKey().equals(item.getAuthorKey())) {
 			String businessPath = BusinessControlFactory.getInstance().getAsString(getWindowControl().getBusinessControl());
@@ -353,7 +365,7 @@ public class ItemsController extends BasicController implements Activateable2 {
 			Controller artefactCtrl = EPUIFactory.createArtefactCollectWizzardController(ureq, getWindowControl(), feedResource, businessPath);
 			if(artefactCtrl != null) {
 				artefactLinks.put(item, artefactCtrl);
-				vcItems.put("feed.artefact.item." + guid, artefactCtrl.getInitialComponent());
+				vcItems.put("feed.artefact.item.".concat(guid), artefactCtrl.getInitialComponent());
 			}
 		}
 		
@@ -477,25 +489,19 @@ public class ItemsController extends BasicController implements Activateable2 {
 
 		} else if (source == olderItemsLink) {
 			helper.olderItems();
-			if (callback.mayEditItems() || callback.mayCreateItems()) {
-				createEditButtons(ureq, feed);
-			}
+			createEditButtons(ureq, feed);
 			createCommentsAndRatingsLinks(ureq, feed);
 			vcItems.setDirty(true);
 
 		} else if (source == newerItemsLink) {
 			helper.newerItems();
-			if (callback.mayEditItems() || callback.mayCreateItems()) {
-				createEditButtons(ureq, feed);
-			}
+			createEditButtons(ureq, feed);
 			createCommentsAndRatingsLinks(ureq, feed);
 			vcItems.setDirty(true);
 
 		} else if (source == startpageLink) {
 			helper.startpage();
-			if (callback.mayEditItems() || callback.mayCreateItems()) {
-				createEditButtons(ureq, feed);
-			}
+			createEditButtons(ureq, feed);
 			createCommentsAndRatingsLinks(ureq, feed);
 			vcItems.setDirty(true);
 
diff --git a/src/main/java/org/olat/modules/webFeed/ui/blog/_content/post.html b/src/main/java/org/olat/modules/webFeed/ui/blog/_content/post.html
index 95e565a16bd9fabfbd493e6fbd9077ba5e880a8e..8fcaa01173e5804d28111577d0fd4d6b20b492d6 100644
--- a/src/main/java/org/olat/modules/webFeed/ui/blog/_content/post.html
+++ b/src/main/java/org/olat/modules/webFeed/ui/blog/_content/post.html
@@ -35,18 +35,16 @@
 			#end
 		</div>
 	
-		#if (( $callback.mayEditItems() || ($callback.mayCreateItems() && $item.isDraft())) && $feed.isInternal())
-		#if ($r.available("editButton"))
+		#if(($r.available("editButton") && $r.visible("editButton")) || ($r.available("deleteButton") && $r.visible("deleteButton")))
 		<div class="o_button_group">
-			## special case: this item has been added by another user and thus we 
-			## don't yet have links for this item. But we can still display the content
-			$r.render("editButton")
-			#if ($callback.mayDeleteItems() || ($callback.mayCreateItems() && $item.isDraft()))
+			#if ($r.available("editButton") && $r.visible("editButton"))
+				$r.render("editButton")
+			#end
+			#if ($r.available("deleteButton") && $r.visible("deleteButton"))
 				$r.render("deleteButton")
 			#end
 		</div>
-		#end
-		#end			
+		#end		
 	</div>
 	
 	<div class="o_block_footer">
diff --git a/src/main/java/org/olat/modules/webFeed/ui/blog/_content/posts.html b/src/main/java/org/olat/modules/webFeed/ui/blog/_content/posts.html
index c3972bae7977313eaa5993646e5c8c35fc2b52cb..d52aa4e5bbf5106d90b11e71d5027cdd31a9bb7d 100644
--- a/src/main/java/org/olat/modules/webFeed/ui/blog/_content/posts.html
+++ b/src/main/java/org/olat/modules/webFeed/ui/blog/_content/posts.html
@@ -79,15 +79,13 @@
 				</div>
 			</div>
 				
-			#if (( $callback.mayEditItems() || ($callback.mayCreateItems() && $post.isDraft())) && $feed.isInternal())
+			#if($feed.isInternal())
 			<div class="o_button_group">
-				#if ($r.available("feed.edit.item.$post.getGuid()"))
-					## special case: this item has been added by another user and thus we 
-					## don't yet have links for this item. But we can still display the content
+				#if ($r.available("feed.edit.item.$post.getGuid()") && $r.visible("feed.edit.item.$post.getGuid()"))
 					$r.render("feed.edit.item.$post.getGuid()")
-					#if ($callback.mayDeleteItems() || ($callback.mayCreateItems() && $post.isDraft()))
-						$r.render("delete.$post.getGuid()")
-					#end
+				#end
+				#if ($r.available("delete.$post.getGuid()") && $r.visible("delete.$post.getGuid()"))
+					$r.render("delete.$post.getGuid()")
 				#end
 			</div>
 			#end
diff --git a/src/main/java/org/olat/modules/wiki/gui/components/wikiToHtml/WikiMarkupRenderer.java b/src/main/java/org/olat/modules/wiki/gui/components/wikiToHtml/WikiMarkupRenderer.java
index 85d1d0cee066ed9774691f03584e75ed59912d6e..2db789b8f2d47a58bc35ea8661a31a1a7099407e 100644
--- a/src/main/java/org/olat/modules/wiki/gui/components/wikiToHtml/WikiMarkupRenderer.java
+++ b/src/main/java/org/olat/modules/wiki/gui/components/wikiToHtml/WikiMarkupRenderer.java
@@ -93,7 +93,7 @@ public class WikiMarkupRenderer extends DefaultComponentRenderer {
 			uri = URLDecoder.decode(uri, "utf-8");
 			input.setVirtualWiki(uri.substring(1, uri.length()-1));
 			if (iframePostEnabled) {
-				String targetUrl = " onclick='o_XHREvent(jQuery(this).attr(\"href\"),false,true); return false;'";
+				String targetUrl = " onclick=\"o_XHREvent(jQuery(this).attr('href'),false,true); return false;\"";
 				input.setURLTarget(targetUrl);
 			}
 			sb.append("<div style=\"min-height:"+ wikiComp.getMinHeight() +"px\" id=\"");
diff --git a/src/main/java/org/olat/search/EmptySearchResults.java b/src/main/java/org/olat/search/EmptySearchResults.java
index c67bf7ad5647b2a677b004c1171c61e94c1572a6..b3ddce3f06ad8345a2562ec4ab809cde16ee9896 100644
--- a/src/main/java/org/olat/search/EmptySearchResults.java
+++ b/src/main/java/org/olat/search/EmptySearchResults.java
@@ -47,8 +47,8 @@ public class EmptySearchResults implements SearchResults {
 	}
 	
 	@Override
-	public String getLength() {
-		return "0";
+	public int size() {
+		return 0;
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/search/SearchResults.java b/src/main/java/org/olat/search/SearchResults.java
index 5d4d1a18a9c33108397a7fd91d478eafeb03284d..9b6e37ebad4a69e9d56e59069f5a02e4d2fbb59f 100644
--- a/src/main/java/org/olat/search/SearchResults.java
+++ b/src/main/java/org/olat/search/SearchResults.java
@@ -36,7 +36,7 @@ import org.olat.search.model.ResultDocument;
 public interface SearchResults extends Serializable {
 	public static final EmptySearchResults EMPTY_SEARCH_RESULTS = new EmptySearchResults();
 	
-	public String getLength();
+	public int size();
 	
 	public List<ResultDocument> getList();
 	
diff --git a/src/main/java/org/olat/search/service/searcher/JmsSearchProvider.java b/src/main/java/org/olat/search/service/searcher/JmsSearchProvider.java
index b22c4d7d27fc579bfc5419a7a96f90915a863457..926b9de6c6d3e8ee5fedb2f79547f2832eb59bb2 100644
--- a/src/main/java/org/olat/search/service/searcher/JmsSearchProvider.java
+++ b/src/main/java/org/olat/search/service/searcher/JmsSearchProvider.java
@@ -236,7 +236,7 @@ public class JmsSearchProvider implements MessageListener {
 			SearchResults searchResults = this.doSearch(searchRequest.getQueryString(), searchRequest.getCondQueries(), identity, searchRequest.getRoles(),
 					searchRequest.getFirstResult(), searchRequest.getMaxResults(), searchRequest.isDoHighlighting());
 			if (log_.isDebug()) {
-				log_.debug("searchResults: " + searchResults.getLength());
+				log_.debug("searchResults: " + searchResults.size());
 			}
 			if (searchResults != null) {
 				session = acquireSession();
diff --git a/src/main/java/org/olat/search/service/searcher/SearchResultsImpl.java b/src/main/java/org/olat/search/service/searcher/SearchResultsImpl.java
index e29e51fae32e4c0b62f55722915640735bef4d32..f2e5c23fa2dff914446d957f1ff09806f56faa1f 100644
--- a/src/main/java/org/olat/search/service/searcher/SearchResultsImpl.java
+++ b/src/main/java/org/olat/search/service/searcher/SearchResultsImpl.java
@@ -106,13 +106,15 @@ public class SearchResultsImpl implements SearchResults {
 	 * 
 	 * @return  Length of result-list.
 	 */
-	public String getLength() {
-		return Integer.toString(resultList.size());
+	@Override
+	public int size() {
+		return resultList == null ? 0 : resultList.size();
 	}
 	
   /**
    * @return List of ResultDocument.
    */
+	@Override
 	public List<ResultDocument> getList() {
 		return resultList;
 	}
diff --git a/src/main/java/org/olat/search/ui/SearchInputController.java b/src/main/java/org/olat/search/ui/SearchInputController.java
index f068623d1fa19b66ecb4bcdaabb2383d03c2ebcf..7d6c247e6a47b2dd42c6070ab5a45bc9db3c0c24 100644
--- a/src/main/java/org/olat/search/ui/SearchInputController.java
+++ b/src/main/java/org/olat/search/ui/SearchInputController.java
@@ -478,19 +478,18 @@ public class SearchInputController extends FormBasicController implements Generi
 				searchResults = searchClient.doSearch(query, condQueries, ureq.getIdentity(), ureq.getUserSession().getRoles(), firstResult, maxReturns, true);
 				searchCache.put(getQueryCacheKey(firstResult, query, condQueries), searchResults);
 			}	
-			if ((firstResult == 0 && searchResults.getList().isEmpty())
-					&& !query.endsWith(FUZZY_SEARCH)) {
+			if (firstResult == 0 && searchResults.size() == 0 && !query.endsWith(FUZZY_SEARCH)) {
 				// result-list was empty => first try to find word via spell-checker
-	    	if (doSpellCheck) {
-	    		Set<String> didYouMeansWords = searchClient.spellCheck(searchString);
-		    	if (didYouMeansWords != null && !didYouMeansWords.isEmpty()) {
-		    		setDidYouMeanWords(didYouMeansWords);
+		    	if (doSpellCheck) {
+		    		Set<String> didYouMeansWords = searchClient.spellCheck(searchString);
+			    	if (didYouMeansWords != null && !didYouMeansWords.isEmpty()) {
+			    		setDidYouMeanWords(didYouMeansWords);
+			    	} else {
+			    		searchResults = doFuzzySearch(ureq, searchString, null, parentCtxt, docType, rsrcUrl, firstResult, maxReturns);
+			    	}
 		    	} else {
 		    		searchResults = doFuzzySearch(ureq, searchString, null, parentCtxt, docType, rsrcUrl, firstResult, maxReturns);
 		    	}
-	    	} else {
-	    		searchResults = doFuzzySearch(ureq, searchString, null, parentCtxt, docType, rsrcUrl, firstResult, maxReturns);
-	    	}
 			}
 			
 			if(firstResult == 0 && searchResults.getList().isEmpty()) {
diff --git a/src/main/webapp/static/js/openolat/wiki.js b/src/main/webapp/static/js/openolat/wiki.js
index 8abde178882ff061c278090540fafc67c69f5e87..43383f118c8a57e5d25ea903e38937a5888720f0 100644
--- a/src/main/webapp/static/js/openolat/wiki.js
+++ b/src/main/webapp/static/js/openolat/wiki.js
@@ -35,6 +35,7 @@ function changeAnchorTargets(id) {
 					var pre = href.substr(0, href.indexOf(":1/"));
 					var post = href.substr(href.indexOf(":1/")+3, href.length);
 					anchor.attr("href", pre+":0/"+post);
+					anchor.prop('onclick', null).off('click');
 				}
 			} else if (anchor.attr("class") == "edit" && anchor.attr("title").indexOf("Media:") != -1) { //media file not found
 				href = href.substr(0, href.indexOf("Edit:topic"));