Index: src/lang/english.txt
===================================================================
--- src/lang/english.txt	(revision 20690)
+++ src/lang/english.txt	(working copy)
@@ -846,6 +846,7 @@
 STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT                             :{BLACK}Copy the location of the global view to this viewport
 STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW                                :{BLACK}Paste from viewport
 STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT                             :{BLACK}Paste the location of this viewport to the global view
+STR_BIG_BROTHER_CLIENT_NAME                                     :{WHITE}{CLIENTNAME}
 
 # Game options window
 STR_GAME_OPTIONS_CAPTION                                        :{WHITE}Game Options
@@ -1708,6 +1709,7 @@
 STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL                             :Speak to all
 STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY                         :Speak to company
 STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT                          :Private message
+STR_NETWORK_CLIENTLIST_OPEN_WINDOW                              :Open window
 
 STR_NETWORK_SERVER                                              :Server
 STR_NETWORK_CLIENT                                              :Client
Index: src/console_cmds.cpp
===================================================================
--- src/console_cmds.cpp	(revision 20690)
+++ src/console_cmds.cpp	(working copy)
@@ -28,6 +28,9 @@
 #include "viewport_func.h"
 #include "window_func.h"
 #include "date_func.h"
+#include "zoom_func.h"
+#include "window_gui.h"
+#include "gfx_func.h"
 #include "vehicle_func.h"
 #include "company_func.h"
 #include "gamelog.h"
@@ -35,6 +38,8 @@
 #include "ai/ai_config.hpp"
 #include "newgrf.h"
 #include "console_func.h"
+#include "window_gui.h"
+#include "gfx_func.h"
 
 #ifdef ENABLE_NETWORK
 	#include "table/strings.h"
@@ -173,6 +178,36 @@
 }
 #endif /* _DEBUG */
 
