diff --git a/rute.cpp b/rute.cpp
index 2e5ba10e3c3843b1db8f5734cd3d9fe9d4a1324d..ab09e8a3e72acac23dfa001be397b2ff4febf26a 100644
--- a/rute.cpp
+++ b/rute.cpp
@@ -125,12 +125,35 @@ bool Rute::finnesStopp(const int indeks) {
     return false;
 }
 
-int Rute::finnDifferanse(const int nr) {
+/**
+ * Funksjon for å sjekke om et klokkeslett er gyldig (00:00-23:59)
+ *
+ * @param time
+ * @param minutt
+ * @return true
+ * @return false
+ */
+bool Rute::gyldigTid(const int time, const int minutt) {
+    if ((time >= 0 && time <= 23) && (minutt >= 0 && minutt <= 59)) {
+        return true;
+    } else
+        return false;
+}
+
+int Rute::finnDifferanse(const int nr, const Retning retning) {
     int totMin = 0;
-    for (auto it = stoppene.begin(); it != stoppene.end(); it++) {
-        totMin += (*it)->hentMin();
-        if ((*it)->hentNr() == nr)
-            return totMin;
+    if (retning == Fram) {
+        for (auto it = stoppene.begin(); it != stoppene.end(); it++) {
+            totMin += (*it)->hentMin();
+            if ((*it)->hentNr() == nr)
+                return totMin;
+        }
+    } else if (retning == Tilbake) {
+        for (auto it = stoppene.rbegin(); it != stoppene.rend(); it++) {
+            if ((*it)->hentNr() == nr)
+                return totMin;
+            totMin += (*it)->hentMin();
+        }
     }
     return -1; // Skal ikke skje
 }
@@ -145,29 +168,76 @@ string Rute::hentNavn(const Retning retning) {
    return startSted;
 }
 
+/**
+ * 
+ * 
+ * @param diff - differanse mellom startsted og aktuelt stoppested i minutter
+ * @param start - faktisk startstedsnavn på ruten
+ * @param stSted - faktisk navn på aktuellt stoppested
+ * @see Rute::gyldigTid(...)
+ */
 void Rute::ruteTabell(const int diff, const string start, const string stSted) {
-    int startT,
-        sluttT,
-        startM,
-        sluttM,
-        tidMellom;
+    int startT, // starttime
+        startTotal, // regner ut total starttid i minutter
+        sluttT, // slutt-time
+        sluttTotal, // regner ut total slutttid i minutter
+        startM, // startminutter
+        sluttM, // slutt-minutter
+        tidMellom, // Tid mellom hver avgang i minutter
+        tPrint, // hjelpevariabel for å sørge for korrekt utskrift av time
+        mPrint; // hjelpevariabel for å sørge for korrekt utskrift av minutter
 
     cout << "\nRuteavganger fra startstedet (" << start << ") - "
          << "avslutt med 0 0):\n\n";
 
     cout << "Fra kl. (00:01 - 23:59): ";
-    cin >> startT >> startM; cin.ignore();
-    while (startT != 0 || startM != 0) {
+    cin >> startT >> startM; cin.ignore(); // Leser starttid
+
+
+    while (!gyldigTid(startT, startM)) { // Sørger for at starttid er gyldig
+        cout << "\nUlovlig klokkeslett. Prøv igjen (tt mm): ";
+        cin >> startT >> startM; cin.ignore();
+    }
+
+
+    while (startT != 0 || startM != 0) { // Så lenge bruker ikke taster 0 0
+        // Leser tid mellom avganger
         tidMellom = lesInt("Tid mellom avganger", MINTID, MAXTID);
-        cout << "Til kl. (" << ((startT < 10) ? "0" : "") << startT 
-             << ':' << ((tidMellom < 10) ? "0" : "")
-             << tidMellom << " - 23:59): ";
+        startTotal = (startT*60)+startM+tidMellom; // Omregner for sjekk
+        tPrint = startTotal/60; // Regner ut gyldig utskrift:
+        mPrint = startTotal%60;
+
+        cout << "Til kl. (" << ((tPrint < 10) ? "0" : "") << tPrint
+             << ':' << ((mPrint < 10) ? "0" : "") << mPrint
+             << " - 23:59): ";
+        // Leser slutt tid
         cin >> sluttT >> sluttM; cin.ignore();
+        sluttTotal = (sluttT*60)+sluttM; // Omregner for sjekk
+        // Sørger for lovlig slutt-tid
+        while (!gyldigTid(sluttT, sluttM) || sluttTotal < startTotal) {
+            cout << "\nUlovlig klokkeslett. Prøv igjen (tt mm): ";
+            cin >> sluttT >> sluttM; cin.ignore();
+            sluttTotal = (sluttT*60)+sluttM; // Omregner for sjekk
+        }
+
+        tPrint = (sluttTotal+1)/60; // Regner ut gyldig utskrift
+        mPrint = (sluttTotal+1)%60;
 
-        cout << "\n\nFra kl. (" << ((sluttT < 10) ? "0" : "") <<  sluttT 
-             << ':' << ((sluttM+1 < 10) ? "0" : "") << sluttM+1
+
+        cout << "\n\nFra kl. (" << ((tPrint < 10) ? "0" : "") <<  tPrint
+             << ':' << ((mPrint < 10) ? "0" : "") << mPrint
              << " - 23:59): ";
-        cin >> startT >> startM; cin.ignore();
+        cin >> startT >> startM; cin.ignore(); // Leser ny starttid
+        startTotal = (startT*60)+startM; // Omregning
+        // Sørger for ny lovlig starttid:
+        while ((!gyldigTid(startT, startM) || startTotal <= sluttTotal)
+                && (startT != 0 || startM != 0)) { // Sørger for at starttid er gyldig
+            cout << "\nUlovlig klokkeslett. Prøv igjen (tt mm): ";
+            cin >> startT >> startM; cin.ignore();
+            startTotal = (startT*60)+startM;
+        }
+
+
     }
 }
 
diff --git a/rute.h b/rute.h
index 78f095f1864b5db84e440dc291ba64bb5aefccb8..7a2fb28a81614139ecebfb0e32419397ee65741f 100644
--- a/rute.h
+++ b/rute.h
@@ -38,8 +38,9 @@ class Rute {
         Rute(std::ifstream & inn);
         bool erListeGyldig();
         bool erTall(std::string nvn);
+        bool gyldigTid(const int time, const int minutt);
         bool finnesStopp(const int indeks);
-        int finnDifferanse(const int nr);
+        int finnDifferanse(const int nr, const Retning retning);
         std::string hentNavn(const Retning retning);
         void ruteTabell(const int diff, const std::string start,
                         const std::string stSted);
diff --git a/ruter.cpp b/ruter.cpp
index 19ee8fda0efa1bbeca80780a4313147a81f37831..ecc1c4b9b7c35f7bb90ea0432693a5f64d4391dd 100644
--- a/ruter.cpp
+++ b/ruter.cpp
@@ -164,8 +164,8 @@ void Ruter::ruteBeskrivelse(const int ruteNr){
  */
 void Ruter::ruteTabell() {
     int ruteNr,
-        stoppestedsNr,
-        differanse;
+        stoppNr,
+        diff;
     char valg;
     string navn,
            startSted;
@@ -199,12 +199,23 @@ void Ruter::ruteTabell() {
             
             if (navn.size() > 0) { // Hvis navn er entydig:
                 // Henter stoppestedets unike nr:
-                stoppestedsNr = gStoppestederBase.hentIndeksVhaNavn(navn) + 1;
+                stoppNr = gStoppestederBase.hentIndeksVhaNavn(navn) + 1;
                 //Hvis stoppestedet finnes på ruten:
-                if (ruten->second->finnesStopp(stoppestedsNr)) {
-                    differanse = ruten->second->finnDifferanse(stoppestedsNr);
-                    startSted = ruten->second->hentNavn(Fram);
-                    ruten->second->ruteTabell(differanse, startSted, navn);
+                if (ruten->second->finnesStopp(stoppNr)) {
+                    switch (valg) {
+                        case 'F': diff =
+                                  ruten->second->finnDifferanse(stoppNr, Fram);
+                                                                         break;
+                                  // Henter differanse ved retning fram
+                        case 'T': diff =
+                                  ruten->second->finnDifferanse(stoppNr, Tilbake);
+                                                                         break;
+                                  // Henter differanse ved retning tilbake
+                    }
+                    
+                    //diff = ruten->second->finnDifferanse(stoppNr);
+                    //startSted = ruten->second->hentNavn(Fram);
+                    ruten->second->ruteTabell(diff, startSted, navn);
 
                 } else // Hvis stoppet ikke finnes på ruten:
                     cout << "\nStoppestedet " << navn << " finnes ikke "