diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionImportController.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionImportController.java
index 55d6d20d6ff71c9aed70d7d13528efaf1d627073..914ea33e669581996d815e70d880ba9e8b6451e8 100644
--- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionImportController.java
+++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionImportController.java
@@ -18,7 +18,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.context.request.RequestAttributes;
 import org.springframework.web.context.request.WebRequest;
 
-import javax.servlet.http.HttpServletRequest;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
 
@@ -29,7 +28,6 @@ public class TransactionImportController extends BaseController
 	private static class ModelAttributes
 	{
 		public static final String ERROR = "error";
-		public static final String ERROR_UPLOAD = "errorUpload";
 	}
 
 	private static class ReturnValues
@@ -43,6 +41,8 @@ public class TransactionImportController extends BaseController
 	{
 		public static final String CSV_IMPORT = "csvImport";
 		public static final String CSV_ROWS = "csvRows";
+		public static final String ERROR_UPLOAD = "errorUpload";
+		public static final String ERROR_UPLOAD_FILE = "errorUploadFile";
 	}
 
 	private final TransactionService transactionService;
@@ -56,15 +56,24 @@ public class TransactionImportController extends BaseController
 	}
 
 	@GetMapping
-	public String transactionImport(HttpServletRequest request, Model model)
+	public String transactionImport(WebRequest request, Model model)
 	{
-		model.addAttribute(RequestAttributeNames.CSV_IMPORT, new CsvImport(null, ";", StandardCharsets.UTF_8.name(), 0));
+		if(request.getAttribute(RequestAttributeNames.CSV_IMPORT, RequestAttributes.SCOPE_SESSION) == null)
+		{
+			model.addAttribute(RequestAttributeNames.CSV_IMPORT, new CsvImport(null, ";", StandardCharsets.UTF_8.name(), 0));
+		}
+
+		final Object bindingResult = request.getAttribute(RequestAttributeNames.ERROR_UPLOAD, RequestAttributes.SCOPE_SESSION);
+		if(bindingResult != null)
+		{
+			model.addAttribute(ModelAttributes.ERROR, bindingResult);
+		}
+
 		return ReturnValues.TRANSACTION_IMPORT;
 	}
 
 	@PostMapping("/upload")
 	public String upload(WebRequest request,
-						 Model model,
 						 @ModelAttribute("CsvImport") CsvImport csvImport,
 						 BindingResult bindingResult)
 	{
@@ -85,9 +94,9 @@ public class TransactionImportController extends BaseController
 
 		if(bindingResult.hasErrors())
 		{
-			model.addAttribute(ModelAttributes.ERROR, bindingResult);
+			request.setAttribute(RequestAttributeNames.ERROR_UPLOAD, bindingResult, RequestAttributes.SCOPE_SESSION);
 			request.setAttribute(RequestAttributeNames.CSV_IMPORT, csvImport, RequestAttributes.SCOPE_SESSION);
-			return ReturnValues.TRANSACTION_IMPORT;
+			return ReturnValues.REDIRECT_IMPORT;
 		}
 
 		try
@@ -95,6 +104,8 @@ public class TransactionImportController extends BaseController
 			final String csvString = new String(csvImport.file().getBytes(), csvImport.encoding());
 			final List<CsvRow> csvRows = CsvParser.parseCsv(csvString, csvImport.separator().charAt(0), csvImport.numberOfLinesToSkip());
 
+			removeAllAttributes(request);
+
 			request.setAttribute(RequestAttributeNames.CSV_IMPORT, csvImport, RequestAttributes.SCOPE_SESSION);
 			request.setAttribute(RequestAttributeNames.CSV_ROWS, csvRows, RequestAttributes.SCOPE_SESSION);
 		}
@@ -103,18 +114,23 @@ public class TransactionImportController extends BaseController
 			LOGGER.error("CSV upload failed", e);
 
 			// TODO: show in html
-			model.addAttribute(ModelAttributes.ERROR_UPLOAD, e.getMessage());
+			request.setAttribute(RequestAttributeNames.ERROR_UPLOAD_FILE, e.getMessage(), RequestAttributes.SCOPE_SESSION);
 		}
-
-		return ReturnValues.TRANSACTION_IMPORT;
+		return ReturnValues.REDIRECT_IMPORT;
 	}
 
 	@GetMapping("/cancel")
 	public String cancel(WebRequest request)
+	{
+		removeAllAttributes(request);
+		return ReturnValues.REDIRECT_IMPORT;
+	}
+
+	private void removeAllAttributes(WebRequest request)
 	{
 		request.removeAttribute(RequestAttributeNames.CSV_IMPORT, RequestAttributes.SCOPE_SESSION);
 		request.removeAttribute(RequestAttributeNames.CSV_ROWS, RequestAttributes.SCOPE_SESSION);
-
-		return ReturnValues.REDIRECT_IMPORT;
+		request.removeAttribute(RequestAttributeNames.ERROR_UPLOAD, RequestAttributes.SCOPE_SESSION);
+		request.removeAttribute(RequestAttributeNames.ERROR_UPLOAD_FILE, RequestAttributes.SCOPE_SESSION);
 	}
 }
\ No newline at end of file