+DEF_CONSOLE_CMD(ConZoom)
+{
+	if (argc == 0) {
+		IConsoleHelp("Changes current zoom level of the main viewport.");
+		IConsoleHelp("Usage: 'zoom <0-3>'");
+		return true;
+	}
+
+	if (argc != 2) return false;
+
+	uint32 zoom;
+	if (GetArgumentInteger(&zoom, argv[1]) && zoom <= ZOOM_LVL_MAX) {
+		if (_game_mode == GM_MENU) {
+			IConsolePrint(CC_ERROR, "Cannot change zoom level while in the menu.");
+			return true;
+		}
+		const Window *w = FindWindowById(WC_MAIN_WINDOW, 0);
+		if (w == NULL || w->viewport == NULL) {
+			IConsolePrint(CC_ERROR, "Cannot find the main window.");
+			return true;
+		}
+		w->viewport->zoom = (ZoomLevel)zoom;
+		MarkWholeScreenDirty();
+		return true;
+	}
+
+	IConsolePrint(CC_ERROR, "Invalid zoom level requested.");
+	return true;
+}
+
 DEF_CONSOLE_CMD(ConScrollToTile)
 {
 	switch (argc) {
@@ -1708,6 +1743,21 @@
 	return true;
 }
 
+DEF_CONSOLE_CMD(ConGetLocation)
+{
+	const Window *w = FindWindowById(WC_MAIN_WINDOW, 0);
+	if (w != NULL) {
+		extern Point TranslateXYToTileCoord(const ViewPort *vp, int x, int y);
+		Point pt = TranslateXYToTileCoord(w->viewport, _screen.width / 2, _screen.height / 2);
+		if (pt.x != -1) {
+			IConsolePrintF(CC_DEFAULT, "Location: %08X", TileVirtXY(pt.x, pt.y));
+			return true;
+		}
+	}
+	IConsolePrintF(CC_DEFAULT, "Location: error\n");
+	return true;
+}
+
 #ifdef _DEBUG
 /******************
  *  debug commands
@@ -1747,6 +1797,7 @@
 	IConsoleCmdRegister("return",       ConReturn);
 	IConsoleCmdRegister("screenshot",   ConScreenShot);
 	IConsoleCmdRegister("script",       ConScript);
+	IConsoleCmdRegister("zoom",         ConZoom);
 	IConsoleCmdRegister("scrollto",     ConScrollToTile);
 	IConsoleCmdRegister("alias",        ConAlias);
 	IConsoleCmdRegister("load",         ConLoad);
@@ -1760,6 +1811,7 @@
 	IConsoleCmdRegister("setting",      ConSetting);
 	IConsoleCmdRegister("setting_newgame", ConSettingNewgame);
 	IConsoleCmdRegister("list_settings",ConListSettings);
+	IConsoleCmdRegister("getlocation",  ConGetLocation);
 	IConsoleCmdRegister("gamelog",      ConGamelogPrint);
 	IConsoleCmdRegister("rescan_newgrf", ConRescanNewGRF);
 
Index: src/table/strgen_tables.h
===================================================================
--- src/table/strgen_tables.h	(revision 20690)
+++ src/table/strgen_tables.h	(working copy)
@@ -109,6 +109,7 @@
 	{"VEHICLE",         EmitSingleChar, SCC_VEHICLE_NAME,       1, C_NONE | C_GENDER},
 	{"COMPANY",         EmitSingleChar, SCC_COMPANY_NAME,       1, C_NONE | C_GENDER},
 	{"COMPANYNUM",      EmitSingleChar, SCC_COMPANY_NUM,        1, C_NONE},
+	{"CLIENTNAME",      EmitSingleChar, SCC_CLIENT_NAME,        1, C_NONE},
 	{"PRESIDENTNAME",   EmitSingleChar, SCC_PRESIDENT_NAME,     1, C_NONE | C_GENDER},
 
 	{"",                EmitSingleChar, '\n',                   0, C_DONTCOUNT},
Index: src/table/control_codes.h
===================================================================
--- src/table/control_codes.h	(revision 20690)
+++ src/table/control_codes.h	(working copy)
@@ -43,6 +43,7 @@
 	SCC_SIGN_NAME,
 	SCC_COMPANY_NAME,
 	SCC_PRESIDENT_NAME,
+	SCC_CLIENT_NAME,
 	SCC_ENGINE_NAME,
 
 	SCC_CURRENCY_COMPACT,
Index: src/table/settings.h
===================================================================
--- src/table/settings.h	(revision 20690)
+++ src/table/settings.h	(working copy)
@@ -651,6 +651,7 @@
 	  SDTC_STR(network.last_host,              SLE_STRB, S,  0,    "",                        STR_NULL,                                       NULL),
 	  SDTC_VAR(network.last_port,            SLE_UINT16, S,  0,     0,     0,  UINT16_MAX, 0, STR_NULL,                                       NULL),
 	 SDTC_BOOL(network.no_http_content_downloads,        S,  0, false,                        STR_NULL,                                       NULL),
+         SDTC_BOOL(network.log_all,                          S, NO, false,                        STR_NULL,                                       NULL),
 #endif /* ENABLE_NETWORK */
 
 	/*
Index: src/window_type.h
===================================================================
--- src/window_type.h	(revision 20690)
+++ src/window_type.h	(working copy)
@@ -85,6 +85,7 @@
 	WC_PERFORMANCE_DETAIL,
 	WC_CONSOLE,
 	WC_EXTRA_VIEW_PORT,
+	WC_BIG_BROTHER_WINDOW,
 	WC_CLIENT_LIST,
 	WC_NETWORK_STATUS_WINDOW,
 	WC_CUSTOM_CURRENCY,
Index: src/command.cpp
===================================================================
--- src/command.cpp	(revision 20690)
+++ src/command.cpp	(working copy)
@@ -16,6 +16,8 @@
 #include "command_func.h"
 #include "network/network_type.h"
 #include "network/network.h"
+#include "network/network_base.h"
+#include "network/network_func.h"
 #include "genworld.h"
 #include "newgrf_storage.h"
 #include "strings_func.h"
@@ -26,6 +28,8 @@
 #include "company_func.h"
 #include "company_base.h"
 #include "signal_func.h"
+#include "window_func.h"
+#include "viewport_func.h"
 #include "core/backup_type.hpp"
 
 #include "table/strings.h"
@@ -180,6 +184,8 @@
 
 #define DEF_CMD(proc, flags) {proc, #proc, flags}
 
+#define M(cmd, flags) {cmd, #cmd, flags}
+
 /**
  * The master command table
  *
@@ -459,9 +465,9 @@
  * @param my_cmd indicator if the command is from a company or server (to display error messages for a user)
  * @return true if the command succeeded, else false
  */
-bool DoCommandP(const CommandContainer *container, bool my_cmd)
+bool DoCommandP(const CommandContainer *container, ClientID client)
 {
-	return DoCommandP(container->tile, container->p1, container->p2, container->cmd, container->callback, container->text, my_cmd);
+	return DoCommandP(container->tile, container->p1, container->p2, container->cmd, container->callback, container->text, client);
 }
 
 /*!
@@ -479,8 +485,10 @@
  * @param my_cmd indicator if the command is from a company or server (to display error messages for a user)
  * @return \c true if the command succeeded, else \c false.
  */
-bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback, const char *text, bool my_cmd)
+bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback, const char *text, ClientID client)
 {
+	bool my_cmd = (client != INVALID_CLIENT_ID && client == _network_own_client_id) || (!_networking && _current_company == _local_company);
+
 	/* Cost estimation is generally only done when the
 	 * local user presses shift while doing somthing.
 	 * However, in case of incoming network commands,
@@ -504,7 +512,7 @@
 	if (!(cmd & CMD_NETWORK_COMMAND) && GetCommandFlags(cmd) & CMD_CLIENT_ID && p2 == 0) p2 = CLIENT_ID_SERVER;
 #endif
 
-	CommandCost res = DoCommandPInternal(tile, p1, p2, cmd, callback, text, my_cmd, estimate_only);
+	CommandCost res = DoCommandPInternal(tile, p1, p2, cmd, callback, text, client, estimate_only);
 	if (res.Failed()) {
 		/* Only show the error when it's for us. */
 		StringID error_part1 = GB(cmd, 16, 16);
@@ -550,7 +558,7 @@
  * @param estimate_only whether to give only the estimate or also execute the command
  * @return the command cost of this function.
  */
-CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback, const char *text, bool my_cmd, bool estimate_only)
+CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback, const char *text, ClientID client, bool estimate_only)
 {
 	/* Prevent recursion; it gives a mess over the network */
 	assert(_docommand_recursive == 0);
@@ -684,9 +692,55 @@
 	}
 
 	/* update last build coordinate of company. */
