diff --git a/src/main/java/org/olat/core/commons/services/notifications/_spring/notificationsContext.xml b/src/main/java/org/olat/core/commons/services/notifications/_spring/notificationsContext.xml
index 3eeefcd69a1fe89539b3235b3ef5cce9d201a7ed..0faef9070fa566c574ef348867e9be6559ff7d27 100644
--- a/src/main/java/org/olat/core/commons/services/notifications/_spring/notificationsContext.xml
+++ b/src/main/java/org/olat/core/commons/services/notifications/_spring/notificationsContext.xml
@@ -8,7 +8,6 @@
 	<!-- List of notifications handlers -->
 	<bean id="org.olat.modules.fo.ForumNotificationsHandler" class="org.olat.modules.fo.ForumNotificationsHandler" />
 	<bean id="org.olat.core.commons.modules.bc.FolderNotificationsHandler" class="org.olat.core.commons.modules.bc.notifications.FolderNotificationsHandler" />
-	<bean id="org.olat.modules.dialog.FileUploadNotificationHandler" class="org.olat.modules.dialog.FileUploadNotificationHandler" />
 	<bean id="org.olat.course.nodes.ta.DropboxFileUploadNotificationHandler" class="org.olat.course.nodes.ta.DropboxFileUploadNotificationHandler" />
 	<bean id="org.olat.course.nodes.ta.ReturnboxFileUploadNotificationHandler" class="org.olat.course.nodes.ta.ReturnboxFileUploadNotificationHandler"/>
 	<bean id="org.olat.course.nodes.ta.SolutionFileUploadNotificationHandler" class="org.olat.course.nodes.ta.SolutionFileUploadNotificationHandler"/>
