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 5665dd7c08577abce635a7d9cec18b5973a8f627..3825dcb95547d4b06817fa2ae05e68fc01b6f5ca 100644
--- a/src/domain/kortit/Jokerikortti.java
+++ b/src/domain/kortit/Jokerikortti.java
@@ -1,13 +1,13 @@
 package domain.kortit;
 
-public class Jokerikortti extends Kortti {
+public class Jokerikortti extends Kortti implements Erikoiskortti {
 	
 	public Jokerikortti(String vari) {
 		super(vari);
 	}
 
 	public String toString() {
-		return "[Jokeri, v�ri]";
+		return "jokerikortti";
 	}
 
 }
diff --git a/src/domain/kortit/Nosta4Jokerikortti.java b/src/domain/kortit/Nosta4Jokerikortti.java
index 56126c3a86fc0647822ba8a27ee742dfcd9525c0..01863b6588fbbb6a0f5a4579e95e8b3a89bb70eb 100644
--- a/src/domain/kortit/Nosta4Jokerikortti.java
+++ b/src/domain/kortit/Nosta4Jokerikortti.java
@@ -1,12 +1,12 @@
 package domain.kortit;
 
-public class Nosta4Jokerikortti extends Kortti {
+public class Nosta4Jokerikortti extends Kortti implements Erikoiskortti {
 
 	public Nosta4Jokerikortti(String vari) {
 		super(vari);
 	}
 
 	public String toString() {
-		return "[Jokeri, +4]";
+		return "nosta 4 -jokerikortti";
 	}
 }
diff --git a/src/domain/kortit/NostaKaksikortti.java b/src/domain/kortit/NostaKaksikortti.java
index c0c2ae432da8f924a4f2338d19ff388b1948844e..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) {
@@ -8,6 +8,6 @@ public class NostaKaksikortti extends Kortti {
 	}
 
 	public String toString() {
-		return "[" + this.vari + ", +2]";
+		return this.vari + " nosta kaksi -kortti";
 	}
 }
diff --git a/src/domain/kortit/Ohituskortti.java b/src/domain/kortit/Ohituskortti.java
index 4889d1168c486eb2c840f2e33f4b23360f34e72b..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) {
@@ -8,7 +8,7 @@ public class Ohituskortti extends Kortti {
 	}
 
 	public String toString() {
-		return "[" + this.vari + ", �]";
+		return this.vari + " ohituskortti";
 	}
 	
 }
diff --git a/src/domain/kortit/Peruskortti.java b/src/domain/kortit/Peruskortti.java
index 3328ffc8890a7b281c542f17a21e116ac9c5e048..c5170345c6a2ad2ebe80bedd5fce515edf6be60c 100644
--- a/src/domain/kortit/Peruskortti.java
+++ b/src/domain/kortit/Peruskortti.java
@@ -14,7 +14,7 @@ public class Peruskortti extends Kortti {
 	}
 	
 	public String toString() {
-		return "[" + this.vari + ", " + this.numero + "]";
+		return this.vari + " peruskortti numero " + this.numero;
 	}
 	
 
diff --git a/src/domain/kortit/Suunnanvaihtokortti.java b/src/domain/kortit/Suunnanvaihtokortti.java
index 92fdb85f8686bd2f753a35276d8104c4234e0646..7383ffbe9c6d756856e802054f00a878c1db773e 100644
--- a/src/domain/kortit/Suunnanvaihtokortti.java
+++ b/src/domain/kortit/Suunnanvaihtokortti.java
@@ -1,12 +1,12 @@
 package domain.kortit;
 
