diff --git a/pom.xml b/pom.xml
index b5b6fd8e2b51fd76224531dfc96c3f332219d47a..2f9c3e710d4477723661310f9d7d24e446d8a0e0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,6 +25,19 @@
             <artifactId>javafx-fxml</artifactId>
             <version>${use.javafx.version}</version>
         </dependency>
+        <!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc -->
+        <dependency>
+            <groupId>org.xerial</groupId>
+            <artifactId>sqlite-jdbc</artifactId>
+            <version>3.28.0</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
+        <dependency>
+            <groupId>org.mariadb.jdbc</groupId>
+            <artifactId>mariadb-java-client</artifactId>
+            <version>2.5.2</version>
+        </dependency>
+
     </dependencies>
     <build>
         <plugins>
diff --git a/src/main/java/Enigma/Main.java b/src/main/java/Enigma/Main.java
index 37c9833e5330d953580ce896ef61cfbb30be991e..6adb9204e8eda602b491142bacbe98185c6c0eaa 100644
--- a/src/main/java/Enigma/Main.java
+++ b/src/main/java/Enigma/Main.java
@@ -1,9 +1,14 @@
 package Enigma;
 
+import Enigma.model.DatenbankSqlite;
+import Enigma.model.Morsecode;
+
+import java.sql.SQLException;
+
 public class Main {
 
-        public static void main(String[] args) {
-            App.main(args);
-        }
+    public static void main(String[] args) {
+        App.main(args);
+    }
 
 }
