diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java
index 7fc9b74e087ea3839c057a97f57724af91ea2095..2b849d84988e0e997f1070e0b0c6948236a26574 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java
@@ -52,6 +52,7 @@ import org.olat.core.gui.components.form.flexible.FormItemContainer;
 import org.olat.core.gui.components.form.flexible.elements.Submit;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
+import org.olat.core.gui.media.ServletUtil;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.logging.AssertException;
 import org.olat.core.logging.OLog;
@@ -325,7 +326,7 @@ public class Form {
 			for(Part part:req.getParts()) {
 				String name = part.getName();
 				String contentType = part.getContentType();
-				String fileName = part.getSubmittedFileName();
+				String fileName = getSubmittedFileName(part);
 				if(StringHelper.containsNonWhitespace(fileName)) {
 					File tmpFile = new File(WebappHelper.getTmpDir(), "upload-" + CodeHelper.getGlobalForeverUniqueID());
 					part.write(tmpFile.getAbsolutePath());
@@ -350,6 +351,19 @@ public class Form {
 		}
 	}
 	
+	private String getSubmittedFileName(Part part) {
+		final String disposition = part.getHeader("Content-Disposition");
+	    if (disposition != null) {
+	        if (disposition.startsWith("form-data")) {
+	           String fileName = ServletUtil.extractQuotedValueFromHeader(disposition, "filename");
+	            if (fileName != null) {
+	                return fileName;
+	            }
+	        }
+	    }
+	    return null;
+	}
+	
 	private boolean isMultipartContent(HttpServletRequest request) {
 		if (!"POST".equalsIgnoreCase(request.getMethod())) {
             return false;
diff --git a/src/main/java/org/olat/core/gui/media/ServletUtil.java b/src/main/java/org/olat/core/gui/media/ServletUtil.java
index 44d39873978145b471c4d5d841270ed1dd771515..2aac24e2155bf62969dad3e9fac33f250944cda4 100644
--- a/src/main/java/org/olat/core/gui/media/ServletUtil.java
+++ b/src/main/java/org/olat/core/gui/media/ServletUtil.java
@@ -628,6 +628,76 @@ public class ServletUtil {
 		return (normalized);
 	}
 	
+    /**
+     * Extracts a quoted value from a header that has a given key. For instance if the header is
+     * <p>
+     * content-disposition=form-data; name="my field"
+     * and the key is name then "my field" will be returned without the quotes.
+     *
+     * @param header The header
+     * @param key    The key that identifies the token to extract
+     * @return The token, or null if it was not found
+     */
+    public static String extractQuotedValueFromHeader(final String header, final String key) {
+
+        int keypos = 0;
+        int pos = -1;
+        boolean inQuotes = false;
+        for (int i = 0; i < header.length() - 1; ++i) { //-1 because we need room for the = at the end
+            //TODO: a more efficient matching algorithm
+            char c = header.charAt(i);
+            if (inQuotes) {
+                if (c == '"') {
+                    inQuotes = false;
+                }
+            } else {
+                if (key.charAt(keypos) == c) {
+                    keypos++;
+                } else if (c == '"') {
+                    keypos = 0;
+                    inQuotes = true;
+                } else {
+                    keypos = 0;
+                }
+                if (keypos == key.length()) {
+                    if (header.charAt(i + 1) == '=') {
+                        pos = i + 2;
+                        break;
+                    } else {
+                        keypos = 0;
+                    }
+                }
+            }
+
+        }
+        if (pos == -1) {
+            return null;
+        }
+
+        int end;
+        int start = pos;
+        if (header.charAt(start) == '"') {
+            start++;
+            for (end = start; end < header.length(); ++end) {
+                char c = header.charAt(end);
+                if (c == '"') {
+                    break;
+                }
+            }
+            return header.substring(start, end);
+
+        } else {
+            //no quotes
+            for (end = start; end < header.length(); ++end) {
+                char c = header.charAt(end);
+                if (c == ' ' || c == '\t' || c == ';') {
+                    break;
+                }
+            }
+            return header.substring(start, end);
+        }
+    }
+	
 	//fxdiff FXOLAT-118: accept range to deliver videos for iPad
   protected static class Range {
     public long start;
diff --git a/src/main/java/org/olat/login/oauth/OAuthDispatcher.java b/src/main/java/org/olat/login/oauth/OAuthDispatcher.java
index c18b6f7922a6043de3f11682e983ace8a3216ed2..5fa1cf1a407c1ddf84c0d278c43616325e95401f 100644
--- a/src/main/java/org/olat/login/oauth/OAuthDispatcher.java
+++ b/src/main/java/org/olat/login/oauth/OAuthDispatcher.java
@@ -28,6 +28,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
+import org.olat.admin.user.delete.service.UserDeletionManager;
 import org.olat.basesecurity.AuthHelper;
 import org.olat.basesecurity.Authentication;
 import org.olat.basesecurity.BaseSecurityManager;
@@ -170,6 +171,8 @@ public class OAuthDispatcher implements Dispatcher {
 						DispatcherModule.redirectToDefaultDispatcher(response); 
 					}
 				} else {
+					//update last login date and register active user
+					UserDeletionManager.getInstance().setIdentityAsActiv(identity);
 					MediaResource mr = ureq.getDispatchResult().getResultingMediaResource();
 					if (mr instanceof RedirectMediaResource) {
 						RedirectMediaResource rmr = (RedirectMediaResource)mr;