diff --git a/src/main/java/org/olat/catalog/ui/CatalogController.java b/src/main/java/org/olat/catalog/ui/CatalogController.java
index 904206d8b32b1ccaf1ffa0a947a2dab3edcc4a53..fe1efd418de32ce544c366f9ab61e501793688d5 100644
--- a/src/main/java/org/olat/catalog/ui/CatalogController.java
+++ b/src/main/java/org/olat/catalog/ui/CatalogController.java
@@ -745,13 +745,12 @@ public class CatalogController extends BasicController implements Activateable2
 			}
 		}
 		else if (source == repositoryEditDescriptionController) {
-			if (event == Event.CHANGED_EVENT) {
+			if (event == Event.CHANGED_EVENT || event == Event.DONE_EVENT) {
 				linkMarkedToBeEdited.setRepositoryEntry(repositoryEditDescriptionController.getRepositoryEntry());
 				updateContent(ureq, currentCatalogEntry, currentCatalogEntryLevel);
 				cm.updateReferencedRepositoryEntry(repositoryEditDescriptionController.getRepositoryEntry());
-			} else if (event == Event.CANCELLED_EVENT) {
-				cmc.deactivate();
 			}
+			cmc.deactivate();
 		} else if (source == addEntryForm) {
 			// remove modal dialog
 			cmc.deactivate();
diff --git a/src/main/java/org/olat/core/gui/components/image/ImageFormItem.java b/src/main/java/org/olat/core/gui/components/image/ImageFormItem.java
new file mode 100644
index 0000000000000000000000000000000000000000..6824a5eca151bc4dd6ebc60b364191cfc559c28e
--- /dev/null
+++ b/src/main/java/org/olat/core/gui/components/image/ImageFormItem.java
@@ -0,0 +1,68 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.core.gui.components.image;
+
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.form.flexible.impl.FormItemImpl;
+import org.olat.core.gui.media.MediaResource;
+
+/**
+ * 
+ * Initial date: 10.05.2013<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class ImageFormItem extends FormItemImpl {
+
+	private final ImageComponent imageComponent;
+	
+	public ImageFormItem(String name) {
+		super(name);
+		imageComponent = new ImageComponent(name + "-cmp");
+	}
+
+	@Override
+	protected ImageComponent getFormItemComponent() {
+		return imageComponent;
+	}
+	
+	public void setMediaResource(MediaResource mediaResource) {
+		imageComponent.setMediaResource(mediaResource);
+	}
+	
+	public void setMaxWithAndHeightToFitWithin(int maxWidth, int maxHeight) {
+		imageComponent.setMaxWithAndHeightToFitWithin(maxWidth, maxHeight);
+	}
+
+	@Override
+	protected void rootFormAvailable() {
+		//
+	}
+
+	@Override
+	public void evalFormRequest(UserRequest ureq) {
+		//
+	}
+
+	@Override
+	public void reset() {
+		//
+	}
+}
diff --git a/src/main/java/org/olat/core/gui/components/table/DefaultColumnDescriptor.java b/src/main/java/org/olat/core/gui/components/table/DefaultColumnDescriptor.java
index ebd0744b91ffc567476de5b5f71e5339d73830ff..94c52b6eab73c255665ec5983281c7c689d848f2 100644
--- a/src/main/java/org/olat/core/gui/components/table/DefaultColumnDescriptor.java
+++ b/src/main/java/org/olat/core/gui/components/table/DefaultColumnDescriptor.java
@@ -166,16 +166,27 @@ public class DefaultColumnDescriptor implements ColumnDescriptor {
 	}
 	
 	protected int compareString(final String a, final String b) {
-		return collator.compare(a, b);
+		if (a == null || b == null) {
+			return compareNullObjects(a, b);
+		}
+		return collator == null ? a.compareTo(b) : collator.compare(a, b);
 	}
 
 	protected int compareBooleans(final Boolean a, final Boolean b) {
+		if (a == null || b == null) {
+			return compareNullObjects(a, b);
+		}
+		
 		boolean ba = a.booleanValue();
 		boolean bb = b.booleanValue();
 		return ba? (bb? 0: -1):(bb? 1: 0);
 	}
 	
 	protected int compareDateAndTimestamps(Date a, Date b) {
+		if (a == null || b == null) {
+			return compareNullObjects(a, b);
+		}
+		
 		if (a instanceof Timestamp) { // a timestamp (a) cannot compare a date (b), but vice versa is ok.
 			if(b instanceof Timestamp) {
 				return ((Timestamp)a).compareTo((Timestamp)b);
diff --git a/src/main/java/org/olat/repository/RepositoryEntryDetailsFormController.java b/src/main/java/org/olat/repository/RepositoryEntryDetailsFormController.java
deleted file mode 100644
index 369ca584dc54ad7926962f0a497d78e7ae5f6a61..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/repository/RepositoryEntryDetailsFormController.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/**
- * <a href="http://www.openolat.org">
- * OpenOLAT - Online Learning and Training</a><br>
- * <p>
- * Licensed under the Apache License, Version 2.0 (the "License"); <br>
- * you may not use this file except in compliance with the License.<br>
- * You may obtain a copy of the License at the
- * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
- * <p>
- * Unless required by applicable law or agreed to in writing,<br>
- * software distributed under the License is distributed on an "AS IS" BASIS, <br>
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
- * See the License for the specific language governing permissions and <br>
- * limitations under the License.
- * <p>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.repository;
-
-import org.olat.ControllerFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.elements.RichTextElement;
-import org.olat.core.gui.components.form.flexible.elements.TextElement;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.Event;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.util.StringHelper;
-import org.olat.resource.OLATResource;
-
-/**
- * Description:<br>
- * This form controller allows users to edit the repository details and upload
- * an image
- * 
- * 
- * <P>
- * Initial Date: 16.07.2009 <br>
- * 
- * @author gnaegi
- */
-public class RepositoryEntryDetailsFormController extends FormBasicController {
-
-	private final boolean isSubWorkflow;
-	private RepositoryEntry entry;
-
-	private TextElement displayName;
-	private RichTextElement description;
-
-	public RepositoryEntryDetailsFormController(UserRequest ureq, WindowControl wControl, RepositoryEntry entry, boolean isSubWorkflow) {
-		super(ureq, wControl);
-		this.entry = entry;
-		this.isSubWorkflow = isSubWorkflow;
-		initForm(ureq);
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#initForm(org.olat.core.gui.components.form.flexible.FormItemContainer,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		setFormTitle("details.entryinfoheader");
-		setFormContextHelp("org.olat.repository", "rep-meta-desc.html", "help.hover.rep.detail");
-		// Add static fields
-		uifactory.addStaticTextElement("cif.id", entry.getResourceableId() == null ? "-" : entry.getResourceableId().toString(), formLayout);
-		uifactory.addStaticTextElement("cif.initialAuthor", entry.getInitialAuthor() == null ? "-" : entry.getInitialAuthor().toString(), formLayout);
-		// Add resource type
-		String typeName = null;
-		OLATResource res = entry.getOlatResource();
-		if (res != null) typeName = res.getResourceableTypeName();
-		StringBuilder typeDisplayText = new StringBuilder(100);
-		if (typeName != null) { // add image and typename code
-			RepositoryEntryIconRenderer reir = new RepositoryEntryIconRenderer(ureq.getLocale());
-			typeDisplayText.append("<span class=\"b_with_small_icon_left ");
-			typeDisplayText.append(reir.getIconCssClass(entry));
-			typeDisplayText.append("\">");
-			String tName = ControllerFactory.translateResourceableTypeName(typeName, ureq.getLocale());
-			typeDisplayText.append(tName);
-			typeDisplayText.append("</span>");
-		} else {
-			typeDisplayText.append(translate("cif.type.na"));
-		}
-		uifactory.addStaticExampleText("cif.type", typeDisplayText.toString(), formLayout);
-		//
-		uifactory.addSpacerElement("spacer1", formLayout, false);
-		//
-		displayName = uifactory.addTextElement("cif.displayname", "cif.displayname", 100, entry.getDisplayname(), formLayout);
-		displayName.setDisplaySize(30);
-		displayName.setMandatory(true);
-		//
-		description = uifactory.addRichTextElementForStringDataMinimalistic("cif.description", "cif.description",
-				(entry.getDescription() != null ? entry.getDescription() : " "), 10, -1, false, formLayout, ureq
-						.getUserSession(), getWindowControl());
-		description.setMandatory(true);
-		//
-		FormLayoutContainer buttonContainer = FormLayoutContainer.createButtonLayout("buttonContainer", getTranslator());
-		formLayout.add("buttonContainer", buttonContainer);
-		buttonContainer.setElementCssClass("o_sel_repo_save_details");
-
-		uifactory.addFormSubmitButton("submit", buttonContainer);
-		if (!isSubWorkflow) {
-			uifactory.addFormCancelButton("cancel", buttonContainer, ureq, getWindowControl());
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#validateFormLogic(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected boolean validateFormLogic(UserRequest ureq) {
-		// Check for empty display name
-		
-		boolean allOk = true;
-		if (!StringHelper.containsNonWhitespace(displayName.getValue())) {
-			displayName.setErrorKey("cif.error.displayname.empty", new String[] {});
-			allOk = false;
-		} else if (displayName.hasError()) {
-			allOk = false;
-		} else {
-			displayName.clearError();
-		}
-		// Check for empty description
-		if (!StringHelper.containsNonWhitespace(description.getValue())) {
-			description.setErrorKey("cif.error.description.empty", new String[] {});
-			allOk = false;
-		} else {
-			description.clearError();
-		}
-		// Ok, passed all checks
-		return allOk && super.validateFormLogic(ureq);
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-	// TODO Auto-generated method stub
-
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formOK(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void formOK(UserRequest ureq) {
-		//update model
-		entry.setDisplayname(displayName.getValue().trim());
-		entry.setDescription(description.getValue().trim());
-		// notify parent controller
-		fireEvent(ureq, Event.CHANGED_EVENT);
-	}
-	
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formCancelled(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void formCancelled(UserRequest ureq) {
-		fireEvent(ureq, Event.CANCELLED_EVENT);
-	}
-
-}
diff --git a/src/main/java/org/olat/repository/_content/addDelegate.html b/src/main/java/org/olat/repository/_content/addDelegate.html
index e7b94df25fb60b4283366a4334a22a9e6f7126ee..cf3f588fe1531b1a483c83f840003f17d441f2a4 100644
--- a/src/main/java/org/olat/repository/_content/addDelegate.html
+++ b/src/main/java/org/olat/repository/_content/addDelegate.html
@@ -1,11 +1,4 @@
-<h4>$!typeHeader</h4>
-<p>
-	$typeIntro
-</p>
-<p>
-	$r.render("subcomp")
-</p>
-<hr />
+<p>$r.render("subcomp")</p>
 <div class="b_button_group">
 	$r.render("cmd.cancel")
 </div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/repository/_content/addDetails.html b/src/main/java/org/olat/repository/_content/addDetails.html
index 2c2ce4a1d90ed1643cdc02c5617a29857cc86bf7..2d1c3e56ea9a207b6c1234bd941a11efaf6f26ec 100644
--- a/src/main/java/org/olat/repository/_content/addDetails.html
+++ b/src/main/java/org/olat/repository/_content/addDetails.html
@@ -1,4 +1,3 @@
-<h4>$!header</h4>
 $r.render("details")
 <div class="b_button_group">
 	$r.render("cmd.cancel")
diff --git a/src/main/java/org/olat/repository/_content/bgrep.html b/src/main/java/org/olat/repository/_content/bgrep.html
index a589f441b7199531d803185f34173e79397607c6..ce8899f1b6e932f9e43ebd904cb8f32daaaf6a99 100644
--- a/src/main/java/org/olat/repository/_content/bgrep.html
+++ b/src/main/java/org/olat/repository/_content/bgrep.html
@@ -1,5 +1,3 @@
 <div class="o_sel_edit_repositoryentry_popup">
-<h4>$r.translate("properties.for", $title)</h4>
-<br />
 $r.render("descTB")
 </div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/repository/_content/changedesctab1.html b/src/main/java/org/olat/repository/_content/changedesctab1.html
deleted file mode 100644
index 8c38c05467f3e69c7051545de0e55040ebbb0c20..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/repository/_content/changedesctab1.html
+++ /dev/null
@@ -1,4 +0,0 @@
-$r.render("repoEntryDetailsFormCtr")
-<fieldset>
-	$r.render("imageupload")
-</fieldset>
diff --git a/src/main/java/org/olat/repository/_content/copy.html b/src/main/java/org/olat/repository/_content/copy.html
index 97ecdd4ee48b2f4e9159d8440b2cc5833a5d5582..c7f54f67391f216990c1916ff1f133bbbd6db4ed 100644
--- a/src/main/java/org/olat/repository/_content/copy.html
+++ b/src/main/java/org/olat/repository/_content/copy.html
@@ -1,5 +1,3 @@
-<h4>$r.translate("details.copy")</h4>
-<hr />
 $r.render("details")
 <br /><br />
 <div class="b_button_group">
diff --git a/src/main/java/org/olat/repository/_content/imageupload.html b/src/main/java/org/olat/repository/_content/imageupload.html
deleted file mode 100644
index aa0bdf79e05ff5b0c24b93e822883875eba76546..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/repository/_content/imageupload.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<div class="b_form">
-	<div class="b_form_element_wrapper b_clearfix">
-		<div class="b_form_element_label"><label>$r.translate("rentry.pic"):</label></div>
-		$r.contextHelpWithWrapper("org.olat.repository", "rep-meta-picture.html", "help.hover.rep.picture")
-		<div class="b_form_element">
-			#if ($hasImage)
-				$r.render("image")	
-				<br />
-				$r.render("cmd.delete")
-				<br />
-				<br />
-			#end
-			$r.render("uploadCtr")
-		</div>
-	</div>
-</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java b/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java
index db9c165e9eae8b29c3fa32c59b332aa4f6bd58c4..5972c341622e2b8de4ab189e4e5ef739a96a4eee 100644
--- a/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java
+++ b/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java
@@ -341,7 +341,8 @@ public class ReferencableEntriesSearchController extends BasicController {
 			listenTo(addController);
 			
 			removeAsListenerAndDispose(cmc);
-			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent());
+			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent(),
+					true, addController.getTitle());
 			listenTo(cmc);
 			
 			cmc.activate();
@@ -352,7 +353,8 @@ public class ReferencableEntriesSearchController extends BasicController {
 			listenTo(addController);
 			
 			removeAsListenerAndDispose(cmc);
-			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent());
+			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent(),
+					true, addController.getTitle());
 			listenTo(cmc);
 			
 			cmc.activate();
diff --git a/src/main/java/org/olat/repository/controllers/RepositoryAddController.java b/src/main/java/org/olat/repository/controllers/RepositoryAddController.java
index 5b4656a49fd27756c572dc54c92022ab8ed08987..2ec501195888090e366649f9869e9c911bca8704 100644
--- a/src/main/java/org/olat/repository/controllers/RepositoryAddController.java
+++ b/src/main/java/org/olat/repository/controllers/RepositoryAddController.java
@@ -116,6 +116,7 @@ public class RepositoryAddController extends BasicController {
 	private Link cancelButton;
 	private Link forwardButton;
 	private String actionAddCommand, actionProcess;
+	private String typeIntro, translatedTypeName;
 	
 	/**
 	 * Controller implementing "Add Repository Entry"-workflow.
@@ -142,9 +143,7 @@ public class RepositoryAddController extends BasicController {
 		cancelButton.setElementCssClass("o_sel_repo_add_cancel");
 		forwardButton = LinkFactory.createButton("cmd.forward", repositoryadd, this);
 		forwardButton.setElementCssClass("o_sel_repo_add_forward");
-		
-		String translatedTypeName = null;
-		String typeIntro = null;
+
 		addCallback = new RepositoryAddCallback(this);
 		if (actionAddCommand.equals(ACTION_ADD_COURSE)) {
 			typeToAdd = new CourseHandler();
@@ -285,6 +284,16 @@ public class RepositoryAddController extends BasicController {
 		putInitialPanel(repositoryadd);
 	}
 	
+	public String getTitle() {
+		return typeIntro;
+		
+		/*
+		return translatedTypeName == null ?
+				translate("add.header") :
+				translate("add.header.specific", new String[] {translatedTypeName});
+				*/
+	}
+	
 	public void setUserObject(Object userObject) {
 		addCallback.setUserObject(userObject);
 	}
@@ -347,8 +356,7 @@ public class RepositoryAddController extends BasicController {
 				// clean up temporary data and abort transaction
 				cleanup();
 				fireEvent(ureq, Event.CANCELLED_EVENT);
-				return;
-			} else if (event == Event.DONE_EVENT) {
+			} else if (event == Event.DONE_EVENT || event == Event.CHANGED_EVENT) {
 				forwardButton.setEnabled(true);
 				addedEntry = detailsController.getRepositoryEntry();
 			}
diff --git a/src/main/java/org/olat/repository/controllers/RepositoryCopyController.java b/src/main/java/org/olat/repository/controllers/RepositoryCopyController.java
index d21ea17b6058c826685a56d3ded2a7e50979ac9c..d3d09385a414fec1780cd29bde152d8dd514b90a 100644
--- a/src/main/java/org/olat/repository/controllers/RepositoryCopyController.java
+++ b/src/main/java/org/olat/repository/controllers/RepositoryCopyController.java
@@ -115,8 +115,7 @@ public class RepositoryCopyController extends BasicController {
 				// abort transaction
 				cleanup();
 				fireEvent(ureq, Event.CANCELLED_EVENT);
-				return;
-			} else if (event == Event.DONE_EVENT) {
+			} else if (event == Event.DONE_EVENT || event == Event.CHANGED_EVENT) {
 				forwardButton.setEnabled(true);
 			}
 		}
diff --git a/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java b/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java
index 1d4ebee67d827d14005a858e5b7b6529e61d3a91..209ecf8c49169e0449c960b218f3120daa505420 100644
--- a/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java
+++ b/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java
@@ -610,7 +610,8 @@ public class RepositoryDetailsController extends BasicController implements Gene
 				removeAsListenerAndDispose(repositoryEditPropertiesController);
 				repositoryEditPropertiesController = new RepositoryEditPropertiesController(ureq, getWindowControl(), repositoryEntry, false);
 				listenTo(repositoryEditPropertiesController);
-				doEditSettings(ureq, repositoryEditPropertiesController);
+				String title = translate("properties.for", new String[]{ repositoryEntry.getDisplayname() });
+				doEditSettings(ureq, repositoryEditPropertiesController, title);
 				
 				List<ContextEntry> subEntries = entries.subList(1, entries.size());
 				repositoryEditPropertiesController.activate(ureq, subEntries, entry.getTransientState());
@@ -704,7 +705,7 @@ public class RepositoryDetailsController extends BasicController implements Gene
 	 * @param ureq
 	 * @param contentController
 	 */
-	private void doEditSettings(UserRequest ureq, Controller contentController) {
+	private void doEditSettings(UserRequest ureq, Controller contentController, String title) {
 	  if (!isAuthor) throw new OLATSecurityException("Trying to edit properties , but user is not author: user = " + ureq.getIdentity());
 	 
 	  Component component = contentController.getInitialComponent();
@@ -712,7 +713,7 @@ public class RepositoryDetailsController extends BasicController implements Gene
 	  if(component!=null) {
 	  	removeAsListenerAndDispose(settingsCloseableModalController);
 	    settingsCloseableModalController = new CloseableModalController(getWindowControl(), translate("close"),
-			  contentController.getInitialComponent());
+			  contentController.getInitialComponent(), true, title);
 	    listenTo(settingsCloseableModalController);
 	    
 	    settingsCloseableModalController.activate();
@@ -779,8 +780,10 @@ public class RepositoryDetailsController extends BasicController implements Gene
 		  copyController = new RepositoryCopyController(ureq, getWindowControl(), repositoryEntry);
 		  listenTo(copyController);
 		  
+		  String title = translate("details.copy");
 		  removeAsListenerAndDispose(copyCloseableModalController);
-		  copyCloseableModalController = new CloseableModalController(getWindowControl(), translate("close"), copyController.getInitialComponent());
+		  copyCloseableModalController = new CloseableModalController(getWindowControl(), translate("close"), copyController.getInitialComponent(),
+		  		true, title);
 		  listenTo(copyCloseableModalController);
 		  
 		  copyCloseableModalController.activate();				  
@@ -878,7 +881,8 @@ public class RepositoryDetailsController extends BasicController implements Gene
 				removeAsListenerAndDispose(repositoryEditDescriptionController);
 				repositoryEditDescriptionController = new RepositoryEditDescriptionController(ureq, getWindowControl(), repositoryEntry, false);
 				listenTo(repositoryEditDescriptionController);
-				doEditSettings(ureq, repositoryEditDescriptionController);
+				String title = translate("properties.for", new String[]{ repositoryEntry.getDisplayname() });
+				doEditSettings(ureq, repositoryEditDescriptionController, title);
 				return;
 			} else if (cmd.equals(ACTION_ADD_CATALOG)) { // start add to catalog workflow
 				doAddCatalog(ureq);
@@ -887,7 +891,8 @@ public class RepositoryDetailsController extends BasicController implements Gene
 				removeAsListenerAndDispose(repositoryEditPropertiesController);
 				repositoryEditPropertiesController = new RepositoryEditPropertiesController(ureq, getWindowControl(), repositoryEntry, false);
 				listenTo(repositoryEditPropertiesController);
-				doEditSettings(ureq, repositoryEditPropertiesController);
+				String title = translate("properties.for", new String[]{ repositoryEntry.getDisplayname() });
+				doEditSettings(ureq, repositoryEditPropertiesController, title);
 				return;
 			} else if (cmd.equals(ACTION_CLOSE)) {
 				doCloseDetailView(ureq);
@@ -958,7 +963,7 @@ public class RepositoryDetailsController extends BasicController implements Gene
 			removeAsListenerAndDispose(copyController);
 			copyController = null;
 		} else if (source == repositoryEditDescriptionController) {
-			if (event == Event.CHANGED_EVENT) {
+			if (event == Event.CHANGED_EVENT || event == Event.DONE_EVENT) {
 				// RepositoryEntry changed
 				// setEntry(repositoryEditDescriptionController.getRepositoryEntry(), ureq);
 				String displayname = repositoryEditDescriptionController.getRepositoryEntry().getDisplayname();
@@ -967,10 +972,10 @@ public class RepositoryDetailsController extends BasicController implements Gene
 				// do not close upon save/upload image closeableModalController.deactivate();
 				updateView(ureq);
 			} else if (event == Event.CANCELLED_EVENT) {
-				settingsCloseableModalController.deactivate();
 				removeAsListenerAndDispose(repositoryEditDescriptionController);
-				this.repositoryEntry = repositoryEditDescriptionController.getRepositoryEntry();
+				repositoryEntry = repositoryEditDescriptionController.getRepositoryEntry();
 			}
+			settingsCloseableModalController.deactivate();
 		} else if (source == repositoryEditPropertiesController) {
 			if (event == Event.CHANGED_EVENT || event.getCommand().equals("courseChanged")) {
 				// RepositoryEntry changed
diff --git a/src/main/java/org/olat/repository/controllers/RepositoryEditDescriptionController.java b/src/main/java/org/olat/repository/controllers/RepositoryEditDescriptionController.java
index cc679fe991b5de794c6dbe8e602cf09281c3e719..a7e2ee1887b4a788139afe6913bff7d3eec7203f 100644
--- a/src/main/java/org/olat/repository/controllers/RepositoryEditDescriptionController.java
+++ b/src/main/java/org/olat/repository/controllers/RepositoryEditDescriptionController.java
@@ -25,33 +25,67 @@
 
 package org.olat.repository.controllers;
 
+import java.io.File;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
+import org.olat.ControllerFactory;
+import org.olat.basesecurity.BaseSecurity;
+import org.olat.core.CoreSpringFactory;
 import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.tabbedpane.TabbedPane;
-import org.olat.core.gui.components.velocity.VelocityContainer;
+import org.olat.core.gui.components.form.flexible.FormItem;
+import org.olat.core.gui.components.form.flexible.FormItemContainer;
+import org.olat.core.gui.components.form.flexible.elements.FileElement;
+import org.olat.core.gui.components.form.flexible.elements.FormLink;
+import org.olat.core.gui.components.form.flexible.elements.RichTextElement;
+import org.olat.core.gui.components.form.flexible.elements.TextElement;
+import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
+import org.olat.core.gui.components.form.flexible.impl.FormEvent;
+import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
+import org.olat.core.gui.components.image.ImageFormItem;
+import org.olat.core.gui.components.link.Link;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.controller.BasicController;
+import org.olat.core.gui.media.NamedFileMediaResource;
+import org.olat.core.id.Identity;
+import org.olat.core.util.StringHelper;
+import org.olat.core.util.WebappHelper;
+import org.olat.core.util.vfs.LocalFolderImpl;
+import org.olat.core.util.vfs.VFSContainer;
+import org.olat.core.util.vfs.VFSLeaf;
+import org.olat.core.util.vfs.VFSMediaResource;
 import org.olat.repository.RepositoryEntry;
-import org.olat.repository.RepositoryEntryDetailsFormController;
+import org.olat.repository.RepositoryEntryIconRenderer;
 import org.olat.repository.RepositoryManager;
+import org.olat.resource.OLATResource;
+import org.olat.user.UserManager;
 
 /**
  * Description:<br>
  * 
  * @author Ingmar Kroll
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ * 
  */
-public class RepositoryEditDescriptionController extends BasicController {
-	private VelocityContainer chdesctabVC;
-	private Controller repoEntryDetailsFormCtr;
-	private Controller imageUploadController;
-	private TabbedPane tabbedPane;
+public class RepositoryEditDescriptionController extends FormBasicController {
+
+	private final boolean isSubWorkflow;
 	private RepositoryEntry repositoryEntry;
-	private VelocityContainer descVC;
 
 	private static final int picUploadlimitKB = 1024;
 
+	private FileElement fileUpload;
+	private TextElement displayName;
+	private RichTextElement description;
+	private ImageFormItem imageEl;
+	private FormLink deleteImage;
+
+	private final UserManager userManager;
+	private final BaseSecurity securityManager;
+	private final RepositoryManager repositoryManager;
+
 	/**
 	 * Create a repository add controller that adds the given resourceable.
 	 * 
@@ -60,70 +94,208 @@ public class RepositoryEditDescriptionController extends BasicController {
 	 * @param sourceEntry
 	 */
 	public RepositoryEditDescriptionController(UserRequest ureq, WindowControl wControl, RepositoryEntry entry, boolean isSubWorkflow) {
-		super(ureq, wControl);
+		super(ureq, wControl, "bgrep");
 		setBasePackage(RepositoryManager.class);
+		userManager = CoreSpringFactory.getImpl(UserManager.class);
+		securityManager = CoreSpringFactory.getImpl(BaseSecurity.class);
+		repositoryManager = CoreSpringFactory.getImpl(RepositoryManager.class);
+		this.isSubWorkflow = isSubWorkflow;
 		this.repositoryEntry = entry;
-		// wrapper velocity container with a tabbed pane
-		descVC = createVelocityContainer("bgrep");
-		descVC.contextPut("title", entry.getDisplayname());
-		tabbedPane = new TabbedPane("descTB", ureq.getLocale());
-		chdesctabVC = createVelocityContainer("changedesctab1");
-		chdesctabVC.contextPut("id", entry.getResourceableId() == null ? "-" : entry.getResourceableId().toString());
-		chdesctabVC.contextPut("initialauthor", entry.getInitialAuthor());
-		descVC.contextPut("disabledforwardreason", translate("disabledforwardreason"));
-		// repo entry details form
-		repoEntryDetailsFormCtr = new RepositoryEntryDetailsFormController(ureq, getWindowControl(), entry, isSubWorkflow);
-		listenTo(repoEntryDetailsFormCtr);
-		chdesctabVC.put("repoEntryDetailsFormCtr", repoEntryDetailsFormCtr.getInitialComponent());
-		// file upload form - should be refactored to RepositoryEntryDetailsFormController, need more time to do this
-		imageUploadController = new RepositoryEntryImageController(ureq, wControl, entry, getTranslator(), picUploadlimitKB);
-		listenTo(imageUploadController);
-		chdesctabVC.put("imageupload", imageUploadController.getInitialComponent());
-
-		tabbedPane.addTab(translate("table.header.description"), chdesctabVC);
-		tabbedPane.addListener(this);
-		descVC.put("descTB", tabbedPane);
-		putInitialPanel(descVC);
+		initForm(ureq);
 	}
 
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.Component, org.olat.core.gui.control.Event)
-	 */
-	public void event(UserRequest ureq, Component source, Event event) {
-		//
-	}
+	@Override
+	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
+		if(formLayout instanceof FormLayoutContainer && isSubWorkflow) {
+			FormLayoutContainer layoutCont = (FormLayoutContainer)formLayout;
+			layoutCont.contextPut("title", repositoryEntry.getDisplayname());
+		}
+		
+		FormLayoutContainer descCont = FormLayoutContainer.createDefaultFormLayout("desc", getTranslator());
+		descCont.setRootForm(mainForm);
+		formLayout.add("desc", descCont);
 
-	public void event(UserRequest ureq, Controller source, Event event) {
-		if (source == this.imageUploadController) {
-			if (event.equals(Event.DONE_EVENT)) fireEvent(ureq, Event.CHANGED_EVENT);
-			
-		} else if (source == this.repoEntryDetailsFormCtr) { // process details form events
-			
-			if (event.equals(Event.CANCELLED_EVENT)) {
-				fireEvent(ureq, Event.CANCELLED_EVENT);
+		String id = repositoryEntry.getResourceableId() == null ? "-" : repositoryEntry.getResourceableId().toString();
+		uifactory.addStaticTextElement("cif.id", id, descCont);
 
-			} else if (event == Event.CHANGED_EVENT) {
-				fireEvent(ureq, Event.CHANGED_EVENT);
-				fireEvent(ureq, Event.DONE_EVENT);
-				descVC.contextPut("title", getRepositoryEntry().getDisplayname());
-			}
+		String initalAuthor = repositoryEntry.getInitialAuthor() == null ? "-" : repositoryEntry.getInitialAuthor().toString();
+		Identity authorId = securityManager.findIdentityByName(initalAuthor);
+		if(authorId != null) {
+			initalAuthor = userManager.getUserDisplayName(authorId.getUser());
+		}
+		uifactory.addStaticTextElement("cif.initialAuthor", initalAuthor, descCont);
+		// Add resource type
+		String typeName = null;
+		OLATResource res = repositoryEntry.getOlatResource();
+		if (res != null) typeName = res.getResourceableTypeName();
+		StringBuilder typeDisplayText = new StringBuilder(100);
+		if (typeName != null) { // add image and typename code
+			RepositoryEntryIconRenderer reir = new RepositoryEntryIconRenderer(getLocale());
+			typeDisplayText.append("<span class=\"b_with_small_icon_left ");
+			typeDisplayText.append(reir.getIconCssClass(repositoryEntry));
+			typeDisplayText.append("\">");
+			String tName = ControllerFactory.translateResourceableTypeName(typeName, getLocale());
+			typeDisplayText.append(tName);
+			typeDisplayText.append("</span>");
+		} else {
+			typeDisplayText.append(translate("cif.type.na"));
+		}
+		uifactory.addStaticExampleText("cif.type", typeDisplayText.toString(), descCont);
+		
+		uifactory.addSpacerElement("spacer1", descCont, false);
+
+		displayName = uifactory.addTextElement("cif.displayname", "cif.displayname", 100, repositoryEntry.getDisplayname(), descCont);
+		displayName.setDisplaySize(30);
+		displayName.setMandatory(true);
+
+		String desc = (repositoryEntry.getDescription() != null ? repositoryEntry.getDescription() : " ");
+		description = uifactory.addRichTextElementForStringDataMinimalistic("cif.description", "cif.description",
+				desc, 10, -1, false, descCont, ureq.getUserSession(), getWindowControl());
+		description.setMandatory(true);
+
+		uifactory.addSpacerElement("spacer2", descCont, false);
+		
+		VFSLeaf img = repositoryManager.getImage(repositoryEntry);
+		imageEl = new ImageFormItem("imageEl");
+		imageEl.setLabel("rentry.pic", null);
+		
+		if(img == null) {
+			imageEl.setVisible(false);
+		} else {
+			imageEl.setMediaResource(new VFSMediaResource(img));
+			imageEl.setMaxWithAndHeightToFitWithin(400, 200);
+		}
+		descCont.add(imageEl);
+		
+		deleteImage = uifactory.addFormLink("delete", "cmd.delete", null, descCont, Link.BUTTON);
+		deleteImage.setVisible(img != null);
+
+		fileUpload = uifactory.addFileElement("rentry.pic", "rentry.pic", descCont);
+		if(img != null) {
+			fileUpload.setLabel(null, null);
 		}
+		fileUpload.setMaxUploadSizeKB(picUploadlimitKB, null, null);
+		fileUpload.addActionListener(this, FormEvent.ONCHANGE);
+		
+		Set<String> mimeTypes = new HashSet<String>();
+		mimeTypes.add("image/gif");
+		mimeTypes.add("image/jpg");
+		mimeTypes.add("image/jpeg");
+		mimeTypes.add("image/png");
+		fileUpload.limitToMimeType(mimeTypes, null, null);
 
+		FormLayoutContainer buttonContainer = FormLayoutContainer.createButtonLayout("buttonContainer", getTranslator());
+		formLayout.add("buttonContainer", buttonContainer);
+		buttonContainer.setElementCssClass("o_sel_repo_save_details");
+		uifactory.addFormSubmitButton("submit", buttonContainer);
+		if (!isSubWorkflow) {
+			uifactory.addFormCancelButton("cancel", buttonContainer, ureq, getWindowControl());
+		}
 	}
 
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
-	 */
+	@Override
 	protected void doDispose() {
 		// Controllers autodisposed by basic controller
 	}
 
+	@Override
+	protected boolean validateFormLogic(UserRequest ureq) {
+		// Check for empty display name
+		boolean allOk = true;
+		if (!StringHelper.containsNonWhitespace(displayName.getValue())) {
+			displayName.setErrorKey("cif.error.displayname.empty", new String[] {});
+			allOk = false;
+		} else if (displayName.hasError()) {
+			allOk = false;
+		} else {
+			displayName.clearError();
+		}
+		
+		// Check for empty description
+		if (!StringHelper.containsNonWhitespace(description.getValue())) {
+			description.setErrorKey("cif.error.description.empty", new String[] {});
+			allOk = false;
+		} else {
+			description.clearError();
+		}
+		
+		// Ok, passed all checks
+		return allOk && super.validateFormLogic(ureq);
+	}
+
+	@Override
+	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
+		if (source == fileUpload) {
+			if (fileUpload.isUploadSuccess()) {
+				File uploadedFile = fileUpload.getUploadFile();
+				imageEl.setMediaResource(new NamedFileMediaResource(uploadedFile, fileUpload.getName(), "", false));
+				imageEl.setMaxWithAndHeightToFitWithin(400, 200);
+				imageEl.setVisible(true);
+				imageEl.getComponent().setDirty(true);
+				deleteImage.setVisible(true);
+				fileUpload.setLabel(null, null);
+				flc.setDirty(true);
+			}
+		} else if (source == deleteImage) {
+
+			VFSLeaf img = repositoryManager.getImage(repositoryEntry);
+			
+			if(fileUpload.getUploadFile() != null) {
+				fileUpload.reset();
+				
+				if(img == null) {
+					imageEl.setVisible(false);
+					deleteImage.setVisible(false);
+					fileUpload.setLabel("rentry.pic", null);
+				} else {
+					imageEl.setMediaResource(new VFSMediaResource(img));
+					imageEl.setMaxWithAndHeightToFitWithin(400, 200);
+					imageEl.setVisible(true);
+					imageEl.setLabel("rentry.pic", null);
+					deleteImage.setVisible(true);
+					fileUpload.setLabel(null, null);
+				}
+			} else if(img != null) {
+				repositoryManager.deleteImage(repositoryEntry);
+				
+				imageEl.setVisible(false);
+				deleteImage.setVisible(false);
+				fileUpload.setLabel("rentry.pic", null);
+			}
+
+			flc.setDirty(true);
+		}
+		super.formInnerEvent(ureq, source, event);
+	}
+
+	@Override
+	protected void formOK(UserRequest ureq) {
+		File uploadedFile = fileUpload.getUploadFile();
+		if(uploadedFile != null) {
+			VFSContainer tmpHome = new LocalFolderImpl(new File(WebappHelper.getTmpDir()));
+			VFSContainer container = tmpHome.createChildContainer(UUID.randomUUID().toString());
+			VFSLeaf newFile = fileUpload.moveUploadFileTo(container);//give it it's real name and extension
+			boolean ok = repositoryManager.setImage((VFSLeaf)newFile, repositoryEntry);
+			if (!ok) {
+				showError("Failed");
+			}
+			container.delete();
+		}
+		
+		repositoryEntry.setDisplayname(displayName.getValue().trim());
+		repositoryEntry.setDescription(description.getValue().trim());
+		fireEvent(ureq, Event.CHANGED_EVENT);
+	}
+
+	@Override
+	protected void formCancelled(UserRequest ureq) {
+		fireEvent(ureq, Event.CANCELLED_EVENT);
+	}
+
 	/**
 	 * @return Returns the repositoryEntry.
 	 */
 	public RepositoryEntry getRepositoryEntry() {
 		return repositoryEntry;
 	}
-
-}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/repository/controllers/RepositoryEntryImageController.java b/src/main/java/org/olat/repository/controllers/RepositoryEntryImageController.java
deleted file mode 100644
index 5dc3630a7da408e20a9faa0a7111a05c8a3485ee..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/repository/controllers/RepositoryEntryImageController.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <p>
-* Licensed under the Apache License, Version 2.0 (the "License"); <br>
-* you may not use this file except in compliance with the License.<br>
-* You may obtain a copy of the License at
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <p>
-* Unless required by applicable law or agreed to in writing,<br>
-* software distributed under the License is distributed on an "AS IS" BASIS, <br>
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
-* See the License for the specific language governing permissions and <br>
-* limitations under the License.
-* <p>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-
-package org.olat.repository.controllers;
-
-import java.io.File;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.modules.bc.FileUploadController;
-import org.olat.core.commons.modules.bc.FolderConfig;
-import org.olat.core.commons.modules.bc.FolderEvent;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.image.ImageComponent;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.Event;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.controller.BasicController;
-import org.olat.core.gui.translator.Translator;
-import org.olat.core.util.WebappHelper;
-import org.olat.core.util.vfs.LocalFolderImpl;
-import org.olat.core.util.vfs.Quota;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.core.util.vfs.VFSItem;
-import org.olat.core.util.vfs.VFSLeaf;
-import org.olat.core.util.vfs.VFSMediaResource;
-import org.olat.repository.RepositoryEntry;
-import org.olat.repository.RepositoryManager;
-
-/**
- * <h3>Description:</h3>
- * <p>
- * The repository entry image upload controller offers a workflow to upload an
- * image for a learning resource
- * <p>
- * Events fired by this controller:
- * <ul>
- * <li>CANCELLED_EVENT</li>
- * <li>DONE_EVENT</li>
- * </ul>
- * 
- * @author Ingmar Kroll
- */
-public class RepositoryEntryImageController extends BasicController {
-	private VelocityContainer vContainer;
-	private Link deleteButton; 
-	private final FileUploadController uploadCtr;
-	private final RepositoryEntry repositoryEntry;
-
-	//private File newFile = null;
-	
-	private final RepositoryManager repositoryManager;
-
-	
-	/**
-	 * Display upload form to upload a file to the given currentPath.
-	 * @param uploadDir  
-	 * @param wControl 
-	 * @param translator
-	 * @param limitKB
-	 */
-	public RepositoryEntryImageController(UserRequest ureq, WindowControl wControl, RepositoryEntry repositoryEntry, Translator translator,
-			int limitKB) {
-		super(ureq, wControl, translator);
-		// use velocity files and translations from folder module package
-		setBasePackage(RepositoryManager.class);
-		
-		repositoryManager = CoreSpringFactory.getImpl(RepositoryManager.class);
-
-		this.repositoryEntry = repositoryEntry;
-		this.vContainer = createVelocityContainer("imageupload");
-		// Init upload controller
-		Set<String> mimeTypes = new HashSet<String>();
-		mimeTypes.add("image/gif");
-		mimeTypes.add("image/jpg");
-		mimeTypes.add("image/jpeg");
-		mimeTypes.add("image/png");
-		File uploadDir = new File(WebappHelper.getTmpDir());
-		VFSContainer uploadContainer = new LocalFolderImpl(uploadDir);
-		uploadCtr = new FileUploadController(getWindowControl(), uploadContainer, ureq, limitKB, Quota.UNLIMITED, mimeTypes, false, false, false, true);
-		uploadCtr.hideTitleAndFieldset();
-		listenTo(uploadCtr);
-		vContainer.put("uploadCtr", uploadCtr.getInitialComponent());
-		// init the delete button
-		deleteButton = LinkFactory.createButtonSmall("cmd.delete", this.vContainer, this);
-		// init the image itself
-		vContainer.contextPut("hasPortrait", Boolean.FALSE);
-		displayImage();
-		// finished
-		putInitialPanel(vContainer);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.components.Component, org.olat.core.gui.control.Event)
-	 */
-	public void event(UserRequest ureq, Component source, Event event) {
-		if (source == deleteButton){
-			repositoryManager.deleteImage(repositoryEntry);
-		}
-		displayImage();
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
-	public void event(UserRequest ureq, Controller source, Event event) {
-		if (source == uploadCtr) {
-			// catch upload event
-			if (event instanceof FolderEvent && event.getCommand().equals(FolderEvent.UPLOAD_EVENT)) {
-				FolderEvent folderEvent = (FolderEvent) event;
-				// Get file from temp folder location
-
-				VFSContainer tmpHome = new LocalFolderImpl(new File(WebappHelper.getTmpDir()));
-				VFSItem newFile = tmpHome.resolve(folderEvent.getFilename());
-				if (newFile instanceof VFSLeaf) {
-					boolean ok = repositoryManager.setImage((VFSLeaf)newFile, repositoryEntry);
-					// Cleanup original file
-					newFile.delete();
-					// And finish workflow
-					if (ok) {			
-						fireEvent(ureq, Event.DONE_EVENT);
-					} else {
-						showError("NoImage");
-					}
-				} else {
-					showError("Failed");
-				}
-			}
-			// redraw image
-			displayImage();
-		}
-	}
-
-	
-	
-	/**
-	 * Internal helper to create the image component and push it to the view
-	 */
-	private void displayImage() {
-		ImageComponent ic = getImageComponentForRepositoryEntry("image", repositoryEntry);
-		if (ic != null) {
-			// display only within 400x200 in form
-			ic.setMaxWithAndHeightToFitWithin(400, 200);
-			vContainer.put("image", ic);
-			vContainer.contextPut("hasImage",Boolean.TRUE);
-		}else{
-			vContainer.contextPut("hasImage",Boolean.FALSE);
-		}
-	}
-
-	/**
-	 * Check if the repo entry does have an images and if yes create an image
-	 * component that displays the image of this repo entry.
-	 * 
-	 * @param componentName
-	 * @param repositoryEntry
-	 * @return The image component or NULL if the repo entry does not have an
-	 *         image
-	 */
-	private ImageComponent getImageComponentForRepositoryEntry(String componentName, RepositoryEntry repositoryEntry) {
-		VFSLeaf img = repositoryManager.getImage(repositoryEntry);
-		if (img == null) {
-			return null;
-		}
-		ImageComponent imageComponent = new ImageComponent(componentName);
-		imageComponent.setMediaResource(new VFSMediaResource(img));
-		return imageComponent;
-	}
-	
-	/**
-	 * 
-	 * @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
-	 */
-	protected void doDispose() {
-		// controllers autodisposed by basic controller
-	}
-}
diff --git a/src/main/java/org/olat/repository/controllers/RepositoryMainController.java b/src/main/java/org/olat/repository/controllers/RepositoryMainController.java
index 7bd294479ba8a65d097947d15f11ec7d93a78060..3eb48d5fff4b3d926b65c183fa2d290a712d3657 100644
--- a/src/main/java/org/olat/repository/controllers/RepositoryMainController.java
+++ b/src/main/java/org/olat/repository/controllers/RepositoryMainController.java
@@ -741,7 +741,8 @@ public class RepositoryMainController extends MainLayoutBasicController implemen
 			addController = new RepositoryAddController(urequest, getWindowControl(), event.getCommand());
 			listenTo(addController);
 			removeAsListenerAndDispose(cmc);
-			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent());
+			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent(),
+					true, addController.getTitle());
 			listenTo(cmc);
 			cmc.activate();
 			return;
@@ -750,7 +751,8 @@ public class RepositoryMainController extends MainLayoutBasicController implemen
 			addController = new RepositoryAddController(urequest, getWindowControl(), RepositoryAddController.ACTION_NEW_COURSE);
 			listenTo(addController);
 			removeAsListenerAndDispose(cmc);
-			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent());
+			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent(),
+					true, addController.getTitle());
 			listenTo(cmc);
 			cmc.activate();
 			return;
@@ -759,7 +761,8 @@ public class RepositoryMainController extends MainLayoutBasicController implemen
 			addController = new RepositoryAddController(urequest, getWindowControl(), RepositoryAddController.ACTION_NEW_TEST);
 			listenTo(addController);
 			removeAsListenerAndDispose(cmc);
-			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent());
+			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent(),
+					true, addController.getTitle());
 			listenTo(cmc);
 			cmc.activate();
 			return;
@@ -768,7 +771,8 @@ public class RepositoryMainController extends MainLayoutBasicController implemen
 			addController = new RepositoryAddController(urequest, getWindowControl(), RepositoryAddController.ACTION_NEW_SURVEY);
 			listenTo(addController);
 			removeAsListenerAndDispose(cmc);
-			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent());
+			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent(),
+					true, addController.getTitle());
 			listenTo(cmc);
 			cmc.activate();
 			return;
