diff --git a/__pycache__/game.cpython-37.pyc b/__pycache__/game.cpython-37.pyc
index 5b8432af0d8c5acac0f831247a37219ab050868e..fedd753e2674a8642006a37278bf45f5f8625da6 100644
Binary files a/__pycache__/game.cpython-37.pyc and b/__pycache__/game.cpython-37.pyc differ
diff --git a/__pycache__/online_game.cpython-37.pyc b/__pycache__/online_game.cpython-37.pyc
index 7d74433ffb4345c231cf44f2afa9be4cc30a94a1..34f52804aa7f095fa97db4b2be76f81ee3868e27 100644
Binary files a/__pycache__/online_game.cpython-37.pyc and b/__pycache__/online_game.cpython-37.pyc differ
diff --git a/__pycache__/player.cpython-37.pyc b/__pycache__/player.cpython-37.pyc
index 1f9ad5ed24cfe02864f5c9666417d01e2f757f0a..831042e94b4d45bce0e16f983988312040f3c0a4 100644
Binary files a/__pycache__/player.cpython-37.pyc and b/__pycache__/player.cpython-37.pyc differ
diff --git a/__pycache__/team.cpython-37.pyc b/__pycache__/team.cpython-37.pyc
index 262ff0e70bc7906aed32675318ebda02b1e273fc..112d1f5b1a008c9967e728deb2e09065d591beae 100644
Binary files a/__pycache__/team.cpython-37.pyc and b/__pycache__/team.cpython-37.pyc differ
diff --git a/game.py b/game.py
index 44dcad8e7ea42a1e98f34a5b7af09ef01b3861fe..7c548e59d26cd487e02c58257d0714810b1ca7e0 100644
--- a/game.py
+++ b/game.py
@@ -8,6 +8,7 @@ class Game:
         self.team_2 = Team()
         self.ball = Ball()
         self.on = False
+        self.linked_to = -1
 
     def start(self):
         self.on = True
@@ -31,11 +32,11 @@ class Game:
         if team == 2:
             self.team_2.set_ia(ia)
 
-    def output(self,team):
+    def predict(self,team):
         if team == 1:
-            return self.team_1.ia.predict(self,1)
+            self.team_1.ia.predict(self,1)
         if team == 2:
-            return self.team_2.ia.predict(self,2)
+            self.team_2.ia.predict(self,2)
 
     def input(self):
         input = []
diff --git a/ias/__pycache__/ia.cpython-37.pyc b/ias/__pycache__/ia.cpython-37.pyc
index 3216aa425a1e9073ef7ffa850512f172c6f53510..f96065371a06dd696407566e10c94493593aecb2 100644
Binary files a/ias/__pycache__/ia.cpython-37.pyc and b/ias/__pycache__/ia.cpython-37.pyc differ
diff --git a/ias/__pycache__/ia_0000001.cpython-37.pyc b/ias/__pycache__/ia_0000001.cpython-37.pyc
index b62a8cd8bcd5fa43633b386fde4069f845336e53..581233eb6deea61447149dda820d52908a2c79f6 100644
Binary files a/ias/__pycache__/ia_0000001.cpython-37.pyc and b/ias/__pycache__/ia_0000001.cpython-37.pyc differ
diff --git a/ias/ia.py b/ias/ia.py
index e125213ce33fcc72bb217fbecabd9d2b3f7f2326..6a7ece1941aee162d9a70c74a7dcc7909edc4d37 100644
--- a/ias/ia.py
+++ b/ias/ia.py
@@ -3,5 +3,5 @@ class IA:
         self.name = ''
         self.author = ''
     def predict(self,game,team):
-        return [1,1,1,1,1,1,1,1,1,1,1] 
+        pass
     
\ No newline at end of file
diff --git a/ias/ia_0000001.py b/ias/ia_0000001.py
index 4ac4d4909f0382937029bf319a009f3822c28495..8cd2775ea90049848cfc361bdadbc2570570bd31 100644
--- a/ias/ia_0000001.py
+++ b/ias/ia_0000001.py
@@ -7,12 +7,13 @@ class my_ia(IA):
         self.author = 'faruk'
             
     def predict(self,game,team):
