diff --git a/src/main/java/de/itstall/App.java b/src/main/java/de/itstall/App.java
index 7419bb27e159dadf463ef9221b469bfd073cb669..8ff5a51f95ce7467cbd1df26b3c232437bba8e68 100644
--- a/src/main/java/de/itstall/App.java
+++ b/src/main/java/de/itstall/App.java
@@ -6,9 +6,7 @@ import javafx.fxml.FXMLLoader;
 import javafx.scene.Parent;
 import javafx.scene.Scene;
 import javafx.stage.Stage;
-
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.TreeMap;
 
 /**
@@ -21,7 +19,18 @@ public class App extends Application {
 
     @Override
     public void start(Stage stage) throws IOException {
-        scene = new Scene(loadFXML("Telefonbuch"));
+
+    	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"));
         stage.setScene(scene);
         stage.show();
     }
diff --git a/src/main/java/de/itstall/TelefonbuchController.java b/src/main/java/de/itstall/TelefonbuchController.java
index 8308ba8d920d914c3e590d7e47343d15b8d47cbd..bc8c4c97b03b04d0dea7296f073c09b16853b7a2 100644
--- a/src/main/java/de/itstall/TelefonbuchController.java
+++ b/src/main/java/de/itstall/TelefonbuchController.java
@@ -6,192 +6,285 @@ import javafx.fxml.FXML;
 import javafx.scene.control.Button;
 import javafx.scene.control.TextField;
 
+import java.util.ArrayList;
+
 public class TelefonbuchController {
 
-    private Kontakt kontakt = new Kontakt();
-
-    @FXML
-    private TextField txtVorname;
-
-    @FXML
-    private TextField txtNachname;
-
-    @FXML
-    private TextField txtStrasse;
-
-    @FXML
-    private TextField txtHNr;
-
-    @FXML
-    private TextField txtPlz;
-
-    @FXML
-    private TextField txtOrt;
-
-    @FXML
-    private TextField txtTelefon;
-
-    @FXML
-    private Button btnNaviLinks;
-
-    @FXML
-    private Button btnNaviRechts;
-
-    @FXML
-    private Button btnNeuerEintrag;
-
-    @FXML
-    private Button btnLoeschen;
-
-    @FXML
-    void loeschen(ActionEvent event) {
-	    deleteKontakt();
-    }
-
-    @FXML
-    void navWeiter(ActionEvent event) {
-	    //kontakt = App.eintraege.get(App.eintraege.n)
-    }
-
-    @FXML
-    void navZurueck(ActionEvent event) {
-
-    }
-
-    @FXML
-    void neuerEintrag(ActionEvent event) {
-	    kontakt = new Kontakt();
-	    txtVorname.setText("");
-	    txtNachname.setText("");
-	    txtStrasse.setText("");
-	    txtHNr.setText("");
-	    txtPlz.setText("");
-	    txtOrt.setText("");
-	    txtTelefon.setText("");
-    }
-
-    @FXML
-    void initialize() {
-        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'.";
-        assert txtHNr != null : "fx:id=\"txtHNr\" was not injected: check your FXML file 'telefonbuch.fxml'.";
-        assert txtPlz != null : "fx:id=\"txtPlz\" was not injected: check your FXML file 'telefonbuch.fxml'.";
-        assert txtOrt != null : "fx:id=\"txtOrt\" was not injected: check your FXML file 'telefonbuch.fxml'.";
-        assert txtTelefon != null : "fx:id=\"txtTelefon\" was not injected: check your FXML file 'telefonbuch.fxml'.";
-        assert btnNaviLinks != null : "fx:id=\"btnNaviLinks\" was not injected: check your FXML file 'telefonbuch.fxml'.";
-        assert btnNaviRechts != null : "fx:id=\"btnNaviRechts\" was not injected: check your FXML file 'telefonbuch.fxml'.";
-        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'.";
-
-        txtVorname.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
-            if(!t1) {
-                if(!kontakt.setVorname(txtVorname.getText())) {
-                    setFieldError(txtVorname, true);
-                } else {
-	                saveKontakt();
-                    setFieldError(txtVorname, false);
-                }
-            }
-        });
-
-        txtNachname.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
-            if(!t1) {
-                if(!kontakt.setNachname(txtNachname.getText())) {
-                    setFieldError(txtNachname, true);
-                } else {
-	                saveKontakt();
-                    setFieldError(txtNachname, false);
-                }
-            }
-        });
-
-        txtStrasse.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
-            if(!t1) {
-                if(!kontakt.setStrasse(txtStrasse.getText())) {
-                    setFieldError(txtStrasse, true);
-                } else {
-	                saveKontakt();
-                    setFieldError(txtStrasse, false);
-                }
-            }
-        });
-
-        txtHNr.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
-            if(!t1) {
-                if(!kontakt.setHausnummer(txtHNr.getText())) {
-                    setFieldError(txtHNr, true);
-                } else {
-	                saveKontakt();
-                    setFieldError(txtHNr, false);
-                }
-            }
-        });
-
-        txtPlz.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
-            if(!t1) {
-                if(!kontakt.setPlz(txtPlz.getText())) {
-                    setFieldError(txtPlz, true);
-                } else {
-	                saveKontakt();
-                    setFieldError(txtPlz, false);
-                }
-            }
-        });
-
-        txtOrt.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
-            if(!t1) {
-                if(!kontakt.setOrt(txtOrt.getText())) {
-                    setFieldError(txtOrt, true);
-                } else {
-	                saveKontakt();
-                    setFieldError(txtOrt, false);
-                }
-            }
-        });
-
-        txtTelefon.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
-            if(!t1) {
-            	if(txtTelefon.getText() != kontakt.getTelefon()) {
-            		deleteKontakt();
-            		saveKontakt();
-	            }
-                if(!kontakt.setTelefon(txtTelefon.getText())) {
-                    setFieldError(txtTelefon, true);
-                } else {
-                	saveKontakt();
-                    setFieldError(txtTelefon, false);
-                }
-            }
-        });
-    }
+	private Kontakt kontakt = new Kontakt();
+
+	@FXML
+	private TextField txtVorname;
+
+	@FXML
+	private TextField txtNachname;
+
+	@FXML
+	private TextField txtStrasse;
+
+	@FXML
+	private TextField txtHNr;
+
+	@FXML
+	private TextField txtPlz;
+
+	@FXML
+	private TextField txtOrt;
+
+	@FXML
+	private TextField txtTelefon;
+
+	@FXML
+	private Button btnNaviLinks;
+
+	@FXML
+	private Button btnNaviRechts;
+
+	@FXML
+	private Button btnNeuerEintrag;
+
+	@FXML
+	private Button btnLoeschen;
+
+	@FXML
+	void loeschen(ActionEvent event) {
+		deleteKontakt();
+	}
+
+	@FXML
+	void navWeiter(ActionEvent event) {
+		kontakt = App.eintraege.get(sucheEintrag(kontakt.getTelefon())[1]);
+		setForm(kontakt);
+	}
+
+	@FXML
+	void navZurueck(ActionEvent event) {
+		kontakt = App.eintraege.get(sucheEintrag(kontakt.getTelefon())[0]);
+		setForm(kontakt);
+	}
+
+	@FXML
+	void neuerEintrag(ActionEvent event) {
+		neuenKontaktAnlegen();
+	}
+
+	@FXML
+	void initialize() {
+		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'.";
+		assert txtHNr != null : "fx:id=\"txtHNr\" was not injected: check your FXML file 'telefonbuch.fxml'.";
+		assert txtPlz != null : "fx:id=\"txtPlz\" was not injected: check your FXML file 'telefonbuch.fxml'.";
+		assert txtOrt != null : "fx:id=\"txtOrt\" was not injected: check your FXML file 'telefonbuch.fxml'.";
+		assert txtTelefon != null : "fx:id=\"txtTelefon\" was not injected: check your FXML file 'telefonbuch.fxml'.";
+		assert btnNaviLinks != null : "fx:id=\"btnNaviLinks\" was not injected: check your FXML file 'telefonbuch.fxml'.";
+		assert btnNaviRechts != null : "fx:id=\"btnNaviRechts\" was not injected: check your FXML file 'telefonbuch.fxml'.";
+		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'.";
+
+		txtVorname.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
+			if (!t1) {
+				if (!kontakt.setVorname(txtVorname.getText())) {
+					setFieldError(txtVorname, true);
+				} else {
+					saveKontakt();
+					setFieldError(txtVorname, false);
+				}
+			}
+		});
+
+		txtNachname.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
+			if (!t1) {
+				if (!kontakt.setNachname(txtNachname.getText())) {
+					setFieldError(txtNachname, true);
+				} else {
+					saveKontakt();
+					setFieldError(txtNachname, false);
+				}
+			}
+		});
+
+		txtStrasse.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
+			if (!t1) {
+				if (!kontakt.setStrasse(txtStrasse.getText())) {
+					setFieldError(txtStrasse, true);
+				} else {
+					saveKontakt();
+					setFieldError(txtStrasse, false);
+				}
+			}
+		});
+
+		txtHNr.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
+			if (!t1) {
+				if (!kontakt.setHausnummer(txtHNr.getText())) {
+					setFieldError(txtHNr, true);
+				} else {
+					saveKontakt();
+					setFieldError(txtHNr, false);
+				}
+			}
+		});
+
+		txtPlz.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
+			if (!t1) {
+				if (!kontakt.setPlz(txtPlz.getText())) {
+					setFieldError(txtPlz, true);
+				} else {
+					saveKontakt();
+					setFieldError(txtPlz, false);
+				}
+			}
+		});
+
+		txtOrt.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
+			if (!t1) {
+				if (!kontakt.setOrt(txtOrt.getText())) {
+					setFieldError(txtOrt, true);
+				} else {
+					saveKontakt();
+					setFieldError(txtOrt, false);
+				}
+			}
+		});
+
+		txtTelefon.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
+			if (!t1) {
+				if (txtTelefon.getText() != kontakt.getTelefon()) {
+					deleteKontakt();
+					saveKontakt();
+				}
+				if (!kontakt.setTelefon(txtTelefon.getText())) {
+					setFieldError(txtTelefon, true);
+				} else {
+					saveKontakt();
+					setFieldError(txtTelefon, false);
+				}
+			}
+		});
+	}
+
+	/**
+	 * Legt ein neues Kontakt Object an
+	 */
+	private void neuenKontaktAnlegen() {
+		resetForm();
+	}
 
 	/**
 	 * Kontakt aus Treemap loeschen
 	 */
 	public void deleteKontakt() {
-    	App.eintraege.remove(txtTelefon.getText());
-    }
+		App.eintraege.remove(txtTelefon.getText());
+		resetForm();
+	}
 
 	/**
 	 * Kontakt in die Treemap speichern
 	 */
 	public void saveKontakt() {
-    	if(!kontakt.getTelefon().isEmpty()) {
-    		App.eintraege.put(kontakt.getTelefon(), kontakt);
-	    }
-    }
+		if (kontakt.getTelefon() != "") {
+			App.eintraege.put(kontakt.getTelefon(), kontakt);
+		}
+	}
 
 	/**
 	 * Background der Felder setzen im Fehler Fall
+	 *
 	 * @param field : Textfeld Object
-	 * @param set : true:Fehler false:Kein Fehler
+	 * @param set   : true:Fehler false:Kein Fehler
 	 */
 	public void setFieldError(TextField field, boolean set) {
-        if(set) {
-            field.setStyle("-fx-control-inner-background: #ff000040;");
-        } else {
-            field.setStyle("-fx-control-inner-background: WHITE;");
-        }
-    }
+		if (set) {
+			field.setStyle("-fx-control-inner-background: #ff000040;");
+		} else {
+			field.setStyle("-fx-control-inner-background: WHITE;");
+		}
+	}
+
+	/**
+	 * Suche die naechste und die letzte Nummer aus der Treemap
+	 *
+	 * @param telefon : String : Gesuchte Telefonnummer
+	 * @return
+	 */
+	public String[] sucheEintrag(String telefon) {
+		/** Initialisieren des Rueckgabe Arrays */
+		String rueckgabe[] = new String[2];
+
+		/** Arraylist als temporaeren Speicher anlegen */
+		ArrayList<String> telefonbuch = new ArrayList<>();
+
+		/** Kopiert die Keys (Telefonnummern) der Treemap in eine Arraylist zum einfacheren durchsuchen */
+		for (String tnr : App.eintraege.keySet()) {
+			telefonbuch.add(tnr);
+		}
+
+		/**
+		 * Uebergebene Telefonnummer ist nicht gesetzt (Leeres Formular) oder existiert nicht
+		 * Zurueck = letzter Eintrag | Weiter = erster Eintrag
+		 */
+		if (telefon.equals("") || telefon == null || !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
+	 */
+	public void resetForm() {
+		kontakt = new Kontakt();
+		txtVorname.setText("");
+		txtNachname.setText("");
+		txtStrasse.setText("");
+		txtHNr.setText("");
+		txtPlz.setText("");
+		txtOrt.setText("");
+		txtTelefon.setText("");
+	}
+
+	/**
+	 * Setzt alle Formular Felder auf die Daten des Objektes
+	 *
+	 * @param kontakt
+	 */
+	public void setForm(Kontakt kontakt) {
+		txtVorname.setText(kontakt.getVorname());
+		txtNachname.setText(kontakt.getNachname());
+		txtStrasse.setText(kontakt.getStrasse());
+		txtHNr.setText(kontakt.getHausnummer());
+		txtPlz.setText(kontakt.getPlz());
+		txtOrt.setText(kontakt.getOrt());
+		txtTelefon.setText(kontakt.getTelefon());
+	}
 }
diff --git a/src/main/java/de/itstall/model/Kontakt.java b/src/main/java/de/itstall/model/Kontakt.java
index 1e88b06806dac9eccd54e3312723189d564d84c5..92851212ed855e0dc5a1639a63b5e5f6041448e0 100644
--- a/src/main/java/de/itstall/model/Kontakt.java
+++ b/src/main/java/de/itstall/model/Kontakt.java
@@ -2,7 +2,7 @@ package de.itstall.model;
 
 public class Kontakt {
 	// region 0 Variables
-	private String vorname, nachname, strasse, hausnummer, plz, ort, telefon;
+	private String vorname, nachname, strasse, hausnummer, plz, ort, telefon = "";
 	//endregion
 
 	// region 1 Setter
@@ -25,7 +25,7 @@ public class Kontakt {
 	}
 
 	public boolean setStrasse(String strasse) {
-		if (nachname.length() <= 50) {
+		if (strasse.length() <= 50) {
 			this.strasse = strasse;
 			return true;
 		} else {
@@ -52,7 +52,7 @@ public class Kontakt {
 	}
 
 	public boolean setOrt(String ort) {
-		if (nachname.length() <= 50) {
+		if (ort.length() <= 50) {
 			this.ort = ort;
 			return true;
 		} else {