diff --git a/app/__init__.py b/app/__init__.py
index 27233b15064af3d4171780d5c9596ed4d5aca9de..de64a19524032d68d04e3060c6f8ac2144e65936 100644
--- a/app/__init__.py
+++ b/app/__init__.py
@@ -57,8 +57,8 @@ def create_app(config: Config = Config) -> Flask:
     from .auth import bp as auth_blueprint
     app.register_blueprint(auth_blueprint, url_prefix='/auth')
 
-    from .contribute import bp as contribute_blueprint
-    app.register_blueprint(contribute_blueprint, url_prefix='/contribute')
+    from .contributions import bp as contributions_blueprint
+    app.register_blueprint(contributions_blueprint, url_prefix='/contributions')
 
     from .corpora import bp as corpora_blueprint
     app.register_blueprint(corpora_blueprint, url_prefix='/corpora')
diff --git a/app/contribute/__init__.py b/app/contributions/__init__.py
similarity index 54%
rename from app/contribute/__init__.py
rename to app/contributions/__init__.py
index 15d172ecacca63634bafe62e3c2af0a79671dc8d..af9747a67b39250b7dd0a857948fe915462af504 100644
--- a/app/contribute/__init__.py
+++ b/app/contributions/__init__.py
@@ -1,5 +1,5 @@
 from flask import Blueprint
 
 
-bp = Blueprint('contribute', __name__)
+bp = Blueprint('contributions', __name__)
 from . import routes
diff --git a/app/contributions/forms.py b/app/contributions/forms.py
new file mode 100644
index 0000000000000000000000000000000000000000..205f17409a7f1ae62d581cd8cb040b7a51d6ab28
--- /dev/null
+++ b/app/contributions/forms.py
@@ -0,0 +1,15 @@
+from app.models import User
+from flask_wtf import FlaskForm
+from wtforms import (
+    BooleanField,
+    PasswordField,
+    StringField,
+    SubmitField,
+    ValidationError
+)
+from wtforms.validators import DataRequired, InputRequired, Email, EqualTo, Length, Regexp
+from . import USERNAME_REGEX
+
+
+class ContributeTesseractOCRModel(FlaskForm):
+    pass
diff --git a/app/contribute/routes.py b/app/contributions/routes.py
similarity index 75%
rename from app/contribute/routes.py
rename to app/contributions/routes.py
index 8bfd9bd84666d54b9449378030025a67944937b8..94462a83ce2eb82d91d9f7ed21727d5815110ae3 100644
--- a/app/contribute/routes.py
+++ b/app/contributions/routes.py
@@ -1,3 +1,4 @@
+from ast import Pass
 from app import db
 from app.decorators import permission_required
 from app.models import Permission, Role, User
@@ -14,6 +15,11 @@ def before_request():
     pass
 
 
-@bp.route('/')
+@bp.route('')
 def index():
     pass
+
+
+@bp.route('/tesseract_ocr_model', methods=['GET', 'POST'])
+def tesseract_ocr_model():
+    pass
diff --git a/app/models.py b/app/models.py
index ce3686c814fca8620199905584cd07c855ffc3da..68eb8ab0aa15a9b0de2fc138c03eeb8318673be7 100644
--- a/app/models.py
+++ b/app/models.py
@@ -1088,6 +1088,8 @@ def job_after_update_handler(mapper, connection, job):
     for attr in db.inspect(job).attrs:
         if attr.key != 'status':
             continue
+        if not attr.load_history().has_changes():
+            return
         if job.user.setting_job_status_mail_notification_level == UserSettingJobStatusMailNotificationLevel.NONE:
             return
         if job.user.setting_job_status_mail_notification_level == UserSettingJobStatusMailNotificationLevel.END:
diff --git a/app/templates/_sidenav.html.j2 b/app/templates/_sidenav.html.j2
index 08d8f163d28c7ef24e35f129eb6e48a482d24fd5..92592a7fbffdd4682f981b1357b33a256ba61186 100644
--- a/app/templates/_sidenav.html.j2
+++ b/app/templates/_sidenav.html.j2
@@ -32,7 +32,7 @@
   <li><a href="{{ url_for('admin.index') }}"><i class="material-icons">admin_panel_settings</i>Administration</a></li>
   {% endif %}
   {% if current_user.can(Permission.CONTRIBUTE) %}
-  <li><a href="{{ url_for('contribute.index') }}"><i class="material-icons">new_label</i>Contribute</a></li>
+  <li><a href="{{ url_for('contributions.index') }}"><i class="material-icons">new_label</i>Contribute</a></li>
   {% endif %}
   {% if current_user.can(Permission.USE_API) %}
   <li><a href="{{ url_for('api.doc') }}"><i class="material-icons">api</i>API</a></li>