diff --git a/src/main/java/de/telefonbuch/App.java b/src/main/java/de/telefonbuch/App.java
index 5a4fc326c3a85c5446973dd2fc33215c4a971efa..d870811d63514b314e441c76ae1d56578dfed0f9 100644
--- a/src/main/java/de/telefonbuch/App.java
+++ b/src/main/java/de/telefonbuch/App.java
@@ -1,13 +1,12 @@
 package de.telefonbuch;
 
-import de.telefonbuch.model.Kontakt;
+import de.telefonbuch.model.Fehler;
 import javafx.application.Application;
 import javafx.fxml.FXMLLoader;
 import javafx.scene.Parent;
 import javafx.scene.Scene;
 import javafx.stage.Stage;
 import java.io.IOException;
-import java.util.TreeMap;
 
 /**
  * JavaFX App
@@ -15,10 +14,20 @@ import java.util.TreeMap;
 public class App extends Application {
 
     private static Scene scene;
-    static TreeMap<String, Kontakt> eintraege = new TreeMap<>();
+    /**
+     * Define debug level
+     *
+     * 0: No Debug messages
+     * 1: most important functions
+     * 2: less important functions
+     * 3: all functions
+     */
+    public static int debug = 0;
 
     @Override
     public void start(Stage stage) throws IOException {
+        new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true);
+
     	scene = new Scene(loadFXML("Telefonbuch"));
         stage.setScene(scene);
         stage.show();
diff --git a/src/main/java/de/telefonbuch/TelefonbuchController.java b/src/main/java/de/telefonbuch/TelefonbuchController.java
index 5fb7490783ac2a539df77d0f6462af0dd3e33b13..e9c0e8a6f5328fb22d5816002b8c39a97bacb395 100644
--- a/src/main/java/de/telefonbuch/TelefonbuchController.java
+++ b/src/main/java/de/telefonbuch/TelefonbuchController.java
@@ -8,8 +8,6 @@ import javafx.scene.control.Alert;
 import javafx.scene.control.Button;
 import javafx.scene.control.ButtonType;
 import javafx.scene.control.TextField;
-
-import java.util.ArrayList;
 import java.util.Optional;
 
 /**
@@ -67,11 +65,9 @@ public class TelefonbuchController {
 	 */
 	@FXML
 	void loeschen() {
-		deleteKontakt(true);
-		if (App.eintraege.size() != 0) {
-			kontakt = App.eintraege.get(erstelleNavigation(kontakt.getTelefon())[0]);
-			setKontaktToForm(kontakt);
-		}
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
+		deleteKontakt();
 	}
 
 	/**
@@ -79,8 +75,10 @@ public class TelefonbuchController {
 	 */
 	@FXML
 	void navWeiter() {
-		if (App.eintraege.size() != 0) {
-			kontakt = App.eintraege.get(erstelleNavigation(kontakt.getTelefon())[1]);
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 2);
+
+		if (db.countKontakte() > 0) {
+			kontakt = db.getKontakt(db.getNavi(kontakt.getTelefon())[2]);
 			setKontaktToForm(kontakt);
 		}
 	}
