Index: src/playmp_controller.cpp
===================================================================
--- src/playmp_controller.cpp	(revision 54609)
+++ src/playmp_controller.cpp	(working copy)
@@ -491,7 +491,6 @@
 				}
 				const turn_info::PROCESS_DATA_RESULT result = turn_data.process_network_data(cfg, from, data_backlog_, skip_replay_);
 				if (result == turn_info::PROCESS_RESTART_TURN) {
-					update_gui_to_player(player_number_ - 1);
 					player_type_changed_ = true;
 					return;
 				} else if (result == turn_info::PROCESS_END_TURN) {
Index: src/team.cpp
===================================================================
--- src/team.cpp	(revision 54609)
+++ src/team.cpp	(working copy)
@@ -644,7 +644,7 @@
 	}
 
 	BOOST_FOREACH(const team &t, *teams) {
-		if (t.is_human())
+		if (t.is_human() || t.is_human_ai())
 			return false;
 	}
 
Index: src/playturn.cpp
===================================================================
--- src/playturn.cpp	(revision 54609)
+++ src/playturn.cpp	(working copy)
@@ -174,10 +174,6 @@
 				leader->rename(player);
 
 			if (controller == "human" && !tm.is_human()) {
-				if (!(*resources::teams)[resources::screen->playing_team()].is_human())
-				{
-					resources::screen->set_team(index);
-				}
 				tm.make_human();
 			} else if (controller == "human_ai" && !tm.is_human_ai()) {
 				tm.make_human_ai();
@@ -193,6 +189,16 @@
 				restart = false;
 			}
 
+			if (is_observer() || (*resources::teams)[resources::screen->playing_team()].is_human()) {
+				resources::screen->set_team(resources::screen->playing_team());
+				resources::screen->redraw_everything();
+				resources::screen->recalculate_minimap();
+			} else if (controller == "human") {
+				resources::screen->set_team(index);
+				resources::screen->redraw_everything();
+				resources::screen->recalculate_minimap();
+			}
+
 			resources::controller->maybe_do_init_side(index);
 
 			resources::whiteboard->on_change_controller(side,tm);
@@ -288,6 +294,7 @@
 				tm.make_human();
 				tm.set_current_player("human" + side_drop);
 				if (have_leader) leader->rename("human" + side_drop);
+				change_controller(side_drop, "human");
 
 				resources::controller->maybe_do_init_side(side_index);
 
