diff --git a/src/main/java/org/olat/modules/forms/ui/DisclaimerController.java b/src/main/java/org/olat/modules/forms/ui/DisclaimerController.java
index 8722ec126e3f920b31507eed3d347149025b5ff9..f5d44d5fbd126d30032d2cb622dcbee9a82c95da 100644
--- a/src/main/java/org/olat/modules/forms/ui/DisclaimerController.java
+++ b/src/main/java/org/olat/modules/forms/ui/DisclaimerController.java
@@ -124,14 +124,14 @@ public class DisclaimerController extends FormBasicController implements Evaluat
 	}
 
 	@Override
-	public void initResponse(EvaluationFormSession session, EvaluationFormResponses responses) {
+	public void initResponse(UserRequest ureq, EvaluationFormSession session, EvaluationFormResponses responses) {
 		response = responses.getResponse(session, disclaimer.getId());
 		boolean accepted = response != null && ACCEPTED_DB_KEY.equals(response.getStringuifiedResponse());
 		agreementEl.select(ACCEPTED_KEY, accepted);
 	}
 
 	@Override
-	public void saveResponse(EvaluationFormSession session) {
+	public void saveResponse(UserRequest ureq, EvaluationFormSession session) {
 		boolean accepted = agreementEl.isAtLeastSelected(1);
 		if (accepted && response == null) {
 			response = evaluationFormManager.createStringResponse(disclaimer.getId(), session, ACCEPTED_DB_KEY);
diff --git a/src/main/java/org/olat/modules/forms/ui/FileUploadController.java b/src/main/java/org/olat/modules/forms/ui/FileUploadController.java
index 378c9218a51394749f3e847ec44780911322bb48..65d2159cbdf5ee5df1b3b7d5d53e07afcd849274 100644
--- a/src/main/java/org/olat/modules/forms/ui/FileUploadController.java
+++ b/src/main/java/org/olat/modules/forms/ui/FileUploadController.java
@@ -23,6 +23,8 @@ import java.io.File;
 import java.io.IOException;
 import java.util.Set;
 
+import org.apache.logging.log4j.Logger;
+import org.olat.core.commons.services.vfs.VFSRepositoryService;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.form.flexible.FormItem;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
@@ -33,9 +35,12 @@ import org.olat.core.gui.components.form.flexible.impl.FormEvent;
 import org.olat.core.gui.components.form.flexible.impl.elements.FileElementEvent;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
-import org.apache.logging.log4j.Logger;
+import org.olat.core.gui.util.CSSHelper;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.CodeHelper;
+import org.olat.core.util.Formatter;
+import org.olat.core.util.vfs.VFSLeaf;
+import org.olat.core.util.vfs.VFSMediaMapper;
 import org.olat.modules.forms.EvaluationFormManager;
 import org.olat.modules.forms.EvaluationFormResponse;
 import org.olat.modules.forms.EvaluationFormSession;
@@ -63,23 +68,26 @@ public class FileUploadController extends FormBasicController implements Evaluat
 	
 	@Autowired
 	private EvaluationFormManager evaluationFormManager;
-
+	@Autowired
+	private VFSRepositoryService vfsRepositoryService;
 	
 	public FileUploadController(UserRequest ureq, WindowControl wControl, FileUpload fileUpload) {
-		super(ureq, wControl, LAYOUT_VERTICAL);
+		super(ureq, wControl, "file_upload");
 		this.fileUpload = fileUpload;
 		initForm(ureq);
 	}
 	
 	public FileUploadController(UserRequest ureq, WindowControl wControl, FileUpload fileUpload, Form rootForm) {
-		super(ureq, wControl, LAYOUT_VERTICAL, null, rootForm);
+		super(ureq, wControl, LAYOUT_CUSTOM, "file_upload", rootForm);
 		this.fileUpload = fileUpload;
 		initForm(ureq);
 	}
 
 	@Override
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		fileEl = uifactory.addFileElement(getWindowControl(), "file_upload_" + CodeHelper.getRAMUniqueID(), "", formLayout);
+		String fileElId = "file_upload_" + CodeHelper.getRAMUniqueID();
+		flc.contextPut("fileUpload", fileElId);
+		fileEl = uifactory.addFileElement(getWindowControl(), fileElId, "", formLayout);
 		fileEl.setPreview(ureq.getUserSession(), true);
 		fileEl.setButtonsEnabled(false);
 		fileEl.setDeleteEnabled(true);
@@ -95,6 +103,33 @@ public class FileUploadController extends FormBasicController implements Evaluat
 		Set<String> mimeTypes = MimeTypeSetFactory.getMimeTypes(fileUpload.getMimeTypeSetKey());
 		fileEl.limitToMimeType(mimeTypes, null, null);
 	}
+	
+	public void updateReadOnlyUI(UserRequest ureq, EvaluationFormResponse response) {
+		if (response != null) {
+			String filename = response.getStringuifiedResponse();
+			String filesize = null;
+			String mapperUri = null;
+			String iconCss = null;
+			String thumbUri = null;
+			VFSLeaf leaf = evaluationFormManager.loadResponseLeaf(response);
+			if (leaf != null) {
+				filename = leaf.getName();
+				flc.contextPut("filename", filename);
+				filesize = Formatter.formatBytes((leaf).getSize());
+				flc.contextPut("filesize", filesize);
+				mapperUri = registerCacheableMapper(ureq, "file-upload-" + CodeHelper.getRAMUniqueID() + "-" + leaf.getLastModified(), new VFSMediaMapper(leaf));
+				flc.contextPut("mapperUri", mapperUri);
+				iconCss = CSSHelper.createFiletypeIconCssClassFor(leaf.getName());
+				flc.contextPut("iconCss", iconCss);
+				
+				VFSLeaf thumb = vfsRepositoryService.getThumbnail(leaf, 200, 200, false);
+				if (thumb != null) {
+					thumbUri = registerCacheableMapper(ureq, "file-upload-thumb" + CodeHelper.getRAMUniqueID() + "-" + leaf.getLastModified(), new VFSMediaMapper(thumb));
+					flc.contextPut("thumbUri", thumbUri);
+				}
+			}	
+		}
+	}
 
 	@Override
 	protected void formOK(UserRequest ureq) {
@@ -127,7 +162,7 @@ public class FileUploadController extends FormBasicController implements Evaluat
 
 	@Override
 	public void setReadOnly(boolean readOnly) {
-		fileEl.setEnabled(!readOnly);
+		flc.contextPut("readonly", Boolean.valueOf(readOnly));
 	}
 
 	@Override
@@ -136,17 +171,19 @@ public class FileUploadController extends FormBasicController implements Evaluat
 	}
 
 	@Override
-	public void initResponse(EvaluationFormSession session, EvaluationFormResponses responses) {
+	public void initResponse(UserRequest ureq, EvaluationFormSession session, EvaluationFormResponses responses) {
 		response = responses.getResponse(session, fileUpload.getId());
 		File responseFile = evaluationFormManager.loadResponseFile(response);
 		if (responseFile != null) {
 			fileEl.setInitialFile(responseFile);
 		}
 		fileEl.setButtonsEnabled(true);
+		
+		updateReadOnlyUI(ureq, response);
 	}
 
 	@Override
-	public void saveResponse(EvaluationFormSession session) {
+	public void saveResponse(UserRequest ureq, EvaluationFormSession session) {
 		if (fileEl.isUploadSuccess()) {
 			if (newFileUploaded) {
 				File file = fileEl.getUploadFile();
@@ -168,6 +205,7 @@ public class FileUploadController extends FormBasicController implements Evaluat
 			evaluationFormManager.deleteResponse(response);
 			response = null;
 		}
+		updateReadOnlyUI(ureq, response);
 	}
 
 }
diff --git a/src/main/java/org/olat/modules/forms/ui/MultipleChoiceController.java b/src/main/java/org/olat/modules/forms/ui/MultipleChoiceController.java
index c7990d4b292a8adddb86ee94f08d2977f9d59222..d455efb48dfdd901685168c88285b43f9bb1ab1a 100644
--- a/src/main/java/org/olat/modules/forms/ui/MultipleChoiceController.java
+++ b/src/main/java/org/olat/modules/forms/ui/MultipleChoiceController.java
@@ -145,7 +145,7 @@ public class MultipleChoiceController extends FormBasicController implements Eva
 	}
 
 	@Override
-	public void initResponse(EvaluationFormSession session, EvaluationFormResponses responses) {
+	public void initResponse(UserRequest ureq, EvaluationFormSession session, EvaluationFormResponses responses) {
 		multipleChoiceResponses = responses.getResponses(session, multipleChoice.getId());
 		for (EvaluationFormResponse response: multipleChoiceResponses) {
 			String key = response.getStringuifiedResponse();
@@ -160,7 +160,7 @@ public class MultipleChoiceController extends FormBasicController implements Eva
 	}
 
 	@Override
-	public void saveResponse(EvaluationFormSession session) {
+	public void saveResponse(UserRequest ureq, EvaluationFormSession session) {
 		evaluationFormManager.deleteResponses(multipleChoiceResponses);
 
 		Collection<String> selectedChoises = new ArrayList<>(multipleChoiceEl.getSelectedKeys());
diff --git a/src/main/java/org/olat/modules/forms/ui/RubricController.java b/src/main/java/org/olat/modules/forms/ui/RubricController.java
index 6be0984f005f37778d69dfb11edbcf5aeba871ba..3f24602fbe15fa4660b22cb9a01595cc96cf8edd 100644
--- a/src/main/java/org/olat/modules/forms/ui/RubricController.java
+++ b/src/main/java/org/olat/modules/forms/ui/RubricController.java
@@ -252,7 +252,7 @@ public class RubricController extends FormBasicController implements EvaluationF
 	}
 
 	@Override
-	public void initResponse(EvaluationFormSession session, EvaluationFormResponses responses) {
+	public void initResponse(UserRequest ureq, EvaluationFormSession session, EvaluationFormResponses responses) {
 		for (SliderWrapper sliderWrapper: sliderWrappers) {
 			EvaluationFormResponse response = responses.getResponse(session, sliderWrapper.getId());
 			if (response != null) {
@@ -309,7 +309,7 @@ public class RubricController extends FormBasicController implements EvaluationF
 	}
 
 	@Override
-	public void saveResponse(EvaluationFormSession session) {
+	public void saveResponse(UserRequest ureq, EvaluationFormSession session) {
 		for (SliderWrapper sliderWrapper: sliderWrappers) {
 			boolean noResponseSelected = sliderWrapper.getNoResponseEl() != null && sliderWrapper.getNoResponseEl().isOneSelected();
 			if (noResponseSelected) {
diff --git a/src/main/java/org/olat/modules/forms/ui/SessionInformationsController.java b/src/main/java/org/olat/modules/forms/ui/SessionInformationsController.java
index 23cfda6feda0bcabc8b7a450fd627cc046844f1b..6386f1bd4a5a49fabd9cf04f98305c8f22184cea 100644
--- a/src/main/java/org/olat/modules/forms/ui/SessionInformationsController.java
+++ b/src/main/java/org/olat/modules/forms/ui/SessionInformationsController.java
@@ -190,7 +190,7 @@ public class SessionInformationsController extends FormBasicController implement
 	}
 
 	@Override
-	public void initResponse(EvaluationFormSession session, EvaluationFormResponses responses) {
+	public void initResponse(UserRequest ureq, EvaluationFormSession session, EvaluationFormResponses responses) {
 		for (SessionInformationWrapper wrapper: sessionInformationWrappers) {
 			String value = SessionInformationsUIFactory.getValue(wrapper.getInformationType(), session);
 			if (StringHelper.containsNonWhitespace(value)) {
@@ -200,7 +200,7 @@ public class SessionInformationsController extends FormBasicController implement
 	}
 
 	@Override
-	public void saveResponse(EvaluationFormSession session) {
+	public void saveResponse(UserRequest ureq, EvaluationFormSession session) {
 		EvaluationFormSession reloadedSession = evaluationFormManager.loadSessionByKey(session);
 		if (reloadedSession != null) {
 			SessionInformationWrapper emailWrapper = getWrapper(InformationType.USER_EMAIL); 
diff --git a/src/main/java/org/olat/modules/forms/ui/SingleChoiceController.java b/src/main/java/org/olat/modules/forms/ui/SingleChoiceController.java
index 01131058b12169039520ac50ddfade18dccfdd97..ef5b88ef884c9968029930ed60c864e6438d33fa 100644
--- a/src/main/java/org/olat/modules/forms/ui/SingleChoiceController.java
+++ b/src/main/java/org/olat/modules/forms/ui/SingleChoiceController.java
@@ -120,7 +120,7 @@ public class SingleChoiceController extends FormBasicController implements Evalu
 	}
 
 	@Override
-	public void initResponse(EvaluationFormSession session, EvaluationFormResponses responses) {
+	public void initResponse(UserRequest ureq, EvaluationFormSession session, EvaluationFormResponses responses) {
 		response = responses.getResponse(session, singleChoice.getId());
 		if (response != null) {
 			for (Choice choice: singleChoice.getChoices().asList()) {
@@ -132,7 +132,7 @@ public class SingleChoiceController extends FormBasicController implements Evalu
 	}
 
 	@Override
-	public void saveResponse(EvaluationFormSession session) {
+	public void saveResponse(UserRequest ureq, EvaluationFormSession session) {
 		if (singleChoiceEl.isOneSelected()) {
 			String stringValue = singleChoiceEl.getSelectedKey();
 			if (response == null) {
diff --git a/src/main/java/org/olat/modules/forms/ui/TextInputController.java b/src/main/java/org/olat/modules/forms/ui/TextInputController.java
index 83b9c4ed19d12b6507c225c5cd73f113023d7f8c..a96a1bdea2fca1cebae249e6de3828640b1bebf8 100644
--- a/src/main/java/org/olat/modules/forms/ui/TextInputController.java
+++ b/src/main/java/org/olat/modules/forms/ui/TextInputController.java
@@ -134,7 +134,7 @@ public class TextInputController extends FormBasicController implements Evaluati
 	}
 
 	@Override
-	public void initResponse(EvaluationFormSession session, EvaluationFormResponses responses) {
+	public void initResponse(UserRequest ureq, EvaluationFormSession session, EvaluationFormResponses responses) {
 		response = responses.getResponse(session, textInput.getId());
 		if (response != null) {
 			if (singleRow) {
@@ -146,7 +146,7 @@ public class TextInputController extends FormBasicController implements Evaluati
 	}
 
 	@Override
-	public void saveResponse(EvaluationFormSession session) {
+	public void saveResponse(UserRequest ureq, EvaluationFormSession session) {
 		String valueToSave = getValueToSave();
 		if (StringHelper.containsNonWhitespace(valueToSave)) {
 			if (textInput.isNumeric()) {
diff --git a/src/main/java/org/olat/modules/forms/ui/_content/file_upload.html b/src/main/java/org/olat/modules/forms/ui/_content/file_upload.html
new file mode 100644
index 0000000000000000000000000000000000000000..f002ed23e0a849f9a0e5bfab3b29537bf3832b31
--- /dev/null
+++ b/src/main/java/org/olat/modules/forms/ui/_content/file_upload.html
@@ -0,0 +1,19 @@
+#if($readonly)
+	#if($r.isNotNull($filename))
+		<div class="o_clearfix o_evaluation_fileupload">
+			#if($r.isNotNull($thumbUri))
+				<div class="o_evaluation_thumb">
+					<img src="$thumbUri/$filename"/>
+				</div>
+			#end
+			<div class="o_evaluation_filename">
+				<a href="$mapperUri/$filename" target="_blank">
+					<i class="o_icon $iconCss"></i> $filename
+				</a>
+				<span class="o_size">($filesize)</span>
+			</div>
+		</div>
+	#end
+#else
+	$r.render("$fileUpload")
+#end
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/forms/ui/model/EvaluationFormResponseController.java b/src/main/java/org/olat/modules/forms/ui/model/EvaluationFormResponseController.java
index 7fedf985544a429780d7ca7799885599ae3d4a2d..effa21fa081caaf05df3be5c96bd58127dde63c5 100644
--- a/src/main/java/org/olat/modules/forms/ui/model/EvaluationFormResponseController.java
+++ b/src/main/java/org/olat/modules/forms/ui/model/EvaluationFormResponseController.java
@@ -19,6 +19,7 @@
  */
 package org.olat.modules.forms.ui.model;
 
+import org.olat.core.gui.UserRequest;
 import org.olat.modules.forms.EvaluationFormSession;
 import org.olat.modules.forms.model.jpa.EvaluationFormResponses;
 import org.olat.resource.accesscontrol.ui.FormController;
@@ -35,8 +36,8 @@ public interface EvaluationFormResponseController extends FormController {
 	
 	public boolean hasResponse();
 	
-	public void initResponse(EvaluationFormSession session, EvaluationFormResponses responses);
+	public void initResponse(UserRequest ureq, EvaluationFormSession session, EvaluationFormResponses responses);
 	
-	public void saveResponse(EvaluationFormSession session);
+	public void saveResponse(UserRequest ureq, EvaluationFormSession session);
 	
 }
diff --git a/src/main/java/org/olat/modules/forms/ui/model/EvaluationFormResponseControllerElement.java b/src/main/java/org/olat/modules/forms/ui/model/EvaluationFormResponseControllerElement.java
index 1b5abd170a31905a0e0b1941124b5124b83a70b1..d7cf6ccc69daa4e2a9ef8ccdbc43fe1091d297e9 100644
--- a/src/main/java/org/olat/modules/forms/ui/model/EvaluationFormResponseControllerElement.java
+++ b/src/main/java/org/olat/modules/forms/ui/model/EvaluationFormResponseControllerElement.java
@@ -78,12 +78,12 @@ public class EvaluationFormResponseControllerElement implements EvaluationFormEx
 	
 	@Override
 	public void initResponse(EvaluationFormSession session, EvaluationFormResponses responses) {
-		controller.initResponse(session, responses);;
+		controller.initResponse(null, session, responses);;
 	}
 
 	@Override
 	public void saveResponse(EvaluationFormSession session) {
-		controller.saveResponse(session);
+		controller.saveResponse(null, session);
 	}
 
 	@Override