diff --git a/rute.cpp b/rute.cpp
index 874deb3e44d8d0148934e510f19d5c448bc8a7c6..049c12bae35d3816d8a9084462667e2bfd33d215 100644
--- a/rute.cpp
+++ b/rute.cpp
@@ -102,39 +102,6 @@ bool Rute::erListeGyldig() {
     return false;
 }
 
-bool Rute::erNabo(Stopp* s1, Stopp* s2) {
-    int fPos,
-        aPos,
-        temp,
-        avstand;
-
-    auto it = find(stoppene.begin(), stoppene.end(), s1);
-    if (it != stoppene.end()) { // Funn av stoppNr
-        fPos = distance(stoppene.begin(), it);
-    }
-
-    auto it2 = find(stoppene.begin(), stoppene.end(), s2);
-    if (it2 != stoppene.end()) { // Funn av stoppNr
-        aPos = distance(stoppene.begin(), it2);
-    }
-
-    if (fPos < aPos) { // Hvis første er før på ruten enn andre
-        avstand = aPos-fPos; // Setter avstand mellom stopp på ruten
-    } else if (fPos > aPos) {
-        temp = fPos; // Gjør om slik at første stopp på ruten kommer først
-        fPos = aPos;
-        aPos = temp;
-        avstand = aPos-fPos;
-    } else if (fPos == aPos) { // Skal ikke skje
-        cout << "\nHer er det noe alvorlig galt.\n\n";
-    }
-
-    if (avstand == 1) { // Stoppene er naboer
-        return true;
-    }
-    // Stoppene er ikke naboer:
-    return false;
-}
 
 /**
  * Går gjennom et medsendt navn fra bruker, sjekker
@@ -263,9 +230,10 @@ int Rute::finnDifferanse(const int nr, const Retning retning) {
  * @param stoppNr
  * @return int - returnerer hvor i lista stoppet er.
  */
