diff --git a/src/killer_sokoban/AbstractField.java b/src/killer_sokoban/AbstractField.java
index e090fd856d9bf3cb7ea648efa101f928ad56244d..02b8ede71f538d1476c680c645f6cc704bbad26f 100644
--- a/src/killer_sokoban/AbstractField.java
+++ b/src/killer_sokoban/AbstractField.java
@@ -6,6 +6,7 @@ public abstract class AbstractField {
 	
 	
 	protected HashMap<Direction, AbstractField> neighbours=new HashMap<Direction, AbstractField>();
+	protected boolean isCorner;
 	
 	/**Ez a függvény azt jelzi a mező számára, hogy szeretnének rálépni.
 	 * @param toward melyik irányból szeretnének rálépni
@@ -43,5 +44,21 @@ public abstract class AbstractField {
 	{
 		view.drawAbstract();
 	}
+	
+	/**
+	 * Ez a függvény sarkot csinál a mzőből.
+	 */
+	public void setToCorner() {isCorner = true;}
+	
+	/**
+	 * A sarokba betoltunk valamit, így a szomszédjaiból sarok lett.
+	 */
+	public void fillCorner() {
+		if(!isCorner) return;
+		
+		for(AbstractField neighbor : neighbours.values()) {
+			neighbor.setToCorner();
+		}
+	}
 
 }
diff --git a/src/killer_sokoban/Crate.java b/src/killer_sokoban/Crate.java
index 2ae558ae9709bc300a5f0242f21b3b1bc1e8e201..9e97abbc056493b6f49d5a673565f54e355097f6 100644
--- a/src/killer_sokoban/Crate.java
+++ b/src/killer_sokoban/Crate.java
@@ -2,8 +2,7 @@ package killer_sokoban;
 
 
 public class Crate extends Moveable {
-
-	private boolean couldMove=true;
+	
 	private boolean isOnTarget;
 	
 	
@@ -38,17 +37,9 @@ public class Crate extends Moveable {
 		s.turnOn();
 	}
 	
-	/**
-	 * Beállítja, hogy a láda eltolható-e.
-	 */
-	public void setCouldMove(boolean b) {
-		couldMove=b;
-	}
-	
 	public void printStat()
 	{
 		super.printStat();
-		System.out.println("couldMove: " + couldMove);
 		System.out.println("isOnTarget: " + isOnTarget);
 	}
 	
@@ -58,4 +49,15 @@ public class Crate extends Moveable {
 		super.shouldDraw(view);
 		view.drawCrate();
 	}
+	
+	/**
+	 * Jelzi a láda számára, hogy sarokba ragadt.
+	 */
+	@Override
+	public void arriveToCorner() {
+		myField.fillCorner();
+		Main.deleteCrate(this);
+	}
+	
+	public boolean couldGameFinish() {return isOnTarget;}
 }
diff --git a/src/killer_sokoban/Main.java b/src/killer_sokoban/Main.java
index 7999199ffbe31528ec8175bf7bb4cff0495900bf..7a3c7a0b4192c2e1a65c607849d8b7df2f33a365 100644
--- a/src/killer_sokoban/Main.java
+++ b/src/killer_sokoban/Main.java
@@ -7,7 +7,6 @@ import java.util.Map.Entry;
 
 import javafx.application.Application;
 import javafx.event.EventHandler;
-import javafx.geometry.Insets;
 import javafx.geometry.Pos;
 import javafx.scene.Scene;
 import javafx.scene.canvas.Canvas;
@@ -15,7 +14,6 @@ import javafx.scene.input.KeyCode;
 import javafx.scene.input.KeyEvent;
 import javafx.scene.layout.*;
 import javafx.scene.paint.Color;
-import javafx.scene.paint.Paint;
 import javafx.scene.text.Font;
 import javafx.scene.text.Text;
 import javafx.stage.Stage;
@@ -58,6 +56,9 @@ public class Main extends Application {
 			if(i==workers.size()) activeWorker = (Worker)workers.values().toArray()[0];
 			else activeWorker = (Worker)workers.values().toArray()[i];
 			
+			//checking if game should end
+			checkGameEnded();
+			
 			view.update();
 		}
 		
@@ -196,6 +197,17 @@ public class Main extends Application {
 		crates.remove(getKeyByValue(crates, c));
 	}
 	
+	private static void checkGameEnded() {
+		boolean ended = true;
+		for(Crate c : crates.values()) {
+			if(!c.couldGameFinish()) ended = false;
+		}
+		
+		if (ended) {
+			endGame();
+		}
+	}
+	
 	private static void endGame()
 	{
 		for (Entry<String, Worker> e : workers.entrySet())
@@ -241,6 +253,9 @@ public class Main extends Application {
 		else if (cmd[0].equals("stat")) {
 			stat(cmd[1]);
 		}
+		else if (cmd[0].equals("setcorner")) {
+			setCorner(cmd[1]);
+		}
 		else if (cmd[0].equals("script")) {
 			script(cmd[1]);
 		}
@@ -374,6 +389,10 @@ public class Main extends Application {
 		}
 	}
 	
+	private static void setCorner(String field) {
+		map.get(field).setToCorner();
+	}
+	
 	private static void script(String file) throws IOException
 	{
 		BufferedReader backup = br;
diff --git a/src/killer_sokoban/Moveable.java b/src/killer_sokoban/Moveable.java
index be7c9ecc3b4c0b9aa5833e24662041d086b4b3ad..80accfee62cf9c0594d99c2d23adc3d3b7c5ced7 100644
--- a/src/killer_sokoban/Moveable.java
+++ b/src/killer_sokoban/Moveable.java
@@ -85,4 +85,9 @@ public abstract class Moveable {
 	{
 	}
 	
+	/**
+	 * Azt jelzi a Moveable számára, hogy sarokba érkezett. Szándékosan üres, a láda felüüldefiniálja.
+	 */
+	public void arriveToCorner() {}
+	
 }
diff --git a/src/killer_sokoban/SimpleField.java b/src/killer_sokoban/SimpleField.java
index 045b7de1fda9407bfd7c4d2d2c48d10073216bd5..d07d332be2754cc07707d041aa777af543f28098 100644
--- a/src/killer_sokoban/SimpleField.java
+++ b/src/killer_sokoban/SimpleField.java
@@ -26,7 +26,7 @@ public class SimpleField extends AbstractField {
 		{
 			m.move(this); //Fontos a sorrend, mert ez a függvény eldobatja magát m mezőjével.
 			myMoveable=m;
-			//determineBlocked(toward); //A szkeletonban maradjon kikommentelve... sok szomszédot létre kellene hozni a helyes működéshez
+			if (isCorner) m.arriveToCorner();
 		}
 		
 
diff --git a/testmap1.in b/testmap1.in
index 0dbe9661d181228d714ee338a841dfe61bcadd7b..dde580e175897b28dcfb6636abfbbb915f807b68 100644
--- a/testmap1.in
+++ b/testmap1.in
@@ -9,6 +9,10 @@ wmmmwmmtmw
 wmmmwmmtmw
 wmmmmmmmmw
 wwwwwwwwww
+setcorner f_1_1
+setcorner f_1_8
+setcorner f_8_1
+setcorner f_8_8
 setswitch f_3_4 f_1_4
 worker w1 3 f_1_1
 crate c1 f_1_3