diff --git a/core/game/Model.java b/core/game/Model.java
index de335e16431ca7ac20c54d4aa94e34a5a2523250..9d1da4502bd0bb97b213f7b679a10866bd5b1b86 100644
--- a/core/game/Model.java
+++ b/core/game/Model.java
@@ -1,11 +1,13 @@
 package game;
 
 import java.util.ArrayList;
+import java.util.Random;
 
 import mapobjs.defobjs.Door;
 import mapobjs.defobjs.Field;
 import mapobjs.defobjs.Gate;
 import mapobjs.defobjs.Portal;
+import mapobjs.defobjs.ZPM;
 import mapobjs.movobjs.Player;
 import mapobjs.movobjs.Replicator;
 
@@ -79,9 +81,35 @@ public class Model
 			sum += colonel.getZpmCount();
 		if(jaffa != null)
 			sum += jaffa.getZpmCount();
-		if(sum >= specOpen)
+		
+		if(specDoor != null)
 		{
-			specDoor.setOpen(true);
+			if(sum >= specOpen)
+			{
+				specDoor.setOpen(true);
+			}
+		}
+		
+		if(sum % 2 == 0)
+		{
+			ArrayList<Field> options = new ArrayList<>();
+			
+			for(int i = 0; i < map.size(); i++)
+			{
+				if(!map.get(i).hasElementOn())
+				{
+					options.add(map.get(i));
+				}
+			}
+			if(options.isEmpty())
+				return;
+			
+			Random rnd = new Random();
+			int rndNum = rnd.nextInt(options.size());
+			
+			Field tmp = options.get(rndNum);
+			tmp.addElement(new ZPM(tmp));
+			this.ZPMs++;
 		}
 	}
 
diff --git a/core/mapobjs/defobjs/Field.java b/core/mapobjs/defobjs/Field.java
index 04d878d35aebfc749d2235beb5c9d0bdc4d8681e..7460db20afab94de1234f1d8ab708af2890493fb 100644
--- a/core/mapobjs/defobjs/Field.java
+++ b/core/mapobjs/defobjs/Field.java
@@ -307,4 +307,9 @@ public class Field implements IElement {
 	{
 		toRemove.add(element);
 	}
+	
+	public boolean hasElementOn()
+	{
+		return !elements.isEmpty();
+	}
 }