diff --git a/src/main/java/projekt/enigma/GuiController.java b/src/main/java/projekt/enigma/GuiController.java
index db53ffb1d1c99a67017a778c047acacb17e4f737..a38c97965f3ac1c9ac04978775ca735bef21fb30 100644
--- a/src/main/java/projekt/enigma/GuiController.java
+++ b/src/main/java/projekt/enigma/GuiController.java
@@ -12,703 +12,428 @@ import java.util.ArrayList;
 
 public class GuiController {
 
-	private final static String[] walzenNr = {"I", "II", "III", "IV", "V"};
-	private final static String[] ringNr = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26"};
-	private final static String[] position = {"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"};
-	private ArrayList<MenuItem> mItem;
-	private String textEingabe;
-	private String textCodiert;
-	private boolean resetDisplay;
-	private Codierer codierer;
-
-	@FXML
-	private TextField tfStecker1;
-
-	@FXML
-	private TextField tfStecker2;
-
-	@FXML
-	private TextField tfStecker3;
-
-	@FXML
-	private TextField tfStecker4;
-
-	@FXML
-	private TextField tfStecker5;
-
-	@FXML
-	private TextField tfStecker6;
-
-	@FXML
-	private TextField tfStecker7;
-
-	@FXML
-	private TextField tfStecker8;
-
-	@FXML
-	private TextField tfStecker9;
-
-	@FXML
-	private TextField tfStecker10;
-
-	@FXML
-	private Button btnM;
-
-	@FXML
-	private Button btnN;
-
-	@FXML
-	private Button btnB;
-
-	@FXML
-	private Button btnV;
-
-	@FXML
-	private Button btnC;
-
-	@FXML
-	private Button btnX;
-
-	@FXML
-	private Button btnY;
-
-	@FXML
-	private Button btnP;
-
-	@FXML
-	private Button btnL;
-
-	@FXML
-	private Button btnK;
-
-	@FXML
-	private Button btnJ;
-
-	@FXML
-	private Button btnH;
-
-	@FXML
-	private Button btnG;
-
-	@FXML
-	private Button btnF;
-
-	@FXML
-	private Button btnD;
-
-	@FXML
-	private Button btnS;
-
-	@FXML
-	private Button btnA;
-
-	@FXML
-	private Button btnO;
-
-	@FXML
-	private Button btnI;
-
-	@FXML
-	private Button btnU;
-
-	@FXML
-	private Button btnZ;
-
-	@FXML
-	private Button btnT;
-
-	@FXML
-	private Button btnR;
-
-	@FXML
-	private Button btnE;
-
-	@FXML
-	private Button btnW;
-
-	@FXML
-	private Button btnQ;
-
-	@FXML
-	private Circle circL;
-
-	@FXML
-	private Circle circM;
-
-	@FXML
-	private Circle circN;
-
-	@FXML
-	private Circle circB;
-
-	@FXML
-	private Circle circV;
-
-	@FXML
-	private Circle circC;
-
-	@FXML
-	private Circle circX;
-
-	@FXML
-	private Circle circY;
-
-	@FXML
-	private Circle circP;
-
-	@FXML
-	private Circle circK;
-
-	@FXML
-	private Circle circJ;
-
-	@FXML
-	private Circle circH;
-
-	@FXML
-	private Circle circG;
-
-	@FXML
-	private Circle circF;
-
-	@FXML
-	private Circle circD;
-
-	@FXML
-	private Circle circS;
-
-	@FXML
-	private Circle circA;
-
-	@FXML
-	private Circle circO;
-
-	@FXML
-	private Circle circI;
-
-	@FXML
-	private Circle circU;
-
-	@FXML
-	private Circle circZ;
-
-	@FXML
-	private Circle circT;
-
-	@FXML
-	private Circle circR;
-
-	@FXML
-	private Circle circE;
-
-	@FXML
-	private Circle circW;
-
-	@FXML
-	private Circle circQ;
-
-	@FXML
-	private Label lblL;
-
-	@FXML
-	private Label lblM;
-
-	@FXML
-	private Label lblN;
-
-	@FXML
-	private Label lblB;
-
-	@FXML
-	private Label lblV;
-
-	@FXML
-	private Label lblC;
-
-	@FXML
-	private Label lblX;
-
-	@FXML
-	private Label lblY;
-
-	@FXML
-	private Label lblP;
-
-	@FXML
-	private Label lblK;
-
-	@FXML
-	private Label lblJ;
-
-	@FXML
-	private Label lblH;
-
-	@FXML
-	private Label lblG;
-
-	@FXML
-	private Label lblF;
-
-	@FXML
-	private Label lblD;
-
-	@FXML
-	private Label lblS;
-
-	@FXML
-	private Label lblA;
-
-	@FXML
-	private Label lblQ;
-
-	@FXML
-	private Label lblW;
-
-	@FXML
-	private Label lblE;
-
-	@FXML
-	private Label lblR;
-
-	@FXML
-	private Label lblT;
-
-	@FXML
-	private Label lblZ;
-
-	@FXML
-	private Label lblU;
-
-	@FXML
-	private Label lblI;
-
-	@FXML
-	private Label lblO;
-
-	@FXML
-	private TextField tfCodiert;
-
-	@FXML
-	private TextField tfKlartext;
-
-	@FXML
-	private ProgressBar pbLadeNachricht;
-
-	@FXML
-	private MenuButton mBtnWalzPos1;
-
-	@FXML
-	private MenuButton mBtnWalzPos2;
-
-	@FXML
-	private MenuButton mBtnWalzPos3;
-
-	@FXML
-	private MenuButton mBtnNotchPos1;
-
-	@FXML
-	private MenuButton mBtnNotchPos2;
-
-	@FXML
-	private MenuButton mBtnNotchPos3;
-
-	@FXML
-	private MenuButton mBtnStartPos1;
-
-	@FXML
-	private MenuButton mBtnStartPos2;
-
-	@FXML
-	private MenuButton mBtnStartPos3;
-
-	@FXML
-	private Label lblLadeNachricht;
-
-	@FXML
-	private Label lblTagesschluessel;
-
-	@FXML
-	private Label lblSpruchschluessel;
-
-	@FXML
-	void initialize() {
-
-		// Variablen setzen
-		textEingabe = "";
-		textCodiert = "";
-		resetDisplay = true;
-
-		//Einträge für Walzen
-		menu(mBtnWalzPos1, walzenNr);
-		menu(mBtnWalzPos2, walzenNr);
-		menu(mBtnWalzPos3, walzenNr);
-
-		//Einträge für die Ringe
-		menu(mBtnNotchPos1, ringNr);
-		menu(mBtnNotchPos2, ringNr);
-		menu(mBtnNotchPos3, ringNr);
-
-		//Einträge für die Startpositionen
-		menu(mBtnStartPos1, position);
-		menu(mBtnStartPos3, position);
-		menu(mBtnStartPos2, position);
-
-		//Setze Leucht Event bei Tastendruck
-		leuchten(btnA, circA);
-		leuchten(btnB, circB);
-		leuchten(btnC, circC);
-		leuchten(btnD, circD);
-		leuchten(btnE, circE);
-		leuchten(btnF, circF);
-		leuchten(btnG, circG);
-		leuchten(btnH, circH);
-		leuchten(btnI, circI);
-		leuchten(btnJ, circJ);
-		leuchten(btnK, circK);
-		leuchten(btnL, circL);
-		leuchten(btnM, circM);
-		leuchten(btnN, circN);
-		leuchten(btnO, circO);
-		leuchten(btnP, circP);
-		leuchten(btnQ, circQ);
-		leuchten(btnR, circR);
-		leuchten(btnS, circS);
-		leuchten(btnT, circT);
-		leuchten(btnU, circU);
-		leuchten(btnV, circV);
-		leuchten(btnW, circW);
-		leuchten(btnX, circX);
-		leuchten(btnY, circY);
-		leuchten(btnZ, circZ);
-
-		// Initialisieren des Codierers und setzen der Kenngruppe
-		this.codierer = new Codierer();
-		this.codierer.setKenngruppe("enigma");
-
-		// Beim nächsten Tastendruck erstmal das Display löschen damit falschen Nachrichten geschickt werden.
-		this.resetDisplay = true;
-
-		// Einstellungen aus dem Logbuch auslesen und setzen
-		this.setzeTagesSchluessel();
-		this.setzeSteckverbindungen();
-	}
-
-	/**
-	 * Hier werden die TextFelder, welche die Steckverbindungen darstellen,
-	 * mit dem Werten die die Klasse Codierer zur Verfügung stellt gefüllt.
-	 */
-	private void setzeSteckverbindungen() {
-		tfStecker1.setText(codierer.getSteckverbindungen()[0][0]+""+codierer.getSteckverbindungen()[0][1]);
-		tfStecker2.setText(codierer.getSteckverbindungen()[1][0]+""+codierer.getSteckverbindungen()[1][1]);
-		tfStecker3.setText(codierer.getSteckverbindungen()[2][0]+""+codierer.getSteckverbindungen()[2][1]);
-		tfStecker4.setText(codierer.getSteckverbindungen()[3][0]+""+codierer.getSteckverbindungen()[3][1]);
-		tfStecker5.setText(codierer.getSteckverbindungen()[4][0]+""+codierer.getSteckverbindungen()[4][1]);
-		tfStecker6.setText(codierer.getSteckverbindungen()[5][0]+""+codierer.getSteckverbindungen()[5][1]);
-		tfStecker7.setText(codierer.getSteckverbindungen()[6][0]+""+codierer.getSteckverbindungen()[6][1]);
-		tfStecker8.setText(codierer.getSteckverbindungen()[7][0]+""+codierer.getSteckverbindungen()[7][1]);
-		tfStecker9.setText(codierer.getSteckverbindungen()[8][0]+""+codierer.getSteckverbindungen()[8][1]);
-		tfStecker10.setText(codierer.getSteckverbindungen()[9][0]+""+codierer.getSteckverbindungen()[9][1]);
-	}
-
-	/**
-	 * Die Löschen Funktion löscht das letzte Zeichen im Klartext sowie im Codiert Feld,
-	 * der Codierer wird aufgerufen um ebenfalls das letzte Zeichen zu löschen
-	 */
-	@FXML
-	private void loeschen() {
-		if (textEingabe.length() == 0) {
-			tfKlartext.setText("");
-			tfCodiert.setText("");
-		} else {
-			textEingabe = textEingabe.substring(0, textEingabe.length() - 1);
-			textCodiert = textCodiert.substring(0, textCodiert.length()-1);
-			tfKlartext.setText(textEingabe);
-			tfCodiert.setText(textCodiert);
-			codierer.letztesZeichenLoeschen();
-			mBtnStartPos1.setText(String.valueOf(this.codierer.getWalzen()[0]));
-			mBtnStartPos2.setText(String.valueOf(this.codierer.getWalzen()[1]));
-			mBtnStartPos3.setText(String.valueOf(this.codierer.getWalzen()[2]));
-		}
-	}
-
-	@FXML
-	void btnempfangen() {
-		String[] empfangeneNachricht = this.codierer.empfangeNachricht();
-		if (empfangeneNachricht[0] != null) {
-			this.tfKlartext.setText(empfangeneNachricht[2]);
-			this.tfCodiert.setText(empfangeneNachricht[1]);
-			this.resetDisplay = true;
-
-			// Spruchschluessel in das Feld lblSpruchschluessel schreiben
-			lblSpruchschluessel.setText(this.codierer.empfangenerSpruchschluessel(empfangeneNachricht[2]));
-
-			this.setzeTagesSchluessel();
-		}
-	}
-
-	@FXML
-	void btnsenden() {
-		this.tfKlartext.setText("");
-		this.tfCodiert.setText("");
-
-		try {
-			this.codierer.sendeNachricht();
-		} catch (HttpException | IOException e) {
-			e.printStackTrace();
-		}
-
-	}
-
-	/**
-	 * Methode zum setzen des menuButton Textes auf das ausgewählte MenuItem
-	 *
-	 * @param mb : MenuButton der Walze
-	 * @param mi : MenuItem
-	 */
-	private void listener(MenuButton mb, MenuItem mi) {
-		// mb.setText(mi.getText());
-
-		if (mb.getId().equals(mBtnStartPos1.getId())) setzePosition(1, mi.getText().charAt(0));
-		if (mb.getId().equals(mBtnStartPos2.getId())) setzePosition(2, mi.getText().charAt(0));
-		if (mb.getId().equals(mBtnStartPos3.getId())) setzePosition(3, mi.getText().charAt(0));
-		if (mb.getId().equals(mBtnWalzPos1.getId())) setzeWalze(1, mi.getText());
-		if (mb.getId().equals(mBtnWalzPos2.getId())) setzeWalze(2, mi.getText());
-		if (mb.getId().equals(mBtnWalzPos3.getId())) setzeWalze(3, mi.getText());
-		if (mb.getId().equals(mBtnNotchPos1.getId()))
-			setzeRing(1, Integer.parseInt(mi.getText()) - 1);
-		if (mb.getId().equals(mBtnNotchPos2.getId()))
-			setzeRing(2, Integer.parseInt(mi.getText()) - 1);
-		if (mb.getId().equals(mBtnNotchPos3.getId()))
-			setzeRing(3, Integer.parseInt(mi.getText()) - 1);
-	}
-
-	/**
-	 * Methode zur Erstellung der Einträge und Action Listener für die einzelnen Menüs
-	 *
-	 * @param button : Button für die die Einträge erstellt werden sollen
-	 */
-	private void menu(MenuButton button, String[] str) {
-		mItem = new ArrayList<>();
-		for (int i = 0; i < str.length; i++) {
-			//Eintrag aus str der Arraylist mi hinzufügen
-			mItem.add(new MenuItem(str[i]));
-			//MenuItem mi dem Button button hinzufügen
-			button.getItems().add(mItem.get(i));
-			int finalI = i;
-			//Listener für die einzelnen Einträge
-			ArrayList<MenuItem> finalMi = mItem;
-			mItem.get(i).setOnAction(e -> listener(button, finalMi.get(finalI)));
-		}
-	}
-
-	/**
-	 * Auswertung welcher Button gedrückt wurde
-	 *
-	 * @param e => ActionEvent des auslösenden Button
-	 */
-	@FXML
-	private void gedrueckteTaste(ActionEvent e) {
-
-		//TODO Anbindung an Klasse Hardware
-		if (e.getSource() == btnA) setText(btnA);
-		if (e.getSource() == btnB) setText(btnB);
-		if (e.getSource() == btnC) setText(btnC);
-		if (e.getSource() == btnD) setText(btnD);
-		if (e.getSource() == btnE) setText(btnE);
-		if (e.getSource() == btnF) setText(btnF);
-		if (e.getSource() == btnG) setText(btnG);
-		if (e.getSource() == btnH) setText(btnH);
-		if (e.getSource() == btnI) setText(btnI);
-		if (e.getSource() == btnJ) setText(btnJ);
-		if (e.getSource() == btnK) setText(btnK);
-		if (e.getSource() == btnL) setText(btnL);
-		if (e.getSource() == btnM) setText(btnM);
-		if (e.getSource() == btnN) setText(btnN);
-		if (e.getSource() == btnO) setText(btnO);
-		if (e.getSource() == btnP) setText(btnP);
-		if (e.getSource() == btnQ) setText(btnQ);
-		if (e.getSource() == btnR) setText(btnR);
-		if (e.getSource() == btnS) setText(btnS);
-		if (e.getSource() == btnT) setText(btnT);
-		if (e.getSource() == btnU) setText(btnU);
-		if (e.getSource() == btnV) setText(btnV);
-		if (e.getSource() == btnW) setText(btnW);
-		if (e.getSource() == btnX) setText(btnX);
-		if (e.getSource() == btnY) setText(btnY);
-		if (e.getSource() == btnZ) setText(btnZ);
-	}
-
-	/**
-	 * schreibt Buchstaben des gedrückten Knopfes in Textfeld tfrein
-	 *
-	 * @param b : gedrückter Knopf
-	 */
-	private void setText(Button b) {
-		if (textEingabe.length() < 250) {
-			if (this.resetDisplay) {
-				this.tfCodiert.setText("");
-				this.tfKlartext.setText("");
-				this.resetDisplay = false;
-				this.codierer.resetHardware();
-				textCodiert = "";
-				textEingabe = "";
-				// Spruchschlüssel generieren und codieren
-				this.codierer.generateSpruchschluessel();
-				// Spruchschluessel in das Feld lblSpruchschluessel schreiben
-				lblSpruchschluessel.setText(this.codierer.getSpruchschluessel());
-			}
-			textEingabe += b.getText();
-			textCodiert += this.codierer.codiere(b.getText().charAt(0), true);
-
-			tfKlartext.setText(textEingabe);
-			tfCodiert.setText(textCodiert);
-
-			// Position der Walzen aktuallisieren
-			mBtnStartPos1.setText(String.valueOf(this.codierer.getWalzen()[0]));
-			mBtnStartPos2.setText(String.valueOf(this.codierer.getWalzen()[1]));
-			mBtnStartPos3.setText(String.valueOf(this.codierer.getWalzen()[2]));
-		}
-	}
-
-	private void leuchten(Button taste, Circle leuchte) {
-
-		taste.setOnMousePressed(mouseEvent -> leuchte.setStyle("-fx-fill: #FFA500"));
-		taste.setOnMouseReleased(mouseEvent -> {
-			leuchte.setStyle("-fx-background-color: " + taste.getBackground());
-			leuchte.setStyle("-fx-border-color:  #000000");
-		});
-	}
-
-	/**
-	 * Setzt die Anzeige des entsprechende Gui-Element auf die entsprechende Walze
-	 * ->d.h. welche Walze sitzt auf welcher Position
-	 *
-	 * @param walzeRoemischNr => gibt die Walzennummer an
-	 * @param walzenPosition  => gibt die Position der Walze
-	 */
-	private void setzeWalze(int walzenPosition, String walzeRoemischNr) {
-		int walzeNr = 0;
-		switch (walzeRoemischNr) {
-			case "I":
-				walzeNr = 0;
-				break;
-			case "II":
-				walzeNr = 1;
-				break;
-			case "III":
-				walzeNr = 2;
-				break;
-			case "IV":
-				walzeNr = 4;
-				break;
-			case "V":
-				walzeNr = 4;
-				break;
-			default:
-				break;
-		}
-
-		switch (walzenPosition) {
-			case 1:
-				mBtnWalzPos1.setText(walzenNr[walzeNr]);
-				//codierer.setWalze(walzeNr, walzenPosition)
-				break;
-			case 2:
-				mBtnWalzPos2.setText(walzenNr[walzeNr]);
-
-				break;
-			case 3:
-				mBtnWalzPos3.setText(walzenNr[walzeNr]);
-				break;
-			default:
-				break;
-		}
-	}
-
-	/**
-	 * Setzt den Notch (position)=> die Mitnahmeposition der Walze (walze) fest
-	 * Mitnahmeposition meint => die nächste Walze wird bei erreichen dieser Position (notch)
-	 * um eine Stelle versetzt
-	 *
-	 * @param ringStellung   => gibt die walze an
-	 * @param walzenPosition => gibt den notch der Walze (walze) an
-	 */
-	private void setzeRing(int walzenPosition, int ringStellung) {
-		switch (walzenPosition) {
-			case 1:
-				mBtnNotchPos1.setText(ringNr[ringStellung]);
-				break;
-			case 2:
-				mBtnNotchPos2.setText(ringNr[ringStellung]);
-				break;
-			case 3:
-				mBtnNotchPos3.setText(ringNr[ringStellung]);
-				break;
-			default:
-				break;
-		}
-	}
-
-	/**
-	 * Setzt die Startposition/ aktuelle Position der Walze
-	 *
-	 * @param walze     => gibt die walze an
-	 * @param buchstabe gibt den Startwert bzw die aktuelle Position der Walze (walze) an
-	 */
-	private void setzePosition(int walze, char buchstabe) {
-		switch (walze) {
-			case 1:
-				mBtnStartPos1.setText(String.valueOf(buchstabe));
-				break;
-			case 2:
-				mBtnStartPos2.setText(buchstabe + "");
-				break;
-			case 3:
-				mBtnStartPos3.setText(buchstabe + "");
-				break;
-			default:
-				break;
-		}
-	}
-
-	/**
-	 * Setzt den aktuellen TagesSchluessel
-	 */
-	public void setzeTagesSchluessel() {
-
-		// Umsprungpunkte anzeigen
-		mBtnNotchPos1.setText(String.valueOf(this.codierer.fetchRingstellung()[0]));
-		mBtnNotchPos2.setText(String.valueOf(this.codierer.fetchRingstellung()[1]));
-		mBtnNotchPos3.setText(String.valueOf(this.codierer.fetchRingstellung()[2]));
-		// Walzennummern anzeigen
-		mBtnWalzPos1.setText(String.valueOf(this.codierer.getchWalzenNr()[0]));
-		mBtnWalzPos2.setText(String.valueOf(this.codierer.getchWalzenNr()[1]));
-		mBtnWalzPos3.setText(String.valueOf(this.codierer.getchWalzenNr()[2]));
-		// Position der Walzen anzeigen
-		mBtnStartPos1.setText(String.valueOf(this.codierer.getWalzen()[0]));
-		mBtnStartPos2.setText(String.valueOf(this.codierer.getWalzen()[1]));
-		mBtnStartPos3.setText(String.valueOf(this.codierer.getWalzen()[2]));
-		// Steckbrett Felder setzen
-		tfStecker1.setText(this.codierer.getSteckverbindungen()[0][0] + "" +
-				this.codierer.getSteckverbindungen()[0][1]);
-		tfStecker2.setText(this.codierer.getSteckverbindungen()[1][0] + "" +
-				this.codierer.getSteckverbindungen()[1][1]);
-		tfStecker3.setText(this.codierer.getSteckverbindungen()[2][0] + "" +
-				this.codierer.getSteckverbindungen()[2][1]);
-		tfStecker4.setText(this.codierer.getSteckverbindungen()[3][0] + "" +
-				this.codierer.getSteckverbindungen()[3][1]);
-		tfStecker5.setText(this.codierer.getSteckverbindungen()[4][0] + "" +
-				this.codierer.getSteckverbindungen()[4][1]);
-		tfStecker6.setText(this.codierer.getSteckverbindungen()[5][0] + "" +
-				this.codierer.getSteckverbindungen()[5][1]);
-		tfStecker7.setText(this.codierer.getSteckverbindungen()[6][0] + "" +
-				this.codierer.getSteckverbindungen()[6][1]);
-		tfStecker8.setText(this.codierer.getSteckverbindungen()[7][0] + "" +
-				this.codierer.getSteckverbindungen()[7][1]);
-		tfStecker9.setText(this.codierer.getSteckverbindungen()[8][0] + "" +
-				this.codierer.getSteckverbindungen()[8][1]);
-		tfStecker10.setText(this.codierer.getSteckverbindungen()[9][0] + "" +
-				this.codierer.getSteckverbindungen()[9][1]);
-
-	}
+    private final static String[] walzenNr = {"I", "II", "III", "IV", "V"};
+    private final static String[] ringNr = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26"};
+    private final static String[] position = {"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"};
+    private ArrayList<MenuItem> mItem;
+    private String textEingabe;
+    private String textCodiert;
+    private boolean resetDisplay;
+    private Codierer codierer;
+
+
+    //region GUI-Elemente
+    @FXML
+    private TextField tfStecker1, tfStecker2, tfStecker3, tfStecker4, tfStecker5, tfStecker6, tfStecker7, tfStecker8,
+            tfStecker9, tfStecker10, tfCodiert, tfKlartext;
+
+    @FXML
+    private Button btnA, btnB, btnC, btnD, btnE, btnF, btnG, btnH, btnI, btnJ, btnK, btnL, btnM, btnN, btnO, btnP, btnQ,
+            btnR, btnS, btnT, btnU, btnV, btnW, btnX, btnY, btnZ, btnSenden, btnEmpfangen, btnDelete;
+
+    @FXML
+    private Circle circA, circB, circC, circD, circE, circF, circG, circH, circI, circJ, circK, circL, circM, circN,
+            circO, circP, circQ, circR, circS, circT, circU, circV, circW, circX, circY, circZ;
+
+    @FXML
+    private Label lblA, lblB, lblC, lblD, lblE, lblF, lblG, lblH, lblI, lblJ, lblK, lblL, lblM, lblN, lblO, lblP, lblQ,
+            lblR, lblS, lblT, lblU, lblV, lblW, lblX, lblY, lblZ, lblLadeNachricht, lblTagesschluessel,
+            lblSpruchschluessel;
+
+    @FXML
+    private ProgressBar pbLadeNachricht;
+
+    @FXML
+    private MenuButton mBtnWalzPos1, mBtnWalzPos2, mBtnWalzPos3, mBtnNotchPos1, mBtnNotchPos2, mBtnNotchPos3,
+            mBtnStartPos1, mBtnStartPos2, mBtnStartPos3;
+    //endregion
+
+
+
+    @FXML
+    void initialize() {
+
+        // Variablen setzen
+        textEingabe = "";
+        textCodiert = "";
+        resetDisplay = true;
+
+        //Einträge für Walzen
+        menu(mBtnWalzPos1, walzenNr);
+        menu(mBtnWalzPos2, walzenNr);
+        menu(mBtnWalzPos3, walzenNr);
+
+        //Einträge für die Ringe
+        menu(mBtnNotchPos1, ringNr);
+        menu(mBtnNotchPos2, ringNr);
+        menu(mBtnNotchPos3, ringNr);
+
+        //Einträge für die Startpositionen
+        menu(mBtnStartPos1, position);
+        menu(mBtnStartPos3, position);
+        menu(mBtnStartPos2, position);
+
+        //Setze Leucht Event bei Tastendruck
+        leuchten(btnA, circA);
+        leuchten(btnB, circB);
+        leuchten(btnC, circC);
+        leuchten(btnD, circD);
+        leuchten(btnE, circE);
+        leuchten(btnF, circF);
+        leuchten(btnG, circG);
+        leuchten(btnH, circH);
+        leuchten(btnI, circI);
+        leuchten(btnJ, circJ);
+        leuchten(btnK, circK);
+        leuchten(btnL, circL);
+        leuchten(btnM, circM);
+        leuchten(btnN, circN);
+        leuchten(btnO, circO);
+        leuchten(btnP, circP);
+        leuchten(btnQ, circQ);
+        leuchten(btnR, circR);
+        leuchten(btnS, circS);
+        leuchten(btnT, circT);
+        leuchten(btnU, circU);
+        leuchten(btnV, circV);
+        leuchten(btnW, circW);
+        leuchten(btnX, circX);
+        leuchten(btnY, circY);
+        leuchten(btnZ, circZ);
+
+        // Initialisieren des Codierers und setzen der Kenngruppe
+        this.codierer = new Codierer();
+        this.codierer.setKenngruppe("enigma");
+
+        // Beim nächsten Tastendruck erstmal das Display löschen damit falschen Nachrichten geschickt werden.
+        this.resetDisplay = true;
+
+        // Einstellungen aus dem Logbuch auslesen und setzen
+        this.setzeTagesSchluessel();
+        this.setzeSteckverbindungen();
+    }
+
+    /**
+     * Hier werden die TextFelder, welche die Steckverbindungen darstellen,
+     * mit dem Werten die die Klasse Codierer zur Verfügung stellt gefüllt.
+     */
+    private void setzeSteckverbindungen() {
+        tfStecker1.setText(codierer.getSteckverbindungen()[0][0] + "" + codierer.getSteckverbindungen()[0][1]);
+        tfStecker2.setText(codierer.getSteckverbindungen()[1][0] + "" + codierer.getSteckverbindungen()[1][1]);
+        tfStecker3.setText(codierer.getSteckverbindungen()[2][0] + "" + codierer.getSteckverbindungen()[2][1]);
+        tfStecker4.setText(codierer.getSteckverbindungen()[3][0] + "" + codierer.getSteckverbindungen()[3][1]);
+        tfStecker5.setText(codierer.getSteckverbindungen()[4][0] + "" + codierer.getSteckverbindungen()[4][1]);
+        tfStecker6.setText(codierer.getSteckverbindungen()[5][0] + "" + codierer.getSteckverbindungen()[5][1]);
+        tfStecker7.setText(codierer.getSteckverbindungen()[6][0] + "" + codierer.getSteckverbindungen()[6][1]);
+        tfStecker8.setText(codierer.getSteckverbindungen()[7][0] + "" + codierer.getSteckverbindungen()[7][1]);
+        tfStecker9.setText(codierer.getSteckverbindungen()[8][0] + "" + codierer.getSteckverbindungen()[8][1]);
+        tfStecker10.setText(codierer.getSteckverbindungen()[9][0] + "" + codierer.getSteckverbindungen()[9][1]);
+    }
+
+    /**
+     * Die Löschen Funktion löscht das letzte Zeichen im Klartext sowie im Codiert Feld,
+     * der Codierer wird aufgerufen um ebenfalls das letzte Zeichen zu löschen
+     */
+    @FXML
+    private void loeschen() {
+        if (textEingabe.length() == 0) {
+            tfKlartext.setText("");
+            tfCodiert.setText("");
+        } else {
+            textEingabe = textEingabe.substring(0, textEingabe.length() - 1);
+            textCodiert = textCodiert.substring(0, textCodiert.length() - 1);
+            tfKlartext.setText(textEingabe);
+            tfCodiert.setText(textCodiert);
+            codierer.letztesZeichenLoeschen();
+            mBtnStartPos1.setText(String.valueOf(this.codierer.getWalzen()[0]));
+            mBtnStartPos2.setText(String.valueOf(this.codierer.getWalzen()[1]));
+            mBtnStartPos3.setText(String.valueOf(this.codierer.getWalzen()[2]));
+        }
+    }
+
+    @FXML
+    void empfangeFunkspruch() {
+        String[] empfangeneNachricht = this.codierer.empfangeNachricht();
+        if (empfangeneNachricht[0] != null) {
+            this.tfKlartext.setText(empfangeneNachricht[2]);
+            this.tfCodiert.setText(empfangeneNachricht[1]);
+            this.resetDisplay = true;
+
+            // Spruchschluessel in das Feld lblSpruchschluessel schreiben
+            lblSpruchschluessel.setText(this.codierer.empfangenerSpruchschluessel(empfangeneNachricht[2]));
+
+            this.setzeTagesSchluessel();
+        }
+    }
+
+    @FXML
+    private void sendeFunkspruch() {
+        this.tfKlartext.setText("");
+        this.tfCodiert.setText("");
+
+        try {
+            this.codierer.sendeNachricht();
+        } catch (HttpException | IOException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    /**
+     * Methode zum setzen des menuButton Textes auf das ausgewählte MenuItem
+     *
+     * @param mb : MenuButton der Walze
+     * @param mi : MenuItem
+     */
+    private void listener(MenuButton mb, MenuItem mi) {
+        // mb.setText(mi.getText());
+
+        if (mb.getId().equals(mBtnStartPos1.getId())) setzePosition(1, mi.getText().charAt(0));
+        if (mb.getId().equals(mBtnStartPos2.getId())) setzePosition(2, mi.getText().charAt(0));
+        if (mb.getId().equals(mBtnStartPos3.getId())) setzePosition(3, mi.getText().charAt(0));
+        if (mb.getId().equals(mBtnWalzPos1.getId())) setzeWalze(1, mi.getText());
+        if (mb.getId().equals(mBtnWalzPos2.getId())) setzeWalze(2, mi.getText());
+        if (mb.getId().equals(mBtnWalzPos3.getId())) setzeWalze(3, mi.getText());
+        if (mb.getId().equals(mBtnNotchPos1.getId()))
+            setzeRing(1, Integer.parseInt(mi.getText()) - 1);
+        if (mb.getId().equals(mBtnNotchPos2.getId()))
+            setzeRing(2, Integer.parseInt(mi.getText()) - 1);
+        if (mb.getId().equals(mBtnNotchPos3.getId()))
+            setzeRing(3, Integer.parseInt(mi.getText()) - 1);
+    }
+
+    /**
+     * Methode zur Erstellung der Einträge und Action Listener für die einzelnen Menüs
+     *
+     * @param button : Button für die die Einträge erstellt werden sollen
+     */
+    private void menu(MenuButton button, String[] str) {
+        mItem = new ArrayList<>();
+        for (int i = 0; i < str.length; i++) {
+            //Eintrag aus str der Arraylist mi hinzufügen
+            mItem.add(new MenuItem(str[i]));
+            //MenuItem mi dem Button button hinzufügen
+            button.getItems().add(mItem.get(i));
+            int finalI = i;
+            //Listener für die einzelnen Einträge
+            ArrayList<MenuItem> finalMi = mItem;
+            mItem.get(i).setOnAction(e -> listener(button, finalMi.get(finalI)));
+        }
+    }
+
+    /**
+     * Auswertung welcher Button gedrückt wurde
+     *
+     * @param e => ActionEvent des auslösenden Button
+     */
+    @FXML
+    private void gedrueckteTaste(ActionEvent e) {
+
+        //TODO Anbindung an Klasse Hardware
+        if (e.getSource() == btnA){
+            setText(btnA);
+            //leuchten();
+        }
+        if (e.getSource() == btnB) setText(btnB);
+        if (e.getSource() == btnC) setText(btnC);
+        if (e.getSource() == btnD) setText(btnD);
+        if (e.getSource() == btnE) setText(btnE);
+        if (e.getSource() == btnF) setText(btnF);
+        if (e.getSource() == btnG) setText(btnG);
+        if (e.getSource() == btnH) setText(btnH);
+        if (e.getSource() == btnI) setText(btnI);
+        if (e.getSource() == btnJ) setText(btnJ);
+        if (e.getSource() == btnK) setText(btnK);
+        if (e.getSource() == btnL) setText(btnL);
+        if (e.getSource() == btnM) setText(btnM);
+        if (e.getSource() == btnN) setText(btnN);
+        if (e.getSource() == btnO) setText(btnO);
+        if (e.getSource() == btnP) setText(btnP);
+        if (e.getSource() == btnQ) setText(btnQ);
+        if (e.getSource() == btnR) setText(btnR);
+        if (e.getSource() == btnS) setText(btnS);
+        if (e.getSource() == btnT) setText(btnT);
+        if (e.getSource() == btnU) setText(btnU);
+        if (e.getSource() == btnV) setText(btnV);
+        if (e.getSource() == btnW) setText(btnW);
+        if (e.getSource() == btnX) setText(btnX);
+        if (e.getSource() == btnY) setText(btnY);
+        if (e.getSource() == btnZ) setText(btnZ);
+        if (e.getSource() == btnSenden) sendeFunkspruch();
+        if (e.getSource() == btnEmpfangen) empfangeFunkspruch();
+        if (e.getSource() == btnDelete) loeschen();
+    }
+
+    /**
+     * schreibt Buchstaben des gedrückten Knopfes in Textfeld tfrein
+     *
+     * @param b : gedrückter Knopf
+     */
+    private void setText(Button b) {
+        if (textEingabe.length() < 250) {
+            if (this.resetDisplay) {
+                this.tfCodiert.setText("");
+                this.tfKlartext.setText("");
+                this.resetDisplay = false;
+                this.codierer.resetHardware();
+                textCodiert = "";
+                textEingabe = "";
+                // Spruchschlüssel generieren und codieren
+                this.codierer.generateSpruchschluessel();
+                // Spruchschluessel in das Feld lblSpruchschluessel schreiben
+                lblSpruchschluessel.setText(this.codierer.getSpruchschluessel());
+            }
+            textEingabe += b.getText();
+            textCodiert += this.codierer.codiere(b.getText().charAt(0), true);
+
+            tfKlartext.setText(textEingabe);
+            tfCodiert.setText(textCodiert);
+
+            // Position der Walzen aktuallisieren
+            mBtnStartPos1.setText(String.valueOf(this.codierer.getWalzen()[0]));
+            mBtnStartPos2.setText(String.valueOf(this.codierer.getWalzen()[1]));
+            mBtnStartPos3.setText(String.valueOf(this.codierer.getWalzen()[2]));
+        }
+    }
+
+    private void leuchten(Button taste, Circle leuchte) {
+
+        taste.setOnMousePressed(mouseEvent -> leuchte.setStyle("-fx-fill: #FFA500"));
+        taste.setOnMouseReleased(mouseEvent -> {
+            leuchte.setStyle("-fx-background-color: " + taste.getBackground());
+            leuchte.setStyle("-fx-border-color:  #000000");
+        });
+    }
+
+    /**
+     * Setzt die Anzeige des entsprechende Gui-Element auf die entsprechende Walze
+     * ->d.h. welche Walze sitzt auf welcher Position
+     *
+     * @param walzeRoemischNr => gibt die Walzennummer an
+     * @param walzenPosition  => gibt die Position der Walze
+     */
+    private void setzeWalze(int walzenPosition, String walzeRoemischNr) {
+        int walzeNr = 0;
+        switch (walzeRoemischNr) {
+            case "I":
+                walzeNr = 0;
+                break;
+            case "II":
+                walzeNr = 1;
+                break;
+            case "III":
+                walzeNr = 2;
+                break;
+            case "IV":
+                walzeNr = 4;
+                break;
+            case "V":
+                walzeNr = 4;
+                break;
+            default:
+                break;
+        }
+
+        switch (walzenPosition) {
+            case 1:
+                mBtnWalzPos1.setText(walzenNr[walzeNr]);
+                //codierer.setWalze(walzeNr, walzenPosition)
+                break;
+            case 2:
+                mBtnWalzPos2.setText(walzenNr[walzeNr]);
+
+                break;
+            case 3:
+                mBtnWalzPos3.setText(walzenNr[walzeNr]);
+                break;
+            default:
+                break;
+        }
+    }
+
+    /**
+     * Setzt den Notch (position)=> die Mitnahmeposition der Walze (walze) fest
+     * Mitnahmeposition meint => die nächste Walze wird bei erreichen dieser Position (notch)
+     * um eine Stelle versetzt
+     *
+     * @param ringStellung   => gibt die walze an
+     * @param walzenPosition => gibt den notch der Walze (walze) an
+     */
+    private void setzeRing(int walzenPosition, int ringStellung) {
+        switch (walzenPosition) {
+            case 1:
+                mBtnNotchPos1.setText(ringNr[ringStellung]);
+                break;
+            case 2:
+                mBtnNotchPos2.setText(ringNr[ringStellung]);
+                break;
+            case 3:
+                mBtnNotchPos3.setText(ringNr[ringStellung]);
+                break;
+            default:
+                break;
+        }
+    }
+
+    /**
+     * Setzt die Startposition/ aktuelle Position der Walze
+     *
+     * @param walze     => gibt die walze an
+     * @param buchstabe gibt den Startwert bzw die aktuelle Position der Walze (walze) an
+     */
+    private void setzePosition(int walze, char buchstabe) {
+        switch (walze) {
+            case 1:
+                mBtnStartPos1.setText(String.valueOf(buchstabe));
+                break;
+            case 2:
+                mBtnStartPos2.setText(buchstabe + "");
+                break;
+            case 3:
+                mBtnStartPos3.setText(buchstabe + "");
+                break;
+            default:
+                break;
+        }
+    }
+
+    /**
+     * Setzt den aktuellen TagesSchluessel
+     */
+    public void setzeTagesSchluessel() {
+
+        // Umsprungpunkte anzeigen
+        mBtnNotchPos1.setText(String.valueOf(this.codierer.fetchRingstellung()[0]));
+        mBtnNotchPos2.setText(String.valueOf(this.codierer.fetchRingstellung()[1]));
+        mBtnNotchPos3.setText(String.valueOf(this.codierer.fetchRingstellung()[2]));
+        // Walzennummern anzeigen
+        mBtnWalzPos1.setText(String.valueOf(this.codierer.getchWalzenNr()[0]));
+        mBtnWalzPos2.setText(String.valueOf(this.codierer.getchWalzenNr()[1]));
+        mBtnWalzPos3.setText(String.valueOf(this.codierer.getchWalzenNr()[2]));
+        // Position der Walzen anzeigen
+        mBtnStartPos1.setText(String.valueOf(this.codierer.getWalzen()[0]));
+        mBtnStartPos2.setText(String.valueOf(this.codierer.getWalzen()[1]));
+        mBtnStartPos3.setText(String.valueOf(this.codierer.getWalzen()[2]));
+        // Steckbrett Felder setzen
+        tfStecker1.setText(this.codierer.getSteckverbindungen()[0][0] + "" +
+                this.codierer.getSteckverbindungen()[0][1]);
+        tfStecker2.setText(this.codierer.getSteckverbindungen()[1][0] + "" +
+                this.codierer.getSteckverbindungen()[1][1]);
+        tfStecker3.setText(this.codierer.getSteckverbindungen()[2][0] + "" +
+                this.codierer.getSteckverbindungen()[2][1]);
+        tfStecker4.setText(this.codierer.getSteckverbindungen()[3][0] + "" +
+                this.codierer.getSteckverbindungen()[3][1]);
+        tfStecker5.setText(this.codierer.getSteckverbindungen()[4][0] + "" +
+                this.codierer.getSteckverbindungen()[4][1]);
+        tfStecker6.setText(this.codierer.getSteckverbindungen()[5][0] + "" +
+                this.codierer.getSteckverbindungen()[5][1]);
+        tfStecker7.setText(this.codierer.getSteckverbindungen()[6][0] + "" +
+                this.codierer.getSteckverbindungen()[6][1]);
+        tfStecker8.setText(this.codierer.getSteckverbindungen()[7][0] + "" +
+                this.codierer.getSteckverbindungen()[7][1]);
+        tfStecker9.setText(this.codierer.getSteckverbindungen()[8][0] + "" +
+                this.codierer.getSteckverbindungen()[8][1]);
+        tfStecker10.setText(this.codierer.getSteckverbindungen()[9][0] + "" +
+                this.codierer.getSteckverbindungen()[9][1]);
+    }
 }
diff --git a/src/main/resources/projekt/enigma/gui.fxml b/src/main/resources/projekt/enigma/gui.fxml
index afcbb00cf3d4e6dacede96f74d58b64c61443626..fbe012fff419ac1fb406d65f1a618760c8021f68 100644
--- a/src/main/resources/projekt/enigma/gui.fxml
+++ b/src/main/resources/projekt/enigma/gui.fxml
@@ -10,14 +10,13 @@
 <?import javafx.scene.layout.ColumnConstraints?>
 <?import javafx.scene.layout.FlowPane?>
 <?import javafx.scene.layout.GridPane?>
-<?import javafx.scene.layout.Pane?>
 <?import javafx.scene.layout.RowConstraints?>
 <?import javafx.scene.layout.TilePane?>
 <?import javafx.scene.layout.VBox?>
 <?import javafx.scene.shape.Circle?>
 <?import javafx.scene.text.Font?>
 
-<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="677.0" prefWidth="967.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="projekt.enigma.GuiController">
+<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="677.0" prefWidth="967.0" xmlns="http://javafx.com/javafx/8.0.999-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="projekt.enigma.GuiController">
    <children>
       <GridPane layoutY="313.0" prefHeight="393.0" prefWidth="968.0" AnchorPane.bottomAnchor="-7.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="313.0">
         <columnConstraints>
@@ -242,7 +241,7 @@
                   <Font name="System Bold" size="18.0" />
                </font>
             </Button>
-            <Button minHeight="44.0" mnemonicParsing="false" onAction="#loeschen" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="&lt;" textFill="#fffdfd" GridPane.columnIndex="10" GridPane.rowIndex="5">
+            <Button fx:id="btnDelete" minHeight="44.0" mnemonicParsing="false" onAction="#loeschen" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="&lt;" textFill="#fffdfd" GridPane.columnIndex="10" GridPane.rowIndex="5">
                <font>
                   <Font size="18.0" />
                </font>
@@ -605,9 +604,9 @@
       </GridPane>
       <FlowPane layoutX="736.0" layoutY="51.0" prefHeight="173.0" prefWidth="195.0" AnchorPane.rightAnchor="36.0" AnchorPane.topAnchor="51.0">
          <children>
-            <Button mnemonicParsing="false" onAction="#btnempfangen" prefHeight="80.0" prefWidth="195.0" text="Funkspruch empfangen" />
+            <Button fx:id="btnEmpfangen" mnemonicParsing="false" onAction="#empfangeFunkspruch" prefHeight="80.0" prefWidth="195.0" text="Funkspruch empfangen" />
             <Label prefHeight="17.0" prefWidth="195.0" />
-            <Button mnemonicParsing="false" onAction="#btnsenden" prefHeight="80.0" prefWidth="195.0" text="An Funker senden" />
+            <Button fx:id="btnSenden" mnemonicParsing="false" onAction="#sendeFunkspruch" prefHeight="80.0" prefWidth="195.0" text="An Funker senden" />
          </children>
       </FlowPane>
       <GridPane layoutX="23.0" layoutY="222.0" prefHeight="60.0" prefWidth="270.0" AnchorPane.leftAnchor="23.0" AnchorPane.topAnchor="222.0">