@@ -90,8 +88,10 @@ public class TelefonbuchController {
 	 */
 	@FXML
 	void navZurueck() {
-		if (App.eintraege.size() != 0) {
-			kontakt = App.eintraege.get(erstelleNavigation(kontakt.getTelefon())[0]);
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 2);
+
+		if (db.countKontakte() > 0) {
+			kontakt = db.getKontakt(db.getNavi(kontakt.getTelefon())[0]);
 			setKontaktToForm(kontakt);
 		}
 	}
@@ -101,8 +101,9 @@ public class TelefonbuchController {
 	 */
 	@FXML
 	void neuerEintrag() {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 2);
+
 		neuenKontaktAnlegen();
-		deaktiviereButtons(true);
 	}
 
 	/**
@@ -110,6 +111,8 @@ public class TelefonbuchController {
 	 */
 	@FXML
 	void initialize() {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 1);
+
 		assert txtVorname != null : "fx:id=\"txtVorname\" was not injected: check your FXML file 'telefonbuch.fxml'.";
 		assert txtNachname != null : "fx:id=\"txtNachname\" was not injected: check your FXML file 'telefonbuch.fxml'.";
 		assert txtStrasse != null : "fx:id=\"txtStrasse\" was not injected: check your FXML file 'telefonbuch.fxml'.";
@@ -124,8 +127,17 @@ public class TelefonbuchController {
 
 		this.db = new Datenbank();
 
+		int anzahlKontakte = db.countKontakte();
+
+		if (anzahlKontakte > 0) {
+			kontakt = db.getKontakt("first");
+			if (!kontakt.getTelefon().equals("")) {
+				setKontaktToForm(kontakt);
+			}
+		}
 		/* Wenn noch keine Einträge vorhanden sind, die Buttons deaktivieren */
-		if (App.eintraege.size() == 0) {
+		else {
+			kontakt = new Kontakt();
 			deaktiviereButtons(true);
 		}
 
@@ -235,28 +247,32 @@ public class TelefonbuchController {
 		txtTelefon.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
 			/* Prüfen ob das Feld verändert wurde */
 			if (!t1) {
-				if(!kontakt.getTelefon().equals("")) {
+				if (!kontakt.getTelefon().equals("")) {
 					kontakt.setId(kontakt.getTelefon());
 				}
-				/* 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().equals(kontakt.getTelefon())) {
-					if (App.eintraege.containsKey(txtTelefon.getText())) {
-						fehler.showErrorDialog("error", "", "Es gibt bereits einen Eintrag im Adressbuch mit dieser Telefonnummer. Die Telefonnummer muss eindeutig sein.");
-					} else {
-						kontakt.setTelefon(txtTelefon.getText());
-						deleteKontakt(false);
-						saveKontakt();
-					}
-				}
+
+				boolean setTelefon = 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())) {
+				if (!setTelefon || txtTelefon.getText() == null) {
 					setFieldError(txtTelefon, true);
 					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);
+
+					/* 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) {
+						Kontakt tempKontakt = db.getKontakt(txtTelefon.getText());
+						if (tempKontakt.getTelefon().equals(txtTelefon.getText())) {
+							fehler.showErrorDialog("error", "", "Es gibt bereits einen Eintrag im Adressbuch mit dieser Telefonnummer. Die Telefonnummer muss eindeutig sein.");
+						} else {
+							saveKontakt();
+							kontakt.setId(kontakt.getTelefon());
+						}
+					}
 				}
 			}
 		});
@@ -266,29 +282,38 @@ public class TelefonbuchController {
 	 * Legt ein neues Kontakt Object an
 	 */
 	private void neuenKontaktAnlegen() {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 2);
+
 		resetForm();
 	}
 
 	/**
 	 * Kontakt aus Treemap loeschen
-	 *
-	 * @param resetForm : boolean : Soll das Formular auch geleert werden?
 	 */
-	private void deleteKontakt(boolean resetForm) {
-
-		if (resetForm) {
-			Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
-			alert.setContentText("Löschen bestätigen");
-			alert.setHeaderText(null);
-			alert.setContentText("Möchten Sie den aktuellen Eintrag wirklich löschen?");
-			Optional<ButtonType> op = alert.showAndWait();
-
-			if (op.isPresent() && op.get() == ButtonType.OK) {
-				App.eintraege.remove(txtTelefon.getText());
+	private void deleteKontakt() {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 2);
+
+		Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
+		alert.setContentText("Löschen bestätigen");
+		alert.setHeaderText(null);
+		alert.setContentText("Möchten Sie den aktuellen Eintrag wirklich löschen?");
+		Optional<ButtonType> op = alert.showAndWait();
+
+		if (op.isPresent() && op.get() == ButtonType.OK) {
+			this.db.deleteKontakt(kontakt.getTelefon());
+
+			if (db.countKontakte() > 0) {
+				kontakt = db.getKontakt("first");
+				if (!kontakt.getTelefon().isEmpty()) {
+					setKontaktToForm(kontakt);
+				}
+			}
+			/* Wenn noch keine Einträge vorhanden sind, die Buttons deaktivieren */
+			else {
+				kontakt = new Kontakt();
+				deaktiviereButtons(true);
 				resetForm();
 			}
-		} else {
-			App.eintraege.remove(txtTelefon.getText());
 		}
 	}
 
@@ -296,10 +321,13 @@ public class TelefonbuchController {
 	 * Kontakt in die Treemap speichern
 	 */
 	private void saveKontakt() {
-		System.out.println(kontakt.toString());
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 1);
+
 		if (!kontakt.getTelefon().equals("")) {
-			App.eintraege.put(kontakt.getTelefon(), kontakt);
+			new Fehler().debug("Contact not empty", false);
+
 			db.addKontakt(kontakt);
+			kontakt.setId(kontakt.getTelefon());
 		}
 	}
 
@@ -307,6 +335,8 @@ public class TelefonbuchController {
 	 * Kontrollieren ob alle Felder fehlerfrei sind. Wenn ja, die Buttons wieder aktivieren.
 	 */
 	private void checkFieldErrors() {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 1);
+
 		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;") &&
@@ -326,6 +356,8 @@ public class TelefonbuchController {
 	 * @param set   : true:Fehler false:Kein Fehler
 	 */
 	private void setFieldError(TextField field, boolean set) {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 1);
+
 		if (set) {
 			field.setStyle("-fx-control-inner-background: #ff000040;");
 			deaktiviereButtons(true);
@@ -335,67 +367,14 @@ public class TelefonbuchController {
 		}
 	}
 
-	/**
-	 * Suche die naechste und die letzte Nummer aus der Treemap
-	 *
-	 * @param telefon : String : Gesuchte Telefonnummer
-	 * @return String[] : 0:vorheriger Eintrag 1:Nächster Eintrag
-	 */
-	private String[] erstelleNavigation(String telefon) {
-		/* Initialisieren des Rueckgabe Arrays */
-		String[] rueckgabe = new String[2];
-
-		/* Arraylist als temporaeren Speicher anlegen */
-
-		/* Kopiert die Keys (Telefonnummern) der Treemap in eine Arraylist zum einfacheren durchsuchen */
-		ArrayList<String> telefonbuch = new ArrayList<>(App.eintraege.keySet());
-
-		/*
-		  Uebergebene Telefonnummer ist nicht gesetzt (Leeres Formular) oder existiert nicht
-		  Zurueck = letzter Eintrag | Weiter = erster Eintrag
-		 */
-		if (telefon.equals("") || !telefonbuch.contains(telefon)) {
-			/* Pruefung ob mehr als ein Eintrag vorhanden */
-			if (telefonbuch.size() > 1) {
-				rueckgabe[0] = telefonbuch.get(telefonbuch.size() - 1);
-				rueckgabe[1] = telefonbuch.get(0);
-			}
-			/* Nur ein Eintrag vorhanden also diesen Eintrag als zurueck/weiter zurueck geben */
-			else {
-				rueckgabe[0] = rueckgabe[1] = telefonbuch.get(0);
-			}
-		} else {
-			/* Das Telefonbuch hat nur einen Eintrag */
-			if (telefonbuch.size() == 1) {
-				rueckgabe[0] = telefonbuch.get(0);
-				rueckgabe[1] = telefonbuch.get(0);
-			}
-			/* Gesuchte Nummer ist an Index 0 */
-			else if (telefonbuch.indexOf(telefon) == 0) {
-				rueckgabe[0] = telefonbuch.get(telefonbuch.size() - 1);
-				rueckgabe[1] = telefonbuch.get(telefonbuch.indexOf(telefon) + 1);
-			}
-			/* Gesuchte Nummer ist am letzten Index */
-			else if (telefonbuch.indexOf(telefon) == telefonbuch.size() - 1) {
-				rueckgabe[0] = telefonbuch.get(telefonbuch.indexOf(telefon) - 1);
-				rueckgabe[1] = telefonbuch.get(0);
-			}
-			/* Gesuchte Nummer befindet sich irgendwo im Array und nicht am ersten/letzten Index */
-			else {
-				rueckgabe[0] = telefonbuch.get(telefonbuch.indexOf(telefon) - 1);
-				rueckgabe[1] = telefonbuch.get(telefonbuch.indexOf(telefon) + 1);
-			}
-		}
-
-		return rueckgabe;
-	}
-
 	/**
 	 * Loescht das Formular und erstellt ein neues Kontakt Objekt
 	 */
 	private void resetForm() {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 2);
+
 		/* Wenn keine Einträge mehr vorhanden sind, auch die Buttons deaktivieren */
-		if (App.eintraege.size() == 0) {
+		if (db.countKontakte() == 0) {
 			deaktiviereButtons(true);
 		}
 		kontakt = new Kontakt();
@@ -414,6 +393,8 @@ public class TelefonbuchController {
 	 * @param kontakt : Kontakt : Kontakt Objekt
 	 */
 	private void setKontaktToForm(Kontakt kontakt) {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 2);
+
 		txtVorname.setText(kontakt.getVorname());
 		txtNachname.setText(kontakt.getNachname());
 		txtStrasse.setText(kontakt.getStrasse());
@@ -429,6 +410,8 @@ public class TelefonbuchController {
 	 * @param deaktivieren : boolean
 	 */
 	private void deaktiviereButtons(boolean deaktivieren) {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 2);
+
 		if (deaktivieren) {
 			btnLoeschen.setDisable(true);
 			btnNaviLinks.setDisable(true);
diff --git a/src/main/java/de/telefonbuch/model/Datenbank.java b/src/main/java/de/telefonbuch/model/Datenbank.java
index f51e83264bbabeec86cf1a05bad144caacefbf2f..702b5197e6e1ba6306115d8f0174bbc092e5466e 100644
--- a/src/main/java/de/telefonbuch/model/Datenbank.java
+++ b/src/main/java/de/telefonbuch/model/Datenbank.java
@@ -7,6 +7,8 @@ public class Datenbank {
 	private Connection con;
 
 	public Datenbank() {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
 		try {
 			this.connect();
 			this.createTables();
@@ -16,6 +18,8 @@ public class Datenbank {
 	}
 
 	private void createTables() throws SQLException {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 1);
+
 		Statement stmt = this.con.createStatement();
 		String createTable = "CREATE TABLE IF NOT EXISTS \"kontakte\" (" +
 				"id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
@@ -27,20 +31,24 @@ public class Datenbank {
 				"ort VARCHAR(50) NULL, " +
 				"telefon VARCHAR(30) UNIQUE NULL" +
 				");";
-		System.out.println(stmt.execute(createTable));
+		stmt.execute(createTable);
 	}
 
 	/**
 	 * Verbindung zur Datenbank aufbauen
 	 */
 	private void connect() throws SQLException {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 1);
+
 		String datenbankdatei = "c:\\temp\\telefonbuch.sqlite";
 
 		this.con = DriverManager.getConnection("jdbc:sqlite:" + datenbankdatei);
-		System.out.println("Erfolgreich mit Datenbank verbunden.");
 	}
 
 	public void addKontakt(Kontakt kontakt) {
+
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 1);
+
 		try {
 			Statement stmt = this.con.createStatement();
 
@@ -48,15 +56,15 @@ public class Datenbank {
 			ResultSet checkResult = stmt.executeQuery(checkKontakt);
 
 			int rows = 0;
-			while(checkResult.next()) {
+			while (checkResult.next()) {
 				rows++;
 			}
 
-			System.out.println("Rows: " + rows);
-
 			String insertKontakt;
 
 			if (rows == 1) {
+				new Fehler().debug("Updating contact", false);
+
 				insertKontakt = "UPDATE kontakte SET " +
 						"vorname=\"" + kontakt.getVorname() + "\", " +
 						"nachname=\"" + kontakt.getNachname() + "\", " +
@@ -65,8 +73,10 @@ public class Datenbank {
 						"plz=\"" + kontakt.getPlz() + "\", " +
 						"ort=\"" + kontakt.getOrt() + "\", " +
 						"telefon=\"" + kontakt.getTelefon() + "\" " +
-						" WHERE telefon=" + kontakt.getId() + ";";
+						" WHERE telefon=\"" + kontakt.getId() + "\";";
 			} else {
+				new Fehler().debug("Insert new contact", false);
+
 				insertKontakt = "INSERT INTO kontakte (vorname, nachname, strasse, hnr, plz, ort, telefon) VALUES (" +
 						"\"" + kontakt.getVorname() + "\", " +
 						"\"" + kontakt.getNachname() + "\", " +
@@ -77,11 +87,138 @@ public class Datenbank {
 						"\"" + kontakt.getTelefon() + "\" " +
 						");";
 			}
-			System.out.println(insertKontakt);
-			System.out.println(stmt.execute(insertKontakt));
+			new Fehler().debug(insertKontakt, false);
+
+			stmt.execute(insertKontakt);
 		} catch (SQLException e) {
 			e.printStackTrace();
 		}
+	}
+
+	public void deleteKontakt(String telefon) {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 2);
+
+		try {
+			Statement stmt = this.con.createStatement();
+
+			String sql = "  DELETE FROM kontakte" +
+					"       WHERE telefon=\"" + telefon + "\";";
+			stmt.execute(sql);
+
+		} catch (SQLException e) {
+			e.printStackTrace();
+		}
+	}
+
+	public Kontakt getKontakt(String telefon) {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
+		Kontakt kontakt = new Kontakt();
+		String sql;
+
+		try {
+			Statement stmt = this.con.createStatement();
+
+			if (telefon.equals("first")) {
+				sql = "SELECT * " +
+						"FROM kontakte " +
+						"LIMIT 1;";
+			} else {
+				sql = "SELECT * " +
+						"FROM kontakte " +
+						"WHERE telefon=\"" + telefon + "\";";
+			}
+			ResultSet rs = stmt.executeQuery(sql);
+
+			while (rs.next()) {
+				if (rs.getString("telefon").equals(telefon) || telefon.equals("first")) {
+					kontakt.setId(rs.getString("telefon"));
+					kontakt.setVorname(rs.getString("vorname"));
+					kontakt.setNachname(rs.getString("nachname"));
+					kontakt.setStrasse(rs.getString("strasse"));
+					kontakt.setHausnummer(rs.getString("hnr"));
+					kontakt.setPlz(rs.getString("plz"));
+					kontakt.setOrt(rs.getString("ort"));
+					kontakt.setTelefon(rs.getString("telefon"));
+
+					if (telefon.equals("first")) {
+						break;
+					}
+				}
+			}
+		} catch (SQLException e) {
+			e.printStackTrace();
+		}
+
+		return kontakt;
+	}
+
+	public String[] getNavi(String telefon) {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
+		String[] naviResult = new String[3];
+
+		try {
+			Statement stmt = this.con.createStatement();
+			String sql = "SELECT\n" +
+					"    CASE\n" +
+					"        WHEN LAG(telefon) OVER (ORDER BY nachname) IS NULL THEN (\n" +
+					"            SELECT telefon\n" +
+					"            FROM kontakte\n" +
+					"            ORDER BY nachname DESC\n" +
+					"            LIMIT 1\n" +
+					"        )\n" +
+					"        ELSE LAG(telefon) OVER (ORDER BY nachname)\n" +
+					"    END last,\n" +
+					"    telefon AS current,\n" +
+					"    CASE\n" +
+					"        WHEN LEAD(telefon) OVER (ORDER BY nachname) IS NULL THEN (\n" +
+					"            SELECT telefon\n" +
+					"            FROM kontakte\n" +
+					"            ORDER BY nachname ASC\n" +
+					"            LIMIT 1\n" +
+					"        )\n" +
+					"        ELSE LEAD(telefon) OVER (ORDER BY nachname)\n" +
+					"    END next\n" +
+					"FROM kontakte\n" +
+					"ORDER BY nachname ASC;";
+
+			ResultSet rs = stmt.executeQuery(sql);
+
+			while (rs.next()) {
+				if (rs.getString("current").equals(telefon)) {
+					naviResult[0] = rs.getString("last");
+					naviResult[1] = rs.getString("current");
+					naviResult[2] = rs.getString("next");
+				}
+			}
+		} catch (SQLException e) {
+			e.printStackTrace();
+		}
+
+		return naviResult;
+	}
+
+	public int countKontakte() {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 2);
+
+		int intResult = 0;
+
+		try {
+			Statement stmt = this.con.createStatement();
+
+			String sql = "  SELECT COUNT(*) AS count" +
+					"       FROM kontakte;";
+			ResultSet rs = stmt.executeQuery(sql);
+
+			intResult = rs.getInt("count");
+
+		} catch (SQLException e) {
+			e.printStackTrace();
+		}
+
+		new Fehler().debug("Result: " + intResult, false);
 
+		return intResult;
 	}
 }
diff --git a/src/main/java/de/telefonbuch/model/Fehler.java b/src/main/java/de/telefonbuch/model/Fehler.java
index 857ce28ccf451c8deef1362b71cd673eabadd48d..2aa434c1a55723ef87997dc29e407d3d86ee883b 100644
--- a/src/main/java/de/telefonbuch/model/Fehler.java
+++ b/src/main/java/de/telefonbuch/model/Fehler.java
@@ -1,5 +1,6 @@
 package de.telefonbuch.model;
 
+import de.telefonbuch.App;
 import javafx.scene.control.Alert;
 import javafx.scene.control.Alert.AlertType;
 
@@ -8,6 +9,9 @@ import javafx.scene.control.Alert.AlertType;
  */
 public class Fehler {
 
+	private String functionPrefix = "- ";
+	private String messagePrefix = "--> ";
+
 	/**
 	 * Zeige Fehler Dialog
 	 *
@@ -16,10 +20,12 @@ public class Fehler {
 	 * @param message : Nachricht der Meldung
 	 */
 	public void showErrorDialog(String type, String subject, String message) {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true);
+
 		Alert alert;
 
 		/* Der Titel darf auch als leerer String übergeben werden, dann wird ein Default gesetzt */
-		if(subject.equals("")) {
+		if (subject.equals("")) {
 			subject = "Es ist ein Fehler aufgetreten";
 		}
 
@@ -46,4 +52,30 @@ public class Fehler {
 		/* Zeige den Dialog an */
 		alert.showAndWait();
 	}
-}
+
+	public void debug(String message, boolean isFunction) {
+		if (App.debug != 0) {
+			if (isFunction) {
+				System.out.println(functionPrefix + message);
+			} else {
+				System.out.println(messagePrefix + message);
+			}
+		}
+	}
+
+	public void debug(String message, boolean isFunction, int debugLevel) {
+
+		if (App.debug != 0 && (App.debug >= debugLevel || App.debug == 3) ) {
+
+			if (isFunction) {
+
+				System.out.println(functionPrefix + message);
+
+			} else {
+
+				System.out.println(messagePrefix + message);
+
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/de/telefonbuch/model/Kontakt.java b/src/main/java/de/telefonbuch/model/Kontakt.java
index 2d88a3f52ffb73c41ceba45c2f27f9413e5f3054..5bba9b80c0ce5efb04646ea998f6266c87ee4e28 100644
--- a/src/main/java/de/telefonbuch/model/Kontakt.java
+++ b/src/main/java/de/telefonbuch/model/Kontakt.java
@@ -15,8 +15,13 @@ public class Kontakt {
 	private String id = "";
 	//endregion
 
-	// region 1 Setter
+	// region 1 Konstruktor
+	public Kontakt() {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true);
+	}
+	// endregion
 
+	// region 2 Setter
 	/**
 	 * Setzt den Vornamen. Dieser darf maximal 50 Zeichen lang sein
 	 * Gibt im erfolgs Fall true und bei einem Fehler false zurück
@@ -24,6 +29,8 @@ public class Kontakt {
 	 * @return boolean
 	 */
 	public boolean setVorname(String vorname) {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
 		if (vorname  != null && vorname.length() <= 50) {
 			this.vorname = vorname;
 			return true;
@@ -39,6 +46,8 @@ public class Kontakt {
 	 * @return boolean
 	 */
 	public boolean setNachname(String nachname) {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
 		if (nachname  != null && nachname.length() <= 50) {
 			this.nachname = nachname;
 			return true;
@@ -54,6 +63,8 @@ public class Kontakt {
 	 * @return boolean
 	 */
 	public boolean setStrasse(String strasse) {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
 		if (strasse  != null && strasse.length() <= 50) {
 			this.strasse = strasse;
 			return true;
@@ -69,6 +80,8 @@ public class Kontakt {
 	 * @return boolean
 	 */
 	public boolean setHausnummer(String hausnummer) {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
 		if (hausnummer != null && hausnummer.length() <= 10) {
 			this.hausnummer = hausnummer;
 			return true;
@@ -84,6 +97,8 @@ public class Kontakt {
 	 * @return boolean
 	 */
 	public boolean setPlz(String plz) {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
 		if (plz != null && plz.length() == 5) {
 			this.plz = plz;
 			return true;
@@ -99,6 +114,8 @@ public class Kontakt {
 	 * @return boolean
 	 */
 	public boolean setOrt(String ort) {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
 		if (ort != null && ort.length() <= 50) {
 			this.ort = ort;
 			return true;
@@ -114,6 +131,8 @@ public class Kontakt {
 	 * @return boolean
 	 */
 	public boolean setTelefon(String telefon) {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
 		if (telefon != null && telefon.length() <= 30 && telefon.length() > 2 && isNumeric(telefon)) {
 			this.telefon = telefon;
 			return true;
@@ -123,12 +142,14 @@ public class Kontakt {
 	}
 	//endregion
 
-	// region 2. Getter
+	// region 3 Getter
 	/**
 	 * Gibt den Vornamen zurück
 	 * @return : String
 	 */
 	public String getVorname() {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
 		return vorname;
 	}
 
@@ -137,6 +158,8 @@ public class Kontakt {
 	 * @return : String
 	 */
 	public String getNachname() {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
 		return nachname;
 	}
 
@@ -145,6 +168,8 @@ public class Kontakt {
 	 * @return : String
 	 */
 	public String getStrasse() {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
 		return strasse;
 	}
 
@@ -153,6 +178,8 @@ public class Kontakt {
 	 * @return : String
 	 */
 	public String getHausnummer() {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
 		return hausnummer;
 	}
 
@@ -161,6 +188,8 @@ public class Kontakt {
 	 * @return : String
 	 */
 	public String getPlz() {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
 		return plz;
 	}
 
@@ -169,6 +198,8 @@ public class Kontakt {
 	 * @return : String
 	 */
 	public String getOrt() {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
 		return ort;
 	}
 
@@ -177,24 +208,47 @@ public class Kontakt {
 	 * @return : String
 	 */
 	public String getTelefon() {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
 		return telefon;
 	}
 	//endregion
 
-	//region 3 Functions
+	//region 4 Functions
 	/**
 	 * Prueft ob der String ausschließlich aus Zahlen besteht
 	 */
 	private boolean isNumeric(String s) {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
 		return s != null && s.matches("[-+]?\\d*\\.?\\d+");
 	}
 
 	public String getId() {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
 		return id;
 	}
 
 	public void setId(String id) {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
 		this.id = id;
 	}
+
+	@Override
+	public String toString() {
+		new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true, 3);
+
+		String strResult = "Vorname: " + this.getVorname() +
+				" Nachname: " + this.getNachname() +
+				" Straße: " + this.getStrasse() +
+				" Hnr: " + this.getHausnummer() +
+				" Plz: " + this.getPlz() +
+				" Ort: " + this.getOrt() +
+				" Telefon: " + this.getTelefon();
+
+		return strResult;
+	}
 	//endregion
 }