diff --git a/server.py b/server.py
index 61eb7e3853dd079bdb09e9e9795bc8860d15f4f6..eec035d5e969bf3d3a5b2d3d1633dd37ae530cdc 100755
--- a/server.py
+++ b/server.py
@@ -18,6 +18,7 @@ import os
 from datetime import datetime
 import math
 import mimetypes
+import subprocess
 
 import config
 from shared import db, date_filter, datetime_filter, date_filter_long, date_filter_short, time_filter, time_filter_short, user_manager, security_manager, current_user, check_login, login_required, group_required, class_filter, needs_date_test, todostate_name_filter, code_filter, indent_tab_filter
@@ -80,6 +81,18 @@ app.jinja_env.globals.update(max=max)
 app.jinja_env.globals.update(dir=dir)
 app.jinja_env.globals.update(now=datetime.now)
 
+def get_git_revision():
+    gitlab_url = "https://git.fsmpi.rwth-aachen.de/protokollsystem/proto3"
+    commit_hash = subprocess.check_output(["git", "log", "-g", "-1", "--pretty=%H"]).decode("UTF-8").strip()
+    timestamp = int(subprocess.check_output(["git", "log", "-g", "-1", "--pretty=%at"]).strip())
+    commit_date = datetime.fromtimestamp(timestamp)
+    return {"url": gitlab_url, "hash": commit_hash, "date": commit_date}
+
+try:
+    app.jinja_env.globals["git_revision"] = get_git_revision()
+except:
+    pass
+
 # blueprints here
 
 @manager.command
diff --git a/templates/documentation.html b/templates/documentation.html
index 5c6758b5a55867938b6fb45e411f84e2ae5668b8..fd539659aa1c8805ff88fe6d9cd52dd0aadb4c60 100644
--- a/templates/documentation.html
+++ b/templates/documentation.html
@@ -214,6 +214,11 @@
         Optional kann zusätzlich eine Uhrzeit angegeben werden: <code>[sitzung;Datum;Uhrzeit]</code> (z.B. <code>[sitzung;01.01.2018;9:00]</code>).
 
 {% endif %}
+        {% if git_revision %}
+        <h3 id="version">Version</h4>
+        Dieses Protokollsystem nutzt die Software <a href="{{git_revision.url}}">„Protokollsystem 3“</a> in der Version vom <a href="{{git_revision.url}}/commit/{{git_revision.hash}}">{{git_revision.date|datify}}</a>.
+        Alle Änderungen, die seitdem hinzugekommen sind, kannst du <a href="{{git_revision.url}}/compare/{{git_revision.hash}}...master">hier</a> sehen.
+        {% endif %}
     </div>
 </div>
 {% endblock %}
diff --git a/templates/protocol-show.html b/templates/protocol-show.html
index 2faf8783bc6b73ffe9c7a11a2941339a46543057..882700c1e0816c0925c015ef2bdfbf02f72f5d5d 100644
--- a/templates/protocol-show.html
+++ b/templates/protocol-show.html
@@ -26,7 +26,7 @@
                 {% endif %}
                 {% if not protocol.public %}
                     {% if config.ETHERPAD_ACTIVE %}
-                    <a class="btn btn-primary" href="{{url_for("etherpush_protocol", protocol_id=protocol.id)}}"{% if large_time_diff %} onclick="return confirm('Bist du dir sicher, dass du das Template bereits in das Etherpad kopieren willst? Die Sitzung ist erst in {{time_diff.days}} Tagen.');"{% endif %}>Etherpad</a>
+                    <a class="btn btn-primary" href="{{url_for("etherpush_protocol", protocol_id=protocol.id)}}"{% if large_time_diff %} onclick="return confirm('Bist du dir sicher, dass du das Template bereits in das Etherpad kopieren willst? Die Sitzung ist erst in {{time_diff.days}} Tagen.');"{% endif %} target="_blank">Etherpad</a>
                     {% endif %}
                 {% endif %}
                 {% if not protocol.is_done() %}
