diff --git a/src/main/java/projekt/enigma/model/Codierer.java b/src/main/java/projekt/enigma/model/Codierer.java
index 724cb462b9b6034bd2544aed4bd3446ebb7b1d0d..58b791a6698e8a0c395d19ba6b622850920a7a93 100644
--- a/src/main/java/projekt/enigma/model/Codierer.java
+++ b/src/main/java/projekt/enigma/model/Codierer.java
@@ -14,463 +14,465 @@ import java.util.Random;
  */
 public class Codierer {
 
-	/**
-	 * Der Klartext Spruchschlüssel zur codierung der Nachricht
-	 */
-	private String spruchschluessel;
-	/**
-	 * Der Spruchschlüssel, mit den Tageswerten aus dem Codebuch, codiert
-	 */
-	private String spruchschluesselCodiert;
-	/**
-	 * Die Kenngruppe für die versendeten Nachrichten gedacht sind. Diese ist relevant für den Webservice (Funkraum)
-	 */
-	private String kenngruppe;
-	/**
-	 * Die Nachricht, welche der Benutzer eingibt, wird als String nachricht gespeichert
-	 * und im laufe der Benutzung ergänzt
-	 */
-	private String nachricht;
-	/**
-	 * Das Hardware Objekt. Hier werden alle Hardware relevanten Baugruppen gespeichert und verarbeitet.
-	 */
-	private Hardware hardware;
-	/**
-	 * Im Codebuch sind die Tageswerte zu finden. Über dieses Objekt kann darauf zugegriffen werden.
-	 */
-	private Codebuch codebuch;
-	/**
-	 * Der aktuelle Tagesschluessel. Dieser wird aus dem Codebuch ausgelesen und hier hinterlegt.
-	 */
-	private String tagesSchluessel;
-
-	/**
-	 * Der Konstruktor des Codierers
-	 * Hier werden die globalen Variablen auf ihre Standart Werte gesetzt sowie die Objekte Initialisiert.
-	 */
-	public Codierer() {
-
-		this.nachricht = "";
-		this.spruchschluessel = "";
-		this.spruchschluesselCodiert = "";
-		this.kenngruppe = "";
-		this.codebuch = new Codebuch();
-		this.codebuch.fetchTagesschluessel();
-	}
-
-	/**
-	 * Hier lesen wir den heutigen Eintrag aus dem Codebuch aus und erstellen ein Codebuch Objekt
-	 * Nach dem Codebuch werden dann die Ringe auf die Walzen gesteckt und die Walzen anschließend
-	 * in die Hardware gebaut.
-	 * <br>
-	 * Ein Reflektor wird definiert, jedoch keine Werte zugewisen, da wir nur einen besitzen und
-	 * deshalb alle Einstellungen hierfür Statisch im Reflektor definiert haben.
-	 * <br>
-	 * Das Steck wird ebenfalls definiert und die notwendigen Kabel eingesteckt laut dem heutigen
-	 * Codebuch Eintrag.
-	 */
-	private void initialisiereHardware() {
-
-		// Das Steckbrett initialisieren
-		Steckbrett sb = new Steckbrett();
-		char[][] verbinder = this.codebuch.getSteckverbindung();
-
-		// Für jedes Kabel eine Verbindung auf dem Steckbrett setzen
-		for (char[] kabel : verbinder) {
-			sb.setzeVertauschung(kabel[0], kabel[1]);
-		}
-
-		// Die Hardware aus dem Koffer holen (initialisieren)
-		this.hardware = new Hardware();
-
-		// Den Ring an der Walze anbringen und die Walze dann in die Hardware einsetzen
-		this.hardware.setWalzen(0, this.codebuch.getWalzenlage()[0], this.codebuch.getRingstellung()[0]);
-		this.hardware.setWalzen(1, this.codebuch.getWalzenlage()[1], this.codebuch.getRingstellung()[1]);
-		this.hardware.setWalzen(2, this.codebuch.getWalzenlage()[2], this.codebuch.getRingstellung()[2]);
-
-		// Der Hardware das gesetzte Steckbrett zuweisen
-		this.hardware.setSteckbrett(sb);
-
-		// Ein Reflektor Objekt erstellen und der Hardware bekannt geben
-		this.hardware.setReflektor(new Reflektor());
-
-	}
-
-	/**
-	 * Hier wird ein neuer Spruchschlüssel generiert.
-	 * <p>
-	 * Mit diesem werden die Walzen auf eine neue Startposition gestellt und dem Kopf, mit dem
-	 * Tagesschlüssel codiert, hinzugefügt.
-	 * <br>
-	 * Hierfür wird mittels der Funktion "randomBuchstabe" ein zufälliger Buchstabe generiert,
-	 * und geschaut ob dieser bereits in der globalen Variable (this.spruchschluessel) vorhanden ist.
-	 * Wenn nicht, wird der Buchstabe dem Spruchschlüssel hinzugefügt.
-	 * <br>
-	 * Dies wir nun so lange gemacht bis der Spruchschlüssel eine länge von drei Zeichen hat.
-	 */
-	public void generateSpruchschluessel() {
-
-		String klartext = "";
-
-		while (klartext.length() < 3) {
-			String temp = this.randomBuchstabe();
-			if (!klartext.contains(temp)) {
-				klartext += temp;
-			}
-		}
-
-		this.spruchschluessel = klartext;
-		this.spruchschluesselCodiert = this.codiere(klartext + klartext, false);
-
-		// Walzen auf den Spruchschlüssel stellen
-		this.hardware.setzePosition(0, this.spruchschluessel.charAt(0));
-		this.hardware.setzePosition(1, this.spruchschluessel.charAt(1));
-		this.hardware.setzePosition(2, this.spruchschluessel.charAt(2));
-
-		// Die Kenngruppe codieren und in der Nachricht speichern
-		this.codiere(this.kenngruppe, true);
-	}
-
-	/**
-	 * Der Spruchschlüssel wird, zur internen Verwendung, auch im Klartext gespeichert.
-	 * Wir brauchen diesen dann zum codieren der eigentlichen Nachricht.
-	 *
-	 * @return String : Der klartext Spruchschlüssel
-	 */
-	public String getSpruchschluessel() {
-		return this.spruchschluessel;
-	}
-
-	/**
-	 * Erstellen des Nachrichten Kopfes.
-	 * Hierfür wird die aktuelle Uhrzeit ausgelesen, die Länge der Nachricht sowie der, mit den
-	 * Tagescodes codierte, Spruchschlüssel.
-	 */
-	private String generateKopf() {
-		Calendar cal = Calendar.getInstance();
-
-		// Uhrzeit an den Kopf hängen
-		return String.format("%02d%02d", cal.get(Calendar.HOUR), cal.get(Calendar.MINUTE)) + " " +
-
-				// Zeichen Anzahl der Nachricht
-				this.nachricht.length() + " " +
-
-				// Spruchschlüssel anhängen
-				this.spruchschluesselCodiert.substring(0, 3) + " " + this.spruchschluesselCodiert.substring(3, 6) + " ";
-	}
-
-	/**
-	 * Einen zufälligen Buchstaben aus dem Alphabet generieren.
-	 * In der Funktion gibt es den String Alphabet, in welchem alle zulässigen Zeichen eingetragen sind.
-	 * Aus diesem String wird nun zufällig ein Zeichen ausgewählt und zurück gegeben.
-	 *
-	 * @return String : ein zufällig generierter Buchstabe
-	 */
-	private String randomBuchstabe() {
-		return String.valueOf((char) ('A' + new Random().nextInt(26)));
-	}
-
-	/**
-	 * Befehl die Nachricht an den Funker zu übergeben
-	 *
-	 * @throws IOException   : Die Antwort konnte nicht gelesen werden
-	 * @throws HttpException : Die Nachricht konnte nicht abgesendet werden
-	 */
-	public void sendeNachricht() throws IOException, HttpException {
-		String kopf = this.generateKopf();
-		new Funkraum().sendeFunkspruch(new Morsecode().convertBuchstabeToMorsecode(kopf + this.nachricht), this.kenngruppe);
-		this.nachricht = "";
-	}
-
-	/**
-	 * Gibt die letzte empfangene Nachricht zurück
-	 * <br>
-	 * String[0] Tag wann die Nachricht gesendet wurde
-	 * String[1] = Die verschlüsselte Nachricht
-	 * String[2] = Nachricht im Klartext
-	 */
-	public String[] empfangeNachricht() {
-
-		this.nachricht = "";
-		Morsecode mc = new Morsecode();
-		String[] nachricht = new String[4];
-		String[] codierteNachricht = new Funkraum().empfangeFunkspruch(this.kenngruppe);
-
-		if (codierteNachricht.length > 1 && codierteNachricht[1].split(" ").length > 3) {
-			nachricht[0] = codierteNachricht[0];
-			nachricht[1] = mc.convertMorsecodeToBuchstabe(codierteNachricht[1]);
-			nachricht[2] = this.decodiere(nachricht[1], Integer.parseInt(nachricht[0]));
-			StringBuilder sb = new StringBuilder();
-
-			sb.append(nachricht[1], 0, 16);
-			for (int i = 17; i <= nachricht[1].length(); ) {
-				if ((i + 5) < nachricht[1].length()) {
-					sb.append(nachricht[1], i, i + 5).append(" ");
-					i += 5;
-				} else {
-					sb.append(nachricht[1].substring(i));
-					break;
-				}
-			}
-			nachricht[1] = sb.toString();
-		} else {
-			nachricht[0] = "";
-			nachricht[1] = "";
-			nachricht[2] = "Es liegen keine neuen Nachrichten im Funkraum für Sie vor.";
-		}
-
-		return nachricht;
-	}
-
-	/**
-	 * Liest die Kenngruppe aus welche die Maschine gerade besitzt. Früher war dies eine eindeutige Nummer
-	 * die einer Einheit zugewiesen war. Wir hinterlegen hier einen Benutzernamen.
-	 *
-	 * @return String : Kenngruppe
-	 */
-	public String getKenngruppe() {
-		return kenngruppe;
-	}
-
-	/**
-	 * Setzt die Kenngruppe welche die Enigma gerade benutzt.
-	 *
-	 * @param kenngruppe : String : Kenngruppe welche die Enigma gerade benutzt
-	 */
-	public void setKenngruppe(String kenngruppe) {
-
-		this.kenngruppe = kenngruppe;
-		this.initialisiereHardware();
-
-	}
-
-	/**
-	 * Gibt die bisher erstellte Nachricht zurück
-	 *
-	 * @return String : Erstellte Nachricht
-	 */
-	public String getNachricht() {
-		return nachricht;
-	}
-
-	/**
-	 * Gibt die aktuellen Buchstaben auf den Walzen zurück
-	 *
-	 * @return char[] : Walzen Array mit der aktuellen Position
-	 */
-	public char[] getWalzen() {
-		char[] walzen = new char[3];
-		walzen[0] = this.hardware.getWalzen()[0].getPosition();
-		walzen[1] = this.hardware.getWalzen()[1].getPosition();
-		walzen[2] = this.hardware.getWalzen()[2].getPosition();
-
-		return walzen;
-	}
-
-	/**
-	 * Hier wird ein einzelner Buchstabe verschlüsselt.
-	 * Man muss hier ebenfalls mitgeben ob der codierte String in Codierer.nachricht gespeichert werden soll oder nicht.
-	 * In der Regel ist dies der Fall.
-	 *
-	 * @param buchstabe : char : Der zu codierende Buchstabe
-	 * @param save      : boolean : Nachricht speichern oder nicht
-	 * @return char     : Der codierte Buchstabe
-	 */
-	public char codiere(char buchstabe, boolean save) {
-		char codiert = this.hardware.codiere(buchstabe);
-		if (save) {
-			this.nachricht += codiert;
-		}
-
-		return codiert;
-	}
-
-	/**
-	 * Codiert den Übergebenen String.
-	 * Man muss hier ebenfalls mitgeben ob der codierte String in Codierer.nachricht gespeichert werden soll oder nicht.
-	 * In der Regel ist dies der Fall.
-	 *
-	 * @param klartext : String : Der zu codierende Text
-	 * @param save     : boolean : Nachricht speichern oder nicht
-	 * @return String : Der codierte Text zusätzlich als Rückgabe
-	 */
-	public String codiere(String klartext, boolean save) {
-
-		StringBuilder sb = new StringBuilder();
-
-		for (char buchstabe : klartext.toCharArray()) {
-			sb.append(this.codiere(buchstabe, save));
-		}
-
-		return sb.toString();
-	}
-
-	/**
-	 * Diese Funktion erwartet als (codierteNachricht) eine korrekte Enigma Nachricht.
-	 * Ihr muss auch der Tag der codierung mitgegeben werden. Dieser weiß dein Funker im Funkraum.
-	 * In der Regel ist dies der Tag des Nachrichten empfangs.
-	 *
-	 * @param codierteNachricht : String : Enigma codierte Nachricht
-	 * @param tag               : int : Tag der Nachricht
-	 * @return String : decodierte Nachricht
-	 */
-	private String decodiere(String codierteNachricht, int tag) {
-
-		// Hardware reseten und Tageseinstellungen aus dem Codebuch laden
-		this.initialisiereHardware();
-		this.codebuch.fetchTagesschluessel(tag);
-
-		String[] nachricht = codierteNachricht.split(" ");
-		StringBuilder sb = new StringBuilder();
-
-		// Uhrzeit
-		sb.append(nachricht[0]).append(" ");
-
-		// Zeichen Anzahl der Nachricht
-		sb.append(nachricht[1]).append(" ");
-
-		// Spruchschlüssel
-		String spruchschluessel = this.decodiereString(nachricht[2]);
-		sb.append(spruchschluessel).append(" ");
-		sb.append(this.decodiereString(nachricht[3])).append(" ");
-
-		// Walzen neu einstellen mit dem Spruchschlüssel
-		this.hardware.setzePosition(0, spruchschluessel.charAt(0));
-		this.hardware.setzePosition(1, spruchschluessel.charAt(1));
-		this.hardware.setzePosition(2, spruchschluessel.charAt(2));
-
-		// Nachricht decodieren
-		sb.append(this.decodiereString(nachricht[4]));
-
-		return sb.toString();
-	}
-
-	/**
-	 * Zerlegt den übergebenen String in einen char Array und decodiert jedes Zeichen.
-	 * Der String wird dann decodiert zurück gegeben.
-	 *
-	 * @param nachricht : String : Der zu decodierende Text
-	 * @return String : Der decodierte Text
-	 */
-	private String decodiereString(String nachricht) {
-
-		StringBuilder sb = new StringBuilder();
-
-		for (char buchstabe : nachricht.toCharArray()) {
-			if (buchstabe > 0) {
-				sb.append(this.hardware.codiere(buchstabe));
-			}
-		}
-
-		return sb.toString();
-	}
-
-	/**
-	 * Setzt die Enigma auf die Einstellungen des aktuellen Tages, aus dem Codebuch zurück.
-	 */
-	public void resetHardware() {
-		this.initialisiereHardware();
-	}
-
-	/**
-	 * Setzt den anzuzeigenden Buchstaben (buchstabe) auf der Walze (wlazenPosition)
-	 * TODO: Wenn die Walzen, Notches, Kabel, etc. verändert werden, muss die bisherige Nachricht (this.nachricht) gelöscht werden.
-	 *
-	 * @param walzenPosition : int : Nummer der Walze
-	 * @param buchstabe      : char : Buchstabe der zugewiesen soll
-	 */
-	public void setWalze(int walzenPosition, char buchstabe) {
-		this.hardware.setzePosition(walzenPosition, buchstabe);
-	}
-
-	/**
-	 * Setzt den Ring auf der Walze auf einen neuen Umstprungwert.
-	 *
-	 * @param walzenPosition : int : Walze auf die der Ring gesteckt wird
-	 * @param umsprungPunkt  : int : Buchstabe auf dem der Notch sitzt
-	 */
-	public void setRing(int walzenPosition, int umsprungPunkt) {
-		this.hardware.setzeRing(walzenPosition, umsprungPunkt);
-	}
-
-	/**
-	 * Setzt die Walze (walzeNr) in die Position (walzenPosition) der Enigma ein.
-	 * Mit (ringstellung) gibt man die Position des Umsprungpunktes an.
-	 *
-	 * @param walzenPosition : int : Position der Walze in der Enigma (1-2-3)
-	 * @param walzeNr        : int : Nummer der Walze die eingesetzt wird
-	 * @param ringstellung   : int : Stellung des Ringes
-	 */
-	public void setWalzeNr(int walzenPosition, int walzeNr, int ringstellung) {
-		this.hardware.setzeWalzenNr(walzenPosition, walzeNr, ringstellung);
-	}
-
-	/**
-	 * Setzt das Kabel in beide Ports ein und fügt es dem Steckbrett Array hinzu.
-	 *
-	 * @param port       : int : Kabel Nummer welches am Steckbrett eingesteckt wird
-	 * @param verbindung : String : Verbindung welche die vertauschten Buchstaben angibt
-	 * @return boolean : Wenn true, darf das Kabel gesteckt werden, wenn nicht, steckt da bereits schon eines
-	 */
-	public boolean setSteckbrett(int port, String verbindung) {
-		return this.hardware.getSteckbrett().setzeVertauschung(port, verbindung.charAt(0), verbindung.charAt(1));
-	}
-
-	/**
-	 * Prüft ob der Port auf den das Kabel gesteckt werden soll, noch frei ist.
-	 * <p>
-	 * setSteckbrett ausführen mit beiden Buchstaben als String
-	 *
-	 * @param buchstabe : char : Der zuletzt eingegebene Buchstabe
-	 * @return boolean : Wenn der Buchstabe nicht vorhanden ist, wird true zurückgegeben, ansonsten false
-	 */
-	public boolean pruefeSteckbrettPort(char buchstabe) {
-		return this.hardware.getSteckbrett().ueberpruefeVertauschungen(buchstabe);
-	}
-
-	/**
-	 * Ließt aus der empfangenen Nachricht den Spruchschlüssel aus und gibt ihn zurück.
-	 *
-	 * @param empfangeneNachricht : String : Die empfangene Nachricht als String
-	 * @return String : Der Spruchschlüssel mit welcher die Nachricht codiert wurde.
-	 */
-	public String empfangenerSpruchschluessel(String empfangeneNachricht) {
-		String[] nachricht = empfangeneNachricht.split(" ");
-
-		return nachricht[2];
-	}
-
-	/**
-	 * Gibt die Ringstellungen aus dem Codebuch zurück
-	 *
-	 * @return int[] : Array mit den Ringstellungen der drei eingesetzten Walzen
-	 */
-	public int[] fetchRingstellung() {
-		return this.codebuch.getRingstellung();
-	}
-
-	/**
-	 * Gibt die Walzennummer aus dem Codebuch zurück
-	 *
-	 * @return int[] : Array mit den Nummern der drei eingesetzten Walzen
-	 */
-	public int[] getchWalzenNr() {
-		return this.codebuch.getWalzenlage();
-	}
-
-	/**
-	 * Gibt die Steckverbindungen aus dem Codebuch zurück
-	 *
-	 * @return char[][] : Array mit den gesteckten Verbindungen im Steckbrett
-	 */
-	public char[][] getSteckverbindungen() {
-		return this.codebuch.getSteckverbindung();
-	}
-
-	/**
-	 * Löscht das letzte Zeichen aus der Nachricht und dreht die Walzen eine Position zurück.
-	 */
-	public void letztesZeichenLoeschen() {
-		this.hardware.dreheWalzen(-1);
-	}
+    /**
+     * Der Klartext Spruchschlüssel zur codierung der Nachricht
+     */
+    private String spruchschluessel;
+    /**
+     * Der Spruchschlüssel, mit den Tageswerten aus dem Codebuch, codiert
+     */
+    private String spruchschluesselCodiert;
+    /**
+     * Die Kenngruppe für die versendeten Nachrichten gedacht sind. Diese ist relevant für den Webservice (Funkraum)
+     */
+    private String kenngruppe;
+    /**
+     * Die Nachricht, welche der Benutzer eingibt, wird als String nachricht gespeichert
+     * und im laufe der Benutzung ergänzt
+     */
+    private String nachricht;
+    /**
+     * Das Hardware Objekt. Hier werden alle Hardware relevanten Baugruppen gespeichert und verarbeitet.
+     */
+    private Hardware hardware;
+    /**
+     * Im Codebuch sind die Tageswerte zu finden. Über dieses Objekt kann darauf zugegriffen werden.
+     */
+    private Codebuch codebuch;
+    /**
+     * Der aktuelle Tagesschluessel. Dieser wird aus dem Codebuch ausgelesen und hier hinterlegt.
+     */
+    private String tagesSchluessel;
+
+    /**
+     * Der Konstruktor des Codierers
+     * Hier werden die globalen Variablen auf ihre Standart Werte gesetzt sowie die Objekte Initialisiert.
+     */
+    public Codierer() {
+
+        this.nachricht = "";
+        this.spruchschluessel = "";
+        this.spruchschluesselCodiert = "";
+        this.kenngruppe = "";
+        this.codebuch = new Codebuch();
+        this.codebuch.fetchTagesschluessel();
+    }
+
+    /**
+     * Hier lesen wir den heutigen Eintrag aus dem Codebuch aus und erstellen ein Codebuch Objekt
+     * Nach dem Codebuch werden dann die Ringe auf die Walzen gesteckt und die Walzen anschließend
+     * in die Hardware gebaut.
+     * <br>
+     * Ein Reflektor wird definiert, jedoch keine Werte zugewisen, da wir nur einen besitzen und
+     * deshalb alle Einstellungen hierfür Statisch im Reflektor definiert haben.
+     * <br>
+     * Das Steck wird ebenfalls definiert und die notwendigen Kabel eingesteckt laut dem heutigen
+     * Codebuch Eintrag.
+     */
+    private void initialisiereHardware() {
+
+        // Das Steckbrett initialisieren
+        Steckbrett sb = new Steckbrett();
+        char[][] verbinder = this.codebuch.getSteckverbindung();
+
+        // Für jedes Kabel eine Verbindung auf dem Steckbrett setzen
+        for (char[] kabel : verbinder) {
+            sb.setzeVertauschung(kabel[0], kabel[1]);
+        }
+
+        // Die Hardware aus dem Koffer holen (initialisieren)
+        this.hardware = new Hardware();
+
+        // Den Ring an der Walze anbringen und die Walze dann in die Hardware einsetzen
+        this.hardware.setWalzen(0, this.codebuch.getWalzenlage()[0], this.codebuch.getRingstellung()[0]);
+        this.hardware.setWalzen(1, this.codebuch.getWalzenlage()[1], this.codebuch.getRingstellung()[1]);
+        this.hardware.setWalzen(2, this.codebuch.getWalzenlage()[2], this.codebuch.getRingstellung()[2]);
+
+        // Der Hardware das gesetzte Steckbrett zuweisen
+        this.hardware.setSteckbrett(sb);
+
+        // Ein Reflektor Objekt erstellen und der Hardware bekannt geben
+        this.hardware.setReflektor(new Reflektor());
+
+    }
+
+    /**
+     * Hier wird ein neuer Spruchschlüssel generiert.
+     * <p>
+     * Mit diesem werden die Walzen auf eine neue Startposition gestellt und dem Kopf, mit dem
+     * Tagesschlüssel codiert, hinzugefügt.
+     * <br>
+     * Hierfür wird mittels der Funktion "randomBuchstabe" ein zufälliger Buchstabe generiert,
+     * und geschaut ob dieser bereits in der globalen Variable (this.spruchschluessel) vorhanden ist.
+     * Wenn nicht, wird der Buchstabe dem Spruchschlüssel hinzugefügt.
+     * <br>
+     * Dies wir nun so lange gemacht bis der Spruchschlüssel eine länge von drei Zeichen hat.
+     */
+    public void generateSpruchschluessel() {
+
+        String klartext = "";
+
+        while (klartext.length() < 3) {
+            String temp = this.randomBuchstabe();
+            if (!klartext.contains(temp)) {
+                klartext += temp;
+            }
+        }
+
+        this.spruchschluessel = klartext;
+        this.spruchschluesselCodiert = this.codiere(klartext + klartext, false);
+
+        // Walzen auf den Spruchschlüssel stellen
+        this.hardware.setzePosition(0, this.spruchschluessel.charAt(0));
+        this.hardware.setzePosition(1, this.spruchschluessel.charAt(1));
+        this.hardware.setzePosition(2, this.spruchschluessel.charAt(2));
+
+        // Die Kenngruppe codieren und in der Nachricht speichern
+        this.codiere(this.kenngruppe, true);
+    }
+
+    /**
+     * Der Spruchschlüssel wird, zur internen Verwendung, auch im Klartext gespeichert.
+     * Wir brauchen diesen dann zum codieren der eigentlichen Nachricht.
+     *
+     * @return String : Der klartext Spruchschlüssel
+     */
+    public String getSpruchschluessel() {
+        return this.spruchschluessel;
+    }
+
+    /**
+     * Erstellen des Nachrichten Kopfes.
+     * Hierfür wird die aktuelle Uhrzeit ausgelesen, die Länge der Nachricht sowie der, mit den
+     * Tagescodes codierte, Spruchschlüssel.
+     */
+    private String generateKopf() {
+        Calendar cal = Calendar.getInstance();
+
+        // Uhrzeit an den Kopf hängen
+        return String.format("%02d%02d", cal.get(Calendar.HOUR), cal.get(Calendar.MINUTE)) + " " +
+
+                // Zeichen Anzahl der Nachricht
+                this.nachricht.length() + " " +
+
+                // Spruchschlüssel anhängen
+                this.spruchschluesselCodiert.substring(0, 3) + " " + this.spruchschluesselCodiert.substring(3, 6) + " ";
+    }
+
+    /**
+     * Einen zufälligen Buchstaben aus dem Alphabet generieren.
+     * In der Funktion gibt es den String Alphabet, in welchem alle zulässigen Zeichen eingetragen sind.
+     * Aus diesem String wird nun zufällig ein Zeichen ausgewählt und zurück gegeben.
+     *
+     * @return String : ein zufällig generierter Buchstabe
+     */
+    private String randomBuchstabe() {
+        return String.valueOf((char) ('A' + new Random().nextInt(26)));
+    }
+
+    /**
+     * Befehl die Nachricht an den Funker zu übergeben
+     *
+     * @throws IOException   : Die Antwort konnte nicht gelesen werden
+     * @throws HttpException : Die Nachricht konnte nicht abgesendet werden
+     */
+    public void sendeNachricht() throws IOException, HttpException {
+        String kopf = this.generateKopf();
+        new Funkraum().sendeFunkspruch(new Morsecode().convertBuchstabeToMorsecode(kopf + this.nachricht), this.kenngruppe);
+        this.nachricht = "";
+    }
+
+    /**
+     * Gibt die letzte empfangene Nachricht zurück
+     * <br>
+     * String[0] Tag wann die Nachricht gesendet wurde
+     * String[1] = Die verschlüsselte Nachricht
+     * String[2] = Nachricht im Klartext
+     */
+    public String[] empfangeNachricht() {
+
+        this.nachricht = "";
+        Morsecode mc = new Morsecode();
+        String[] nachricht = new String[4];
+        String[] codierteNachricht = new Funkraum().empfangeFunkspruch(this.kenngruppe);
+
+        if (codierteNachricht.length > 1 && codierteNachricht[1].split(" ").length > 3) {
+            nachricht[0] = codierteNachricht[0];
+            nachricht[1] = mc.convertMorsecodeToBuchstabe(codierteNachricht[1]);
+            nachricht[2] = this.decodiere(nachricht[1], Integer.parseInt(nachricht[0]));
+            StringBuilder sb = new StringBuilder();
+
+            sb.append(nachricht[1], 0, 16);
+            for (int i = 17; i <= nachricht[1].length(); ) {
+                if ((i + 5) < nachricht[1].length()) {
+                    sb.append(nachricht[1], i, i + 5).append(" ");
+                    i += 5;
+                } else {
+                    sb.append(nachricht[1].substring(i));
+                    break;
+                }
+            }
+            nachricht[1] = sb.toString();
+        } else {
+            nachricht[0] = "";
+            nachricht[1] = "";
+            nachricht[2] = "Es liegen keine neuen Nachrichten im Funkraum für Sie vor.";
+        }
+
+        return nachricht;
+    }
+
+    /**
+     * Liest die Kenngruppe aus welche die Maschine gerade besitzt. Früher war dies eine eindeutige Nummer
+     * die einer Einheit zugewiesen war. Wir hinterlegen hier einen Benutzernamen.
+     *
+     * @return String : Kenngruppe
+     */
+    public String getKenngruppe() {
+        return kenngruppe;
+    }
+
+    /**
+     * Setzt die Kenngruppe welche die Enigma gerade benutzt.
+     *
+     * @param kenngruppe : String : Kenngruppe welche die Enigma gerade benutzt
+     */
+    public void setKenngruppe(String kenngruppe) {
+
+        this.kenngruppe = kenngruppe;
+        this.initialisiereHardware();
+
+    }
+
+    /**
+     * Gibt die bisher erstellte Nachricht zurück
+     *
+     * @return String : Erstellte Nachricht
+     */
+    public String getNachricht() {
+        return nachricht;
+    }
+
+    /**
+     * Gibt die aktuellen Buchstaben auf den Walzen zurück
+     *
+     * @return char[] : Walzen Array mit der aktuellen Position
+     */
+    public char[] getWalzen() {
+        char[] walzen = new char[3];
+        walzen[0] = this.hardware.getWalzen()[0].getPosition();
+        walzen[1] = this.hardware.getWalzen()[1].getPosition();
+        walzen[2] = this.hardware.getWalzen()[2].getPosition();
+
+        return walzen;
+    }
+
+    /**
+     * Hier wird ein einzelner Buchstabe verschlüsselt.
+     * Man muss hier ebenfalls mitgeben ob der codierte String in Codierer.nachricht gespeichert werden soll oder nicht.
+     * In der Regel ist dies der Fall.
+     *
+     * @param buchstabe : char : Der zu codierende Buchstabe
+     * @param save      : boolean : Nachricht speichern oder nicht
+     * @return char     : Der codierte Buchstabe
+     */
+    public char codiere(char buchstabe, boolean save) {
+
+        char codiert = this.hardware.codiere(buchstabe);
+
+        if (save) {
+            this.nachricht += codiert;
+        }
+
+        return codiert;
+    }
+
+    /**
+     * Codiert den Übergebenen String.
+     * Man muss hier ebenfalls mitgeben ob der codierte String in Codierer.nachricht gespeichert werden soll oder nicht.
+     * In der Regel ist dies der Fall.
+     *
+     * @param klartext : String : Der zu codierende Text
+     * @param save     : boolean : Nachricht speichern oder nicht
+     * @return String : Der codierte Text zusätzlich als Rückgabe
+     */
+    public String codiere(String klartext, boolean save) {
+
+        StringBuilder sb = new StringBuilder();
+
+        for (char buchstabe : klartext.toCharArray()) {
+            sb.append(this.codiere(buchstabe, save));
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * Diese Funktion erwartet als (codierteNachricht) eine korrekte Enigma Nachricht.
+     * Ihr muss auch der Tag der codierung mitgegeben werden. Dieser weiß dein Funker im Funkraum.
+     * In der Regel ist dies der Tag des Nachrichten empfangs.
+     *
+     * @param codierteNachricht : String : Enigma codierte Nachricht
+     * @param tag               : int : Tag der Nachricht
+     * @return String : decodierte Nachricht
+     */
+    private String decodiere(String codierteNachricht, int tag) {
+
+        // Hardware reseten und Tageseinstellungen aus dem Codebuch laden
+        this.initialisiereHardware();
+        this.codebuch.fetchTagesschluessel(tag);
+
+        String[] nachricht = codierteNachricht.split(" ");
+        StringBuilder sb = new StringBuilder();
+
+        // Uhrzeit
+        sb.append(nachricht[0]).append(" ");
+
+        // Zeichen Anzahl der Nachricht
+        sb.append(nachricht[1]).append(" ");
+
+        // Spruchschlüssel
+        String spruchschluessel = this.decodiereString(nachricht[2]);
+        sb.append(spruchschluessel).append(" ");
+        sb.append(this.decodiereString(nachricht[3])).append(" ");
+
+        // Walzen neu einstellen mit dem Spruchschlüssel
+        this.hardware.setzePosition(0, spruchschluessel.charAt(0));
+        this.hardware.setzePosition(1, spruchschluessel.charAt(1));
+        this.hardware.setzePosition(2, spruchschluessel.charAt(2));
+
+        // Nachricht decodieren
+        sb.append(this.decodiereString(nachricht[4]));
+
+        return sb.toString();
+    }
+
+    /**
+     * Zerlegt den übergebenen String in einen char Array und decodiert jedes Zeichen.
+     * Der String wird dann decodiert zurück gegeben.
+     *
+     * @param nachricht : String : Der zu decodierende Text
+     * @return String : Der decodierte Text
+     */
+    private String decodiereString(String nachricht) {
+
+        StringBuilder sb = new StringBuilder();
+
+        for (char buchstabe : nachricht.toCharArray()) {
+            if (buchstabe > 0) {
+                sb.append(this.hardware.codiere(buchstabe));
+            }
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * Setzt die Enigma auf die Einstellungen des aktuellen Tages, aus dem Codebuch zurück.
+     */
+    public void resetHardware() {
+        this.initialisiereHardware();
+    }
+
+    /**
+     * Setzt den anzuzeigenden Buchstaben (buchstabe) auf der Walze (wlazenPosition)
+     * TODO: Wenn die Walzen, Notches, Kabel, etc. verändert werden, muss die bisherige Nachricht (this.nachricht) gelöscht werden.
+     *
+     * @param walzenPosition : int : Nummer der Walze
+     * @param buchstabe      : char : Buchstabe der zugewiesen soll
+     */
+    public void setWalze(int walzenPosition, char buchstabe) {
+        this.hardware.setzePosition(walzenPosition, buchstabe);
+    }
+
+    /**
+     * Setzt den Ring auf der Walze auf einen neuen Umstprungwert.
+     *
+     * @param walzenPosition : int : Walze auf die der Ring gesteckt wird
+     * @param umsprungPunkt  : int : Buchstabe auf dem der Notch sitzt
+     */
+    public void setRing(int walzenPosition, int umsprungPunkt) {
+        this.hardware.setzeRing(walzenPosition, umsprungPunkt);
+    }
+
+    /**
+     * Setzt die Walze (walzeNr) in die Position (walzenPosition) der Enigma ein.
+     * Mit (ringstellung) gibt man die Position des Umsprungpunktes an.
+     *
+     * @param walzenPosition : int : Position der Walze in der Enigma (1-2-3)
+     * @param walzeNr        : int : Nummer der Walze die eingesetzt wird
+     * @param ringstellung   : int : Stellung des Ringes
+     */
+    public void setWalzeNr(int walzenPosition, int walzeNr, int ringstellung) {
+        this.hardware.setzeWalzenNr(walzenPosition, walzeNr, ringstellung);
+    }
+
+    /**
+     * Setzt das Kabel in beide Ports ein und fügt es dem Steckbrett Array hinzu.
+     *
+     * @param port       : int : Kabel Nummer welches am Steckbrett eingesteckt wird
+     * @param verbindung : String : Verbindung welche die vertauschten Buchstaben angibt
+     * @return boolean : Wenn true, darf das Kabel gesteckt werden, wenn nicht, steckt da bereits schon eines
+     */
+    public boolean setSteckbrett(int port, String verbindung) {
+        return this.hardware.getSteckbrett().setzeVertauschung(port, verbindung.charAt(0), verbindung.charAt(1));
+    }
+
+    /**
+     * Prüft ob der Port auf den das Kabel gesteckt werden soll, noch frei ist.
+     * <p>
+     * setSteckbrett ausführen mit beiden Buchstaben als String
+     *
+     * @param buchstabe : char : Der zuletzt eingegebene Buchstabe
+     * @return boolean : Wenn der Buchstabe nicht vorhanden ist, wird true zurückgegeben, ansonsten false
+     */
+    public boolean pruefeSteckbrettPort(char buchstabe) {
+        return this.hardware.getSteckbrett().ueberpruefeVertauschungen(buchstabe);
+    }
+
+    /**
+     * Ließt aus der empfangenen Nachricht den Spruchschlüssel aus und gibt ihn zurück.
+     *
+     * @param empfangeneNachricht : String : Die empfangene Nachricht als String
+     * @return String : Der Spruchschlüssel mit welcher die Nachricht codiert wurde.
+     */
+    public String empfangenerSpruchschluessel(String empfangeneNachricht) {
+        String[] nachricht = empfangeneNachricht.split(" ");
+
+        return nachricht[2];
+    }
+
+    /**
+     * Gibt die Ringstellungen aus dem Codebuch zurück
+     *
+     * @return int[] : Array mit den Ringstellungen der drei eingesetzten Walzen
+     */
+    public int[] fetchRingstellung() {
+        return this.codebuch.getRingstellung();
+    }
+
+    /**
+     * Gibt die Walzennummer aus dem Codebuch zurück
+     *
+     * @return int[] : Array mit den Nummern der drei eingesetzten Walzen
+     */
+    public int[] getchWalzenNr() {
+        return this.codebuch.getWalzenlage();
+    }
+
+    /**
+     * Gibt die Steckverbindungen aus dem Codebuch zurück
+     *
+     * @return char[][] : Array mit den gesteckten Verbindungen im Steckbrett
+     */
+    public char[][] getSteckverbindungen() {
+        return this.codebuch.getSteckverbindung();
+    }
+
+    /**
+     * Löscht das letzte Zeichen aus der Nachricht und dreht die Walzen eine Position zurück.
+     */
+    public void letztesZeichenLoeschen() {
+        this.hardware.dreheWalzen(-1);
+    }
 }
diff --git a/src/main/java/projekt/enigma/model/Walze.java b/src/main/java/projekt/enigma/model/Walze.java
index 99d41248aa3aca3a3529674c1750a79c4ebe8a3a..dd4628b4fd895871819c38b34e64983f9b20acbf 100644
--- a/src/main/java/projekt/enigma/model/Walze.java
+++ b/src/main/java/projekt/enigma/model/Walze.java
@@ -1,8 +1,5 @@
 package projekt.enigma.model;
 
-import java.util.Arrays;
-import java.util.Collections;
-
 /**
  * Klasse Walze
  * <br>
@@ -17,228 +14,169 @@ import java.util.Collections;
  */
 public class Walze {
 
-	/**
-	 * walzeAlpha : Character[] : Array, dass die Buchstaben des Alphabets enthaelt
-	 */
-	private Character[] alphabet;
-
-	/**
-	 * ringstellung : char : zeigt die Einstellung fuer den Umspringpunkt
-	 */
-	private char ringstellung;
-
-	/**
-	 * walzennr : int : Bestimmt, welche Walze genutzt wird
-	 */
-	private int walzennr;
-
-	/**
-	 * alphabet : Character[] : Enthaelt die Buchstaben des Alphabets. Wird im Laufe des Programmes
-	 * aber immer wieder ueberschrieben.
-	 */
-	private Character[] walzeAlpha;
-
-	/**
-	 * Ueberschriebener Konstruktor, der die Eingangsparameter der Walze mitgibt
-	 *
-	 * @param walzennr     : int : Nummer der gewaehlten Walze
-	 * @param ringstellung : int : Einstellung des Umsprungpunktes
-	 */
-	public Walze(int walzennr, int ringstellung) {
-		this.alphabet = new Character[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
-				'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
-		this.walzeAlpha = new Character[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
-				'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
-
-		this.setWalzennr(walzennr);
-		this.setRingstellung(ringstellung);
-	}
-
-	/**
-	 * Sortiert der Walzennummer das passende Character-Array mittels switch zu.
-	 *
-	 * @return walze : Character[] : gibt die gewaehlte Walze zurueck
-	 */
-	private Character[] walzenNummer() {
-		Character[] walze = new Character[26];
-
-		// Character-Arrays fuer die Codierung jeder Walze
-		Character[] walzeEins = {'E', 'K', 'M', 'F', 'L', 'G', 'D', 'Q', 'V', 'Z', 'N', 'T', 'O', 'W', 'Y',
-				'H', 'X', 'U', 'S', 'P', 'A', 'I', 'B', 'R', 'C', 'J'};
-		Character[] walzeZwei = {'A', 'J', 'D', 'K', 'S', 'I', 'R', 'U', 'X', 'B', 'L', 'H', 'W', 'T', 'M',
-				'C', 'Q', 'G', 'Z', 'N', 'P', 'Y', 'F', 'V', 'O', 'E'};
-		Character[] walzeDrei = {'B', 'D', 'F', 'H', 'J', 'L', 'C', 'P', 'R', 'T', 'X', 'V', 'Z', 'N', 'Y',
-				'E', 'I', 'W', 'G', 'A', 'K', 'M', 'U', 'S', 'Q', 'O'};
-		Character[] walzeVier = {'E', 'S', 'O', 'V', 'P', 'Z', 'J', 'A', 'Y', 'Q', 'U', 'I', 'R', 'H', 'X',
-				'L', 'N', 'F', 'T', 'G', 'K', 'D', 'C', 'M', 'W', 'B'};
-		Character[] walzeFuenf = {'V', 'Z', 'B', 'R', 'G', 'I', 'T', 'Y', 'U', 'P', 'S', 'D', 'N', 'H', 'L',
-				'X', 'A', 'W', 'M', 'J', 'Q', 'O', 'F', 'E', 'C', 'K'};
-
-		switch (this.walzennr) {
-			case 1:
-				walze = walzeEins;
-				break;
-			case 2:
-				walze = walzeZwei;
-				break;
-			case 3:
-				walze = walzeDrei;
-				break;
-			case 4:
-				walze = walzeVier;
-				break;
-			case 5:
-				walze = walzeFuenf;
-				break;
-		}
-
-		return walze;
-	}
-
-	/**
-	 * TODO: Dokumentieren
-	 *
-	 * @return ringstellung : char : gibt die neue Ringstellung als char zurueck
-	 */
-	public char getRingstellung() {
-		return ringstellung;
-	}
-
-	/**
-	 * Setzt die Initiale Ringstellung der Walze.
-	 * Es sind nur Zahlen von 1 - 26 zugelassen.
-	 * <p>
-	 * Die Ringstellung wird zum char umgewandelt.
-	 * Im Fehlerfall wird die Ringstellung standardmaessig auf 'Z' gesetzt.
-	 *
-	 * @param ringstellung : int : Punkt an dem die Walze umspringt
-	 */
-	//TODO ??? Setter Ringstellung
-	public void setRingstellung(int ringstellung) {
-		if ((ringstellung > 0) && (ringstellung <= 26)) {
-			this.ringstellung = this.alphabet[ringstellung - 1];
-		} else {
-			this.ringstellung = 'Z';
-		}
-	}
-
-	/**
-	 * Dreht die Walze: verschiebt das Alphabet um keine, eine oder mehrere Stellen und ueberschreibt
-	 * das Array alphabet mit der neuen Anordnung.
-	 * <p>
-	 * Ueberprueft, ob der Umspringpunkt der Walze nach der Drehung erreicht wurde.
-	 *
-	 * @param richtung : int : 1 dreht die Walze weiter und -1 dreht sie einen Schritt zurück
-	 * @return checkRing : boolean : gibt true zurueck wenn der Umspringpunkt erreicht wurde
-	 * TODO: Doku
-	 */
-	public boolean dreheWalze(int richtung) {
-		boolean checkRing = false;
-		int korrektorFaktor = 0;
-
-		if (richtung == 1) {
-			Collections.rotate(Arrays.asList(this.walzeAlpha), -1);
-		} else {
-			korrektorFaktor = 1;
-			Collections.rotate(Arrays.asList(this.walzeAlpha), 1);
-		}
-
-		// gleicht die Ringstellung mit der aktuellen Position ab
-		if (this.getPosition() + korrektorFaktor == this.ringstellung) {
-			checkRing = true;
-		}
-
-		return checkRing;
-	}
-
-	/**
-	 * Codiert den mitgegebenen Buchstaben anhand der gewaehlten Walze.
-	 *
-	 * @param buchstabe : char : Buchstabe, der verschluesselt werden soll
-	 * @return buchstabe : char : verschluesselter Buchstabe
-	 */
-	public char codiere(char buchstabe) {
+    /**
+     * Das String Array aller bekannter aktuellen Walzen
+     */
+    String[] walzen;
+
+    /**
+     * walzeAlpha : Character[] : Array, dass die Buchstaben des Alphabets enthaelt
+     */
+    private String alphabet;
+
+    /**
+     * ringstellung : char : zeigt die Einstellung fuer den Umspringpunkt
+     */
+    private char ringstellung;
+
+    /**
+     * walzennr : int : Bestimmt, welche Walze genutzt wird
+     */
+    private int walzenNr;
+
+    /**
+     * Die Anzahl der getätigten Walzen Drehungen
+     */
+    private int turns;
+
+    /**
+     * Ueberschriebener Konstruktor, der die Eingangsparameter der Walze mitgibt
+     *
+     * @param walzenNr     : int : Nummer der gewaehlten Walze
+     * @param ringstellung : int : Einstellung des Umsprungpunktes
+     */
+    public Walze(int walzenNr, int ringstellung) {
+
+        assert false;
+        this.walzen = new String[5];
+        this.walzen[0] = "EKMFLGDQVZNTOWYHXUSPAIBRCJ";
+        this.walzen[1] = "AJDKSIRUXBLHWTMCQGZNPYFVOE";
+        this.walzen[2] = "BDFHJLCPRTXVZNYEIWGAKMUSQO";
+        this.walzen[3] = "ESOVPZJAYQUIRHXLNFTGKDCMWB";
+        this.walzen[4] = "VZBRGITYUPSDNHLXAWMJQOFECK";
+        this.alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+        this.turns = 0;
+
+        this.setWalzenNr(walzenNr);
+        this.setRingstellung(ringstellung);
+    }
+
+    /**
+     * Sortiert der Walzennummer das passende Character-Array mittels switch zu.
+     *
+     * @return walze : Character[] : gibt die gewaehlte Walze zurueck
+     */
+    private String fetchWalze() {
+
+        return walzen[walzenNr];
+    }
+
+    /**
+     * Setzt die Initiale Ringstellung der Walze.
+     * Es sind nur Zahlen von 1 - 26 zugelassen.
+     * <p>
+     * Die Ringstellung wird zum char umgewandelt.
+     * Im Fehlerfall wird die Ringstellung standardmaessig auf 'Z' gesetzt.
+     *
+     * @param ringstellung : int : Punkt an dem die Walze umspringt
+     */
+    public void setRingstellung(int ringstellung) {
+        if ((ringstellung > 0) && (ringstellung <= 26)) {
+            this.ringstellung = this.alphabet.charAt(ringstellung - 1);
+        } else {
+            this.ringstellung = 'Z';
+        }
+    }
+
+    /**
+     * Dreht die Walze: verschiebt das Alphabet um keine, eine oder mehrere Stellen und ueberschreibt
+     * das Array alphabet mit der neuen Anordnung.
+     * <p>
+     * Ueberprueft, ob der Umspringpunkt der Walze nach der Drehung erreicht wurde.
+     *
+     * @param richtung : int : 1 dreht die Walze weiter und -1 dreht sie einen Schritt zurück
+     * @return checkRing : boolean : gibt true zurueck wenn der Umspringpunkt erreicht wurde
+     * TODO: Doku
+     */
+    public boolean dreheWalze(int richtung) {
+        boolean checkRing = false;
+        int korrektorFaktor = 0;
+
+        if (richtung == 1) {
+            this.turns++;
+        } else if (richtung == -1) {
+            korrektorFaktor = 1;
+            this.turns--;
+        }
+
+        // gleicht die Ringstellung mit der aktuellen Position ab
+        if (this.getPosition() + korrektorFaktor == this.ringstellung) {
+            checkRing = true;
+        }
+
+        return checkRing;
+    }
+
+    /**
+     * Codiert den mitgegebenen Buchstaben anhand der gewaehlten Walze.
+     *
+     * @param buchstabe : char : Buchstabe, der verschluesselt werden soll
+     * @return buchstabe : char : verschluesselter Buchstabe
+     */
+    public char codiere(char buchstabe) {
         /* durchsucht die (verschobene) Alphabetswalze nach dem aktuellen Buchstaben und
         uebertraegt den Index auf die gewaehlte Codierwalze*/
-		buchstabe = walzenNummer()[fetchArrayIndex(buchstabe, walzeAlpha)];
-
-		return buchstabe;
-	}
-
-	/**
-	 * Decodiert den mitgegebenen Buchstaben mit Hilfe der (verschobenen) Alphabetswalze
-	 *
-	 * @param buchstabe : char : Buchstabe, der decodiert werden soll
-	 * @return buchstabe : char : decodierter Buchstabe
-	 */
-	public char codiere2(char buchstabe) {
+
+        return this.fetchWalze().charAt((this.alphabet.indexOf(buchstabe) + this.turns) % 26);
+    }
+
+    /**
+     * Decodiert den mitgegebenen Buchstaben mit Hilfe der (verschobenen) Alphabetswalze
+     *
+     * @param buchstabe : char : Buchstabe, der decodiert werden soll
+     * @return buchstabe : char : decodierter Buchstabe
+     */
+    public char codiere2(char buchstabe) {
         /* durchsucht die gewaehlte Walze nach dem aktuellen Buchstaben und
         uebertraegt den Index auf die (verschobene) Alphabetswalze*/
-		buchstabe = walzeAlpha[fetchArrayIndex(buchstabe, walzenNummer())];
-
-		return buchstabe;
-	}
-
-	/**
-	 * TODO: Dokumentieren
-	 * Ermittelt den Index eines Characters in einem Array ueber eine for-Schleife
-	 *
-	 * @param buchstabe : Character : Buchstabe, dessen Index benoetigt wird
-	 * @param array     : Character[] : Array, in dem der Buchstabe vorkommen soll
-	 * @return result : int : index des Buchstaben
-	 */
-	private int fetchArrayIndex(Character buchstabe, Character[] array) {
-		// wird mit ungueltigem Wert initialisiert
-		int result = -1;
-
-		for (int i = 0; i < array.length; i++) {
-			if (array[i].equals(buchstabe)) {
-				result = i;
-				break;
-			}
-		}
-
-		return result;
-	}
-
-	/**
-	 * Setzt die Walzennummer. Es stehen fuenf Walze zur Auswahl.
-	 *
-	 * @param walzennr : int : Walzennummer
-	 */
-	public void setWalzennr(int walzennr) {
-		if ((walzennr > 0) && (walzennr < 6)) {
-			this.walzennr = walzennr;
-		} else {
-			System.err.println("Keine gültige Walzennummer");
-		}
-	}
-
-	/**
-	 * TODO: Dokumentieren // das selbe wie getAnzeig?
-	 * Gibt den Character zurueck, der aktuell in der Walze eingestellt ist
-	 *
-	 * @return Character am Index 0 des (verschobenen) Alphabets zurueck
-	 */
-	public Character getPosition() {
-		return walzeAlpha[0];
-	}
-
-	/**
-	 * * TODO: Funktionsname hat sich geändert
-	 * Gibt die Grundeinstellung der Walze ein. Nur Buchstaben von A - Z sind zugelassen.
-	 * Buchstaben werden automatisch in Grossbuchstaben umgewandelt.
-	 * Ist die Grundeinstellung nicht 'A', wird die Methode dreheWalze() aufgerufen.
-	 *
-	 * @param buchstabe : Character : Einstellung der Walze
-	 */
-	public void setPosition(Character buchstabe) {
-		if (Character.isLetter(buchstabe)) {
-			buchstabe = Character.toUpperCase(buchstabe);
-			System.arraycopy(this.alphabet, 0, this.walzeAlpha, 0, this.alphabet.length);
-			if (buchstabe > 'A') {
-				dreheWalze(this.fetchArrayIndex(buchstabe, this.walzeAlpha));
-			}
-		}
-	}
-}
+
+        return this.alphabet.charAt((this.fetchWalze().indexOf(buchstabe) + this.turns) % 26);
+    }
+
+    /**
+     * Setzt die Walzennummer. Es stehen fuenf Walze zur Auswahl.
+     *
+     * @param walzenNr : int : Walzennummer
+     */
+    public void setWalzenNr(int walzenNr) {
+        if ((walzenNr > 0) && (walzenNr < 6)) {
+            this.walzenNr = walzenNr - 1;
+        } else {
+            System.err.println("Keine gültige Walzennummer");
+        }
+    }
+
+    /**
+     * Gibt den Character zurueck, der aktuell in der Walze eingestellt ist
+     *
+     * @return Character am Index 0 des (verschobenen) Alphabets zurueck
+     */
+    public Character getPosition() {
+        return this.fetchWalze().charAt(turns % 26);
+    }
+
+    /**
+     * * TODO: Funktionsname hat sich geändert
+     * Gibt die Grundeinstellung der Walze ein. Nur Buchstaben von A - Z sind zugelassen.
+     * Buchstaben werden automatisch in Grossbuchstaben umgewandelt.
+     * Ist die Grundeinstellung nicht 'A', wird die Methode dreheWalze() aufgerufen.
+     *
+     * @param buchstabe : Character : Einstellung der Walze
+     */
+    public void setPosition(Character buchstabe) {
+        if (Character.isLetter(buchstabe)) {
+            this.turns = alphabet.indexOf(buchstabe);
+        }
+    }
+}
\ No newline at end of file