-	if (tile != 0) {
-		Company *c = Company::GetIfValid(_current_company);
-		if (c != NULL) c->last_build_coordinate = tile;
+	Company *c = Company::GetIfValid(_current_company);
+	if (c != NULL) {
+		if (tile != 0) c->last_build_coordinate = tile;
+		NetworkClientInfo *ci = NetworkFindClientInfoFromClientID(client);
+		if (ci != NULL && ci->client_playas == _current_company) {
+			if (tile != 0 && ci->last_build_coordinate != tile) {
+				ci->last_build_coordinate = tile;
+				Window *w = FindWindowById(WC_BIG_BROTHER_WINDOW, client);
+				if (w != NULL) ScrollWindowTo(TileX(tile) * TILE_SIZE + TILE_SIZE / 2, TileY(tile) * TILE_SIZE + TILE_SIZE / 2, -1, w, true);
+			}
+			static const uint _no_log_cmds[] = {
+				CMD_BUILD_RAILROAD_TRACK,
+				CMD_REMOVE_RAILROAD_TRACK,
+				CMD_BUILD_SINGLE_RAIL,
+				CMD_REMOVE_SINGLE_RAIL,
+				CMD_BUILD_BRIDGE,
+				CMD_BUILD_TRAIN_DEPOT,
+				CMD_BUILD_SIGNALS,
+				CMD_BUILD_RAIL_WAYPOINT,
+				CMD_RENAME_WAYPOINT,
+				CMD_REMOVE_FROM_RAIL_WAYPOINT,
+				CMD_BUILD_ROAD_STOP,
+				CMD_REMOVE_ROAD_STOP,
+				CMD_BUILD_LONG_ROAD,
+				CMD_REMOVE_LONG_ROAD,
+				CMD_BUILD_ROAD,
+				CMD_BUILD_ROAD_DEPOT,
+				CMD_BUILD_AIRPORT,
+				CMD_BUILD_DOCK,
+				CMD_BUILD_SHIP_DEPOT,
+				CMD_BUILD_BUOY,
+				CMD_PLANT_TREE,
+				CMD_BUILD_SIGNAL_TRACK
+			};
+			bool nolog = false;
+			if (!_settings_client.network.log_all) {
+				for (uint i = 0; i < lengthof(_no_log_cmds); i++) {
+					if (_no_log_cmds[i] == cmd_id) {
+						nolog = true;
+						break;
+					}
+				}
+			}
+			if (!nolog) {
+				YearMonthDay date;
+				ConvertDateToYMD(_date, &date);
+				printf("%s%30s %16s  date:%04u-%02u-%02u  tile:%08X  p1:%08X p2:%08X text:%s price:%lld\n", GetLogPrefix(), _command_proc_table[cmd_id].name, ci->client_name, date.year, date.month + 1, date.day, tile, p1, p2, text,(int64)res2.GetCost());
+			}
+		}
 	}
 
 	SubtractMoneyFromCompany(res2);
Index: src/command_func.h
===================================================================
--- src/command_func.h	(revision 20690)
+++ src/command_func.h	(working copy)
@@ -13,6 +13,7 @@
 #define COMMAND_FUNC_H
 
 #include "command_type.h"
+#include "network/network_func.h"
 #include "company_type.h"
 
 /**
@@ -43,11 +44,11 @@
 /**
  * Execute a network safe DoCommand function
  */
-bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback = NULL, const char *text = NULL, bool my_cmd = true);
-bool DoCommandP(const CommandContainer *container, bool my_cmd = true);
+bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback = NULL, const char *text = NULL, ClientID client = _network_own_client_id);
+bool DoCommandP(const CommandContainer *container, ClientID client = _network_own_client_id);
 
 /** Internal helper function for DoCommandP. Do not use. */
-CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback, const char *text, bool my_cmd, bool estimate_only);
+CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback, const char *text, ClientID client, bool estimate_only);
 
 #ifdef ENABLE_NETWORK
 /**
Index: src/settings_type.h
===================================================================
--- src/settings_type.h	(revision 20690)
+++ src/settings_type.h	(working copy)
@@ -156,6 +156,7 @@
 	char   last_host[NETWORK_HOSTNAME_LENGTH];            ///< IP address of the last joined server
 	uint16 last_port;                                     ///< port of the last joined server
 	bool   no_http_content_downloads;                     ///< do not do content downloads over HTTP
+	bool   log_all;                                       ///< log all commands, including those with CMD_NO_LOG?
 #else /* ENABLE_NETWORK */
 #endif
 };
Index: src/ai/api/ai_object.cpp
===================================================================
--- src/ai/api/ai_object.cpp	(revision 20690)
+++ src/ai/api/ai_object.cpp	(working copy)
@@ -214,7 +214,7 @@
 #endif
 
 	/* Try to perform the command. */
-	CommandCost res = ::DoCommandPInternal(tile, p1, p2, cmd, _networking ? CcAI : NULL, text, false, estimate_only);
+	CommandCost res = ::DoCommandPInternal(tile, p1, p2, cmd, _networking ? CcAI : NULL, text, INVALID_CLIENT_ID, estimate_only);
 
 	/* We failed; set the error and bail out */
 	if (res.Failed()) {
Index: src/strings.cpp
===================================================================
--- src/strings.cpp	(revision 20690)
+++ src/strings.cpp	(working copy)
@@ -31,6 +31,8 @@
 #include "vehicle_base.h"
 #include "engine_base.h"
 #include "strgen/strgen.h"
+#include "network/network_base.h"
+#include "network/network_func.h"
 #include "townname_func.h"
 #include "string_func.h"
 #include "company_base.h"
@@ -1084,6 +1086,13 @@
 				break;
 			}
 
+			case SCC_CLIENT_NAME: { // {CLIENTNAME}
+				const NetworkClientInfo *ci = NetworkFindClientInfoFromClientID((ClientID)GetInt32(&argv));
+				const char *src = (ci == NULL || StrEmpty(ci->client_name)) ? "(unnamed)" : ci->client_name;
+				buff = strecpy(buff, src, last);
+				break;
+			}
+
 			case SCC_SETCASE: { // {SETCASE}
 				/* This is a pseudo command, it's outputted when someone does {STRING.ack}
 				 * The modifier is added to all subsequent GetStringWithArgs that accept the modifier. */
Index: src/viewport_gui.cpp
===================================================================
--- src/viewport_gui.cpp	(revision 20690)
+++ src/viewport_gui.cpp	(working copy)
@@ -17,6 +17,9 @@
 #include "strings_func.h"
 #include "zoom_func.h"
 #include "window_func.h"
+#include "network/network_base.h"
+#include "network/network_func.h"
+#include "company_base.h"
 
 #include "table/strings.h"
 #include "table/sprites.h"
@@ -91,7 +94,7 @@
 		switch (widget) {
 			case EVW_CAPTION:
 				/* set the number in the title bar */
-				SetDParam(0, this->window_number + 1);
+				SetDParam(0, this->window_number + (this->window_class == WC_EXTRA_VIEW_PORT));
 				break;
 		}
 	}
