diff --git a/VerkkokauppaIO.java b/VerkkokauppaIO.java
index 56a714abb09505e8e430b1d669e9a5e4d38f5efe..7c2361bfe92fca9e70caebca835ae86be75719e6 100644
--- a/VerkkokauppaIO.java
+++ b/VerkkokauppaIO.java
@@ -11,11 +11,12 @@ import java.util.Scanner;
 public class VerkkokauppaIO {
 
     public static void main(String[] args) {
+        
         // Tähän voi kirjoittaa koodia, jolla testata
         // kirjoitus- ja lukumetodien toimintaa helposti
     }
 
-    private static final String EROTIN = ";";
+    public static final String EROTIN = ";";
 
     public static void kirjoitaTiedosto(String tiedostonNimi,
                                         String sisalto) {
@@ -67,9 +68,10 @@ public class VerkkokauppaIO {
         kirjoitaTiedosto(tiedostonNimi, data);
     }
 
+
     /**
      * Palauttaa uuden asiakasolion annetun datarivin perusteella.
-     * Rivillä tulee olla asiakasnumero, nimi ja tehdyt ostot tässä
+     * Rivillä tulee olla asiakastyyppi, asiakasnumero, nimi ja tehdyt ostot tässä
      * järjestyksessä erotettuna merkillä
      * <code>VerkkokauppaIO.EROTIN</code>
      *
@@ -77,15 +79,25 @@ public class VerkkokauppaIO {
      * @return uuden Asiakas-olion dataan perustuen
      */
     public static Asiakas parsiAsiakas(String data) {
-        String[] tiedot = data.split(VerkkokauppaIO.EROTIN);
-        // Tässä vaiheessa tulee tietää tietojen järjestys
-        String asNro = tiedot[0];
-        String nimi = tiedot[1];
-        double ostot = Double.parseDouble(tiedot[2]);
+    String[] tiedot = data.split(VerkkokauppaIO.EROTIN);
+
+        if (tiedot[0].equals("KantaAsiakas")) {
+            String asNro = tiedot[1];
+            String nimi = tiedot[2];
+            double ostot = Double.parseDouble(tiedot[3]);
+            int alennus = Integer.parseInt(tiedot[4]);
+
+            return new KantaAsiakas(asNro, nimi, ostot, alennus);
+        } else { 
+            String asNro = tiedot[1];
+            String nimi = tiedot[2];
+            double ostot = Double.parseDouble(tiedot[3]);
 
-        return new Asiakas(asNro, nimi, ostot);
+            return new Asiakas(asNro, nimi, ostot);
+        }
     }
 
+
     /**
      * Metodi lukee asiakkaat annetun nimisestä tiedostosta ja
      * palauttaa sisällön mukaisen listan Asiakas-olioita.
@@ -138,4 +150,54 @@ public class VerkkokauppaIO {
         }
         return null;
     }
+
+    public static void kirjoitaOstotapahtumat(ArrayList<Ostotapahtuma> ostotapahtumat, String tiedostonNimi) {
+        StringBuilder data = new StringBuilder();
+        for (Ostotapahtuma ostotapahtuma : ostotapahtumat) {
+            data.append(ostotapahtuma.getData(EROTIN)).append("\n");
+        }
+        kirjoitaTiedosto(tiedostonNimi, data.toString());
+    }
+
+    public static ArrayList<Ostotapahtuma> lueOstotapahtumat(String tiedostonNimi) {
+        ArrayList<Ostotapahtuma> ostotapahtumat = new ArrayList<>();
+        ArrayList<String> data = lueTiedosto(tiedostonNimi);
+        for (String rivi : data) {
+            ostotapahtumat.add(new Ostotapahtuma(rivi.split(EROTIN)));
+        }
+        return ostotapahtumat;
+    }
+
+    public static void kirjoitaMyyjat(ArrayList<Myyja> myyjat, String tiedostonNimi) {
+        StringBuilder data = new StringBuilder();
+        for (Myyja myyja : myyjat) {
+            data.append(myyja.getData(EROTIN)).append("\n");
+        }
+        kirjoitaTiedosto(tiedostonNimi, data.toString());
+    }
+
+    public static ArrayList<Myyja> lueMyyjat(String tiedostonNimi) {
+        ArrayList<Myyja> myyjat = new ArrayList<>();
+        ArrayList<String> data = lueTiedosto(tiedostonNimi);
+        for (String rivi : data) {
+            myyjat.add(new Myyja(rivi.split(EROTIN)));
+        }
+        return myyjat;
+    }
+    
+     public void lataaTiedot() {
+        asiakkaat = VerkkokauppaIO.lueAsiakkaat("asiakkaat.txt");
+        myyjat = VerkkokauppaIO.lueMyyjat("myyjat.txt");
+        tuotteet = VerkkokauppaIO.lueTuotteet("tuotteet.dat");
+        ostotapahtumat = VerkkokauppaIO.lueOstotapahtumat("ostotapahtumat.txt");
+        System.out.println("Tiedot ladattu onnistuneesti.");
+    }
+
+    public void tallennaTiedot() {
+        VerkkokauppaIO.kirjoitaAsiakkaat(asiakkaat, "asiakkaat.txt");
+        VerkkokauppaIO.kirjoitaMyyjat(myyjat, "myyjat.txt");
+        VerkkokauppaIO.kirjoitaTuotteet(tuotteet, "tuotteet.dat");
+        VerkkokauppaIO.kirjoitaOstotapahtumat(ostotapahtumat, "ostotapahtumat.txt");
+        System.out.println("Tiedot tallennettu onnistuneesti.");
+    }
 }
diff --git a/VerkkokauppaUI.java b/VerkkokauppaUI.java
index 66ea3b2f2e93b455930dc0af9e1275f2164792fd..216b6d9631d631059dbdd361330495db331d978a 100644
--- a/VerkkokauppaUI.java
+++ b/VerkkokauppaUI.java
@@ -17,6 +17,7 @@ public class VerkkokauppaUI {
     public void aloita() {
         int valinta = -1; // joku muu kuin 0
         while (valinta != 0) {
+            lataaTiedot();
             tulostaMenu();
             valinta = lueKokonaisluku(0, 4, "Anna valinta");
             if (valinta == 1) {
@@ -29,6 +30,7 @@ public class VerkkokauppaUI {
                 ostotapahtumaMenu(); // ei vielä toteutettu...
             }
         }
+        tallennaTiedot();
     }