diff --git a/rute.cpp b/rute.cpp
index 0b8acc32caa5714281249cf00c3fc7604ad1b57d..d610d9d7f6e669d4a08456bee9df670ab33bf203 100644
--- a/rute.cpp
+++ b/rute.cpp
@@ -11,12 +11,14 @@
 #include <fstream>
 #include "const.h"
 #include "rute.h"
+#include "ruter.h"
 #include "stoppested.h"
 #include "stoppesteder.h"
 #include "LesData3.h"
 using namespace std;
 
 extern Stoppesteder gStoppestederBase;
+extern Ruter gRuterBase;
 
 //********STOPP FUNKSJONER*******************
 
@@ -100,6 +102,40 @@ 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
  * alle tegn i strengen er tall eller ei
@@ -148,7 +184,7 @@ bool Rute::gyldigTid(const int time, const int minutt) {
 /**
  * Finner antall minutter mellom et faktisk stopp på ruten
  * og startstoppestedet på ruten
- * 
+ *
  * @param nr - Et stoppesteds unike nummer
  * @param retning - Fram eller Tilbake (ulikt startsted) avhengig
  *                  av hvilken vei ruten går
@@ -179,9 +215,23 @@ int Rute::finnDifferanse(const int nr, const Retning retning) {
     return -1; // Skal ikke skje
 }
 
+/**
+ * Henter hvor et stopp er i rute listen stoppene.
+ *
+ * @param stoppNr
+ * @return int - returnerer hvor i lista stoppet er.
+ */
+int Rute::hentRuteIndeks(const int stoppNr) {
+    int indeks;
+    auto it = find(stoppene.begin(), stoppene.end(), stoppNr);
+    indeks = distance(stoppene.begin(), it);
+    return indeks;
+}
+
+
 /**
  * Henter navn på startstasjonen på en rute
- * 
+ *
  * @param retning Om ruten er Fram (original) eller Tilbake ("baklengs")
  * @return Navnet på startstopp på rute avhengig av retning
  * @see Stoppesteder::hentNavnVhaIndeks(...)
@@ -195,21 +245,82 @@ string Rute::hentNavn(const Retning retning) {
         startSted = gStoppestederBase.hentNavnVhaIndeks(stoppene.back()->hentNr());
 
    return startSted; // Returnerer navnet på startstopp på ruten
-}
+} //må endres til å ta imot peker! return peker.
 
 /**
- * TODO: fjernStopp() 
+ * 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
  */
 void Rute::fjernStopp() {
+    int stoppNr, sIndeks, lIndeks;
+    string navn, navn2, sNavn, lNavn; //start og last
+    Stopp* sStopp = nullptr;
+    Stopp* lStopp = nullptr;
+
+    auto itS = stoppene.begin();
+    cout << "\n\nMellom start\n"
+         << "Stoppested (entydig navn / tall / ENTER for å avslutte): ";
+    getline(cin, navn);
+
+    while (navn.size() > 0) {
+        navn = gStoppestederBase.byttBokstaver(navn);
+        if (erTall(navn)) { stoppNr = stoi(navn); }
+            if (gStoppestederBase.finnesIndeks(stoppNr-1)) {
+                navn = gStoppestederBase.hentNavnVhaIndeks(stoppNr); }
+                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
+                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);
+
+        }
+    }
+
+            auto itL= stoppene.begin(); //setter slutt(last) stopper til start.
+            cout << "\n\nMellom slutt\nStopp kan ikke være nabo eller samme som start!"
+            << "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 = "";
+            }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);
+            }
+            stoppene.erase(itS, itL);
+
+    }
 }
 
 /**
  * Leser inn og oppretter en rutetabell for et gitt stoppested på en rute
  * med utgangspunkt i omregning fra et startsted på ruten
- * 
+ *
  * @param diff - differanse mellom startsted og aktuelt stoppested i minutter
  * @param start - faktisk startstedsnavn på ruten
  * @param stSted - faktisk navn på aktuellt stoppested
@@ -241,12 +352,12 @@ void Rute::ruteTabell(const int diff, const string start, const string stSted) {
     startTid = (startT*60)+startM; // Regner ut første avgangstid
 
     // Sørger for at starttid er gyldig, samt ikke senere enn 23:53 (1433)
-    while (!gyldigTid(startT, startM) || startTid > 1433) { 
+    while (!gyldigTid(startT, startM) || startTid > 1433) {
         cout << "\nUlovlig klokkeslett. Prøv igjen (tt mm): ";
         cin >> startT >> startM; cin.ignore();
         startTid = (startT*60)+startM;
     }
-    
+
     while (startT != 0 || startM != 0) { // Så lenge bruker ikke taster 0 0
         avgangsTid = startTid+diff;
         // Må ha en sjekk her for lang tid mellom stoppesteder, som
@@ -254,13 +365,13 @@ void Rute::ruteTabell(const int diff, const string start, const string stSted) {
         // så man ikke får output med et klokkeslett 25:xx f.eks.
         if (avgangsTid < 1440) { // < 24:00
             avgangstider.push_back(avgangsTid); // Legger første avgang
-                                                // i vector    
+                                                // i vector
         } else { // Omregning av hva som skal i vector, for spesielle
                  // tilfeller, unngå 25:xx f.eks.:
             avgangstider.push_back(avgangsTid%1440);
         }
-        
-        
+
+
         // Leser tid mellom avganger:
         // Ny sjekk her for å sørge for riktig output til bruker
         // basert på valgt "fra"-tid. Godtar ikke 6-120 min for
@@ -311,7 +422,7 @@ void Rute::ruteTabell(const int diff, const string start, const string stSted) {
             startTotal = (startT*60)+startM; // Omregning
             // Sørger for ny lovlig starttid:
             while ((!gyldigTid(startT, startM) || startTotal <= sluttTotal)
-                && (startT != 0 || startM != 0)) { 
+                && (startT != 0 || startM != 0)) {
                 cout << "\nUlovlig klokkeslett. Prøv igjen (tt mm): ";
                 cin >> startT >> startM; cin.ignore();
                 startTotal = (startT*60)+startM; // Omregning
@@ -319,10 +430,10 @@ void Rute::ruteTabell(const int diff, const string start, const string stSted) {
             startTid = (startT*60)+startM; // Omregning
         } else { // Avslutter innlesning fra bruker hvis slutttid er 23:53
                  // eller senere (da det må være +1 min minimum til neste
-                 // avgang). 
+                 // avgang).
             startT = 0; startM = 0; // Sørger for stopp av innlesning
         }
-        
+
     }
     cout << "\n\nRutetabell for stoppested: " << stSted << "\n\n";
          // Sorterer vektoren, slik at man ikke får duplikat utskrift av
@@ -342,7 +453,7 @@ void Rute::ruteTabell(const int diff, const string start, const string stSted) {
             } else { // Hvis time er mer enn 24 (skjer ved stor avstand)
                      // mellom stoppesteder på en rute, gjør modulo
                      // slik at det ikke skrives ut 25:xx f.eks.:
-                cout << '\n' << ((timer%24 < 10) ? "0" : "") << timer%24 
+                cout << '\n' << ((timer%24 < 10) ? "0" : "") << timer%24
                      << ": " << ((minutter < 10) ? "0" : "")
                      << minutter;
             }
@@ -445,7 +556,7 @@ void Rute::smettStopp() {
     cout << "\n\nMellom start\n"
          << "Stoppested (entydig navn / tall / ENTER for å avslutte): ";
     getline(cin, navn);
-    
+
     while (navn.size() > 0) { // Så lenge ikke skrevet enter:
         navn = gStoppestederBase.byttBokstaver(navn); // fjerner æøåÆØÅ
 
@@ -531,13 +642,13 @@ void Rute::lesData() {
             // Henter et stoppesteds faktiske indeks i vector:
             indeks = gStoppestederBase.hentIndeksVhaNavn(fNavn);
             // Hvis stopp ikke finnes fra før på ruten:
-            if (!finnesStopp(indeks+1)) { 
-                
+            if (!finnesStopp(indeks+1)) {
+
                 if (stoppene.size() > 0) { // Hvis ikke første stopp på ruten
                 // Henter peker til eget stoppested:
                 nStopp = gStoppestederBase.finnDuplikat(fNavn);
                     // Hvis nabo finnes fra før:
-                    if (nStopp->finnesNabo(naboIndeks+1)) { 
+                    if (nStopp->finnesNabo(naboIndeks+1)) {
                         // Henter naboens indeks
                         naboIndeks = nStopp->hentNaboIndeks(naboIndeks+1);
                         // Henter tid til naboen:
@@ -546,7 +657,7 @@ void Rute::lesData() {
                         nyStopp = new Stopp(indeks+1, tidTilF);
                         stoppene.push_back(nyStopp); // Legges i lista
                         // Oppdaterer naboindeks for videre bruk:
-                        naboIndeks = indeks; 
+                        naboIndeks = indeks;
                         cout << "\nTiden mellom stoppestedene er allerede"
                              << " registrert som "
                              << tidTilF << " minutter.\n";
@@ -581,11 +692,11 @@ void Rute::lesData() {
                     // forrige nabo å være 0, da første stopp på ruten
                     stoppene.push_back(nyStopp); // Legges til ruten
                     // Oppdaterer naboindeks for videre bruk
-                    naboIndeks = indeks; 
+                    naboIndeks = indeks;
                 }
                 // Setter peker til forrige stopp til å peke på riktig
                 // stoppested for videre bruk:
-                fStopp = nStopp; 
+                fStopp = nStopp;
             } else // Stoppet finnes allerede på ruten:
                 cout << "\nStoppet er allerede registrert på ruten!\n";
         } else { // Hvis ikke entydig:
diff --git a/rute.h b/rute.h
index 451328ed3b81ea61fe08be59e2366ffca404eccd..1cd08a7c1f4e393304d766f454ceb4aea9566363 100644
--- a/rute.h
+++ b/rute.h
@@ -36,10 +36,13 @@ class Rute {
         Rute();
         Rute(std::ifstream & inn);
         bool erListeGyldig();
+        bool Rute::erNabo(Stopp* s1, Stopp* s2);
         bool erTall(std::string nvn);
         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);
         std::string hentNavn(const Retning retning);
         void fjernStopp();
         void ruteTabell(const int diff, const std::string start,
@@ -53,8 +56,8 @@ class Rute {
         virtual void skrivData() const;
         virtual void skrivKort() const;
         virtual void skrivTilFil(std::ofstream & ut);
-        
-        
+
+
 };
 
 
diff --git a/ruter.cpp b/ruter.cpp
index 1e1612f15eebb8794779736ecbc9d03190612a99..a85af7839fe2ab8219403105616028f963000887 100644
--- a/ruter.cpp
+++ b/ruter.cpp
@@ -54,8 +54,12 @@ void Ruter::endreRute() {
             }
 
             switch (valg) { // Sender til rett funksjon etter brukervalg:
-                case 'F': ruten->second->fjernStopp(); break;
-                case 'S': ruten->second->smettStopp(); break;
+                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;
             }
 
         } else // Rutenummeret finnes ikke: