diff --git a/src/main/java/de/itstall/App.java b/src/main/java/de/itstall/App.java
index 8ff5a51f95ce7467cbd1df26b3c232437bba8e68..0dde899eb355d6f3ca7d30e3eebd7f22f54ea53b 100644
--- a/src/main/java/de/itstall/App.java
+++ b/src/main/java/de/itstall/App.java
@@ -19,18 +19,7 @@ public class App extends Application {
 
     @Override
     public void start(Stage stage) throws IOException {
-
-    	Kontakt kontakt = new Kontakt();
-    	kontakt.setTelefon("111");
-    	eintraege.put("111", kontakt);
-	    kontakt = new Kontakt();
-	    kontakt.setTelefon("222");
-	    eintraege.put("222", kontakt);
-	    kontakt = new Kontakt();
-	    kontakt.setTelefon("333");
-	    eintraege.put("333", kontakt);
-
-	    scene = new Scene(loadFXML("Telefonbuch"));
+    	scene = new Scene(loadFXML("Telefonbuch"));
         stage.setScene(scene);
         stage.show();
     }
diff --git a/src/main/java/de/itstall/TelefonbuchController.java b/src/main/java/de/itstall/TelefonbuchController.java
index bc8c4c97b03b04d0dea7296f073c09b16853b7a2..5de8b156e86ecc1d45293422ea94e0f47e413b66 100644
--- a/src/main/java/de/itstall/TelefonbuchController.java
+++ b/src/main/java/de/itstall/TelefonbuchController.java
@@ -1,17 +1,24 @@
 package de.itstall;
 
+import de.itstall.model.Fehler;
 import de.itstall.model.Kontakt;
 import javafx.event.ActionEvent;
 import javafx.fxml.FXML;
 import javafx.scene.control.Button;
 import javafx.scene.control.TextField;
-
 import java.util.ArrayList;
 
+/**
+ * Der Kontroller für unser Telefonbuch
+ */
 public class TelefonbuchController {
 
+	/** Initialisiert die TreeMap für die Kontakte */
 	private Kontakt kontakt = new Kontakt();
 
+	/** Initialisiert das Fehler Objekt */
+	private Fehler fehler = new Fehler();
+
 	@FXML
 	private TextField txtVorname;
 
@@ -45,28 +52,56 @@ public class TelefonbuchController {
 	@FXML
 	private Button btnLoeschen;
 
+	/**
+	 * Action Listener für btnLoeschen
+	 * @param event : ActionEvent
+	 */
 	@FXML
 	void loeschen(ActionEvent event) {
-		deleteKontakt();
+		deleteKontakt(true);
+		if(App.eintraege.size() != 0) {
+			kontakt = App.eintraege.get(sucheEintrag(kontakt.getTelefon())[0]);
+			setKontaktToForm(kontakt);
+		}
 	}
 
+	/**
+	 * Action Listener für btnWeiter
+	 * @param event : ActionEvent
+	 */
 	@FXML
 	void navWeiter(ActionEvent event) {
-		kontakt = App.eintraege.get(sucheEintrag(kontakt.getTelefon())[1]);
-		setForm(kontakt);
+		if(App.eintraege.size() != 0) {
+			kontakt = App.eintraege.get(sucheEintrag(kontakt.getTelefon())[1]);
+			setKontaktToForm(kontakt);
+		}
 	}
 
+	/**
+	 * Action Listener für btnZurueck
+	 * @param event : ActionEvent
+	 */
 	@FXML
 	void navZurueck(ActionEvent event) {
-		kontakt = App.eintraege.get(sucheEintrag(kontakt.getTelefon())[0]);
-		setForm(kontakt);
+		if(App.eintraege.size() != 0) {
+			kontakt = App.eintraege.get(sucheEintrag(kontakt.getTelefon())[0]);
+			setKontaktToForm(kontakt);
+		}
 	}
 
+	/**
+	 * Action Listener für btnNeuerEintrag
+	 * @param event : ActionEvent
+	 */
 	@FXML
 	void neuerEintrag(ActionEvent event) {
 		neuenKontaktAnlegen();
+		deaktiviereButtons(true);
 	}
 
+	/**
+	 * Initialisiert die Komponenten
+	 */
 	@FXML
 	void initialize() {
 		assert txtVorname != null : "fx:id=\"txtVorname\" was not injected: check your FXML file 'telefonbuch.fxml'.";
@@ -81,81 +116,129 @@ public class TelefonbuchController {
 		assert btnNeuerEintrag != null : "fx:id=\"btnNeuerEintrag\" was not injected: check your FXML file 'telefonbuch.fxml'.";
 		assert btnLoeschen != null : "fx:id=\"btnLoeschen\" was not injected: check your FXML file 'telefonbuch.fxml'.";
 
+		/** Wenn noch keine Einträge vorhanden sind, die Buttons deaktivieren */
+		if(App.eintraege.size() == 0) {
+			deaktiviereButtons(true);
+		}
+
+		/** Listener für das Vorname Feld */
 		txtVorname.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
-			if (!t1) {
+			/** Prüfen ob das Feld verändert oder ausgefüllt wurde */
+			if (txtVorname.getText() != null && !txtVorname.getText().equals("") && !t1) {
+				/** Prüfen ob das Feld den Regeln entspricht */
 				if (!kontakt.setVorname(txtVorname.getText())) {
 					setFieldError(txtVorname, true);
-				} else {
+					fehler.showErrorDialog("error", "", "Der Vorname ist auf 50 Zeichen beschränkt");
+				}
+				/** Wenn alles korrekt gelaufen ist, Kontakt speichern und Fehler zurück setzen */
+				else {
 					saveKontakt();
 					setFieldError(txtVorname, false);
 				}
 			}
 		});
 
+		/** Listener für das Nachname Feld */
 		txtNachname.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
-			if (!t1) {
+			/** Prüfen ob das Feld verändert oder ausgefüllt wurde */
+			if (txtNachname.getText() != null && !txtNachname.getText().equals("") && !t1) {
+				/** Prüfen ob das Feld den Regeln entspricht */
 				if (!kontakt.setNachname(txtNachname.getText())) {
 					setFieldError(txtNachname, true);
-				} else {
+					fehler.showErrorDialog("error", "", "Der Nachname ist auf 50 Zeichen beschränkt");
+				}
+				/** Wenn alles korrekt gelaufen ist, Kontakt speichern und Fehler zurück setzen */
+				else {
 					saveKontakt();
 					setFieldError(txtNachname, false);
 				}
 			}
 		});
 
+		/** Listener für das Straßen Feld */
 		txtStrasse.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
-			if (!t1) {
+			/** Prüfen ob das Feld verändert oder ausgefüllt wurde */
+			if (txtStrasse.getText() != null && !txtStrasse.getText().equals("") && !t1) {
+				/** Prüfen ob das Feld den Regeln entspricht */
 				if (!kontakt.setStrasse(txtStrasse.getText())) {
 					setFieldError(txtStrasse, true);
-				} else {
+					fehler.showErrorDialog("error", "", "Die Straße ist auf 50 Zeichen beschränkt");
+				}
+				/** Wenn alles korrekt gelaufen ist, Kontakt speichern und Fehler zurück setzen */
+				else {
 					saveKontakt();
 					setFieldError(txtStrasse, false);
 				}
 			}
 		});
 
+		/** Listener für das Hausnummern Feld */
 		txtHNr.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
-			if (!t1) {
+			/** Prüfen ob das Feld verändert oder ausgefüllt wurde */
+			if (txtHNr.getText() != null && !txtHNr.getText().equals("") && !t1) {
+				/** Prüfen ob das Feld den Regeln entspricht */
 				if (!kontakt.setHausnummer(txtHNr.getText())) {
 					setFieldError(txtHNr, true);
-				} else {
+					fehler.showErrorDialog("error", "", "Die Hausnummer ist auf 10 Zeichen beschränkt");
+				}
+				/** Wenn alles korrekt gelaufen ist, Kontakt speichern und Fehler zurück setzen */
+				else {
 					saveKontakt();
 					setFieldError(txtHNr, false);
 				}
 			}
 		});
 
+		/** Listener für das Plz Feld */
 		txtPlz.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
+			/** Prüfen ob das Feld verändert wurde */
 			if (!t1) {
+				/** Prüfen ob das Feld den Regeln entspricht */
 				if (!kontakt.setPlz(txtPlz.getText())) {
 					setFieldError(txtPlz, true);
-				} else {
+					fehler.showErrorDialog("error", "", "Die Postleitzahl muss 5 Zeichen entsprechen");
+				}
+				/** Wenn alles korrekt gelaufen ist, Kontakt speichern und Fehler zurück setzen */
+				else {
 					saveKontakt();
 					setFieldError(txtPlz, false);
 				}
 			}
 		});
 