-        l = []
         for i in range(5):
             if team == 1:
                 player = game.team_1.players[i]
+                game.team_1.set_kick_catch(1)
             elif team == 2:
                 player = game.team_2.players[i]
+                game.team_2.set_kick_catch(1)
             ball = game.ball
 
             dx = ball.get_pos_x() - player.get_pos_x()
@@ -20,9 +21,6 @@ class my_ia(IA):
 
             ang = atan2(dy,dx)
             
-            l.append(1)
-            l.append(ang)
-       
-        l.append(1)
+            player.set_velocity(1)
+            player.set_angle(ang)
 
-        return l
diff --git a/online_game.py b/online_game.py
index 1c20d468b6725c1e28a184283b5a77454a9ea49f..996cb4d0d18b144416de41b0a89464892c76d477 100644
--- a/online_game.py
+++ b/online_game.py
@@ -33,26 +33,40 @@ class OnlineGame(Game):
         self.connected = True
         print('Connected as team '+str(self.team))
 
-    def get_input(self):
+    def pull(self):
         d = {'msg_type':'[GET] Game State Request'}
         r = self.send_message(d)
         if (not r is None):
             r = r.split(';')
-            input = [float(r[i]) for i in range(22)]
+            input = [float(r[i]) for i in range(23)]
             for i in range(5):
                 self.team_1.players[i].set_position(input[2*i],input[2*i+1])
                 self.team_2.players[i].set_position(input[10+2*i],input[10+2*i+1])
             self.ball.set_position(input[20],input[21])
+            self.linked_to = input[22]
 
-    def send_output(self):
-        d = {'msg_type':'[POST] Refresh State','team':str(self.team),'output':str(self.output(self.team))}
+    def push(self):
+        output = []
+        if self.team == 1:
+            for i in range(5):
+                output.append(self.team_1.players[i].get_velocity())
+                output.append(self.team_1.players[i].get_angle())
+            output.append(self.team_1.get_kick_catch())
+        if self.team == 2:
+            for i in range(5):
+                output.append(self.team_2.players[i].get_velocity())
+                output.append(self.team_2.players[i].get_angle())
+            output.append(self.team_2.get_kick_catch())
+
+        d = {'msg_type':'[POST] Refresh State','team':str(self.team),'output':str(output)}
         self.send_message(d)
     
     def play(self):
         print('Playing ...')
         while(self.connected):
-            self.get_input()
-            self.send_output()
+            self.pull()
+            self.predict(self.team)
+            self.push()
         print('Finished.')
 
 
diff --git a/player.py b/player.py
index b912b53499e18e68c160b72ac52be2e6215bc18b..93114eb0accd89e537cf9edd79b08f5c4261b6a5 100644
--- a/player.py
+++ b/player.py
@@ -4,9 +4,19 @@ class Player:
     self.name = ""
     self.goal_keeper = goal_keeper
     self.angle = 0
+    self.vel = 0
 
-  def set_direction(self,angle):
+  def set_angle(self,angle):
     self.angle = angle
+    
+  def get_angle(self):
+    return self.angle
+  
+  def set_velocity(self,vel):
+    self.vel = vel
+  
+  def get_velocity(self):
+    return self.vel
 
   def set_position(self,pos_x, pos_y):
     self.pos_x = pos_x
diff --git a/stadium/ball.pde b/stadium/ball.pde
index 4775bb5ab87067ecd3414a72a17d6925d91a83a0..166c0cf9f066704bb686385adf51100cec5fdc7e 100644
--- a/stadium/ball.pde
+++ b/stadium/ball.pde
@@ -3,9 +3,14 @@ class Ball {
   float pos_y;
   float vel_x;
   float vel_y;
-  int linked_to = -1;
+  int linked_to;
   Ball() {
+    this.reset();
+  }
+  void reset(){
+    this.set_position(0,0);
     this.set_velocity(0,0);
+    this.linked_to = -1;
   }
   void set_position(float pos_x, float pos_y) {
     this.pos_x = pos_x;
diff --git a/stadium/game.pde b/stadium/game.pde
index aa3d1474869180a6efb92f5147197de8cb2a3fb9..766cc673715cc8e220607f86dd814c1a49d7e2ab 100644
--- a/stadium/game.pde
+++ b/stadium/game.pde
@@ -12,6 +12,20 @@ class Game {
     this.team_2 = new Team(2);
     this.ball = new Ball();
   }
+  void verify_goal(){
+     if(this.ball.get_pos_x()>100){
+         this.team_1.score += 1;
+         this.team_1.reset();
+         this.team_2.reset();
+         this.ball.reset();
+     }
+     if(this.ball.get_pos_x()<-100){
+         this.team_2.score += 1;
+         this.team_1.reset();
+         this.team_2.reset();
+         this.ball.reset();
+     }
+  }
   void keep_distance(Player player_1, Player player_2) {
 
     float xm = player_1.get_pos_x()/2.0 + player_2.get_pos_x()/2.0;
@@ -54,7 +68,7 @@ class Game {
     }
   }
   float[] input() {
-    float[] input = new float[22];
+    float[] input = new float[23];
     for (int i=0; i<5; i++) {
       input[2*i] = this.team_1.players[i].get_pos_x();
       input[2*i+1] = this.team_1.players[i].get_pos_y();
@@ -63,6 +77,7 @@ class Game {
     }
     input[20] = this.ball.get_pos_x();
     input[21] = this.ball.get_pos_y();
+    input[22] = float(this.linked_to);
     return input;
   }
   void ball_mechanic(float delta_t) {
@@ -130,6 +145,7 @@ class Game {
     this.team_2.run(delta_t);
     this.ball_mechanic(delta_t);
     this.verify_colision();
+    this.verify_goal();
   }
   void show() {
     this.team_1.show();
diff --git a/stadium/player.pde b/stadium/player.pde
index fad6d174989953bb538173f843af73862d829737..cf2628c5b4cd2971a1916e4e30ae1fcc902fa02b 100644
--- a/stadium/player.pde
+++ b/stadium/player.pde
@@ -11,6 +11,7 @@ class Player {
     this.goal_keeper = goal_keeper;
     this._color = color(0);
     this.angle = 0;
+    this.vel = 0;
   }
   void set_direction(float angle) {
     this.angle = angle;
diff --git a/stadium/socket.pde b/stadium/socket.pde
index f23305f592bae432360a020525c91e8284315e85..7c6f15f1decde55cc13b92b843dcb7193f4a3200 100644
--- a/stadium/socket.pde
+++ b/stadium/socket.pde
@@ -58,7 +58,7 @@ class Socket {
   void send_input(Client c) {
     String s = "";
     float[] input = game.input();
-    for (int i = 0; i<22; i++) {
+    for (int i = 0; i<23; i++) {
       s += str(input[i])+";";
     }
     c.write(s);
diff --git a/stadium/team.pde b/stadium/team.pde
index 73fbfb594d5132c07f0fe2be2eea30f5a93f5359..455812bc473deff396f62e0a8d0c4bf4928c166b 100644
--- a/stadium/team.pde
+++ b/stadium/team.pde
@@ -12,7 +12,7 @@ class Team {
     for (int i = 1; i<5; i++) {
       this.players[i] = new Player(false);
     }
-    this.initialize_players();
+    this.reset();
     this.set_color(color(random(255), random(255), random(255)));
   }
   void refresh_team(float[] output) {
@@ -22,7 +22,7 @@ class Team {
     }
     this.kick_catch = output[10];
   }
-  void initialize_players() {
+  void reset() {
     int s = 1;
     if (this.team == 2) {
       s = -1;
diff --git a/team.py b/team.py
index c0651075c2da7f4e2e08adcd28e7ef2f910b8f3b..e26c2ab84c8b7685230564338143d9dab38a31d6 100644
--- a/team.py
+++ b/team.py
@@ -11,9 +11,17 @@ class Team:
             self.players.append(Player(False))
         self.initial_position()
         self.score = 0
+        self.kick_catch = 0
     
     def set_ia(self,ia):
         self.ia = ia
+
+    def get_kick_catch(self):
+        return self.kick_catch
+    
+    def set_kick_catch(self,kick_catch):
+        self.kick_catch = kick_catch
+
     def get_score(self):
         return self.score