diff --git a/models/database.py b/models/database.py
index def659f48d0ad81be438311e847287233ca02419..59e71ce22bbf7546963d2455b611f3f427bc2bcf 100644
--- a/models/database.py
+++ b/models/database.py
@@ -236,7 +236,7 @@ class Protocol(DatabaseModel):
                 description=default_top.description or ""))
         return local_tops
 
-    def fill_from_remarks(self, remarks):
+    def fill_from_remarks(self, remarks, ignore_old_date=False):
         def _date_or_lazy(key, get_date=False, get_time=False):
             formats = []
             if get_date:
@@ -258,7 +258,7 @@ class Protocol(DatabaseModel):
                 raise exc
         if DATE_KEY in remarks:
             new_date = _date_or_lazy(DATE_KEY, get_date=True)
-            if self.date is not None:
+            if self.date is not None and not ignore_old_date:
                 if new_date != self.date:
                     raise DateNotMatchingException(
                         original_date=self.date, protocol_date=new_date)
diff --git a/server.py b/server.py
index 660b78086237bb78a33eb79c6a8bfca431ea09f9..6fdaa78f3d52f31348d3060dc336041b8681b5fd 100755
--- a/server.py
+++ b/server.py
@@ -862,13 +862,13 @@ def upload_new_protocol():
             flash("Invalider Protokolltyp oder keine Rechte.", "alert-error")
             return redirect(request.args.get("fail")
                             or url_for("new_protocol"))
-        protocol = Protocol(protocoltype_id=protocoltype.id, source=source)
+        protocol = Protocol(protocoltype_id=protocoltype.id, source=source, date=datetime.now().date())
         db.session.add(protocol)
         db.session.commit()
         for local_top in protocol.create_localtops():
             db.session.add(local_top)
         db.session.commit()
-        tasks.parse_protocol(protocol)
+        tasks.parse_protocol(protocol, ignore_old_date=True)
         return back.redirect("show_protocol", protocol_id=protocol.id)
     return redirect(request.args.get("fail") or url_for("new_protocol"))
 
@@ -911,7 +911,7 @@ def upload_new_protocol_by_file():
         db.session.add(document)
         db.session.commit()
         internal_filename = get_internal_filename(
-            protocol, document.id, filename)
+            protocol, document, filename)
         document.filename = internal_filename
         file.save(os.path.join(config.DOCUMENTS_PATH, internal_filename))
         db.session.commit()
diff --git a/tasks.py b/tasks.py
index d10295f5c47b9dd2196391f3b8a3919bf9b49c08..6ccbdde2c9480d964567e191106c6d956d7ada4f 100644
--- a/tasks.py
+++ b/tasks.py
@@ -155,19 +155,24 @@ def _make_error(protocol, *args):
 ID_FIELD_BEGINNING = "id "
 
 
-def parse_protocol(protocol):
-    parse_protocol_async.delay(protocol.id)
+def parse_protocol(protocol, ignore_old_date=False):
+    parse_protocol_async.delay(protocol.id, ignore_old_date)
 
 
 @celery.task
-def parse_protocol_async(protocol_id):
+def parse_protocol_async(protocol_id, ignore_old_date=False):
     with app.app_context():
         with app.test_request_context("/"):
             try:
                 protocol = Protocol.first_by_id(protocol_id)
                 if protocol is None:
                     raise Exception("No protocol given. Aborting parsing.")
-                parse_protocol_async_inner(protocol)
+                parse_protocol_async_inner(protocol, ignore_old_date)
+                if protocol.date is None :
+                    initialdate = datetime.now().date()
+                    protocol.date = initialdate
+                    db.session.commit()
+                    _make_error(protocol, "Parsing", "No date for the protocol found, use current date instead.", initialdate)
             except Exception as exc:
                 stacktrace = traceback.format_exc()
                 return _make_error(
@@ -175,7 +180,7 @@ def parse_protocol_async(protocol_id):
                     "{}\n\n{}".format(str(exc), stacktrace))
 
 
-def parse_protocol_async_inner(protocol):
+def parse_protocol_async_inner(protocol, ignore_old_date=False):
     old_errors = list(protocol.errors)
     for error in old_errors:
         protocol.errors.remove(error)
@@ -220,7 +225,7 @@ def parse_protocol_async_inner(protocol):
                 protocol, "Parsing", "Du hast vergessen, Metadaten anzugeben.",
                 ", ".join(missing_fields))
     try:
-        protocol.fill_from_remarks(remarks)
+        protocol.fill_from_remarks(remarks, ignore_old_date)
     except ValueError:
         return _make_error(
             protocol, "Parsing", "Invalid fields",