@@ -178,3 +181,15 @@
 
 	new ExtraViewportWindow(&_extra_view_port_desc, i, tile);
 }
+
+void ShowBigBrotherWindow(ClientID client)
+{
+	if (BringWindowToFrontById(WC_BIG_BROTHER_WINDOW, client) != NULL) return;
+
+	const NetworkClientInfo *ci = NetworkFindClientInfoFromClientID(client);
+	if (ci == NULL || !Company::IsValidID(ci->client_playas)) return;
+
+	Window *w = new ExtraViewportWindow(&_extra_view_port_desc, client, ci->last_build_coordinate);
+	w->window_class = WC_BIG_BROTHER_WINDOW;
+	w->GetWidget<NWidgetCore>(EVW_CAPTION)->widget_data = STR_BIG_BROTHER_CLIENT_NAME;
+}
Index: src/gui.h
===================================================================
--- src/gui.h	(revision 20690)
+++ src/gui.h	(working copy)
@@ -18,6 +18,7 @@
 #include "tile_type.h"
 #include "strings_type.h"
 #include "transport_type.h"
+#include "network/network_type.h"
 
 struct Window;
 
@@ -66,6 +67,7 @@
 void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel wl, int x = 0, int y = 0);
 
 void ShowExtraViewPortWindow(TileIndex tile = INVALID_TILE);
+void ShowBigBrotherWindow(ClientID cid);
 
 /* bridge_gui.cpp */
 void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transport_type, byte bridge_type);
Index: src/network/network_server.cpp
===================================================================
--- src/network/network_server.cpp	(revision 20690)
+++ src/network/network_server.cpp	(working copy)
@@ -515,6 +515,7 @@
 	cs->Send_Command(p, cp);
 	p->Send_uint32(cp->frame);
 	p->Send_bool  (cp->my_cmd);
+	p->Send_uint32(cp->client);
 
 	cs->Send_Packet(p);
 	return NETWORK_RECV_STATUS_OKAY;
@@ -949,6 +950,8 @@
 
 	if (GetCommandFlags(cp.cmd) & CMD_CLIENT_ID) cp.p2 = cs->client_id;
 
+	cp.client = ci->client_id;
+
 	cs->incoming_queue.Append(&cp);
 	return NETWORK_RECV_STATUS_OKAY;
 }
Index: src/network/network_client.cpp
===================================================================
--- src/network/network_client.cpp	(revision 20690)
+++ src/network/network_client.cpp	(working copy)
@@ -745,6 +745,7 @@
 	const char *err = MY_CLIENT->Recv_Command(p, &cp);
 	cp.frame    = p->Recv_uint32();
 	cp.my_cmd   = p->Recv_bool();