+		/** Listener für das Ort Feld */
 		txtOrt.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
-			if (!t1) {
+			/** Prüfen ob das Feld verändert oder ausgefüllt wurde */
+			if (txtOrt.getText() != null && !txtOrt.getText().equals("") && !t1) {
+				/** Prüfen ob das Feld den Regeln entspricht */
 				if (!kontakt.setOrt(txtOrt.getText())) {
 					setFieldError(txtOrt, true);
-				} else {
+					fehler.showErrorDialog("error", "", "Der Ort ist auf 50 Zeichen beschränkt");
+				}
+				/** Wenn alles korrekt gelaufen ist, Kontakt speichern und Fehler zurück setzen */
+				else {
 					saveKontakt();
 					setFieldError(txtOrt, false);
 				}
 			}
 		});
 
+		/** Listener für das Telefon Feld */
 		txtTelefon.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
+			/** Prüfen ob das Feld verändert wurde */
 			if (!t1) {
-				if (txtTelefon.getText() != kontakt.getTelefon()) {
-					deleteKontakt();
+				/** Wenn die Nummer korrekt ausgefüllt wurde und der Kontakt bereits in der DB enthalten war, den Kontakt löschen und neu anlegen */
+				if (!txtTelefon.getText().equals("") &&  txtTelefon.getText() != null && txtTelefon.getText() != kontakt.getTelefon()) {
+					deleteKontakt(false);
 					saveKontakt();
 				}
-				if (!kontakt.setTelefon(txtTelefon.getText())) {
+				/** Wenn das Feld noch leer ist oder nicht den Regeln entspricht, Fehler ausgeben */
+				if (txtTelefon.getText() == null || !kontakt.setTelefon(txtTelefon.getText())) {
 					setFieldError(txtTelefon, true);
-				} else {
+					fehler.showErrorDialog("error", "", "Die Telefonnummer muss mindestens 3 und maximal 30 Ziffern lang sein.");
+				}
+				/** Wenn alles korrekt gelaufen ist, Kontakt speichern und Fehler zurück setzen */
+				else {
 					saveKontakt();
 					setFieldError(txtTelefon, false);
 				}
@@ -172,23 +255,42 @@ public class TelefonbuchController {
 
 	/**
 	 * Kontakt aus Treemap loeschen
+	 * @param resetForm : boolean : Soll das Formular auch geleert werden?
 	 */
-	public void deleteKontakt() {
+	public void deleteKontakt(boolean resetForm) {
 		App.eintraege.remove(txtTelefon.getText());
-		resetForm();
+		if(resetForm) {
+			resetForm();
+		}
 	}
 
 	/**
 	 * Kontakt in die Treemap speichern
 	 */
 	public void saveKontakt() {
-		if (kontakt.getTelefon() != "") {
+		if (!kontakt.getTelefon().equals("")) {
 			App.eintraege.put(kontakt.getTelefon(), kontakt);
 		}
 	}
 
 	/**
-	 * Background der Felder setzen im Fehler Fall
+	 * Kontrollieren ob alle Felder fehlerfrei sind. Wenn ja, die Buttons wieder aktivieren.
+	 */
+	public void checkFieldErrors() {
+		if(!txtVorname.getStyle().equals("-fx-control-inner-background: #ff000040;") &&
+				!txtNachname.getStyle().equals("-fx-control-inner-background: #ff000040;") &&
+				!txtStrasse.getStyle().equals("-fx-control-inner-background: #ff000040;") &&
+				!txtHNr.getStyle().equals("-fx-control-inner-background: #ff000040;") &&
+				!txtPlz.getStyle().equals("-fx-control-inner-background: #ff000040;") &&
+				!txtOrt.getStyle().equals("-fx-control-inner-background: #ff000040;") &&
+				!txtTelefon.getStyle().equals("-fx-control-inner-background: #ff000040;")
+		) {
+			deaktiviereButtons(false);
+		}
+	}
+
+	/**
+	 * Background der Felder setzen im Fehler Fall sowie deaktivieren der Buttons
 	 *
 	 * @param field : Textfeld Object
 	 * @param set   : true:Fehler false:Kein Fehler
@@ -196,8 +298,10 @@ public class TelefonbuchController {
 	public void setFieldError(TextField field, boolean set) {
 		if (set) {
 			field.setStyle("-fx-control-inner-background: #ff000040;");
+			deaktiviereButtons(true);
 		} else {
 			field.setStyle("-fx-control-inner-background: WHITE;");
+			checkFieldErrors();
 		}
 	}
 
@@ -263,6 +367,10 @@ public class TelefonbuchController {
 	 * Loescht das Formular und erstellt ein neues Kontakt Objekt
 	 */
 	public void resetForm() {
+		/** Wenn keine Einträge mehr vorhanden sind, auch die Buttons deaktivieren */
+		if(App.eintraege.size() == 0) {
+			deaktiviereButtons(true);
+		}
 		kontakt = new Kontakt();
 		txtVorname.setText("");
 		txtNachname.setText("");
@@ -276,9 +384,9 @@ public class TelefonbuchController {
 	/**
 	 * Setzt alle Formular Felder auf die Daten des Objektes
 	 *
-	 * @param kontakt
+	 * @param kontakt : Kontakt : Kontakt Objekt
 	 */
-	public void setForm(Kontakt kontakt) {
+	public void setKontaktToForm(Kontakt kontakt) {
 		txtVorname.setText(kontakt.getVorname());
 		txtNachname.setText(kontakt.getNachname());
 		txtStrasse.setText(kontakt.getStrasse());
@@ -287,4 +395,22 @@ public class TelefonbuchController {
 		txtOrt.setText(kontakt.getOrt());
 		txtTelefon.setText(kontakt.getTelefon());
 	}
+
+	/**
+	 * Deaktiviert die Buttons
+	 * @param deaktivieren : boolean
+	 */
+	public void deaktiviereButtons(boolean deaktivieren) {
+		if(deaktivieren) {
+			btnLoeschen.setDisable(true);
+			btnNaviLinks.setDisable(true);
+			btnNaviRechts.setDisable(true);
+			btnNeuerEintrag.setDisable(true);
+		} else if (deaktivieren == false && !txtTelefon.getText().equals("") &&  txtTelefon.getText() != null) {
+			btnLoeschen.setDisable(false);
+			btnNaviLinks.setDisable(false);
+			btnNaviRechts.setDisable(false);
+			btnNeuerEintrag.setDisable(false);
+		}
+	}
 }
diff --git a/src/main/java/de/itstall/model/Fehler.java b/src/main/java/de/itstall/model/Fehler.java
new file mode 100644
index 0000000000000000000000000000000000000000..2cea9d3cff05b2aaa7bc769b0f34f19bd9e5a0b0
--- /dev/null
+++ b/src/main/java/de/itstall/model/Fehler.java
@@ -0,0 +1,50 @@
+package de.itstall.model;
+
+import javafx.scene.control.Alert;
+import javafx.scene.control.Alert.AlertType;
+
+/**
+ * In dieser Klasse werden Fehler behandelt und an den User/Admin/Entwickler ausgegeben
+ */
+public class Fehler {
+
+	/**
+	 * Zeige Fehler Dialog
+	 *
+	 * @param type    : String : Art der Meldung (warning/information/error)
+	 * @param subject : Titel des Dialoges
+	 * @param message : Nachricht der Meldung
+	 */
+	public void showErrorDialog(String type, String subject, String message) {
+		Alert alert;
+
+		/** Der Titel darf auch als leerer String übergeben werden, dann wird ein Default gesetzt */
+		if(subject.equals("")) {
+			subject = "Es ist ein Fehler aufgetreten";
+		}
+
+		/** Welcher Fehler Typ wurde übergeben? */
+		switch (type) {
+			case "warning":
+				alert = new Alert(AlertType.WARNING);
+				break;
+			case "information":
+				alert = new Alert(AlertType.INFORMATION);
+				break;
+			case "error":
+				alert = new Alert(AlertType.ERROR);
+				break;
+			default:
+				alert = new Alert(Alert.AlertType.NONE);
+		}
+		/** Setzt den Titel des Dialoges */
+		alert.setTitle(subject);
+		/** Setzt den Headertext des Dialoges */
+		alert.setHeaderText(null);
+		/** Setzt die Nachricht des Dialoges */
+		alert.setContentText(message);
+
+		/** Zeige den Dialog an */
+		alert.showAndWait();
+	}
+}
diff --git a/src/main/java/de/itstall/model/Kontakt.java b/src/main/java/de/itstall/model/Kontakt.java
index 92851212ed855e0dc5a1639a63b5e5f6041448e0..60a44f0bccadaca5bd36dc7990a024fb76b47ec1 100644
--- a/src/main/java/de/itstall/model/Kontakt.java
+++ b/src/main/java/de/itstall/model/Kontakt.java
@@ -1,13 +1,23 @@
 package de.itstall.model;
 
+/**
+ * Das Model für die Kontakte
+ */
 public class Kontakt {
 	// region 0 Variables
 	private String vorname, nachname, strasse, hausnummer, plz, ort, telefon = "";
 	//endregion
 
 	// region 1 Setter
+
+	/**
+	 * Setzt den Vornamen. Dieser darf maximal 50 Zeichen lang sein
+	 * Gibt im erfolgs Fall true und bei einem Fehler false zurück
+	 * @param vorname : String
+	 * @return boolean
+	 */
 	public boolean setVorname(String vorname) {
-		if (vorname.length() <= 50) {
+		if (vorname  != null && vorname.length() <= 50) {
 			this.vorname = vorname;
 			return true;
 		} else {
@@ -15,8 +25,14 @@ public class Kontakt {
 		}
 	}
 
+	/**
+	 * Setzt den Nachnamen. Dieser darf maximal 50 Zeichen lang sein
+	 * Gibt im erfolgs Fall true und bei einem Fehler false zurück
+	 * @param nachname : String
+	 * @return boolean
+	 */
 	public boolean setNachname(String nachname) {
-		if (nachname.length() <= 50) {
+		if (nachname  != null && nachname.length() <= 50) {
 			this.nachname = nachname;
 			return true;
 		} else {
@@ -24,8 +40,14 @@ public class Kontakt {
 		}
 	}
 
+	/**
+	 * Setzt die Straße. Diese darf maximal 50 Zeichen lang sein
+	 * Gibt im erfolgs Fall true und bei einem Fehler false zurück
+	 * @param strasse : String
+	 * @return boolean
+	 */
 	public boolean setStrasse(String strasse) {
-		if (strasse.length() <= 50) {
+		if (strasse  != null && strasse.length() <= 50) {
 			this.strasse = strasse;
 			return true;
 		} else {
@@ -33,8 +55,14 @@ public class Kontakt {
 		}
 	}
 
+	/**
+	 * Setzt die Hausnummer. Diese darf maximal 10 Zeichen lang sein
+	 * Gibt im erfolgs Fall true und bei einem Fehler false zurück
+	 * @param hausnummer : String
+	 * @return boolean
+	 */
 	public boolean setHausnummer(String hausnummer) {
-		if (hausnummer.length() <= 10) {
+		if (hausnummer != null && hausnummer.length() <= 10) {
 			this.hausnummer = hausnummer;
 			return true;
 		} else {
@@ -42,8 +70,14 @@ public class Kontakt {
 		}
 	}
 
+	/**
+	 * Setzt die Postleitzahl. Diese muss genau 5 Zeichen lang sein
+	 * Gibt im erfolgs Fall true und bei einem Fehler false zurück
+	 * @param plz : String
+	 * @return boolean
+	 */
 	public boolean setPlz(String plz) {
-		if (plz.length() == 5) {
+		if (plz != null && plz.length() == 5) {
 			this.plz = plz;
 			return true;
 		} else {
@@ -51,8 +85,14 @@ public class Kontakt {
 		}
 	}
 
+	/**
+	 * Setzt den Ort. Dieser darf maximal 50 Zeichen lang sein
+	 * Gibt im erfolgs Fall true und bei einem Fehler false zurück
+	 * @param ort : String
+	 * @return boolean
+	 */
 	public boolean setOrt(String ort) {
-		if (ort.length() <= 50) {
+		if (ort != null && ort.length() <= 50) {
 			this.ort = ort;
 			return true;
 		} else {
@@ -60,8 +100,14 @@ public class Kontakt {
 		}
 	}
 
+	/**
+	 * Setzt die Telefonnummer. Diese muss zwischen 3 und 50 Zeichen lang sein
+	 * Gibt im erfolgs Fall true und bei einem Fehler false zurück
+	 * @param telefon : String
+	 * @return boolean
+	 */
 	public boolean setTelefon(String telefon) {
-		if (telefon.length() <= 30 && telefon.length() > 2 && isNumeric(telefon)) {
+		if (telefon != null && telefon.length() <= 30 && telefon.length() > 2 && isNumeric(telefon)) {
 			this.telefon = telefon;
 			return true;
 		} else {
@@ -71,30 +117,58 @@ public class Kontakt {
 	//endregion
 
 	// region 2. Getter
+	/**
+	 * Gibt den Vornamen zurück
+	 * @return : String
+	 */
 	public String getVorname() {
 		return vorname;
 	}
 
+	/**
+	 * Gibt den Nachnamen zurück
+	 * @return : String
+	 */
 	public String getNachname() {
 		return nachname;
 	}
 
+	/**
+	 * Gibt die Straße zurück
+	 * @return : String
+	 */
 	public String getStrasse() {
 		return strasse;
 	}
 
+	/**
+	 * Gibt die Hausnummer zurück
+	 * @return : String
+	 */
 	public String getHausnummer() {
 		return hausnummer;
 	}
 
+	/**
+	 * Gibt die Postleitzahl zurück
+	 * @return : String
+	 */
 	public String getPlz() {
 		return plz;
 	}
 
+	/**
+	 * Gibt den Ort zurück
+	 * @return : String
+	 */
 	public String getOrt() {
 		return ort;
 	}
 
+	/**
+	 * Gibt die Telefonnummer zurück
+	 * @return : String
+	 */
 	public String getTelefon() {
 		return telefon;
 	}
@@ -102,7 +176,7 @@ public class Kontakt {
 
 	//region 3 Functions
 	/**
-	 * Prueft ob String aus Zahlen besteht
+	 * Prueft ob der String ausschließlich aus Zahlen besteht
 	 */
 	public boolean isNumeric(String s) {
 		return s != null && s.matches("[-+]?\\d*\\.?\\d+");