diff --git a/ruter.cpp b/ruter.cpp
index 08a23bcd9f8b0189a3f1041cf89a7e15f38f1e7e..2c15f8738fb34c9ff113216c883d4714f021a405 100644
--- a/ruter.cpp
+++ b/ruter.cpp
@@ -5,9 +5,11 @@ using namespace std;
 extern Stoppesteder* gStoppesteder;
 
 Ruter::Ruter() {
+    lesFraFil();
 }
 
 Ruter::~Ruter() {
+    skrivTilFil();
 }
 
 void Ruter::ny(const int& nr) {
@@ -21,6 +23,7 @@ void Ruter::ny(const int& nr) {
             break;
         case 1: {
             Buss* buss = new Buss;
+            buss->lesData();
             if (buss->ny(-1, -1) != nullptr)
                 alleRuter.insert(pair<int, Rute*>(nr, buss));
             break;
@@ -183,4 +186,44 @@ int Ruter::lesRute() {
     int ruteNr;
     ruteNr = lesInt("Skriv inn rute nummer", MIN_RUTER, MAX_RUTER);
     return ruteNr;
+}
+
+void Ruter::lesFraFil() {
+    int antallRuter, i;
+    antallRuter = i = 0;
+    string type = "";
+    vector<string> typeSplittet;
+    ifstream fil(STI_RUTER);
+    if (fil) {
+        fil >> antallRuter;
+        fil.ignore();
+        while (!fil.eof() && i < antallRuter) {
+            getline(fil, type);
+            typeSplittet = hjelp.splittStreng('*', type);
+            if(typeSplittet[1] == "Buss") {
+                Buss* buss = new Buss;
+                buss->lesFraFil(fil);
+                alleRuter.insert(pair<int, Rute*>(stoi(typeSplittet.front()), buss));
+            }
+            else if (typeSplittet[1] == "Bane") {
+                Bane * bane = new Bane;
+                bane->lesFraFil(fil);
+                alleRuter.insert(pair<int, Rute*>(stoi(typeSplittet.front()), bane));
+            }
+            i++;
+        }
+        fil.close();
+    } else
+        cout << "\nError: " << STI_RUTER << " ble ikke funnet!"
+             << '\n';
+}
+
+void Ruter::skrivTilFil() {
+    ofstream fil(STI_RUTER);
+    fil << alleRuter.size() << '\n';
+    for (const auto & val : alleRuter) {
+        fil << val.first << '*';
+        val.second->skrivTilFil(fil);
+        fil << "X" << '\n';
+    }
 }
\ No newline at end of file
diff --git a/ruter.h b/ruter.h
index 66271c21566388915701ab704a311c80dceeb54d..181e4a5d2f8d7189015e54aee61585a94b5976ed 100644
--- a/ruter.h
+++ b/ruter.h
@@ -2,6 +2,7 @@
 #define __RUTER_H
 
 #include <algorithm>
+#include <fstream>
 #include <iostream>
 #include <map>
 #include <string>
@@ -10,10 +11,11 @@
 #include "buss.h"
 #include "lesData3.h"
 #include "rute.h"
+#include "hjelpeFunksjoner.h"
 
 class Ruter {  //: public Rute
    private:
-    // Rute rute;
+    HjelpeFunksjoner hjelp;
 
    public:
     std::map<int, Rute*> alleRuter;
@@ -29,6 +31,8 @@ class Ruter {  //: public Rute
     void spesifikkRuteData(const int& ruteNr);
     void endre();
     int lesRute();
+    void lesFraFil();
+    void skrivTilFil();
 };
 
 #endif  //__RUTER_H
\ No newline at end of file