diff --git a/templates/protocol.tex b/templates/protocol.tex
index 206a7510a89280ee30f69a34b4929248acd61487..bc289ba5688c0428d70728a076a696911868b06f 100644
--- a/templates/protocol.tex
+++ b/templates/protocol.tex
@@ -5,7 +5,9 @@
 \usepackage{pdfpages}
 \usepackage{eurosym}
 %\usepackage[utf8]{inputenc}
-\usepackage[pdfborder={0 0 0}]{hyperref}
+\usepackage[hyphens]{url}
+\usepackage[pdfborder={0 0 0},breaklinks=true]{hyperref}
+\def\UrlBreaks{\do\/\do-\do\&\do.\do,\do;\do\_\do?\do\#}
 %\usepackage{ngerman}
 % \usepackage[left]{lineno}
 %\usepackage{footnote}
diff --git a/templates/protokoll2.cls b/templates/protokoll2.cls
index b181f14dd0dbc3b1384f852151bcfad58782a947..9acc5a80f72227f1c5ea2d0d7183897bbb1263e5 100644
--- a/templates/protokoll2.cls
+++ b/templates/protokoll2.cls
@@ -1,7 +1,7 @@
 % protokoll.cls -- version 0.1 -- last changed: see mtime of the file ;)
 %
 %
-% Author: Sebastian G�nther <samson@asta.rwth-aachen.de>
+% Author: Sebastian Günther <samson@asta.rwth-aachen.de>
 
 % zuerst mal LaTeX's formalzeug
 \NeedsTeXFormat{LaTeX2e}
@@ -126,7 +126,7 @@
 \renewcommand{\thesubsection}{TOP~\arabic{section}~(\alph{subsection})}
 \newcommand{\TOP}[1]{\section{#1}}
 \newcommand{\unterTOP}[1]{\subsection{#1}}
-% F�rs Inhaltsverzeichnisanpassen
+% Fürs Inhaltsverzeichnisanpassen
 \renewcommand{\l@section}{\@dottedtocline{1}{1.5em}{4em}}
 \renewcommand{\l@subsection}{\@dottedtocline{2}{5.5em}{5.2em}}
 \renewcommand{\contentsname}{Tagesordnung}
@@ -166,7 +166,7 @@
 }%
 {\end{list}}
 
-% Abk�rzungen
+% Abkürzungen
 \newenvironment{Abk}{%
   \begin{list}{}{%
 	Abkürzungen:
@@ -183,7 +183,7 @@
 }%
 {\end{list}}
 
-% Unterschriften f�r eine und zwei Personen
+% Unterschriften für eine und zwei Personen
 \newcommand{\Unterschrift}[2]{
   \vspace*{1.4cm}
   \begin{center}
diff --git a/views/forms.py b/views/forms.py
index fe3a2affd485bf0e7d3c6f2a83d2d655e3946bd5..276a8bfbd35920df774d19a51537943c6401fdfa 100644
--- a/views/forms.py
+++ b/views/forms.py
@@ -99,8 +99,13 @@ class IPNetworkField(Field):
                 raise ValueError(self.gettext("Not a valid IP Network: {}".format(str(exc))))
             self.data = ",".join(map(str, result_parts))
 
+class FocusedStringField(StringField):
+    def __call__(self, **kwargs):
+        kwargs['autofocus'] = True
+        return super().__call__(**kwargs)
+
 class LoginForm(FlaskForm):
-    username = StringField("Benutzer", validators=[InputRequired("Bitte gib deinen Benutzernamen ein.")])
+    username = FocusedStringField("Benutzer", validators=[InputRequired("Bitte gib deinen Benutzernamen ein.")])
     password = PasswordField("Passwort", validators=[InputRequired("Bitte gib dein Passwort ein.")])
     permanent = BooleanField("Eingeloggt bleiben?")