diff --git a/src/main/java/org/olat/course/editor/PublishProcess.java b/src/main/java/org/olat/course/editor/PublishProcess.java
index 8ff9a2a80701b2b3fada5ef03d4cf48bbdb66432..304465fa67df69d3d9d504982e927da371c11fd1 100644
--- a/src/main/java/org/olat/course/editor/PublishProcess.java
+++ b/src/main/java/org/olat/course/editor/PublishProcess.java
@@ -63,6 +63,8 @@ import org.olat.course.ICourse;
 import org.olat.course.Structure;
 import org.olat.course.editor.PublishStepCatalog.CategoryLabel;
 import org.olat.course.nodes.CourseNode;
+import org.olat.course.nodes.CourseNodeConfiguration;
+import org.olat.course.nodes.CourseNodeFactory;
 import org.olat.course.properties.CoursePropertyManager;
 import org.olat.course.run.RunMainController;
 import org.olat.course.tree.CourseEditorTreeModel;
@@ -277,14 +279,12 @@ public class PublishProcess {
 			// there are nodes generating cylces -> error! this is not a publishable
 			// set!
 			StringBuilder sb = new StringBuilder();
-			for (Iterator<String> iter = nodesInCycle.iterator(); iter.hasNext();) {
-				String id = iter.next();
+			for (String id: nodesInCycle) {
 				String title = editorTreeModel.getCourseEditorNodeById(id).getTitle();
-				sb.append("<b>").append(title).append("</b>");
-				sb.append("(id:").append(id).append(")<br />");
+				sb.append("<b>").append(title).append("</b> ").append("(id:").append(id).append(")<br>");
 			}
-			StatusDescription sd = new StatusDescription(ValidationStatus.ERROR, "pbl.error.cycles", "pbl.error.cycles", new String[] { sb
-					.toString() }, PACKAGE);
+			StatusDescription sd = new StatusDescription(ValidationStatus.ERROR, "pbl.error.cycles", "pbl.error.cycles",
+					new String[] { sb.toString() }, PACKAGE);
 			status = new StatusDescription[] { sd };
 		} else {
 			/*
@@ -650,45 +650,38 @@ public class PublishProcess {
 	
 
 	String assemblePublishConfirmation() {
-		List<String> nodeIdsToPublish = this.originalNodeIdsToPublish;
-		
+		List<String> nodeIdsToPublish = originalNodeIdsToPublish;
 		StringBuilder msg = new StringBuilder();
 
 		OLATResourceable courseRunOres = OresHelper.createOLATResourceableInstance(RunMainController.ORES_TYPE_COURSE_RUN, repositoryEntry.getOlatResource().getResourceableId());
 		int cnt = CoordinatorManager.getInstance().getCoordinator().getEventBus().getListeningIdentityCntFor(courseRunOres) -1; // -1: Remove myself from list
-		if (cnt < 0 ) {
-			cnt = 0;// do not show any negative value
-		}
 		if (cnt > 0) {		
 			msg.append(translate("pbl.confirm.users", String.valueOf(cnt)));			
 		} else {
 			msg.append(translator.translate("pbl.confirm"));
 		}
-		msg.append("<ul>");
-		
-		if(nodeIdsToPublish == null){
-			return msg.toString();
-		}
 		
-		CourseEditorTreeModel cetm = course.getEditorTreeModel();
-		for (int i = 0; i < nodeIdsToPublish.size(); i++) {
-			msg.append("<li>");
-			String nodeId = nodeIdsToPublish.get(i);
-			CourseEditorTreeNode cetn = (CourseEditorTreeNode) cetm.getNodeById(nodeId);
-			CourseNode cn = cetm.getCourseNode(nodeId);
-			msg.append(cn.getShortTitle());
-			if (cetn.isDeleted() && !cetn.isNewnode()) {
-				//use locale of this initialized translator.
-				String onDeleteMessage = cn.informOnDelete(translator.getLocale(), course);
-				if (onDeleteMessage != null) {
-					msg.append("<br /><font color=\"red\">");
-					msg.append(onDeleteMessage);
-					msg.append("</font>");
+		if(nodeIdsToPublish != null && nodeIdsToPublish.size() > 0) {
+			msg.append("<ul class='list-unstyled'>");
+
+			CourseEditorTreeModel cetm = course.getEditorTreeModel();
+			for (int i = 0; i < nodeIdsToPublish.size(); i++) {
+				msg.append("<li>");
+				String nodeId = nodeIdsToPublish.get(i);
+				CourseEditorTreeNode cetn = (CourseEditorTreeNode) cetm.getNodeById(nodeId);
+				CourseNode cn = cetm.getCourseNode(nodeId);
+				if (cetn.isDeleted() && !cetn.isNewnode()) {
+					msg.append("<i class='o_icon o_icon_delete_item'> </i> ");
+				} else {
+					CourseNodeConfiguration nodeConfig = CourseNodeFactory.getInstance().getCourseNodeConfigurationEvenForDisabledBB(cn.getType());
+					if(nodeConfig != null) {
+						msg.append("<i class='o_icon ").append(nodeConfig.getIconCSSClass()).append("'> </i> ");
+					}
 				}
+				msg.append(cn.getShortTitle()).append("</li>");
 			}
-			msg.append("</li>");
+			msg.append("</ul>");
 		}
-		msg.append("</ul>");
 		
 		return msg.toString();
 	}
diff --git a/src/main/java/org/olat/course/editor/PublishStep00.java b/src/main/java/org/olat/course/editor/PublishStep00.java
index 7c8281a796134261cefcde48809d003f349c90db..e6d8547149010b8bfd6ab16e22e5d5a0df9213ad 100644
--- a/src/main/java/org/olat/course/editor/PublishStep00.java
+++ b/src/main/java/org/olat/course/editor/PublishStep00.java
@@ -190,7 +190,7 @@ class PublishStep00 extends BasicStep {
 					}
 				}
 				
-				List<String> asList = new ArrayList<String>(selectedKeys);
+				List<String> asList = new ArrayList<>(selectedKeys);
 				publishManager2.createPublishSetFor(asList);
 				addToRunContext("publishSetCreatedFor", selectedKeys);
 				//
@@ -211,11 +211,11 @@ class PublishStep00 extends BasicStep {
 				// assemble warnings and errors
 				String generalErrorTxt = null;
 				String errorTxt = getTranslator().translate("publish.notpossible.setincomplete");
-				String warningTxt = getTranslator().translate("publish.withwarnings");
+				String warningTxt = "";
 
-				String errors = "<ul>";
+				String errors = "<ul class='list-unstyled'>";
 				int errCnt = 0;
-				String warnings = "<ul>";
+				String warnings = "<ul class='list-unstyled'>";
 				for (int i = 0; i < sds.length; i++) {
 					StatusDescription description = sds[i];
 					String nodeId = sds[i].getDescriptionForUnit();
@@ -225,7 +225,7 @@ class PublishStep00 extends BasicStep {
 						break;
 					}
 					String nodeName = publishProcess.getCourseEditorTreeModel().getCourseNode(nodeId).getShortName();
-					String isFor = "<b>" + nodeName + "</b><br/>";
+					String isFor = "<h5>" + nodeName + "</h5>";
 					if (description.isError()) {
 						errors += "<li>" + isFor + description.getShortDescription(getLocale()) + "</li>";
 						errCnt++;
@@ -236,8 +236,8 @@ class PublishStep00 extends BasicStep {
 				warnings += "</ul>";
 				errors += "</ul>";
 				//
-				errorTxt += "<p/>" + errors;
-				warningTxt += "<p/>" + warnings;
+				errorTxt += errors;
+				warningTxt += warnings;
 				
 				if (generalErrorTxt != null) {
 					addToRunContext("STEP00.generalErrorText", generalErrorTxt);
diff --git a/src/main/java/org/olat/course/editor/PublishStep00a.java b/src/main/java/org/olat/course/editor/PublishStep00a.java
index 3e2a39d50e5e6dd415e20ac3da47bdb70c52924c..b1ec6c43c41155c220c76ca46d2af58fef16a148 100644
--- a/src/main/java/org/olat/course/editor/PublishStep00a.java
+++ b/src/main/java/org/olat/course/editor/PublishStep00a.java
@@ -27,6 +27,7 @@ package org.olat.course.editor;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
 import org.olat.core.gui.components.form.flexible.impl.Form;
+import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.generic.wizard.BasicStep;
@@ -72,7 +73,7 @@ class PublishStep00a extends BasicStep implements Step {
 	private static class PublishStep00aForm extends StepFormBasicController{
 
 		public PublishStep00aForm(UserRequest ureq, WindowControl control, Form rootForm, StepsRunContext runContext) {
-			super(ureq, control, rootForm, runContext, LAYOUT_VERTICAL, null);
+			super(ureq, control, rootForm, runContext, LAYOUT_CUSTOM, "publish_warnings");
 			initForm(ureq);
 		}
 
@@ -88,14 +89,15 @@ class PublishStep00a extends BasicStep implements Step {
 
 		@Override
 		protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-			formLayout.setElementCssClass("o_sel_publish_update");
-			
-			if(containsRunContextKey("STEP00.warningMessage")) {
-				uifactory.addStaticTextElement("warnings", null,(String)getFromRunContext("STEP00.warningMessage"), formLayout);
-			} else {
-				uifactory.addStaticTextElement("warnings", null, translate("publish.nowarnings"), formLayout);
+			if(formLayout instanceof FormLayoutContainer) {
+				FormLayoutContainer layoutCont = (FormLayoutContainer)formLayout;
+				if(containsRunContextKey("STEP00.warningMessage")) {
+					layoutCont.contextPut("hasWarnings", Boolean.TRUE);
+					layoutCont.contextPut("warnings", getFromRunContext("STEP00.warningMessage"));
+				} else {
+					layoutCont.contextPut("hasWarnings", Boolean.FALSE);
+				}
 			}
 		}
-		
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/editor/PublishStep00b.java b/src/main/java/org/olat/course/editor/PublishStep00b.java
index 7824011ae6510651a44e05ba3ec931330dda6bd0..4d069c407255159bd40440fb6bab3a5e64d809ed 100644
--- a/src/main/java/org/olat/course/editor/PublishStep00b.java
+++ b/src/main/java/org/olat/course/editor/PublishStep00b.java
@@ -27,6 +27,7 @@ package org.olat.course.editor;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
 import org.olat.core.gui.components.form.flexible.impl.Form;
+import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.generic.wizard.BasicStep;
@@ -85,7 +86,7 @@ class PublishStep00b extends BasicStep implements Step {
 	class PublishStep00bForm extends StepFormBasicController {
 
 		public PublishStep00bForm(UserRequest ureq, WindowControl control, Form rootForm, StepsRunContext runContext) {
-			super(ureq, control, rootForm, runContext, LAYOUT_VERTICAL, null);
+			super(ureq, control, rootForm, runContext, LAYOUT_CUSTOM, "publish_confirmation");
 
 			initForm(ureq);
 		}
@@ -104,7 +105,9 @@ class PublishStep00b extends BasicStep implements Step {
 		protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
 			PublishProcess pp = (PublishProcess)getFromRunContext("publishProcess");
 			String confirmMsg= pp.assemblePublishConfirmation();
-			uifactory.addStaticTextElement("message", null, confirmMsg, formLayout);//null > no label
+			if(formLayout instanceof FormLayoutContainer) {
+				((FormLayoutContainer)formLayout).contextPut("message", confirmMsg);
+			}
 		}
 	}
 
diff --git a/src/main/java/org/olat/course/editor/PublishStep01AccessForm.java b/src/main/java/org/olat/course/editor/PublishStep01AccessForm.java
index 212c7f52281157583d1a0809afd1843d8e1a0027..a8fac72896a218cad7bb2bff2b9235d3b97b73b3 100644
--- a/src/main/java/org/olat/course/editor/PublishStep01AccessForm.java
+++ b/src/main/java/org/olat/course/editor/PublishStep01AccessForm.java
@@ -293,13 +293,13 @@ public class PublishStep01AccessForm extends StepFormBasicController {
 		if(editable) {
 			List<AccessMethod> methods = acService.getAvailableMethods(getIdentity(), ureq.getUserSession().getRoles());
 			for(AccessMethod method:methods) {
-				AccessMethodHandler handler = acModule.getAccessMethodHandler(method.getType());
-				if(handler.isPaymentMethod() && !allowPaymentMethod) {
+				AccessMethodHandler methodHandler = acModule.getAccessMethodHandler(method.getType());
+				if(methodHandler.isPaymentMethod() && !allowPaymentMethod) {
 					continue;
 				}
 				
-				String title = handler.getMethodName(getLocale());
-				FormLink add = uifactory.addFormLink("create." + handler.getType(), title, null, accessLayout, Link.LINK | Link.NONTRANSLATED);
+				String title = methodHandler.getMethodName(getLocale());
+				FormLink add = uifactory.addFormLink("create." + methodHandler.getType(), title, null, accessLayout, Link.LINK | Link.NONTRANSLATED);
 				add.setUserObject(method);
 				add.setIconLeftCSS( ("o_icon " + method.getMethodCssClass() + "_icon o_icon-lg").intern());
 				addMethods.add(add);
@@ -324,8 +324,8 @@ public class PublishStep01AccessForm extends StepFormBasicController {
 	protected void loadConfigurations() {
 		List<Offer> offers = acService.findOfferByResource(resource, true, null);
 		for(Offer offer:offers) {
-			List<OfferAccess> offerAccess = acService.getOfferAccess(offer, true);
-			for(OfferAccess access:offerAccess) {
+			List<OfferAccess> offerAccessList = acService.getOfferAccess(offer, true);
+			for(OfferAccess access:offerAccessList) {
 				button_id++;
 				addConfiguration(access);
 			}
@@ -333,8 +333,8 @@ public class PublishStep01AccessForm extends StepFormBasicController {
 	}
 	
 	protected void addConfiguration(OfferAccess link) {
-		AccessMethodHandler handler = acModule.getAccessMethodHandler(link.getMethod().getType());
-		AccessInfo infos = new AccessInfo(handler.getMethodName(getLocale()), handler.isPaymentMethod(), null, link);
+		AccessMethodHandler methodHandler = acModule.getAccessMethodHandler(link.getMethod().getType());
+		AccessInfo infos = new AccessInfo(methodHandler.getMethodName(getLocale()), methodHandler.isPaymentMethod(), null, link);
 		infos.setButtonId(button_id);
 		confControllers.add(infos);
 		
@@ -600,15 +600,15 @@ public class PublishStep01AccessForm extends StepFormBasicController {
 		OfferAccess link = infos.getLink();
 		
 		removeAsListenerAndDispose(editMethodCtrl);
-		AccessMethodHandler handler = acModule.getAccessMethodHandler(link.getMethod().getType());
-		if (handler != null) {
-			editMethodCtrl = handler.editConfigurationController(ureq, getWindowControl(), link);
+		AccessMethodHandler methodHandler = acModule.getAccessMethodHandler(link.getMethod().getType());
+		if (methodHandler != null) {
+			editMethodCtrl = methodHandler.editConfigurationController(ureq, getWindowControl(), link);
 		}
 		
 		if(editMethodCtrl != null) {
 			listenTo(editMethodCtrl);
 
-			String title = handler.getMethodName(getLocale());
+			String title = methodHandler.getMethodName(getLocale());
 			cmc = new CloseableModalController(getWindowControl(), translate("close"), editMethodCtrl.getInitialComponent(), true, title);
 			cmc.activate();
 			listenTo(cmc);
@@ -620,14 +620,14 @@ public class PublishStep01AccessForm extends StepFormBasicController {
 		OfferAccess link = acService.createOfferAccess(offer, method);
 		
 		removeAsListenerAndDispose(newMethodCtrl);
-		AccessMethodHandler handler = acModule.getAccessMethodHandler(link.getMethod().getType());
-		if (handler != null) {
-			newMethodCtrl = handler.createConfigurationController(ureq, getWindowControl(), link);
+		AccessMethodHandler methodHandler = acModule.getAccessMethodHandler(link.getMethod().getType());
+		if (methodHandler != null) {
+			newMethodCtrl = methodHandler.createConfigurationController(ureq, getWindowControl(), link);
 		}
 		if(newMethodCtrl != null) {
 			listenTo(newMethodCtrl);
 
-			String title = handler.getMethodName(getLocale());
+			String title = methodHandler.getMethodName(getLocale());
 			cmc = new CloseableModalController(getWindowControl(), translate("close"), newMethodCtrl.getInitialComponent(), true, title);
 			cmc.activate();
 			listenTo(cmc);
diff --git a/src/main/java/org/olat/course/editor/_content/publish_confirmation.html b/src/main/java/org/olat/course/editor/_content/publish_confirmation.html
new file mode 100644
index 0000000000000000000000000000000000000000..cc0fe4dc3fb42060c1afb8d463da438db2545521
--- /dev/null
+++ b/src/main/java/org/olat/course/editor/_content/publish_confirmation.html
@@ -0,0 +1,5 @@
+## step PublishStepp00b
+<div class="o_sel_publish_confirmation">
+	<h4>$r.translate("publish.step.title.confirm")</h4>
+	<div class="o_info">$message</div>
+</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/editor/_content/publish_warnings.html b/src/main/java/org/olat/course/editor/_content/publish_warnings.html
new file mode 100644
index 0000000000000000000000000000000000000000..e10b92b0aa4d7e366e205c349a91983e363bcfa1
--- /dev/null
+++ b/src/main/java/org/olat/course/editor/_content/publish_warnings.html
@@ -0,0 +1,9 @@
+## step PublishStepp00a
+<div class="o_sel_publish_warnings">
+	#if($r.isTrue($hasWarnings))
+		<h4>$r.translate("publish.withwarnings")</h4>
+		<div class="o_warning">$warnings</div>
+	#else
+		<div class="o_info">$r.translate("publish.nowarnings")</div>
+	#end
+</div>
\ No newline at end of file
diff --git a/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java b/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java
index 27d9c659aaa037aada28a4e76c607cfe2fea4b39..a1df403d794fb9b7ac8bed58d783265759b158c0 100644
--- a/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java
+++ b/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java
@@ -515,7 +515,8 @@ public class CourseEditorPageFragment {
 		//back
 		By breadcrumpBackBy = By.cssSelector("#o_main_toolbar li.o_breadcrumb_back a");
 		browser.findElement(breadcrumpBackBy).click();
-		OOGraphene.waitBusy(browser);
+		OOGraphene.waitBusyAndScrollTop(browser);
+		OOGraphene.waitModalDialog(browser);
 		
 		//auto publish
 		By autoPublishBy = By.cssSelector("div.modal  a.o_sel_course_quickpublish_auto");
@@ -533,7 +534,7 @@ public class CourseEditorPageFragment {
 		WebElement publishButton = browser.findElement(publishButtonBy);
 		Assert.assertTrue(publishButton.isDisplayed());
 		publishButton.click();
-		OOGraphene.waitBusy(browser);
+		OOGraphene.waitBusyAndScrollTop(browser);
 		OOGraphene.waitElement(By.cssSelector("div.o_sel_publish_nodes"), 5, browser);
 		return new PublisherPageFragment(browser);
 	}
diff --git a/src/test/java/org/olat/selenium/page/course/PublisherPageFragment.java b/src/test/java/org/olat/selenium/page/course/PublisherPageFragment.java
index 4459a72f2547ed39ac84ee67858aa9543a5287e1..11ab1cbc56f82933530df189ab249a6a6bac0b38 100644
--- a/src/test/java/org/olat/selenium/page/course/PublisherPageFragment.java
+++ b/src/test/java/org/olat/selenium/page/course/PublisherPageFragment.java
@@ -86,7 +86,7 @@ public class PublisherPageFragment {
 	
 	public PublisherPageFragment nextCatalog() {
 		OOGraphene.nextStep(browser);
-		OOGraphene.waitElement(By.cssSelector("fieldset.o_sel_publish_update"), 5, browser);
+		OOGraphene.waitElement(By.cssSelector("div.o_sel_publish_warnings"), 5, browser);
 		return this;
 	}
 	
diff --git a/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java b/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java
index 572fe4cbf2bd746577afe22210a7900bcaf568e9..8eeb4205a18d5d1ef7c7ac499c9f36e11481b705 100644
--- a/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java
+++ b/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java
@@ -49,7 +49,6 @@ public class OOGraphene {
 	private static final long defaultTimeout = 5;//seconds
 
 	private static final By closeBlueBoxButtonBy = By.cssSelector("div.o_alert_info div.o_sel_info_message a.o_alert_close.o_sel_info_close");
-	//private static final By closeBlueBoxButtonBy = By.cssSelector("div.o_alert_info div.o_sel_info_message a.o_alert_close.o_sel_info_close i.o_icon_close");
 	private static final By closeModalDialogButtonBy = By.cssSelector("div.modal-dialog div.modal-header button.close");
 	
 	public static final By wizardNextBy = By.xpath("//div[contains(@class,'modal-footer')]//a[contains(@class,'o_wizard_button_next')]");