diff --git a/src/main/java/org/olat/core/util/vfs/version/VersionsFileManager.java b/src/main/java/org/olat/core/util/vfs/version/VersionsFileManager.java
index 56197c8f54273dbfc6bd49764f2687a6ff7f83b7..cb9c5bd90870dbd82274d574813c19be5161a46d 100644
--- a/src/main/java/org/olat/core/util/vfs/version/VersionsFileManager.java
+++ b/src/main/java/org/olat/core/util/vfs/version/VersionsFileManager.java
@@ -751,11 +751,15 @@ public class VersionsFileManager extends VersionsManager implements Initializabl
 
 	protected VFSContainer getCanonicalVersionFolder(VFSContainer container, boolean create) {
 		String relPath = getRelPath(container);
-		File fVersion = new File(getRootVersionsFile(), relPath);
-		if (fVersion.exists()) { return new LocalFolderImpl(fVersion); }
-		if (create) {
-			fVersion.mkdirs();
-			return new LocalFolderImpl(fVersion);
+		if(relPath != null) {
+			File fVersion = new File(getRootVersionsFile(), relPath);
+			if (fVersion.exists()) {
+				return new LocalFolderImpl(fVersion);
+			}
+			if (create) {
+				fVersion.mkdirs();
+				return new LocalFolderImpl(fVersion);
+			}
 		}
 		return null;
 	}
diff --git a/src/main/java/org/olat/course/nodes/DialogCourseNode.java b/src/main/java/org/olat/course/nodes/DialogCourseNode.java
index 6808044cc6291f91694701585603a8a250b5bf69..60863ee013cb66b5a2cd3899e872e7c247aa4288 100644
--- a/src/main/java/org/olat/course/nodes/DialogCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/DialogCourseNode.java
@@ -31,6 +31,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.zip.ZipOutputStream;
 
+import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl;
 import org.olat.core.commons.services.notifications.NotificationsManager;
 import org.olat.core.commons.services.notifications.SubscriptionContext;
@@ -55,27 +56,22 @@ import org.olat.course.editor.CourseEditorEnv;
 import org.olat.course.editor.NodeEditController;
 import org.olat.course.editor.StatusDescription;
 import org.olat.course.export.CourseEnvironmentMapper;
-import org.olat.course.nodes.dialog.DialogConfigForm;
-import org.olat.course.nodes.dialog.DialogCourseNodeEditController;
-import org.olat.course.nodes.dialog.DialogCourseNodeRunController;
+import org.olat.course.nodes.dialog.DialogElement;
+import org.olat.course.nodes.dialog.DialogElementsManager;
+import org.olat.course.nodes.dialog.ui.DialogConfigForm;
+import org.olat.course.nodes.dialog.ui.DialogCourseNodeEditController;
+import org.olat.course.nodes.dialog.ui.DialogCourseNodeRunController;
 import org.olat.course.run.navigation.NodeRunConstructionResult;
 import org.olat.course.run.userview.NodeEvaluation;
 import org.olat.course.run.userview.UserCourseEnvironment;
 import org.olat.modules.ModuleConfiguration;
-import org.olat.modules.dialog.DialogElement;
-import org.olat.modules.dialog.DialogElementsPropertyManager;
-import org.olat.modules.dialog.DialogPropertyElements;
 import org.olat.modules.fo.archiver.ForumArchiveManager;
 import org.olat.modules.fo.archiver.formatters.ForumFormatter;
 import org.olat.modules.fo.archiver.formatters.ForumRTFFormatter;
 import org.olat.modules.fo.archiver.formatters.ForumStreamedRTFFormatter;
-import org.olat.modules.fo.manager.ForumManager;
 import org.olat.repository.RepositoryEntry;
 
 /**
- * Description:<br>
- * TODO: guido Class Description for DialogCourseNode
- * <P>
  * Initial Date: 02.11.2005 <br>
  * 
  * @author Guido Schnider
@@ -98,8 +94,7 @@ public class DialogCourseNode extends AbstractAccessableCourseNode {
 	@Override
 	public TabbableController createEditController(UserRequest ureq, WindowControl wControl, BreadcrumbPanel stackPanel, ICourse course, UserCourseEnvironment euce) {
 		updateModuleConfigDefaults(false);
-		DialogCourseNodeEditController childTabCntrllr = new DialogCourseNodeEditController(ureq, wControl, this,
-				course, euce);
+		DialogCourseNodeEditController childTabCntrllr = new DialogCourseNodeEditController(ureq, wControl, this, course, euce);
 		CourseNode chosenNode = course.getEditorTreeModel().getCourseNode(euce.getCourseEditorEnv().getCurrentCourseNodeId());
 		return new NodeEditController(ureq, wControl, course.getEditorTreeModel(), course, chosenNode, euce, childTabCntrllr);
 	}
@@ -110,10 +105,10 @@ public class DialogCourseNode extends AbstractAccessableCourseNode {
 	 *      org.olat.course.run.userview.UserCourseEnvironment,
 	 *      org.olat.course.run.userview.NodeEvaluation, java.lang.String)
 	 */
+	@Override
 	public NodeRunConstructionResult createNodeRunConstructionResult(UserRequest ureq, WindowControl wControl,
 			UserCourseEnvironment userCourseEnv, NodeEvaluation ne, String nodecmd) {
-		//FIXME:gs:a nodecmd has now the subsubId in it -> pass to DialogCourseNodeRunController below
-		DialogCourseNodeRunController ctrl = new DialogCourseNodeRunController(ureq, userCourseEnv, wControl, this, ne);
+		DialogCourseNodeRunController ctrl = new DialogCourseNodeRunController(ureq, wControl, this, userCourseEnv, ne);
 		Controller wrappedCtrl = TitledWrapperHelper.getWrapper(ureq, wControl, ctrl, this, "o_dialog_icon");
 		return new NodeRunConstructionResult(wrappedCtrl);
 	}
@@ -203,23 +198,15 @@ public class DialogCourseNode extends AbstractAccessableCourseNode {
 	public void cleanupOnDelete(ICourse course) {
 		super.cleanupOnDelete(course);
 		
-		DialogElementsPropertyManager depm = DialogElementsPropertyManager.getInstance();
-		
-		//remove all possible forum subscriptions
-		DialogPropertyElements findDialogElements = depm.findDialogElements(course.getResourceableId(), getIdent());
-		if(findDialogElements != null){
-			List<DialogElement> dialogElments = findDialogElements.getDialogPropertyElements();
-			for (DialogElement dialogElement : dialogElments) {
-				Long forumKey = dialogElement.getForumKey();
-				SubscriptionContext subsContext = CourseModule.createSubscriptionContext(course.getCourseEnvironment(), this, forumKey.toString());
-				NotificationsManager.getInstance().delete(subsContext);
-				//also delete forum -> was archived in archiveNodeData step
-				ForumManager.getInstance().deleteForum(forumKey);
-			}
+		DialogElementsManager depm = CoreSpringFactory.getImpl(DialogElementsManager.class);
+		RepositoryEntry entry = course.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
+		List<DialogElement> dialogElements = depm.getDialogElements(entry, getIdent());
+		for (DialogElement dialogElement : dialogElements) {
+			Long forumKey = dialogElement.getForum().getKey();
+			SubscriptionContext subsContext = CourseModule.createSubscriptionContext(course.getCourseEnvironment(), this, forumKey.toString());
+			NotificationsManager.getInstance().delete(subsContext);
+			depm.deleteDialogElement(dialogElement);
 		}
-		
-		//delete property
-		depm.deleteProperty(course.getResourceableId(), this.getIdent());
 	}
 
 	/**
@@ -228,13 +215,14 @@ public class DialogCourseNode extends AbstractAccessableCourseNode {
 	 * @param exportDirectory
 	 */
 	public void doArchiveElement(DialogElement element, File exportDirectory, Locale locale) {
-		VFSContainer forumContainer = getForumContainer(element.getForumKey());
+		DialogElementsManager depm = CoreSpringFactory.getImpl(DialogElementsManager.class);
+		VFSContainer dialogContainer = depm.getDialogContainer(element);
 		//there is only one file (leave) in the top forum container 
-		VFSItem dialogFile = forumContainer.getItems(new VFSLeafFilter()).get(0);
+		VFSItem dialogFile = dialogContainer.getItems(new VFSLeafFilter()).get(0);
 		VFSContainer exportContainer = new LocalFolderImpl(exportDirectory);
 		
 		// append export timestamp to avoid overwriting previous export 
-		String exportDirName = Formatter.makeStringFilesystemSave(getShortTitle())+"_"+element.getForumKey()+"_"+Formatter.formatDatetimeFilesystemSave(new Date(System.currentTimeMillis()));
+		String exportDirName = Formatter.makeStringFilesystemSave(getShortTitle())+"_"+element.getForum().getKey()+"_"+Formatter.formatDatetimeFilesystemSave(new Date(System.currentTimeMillis()));
 		VFSContainer diaNodeElemExportContainer = exportContainer.createChildContainer(exportDirName);
 		// don't check quota
 		diaNodeElemExportContainer.setLocalSecurityCallback(new FullAccessCallback());
@@ -242,15 +230,15 @@ public class DialogCourseNode extends AbstractAccessableCourseNode {
 
 		ForumArchiveManager fam = ForumArchiveManager.getInstance();
 		ForumFormatter ff = new ForumRTFFormatter(diaNodeElemExportContainer, false, locale);
-		fam.applyFormatter(ff, element.getForumKey(), null);
+		fam.applyFormatter(ff, element.getForum().getKey(), null);
 	}
 	
 	@Override
 	public boolean archiveNodeData(Locale locale, ICourse course, ArchiveOptions options, ZipOutputStream exportStream, String charset) {
 		boolean dataFound = false;
-		List<DialogElement> list = DialogElementsPropertyManager.getInstance()
-				.findDialogElements(course.getCourseEnvironment().getCoursePropertyManager(), this)
-				.getDialogPropertyElements();
+		RepositoryEntry entry = course.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
+		List<DialogElement> list = CoreSpringFactory.getImpl(DialogElementsManager.class)
+				.getDialogElements(entry, getIdent());
 		if(list.size() > 0) {
 			for (DialogElement element:list) {
 				doArchiveElement(element, exportStream, locale);
@@ -266,19 +254,19 @@ public class DialogCourseNode extends AbstractAccessableCourseNode {
 	 * @param exportDirectory
 	 */
 	public void doArchiveElement(DialogElement element, ZipOutputStream exportStream, Locale locale) {
-		// append export timestamp to avoid overwriting previous export 
+		DialogElementsManager depm = CoreSpringFactory.getImpl(DialogElementsManager.class);
 		String exportDirName = Formatter.makeStringFilesystemSave(getShortTitle())
-				+ "_" + element.getForumKey()
-				+ "_" + Formatter.formatDatetimeFilesystemSave(new Date(System.currentTimeMillis()));
+				+ "_" + element.getForum().getKey()
+				+ "_" + Formatter.formatDatetimeFilesystemSave(new Date());
 		
-		VFSContainer forumContainer = getForumContainer(element.getForumKey());
+		VFSContainer forumContainer =  depm.getDialogContainer(element);
 		for(VFSItem item: forumContainer.getItems(new VFSLeafFilter())) {
 			ZipUtil.addToZip(item, exportDirName, exportStream);
 		}
 
 		ForumArchiveManager fam = ForumArchiveManager.getInstance();
 		ForumFormatter ff = new ForumStreamedRTFFormatter(exportStream, exportDirName, false, locale);
-		fam.applyFormatter(ff, element.getForumKey(), null);
+		fam.applyFormatter(ff, element.getForum().getKey(), null);
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/course/nodes/dialog/DialogCourseNodeEditController.java b/src/main/java/org/olat/course/nodes/dialog/DialogCourseNodeEditController.java
deleted file mode 100644
index 2e0733846096d9915cff36d429b63ec39e4c0c21..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/nodes/dialog/DialogCourseNodeEditController.java
+++ /dev/null
@@ -1,293 +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.course.nodes.dialog;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-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.commons.modules.bc.vfs.OlatRootFolderImpl;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.tabbedpane.TabbedPane;
-import org.olat.core.gui.components.table.TableController;
-import org.olat.core.gui.components.table.TableGuiConfiguration;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.ControllerEventListener;
-import org.olat.core.gui.control.Event;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.generic.tabbable.ActivateableTabbableDefaultController;
-import org.olat.core.gui.translator.Translator;
-import org.olat.core.logging.activity.CourseLoggingAction;
-import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
-import org.olat.core.util.Util;
-import org.olat.core.util.vfs.Quota;
-import org.olat.course.ICourse;
-import org.olat.course.assessment.AssessmentHelper;
-import org.olat.course.condition.Condition;
-import org.olat.course.condition.ConditionEditController;
-import org.olat.course.editor.NodeEditController;
-import org.olat.course.nodes.BCCourseNode;
-import org.olat.course.nodes.DialogCourseNode;
-import org.olat.course.run.userview.UserCourseEnvironment;
-import org.olat.course.tree.CourseEditorTreeModel;
-import org.olat.modules.dialog.DialogElement;
-import org.olat.modules.dialog.DialogElementsController;
-import org.olat.modules.dialog.DialogElementsPropertyManager;
-import org.olat.modules.dialog.DialogElementsTableModel;
-import org.olat.modules.dialog.DialogPropertyElements;
-import org.olat.modules.fo.Forum;
-import org.olat.modules.fo.manager.ForumManager;
-import org.olat.util.logging.activity.LoggingResourceable;
-
-/**
- * Description:<br>
- * controller for the tabbed pane inside the course editor for the course node 'dialog elements'
- * <P>
- * Initial Date: 02.11.2005 <br>
- * 
- * @author guido
- */
-public class DialogCourseNodeEditController extends ActivateableTabbableDefaultController implements ControllerEventListener {
-
-	private static final String PANE_TAB_DIALOGCONFIG = "pane.tab.dialogconfig";
-	private static final String PANE_TAB_ACCESSIBILITY = "pane.tab.accessibility";
-	
-	private static final String[] paneKeys = { PANE_TAB_DIALOGCONFIG, PANE_TAB_ACCESSIBILITY };
-	
-	private VelocityContainer content, accessContent;	
-	private DialogCourseNode courseNode;
-	private ConditionEditController readerCondContr, posterCondContr, moderatorCondContr;
-	private TabbedPane myTabbedPane;
-	private BCCourseNode bcNode = new BCCourseNode();
-	private ICourse course;
-	private DialogConfigForm configForumLaunch;
-	private TableController tableCtr;
-	private Translator resourceTrans;
-	private FileUploadController fileUplCtr;
-	private DialogElement recentElement;
-	private TableGuiConfiguration tableConf;
-	private Link uploadButton;
-	
-	public DialogCourseNodeEditController(UserRequest ureq, WindowControl wControl, DialogCourseNode node,
-			ICourse course, UserCourseEnvironment userCourseEnv) {
-		super(ureq,wControl);
-		//o_clusterOk by guido: save to hold reference to course inside editor
-		this.course = course;
-		this.courseNode = node;
-		
-		resourceTrans = Util.createPackageTranslator(DialogElementsTableModel.class, ureq.getLocale(), getTranslator());
-		// set name of the folder we use
-		bcNode.setShortTitle(translate("dialog.folder.name"));
-
-		// dialog specific config tab		
-		content = createVelocityContainer("edit");
-		uploadButton = LinkFactory.createButton("dialog.upload.file", content, this);
-		uploadButton.setElementCssClass("o_sel_dialog_upload");
-		
-		//configure table
-		tableConf = new TableGuiConfiguration();
-		tableConf.setResultsPerPage(10);
-		showOverviewTable(ureq);
-
-		initConfigForm(ureq);
-
-		// accessability config tab		
-		accessContent = createVelocityContainer("edit_access");
-
-		CourseEditorTreeModel editorModel = course.getEditorTreeModel();
-		// Reader precondition
-		Condition readerCondition = courseNode.getPreConditionReader();
-		// TODO:gs:a getAssessableNodes ist der dialog node assessable oder nicht?
-		readerCondContr = new ConditionEditController(ureq, getWindowControl(), userCourseEnv, readerCondition,
-				AssessmentHelper.getAssessableNodes(editorModel, courseNode));		
-		listenTo(readerCondContr);
-		accessContent.put("readerCondition", readerCondContr.getInitialComponent());
-
-		// Poster precondition
-		Condition posterCondition = courseNode.getPreConditionPoster();
-		posterCondContr = new ConditionEditController(ureq, getWindowControl(), userCourseEnv, posterCondition,
-				AssessmentHelper.getAssessableNodes(editorModel, courseNode));		
-		this.listenTo(posterCondContr);
-		accessContent.put("posterCondition", posterCondContr.getInitialComponent());
-
-		// Moderator precondition
-		Condition moderatorCondition = courseNode.getPreConditionModerator();
-		moderatorCondContr = new ConditionEditController(ureq, getWindowControl(), userCourseEnv, moderatorCondition,
-				AssessmentHelper.getAssessableNodes(editorModel, courseNode));
-		//FIXME:gs: why is firing needed here?
-		fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT);		
-		listenTo(moderatorCondContr);
-		accessContent.put("moderatorCondition", moderatorCondContr.getInitialComponent());
-	}
-
-	private void initConfigForm(UserRequest ureq) {
-		
-		removeAsListenerAndDispose(configForumLaunch);
-		configForumLaunch = new DialogConfigForm(ureq, getWindowControl(), courseNode.getModuleConfiguration());
-		listenTo(configForumLaunch);
-		
-		content.put("showForumAsPopupConfigForm", configForumLaunch.getInitialComponent());
-	}
-
-
-	/**
-	 * @see org.olat.core.gui.control.generic.tabbable.ActivateableTabbableDefaultController#getPaneKeys()
-	 */
-	public String[] getPaneKeys() {
-		return paneKeys;
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.tabbable.ActivateableTabbableDefaultController#getTabbedPane()
-	 */
-	public TabbedPane getTabbedPane() {
-		return myTabbedPane;
-	}
-
-	/**
-	 * @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)
-	 */
-	@Override
-	public void event(UserRequest ureq, Component source, Event event) {
-		if (source == uploadButton) {
-			Forum forum = ForumManager.getInstance().addAForum();
-			OlatRootFolderImpl forumContainer = DialogElementsController.getForumContainer(forum.getKey());
-			
-			removeAsListenerAndDispose(fileUplCtr);
-			fileUplCtr = new FileUploadController(getWindowControl(),forumContainer, ureq,
-					FolderConfig.getLimitULKB(), Quota.UNLIMITED, null, false);			
-			listenTo(fileUplCtr);
-			
-			recentElement = new DialogElement();
-			recentElement.setForumKey(forum.getKey());
-			recentElement.setAuthor(ureq.getIdentity().getName());
-			content.contextPut("overview", Boolean.FALSE);
-			content.put("upload", fileUplCtr.getInitialComponent());
-		}
-	}
-
-	/**
-	 * @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, Controller source, Event event) {
-		if (source == configForumLaunch) {
-			if (event == Event.CHANGED_EVENT) {
-				fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT);
-			}
-		} else if (source == readerCondContr) {
-			if (event == Event.CHANGED_EVENT) {
-				Condition cond = readerCondContr.getCondition();
-				courseNode.setPreConditionReader(cond);
-				fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT);
-			}
-		} else if (source == posterCondContr) {
-			if (event == Event.CHANGED_EVENT) {
-				Condition cond = posterCondContr.getCondition();
-				courseNode.setPreConditionPoster(cond);
-				fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT);
-			}
-		} else if (source == moderatorCondContr) {
-			if (event == Event.CHANGED_EVENT) {
-				Condition cond = moderatorCondContr.getCondition();
-				courseNode.setPreConditionModerator(cond);
-				fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT);
-			}
-		} else if (source == tableCtr) {
-			// process table events
-		} else if (source == fileUplCtr) {
-			// event.
-			if (event == Event.DONE_EVENT || event == Event.CANCELLED_EVENT) {
-				// reset recent element
-				recentElement = null;
-				showOverviewTable(ureq);
-			} else if (event.getCommand().equals(FolderEvent.UPLOAD_EVENT)) {
-
-				// new dialog element
-				DialogElement element = new DialogElement();
-				element.setAuthor(recentElement.getAuthor());
-				element.setDate(new Date());
-				final String filename = ((FolderEvent) event).getFilename();
-				element.setFilename(filename);
-				element.setForumKey(recentElement.getForumKey());
-				element.setFileSize(DialogElementsController.getFileSize(recentElement.getForumKey()));
-
-				// save property
-				DialogElementsPropertyManager.getInstance().addDialogElement(course.getCourseEnvironment().getCoursePropertyManager(), courseNode, element);
-
-				// do logging
-				ThreadLocalUserActivityLogger.log(CourseLoggingAction.DIALOG_ELEMENT_FILE_UPLOADED, getClass(),
-						LoggingResourceable.wrapUploadFile(filename));
-			}
-		}
-	}
-/**
- * update table with latest elements
- * @param ureq
- */
-	private void showOverviewTable(UserRequest ureq) {
-		
-		removeAsListenerAndDispose(tableCtr);
-		tableCtr = new TableController(tableConf, ureq, getWindowControl(), resourceTrans);
-		listenTo(tableCtr);
-		
-		DialogPropertyElements elements = DialogElementsPropertyManager.getInstance().findDialogElements(this.course.getCourseEnvironment().getCoursePropertyManager(), courseNode);
-		List<DialogElement> list = new ArrayList<>();
-		DialogElementsTableModel tableModel = new DialogElementsTableModel(getTranslator(), null, null);
-		if (elements != null) list = elements.getDialogPropertyElements();
-		tableModel.setEntries(list);
-		tableModel.addColumnDescriptors(tableCtr);
-		tableCtr.setTableDataModel(tableModel);
-		tableCtr.modelChanged();
-		tableCtr.setSortColumn(1, true);
-		content.contextPut("overview", Boolean.TRUE);
-		content.put("dialogElementsTable", tableCtr.getInitialComponent());
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
-	 */
-	protected void doDispose() {
-    //child controllers registered with listenTo() get disposed in BasicController
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.tabbable.TabbableController#addTabs(org.olat.core.gui.components.tabbedpane.TabbedPane)
-	 */
-	public void addTabs(TabbedPane tabbedPane) {
-		tabbedPane.addTab(translate(PANE_TAB_ACCESSIBILITY), accessContent);
-		tabbedPane.addTab(translate(PANE_TAB_DIALOGCONFIG), content);
-	}
-
-}
diff --git a/src/main/java/org/olat/course/nodes/dialog/DialogCourseNodeRunController.java b/src/main/java/org/olat/course/nodes/dialog/DialogCourseNodeRunController.java
deleted file mode 100644
index 7a67508b891d6cce957be153fea220f708504322..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/nodes/dialog/DialogCourseNodeRunController.java
+++ /dev/null
@@ -1,76 +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.course.nodes.dialog;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-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.course.nodes.DialogCourseNode;
-import org.olat.course.run.userview.NodeEvaluation;
-import org.olat.course.run.userview.UserCourseEnvironment;
-import org.olat.modules.dialog.DialogElementsController;
-import org.olat.util.logging.activity.LoggingResourceable;
-
-/**
- * Description:<br>
- * chief controller for the run mode of the course node 'dialog elements'
- * <P>
- * Initial Date: 02.11.2005 <br>
- * 
- * @author guido
- */
-public class DialogCourseNodeRunController extends BasicController {
-
-	public DialogCourseNodeRunController(UserRequest ureq, UserCourseEnvironment userCourseEnv, WindowControl wControl,
-			DialogCourseNode dialogCourseNode, NodeEvaluation ne) {
-		super(ureq, wControl);
-		addLoggingResourceable(LoggingResourceable.wrap(dialogCourseNode));
-
-		Controller dialogCtr = new DialogElementsController(ureq, getWindowControl(), dialogCourseNode, userCourseEnv, ne);
-		listenTo(dialogCtr);
-
-		putInitialPanel(dialogCtr.getInitialComponent());
-	}
-
-	/**
-	 * @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) {
-	// no events yet
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
-	 */
-	protected void doDispose() {
-		// child controllers disposed by basic controller
-	}
-
-}
diff --git a/src/main/java/org/olat/course/nodes/dialog/DialogElement.java b/src/main/java/org/olat/course/nodes/dialog/DialogElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..1d3f7d7d77365fe3de22bcdb916544c3970a3e47
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/dialog/DialogElement.java
@@ -0,0 +1,52 @@
+/**
+ * <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.course.nodes.dialog;
+
+import java.util.Date;
+
+import org.olat.core.id.Identity;
+import org.olat.modules.fo.Forum;
+import org.olat.repository.RepositoryEntry;
+
+/**
+ * 
+ * Initial date: 3 janv. 2018<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public interface DialogElement {
+	
+	public Long getKey();
+	
+	public Date getCreationDate();
+	
+	public String getFilename();
+	
+	public Long getSize();
+	
+	public Forum getForum();
+	
+	public Identity getAuthor();
+	
+	public RepositoryEntry getEntry();
+	
+	public String getSubIdent();
+
+}
diff --git a/src/main/java/org/olat/course/nodes/dialog/DialogElementsManager.java b/src/main/java/org/olat/course/nodes/dialog/DialogElementsManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..1062a410951e07c700e01e245db816be93ef0199
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/dialog/DialogElementsManager.java
@@ -0,0 +1,53 @@
+/**
+ * <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.course.nodes.dialog;
+
+import java.util.List;
+
+import org.olat.core.id.Identity;
+import org.olat.core.util.vfs.VFSContainer;
+import org.olat.core.util.vfs.VFSLeaf;
+import org.olat.repository.RepositoryEntry;
+import org.olat.repository.RepositoryEntryRef;
+
+/**
+ * 
+ * Initial date: 3 janv. 2018<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public interface DialogElementsManager {
+	
+
+	public DialogElement createDialogElement(RepositoryEntry entry, Identity identity, String filename, Long size, String subIdent);
+	
+	public List<DialogElement> getDialogElements(RepositoryEntryRef entry, String subIdent);
+	
+	public DialogElement getDialogElementByForum(Long forumKey);
+	
+	public DialogElement getDialogElementByKey(Long elementKey);
+	
+	public VFSContainer getDialogContainer(DialogElement element);
+	
+	public VFSLeaf getDialogLeaf(DialogElement element);
+	
+	public void deleteDialogElement(DialogElement element);
+
+}
diff --git a/src/main/java/org/olat/course/nodes/dialog/_content/edit.html b/src/main/java/org/olat/course/nodes/dialog/_content/edit.html
deleted file mode 100644
index e5c945bafcc1ec7b7e329dcfff54df8cee45b39d..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/nodes/dialog/_content/edit.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<fieldset class="o_sel_dialog_settings_upload">
-	<legend>$r.contextHelpWithWrapper("Communication and Collaboration#_dateidiskussion")
-	$r.translate("folder.info")</legend>
-	#if ($overview)
-		$r.render("dialogElementsTable")
-		<div class="o_button_group">
-			$r.render("dialog.upload.file")
-		</div>
-	#else
-		$r.render("upload")
-	#end
-</fieldset>
-<fieldset class="o_sel_dialog_settings_forum">
-	<legend>
-	$r.translate("dialog.forum.popup.config.title")</legend>
-	$r.render("showForumAsPopupConfigForm")
-</fieldset>
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_bg.properties
deleted file mode 100644
index 8ab189f43dea8f6ad55f450546b00ba6b37c4013..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_bg.properties
+++ /dev/null
@@ -1,33 +0,0 @@
-#Wed Jul 28 13:33:31 CEST 2010
-
-
-
-
-
-
-
-
-
-
-command.closesp=\u0417\u0430\u0442\u0432\u043E\u0440\u0435\u0442\u0435 \u043F\u0440\u043E\u0437\u043E\u0440\u0435\u0446
-command.show=\u041F\u043E\u043A\u0430\u0436\u0435\u0442\u0435 \u0443\u0447\u0435\u0431\u043D\u043E \u0441\u044A\u0434\u044A\u0440\u0436\u0430\u043D\u0438\u0435
-command.showpopup=\u041F\u043E\u043A\u0430\u0436\u0435\u0442\u0435 \u0443\u0447\u0435\u0431\u043D\u043E \u0441\u044A\u0434\u044A\u0440\u0436\u0430\u043D\u0438\u0435 \u0432 \u043D\u043E\u0432 \u043F\u0440\u043E\u0437\u043E\u0440\u0435\u0446
-condition.accessModerator.title=\u041A\u0430\u0447\u0435\u0442\u0435 / \u0438\u0437\u0442\u0435\u0433\u043B\u0435\u0442\u0435 \u0444\u0430\u0439\u043B\u043E\u0432\u0435 / \u043C\u043E\u0434\u0435\u0440\u0438\u0440\u0430\u0439\u0442\u0435 \u0444\u043E\u0440\u0443\u043C
-condition.accessPoster.title=\u041A\u0430\u0447\u0435\u0442\u0435 / \u0438\u0437\u0442\u0435\u0433\u043B\u0435\u0442\u0435 \u0444\u0430\u0439\u043B\u043E\u0432\u0435 / \u043F\u0440\u043E\u0447\u0435\u0442\u0435\u0442\u0435/\u043F\u0438\u0448\u0435\u0442\u0435 \u0432\u044A\u0432 \u0444\u043E\u0440\u0443\u043C
-condition.accessReader.title=\u0418\u0437\u0442\u0435\u0433\u043B\u0435\u0442\u0435 \u0444\u0430\u0439\u043B\u043E\u0432\u0435 / \u043F\u0440\u043E\u0447\u0435\u0442\u0435\u0442\u0435 \u0444\u043E\u0440\u0443\u043C
-condition.accessibility.title=\u0414\u043E\u0441\u0442\u044A\u043F
-dialog.ablage.config.title=\u0424\u0430\u0439\u043B\u043E\u0432 \u0434\u0438\u0430\u043B\u043E\u0433
-dialog.folder.name=\u041F\u0430\u043F\u043A\u0430
-dialog.forum.config.title=\u0421\u044A\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435
-dialog.forum.popup.config.title=\u0424\u043E\u0440\u0443\u043C
-dialog.start=\u041E\u0442\u0432\u043E\u0440\u0435\u0442\u0435
-dialog.upload.file=\u041A\u0430\u0447\u0435\u0442\u0435 \u0444\u0430\u0439\u043B
-folder.info=\u0424\u0430\u0439\u043B\u043E\u0432 \u0434\u0438\u0430\u043B\u043E\u0433
-folder.open=\u041E\u0442\u0432\u043E\u0440\u0435\u0442\u0435 \u043F\u0430\u043F\u043A\u0430
-
-
-
-
-pane.tab.accessibility=\u0414\u043E\u0441\u0442\u044A\u043F
-pane.tab.dialogconfig=\u041A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044F \u043D\u0430 \u0444\u043E\u0440\u0443\u043C/\u0441\u044A\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435
-selection.forumAsPopup.label=\u041E\u0442\u0432\u043E\u0440\u0435\u0442\u0435 \u0444\u043E\u0440\u0443\u043C\u0430 \u0432 \u0438\u0437\u043A\u0430\u0447\u0430\u0449 \u043F\u0440\u043E\u0437\u043E\u0440\u0435\u0446?
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_da.properties b/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_da.properties
deleted file mode 100644
index f2815eaa34935eb57815720804860611e1644d24..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_da.properties
+++ /dev/null
@@ -1,33 +0,0 @@
-#Wed Jul 28 13:33:31 CEST 2010
-
-
-
-
-
-
-
-
-
-
-command.closesp=Luk vindue
-command.show=Vis l\u00E6ringsindhold
-command.showpopup=Vis l\u00E6ringsindhold i et nyt vindue
-condition.accessModerator.title=Upload / download filer / moderer forum
-condition.accessPoster.title=Upload / download filer / l\u00E6s og skriv i forum
-condition.accessReader.title=Download filer / l\u00E6s forum
-condition.accessibility.title=Adgange
-dialog.ablage.config.title=Fildialog
-dialog.folder.name=Mappe
-dialog.forum.config.title=Gemmemapper
-dialog.forum.popup.config.title=Forum
-dialog.start=Start
-dialog.upload.file=Upload af fil
-folder.info=Fildialog
-folder.open=Open mappe
-
-
-
-
-pane.tab.accessibility=Adgange
-pane.tab.dialogconfig=Forum/gemme konfiguration
-selection.forumAsPopup.label=\u00C5ben forum i et popup vindue?
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_de.properties
deleted file mode 100644
index 56069bfaec2ffcb91f2cc0339a416368de392204..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_de.properties
+++ /dev/null
@@ -1,38 +0,0 @@
-#Mon Mar 02 09:54:04 CET 2009
-title_dialog=Dateidiskussion
-
-
-
-
-
-
-
-
-
-
-
-
-
-command.closesp=Fenster schliessen
-command.show=Lerninhalt anzeigen
-command.showpopup=Lerninhalt in neuem Fenster anzeigen
-condition.accessModerator.title=Up- und Download der Dateien / Moderieren im Forum 
-condition.accessPoster.title=Up- und Download der Dateien / Lesen und Schreiben im Forum
-condition.accessReader.title=Nur Download der Dateien / Nur Lesen im Forum
-condition.accessibility.title=Access
-dialog.ablage.config.title=Dateidiskussion
-dialog.folder.name=Dateiablage
-dialog.forum.config.title=Ablage
-dialog.forum.popup.config.title=Darstellung
-dialog.start=Start
-dialog.upload.file=Datei hochladen
-folder.info=Dateidiskussion
-folder.open=Ablage \u00F6ffen
-
-
-
-
-
-pane.tab.accessibility=Zugang
-pane.tab.dialogconfig=Ablage- /Forumskonfiguration
-selection.forumAsPopup.label=Forum in Popup-Fenster \u00F6ffnen
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_el.properties
deleted file mode 100644
index 4538efd0c370ca108069ae251b696a37958608a4..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_el.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-#Wed Sep 15 12:28:22 CEST 2010
-
-
-
-
-
-
-
-
-
-
-
-command.closesp=\u039A\u03BB\u03B5\u03AF\u03C3\u03B9\u03BC\u03BF \u03C0\u03B1\u03C1\u03B1\u03B8\u03CD\u03C1\u03BF\u03C5
-command.show=\u03A0\u03C1\u03BF\u03B2\u03BF\u03BB\u03AE \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF\u03C5 \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2
-command.showpopup=\u03A0\u03C1\u03BF\u03B2\u03BF\u03BB\u03AE \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF\u03C5 \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 \u03C3\u03B5 \u03BD\u03AD\u03BF \u03C0\u03B1\u03C1\u03AC\u03B8\u03C5\u03C1\u03BF
-condition.accessModerator.title=\u0391\u03BD\u03AD\u03B2\u03B1\u03C3\u03BC\u03B1 \u03AE \u03BB\u03AE\u03C8\u03B7 \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD/\u03B5\u03C0\u03BF\u03C0\u03C4\u03B5\u03AF\u03B1 forum
-condition.accessPoster.title=\u0391\u03BD\u03AD\u03B2\u03B1\u03C3\u03BC\u03B1 / \u03BA\u03B1\u03C4\u03AD\u03B2\u03B1\u03C3\u03BC\u03B1 \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD / \u0391\u03BD\u03AC\u03B3\u03BD\u03C9\u03C3\u03B7-\u03B5\u03B3\u03B3\u03C1\u03B1\u03C6\u03AE forum
-condition.accessReader.title=\u039A\u03B1\u03C4\u03AC\u03B2\u03B1\u03C3\u03BC\u03B1 \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD / \u0391\u03BD\u03AC\u03B3\u03BD\u03C9\u03C3\u03B7 forum
-condition.accessibility.title=\u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7
-dialog.ablage.config.title=\u0394\u03B9\u03AC\u03BB\u03BF\u03B3\u03BF\u03C2 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5
-dialog.folder.name=\u03A6\u03AC\u03BA\u03B5\u03BB\u03BF\u03C2
-dialog.forum.config.title=\u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7
-dialog.forum.popup.config.title=Forum
-dialog.start=\u0395\u03BA\u03BA\u03AF\u03BD\u03B7\u03C3\u03B7
-dialog.upload.file=\u0391\u03BD\u03AD\u03B2\u03B1\u03C3\u03BC\u03B1 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5
-folder.info=\u0394\u03B9\u03AC\u03BB\u03BF\u03B3\u03BF\u03C2 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5
-folder.open=\u0386\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03C6\u03B1\u03BA\u03AD\u03BB\u03BF\u03C5
-
-
-
-
-
-pane.tab.accessibility=\u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7
-pane.tab.dialogconfig=\u0394\u03B9\u03B1\u03BC\u03CC\u03C1\u03C6\u03C9\u03C3\u03B7 Forum/\u03B1\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7\u03C2
-selection.forumAsPopup.label=\u0386\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 forum \u03C3\u03B5 \u03B1\u03BD\u03B1\u03B4\u03C5\u03CC\u03BC\u03B5\u03BD\u03BF \u03C0\u03B1\u03C1\u03AC\u03B8\u03C5\u03C1\u03BF?
-title_dialog=\u0394\u03B9\u03AC\u03BB\u03BF\u03B3\u03BF\u03C2 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_en.properties
deleted file mode 100644
index 13d93aacd04d5a27f06de2aa09eaf443fb268539..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_en.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-#Fri Jan 21 14:06:32 CET 2011
-
-
-
-
-
-
-
-
-
-
-
-command.closesp=Close window
-command.show=Display learning content
-command.showpopup=Display learning content in new window
-condition.accessModerator.title=Upload or download files/moderate forum
-condition.accessPoster.title=Upload and download files/read and write in forum
-condition.accessReader.title=Download files/read in forum only
-condition.accessibility.title=Access
-dialog.ablage.config.title=File dialog
-dialog.folder.name=Storage folder
-dialog.forum.config.title=Storage
-dialog.forum.popup.config.title=Forum
-dialog.start=Start
-dialog.upload.file=Upload file
-folder.info=File dialog
-folder.open=Open folder
-
-
-
-
-
-pane.tab.accessibility=Access
-pane.tab.dialogconfig=Forum/storage configuration
-selection.forumAsPopup.label=Open forum in pop-up
-title_dialog=File dialog
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_fr.properties
deleted file mode 100644
index 31feb6ce136fa9ec2385bb702356becac3cc6e4a..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_fr.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-#Sat Aug 28 13:32:14 CEST 2010
-
-
-
-
-
-
-
-
-
-
-
-command.closesp=Fermer fen\u00EAtre
-command.show=Afficher contenu didactique
-command.showpopup=Afficher contenu didactique dans nouvelle fen\u00EAtre
-condition.accessModerator.title=Transmission et t\u00E9l\u00E9chargement des fichiers / Animer le forum
-condition.accessPoster.title=Transmission et t\u00E9l\u00E9chargement des fichiers / Lire et \u00E9crire dans le forum
-condition.accessReader.title=Uniquement t\u00E9l\u00E9chargement des fichiers / Uniquement lire dans le forum
-condition.accessibility.title=Acces
-dialog.ablage.config.title=Fichier discut\u00E9
-dialog.folder.name=D\u00E9p\u00F4t de fichier
-dialog.forum.config.title=Stockage
-dialog.forum.popup.config.title=Forum
-dialog.start=D\u00E9marrage
-dialog.upload.file=T\u00E9l\u00E9charger fichier
-folder.info=Fichier discut\u00E9
-folder.open=Ouvrir d\u00E9p\u00F4t
-
-
-
-
-
-pane.tab.accessibility=Acc\u00E8s
-pane.tab.dialogconfig=Configuration de d\u00E9p\u00F4t, du forum
-selection.forumAsPopup.label=Ouvrir le forum dans une nouvelle fen\u00EAtre?
-title_dialog=Discussion de fichier
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_it.properties
deleted file mode 100644
index b6422bbd33b944089d348987fd3bd0be396bfa6f..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_it.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-#Fri Aug 27 15:05:27 CEST 2010
-
-
-
-
-
-
-
-
-
-
-
-command.closesp=Chiudere finestra
-command.show=Mostrare contenuto didattico
-command.showpopup=Mostrare contenuto didattico in nuova finestra
-condition.accessModerator.title=upload / download files / moderatate forum
-condition.accessPoster.title=upload / download files / read write forum
-condition.accessReader.title=download files / read forum
-condition.accessibility.title=Accesso
-dialog.ablage.config.title=Discussione documentata
-dialog.folder.name=Deposito file
-dialog.forum.config.title=Deposito
-dialog.forum.popup.config.title=Forum
-dialog.start=Avviare
-dialog.upload.file=Caricare file
-folder.info=Discussione documentata
-folder.open=Apri deposito
-
-
-
-
-
-pane.tab.accessibility=Accesso
-pane.tab.dialogconfig=Configurazione deposito / forum
-selection.forumAsPopup.label=Aprire forum in finestra popup?
-title_dialog=Discussione documentata
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_pt_BR.properties
deleted file mode 100644
index 685c49ad323779a9da38ef7b882d71bbe9d45ccf..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_pt_BR.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-#Fri Aug 20 22:46:10 CEST 2010
-
-
-
-
-
-
-
-
-
-
-
-command.closesp=Fechar janela
-command.show=Exibir conte\u00FAdo did\u00E1tico
-command.showpopup=Exibir conte\u00FAdo did\u00E1tico em nova janela
-condition.accessModerator.title=Carregar/ baixar arquivos/ moderar f\u00F3rum
-condition.accessPoster.title=Carregar/ baixar arquivos/ ler-escrever f\u00F3rum
-condition.accessReader.title=Baixar arquivos/ ler f\u00F3rum
-condition.accessibility.title=Acesso
-dialog.ablage.config.title=Arquivo de di\u00E1logo
-dialog.folder.name=Pasta
-dialog.forum.config.title=Armazenamento
-dialog.forum.popup.config.title=F\u00F3rum
-dialog.start=Iniciar
-dialog.upload.file=Carregar arquivo 
-folder.info=Arquivo de di\u00E1logo
-folder.open=Abrir pasta
-
-
-
-
-
-pane.tab.accessibility=Acesso
-pane.tab.dialogconfig=F\u00F3rum/configura\u00E7\u00E3o de armazenamento
-selection.forumAsPopup.label=Abrir pasta em janela pop-up?
-title_dialog=Arquivo de Di\u00E1logo
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_pt_PT.properties b/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_pt_PT.properties
deleted file mode 100644
index 69d56542d55ef48c7b03ab1b04fcfcd80aaee83f..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_pt_PT.properties
+++ /dev/null
@@ -1,33 +0,0 @@
-#Wed Jul 28 13:33:30 CEST 2010
-
-
-
-
-
-
-
-
-
-
-command.closesp=Fechar janela
-command.show=Exibir conte\u00FAdo did\u00E1tico
-command.showpopup=Exibir conte\u00FAdo did\u00E1tico em nova janela
-condition.accessModerator.title=Carregar/ baixar arquivos/ moderar f\u00F3rum
-condition.accessPoster.title=Carregar/ baixar arquivos/ ler-escrever f\u00F3rum
-condition.accessReader.title=Baixar arquivos/ ler f\u00F3rum
-condition.accessibility.title=Acesso
-dialog.ablage.config.title=Arquivo de di\u00E1logo
-dialog.folder.name=Pasta
-dialog.forum.config.title=Armazenamento
-dialog.forum.popup.config.title=F\u00F3rum
-dialog.start=Iniciar
-dialog.upload.file=Carregar arquivo 
-folder.info=Arquivo de di\u00E1logo
-folder.open=Abrir pasta
-
-
-
-
-pane.tab.accessibility=Acesso
-pane.tab.dialogconfig=F\u00F3rum/configura\u00E7\u00E3o de armazenamento
-selection.forumAsPopup.label=Abrir pasta em janela pop-up?
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_ru.properties
deleted file mode 100644
index 7bae1bd39f632178cc31cf495260ba55a809300b..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_ru.properties
+++ /dev/null
@@ -1,29 +0,0 @@
-#Wed Jul 28 13:33:33 CEST 2010
-
-
-
-
-
-
-command.closesp=\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u043E\u043A\u043D\u043E 
-command.show=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0443\u0447\u0435\u0431\u043D\u043E\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435 
-command.showpopup=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0443\u0447\u0435\u0431\u043D\u043E\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435 \u0432 \u043D\u043E\u0432\u043E\u043C \u043E\u043A\u043D\u0435 
-condition.accessModerator.title=\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u0438 \u0441\u043A\u0430\u0447\u0438\u0432\u0430\u043D\u0438\u0435 \u0444\u0430\u0439\u043B\u043E\u0432 / \u041C\u043E\u0434\u0435\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0432 \u0444\u043E\u0440\u0443\u043C\u0435
-condition.accessPoster.title=\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u0438 \u0441\u043A\u0430\u0447\u0438\u0432\u0430\u043D\u0438\u0435 \u0444\u0430\u0439\u043B\u043E\u0432 / \u0427\u0438\u0442\u0430\u0442\u044C \u0438 \u043F\u0438\u0441\u0430\u0442\u044C \u0432 \u0444\u043E\u0440\u0443\u043C\u0435  
-condition.accessReader.title=\u0422\u043E\u043B\u044C\u043A\u043E \u0441\u043A\u0430\u0447\u0438\u0432\u0430\u043D\u0438\u0435 \u0444\u0430\u0439\u043B\u043E\u0432 / \u0422\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u0435\u043D\u0438\u0435 \u0432 \u0444\u043E\u0440\u0443\u043C\u0435
-condition.accessibility.title=\u0414\u043E\u0441\u0442\u0443\u043F
-dialog.ablage.config.title=\u041E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 
-dialog.folder.name=\u041F\u0430\u043F\u043A\u0430 \u0434\u043B\u044F \u0444\u0430\u0439\u043B\u043E\u0432
-dialog.forum.config.title=\u041F\u0430\u043F\u043A\u0430
-dialog.forum.popup.config.title=\u0424\u043E\u0440\u0443\u043C
-dialog.start=\u0421\u0442\u0430\u0440\u0442
-dialog.upload.file=\u041F\u0435\u0440\u0435\u0441\u043B\u0430\u0442\u044C \u0444\u0430\u0439\u043B
-folder.info=\u041E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 
-folder.open=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043F\u0430\u043F\u043A\u0443
-
-
-
-
-pane.tab.accessibility=\u0414\u043E\u0441\u0442\u0443\u043F
-pane.tab.dialogconfig=\u041A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044F \u043F\u0430\u043F\u043A\u0438/\u0444\u043E\u0440\u0443\u043C\u0430 
-selection.forumAsPopup.label=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0444\u043E\u0440\u0443\u043C \u0432\u043E \u0432\u0441\u043F\u043B\u044B\u0432\u0430\u044E\u0449\u0435\u043C \u043E\u043A\u043D\u0435 (pop-up)? 
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_sq.properties b/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_sq.properties
deleted file mode 100644
index 1182b2403c2b60c186656f547f7cbdb817c54995..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_sq.properties
+++ /dev/null
@@ -1,33 +0,0 @@
-#Wed Jul 28 13:33:32 CEST 2010
-
-
-
-
-
-
-
-
-
-
-command.closesp=Mbylle dritaren
-command.show=Shfaq p\u00EBrmbajtje m\u00EBsimi
-command.showpopup=Shfaqet p\u00EBrmbajtja e m\u00EBsimit n\u00EB dritare t\u00EB re
-condition.accessModerator.title=Ngarko / shkarko skedar\u00EBt / forum moderimi
-condition.accessPoster.title=Ngarko / shkarko skedar\u00EBt / forum lexim-shkrimi
-condition.accessReader.title=Shkarko skedar\u00EBt / forum leximi
-condition.accessibility.title=Qasja
-dialog.ablage.config.title=Dialog skedari
-dialog.folder.name=Dosja
-dialog.forum.config.title=Ruajtja
-dialog.forum.popup.config.title=Forumi
-dialog.start=Nise
-dialog.upload.file=Ngarko skedar
-folder.info=Dialog skedari
-folder.open=Hap dosje
-
-
-
-
-pane.tab.accessibility=Qasja
-pane.tab.dialogconfig=Konfigurimini i forumit
-selection.forumAsPopup.label=Hape forumin n\u00EB dritare k\u00EBrcyese?
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_zh_TW.properties
deleted file mode 100644
index 7aa177267315e7e7a6788d0de049d507dcb6ddab..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_zh_TW.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-#Mon Sep 20 15:17:02 CEST 2010
-
-
-
-
-
-
-
-
-
-
-
-command.closesp=\u95DC\u9589\u8996\u7A97
-command.show=\u986F\u793A\u5B78\u7FD2\u5167\u5BB9
-command.showpopup=\u5728\u65B0\u8996\u7A97\u986F\u793A\u5B78\u7FD2\u5167\u5BB9
-condition.accessModerator.title=\u4E0A\u50B3 / \u4E0B\u8F09\u6A94\u6848 / \u7BA1\u7406\u8AD6\u58C7
-condition.accessPoster.title=\u4E0A\u50B3 / \u4E0B\u8F09\u6A94\u6848 / \u8B80\u53D6/\u5BEB\u5165\u8AD6\u58C7
-condition.accessReader.title=\u4E0B\u8F09\u6A94\u6848 / \u8B80\u53D6\u8AD6\u58C7
-condition.accessibility.title=\u5B58\u53D6
-dialog.ablage.config.title=\u6A94\u6848\u5C0D\u8A71\u6846
-dialog.folder.name=\u8CC7\u6599\u593E
-dialog.forum.config.title=\u5132\u5B58\u5340
-dialog.forum.popup.config.title=\u8AD6\u58C7
-dialog.start=\u958B\u59CB
-dialog.upload.file=\u4E0A\u50B3\u6A94\u6848
-folder.info=\u6A94\u6848\u5C0D\u8A71\u6846
-folder.open=\u958B\u555F\u8CC7\u6599\u593E
-
-
-
-
-
-pane.tab.accessibility=\u5B58\u53D6
-pane.tab.dialogconfig=\u8AD6\u58C7/\u5132\u5B58\u5340\u8A2D\u5B9A
-selection.forumAsPopup.label=\u5728\u5F48\u51FA\u8996\u7A97\u958B\u555F\u8AD6\u58C7\uFF1F
-title_dialog=\u6A94\u6848\u5C0D\u8A71\u6846
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/i18nBundleMetadata.properties b/src/main/java/org/olat/course/nodes/dialog/_i18n/i18nBundleMetadata.properties
deleted file mode 100644
index 22371ad650f3fba53af8a8ddacfdb3cfd9a84c76..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/i18nBundleMetadata.properties
+++ /dev/null
@@ -1 +0,0 @@
-title_dialog.inlinetranslation=disabled
diff --git a/src/main/java/org/olat/course/nodes/dialog/manager/DialogElementsManagerImpl.java b/src/main/java/org/olat/course/nodes/dialog/manager/DialogElementsManagerImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..9d1fcefa898561d629a5595f76a2549eadb89717
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/dialog/manager/DialogElementsManagerImpl.java
@@ -0,0 +1,152 @@
+/**
+ * <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.course.nodes.dialog.manager;
+
+import java.util.Date;
+import java.util.List;
+
+import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl;
+import org.olat.core.commons.persistence.DB;
+import org.olat.core.id.Identity;
+import org.olat.core.util.vfs.VFSContainer;
+import org.olat.core.util.vfs.VFSItem;
+import org.olat.core.util.vfs.VFSLeaf;
+import org.olat.course.nodes.dialog.DialogElement;
+import org.olat.course.nodes.dialog.DialogElementsManager;
+import org.olat.course.nodes.dialog.model.DialogElementImpl;
+import org.olat.modules.fo.Forum;
+import org.olat.modules.fo.manager.ForumManager;
+import org.olat.repository.RepositoryEntry;
+import org.olat.repository.RepositoryEntryRef;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 
+ * Initial date: 3 janv. 2018<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+@Service
+public class DialogElementsManagerImpl implements DialogElementsManager {
+	
+	@Autowired
+	private DB dbInstance;
+	@Autowired
+	private ForumManager forumManager;
+
+	@Override
+	public DialogElement createDialogElement(RepositoryEntry entry, Identity author,
+			String filename, Long size, String subIdent) {
+		DialogElementImpl element = new DialogElementImpl();
+		element.setCreationDate(new Date());
+		element.setLastModified(element.getCreationDate());
+		element.setFilename(filename);
+		element.setSize(size);
+		element.setAuthor(author);
+		element.setEntry(entry);
+		element.setSubIdent(subIdent);
+		
+		Forum forum = forumManager.addAForum();
+		element.setForum(forum);
+		
+		dbInstance.getCurrentEntityManager().persist(element);
+		return element;
+	}
+
+	@Override
+	public List<DialogElement> getDialogElements(RepositoryEntryRef entry, String subIdent) {
+		StringBuilder sb = new StringBuilder();
+		sb.append("select element from dialogelement as element")
+		  .append(" inner join fetch element.entry entry")
+		  .append(" left join fetch element.author author")
+		  .append(" left join fetch author.user authorUser")
+		  .append(" where element.entry.key=:entryKey and element.subIdent=:subIdent");
+		
+		return dbInstance.getCurrentEntityManager()
+			.createQuery(sb.toString(), DialogElement.class)
+			.setParameter("entryKey", entry.getKey())
+			.setParameter("subIdent", subIdent)
+			.getResultList();
+	}
+
+	@Override
+	public DialogElement getDialogElementByForum(Long forumKey) {
+		StringBuilder sb = new StringBuilder();
+		sb.append("select element from dialogelement as element")
+		  .append(" inner join fetch element.entry entry")
+		  .append(" inner join fetch element.forum forum")
+		  .append(" left join fetch element.author author")
+		  .append(" left join fetch author.user authorUser")
+		  .append(" where forum.key=:forumKey");
+		
+		List<DialogElement> elements = dbInstance.getCurrentEntityManager()
+			.createQuery(sb.toString(), DialogElement.class)
+			.setParameter("forumKey", forumKey)
+			.getResultList();
+		return elements == null || elements.isEmpty() ? null : elements.get(0);
+	}
+	
+	@Override
+	public DialogElement getDialogElementByKey(Long elementKey) {
+		StringBuilder sb = new StringBuilder();
+		sb.append("select element from dialogelement as element")
+		  .append(" inner join fetch element.entry entry")
+		  .append(" inner join fetch element.forum forum")
+		  .append(" left join fetch element.author author")
+		  .append(" left join fetch author.user authorUser")
+		  .append(" where element.key=:elementKey");
+		
+		List<DialogElement> elements = dbInstance.getCurrentEntityManager()
+			.createQuery(sb.toString(), DialogElement.class)
+			.setParameter("elementKey", elementKey)
+			.getResultList();
+		return elements == null || elements.isEmpty() ? null : elements.get(0);
+	}
+
+	@Override
+	public VFSContainer getDialogContainer(DialogElement element) {
+		Forum forum = element.getForum();
+		
+		StringBuilder sb = new StringBuilder();
+		sb.append("/forum/").append(forum.getKey()).append("/");
+		String pathToForumDir = sb.toString();
+		return new OlatRootFolderImpl(pathToForumDir, null);
+	}
+
+	@Override
+	public VFSLeaf getDialogLeaf(DialogElement element) {
+		VFSContainer container = getDialogContainer(element);
+		VFSItem item = container.resolve(element.getFilename());
+		if(item instanceof VFSLeaf) {
+			return (VFSLeaf)item;
+		}
+		return null;
+	}
+
+	@Override
+	public void deleteDialogElement(DialogElement element) {
+		Forum forum = element.getForum();
+		DialogElement reloadedElement = dbInstance.getCurrentEntityManager()
+				.getReference(DialogElementImpl.class, element.getKey());
+		dbInstance.getCurrentEntityManager().remove(reloadedElement);
+		forumManager.deleteForum(forum.getKey());
+	}
+}
diff --git a/src/main/java/org/olat/modules/dialog/FileUploadNotificationHandler.java b/src/main/java/org/olat/course/nodes/dialog/manager/FileUploadNotificationHandler.java
similarity index 70%
rename from src/main/java/org/olat/modules/dialog/FileUploadNotificationHandler.java
rename to src/main/java/org/olat/course/nodes/dialog/manager/FileUploadNotificationHandler.java
index cc6544d5d7aa5dd693c29c6fe79394db85b9c422..8e0f575fc14a0d2086ba31b0df7eea351736e5fa 100644
--- a/src/main/java/org/olat/modules/dialog/FileUploadNotificationHandler.java
+++ b/src/main/java/org/olat/course/nodes/dialog/manager/FileUploadNotificationHandler.java
@@ -23,13 +23,12 @@
 * under the Apache 2.0 license as the original file.
 */
 
-package org.olat.modules.dialog;
+package org.olat.course.nodes.dialog.manager;
 
 import java.util.Date;
 import java.util.List;
 import java.util.Locale;
 
-import org.olat.basesecurity.BaseSecurityManager;
 import org.olat.core.commons.services.notifications.NotificationHelper;
 import org.olat.core.commons.services.notifications.NotificationsHandler;
 import org.olat.core.commons.services.notifications.NotificationsManager;
@@ -42,13 +41,19 @@ import org.olat.core.commons.services.notifications.model.TitleItem;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.gui.util.CSSHelper;
 import org.olat.core.id.Identity;
+import org.olat.core.id.OLATResourceable;
 import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.Util;
 import org.olat.core.util.resource.OresHelper;
+import org.olat.course.nodes.dialog.DialogElement;
+import org.olat.course.nodes.dialog.DialogElementsManager;
+import org.olat.course.nodes.dialog.ui.DialogCourseNodeRunController;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
 /**
  * Description:<br>
@@ -59,9 +64,17 @@ import org.olat.repository.RepositoryManager;
  * 
  * @author guido
  */
+@Service
 public class FileUploadNotificationHandler implements NotificationsHandler {
 	private static final OLog log = Tracing.createLoggerFor(FileUploadNotificationHandler.class);
 	private static final String CSSS_CLASS_UPLOAD_ICON = "o_dialog_icon";
+	
+	@Autowired
+	private RepositoryManager repositoryManager;
+	@Autowired
+	private DialogElementsManager dialogElementsMgr;
+	@Autowired
+	private NotificationsManager notificationsManager;
 
 	public FileUploadNotificationHandler() {
 	//
@@ -71,6 +84,7 @@ public class FileUploadNotificationHandler implements NotificationsHandler {
 	 * @see org.olat.core.commons.services.notifications.NotificationsHandler#createSubscriptionInfo(org.olat.core.commons.services.notifications.Subscriber,
 	 *      java.util.Locale, java.util.Date)
 	 */
+	@Override
 	public SubscriptionInfo createSubscriptionInfo(Subscriber subscriber, Locale locale, Date compareDate) {
 		Publisher p = subscriber.getPublisher();
 		final Date latestNews = p.getLatestNewsDate();
@@ -78,48 +92,48 @@ public class FileUploadNotificationHandler implements NotificationsHandler {
 		SubscriptionInfo si;
 		// there could be news for me, investigate deeper
 		try {
-			if (NotificationsManager.getInstance().isPublisherValid(p) && compareDate.before(latestNews)) {
-				RepositoryEntry re = RepositoryManager.getInstance().lookupRepositoryEntry(OresHelper.createOLATResourceableInstance(p.getResName(), p.getResId()), false);
+			if (notificationsManager.isPublisherValid(p) && compareDate.before(latestNews)) {
+				RepositoryEntry re = repositoryManager.lookupRepositoryEntry(OresHelper.createOLATResourceableInstance(p.getResName(), p.getResId()), false);
 				if(re == null) {
 					if(!checkPublisher(subscriber.getPublisher())) {
-						return NotificationsManager.getInstance().getNoSubscriptionInfo();
+						return notificationsManager.getNoSubscriptionInfo();
 					}
 				} else if(re.getRepositoryEntryStatus().isClosed() || re.getRepositoryEntryStatus().isUnpublished()) {
-					return NotificationsManager.getInstance().getNoSubscriptionInfo();
+					return notificationsManager.getNoSubscriptionInfo();
 				}
 
 				String displayname = re.getDisplayname();
-				
-				DialogElementsPropertyManager mgr = DialogElementsPropertyManager.getInstance();
-				DialogPropertyElements elements = mgr.findDialogElements(p.getResId(), p.getSubidentifier());
-				final List<DialogElement> dialogElements = elements.getDialogPropertyElements();
-				final Translator translator = Util.createPackageTranslator(FileUploadNotificationHandler.class, locale);
+				OLATResourceable ores = OresHelper.createOLATResourceableInstance("CourseModule", p.getResId());
+				RepositoryEntry entry = repositoryManager.lookupRepositoryEntry(ores, false);
+				List<DialogElement> dialogElements = dialogElementsMgr.getDialogElements(entry, p.getSubidentifier());
+				final Translator translator = Util.createPackageTranslator(DialogCourseNodeRunController.class, locale);
 
-				si = new SubscriptionInfo(subscriber.getKey(), p.getType(), new TitleItem(translator.translate("notifications.header", new String[]{displayname}), CSSS_CLASS_UPLOAD_ICON), null);
-				SubscriptionListItem subListItem;
+				si = new SubscriptionInfo(subscriber.getKey(), p.getType(), new TitleItem(translator.translate("notifications.header", new String[]{ displayname }), CSSS_CLASS_UPLOAD_ICON), null);
+			
 				for (DialogElement element : dialogElements) {
 					// do only show entries newer then the ones already seen
-					if (element.getDate().after(compareDate)) {
+					if (element.getCreationDate().after(compareDate)) {
 						String filename = element.getFilename();
-						String creator = element.getAuthor();
-						Identity ident = BaseSecurityManager.getInstance().findIdentityByName(creator);
-						Date modDate = element.getDate();
+						Identity author = element.getAuthor();
+						Date modDate = element.getCreationDate();
+						String[] params = new String[] {
+								filename,
+								NotificationHelper.getFormatedName(author)
+						};
 
-						String desc = translator.translate("notifications.entry", new String[] { filename, NotificationHelper.getFormatedName(ident) });
-						String businessPath = p.getBusinessPath();
+						String desc = translator.translate("notifications.entry", params);
+						String businessPath = p.getBusinessPath() + "[Element:" + element.getKey() + "]";
 						String urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(businessPath);
 						String cssClass = CSSHelper.createFiletypeIconCssClassFor(filename);
-
-						subListItem = new SubscriptionListItem(desc, urlToSend, businessPath, modDate, cssClass);
-						si.addSubscriptionListItem(subListItem);
+						si.addSubscriptionListItem(new SubscriptionListItem(desc, urlToSend, businessPath, modDate, cssClass));
 					}
 				}
 			} else {
-				si = NotificationsManager.getInstance().getNoSubscriptionInfo();
+				si = notificationsManager.getNoSubscriptionInfo();
 			}
 		} catch (Exception e) {
 			log.error("Error creating file upload's notifications for subscriber: " + subscriber.getKey(), e);
-			si = NotificationsManager.getInstance().getNoSubscriptionInfo();
+			si = notificationsManager.getNoSubscriptionInfo();
 		}
 		return si;
 	}
@@ -128,7 +142,7 @@ public class FileUploadNotificationHandler implements NotificationsHandler {
 	public String createTitleInfo(Subscriber subscriber, Locale locale) {
 		try {
 			Translator translator = Util.createPackageTranslator(FileUploadNotificationHandler.class, locale);
-			String displayname = RepositoryManager.getInstance().lookupDisplayNameByOLATResourceableId(subscriber.getPublisher().getResId());
+			String displayname = repositoryManager.lookupDisplayNameByOLATResourceableId(subscriber.getPublisher().getResId());
 			if(displayname == null) {
 				checkPublisher(subscriber.getPublisher());
 			}
diff --git a/src/main/java/org/olat/course/nodes/dialog/model/DialogElementImpl.java b/src/main/java/org/olat/course/nodes/dialog/model/DialogElementImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..05d64ea084efbe9e619f00137ec47335aa6cdf99
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/dialog/model/DialogElementImpl.java
@@ -0,0 +1,188 @@
+/**
+ * <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.course.nodes.dialog.model;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.olat.basesecurity.IdentityImpl;
+import org.olat.core.id.CreateInfo;
+import org.olat.core.id.Identity;
+import org.olat.core.id.ModifiedInfo;
+import org.olat.core.id.Persistable;
+import org.olat.course.nodes.dialog.DialogElement;
+import org.olat.modules.fo.Forum;
+import org.olat.modules.fo.model.ForumImpl;
+import org.olat.repository.RepositoryEntry;
+
+/**
+ * 
+ * Initial date: 3 janv. 2018<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+@Entity(name="dialogelement")
+@Table(name="o_dialog_element")
+public class DialogElementImpl implements DialogElement, CreateInfo, Persistable, ModifiedInfo {
+
+	private static final long serialVersionUID = -8365816867114648471L;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id", nullable=false, unique=true, insertable=true, updatable=false)
+	private Long key;
+	
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name="creationdate", nullable=false, insertable=true, updatable=false)
+	private Date creationDate;
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name="lastmodified", nullable=false, insertable=true, updatable=true)
+	private Date lastModified;
+
+	@Column(name="d_filename", nullable=false, insertable=true, updatable=true)
+	private String filename;
+	@Column(name="d_filesize", nullable=false, insertable=true, updatable=true)
+	private Long size;
+	@Column(name="d_subident", nullable=false, insertable=true, updatable=false)
+	private String subIdent;
+	
+	@ManyToOne(targetEntity=RepositoryEntry.class, fetch=FetchType.LAZY, optional=true)
+	@JoinColumn(name="fk_entry", nullable=false, insertable=true, updatable=false)
+	private RepositoryEntry entry;
+	
+	@ManyToOne(targetEntity=IdentityImpl.class, fetch=FetchType.LAZY, optional=true)
+	@JoinColumn(name="fk_author", nullable=true, insertable=true, updatable=true)
+	private Identity author;
+	
+	@ManyToOne(targetEntity=ForumImpl.class, fetch=FetchType.LAZY, optional=false)
+	@JoinColumn(name="fk_forum", nullable=false, insertable=true, updatable=false)
+	private Forum forum;
+
+	@Override
+	public Long getKey() {
+		return key;
+	}
+	
+	@Override
+	public Date getCreationDate() {
+		return creationDate;
+	}
+	
+	public void setCreationDate(Date creationDate) {
+		this.creationDate = creationDate;
+	}
+
+	@Override
+	public Date getLastModified() {
+		return lastModified;
+	}
+
+	@Override
+	public void setLastModified(Date date) {
+		lastModified = date;
+	}
+
+	@Override
+	public String getFilename() {
+		return filename;
+	}
+
+	public void setFilename(String filename) {
+		this.filename = filename;
+	}
+
+	@Override
+	public String getSubIdent() {
+		return subIdent;
+	}
+
+	public void setSubIdent(String subIdent) {
+		this.subIdent = subIdent;
+	}
+
+	@Override
+	public RepositoryEntry getEntry() {
+		return entry;
+	}
+
+	public void setEntry(RepositoryEntry entry) {
+		this.entry = entry;
+	}
+
+	@Override
+	public Identity getAuthor() {
+		return author;
+	}
+
+	public void setAuthor(Identity author) {
+		this.author = author;
+	}
+
+	@Override
+	public Forum getForum() {
+		return forum;
+	}
+
+	public void setForum(Forum forum) {
+		this.forum = forum;
+	}
+
+	@Override
+	public Long getSize() {
+		return size;
+	}
+
+	public void setSize(Long size) {
+		this.size = size;
+	}
+
+	@Override
+	public int hashCode() {
+		return key == null ? 389476589 : key.hashCode();
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if(this == obj) {
+			return true;
+		}
+		if(obj instanceof DialogElementImpl) {
+			DialogElementImpl element = (DialogElementImpl)obj;
+			return key != null && key.equals(element.key);
+		}
+		return false;
+	}
+
+	@Override
+	public boolean equalsByPersistableKey(Persistable persistable) {
+		return equals(persistable);
+	}
+}
diff --git a/src/main/java/org/olat/course/nodes/dialog/DialogConfigForm.java b/src/main/java/org/olat/course/nodes/dialog/ui/DialogConfigForm.java
similarity index 73%
rename from src/main/java/org/olat/course/nodes/dialog/DialogConfigForm.java
rename to src/main/java/org/olat/course/nodes/dialog/ui/DialogConfigForm.java
index 574c744175f4ecf9d3298a18c4264077afd95ad7..0e42f37bd86ae5fb39c014abb043f1701fa31697 100644
--- a/src/main/java/org/olat/course/nodes/dialog/DialogConfigForm.java
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/DialogConfigForm.java
@@ -23,7 +23,7 @@
 * under the Apache 2.0 license as the original file.
 */
 
-package org.olat.course.nodes.dialog;
+package org.olat.course.nodes.dialog.ui;
 
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.form.flexible.FormItem;
@@ -35,6 +35,8 @@ 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.logging.AssertException;
+import org.olat.core.util.Util;
+import org.olat.course.nodes.dialog.DialogElementsManager;
 import org.olat.modules.ModuleConfiguration;
 
 /**
@@ -45,16 +47,16 @@ import org.olat.modules.ModuleConfiguration;
 public class DialogConfigForm extends FormBasicController {
 
 	public static final String DIALOG_CONFIG_INTEGRATION = "dialog_integration";
-  /** Integration configuration value: integrate it into course showing the course menu **/
-  public static final String CONFIG_INTEGRATION_VALUE_INLINE = "inline"; 
-  /** Integration configuration value: integrate it using a modal dialog withoud course menu **/
-  public static final String CONFIG_INTEGRATION_VALUE_MODAL = "modal"; 
-  /** Integration configuration value: integrate it as a pop up window **/
-  public static final String CONFIG_INTEGRATION_VALUE_POPUP = "popup"; 
+	/** Integration configuration value: integrate it into course showing the course menu **/
+	public static final String CONFIG_INTEGRATION_VALUE_INLINE = "inline"; 
+	/** Integration configuration value: integrate it using a modal dialog withoud course menu **/
+	public static final String CONFIG_INTEGRATION_VALUE_MODAL = "modal"; 
+	/** Integration configuration value: integrate it as a pop up window **/
+	public static final String CONFIG_INTEGRATION_VALUE_POPUP = "popup"; 
   
 	private SelectionElement select;
 	
-	private ModuleConfiguration config;
+	private final ModuleConfiguration config;
 	
 	/**
 	 * @param name
@@ -63,28 +65,14 @@ public class DialogConfigForm extends FormBasicController {
 	 */
 	public DialogConfigForm(UserRequest ureq, WindowControl wControl, ModuleConfiguration config) {
 		super(ureq, wControl);
-		
-		if (config == null) throw new AssertException("module configuration is null!");
-		
+		setTranslator(Util.createPackageTranslator(DialogElementsManager.class, getLocale()));
 		this.config = config;
-		
 		initForm(ureq);
 	}
 
-	/**
-	 * @see org.olat.core.gui.components.form.Form#validate(org.olat.core.gui.UserRequest)
-	 */
-	public boolean validate() {
-		return true;
-	}
-
 	@Override
 	protected void formInnerEvent (UserRequest ureq, FormItem source, FormEvent event) {
-		if (config == null) throw new AssertException("Try to do updateConfiguration() but module configuration is null");
-		config.set(
-				DialogConfigForm.DIALOG_CONFIG_INTEGRATION,
-				select.isSelected(0)? CONFIG_INTEGRATION_VALUE_POPUP: CONFIG_INTEGRATION_VALUE_INLINE
-		);
+		config.set(DialogConfigForm.DIALOG_CONFIG_INTEGRATION, select.isSelected(0) ? CONFIG_INTEGRATION_VALUE_POPUP : CONFIG_INTEGRATION_VALUE_INLINE);
 		config.setConfigurationVersion(1);
 		fireEvent (ureq, Event.CHANGED_EVENT);
 	}
@@ -112,5 +100,4 @@ public class DialogConfigForm extends FormBasicController {
 	protected void doDispose() {
 		//
 	}
-
 }
diff --git a/src/main/java/org/olat/course/nodes/dialog/ui/DialogCourseNodeEditController.java b/src/main/java/org/olat/course/nodes/dialog/ui/DialogCourseNodeEditController.java
new file mode 100644
index 0000000000000000000000000000000000000000..72983d295a2466bff6c4e99717aa6dd06151f70b
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/DialogCourseNodeEditController.java
@@ -0,0 +1,162 @@
+/**
+* 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.course.nodes.dialog.ui;
+
+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.control.Controller;
+import org.olat.core.gui.control.ControllerEventListener;
+import org.olat.core.gui.control.Event;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.generic.tabbable.ActivateableTabbableDefaultController;
+import org.olat.course.ICourse;
+import org.olat.course.assessment.AssessmentHelper;
+import org.olat.course.condition.Condition;
+import org.olat.course.condition.ConditionEditController;
+import org.olat.course.editor.NodeEditController;
+import org.olat.course.nodes.BCCourseNode;
+import org.olat.course.nodes.DialogCourseNode;
+import org.olat.course.run.userview.UserCourseEnvironment;
+import org.olat.course.tree.CourseEditorTreeModel;
+
+/**
+ * Description:<br>
+ * controller for the tabbed pane inside the course editor for the course node 'dialog elements'
+ * <P>
+ * Initial Date: 02.11.2005 <br>
+ * 
+ * @author guido
+ */
+public class DialogCourseNodeEditController extends ActivateableTabbableDefaultController implements ControllerEventListener {
+
+	private static final String PANE_TAB_DIALOGCONFIG = "pane.tab.dialogconfig";
+	private static final String PANE_TAB_ACCESSIBILITY = "pane.tab.accessibility";
+	
+	private static final String[] paneKeys = { PANE_TAB_DIALOGCONFIG, PANE_TAB_ACCESSIBILITY };
+	
+	private TabbedPane myTabbedPane;
+	private VelocityContainer accessContent;	
+	private ConditionEditController readerCondContr, posterCondContr, moderatorCondContr;
+	
+	private DialogCourseNode courseNode;
+	private BCCourseNode bcNode = new BCCourseNode();
+
+	private DialogElementsEditController elementsEditCtrl;
+	
+	public DialogCourseNodeEditController(UserRequest ureq, WindowControl wControl, DialogCourseNode node,
+			ICourse course, UserCourseEnvironment userCourseEnv) {
+		super(ureq,wControl);
+		this.courseNode = node;
+		
+		// set name of the folder we use
+		bcNode.setShortTitle(translate("dialog.folder.name"));
+
+		elementsEditCtrl = new DialogElementsEditController(ureq, getWindowControl(), course.getCourseEnvironment(), node);
+		listenTo(elementsEditCtrl);
+
+		// accessability config tab		
+		accessContent = createVelocityContainer("edit_access");
+
+		CourseEditorTreeModel editorModel = course.getEditorTreeModel();
+		// Reader precondition
+		Condition readerCondition = courseNode.getPreConditionReader();
+		readerCondContr = new ConditionEditController(ureq, getWindowControl(), userCourseEnv, readerCondition,
+				AssessmentHelper.getAssessableNodes(editorModel, courseNode));		
+		listenTo(readerCondContr);
+		accessContent.put("readerCondition", readerCondContr.getInitialComponent());
+
+		// Poster precondition
+		Condition posterCondition = courseNode.getPreConditionPoster();
+		posterCondContr = new ConditionEditController(ureq, getWindowControl(), userCourseEnv, posterCondition,
+				AssessmentHelper.getAssessableNodes(editorModel, courseNode));		
+		this.listenTo(posterCondContr);
+		accessContent.put("posterCondition", posterCondContr.getInitialComponent());
+
+		// Moderator precondition
+		Condition moderatorCondition = courseNode.getPreConditionModerator();
+		moderatorCondContr = new ConditionEditController(ureq, getWindowControl(), userCourseEnv, moderatorCondition,
+				AssessmentHelper.getAssessableNodes(editorModel, courseNode));
+
+		fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT);		
+		listenTo(moderatorCondContr);
+		accessContent.put("moderatorCondition", moderatorCondContr.getInitialComponent());
+	}
+
+	@Override
+	public String[] getPaneKeys() {
+		return paneKeys;
+	}
+
+	@Override
+	public TabbedPane getTabbedPane() {
+		return myTabbedPane;
+	}
+
+	@Override
+	public void event(UserRequest ureq, Component source, Event event) {
+		//
+	}
+
+	@Override
+	public void event(UserRequest ureq, Controller source, Event event) {
+		if (source == elementsEditCtrl) {
+			if (event == Event.CHANGED_EVENT) {
+				fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT);
+			}
+		} else if (source == readerCondContr) {
+			if (event == Event.CHANGED_EVENT) {
+				Condition cond = readerCondContr.getCondition();
+				courseNode.setPreConditionReader(cond);
+				fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT);
+			}
+		} else if (source == posterCondContr) {
+			if (event == Event.CHANGED_EVENT) {
+				Condition cond = posterCondContr.getCondition();
+				courseNode.setPreConditionPoster(cond);
+				fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT);
+			}
+		} else if (source == moderatorCondContr) {
+			if (event == Event.CHANGED_EVENT) {
+				Condition cond = moderatorCondContr.getCondition();
+				courseNode.setPreConditionModerator(cond);
+				fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT);
+			}
+		}
+	}
+
+	@Override
+	protected void doDispose() {
+		//
+	}
+
+	@Override
+	public void addTabs(TabbedPane tabbedPane) {
+		tabbedPane.addTab(translate(PANE_TAB_ACCESSIBILITY), accessContent);
+		tabbedPane.addTab(translate(PANE_TAB_DIALOGCONFIG), elementsEditCtrl.getInitialComponent());
+	}
+}
diff --git a/src/main/java/org/olat/course/nodes/dialog/ui/DialogCourseNodeRunController.java b/src/main/java/org/olat/course/nodes/dialog/ui/DialogCourseNodeRunController.java
new file mode 100644
index 0000000000000000000000000000000000000000..56abc8dbfe81b2fa80977138ac4646d7d837dc21
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/DialogCourseNodeRunController.java
@@ -0,0 +1,378 @@
+/**
+* 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.course.nodes.dialog.ui;
+
+import java.io.File;
+import java.util.List;
+import java.util.UUID;
+
+import org.olat.core.commons.controllers.linkchooser.LinkChooserController;
+import org.olat.core.commons.controllers.linkchooser.URLChoosenEvent;
+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.commons.services.notifications.NotificationsManager;
+import org.olat.core.commons.services.notifications.PublisherData;
+import org.olat.core.commons.services.notifications.SubscriptionContext;
+import org.olat.core.commons.services.notifications.ui.ContextualSubscriptionController;
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.Component;
+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.control.generic.closablewrapper.CloseableModalController;
+import org.olat.core.gui.control.generic.dtabs.Activateable2;
+import org.olat.core.id.context.ContextEntry;
+import org.olat.core.id.context.StateEntry;
+import org.olat.core.util.UserSession;
+import org.olat.core.util.Util;
+import org.olat.core.util.WebappHelper;
+import org.olat.core.util.resource.OresHelper;
+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.VFSLeaf;
+import org.olat.core.util.vfs.VFSManager;
+import org.olat.course.CourseModule;
+import org.olat.course.groupsandrights.CourseRights;
+import org.olat.course.nodes.DialogCourseNode;
+import org.olat.course.nodes.dialog.DialogElement;
+import org.olat.course.nodes.dialog.DialogElementsManager;
+import org.olat.course.nodes.dialog.DialogNodeForumCallback;
+import org.olat.course.nodes.dialog.ReadOnlyDialogNodeForumCallback;
+import org.olat.course.run.userview.NodeEvaluation;
+import org.olat.course.run.userview.UserCourseEnvironment;
+import org.olat.modules.fo.ForumCallback;
+import org.olat.modules.fo.Message;
+import org.olat.modules.fo.manager.ForumManager;
+import org.olat.repository.RepositoryEntry;
+import org.olat.repository.RepositoryManager;
+import org.olat.util.logging.activity.LoggingResourceable;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * Initial Date: 03.11.2005 <br>
+ * 
+ * @author guido
+ */
+public class DialogCourseNodeRunController extends BasicController implements Activateable2 {
+
+	private Link copyButton;
+	private Link backButton;
+	private Link uploadButton;
+	private final VelocityContainer mainVC;
+
+	private boolean isOlatAdmin;
+	private boolean isGuestOnly;
+	private DialogCourseNode courseNode;
+	private final RepositoryEntry entry;
+	private ForumCallback forumCallback;
+	private NodeEvaluation nodeEvaluation;
+	private SubscriptionContext subsContext;
+	private UserCourseEnvironment userCourseEnv;
+
+	private CloseableModalController cmc;
+	private FileUploadController fileUplCtr;
+	private LinkChooserController fileCopyCtr;
+	private DialogElementController dialogCtr;
+	private DialogElementListController filesCtrl;
+	private ContextualSubscriptionController csCtr;
+
+	@Autowired
+	private ForumManager forumManager;
+	@Autowired
+	private RepositoryManager repositoryManager;
+	@Autowired
+	private DialogElementsManager dialogElmsMgr;
+	@Autowired
+	private NotificationsManager notificationsManager;
+
+	public DialogCourseNodeRunController(UserRequest ureq, WindowControl wControl, DialogCourseNode courseNode, UserCourseEnvironment userCourseEnv,
+			NodeEvaluation nodeEvaluation) {
+		super(ureq, wControl);
+		this.nodeEvaluation = nodeEvaluation;
+		this.userCourseEnv = userCourseEnv;
+		this.courseNode = courseNode;
+		entry = userCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
+
+		addLoggingResourceable(LoggingResourceable.wrap(courseNode));
+
+		mainVC = createVelocityContainer("dialog");		
+
+		UserSession usess = ureq.getUserSession();
+		isOlatAdmin = usess.getRoles().isOLATAdmin();
+		isGuestOnly = usess.getRoles().isGuestOnly();
+		subsContext = isGuestOnly ? null : CourseModule.createSubscriptionContext(userCourseEnv.getCourseEnvironment(), courseNode);
+		forumCallback = userCourseEnv.isCourseReadOnly() ?
+				new ReadOnlyDialogNodeForumCallback(nodeEvaluation, isOlatAdmin, isGuestOnly, subsContext) :
+				new DialogNodeForumCallback(nodeEvaluation, isOlatAdmin, isGuestOnly, subsContext);
+		
+		if (subsContext != null) {
+			String businessPath = "[RepositoryEntry:" +entry.getKey() + "][CourseNode:" + courseNode.getIdent() + "]";
+			PublisherData pdata = new PublisherData(OresHelper.calculateTypeName(DialogElement.class), "", businessPath);
+			csCtr = new ContextualSubscriptionController(ureq, getWindowControl(), subsContext, pdata);
+			listenTo(csCtr);
+			mainVC.put("subscription", csCtr.getInitialComponent());
+		}
+		
+		backButton = LinkFactory.createLinkBack(mainVC, this);
+		
+		if (!userCourseEnv.isCourseReadOnly()
+			&& (isOlatAdmin
+					|| repositoryManager.isOwnerOfRepositoryEntry(getIdentity(), entry)
+					|| userCourseEnv.getCourseEnvironment().getCourseGroupManager().hasRight(getIdentity(), CourseRights.RIGHT_COURSEEDITOR))) {
+			copyButton = LinkFactory.createButton("dialog.copy.file", mainVC, this);
+		}
+		
+		if(forumCallback.mayOpenNewThread() && !userCourseEnv.isCourseReadOnly()) {
+			uploadButton = LinkFactory.createButton("dialog.upload.file", mainVC, this);
+			uploadButton.setIconLeftCSS("o_icon o_icon-fw o_icon_upload");
+			uploadButton.setElementCssClass("o_sel_dialog_upload");
+		}
+
+		filesCtrl = new DialogElementListController(ureq, getWindowControl(), userCourseEnv, courseNode, forumCallback, true);
+		listenTo(filesCtrl);
+		mainVC.put("files", filesCtrl.getInitialComponent());
+		putInitialPanel(mainVC);
+	}
+
+	@Override
+	protected void doDispose() {
+		//
+	}
+	
+	@Override
+	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
+		if(entries == null || entries.isEmpty()) return;
+
+		String name = entries.get(0).getOLATResourceable().getResourceableTypeName();
+		if("CourseNode".equals(name)) {
+			back(ureq);
+		} else if("Message".equals(name)) {
+			back(ureq);
+			activateByMessage(ureq, entries);
+		} else if("Element".equals(name)) {
+			back(ureq);
+			activateByDialogElement(ureq, entries.get(0).getOLATResourceable().getResourceableId());
+		}
+	}
+
+	@Override
+	public void event(UserRequest ureq, Controller source, Event event) {
+		if(filesCtrl == source) {
+			if(event instanceof SelectRowEvent) {
+				SelectRowEvent sde = (SelectRowEvent)event;
+				doDialog(ureq, sde.getRow());
+			}
+		} else if (source == fileUplCtr) {
+			if(event instanceof FolderEvent && FolderEvent.UPLOAD_EVENT.equals(event.getCommand())) {
+				doFinalizeUploadFile(fileUplCtr.getUploadedFile());
+			}
+			cmc.deactivate();
+			cleanUp();
+		} else if (source == fileCopyCtr) {
+			if (event == Event.DONE_EVENT || event == Event.CANCELLED_EVENT) {
+				filesCtrl.loadModel();
+			} else if (event instanceof URLChoosenEvent) {
+				URLChoosenEvent choosenEvent = (URLChoosenEvent)event;
+				String fileUrl = choosenEvent.getURL();
+				if(fileUrl.indexOf("://") < 0) {
+					doCopySelectedFile(fileUrl);
+					filesCtrl.loadModel();
+				}
+			}
+			cmc.deactivate();
+			cleanUp();
+		}  else if (source == cmc) {
+			cleanUp();
+		} 
+	}
+	
+	private void cleanUp() {
+		if(fileUplCtr != null && fileUplCtr.getUploadedFile() != null) {
+			fileUplCtr.getUploadedFile().getParentContainer().deleteSilently();
+		}
+		removeAsListenerAndDispose(fileCopyCtr);
+		removeAsListenerAndDispose(fileUplCtr);
+		removeAsListenerAndDispose(cmc);
+		fileCopyCtr = null;
+		fileUplCtr = null;
+		cmc = null;
+	}
+
+	@Override
+	public void event(UserRequest ureq, Component source, Event event) {
+		if (source == uploadButton){
+			doUploadFile(ureq);
+		} else if (source == copyButton) {
+			doCopy(ureq);
+		} else if(backButton == source) {
+			back(ureq);
+		}
+	}
+	
+	private void back(UserRequest ureq) {
+		mainVC.remove("forum");
+		if(dialogCtr != null) {
+			filesCtrl.load(dialogCtr.getElement());
+			removeAsListenerAndDispose(dialogCtr);
+			dialogCtr = null;
+		}
+		addToHistory(ureq);
+	}
+	
+	private void activateByMessage(UserRequest ureq, List<ContextEntry> entries) {
+		if(entries == null || entries.isEmpty()) return;
+		
+		Long messageKey = entries.get(0).getOLATResourceable().getResourceableId();
+		Message message = forumManager.getMessageById(messageKey);
+		if(message == null) return;
+			
+		DialogElement element = dialogElmsMgr.getDialogElementByForum(message.getForum().getKey());
+		if(!checkAccess(element)) {
+			return;
+		}
+		
+		dialogCtr = new DialogElementController(ureq, getWindowControl(), element, userCourseEnv, courseNode, nodeEvaluation);
+		listenTo(dialogCtr);
+		mainVC.put("forum", dialogCtr.getInitialComponent());
+		//activate message
+		dialogCtr.activate(ureq, entries, null);
+	}
+	
+	private void activateByDialogElement(UserRequest ureq, Long elementKey) {
+		DialogElement element = dialogElmsMgr.getDialogElementByKey(elementKey);
+		if(!checkAccess(element)) {
+			return;
+		}
+		
+		dialogCtr = new DialogElementController(ureq, getWindowControl(), element, userCourseEnv, courseNode, nodeEvaluation);
+		listenTo(dialogCtr);
+		mainVC.put("forum", dialogCtr.getInitialComponent());
+	}
+	
+	private boolean checkAccess(DialogElement element) {
+		return element != null && courseNode.getIdent().equals(element.getSubIdent()) && entry.equals(element.getEntry());
+	}
+	
+	private void doDialog(UserRequest ureq, DialogElementRow row) {
+		removeAsListenerAndDispose(dialogCtr);
+		
+		DialogElement element = dialogElmsMgr.getDialogElementByKey(row.getDialogElementKey());
+		if(element == null) {
+			showInfo("element.already.deleted");
+			filesCtrl.loadModel();
+		} else {
+			dialogCtr = new DialogElementController(ureq, getWindowControl(), element, userCourseEnv, courseNode, nodeEvaluation);
+			listenTo(dialogCtr);
+			mainVC.put("forum", dialogCtr.getInitialComponent());
+		}
+	}
+	
+	private void doUploadFile(UserRequest ureq) {
+		removeAsListenerAndDispose(fileUplCtr);
+		
+		VFSContainer tmpContainer = new LocalFolderImpl(new File(WebappHelper.getTmpDir(), "poster_" + UUID.randomUUID()));
+		fileUplCtr = new FileUploadController(getWindowControl(), tmpContainer, ureq,
+				FolderConfig.getLimitULKB(), Quota.UNLIMITED, null, false, false, false, false, true, false);
+		listenTo(fileUplCtr);
+		
+		cmc = new CloseableModalController(getWindowControl(), "close", fileUplCtr.getInitialComponent(),
+				true, translate("dialog.upload.file"));
+		listenTo(cmc);
+		cmc.activate();
+	}
+	
+	private void doFinalizeUploadFile(VFSLeaf file) {
+		//everything when well so save the property
+		DialogElement element = dialogElmsMgr.createDialogElement(entry, getIdentity(), file.getName(), file.getSize(), courseNode.getIdent());
+		VFSContainer dialogContainer = dialogElmsMgr.getDialogContainer(element);
+		VFSManager.copyContent(file.getParentContainer(), dialogContainer);
+
+		// inform subscription manager about new element
+		if (subsContext != null) {
+			notificationsManager.markPublisherNews(subsContext, getIdentity(), true);
+		}
+		filesCtrl.loadModel();
+	}
+	
+	private void doCopy(UserRequest ureq) {
+		VFSContainer courseContainer = userCourseEnv.getCourseEnvironment().getCourseFolderContainer();
+		fileCopyCtr = new MyLinkChooserController(ureq, getWindowControl(), courseContainer, null);
+		listenTo(fileCopyCtr);
+		
+		removeAsListenerAndDispose(cmc);
+		cmc = new CloseableModalController(getWindowControl(), "close", fileCopyCtr.getInitialComponent(),
+				true, translate("dialog.copy.file"));
+		listenTo(cmc);
+		cmc.activate();
+	}
+	
+	private void doCopySelectedFile(String fileUrl) {
+		VFSContainer courseContainer = userCourseEnv.getCourseEnvironment().getCourseFolderContainer();
+		VFSLeaf vl = (VFSLeaf) courseContainer.resolve(fileUrl);
+		DialogElement newElement = dialogElmsMgr.createDialogElement(entry, getIdentity(),
+				vl.getName(), vl.getSize(), courseNode.getIdent());
+		
+		//copy file
+		VFSContainer dialogContainer = dialogElmsMgr.getDialogContainer(newElement);
+		VFSLeaf copyVl = dialogContainer.createChildLeaf(vl.getName());
+		if(copyVl == null) {
+			copyVl = (VFSLeaf)dialogContainer.resolve(vl.getName());
+		}
+		VFSManager.copyContent(vl, copyVl);
+		
+		// inform subscription manager about new element
+		if (subsContext != null) {
+			notificationsManager.markPublisherNews(subsContext, getIdentity(), true);
+		}
+		filesCtrl.loadModel();
+	}
+	
+	private class MyLinkChooserController extends LinkChooserController {
+		
+		public MyLinkChooserController(UserRequest ureq, WindowControl wControl, VFSContainer rootDir, String uploadRelPath) {
+			super(ureq, wControl, rootDir, uploadRelPath, null, null, false, "", null, true);
+		}
+		
+		@Override
+		//this is a hack to overwrite the package used by the BasicController
+		protected VelocityContainer createVelocityContainer(String page) {
+			setTranslator(Util.createPackageTranslator(LinkChooserController.class, getLocale()));
+			velocity_root = Util.getPackageVelocityRoot(LinkChooserController.class);
+			return super.createVelocityContainer(page);
+		}
+
+		@Override
+		public void event(UserRequest ureq, Controller source, Event event) {
+			fireEvent(ureq, event);
+		}
+	}
+}
diff --git a/src/main/java/org/olat/course/nodes/dialog/ui/DialogElementController.java b/src/main/java/org/olat/course/nodes/dialog/ui/DialogElementController.java
new file mode 100644
index 0000000000000000000000000000000000000000..50eedc1a65931b604b500a89fec9711353e5ac76
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/DialogElementController.java
@@ -0,0 +1,155 @@
+/**
+ * <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.course.nodes.dialog.ui;
+
+import java.util.List;
+
+import org.olat.core.commons.services.notifications.SubscriptionContext;
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.Component;
+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.Event;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.controller.BasicController;
+import org.olat.core.gui.control.generic.dtabs.Activateable2;
+import org.olat.core.gui.media.NotFoundMediaResource;
+import org.olat.core.gui.util.CSSHelper;
+import org.olat.core.id.context.ContextEntry;
+import org.olat.core.id.context.StateEntry;
+import org.olat.core.logging.activity.CourseLoggingAction;
+import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
+import org.olat.core.util.Formatter;
+import org.olat.core.util.StringHelper;
+import org.olat.core.util.UserSession;
+import org.olat.core.util.resource.OresHelper;
+import org.olat.core.util.vfs.VFSLeaf;
+import org.olat.core.util.vfs.VFSMediaResource;
+import org.olat.course.CourseModule;
+import org.olat.course.nodes.CourseNode;
+import org.olat.course.nodes.dialog.DialogElement;
+import org.olat.course.nodes.dialog.DialogElementsManager;
+import org.olat.course.nodes.dialog.DialogNodeForumCallback;
+import org.olat.course.nodes.dialog.ReadOnlyDialogNodeForumCallback;
+import org.olat.course.run.userview.NodeEvaluation;
+import org.olat.course.run.userview.UserCourseEnvironment;
+import org.olat.modules.fo.Forum;
+import org.olat.modules.fo.ForumCallback;
+import org.olat.modules.fo.ui.ForumController;
+import org.olat.user.UserManager;
+import org.olat.util.logging.activity.LoggingResourceable;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * Initial date: 3 janv. 2018<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class DialogElementController extends BasicController implements Activateable2 {
+	
+	private final Link downloadLink;
+	private final VelocityContainer mainVC;
+	
+	private final ForumController forumCtr;
+	
+	private final DialogElement element;
+	
+	@Autowired
+	private UserManager userManager;
+	@Autowired
+	private DialogElementsManager dialogElmsMgr;
+	
+	public DialogElementController(UserRequest ureq, WindowControl wControl, DialogElement element,
+			UserCourseEnvironment userCourseEnv, CourseNode courseNode, NodeEvaluation nodeEvaluation) {
+		super(ureq, wControl);
+		this.element = element;
+
+		Forum forum = element.getForum();
+		UserSession usess = ureq.getUserSession();
+		boolean isOlatAdmin = usess.getRoles().isOLATAdmin();
+		boolean isGuestOnly = usess.getRoles().isGuestOnly();
+		
+		SubscriptionContext subsContext = CourseModule.createSubscriptionContext(userCourseEnv.getCourseEnvironment(), courseNode, forum.getKey().toString());
+		ForumCallback forumCallback = userCourseEnv.isCourseReadOnly() ?
+				new ReadOnlyDialogNodeForumCallback(nodeEvaluation, isOlatAdmin, isGuestOnly, subsContext) :
+				new DialogNodeForumCallback(nodeEvaluation, isOlatAdmin, isGuestOnly, subsContext);
+		forumCtr = new ForumController(ureq, wControl, forum, forumCallback, !isGuestOnly);		
+		listenTo(forumCtr);
+		
+		mainVC = createVelocityContainer("discussion");
+		
+		downloadLink = LinkFactory.createLink("download", "download", getTranslator(), mainVC, this, Link.LINK | Link.NONTRANSLATED);
+		downloadLink.setCustomDisplayText(StringHelper.escapeHtml(element.getFilename()));
+		downloadLink.setIconLeftCSS("o_icon o_icon-fw " + CSSHelper.createFiletypeIconCssClassFor(element.getFilename()));
+		downloadLink.setTarget("_blank");
+		
+		mainVC.contextPut("filename", StringHelper.escapeHtml(element.getFilename()));
+		if(element.getSize() != null && element.getSize().longValue() > 0) {
+			mainVC.contextPut("size", Formatter.formatBytes(element.getSize().longValue()));
+		}
+		String author = userManager.getUserDisplayName(element.getAuthor());
+		mainVC.contextPut("author", StringHelper.escapeHtml(author));
+		
+		mainVC.put("forum", forumCtr.getInitialComponent());
+		putInitialPanel(mainVC);
+		
+		addToHistory(ureq, OresHelper.createOLATResourceableInstance("Element", element.getKey()), null);
+	}
+	
+	public DialogElement getElement() {
+		return element;
+	}
+
+	@Override
+	protected void doDispose() {
+		//
+	}
+
+	@Override
+	protected void event(UserRequest ureq, Component source, Event event) {
+		if(downloadLink == source) {
+			doDownload(ureq);
+		}
+	}
+	
+	@Override
+	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
+		if(entries == null || entries.isEmpty()) return;
+		
+		String name = entries.get(0).getOLATResourceable().getResourceableTypeName();
+		if("Message".equals(name)) {
+			forumCtr.activate(ureq, entries, state);
+		}
+	}
+
+	private void doDownload(UserRequest ureq) {
+		VFSLeaf file = dialogElmsMgr.getDialogLeaf(element);
+		if(file != null) {
+			ureq.getDispatchResult().setResultingMediaResource(new VFSMediaResource(file));
+			ThreadLocalUserActivityLogger.log(CourseLoggingAction.DIALOG_ELEMENT_FILE_DOWNLOADED, getClass(),
+					LoggingResourceable.wrapBCFile(element.getFilename()));
+		} else {
+			ureq.getDispatchResult().setResultingMediaResource(new NotFoundMediaResource(element.getFilename()));
+			logError("No file to discuss: " + element, null);
+		}
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/nodes/dialog/ui/DialogElementListController.java b/src/main/java/org/olat/course/nodes/dialog/ui/DialogElementListController.java
new file mode 100644
index 0000000000000000000000000000000000000000..386796186a68f558276aa90fa79d724ea51ad349
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/DialogElementListController.java
@@ -0,0 +1,286 @@
+/**
+ * <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.course.nodes.dialog.ui;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.olat.basesecurity.BaseSecurityModule;
+import org.olat.core.gui.UserRequest;
+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.DownloadLink;
+import org.olat.core.gui.components.form.flexible.elements.FlexiTableElement;
+import org.olat.core.gui.components.form.flexible.elements.FormLink;
+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.elements.table.DefaultFlexiColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionEvent;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.StaticFlexiCellRenderer;
+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.generic.dtabs.Activateable2;
+import org.olat.core.gui.control.generic.modal.DialogBoxController;
+import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
+import org.olat.core.id.context.ContextEntry;
+import org.olat.core.id.context.StateEntry;
+import org.olat.core.logging.activity.CourseLoggingAction;
+import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
+import org.olat.core.util.Util;
+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.core.util.vfs.filters.VFSLeafFilter;
+import org.olat.course.CourseFactory;
+import org.olat.course.nodes.DialogCourseNode;
+import org.olat.course.nodes.dialog.DialogElement;
+import org.olat.course.nodes.dialog.DialogElementsManager;
+import org.olat.course.nodes.dialog.ui.DialogElementsTableModel.DialogCols;
+import org.olat.course.run.userview.UserCourseEnvironment;
+import org.olat.modules.fo.ForumCallback;
+import org.olat.modules.fo.manager.ForumManager;
+import org.olat.repository.RepositoryEntry;
+import org.olat.user.UserManager;
+import org.olat.user.propertyhandlers.UserPropertyHandler;
+import org.olat.util.logging.activity.LoggingResourceable;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * The list of files to discuss.
+ * 
+ * Initial date: 3 janv. 2018<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class DialogElementListController extends FormBasicController implements Activateable2 {
+	
+	public static final int USER_PROPS_OFFSET = 500;
+	public static final String usageIdentifyer = DialogElementsTableModel.class.getCanonicalName();
+	
+	private FlexiTableElement tableEl;
+	private DialogElementsTableModel tableModel;
+	
+	private int counter = 0;
+	private final boolean showForum;
+	private final DialogCourseNode courseNode;
+	private final ForumCallback forumCallback;
+	private final UserCourseEnvironment userCourseEnv;
+	private final boolean isAdministrativeUser;
+	private final List<UserPropertyHandler> userPropertyHandlers;
+
+	private DialogBoxController confirmDeletionCtr;
+
+	
+	@Autowired
+	private UserManager userManager;
+	@Autowired
+	private ForumManager forumManager;
+	@Autowired
+	private BaseSecurityModule securityModule;
+	@Autowired
+	private DialogElementsManager dialogElementsManager;
+	
+	public DialogElementListController(UserRequest ureq, WindowControl wControl, UserCourseEnvironment userCourseEnv,
+			DialogCourseNode courseNode, ForumCallback forumCallback, boolean showForum) {
+		super(ureq, wControl, "element_list");
+		setTranslator(Util.createPackageTranslator(DialogCourseNodeRunController.class, getLocale()));
+		setTranslator(userManager.getPropertyHandlerTranslator(getTranslator()));
+
+		this.showForum = showForum;
+		this.courseNode = courseNode;
+		this.userCourseEnv = userCourseEnv;
+		this.forumCallback = forumCallback;
+
+		isAdministrativeUser = securityModule.isUserAllowedAdminProps(ureq.getUserSession().getRoles());
+		userPropertyHandlers = userManager.getUserPropertyHandlersFor(usageIdentifyer, isAdministrativeUser);
+		
+		initForm(ureq);
+		loadModel();
+	}
+
+	@Override
+	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
+		FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(DialogCols.filename));
+
+		//list of user properties
+		if(isAdministrativeUser) {
+			columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(DialogCols.authorUsername));
+		}
+		
+		int colIndex = USER_PROPS_OFFSET;
+		for (int i = 0; i < userPropertyHandlers.size(); i++) {
+			UserPropertyHandler userPropertyHandler	= userPropertyHandlers.get(i);
+			boolean visible = UserManager.getInstance().isMandatoryUserProperty(usageIdentifyer , userPropertyHandler);
+			columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(visible, userPropertyHandler.i18nColumnDescriptorLabelKey(), colIndex, null, true, "userProp-" + colIndex));
+			colIndex++;
+		}
+		
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(DialogCols.date));
+		
+		if(showForum) {
+			columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(DialogCols.messages));
+			columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(DialogCols.newMessages));
+			StaticFlexiCellRenderer forumRenderer = new StaticFlexiCellRenderer(translate("dialog.start"), "forum", null, null);
+			forumRenderer.setIconRightCSS("o_icon o_icon-fw o_icon_start");
+			columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel("table.header.forum", -1, "forum", forumRenderer));
+		}
+		
+		if (!userCourseEnv.isCourseReadOnly() && forumCallback != null && forumCallback.mayDeleteMessageAsModerator()) {
+			StaticFlexiCellRenderer deleteRenderer = new StaticFlexiCellRenderer(translate("delete"), "delete", null, "o_icon o_icon_delete_item");
+			columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel("table.header.action", -1, "delete", deleteRenderer));
+		}
+				
+		tableModel = new DialogElementsTableModel(columnsModel);
+		tableEl = uifactory.addTableElement(getWindowControl(), "table", tableModel, getTranslator(), formLayout);
+		tableEl.setAndLoadPersistedPreferences(ureq, "dialog.elements");
+		tableEl.setPageSize(25);
+	}
+	
+	protected void loadModel() {
+		RepositoryEntry entry = userCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
+		List<DialogElement> elements = dialogElementsManager.getDialogElements(entry, courseNode.getIdent());
+		List<DialogElementRow> rows = new ArrayList<>(elements.size());
+
+		for (DialogElement element : elements) {
+			DialogElementRow row = new DialogElementRow(element, userPropertyHandlers, getLocale());
+
+			int msgCount = forumManager.countMessagesByForumID(element.getForum().getKey());
+			int newMsg = msgCount - forumManager.countReadMessagesByUserAndForum(getIdentity(), element.getForum().getKey());
+			row.setNumOfMessages(msgCount);
+			row.setNumOfUnreadMessages(newMsg);
+			
+			VFSLeaf item = dialogElementsManager.getDialogLeaf(element);
+			if(item != null) {
+				DownloadLink downloadLink = uifactory.addDownloadLink("file_" + (++counter), row.getFilename(), null, item, flc);
+				row.setDownloadLink(downloadLink);
+			}
+			rows.add(row);
+		}
+		tableModel.setObjects(rows);
+		tableEl.reset(true, true, true);
+	}
+	
+	protected void load(DialogElement element) {
+		if(element == null) return;
+		
+		List<DialogElementRow> rows = tableModel.getObjects();
+		for(DialogElementRow row:rows) {
+			if(element.getKey().equals(row.getDialogElementKey())) {
+				int msgCount = forumManager.countMessagesByForumID(element.getForum().getKey());
+				int newMsg = msgCount - forumManager.countReadMessagesByUserAndForum(getIdentity(), element.getForum().getKey());
+				row.setNumOfMessages(msgCount);
+				row.setNumOfUnreadMessages(newMsg);
+				tableEl.reset(false, false, true);
+			}
+		}
+	}
+
+	@Override
+	protected void doDispose() {
+		//
+	}
+
+	@Override
+	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
+		//
+	}
+
+	@Override
+	protected void event(UserRequest ureq, Controller source, Event event) {
+		if (source == confirmDeletionCtr) {
+			if (DialogBoxUIFactory.isYesEvent(event) || DialogBoxUIFactory.isOkEvent(event)) {
+				doDelete((DialogElementRow)confirmDeletionCtr.getUserObject());
+				loadModel();
+			}
+		}
+		super.event(ureq, source, event);
+	}
+
+	@Override
+	protected void formOK(UserRequest ureq) {
+		//
+	}
+
+	@Override
+	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
+		if(source == tableEl) {
+			if(event instanceof SelectionEvent) {
+				SelectionEvent se = (SelectionEvent)event;
+				DialogElementRow row = tableModel.getObject(se.getIndex());
+				if("forum".equals(se.getCommand())) {
+					fireEvent(ureq, new SelectRowEvent(row));
+				} else if("delete".equals(se.getCommand())) {
+					doConfirmDelete(ureq, row);
+				}
+			}
+		} else if(source instanceof FormLink) {
+			FormLink link = (FormLink)source;
+			String cmd = link.getCmd();
+			if("download".equals(cmd)) {
+				doFileDelivery(ureq, (DialogElement)link.getUserObject());
+			}
+		}
+		super.formInnerEvent(ureq, source, event);
+	}
+	
+	private void doConfirmDelete(UserRequest ureq, DialogElementRow row) {
+		String msg = translate("element.delete", row.getFilename());
+		confirmDeletionCtr = activateYesNoDialog(ureq, translate("delete"), msg, confirmDeletionCtr);
+		confirmDeletionCtr.setUserObject(row);
+	}
+	
+	private void doDelete(DialogElementRow rowToDelete) {
+		DialogElement elementToDelete = dialogElementsManager.getDialogElementByKey(rowToDelete.getDialogElementKey());
+		// archive data to personal folder
+		File exportDir = CourseFactory.getOrCreateDataExportDirectory(getIdentity(), courseNode.getShortTitle());
+		courseNode.doArchiveElement(elementToDelete, exportDir, getLocale());
+
+		dialogElementsManager.deleteDialogElement(elementToDelete);
+		//do logging
+		ThreadLocalUserActivityLogger.log(CourseLoggingAction.DIALOG_ELEMENT_FILE_DELETED, getClass(),
+				LoggingResourceable.wrapUploadFile(elementToDelete.getFilename()));
+	}
+	
+	/**
+	 * deliver the selected file and show in a popup
+	 * 
+	 * @param ureq
+	 * @param command
+	 */
+	private void doFileDelivery(UserRequest ureq, DialogElement element) {
+		VFSContainer forumContainer = dialogElementsManager.getDialogContainer(element);
+		List<VFSItem> items = forumContainer.getItems(new VFSLeafFilter());
+		if(items.size() > 0 && items.get(0) instanceof VFSLeaf) {
+			VFSLeaf vl = (VFSLeaf)items.get(0);
+			ureq.getDispatchResult().setResultingMediaResource(new VFSMediaResource(vl));
+			ThreadLocalUserActivityLogger.log(CourseLoggingAction.DIALOG_ELEMENT_FILE_DOWNLOADED, getClass(),
+					LoggingResourceable.wrapBCFile(vl.getName()));
+		} else {
+			logError("No file to discuss: " + forumContainer, null);
+		}
+	}
+}
diff --git a/src/main/java/org/olat/course/nodes/dialog/ui/DialogElementListEditController.java b/src/main/java/org/olat/course/nodes/dialog/ui/DialogElementListEditController.java
new file mode 100644
index 0000000000000000000000000000000000000000..97d17daccf66a794c0d409391dc847933d3273ff
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/DialogElementListEditController.java
@@ -0,0 +1,204 @@
+/**
+ * <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.course.nodes.dialog.ui;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.olat.basesecurity.BaseSecurityModule;
+import org.olat.core.gui.UserRequest;
+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.DownloadLink;
+import org.olat.core.gui.components.form.flexible.elements.FlexiTableElement;
+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.elements.table.DefaultFlexiColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionEvent;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.StaticFlexiCellRenderer;
+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.generic.modal.DialogBoxController;
+import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
+import org.olat.core.logging.activity.CourseLoggingAction;
+import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
+import org.olat.core.util.Util;
+import org.olat.core.util.vfs.VFSLeaf;
+import org.olat.course.CourseFactory;
+import org.olat.course.nodes.DialogCourseNode;
+import org.olat.course.nodes.dialog.DialogElement;
+import org.olat.course.nodes.dialog.DialogElementsManager;
+import org.olat.course.nodes.dialog.ui.DialogElementsTableModel.DialogCols;
+import org.olat.repository.RepositoryEntry;
+import org.olat.user.UserManager;
+import org.olat.user.propertyhandlers.UserPropertyHandler;
+import org.olat.util.logging.activity.LoggingResourceable;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * The list of files to discuss use in the course element editor.
+ * 
+ * Initial date: 3 janv. 2018<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class DialogElementListEditController extends FormBasicController {
+	
+	public static final int USER_PROPS_OFFSET = 500;
+	public static final String usageIdentifyer = DialogElementsTableModel.class.getCanonicalName();
+	
+	private FlexiTableElement tableEl;
+	private DialogElementsTableModel tableModel;
+	
+	private int counter = 0;
+	private final RepositoryEntry entry;
+	private final DialogCourseNode courseNode;
+	private final boolean isAdministrativeUser;
+	private final List<UserPropertyHandler> userPropertyHandlers;
+
+	private DialogBoxController confirmDeletionCtr;
+
+	@Autowired
+	private UserManager userManager;
+	@Autowired
+	private BaseSecurityModule securityModule;
+	@Autowired
+	private DialogElementsManager dialogElementsManager;
+	
+	public DialogElementListEditController(UserRequest ureq, WindowControl wControl, RepositoryEntry entry,
+			DialogCourseNode courseNode) {
+		super(ureq, wControl, "element_list");
+		setTranslator(Util.createPackageTranslator(DialogCourseNodeRunController.class, getLocale()));
+		setTranslator(userManager.getPropertyHandlerTranslator(getTranslator()));
+
+		this.entry = entry;
+		this.courseNode = courseNode;
+
+		isAdministrativeUser = securityModule.isUserAllowedAdminProps(ureq.getUserSession().getRoles());
+		userPropertyHandlers = userManager.getUserPropertyHandlersFor(usageIdentifyer, isAdministrativeUser);
+		
+		initForm(ureq);
+		loadModel();
+	}
+
+	@Override
+	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
+		FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(DialogCols.filename));
+
+		//list of user properties
+		if(isAdministrativeUser) {
+			columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(DialogCols.authorUsername));
+		}
+		
+		int colIndex = USER_PROPS_OFFSET;
+		for (int i = 0; i < userPropertyHandlers.size(); i++) {
+			UserPropertyHandler userPropertyHandler	= userPropertyHandlers.get(i);
+			boolean visible = UserManager.getInstance().isMandatoryUserProperty(usageIdentifyer , userPropertyHandler);
+			columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(visible, userPropertyHandler.i18nColumnDescriptorLabelKey(), colIndex, null, true, "userProp-" + colIndex));
+			colIndex++;
+		}
+		
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(DialogCols.date));
+
+		StaticFlexiCellRenderer deleteRenderer = new StaticFlexiCellRenderer(translate("delete"), "delete", null, "o_icon o_icon_delete_item");
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel("table.header.action", -1, "delete", deleteRenderer));
+				
+		tableModel = new DialogElementsTableModel(columnsModel);
+		tableEl = uifactory.addTableElement(getWindowControl(), "table", tableModel, getTranslator(), formLayout);
+		tableEl.setAndLoadPersistedPreferences(ureq, "dialog.elements");
+		tableEl.setPageSize(25);
+	}
+	
+	protected void loadModel() {
+		List<DialogElement> elements = dialogElementsManager.getDialogElements(entry, courseNode.getIdent());
+		List<DialogElementRow> rows = new ArrayList<>(elements.size());
+
+		for (DialogElement element : elements) {
+			DialogElementRow row = new DialogElementRow(element, userPropertyHandlers, getLocale());
+			VFSLeaf item = dialogElementsManager.getDialogLeaf(element);
+			if(item != null) {
+				DownloadLink downloadLink = uifactory.addDownloadLink("file_" + (++counter), row.getFilename(), null, item, flc);
+				row.setDownloadLink(downloadLink);
+			}
+			rows.add(row);
+		}
+		tableModel.setObjects(rows);
+		tableEl.reset(true, true, true);
+	}
+
+	@Override
+	protected void doDispose() {
+		//
+	}
+
+	@Override
+	protected void event(UserRequest ureq, Controller source, Event event) {
+		if (source == confirmDeletionCtr) {
+			if (DialogBoxUIFactory.isYesEvent(event) || DialogBoxUIFactory.isOkEvent(event)) {
+				doDelete((DialogElementRow)confirmDeletionCtr.getUserObject());
+				loadModel();
+			}
+		}
+		super.event(ureq, source, event);
+	}
+
+	@Override
+	protected void formOK(UserRequest ureq) {
+		//
+	}
+
+	@Override
+	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
+		if(source == tableEl) {
+			if(event instanceof SelectionEvent) {
+				SelectionEvent se = (SelectionEvent)event;
+				DialogElementRow row = tableModel.getObject(se.getIndex());
+				if("delete".equals(se.getCommand())) {
+					doConfirmDelete(ureq, row);
+				}
+			}
+		}
+		super.formInnerEvent(ureq, source, event);
+	}
+	
+	private void doConfirmDelete(UserRequest ureq, DialogElementRow row) {
+		String msg = translate("element.delete", row.getFilename());
+		confirmDeletionCtr = activateYesNoDialog(ureq, translate("delete"), msg, confirmDeletionCtr);
+		confirmDeletionCtr.setUserObject(row);
+	}
+	
+	private void doDelete(DialogElementRow rowToDelete) {
+		DialogElement elementToDelete = dialogElementsManager.getDialogElementByKey(rowToDelete.getDialogElementKey());
+		// archive data to personal folder
+		File exportDir = CourseFactory.getOrCreateDataExportDirectory(getIdentity(), courseNode.getShortTitle());
+		courseNode.doArchiveElement(elementToDelete, exportDir, getLocale());
+
+		dialogElementsManager.deleteDialogElement(elementToDelete);
+		//do logging
+		ThreadLocalUserActivityLogger.log(CourseLoggingAction.DIALOG_ELEMENT_FILE_DELETED, getClass(),
+				LoggingResourceable.wrapUploadFile(elementToDelete.getFilename()));
+	}
+}
diff --git a/src/main/java/org/olat/course/nodes/dialog/ui/DialogElementRow.java b/src/main/java/org/olat/course/nodes/dialog/ui/DialogElementRow.java
new file mode 100644
index 0000000000000000000000000000000000000000..fe455dd98fdecd41f99739d76dfc64c949e140d4
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/DialogElementRow.java
@@ -0,0 +1,90 @@
+/**
+ * <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.course.nodes.dialog.ui;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+
+import org.olat.core.gui.components.form.flexible.elements.DownloadLink;
+import org.olat.course.nodes.dialog.DialogElement;
+import org.olat.user.UserPropertiesRow;
+import org.olat.user.propertyhandlers.UserPropertyHandler;
+
+/**
+ * 
+ * Initial date: 4 janv. 2018<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class DialogElementRow extends UserPropertiesRow {
+	
+	private final DialogElement element;
+	
+	private DownloadLink downloadLink;
+	
+	private int numOfMessages;
+	private int numOfUnreadMessages;
+	
+	public DialogElementRow(DialogElement element, List<UserPropertyHandler> userPropertyHandlers, Locale locale) {
+		super(element.getAuthor(), userPropertyHandlers, locale);
+		this.element = element;
+	}
+	
+	public Date getCreationDate() {
+		return element.getCreationDate();
+	}
+	
+	public String getFilename() {
+		return element.getFilename();
+	}
+	
+	public Long getSize() {
+		return element.getSize();
+	}
+
+	public int getNumOfMessages() {
+		return numOfMessages;
+	}
+
+	public void setNumOfMessages(int numOfMessages) {
+		this.numOfMessages = numOfMessages;
+	}
+
+	public int getNumOfUnreadMessages() {
+		return numOfUnreadMessages;
+	}
+
+	public void setNumOfUnreadMessages(int numOfUnreadMessages) {
+		this.numOfUnreadMessages = numOfUnreadMessages;
+	}
+	
+	public Long getDialogElementKey() {
+		return element.getKey();
+	}
+
+	public DownloadLink getDownloadLink() {
+		return downloadLink;
+	}
+
+	public void setDownloadLink(DownloadLink downloadLink) {
+		this.downloadLink = downloadLink;
+	}
+}
diff --git a/src/main/java/org/olat/course/nodes/dialog/ui/DialogElementsEditController.java b/src/main/java/org/olat/course/nodes/dialog/ui/DialogElementsEditController.java
new file mode 100644
index 0000000000000000000000000000000000000000..c7979877b5f32c65dad761e7860dce9d168e6c3e
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/DialogElementsEditController.java
@@ -0,0 +1,175 @@
+/**
+ * <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.course.nodes.dialog.ui;
+
+import java.io.File;
+import java.util.UUID;
+
+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.commons.services.notifications.NotificationsManager;
+import org.olat.core.commons.services.notifications.SubscriptionContext;
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.Component;
+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.control.generic.closablewrapper.CloseableModalController;
+import org.olat.core.logging.activity.CourseLoggingAction;
+import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
+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.VFSLeaf;
+import org.olat.core.util.vfs.VFSManager;
+import org.olat.course.CourseModule;
+import org.olat.course.nodes.DialogCourseNode;
+import org.olat.course.nodes.dialog.DialogElement;
+import org.olat.course.nodes.dialog.DialogElementsManager;
+import org.olat.course.run.environment.CourseEnvironment;
+import org.olat.repository.RepositoryEntry;
+import org.olat.util.logging.activity.LoggingResourceable;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * Initial date: 4 janv. 2018<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class DialogElementsEditController extends BasicController {
+	
+	private final Link uploadButton;
+	private final VelocityContainer mainVC;
+	
+	private DialogConfigForm configForumLaunch;
+	private FileUploadController fileUplCtr;
+	private CloseableModalController cmc;
+	private DialogElementListEditController elementListCtrl;
+	
+	private final DialogCourseNode courseNode;
+	private final CourseEnvironment courseEnv;
+	private final RepositoryEntry entry;
+
+	@Autowired
+	private DialogElementsManager dialogElmsMgr;
+	@Autowired
+	private NotificationsManager notificationsManager;
+	
+	public DialogElementsEditController(UserRequest ureq, WindowControl wControl, CourseEnvironment courseEnv, DialogCourseNode courseNode) {
+		super(ureq, wControl);
+		this.courseNode = courseNode;
+		this.courseEnv = courseEnv;
+		entry = courseEnv.getCourseGroupManager().getCourseEntry();
+		
+		mainVC = createVelocityContainer("edit");
+		
+		uploadButton = LinkFactory.createButton("dialog.upload.file", mainVC, this);
+		uploadButton.setIconLeftCSS("o_icon o_icon-fw o_icon_upload");
+		uploadButton.setElementCssClass("o_sel_dialog_upload");
+		
+		configForumLaunch = new DialogConfigForm(ureq, getWindowControl(), courseNode.getModuleConfiguration());
+		listenTo(configForumLaunch);
+		mainVC.put("showForumAsPopupConfigForm", configForumLaunch.getInitialComponent());
+		
+		elementListCtrl = new DialogElementListEditController(ureq, getWindowControl(), entry, courseNode);
+		listenTo(elementListCtrl);
+		mainVC.put("dialogElementsTable", elementListCtrl.getInitialComponent());
+		
+		putInitialPanel(mainVC);
+	}
+
+	@Override
+	protected void doDispose() {
+		//
+	}
+
+	@Override
+	protected void event(UserRequest ureq, Component source, Event event) {
+		if (source == uploadButton) {
+			doUpload(ureq);
+		}
+	}
+	
+	@Override
+	protected void event(UserRequest ureq, Controller source, Event event) {
+		if(configForumLaunch == source) {
+			fireEvent(ureq, event);
+		} else if (source == fileUplCtr) {
+			if (event == Event.DONE_EVENT || event == Event.CANCELLED_EVENT) {
+				elementListCtrl.loadModel();
+			} else if (event.getCommand().equals(FolderEvent.UPLOAD_EVENT)) {
+				doFinalizeUploadFile(fileUplCtr.getUploadedFile());
+			}
+			cmc.deactivate();
+			cleanUp();
+		} else if(cmc == source) {
+			cleanUp();
+		}
+		super.event(ureq, source, event);
+	}
+	
+	private void cleanUp() {
+		if(fileUplCtr != null && fileUplCtr.getUploadedFile() != null) {
+			fileUplCtr.getUploadedFile().getParentContainer().deleteSilently();
+		}
+		removeAsListenerAndDispose(fileUplCtr);
+		removeAsListenerAndDispose(cmc);
+		fileUplCtr = null;
+		cmc = null;
+	}
+	
+	private void doUpload(UserRequest ureq) {
+		removeAsListenerAndDispose(fileUplCtr);
+		
+		VFSContainer tmpContainer = new LocalFolderImpl(new File(WebappHelper.getTmpDir(), "poster_" + UUID.randomUUID()));
+		fileUplCtr = new FileUploadController(getWindowControl(), tmpContainer, ureq,
+				FolderConfig.getLimitULKB(), Quota.UNLIMITED, null, false, false, false, false, true, false);
+		listenTo(fileUplCtr);
+		
+		cmc = new CloseableModalController(getWindowControl(), "close", fileUplCtr.getInitialComponent(),
+				true, translate("dialog.upload.file"));
+		listenTo(cmc);
+		cmc.activate();
+	}
+	
+	private void doFinalizeUploadFile(VFSLeaf file) {
+		if(file == null) return;
+		
+		//everything when well so save the property
+		DialogElement element = dialogElmsMgr.createDialogElement(entry, getIdentity(), file.getName(), file.getSize(), courseNode.getIdent());
+		VFSContainer dialogContainer = dialogElmsMgr.getDialogContainer(element);
+		VFSManager.copyContent(file.getParentContainer(), dialogContainer);
+
+		// inform subscription manager about new element
+		SubscriptionContext subsContext = CourseModule.createSubscriptionContext(courseEnv, courseNode);
+		notificationsManager.markPublisherNews(subsContext, getIdentity(), true);
+
+		ThreadLocalUserActivityLogger.log(CourseLoggingAction.DIALOG_ELEMENT_FILE_UPLOADED, getClass(),
+				LoggingResourceable.wrapUploadFile(file.getName()));
+		elementListCtrl.loadModel();
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/nodes/dialog/ui/DialogElementsTableModel.java b/src/main/java/org/olat/course/nodes/dialog/ui/DialogElementsTableModel.java
new file mode 100644
index 0000000000000000000000000000000000000000..2db241a637755bf4416ce1563f74f098b0b2eb41
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/DialogElementsTableModel.java
@@ -0,0 +1,93 @@
+/**
+ * <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.course.nodes.dialog.ui;
+
+import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiSortableColumnDef;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
+
+/**
+ * 
+ * Initial date: 3 janv. 2018<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class DialogElementsTableModel extends DefaultFlexiTableDataModel<DialogElementRow> {
+
+	public DialogElementsTableModel(FlexiTableColumnModel columnModel) {
+		super(columnModel);
+	}
+
+	@Override
+	public Object getValueAt(int row, int col) {
+		DialogElementRow entry = getObject(row);
+
+		if(col >= 0 && col < DialogCols.values().length) {
+			switch (DialogCols.values()[col]) {
+				case filename: return entry.getDownloadLink();
+				case authorUsername: return entry.getIdentityName();
+				case filesize: return entry.getSize();
+				case date: return entry.getCreationDate();
+				case newMessages: return entry.getNumOfUnreadMessages();
+				case messages: return entry.getNumOfMessages();
+				default: return "ERROR";
+			}
+		}
+		
+		int propPos = col - DialogElementListController.USER_PROPS_OFFSET;
+		return entry.getIdentityProp(propPos);
+	}
+
+	@Override
+	public DialogElementsTableModel createCopyWithEmptyList() {
+		return new DialogElementsTableModel(getTableColumnModel());
+	}	
+	
+	public enum DialogCols implements FlexiSortableColumnDef {
+		filename("table.header.filename"),
+		forum("table.header.forum"),
+		authorUsername("table.header.author"),
+		filesize("table.header.size"),
+		date("table.header.date"),
+		newMessages("table.header.newmessages"),
+		messages("table.header.messages");
+
+		private final String i18nKey;
+		
+		private DialogCols(String i18nKey) {
+			this.i18nKey = i18nKey;
+		}
+		
+		@Override
+		public String i18nHeaderKey() {
+			return i18nKey;
+		}
+
+		@Override
+		public boolean sortable() {
+			return true;
+		}
+
+		@Override
+		public String sortKey() {
+			return name();
+		}
+	}
+}
diff --git a/src/main/java/org/olat/course/nodes/dialog/ui/SelectRowEvent.java b/src/main/java/org/olat/course/nodes/dialog/ui/SelectRowEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..10d441aed06e884ab2814d402676f039ab5bafa6
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/SelectRowEvent.java
@@ -0,0 +1,46 @@
+/**
+ * <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.course.nodes.dialog.ui;
+
+import org.olat.core.gui.control.Event;
+
+/**
+ * 
+ * Initial date: 3 janv. 2018<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class SelectRowEvent extends Event {
+
+	private static final long serialVersionUID = 4917075734706780265L;
+
+	public static final String SELECT_DISCUSSION = "select-discussion";
+	
+	private final DialogElementRow element;
+	
+	public SelectRowEvent(DialogElementRow element) {
+		super(SELECT_DISCUSSION);
+		this.element = element;
+	}
+
+	public DialogElementRow getRow() {
+		return element;
+	}
+}
diff --git a/src/main/java/org/olat/course/nodes/dialog/ui/_content/dialog.html b/src/main/java/org/olat/course/nodes/dialog/ui/_content/dialog.html
new file mode 100644
index 0000000000000000000000000000000000000000..19986bcfb2528ba8ae557c68aadfb587c9c834a7
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_content/dialog.html
@@ -0,0 +1,19 @@
+<div class="o_sel_dialog">
+#if($r.available("forum"))
+	<div class="clearfix">$r.render("backLink")</div>
+	$r.render("forum")
+#else
+	<div class="clearfix">
+	    #if($r.available("subscription"))
+			$r.render("subscription")	
+	    #end
+		#if($r.available("dialog.upload.file"))
+			$r.render("dialog.upload.file")
+		#end
+		#if ($r.available("dialog.copy.file"))
+			$r.render("dialog.copy.file")
+		#end
+	</div>
+	$r.render("files")
+#end
+</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/nodes/dialog/ui/_content/discussion.html b/src/main/java/org/olat/course/nodes/dialog/ui/_content/discussion.html
new file mode 100644
index 0000000000000000000000000000000000000000..23be36caa42813aaaf4b05f2d9d2d9ff18933c09
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_content/discussion.html
@@ -0,0 +1,16 @@
+<div class="panel panel-default o_block_large_top">
+	<div class="panel-heading">
+		<h3 class="panel-title">$r.translate("dialog.selected.element"): 
+		<i class="o_icon o_icon-fw $r.getFiletypeIconCss($filename)"> </i> $filename</h3>
+	</div>
+	<table class="table table-bordered table-condensed">
+		<tr><th>$r.translate("table.header.filename")</th><td>$r.render("download")</td></tr>
+		#if($r.isNotEmpty($size))
+		<tr><th>$r.translate("table.header.size")</th><td>$size</td></tr>
+		#end
+		#if($r.isNotEmpty($size))
+		<tr><th>$r.translate("table.header.author")</th><td>$author</td></tr>
+		#end
+	</table>
+</div>
+$r.render("forum")
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/nodes/dialog/ui/_content/edit.html b/src/main/java/org/olat/course/nodes/dialog/ui/_content/edit.html
new file mode 100644
index 0000000000000000000000000000000000000000..4d5da978b9fb454315f919ac423638c947883a43
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_content/edit.html
@@ -0,0 +1,7 @@
+<fieldset class="o_sel_dialog_settings_upload">
+	<div class="o_button_group o_button_group_right">
+		$r.render("dialog.upload.file")
+		$r.contextHelpWithWrapper("Communication and Collaboration#_dateidiskussion")
+	</div>
+	$r.render("dialogElementsTable")
+</fieldset>
diff --git a/src/main/java/org/olat/course/nodes/dialog/_content/edit_access.html b/src/main/java/org/olat/course/nodes/dialog/ui/_content/edit_access.html
similarity index 100%
rename from src/main/java/org/olat/course/nodes/dialog/_content/edit_access.html
rename to src/main/java/org/olat/course/nodes/dialog/ui/_content/edit_access.html
diff --git a/src/main/java/org/olat/course/nodes/dialog/ui/_content/element_list.html b/src/main/java/org/olat/course/nodes/dialog/ui/_content/element_list.html
new file mode 100644
index 0000000000000000000000000000000000000000..bade9402acda206e8171adcb2d85adb1b884ea54
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_content/element_list.html
@@ -0,0 +1 @@
+$r.render("table")
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_ar.properties
similarity index 51%
rename from src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_ar.properties
rename to src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_ar.properties
index 6cbced0195631e70dbda778b87d13d0d1f42a66e..6aa14af5fa9a0ffa3186ee7937c095b81a3f67e6 100644
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_ar.properties
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_ar.properties
@@ -1,15 +1,4 @@
-#Mon Sep 13 20:18:04 CEST 2010
-
-
-
-
-
-
-
-
-
-
-
+#Thu Jan 04 12:35:06 CET 2018
 command.closesp=\u0625\u063A\u0644\u0627\u0642 \u0627\u0644\u0646\u0627\u0641\u0630\u0629
 command.show=\u0639\u0631\u0636 \u0645\u062D\u062A\u0648\u0649 \u0627\u0644\u062A\u0639\u0644\u064A\u0645
 command.showpopup=\u0639\u0631\u0636 \u0645\u062D\u062A\u0648\u0649 \u0627\u0644\u062A\u0639\u0644\u064A\u0645 \u0641\u0649 \u0646\u0627\u0641\u0630\u0629 \u062C\u062F\u064A\u062F\u0629
@@ -21,16 +10,25 @@ dialog.ablage.config.title=\u0645\u0644\u0641 \u062D\u0648\u0627\u0631
 dialog.folder.name=\u0645\u062C\u0644\u062F \u0627\u0644\u062A\u062E\u0632\u064A\u0646
 dialog.forum.config.title=\u062A\u062E\u0632\u064A\u0646
 dialog.forum.popup.config.title=\u0645\u0646\u062A\u062F\u0649
+dialog.selected.element=\u0645\u0644\u0641 \u0627\u0644\u0645\u0646\u0627\u0642\u0634\u0629
 dialog.start=\u0623\u0628\u062F\u0623
 dialog.upload.file=\u062A\u062D\u0645\u064A\u0644 \u0645\u0644\u0641
+element.already.deleted=\u0644\u0642\u062F \u062A\u0645 \u062D\u0630\u0641 \u0627\u0644\u0639\u0646\u0635\u0631 \u0627\u0644\u0645\u062D\u062F\u062F \u0645\u0646 \u0642\u0628\u0644 \u0645\u0633\u062A\u062E\u062F\u0645 \u0622\u062E\u0631\u060C \u064A\u0631\u062C\u0649 \u062A\u062D\u062F\u064A\u062B \u0639\u0631\u0636 \u0627\u0644\u062C\u062F\u0648\u0644.
+element.delete=\u0648\u0627\u0644\u0645\u0646\u062A\u062F\u0649\u061F(<b>{0}</b>) \u0647\u0644 \u062A\u0631\u064A\u062F \u0641\u0639\u0644\u0627\u064B \u062A\u0631\u064A\u062F \u062D\u0630\u0641 \u0627\u0644\u0645\u0644\u0641\r\n \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0633\u0648\u0641 \u064A\u062A\u0645 \u062D\u0641\u0638\u0647\u0627 \u062A\u0644\u0642\u0627\u0626\u064A\u0627\u064B \u0641\u0649 \u0627\u0644\u0645\u062C\u0644\u062F \u0627\u0644\u0634\u062E\u0635\u0649\u060C \u0642\u0633\u0645 \u0627\u0644\u0623\u0631\u0634\u064A\u0641.
 folder.info=\u0645\u0644\u0641 \u062D\u0648\u0627\u0631
 folder.open=\u0641\u062A\u062D \u0645\u062C\u0644\u062F
-
-
-
-
-
+notifications.entry={2} \u0645\u0644\u0641 \u062C\u062F\u064A\u062F \u0628\u0627\u0633\u0645 \:{0} \u0645\u0646 {1} \u0648\u0641\u0649\r\n \u062A\u0645 \u0625\u0646\u0634\u0627\u0626\u0647
+notifications.header="{0}" \u0645\u0644\u0641 \u062D\u0648\u0631 \u0641\u0649 \u0627\u0644\u0645\u0642\u0631\u0631
 pane.tab.accessibility=\u0648\u0635\u0648\u0644
 pane.tab.dialogconfig=\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0645\u0646\u062A\u062F\u0649/\u0627\u0644\u062A\u062E\u0632\u064A\u0646
 selection.forumAsPopup.label=\u0641\u062A\u062D \u0645\u0646\u062A\u062F\u0649 \u0641\u0649 \u0646\u0627\u0641\u0630\u0629 \u0645\u0646\u0628\u062B\u0642\u0629\u061F
+table.header.action=\u0645\u0644\u0641
+table.header.author=\u0627\u0644\u0645\u0624\u0644\u0641
+table.header.date=\u0627\u0644\u062A\u0627\u0631\u064A\u062E
+table.header.filename=\u0627\u0633\u0645 \u0627\u0644\u0645\u0644\u0641
+table.header.filetype=\u0646\u0648\u0639 \u0627\u0644\u0645\u0644\u0641
+table.header.forum=\u0627\u0644\u0645\u0646\u0627\u0642\u0634\u0629
+table.header.messages=\u0631\u0633\u0627\u0626\u0644
+table.header.newmessages=\u063A\u064A\u0631 \u0645\u0642\u0631\u0624\u0629
+table.header.size=\u062D\u062C\u0645 \u0627\u0644\u0645\u0644\u0641
 title_dialog=\u0645\u0644\u0641 \u062D\u0648\u0627\u0631
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_bg.properties
similarity index 51%
rename from src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_bg.properties
rename to src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_bg.properties
index 65f80a2110ce47c0898902730c899ff522f1ec50..518ffcb42a01a9b09b5bd5e8433afccb4c1aef02 100644
--- a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_bg.properties
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_bg.properties
@@ -1,11 +1,27 @@
-#Wed Jun 03 20:15:31 CEST 2009
+#Thu Jan 04 12:35:06 CET 2018
+command.closesp=\u0417\u0430\u0442\u0432\u043E\u0440\u0435\u0442\u0435 \u043F\u0440\u043E\u0437\u043E\u0440\u0435\u0446
+command.show=\u041F\u043E\u043A\u0430\u0436\u0435\u0442\u0435 \u0443\u0447\u0435\u0431\u043D\u043E \u0441\u044A\u0434\u044A\u0440\u0436\u0430\u043D\u0438\u0435
+command.showpopup=\u041F\u043E\u043A\u0430\u0436\u0435\u0442\u0435 \u0443\u0447\u0435\u0431\u043D\u043E \u0441\u044A\u0434\u044A\u0440\u0436\u0430\u043D\u0438\u0435 \u0432 \u043D\u043E\u0432 \u043F\u0440\u043E\u0437\u043E\u0440\u0435\u0446
+condition.accessModerator.title=\u041A\u0430\u0447\u0435\u0442\u0435 / \u0438\u0437\u0442\u0435\u0433\u043B\u0435\u0442\u0435 \u0444\u0430\u0439\u043B\u043E\u0432\u0435 / \u043C\u043E\u0434\u0435\u0440\u0438\u0440\u0430\u0439\u0442\u0435 \u0444\u043E\u0440\u0443\u043C
+condition.accessPoster.title=\u041A\u0430\u0447\u0435\u0442\u0435 / \u0438\u0437\u0442\u0435\u0433\u043B\u0435\u0442\u0435 \u0444\u0430\u0439\u043B\u043E\u0432\u0435 / \u043F\u0440\u043E\u0447\u0435\u0442\u0435\u0442\u0435/\u043F\u0438\u0448\u0435\u0442\u0435 \u0432\u044A\u0432 \u0444\u043E\u0440\u0443\u043C
+condition.accessReader.title=\u0418\u0437\u0442\u0435\u0433\u043B\u0435\u0442\u0435 \u0444\u0430\u0439\u043B\u043E\u0432\u0435 / \u043F\u0440\u043E\u0447\u0435\u0442\u0435\u0442\u0435 \u0444\u043E\u0440\u0443\u043C
+condition.accessibility.title=\u0414\u043E\u0441\u0442\u044A\u043F
+dialog.ablage.config.title=\u0424\u0430\u0439\u043B\u043E\u0432 \u0434\u0438\u0430\u043B\u043E\u0433
+dialog.folder.name=\u041F\u0430\u043F\u043A\u0430
+dialog.forum.config.title=\u0421\u044A\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435
+dialog.forum.popup.config.title=\u0424\u043E\u0440\u0443\u043C
 dialog.selected.element=\u0422\u0435\u043C\u0430 \u0437\u0430 \u0434\u0438\u0441\u043A\u0443\u0441\u0438\u044F
 dialog.start=\u041E\u0442\u0432\u043E\u0440\u0435\u0442\u0435
 dialog.upload.file=\u041A\u0430\u0447\u0435\u0442\u0435 \u0444\u0430\u0439\u043B
 element.already.deleted=\u0418\u0437\u0431\u0440\u0430\u043D\u0438\u044F\u0442 \u0435\u043B\u0435\u043C\u0435\u043D\u0442 \u0435 \u0438\u0437\u0442\u0440\u0438\u0442 \u043E\u0442 \u0434\u0440\u0443\u0433 \u043F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B. \u041C\u043E\u043B\u044F, \u043F\u0440\u0435\u0437\u0430\u0440\u0435\u0434\u0435\u0442\u0435 \u043F\u0440\u0435\u0433\u043B\u0435\u0434\u0430 \u043D\u0430 \u0442\u0430\u0431\u043B\u0438\u0446\u0430.
 element.delete=\u041D\u0430\u0438\u0441\u0442\u0438\u043D\u0430 \u043B\u0438 \u0438\u0441\u043A\u0430\u0442\u0435 \u0434\u0430 \u0438\u0437\u0442\u0440\u0438\u0435\u0442\u0435 \u0444\u0430\u0439\u043B\u0430 (<b>{0}</b>) \u0438 \u043D\u0435\u0433\u043E\u0432\u0438\u044F \u0444\u043E\u0440\u0443\u043C? \u0414\u0430\u043D\u043D\u0438\u0442\u0435 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u043D\u043E \u0449\u0435 \u0431\u044A\u0434\u0430\u0442 \u0430\u0440\u0445\u0438\u0432\u0438\u0440\u0430\u043D\u0438 \u0432\u044A\u0432 \u0432\u0430\u0448\u0430\u0442\u0430 \u043B\u0438\u0447\u043D\u0430 \u043F\u0430\u043F\u043A\u0430, \u0441\u0435\u043A\u0446\u0438\u044F "\u0410\u0440\u0445\u0438\u0432".
+folder.info=\u0424\u0430\u0439\u043B\u043E\u0432 \u0434\u0438\u0430\u043B\u043E\u0433
+folder.open=\u041E\u0442\u0432\u043E\u0440\u0435\u0442\u0435 \u043F\u0430\u043F\u043A\u0430
 notifications.entry=\u041D\u043E\u0432 \u0444\u0430\u0439\u043B \u0441 \u0444\u0430\u0439\u043B\u043E\u0432\u043E \u0438\u043C\u0435\:{0} \u043E\u0442 {1} \u0441\u044A\u0437\u0434\u0430\u0434\u0435\u043D \u043D\u0430 {2}
 notifications.header=\u0418\u043C\u0430 \u043D\u043E\u0432\u0438 \u0444\u0430\u0439\u043B\u043E\u0432\u0435 \u0432 \u043A\u0443\u0440\u0441\u043E\u0432\u0438\u044F \u043C\u043E\u0434\u0443\u043B "\u0424\u0430\u0439\u043B\u043E\u0432 \u0434\u0438\u0430\u043B\u043E\u0433"
+pane.tab.accessibility=\u0414\u043E\u0441\u0442\u044A\u043F
+pane.tab.dialogconfig=\u041A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044F \u043D\u0430 \u0444\u043E\u0440\u0443\u043C/\u0441\u044A\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435
+selection.forumAsPopup.label=\u041E\u0442\u0432\u043E\u0440\u0435\u0442\u0435 \u0444\u043E\u0440\u0443\u043C\u0430 \u0432 \u0438\u0437\u043A\u0430\u0447\u0430\u0449 \u043F\u0440\u043E\u0437\u043E\u0440\u0435\u0446?
 table.header.action=\u0424\u0430\u0439\u043B
 table.header.author=\u0410\u0432\u0442\u043E\u0440
 table.header.date=\u0414\u0430\u0442\u0430
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_cs.properties
similarity index 52%
rename from src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_cs.properties
rename to src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_cs.properties
index bf93baf2d4fa96ff0b2b8330a82d5e178152c8e9..cd4ad93f42f9c019fa9485eb3465f95c49edd810 100644
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_cs.properties
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_cs.properties
@@ -1,14 +1,4 @@
-#Wed Jul 28 13:33:32 CEST 2010
-
-
-
-
-
-
-
-
-
-
+#Thu Jan 04 12:35:06 CET 2018
 command.closesp=Zav\u0159\u00EDt okno
 command.show=Zobrazit studijn\u00ED obsah
 command.showpopup=Zobrazit studijn\u00ED obsah v nov\u00E9m okn\u011B
@@ -20,14 +10,24 @@ dialog.ablage.config.title=Dialog souboru
 dialog.folder.name=Slo\u017Eka
 dialog.forum.config.title=Uskladn\u011Bn\u00ED
 dialog.forum.popup.config.title=F\u00F3rum
+dialog.selected.element=T\u00E9ma diskuze
 dialog.start=Za\u010D\u00EDt
 dialog.upload.file=Nahr\u00E1t soubor
+element.already.deleted=Vybran\u00E9 elementy byly smaz\u00E1ny jin\u00FDm u\u017Eivatelem. Pros\u00EDm obnovte zobrazen\u00ED tabulky.
+element.delete=Opravdu chcete smazat soubor (<b>{0}</b>) a jeho diskuzi? Data budou automticky archivov\u00E1na ve Va\u0161\u00ED osobn\u00ED slo\u017Ece, v sekci 'archive'.
 folder.info=Dialog souboru
 folder.open=Otev\u0159\u00EDt slo\u017Eku
-
-
-
-
+notifications.entry=Nov\u00FD soubor  jm\u00E9nem {0} od {1} vytvo\u0159en v {2}
+notifications.header=V modulu kurzu "Dialog souboru" je nov\u00FD soubor
 pane.tab.accessibility=P\u0159\u00EDstup
 pane.tab.dialogconfig=Konfigurace F\u00F3ra
 selection.forumAsPopup.label=Otev\u0159\u00EDt f\u00F3rum v popup okn\u011B?
+table.header.action=Soubor
+table.header.author=Autor
+table.header.date=Datum
+table.header.filename=Jm\u00E9no souboru
+table.header.filetype=Typ souboru
+table.header.forum=Diskuze
+table.header.messages=Zpr\u00E1vy
+table.header.newmessages=Nep\u0159e\u010Dteno
+table.header.size=Velikost souboru
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_da.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_da.properties
similarity index 50%
rename from src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_da.properties
rename to src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_da.properties
index a2dd6322913f2b4e61c2f8063c8145f28f370636..2166e44b2328d39598bc168894e2610078e22496 100644
--- a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_da.properties
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_da.properties
@@ -1,11 +1,27 @@
-#Mon Mar 02 09:54:09 CET 2009
+#Thu Jan 04 12:35:06 CET 2018
+command.closesp=Luk vindue
+command.show=Vis l\u00E6ringsindhold
+command.showpopup=Vis l\u00E6ringsindhold i et nyt vindue
+condition.accessModerator.title=Upload / download filer / moderer forum
+condition.accessPoster.title=Upload / download filer / l\u00E6s og skriv i forum
+condition.accessReader.title=Download filer / l\u00E6s forum
+condition.accessibility.title=Adgange
+dialog.ablage.config.title=Fildialog
+dialog.folder.name=Mappe
+dialog.forum.config.title=Gemmemapper
+dialog.forum.popup.config.title=Forum
 dialog.selected.element=Diskussionsemne
 dialog.start=Start
-dialog.upload.file=Upload fil
+dialog.upload.file=Upload af fil
 element.already.deleted=Det valgte element er allerede blevet slettet af en anden bruger. Indl\u00E6s venligst tabeloversigten igen.
 element.delete=Er du sikker p\u00E5 at du vil slette filen (<b>{0}</b>) og dets forum? Data vil automatisk blive arkiveret i din personlige mappe under "privat".
+folder.info=Fildialog
+folder.open=Open mappe
 notifications.entry=Ny fil med filnavnet\:{0} fra {1} oprettet den {2}
 notifications.header=Der er ny fil(er) i kursusmodulet "Fil dialog"
+pane.tab.accessibility=Adgange
+pane.tab.dialogconfig=Forum/gemme konfiguration
+selection.forumAsPopup.label=\u00C5ben forum i et popup vindue?
 table.header.action=File
 table.header.author=Forfatter
 table.header.date=Dato
diff --git a/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_de.properties
new file mode 100644
index 0000000000000000000000000000000000000000..5fc978e5cb52814eb6df3cddaaeffd94bb2c872e
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_de.properties
@@ -0,0 +1,35 @@
+#Thu Jan 04 12:35:06 CET 2018
+command.closesp=Fenster schliessen
+command.show=Lerninhalt anzeigen
+command.showpopup=Lerninhalt in neuem Fenster anzeigen
+condition.accessModerator.title=Up- und Download der Dateien / Moderieren im Forum 
+condition.accessPoster.title=Up- und Download der Dateien / Lesen und Schreiben im Forum
+condition.accessReader.title=Nur Download der Dateien / Nur Lesen im Forum
+condition.accessibility.title=Access
+dialog.ablage.config.title=Dateidiskussion
+dialog.copy.file=Datei kopieren
+dialog.folder.name=Dateiablage
+dialog.forum.config.title=Ablage
+dialog.forum.popup.config.title=Darstellung
+dialog.selected.element=Diskussion zur Datei
+dialog.start=Anzeigen
+dialog.upload.file=Datei hochladen
+element.already.deleted=Das gew\u00E4hle Element wurde in der Zwischenzeit von einem anderen Benutzer gel\u00F6scht. Bitte die Tabellenansicht neu laden.
+element.delete=Wollen Sie die Datei (<b>{0}</b>) inkl. der Diskussionsbeitr\u00E4ge l\u00F6schen? Die Daten werden automatisch in Ihrem pers\u00F6nlichen Ordner unter 'Archiv' abgelegt.
+folder.info=Dateidiskussion
+folder.open=Ablage \u00F6ffen
+notifications.entry=Neue Datei mit dem Namen\:{0} erstellt von {1}
+notifications.header=Dateidiskussion in Kurs "{0}"
+pane.tab.accessibility=Zugang
+pane.tab.dialogconfig=Ablage- /Forumskonfiguration
+selection.forumAsPopup.label=Forum in Popup-Fenster \u00F6ffnen
+table.header.action=Datei
+table.header.author=Autor
+table.header.date=Datum
+table.header.filename=Dateiname
+table.header.filetype=Dateityp
+table.header.forum=Diskussion
+table.header.messages=Beitr\u00E4ge
+table.header.newmessages=Ungelesen
+table.header.size=Dateigr\u00F6sse
+title_dialog=Dateidiskussion
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_el.properties
similarity index 54%
rename from src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_el.properties
rename to src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_el.properties
index 1356d6787d721897141d7e2f23d9f95c0d88b309..006d942e7af74d6a308858e208a4e082287b51f2 100644
--- a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_el.properties
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_el.properties
@@ -1,11 +1,27 @@
-#Mon Mar 02 09:54:16 CET 2009
+#Thu Jan 04 12:35:06 CET 2018
+command.closesp=\u039A\u03BB\u03B5\u03AF\u03C3\u03B9\u03BC\u03BF \u03C0\u03B1\u03C1\u03B1\u03B8\u03CD\u03C1\u03BF\u03C5
+command.show=\u03A0\u03C1\u03BF\u03B2\u03BF\u03BB\u03AE \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF\u03C5 \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2
+command.showpopup=\u03A0\u03C1\u03BF\u03B2\u03BF\u03BB\u03AE \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF\u03C5 \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 \u03C3\u03B5 \u03BD\u03AD\u03BF \u03C0\u03B1\u03C1\u03AC\u03B8\u03C5\u03C1\u03BF
+condition.accessModerator.title=\u0391\u03BD\u03AD\u03B2\u03B1\u03C3\u03BC\u03B1 \u03AE \u03BB\u03AE\u03C8\u03B7 \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD/\u03B5\u03C0\u03BF\u03C0\u03C4\u03B5\u03AF\u03B1 forum
+condition.accessPoster.title=\u0391\u03BD\u03AD\u03B2\u03B1\u03C3\u03BC\u03B1 / \u03BA\u03B1\u03C4\u03AD\u03B2\u03B1\u03C3\u03BC\u03B1 \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD / \u0391\u03BD\u03AC\u03B3\u03BD\u03C9\u03C3\u03B7-\u03B5\u03B3\u03B3\u03C1\u03B1\u03C6\u03AE forum
+condition.accessReader.title=\u039A\u03B1\u03C4\u03AC\u03B2\u03B1\u03C3\u03BC\u03B1 \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD / \u0391\u03BD\u03AC\u03B3\u03BD\u03C9\u03C3\u03B7 forum
+condition.accessibility.title=\u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7
+dialog.ablage.config.title=\u0394\u03B9\u03AC\u03BB\u03BF\u03B3\u03BF\u03C2 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5
+dialog.folder.name=\u03A6\u03AC\u03BA\u03B5\u03BB\u03BF\u03C2
+dialog.forum.config.title=\u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7
+dialog.forum.popup.config.title=Forum
 dialog.selected.element=\u0398\u03AD\u03BC\u03B1 \u03C3\u03C5\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7\u03C2
 dialog.start=\u0395\u03BA\u03BA\u03AF\u03BD\u03B7\u03C3\u03B7
 dialog.upload.file=\u0391\u03BD\u03AD\u03B2\u03B1\u03C3\u03BC\u03B1 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5
 element.already.deleted=\u03A4\u03BF \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C6\u03B7\u03BA\u03B5 \u03B1\u03C0\u03CC \u03AC\u03BB\u03BB\u03BF \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7. \u03A0\u03B1\u03C1\u03B1\u03BA\u03B1\u03BB\u03BF\u03CD\u03BC\u03B5 \u03B1\u03BD\u03B1\u03BD\u03B5\u03CE\u03C3\u03C4\u03B5 \u03C4\u03B7\u03BD \u03C0\u03C1\u03BF\u03B2\u03BF\u03BB\u03AE \u03C4\u03BF\u03C5 \u03C0\u03AF\u03BD\u03B1\u03BA\u03B1.
 element.delete=\u0398\u03AD\u03BB\u03B5\u03C4\u03B5 \u03C3\u03AF\u03B3\u03BF\u03C5\u03C1\u03B1 \u03BD\u03B1 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C8\u03B5\u03C4\u03B5 \u03C4\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF (<b>{0}</b>) \u03BA\u03B1\u03B9 \u03C4\u03BF forum \u03C4\u03BF\u03C5? \u03A4\u03B1 \u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03B1 \u03B8\u03B1 \u03B1\u03C1\u03C7\u03B5\u03B9\u03BF\u03B8\u03B5\u03C4\u03B7\u03B8\u03BF\u03CD\u03BD \u03B1\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B1 \u03C3\u03C4\u03BF\u03BD \u03C0\u03C1\u03BF\u03C3\u03C9\u03C0\u03B9\u03BA\u03CC \u03C3\u03B1\u03C2 \u03C6\u03AC\u03BA\u03B5\u03BB\u03BF, \u03C3\u03C4\u03BF \u03C3\u03B7\u03BC\u03B5\u03AF\u03BF 'archive'.
+folder.info=\u0394\u03B9\u03AC\u03BB\u03BF\u03B3\u03BF\u03C2 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5
+folder.open=\u0386\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03C6\u03B1\u03BA\u03AD\u03BB\u03BF\u03C5
 notifications.entry=\u039D\u03AD\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF \u03BC\u03B5 \u03CC\u03BD\u03BF\u03BC\u03B1 \:{0} \u03B1\u03C0\u03CC {1} \u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AE\u03B8\u03B7\u03BA\u03B5 \u03C3\u03C4\u03B9\u03C2 {2}
 notifications.header=\u03A5\u03C0\u03AC\u03C1\u03C7\u03BF\u03C5\u03BD \u03BD\u03AD\u03B1 \u03B1\u03C1\u03C7\u03B5\u03AF\u03B1 \u03C3\u03C4\u03B7\u03BD \u03C5\u03C0\u03BF\u03BC\u03BF\u03BD\u03AC\u03B4\u03B1 \u03BC\u03B1\u03B8\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2 "\u0394\u03B9\u03AC\u03BB\u03BF\u03B3\u03BF\u03C2 \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD"
+pane.tab.accessibility=\u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7
+pane.tab.dialogconfig=\u0394\u03B9\u03B1\u03BC\u03CC\u03C1\u03C6\u03C9\u03C3\u03B7 Forum/\u03B1\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7\u03C2
+selection.forumAsPopup.label=\u0386\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 forum \u03C3\u03B5 \u03B1\u03BD\u03B1\u03B4\u03C5\u03CC\u03BC\u03B5\u03BD\u03BF \u03C0\u03B1\u03C1\u03AC\u03B8\u03C5\u03C1\u03BF?
 table.header.action=\u0391\u03C1\u03C7\u03B5\u03AF\u03BF
 table.header.author=\u03A3\u03C5\u03B3\u03B3\u03C1\u03B1\u03C6\u03AD\u03B1\u03C2
 table.header.date=\u0397\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1
@@ -15,3 +31,4 @@ table.header.forum=\u03A3\u03C5\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7
 table.header.messages=\u039C\u03B7\u03BD\u03CD\u03BC\u03B1\u03C4\u03B1
 table.header.newmessages=\u039C\u03B7 \u03B1\u03BD\u03B1\u03B3\u03BD\u03C9\u03C3\u03BC\u03AD\u03BD\u03B1
 table.header.size=\u039C\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5
+title_dialog=\u0394\u03B9\u03AC\u03BB\u03BF\u03B3\u03BF\u03C2 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5
diff --git a/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_en.properties
new file mode 100644
index 0000000000000000000000000000000000000000..518752456cc34e15ca9f8a1ce90e2d1531e8a569
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_en.properties
@@ -0,0 +1,35 @@
+#Thu Jan 04 12:35:06 CET 2018
+command.closesp=Close window
+command.show=Display learning content
+command.showpopup=Display learning content in new window
+condition.accessModerator.title=Upload or download files/moderate forum
+condition.accessPoster.title=Upload and download files/read and write in forum
+condition.accessReader.title=Download files/read in forum only
+condition.accessibility.title=Access
+dialog.ablage.config.title=File dialog
+dialog.copy.file=Copy file
+dialog.folder.name=Storage folder
+dialog.forum.config.title=Storage
+dialog.forum.popup.config.title=Forum
+dialog.selected.element=Dialog regarding file
+dialog.start=Show
+dialog.upload.file=Upload file
+element.already.deleted=The element selected has been deleted by another user. Please refresh the table view.
+element.delete=Do you really want to delete the file (<b>{0}</b>) and its forum? Data will automatically be archived in your personal folder, section 'Archive'.
+folder.info=File dialog
+folder.open=Open folder
+notifications.entry=New file with file name\: {0} created by {1}
+notifications.header=File dialog in course "{0}"
+pane.tab.accessibility=Access
+pane.tab.dialogconfig=Forum/storage configuration
+selection.forumAsPopup.label=Open forum in pop-up
+table.header.action=File
+table.header.author=Author
+table.header.date=Date
+table.header.filename=File name
+table.header.filetype=File type
+table.header.forum=Discussion
+table.header.messages=Contributions
+table.header.newmessages=Unread
+table.header.size=File size
+title_dialog=File dialog
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_es.properties
similarity index 51%
rename from src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_es.properties
rename to src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_es.properties
index 3844b75a88a8a8b1aef1d3379b2334c54ee9405e..8b2e035f990caac44774fb84f0375ae28b0ecf7f 100644
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_es.properties
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_es.properties
@@ -1,14 +1,4 @@
-#Wed Jul 28 13:33:33 CEST 2010
-
-
-
-
-
-
-
-
-
-
+#Thu Jan 04 12:35:06 CET 2018
 command.closesp=Cerrar ventana
 command.show=Mostrar contenido did\u00E1ctico
 command.showpopup=Mostar contenido did\u00E1ctico en una nueva ventana
@@ -20,14 +10,24 @@ dialog.ablage.config.title=Visualizaci\u00F3n de los elementos de di\u00E1logo
 dialog.folder.name=Dep\u00F3sito de archivos
 dialog.forum.config.title=Dep\u00F3sito
 dialog.forum.popup.config.title=Foro
+dialog.selected.element=Discusi\u00F3n de datos
 dialog.start=Empezar
 dialog.upload.file=Subir archivo
+element.already.deleted=El elemento seleccionado ha sido eliminado por otro usuario en el tiempo intermedio.
+element.delete=\u00BFDeseas eliminar el archivo (<b<{0}</b>) y su foro correspondiente? Los datos son archivados autom\u00E1ticamente en tu carpeta personal en 'archivo'.
 folder.info=Elementos de di\u00E1logo
 folder.open=Abrir carpeta
-
-
-
-
+notifications.entry=Nuevo archivo con nombre\:{0} de {1} creado en {2}
+notifications.header=Hay nuevo(s) archivo(s) en el m\u00F3dulo del curso "Di\u00E1logo de archivo"
 pane.tab.accessibility=Acceso
 pane.tab.dialogconfig=Configuraci\u00F3n del foro y dep\u00F3sito
 selection.forumAsPopup.label=\u00BFAbrir foro en una ventana pop-up?
+table.header.action=Archivo
+table.header.author=Autor
+table.header.date=Fecha
+table.header.filename=Nombre de archivo
+table.header.filetype=Tipo de archivo
+table.header.forum=Discusi\u00F3n
+table.header.messages=Mensajes
+table.header.newmessages=No le\u00EDdo
+table.header.size=Tama\u00F1o
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_fa.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_fa.properties
similarity index 58%
rename from src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_fa.properties
rename to src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_fa.properties
index a485d7fc48ec45556e7eb0118025998089e900bc..4a2eb4f59b2d278063dedc772311a0f82f1196ac 100644
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_fa.properties
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_fa.properties
@@ -1,4 +1,4 @@
-#Wed Jul 28 13:33:32 CEST 2010
+#Thu Jan 04 12:35:06 CET 2018
 command.closesp=\u0628\u0633\u062A\u0646 \u067E\u0646\u062C\u0631\u0647
 command.show=\u0646\u0645\u0627\u06CC\u0634 \u0645\u062D\u062A\u0648\u0627\u06CC \u0622\u0645\u0648\u0632\u0634\u06CC
 command.showpopup=\u0646\u0645\u0627\u06CC\u0634 \u0645\u062D\u062A\u0648\u0627\u06CC \u0622\u0645\u0648\u0632\u0634\u06CC \u062F\u0631 \u067E\u0646\u062C\u0631\u0647 \u062C\u062F\u06CC\u062F
@@ -10,14 +10,24 @@ dialog.ablage.config.title=\u0641\u0627\u06CC\u0644 \u0645\u062D\u0627\u0648\u06
 dialog.folder.name=\u067E\u0648\u0634\u0647
 dialog.forum.config.title=\u062E\u0632\u0627\u0646\u0647
 dialog.forum.popup.config.title=\u0627\u0646\u062C\u0645\u0646
+dialog.selected.element=\u0645\u0648\u0636\u0648\u0639 \u0628\u062D\u062B
 dialog.start=\u0634\u0631\u0648\u0639
 dialog.upload.file=\u0627\u0631\u0633\u0627\u0644 \u0641\u0627\u06CC\u0644
+element.already.deleted=\u062C\u0632\u0621 \u0627\u0646\u062A\u062E\u0627\u0628 \u0634\u062F\u0647 \u062A\u0648\u0633\u0637 \u06A9\u0627\u0631\u0628\u0631 \u062F\u06CC\u06AF\u0631\u06CC \u067E\u0627\u06A9 \u0634\u062F\u0647 \u0627\u0633\u062A.\u0644\u0637\u0641\u0627 \u0646\u0645\u0627\u06CC \u062C\u062F\u0648\u0644 \u062E\u0648\u062F \u0631\u0627 \u0628\u0627\u0632\u0622\u0648\u0631\u06CC \u06A9\u0646\u06CC\u062F
+element.delete=Do you really want to delete the file (<b>{0}</b>) and its forum? Data will automatically be archived in your personal folder, section 'archive'.
 folder.info=\u0641\u0627\u06CC\u0644 \u0645\u062D\u0627\u0648\u0631\u0647 \u0627\u06CC
 folder.open=\u0628\u0627\u0632 \u06A9\u0631\u062F\u0646 \u067E\u0648\u0634\u0647
-
-
-
-
+notifications.entry=New file with file name\:{0} from {1} created at {2}
+notifications.header=There are new file(s) in the course module "File dialog"
 pane.tab.accessibility=\u062F\u0633\u062A\u06CC\u0627\u0628\u06CC
 pane.tab.dialogconfig=\u0645\u062D\u0644 \u067E\u06CC\u06A9\u0631\u0628\u0646\u062F\u06CC \u0627\u0646\u062C\u0645\u0646/\u062E\u0632\u0627\u0646\u0647
 selection.forumAsPopup.label=\u0628\u0627\u0632 \u06A9\u0631\u062F\u0646 \u0627\u0646\u062C\u0645\u0646 \u062F\u0631 \u067E\u0646\u062C\u0631\u0647 \u0641\u0631\u0639\u06CC\u061F
+table.header.action=\u0641\u0627\u06CC\u0644
+table.header.author=\u0646\u0648\u06CC\u0633\u0646\u062F\u0647
+table.header.date=\u062A\u0627\u0631\u06CC\u062E
+table.header.filename=\u0646\u0627\u0645 \u0641\u0627\u06CC\u0644
+table.header.filetype=\u0646\u0648\u0639 \u0641\u0627\u06CC\u0644
+table.header.forum=\u0628\u062D\u062B \u0648 \u06AF\u0641\u062A\u06AF\u0648
+table.header.messages=\u067E\u06CC\u0627\u0645 \u0647\u0627
+table.header.newmessages=\u062E\u0648\u0627\u0646\u062F\u0647 \u0646\u0634\u062F\u0647
+table.header.size=\u0627\u0646\u062F\u0627\u0632\u0647 \u0641\u0627\u06CC\u0644
diff --git a/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_fr.properties
new file mode 100644
index 0000000000000000000000000000000000000000..e958747d6ff2f97505918fdca86aa144fb48eeb4
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_fr.properties
@@ -0,0 +1,35 @@
+#Thu Jan 04 12:35:06 CET 2018
+command.closesp=Fermer fen\u00EAtre
+command.show=Afficher contenu didactique
+command.showpopup=Afficher contenu didactique dans nouvelle fen\u00EAtre
+condition.accessModerator.title=Transmission et t\u00E9l\u00E9chargement des fichiers / Animer le forum
+condition.accessPoster.title=Transmission et t\u00E9l\u00E9chargement des fichiers / Lire et \u00E9crire dans le forum
+condition.accessReader.title=Uniquement t\u00E9l\u00E9chargement des fichiers / Uniquement lire dans le forum
+condition.accessibility.title=Acces
+dialog.ablage.config.title=Fichier à discut\u00E9
+dialog.copy.file=Copier un document
+dialog.folder.name=D\u00E9p\u00F4t de fichier
+dialog.forum.config.title=Stockage
+dialog.forum.popup.config.title=Forum
+dialog.selected.element=Discuter le fichier
+dialog.start=Afficher
+dialog.upload.file=T\u00E9l\u00E9charger fichier
+element.already.deleted=L'\u00E9l\u00E9ment s\u00E9lectionn\u00E9 a \u00E9t\u00E9 effac\u00E9 entre temps par un autre utilisateur. Veuillez actualiser l'affichage du tableau.
+element.delete=Voulez-vous vraiment effacer le fichier (<b>{0}</b>) incl. les contributions de discussion? Les donn\u00E9es seront d\u00E9pos\u00E9es automatiquement dans votre dossier personnel sous 'archive'.
+folder.info=Fichier discut\u00E9
+folder.open=Ouvrir d\u00E9p\u00F4t
+notifications.entry=Nouveau fichier avec le nom\: {0} cr\u00E9\u00E9 par {1}
+notifications.header=Il y a de nouveaux fichier dans le module de cours "fichier discut\u00E9".
+pane.tab.accessibility=Acc\u00E8s
+pane.tab.dialogconfig=Configuration de d\u00E9p\u00F4t, du forum
+selection.forumAsPopup.label=Ouvrir le forum dans une nouvelle fen\u00EAtre?
+table.header.action=fichier
+table.header.author=auteur
+table.header.date=date
+table.header.filename=nom de fichier
+table.header.filetype=type de fichier
+table.header.forum=discussion
+table.header.messages=contributions
+table.header.newmessages=non lus
+table.header.size=taille du fichier
+title_dialog=Discussion de fichier
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_it.properties
similarity index 50%
rename from src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_it.properties
rename to src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_it.properties
index 4d08e6daf1e8002a00970b2e0434b456fb776d2c..75a5cb284b3062a36c88761bb18c351909cb3981 100644
--- a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_it.properties
@@ -1,12 +1,28 @@
-#Tue Feb 07 12:50:59 CET 2017
+#Thu Jan 04 12:35:06 CET 2018
+command.closesp=Chiudere finestra
+command.show=Mostrare contenuto didattico
+command.showpopup=Mostrare contenuto didattico in nuova finestra
+condition.accessModerator.title=upload / download files / moderatate forum
+condition.accessPoster.title=upload / download files / read write forum
+condition.accessReader.title=download files / read forum
+condition.accessibility.title=Accesso
+dialog.ablage.config.title=Discussione documentata
 dialog.copy.file=Copia file
+dialog.folder.name=Deposito file
+dialog.forum.config.title=Deposito
+dialog.forum.popup.config.title=Forum
 dialog.selected.element=Discussione sul file
-dialog.start=Mostrare
+dialog.start=Avviare
 dialog.upload.file=Caricare file
 element.already.deleted=L'elemento selezionato, nel frattempo, \u00E8 stato eliminato da un altro utente. Ricarichi la visualizzazione della tabella, p.f.
 element.delete=Vuole eliminare il file (<b>{0}</b>) insieme ai contributi? I dati vengono depositati automaticamente nella Sua cartella personale sotto "archive".
+folder.info=Discussione documentata
+folder.open=Apri deposito
 notifications.entry=Nuovo file con il nome\:{0} di {1} creato in data {2}
 notifications.header=Ci sono nuovi file nel modulo di corso "Discussione documentata"
+pane.tab.accessibility=Accesso
+pane.tab.dialogconfig=Configurazione deposito / forum
+selection.forumAsPopup.label=Aprire forum in finestra popup?
 table.header.action=File
 table.header.author=Autore
 table.header.date=Data
@@ -16,3 +32,4 @@ table.header.forum=Discussione
 table.header.messages=Contributi
 table.header.newmessages=Non letti
 table.header.size=Misura
+title_dialog=Discussione documentata
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_jp.properties
similarity index 55%
rename from src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_jp.properties
rename to src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_jp.properties
index 8c9316b287747a7037469ebb60dae8522eb072b2..34000fec838c81630890e12d57754f9f17f5c069 100644
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_jp.properties
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_jp.properties
@@ -1,15 +1,4 @@
-#Tue Sep 28 20:47:49 CEST 2010
-
-
-
-
-
-
-
-
-
-
-
+#Thu Jan 04 12:35:06 CET 2018
 command.closesp=\u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u9589\u3058\u308B
 command.show=\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u8868\u793A\u3059\u308B
 command.showpopup=\u65B0\u3057\u3044\u30A6\u30A3\u30F3\u30C9\u30A6\u306B\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u8868\u793A\u3059\u308B
@@ -21,16 +10,25 @@ dialog.ablage.config.title=\u30D5\u30A1\u30A4\u30EB\u30C0\u30A4\u30A2\u30ED\u30B
 dialog.folder.name=\u30B9\u30C8\u30EC\u30FC\u30B8\u30D5\u30A9\u30EB\u30C0
 dialog.forum.config.title=\u30B9\u30C8\u30EC\u30FC\u30B8
 dialog.forum.popup.config.title=\u30D5\u30A9\u30FC\u30E9\u30E0
+dialog.selected.element=\u30D5\u30A1\u30A4\u30EB\u306B\u95A2\u3059\u308B\u30C0\u30A4\u30A2\u30ED\u30B0
 dialog.start=\u30B9\u30BF\u30FC\u30C8
 dialog.upload.file=\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B
+element.already.deleted=\u9078\u629E\u3057\u305F\u30A8\u30EC\u30E1\u30F3\u30C8\u306F\u4ED6\u306E\u30E6\u30FC\u30B6\u306B\u3088\u3063\u3066\u524A\u9664\u3055\u308C\u307E\u3057\u305F\u3002\u30C6\u30FC\u30D6\u30EB\u30D3\u30E5\u30FC\u3092\u30EA\u30D5\u30EC\u30C3\u30B7\u30E5\u3057\u3066\u304F\u3060\u3055\u3044\u3002
+element.delete=\u672C\u5F53\u306B\u30D5\u30A1\u30A4\u30EB (<b>{0}</b>) \u304A\u3088\u3073\u30D5\u30A9\u30FC\u30E9\u30E0\u3092\u524A\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B? \u30C7\u30FC\u30BF\u306F\u3042\u306A\u305F\u306E\u30D1\u30FC\u30BD\u30CA\u30EB\u30D5\u30A9\u30EB\u30C0\u30BB\u30AF\u30B7\u30E7\u30F3\u300C\u30A2\u30FC\u30AB\u30A4\u30D6\u300D\u306B\u81EA\u52D5\u7684\u306B\u30A2\u30FC\u30AB\u30A4\u30D6\u3055\u308C\u307E\u3059\u3002
 folder.info=\u30D5\u30A1\u30A4\u30EB\u30C0\u30A4\u30A2\u30ED\u30B0
 folder.open=\u30D5\u30A9\u30EB\u30C0\u3092\u958B\u304F
-
-
-
-
-
+notifications.entry=\u65B0\u3057\u3044\u30D5\u30A1\u30A4\u30EB\: {0} \u4F5C\u6210\: {1} \u4F5C\u6210\u65E5\u6642\: {2}
+notifications.header=\u30B3\u30FC\u30B9\u300C {0} \u300D\u306E\u30D5\u30A1\u30A4\u30EB\u30C0\u30A4\u30A2\u30ED\u30B0
 pane.tab.accessibility=\u30A2\u30AF\u30BB\u30B9
 pane.tab.dialogconfig=\u30D5\u30A9\u30FC\u30E9\u30E0/\u30B9\u30C8\u30EC\u30FC\u30B8\u8A2D\u5B9A
 selection.forumAsPopup.label=\u30D5\u30A9\u30FC\u30E9\u30E0\u3092\u65B0\u3057\u3044\u30DD\u30C3\u30D7\u30A2\u30C3\u30D7\u30A6\u30A3\u30F3\u30C9\u30A6\u306B\u958B\u304D\u307E\u3059\u304B?
+table.header.action=\u30D5\u30A1\u30A4\u30EB
+table.header.author=\u4F5C\u8005
+table.header.date=\u65E5\u4ED8
+table.header.filename=\u30D5\u30A1\u30A4\u30EB\u540D
+table.header.filetype=\u30D5\u30A1\u30A4\u30EB\u30BF\u30A4\u30D7
+table.header.forum=\u30C7\u30A3\u30B9\u30AB\u30C3\u30B7\u30E7\u30F3
+table.header.messages=\u30E1\u30C3\u30BB\u30FC\u30B8
+table.header.newmessages=\u672A\u8AAD
+table.header.size=\u30D5\u30A1\u30A4\u30EB\u30B5\u30A4\u30BA
 title_dialog=\u30D5\u30A1\u30A4\u30EB\u30C0\u30A4\u30A2\u30ED\u30B0
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_lt.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_lt.properties
similarity index 51%
rename from src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_lt.properties
rename to src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_lt.properties
index 6ad461669f9f1cdc872590b15d41745f171f5072..3c0e2c428139827397f4b8c6d1d91404341a0256 100644
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_lt.properties
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_lt.properties
@@ -1,14 +1,4 @@
-#Wed Jul 28 13:33:30 CEST 2010
-
-
-
-
-
-
-
-
-
-
+#Thu Jan 04 12:35:06 CET 2018
 command.closesp=U\u017Edaryti lang\u0105
 command.show=Pavaizduoti mokymosi turin\u012F
 command.showpopup=Pavaizduoti mokymosi turin\u012F naujame lange
@@ -20,14 +10,24 @@ dialog.ablage.config.title=Rinkmenos dialogas
 dialog.folder.name=Aplankas
 dialog.forum.config.title=Laikmena
 dialog.forum.popup.config.title=Diskusija
+dialog.selected.element=Diskusijos pavadinimas
 dialog.start=Paleisti
 dialog.upload.file=I\u0161siun\u010Diama rinkmena
+element.already.deleted=Pasirinktas elementas buvo i\u0161trintas kito vartotojo. Pra\u0161ome atsinaujinti lentel\u0117s vaizd\u0105.
+element.delete=Ar j\u016Bs tikrai norite i\u0161trinti rinkmen\u0105 (<b>{0}</b>) ir jos diskusij\u0105? Duomenys bus automati\u0161kai suarchyvuoti j\u016Bs\u0173 asmeniniame aplanke, sekcijoje \u201Carchyvas\u201D. 
 folder.info=Rinkmenos dialogas
 folder.open=Atidaryti aplank\u0105
-
-
-
-
+notifications.entry=Nauja rinkmena pavadinimu {0} i\u0161 {1}sukurta {2}
+notifications.header=Yra nauja \u017Einut\u0117(s) kurso modulyje \u201CRinkmenos dialogas\u201D
 pane.tab.accessibility=Prieiga
 pane.tab.dialogconfig=Diskusij\u0173/laikmenos s\u0105ranka
 selection.forumAsPopup.label=Atidaryti diskusij\u0105 i\u0161kylan\u010Diajame lange?
+table.header.action=Rinkmena
+table.header.author=Autorius
+table.header.date=Data
+table.header.filename=Rinkmenos pavadinimas
+table.header.filetype=Rinkmenos tipas
+table.header.forum=Diskusija
+table.header.messages=\u017Dinut\u0117
+table.header.newmessages=Neskaityta
+table.header.size=Rinkmenos  dydis
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_nl_NL.properties
similarity index 50%
rename from src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_nl_NL.properties
rename to src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_nl_NL.properties
index af5d451a46c8081110da574b31bd5c8cf0fcb97d..0303729cefd2902da106adcb7cbcd52728549b11 100644
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_nl_NL.properties
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_nl_NL.properties
@@ -1,15 +1,4 @@
-#Thu Sep 08 16:42:44 CEST 2011
-
-
-
-
-
-
-
-
-
-
-
+#Thu Jan 04 12:35:07 CET 2018
 command.closesp=Sluit venster
 command.show=Toon leerinhoud
 command.showpopup=Toon leerinhoud in een nieuw venster
@@ -21,16 +10,25 @@ dialog.ablage.config.title=Bestandsdialoog
 dialog.folder.name=Bewaarmap
 dialog.forum.config.title=Bewaar
 dialog.forum.popup.config.title=Forum
+dialog.selected.element=Dialoog betreffende bestand
 dialog.start=Start
 dialog.upload.file=Upload bestand
+element.already.deleted=Het geselecteerde element werd door een andere gebruiker gewist. Gelieve het tabeloverzicht te verversen.
+element.delete=Weet u zeker dat u bestand (<b>{0}</b>) en zijn forum wilt verwijderen? Data zal automatisch gearchiveerd worden in uw persoonlijke map, sectie 'Archief'.
 folder.info=Bestandsdialoog
 folder.open=Open map
-
-
-
-
-
+notifications.entry=Nieuw bestand met bestandsnaam\: {0} door {1} aangemaakt op {2}
+notifications.header=Bestandsdialoog in cursus "{0}"
 pane.tab.accessibility=Toegang
 pane.tab.dialogconfig=Forum/ bewaar configuratie
 selection.forumAsPopup.label=Open forum in pop-upvenster
+table.header.action=Bestand
+table.header.author=Auteur
+table.header.date=Datum
+table.header.filename=Bestandsnaam
+table.header.filetype=Bestandstype
+table.header.forum=Discussie
+table.header.messages=Bijdrage
+table.header.newmessages=Ongelezen
+table.header.size=Bestandsgrootte
 title_dialog=Bestandsdialoog
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_pl.properties
similarity index 51%
rename from src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_pl.properties
rename to src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_pl.properties
index e62fe2d48f3ffad2a8950083b4712073becf716c..bdd995437a3a14256b73b8233762a19e55709e15 100644
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_pl.properties
@@ -1,15 +1,4 @@
-#Mon Aug 30 14:18:00 CEST 2010
-
-
-
-
-
-
-
-
-
-
-
+#Thu Jan 04 12:35:06 CET 2018
 command.closesp=Zamknij okno
 command.show=Wy\u015Bwietl zawarto\u015B\u0107 edukacyjn\u0105
 command.showpopup=Wy\u015Bwietl zawarto\u015B\u0107 edukacyjn\u0105 w nowym oknie
@@ -18,19 +7,29 @@ condition.accessPoster.title=Przekazuj / pobieraj pliki / czytaj-zapisuj forum
 condition.accessReader.title=Pobieraj pliki / czytaj forum
 condition.accessibility.title=Dost\u0119p
 dialog.ablage.config.title=Okno pliku
+dialog.copy.file=Kopiuj plik
 dialog.folder.name=Folder
 dialog.forum.config.title=Przechowywanie
 dialog.forum.popup.config.title=Forum
+dialog.selected.element=Temat dyskusji
 dialog.start=Start
 dialog.upload.file=Przeka\u017C plik
+element.already.deleted=Wybrany element zosta\u0142 usuni\u0119ty przez innego u\u017Cytkownika. Od\u015Bwie\u017C widok tabeli.
+element.delete=Czy naprawd\u0119 chcesz usun\u0105\u0107 plik (<b>{0}</b>) i jego forum? Dane b\u0119d\u0105 automatycznie zarchiwizowane w Twoim osobistym folderze w sekcji 'archive'.
 folder.info=Okno pliku
 folder.open=Otw\u00F3rz folder
-
-
-
-
-
+notifications.entry=Nowy plik o nazwie\:{0} z {1} utworzony {2}
+notifications.header=S\u0105 nowe pliki w module kursu "Okno pliku"
 pane.tab.accessibility=Dost\u0119p
 pane.tab.dialogconfig=Konfiguracja forum
 selection.forumAsPopup.label=Otwiera\u0107 forum w wyskakuj\u0105cym oknie?
+table.header.action=Plik
+table.header.author=Autor
+table.header.date=Data
+table.header.filename=Nazwa pliku
+table.header.filetype=Typ pliku
+table.header.forum=Dyskusja
+table.header.messages=Wiadomo\u015Bci
+table.header.newmessages=Nieprzeczytane
+table.header.size=Rozmiar pliku
 title_dialog=Okno pliku
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_pt_BR.properties
similarity index 50%
rename from src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_pt_BR.properties
rename to src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_pt_BR.properties
index d6d18315494763a7fec33a23bc4d393ae2eb90a2..c2c5ad948ed10a55c0570dac17cf5cf4f81bdaeb 100644
--- a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_pt_BR.properties
@@ -1,12 +1,28 @@
-#Tue Apr 03 14:58:53 CEST 2012
+#Thu Jan 04 12:35:06 CET 2018
+command.closesp=Fechar janela
+command.show=Exibir conte\u00FAdo did\u00E1tico
+command.showpopup=Exibir conte\u00FAdo did\u00E1tico em nova janela
+condition.accessModerator.title=Carregar/ baixar arquivos/ moderar f\u00F3rum
+condition.accessPoster.title=Carregar/ baixar arquivos/ ler-escrever f\u00F3rum
+condition.accessReader.title=Baixar arquivos/ ler f\u00F3rum
+condition.accessibility.title=Acesso
+dialog.ablage.config.title=Arquivo de di\u00E1logo
 dialog.copy.file=Copiar arquivo
+dialog.folder.name=Pasta
+dialog.forum.config.title=Armazenamento
+dialog.forum.popup.config.title=F\u00F3rum
 dialog.selected.element=T\u00F3pico de discuss\u00E3o
 dialog.start=Iniciar
-dialog.upload.file=Carregar arquivo
+dialog.upload.file=Carregar arquivo 
 element.already.deleted=O elemento selecionado foi apagado por outro usu\u00E1rio. Favor atualizar a tabela de visualiza\u00E7\u00E3o.
 element.delete=Voc\u00EA realmente quer apagar o arquivo (<b>{0}</b>) e seu f\u00F3rum? Os dados ser\u00E3o automaticamente arquivados em sua pasta pessoal, se\u00E7\u00E3o 'arquivamento'.
+folder.info=Arquivo de di\u00E1logo
+folder.open=Abrir pasta
 notifications.entry=Novo arquivo com nome\:{0} de {1} criado em {2}
 notifications.header=Existem novos arquivos no m\u00F3dulo de curso "Arquivos de di\u00E1logo"
+pane.tab.accessibility=Acesso
+pane.tab.dialogconfig=F\u00F3rum/configura\u00E7\u00E3o de armazenamento
+selection.forumAsPopup.label=Abrir pasta em janela pop-up?
 table.header.action=Arquivar
 table.header.author=Autor
 table.header.date=Data
@@ -16,3 +32,4 @@ table.header.forum=Discuss\u00E3o
 table.header.messages=Mensagens
 table.header.newmessages=N\u00E3o lido
 table.header.size=Tamanho do arquivo
+title_dialog=Arquivo de Di\u00E1logo
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_pt_PT.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_pt_PT.properties
similarity index 50%
rename from src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_pt_PT.properties
rename to src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_pt_PT.properties
index 7de307b6571b16cdae47e3edbef1c2f1e9f9441c..50007084051ae475af9cd141c1295fdce60a3f0a 100644
--- a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_pt_PT.properties
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_pt_PT.properties
@@ -1,11 +1,27 @@
-#Mon Mar 02 09:54:05 CET 2009
+#Thu Jan 04 12:35:07 CET 2018
+command.closesp=Fechar janela
+command.show=Exibir conte\u00FAdo did\u00E1tico
+command.showpopup=Exibir conte\u00FAdo did\u00E1tico em nova janela
+condition.accessModerator.title=Carregar/ baixar arquivos/ moderar f\u00F3rum
+condition.accessPoster.title=Carregar/ baixar arquivos/ ler-escrever f\u00F3rum
+condition.accessReader.title=Baixar arquivos/ ler f\u00F3rum
+condition.accessibility.title=Acesso
+dialog.ablage.config.title=Arquivo de di\u00E1logo
+dialog.folder.name=Pasta
+dialog.forum.config.title=Armazenamento
+dialog.forum.popup.config.title=F\u00F3rum
 dialog.selected.element=T\u00F3pico de discuss\u00E3o
 dialog.start=Iniciar
-dialog.upload.file=Carregar arquivo
+dialog.upload.file=Carregar arquivo 
 element.already.deleted=O elemento selecionado foi apagado por outro usu\u00E1rio. Favor atualizar a tabela de visualiza\u00E7\u00E3o.
 element.delete=Voc\u00EA realmente quer apagar o arquivo (<b>{0}</b>) e seu f\u00F3rum? Os dados ser\u00E3o automaticamente arquivados em sua pasta pessoal, se\u00E7\u00E3o 'arquivamento'.
+folder.info=Arquivo de di\u00E1logo
+folder.open=Abrir pasta
 notifications.entry=Novo arquivo com nome\:{0} de {1} criado em {2}
 notifications.header=Existem novos arquivos no m\u00F3dulo de curso "Arquivos de di\u00E1logo"
+pane.tab.accessibility=Acesso
+pane.tab.dialogconfig=F\u00F3rum/configura\u00E7\u00E3o de armazenamento
+selection.forumAsPopup.label=Abrir pasta em janela pop-up?
 table.header.action=Arquivar
 table.header.author=Autor
 table.header.date=Data
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_ru.properties
similarity index 51%
rename from src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_ru.properties
rename to src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_ru.properties
index f10bf584b1477b67a06e6fab87eda113de509462..81d6ddc56a07ba2d5174b567607738b8e5b0364a 100644
--- a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_ru.properties
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_ru.properties
@@ -1,11 +1,27 @@
-#Mon Mar 02 09:54:19 CET 2009
+#Thu Jan 04 12:35:06 CET 2018
+command.closesp=\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u043E\u043A\u043D\u043E 
+command.show=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0443\u0447\u0435\u0431\u043D\u043E\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435 
+command.showpopup=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0443\u0447\u0435\u0431\u043D\u043E\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435 \u0432 \u043D\u043E\u0432\u043E\u043C \u043E\u043A\u043D\u0435 
+condition.accessModerator.title=\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u0438 \u0441\u043A\u0430\u0447\u0438\u0432\u0430\u043D\u0438\u0435 \u0444\u0430\u0439\u043B\u043E\u0432 / \u041C\u043E\u0434\u0435\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0432 \u0444\u043E\u0440\u0443\u043C\u0435
+condition.accessPoster.title=\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u0438 \u0441\u043A\u0430\u0447\u0438\u0432\u0430\u043D\u0438\u0435 \u0444\u0430\u0439\u043B\u043E\u0432 / \u0427\u0438\u0442\u0430\u0442\u044C \u0438 \u043F\u0438\u0441\u0430\u0442\u044C \u0432 \u0444\u043E\u0440\u0443\u043C\u0435  
+condition.accessReader.title=\u0422\u043E\u043B\u044C\u043A\u043E \u0441\u043A\u0430\u0447\u0438\u0432\u0430\u043D\u0438\u0435 \u0444\u0430\u0439\u043B\u043E\u0432 / \u0422\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u0435\u043D\u0438\u0435 \u0432 \u0444\u043E\u0440\u0443\u043C\u0435
+condition.accessibility.title=\u0414\u043E\u0441\u0442\u0443\u043F
+dialog.ablage.config.title=\u041E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 
+dialog.folder.name=\u041F\u0430\u043F\u043A\u0430 \u0434\u043B\u044F \u0444\u0430\u0439\u043B\u043E\u0432
+dialog.forum.config.title=\u041F\u0430\u043F\u043A\u0430
+dialog.forum.popup.config.title=\u0424\u043E\u0440\u0443\u043C
 dialog.selected.element=\u041E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430
-dialog.start=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C
+dialog.start=\u0421\u0442\u0430\u0440\u0442
 dialog.upload.file=\u041F\u0435\u0440\u0435\u0441\u043B\u0430\u0442\u044C \u0444\u0430\u0439\u043B
 element.already.deleted=\u0412\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0432 \u0442\u0435\u0447\u0435\u043D\u0438\u0435 \u044D\u0442\u043E\u0433\u043E \u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u0431\u044B\u043B \u0443\u0434\u0430\u043B\u0451\u043D \u0434\u0440\u0443\u0433\u0438\u043C \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C. \u041F\u043E\u0436\u0430\u0439\u043B\u0443\u0441\u0442\u0430, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0442\u0430\u0431\u043B\u0438\u0446\u0443 \u0441\u043D\u043E\u0432\u0430.  
 element.delete=\u0412\u044B \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0444\u0430\u0439\u043B (<b>{0}</b>) \u0432\u043A\u043B\u044E\u0447\u0430\u044F \u0435\u0433\u043E \u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435? \u042D\u0442\u0438 \u0434\u0430\u043D\u043D\u044B\u0435 \u0431\u0443\u0434\u0443\u0442 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u043F\u043E\u043C\u0435\u0449\u0435\u043D\u044B \u0432 \u0412\u0430\u0448\u0443 \u043B\u0438\u0447\u043D\u0443\u044E \u043F\u0430\u043F\u043A\u0443 \u043F\u043E\u0434 \u0438\u043C\u0435\u043D\u0435\u043C '\u0410\u0440\u0445\u0438\u0432'.
+folder.info=\u041E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 
+folder.open=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043F\u0430\u043F\u043A\u0443
 notifications.entry=\u041D\u043E\u0432\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u0441 \u0438\u043C\u0435\u043D\u0435\u043C\:{0} \u043E\u0442 {1} \u0441\u043E\u0437\u0434\u0430\u043D\u043E {2}
 notifications.header=\u041D\u043E\u0432\u044B\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0432 \u043C\u043E\u0434\u0443\u043B\u0435 \u043A\u0443\u0440\u0441\u0430 "\u041E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430"
+pane.tab.accessibility=\u0414\u043E\u0441\u0442\u0443\u043F
+pane.tab.dialogconfig=\u041A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044F \u043F\u0430\u043F\u043A\u0438/\u0444\u043E\u0440\u0443\u043C\u0430 
+selection.forumAsPopup.label=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0444\u043E\u0440\u0443\u043C \u0432\u043E \u0432\u0441\u043F\u043B\u044B\u0432\u0430\u044E\u0449\u0435\u043C \u043E\u043A\u043D\u0435 (pop-up)? 
 table.header.action=\u0424\u0430\u0439\u043B
 table.header.author=\u0410\u0432\u0442\u043E\u0440
 table.header.date=\u0414\u0430\u0442\u0430
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_sq.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_sq.properties
similarity index 53%
rename from src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_sq.properties
rename to src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_sq.properties
index 90f58f5a1bf6cee23034778bc4474f53a53cbbfe..bbe23e150d3ed3512771c4e588bfe4bca6eb943f 100644
--- a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_sq.properties
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_sq.properties
@@ -1,11 +1,27 @@
-#Mon Mar 02 09:54:12 CET 2009
+#Thu Jan 04 12:35:06 CET 2018
+command.closesp=Mbylle dritaren
+command.show=Shfaq p\u00EBrmbajtje m\u00EBsimi
+command.showpopup=Shfaqet p\u00EBrmbajtja e m\u00EBsimit n\u00EB dritare t\u00EB re
+condition.accessModerator.title=Ngarko / shkarko skedar\u00EBt / forum moderimi
+condition.accessPoster.title=Ngarko / shkarko skedar\u00EBt / forum lexim-shkrimi
+condition.accessReader.title=Shkarko skedar\u00EBt / forum leximi
+condition.accessibility.title=Qasja
+dialog.ablage.config.title=Dialog skedari
+dialog.folder.name=Dosja
+dialog.forum.config.title=Ruajtja
+dialog.forum.popup.config.title=Forumi
 dialog.selected.element=Tem\u00EB diskutimi
-dialog.start=Nisu
+dialog.start=Nise
 dialog.upload.file=Ngarko skedar
 element.already.deleted=Elementi i p\u00EBrzgjedhur \u00EBsht\u00EB fshir\u00EB nga nj\u00EB shfryt\u00EBzues tjet\u00EBr. Ju lutemi rifreskoni pamjen e tabel\u00EBs.
 element.delete=A doni me t\u00EB v\u00EBrtet\u00EB t\u00EB fshini skedarin (<b>{0}</b>) dhe formumin e tij? T\u00EB dh\u00EBnat automatikisht do t\u00EB arkivohet n\u00EB dosjen tuaj personale, sekstioni 'Arkiva'.
+folder.info=Dialog skedari
+folder.open=Hap dosje
 notifications.entry=Skedar i ri me emrin \:{0} nga {1} krijuar m\u00EB {2}
 notifications.header=Ka skedar\u00EB t\u00EB rinj\u00EB nj\u00EB modulin e kursit "Dialogu i skedar\u00EBve"
+pane.tab.accessibility=Qasja
+pane.tab.dialogconfig=Konfigurimini i forumit
+selection.forumAsPopup.label=Hape forumin n\u00EB dritare k\u00EBrcyese?
 table.header.action=Skedar
 table.header.author=Autori
 table.header.date=Data
diff --git a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_zh_CN.properties
similarity index 52%
rename from src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_zh_CN.properties
rename to src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_zh_CN.properties
index a94977478acde3cfdd158b261d1df49c39c748f1..a5aa17c5a1ba89fcf280775bf52081a6073ee5e3 100644
--- a/src/main/java/org/olat/course/nodes/dialog/_i18n/LocalStrings_zh_CN.properties
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_zh_CN.properties
@@ -1,14 +1,4 @@
-#Tue Aug 17 15:37:44 CEST 2010
-
-
-
-
-
-
-
-
-
-
+#Thu Jan 04 12:35:06 CET 2018
 command.closesp=\u5173\u95ED\u7A97\u53E3
 command.show=\u663E\u793A\u5B66\u4E60\u5185\u5BB9
 command.showpopup=\u5728\u7A97\u53E3\u91CC\u663E\u793A\u5B66\u4E60\u5185\u5BB9
@@ -20,15 +10,25 @@ dialog.ablage.config.title=\u6587\u4EF6\u8BA8\u8BBA
 dialog.folder.name=\u6587\u4EF6\u5939
 dialog.forum.config.title=\u5B58\u50A8
 dialog.forum.popup.config.title=\u8BBA\u575B
+dialog.selected.element=\u4E3B\u9898
 dialog.start=\u5F00\u59CB
 dialog.upload.file=\u4E0A\u4F20\u6587\u4EF6
+element.already.deleted=\u53E6\u4E00\u4E2A\u7528\u6237\u5DF2\u5220\u9664\u9009\u4E2D\u7684\u5143\u7D20. \u8BF7\u66F4\u65B0\u5217\u8868.
+element.delete=\u4F60\u786E\u5B9A\u8981\u5220\u9664\u8BE5\u6587\u4EF6 (<b>{0}</b>) \u53CA\u5176\u8BBA\u575B? \u6570\u636E\u5C06\u81EA\u52A8\u5B58\u50A8\u5230\u4F60\u7684\u4E2A\u4EBA\u6587\u4EF6\u5939 '\u5F52\u6863'\u4E2D\u3002
 folder.info=\u6587\u4EF6\u8BA8\u8BBA
 folder.open=\u6253\u5F00\u6587\u4EF6\u5939
-
-
-
-
+notifications.entry=\u65B0\u6587\u4EF6\:{1} \u5728 {2}\u521B\u5EFA\u7684\u65B0\u6587\u4EF6 {0}
+notifications.header=\u5728"\u6587\u4EF6\u8BA8\u8BBA"\u4E2D\u6709\u65B0\u6587\u4EF6(s) 
 pane.tab.accessibility=\u8BBF\u95EE
 pane.tab.dialogconfig=\u8BBA\u575B/\u5B58\u50A8\u914D\u7F6E
 selection.forumAsPopup.label=\u5728\u5F39\u51FA\u7A97\u53E3\u91CC\u6253\u5F00\u8BBA\u575B\uFF1F
+table.header.action=\u6587\u4EF6
+table.header.author=\u521B\u5EFA\u4EBA
+table.header.date=\u65E5\u671F
+table.header.filename=\u6587\u4EF6\u540D
+table.header.filetype=\u6587\u4EF6\u7C7B\u578B
+table.header.forum=\u8BA8\u8BBA
+table.header.messages=\u6D88\u606F
+table.header.newmessages=\u672A\u8BFB
+table.header.size=\u6587\u4EF6\u5927\u5C0F
 title_dialog=\u6587\u4EF6\u8BA8\u8BBA
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_zh_TW.properties
similarity index 51%
rename from src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_zh_TW.properties
rename to src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_zh_TW.properties
index 8fd456ec0fd7eefcba77ac839813bbb0dfb5c91d..4603f1e7de99dc9431d863da8749a6b4b9ed836e 100644
--- a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_zh_TW.properties
+++ b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/LocalStrings_zh_TW.properties
@@ -1,11 +1,27 @@
-#Mon Mar 02 09:54:06 CET 2009
+#Thu Jan 04 12:35:06 CET 2018
+command.closesp=\u95DC\u9589\u8996\u7A97
+command.show=\u986F\u793A\u5B78\u7FD2\u5167\u5BB9
+command.showpopup=\u5728\u65B0\u8996\u7A97\u986F\u793A\u5B78\u7FD2\u5167\u5BB9
+condition.accessModerator.title=\u4E0A\u50B3 / \u4E0B\u8F09\u6A94\u6848 / \u7BA1\u7406\u8AD6\u58C7
+condition.accessPoster.title=\u4E0A\u50B3 / \u4E0B\u8F09\u6A94\u6848 / \u8B80\u53D6/\u5BEB\u5165\u8AD6\u58C7
+condition.accessReader.title=\u4E0B\u8F09\u6A94\u6848 / \u8B80\u53D6\u8AD6\u58C7
+condition.accessibility.title=\u5B58\u53D6
+dialog.ablage.config.title=\u6A94\u6848\u5C0D\u8A71\u6846
+dialog.folder.name=\u8CC7\u6599\u593E
+dialog.forum.config.title=\u5132\u5B58\u5340
+dialog.forum.popup.config.title=\u8AD6\u58C7
 dialog.selected.element=\u8A0E\u8AD6\u4E3B\u984C
 dialog.start=\u958B\u59CB
 dialog.upload.file=\u4E0A\u50B3\u6A94\u6848
 element.already.deleted=\u9078\u64C7\u7684\u5143\u7D20\u5DF2\u88AB\u5176\u4ED6\u4F7F\u7528\u8005\u522A\u9664\u3002 \u8ACB\u91CD\u65B0\u6574\u7406\u8868\u683C\u8996\u89C0\u3002
 element.delete=\u60A8\u771F\u7684\u8981\u522A\u9664\u6A94\u6848 (<b>{0}</b>) \u548C\u5B83\u7684\u8AD6\u58C7\u55CE\uFF1F \u8CC7\u6599\u5C07\u81EA\u52D5\u5099\u4EFD\u5230\u60A8\u7684\u500B\u4EBA\u8CC7\u6599\u593E\uFF0C\u5728 'Archive' \u5206\u5340\u3002
+folder.info=\u6A94\u6848\u5C0D\u8A71\u6846
+folder.open=\u958B\u555F\u8CC7\u6599\u593E
 notifications.entry=\u65B0\u6A94\u6848\u4EE5\u6A94\u540D\uFF1A{0} \u81EA {1} \u5EFA\u7ACB\u65BC {2}
 notifications.header=\u5728\u8AB2\u7A0B\u6A21\u7D44\u300C\u6A94\u6848\u5C0D\u8A71\u6846\u300D\u4E2D\u6709\u65B0\u6A94\u6848
+pane.tab.accessibility=\u5B58\u53D6
+pane.tab.dialogconfig=\u8AD6\u58C7/\u5132\u5B58\u5340\u8A2D\u5B9A
+selection.forumAsPopup.label=\u5728\u5F48\u51FA\u8996\u7A97\u958B\u555F\u8AD6\u58C7\uFF1F
 table.header.action=\u6A94\u6848
 table.header.author=\u4F5C\u8005
 table.header.date=\u65E5\u671F
@@ -15,3 +31,4 @@ table.header.forum=\u8A0E\u8AD6
 table.header.messages=\u6587\u7AE0
 table.header.newmessages=\u672A\u8B80\u53D6
 table.header.size=\u6A94\u6848\u5927\u5C0F
+title_dialog=\u6A94\u6848\u5C0D\u8A71\u6846
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/i18nBundleMetadata.properties b/src/main/java/org/olat/course/nodes/dialog/ui/_i18n/i18nBundleMetadata.properties
similarity index 100%
rename from src/main/java/org/olat/modules/dialog/_i18n/i18nBundleMetadata.properties
rename to src/main/java/org/olat/course/nodes/dialog/ui/_i18n/i18nBundleMetadata.properties
diff --git a/src/main/java/org/olat/modules/dialog/DialogElementsController.java b/src/main/java/org/olat/modules/dialog/DialogElementsController.java
deleted file mode 100644
index fec175bff5072702b56bdc41b719c75deadc6cfc..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/dialog/DialogElementsController.java
+++ /dev/null
@@ -1,492 +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.modules.dialog;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-
-import org.olat.core.commons.controllers.linkchooser.LinkChooserController;
-import org.olat.core.commons.controllers.linkchooser.URLChoosenEvent;
-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.commons.modules.bc.vfs.OlatRootFolderImpl;
-import org.olat.core.commons.services.notifications.NotificationsManager;
-import org.olat.core.commons.services.notifications.PublisherData;
-import org.olat.core.commons.services.notifications.SubscriptionContext;
-import org.olat.core.commons.services.notifications.ui.ContextualSubscriptionController;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.panel.StackedPanel;
-import org.olat.core.gui.components.table.TableController;
-import org.olat.core.gui.components.table.TableEvent;
-import org.olat.core.gui.components.table.TableGuiConfiguration;
-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.control.generic.closablewrapper.CloseableModalController;
-import org.olat.core.gui.control.generic.modal.DialogBoxController;
-import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
-import org.olat.core.gui.control.generic.popup.PopupBrowserWindow;
-import org.olat.core.gui.control.generic.title.TitleInfo;
-import org.olat.core.id.Identity;
-import org.olat.core.logging.OLATRuntimeException;
-import org.olat.core.logging.activity.CourseLoggingAction;
-import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
-import org.olat.core.util.Formatter;
-import org.olat.core.util.Util;
-import org.olat.core.util.resource.OresHelper;
-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.VFSManager;
-import org.olat.core.util.vfs.VFSMediaResource;
-import org.olat.core.util.vfs.filters.VFSLeafFilter;
-import org.olat.course.CourseFactory;
-import org.olat.course.CourseModule;
-import org.olat.course.ICourse;
-import org.olat.course.groupsandrights.CourseRights;
-import org.olat.course.nodes.CourseNode;
-import org.olat.course.nodes.DialogCourseNode;
-import org.olat.course.nodes.dialog.DialogConfigForm;
-import org.olat.course.nodes.dialog.DialogNodeForumCallback;
-import org.olat.course.nodes.dialog.ReadOnlyDialogNodeForumCallback;
-import org.olat.course.properties.CoursePropertyManager;
-import org.olat.course.run.userview.NodeEvaluation;
-import org.olat.course.run.userview.UserCourseEnvironment;
-import org.olat.modules.fo.Forum;
-import org.olat.modules.fo.ForumCallback;
-import org.olat.modules.fo.ForumUIFactory;
-import org.olat.modules.fo.manager.ForumManager;
-import org.olat.repository.RepositoryEntry;
-import org.olat.repository.RepositoryManager;
-import org.olat.util.logging.activity.LoggingResourceable;
-
-/**
- * Description:<br>
- * TODO: guido Class Description for DialogController
- * <P>
- * Initial Date: 03.11.2005 <br>
- * 
- * @author guido
- */
-public class DialogElementsController extends BasicController {
-	
-	protected static final String ACTION_START_FORUM = "startforum";
-	protected static final String ACTION_SHOW_FILE = "showfile";
-	protected static final String ACTION_DELETE_ELEMENT = "delete";
-	private static final int TABLE_RESULTS_PER_PAGE = 5;
-
-	private DialogElementsPropertyManager dialogElmsMgr;
-	private VelocityContainer content;
-	private TableController tableCtr;
-	private CourseNode courseNode;
-	private FileUploadController fileUplCtr;
-	private LinkChooserController fileCopyCtr;
-	private StackedPanel dialogPanel;
-	private ForumManager forumMgr;
-	private DialogElement recentDialogElement, selectedElement;
-	private DialogElementsTableModel tableModel;
-	private DialogBoxController confirmDeletionCtr;
-	private ContextualSubscriptionController csCtr;
-	private ForumCallback forumCallback;
-	private SubscriptionContext subsContext;
-	private CoursePropertyManager coursePropMgr;
-	private boolean isOlatAdmin;
-	private boolean isGuestOnly;
-	private NodeEvaluation nodeEvaluation;
-	private UserCourseEnvironment userCourseEnv;
-	private TableGuiConfiguration tableConf;
-	private Link uploadButton;
-	private Link copyButton;
-	private Controller forumCtr;
-	private CloseableModalController cmc;
-
-	public DialogElementsController(UserRequest ureq, WindowControl wControl, CourseNode courseNode, UserCourseEnvironment userCourseEnv,
-			NodeEvaluation nodeEvaluation) {
-		super(ureq, wControl);
-		this.nodeEvaluation = nodeEvaluation;
-		this.userCourseEnv = userCourseEnv;
-		this.coursePropMgr = userCourseEnv.getCourseEnvironment().getCoursePropertyManager();
-		this.courseNode = courseNode;
-		forumMgr = ForumManager.getInstance();
-		dialogElmsMgr = DialogElementsPropertyManager.getInstance();
-
-		content = createVelocityContainer("dialog");		
-		uploadButton = LinkFactory.createButton("dialog.upload.file", content, this);
-		uploadButton.setIconLeftCSS("o_icon o_icon-fw o_icon_upload");
-		uploadButton.setElementCssClass("o_sel_dialog_upload");
-		
-		isOlatAdmin = ureq.getUserSession().getRoles().isOLATAdmin();
-		isGuestOnly = ureq.getUserSession().getRoles().isGuestOnly();
-
-		// add copy from course folder if user has course editor rights (course owner and users in a right group with the author right)
-		Identity identity = ureq.getIdentity();
-		ICourse course = CourseFactory.loadCourse(userCourseEnv.getCourseEnvironment().getCourseResourceableId());
-		RepositoryManager rm = RepositoryManager.getInstance();
-		RepositoryEntry entry = rm.lookupRepositoryEntry(course, true);
-		if (isOlatAdmin || rm.isOwnerOfRepositoryEntry(identity, entry)
-				|| userCourseEnv.getCourseEnvironment().getCourseGroupManager().hasRight(identity, CourseRights.RIGHT_COURSEEDITOR)) {
-			copyButton = LinkFactory.createButton("dialog.copy.file", content, this);
-		}
-		
-		forumCallback = userCourseEnv.isCourseReadOnly() ?
-				new ReadOnlyDialogNodeForumCallback(nodeEvaluation, isOlatAdmin, isGuestOnly, subsContext) :
-				new DialogNodeForumCallback(nodeEvaluation, isOlatAdmin, isGuestOnly, subsContext);
-		content.contextPut("security", forumCallback);
-		
-		if(isGuestOnly){
-			//guests cannot subscribe (OLAT-2019)
-			subsContext = null;
-		}else{
-			subsContext = CourseModule.createSubscriptionContext(userCourseEnv.getCourseEnvironment(), courseNode);
-		}
-		
-		// if sc is null, then no subscription is desired
-		if (subsContext != null) {
-			// FIXME:fj: implement subscription callback for group forums
-			String businessPath = wControl.getBusinessControl().getAsString();
-			PublisherData pdata = new PublisherData(OresHelper.calculateTypeName(DialogElement.class), "", businessPath);
-			csCtr = new ContextualSubscriptionController(ureq, getWindowControl(), subsContext, pdata);
-			listenTo(csCtr);
-			content.put("subscription", csCtr.getInitialComponent());
-		}
-		//configure and display table
-		tableConf = new TableGuiConfiguration();
-		tableConf.setResultsPerPage(TABLE_RESULTS_PER_PAGE);
-		tableConf.setPreferencesOffered(true, "FileDialogElementsTable");
-		tableConf.setDownloadOffered(true);
-		dialogPanel = putInitialPanel(content);
-		showOverviewTable(ureq, forumCallback);
-	}
-
-	private void showOverviewTable(UserRequest ureq, ForumCallback callback) {
-		removeAsListenerAndDispose(tableCtr);
-		tableCtr = new TableController(tableConf, ureq, getWindowControl(), getTranslator());
-		DialogPropertyElements elements = dialogElmsMgr.findDialogElements(coursePropMgr, courseNode);
-		List<DialogElement> list = new ArrayList<DialogElement>();
-		tableModel = new DialogElementsTableModel(getTranslator(), callback, courseNode.getModuleConfiguration());
-		if (elements != null) list = elements.getDialogPropertyElements();
-		for (Iterator<DialogElement> iter = list.iterator(); iter.hasNext();) {
-			DialogElement element = iter.next();
-			Integer msgCount = forumMgr.countMessagesByForumID(element.getForumKey());
-			element.setMessagesCount(msgCount);
-			element.setNewMessages(new Integer(msgCount.intValue()
-					- forumMgr.countReadMessagesByUserAndForum(ureq.getIdentity(), element.getForumKey())));
-		}
-		tableModel.setEntries(list);
-		tableModel.addColumnDescriptors(tableCtr);
-		tableCtr.setTableDataModel(tableModel);
-		tableCtr.modelChanged();
-	    tableCtr.setSortColumn(3, false);
-	    listenTo(tableCtr);
-		content.put("dialogElementsTable", tableCtr.getInitialComponent());
-		dialogPanel.setContent(content);
-	}
-
-	/**
-	 * @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)
-	 */
-	@Override
-	public void event(UserRequest ureq, Controller source, Event event) {
-		DialogElement entry = null;
-		// process table events
-		if (source == tableCtr) {
-			TableEvent te = (TableEvent) event;
-			String command = te.getActionId();
-			int row = te.getRowId();
-			entry = tableModel.getEntryAt(row);
-			if (command.equals(ACTION_START_FORUM)) {
-				selectedElement = dialogElmsMgr.findDialogElement(coursePropMgr, courseNode, entry.getForumKey());
-				if(selectedElement == null){
-					showInfo("element.already.deleted");
-					return;
-				}
-				Forum forum = null;
-				forum = forumMgr.loadForum(entry.getForumKey());
-				content.contextPut("hasSelectedElement", Boolean.TRUE);
-				content.contextPut("selectedElement", selectedElement);
-
-				// display forum either inline or as popup
-				String integration = (String) courseNode.getModuleConfiguration().get(DialogConfigForm.DIALOG_CONFIG_INTEGRATION);
-				
-				subsContext = CourseModule.createSubscriptionContext(userCourseEnv.getCourseEnvironment(), courseNode, forum.getKey().toString());
-				forumCallback = userCourseEnv.isCourseReadOnly() ?
-						new ReadOnlyDialogNodeForumCallback(nodeEvaluation, isOlatAdmin, isGuestOnly, subsContext) :
-						new DialogNodeForumCallback(nodeEvaluation, isOlatAdmin, isGuestOnly, subsContext);
-				content.contextPut("security", forumCallback);
-				
-				if (integration.equals(DialogConfigForm.CONFIG_INTEGRATION_VALUE_INLINE)) {
-					removeAsListenerAndDispose(forumCtr);
-					forumCtr = ForumUIFactory.getStandardForumController(ureq, getWindowControl(), forum, forumCallback);
-					listenTo(forumCtr);
-					content.contextPut("hasInlineForum", Boolean.TRUE);
-					content.put("forum", forumCtr.getInitialComponent());
-				} else {
-					content.contextPut("hasInlineForum", Boolean.FALSE);					
-					TitleInfo titleInfo = new TitleInfo(translate("dialog.selected.element"), selectedElement.getFilename());
-					PopupBrowserWindow pbw = ForumUIFactory.getPopupableForumController(ureq, getWindowControl(), forum, forumCallback, titleInfo);
-					pbw.open(ureq);
-				}
-
-			} else if (command.equals(ACTION_SHOW_FILE)) {
-				doFileDelivery(ureq, entry.getForumKey());
-			} else if (command.equals(ACTION_DELETE_ELEMENT)) {
-				selectedElement = entry;
-				confirmDeletionCtr = activateYesNoDialog(ureq, translate("delete"), translate("element.delete", entry.getFilename()), confirmDeletionCtr);
-				return;
-			}
-			// process file upload events
-		} else if (source == cmc) {
-			// reset recent element
-			recentDialogElement = null;
-			showOverviewTable(ureq, forumCallback);
-			// cleanup
-			removeAsListenerAndDispose(cmc);
-			cmc = null;
-			removeAsListenerAndDispose(fileUplCtr);
-			fileUplCtr = null;
-			
-		} else if (source == fileUplCtr) {
-			// clear dialog
-			cmc.deactivate();
-			removeAsListenerAndDispose(cmc);
-			cmc = null;
-			// event.
-			if (event.getCommand().equals(FolderEvent.UPLOAD_EVENT)) {
-				String filename = null;
-				try {
-					// get size of file
-					OlatRootFolderImpl forumContainer = getForumContainer(recentDialogElement.getForumKey());
-					VFSLeaf vl = (VFSLeaf) forumContainer.getItems().get(0);
-					String fileSize = Formatter.formatBytes(vl.getSize());
-
-					// new dialog element
-					filename = ((FolderEvent) event).getFilename();
-					DialogElement element = new DialogElement();
-					element.setAuthor(recentDialogElement.getAuthor());
-					element.setDate(new Date());
-					element.setFilename(filename);
-					element.setForumKey(recentDialogElement.getForumKey());
-					element.setFileSize(fileSize);
-
-					// do logging
-					//ThreadLocalUserActivityLogger.log(CourseLoggingAction.DIALOG_ELEMENT_FILE_UPLOADED, getClass(), LoggingResourceable.wrapUploadFile(filename));
-
-
-					// inform subscription manager about new element
-					if (subsContext != null) {
-						NotificationsManager.getInstance().markPublisherNews(subsContext, ureq.getIdentity(), true);
-					}
-					//everything when well so save the property
-					dialogElmsMgr.addDialogElement(coursePropMgr, courseNode, element);
-				} catch (Exception e) {
-					//
-					throw new OLATRuntimeException(DialogElementsController.class, "Error while adding new 'file discussion' element with filename: "+filename, e);
-				}
-			}
-			// cleanup file upload controller
-			removeAsListenerAndDispose(fileUplCtr);
-			fileUplCtr = null;
-			// reset recent element
-			recentDialogElement = null;
-			showOverviewTable(ureq, forumCallback);
-
-		} else if (source == fileCopyCtr) {
-			if (event == Event.DONE_EVENT || event == Event.CANCELLED_EVENT) {
-				// reset recent element
-				recentDialogElement = null;
-				showOverviewTable(ureq, forumCallback);
-			} else if (event instanceof URLChoosenEvent) {
-				URLChoosenEvent choosenEvent = (URLChoosenEvent)event;
-				String fileUrl = choosenEvent.getURL();
-				if(fileUrl.indexOf("://") < 0) {
-					//copy file
-					VFSContainer courseContainer = userCourseEnv.getCourseEnvironment().getCourseFolderContainer();
-					VFSLeaf vl = (VFSLeaf) courseContainer.resolve(fileUrl);
-					OlatRootFolderImpl forumContainer = getForumContainer(recentDialogElement.getForumKey());
-					VFSLeaf copyVl = forumContainer.createChildLeaf(vl.getName());
-					if(copyVl == null) {
-						copyVl = (VFSLeaf)forumContainer.resolve(vl.getName());
-					}
-					VFSManager.copyContent(vl, copyVl);
-					
-					// get size of file
-					String fileSize = Formatter.formatBytes(copyVl.getSize());
-
-					DialogElement element = new DialogElement();
-					element.setAuthor(recentDialogElement.getAuthor());
-					element.setDate(new Date());
-					element.setFilename(vl.getName());
-					element.setForumKey(recentDialogElement.getForumKey());
-					element.setFileSize(fileSize);
-
-					// do logging
-					//ThreadLocalUserActivityLogger.log(CourseLoggingAction.DIALOG_ELEMENT_FILE_UPLOADED, getClass(), LoggingResourceable.wrapUploadFile(filename));
-
-					// inform subscription manager about new element
-					if (subsContext != null) {
-						NotificationsManager.getInstance().markPublisherNews(subsContext, ureq.getIdentity(), true);
-					}
-					//everything when well so save the property
-					dialogElmsMgr.addDialogElement(coursePropMgr, courseNode, element);
-				}
-				
-				//not supported
-				recentDialogElement = null;
-				showOverviewTable(ureq, forumCallback);
-			}
-		} else if (source == confirmDeletionCtr) {
-			if (DialogBoxUIFactory.isYesEvent(event)) {
-				DialogCourseNode node = (DialogCourseNode) courseNode;
-				// archive data to personal folder
-				node.doArchiveElement(selectedElement, CourseFactory.getOrCreateDataExportDirectory(getIdentity(), node.getShortTitle()), getLocale());
-				// delete element
-				dialogElmsMgr.deleteDialogElement(coursePropMgr, courseNode, selectedElement.getForumKey());
-				forumMgr.deleteForum(selectedElement.getForumKey());
-				showOverviewTable(ureq, forumCallback);
-				content.contextPut("hasSelectedElement", Boolean.FALSE);
-				//do logging
-				ThreadLocalUserActivityLogger.log(CourseLoggingAction.DIALOG_ELEMENT_FILE_DELETED, getClass(),
-						LoggingResourceable.wrapUploadFile(selectedElement.getFilename()));
-			}
-		}
-	}
-
-	/**
-	 * deliver the selected file and show in a popup
-	 * 
-	 * @param ureq
-	 * @param command
-	 */
-	private void doFileDelivery(UserRequest ureq, Long forumKey) {
-		OlatRootFolderImpl forumContainer = getForumContainer(forumKey);
-		List<VFSItem> items = forumContainer.getItems(new VFSLeafFilter());
-		if(items.size() > 0 && items.get(0) instanceof VFSLeaf) {
-			VFSLeaf vl = (VFSLeaf)items.get(0);
-			ureq.getDispatchResult().setResultingMediaResource(new VFSMediaResource(vl));
-			ThreadLocalUserActivityLogger.log(CourseLoggingAction.DIALOG_ELEMENT_FILE_DOWNLOADED, getClass(),
-					LoggingResourceable.wrapBCFile(vl.getName()));
-		} else {
-			logError("No file to discuss: " + forumContainer, null);
-		}
-	}
-
-	public void event(UserRequest ureq, Component source, Event event) {
-		// process my content events
-		if (source == content) {
-			String command = event.getCommand();
-			if (command.equals(ACTION_SHOW_FILE)) {
-				doFileDelivery(ureq, selectedElement.getForumKey());
-			}
-		} else if (source == uploadButton){
-			Forum forum = forumMgr.addAForum();
-			OlatRootFolderImpl forumContainer = getForumContainer(forum.getKey());
-			
-			removeAsListenerAndDispose(fileUplCtr);
-			fileUplCtr = new FileUploadController(getWindowControl(),forumContainer, ureq, (int)FolderConfig.getLimitULKB(), Quota.UNLIMITED, null, false, false, false, false, true, false);
-			listenTo(fileUplCtr);
-			
-			recentDialogElement = new DialogElement();
-			recentDialogElement.setForumKey(forum.getKey());
-			recentDialogElement.setAuthor(ureq.getIdentity().getName());
-			removeAsListenerAndDispose(cmc);
-			cmc = new CloseableModalController(getWindowControl(), "close", fileUplCtr.getInitialComponent(), true, translate("dialog.upload.file"));
-			listenTo(cmc);
-			cmc.activate();
-		} else if (source == copyButton) {
-			Forum forum = forumMgr.addAForum();
-			VFSContainer courseContainer = userCourseEnv.getCourseEnvironment().getCourseFolderContainer();
-			fileCopyCtr = new MyLinkChooserController(ureq, getWindowControl(), courseContainer, null);
-			listenTo(fileCopyCtr);
-			
-			recentDialogElement = new DialogElement();
-			recentDialogElement.setForumKey(forum.getKey());
-			recentDialogElement.setAuthor(ureq.getIdentity().getName());
-			dialogPanel.setContent(fileCopyCtr.getInitialComponent());
-		}
-
-	}
-
-	/**
-	 * to save content
-	 * 
-	 * @param forumKey
-	 * @return
-	 */
-	public static OlatRootFolderImpl getForumContainer(Long forumKey) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("/forum/");
-		sb.append(forumKey);
-		sb.append("/");
-		String pathToForumDir = sb.toString();
-		OlatRootFolderImpl forumContainer = new OlatRootFolderImpl(pathToForumDir, null);
-		File baseFile = forumContainer.getBasefile();
-		baseFile.mkdirs();
-		return forumContainer;
-	}
-	
-	public static String getFileSize(Long forumKey){
-		OlatRootFolderImpl forumContainer = getForumContainer(forumKey);
-		VFSLeaf vl = (VFSLeaf) forumContainer.getItems().get(0);
-		return Formatter.formatBytes(vl.getSize());
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
-	 */
-	protected void doDispose() {
-		//
-	}
-	
-	private class MyLinkChooserController extends LinkChooserController {
-		public MyLinkChooserController(UserRequest ureq, WindowControl wControl, VFSContainer rootDir, String uploadRelPath) {
-			super(ureq, wControl, rootDir, uploadRelPath, null, null, false, "", null, true);
-		}
-		
-		@Override
-		//this is a hack to overwrite the package used by the BasicController
-		protected VelocityContainer createVelocityContainer(String page) {
-			setTranslator(Util.createPackageTranslator(LinkChooserController.class, getLocale()));
-			velocity_root = Util.getPackageVelocityRoot(LinkChooserController.class);
-			return super.createVelocityContainer(page);
-		}
-
-		@Override
-		public void event(UserRequest ureq, Controller source, Event event) {
-			fireEvent(ureq, event);
-		}
-	}
-}
diff --git a/src/main/java/org/olat/modules/dialog/DialogElementsPropertyManager.java b/src/main/java/org/olat/modules/dialog/DialogElementsPropertyManager.java
deleted file mode 100644
index 24a127db7fc630327a8ef2324babaae20d51e90a..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/dialog/DialogElementsPropertyManager.java
+++ /dev/null
@@ -1,201 +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.modules.dialog;
-
-/**
- * Description:<br>
- * TODO: guido Class Description for DialogElement
- * <P>
- * Initial Date: 14.11.2005 <br>
- * 
- * @author guido
- */
-import java.util.Iterator;
-import java.util.List;
-
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.logging.AssertException;
-import org.olat.core.logging.OLATRuntimeException;
-import org.olat.core.manager.BasicManager;
-import org.olat.core.util.coordinate.CoordinatorManager;
-import org.olat.core.util.coordinate.SyncerExecutor;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.core.util.xml.XStreamHelper;
-import org.olat.course.nodes.CourseNode;
-import org.olat.course.nodes.DialogCourseNode;
-import org.olat.course.properties.CoursePropertyManager;
-import org.olat.properties.Property;
-import org.olat.properties.PropertyManager;
-
-public class DialogElementsPropertyManager extends BasicManager {
-	public static final String PROPERTY_NAME = "fileDialog";
-	// create with spring
-	private static DialogElementsPropertyManager dialogElementsManager = new DialogElementsPropertyManager();
-
-	private DialogElementsPropertyManager() {
-	// private constr. for singleton
-	}
-
-	/**
-	 * @return single instance
-	 */
-	public static DialogElementsPropertyManager getInstance() {
-		return dialogElementsManager;
-	}
-
-	/**
-	 * @param userCourseEnv
-	 * @param courseNode
-	 * @return an empty DialogPropertyElements if noting found or the populated object
-	 */
-	public DialogPropertyElements findDialogElements(CoursePropertyManager coursePropMgr, CourseNode courseNode) {
-		Property property = coursePropMgr.findCourseNodeProperty(courseNode, null, null, PROPERTY_NAME);
-		if (property == null) return new DialogPropertyElements(PROPERTY_NAME);
-		else return (DialogPropertyElements) XStreamHelper.fromXML(property.getTextValue());
-	}
-
-	/**
-	 * Find all DialogElements for a certain coursenode
-	 * 
-	 * @param courseId
-	 * @param courseNodeId
-	 * @return a Object containing a collection of DialogElements
-	 */
-	public DialogPropertyElements findDialogElements(Long courseId, String courseNodeId) {
-		Property prop = findProperty(courseId, courseNodeId);
-		if (prop == null) return new DialogPropertyElements(PROPERTY_NAME);
-		return (DialogPropertyElements) XStreamHelper.fromXML(prop.getTextValue());
-	}
-
-	/**
-	 * @param userCourseEnv
-	 * @param courseNode
-	 * @param fileDialogId
-	 * @return
-	 */
-	protected DialogElement findDialogElement(CoursePropertyManager coursePropMgr, CourseNode courseNode, Long forumKey) {
-		DialogPropertyElements elements = findDialogElements(coursePropMgr, courseNode);
-		if (elements != null) {
-			List<DialogElement> list = elements.getDialogPropertyElements();
-			for (DialogElement element : list) {
-				if (element.getForumKey().equals(forumKey)) return element;
-			}
-		} else {
-			throw new OLATRuntimeException(this.getClass(), "trying to find property element, but no properties yet exists: coursenode "
-					+courseNode.getShortTitle()+"("+courseNode.getIdent()+") and forum with key: "+forumKey, null);
-		}
-		// no match
-		return null;
-	}
-
-	/**
-	 * Deletes a single dialog element which are all in one property stored. The
-	 * property will still exist even if it contains no elements
-	 * 
-	 * @param userCourseEnv
-	 * @param courseNode
-	 * @param fileDialogId
-	 */
-	protected void deleteDialogElement(final CoursePropertyManager coursePropMgr, final CourseNode courseNode, Long forumKey) {
-		final DialogPropertyElements elements = findDialogElements(coursePropMgr, courseNode);
-		if (elements != null) {
-			final List<DialogElement> list = elements.getDialogPropertyElements();
-			for (Iterator<DialogElement> iter = list.iterator(); iter.hasNext();) {
-				final DialogElement element = iter.next();
-				if (element.getForumKey().equals(forumKey)) {					
-          //o_clusterOK by:ld 
-					OLATResourceable courseNodeResourceable = OresHelper.createOLATResourceableInstance(DialogCourseNode.class, new Long(courseNode.getIdent()));
-					CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(courseNodeResourceable, new SyncerExecutor(){
-					  public void execute() {
-						list.remove(element);
-						String dialogElementsAsXML = XStreamHelper.toXML(elements);
-						Property property = coursePropMgr.findCourseNodeProperty(courseNode, null, null, PROPERTY_NAME);
-
-						property.setTextValue(dialogElementsAsXML);
-						coursePropMgr.updateProperty(property);						
-					  }});	
-					break;
-				}					
-			}			
-		} else {
-			throw new OLATRuntimeException(this.getClass(), "trying to delete property element, but no properties yet exist for course node: "+courseNode.getIdent(), null);
-		}
-	}
-
-	/**
-	 * persits a new added dialog element in the course node property
-	 * 
-	 * @param userCourseEnv
-	 * @param courseNode
-	 * @param forumKey
-	 * @param fileName
-	 * @param authorUsername
-	 * @param fileDialogId
-	 */
-	public void addDialogElement(final CoursePropertyManager coursePropMgr, final CourseNode courseNode, final DialogElement element) {
-		//o_clusterOK by:ld (it was assumed that the courseNodeId - used for constructing  the olatResourceable - is unique over all courses)
-		OLATResourceable courseNodeResourceable = OresHelper.createOLATResourceableInstance(DialogCourseNode.class, new Long(courseNode.getIdent()));
-		CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(courseNodeResourceable, new SyncerExecutor(){
-		  public void execute() {
-		  	DialogPropertyElements dialogProps = findDialogElements(coursePropMgr, courseNode);
-
-				dialogProps.addElement(element);
-				String dialogElementsAsXML = XStreamHelper.toXML(dialogProps);
-				Property property = coursePropMgr.findCourseNodeProperty(courseNode, null, null, PROPERTY_NAME);
-				if (property == null) {
-					property = coursePropMgr.createCourseNodePropertyInstance(courseNode, null, null, PROPERTY_NAME, null, null, null,
-							dialogElementsAsXML);
-					coursePropMgr.saveProperty(property);
-				} else {
-					property.setTextValue(dialogElementsAsXML);
-					coursePropMgr.updateProperty(property);
-				}		 
-	  }});				
-	}
-
-	private Property findProperty(Long courseId, String courseNodeId) {
-		PropertyManager propMrg = PropertyManager.getInstance();
-		String category = "NID:dial::" + courseNodeId;
-		List<Property> elements = propMrg.findProperties(null, null, "CourseModule", courseId, category, PROPERTY_NAME);
-		if (elements.size() == 0) return null; //no match
-		if (elements.size() != 1) throw new AssertException(
-				"Found more then one property for a course node 'dialog element' which should never happen!");
-		return elements.get(0);
-	}
-
-	/**
-	 * Delete the file dialog course node poperty
-	 * 
-	 * @param courseId
-	 * @param courseNodeId
-	 */
-	public void deleteProperty(Long courseId, String courseNodeId) {
-		Property prop = findProperty(courseId, courseNodeId);
-		PropertyManager propMrg = PropertyManager.getInstance();
-		if (prop != null) propMrg.deleteProperty(prop);
-	}
-	
-}
diff --git a/src/main/java/org/olat/modules/dialog/DialogElementsTableModel.java b/src/main/java/org/olat/modules/dialog/DialogElementsTableModel.java
deleted file mode 100644
index ffc21fc21d6a0a1840290ba6b9d77636b158a0cc..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/dialog/DialogElementsTableModel.java
+++ /dev/null
@@ -1,183 +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.modules.dialog;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-
-import org.olat.core.gui.components.table.BaseTableDataModelWithoutFilter;
-import org.olat.core.gui.components.table.DefaultColumnDescriptor;
-import org.olat.core.gui.components.table.StaticColumnDescriptor;
-import org.olat.core.gui.components.table.Table;
-import org.olat.core.gui.components.table.TableController;
-import org.olat.core.gui.components.table.TableDataModel;
-import org.olat.core.gui.render.Renderer;
-import org.olat.core.gui.render.StringOutput;
-import org.olat.core.gui.render.URLBuilder;
-import org.olat.core.gui.translator.Translator;
-import org.olat.course.nodes.dialog.DialogConfigForm;
-import org.olat.modules.ModuleConfiguration;
-import org.olat.modules.fo.ForumCallback;
-
-/**
- * Description:<br>
- * Table model for run mode of course node "file dialog"
- * <P>
- * Initial Date: 08.11.2005 <br>
- * 
- * @author guido
- */
-public class DialogElementsTableModel extends BaseTableDataModelWithoutFilter<DialogElement> implements TableDataModel<DialogElement> {
-
-	private static final int COLUMN_COUNT = 9;
-	private List<DialogElement> entries = new ArrayList<DialogElement>();
-	protected Translator translator;
-	private ForumCallback callback;
-	private ModuleConfiguration config;
-
-	/**
-	 * @param translator
-	 */
-	public DialogElementsTableModel(Translator translator, ForumCallback callback, ModuleConfiguration config) {
-		this.translator = translator;
-		this.callback = callback;
-		this.config = config;
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.table.TableDataModel#getColumnCount()
-	 */
-	public int getColumnCount() {
-		return COLUMN_COUNT;
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.table.TableDataModel#getRowCount()
-	 */
-	public int getRowCount() {
-		return entries.size();
-	}
-
-	/**
-	 * @param num
-	 * @return
-	 */
-	public DialogElement getEntryAt(int num) {
-		return entries.get(num);
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.table.TableDataModel#getValueAt(int, int)
-	 */
-	public Object getValueAt(int row, int col) {
-		DialogElement entry = getEntryAt(row);
-		switch (col) {
-			case 0:
-				if (entry.getFilename().length() > 30) { return entry.getFilename().substring(0, 30) + "..."; }
-				return entry.getFilename();
-			case 1:
-				return entry.getAuthor();
-			case 2:
-				return entry.getFileSize();
-			case 3:
-				return entry.getDate();
-			case 4:
-				return entry.getNewMessages();
-			case 5:
-				return entry.getMessagesCount();
-			default:
-				return "ERROR";
-		}
-	}
-
-	public void addColumnDescriptors(TableController tableCtr) {
-		Locale loc = translator.getLocale();
-		if (callback != null) {
-			tableCtr.addColumnDescriptor(new FileDownloadColumnDescriptor("table.header.filename", 0, loc));
-		} else {
-			tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.header.filename", 0, null, loc));
-		}
-		if (callback != null) {
-			StaticColumnDescriptor statColdesc = new StaticColumnDescriptor(DialogElementsController.ACTION_START_FORUM, "table.header.forum",
-					translator.translate("dialog.start"));
-			// if configured open forum as popup
-			String integration = (String) config.get(DialogConfigForm.DIALOG_CONFIG_INTEGRATION);
-			if (integration.equals(DialogConfigForm.CONFIG_INTEGRATION_VALUE_POPUP)) {
-				statColdesc.setIsPopUpWindowAction(true, DefaultColumnDescriptor.DEFAULT_POPUP_ATTRIBUTES);
-			}
-			tableCtr.addColumnDescriptor(statColdesc);
-		}
-		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.header.author", 1, null, loc));
-		tableCtr.addColumnDescriptor(false, new DefaultColumnDescriptor("table.header.size", 2, null, loc));
-		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.header.date", 3, null, loc));
-		if (callback != null) tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.header.newmessages", 4, null, loc));
-		if (callback != null) tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.header.messages", 5, null, loc));
-		// callback is null in course editor environement where we dont need
-		// security calls
-		if (callback != null && callback.mayDeleteMessageAsModerator()) tableCtr.addColumnDescriptor(new StaticColumnDescriptor(
-				DialogElementsController.ACTION_DELETE_ELEMENT, "table.header.action", translator.translate("delete")));
-	}
-
-	/**
-	 * Set entries to be represented by this table model.
-	 * 
-	 * @param entries
-	 */
-	public void setEntries(List<DialogElement> entries) {
-		this.entries = entries;
-	}
-	
-	private static class FileDownloadColumnDescriptor extends DefaultColumnDescriptor {
-		
-		public FileDownloadColumnDescriptor(String headerKey, int dataColumn, Locale locale) {
-			super(headerKey, dataColumn, null, locale);
-		}
-
-		@Override
-		public void renderValue(StringOutput sb, int row, Renderer renderer) {
-			if(renderer == null) {//download
-				int sortedRow = table.getSortedRow(row);
-				Object entry = table.getTableDataModel().getValueAt(sortedRow, getDataColumn());
-				if(entry != null) {
-					sb.append(entry.toString());
-				}
-			} else {
-				URLBuilder ubu = renderer.getUrlBuilder();
-				ubu = ubu.createCopyFor(getTable());
-				
-				int sortedRow = table.getSortedRow(row);
-				Object entry = table.getTableDataModel().getValueAt(sortedRow, getDataColumn());
-	
-				StringOutput link = new StringOutput();
-				ubu.buildURI(link, new String[] { Table.COMMANDLINK_ROWACTION_CLICKED, Table.COMMANDLINK_ROWACTION_ID }, new String[] { String.valueOf(sortedRow), DialogElementsController.ACTION_SHOW_FILE }); // url
-				sb.append("<a href=\"javascript:o_openPopUp('").append(link).append(entry.toString()).append("','fileview','600','700','no')\">")
-				  .append(entry.toString())
-				  .append("</a>");
-			}
-		}
-	}
-}
diff --git a/src/main/java/org/olat/modules/dialog/_content/dialog.html b/src/main/java/org/olat/modules/dialog/_content/dialog.html
deleted file mode 100644
index 957269fa65a99e5d815ccad7e9fb522ce56bfd90..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/dialog/_content/dialog.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<div class="o_sel_dialog">
-<div class="clearfix">
-    #if ($r.available("subscription"))
-		$r.render("subscription")	
-    #end
-	#if ($security.mayOpenNewThread())
-		$r.render("dialog.upload.file")
-	    #if ($r.available("dialog.copy.file"))
-			$r.render("dialog.copy.file")
-		#end
-	#end
-</div>
-<hr />
-$r.render("dialogElementsTable")	
-#if($hasSelectedElement && $hasInlineForum)
-	<div class="panel panel-default o_block_large_top">
-		<div class="panel-heading">
-			<h3 class="panel-title">$r.translate("dialog.selected.element"): 
-				<i class="o_icon o_icon-fw $r.getFiletypeIconCss($selectedElement.getFilename())"> </i> 
-				$selectedElement.getFilename()
-			</h3>
-		</div>
-		<div class="panel-body">
-		#if($hasInlineForum)
-			$r.render("forum")
-		#end
-		</div>
-	</div>
-#end
-</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_ar.properties
deleted file mode 100644
index 11c844029ff44f8c708ba307a780b52c371358a3..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_ar.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-#Sun Feb 21 13:16:19 CET 2010
-dialog.selected.element=\u0645\u0644\u0641 \u0627\u0644\u0645\u0646\u0627\u0642\u0634\u0629
-dialog.start=\u0639\u0631\u0636
-dialog.upload.file=\u062A\u062D\u0645\u064A\u0644 \u0645\u0644\u0641
-element.already.deleted=\u0644\u0642\u062F \u062A\u0645 \u062D\u0630\u0641 \u0627\u0644\u0639\u0646\u0635\u0631 \u0627\u0644\u0645\u062D\u062F\u062F \u0645\u0646 \u0642\u0628\u0644 \u0645\u0633\u062A\u062E\u062F\u0645 \u0622\u062E\u0631\u060C \u064A\u0631\u062C\u0649 \u062A\u062D\u062F\u064A\u062B \u0639\u0631\u0636 \u0627\u0644\u062C\u062F\u0648\u0644.
-element.delete=\u0648\u0627\u0644\u0645\u0646\u062A\u062F\u0649\u061F(<b>{0}</b>) \u0647\u0644 \u062A\u0631\u064A\u062F \u0641\u0639\u0644\u0627\u064B \u062A\u0631\u064A\u062F \u062D\u0630\u0641 \u0627\u0644\u0645\u0644\u0641\r\n \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0633\u0648\u0641 \u064A\u062A\u0645 \u062D\u0641\u0638\u0647\u0627 \u062A\u0644\u0642\u0627\u0626\u064A\u0627\u064B \u0641\u0649 \u0627\u0644\u0645\u062C\u0644\u062F \u0627\u0644\u0634\u062E\u0635\u0649\u060C \u0642\u0633\u0645 \u0627\u0644\u0623\u0631\u0634\u064A\u0641.
-notifications.entry={2} \u0645\u0644\u0641 \u062C\u062F\u064A\u062F \u0628\u0627\u0633\u0645 \:{0} \u0645\u0646 {1} \u0648\u0641\u0649\r\n \u062A\u0645 \u0625\u0646\u0634\u0627\u0626\u0647
-notifications.header="{0}" \u0645\u0644\u0641 \u062D\u0648\u0631 \u0641\u0649 \u0627\u0644\u0645\u0642\u0631\u0631
-table.header.action=\u0645\u0644\u0641
-table.header.author=\u0627\u0644\u0645\u0624\u0644\u0641
-table.header.date=\u0627\u0644\u062A\u0627\u0631\u064A\u062E
-table.header.filename=\u0627\u0633\u0645 \u0627\u0644\u0645\u0644\u0641
-table.header.filetype=\u0646\u0648\u0639 \u0627\u0644\u0645\u0644\u0641
-table.header.forum=\u0627\u0644\u0645\u0646\u0627\u0642\u0634\u0629
-table.header.messages=\u0631\u0633\u0627\u0626\u0644
-table.header.newmessages=\u063A\u064A\u0631 \u0645\u0642\u0631\u0624\u0629
-table.header.size=\u062D\u062C\u0645 \u0627\u0644\u0645\u0644\u0641
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_cs.properties
deleted file mode 100644
index 0770ae11ca70f9d509201ce8206d50091914db7a..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_cs.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-#Mon Mar 02 09:54:14 CET 2009
-dialog.selected.element=T\u00E9ma diskuze
-dialog.start=Za\u010D\u00EDt
-dialog.upload.file=Nahr\u00E1t soubor
-element.already.deleted=Vybran\u00E9 elementy byly smaz\u00E1ny jin\u00FDm u\u017Eivatelem. Pros\u00EDm obnovte zobrazen\u00ED tabulky.
-element.delete=Opravdu chcete smazat soubor (<b>{0}</b>) a jeho diskuzi? Data budou automticky archivov\u00E1na ve Va\u0161\u00ED osobn\u00ED slo\u017Ece, v sekci 'archive'.
-notifications.entry=Nov\u00FD soubor  jm\u00E9nem {0} od {1} vytvo\u0159en v {2}
-notifications.header=V modulu kurzu "Dialog souboru" je nov\u00FD soubor
-table.header.action=Soubor
-table.header.author=Autor
-table.header.date=Datum
-table.header.filename=Jm\u00E9no souboru
-table.header.filetype=Typ souboru
-table.header.forum=Diskuze
-table.header.messages=Zpr\u00E1vy
-table.header.newmessages=Nep\u0159e\u010Dteno
-table.header.size=Velikost souboru
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_de.properties
deleted file mode 100644
index eb44c04c972fb30dd605ce910ed4672314a04bba..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_de.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-#Mon Mar 02 09:54:04 CET 2009
-dialog.selected.element=Diskussion zur Datei
-dialog.start=Anzeigen
-dialog.upload.file=Datei hochladen
-dialog.copy.file=Datei kopieren
-element.already.deleted=Das gew\u00E4hle Element wurde in der Zwischenzeit von einem anderen Benutzer gel\u00F6scht. Bitte die Tabellenansicht neu laden.
-element.delete=Wollen Sie die Datei (<b>{0}</b>) inkl. der Diskussionsbeitr\u00E4ge l\u00F6schen? Die Daten werden automatisch in Ihrem pers\u00F6nlichen Ordner unter 'Archiv' abgelegt.
-notifications.entry=Neue Datei mit dem Namen\:{0} von {1} erstellt am {2}
-notifications.header=Dateidiskussion in Kurs "{0}"
-table.header.action=Datei
-table.header.author=Autor
-table.header.date=Datum
-table.header.filename=Dateiname
-table.header.filetype=Dateityp
-table.header.forum=Diskussion
-table.header.messages=Beitr\u00E4ge
-table.header.newmessages=Ungelesen
-table.header.size=Dateigr\u00F6sse
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_en.properties
deleted file mode 100644
index c1a2cd04d473382c187a92a536c716284ed2919c..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_en.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-#Mon May 16 17:34:03 CEST 2011
-dialog.copy.file=Copy file
-dialog.selected.element=Dialog regarding file
-dialog.start=Show
-dialog.upload.file=Upload file
-element.already.deleted=The element selected has been deleted by another user. Please refresh the table view.
-element.delete=Do you really want to delete the file (<b>{0}</b>) and its forum? Data will automatically be archived in your personal folder, section 'Archive'.
-notifications.entry=New file with file name\: {0} by {1} created on {2}
-notifications.header=File dialog in course "{0}"
-table.header.action=File
-table.header.author=Author
-table.header.date=Date
-table.header.filename=File name
-table.header.filetype=File type
-table.header.forum=Discussion
-table.header.messages=Contributions
-table.header.newmessages=Unread
-table.header.size=File size
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_es.properties
deleted file mode 100644
index 79078f65ff5a6b121d6ebfb54ed83690bcdfebb4..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_es.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-#Mon Mar 02 09:54:21 CET 2009
-dialog.selected.element=Discusi\u00F3n de datos
-dialog.start=Indicar
-dialog.upload.file=Subir archivo
-element.already.deleted=El elemento seleccionado ha sido eliminado por otro usuario en el tiempo intermedio.
-element.delete=\u00BFDeseas eliminar el archivo (<b<{0}</b>) y su foro correspondiente? Los datos son archivados autom\u00E1ticamente en tu carpeta personal en 'archivo'.
-notifications.entry=Nuevo archivo con nombre\:{0} de {1} creado en {2}
-notifications.header=Hay nuevo(s) archivo(s) en el m\u00F3dulo del curso "Di\u00E1logo de archivo"
-table.header.action=Archivo
-table.header.author=Autor
-table.header.date=Fecha
-table.header.filename=Nombre de archivo
-table.header.filetype=Tipo de archivo
-table.header.forum=Discusi\u00F3n
-table.header.messages=Mensajes
-table.header.newmessages=No le\u00EDdo
-table.header.size=Tama\u00F1o
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_fa.properties b/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_fa.properties
deleted file mode 100644
index 3e1b47a06cb8e0c705182f4f35d81442f1b31740..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_fa.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-#Mon Mar 02 09:54:13 CET 2009
-dialog.selected.element=\u0645\u0648\u0636\u0648\u0639 \u0628\u062D\u062B
-dialog.start=\u0634\u0631\u0648\u0639
-dialog.upload.file=\u0627\u0631\u0633\u0627\u0644 \u0641\u0627\u06CC\u0644
-element.already.deleted=\u062C\u0632\u0621 \u0627\u0646\u062A\u062E\u0627\u0628 \u0634\u062F\u0647 \u062A\u0648\u0633\u0637 \u06A9\u0627\u0631\u0628\u0631 \u062F\u06CC\u06AF\u0631\u06CC \u067E\u0627\u06A9 \u0634\u062F\u0647 \u0627\u0633\u062A.\u0644\u0637\u0641\u0627 \u0646\u0645\u0627\u06CC \u062C\u062F\u0648\u0644 \u062E\u0648\u062F \u0631\u0627 \u0628\u0627\u0632\u0622\u0648\u0631\u06CC \u06A9\u0646\u06CC\u062F
-element.delete=Do you really want to delete the file (<b>{0}</b>) and its forum? Data will automatically be archived in your personal folder, section 'archive'.
-notifications.entry=New file with file name\:{0} from {1} created at {2}
-notifications.header=There are new file(s) in the course module "File dialog"
-table.header.action=\u0641\u0627\u06CC\u0644
-table.header.author=\u0646\u0648\u06CC\u0633\u0646\u062F\u0647
-table.header.date=\u062A\u0627\u0631\u06CC\u062E
-table.header.filename=\u0646\u0627\u0645 \u0641\u0627\u06CC\u0644
-table.header.filetype=\u0646\u0648\u0639 \u0641\u0627\u06CC\u0644
-table.header.forum=\u0628\u062D\u062B \u0648 \u06AF\u0641\u062A\u06AF\u0648
-table.header.messages=\u067E\u06CC\u0627\u0645 \u0647\u0627
-table.header.newmessages=\u062E\u0648\u0627\u0646\u062F\u0647 \u0646\u0634\u062F\u0647
-table.header.size=\u0627\u0646\u062F\u0627\u0632\u0647 \u0641\u0627\u06CC\u0644
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_fr.properties
deleted file mode 100644
index 33814603c50b0411b6a1e1287c3391188b6e616d..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_fr.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-#Mon Oct 22 15:53:15 CEST 2012
-dialog.copy.file=Copier un document
-dialog.selected.element=discussion sur le fichier
-dialog.start=afficher
-dialog.upload.file=T\u00E9l\u00E9charger fichier
-element.already.deleted=L'\u00E9l\u00E9ment s\u00E9lectionn\u00E9 a \u00E9t\u00E9 effac\u00E9 entre temps par un autre utilisateur. Veuillez actualiser l'affichage du tableau.
-element.delete=Voulez-vous vraiment effacer le fichier (<b>{0}</b>) incl. les contributions de discussion? Les donn\u00E9es seront d\u00E9pos\u00E9es automatiquement dans votre dossier personnel sous 'archive'.
-notifications.entry=Nouveau fichier avec le nom\: {0} cr\u00E9\u00E9 par {1} le {2}
-notifications.header=Il y a de nouveaux fichier dans le module de cours "fichier discut\u00E9".
-table.header.action=fichier
-table.header.author=auteur
-table.header.date=date
-table.header.filename=nom de fichier
-table.header.filetype=type de fichier
-table.header.forum=discussion
-table.header.messages=contributions
-table.header.newmessages=non lus
-table.header.size=taille du fichier
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_jp.properties
deleted file mode 100644
index ff561c41a52772cc8deb767ceb5a98d2afce1a0b..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_jp.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-#Thu Sep 08 16:42:38 CEST 2011
-dialog.selected.element=\u30D5\u30A1\u30A4\u30EB\u306B\u95A2\u3059\u308B\u30C0\u30A4\u30A2\u30ED\u30B0
-dialog.start=\u30B9\u30BF\u30FC\u30C8
-dialog.upload.file=\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B
-element.already.deleted=\u9078\u629E\u3057\u305F\u30A8\u30EC\u30E1\u30F3\u30C8\u306F\u4ED6\u306E\u30E6\u30FC\u30B6\u306B\u3088\u3063\u3066\u524A\u9664\u3055\u308C\u307E\u3057\u305F\u3002\u30C6\u30FC\u30D6\u30EB\u30D3\u30E5\u30FC\u3092\u30EA\u30D5\u30EC\u30C3\u30B7\u30E5\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-element.delete=\u672C\u5F53\u306B\u30D5\u30A1\u30A4\u30EB (<b>{0}</b>) \u304A\u3088\u3073\u30D5\u30A9\u30FC\u30E9\u30E0\u3092\u524A\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B? \u30C7\u30FC\u30BF\u306F\u3042\u306A\u305F\u306E\u30D1\u30FC\u30BD\u30CA\u30EB\u30D5\u30A9\u30EB\u30C0\u30BB\u30AF\u30B7\u30E7\u30F3\u300C\u30A2\u30FC\u30AB\u30A4\u30D6\u300D\u306B\u81EA\u52D5\u7684\u306B\u30A2\u30FC\u30AB\u30A4\u30D6\u3055\u308C\u307E\u3059\u3002
-notifications.entry=\u65B0\u3057\u3044\u30D5\u30A1\u30A4\u30EB\: {0} \u4F5C\u6210\: {1} \u4F5C\u6210\u65E5\u6642\: {2}
-notifications.header=\u30B3\u30FC\u30B9\u300C {0} \u300D\u306E\u30D5\u30A1\u30A4\u30EB\u30C0\u30A4\u30A2\u30ED\u30B0
-table.header.action=\u30D5\u30A1\u30A4\u30EB
-table.header.author=\u4F5C\u8005
-table.header.date=\u65E5\u4ED8
-table.header.filename=\u30D5\u30A1\u30A4\u30EB\u540D
-table.header.filetype=\u30D5\u30A1\u30A4\u30EB\u30BF\u30A4\u30D7
-table.header.forum=\u30C7\u30A3\u30B9\u30AB\u30C3\u30B7\u30E7\u30F3
-table.header.messages=\u30E1\u30C3\u30BB\u30FC\u30B8
-table.header.newmessages=\u672A\u8AAD
-table.header.size=\u30D5\u30A1\u30A4\u30EB\u30B5\u30A4\u30BA
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_lt.properties b/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_lt.properties
deleted file mode 100644
index 79d46077b7d3fe7c4f571640c6619a0680099fb6..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_lt.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-#Mon Mar 02 09:54:02 CET 2009
-dialog.selected.element=Diskusijos pavadinimas
-dialog.start=Prad\u0117ti
-dialog.upload.file=Nusi\u0173sti rinkmen\u0105
-element.already.deleted=Pasirinktas elementas buvo i\u0161trintas kito vartotojo. Pra\u0161ome atsinaujinti lentel\u0117s vaizd\u0105.
-element.delete=Ar j\u016Bs tikrai norite i\u0161trinti rinkmen\u0105 (<b>{0}</b>) ir jos diskusij\u0105? Duomenys bus automati\u0161kai suarchyvuoti j\u016Bs\u0173 asmeniniame aplanke, sekcijoje \u201Carchyvas\u201D. 
-notifications.entry=Nauja rinkmena pavadinimu {0} i\u0161 {1}sukurta {2}
-notifications.header=Yra nauja \u017Einut\u0117(s) kurso modulyje \u201CRinkmenos dialogas\u201D
-table.header.action=Rinkmena
-table.header.author=Autorius
-table.header.date=Data
-table.header.filename=Rinkmenos pavadinimas
-table.header.filetype=Rinkmenos tipas
-table.header.forum=Diskusija
-table.header.messages=\u017Dinut\u0117
-table.header.newmessages=Neskaityta
-table.header.size=Rinkmenos  dydis
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_nl_NL.properties
deleted file mode 100644
index fcf247ddf1f2e0eb0f65287e63a1f60a567e23f5..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_nl_NL.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-#Thu Sep 08 16:42:46 CEST 2011
-dialog.selected.element=Dialoog betreffende bestand
-dialog.start=Toon
-dialog.upload.file=Bestand uploaden
-element.already.deleted=Het geselecteerde element werd door een andere gebruiker gewist. Gelieve het tabeloverzicht te verversen.
-element.delete=Weet u zeker dat u bestand (<b>{0}</b>) en zijn forum wilt verwijderen? Data zal automatisch gearchiveerd worden in uw persoonlijke map, sectie 'Archief'.
-notifications.entry=Nieuw bestand met bestandsnaam\: {0} door {1} aangemaakt op {2}
-notifications.header=Bestandsdialoog in cursus "{0}"
-table.header.action=Bestand
-table.header.author=Auteur
-table.header.date=Datum
-table.header.filename=Bestandsnaam
-table.header.filetype=Bestandstype
-table.header.forum=Discussie
-table.header.messages=Bijdrage
-table.header.newmessages=Ongelezen
-table.header.size=Bestandsgrootte
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_pl.properties
deleted file mode 100644
index 7ae76ab61c4dac9c21cc93080631ff932f29febb..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_pl.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-#Sun Dec 23 13:03:56 CET 2012
-dialog.copy.file=Kopiuj plik
-dialog.selected.element=Temat dyskusji
-dialog.start=Start 
-dialog.upload.file=Przeka\u017C plik
-element.already.deleted=Wybrany element zosta\u0142 usuni\u0119ty przez innego u\u017Cytkownika. Od\u015Bwie\u017C widok tabeli.
-element.delete=Czy naprawd\u0119 chcesz usun\u0105\u0107 plik (<b>{0}</b>) i jego forum? Dane b\u0119d\u0105 automatycznie zarchiwizowane w Twoim osobistym folderze w sekcji 'archive'.
-notifications.entry=Nowy plik o nazwie\:{0} z {1} utworzony {2}
-notifications.header=S\u0105 nowe pliki w module kursu "Okno pliku"
-table.header.action=Plik
-table.header.author=Autor
-table.header.date=Data
-table.header.filename=Nazwa pliku
-table.header.filetype=Typ pliku
-table.header.forum=Dyskusja
-table.header.messages=Wiadomo\u015Bci
-table.header.newmessages=Nieprzeczytane
-table.header.size=Rozmiar pliku
diff --git a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_zh_CN.properties
deleted file mode 100644
index 266b70aecf08ef83fd80c837f3ef5e6e67212edb..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/dialog/_i18n/LocalStrings_zh_CN.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-#Mon Mar 02 09:54:03 CET 2009
-dialog.selected.element=\u4E3B\u9898
-dialog.start=\u5F00\u59CB
-dialog.upload.file=\u4E0A\u4F20\u6587\u4EF6
-element.already.deleted=\u53E6\u4E00\u4E2A\u7528\u6237\u5DF2\u5220\u9664\u9009\u4E2D\u7684\u5143\u7D20. \u8BF7\u66F4\u65B0\u5217\u8868.
-element.delete=\u4F60\u786E\u5B9A\u8981\u5220\u9664\u8BE5\u6587\u4EF6 (<b>{0}</b>) \u53CA\u5176\u8BBA\u575B? \u6570\u636E\u5C06\u81EA\u52A8\u5B58\u50A8\u5230\u4F60\u7684\u4E2A\u4EBA\u6587\u4EF6\u5939 '\u5F52\u6863'\u4E2D\u3002
-notifications.entry=\u65B0\u6587\u4EF6\:{1} \u5728 {2}\u521B\u5EFA\u7684\u65B0\u6587\u4EF6 {0}
-notifications.header=\u5728"\u6587\u4EF6\u8BA8\u8BBA"\u4E2D\u6709\u65B0\u6587\u4EF6(s) 
-table.header.action=\u6587\u4EF6
-table.header.author=\u521B\u5EFA\u4EBA
-table.header.date=\u65E5\u671F
-table.header.filename=\u6587\u4EF6\u540D
-table.header.filetype=\u6587\u4EF6\u7C7B\u578B
-table.header.forum=\u8BA8\u8BBA
-table.header.messages=\u6D88\u606F
-table.header.newmessages=\u672A\u8BFB
-table.header.size=\u6587\u4EF6\u5927\u5C0F
diff --git a/src/main/java/org/olat/modules/fo/manager/ForumManager.java b/src/main/java/org/olat/modules/fo/manager/ForumManager.java
index b7a109b5f83ce9015115f0c580b6f0b79af40bb4..935aeacb113dc1c05f58ea7f69c6db2886154db4 100644
--- a/src/main/java/org/olat/modules/fo/manager/ForumManager.java
+++ b/src/main/java/org/olat/modules/fo/manager/ForumManager.java
@@ -261,7 +261,7 @@ public class ForumManager {
 	/**
 	 * Return the title of a message of the forum.
 	 */
-	public Integer countMessagesByForumID(Long forum_id) {
+	public int countMessagesByForumID(Long forum_id) {
 		return countMessagesByForumID(forum_id, false);
 	}
 	
diff --git a/src/main/java/org/olat/modules/fo/model/ForumImpl.java b/src/main/java/org/olat/modules/fo/model/ForumImpl.java
index 71e80a044a04fe349aab654f61e814480038e96f..11635603b6ae47720a7899dd958fe26170539485 100644
--- a/src/main/java/org/olat/modules/fo/model/ForumImpl.java
+++ b/src/main/java/org/olat/modules/fo/model/ForumImpl.java
@@ -33,6 +33,7 @@ import javax.persistence.Id;
 import javax.persistence.Table;
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
+import javax.persistence.Transient;
 import javax.persistence.Version;
 
 import org.hibernate.annotations.GenericGenerator;
@@ -93,6 +94,7 @@ public class ForumImpl implements Forum, CreateInfo, Persistable{
 	}
 
 	@Override
+	@Transient
 	public String getResourceableTypeName() {
 		return OresHelper.calculateTypeName(Forum.class);
 	}
diff --git a/src/main/java/org/olat/modules/wiki/WikiFileUploadController.java b/src/main/java/org/olat/modules/wiki/WikiFileUploadController.java
index 166dfc02e6b487d9726566f8732915d3b4f4c3bc..54885fe0c6f94850f9e4ff371149d524cefc471f 100644
--- a/src/main/java/org/olat/modules/wiki/WikiFileUploadController.java
+++ b/src/main/java/org/olat/modules/wiki/WikiFileUploadController.java
@@ -49,7 +49,7 @@ public class WikiFileUploadController extends BasicController {
 		VelocityContainer mainVC = this.createVelocityContainer("upload_file");
 		
 		fileUplCtr = new FileUploadController(getWindowControl(), mediaFolder, ureq,
-				(int)FolderConfig.getLimitULKB(), Quota.UNLIMITED, null, false, false, false, true, true, false);
+				FolderConfig.getLimitULKB(), Quota.UNLIMITED, null, false, false, false, true, true, false);
 		listenTo(fileUplCtr);
 		mainVC.put("fileUpload", fileUplCtr.getInitialComponent());
 		putInitialPanel(mainVC);
diff --git a/src/main/java/org/olat/search/service/indexer/repository/course/DialogCourseNodeIndexer.java b/src/main/java/org/olat/search/service/indexer/repository/course/DialogCourseNodeIndexer.java
index 880100a0c98b00f572624be342d31e516dc57ad6..4c6fe478f9581cbd6622ed52fbffdc16db6a4369 100644
--- a/src/main/java/org/olat/search/service/indexer/repository/course/DialogCourseNodeIndexer.java
+++ b/src/main/java/org/olat/search/service/indexer/repository/course/DialogCourseNodeIndexer.java
@@ -26,34 +26,30 @@
 package org.olat.search.service.indexer.repository.course;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 import org.apache.lucene.document.Document;
 import org.olat.basesecurity.BaseSecurityManager;
 import org.olat.basesecurity.Constants;
 import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.id.Roles;
 import org.olat.core.id.context.BusinessControl;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.util.resource.OresHelper;
+import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VFSLeaf;
 import org.olat.core.util.vfs.filters.VFSLeafFilter;
 import org.olat.course.ICourse;
 import org.olat.course.nodes.CourseNode;
-import org.olat.course.properties.CoursePropertyManager;
-import org.olat.modules.dialog.DialogElement;
-import org.olat.modules.dialog.DialogElementsController;
-import org.olat.modules.dialog.DialogElementsPropertyManager;
-import org.olat.modules.dialog.DialogPropertyElements;
+import org.olat.course.nodes.dialog.DialogElement;
+import org.olat.course.nodes.dialog.DialogElementsManager;
 import org.olat.modules.fo.Forum;
 import org.olat.modules.fo.Message;
 import org.olat.modules.fo.Status;
 import org.olat.modules.fo.manager.ForumManager;
+import org.olat.repository.RepositoryEntry;
 import org.olat.search.service.SearchResourceContext;
 import org.olat.search.service.document.CourseNodeDocument;
 import org.olat.search.service.document.ForumMessageDocument;
@@ -86,21 +82,13 @@ public class DialogCourseNodeIndexer extends DefaultIndexer implements CourseNod
 		Document document = CourseNodeDocument.createDocument(courseNodeResourceContext, courseNode);
 		indexWriter.addDocument(document);
 		
-		CoursePropertyManager coursePropMgr = course.getCourseEnvironment().getCoursePropertyManager();
-		DialogElementsPropertyManager dialogElmsMgr = DialogElementsPropertyManager.getInstance();
-		DialogPropertyElements elements = dialogElmsMgr.findDialogElements(coursePropMgr, courseNode);
-		List<DialogElement> list = new ArrayList<DialogElement>();
-		if (elements != null) list = elements.getDialogPropertyElements();
-		// loop over all dialog elements
-		for (Iterator<DialogElement> iter = list.iterator(); iter.hasNext();) {
-			DialogElement element = iter.next();
-			element.getAuthor();
-			element.getDate();
-			Forum forum = ForumManager.getInstance().loadForum(element.getForumKey());
-			// do IndexForum
+		RepositoryEntry entry = course.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
+		DialogElementsManager dialogElmsMgr = CoreSpringFactory.getImpl(DialogElementsManager.class);
+		List<DialogElement> elements = dialogElmsMgr.getDialogElements(entry, courseNode.getIdent());
+		for (DialogElement element:elements) {
+			Forum forum = element.getForum();
 			doIndexAllMessages(courseNodeResourceContext, forum, indexWriter );
-			// do Index File
-			doIndexFile(element.getFilename(), element.getForumKey(), courseNodeResourceContext, indexWriter);
+			doIndexFile(element, courseNodeResourceContext, indexWriter);
 		}
 	}
 
@@ -113,13 +101,15 @@ public class DialogCourseNodeIndexer extends DefaultIndexer implements CourseNod
 	 * @throws IOException
 	 * @throws InterruptedException
 	 */
-	private void doIndexFile(String filename, Long forumKey, SearchResourceContext leafResourceContext, OlatFullIndexer indexWriter) throws IOException,InterruptedException {
-		OlatRootFolderImpl forumContainer = DialogElementsController.getForumContainer(forumKey);
-		VFSLeaf leaf = (VFSLeaf) forumContainer.getItems(new VFSLeafFilter()).get(0);
+	private void doIndexFile(DialogElement element, SearchResourceContext leafResourceContext, OlatFullIndexer indexWriter)
+	throws IOException,InterruptedException {
+		DialogElementsManager dialogElmsMgr = CoreSpringFactory.getImpl(DialogElementsManager.class);
+		VFSContainer dialogContainer = dialogElmsMgr.getDialogContainer(element);
+		VFSLeaf leaf = (VFSLeaf) dialogContainer.getItems(new VFSLeafFilter()).get(0);
 		if (isLogDebugEnabled()) logDebug("Analyse VFSLeaf=" + leaf.getName());
 		try {
 			if (CoreSpringFactory.getImpl(FileDocumentFactory.class).isFileSupported(leaf)) {
-				leafResourceContext.setFilePath(filename);
+				leafResourceContext.setFilePath(element.getFilename());
 				leafResourceContext.setDocumentType(TYPE_FILE);
 				
 				Document document = CoreSpringFactory.getImpl(FileDocumentFactory.class).createDocument(leafResourceContext, leaf);
diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_12_3_0.java b/src/main/java/org/olat/upgrade/OLATUpgrade_12_3_0.java
index 2f72557300df693beaa4c7b938fd60b692fb5bb1..e145f0ce65d51353390eb3594ee0915e79908d6a 100644
--- a/src/main/java/org/olat/upgrade/OLATUpgrade_12_3_0.java
+++ b/src/main/java/org/olat/upgrade/OLATUpgrade_12_3_0.java
@@ -21,20 +21,39 @@ package org.olat.upgrade;
 
 import java.io.File;
 import java.net.URI;
+import java.util.Date;
 import java.util.List;
 
+import org.olat.basesecurity.BaseSecurity;
+import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl;
 import org.olat.core.commons.persistence.DB;
+import org.olat.core.id.Identity;
+import org.olat.core.id.OLATResourceable;
 import org.olat.core.util.StringHelper;
+import org.olat.core.util.resource.OresHelper;
+import org.olat.core.util.vfs.VFSItem;
 import org.olat.core.util.vfs.VFSLeaf;
+import org.olat.core.util.xml.XStreamHelper;
+import org.olat.course.nodes.dialog.DialogElementsManager;
+import org.olat.course.nodes.dialog.model.DialogElementImpl;
 import org.olat.ims.qti.QTIConstants;
 import org.olat.ims.qti.editor.QTIEditHelper;
 import org.olat.ims.qti.editor.beecom.objects.Item;
 import org.olat.ims.qti21.QTI21Constants;
 import org.olat.ims.qti21.QTI21Service;
+import org.olat.modules.fo.Forum;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.modules.qpool.QPoolService;
 import org.olat.modules.qpool.model.QuestionItemImpl;
+import org.olat.properties.Property;
+import org.olat.repository.RepositoryEntry;
+import org.olat.repository.RepositoryManager;
+import org.olat.upgrade.legacy.DialogElement;
+import org.olat.upgrade.legacy.DialogPropertyElements;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import com.thoughtworks.xstream.XStream;
+
 import uk.ac.ed.ph.jqtiplus.resolution.ResolvedAssessmentItem;
 
 /**
@@ -50,12 +69,22 @@ public class OLATUpgrade_12_3_0 extends OLATUpgrade {
 	private static final String VERSION = "OLAT_12.3.0";
 	private static final String MIGRATE_QPOOL_TITLE = "MIGRATE QPOOL TITLE";
 	
+	private static final String MIGRATE_DIALOG = "MIGRATE DIALOG ELEMENTS";
+	
 	@Autowired
 	private DB dbInstance;
 	@Autowired
 	private QPoolService qpoolService;
 	@Autowired
 	private QTI21Service qtiService;
+	@Autowired
+	private BaseSecurity securityManager;
+	@Autowired
+	private ForumManager forumManager;
+	@Autowired
+	private RepositoryManager repositoryManager;
+	@Autowired
+	private DialogElementsManager dialogElementsManager;
 	
 	public OLATUpgrade_12_3_0() {
 		super();
@@ -85,6 +114,7 @@ public class OLATUpgrade_12_3_0 extends OLATUpgrade {
 		// Migrate the topics from the database field title to topic.
 		// Migrate the title of the question (XML) to the database.
 		allOk &= migrateQpoolTopicTitle(upgradeManager, uhd);
+		allOk &= migrateDialogElements(upgradeManager, uhd);
 		
 		uhd.setInstallationComplete(allOk);
 		upgradeManager.setUpgradesHistory(uhd, VERSION);
@@ -194,5 +224,107 @@ public class OLATUpgrade_12_3_0 extends OLATUpgrade {
 		Item xmlItem = QTIEditHelper.readItemXml(leaf);
 		return xmlItem.getTitle();
 	}
+	
+	private boolean migrateDialogElements(UpgradeManager upgradeManager, UpgradeHistoryData uhd) {
+		boolean allOk = true;
+		if (!uhd.getBooleanDataValue(MIGRATE_DIALOG)) {
+			try {
+				XStream xstream = XStreamHelper.createXStreamInstance();
+				xstream.alias("org.olat.modules.dialog.DialogPropertyElements", DialogPropertyElements.class);
+				xstream.alias("org.olat.modules.dialog.DialogElement", DialogElement.class);
+
+				List<Property> properties = getProperties();
+				for(Property property:properties) {
+					migrateDialogElement(property, xstream);
+					dbInstance.commitAndCloseSession();
+				}
+			} catch (Exception e) {
+				log.error("", e);
+				allOk &= false;
+			}
+
+			uhd.setBooleanDataValue(MIGRATE_DIALOG, allOk);
+			upgradeManager.setUpgradesHistory(uhd, VERSION);
+		}
+		return allOk;
+	}
 
+	private boolean migrateDialogElement(Property property, XStream xstream) {
+		Long resourceId = property.getResourceTypeId();
+		OLATResourceable ores = OresHelper.createOLATResourceableInstance("CourseModule", resourceId);
+		RepositoryEntry entry = repositoryManager.lookupRepositoryEntry(ores, false);
+		if(entry != null) {
+			String category = property.getCategory();
+			if(category.startsWith("NID:dial::")) {
+				category = category.substring("NID:dial::".length(), category.length());
+			}
+		
+			String value = property.getTextValue();
+			if(StringHelper.containsNonWhitespace(value)) {
+				DialogPropertyElements propertyElements = (DialogPropertyElements)xstream.fromXML(value);
+				List<DialogElement> elements = propertyElements.getDialogPropertyElements();
+				for(DialogElement element:elements) {
+					createDialogElement(element, entry, category);
+				}
+			}
+		}
+		return true;
+	}
+	
+	private void createDialogElement(DialogElement element, RepositoryEntry entry, String nodeIdent) {
+		try {
+			Identity author = null;
+			if(StringHelper.isLong(element.getAuthor())) {
+				author = securityManager.loadIdentityByKey(Long.valueOf(element.getAuthor()));
+			} else if(StringHelper.containsNonWhitespace(element.getAuthor())) {
+				author = securityManager.findIdentityByName(element.getAuthor());
+			}
+			
+			Forum forum = forumManager.loadForum(element.getForumKey());
+			if(forum == null) {
+				log.error("Missing forum", null);
+				return;
+			}
+			
+			Object currentElement = dialogElementsManager.getDialogElementByForum(forum.getKey());
+			if(currentElement != null) {
+				return;
+			}
+			
+			Date date = element.getDate() == null ? new Date() : element.getDate();
+			DialogElementImpl el = new DialogElementImpl();
+			el.setCreationDate(date);
+			el.setLastModified(date);
+			el.setFilename(element.getFilename());
+			el.setSize(getFileSize(forum.getKey()));
+			el.setEntry(entry);
+			el.setSubIdent(nodeIdent);
+			el.setAuthor(author);
+			el.setForum(forum);
+			dbInstance.getCurrentEntityManager().persist(el);
+		} catch (Exception e) {
+			log.error("", e);
+		}
+	}
+	
+	public Long getFileSize(Long forumKey) {
+		StringBuilder sb = new StringBuilder();
+		sb.append("/forum/").append(forumKey).append("/");
+		OlatRootFolderImpl forumContainer = new OlatRootFolderImpl(sb.toString(), null);
+		VFSItem vl = forumContainer.getItems().get(0);
+		if(vl instanceof VFSLeaf) {
+			return ((VFSLeaf)vl).getSize();
+		}
+		return -1l;
+	}
+	
+	private List<Property> getProperties() {
+		StringBuilder sb = new StringBuilder();
+		sb.append("select v from ").append(Property.class.getName()).append(" as v ")
+		  .append(" where v.name=:name and v.resourceTypeName=:resName");
+		return dbInstance.getCurrentEntityManager().createQuery(sb.toString(), Property.class)
+				.setParameter("name", "fileDialog")
+				.setParameter("resName", "CourseModule")
+				.getResultList();
+	}
 }
diff --git a/src/main/java/org/olat/modules/dialog/DialogElement.java b/src/main/java/org/olat/upgrade/legacy/DialogElement.java
similarity index 75%
rename from src/main/java/org/olat/modules/dialog/DialogElement.java
rename to src/main/java/org/olat/upgrade/legacy/DialogElement.java
index 96fe65da58913977df379fd1d72d77d60db1a114..5a014596e88847cdbced4a2e02207b2bab276e73 100644
--- a/src/main/java/org/olat/modules/dialog/DialogElement.java
+++ b/src/main/java/org/olat/upgrade/legacy/DialogElement.java
@@ -23,15 +23,10 @@
 * under the Apache 2.0 license as the original file.
 */
 
-package org.olat.modules.dialog;
+package org.olat.upgrade.legacy;
 
 import java.util.Date;
 
-import org.hibernate.ObjectNotFoundException;
-import org.olat.basesecurity.BaseSecurityManager;
-import org.olat.core.commons.persistence.DBFactory;
-import org.olat.core.id.Identity;
-
 /**
  * Description:<br>
  * TODO: guido Class Description for DialogElementsTableEntry
@@ -53,7 +48,7 @@ public class DialogElement {
 	private Long forumKey;
 	
 	public DialogElement(){
-		//empty construvtor
+		//empty constructor
 	}
 
 	//getters must be public for velocity access
@@ -68,29 +63,13 @@ public class DialogElement {
 		return filename;
 	}
 	public String getAuthor() {
-		try {
-			// try to handle as identity id
-			Identity identity = BaseSecurityManager.getInstance().loadIdentityByKey(Long.valueOf(author));
-			if (identity == null) {
-				return author;
-			}
-		  return identity.getName();
-		} catch (NumberFormatException nEx) {
-			return author;
-		} catch (ObjectNotFoundException oEx) {
-			DBFactory.getInstance().rollbackAndCloseSession();
-			return author;
-		} catch (Throwable th) {
-			DBFactory.getInstance().rollbackAndCloseSession();
-			return author;
-		}
+		return author;
 	}
 	public String getFileSize() {
 		return fileSize;
 	}
 	public void setAuthor(String author) {
-		Identity identity = BaseSecurityManager.getInstance().findIdentityByName(author);
-		this.author = identity.getKey().toString(); 
+		this.author = author; 
 	}
 	public void setFilename(String filename) {
 		this.filename = filename;
@@ -128,5 +107,4 @@ public class DialogElement {
 	public void setAuthorIdentityId(String identityId) {
 		this.author = identityId;
 	}
-	
 }
diff --git a/src/main/java/org/olat/modules/dialog/DialogPropertyElements.java b/src/main/java/org/olat/upgrade/legacy/DialogPropertyElements.java
similarity index 98%
rename from src/main/java/org/olat/modules/dialog/DialogPropertyElements.java
rename to src/main/java/org/olat/upgrade/legacy/DialogPropertyElements.java
index 958979eb1b7fee6170f3e46a9e74ec0617827430..0a5c08c0faf1ef389a22a1fcd53ea767c56a49dd 100644
--- a/src/main/java/org/olat/modules/dialog/DialogPropertyElements.java
+++ b/src/main/java/org/olat/upgrade/legacy/DialogPropertyElements.java
@@ -23,7 +23,7 @@
 * under the Apache 2.0 license as the original file.
 */
 
-package org.olat.modules.dialog;
+package org.olat.upgrade.legacy;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/main/java/org/olat/user/propertyhandlers/_spring/userPropertiesContext.xml b/src/main/java/org/olat/user/propertyhandlers/_spring/userPropertiesContext.xml
index 6c25e978805b702b1bb95e23a4453b4b737aad7a..8c7c1a5bec8149bb4fb4fc32015d3fc72c5c715e 100644
--- a/src/main/java/org/olat/user/propertyhandlers/_spring/userPropertiesContext.xml
+++ b/src/main/java/org/olat/user/propertyhandlers/_spring/userPropertiesContext.xml
@@ -1107,6 +1107,24 @@
 						</property>
 					</bean>
 				</entry>
+				
+				<entry key="org.olat.course.nodes.dialog.ui.DialogElementsTableModel">
+					<bean class="org.olat.user.propertyhandlers.UserPropertyUsageContext">
+						<property name="description" value="File dialog" />
+						<property name="propertyHandlers">
+							<list>
+								<ref bean="userPropertyLastName" />
+								<ref bean="userPropertyFirstName" />
+							</list>
+						</property>
+						<property name="mandatoryProperties">
+							<set>
+								<ref bean="userPropertyLastName" />
+								<ref bean="userPropertyFirstName" />
+							</set>
+						</property>
+					</bean>
+				</entry>
 
 				<entry key="org.olat.course.assessment.AssessedIdentitiesTableDataModel">
 					<bean class="org.olat.user.propertyhandlers.UserPropertyUsageContext">
diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml
index 31aa59873dba54f064384a30489d64c082491a29..971c0407215b37c62ff64fd72f89de8e450ee25c 100644
--- a/src/main/resources/META-INF/persistence.xml
+++ b/src/main/resources/META-INF/persistence.xml
@@ -93,6 +93,7 @@
 		<class>org.olat.course.assessment.model.UserEfficiencyStatementRepoImpl</class>
 		<class>org.olat.course.nodes.cl.model.DBCheckbox</class>
 		<class>org.olat.course.nodes.cl.model.DBCheck</class>
+		<class>org.olat.course.nodes.dialog.model.DialogElementImpl</class>
 		<class>org.olat.course.nodes.gta.model.IdentityMarkImpl</class>
 		<class>org.olat.course.nodes.gta.model.TaskImpl</class>
 		<class>org.olat.course.nodes.gta.model.TaskLightImpl</class>
diff --git a/src/main/resources/database/mysql/alter_12_2_x_to_12_3_0.sql b/src/main/resources/database/mysql/alter_12_2_x_to_12_3_0.sql
index 54761a6acf031e56ecd7877748b0ec0b6bc43b03..3750553d86d208035961233a95433f6e9b6866f2 100644
--- a/src/main/resources/database/mysql/alter_12_2_x_to_12_3_0.sql
+++ b/src/main/resources/database/mysql/alter_12_2_x_to_12_3_0.sql
@@ -13,4 +13,27 @@ alter table o_as_entry add column a_current_run_status varchar(16);
 
 alter table o_qti_assessmenttest_session add column q_num_questions bigint;
 alter table o_qti_assessmenttest_session add column q_num_answered_questions bigint;
-alter table o_qti_assessmenttest_session add column q_extra_time bigint;
\ No newline at end of file
+alter table o_qti_assessmenttest_session add column q_extra_time bigint;
+
+
+-- dialog elements
+create table o_dialog_element (
+  id bigint not null auto_increment,
+  creationdate datetime not null,
+  lastmodified datetime not null,
+  d_filename varchar(2048),
+  d_filesize bigint,
+  d_subident varchar(64) not null,
+  fk_author bigint,
+  fk_entry bigint not null,
+  fk_forum bigint not null,
+  primary key (id)
+);
+
+alter table o_dialog_element add constraint dial_el_author_idx foreign key (fk_author) references o_bs_identity (id);
+alter table o_dialog_element add constraint dial_el_entry_idx foreign key (fk_entry) references o_repositoryentry (repositoryentry_id);
+alter table o_dialog_element add constraint dial_el_forum_idx foreign key (fk_forum) references o_forum (forum_id);
+create index idx_dial_el_subident_idx on o_dialog_element (d_subident);
+
+
+
diff --git a/src/main/resources/database/mysql/setupDatabase.sql b/src/main/resources/database/mysql/setupDatabase.sql
index e6eee943aed8e454f4f810bccfa91291489ff37a..263b5900e43c86faa2d4582f5128ecec9ef689d6 100644
--- a/src/main/resources/database/mysql/setupDatabase.sql
+++ b/src/main/resources/database/mysql/setupDatabase.sql
@@ -2243,6 +2243,20 @@ create table o_tax_competence_audit_log (
   primary key (id)
 );
 
+-- dialog elements
+create table o_dialog_element (
+  id bigint not null auto_increment,
+  creationdate datetime not null,
+  lastmodified datetime not null,
+  d_filename varchar(2048),
+  d_filesize bigint,
+  d_subident varchar(64) not null,
+  fk_author bigint,
+  fk_entry bigint not null,
+  fk_forum bigint not null,
+  primary key (id)
+);
+
 -- user view
 create view o_bs_identity_short_v as (
    select
@@ -3114,6 +3128,12 @@ create index idx_tax_level_path_key_idx on o_tax_taxonomy_level (t_m_path_keys);
 alter table o_tax_taxonomy_competence add constraint tax_comp_to_tax_level_idx foreign key (fk_level) references o_tax_taxonomy_level (id);
 alter table o_tax_taxonomy_competence add constraint tax_level_to_ident_idx foreign key (fk_identity) references o_bs_identity (id);
 
+-- dialog elements
+alter table o_dialog_element add constraint dial_el_author_idx foreign key (fk_author) references o_bs_identity (id);
+alter table o_dialog_element add constraint dial_el_entry_idx foreign key (fk_entry) references o_repositoryentry (repositoryentry_id);
+alter table o_dialog_element add constraint dial_el_forum_idx foreign key (fk_forum) references o_forum (forum_id);
+create index idx_dial_el_subident_idx on o_dialog_element (d_subident);
+
 -- o_logging_table
 create index log_target_resid_idx on o_loggingtable(targetresid);
 create index log_ptarget_resid_idx on o_loggingtable(parentresid);
diff --git a/src/main/resources/database/oracle/alter_12_2_x_to_12_3_0.sql b/src/main/resources/database/oracle/alter_12_2_x_to_12_3_0.sql
index fd3e0151a7c06a2797d2e05912adb15f7ed26cdd..c7f5f312425787547e81b0a55a2591d6ae78d3fd 100644
--- a/src/main/resources/database/oracle/alter_12_2_x_to_12_3_0.sql
+++ b/src/main/resources/database/oracle/alter_12_2_x_to_12_3_0.sql
@@ -12,4 +12,26 @@ alter table o_as_entry add a_current_run_status varchar2(16 char);
 
 alter table o_qti_assessmenttest_session add q_num_questions number(20);
 alter table o_qti_assessmenttest_session add q_num_answered_questions number(20);
-alter table o_qti_assessmenttest_session add q_extra_time number(20);
\ No newline at end of file
+alter table o_qti_assessmenttest_session add q_extra_time number(20);
+
+-- dialog elements
+create table o_dialog_element (
+  id number(20) generated always as identity,
+  creationdate date not null,
+  lastmodified date not null,
+  d_filename varchar2(2048 char),
+  d_filesize number(20),
+  d_subident varchar2(64 char) not null,
+  fk_author number(20),
+  fk_entry number(20) not null,
+  fk_forum number(20) not null,
+  primary key (id)
+);
+
+alter table o_dialog_element add constraint dial_el_author_idx foreign key (fk_author) references o_bs_identity (id);
+create index idx_dial_el_author_idx on o_dialog_element (fk_author);
+alter table o_dialog_element add constraint dial_el_entry_idx foreign key (fk_entry) references o_repositoryentry (repositoryentry_id);
+create index idx_dial_el_entry_idx on o_dialog_element (fk_entry);
+alter table o_dialog_element add constraint dial_el_forum_idx foreign key (fk_forum) references o_forum (forum_id);
+create index idx_dial_el_forum_idx on o_dialog_element (fk_forum);
+create index idx_dial_el_subident_idx on o_dialog_element (d_subident);
\ No newline at end of file
diff --git a/src/main/resources/database/oracle/setupDatabase.sql b/src/main/resources/database/oracle/setupDatabase.sql
index 18b2cb2ba4fd01643179502ae48b3d11452556ef..b70b669c08a7def2269033c82dbbf555c8c090c8 100644
--- a/src/main/resources/database/oracle/setupDatabase.sql
+++ b/src/main/resources/database/oracle/setupDatabase.sql
@@ -2286,6 +2286,20 @@ create table o_tax_competence_audit_log (
   primary key (id)
 );
 
+-- dialog elements
+create table o_dialog_element (
+  id number(20) generated always as identity,
+  creationdate date not null,
+  lastmodified date not null,
+  d_filename varchar2(2048 char),
+  d_filesize number(20),
+  d_subident varchar2(64 char) not null,
+  fk_author number(20),
+  fk_entry number(20) not null,
+  fk_forum number(20) not null,
+  primary key (id)
+);
+
 -- user view
 create view o_bs_identity_short_v as (
    select
@@ -3309,6 +3323,15 @@ alter table o_lecture_entry_config add constraint lec_entry_config_entry_idx for
 create index idx_lec_audit_entry_idx on o_lecture_block_audit_log(fk_entry);
 create index idx_lec_audit_ident_idx on o_lecture_block_audit_log(fk_identity);
 
+-- dialog elements
+alter table o_dialog_element add constraint dial_el_author_idx foreign key (fk_author) references o_bs_identity (id);
+create index idx_dial_el_author_idx on o_dialog_element (fk_author);
+alter table o_dialog_element add constraint dial_el_entry_idx foreign key (fk_entry) references o_repositoryentry (repositoryentry_id);
+create index idx_dial_el_entry_idx on o_dialog_element (fk_entry);
+alter table o_dialog_element add constraint dial_el_forum_idx foreign key (fk_forum) references o_forum (forum_id);
+create index idx_dial_el_forum_idx on o_dialog_element (fk_forum);
+create index idx_dial_el_subident_idx on o_dialog_element (d_subident);
+
 -- o_logging_table
 create index log_target_resid_idx on o_loggingtable(targetresid);
 create index log_ptarget_resid_idx on o_loggingtable(parentresid);
diff --git a/src/main/resources/database/postgresql/alter_12_2_x_to_12_3_0.sql b/src/main/resources/database/postgresql/alter_12_2_x_to_12_3_0.sql
index 0ffecfda9b8aed80fa1f0c7d8d62cb114448559b..d6e2f2cd9614c5bedddb2688f35baad2ef701003 100644
--- a/src/main/resources/database/postgresql/alter_12_2_x_to_12_3_0.sql
+++ b/src/main/resources/database/postgresql/alter_12_2_x_to_12_3_0.sql
@@ -12,4 +12,33 @@ alter table o_as_entry add column a_current_run_status varchar(16);
 
 alter table o_qti_assessmenttest_session add column q_num_questions int8;
 alter table o_qti_assessmenttest_session add column q_num_answered_questions int8;
-alter table o_qti_assessmenttest_session add column q_extra_time int8;
\ No newline at end of file
+alter table o_qti_assessmenttest_session add column q_extra_time int8;
+
+-- dialog elements
+create table o_dialog_element (
+  id bigserial,
+  creationdate timestamp not null,
+  lastmodified timestamp not null,
+  d_filename varchar(2048),
+  d_filesize int8,
+  d_subident varchar(64) not null,
+  fk_author int8,
+  fk_entry int8 not null,
+  fk_forum int8 not null,
+  primary key (id)
+);
+
+alter table o_dialog_element add constraint dial_el_author_idx foreign key (fk_author) references o_bs_identity (id);
+create index idx_dial_el_author_idx on o_dialog_element (fk_author);
+alter table o_dialog_element add constraint dial_el_entry_idx foreign key (fk_entry) references o_repositoryentry (repositoryentry_id);
+create index idx_dial_el_entry_idx on o_dialog_element (fk_entry);
+alter table o_dialog_element add constraint dial_el_forum_idx foreign key (fk_forum) references o_forum (forum_id);
+create index idx_dial_el_forum_idx on o_dialog_element (fk_forum);
+create index idx_dial_el_subident_idx on o_dialog_element (d_subident);
+
+
+
+
+
+
+
diff --git a/src/main/resources/database/postgresql/setupDatabase.sql b/src/main/resources/database/postgresql/setupDatabase.sql
index 9a51bd79f7fb3d3df50b2879c89b6caad8186488..7f219ef07299c045a877fe57c9584b51b38f5310 100644
--- a/src/main/resources/database/postgresql/setupDatabase.sql
+++ b/src/main/resources/database/postgresql/setupDatabase.sql
@@ -2241,6 +2241,20 @@ create table o_tax_competence_audit_log (
   primary key (id)
 );
 
+-- dialog elements
+create table o_dialog_element (
+  id bigserial,
+  creationdate timestamp not null,
+  lastmodified timestamp not null,
+  d_filename varchar(2048),
+  d_filesize int8,
+  d_subident varchar(64) not null,
+  fk_author int8,
+  fk_entry int8 not null,
+  fk_forum int8 not null,
+  primary key (id)
+);
+
 -- user view
 create view o_bs_identity_short_v as (
    select
@@ -3162,6 +3176,15 @@ create index idx_tax_comp_to_tax_level_idx on o_tax_taxonomy_competence (fk_leve
 alter table o_tax_taxonomy_competence add constraint tax_level_to_ident_idx foreign key (fk_identity) references o_bs_identity (id);
 create index idx_tax_level_to_ident_idx on o_tax_taxonomy_competence (fk_identity);
 
+-- dialog elements
+alter table o_dialog_element add constraint dial_el_author_idx foreign key (fk_author) references o_bs_identity (id);
+create index idx_dial_el_author_idx on o_dialog_element (fk_author);
+alter table o_dialog_element add constraint dial_el_entry_idx foreign key (fk_entry) references o_repositoryentry (repositoryentry_id);
+create index idx_dial_el_entry_idx on o_dialog_element (fk_entry);
+alter table o_dialog_element add constraint dial_el_forum_idx foreign key (fk_forum) references o_forum (forum_id);
+create index idx_dial_el_forum_idx on o_dialog_element (fk_forum);
+create index idx_dial_el_subident_idx on o_dialog_element (d_subident);
+
 -- o_logging_table
 create index log_target_resid_idx on o_loggingtable(targetresid);
 create index log_ptarget_resid_idx on o_loggingtable(parentresid);
diff --git a/src/test/java/org/olat/course/nodes/dialog/manager/DialogElementsManagerTest.java b/src/test/java/org/olat/course/nodes/dialog/manager/DialogElementsManagerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..5328000a8270e9ca9a385c91689811c72efae50a
--- /dev/null
+++ b/src/test/java/org/olat/course/nodes/dialog/manager/DialogElementsManagerTest.java
@@ -0,0 +1,85 @@
+/**
+ * <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.course.nodes.dialog.manager;
+
+import java.util.UUID;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.olat.core.commons.persistence.DB;
+import org.olat.core.id.Identity;
+import org.olat.course.nodes.dialog.DialogElement;
+import org.olat.course.nodes.dialog.DialogElementsManager;
+import org.olat.modules.fo.Forum;
+import org.olat.repository.RepositoryEntry;
+import org.olat.test.JunitTestHelper;
+import org.olat.test.OlatTestCase;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * Initial date: 3 janv. 2018<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class DialogElementsManagerTest extends OlatTestCase {
+	
+	@Autowired
+	private DB dbInstance;
+	@Autowired
+	private DialogElementsManager dialogElementsManager;
+	
+	@Test
+	public void createDialogElement() {
+		RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry();
+		Identity author = JunitTestHelper.createAndPersistIdentityAsRndUser("session-1");
+		String subIdent = UUID.randomUUID().toString();
+		DialogElement element = dialogElementsManager.createDialogElement(entry, author, "task_d.txt", 234l, subIdent);
+		dbInstance.commitAndCloseSession();
+		
+		Assert.assertNotNull(element.getKey());
+		Assert.assertNotNull(element.getForum());
+		Assert.assertEquals(author, element.getAuthor());
+		Assert.assertEquals("task_d.txt", element.getFilename());
+		Assert.assertEquals(Long.valueOf(234l), element.getSize());
+		Assert.assertEquals(subIdent, element.getSubIdent());
+		Assert.assertEquals(entry, element.getEntry());
+	}
+	
+	@Test
+	public void  getDialogElementByForumKey() {
+		RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry();
+		Identity author = JunitTestHelper.createAndPersistIdentityAsRndUser("session-1");
+		String subIdent = UUID.randomUUID().toString();
+		DialogElement element = dialogElementsManager.createDialogElement(entry, author, "task_e.txt", 235l, subIdent);
+		dbInstance.commitAndCloseSession();
+		
+		Forum forum = element.getForum();
+		DialogElement loadedElement = dialogElementsManager.getDialogElementByForum(forum.getKey());
+		Assert.assertNotNull(loadedElement.getKey());
+		Assert.assertEquals(forum, loadedElement.getForum());
+		Assert.assertEquals(author, loadedElement.getAuthor());
+		Assert.assertEquals("task_e.txt", loadedElement.getFilename());
+		Assert.assertEquals(Long.valueOf(235l), loadedElement.getSize());
+		Assert.assertEquals(subIdent, loadedElement.getSubIdent());
+		Assert.assertEquals(entry, loadedElement.getEntry());	
+	}
+
+}
diff --git a/src/test/java/org/olat/selenium/page/course/DialogConfigurationPage.java b/src/test/java/org/olat/selenium/page/course/DialogConfigurationPage.java
index 549a6ea5c87436035edc3d98d18abc7859334b7d..bdef7c63adae0fff68ff89bb03109167cf48876d 100644
--- a/src/test/java/org/olat/selenium/page/course/DialogConfigurationPage.java
+++ b/src/test/java/org/olat/selenium/page/course/DialogConfigurationPage.java
@@ -48,16 +48,16 @@ public class DialogConfigurationPage {
 	public DialogConfigurationPage uploadFile(File file) {
 		By uploadBy = By.cssSelector("fieldset.o_sel_dialog_settings_upload a.o_sel_dialog_upload");
 		browser.findElement(uploadBy).click();
-		OOGraphene.waitBusy(browser);
+		OOGraphene.waitModalDialog(browser);
 		
-		By inputBy = By.xpath("//div[@class='o_fileinput']/input[@type='file']");
+		By inputBy = By.xpath("//div[contains(@class,'modal-body')]//div[@class='o_fileinput']/input[@type='file']");
 		OOGraphene.uploadFile(inputBy, file, browser);
 		
-		By uploadButtonBy = By.cssSelector("fieldset.o_sel_dialog_settings_upload button.btn-primary");
+		By uploadButtonBy = By.cssSelector("div.modal-body div.o_sel_upload_buttons button.btn-primary");
 		OOGraphene.waitElement(uploadButtonBy, browser);
 		browser.findElement(uploadButtonBy).click();
 		
-		By rowBy = By.xpath("//table//tr/td[contains(text(),'" + file.getName() + "')]");
+		By rowBy = By.xpath("//table//tr/td/a[contains(text(),'" + file.getName() + "')]");
 		OOGraphene.waitElement(rowBy, browser);
 		
 		return this;
diff --git a/src/test/java/org/olat/selenium/page/course/DialogPage.java b/src/test/java/org/olat/selenium/page/course/DialogPage.java
index 9665b84710e57c1336173e3432774d1c170c9582..1c22868c1965768d8557c84c7f19a60bf5463782 100644
--- a/src/test/java/org/olat/selenium/page/course/DialogPage.java
+++ b/src/test/java/org/olat/selenium/page/course/DialogPage.java
@@ -62,8 +62,20 @@ public class DialogPage {
 		return this;
 	}
 	
+	/**
+	 * Return back to the list of dialog elements from a selected one.
+	 * 
+	 * @return Itself
+	 */
+	public DialogPage back() {
+		By backBy = By.cssSelector("div.o_sel_dialog a.o_link_back");
+		browser.findElement(backBy).click();
+		OOGraphene.waitBusy(browser);
+		return this;
+	}
+	
 	public ForumPage openForum(String filename) {
-		By openForumBy = By.xpath("//table//tr[td/a[contains(text(),'" + filename + "')]]/td/a[contains(@onclick,'startforum')]");
+		By openForumBy = By.xpath("//table//tr[td/a[contains(text(),'" + filename + "')]]/td/a[contains(@href,'forum')]");
 		browser.findElement(openForumBy).click();
 		OOGraphene.waitBusy(browser);
 		By forumBy = By.cssSelector("div.o_sel_dialog div.o_sel_forum");
diff --git a/src/test/java/org/olat/test/AllTestsJunit4.java b/src/test/java/org/olat/test/AllTestsJunit4.java
index 37b80370978066ff55e5e606f9c1a251b65afd75..6be42da158eeb8de0a4b710cbb5d668d2e096524 100644
--- a/src/test/java/org/olat/test/AllTestsJunit4.java
+++ b/src/test/java/org/olat/test/AllTestsJunit4.java
@@ -137,6 +137,7 @@ import org.junit.runners.Suite;
 	org.olat.course.condition.ConditionTest.class,
 	org.olat.course.condition.KeyAndNameConverterTest.class,
 	org.olat.course.highscore.HighScoreManagerTest.class,
+	org.olat.course.nodes.dialog.manager.DialogElementsManagerTest.class,
 	org.olat.course.nodes.en.EnrollmentManagerSerialTest.class,
 	org.olat.course.nodes.en.EnrollmentManagerConcurrentTest.class,
 	org.olat.course.nodes.gta.manager.GTAManagerTest.class,