diff --git a/src/main/java/engine/Kernel.java b/src/main/java/engine/Kernel.java
index 843d7f3a819e62eb22df99713f4fcbb3c6ede504..1b6333a2c0a657beb9dbb281912e7dcdaf5902a7 100644
--- a/src/main/java/engine/Kernel.java
+++ b/src/main/java/engine/Kernel.java
@@ -40,7 +40,7 @@ public class Kernel {
         engines.add(physicEngine);
         pongObjectEntityHashMap = physicEngine.pongObjectEntityHashMap;
 
-        this.start();
+        this.update();
         this.setKeysListeners((JPanel) this.graphicEngine.getContentPane());
     }
 
@@ -62,7 +62,7 @@ public class Kernel {
      * One step of the game. Update all objects positions and repaint the grid.
      */
     public void update() {
-        System.out.println("One step");
+        //System.out.println("One step");
         // Updating all objects positions
 
         for (Engine engine: engines
diff --git a/src/main/java/engine/physic/PhysicEngine.java b/src/main/java/engine/physic/PhysicEngine.java
index 64ac67034aa26fdb99a7e5c5d57dd54ebe414349..657134dcfc23120ecebee94cdccc3abbd401611f 100644
--- a/src/main/java/engine/physic/PhysicEngine.java
+++ b/src/main/java/engine/physic/PhysicEngine.java
@@ -8,6 +8,8 @@ import pong.PongObject;
 import java.util.HashMap;
 
 public class PhysicEngine implements Engine {
+
+    int i = 0;
     public HashMap<PongObject, Entity> pongObjectEntityHashMap = new HashMap<>();
 
     private HashMap<Coordinates2D, PongObject> positions = new HashMap<>();
@@ -26,14 +28,34 @@ public class PhysicEngine implements Engine {
     @Override
     public void update(){
         for (PongObject pongObject: Kernel.gameObjects) {
-            pongObjectEntityHashMap.get(pongObject).updatePosition(); // Updating of the associated movable position
+            Coordinates2D previousPosition = pongObjectEntityHashMap.get(pongObject).getPosition();
+            pongObjectEntityHashMap.get(pongObject).updatePosition();// Updating of the associated movable position
+            if(pongObject.getName().equals("Ball")){
+                for (PongObject po2: pongObjectEntityHashMap.keySet()
+                     ) {
+                    if(!po2.getName().equals("Ball")){
+                        if(checkCollision(pongObjectEntityHashMap.get(pongObject), pongObjectEntityHashMap.get(po2))){
+                            i++;
+                            System.out.println("Collision " + i);
+                            pongObjectEntityHashMap.get(pongObject).setPosition(previousPosition);
+                            pongObjectEntityHashMap.get(pongObject).getSpeed().mul(-1);
+                            pongObjectEntityHashMap.get(pongObject).updatePosition();
+                        }
+                    }
+                }
+            }
             //checkCollision();
             pongObject.setPosition(pongObjectEntityHashMap.get(pongObject).getPosition()); // Updating of the pong object position
         }
     }
 
-    public void checkCollision(Entity firstObject, Entity secondObject){
-        //TODO: check collision between two objects
+    public boolean checkCollision(Entity firstObject, Entity secondObject){
+        Coordinates2D pos1 = firstObject.getPosition();
+        Coordinates2D pos2 = secondObject.getPosition();
+        return pos1.getX() < pos2.getX() + secondObject.getWidth() &&
+                pos1.getX() + firstObject.getWidth() > pos2.getX() &&
+                pos1.getY() < pos2.getY() + secondObject.getHeight() &&
+                firstObject.getHeight() + pos1.getY() > pos2.getY();
     }
 
 }