diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java
index 6d0c7fe104b1d1573dd550ebac22f5b9e8a4e51b..9c8b490df483b17ae295a4ecfe3f275f4c34990e 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java
@@ -54,6 +54,7 @@ public class GameSceneController implements Initializable {
     private void updateContent() {
         player.updateEntityMovement(this);
         enemy.updateEntityMovement(this);
+        player.attack(enemy, graphicsContext2D);
     }
 
     private void renderContent(GraphicsContext graphicsContext) {
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/CollisionHandler.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/CollisionHandler.java
index 82574019fe27c171750003bb112063f7fe7cd1db..030f3cc715602f835b7db2e95fb3552d76968dac 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/CollisionHandler.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/CollisionHandler.java
@@ -1,6 +1,6 @@
 package de.hdm_stuttgart.battlearena.Model.Entity;
 
-import javafx.scene.shape.Rectangle;
+import javafx.geometry.BoundingBox;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.LogManager;
@@ -13,68 +13,15 @@ public class CollisionHandler {
         log.debug("CollisionHandler initialized");
     }
 
-    public boolean handleEntityCollision(IEntity player, IEntity entity) {
-        Rectangle playerBoxCollider = player.getBoxCollider();
-        Rectangle entityBoxCollider = entity.getBoxCollider();
-
-        int playerColliderLeftX = (int) playerBoxCollider.getX();
-        int playerColliderRightX = (int) (playerBoxCollider.getX() + playerBoxCollider.getWidth());
-        int playerColliderTopY = (int) playerBoxCollider.getY();
-        int playerColliderBottomY = (int) (playerBoxCollider.getY() + playerBoxCollider.getHeight());
-
-        int entityColliderLeftX = (int) entityBoxCollider.getX();
-        int entityColliderRightX = (int) (entityBoxCollider.getX() + entityBoxCollider.getWidth());
-        int entityColliderTopY = (int) entityBoxCollider.getY();
-        int entityColliderBottomY = (int) (entityBoxCollider.getY() + entityBoxCollider.getHeight());
-
-        int playerSpeed = player.getEntitySpeed();
-        int nextPlayerXPos;
-        int nextPlayerYPos;
+    public boolean handleBoxCollision(BoundingBox colliderA, BoundingBox colliderB) {
+        return colliderA.getMaxX() > colliderB.getMinX() &&
+                colliderA.getMinX() < colliderB.getMaxX() &&
+                colliderA.getMaxY() > colliderB.getMinY() &&
+                colliderA.getMinY() < colliderB.getMaxY();
+    }
 
-        switch (player.getEntityDirection()) {
-            case UP:
-                nextPlayerYPos = playerColliderTopY - playerSpeed;
-                return nextPlayerYPos <= entityColliderBottomY &&
-                        playerColliderTopY > entityColliderBottomY &&
-                        playerColliderLeftX >= entityColliderLeftX &&
-                        playerColliderLeftX <= entityColliderRightX ||
-                        nextPlayerYPos <= entityColliderBottomY &&
-                        playerColliderTopY > entityColliderBottomY &&
-                        playerColliderRightX >= entityColliderLeftX &&
-                        playerColliderRightX <= entityColliderRightX;
-            case DOWN:
-                nextPlayerYPos = playerColliderBottomY + playerSpeed;
-                return nextPlayerYPos >= entityColliderTopY &&
-                        playerColliderBottomY < entityColliderTopY &&
-                        playerColliderLeftX >= entityColliderLeftX &&
-                        playerColliderLeftX <= entityColliderRightX ||
-                        nextPlayerYPos >= entityColliderTopY &&
-                        playerColliderBottomY < entityColliderTopY &&
-                        playerColliderRightX >= entityColliderLeftX &&
-                        playerColliderRightX <= entityColliderRightX;
-            case LEFT:
-                nextPlayerXPos = playerColliderLeftX - playerSpeed;
-                return nextPlayerXPos <= entityColliderRightX &&
-                        playerColliderLeftX > entityColliderRightX &&
-                        playerColliderTopY >= entityColliderTopY &&
-                        playerColliderTopY <= entityColliderBottomY ||
-                        nextPlayerXPos <= entityColliderRightX &&
-                        playerColliderLeftX > entityColliderRightX &&
-                        playerColliderBottomY >= entityColliderTopY &&
-                        playerColliderBottomY <= entityColliderBottomY;
-            case RIGHT:
-                nextPlayerXPos = playerColliderRightX + playerSpeed;
-                return nextPlayerXPos >= entityColliderLeftX &&
-                        playerColliderLeftX < entityColliderLeftX &&
-                        playerColliderTopY >= entityColliderTopY &&
-                        playerColliderTopY <= entityColliderBottomY ||
-                        nextPlayerXPos >= entityColliderLeftX &&
-                        playerColliderLeftX < entityColliderLeftX &&
-                        playerColliderBottomY >= entityColliderTopY &&
-                        playerColliderBottomY <= entityColliderBottomY;
-            default:
-                return false;
-        }
+    public boolean handleMapCollision() {
+        return false;
     }
 
 }
\ No newline at end of file
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/EnemyHandler.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/EnemyHandler.java
index 258a5e095acdc1372883a7869d23dbedde972915..1cf0347ba56791f051ee7a6c67459dca77d81982 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/EnemyHandler.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/EnemyHandler.java
@@ -1,9 +1,11 @@
 package de.hdm_stuttgart.battlearena.Model.Entity;
 
 import de.hdm_stuttgart.battlearena.Controller.GameSceneController;
+
+import javafx.geometry.BoundingBox;
 import javafx.scene.canvas.GraphicsContext;
 import javafx.scene.paint.Color;
-import javafx.scene.shape.Rectangle;
+
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.LogManager;
 
@@ -11,7 +13,7 @@ class EnemyHandler implements IEntity{
 
     private static final Logger log = LogManager.getLogger(EnemyHandler.class);
 
-    private final Rectangle boxCollider = new Rectangle(300, 200, 48, 48);
+    private final BoundingBox boxCollider = new BoundingBox(300, 200, 48, 48);
 
     private EntityDirection entityDirection = EntityDirection.DOWN;
 
@@ -32,6 +34,11 @@ class EnemyHandler implements IEntity{
 
     }
 
+    @Override
+    public void attack(IEntity entity, GraphicsContext graphicsContext) {
+
+    }
+
     @Override
     public void updateEntityAnimation() {
 
@@ -44,7 +51,7 @@ class EnemyHandler implements IEntity{
     }
 
     @Override
-    public Rectangle getBoxCollider() {
+    public BoundingBox getBoxCollider() {
         return boxCollider;
     }
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/IEntity.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/IEntity.java
index 05611410257c5b1f5af16bf6dda8e04d53a0e282..5c5f3df55825b848ca8942573793ac93fac1dcd7 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/IEntity.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/IEntity.java
@@ -1,6 +1,7 @@
 package de.hdm_stuttgart.battlearena.Model.Entity;
 
 import de.hdm_stuttgart.battlearena.Controller.GameSceneController;
+import javafx.geometry.BoundingBox;
 import javafx.scene.canvas.GraphicsContext;
 import javafx.scene.shape.Rectangle;
 
@@ -12,11 +13,13 @@ public interface IEntity {
 
    void updateEntityMovement(GameSceneController gameScene);
 
+   void attack(IEntity entity, GraphicsContext graphicsContext);
+
    void updateEntityAnimation();
 
    void renderEntity(GraphicsContext graphicsContext);
 
-   Rectangle getBoxCollider();
+   BoundingBox getBoxCollider();
 
    EntityDirection getEntityDirection();
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java
index 4fc28e5bdf7d05fefbdffd35488a6ad11d505f2f..1c940ad4d34c939cf47bc1b81b054949100380d8 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java
@@ -3,9 +3,9 @@ package de.hdm_stuttgart.battlearena.Model.Entity;
 import de.hdm_stuttgart.battlearena.Controller.GameSceneController;
 import de.hdm_stuttgart.battlearena.Model.Inputs.InputHandler;
 
+import javafx.geometry.BoundingBox;
 import javafx.scene.canvas.GraphicsContext;
 import javafx.scene.image.Image;
-import javafx.scene.shape.Rectangle;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.LogManager;
@@ -21,13 +21,23 @@ class Player implements IEntity {
 
     GraphicsContext gameScene;
 
-    private  Rectangle boxCollider;
+    private BoundingBox boxCollider;
 
-    private Image directionDownOne, directionDownTwo, directionUpOne, directionUpTwo, directionLeftOne, directionLeftTwo, directionRightOne, directionRightTwo;
+    private Image directionDownOne,
+            directionDownTwo,
+            directionUpOne,
+            directionUpTwo,
+            directionLeftOne,
+            directionLeftTwo,
+            directionRightOne,
+            directionRightTwo;
 
     private int spriteCounter = 0;
     private int spriteNumber = 1;
 
+    private final int playerWidth = 19;
+    private final int playerHeight = 35;
+
     private int mapPosX;
     private int mapPosY;
     private int playerSpeed;
@@ -45,7 +55,7 @@ class Player implements IEntity {
     public void initializeEntity() {
         mapPosX = 10;
         mapPosY = 10;
-        boxCollider = new Rectangle(mapPosX+10, mapPosY+10, 32, 32);
+        boxCollider = new BoundingBox(mapPosX+15,mapPosY+10, playerWidth, playerHeight);
         playerSpeed = 3;
         playerDirection = EntityDirection.DOWN;
     }
@@ -79,9 +89,12 @@ class Player implements IEntity {
                 playerDirection = EntityDirection.RIGHT;
             }
 
-            boolean isColliding = collisionHandler.handleEntityCollision(this, gameScene.getEnemy());
+            boolean isMapCollision = collisionHandler.handleMapCollision();
+
+            int lastMapPosX = mapPosX;
+            int lastMapPosY = mapPosY;
 
-            if (!isColliding) {
+            if (!isMapCollision) {
                 switch (playerDirection) {
                     case UP:
                         mapPosY -= playerSpeed;
@@ -97,13 +110,71 @@ class Player implements IEntity {
                 }
             }
 
-            boxCollider = new Rectangle(mapPosX + 10, mapPosY + 10, 32, 32);
+            boolean isEntityCollision = boxCollider.intersects(gameScene.getEnemy().getBoxCollider());
+            //boolean isEntityCollision = collisionHandler.handleBoxCollision(boxCollider, gameScene.getEnemy().getBoxCollider());
+
+            if (isEntityCollision) {
+                if (playerDirection == EntityDirection.UP) {
+                    mapPosY = lastMapPosY + 30;
+                } else if (playerDirection == EntityDirection.DOWN) {
+                    mapPosY = lastMapPosY - 30;
+                } else if (playerDirection == EntityDirection.LEFT) {
+                    mapPosX = lastMapPosX + 30;
+                } else {
+                    mapPosX = lastMapPosX - 30;
+                }
+            }
+
+            boxCollider = new BoundingBox(mapPosX+15,mapPosY+10, playerWidth, playerHeight);
 
             updateEntityAnimation();
 
         }
     }
 
+    @Override
+    public void attack(IEntity entity, GraphicsContext graphicsContext) {
+        BoundingBox hitBox;
+        int attackRange = 30;
+        int attackWidth = 10;
+
+        if (inputHandler.isAttack()){
+            if (playerDirection == EntityDirection.UP) {
+                hitBox = new BoundingBox(mapPosX+playerWidth, mapPosY-10, attackWidth, attackRange);
+                graphicsContext.strokeRect(mapPosX+playerWidth, mapPosY-10, attackWidth, attackRange);
+                if (hitBox.intersects(entity.getBoxCollider())) {
+                    //todo: implement health
+                    graphicsContext.strokeText("Hit", 10, 10);
+                }
+            } else if (playerDirection == EntityDirection.DOWN) {
+                hitBox = new BoundingBox(mapPosX+playerWidth, mapPosY+playerHeight, attackWidth, attackRange);
+                graphicsContext.strokeRect(mapPosX+playerWidth, mapPosY+playerHeight, attackWidth, attackRange);
+                if (hitBox.intersects(entity.getBoxCollider())) {
+                    //todo: implement health
+                    graphicsContext.strokeText("Hit", 10, 10);
+                }
+            } else if (playerDirection == EntityDirection.LEFT) {
+                hitBox = new BoundingBox(mapPosX-attackWidth, mapPosY+((double) playerHeight /2),
+                        attackRange, attackWidth);
+                graphicsContext.strokeRect(mapPosX-attackWidth, mapPosY+((double) playerHeight /2),
+                        attackRange, attackWidth);
+                if (hitBox.intersects(entity.getBoxCollider())) {
+                    //todo: implement health
+                    graphicsContext.strokeText("Hit", 10, 10);
+                }
+            } else {
+                hitBox = new BoundingBox(mapPosX+playerWidth+attackWidth, mapPosY+((double) playerHeight /2),
+                        attackRange, attackWidth);
+                graphicsContext.strokeRect(mapPosX+playerWidth+attackWidth, mapPosY+((double) playerHeight /2),
+                        attackRange, attackWidth);
+                if (hitBox.intersects(entity.getBoxCollider())) {
+                    //todo: implement health
+                    graphicsContext.strokeText("Hit", 10, 10);
+                }
+            }
+        }
+    }
+
     @Override
     public void updateEntityAnimation() {
         spriteCounter++;
@@ -122,7 +193,8 @@ class Player implements IEntity {
     public void renderEntity(GraphicsContext graphicsContext) {
         Image playerSprite = null;
 
-        graphicsContext.strokeRect(boxCollider.getX(), boxCollider.getY(), boxCollider.getWidth(), boxCollider.getHeight());
+        //for debugging collision
+        graphicsContext.strokeRect(mapPosX+15,mapPosY+10, playerWidth, playerHeight);
 
         switch (playerDirection) {
             case UP:
@@ -163,7 +235,7 @@ class Player implements IEntity {
     }
 
     @Override
-    public Rectangle getBoxCollider() {
+    public BoundingBox getBoxCollider() {
         return boxCollider;
     }
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Inputs/InputHandler.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Inputs/InputHandler.java
index 883b00bc8e2618b05762cb733732f2b8334205fd..8dfd2f3d3d51063e409488e71a25814030ed2f68 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Inputs/InputHandler.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Inputs/InputHandler.java
@@ -18,7 +18,7 @@ public class InputHandler {
         return inputHandler;
     }
 
-    private boolean moveUp, moveDown, moveLeft, moveRight;
+    private boolean moveUp, moveDown, moveLeft, moveRight, attack;
 
     public void handleKeyPress(KeyEvent event) {
         KeyCode code = event.getCode();
@@ -36,6 +36,8 @@ public class InputHandler {
             case D:
                 moveRight = true;
                 break;
+            case SPACE:
+                attack = true;
         }
     }
 
@@ -55,6 +57,8 @@ public class InputHandler {
             case D:
                 moveRight = false;
                 break;
+            case SPACE:
+                attack = false;
         }
     }
 
@@ -73,4 +77,8 @@ public class InputHandler {
     public boolean isMoveRight() {
         return moveRight;
     }
+
+    public boolean isAttack() {
+        return attack;
+    }
 }
\ No newline at end of file