diff --git a/src/domain/kortit/Erikoiskortti.java b/src/domain/kortit/Erikoiskortti.java
new file mode 100644
index 0000000000000000000000000000000000000000..9a5a82cb9134cc20e5ee0d5456029f365a3b77d9
--- /dev/null
+++ b/src/domain/kortit/Erikoiskortti.java
@@ -0,0 +1,5 @@
+package domain.kortit;
+
+public interface Erikoiskortti {
+
+}
diff --git a/src/domain/kortit/Jokerikortti.java b/src/domain/kortit/Jokerikortti.java
index af0d600626dd891a36b4f76f93b2d35ae64ab3f3..3825dcb95547d4b06817fa2ae05e68fc01b6f5ca 100644
--- a/src/domain/kortit/Jokerikortti.java
+++ b/src/domain/kortit/Jokerikortti.java
@@ -1,6 +1,6 @@
 package domain.kortit;
 
-public class Jokerikortti extends Kortti {
+public class Jokerikortti extends Kortti implements Erikoiskortti {
 	
 	public Jokerikortti(String vari) {
 		super(vari);
diff --git a/src/domain/kortit/Nosta4Jokerikortti.java b/src/domain/kortit/Nosta4Jokerikortti.java
index 4535fbc2cb68959b6a974d400ecffe58349a525f..01863b6588fbbb6a0f5a4579e95e8b3a89bb70eb 100644
--- a/src/domain/kortit/Nosta4Jokerikortti.java
+++ b/src/domain/kortit/Nosta4Jokerikortti.java
@@ -1,6 +1,6 @@
 package domain.kortit;
 
-public class Nosta4Jokerikortti extends Kortti {
+public class Nosta4Jokerikortti extends Kortti implements Erikoiskortti {
 
 	public Nosta4Jokerikortti(String vari) {
 		super(vari);
diff --git a/src/domain/kortit/NostaKaksikortti.java b/src/domain/kortit/NostaKaksikortti.java
index 9f7b1ac9d2b7655f7bf3b14d2d648c578e18fb05..57c5c6638c4004d5b6264c175fa80887eaa56b8f 100644
--- a/src/domain/kortit/NostaKaksikortti.java
+++ b/src/domain/kortit/NostaKaksikortti.java
@@ -1,6 +1,6 @@
 package domain.kortit;
 
-public class NostaKaksikortti extends Kortti {
+public class NostaKaksikortti extends Kortti implements Erikoiskortti {
 	
 	
 	public NostaKaksikortti(String vari) {
diff --git a/src/domain/kortit/Ohituskortti.java b/src/domain/kortit/Ohituskortti.java
index 58ba67c61ff28b5ef21517e05e85f3fb695d92a6..19ae128b081b46df3c1444ff22200f9dfa851e5a 100644
--- a/src/domain/kortit/Ohituskortti.java
+++ b/src/domain/kortit/Ohituskortti.java
@@ -1,6 +1,6 @@
 package domain.kortit;
 
-public class Ohituskortti extends Kortti {
+public class Ohituskortti extends Kortti implements Erikoiskortti {
 
 	
 	public Ohituskortti(String vari) {
diff --git a/src/domain/kortit/Suunnanvaihtokortti.java b/src/domain/kortit/Suunnanvaihtokortti.java
index 54f56a8c30256d4c95eae5438d3e6d4ca525ab51..7383ffbe9c6d756856e802054f00a878c1db773e 100644
--- a/src/domain/kortit/Suunnanvaihtokortti.java
+++ b/src/domain/kortit/Suunnanvaihtokortti.java
@@ -1,6 +1,6 @@
 package domain.kortit;
 
-public class Suunnanvaihtokortti extends Kortti {
+public class Suunnanvaihtokortti extends Kortti implements Erikoiskortti {
 	
 	public Suunnanvaihtokortti(String vari) {
 		super(vari);
diff --git a/src/domain/korttipakat/Nostopakka.java b/src/domain/korttipakat/Nostopakka.java
index e179604ad14e32e0141cb3301d64117351cfdbfd..186e2cab12d1a9abf3b519dc362b090fbafa3ca3 100644
--- a/src/domain/korttipakat/Nostopakka.java
+++ b/src/domain/korttipakat/Nostopakka.java
@@ -26,4 +26,13 @@ public class Nostopakka {
 			throw new IndexOutOfBoundsException();
 		}
 	}
+	
+	public String toString() {
+		StringBuilder str = new StringBuilder("");
+		str.append("Nostopakassa on kortit:\n");
+		for (Kortti kortti : this.kortit) {
+			str.append(kortti + "\n");
+		}
+		return str.toString();
+	}
 }
diff --git a/src/domain/korttipakat/Poistopakka.java b/src/domain/korttipakat/Poistopakka.java
index bbe4d29445da124a8db18c4797969195d60b9f07..7118b11971053cf6eb06781bdba634b2dd1ba6c2 100644
--- a/src/domain/korttipakat/Poistopakka.java
+++ b/src/domain/korttipakat/Poistopakka.java
@@ -20,4 +20,13 @@ public class Poistopakka {
 	public Kortti annaPaallimmainenKortti() {
 		return this.kortit.get(this.kortit.size()-1);
 	}
+	
+	public String toString() {
+		StringBuilder str = new StringBuilder("");
+		str.append("Poistopakassa olevat kortit:\n");
+		for (Kortti kortti : this.kortit) {
+			str.append(kortti + "\n");
+		}
+		return str.toString();
+	}
 }
diff --git a/src/domain/pelaajat/Pelaaja.java b/src/domain/pelaajat/Pelaaja.java
index ab43c193b982b07566a5f7e98b0c724b60a4f7c1..a6202e875b29dbc641463f5eaa25f5058403eb4a 100644
--- a/src/domain/pelaajat/Pelaaja.java
+++ b/src/domain/pelaajat/Pelaaja.java
@@ -72,4 +72,13 @@ public abstract class Pelaaja {
 		}
 		return summa;
 	}
+	
+	public String toString() {
+		StringBuilder str = new StringBuilder("");
+		str.append("Pelaajan " + this.nimi + " kortit:\n");
+		for (Kortti kortti : this.kortit) {
+			str.append(kortti + "\n");
+		}
+		return str.toString();
+	}
 }
diff --git a/src/logiikka/Peli.java b/src/logiikka/Peli.java
index 6e0c0f0303d90df869f701e76706093d46069fed..0e80f8f33f81563ff82a04f27bea59e09fb1a7c3 100644
--- a/src/logiikka/Peli.java
+++ b/src/logiikka/Peli.java
@@ -202,7 +202,7 @@ public class Peli {
 		 */
 		
 		else if (kortti instanceof NostaKaksikortti) {
-			if (edellinenKortti != null && !edellinenKortti.annaVari().equals(kortti.annaVari())
+			if (!edellinenKortti.annaVari().equals(kortti.annaVari())
 					|| edellinenKortti instanceof NostaKaksikortti) {
 				System.out.println("Nosta 2 -kortin voi ly�d� samanv�risen kortin p��lle tai"
 						+ " toisen nosta 2 -kortin p��lle.");
@@ -219,7 +219,7 @@ public class Peli {
 		 */
 		
 		else if (kortti instanceof Ohituskortti) {
-			if (edellinenKortti != null && !edellinenKortti.annaVari().equals(kortti.annaVari())
+			if (!edellinenKortti.annaVari().equals(kortti.annaVari())
 					|| edellinenKortti instanceof Ohituskortti) {
 				System.out.println("Ohituskortin saa ly�d� samanv�risen kortin p��lle tai"
 						+ " toisen ohituskortin p��lle.");
@@ -236,7 +236,7 @@ public class Peli {
 		 */
 		
 		else if (kortti instanceof Suunnanvaihtokortti) {
-			if (edellinenKortti != null && !edellinenKortti.annaVari().equals(kortti.annaVari())
+			if (!edellinenKortti.annaVari().equals(kortti.annaVari())
 					|| edellinenKortti instanceof Suunnanvaihtokortti) {
 				System.out.println("Suunnanvaihtokortin saa ly�d� samanv�risen kortin p��lle tai"
 						+ " toisen suunnanvaihtokortin p��lle.");
@@ -246,8 +246,8 @@ public class Peli {
 		} 
 		
 		else if (kortti instanceof Peruskortti) {
-			if (edellinenKortti != null && edellinenKortti.annaVari() != null) {
-				if (!kortti.annaVari().equals(edellinenKortti.annaVari()) 
+			if (edellinenKortti.annaVari() != null) {
+				if (!kortti.annaVari().equals(edellinenKortti.annaVari())
 						&& edellinenKortti instanceof Peruskortti) {
 					if (((Peruskortti) kortti).annaNumero() != ((Peruskortti) edellinenKortti).annaNumero()) {
 						//Kortti on peruskortti, mutta eriv�rinen ja erinumeroinen kuin edellinen kortti
@@ -258,10 +258,10 @@ public class Peli {
 				if(!kortti.annaVari().equals(edellinenKortti.annaVari())) {
 					System.out.println("Kortin tulee olla samaa v�ri� tai sama numero.");
 					return false;					
-				}
-			} else {
-				kelvollinenKortti = true;				
-			}			
+				} else {
+					kelvollinenKortti = true;				
+				}	
+			} 		
 		}
 		
 		this.vari = null;
@@ -280,6 +280,7 @@ public class Peli {
 				return false;
 			}
 			this.vari = null;
+			System.out.println(pelaaja.annaNimi() + " pelasi kortin: " + kortti);
 			return true;
 		}
 		
@@ -359,7 +360,7 @@ public class Peli {
 		 */
 		
 		else if (kortti instanceof NostaKaksikortti) {
-			if (edellinenKortti != null && !edellinenKortti.annaVari().equals(kortti.annaVari())
+			if (!edellinenKortti.annaVari().equals(kortti.annaVari())
 					|| edellinenKortti instanceof NostaKaksikortti) {
 				return false;
 			}
@@ -375,7 +376,7 @@ public class Peli {
 		 */
 		
 		else if (kortti instanceof Ohituskortti) {
-			if (edellinenKortti != null && !edellinenKortti.annaVari().equals(kortti.annaVari())
+			if (!edellinenKortti.annaVari().equals(kortti.annaVari())
 					|| edellinenKortti instanceof Ohituskortti) {
 				return false;
 			}
@@ -391,7 +392,7 @@ public class Peli {
 		 */
 		
 		else if (kortti instanceof Suunnanvaihtokortti) {
-			if (edellinenKortti != null && !edellinenKortti.annaVari().equals(kortti.annaVari())
+			if (!edellinenKortti.annaVari().equals(kortti.annaVari())
 					|| edellinenKortti instanceof Suunnanvaihtokortti) {
 			}
 			this.suuntaKasvava = !this.suuntaKasvava;
@@ -400,7 +401,7 @@ public class Peli {
 		} 
 		
 		else if (kortti instanceof Peruskortti) {
-			if (edellinenKortti != null && edellinenKortti.annaVari() != null) {
+			if (edellinenKortti.annaVari() != null) {
 				if (!kortti.annaVari().equals(edellinenKortti.annaVari()) 
 						&& edellinenKortti instanceof Peruskortti) {
 					if (((Peruskortti) kortti).annaNumero() != ((Peruskortti) edellinenKortti).annaNumero()) {
diff --git a/src/ui/Tekstikayttoliittyma.java b/src/ui/Tekstikayttoliittyma.java
index d0537c840c411e36df8181cad7280da0b251b997..858b673b4d7792cd96115aa52bc0c5a791566318 100644
--- a/src/ui/Tekstikayttoliittyma.java
+++ b/src/ui/Tekstikayttoliittyma.java
@@ -1,8 +1,15 @@
 package ui;
 
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.Scanner;
 
+import domain.kortit.Erikoiskortti;
 import domain.kortit.Kortti;
 import domain.korttipakat.Nostopakka;
 import domain.korttipakat.Poistopakka;
@@ -20,7 +27,7 @@ public class Tekstikayttoliittyma {
 	public void start() {
 		
 		System.out.println("Tervetuloa pelaamaan Uunoa. Kirjoita \"uusi\" aloittaaksesi uuden pelin,");
-		System.out.println(" \"lataa\" ladataksesi vanhan pelin, \"ohjeet\" lukeaksesi peliohjeita tai 'lopeta' lopettaaksesi.");
+		System.out.println(" \"lataa\" ladataksesi vanhan pelin tai 'lopeta' lopettaaksesi.");
 		System.out.print("> ");
 		String input = this.lukija.next();
 		
@@ -29,13 +36,6 @@ public class Tekstikayttoliittyma {
 			return;
 		case "uusi":
 			this.uusiPeli();
-			break;
-		case "lataa":
-//			lataaPeli();
-			break;
-		case "ohjeet":
-//			naytaPeliohjeet();
-			break;
 		default:
 			this.uusiPeli();
 		}
@@ -49,11 +49,21 @@ public class Tekstikayttoliittyma {
 			Pelaaja pelaaja = peli.annaPelaaja(0);
 			Poistopakka poistopakka = peli.annaPoistopakka();
 			Nostopakka nostopakka = peli.annaNostopakka();
-		
-			Kortti ensimmainenKortti = poistopakka.annaPaallimmainenKortti();
 			
-			peli.pelaaKorttiTietokone(lukija, ensimmainenKortti, null, pelaaja);
+			try {
+				PrintWriter tiedosto = new PrintWriter(new File("pelitilanne.txt"));
+				tiedosto.close();
+			} catch (Exception e) {
+				// TODO: handle exception
+			}
+			
+			Kortti ensimmainenKortti = poistopakka.annaPaallimmainenKortti();
 			
+			while (ensimmainenKortti instanceof Erikoiskortti) {
+				ensimmainenKortti = nostopakka.nostaKortti();
+				poistopakka.lisaaKortti(ensimmainenKortti);
+			}
+						
 			boolean peliKesken = true;
 			while (peliKesken) {
 			
@@ -124,9 +134,32 @@ public class Tekstikayttoliittyma {
 						poistopakka.lisaaKortti(k);
 						kortit.remove(kortinNumero);
 					}
-				}
+				}		
+			}
+			//Tulostaminen tiedostoon
+			try {
+				
+				File tiedosto = new File("pelitilanne.txt");
+				OutputStreamWriter kirjoittaja =
+			             new OutputStreamWriter(new FileOutputStream(tiedosto), StandardCharsets.UTF_8);
 				
+				kirjoittaja.append(peli.annaPelaaja(0).toString());
+				kirjoittaja.append("\n");
+				kirjoittaja.append(peli.annaPelaaja(1).toString());
+				kirjoittaja.append("\n");
+				kirjoittaja.append(peli.annaPelaaja(2).toString());
+				kirjoittaja.append("\n");
+				kirjoittaja.append(peli.annaPelaaja(3).toString());
+				kirjoittaja.append("\n");
+				kirjoittaja.append(nostopakka.toString());
+				kirjoittaja.append("\n");
+				kirjoittaja.append(poistopakka.toString());
+				
+				kirjoittaja.close();
+			} catch (Exception e) {
+				// TODO: handle exception
 			}
+
 		}
 	}	
 }