diff --git a/src/main/java/Enigma/model/Codebuch.java b/src/main/java/Enigma/model/Codebuch.java
new file mode 100644
index 0000000000000000000000000000000000000000..c32345ed483066ea6daa01e4d0f9bc88776e49f0
--- /dev/null
+++ b/src/main/java/Enigma/model/Codebuch.java
@@ -0,0 +1,166 @@
+package Enigma.model;
+
+/**
+ * Das Codebuch war eines der essentiel wichtigen Sachen bei der Enigma.
+ * Jeder Enigma gehörte auch ein Codebuch bei, welches notwenidg war um die Nachrichten zu ver/entschlüsseln.
+ * Im Codebuch standen für jeden Tag des Monats die notwendigen Einstellungen welche vorgenommen werden
+ * mussten um die Texte zu ver/entschlüsseln.
+ * Hiernach wurden die Walzen eingesetzt, die Ringe für den Rücksprung der Walzen gesetzt und deren Grundeinstellung
+ * vorgenommen.
+ * Bei der Enigma um welche es hier geht (Enigma I) gab es zusätzlich ein Steckbrett, welches ebenfalls im Codebuch
+ * festgelegt war.
+ *
+ * Dieses Codebuch Objekt enthält die Einstellungen eines Tages, welche mittels Getter und Setter
+ * verarbeitet werden können.
+ *
+ * Zusätzlich gibt es zu Debug Zwecken eine überschriebene toString Funktion welche das Objekt als String zurück
+ * geben kann.
+ */
+public class Codebuch {
+	private int tag;
+	private String[] Walzenlage = new String[3];
+	private String[] Ringstellung = new String[3];
+	private String[] Grundstellung = new String[3];
+	private String[] Steckverbindung = new String[10];
+
+	/**
+	 * Gibt die aktuelle Instanz des Codebuches als String zurück.
+	 * Hierbei werden der Tag die Walzenlagen, Ring/Grundstellung sowie die Steckverbindungen zurück gegeben.
+	 *
+	 * @return String : String des gesamten Objektes
+	 */
+	@Override
+	public String toString() {
+		StringBuilder sb = new StringBuilder();
+		boolean wlLoop = false;
+		boolean rsLoop = false;
+		boolean gsLoop = false;
+		boolean svLoop = false;
+
+		sb.append("Tag: ").append(this.getTag()).append("\n");
+
+		sb.append("Walzenlage: ");
+		for(String wl : this.getWalzenlage()) {
+			sb.append(wl).append(",");
+			wlLoop = true;
+		}
+		if(wlLoop) {
+			sb.setLength(sb.length() - 1);
+		}
+		sb.append("\n");
+
+		sb.append("Ringstellung: ");
+		for(String rs : this.getRingstellung()) {
+			sb.append(rs).append(",");
+			rsLoop = true;
+		}
+		if(rsLoop) {
+			sb.setLength(sb.length() - 1);
+		}
+		sb.append("\n");
+
+		sb.append("Grundstellung: ");
+		for (String gs : this.getGrundstellung()) {
+			sb.append(gs).append(",");
+			gsLoop = true;
+		}
+		if(gsLoop) {
+			sb.setLength(sb.length() - 1);
+		}
+		sb.append("\n");
+
+		sb.append("Steckverbindung: ");
+		for (String s : this.getSteckverbindung()) {
+			if (!s.isEmpty()) {
+				sb.append(s).append(",");
+				svLoop = true;
+			}
+		}
+		if(svLoop) {
+			sb.setLength(sb.length() - 1);
+		}
+		sb.append("\n");
+
+		return sb.toString();
+	}
+
+	/**
+	 * Gibt den Tag dieser Instanz zurück
+	 * @return int : Tag
+	 */
+	public int getTag() {
+		return tag;
+	}
+
+	/**
+	 * Gibt die Walzenlage dieser Instanz zurück
+	 * @return String[] : Walzenlage
+	 */
+	public String[] getWalzenlage() {
+		return Walzenlage;
+	}
+
+	/**
+	 * Gibt die Ringstellung dieser Instanz zurück
+	 * @return String[] : Ringstellung
+	 */
+	public String[] getRingstellung() {
+		return Ringstellung;
+	}
+
+	/**
+	 * Gibt die Grundstellung dieser Instanz zurück
+	 * @return String[] : Grundstellung
+	 */
+	public String[] getGrundstellung() {
+		return Grundstellung;
+	}
+
+	/**
+	 * Gibt die Steckverbindung dieser Instanz zurück
+	 * @return String[] : Steckverbindung
+	 */
+	public String[] getSteckverbindung() {
+		return Steckverbindung;
+	}
+
+	/**
+	 * Setzt den Tag dieser Instanz
+	 * @param tag : int
+	 */
+	public void setTag(int tag) {
+		this.tag = tag;
+	}
+
+	/**
+	 * Setzt die Walzenlage dieser Instanz
+	 * @param walzenlage : String[]
+	 */
+	public void setWalzenlage(String[] walzenlage) {
+		Walzenlage = walzenlage;
+	}
+
+	/**
+	 * Setzt die Ringstellung dieser Instanz
+	 * @param ringstellung : String[]
+	 */
+	public void setRingstellung(String[] ringstellung) {
+		Ringstellung = ringstellung;
+	}
+
+	/**
+	 * Setzt die Grundstellung dieser Instanz
+	 * @param grundstellung : String[]
+	 */
+	public void setGrundstellung(String[] grundstellung) {
+		Grundstellung = grundstellung;
+	}
+
+	/**
+	 * Setzt die Steckverbindung dieser Instanz
+	 * @param steckverbindung : String[]
+	 */
+	public void setSteckverbindung(String[] steckverbindung) {
+		Steckverbindung = steckverbindung;
+	}
+}
diff --git a/src/main/java/Enigma/model/DatenbankSqlite.java b/src/main/java/Enigma/model/DatenbankSqlite.java
new file mode 100644
index 0000000000000000000000000000000000000000..6a203b58e38cca810c87d4ecf18838dd7c8168f1
--- /dev/null
+++ b/src/main/java/Enigma/model/DatenbankSqlite.java
@@ -0,0 +1,64 @@
+package Enigma.model;
+
+import java.sql.*;
+
+/**
+ * Dies ist die SQLite Datenbank Klasse
+ * In der SQLite Datei im Resources Ordner liegt das Codebuch welches benötigt wird um die
+ * Nachrichten mit der Enigma zu ver/entschlüsseln.
+ * Die Datenbank ist statisch und deshalb konnte sie im Resources Ordner hinterlegt werden.
+ * Für jeden Tag des Monats (1-31) ist ein eigener Eintrag enthalten welcher über die Funktion
+ * getCodebuch abgerufen werden kann.
+ * Zurückgegeben wird ein Array welcher in der getCodebuch Funktion genauer dokumentiert ist.
+ */
+public class DatenbankSqlite {
+
+	/**
+	 * Verbindung zur SQLite Datenbank aufbauen.
+	 * Die Datei liegt in den Resources und ändert sich nicht,
+	 * weshalb der Pfad zu derselben fest hinterlegt ist.
+	 *
+	 * @return conn : Connection
+	 */
+	private Connection connect() {
+
+		String url = "jdbc:sqlite::resource:Enigma/codebuch.sqlite";
+		Connection conn = null;
+
+		try {
+			conn = DriverManager.getConnection(url);
+		} catch (SQLException e) {
+			e.printStackTrace();
+		}
+
+		return conn;
+	}
+
+	/**
+	 * Liest das Codebuch aus der SQLite Datenbank aus
+	 * Dieser Funktion muss ein tag als int Wert übergeben werden.
+	 * Anschließend wir eine Verbindung zur SQLite Datenbank aufgebaut und das Codebuch angefragt.
+	 * Dieses wird in ein Object vom Type Codebuch gepackt und zurück gegeben.
+	 *
+	 * @param tag : int : Tag für welchen ein Codebuch benötigt wird.
+	 * @return Codebuch : Codebuch Object mit dem Codebuch des angefragten Tages
+	 */
+	public Codebuch getCodebuch(int tag) throws SQLException {
+		Codebuch cb = new Codebuch();
+
+		Connection conn = this.connect();
+		PreparedStatement pstm = conn.prepareStatement("SELECT * FROM table_codebuch WHERE Tag=? LIMIT 1");
+		pstm.setInt(1, tag);
+		ResultSet rs = pstm.executeQuery();
+
+		while (rs.next()) {
+			cb.setTag(rs.getInt("Tag"));
+			cb.setWalzenlage(rs.getString("Walzenlage").split(","));
+			cb.setRingstellung(rs.getString("Ringstellung").split(","));
+			cb.setGrundstellung(rs.getString("Grundstellung").split(","));
+			cb.setSteckverbindung(rs.getString("Steckverbindung").split(","));
+		}
+
+		return cb;
+	}
+}
diff --git a/src/main/java/Enigma/model/Morsecode.java b/src/main/java/Enigma/model/Morsecode.java
index abb6a774452ea7e3a848da04aca1e62ef23d3aaa..f8c759cf70fd7d17b2024ce91077b5835c46c618 100644
--- a/src/main/java/Enigma/model/Morsecode.java
+++ b/src/main/java/Enigma/model/Morsecode.java
@@ -1,51 +1,141 @@
 package Enigma.model;
 
