diff --git a/src/main/java/org/olat/core/gui/components/link/Link.java b/src/main/java/org/olat/core/gui/components/link/Link.java
index 44f0fbb14086c356e5a04f2ab1e821cff1bc2757..5c710c8594c26ff4e70a0a88f6106f68e3628a53 100644
--- a/src/main/java/org/olat/core/gui/components/link/Link.java
+++ b/src/main/java/org/olat/core/gui/components/link/Link.java
@@ -83,6 +83,7 @@ public class Link extends Component {
 	private String customEnabledLinkCSS;
 	private String customDisabledLinkCSS;
 	private String target;
+	private String modURI;
 	private Object internalAttachedObj;
 	private Object userObject;
 	private String accessKey;
@@ -255,6 +256,14 @@ public class Link extends Component {
 		setDirty(true);
 	}
 
+	public String getModURI() {
+		return modURI;
+	}
+
+	public void setModURI(String modURI) {
+		this.modURI = modURI;
+	}
+
 	protected String getTextReasonForDisabling() {
 		return textReasonForDisabling;
 	}
diff --git a/src/main/java/org/olat/core/gui/components/link/LinkRenderer.java b/src/main/java/org/olat/core/gui/components/link/LinkRenderer.java
index 9490a0be92a9d087f9dc7a4da81e69b3cb541b21..8e9568458c3c1f47b7158cc730d03d2c9af0a712 100644
--- a/src/main/java/org/olat/core/gui/components/link/LinkRenderer.java
+++ b/src/main/java/org/olat/core/gui/components/link/LinkRenderer.java
@@ -162,9 +162,8 @@ public class LinkRenderer implements ComponentRenderer {
 				sb.append("\" ");
 			} else {
 				sb.append("href=\"");
-
 				ubu.buildURI(sb, new String[] { VelocityContainer.COMMAND_ID }, new String[] { command },
-						iframePostEnabled ? AJAXFlags.MODE_TOBGIFRAME : AJAXFlags.MODE_NORMAL);
+						link.getModURI(), iframePostEnabled ? AJAXFlags.MODE_TOBGIFRAME : AJAXFlags.MODE_NORMAL);
 				sb.append("\"");
 			}
 			
diff --git a/src/main/java/org/olat/course/nodes/ta/TaskController.java b/src/main/java/org/olat/course/nodes/ta/TaskController.java
index 4423194a382f38874a0c323cb296690996fa5f4d..d0a4e26a5093a9234f8141c46b0f7fdd9ddab338 100644
--- a/src/main/java/org/olat/course/nodes/ta/TaskController.java
+++ b/src/main/java/org/olat/course/nodes/ta/TaskController.java
@@ -54,6 +54,7 @@ import org.olat.core.id.Identity;
 import org.olat.core.logging.AssertException;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
+import org.olat.core.util.FileUtils;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.vfs.VFSItem;
 import org.olat.core.util.vfs.VFSLeaf;
@@ -287,11 +288,27 @@ public class TaskController extends BasicController {
 		if (StringHelper.containsNonWhitespace(taskText)) {
 			myContent.contextPut(VC_TASKTEXT, taskText);
 		}
+
+		String taskFilename = getTaskFilename(assignedTask);
+		taskLaunchButton.setModURI(taskFilename);
 		myContent.put("task.launch", taskLaunchButton);
 		myContent.contextPut(VC_ASSIGNEDTASK, assignedTask);
 		myContent.contextPut(VC_ASSIGNEDTASK_NEWWINDOW,Boolean.TRUE);
 		panel.setContent(myContent);
 	}
+	
+	private String getTaskFilename(String task) {
+		if(!StringHelper.containsNonWhitespace(task)) {
+			return null;
+		}
+		String extension = FileUtils.getFileSuffix(assignedTask);
+		if(!StringHelper.containsNonWhitespace(extension)) {
+			return null;
+		}
+		
+		String filename = assignedTask.substring(0, assignedTask.length() - extension.length());
+		return StringHelper.transformDisplayNameToFileSystemName(filename) + "." + extension;
+	}
 
 	/**
 	 * Auto-assign a task to an identity and mark it as sampled if necessary.
@@ -459,10 +476,10 @@ public class TaskController extends BasicController {
 	 * Initial Date:  20.04.2010 <br>
 	 * @author Lavinia Dumitrescu
 	 */
-	class DeselectableTaskTableModel extends DefaultTableDataModel {
+	class DeselectableTaskTableModel extends DefaultTableDataModel<String> {
 		private int COLUMN_COUNT;
 
-		public DeselectableTaskTableModel(List objects, int num_cols) {
+		public DeselectableTaskTableModel(List<String> objects, int num_cols) {
 			super(objects);
 			COLUMN_COUNT = num_cols;
 		}
@@ -496,7 +513,4 @@ public class TaskController extends BasicController {
 			return task.equals(assignedTask);
 		}		
 	}
-	
-		
-}
-
+}
\ No newline at end of file