-public class Suunnanvaihtokortti extends Kortti {
+public class Suunnanvaihtokortti extends Kortti implements Erikoiskortti {
 	
 	public Suunnanvaihtokortti(String vari) {
 		super(vari);
 	}
 
 	public String toString() {
-		return "[" + this.vari + ", <->]";
+		return this.vari + " suunnanvaihtokortti";
 	}
 }
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 c2f5fb039cba81d8bdc25d567af6a9f20fa5b4d7..0e80f8f33f81563ff82a04f27bea59e09fb1a7c3 100644
--- a/src/logiikka/Peli.java
+++ b/src/logiikka/Peli.java
@@ -31,10 +31,10 @@ public class Peli {
 	
 	public Peli() {
 		this.pelaajat = new ArrayList<>();
-		this.pelaajat.add(new Ihmispelaaja("Pelaaja")); // pelaaja nro 0
-		this.pelaajat.add(new Tietokonepelaaja("Tietokone 1"));
-		this.pelaajat.add(new Tietokonepelaaja("Tietokone 2"));		
-		this.pelaajat.add(new Tietokonepelaaja("Tietokone 3"));
+		this.pelaajat.add(new Ihmispelaaja("pelaaja")); // pelaaja nro 0
+		this.pelaajat.add(new Tietokonepelaaja("tietokone 1"));
+		this.pelaajat.add(new Tietokonepelaaja("tietokone 2"));		
+		this.pelaajat.add(new Tietokonepelaaja("tietokone 3"));
 
 		
 		this.nostopakka = new Nostopakka();
@@ -158,12 +158,10 @@ public class Peli {
 		 * ottamaan vastaan Nosta kaksi -korttia tai Nosta 4-jokeri -korttia.
 		 */
 		if (kortti instanceof Jokerikortti) {
-			do{
-				System.out.println("Valitse v�ri (sininen, punainen, keltainen, vihre�):");
-				System.out.print(">");
-				String vari = lukija.next();
-				this.vari = vari;
-			}while (!(this.vari.equals("sininen")||this.vari.equals("punainen")||this.vari.equals("keltainen")||this.vari.equals("vihre�")));
+			System.out.println("Valitse v�ri (sininen, punainen, keltainen, vihre�):");
+			System.out.print(">");
+			String vari = lukija.next();
+			this.vari = vari;
 			this.paivitaVuoronumero();			
 			kelvollinenKortti = true;
 		} 
@@ -188,12 +186,10 @@ public class Peli {
 				return false;
 			}
 			this.annaPelaaja(seuraavaksiVuorossa).nostaNeljaKorttia(this.nostopakka);
-			do{
-				System.out.println("Valitse v�ri (sininen, punainen, keltainen, vihre�):");
-				System.out.print(">");
-				String vari = lukija.next();
-				this.vari = vari;
-			}while (!(this.vari.equals("sininen")||this.vari.equals("punainen")||this.vari.equals("keltainen")||this.vari.equals("vihre�")));
+			System.out.println("Valitse v�ri (sininen, punainen, keltainen, vihre�):");
+			System.out.print(">");
+			String vari = lukija.next();
+			this.vari = vari;
 			this.paivitaVuoronumero();
 			kelvollinenKortti = true;
 		} 
@@ -206,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.");
@@ -223,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.");
@@ -240,20 +236,18 @@ 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.");
 			}
 			this.suuntaKasvava = !this.suuntaKasvava;
-			paivitaVuoronumero();
-			paivitaVuoronumero();
 			kelvollinenKortti = true;
 		} 
 		
 		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
@@ -264,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;
@@ -286,6 +280,7 @@ public class Peli {
 				return false;
 			}
 			this.vari = null;
+			System.out.println(pelaaja.annaNimi() + " pelasi kortin: " + kortti);
 			return true;
 		}
 		
@@ -344,6 +339,7 @@ public class Peli {
 				}
 			} 
 			if (pelaajallaSopivanVarinenKortti) {
+				System.out.println("Et voi k�ytt�� Nosta 4 -korttia, jos sinulla on sopivan v�rinen kortti.");
 				return false;
 			}
 			this.annaPelaaja(seuraavaksiVuorossa).nostaNeljaKorttia(this.nostopakka);
@@ -364,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;
 			}
@@ -380,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;
 			}
@@ -396,18 +392,16 @@ 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;
-			paivitaVuoronumero();
-			paivitaVuoronumero();
 			kelvollinenKortti = true; 
 			System.out.println(pelaaja.annaNimi() + " pelasi kortin: " + kortti);
 		} 
 		
 		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 d1fbdcbb88e84bf18e2cb31766ee76229a9f5909..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,17 +49,27 @@ 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) {
 			
 			Pelaaja peliVuorossa = peli.annaPelaaja(peli.annaSeuraavaksiVuorossa());
-//			System.out.println("Pelivuorossa on: " + peliVuorossa.annaNimi() 
-//			+ " (Pisteet: " + peliVuorossa.laskePisteet() + ")");
+			System.out.println("Pelivuorossa on: " + peliVuorossa.annaNimi() 
+			+ " (Pisteet: " + peliVuorossa.laskePisteet() + ")");
 			System.out.println();
 			
 			
@@ -81,7 +91,7 @@ public class Tekstikayttoliittyma {
 					pelaaja.tulostaKortit();
 					
 					System.out.println("Kirjoita kortin numero pelataksesi kortin tai \"nosta\" nostaaksesi kortin.");
-					System.out.print("> ");
+					System.out.print(">");
 					String input = this.lukija.next();
 					List<Kortti> kortit = pelaaja.annaKortit();
 					if (input.equals("nosta")) {
@@ -116,8 +126,6 @@ public class Tekstikayttoliittyma {
 					if (!kelvollinenKortti) {
 						if (kortinNumero == peliVuorossa.annaKortit().size()-1) {
 							peliVuorossa.nostaKortti(nostopakka); //ei sopivaa korttia
-//							System.out.println((peli.annaPelaaja(peli.annaSeuraavaksiVuorossa()).annaNimi()) + " nosti yhden kortin"); //Faulty, saved for syntax
-							System.out.println(peliVuorossa.annaNimi() + " nosti yhden kortin"); //Vaikutti rikkovan jotain? En tied� varmaksi. Nyt n�ytt�� jo toimivan
 							kelvollinenKortti = true;
 						} else {
 							kortinNumero++;
@@ -126,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
 			}
+
 		}
 	}	
 }