-import java.util.TreeMap;
+import java.util.*;
+import java.util.Map.Entry;
 
+/**
+ * Diese Klasse definiert die Zugehörigkeit zwischen den Buchstaben A-Z und dem zugehörigen Morsecode.
+ * Die Funktionen sollen Texte von und zu Morsecode konvertieren.
+ */
 public class Morsecode {
-	TreeMap<String, String> codeMap = new TreeMap<>();
+	// Anlegen der codeMap als TreeMap
+	private TreeMap<String, String> codeMap = new TreeMap<>();
 
 	/**
-	 * Im Konstruktor werden alle Notwendigen Zeichen und deren zugehöriger Codes, der Treemap hinzugefügt.
+	 * Im Konstruktor werden alle verfügbaren Buchstaben (A-Z) und deren zugehörigen
+	 * Morsecodes, der codeMap hinzugefügt.
 	 */
 	public Morsecode() {
-		codeMap.put("A", "10110");
-		codeMap.put("B", "110101010");
-		codeMap.put("C", "1101011010");
-		codeMap.put("D", "1101010");
-		codeMap.put("E", "10");
-		codeMap.put("F", "101011010");
-		codeMap.put("G", "11011010");
-		codeMap.put("H", "10101010");
-		codeMap.put("I", "1010");
-		codeMap.put("J", "10110110110");
-		codeMap.put("K", "11010110");
-		codeMap.put("L", "101101010");
-		codeMap.put("M", "110110");
-		codeMap.put("N", "11010");
-		codeMap.put("O", "110110110");
-		codeMap.put("P", "1011011010");
-		codeMap.put("Q", "11011010110");
-		codeMap.put("R", "1011010");
-		codeMap.put("S", "101010");
-		codeMap.put("T", "110");
-		codeMap.put("U", "1010110");
-		codeMap.put("V", "101010110");
-		codeMap.put("W", "10110110");
-		codeMap.put("X", "1101010110");
-		codeMap.put("Y", "11010110110");
-		codeMap.put("Z", "1101101010");
-		// KA - Spruchanfang
-		codeMap.put("KA", "1101011010110");
-		// AR - Spruchende
-		codeMap.put("AR", "101101011010");
-		// VE - Verstanden
-		codeMap.put("VE", "10101011010");
-		// SK - Verkehrsende
-		codeMap.put("SK", "10101011010110");
+		this.codeMap.put("A", ".-");
+		this.codeMap.put("B", "-...");
+		this.codeMap.put("C", "-.-.");
+		this.codeMap.put("D", "-..");
+		this.codeMap.put("E", ".");
+		this.codeMap.put("F", "..-.");
+		this.codeMap.put("G", "--.");
+		this.codeMap.put("H", "....");
+		this.codeMap.put("I", "..");
+		this.codeMap.put("J", ".---");
+		this.codeMap.put("K", "-.-");
+		this.codeMap.put("L", ".-..");
+		this.codeMap.put("M", "--");
+		this.codeMap.put("N", "-.");
+		this.codeMap.put("O", "---");
+		this.codeMap.put("P", ".--.");
+		this.codeMap.put("Q", "--.-");
+		this.codeMap.put("R", ".-.");
+		this.codeMap.put("S", "...");
+		this.codeMap.put("T", "-");
+		this.codeMap.put("U", "..-");
+		this.codeMap.put("V", "...-");
+		this.codeMap.put("W", ".--");
+		this.codeMap.put("X", "-..-");
+		this.codeMap.put("Y", "-.--");
+		this.codeMap.put("Z", "--..");
 	}
 
-	public void getCode(char sign) {
+	/**
+	 * Diese Funktion überprüft ob das übergebene Buchstabe in der codeMap enthalten ist.
+	 * Wenn es enthalten ist, wird der zugehörige Morsecode zurück gegeben, ansonsten null
+	 *
+	 * @param buchstabe : char : Zu übersetzender Buchstabe
+	 * @return : String : Das zugehöriger Morsecode aus der codeMap
+	 */
+	private String getMorsecode(char buchstabe) {
+		// Testen ob das Char in der codeMap enthalten ist. Wenn ja, raussuchen und zurück geben
+		return this.codeMap.getOrDefault(String.valueOf(buchstabe).toUpperCase(), null);
+	}
+
+	/**
+	 * Der übergebene String wird in seine einzelnen Zeichen (char) zerlegt und an die Funktion getMorsecode
+	 * übergeben und der zugehörige Morsecode raus gesucht.
+	 * Mittels eines StringBuilders werden die Ergebnisse zu einem Rückgabe String zusammen gesetzt.
+	 * Wenn kein zugehöriger Code in der codeMap gefunden wurde, wird das Zeichen ignoriert da es bei der
+	 * Enigma nicht vorhanden war.
+	 *
+	 * @param input : String : Zu konventierender Text
+	 * @return String : Die in Morsecode konvertierte Text
+	 */
+	public String convertBuchstabeToMorsecode(String input) {
+		StringBuilder sb = new StringBuilder();
+		String morsecode;
+
+		// Durch alle char im übergebenen String loopen
+		for(int i = 0; i < input.length(); i++) {
+
+			// Wenn der char in der codeMap enthalten ist, an den Rückgabe String anheften, ansonsten nichts ignorieren.
+			morsecode = this.getMorsecode(input.charAt(i));
+			if(morsecode != null) {
+				sb.append(morsecode).append(' ');
+			}
+		}
+
+		// Gibt den konvertierten String zurück
+		return sb.toString();
+	}
+
+	/**
+	 * Diese Funktion überprüft ob der übergebene Morsecode in der codeMap enthalten ist.
+	 * Wenn er enthalten ist, wird der zugehörige Buchstabe zurück gegeben, ansonsten null
+	 *
+	 * @param morsecode : String : Der zu übersetzende Morsecode
+	 * @return : String : Das zugehöriger Buchstaben aus der this.codeMap
+	 */
+	private String getBuchstabe(String morsecode) {
+		// Initialisieren des Rückgabe Strings
+		// TODO: Darf bei der Initialisierung gleich einen Wert setzten lauf JAVA Konventionen?
+		String result = null;
+
+		// Loopt duch die Codemap und erstellt daraus ein Set
+		for(Entry<String, String> entry : this.codeMap.entrySet()) {
+			// Wenn Value dem Morsecode entspricht, haben wir unseren Buchstaben gefunden und setzen ihn als Result
+			if(entry.getValue().equals(morsecode)) {
+				result = entry.getKey();
+			}
+		}
+
+		return result;
+	}
+
+	/**
+	 * Der übergebene String wird in einen String Array zerlegt. Als Trennzeichen wird das Leerzeichen genutzt.
+	 * Anschließend wird der Array durchlaufen und die Elemente an die Funktion getBuchstabe übergeben um den
+	 * zugehörigen Buchstaben zu erhalten.
+	 * Mittels eines StringBuilders werden die Ergebnisse zu einem Rückgabe String zusammen gesetzt.
+	 * Wenn kein zugehöriger Buchstabe in der codeMap gefunden wurde, wird das Zeichen ignoriert da es bei der
+	 * Enigma nicht vorhanden war.
+	 *
+	 * @param input : String : Zu konventierender Morsecode
+	 * @return String : Der in Text konvertierte Morsecode
+	 */
+	public String convertMorsecodeToBuchstabe(String input) {
+		StringBuilder sb = new StringBuilder();
+		String buchstabe;
+
+		String[] morsecodes = input.split(" ");
+
+
+		// Durch alle char im übergebenen String loopen
+		for(String morsecode : morsecodes) {
+
+			// Wenn der char in der codeMap enthalten ist, an den Rückgabe String anheften, ansonsten nichts ignorieren.
+			buchstabe = this.getBuchstabe(morsecode);
+			if(buchstabe != null) {
+				sb.append(buchstabe).append(' ');
+			}
+		}
 
+		// Gibt den konvertierten String zurück
+		return sb.toString();
 	}
 }
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
deleted file mode 100644
index c9e95ca6609f106a0b33fb601d9ccb92414d4f49..0000000000000000000000000000000000000000
--- a/src/main/java/module-info.java
+++ /dev/null
@@ -1,7 +0,0 @@
-module Projektarbeit {
-    requires javafx.controls;
-    requires javafx.fxml;
-
-    opens Enigma to javafx.fxml;
-    exports Enigma;
-}
\ No newline at end of file