diff --git a/scenes/player.tscn b/scenes/player.tscn
index 1f281bf..c783b99 100644
--- a/scenes/player.tscn
+++ b/scenes/player.tscn
@@ -29,6 +29,58 @@ radial_segments = 64
 rings = 8
 _sections_unfolded = [ "Resource" ]
 
+[sub_resource type="SpatialMaterial" id=5]
+
+render_priority = 0
+flags_transparent = false
+flags_unshaded = false
+flags_vertex_lighting = false
+flags_no_depth_test = false
+flags_use_point_size = false
+flags_world_triplanar = false
+flags_fixed_size = false
+flags_albedo_tex_force_srgb = false
+vertex_color_use_as_albedo = false
+vertex_color_is_srgb = false
+params_diffuse_mode = 0
+params_specular_mode = 0
+params_blend_mode = 0
+params_cull_mode = 0
+params_depth_draw_mode = 0
+params_line_width = 1.0
+params_point_size = 1.0
+params_billboard_mode = 0
+params_grow = false
+params_use_alpha_scissor = false
+albedo_color = Color( 1, 1, 1, 1 )
+metallic = 0.0
+metallic_specular = 0.5
+metallic_texture_channel = 0
+roughness = 0.0
+roughness_texture_channel = 0
+emission_enabled = false
+normal_enabled = false
+rim_enabled = false
+clearcoat_enabled = false
+anisotropy_enabled = false
+ao_enabled = false
+depth_enabled = false
+subsurf_scatter_enabled = false
+transmission_enabled = false
+refraction_enabled = false
+detail_enabled = false
+uv1_scale = Vector3( 1, 1, 1 )
+uv1_offset = Vector3( 0, 0, 0 )
+uv1_triplanar = false
+uv1_triplanar_sharpness = 1.0
+uv2_scale = Vector3( 1, 1, 1 )
+uv2_offset = Vector3( 0, 0, 0 )
+uv2_triplanar = false
+uv2_triplanar_sharpness = 1.0
+proximity_fade_enable = false
+distance_fade_enable = false
+_sections_unfolded = [ "Albedo", "Flags", "Parameters", "Vertex Color" ]
+
 [node name="RigidBody" type="RigidBody" index="0" groups=[
 "player",
 ]]
@@ -93,7 +145,7 @@ _sections_unfolded = [ "Transform" ]
 transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.19053, 0 )
 _sections_unfolded = [ "Transform" ]
 
-[node name="MeshInstance" type="MeshInstance" parent="Yaw/Pitch" index="0"]
+[node name="RotatedHead" type="MeshInstance" parent="Yaw/Pitch" index="0"]
 
 transform = Transform( 2.65431e-14, -1.62921e-07, 1, -1, -1.62921e-07, 0, 1.62921e-07, -1, -1.62921e-07, 0, -0.0649133, -0.103671 )
 layers = 1
@@ -187,7 +239,7 @@ cast_to = Vector3( 0, 0, -100 )
 collision_mask = 1
 _sections_unfolded = [ "Transform" ]
 
-[node name="MeshInstance" type="MeshInstance" parent="." index="6"]
+[node name="MainMesh" type="MeshInstance" parent="." index="6"]
 
 transform = Transform( 1, 0, 0, 0, -1.62921e-07, -1, 0, 1, -1.62921e-07, 0, 0.567933, 0 )
 layers = 1
@@ -201,7 +253,7 @@ lod_max_distance = 0.0
 lod_max_hysteresis = 0.0
 mesh = SubResource( 4 )
 skeleton = NodePath("..")
-material/0 = null
-_sections_unfolded = [ "Transform" ]
+material/0 = SubResource( 5 )
+_sections_unfolded = [ "Transform", "material" ]
 
 
diff --git a/scripts/lobby.gd b/scripts/lobby.gd
index ce6bc3c..869bfdd 100644
--- a/scripts/lobby.gd
+++ b/scripts/lobby.gd
@@ -193,10 +193,11 @@ sync func start_game():
 	rpc("pre_configure_game", level)
 
 var players_done = []
-remote func done_preconfiguring(who):
+sync func done_preconfiguring(who):
 	players_done.append(who)
-	if (players_done.size() == player_info.size()):
-		rpc("post_configure_game")
+	if players_done.size() == player_info.size():
+		# We call deferred in case singleplayer has placing the player in queue still
+		call_deferred("rpc", "post_configure_game")
 
 sync func spawn_player(p):
 	var hero = player_info[p].hero
@@ -224,6 +225,11 @@ sync func pre_configure_game(level):
 
 	rpc_id(1, "done_preconfiguring", self_peer_id)
 
+sync func post_configure_game():
+	# Begin all players (including self)
+	for p in player_info:
+		get_node("/root/Level/Players/%d" % p).begin()
+
 #func _process(delta):
 #	# Called every frame. Delta is time since last frame.
 #	# Update game logic here.
diff --git a/scripts/player.gd b/scripts/player.gd
index fe4a61d..bf17578 100644
--- a/scripts/player.gd
+++ b/scripts/player.gd
@@ -31,6 +31,8 @@ slave var slave_ang_v = Vector3()
 var tp_camera = "TPCamera"
 var master_only = "MasterOnly"
 
+var master_player
+
 var ai_instanced = false
 
 func _ready():
@@ -44,6 +46,7 @@ func _ready():
 			add_child(preload("res://scenes/ai.tscn").instance())
 			ai_instanced = true
 	else:
+		# Remove HUD
 		remove_child(get_node(master_only))
 
 func spawn():
@@ -91,6 +94,19 @@ func _input(event):
 		if "record" in player_info:
 			recording.events.append([recording.time, event_to_obj(event)])
 
+func begin():
+	master_player = get_node("/root/Level/Players/%d" % get_tree().get_network_unique_id())
+	# Set color to blue (teammate) or red (enemy)
+	var color
+	if master_player.player_info.is_right_team == player_info.is_right_team:
+		color = Color(0,0,1) # Blue for friendly
+	else:
+		color = Color(1,0,0) # Red for enemy
+	var mesh = get_node("MainMesh")
+	var mat = SpatialMaterial.new()
+	mat.albedo_color = color
+	mesh.set_surface_material(0, mat)
+
 func toggle_mouse_capture():
 	if (Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED):
 		Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
@@ -256,3 +272,4 @@ func write_recording():
 # Quits the game:
 func quit():
 	get_tree().quit()
+