@@ -777,7 +781,8 @@ public class RepositoryMainController extends MainLayoutBasicController implemen
 			addController = new RepositoryAddController(urequest, getWindowControl(), RepositoryAddController.ACTION_NEW_SHAREDFOLDER);
 			listenTo(addController);
 			removeAsListenerAndDispose(cmc);
-			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent());
+			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent(),
+					true, addController.getTitle());
 			listenTo(cmc);
 			cmc.activate();
 			return;
@@ -786,7 +791,8 @@ public class RepositoryMainController extends MainLayoutBasicController implemen
 			addController = new RepositoryAddController(urequest, getWindowControl(), RepositoryAddController.ACTION_NEW_WIKI);
 			listenTo(addController);
 			removeAsListenerAndDispose(cmc);
-			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent());
+			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent(),
+					true, addController.getTitle());
 			listenTo(cmc);
 			cmc.activate();
 			return;
@@ -795,7 +801,8 @@ public class RepositoryMainController extends MainLayoutBasicController implemen
 			addController = new RepositoryAddController(urequest, getWindowControl(), RepositoryAddController.ACTION_NEW_PODCAST);
 			listenTo(addController);
 			removeAsListenerAndDispose(cmc);
-			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent());
+			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent(),
+					true, addController.getTitle());
 			listenTo(cmc);
 			cmc.activate();
 			return;