+	cp.client   = p->pos + 4 == p->size ? (ClientID)p->Recv_uint32() : (cp.my_cmd ? _network_own_client_id : INVALID_CLIENT_ID);
 
 	if (err != NULL) {
 		IConsolePrintF(CC_ERROR, "WARNING: %s from server, dropping...", err);
Index: src/network/network_command.cpp
===================================================================
--- src/network/network_command.cpp	(revision 20690)
+++ src/network/network_command.cpp	(working copy)
@@ -143,6 +143,7 @@
 		 */
 		c.frame = _frame_counter_max + 1;
 		c.my_cmd = true;
+		c.client = _network_own_client_id;
 
 		_local_wait_queue.Append(&c);
 		return;
@@ -196,7 +197,7 @@
 		/* We can execute this command */
 		_current_company = cp->company;
 		cp->cmd |= CMD_NETWORK_COMMAND;
-		DoCommandP(cp, cp->my_cmd);
+		DoCommandP(cp, cp->client);
 
 		queue.Pop();
 		free(cp);
Index: src/network/network_base.h
===================================================================
--- src/network/network_base.h	(revision 20690)
+++ src/network/network_base.h	(working copy)
@@ -17,6 +17,8 @@
 #include "network_type.h"
 #include "core/address.h"
 #include "../core/pool_type.hpp"
+#include "../tile_type.h"
+#include "core/address.h"
 #include "../company_type.h"
 
 typedef Pool<NetworkClientInfo, ClientIndex, 8, MAX_CLIENT_SLOTS> NetworkClientInfoPool;
@@ -29,6 +31,7 @@
 	CompanyID client_playas;                        ///< As which company is this client playing (CompanyID)
 	NetworkAddress client_address;                  ///< IP-address of the client (so he can be banned)
 	Date join_date;                                 ///< Gamedate the client has joined
+	TileIndex last_build_coordinate;
 
 	NetworkClientInfo(ClientID client_id = INVALID_CLIENT_ID) : client_id(client_id) {}
 	~NetworkClientInfo();
Index: src/network/network_internal.h
===================================================================
--- src/network/network_internal.h	(revision 20690)
+++ src/network/network_internal.h	(working copy)
@@ -158,6 +158,7 @@
 	CompanyByte company; ///< company that is executing the command
 	uint32 frame;        ///< the frame in which this packet is executed
 	bool my_cmd;         ///< did the command originate from "me"
+	ClientID client;
 };
 
 void NetworkDistributeCommands();
Index: src/network/network_gui.cpp
===================================================================
--- src/network/network_gui.cpp	(revision 20690)
+++ src/network/network_gui.cpp	(working copy)
@@ -1831,6 +1831,12 @@
 	ShowNetworkChatQueryWindow(DESTTYPE_BROADCAST, 0);
 }
 
+static void ClientList_OpenWindow(byte client_no)
+{
+	const NetworkClientInfo *ci = NetworkFindClientInfo(client_no);
+	if (ci != NULL && Company::IsValidID(ci->client_playas)) ShowBigBrotherWindow(ci->client_id);
+}
+
 /** Popup selection window to chose an action to perform */
 struct NetworkClientListPopupWindow : Window {
 	/** Container for actions that can be executed. */
@@ -1887,6 +1893,10 @@
 			this->AddAction(STR_NETWORK_CLIENTLIST_BAN, &ClientList_Ban);
 		}
 
+		if (Company::IsValidID(ci->client_playas)) {
+			this->AddAction(STR_NETWORK_CLIENTLIST_OPEN_WINDOW, &ClientList_OpenWindow);
+		}
+
 		this->flags4 &= ~WF_WHITE_BORDER_MASK;
 		this->InitNested(desc, 0);
 	}
Index: src/viewport.cpp
===================================================================
--- src/viewport.cpp	(revision 20690)
+++ src/viewport.cpp	(working copy)
@@ -366,7 +366,7 @@
  * @param y   Screen y coordinate
  * @return Tile coordinate
  */
-static Point TranslateXYToTileCoord(const ViewPort *vp, int x, int y)
+Point TranslateXYToTileCoord(const ViewPort *vp, int x, int y)
 {
 	Point pt;
 	int a, b;
Index: findversion.sh
===================================================================
--- findversion.sh	(revision 20690)
+++ findversion.sh	(working copy)
@@ -126,4 +126,4 @@
 	REV="${REV}-$BRANCH"
 fi
 
-echo "$REV	$REV_NR	$MODIFIED	$CLEAN_REV"
+echo "r$REV_NR	$REV_NR	$MODIFIED	$CLEAN_REV"
Index: source.list
===================================================================
--- source.list	(revision 20690)
+++ source.list	(working copy)
@@ -723,8 +723,6 @@
 #end
 
 # Blitters
-#if DEDICATED
-#else
 blitter/32bpp_anim.cpp
 blitter/32bpp_anim.hpp
 blitter/32bpp_base.cpp
@@ -741,7 +739,6 @@
 blitter/8bpp_optimized.hpp
 blitter/8bpp_simple.cpp
 blitter/8bpp_simple.hpp
-#end
 blitter/base.hpp
 blitter/factory.hpp
 blitter/null.cpp
