diff --git a/README.md b/README.md
index 0c8cc5d..f988709 100644
--- a/README.md
+++ b/README.md
@@ -44,7 +44,7 @@ Die folgende Tabelle zeigt Ihnen die Themen der Woche und welche Kapitel Sie bis
## Freiwillige Übungen
-Die freiwilligen Übungen zur Vertiefung der Vorlesungsinhalte finden Sie in einem getrennten Repository: [Freiwillige Übungen](pr2-lecture-STG/uebungen/src/branch/main/readme.md)
+Die freiwilligen Übungen zur Vertiefung der Vorlesungsinhalte finden Sie in einem getrennten Repository: [Freiwillige Übungen](https://gitty.informatik.hs-mannheim.de/pr2-lecture-STG/uebungen)
## Assignments
diff --git a/bin/submit.sh b/bin/submit.sh
new file mode 100755
index 0000000..8b456a9
--- /dev/null
+++ b/bin/submit.sh
@@ -0,0 +1,66 @@
+#!/usr/bin/bash
+
+# Fail on first error
+set -e
+
+# check how we have been called
+if [ ! "$0" == "bin/submit.sh" ]; then
+ echo -e "\e[31m"
+ echo "💣 Das Skript muss aus dem Hauptverzeichnis des Projektes"
+ echo "💣 mit bin/submit.sh aufgerufen werden."
+ echo -e "\e[0m"
+ exit 1
+fi
+
+echo "***************************************************************"
+echo "Abgabe einreichen"
+echo "***************************************************************"
+echo ""
+cd sources
+
+# Test, if project builds
+echo "------------------------------------------------------------------"
+echo "Build..."
+echo ""
+if ! mvn; then
+ echo -e "\e[31m"
+ echo "💣 Projekt baut nicht und kann deswegen nicht abgegeben werden."
+ echo "💣 Bitte beheben Sie alle gemeldeten Fehler und versuchen Sie "
+ echo "💣 es dann erneut "
+ echo -e "\e[0m"
+ exit 1
+else
+ echo -e "\e[32m"
+ echo "✅ Projekt gebaut "
+ echo -e "\e[0m"
+fi
+
+# Test, if all changes are committed
+echo "------------------------------------------------------------------"
+echo "Teste git-Staus..."
+if ! git status | grep -q "nothing to commit" && ! git status | grep -q "nichts zu committen" ; then
+ echo -e "\e[31m"
+ echo "💣 Bitte checken Sie alle Änderungen per git ein. "
+ echo -e "\e[0m"
+ exit 1
+else
+ echo -e "\e[32m"
+ echo "✅ Alle Dateien eingecheckt "
+ echo -e "\e[0m"
+fi
+
+# Submit
+echo "------------------------------------------------------------------"
+echo "Sende Lösung..."
+if ! git push origin main; then
+ echo -e "\e[31m"
+ echo "💣 Push nicht erfolgreich. Bitte beheben Sie den Fehler und "
+ echo "💣 starten Sie das Skript erneut. "
+ echo -e "\e[0m"
+ exit 1
+else
+ echo -e "\e[32m"
+ echo "✅ Aktuelle Lösungen eingereicht "
+ echo -e "\e[0m"
+fi
+
diff --git a/bin/update.sh b/bin/update.sh
new file mode 100755
index 0000000..6f34e0a
--- /dev/null
+++ b/bin/update.sh
@@ -0,0 +1,66 @@
+#!/usr/bin/bash
+
+# Fail on first error
+set -e
+
+# check how we have been called
+if [ ! "$0" == "bin/update.sh" ]; then
+ echo -e "\e[31m"
+ echo "💣 Das Skript muss aus dem Hauptverzeichnis des Projektes"
+ echo "💣 mit bin/update.sh oder bash bin/update.sh aufgerufen werden."
+ echo -e "\e[0m"
+ exit 1
+fi
+
+# Check the integrity of the .assignments directory
+if [ -d ".assignments" ] && [ ! -d ".assignments/.git" ]; then
+ echo -e "\e[31m"
+ echo "Nicht korrektes .assignments-Verzeichnis. Wird gelöscht."
+ echo "Bitte achten Sie darauf, das .assignments-Verzeichnis nicht"
+ echo "einzuchecken."
+ echo -ne "\e[0m"
+ rm -rf ".assignments"
+fi
+
+# Clone repo if not already present
+if [ ! -d ".assignments" ]; then
+ echo -e "\e[32m"
+ echo "Clone Repository mit den Aufgaben"
+ echo -ne "\e[0m"
+ git clone gitea@gitty.informatik.hs-mannheim.de:pr2-lecture-STG/assignments.git .assignments
+ mkdir -p sources/src/main/java
+fi
+
+# Sync exercises with local directory
+echo -e "\e[32m"
+echo "---------------------------------------------------------------"
+echo "Hole neue Aufgaben und Quelltexte "
+echo "---------------------------------------------------------------"
+echo -ne "\e[0m"
+
+(cd .assignments && git pull origin main)
+rsync --ignore-existing -raz .assignments/sources/ sources/
+
+for dir in .assignments/Assignment_*; do
+ rsync --ignore-existing -raz "$dir" ./
+done
+
+# Assignment files
+rsync --ignore-existing -raz --include='Assignment_*' --exclude='*' .assignments/* ./
+
+# Libraries
+rsync -raz .assignments/sources/lib/ ./sources/lib
+
+# Main readme
+cp .assignments/readme.md README.md
+
+# Update scripts
+cp .assignments/bin/submit.sh bin/submit.sh
+
+if [ -f .assignments/bin/update.sh ]; then
+ # Remove myself
+ rm bin/update.sh
+
+ # Copy the new version at the old location
+ cp .assignments/bin/update.sh bin/update.sh
+fi
diff --git a/help/eclipse.md b/help/eclipse.md
new file mode 100644
index 0000000..390a573
--- /dev/null
+++ b/help/eclipse.md
@@ -0,0 +1,31 @@
+## Tabs in Eclipse
+
+Eclipse verwendet standardmäßig Tabulatoren für die Einrückung von Quelltexten. Da dies aber dem Coding-Standard widerspricht und auch von den Check-Tools bemängelt wird, sollten Sie Eclipse entsprechend konfigurieren.
+
+Öffnen Sie die Properties für das aktuelle Projekt über `File` -> `Properties`.
+
+
+
+Wählen Sie im Dialog die Option `Java Code Style` und dann `Formater`. Setzen Sie das Häkchen bei `Enable project specific settings` und klicken Sie auf `New`.
+
+
+
+Geben Sie dem Profil einen Namen, z.B. `PR2`.
+
+
+
+Wählen Sie unter dem Punkt `Indentation` als `Tab policy` den Eintrag `Spaces only` uns setzen Sie die Breiten auf jeweils `4`.
+
+Schließen Sie den Dialog mit `OK` und das Properties-Fenster mit `Apply and Close`.
+
+## Encoding und Zeilenende
+
+Eclipse verwendet teilweise ein anderes Encoding als UTF-8 und benutzt Windows-Zeilenenden. Um dies zu verhindern nehmen Sie bitte folgende Einstellung vor:
+
+Öffnen Sie die Properties für das aktuelle Projekt über `File` -> `Properties`.
+
+Wählen Sie im Dialog die Option `Resources`.
+
+
+
+Setzen Sie die Option `Text file encoding` auf `UTF-8` und `New text file line delimiter` auf `Unix`.
diff --git a/help/img/crlf.png b/help/img/crlf.png
new file mode 100644
index 0000000..c50499f
Binary files /dev/null and b/help/img/crlf.png differ
diff --git a/help/img/tab_1.png b/help/img/tab_1.png
new file mode 100644
index 0000000..41b2246
Binary files /dev/null and b/help/img/tab_1.png differ
diff --git a/help/img/tab_2.png b/help/img/tab_2.png
new file mode 100644
index 0000000..198b7e7
Binary files /dev/null and b/help/img/tab_2.png differ
diff --git a/help/img/tab_3.png b/help/img/tab_3.png
new file mode 100644
index 0000000..b460f2a
Binary files /dev/null and b/help/img/tab_3.png differ
diff --git a/help/softwareausstattung.md b/help/softwareausstattung.md
new file mode 100644
index 0000000..9cbfb3b
--- /dev/null
+++ b/help/softwareausstattung.md
@@ -0,0 +1,9 @@
+## Softwareausstattung
+
+ * **Ubuntu Linux** als Installation oder VM
+ * **Java JDK 21**
`sudo apt install openjdk-21-jdk openjdk-21-source openjdk-21-doc`
+ * **Git** und Git-Frontends
`sudo apt install git meld git-cola`
+ * **Maven 3.6 oder neuer**
`sudo apt install maven`
+ * **Eclipse**
Von der [Webseite](https://www.eclipse.org/downloads/) herunterladen und installieren. Bitte verwenden Sie die Version **Eclipse IDE for Java Developers**
+
+Eine Anleitung zur Installation von Ubuntu Linux finden Sie [hier](https://github.com/informatik-mannheim/linux-hsma/blob/master/doc/readme.md). Diese Anleitung bezieht sich auf Ubuntu 21.04, funktioniert so aber auch mit einer neueren Version.
diff --git a/sources/pom.xml b/sources/pom.xml
new file mode 100644
index 0000000..9ea6d57
--- /dev/null
+++ b/sources/pom.xml
@@ -0,0 +1,132 @@
+
+ 4.0.0
+ de.hs_mannheim.pr2
+ solutions
+ 1.0-SNAPSHOT
+ jar
+
+ PR2 Excercises
+
+
+ UTF-8
+ 17
+ 17
+ 5.9.1
+ 1.9.1
+
+
+
+ jitpack.io
+ https://jitpack.io
+
+
+
+ install
+ ${basedir}/target
+ ${project.artifactId}-${project.version}
+
+
+ maven-compiler-plugin
+ 3.10.1
+
+
+ maven-surefire-plugin
+ 3.0.0-M7
+
+
+ org.apache.maven.plugins
+ maven-checkstyle-plugin
+ 3.2.0
+
+
+ com.puppycrawl.tools
+ checkstyle
+ 10.4
+
+
+
+ checkstyle.xml
+ true
+ true
+ false
+
+
+
+ validate
+ validate
+
+ check
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-pmd-plugin
+ 3.19.0
+
+
+ ./pmd.xml
+
+ true
+ true
+
+
+
+
+ check
+
+
+
+
+
+
+
+
+
+ com.github.thomsmits
+ game-framework
+ v1.0
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ ${junit.jupiter.version}
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ ${junit.jupiter.version}
+
+
+ org.junit.jupiter
+ junit-jupiter-params
+ ${junit.jupiter.version}
+
+
+ org.junit.platform
+ junit-platform-suite
+ ${junit.platform.version}
+
+
+ org.junit.vintage
+ junit-vintage-engine
+ ${junit.jupiter.version}
+
+
+ org.jfree
+ jfreechart
+ 1.5.3
+
+
+
+
diff --git a/sources/src/main/java/pr2/bootstrap/hello/.gitkeep b/sources/src/main/java/pr2/bootstrap/hello/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/sources/src/main/java/pr2/bootstrap/hello/Greeter.java b/sources/src/main/java/pr2/bootstrap/hello/Greeter.java
new file mode 100644
index 0000000..0b7107b
--- /dev/null
+++ b/sources/src/main/java/pr2/bootstrap/hello/Greeter.java
@@ -0,0 +1,16 @@
+package pr2.bootstrap.hello;
+
+/**
+ * Eine freundliche Klasse, die gerne Menschen begrüßt.
+ */
+public class Greeter {
+
+ /**
+ * Begrüßt die Person.
+ *
+ * @param name Name der Person, die begrüßt wird.
+ */
+ public void greet(String name) {
+ System.out.printf("Hallo %s\n", name);
+ }
+}
diff --git a/sources/src/main/java/pr2/bootstrap/hello/HelloWorld.java b/sources/src/main/java/pr2/bootstrap/hello/HelloWorld.java
new file mode 100644
index 0000000..9caaecd
--- /dev/null
+++ b/sources/src/main/java/pr2/bootstrap/hello/HelloWorld.java
@@ -0,0 +1,22 @@
+package pr2.bootstrap.hello;
+
+/**
+ * Hello World Programm.
+ */
+public class HelloWorld {
+
+ /**
+ * Einstieg ins Programm. Der Name wird aus dem ersten
+ * Kommandozeilenargument genommen.
+ *
+ * @param args Argumente.
+ */
+ public static void main(String[] args) {
+ Greeter g = new Greeter();
+
+ // TODO: Wenn kein Argument auf der Kommandozeile gegeben wurde,
+ // TODO: nehmen Sie als Namen "", andernfalls den
+ // TODO: Namen aus dem ersten Argument.
+ // TODO: greet Methode auf g rufen
+ }
+}