@@ -804,7 +811,8 @@ public class RepositoryMainController extends MainLayoutBasicController implemen
 			addController = new RepositoryAddController(urequest, getWindowControl(), RepositoryAddController.ACTION_NEW_BLOG);
 			listenTo(addController);
 			removeAsListenerAndDispose(cmc);
-			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent());
+			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent(),
+					true, addController.getTitle());
 			listenTo(cmc);
 			cmc.activate();
 			return;
@@ -813,7 +821,8 @@ public class RepositoryMainController extends MainLayoutBasicController implemen
 			addController = new RepositoryAddController(urequest, getWindowControl(), RepositoryAddController.ACTION_NEW_GLOSSARY);
 			listenTo(addController);
 			removeAsListenerAndDispose(cmc);
-			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent());
+			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent(),
+					true, addController.getTitle());
 			listenTo(cmc);
 			cmc.activate();
 			return;
@@ -822,7 +831,8 @@ public class RepositoryMainController extends MainLayoutBasicController implemen
 			addController = new RepositoryAddController(urequest, getWindowControl(), RepositoryAddController.ACTION_NEW_PORTFOLIO);
 			listenTo(addController);
 			removeAsListenerAndDispose(cmc);
-			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent());
+			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent(),
+					true, addController.getTitle());
 			listenTo(cmc);
 			cmc.activate();
 			return;
@@ -836,7 +846,8 @@ public class RepositoryMainController extends MainLayoutBasicController implemen
 			addController = new RepositoryAddController(urequest, getWindowControl(), RepositoryAddController.ACTION_NEW_CP);
 			listenTo(addController);
 			removeAsListenerAndDispose(cmc);
-			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent());
+			cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent(),
+					true, addController.getTitle());
 			listenTo(cmc);
 			cmc.activate();
 			return;
diff --git a/src/main/java/org/olat/repository/controllers/_content/bgrep.html b/src/main/java/org/olat/repository/controllers/_content/bgrep.html
new file mode 100644
index 0000000000000000000000000000000000000000..de7835560c6cda21303cddeaa1f2ebd85995cec5
--- /dev/null
+++ b/src/main/java/org/olat/repository/controllers/_content/bgrep.html
@@ -0,0 +1,7 @@
+<div class="o_sel_edit_repositoryentry_popup">
+	#if($title)
+		<h4>$r.translate("properties.for", $title)</h4>
+	#end
+	$r.render("desc")
+	$r.render("buttonContainer")
+</div>
\ No newline at end of file