-int Rute::hentRuteIndeks(const int stoppNr) {
+int Rute::hentRuteIndeks(Stopp* p1) {
     int indeks;
-    auto it = find(stoppene.begin(), stoppene.end(), stoppNr);
+
+    auto it = find(stoppene.begin(), stoppene.end(), p1);
     indeks = distance(stoppene.begin(), it);
     return indeks;
 }
@@ -309,15 +277,33 @@ Stopp* Rute::finnStopp(int nr) {
 }
 
 /**
- * TODO: fjernStopp()
- * Husk at her må avstanden mellom stoppene være mer enn direkte naboer (>1)
- * Skal fjerne de i mellom to stoppesteder ikke stoppestedene som blir oppgitt
+ * Fjerner stopp på en bestemt rute mellom to stopp fra brukeren.
+ * Oppdaterer nabo og tid, hvis de stoppene som ender opp som naboer
+ * ikke er naboer fra før.
+ * 
+ * @see Stoppesteder::byttBokstaver(...)
+ * @see Stoppesteder::finnesIndeks(...)
+ * @see Stoppesteder::hentIndeksVhaNavn(...)
+ * @see Stoppesteder::finnEntydig(...)
+ * @see Stoppesteder::hentIndeksVhaNavn(...)
+ * @see Rute::finnStopp(...)
+ * @see Rute::finnesStopp(...)
+ * @see Rute::hentRuteIndeks(...)
+ * @see Stoppesteder::finnDuplikat(...)
+ * @see Stoppested::finnesNabo(...)
+ * @see Stoppested::hentNaboTid(...)
+ * @see Stoppested::settNaboIndeks(...)
+ * @see Stoppested::settNaboTid(...)
+ * 
  */
 void Rute::fjernStopp() {
-    int stoppNr, sIndeks, lIndeks;
+    int sIndeks, lIndeks, sStoppNr, lStoppNr, //s=start, l=last
+        tid; //tid mellom naboer
     string navn, navn2, sNavn, lNavn; //start og last
-    Stopp* sStopp = nullptr;
-    Stopp* lStopp = nullptr;
+        Stopp* p1 = nullptr; //struct peker
+        Stopp* p2 = nullptr; //struct peker
+        Stoppested* sp1 = nullptr; //stoppested(vektor) peker
+        Stoppested* sp2 = nullptr; //stoppested(vektor) peker
 
     auto itS = stoppene.begin();
     cout << "\n\nMellom start\n"
@@ -326,23 +312,25 @@ void Rute::fjernStopp() {
 
     while (navn.size() > 0) {
         navn = gStoppestederBase.byttBokstaver(navn);
-        if (erTall(navn)) { stoppNr = stoi(navn); }
-            if (gStoppestederBase.finnesIndeks(stoppNr-1)) {
-                navn = gStoppestederBase.hentNavnVhaIndeks(stoppNr); }
+        if (erTall(navn)) { sIndeks = stoi(navn); 
+            if (gStoppestederBase.finnesIndeks(sIndeks-1)) { //navn fra bruker
+                navn = gStoppestederBase.hentNavnVhaIndeks(sIndeks); }
+        }
                 sNavn = gStoppestederBase.finnEntydig(navn);
-
-            stoppNr=gStoppestederBase.hentIndeksVhaNavn(sNavn); //finner indeks fra vektor.
-            if (finnesStopp(stoppNr+1)){ //sjekker at stopp finnes på lista.
-                //peker? indeks? hvordan fikse???
-                sIndeks=hentRuteIndeks(stoppNr+1);  //henter hvor på lista stoppet er
-                advance (itS, sIndeks+1); //setter iterator start til en forbi stoppet
+            if (sNavn.size() > 0){
+            sIndeks=gStoppestederBase.hentIndeksVhaNavn(sNavn); //finner indeks fra vektor.
+            p1 = finnStopp(sIndeks+1);
+            if (finnesStopp(sIndeks+1)){ //sjekker at stopp finnes på lista.
+                sStoppNr=hentRuteIndeks(p1);  //henter hvor på lista stoppet er
+                advance (itS, sStoppNr+1); //setter iterator start til en forbi stoppet
+                //fordi advance tar med selv stoppet det starter på, så må en forbi
                 navn = ""; //hopper ut av while.
             }else {
                 cout << "\nStoppet finnes ikke på ruta!";
                 cout << "\n\nMellom start\n"
                 << "Stoppested (entydig navn / tall / ENTER for å avslutte): ";
                 getline(cin, navn);
-
+            }
         }
     }
 
@@ -351,31 +339,47 @@ void Rute::fjernStopp() {
             << "Stoppested (entydig navn / tall / ENTER for å avslutte): ";
             getline(cin, navn2);
 
-            while (navn2.size() > 0) { // Så lenge ikke skrevet enter:
-            navn = gStoppestederBase.byttBokstaver(navn2); // fjerner æøåÆØÅ
-            if (erTall(navn2)) { // Sjekker om input kun er tall
-            stoppNr = stoi(navn2); // Hvis kun tall, gjør om til int
-            }
-            if (gStoppestederBase.finnesIndeks(stoppNr-1)) {
-                // Henter det faktiske navnet
-                navn2 = gStoppestederBase.hentNavnVhaIndeks(stoppNr);
-            }
-            lNavn = gStoppestederBase.finnEntydig(navn);
-            stoppNr=gStoppestederBase.hentIndeksVhaNavn(lNavn);
-            if (finnesStopp(stoppNr+1)){
-                lIndeks=hentRuteIndeks(stoppNr+1);
-                advance (itL, lIndeks);
-                navn = "";
+            while (navn2.size() > 0) {
+            navn2 = gStoppestederBase.byttBokstaver(navn2);
+            if (erTall(navn2)) { lIndeks = stoi(navn2); 
+                if (gStoppestederBase.finnesIndeks(lIndeks-1)) { //navn fra bruker
+                    navn2 = gStoppestederBase.hentNavnVhaIndeks(lIndeks); }
+        }
+            lNavn = gStoppestederBase.finnEntydig(navn2);
+            if (lNavn.size() > 0){
+            lIndeks=gStoppestederBase.hentIndeksVhaNavn(lNavn);
+            p2 = finnStopp(lIndeks+1);
+            if (finnesStopp(lIndeks+1) && sNavn!=lNavn && !erNabo(p1, p2)){
+                lStoppNr=hentRuteIndeks(p2);
+                advance (itL, lStoppNr);
+                navn2 = "";
             }else {
                 cout << "\nStoppet finnes ikke på ruta!";
                 cout << "\nStopp kan ikke være nabo eller samme som start!";
                 cout << "\n\nMellom slutt\n"
                 << "Stoppested (entydig navn / tall / ENTER for å avslutte): ";
-                getline(cin, navn);
+                getline(cin, navn2);
             }
-            stoppene.erase(itS, itL);
-
+        }
+    } 
+    stoppene.erase(itS, itL); //fjerner alt mellom bruker start og slutt.
+    sp1 = gStoppestederBase.finnDuplikat(sNavn); //setter peker til vektoren på start navn
+    sp2 = gStoppestederBase.finnDuplikat(lNavn); //setter peker til vektoren på slutt navn 
+    if(sp2->finnesNabo(sIndeks+1)){ //hvis de er naboer
+        tid = sp2->hentNaboTid(sIndeks);   //hent tiden
+        p2->minutter=tid;   //oppdater tiden i structen
+        cout << "Tiden mellom stoppestedene er allerede registrert som "
+             << tid << "minutter.";
+    }else{ //hvis de ikke er naboer
+        tid=lesInt("Tid til fra forrige stopp", 1, 10); //leser inn tid mellom stopp
+        p2->minutter=tid;   //oppdaterer tiden i struct
+        sp1->settNaboIndeks(lIndeks); //start stopp er nabo med slutt stopp
+        sp1->settNaboTid(tid);  //oppdaterer tiden
+        sp2->settNaboIndeks(sIndeks); //slutt stopp er nabo med start stopp
+        sp2->settNaboTid(tid);  //oppdaterer tiden
     }
+    skrivKort();
+    skrivRute(Fram); //skriver ut oppdatert rute.
 }
 
 /**
diff --git a/rute.h b/rute.h
index c41eda3e0a36102df6ff54e270a275529e3109b9..3247a9d4c793549abc707a7cf1571391ab962206 100644
--- a/rute.h
+++ b/rute.h
@@ -41,8 +41,7 @@ class Rute {
         bool finnesStopp(const int nr);
         bool gyldigTid(const int time, const int minutt);
         int finnDifferanse(const int nr, const Retning retning);
-        Stopp* finnStopp(int nr);
-        int hentRuteIndeks(const int nr);
+        int hentRuteIndeks(Stopp* p1);
         std::string hentNavn(const Retning retning);
         Stopp* finnStopp(int nr);
         void fjernStopp();
diff --git a/ruter.cpp b/ruter.cpp
index a85af7839fe2ab8219403105616028f963000887..964d44417280e0e45d526c214cd9df8bcc2392a4 100644
--- a/ruter.cpp
+++ b/ruter.cpp
@@ -54,12 +54,8 @@ void Ruter::endreRute() {
             }
 
             switch (valg) { // Sender til rett funksjon etter brukervalg:
-                case 'F': ruten->second->fjernStopp(); 
-                          ruten->second->skrivKort(); // Skriver egen info
-                          ruten->second->skrivRute(Fram);   break;
-                case 'S': ruten->second->smettStopp(); 
-                          ruten->second->skrivKort(); // Skriver egen info
-                          ruten->second->skrivRute(Fram);   break;
+                case 'F': ruten->second->fjernStopp();    break;
+                case 'S': ruten->second->smettStopp();    break;
             }
 
         } else // Rutenummeret finnes ikke: