diff --git a/Battle Pong/Main.gd b/Battle Pong/Main.gd
index 5a743b882a8826c24808b146b72aa220c6b7937d..f5320cad36d047912684ded9042ded1635a24dd7 100644
--- a/Battle Pong/Main.gd	
+++ b/Battle Pong/Main.gd	
@@ -43,6 +43,7 @@ func _ready():
     learn_with_images = $"/root/GameSettings".learn_with_images
     game_playtime_per_step = $"/root/GameSettings".game_playtime_per_step
     max_wins = $"/root/GameSettings".game_wins_to_reset
+    
     if not enable_rendering:
         VisualServer.render_loop_enabled = false # disable rendering to create a massive boost
     if learn_with_images:
@@ -248,11 +249,18 @@ func _on_data(id):
                     play()
                 var return_value = null
                 if learn_with_images:
-                    return_value = yield(get_yielded_return_value_as_utf8_JSON(), "completed")
+                    return_value = yield(get_yielded_return_value(), "completed")
+                else:
+                    return_value = get_return_value()
+                    
+                if (player_one_client_id != null) and (player_one_client_id == id):    
+                    _server.get_peer(id).put_packet((JSON.print(return_value['player_one'])).to_utf8())
+                elif player_two_client_id != null and player_two_client_id == id:
+                    _server.get_peer(id).put_packet((JSON.print(return_value['player_two'])).to_utf8())
                 else:
-                    return_value = get_return_value_as_utf8_JSON()
-                _server.get_peer(id).put_packet(return_value)
+                    _server.get_peer(id).put_packet((JSON.print(return_value)).to_utf8()) # Fallback, if the id is unknown
                 pass
+                
             if($"/root/GameSettings".trainings_mode_enabled):
                 if(i=="player_one_training"):
                     next_step_player_one = true
@@ -287,19 +295,25 @@ func _on_data(id):
         timeout()
     
         
-func get_observarion():
-    return {"PlayerOne":{"X":$PlayerOne.position.x,"Y":$PlayerOne.position.y, "TrainingAction":action_trainer_one}, "PlayerTwo":{"X":$PlayerTwo.position.x,"Y":$PlayerTwo.position.y, "TrainingAction":action_trainer_two}, "ball":ball.get_observation()}
+func get_observation():
+    var ball_observation=ball.get_observation()
+    var player_one = {"PlayerOne":{"X":$PlayerOne.position.x,"Y":$PlayerOne.position.y, "TrainingAction":action_trainer_one}, "PlayerTwo":{"X":$PlayerTwo.position.x,"Y":$PlayerTwo.position.y, "TrainingAction":action_trainer_two}, "ball":ball_observation['player_one']}
+    var player_two = {"PlayerOne":{"X":abs($PlayerTwo.position.x - $"/root/GameSettings".display_window_width),"Y":$PlayerTwo.position.y, "TrainingAction":action_trainer_two}, "PlayerTwo":{"X":abs($PlayerOne.position.x- $"/root/GameSettings".display_window_width),"Y":$PlayerOne.position.y, "TrainingAction":action_trainer_one}, "ball":ball_observation['player_two']}
+    return {"player_one":player_one, "player_two":player_two}
         
-func get_return_value_as_utf8_JSON():
-    var observation = get_observarion()
-    var return_value = {"observation":observation, "reward":{"PlayerOne":reward_player_one, "PlayerTwo":reward_player_two}, "done":(not playing), "info":{"PlayerOneScore":score_player_one, "PlayerTwoScore":score_player_two}}
-    return (JSON.print(return_value)).to_utf8()
-
-func get_yielded_return_value_as_utf8_JSON():
-    var observation = get_observarion()
+func get_return_value():
+    var observation = get_observation()
+    var return_value_player_one = {"observation":observation['player_one'], "reward":{"PlayerOne":reward_player_one, "PlayerTwo":reward_player_two}, "done":(not playing), "info":{"PlayerOneScore":score_player_one, "PlayerTwoScore":score_player_two}}
+    var return_value_player_two = {"observation":observation['player_two'], "reward":{"PlayerOne":reward_player_two, "PlayerTwo":reward_player_one}, "done":(not playing), "info":{"PlayerOneScore":score_player_two, "PlayerTwoScore":score_player_one}}
+    return {'player_one':return_value_player_one, 'player_two':return_value_player_two}
+
+func get_yielded_return_value():
+    var observation = get_observation()
     var screenshot = yield(get_screenshot(), "completed")
-    var return_value = {"observation":observation, "reward":{"PlayerOne":reward_player_one, "PlayerTwo":reward_player_two}, "done":(not playing), "info":{"PlayerOneScore":score_player_one, "PlayerTwoScore":score_player_two, "screenshot":screenshot}}
-    return (JSON.print(return_value)).to_utf8()
+
+    var return_value_player_one = {"observation":observation['player_one'], "reward":{"PlayerOne":reward_player_one, "PlayerTwo":reward_player_two}, "done":(not playing), "info":{"PlayerOneScore":score_player_one, "PlayerTwoScore":score_player_two, "screenshot":screenshot['player_one']}}
+    var return_value_player_two = {"observation":observation['player_two'], "reward":{"PlayerOne":reward_player_two, "PlayerTwo":reward_player_one}, "done":(not playing), "info":{"PlayerOneScore":score_player_two, "PlayerTwoScore":score_player_one, "screenshot":screenshot['player_two']}}
+    return {'player_one':return_value_player_one, 'player_two':return_value_player_two}
 
 func get_screenshot():
     get_viewport().set_clear_mode(Viewport.CLEAR_MODE_ONLY_NEXT_FRAME)
@@ -318,16 +332,24 @@ func get_screenshot():
     
     #thumbnail.save_png('test.png') # Save Image as file - to debug
 
-    var array : PoolByteArray = thumbnail.get_data()
     var sg_width = thumbnail.get_width()
     var sg_height = thumbnail.get_height()
     var sg_format = thumbnail.get_format()
-    var sg_u_size = array.size()
-    var sg_saved_img = Marshalls.raw_to_base64(array)
-
-    var metadata = {"image" : sg_saved_img, "size" : sg_u_size, "width" : sg_width, "height" : sg_height, "format" : sg_format}
     
-    return metadata
+    var array_player_one : PoolByteArray = thumbnail.get_data()
+    var sg_saved_img_player_one = Marshalls.raw_to_base64(array_player_one)
+    var sg_u_size_player_one = array_player_one.size()
+    var screenshot_player_one = {"image" : sg_saved_img_player_one, "size" : sg_u_size_player_one, "width" : sg_width, "height" : sg_height, "format" : sg_format}
+    
+    thumbnail.flip_x()
+    var array_player_two : PoolByteArray = thumbnail.get_data()
+    var sg_saved_img_player_two = Marshalls.raw_to_base64(array_player_two)
+    var sg_u_size_player_two = array_player_two.size()
+    var screenshot_player_two = {"image" : sg_saved_img_player_one, "size" : sg_u_size_player_two, "width" : sg_width, "height" : sg_height, "format" : sg_format}
+    
+    
+    return {"player_one":screenshot_player_one, "player_two":screenshot_player_two}
+
 
 func timeout():
     pause()  
@@ -340,17 +362,17 @@ func timeout():
     
     var return_value = null
     if learn_with_images:
-        return_value = yield(get_yielded_return_value_as_utf8_JSON(), "completed")
+        return_value = yield(get_yielded_return_value(), "completed")
     else:
-        return_value = get_return_value_as_utf8_JSON()
+        return_value = get_return_value()
         
     reward_player_one = 0
     reward_player_two = 0
     ##print(return_value)
     if(player_one_client_id):
-        _server.get_peer(player_one_client_id).put_packet(return_value)
+        _server.get_peer(player_one_client_id).put_packet((JSON.print(return_value['player_one'])).to_utf8())
     if(player_two_client_id):
-        _server.get_peer(player_two_client_id).put_packet(return_value)
+        _server.get_peer(player_two_client_id).put_packet((JSON.print(return_value['player_two'])).to_utf8())
 
     
 func pause():