diff --git a/mmkurssit/src/mmkurssit/Kurssit.java b/mmkurssit/src/mmkurssit/Kurssit.java
index 117e30edbc1fd7b0717931eec17c8e877245de00..24865be62a8862fee9a9df014905c53d18f11d12 100644
--- a/mmkurssit/src/mmkurssit/Kurssit.java
+++ b/mmkurssit/src/mmkurssit/Kurssit.java
@@ -17,7 +17,7 @@ public class Kurssit {
 
     private Kurssi[] kurssit;
     private int kpl = 0;
-    private static String tiedostonNimi = "";
+    private static String tiedostonNimi = "tiedot";
     
     private static final int MAX_KPL = 5;//montako kurssia yhdelle taulukolle
     
@@ -66,7 +66,7 @@ public class Kurssit {
     }
     
     
- /**
+    /**
      * HUOM!!   Tee loppuun asti!!! 12.3.
      * Lukee kurssi-lista tiedostosta. 
      * @param hakemisto tiedoston hakemisto
@@ -84,7 +84,7 @@ public class Kurssit {
                     continue;
                 }
                 Kurssi kurssi = new Kurssi();
-                kurssi.parse(s);//parse pitää muokata!!
+                kurssi.parse(s);
                 lisaa(kurssi);
             }
         } catch (FileNotFoundException e) {
@@ -160,17 +160,22 @@ public class Kurssit {
             //taulukko.lisaa(ohjelmointi2);
             //taulukko.lisaa(japani4);
             //taulukko.lisaa(ohjelmointi2);
+            for (int i=0; i<taulukko.getKpl(); i++) {
+                Kurssi kurssi = taulukko.anna(i);
+                System.out.println("Säilytetty taulukon paikalla: " + i);
+                kurssi.tulosta(System.out);
+            }
         } catch (SailoException e) {
             System.err.println(e.getMessage());
         }
         
         
-        System.out.println("=======================Kurssit testi==========================");
+        System.out.println("=====================================");
         
-        for (int i=0; i<taulukko.getKpl(); i++) {
-            Kurssi kurssi = taulukko.anna(i);
-            System.out.println("Säilytetty taulukon paikalla: " + i);
-            kurssi.tulosta(System.out);
+        try {
+            taulukko.tallenna("tiedot");
+        } catch (SailoException e) {
+            System.err.println(e.getMessage());
         }
     }
    
diff --git a/mmkurssit/src/mmkurssit/Tapaaminen.java b/mmkurssit/src/mmkurssit/Tapaaminen.java
index bf72f49d009796697960b0740851a434848afd81..e970ffd8ea4147e3610c395574c5d6215c63faf3 100644
--- a/mmkurssit/src/mmkurssit/Tapaaminen.java
+++ b/mmkurssit/src/mmkurssit/Tapaaminen.java
@@ -148,8 +148,9 @@ public class Tapaaminen {
      * </pre>
      */
     public void rekisteroi() {
-        this.tapaaminenID = nextmID;
-        nextmID++;
+        this.setmID(nextmID);
+        //this.tapaaminenID = nextmID;
+        //nextmID++;
     }
     
     
@@ -161,6 +162,16 @@ public class Tapaaminen {
     }
     
     
+    /**
+     * Varmistetaan, että nextmID on isompi kuin nykyisen suurin nro
+     * @param nro asetettava tapaaminenID
+     */
+    public void setmID(int nro) {
+        this.tapaaminenID = nro;
+        if (this.tapaaminenID >= nextmID) nextmID = this.tapaaminenID+1;
+    }
+    
+    
     /**
      * @return kyseisen tapaamisen kID (eli kurssin ID), joka kertoo mihin kurssiin kyseinen tapaaminen liittyy
      */
@@ -176,6 +187,24 @@ public class Tapaaminen {
     }
     
     
+    
+    /**
+     * @param rivi tiedostosta luettu ja käsitteltävä rivi
+     */
+    public void parse(String rivi) {
+        // TODO Auto-generated method stub
+        
+    }
+    
+    
+    @Override
+    public String toString() {
+        //TODO toteutus!!
+        return "";
+        
+    }
+    
+    
     //==========================================================================
     /**
      * @param args ei käytössä
diff --git a/mmkurssit/src/mmkurssit/Tapaamiset.java b/mmkurssit/src/mmkurssit/Tapaamiset.java
index 42cecdbf0777a0bbbe71733436b3cb827ae7bd7f..066d01e0b75b72150bb859e5841fd1349cd5c493 100644
--- a/mmkurssit/src/mmkurssit/Tapaamiset.java
+++ b/mmkurssit/src/mmkurssit/Tapaamiset.java
@@ -1,8 +1,14 @@
 package mmkurssit;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.PrintStream;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.Scanner;
 
 /**
  * Tietorakenne (tällä kerralla taulukko), jossa säilytetään tapaamiset alkioina.
@@ -13,6 +19,7 @@ import java.util.List;
 public class Tapaamiset {
 
     private Collection<Tapaaminen> alkiot = new ArrayList<Tapaaminen>();
+    private static String tiedostonNimi = "tiedot";
     
 //======================================================
     
@@ -31,6 +38,13 @@ public class Tapaamiset {
     }
     
     
+    /**
+     * @return listan pituus
+     */
+    public int listankoko() {
+        return this.alkiot.size();
+    }
+    
     /**
      * @param kurssiID kyseisen kurssin ID
      * @return Lisa, jossa on tapaamisia, jonka kID on sama kuin parametriksi annettu kurssiID
@@ -83,6 +97,55 @@ public class Tapaamiset {
     }
 
     
+    
+    /**
+     * HUOM!!   Tee loppuun asti!!! 12.3.
+     * Lukee kurssi-lista tiedostosta. 
+     * @param folderName tiedoston hakemisto
+     * @throws SailoException jos lukeminen ei onnistu
+     */
+    public void lueTiedostosta(String folderName) throws SailoException {
+        tiedostonNimi = folderName + "/tapaamiset.dat";
+        
+        File ftied = new File(tiedostonNimi);
+        
+        try (Scanner fileIn = new Scanner(new FileInputStream(ftied))){
+            while ( fileIn.hasNext() ) {
+                String s = fileIn.nextLine();
+                if( s == null || "".equals(s) || s.charAt(0) == ';') {
+                    continue;
+                }
+                Tapaaminen tap = new Tapaaminen();
+                tap.parse(s);//parse pitää muokata!!
+                lisaa(tap);
+            }
+        } catch (FileNotFoundException e) {
+            throw new SailoException("Ei saa luettua tiedostoa" + tiedostonNimi);
+        }
+    }
+    
+    
+    /**
+     * Tallentaa kurssi-data tiedostoon.
+     * @param folderName mihin tallennetaan
+     * @throws SailoException jos tallennus ei onnistu
+     */
+    public void tallenna(String folderName) throws SailoException{
+        //TODO: hakemiston luominen tähän?
+        File ftied = new File(folderName + "/tapaamiset.dat");
+        try (PrintStream fileOut = new PrintStream(new FileOutputStream(ftied, true))){ 
+                                                                    // true = uusi text appendoidaan vanhan tekstin perälle
+            for(int i=0; i<listankoko(); i++) {
+                Tapaaminen tap = annaTapaaminen(i);
+                fileOut.println(tap.toString());
+            }
+        } catch (FileNotFoundException e) {
+            throw new SailoException("Tiedosto " + ftied.getAbsolutePath());
+        }
+        
+    }
+ 
+    
 //=======================================================
 
     /**
diff --git a/mmkurssit/tiedot/kurssit.dat b/mmkurssit/tiedot/kurssit.dat
new file mode 100644
index 0000000000000000000000000000000000000000..f564c839b05ad412f3b4718909dcee0caea13ece
--- /dev/null
+++ b/mmkurssit/tiedot/kurssit.dat
@@ -0,0 +1,2 @@
+1|Esimerkkikurssi22|Kokko Vesa
+2|Esimerkkikurssi79|Kokko Vesa