diff --git a/src/HighScore.txt b/src/HighScore.txt
index 2efea5198bec85fb12bc22ec549bd4db99be6de5..e440e5c842586965a7fb77deda2eca68612b1f53 100644
--- a/src/HighScore.txt
+++ b/src/HighScore.txt
@@ -1 +1 @@
-167
\ No newline at end of file
+3
\ No newline at end of file
diff --git a/src/Images1/heart.png b/src/Images1/heart.png
new file mode 100644
index 0000000000000000000000000000000000000000..417d80ac9510e8e089b02b121f6bf792f47766f4
Binary files /dev/null and b/src/Images1/heart.png differ
diff --git a/src/constants/Constants.java b/src/constants/Constants.java
index 14901c40d1bebcd2922485529d14689bca3e4ba3..e6ea26b99247a60ca6dacd1edab6d06b7fd1c622 100644
--- a/src/constants/Constants.java
+++ b/src/constants/Constants.java
@@ -39,4 +39,7 @@ public interface Constants {
 	double enemyWidth = 100;
 	double enemyHeight = 100;
 	
+//	powerups
+	String lifeImg = "src/Images1/heart.png";
+	
 }
diff --git a/src/states/Enemy.java b/src/states/Enemy.java
index 4de1167cc821d64bfe02ba3dbbca02a104d81d42..58d037073741ec61740acb99658d243cf10020f5 100644
--- a/src/states/Enemy.java
+++ b/src/states/Enemy.java
@@ -8,7 +8,7 @@ import javafx.scene.image.Image;
 import javafx.scene.image.ImageView;
 
 public class Enemy {
-	
+
 	private double enemyX = -100.00;
 	private double enemyY = 250.00;
 	private Image image;
@@ -18,21 +18,39 @@ public class Enemy {
 
 		try {
 			image = new Image(new FileInputStream(enemyImg));
-			enemyView = new ImageView(image);
-			enemyView.setX(enemyX);
-			enemyView.setY(enemyY);
-			enemyView.setFitHeight(Constants.enemyHeight);
-			enemyView.setFitWidth(Constants.enemyWidth);
+			
 		} catch (FileNotFoundException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 	}
-	
+
+	//	if (collided && enemy.getEnemyX() < player.getPlayerX()) {
+	//		collided = false;
+	//	}
+
+	public boolean playerEnemyCollision(Player player) {
+		boolean hit = false;
+
+		if ((enemyX <= (player.getPlayerX() + 80)) && (enemyX > player.getPlayerX())) {
+			if((player.getPlayerY() + 60) >= enemyY) {
+				hit = true;
+				player.decreaseLives();
+//				if (hit && enemyX < player.getPlayerX()) {
+//					hit = false;
+//				}
+			}
+		}
+
+		return hit;
+	}
+
+
+
 	public void setEnemyX(double pos) {
-		
+
 		this.enemyX = pos;
-		
+
 	}
 
 	public Image getImage() {
@@ -50,7 +68,7 @@ public class Enemy {
 	public double getEnemyY() {
 		return enemyY;
 	}
-	
-	
-	
+
+
+
 }
diff --git a/src/states/ExtraLifePowerUp.java b/src/states/ExtraLifePowerUp.java
new file mode 100644
index 0000000000000000000000000000000000000000..01641cf31eea0d1689eed087d03b4f39c3229a2f
--- /dev/null
+++ b/src/states/ExtraLifePowerUp.java
@@ -0,0 +1,16 @@
+package states;
+
+public class ExtraLifePowerUp extends PowerUp {
+
+	ExtraLifePowerUp(String image) {
+		super(image);
+		// TODO Auto-generated constructor stub
+	}
+
+	@Override
+	public void use(Player player) {
+		// TODO Auto-generated method stub
+
+	}
+
+}
diff --git a/src/states/FlyingEnemy.java b/src/states/FlyingEnemy.java
index ff5071605a6d9a42bd8d9b579d007d4d21132068..290a41b3757d7002809f7cad1f9180cf3173c63c 100644
--- a/src/states/FlyingEnemy.java
+++ b/src/states/FlyingEnemy.java
@@ -1,11 +1,35 @@
 package states;
 
+import java.util.Random;
+
+import javafx.scene.image.Image;
+
 public class FlyingEnemy extends Enemy{
+	
+	private double enemyX = -100.00;
+	private double enemyY = 0;
+	private Image image;
+	private Random rnd;
+	
 
 	public FlyingEnemy(String enemyImg) {
 		super(enemyImg);
 		
 		
 	}
+	
+	
+	public double getEnemyY() {
+//		Gör en random  generator här som returnerar Y koordinat slumpmässigt inom ett spann(om y koordinaten är 0).
+//		När enemy är ute ur frame sätter vi ykoordinaten till 0 så att den kan få en ny vid nästa passering.
+		
+		return enemyY;
+		
+	}
+	
+	public void setEnemyY() {
+		enemyY = 0;
+		
+	}
 
 }
diff --git a/src/states/PlayState.java b/src/states/PlayState.java
index 2697438138c7ba559bf116ea5cf337eabc7fc9a9..173d4fbbbf968d2f36de789c27fc08d0056be65f 100644
--- a/src/states/PlayState.java
+++ b/src/states/PlayState.java
@@ -50,12 +50,13 @@ public class PlayState extends GameState {
 	private HighScore score = new HighScore();
 	private int clearedEnemies;
 	private String scoreText;
+	private ExtraLifePowerUp extraLife;
 
 
 	/* Class only used for testing */
-	
-//	TODO nästa steg, lägg in en flygande enemy för att testa glid funktionen, ändra boundsen på den glidande bilden!
-// 	TODO kanske ta bort att skicka med image när man instansierar player
+
+	//	TODO nästa steg, lägg in en flygande enemy för att testa glid funktionen, ändra boundsen på den glidande bilden!
+	// 	TODO kanske ta bort att skicka med image när man instansierar player
 
 	public PlayState(GameModel model) {
 		super(model);
@@ -69,6 +70,7 @@ public class PlayState extends GameState {
 
 		player = new Player(Constants.playerImg);
 		enemy = new Enemy(Constants.enemyImg);
+		extraLife = new ExtraLifePowerUp(Constants.lifeImg);
 
 		//		menu = new MenuState(model);
 
@@ -84,6 +86,7 @@ public class PlayState extends GameState {
 		g.setFill(fontColor);
 		g.setFont(new Font(30)); // Big letters
 
+		//		ritar liv kvar + nuvarande highscore om det inte är gameover, annars ritar den bara gemaovertexten
 
 		if (!gameOver) {
 			g.fillText(livesleft+player.getLives(), 0, 30);
@@ -93,74 +96,115 @@ public class PlayState extends GameState {
 			g.fillText(gameOverText, Constants.screenWidth/2, 200);
 		}
 
-
+		//		ritar ut marklinjen
 
 		g.setStroke(Color.BLACK);
 		g.setLineWidth(1);
 		g.setLineDashes(2);
 		g.strokeLine(Constants.screenWidth, 350, 0, 350);
 
-		if (enemy.getEnemyX() < 0 - Constants.enemyWidth) {
-			enemy.setEnemyX(Constants.screenWidth);
-		}
+		//		om enemy är ute ur frame, ställer dem om positionen på den så att den börjar om
+
+		
 
+		//		Ritar enemy och player
+		g.drawImage(extraLife.getImage(), extraLife.getPowerUpX(), extraLife.getPowerUpY(), 40, 40);
 		g.drawImage(player.getImage(), player.getPlayerX(), player.getPlayerY(), Constants.playerWidth, Constants.playerHeight);
-		g.drawImage(enemy.getImage(), enemy.getEnemyX(), enemy.getEnemyY(), Constants.enemyWidth, Constants.enemyHeight);
+//		g.drawImage(enemy.getImage(), enemy.getEnemyX(), enemy.getEnemyY(), Constants.enemyWidth, Constants.enemyHeight);
+		drawEnemy(g);
+		
+//		TODO kanske göra en random här också, som väljer om vi ska rita de olika enemies eller powerupsen. Vid en viss score
+//		TODO kommer möjligheten att ta powerups eller möta flyingenemy
+		
 
+	}
+	
+	public void drawEnemy(GraphicsContext g) {
+		
+//		enemy = new Enemy(Constants.enemyImg);
+		g.drawImage(enemy.getImage(), enemy.getEnemyX(), enemy.getEnemyY(), Constants.enemyWidth, Constants.enemyHeight);
+		if (enemy.getEnemyX() < 0 - Constants.enemyWidth) {
+			enemy.setEnemyX(Constants.screenWidth);
+		}
 
+		
 	}
 
-	
+
 	@Override
 	public void keyPressed(KeyEvent key) {
 
-//		TODO gör om till case sats för att städa upp det lite, kladdigt atm + kan behöva flytta funktionalitet
-		
-		if (key.getCode() == KeyCode.ESCAPE) {
 
+		switch (key.getCode()) {
+
+		case ESCAPE:
 			model.switchState(new MenuState(model));
-		} else if (key.getCode() == KeyCode.UP) {
+			break;
 
+		case UP:
+			//		Om spelaren duckar kan den inte hoppa, då ställer sig spelaren upp istället
 			if (down) {
-
 				player.standUp();
 				down = false;
-
 			} else {
-
 				up = true;
-
 			}
+			break;
 
-		} else if (key.getCode() == KeyCode.DOWN) {
+		case DOWN:
+			//		Spelaren kan inte ducka om den är mitt i ett hopp
+			if (!up) {
+				down = true;
+			}
+			break;
 
-			down = true;
+		default:
+			break;
 
 		}
 
+
+
 	}
 
 	@Override
 	public void update() {
 		//om enemy position är mindre än player och collide är true kollar den inte collision
 
+		clearedEnemies ++;
+
+		//		Enemy hoppar 10 snäpp till vänster för varje update
 		enemy.setEnemyX(enemy.getEnemyX()-10);
 
+		//		Om 
 		if (!gameOver) {
-
-			if ((enemy.getEnemyX() <= (player.getPlayerX() + 80)) && (enemy.getEnemyX() > player.getPlayerX())) {
-				//				if (!collided && enemy.getEnemyX() > player.getPlayerX()) {
-				if (!collided) {
-					checkCollision();
+			
+			if (!collided) {
+			collided = enemy.playerEnemyCollision(player);
+				if (Integer.valueOf(player.getLives()) == 0) {
+					gameOver = true;
 				}
-				//				clearedEnemies ++;
 			}
-
 			if (collided && enemy.getEnemyX() < player.getPlayerX()) {
 				collided = false;
 			}
 
 
+
+			////		Så länge enemy och player har överlappande X koordinat(och inte redan har kolliderat), kollar vi om dem kolliderar på Y axeln
+			//			if ((enemy.getEnemyX() <= (player.getPlayerX() + 80)) && (enemy.getEnemyX() > player.getPlayerX())) {
+			//				//				if (!collided && enemy.getEnemyX() > player.getPlayerX()) {
+			//				if (!collided) {
+			//					checkCollision();
+			//				}
+			//				//				clearedEnemies ++;
+			//			}
+			//
+			//			if (collided && enemy.getEnemyX() < player.getPlayerX()) {
+			//				collided = false;
+			//			}
+
+
 			if (up) {
 
 				player.jump();
@@ -181,6 +225,7 @@ public class PlayState extends GameState {
 
 	public void checkCollision() {
 
+		//		Om vi kolliderar på Y axeln
 
 		//		if ((enemy.getEnemyX() <= (player.getPlayerX() + 80)) && (enemy.getEnemyX() > player.getPlayerX()) && ((player.getPlayerY() + 60) >= enemy.getEnemyY() )) {
 		//
@@ -214,7 +259,7 @@ public class PlayState extends GameState {
 		//		} 
 
 
-		//		clearedEnemies ++;
+		//				clearedEnemies ++;
 
 
 	}
diff --git a/src/states/Player.java b/src/states/Player.java
index a0ac4b74895d6eb32956f84f7c0de0709c5803de..15d264e0d57b1f10fb50b7df4118bcf83e93b7b3 100644
--- a/src/states/Player.java
+++ b/src/states/Player.java
@@ -32,11 +32,7 @@ public class Player {
 		try {
 			image = new Image(new FileInputStream(playerImg));
 			slidingImage = new Image(new FileInputStream(Constants.slidingPlayerImg));
-			//			playerView = new ImageView(image);
-			//			playerView.setX(playerX);
-			//			playerView.setY(playerY);
-			//			playerView.setFitHeight(Constants.playerHeight);
-			//			playerView.setFitWidth(Constants.playerWidth);
+	
 		} catch (FileNotFoundException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
@@ -47,9 +43,7 @@ public class Player {
 	}
 
 
-	//	public ImageView getPlayerView() {
-	//		return playerView;
-	//	}
+	
 
 
 	public Image getImage() {
diff --git a/src/states/PowerUp.java b/src/states/PowerUp.java
new file mode 100644
index 0000000000000000000000000000000000000000..0b5901d4abe5a36e92ce17495ef92fc02af0938f
--- /dev/null
+++ b/src/states/PowerUp.java
@@ -0,0 +1,54 @@
+package states;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+
+import constants.Constants;
+import javafx.scene.image.Image;
+
+public abstract class PowerUp {
+	
+	private double powerUpX = (Constants.screenWidth - Constants.playerWidth) / 2;
+	private double powerUpY = 265.00;
+	private Image powerUpImage;
+
+	PowerUp(String image) {
+
+		try {
+			powerUpImage = new Image(new FileInputStream(image));
+			
+		} catch (FileNotFoundException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	public double getPowerUpX() {
+		return powerUpX;
+	}
+
+	public void setPowerUpX(double powerUpX) {
+		this.powerUpX = powerUpX;
+	}
+
+	public double getPowerUpY() {
+		return powerUpY;
+	}
+
+	public Image getImage() {
+		return powerUpImage;
+	}
+	
+	public boolean powerUpPlayerCollision(Player player) {
+		boolean hit = false;
+
+//		här ska det finnas kod för att kolla kollisioner mellan spelare och powerup
+
+		return hit;
+	}
+	
+	public abstract void use(Player player);
+	
+//	här kommer de två olika powerupsen avgöra vad som händer när ma ta den, denna klass kallar på kollisionen
+	
+}