(svn r10350) [NoAI] -Sync with trunk r10194:10349 noai
authorglx
Tue, 26 Jun 2007 23:40:58 +0000
branchnoai
changeset 9629 66dde6412125
parent 9628 b5c2449616b5
child 9630 550db5cefcc2
(svn r10350) [NoAI] -Sync with trunk r10194:10349
Makefile.in
config.lib
docs/Readme_OS2.txt
projects/openttd.vcproj
projects/openttd_vs80.vcproj
readme.txt
source.list
src/ai/api/ai_company.cpp
src/ai/api/ai_execmode.cpp
src/ai/api/ai_execmode.hpp
src/ai/api/ai_object.cpp
src/ai/api/ai_object.hpp
src/ai/api/ai_testmode.cpp
src/ai/api/ai_testmode.hpp
src/ai/api/ai_transactionmode.cpp
src/ai/api/ai_transactionmode.hpp
src/aircraft_cmd.cpp
src/aircraft_gui.cpp
src/autoreplace_cmd.cpp
src/autoreplace_gui.cpp
src/blitter/32bpp_anim.cpp
src/blitter/32bpp_anim.hpp
src/blitter/32bpp_base.cpp
src/blitter/32bpp_base.hpp
src/blitter/32bpp_simple.cpp
src/blitter/32bpp_simple.hpp
src/blitter/8bpp_base.cpp
src/blitter/8bpp_base.hpp
src/blitter/8bpp_debug.hpp
src/blitter/8bpp_optimized.cpp
src/blitter/8bpp_optimized.hpp
src/blitter/8bpp_simple.hpp
src/blitter/base.hpp
src/blitter/null.hpp
src/bridge_gui.cpp
src/build_vehicle_gui.cpp
src/cargopacket.cpp
src/cargopacket.h
src/clear_cmd.cpp
src/command.cpp
src/command.h
src/console.cpp
src/console_cmds.cpp
src/driver.cpp
src/dummy_land.cpp
src/economy.cpp
src/economy.h
src/elrail.cpp
src/engine.cpp
src/engine.h
src/engine_gui.cpp
src/fileio.cpp
src/fileio.h
src/functions.h
src/genworld_gui.cpp
src/gfx.cpp
src/gfx.h
src/graph_gui.cpp
src/group_cmd.cpp
src/group_gui.cpp
src/gui.h
src/industry_cmd.cpp
src/landscape.cpp
src/lang/american.txt
src/lang/brazilian_portuguese.txt
src/lang/bulgarian.txt
src/lang/catalan.txt
src/lang/czech.txt
src/lang/danish.txt
src/lang/dutch.txt
src/lang/english.txt
src/lang/esperanto.txt
src/lang/estonian.txt
src/lang/finnish.txt
src/lang/french.txt
src/lang/galician.txt
src/lang/german.txt
src/lang/hungarian.txt
src/lang/icelandic.txt
src/lang/italian.txt
src/lang/japanese.txt
src/lang/korean.txt
src/lang/lithuanian.txt
src/lang/norwegian_bokmal.txt
src/lang/norwegian_nynorsk.txt
src/lang/piglatin.txt
src/lang/polish.txt
src/lang/portuguese.txt
src/lang/romanian.txt
src/lang/russian.txt
src/lang/simplified_chinese.txt
src/lang/slovak.txt
src/lang/slovenian.txt
src/lang/spanish.txt
src/lang/swedish.txt
src/lang/traditional_chinese.txt
src/lang/turkish.txt
src/lang/ukrainian.txt
src/lang/unfinished/afrikaans.txt
src/lang/unfinished/croatian.txt
src/lang/unfinished/frisian.txt
src/lang/unfinished/greek.txt
src/lang/unfinished/latvian.txt
src/macros.h
src/main_gui.cpp
src/misc.cpp
src/misc_cmd.cpp
src/misc_gui.cpp
src/network/network.h
src/network/network_client.cpp
src/network/network_gui.cpp
src/network/network_server.cpp
src/network/network_udp.cpp
src/newgrf.cpp
src/newgrf_commons.cpp
src/newgrf_commons.h
src/newgrf_config.cpp
src/newgrf_config.h
src/newgrf_engine.cpp
src/newgrf_gui.cpp
src/newgrf_industries.cpp
src/newgrf_industrytiles.cpp
src/newgrf_industrytiles.h
src/newgrf_station.cpp
src/newgrf_townname.cpp
src/newgrf_townname.h
src/news.h
src/oldloader.cpp
src/openttd.cpp
src/openttd.h
src/order.h
src/order_cmd.cpp
src/order_gui.cpp
src/os/macosx/splash.cpp
src/os2.cpp
src/pathfind.cpp
src/player.h
src/player_gui.cpp
src/players.cpp
src/rail_cmd.cpp
src/rail_gui.cpp
src/road_cmd.cpp
src/roadveh_cmd.cpp
src/roadveh_gui.cpp
src/saveload.cpp
src/saveload.h
src/screenshot.cpp
src/settings.cpp
src/settings_gui.cpp
src/ship_cmd.cpp
src/ship_gui.cpp
src/signs.cpp
src/signs_gui.cpp
src/squirrel_helper.hpp
src/station.cpp
src/station.h
src/station_cmd.cpp
src/station_gui.cpp
src/stdafx.h
src/strgen/strgen.cpp
src/strings.cpp
src/subsidy_gui.cpp
src/table/control_codes.h
src/texteff.cpp
src/texteff.hpp
src/timetable.h
src/timetable_cmd.cpp
src/timetable_gui.cpp
src/town.h
src/town_cmd.cpp
src/town_gui.cpp
src/train_cmd.cpp
src/train_gui.cpp
src/transparency_gui.cpp
src/tree_cmd.cpp
src/tunnel_map.cpp
src/tunnel_map.h
src/tunnelbridge_cmd.cpp
src/unmovable_cmd.cpp
src/variables.h
src/vehicle.cpp
src/vehicle.h
src/vehicle_gui.cpp
src/video/cocoa_v.mm
src/video/sdl_v.cpp
src/video/win32_v.cpp
src/viewport.cpp
src/viewport.h
src/water_cmd.cpp
src/water_map.h
src/waypoint.cpp
src/waypoint.h
src/window.cpp
src/window.h
src/yapf/follow_track.hpp
src/yapf/yapf_base.hpp
src/yapf/yapf_costrail.hpp
src/yapf/yapf_node_rail.hpp
src/yapf/yapf_rail.cpp
src/yapf/yapf_road.cpp
src/yapf/yapf_ship.cpp
--- a/Makefile.in	Sun Jun 17 21:31:00 2007 +0000
+++ b/Makefile.in	Tue Jun 26 23:40:58 2007 +0000
@@ -184,6 +184,7 @@
 	$(Q)cp "$(ROOT_DIR)/COPYING"              "$(BUNDLE_DIR)/"
 	$(Q)cp "$(ROOT_DIR)/known-bugs.txt"       "$(BUNDLE_DIR)/docs/"
 	$(Q)cp "$(ROOT_DIR)/docs/multiplayer.txt" "$(BUNDLE_DIR)/docs/"
+	$(Q)cp "$(ROOT_DIR)/docs/32bpp.txt"       "$(BUNDLE_DIR)/docs/"
 	$(Q)cp "$(ROOT_DIR)/changelog.txt"        "$(BUNDLE_DIR)/docs/"
 	$(Q)cp "$(ROOT_DIR)/media/openttd.64.png" "$(BUNDLE_DIR)/media/"
 	$(Q)cp "$(ROOT_DIR)/media/openttd.32.xpm" "$(BUNDLE_DIR)/media/"
--- a/config.lib	Sun Jun 17 21:31:00 2007 +0000
+++ b/config.lib	Tue Jun 26 23:40:58 2007 +0000
@@ -320,13 +320,13 @@
 		exit 1
 	fi
 	# cpu_type can be either 32 or 64
-	if [ -z "`echo $cpu_type | grep '^32$\|^64$\|^DETECT$'`" ]; then
+	if [ -z "`echo $cpu_type | egrep '^(32|64|DETECT)$'`" ]; then
 		echo "configure: error: invalid option --cpu-type=$cpu_type"
 		echo " Available options are: --cpu-type[=DETECT|32|64]"
 		exit 1
 	fi
 	# enable_debug should be between 0 and 4
-	if [ -z "`echo $enable_debug | grep '^[0123]$'`" ]; then
+	if [ -z "`echo $enable_debug | egrep '^[0123]$'`" ]; then
 		echo "configure: error: invalid option --enable-debug=$enable_debug"
 		echo " Available options are: --enable-debug[=0123]"
 		exit 1
@@ -839,7 +839,7 @@
 		CFLAGS="$CFLAGS -fno-strict-aliasing"
 	fi
 
-	if [ "$os" != "CYGWIN" ] && [ "$os" != "FREEBSD" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "OSX" ] && [ "$os" != "WINCE" ] && [ "$os" != "PSP" ]; then
+	if [ "$os" != "CYGWIN" ] && [ "$os" != "FREEBSD" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "OSX" ] && [ "$os" != "WINCE" ] && [ "$os" != "PSP" ] && [ "$os" != "OS2" ]; then
 		LIBS="$LIBS -lpthread"
 		LIBS="$LIBS -lrt"
 	fi
@@ -1528,11 +1528,11 @@
 	log 2 "detecting $2"
 
 	if [ "$1" = "1" ] || [ "$1" = "" ] || [ "$1" = "2" ]; then
-		eval "$2=`ls -1 /usr/include/*.h 2>/dev/null | grep \"\/$4\$\"`"
+		eval "$2=`ls -1 /usr/include/*.h 2>/dev/null | egrep \"\/$4\$\"`"
 		eval "res=\$$2"
 		if [ -z "$res" ]; then
 			log 2 "  trying /usr/include/$4... no"
-			eval "$2=`ls -1 /usr/local/include/*.h 2>/dev/null | grep \"\/$4\$\"`"
+			eval "$2=`ls -1 /usr/local/include/*.h 2>/dev/null | egrep \"\/$4\$\"`"
 		fi
 		eval "res=\$$2"
 		if [ -z "$res" ]; then
@@ -1544,16 +1544,16 @@
 			eval "res=\$$2"
 			log 2 "  trying $res... found"
 			# Now find the static lib, if needed
-			eval "$2=`ls /lib/*.a 2>/dev/null | grep \"\/$3\$\"`"
+			eval "$2=`ls /lib/*.a 2>/dev/null | egrep \"\/$3\$\"`"
 			eval "res=\$$2"
 			if [ -z "$res" ]; then
 				log 2 "  trying /lib/$3... no"
-				eval "$2=`ls /usr/lib/*.a 2>/dev/null | grep \"\/$3\$\"`"
+				eval "$2=`ls /usr/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`"
 			fi
 			eval "res=\$$2"
 			if [ -z "$res" ]; then
 				log 2 "  trying /usr/lib/$3... no"
-				eval "$2=`ls /usr/local/lib/*.a 2>/dev/null | grep \"\/$3\$\"`"
+				eval "$2=`ls /usr/local/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`"
 			fi
 			eval "res=\$$2"
 			if [ -z "$res" ]; then
@@ -1929,7 +1929,7 @@
 	# FOUR_BYTE_BOOL is needed, because C++ uses 4byte for a bool on PPC, where
 	#  we use 1 byte per bool normally in C part. So convert that last one to 4
 	#  bytes too, but only for PPC.
-	ppc=`$cc_host -dumpmachine | grep "powerpc\|ppc"`
+	ppc=`$cc_host -dumpmachine | egrep "powerpc|ppc"`
 	if [ -n "$ppc" ]; then
 		T_CFLAGS="$CFLAGS -DFOUR_BYTE_BOOL"
 		osx_sysroot_version=10.3.9
--- a/docs/Readme_OS2.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/docs/Readme_OS2.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -50,6 +50,10 @@
 If I hear enough responses that both music and sound work together (it might
 just be my system), I'll have the defaults changed.
 
+Please note also that the GCC version does not currently support the MCI MIDI
+system.
+
+
 A NOTE ABOUT DEDICATED MULTIPLAYER SERVERS
 ------------------------------------------
 
@@ -60,6 +64,8 @@
 still pass any other parameters ('-D' is already passed) to
 dedicated.cmd.
 
+You can find the dedicated.cmd file in the os/os2 directory.
+
 =========================
 BUILDING THE OS/2 VERSION
 =========================
@@ -74,9 +80,17 @@
 
    http://www.mozilla.org/ports/os2/gccsetup.html
 
+Alternatively, Paul Smedley's ready-to-go GCC build environment has been known to
+successfully build the game:
+
+   http://www.smedley.info/os2ports/index.php?page=build-environment
+
 To build, you should, if your environment is set up well enough, be able to just
 type `./configure' (or `sh configure' if you're using the OS/2 shell) and `make'.
 
+You may have to manually specify `--os OS2' on the configure command line, as
+configure cannot always detect OS/2 correctly.
+
 A note on Open Watcom
 ---------------------
 
@@ -122,4 +136,4 @@
 
 Thanks to Paul Smedley for his help with getting OpenTTD to compile under GCC on OS/2.
 
-- Owen Rudge, 8th January 2007
+- Owen Rudge, 24th June 2007
--- a/projects/openttd.vcproj	Sun Jun 17 21:31:00 2007 +0000
+++ b/projects/openttd.vcproj	Tue Jun 26 23:40:58 2007 +0000
@@ -182,6 +182,9 @@
 				RelativePath=".\..\src\cargotype.cpp">
 			</File>
 			<File
+				RelativePath=".\..\src\cargopacket.cpp">
+			</File>
+			<File
 				RelativePath=".\..\src\command.cpp">
 			</File>
 			<File
@@ -399,9 +402,6 @@
 				RelativePath=".\..\src\articulated_vehicles.h">
 			</File>
 			<File
-				RelativePath=".\..\src\autoreplace_cmd.h">
-			</File>
-			<File
 				RelativePath=".\..\src\aystar.h">
 			</File>
 			<File
@@ -411,6 +411,9 @@
 				RelativePath=".\..\src\cargotype.h">
 			</File>
 			<File
+				RelativePath=".\..\src\cargopacket.h">
+			</File>
+			<File
 				RelativePath=".\..\src\command.h">
 			</File>
 			<File
@@ -486,6 +489,9 @@
 				RelativePath=".\..\src\industry.h">
 			</File>
 			<File
+				RelativePath=".\..\src\landscape.h">
+			</File>
+			<File
 				RelativePath=".\..\src\livery.h">
 			</File>
 			<File
@@ -570,6 +576,9 @@
 				RelativePath=".\..\src\newgrf_town.h">
 			</File>
 			<File
+				RelativePath=".\..\src\newgrf_townname.h">
+			</File>
+			<File
 				RelativePath=".\..\src\news.h">
 			</File>
 			<File
@@ -660,6 +669,9 @@
 				RelativePath=".\..\src\string.h">
 			</File>
 			<File
+				RelativePath=".\..\src\texteff.hpp">
+			</File>
+			<File
 				RelativePath=".\..\src\tgp.h">
 			</File>
 			<File
@@ -669,6 +681,9 @@
 				RelativePath=".\..\src\tile.h">
 			</File>
 			<File
+				RelativePath=".\..\src\timetable.h">
+			</File>
+			<File
 				RelativePath=".\..\src\town.h">
 			</File>
 			<File
@@ -805,6 +820,9 @@
 				RelativePath=".\..\src\terraform_gui.cpp">
 			</File>
 			<File
+				RelativePath=".\..\src\timetable_gui.cpp">
+			</File>
+			<File
 				RelativePath=".\..\src\town_gui.cpp">
 			</File>
 			<File
@@ -860,6 +878,9 @@
 				RelativePath=".\..\src\station_cmd.cpp">
 			</File>
 			<File
+				RelativePath=".\..\src\timetable_cmd.cpp">
+			</File>
+			<File
 				RelativePath=".\..\src\town_cmd.cpp">
 			</File>
 			<File
@@ -885,9 +906,6 @@
 				RelativePath=".\..\src\table\ai_rail.h">
 			</File>
 			<File
-				RelativePath=".\..\src\table\allstrings.h">
-			</File>
-			<File
 				RelativePath=".\..\src\table\animcursors.h">
 			</File>
 			<File
@@ -936,7 +954,7 @@
 				RelativePath=".\..\src\table\station_land.h">
 			</File>
 			<File
-				RelativePath=".\..\src\table\strings.h">
+				RelativePath=".\..\src\..\objs\langs\table\strings.h">
 			</File>
 			<File
 				RelativePath=".\..\src\table\town_land.h">
@@ -951,9 +969,6 @@
 				RelativePath=".\..\src\table\tree_land.h">
 			</File>
 			<File
-				RelativePath=".\..\src\table\tunnel_land.h">
-			</File>
-			<File
 				RelativePath=".\..\src\table\unmovable_land.h">
 			</File>
 			<File
@@ -1050,7 +1065,6 @@
 			</File>
 		</Filter>
 		<Filter
-<<<<<<< .courant
 			Name="AI C++"
 			Filter="">
 			<File
@@ -1225,10 +1239,15 @@
 			</File>
 		</Filter>
 		<Filter
-=======
 			Name="Blitters"
 			Filter="">
 			<File
+				RelativePath=".\..\src\blitter\32bpp_anim.cpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\32bpp_anim.hpp">
+			</File>
+			<File
 				RelativePath=".\..\src\blitter\32bpp_base.cpp">
 			</File>
 			<File
@@ -1297,7 +1316,6 @@
 			</File>
 		</Filter>
 		<Filter
->>>>>>> .fusion-droit.r10096
 			Name="NewGRF"
 			Filter="">
 			<File
@@ -1342,6 +1360,9 @@
 			<File
 				RelativePath=".\..\src\newgrf_town.cpp">
 			</File>
+			<File
+				RelativePath=".\..\src\newgrf_townname.cpp">
+			</File>
 		</Filter>
 		<Filter
 			Name="Map Accessors"
--- a/projects/openttd_vs80.vcproj	Sun Jun 17 21:31:00 2007 +0000
+++ b/projects/openttd_vs80.vcproj	Tue Jun 26 23:40:58 2007 +0000
@@ -472,6 +472,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\cargopacket.cpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\command.cpp"
 				>
 			</File>
@@ -760,10 +764,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\autoreplace_cmd.h"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\aystar.h"
 				>
 			</File>
@@ -776,6 +776,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\cargopacket.h"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\command.h"
 				>
 			</File>
@@ -876,6 +880,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\landscape.h"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\livery.h"
 				>
 			</File>
@@ -988,6 +996,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\newgrf_townname.h"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\news.h"
 				>
 			</File>
@@ -1108,6 +1120,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\texteff.hpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\tgp.h"
 				>
 			</File>
@@ -1120,6 +1136,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\timetable.h"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\town.h"
 				>
 			</File>
@@ -1300,6 +1320,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\timetable_gui.cpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\town_gui.cpp"
 				>
 			</File>
@@ -1372,6 +1396,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\timetable_cmd.cpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\town_cmd.cpp"
 				>
 			</File>
@@ -1404,10 +1432,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\table\allstrings.h"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\table\animcursors.h"
 				>
 			</File>
@@ -1472,7 +1496,7 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\table\strings.h"
+				RelativePath=".\..\src\..\objs\langs\table\strings.h"
 				>
 			</File>
 			<File
@@ -1492,10 +1516,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\table\tunnel_land.h"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\table\unmovable_land.h"
 				>
 			</File>
@@ -1621,7 +1641,6 @@
 			</File>
 		</Filter>
 		<Filter
-<<<<<<< .courant
 			Name="AI C++"
 			>
 			<File
@@ -1850,10 +1869,17 @@
 			</File>
 		</Filter>
 		<Filter
-=======
 			Name="Blitters"
 			>
 			<File
+				RelativePath=".\..\src\blitter\32bpp_anim.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\32bpp_anim.hpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\blitter\32bpp_base.cpp"
 				>
 			</File>
@@ -1943,7 +1969,6 @@
 			</File>
 		</Filter>
 		<Filter
->>>>>>> .fusion-droit.r10096
 			Name="NewGRF"
 			>
 			<File
@@ -2002,6 +2027,10 @@
 				RelativePath=".\..\src\newgrf_town.cpp"
 				>
 			</File>
+			<File
+				RelativePath=".\..\src\newgrf_townname.cpp"
+				>
+			</File>
 		</Filter>
 		<Filter
 			Name="Map Accessors"
--- a/readme.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/readme.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -186,8 +186,8 @@
   libpng and freetype2 developer files.
 
 OS/2:
-  Open Watcom C/C++ 1.3 or later is required to build the OS/2 version. See the
-  docs/Readme_OS2.txt file for more information.
+  A comprehensive GNU build environment is required to build the OS/2 version.
+  See the docs/Readme_OS2.txt file for more information.
 
 
 8.0) Translating:
@@ -292,15 +292,14 @@
   Loïc Guilloux (glx)            - In training, not yet specialized
   Jaroslav Mazanec (KUDr)        - YAPG (Yet Another Pathfinder God) ;)
   Kerekes Miham (MiHaMiX)        - Maintainer of translator service, and host of nightlies
-
+  Owen Rudge (orudge)            - Contributor, forum host, OS/2 port
   Peter Nelson (peter1138)       - Spiritual descendant from newgrf gods
   Remko Bijker (Rubidium)        - THE desync hunter
   Christoph Mallon (Tron)        - Programmer, code correctness police
-  Patric Stout (TrueLight)       - Programmer, network guru, SVN-repository and website host
+  Patric Stout (TrueLight)       - Programmer, network guru, SVN-,  MS-, and website host
 
 Retired Developers:
   Dominik Scherer (dominik81)    - Lead programmer, GUI expert (0.3.0 - 0.3.6)
-  Owen Rudge (orudge)            - Contributor, forum host, master server host, OS/2 port (0.1 - 0.4.8)
   Ludvig Strigeus (ludde)        - OpenTTD author, main coder (0.1 - 0.3.3)
   Serge Paquet (vurlix)          - Assistant project manager, coder (0.1 - 0.3.3)
 
--- a/source.list	Sun Jun 17 21:31:00 2007 +0000
+++ b/source.list	Tue Jun 26 23:40:58 2007 +0000
@@ -6,6 +6,7 @@
 bmp.cpp
 callback_table.cpp
 cargotype.cpp
+cargopacket.cpp
 command.cpp
 console.cpp
 console_cmds.cpp
@@ -100,10 +101,10 @@
 airport.h
 airport_movement.h
 articulated_vehicles.h
-autoreplace_cmd.h
 aystar.h
 bmp.h
 cargotype.h
+cargopacket.h
 command.h
 console.h
 currency.h
@@ -129,6 +130,7 @@
 heightmap.h
 helpers.hpp
 industry.h
+landscape.h
 livery.h
 macros.h
 map.h
@@ -157,6 +159,7 @@
 newgrf_station.h
 newgrf_text.h
 newgrf_town.h
+newgrf_townname.h
 news.h
 npf.h
 music/null_m.h
@@ -187,9 +190,11 @@
 station.h
 stdafx.h
 string.h
+texteff.hpp
 tgp.h
 thread.h
 tile.h
+timetable.h
 town.h
 train.h
 transparency_gui.h
@@ -236,6 +241,7 @@
 station_gui.cpp
 subsidy_gui.cpp
 terraform_gui.cpp
+timetable_gui.cpp
 town_gui.cpp
 train_gui.cpp
 transparency_gui.cpp
@@ -255,6 +261,7 @@
 roadveh_cmd.cpp
 ship_cmd.cpp
 station_cmd.cpp
+timetable_cmd.cpp
 town_cmd.cpp
 train_cmd.cpp
 tree_cmd.cpp
@@ -264,7 +271,6 @@
 
 # Tables
 table/ai_rail.h
-table/allstrings.h
 table/animcursors.h
 table/autorail.h
 table/build_industry.h
@@ -281,12 +287,11 @@
 table/roadveh.h
 table/sprites.h
 table/station_land.h
-table/strings.h
+../objs/langs/table/strings.h
 table/town_land.h
 table/track_land.h
 table/train_cmd.h
 table/tree_land.h
-table/tunnel_land.h
 table/unmovable_land.h
 table/water_land.h
 
@@ -384,6 +389,8 @@
 #end
 
 # Blitters
+blitter/32bpp_anim.cpp
+blitter/32bpp_anim.hpp
 blitter/32bpp_base.cpp
 blitter/32bpp_base.hpp
 blitter/32bpp_simple.cpp
@@ -425,6 +432,7 @@
 newgrf_station.cpp
 newgrf_text.cpp
 newgrf_town.cpp
+newgrf_townname.cpp
 
 # Map Accessors
 bridge_map.cpp
--- a/src/ai/api/ai_company.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ai/api/ai_company.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -7,6 +7,8 @@
 #include "../../player.h"
 #include "../../economy.h"
 #include "../../strings.h"
+#include "../../variables.h"
+#include "table/strings.h"
 
 bool AICompany::SetCompanyName(const char *name)
 {
@@ -20,7 +22,8 @@
 {
 	static const int len = 64;
 	char *company_name = MallocT<char>(len);
-	GetString(company_name, GetPlayer(_current_player)->name_1, &company_name[len - 1]);
+	SetDParam(0, GetPlayer(_current_player)->index);
+	GetString(company_name, STR_COMPANY_NAME, &company_name[len - 1]);
 
 	return company_name;
 }
@@ -37,7 +40,8 @@
 {
 	static const int len = 64;
 	char *president_name = MallocT<char>(len);
-	GetString(president_name, GetPlayer(_current_player)->president_name_1, &president_name[len - 1]);
+	SetDParam(0, GetPlayer(_current_player)->index);
+	GetString(president_name, STR_PLAYER_NAME, &president_name[len - 1]);
 
 	return president_name;
 }
--- a/src/ai/api/ai_execmode.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ai/api/ai_execmode.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -4,7 +4,7 @@
 
 #include "ai_execmode.hpp"
 
-bool AIExecMode::ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, int32 costs)
+bool AIExecMode::ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, CommandCost costs)
 {
 	/* In execution mode we only return 'true', telling the DoCommand it
 	 *  should continue with the real execution of the command. */
--- a/src/ai/api/ai_execmode.hpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ai/api/ai_execmode.hpp	Tue Jun 26 23:40:58 2007 +0000
@@ -23,7 +23,7 @@
 	/**
 	 * The callback proc for Execute mode.
 	 */
-	static bool ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, int32 costs);
+	static bool ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, CommandCost costs);
 
 public:
 	/**
--- a/src/ai/api/ai_object.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ai/api/ai_object.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -37,19 +37,19 @@
 	return AIObject::GetDoCommandStruct(_current_player)->mode_instance;
 }
 
-void AIObject::SetDoCommandCosts(int32 value)
+void AIObject::SetDoCommandCosts(Money value)
 {
-	AIObject::GetDoCommandStruct(_current_player)->costs = value;
+	AIObject::GetDoCommandStruct(_current_player)->costs = CommandCost(value);
 }
 
-void AIObject::IncreaseDoCommandCosts(int32 value)
+void AIObject::IncreaseDoCommandCosts(Money value)
 {
-	AIObject::GetDoCommandStruct(_current_player)->costs += value;
+	AIObject::GetDoCommandStruct(_current_player)->costs.AddCost(value);
 }
 
-int32 AIObject::GetDoCommandCosts()
+Money AIObject::GetDoCommandCosts()
 {
-	return AIObject::GetDoCommandStruct(_current_player)->costs;
+	return AIObject::GetDoCommandStruct(_current_player)->costs.GetCost();
 }
 
 void AIObject::SetNewVehicleID(VehicleID vehicle)
@@ -85,14 +85,14 @@
 	AIObject::AIDoCommandStruct *command_struct = GetDoCommandStruct(_current_player);
 	command_struct->mode = NULL;
 	command_struct->delay = 1;
-	command_struct->costs = 0;
+	command_struct->costs = CommandCost();
 }
 
 bool AIObject::DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint procc)
 {
 	uint32 flags = 0;
 	PlayerID old_lp;
-	int32 res = 0;
+	CommandCost res;
 	const char* tmp_cmdtext;
 
 	flags |= DC_NO_WATER;
@@ -111,7 +111,7 @@
 
 	/* Check what the callback wants us to do */
 	if (AIObject::GetDoCommandMode() != NULL && !AIObject::GetDoCommandMode()(tile, p1, p2, procc, res)) {
-		AIObject::IncreaseDoCommandCosts(res);
+		AIObject::IncreaseDoCommandCosts(res.GetCost());
 		return true;
 	}
 
@@ -150,6 +150,6 @@
 
 	if (::CmdFailed(res)) return false;
 
-	AIObject::IncreaseDoCommandCosts(res);
+	AIObject::IncreaseDoCommandCosts(res.GetCost());
 	return true;
 }
--- a/src/ai/api/ai_object.hpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ai/api/ai_object.hpp	Tue Jun 26 23:40:58 2007 +0000
@@ -11,7 +11,7 @@
 /**
  * The callback function for Mode-classes.
  */
-typedef bool (AIModeProc)(TileIndex tile, uint32 p1, uint32 p2, uint procc, int32 costs);
+typedef bool (AIModeProc)(TileIndex tile, uint32 p1, uint32 p2, uint procc, CommandCost costs);
 
 /**
  * Uper-parent object of all API classes. You should never use this class in
@@ -25,7 +25,7 @@
 		AIModeProc *mode;
 		AIObject *mode_instance;
 		uint delay;
-		int32 costs;
+		CommandCost costs;
 		VehicleID new_vehicle_id;
 		SignID new_sign_id;
 	};
@@ -44,17 +44,17 @@
 	/**
 	 * Sets the DoCommand costs counter to a value.
 	 */
-	static void SetDoCommandCosts(int32 value);
+	static void SetDoCommandCosts(Money value);
 
 	/**
 	 * Increase the current value of the DoCommand costs counter.
 	 */
-	static void IncreaseDoCommandCosts(int32 value);
+	static void IncreaseDoCommandCosts(Money value);
 
 	/**
 	 * Get the current DoCommand costs counter.
 	 */
-	static int32 GetDoCommandCosts();
+	static Money GetDoCommandCosts();
 
 	/**
 	 * Set the current mode of your AI to this proc.
--- a/src/ai/api/ai_testmode.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ai/api/ai_testmode.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -4,7 +4,7 @@
 
 #include "ai_testmode.hpp"
 
-bool AITestMode::ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, int32 costs)
+bool AITestMode::ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, CommandCost costs)
 {
 	/* In test mode we only return 'false', telling the DoCommand it
 		*  should stop after testing the command and return with that result. */
--- a/src/ai/api/ai_testmode.hpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ai/api/ai_testmode.hpp	Tue Jun 26 23:40:58 2007 +0000
@@ -25,7 +25,7 @@
 	/**
 	 * The callback proc for Testing mode.
 	 */
-	static bool ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, int32 costs);
+	static bool ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, CommandCost costs);
 
 public:
 	/**
--- a/src/ai/api/ai_transactionmode.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ai/api/ai_transactionmode.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -8,7 +8,7 @@
 #include "../../debug.h"
 #include <stack>
 
-bool AITransactionMode::ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, int32 costs)
+bool AITransactionMode::ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, CommandCost costs)
 {
 	AITransactionMode *instance = (AITransactionMode *)AIObject::GetDoCommandModeInstance();
 	/* Don't record if we are stopped */
@@ -22,7 +22,7 @@
 	command.procc = procc;
 	command.text  = (_cmd_text == NULL) ? NULL : strdup(_cmd_text);
 	instance->command_stack.push(command);
-	instance->costs += costs;
+	instance->costs.AddCost(costs);
 
 	/* Now we return 'false', as we don't want to execute the commands just yet */
 	return false;
@@ -30,7 +30,7 @@
 
 AITransactionMode::AITransactionMode()
 {
-	this->costs         = 0;
+	this->costs         = CommandCost();
 	this->stopped       = false;
 	this->last_mode     = this->GetDoCommandMode();
 	this->last_instance = this->GetDoCommandModeInstance();
@@ -123,9 +123,9 @@
 	}
 }
 
-int32 AITransactionMode::GetCosts()
+Money AITransactionMode::GetCosts()
 {
-	return this->costs;
+	return this->costs.GetCost();
 }
 
 void AITransactionMode::Append(AITransactionMode *transaction)
--- a/src/ai/api/ai_transactionmode.hpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ai/api/ai_transactionmode.hpp	Tue Jun 26 23:40:58 2007 +0000
@@ -35,13 +35,13 @@
 	std::queue<AITransactionModeCommand> command_stack;
 	std::queue<AITransactionModeCommand> reverse_stack;
 	bool stopped;
-	int32 costs;
+	CommandCost costs;
 
 protected:
 	/**
 	 * The callback proc for Transaction mode.
 	 */
-	static bool ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, int32 costs);
+	static bool ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, CommandCost costs);
 
 public:
 	/**
@@ -97,7 +97,7 @@
 	 * Get the costs it takes to execute this transaction (on average, real
 	 *   numbers can always differ).
 	 */
-	int32 GetCosts();
+	Money GetCosts();
 
 	/**
 	 * Append one transaction list to an other.
--- a/src/aircraft_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/aircraft_cmd.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -14,6 +14,7 @@
 #include "map.h"
 #include "tile.h"
 #include "vehicle.h"
+#include "timetable.h"
 #include "depot.h"
 #include "engine.h"
 #include "command.h"
@@ -227,9 +228,9 @@
 	height = spr->height;
 }
 
-static int32 EstimateAircraftCost(EngineID engine, const AircraftVehicleInfo *avi)
+static CommandCost EstimateAircraftCost(EngineID engine, const AircraftVehicleInfo *avi)
 {
-	return GetEngineProperty(engine, 0x0B, avi->base_cost) * (_price.aircraft_base >> 3) >> 5;
+	return CommandCost(GetEngineProperty(engine, 0x0B, avi->base_cost) * (_price.aircraft_base >> 3) >> 5);
 }
 
 
@@ -265,12 +266,12 @@
  * @param p2 bit 0 when set, the unitnumber will be 0, otherwise it will be a free number
  * return result of operation.  Could be cost, error
  */
-int32 CmdBuildAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsEngineBuildable(p1, VEH_AIRCRAFT, _current_player)) return_cmd_error(STR_AIRCRAFT_NOT_AVAILABLE);
 
 	const AircraftVehicleInfo *avi = AircraftVehInfo(p1);
-	int32 value = EstimateAircraftCost(p1, avi);
+	CommandCost value = EstimateAircraftCost(p1, avi);
 
 	/* to just query the cost, it is not neccessary to have a valid tile (automation/AI) */
 	if (flags & DC_QUERY_COST) return value;
@@ -346,7 +347,7 @@
 
 		v->subtype = (avi->subtype & AIR_CTOL ? AIR_AIRCRAFT : AIR_HELICOPTER);
 		v->UpdateDeltaXY(INVALID_DIR);
-		v->value = value;
+		v->value = value.GetCost();
 
 		u->subtype = AIR_SHADOW;
 		u->UpdateDeltaXY(INVALID_DIR);
@@ -476,7 +477,7 @@
  * @param p2 unused
  * @return result of operation.  Error or sold value
  */
-int32 CmdSellAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSellAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidVehicleID(p1)) return CMD_ERROR;
 
@@ -493,7 +494,7 @@
 		DoDeleteAircraft(v);
 	}
 
-	return -(int32)v->value;
+	return CommandCost(-v->value);
 }
 
 /** Start/Stop an aircraft.
@@ -503,7 +504,7 @@
  * @param p2 unused
  * @return result of operation.  Nothing if everything went well
  */
-int32 CmdStartStopAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdStartStopAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidVehicleID(p1)) return CMD_ERROR;
 
@@ -534,7 +535,7 @@
 		InvalidateWindowClasses(WC_AIRCRAFT_LIST);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Send an aircraft to the hangar.
@@ -546,7 +547,7 @@
  * - p2 bit 8-10 - VLW flag (for mass goto depot)
  * @return o if everything went well
  */
-int32 CmdSendAircraftToHangar(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSendAircraftToHangar(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (p2 & DEPOT_MASS_SEND) {
 		/* Mass goto depot requested */
@@ -569,7 +570,7 @@
 				TOGGLEBIT(v->current_order.flags, OFB_HALT_IN_DEPOT);
 				InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 			}
-			return 0;
+			return CommandCost();
 		}
 
 		if (p2 & DEPOT_DONT_CANCEL) return CMD_ERROR; // Requested no cancelation of hangar orders
@@ -609,7 +610,7 @@
 		}
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -623,7 +624,7 @@
  * - p2 = (bit 16) - refit only this vehicle (ignored)
  * @return cost of refit or error
  */
-int32 CmdRefitAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRefitAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	byte new_subtype = GB(p2, 8, 8);
 
@@ -668,7 +669,7 @@
 	}
 	_returned_refit_capacity = pass;
 
-	int32 cost = 0;
+	CommandCost cost;
 	if (IsHumanPlayer(v->owner) && new_cid != v->cargo_type) {
 		cost = GetRefitCost(v->engine_type);
 	}
@@ -679,13 +680,8 @@
 		Vehicle *u = v->next;
 		uint mail = IsCargoInClass(new_cid, CC_PASSENGERS) ? avi->mail_capacity : 0;
 		u->cargo_cap = mail;
-		if (v->cargo_type == new_cid) {
-			v->cargo_count = min(pass, v->cargo_count);
-			u->cargo_count = min(mail, u->cargo_count);
-		} else {
-			v->cargo_count = 0;
-			u->cargo_count = 0;
-		}
+		v->cargo.Truncate(v->cargo_type == new_cid ? pass : 0);
+		u->cargo.Truncate(v->cargo_type == new_cid ? mail : 0);
 		v->cargo_type = new_cid;
 		v->cargo_subtype = new_subtype;
 		InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
@@ -744,9 +740,9 @@
 
 	if (v->vehstatus & VS_STOPPED) return;
 
-	int32 cost = GetVehicleProperty(v, 0x0E, AircraftVehInfo(v->engine_type)->running_cost) * _price.aircraft_running / 364;
+	CommandCost cost = CommandCost(GetVehicleProperty(v, 0x0E, AircraftVehInfo(v->engine_type)->running_cost) * _price.aircraft_running / 364);
 
-	v->profit_this_year -= cost >> 8;
+	v->profit_this_year -= cost.GetCost() >> 8;
 
 	SET_EXPENSES_TYPE(EXPENSES_AIRCRAFT_RUN);
 	SubtractMoneyFromPlayerFract(v->owner, cost);
@@ -773,7 +769,7 @@
 	if (_age_cargo_skip_counter != 0) return;
 
 	do {
-		if (v->cargo_days != 0xFF) v->cargo_days++;
+		v->cargo.AgeCargo();
 		v = v->next;
 	} while (v != NULL);
 }
@@ -1348,6 +1344,7 @@
 			if (!(v->current_order.flags & OF_PART_OF_ORDERS)) return;
 			if (v->current_order.flags & OF_SERVICE_IF_NEEDED &&
 					!VehicleNeedsService(v)) {
+				UpdateVehicleTimetable(v, true);
 				v->cur_order_index++;
 			}
 			break;
@@ -1379,7 +1376,7 @@
 		 */
 		const Station *st = GetStation(v->u.air.targetairport);
 		if (!st->IsValid() || st->airport_tile == 0) {
-			int32 ret;
+			CommandCost ret;
 			PlayerID old_player = _current_player;
 
 			_current_player = v->owner;
@@ -1427,11 +1424,11 @@
 	InvalidateWindow(WC_VEHICLE_VIEW, v->index);
 
 	uint amt = 2;
-	if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) amt += v->cargo_count;
+	if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) amt += v->cargo.Count();
 	SetDParam(0, amt);
 
-	v->cargo_count = 0;
-	v->next->cargo_count = 0;
+	v->cargo.Truncate(0);
+	v->next->cargo.Truncate(0);
 	const Station *st = GetStation(v->u.air.targetairport);
 	StringID newsitem;
 	if (st->airport_tile == 0) {
@@ -1467,7 +1464,7 @@
 	/* Crash the airplane. Remove all goods stored at the station. */
 	for (CargoID i = 0; i < NUM_CARGO; i++) {
 		st->goods[i].rating = 1;
-		SB(st->goods[i].waiting_acceptance, 0, 12, 0);
+		st->goods[i].cargo.Truncate(0);
 	}
 
 	CrashAirplane(v);
@@ -2086,6 +2083,7 @@
 static void AircraftEventHandler(Vehicle *v, int loop)
 {
 	v->tick_counter++;
+	v->current_order_time++;
 
 	if (v->vehstatus & VS_CRASHED) {
 		HandleCrashedAircraft(v);
--- a/src/aircraft_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/aircraft_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -80,8 +80,7 @@
 		SetWindowWidgetDisabledState(w, 5, !_patches.servint_aircraft);
 		SetWindowWidgetDisabledState(w, 6, !_patches.servint_aircraft);
 
-		SetDParam(0, v->string_id);
-		SetDParam(1, v->unitnumber);
+		SetDParam(0, v->index);
 		DrawWindowWidgets(w);
 
 		/* Draw running cost */
@@ -125,7 +124,7 @@
 
 		/* Draw Transfer credits text */
 		{
-			SetDParam(0, v->cargo_feeder_share);
+			SetDParam(0, v->cargo.FeederShare());
 			DrawString(60, 101, STR_FEEDER_CARGO_VALUE, 0);
 		}
 
@@ -137,7 +136,7 @@
 
 			do {
 				if (IsNormalAircraft(v)) {
-					SetDParam(0, GetCustomEngineName(v->engine_type));
+					SetDParam(0, v->engine_type);
 					SetDParam(1, v->build_year);
 					SetDParam(2, v->value);
 					DrawString(60, y, STR_A011_BUILT_VALUE, 0);
@@ -152,12 +151,13 @@
 					y += 14;
 				}
 
-				if (v->cargo_count != 0) {
+				uint cargo_count = v->cargo.Count();
+				if (cargo_count != 0) {
 
 					/* Cargo names (fix pluralness) */
 					SetDParam(0, v->cargo_type);
-					SetDParam(1, v->cargo_count);
-					SetDParam(2, v->cargo_source);
+					SetDParam(1, cargo_count);
+					SetDParam(2, v->cargo.Source());
 					DrawString(60, y, STR_8813_FROM, 0);
 
 					y += 10;
@@ -172,8 +172,8 @@
 		switch (e->we.click.widget) {
 		case 2: /* rename */
 			v = GetVehicle(w->window_number);
-			SetDParam(0, v->unitnumber);
-			ShowQueryString(v->string_id, STR_A030_NAME_AIRCRAFT, 31, 150, w, CS_ALPHANUMERAL);
+			SetDParam(0, v->index);
+			ShowQueryString(STR_VEHICLE_NAME, STR_A030_NAME_AIRCRAFT, 31, 150, w, CS_ALPHANUMERAL);
 			break;
 		case 5: /* increase int */
 			mod = _ctrl_pressed? 5 : 10;
@@ -271,8 +271,7 @@
 
 
 		/* draw widgets & caption */
-		SetDParam(0, v->string_id);
-		SetDParam(1, v->unitnumber);
+		SetDParam(0, v->index);
 		DrawWindowWidgets(w);
 
 		if (v->vehstatus & VS_CRASHED) {
@@ -359,6 +358,7 @@
 		DeleteWindowById(WC_VEHICLE_ORDERS, w->window_number);
 		DeleteWindowById(WC_VEHICLE_REFIT, w->window_number);
 		DeleteWindowById(WC_VEHICLE_DETAILS, w->window_number);
+		DeleteWindowById(WC_VEHICLE_TIMETABLE, w->window_number);
 		break;
 
 	case WE_MOUSELOOP: {
--- a/src/autoreplace_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/autoreplace_cmd.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -17,6 +17,7 @@
 #include "aircraft.h"
 #include "cargotype.h"
 #include "group.h"
+#include "strings.h"
 
 
 /*
@@ -25,27 +26,23 @@
 static void MoveVehicleCargo(Vehicle *dest, Vehicle *source)
 {
 	Vehicle *v = dest;
-	int units_moved;
 
 	do {
 		do {
 			if (source->cargo_type != dest->cargo_type)
 				continue; // cargo not compatible
 
-			if (dest->cargo_count == dest->cargo_cap)
+			if (dest->cargo.Count() == dest->cargo_cap)
 				continue; // the destination vehicle is already full
 
-			units_moved = min(source->cargo_count, dest->cargo_cap - dest->cargo_count);
-			source->cargo_count -= units_moved;
-			dest->cargo_count   += units_moved;
-			dest->cargo_source   = source->cargo_source;
+			uint units_moved = min(source->cargo.Count(), dest->cargo_cap - dest->cargo.Count());
+			source->cargo.MoveTo(&dest->cargo, units_moved);
 
 			// copy the age of the cargo
-			dest->cargo_days   = source->cargo_days;
 			dest->day_counter  = source->day_counter;
 			dest->tick_counter = source->tick_counter;
 
-		} while (source->cargo_count > 0 && (dest = dest->next) != NULL);
+		} while (source->cargo.Count() > 0 && (dest = dest->next) != NULL);
 		dest = v;
 	} while ((source = source->next) != NULL);
 
@@ -124,10 +121,10 @@
  * @param flags is the flags to use when calling DoCommand(). Mainly DC_EXEC counts
  * @return value is cost of the replacement or CMD_ERROR
  */
-static int32 ReplaceVehicle(Vehicle **w, byte flags, int32 total_cost)
+static CommandCost ReplaceVehicle(Vehicle **w, byte flags, Money total_cost)
 {
-	int32 cost;
-	int32 sell_value;
+	CommandCost cost;
+	CommandCost sell_value;
 	Vehicle *old_v = *w;
 	const Player *p = GetPlayer(old_v->owner);
 	EngineID new_engine_type;
@@ -154,7 +151,7 @@
 	replacement_cargo_type = GetNewCargoTypeForReplace(old_v, new_engine_type);
 
 	/* check if we can't refit to the needed type, so no replace takes place to prevent the vehicle from altering cargo type */
-	if (replacement_cargo_type == CT_INVALID) return 0;
+	if (replacement_cargo_type == CT_INVALID) return CommandCost();
 
 	sell_value = DoCommand(0, old_v->index, 0, DC_QUERY_COST, GetCmdSellVeh(old_v));
 
@@ -167,15 +164,17 @@
 	cost = DoCommand(old_v->tile, new_engine_type, 3, flags, GetCmdBuildVeh(old_v));
 	if (CmdFailed(cost)) {
 		SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
-		SubtractMoneyFromPlayer(-sell_value); // Take back the money we just gave the player
+		/* Take back the money we just gave the player */
+		sell_value.MultiplyCost(-1);
+		SubtractMoneyFromPlayer(sell_value);
 		return cost;
 	}
 
 	if (replacement_cargo_type != CT_NO_REFIT) {
 		/* add refit cost */
-		int32 refit_cost = GetRefitCost(new_engine_type);
-		if (old_v->type == VEH_TRAIN && IsMultiheaded(old_v)) refit_cost += refit_cost; // pay for both ends
-		cost += refit_cost;
+		CommandCost refit_cost = GetRefitCost(new_engine_type);
+		if (old_v->type == VEH_TRAIN && IsMultiheaded(old_v)) refit_cost.AddCost(refit_cost); // pay for both ends
+		cost.AddCost(refit_cost);
 	}
 
 	if (flags & DC_EXEC) {
@@ -243,10 +242,11 @@
 		if (!IsCustomName(old_v->string_id)) {
 			vehicle_name[0] = '\0';
 		} else {
-			GetName(vehicle_name, old_v->string_id & 0x7FF, lastof(vehicle_name));
+			SetDParam(0, old_v->index);
+			GetString(vehicle_name, STR_VEHICLE_NAME, lastof(vehicle_name));
 		}
 	} else { // flags & DC_EXEC not set
-		int32 tmp_move = 0;
+		CommandCost tmp_move;
 		if (old_v->type == VEH_TRAIN && IsFrontEngine(old_v) && old_v->next != NULL) {
 			/* Verify that the wagons can be placed on the engine in question.
 			 * This is done by building an engine, test if the wagons can be added and then sell the test engine. */
@@ -258,9 +258,11 @@
 
 		/* Ensure that the player will not end up having negative money while autoreplacing
 		 * This is needed because the only other check is done after the income from selling the old vehicle is substracted from the cost */
-		if (CmdFailed(tmp_move) || p->money64 < (cost + total_cost)) {
+		if (CmdFailed(tmp_move) || p->player_money < (cost.GetCost() + total_cost)) {
 			SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
-			SubtractMoneyFromPlayer(-sell_value); // Pay back the loan
+			/* Pay back the loan */
+			sell_value.MultiplyCost(-1);
+			SubtractMoneyFromPlayer(sell_value);
 			return CMD_ERROR;
 		}
 	}
@@ -268,10 +270,11 @@
 	/* Take back the money we just gave the player just before building the vehicle
 	 * The player will get the same amount now that the sale actually takes place */
 	SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
-	SubtractMoneyFromPlayer(-sell_value);
+	sell_value.MultiplyCost(-1);
+	SubtractMoneyFromPlayer(sell_value);
 
 	/* sell the engine/ find out how much you get for the old engine (income is returned as negative cost) */
-	cost += DoCommand(0, old_v->index, 0, flags, GetCmdSellVeh(old_v));
+	cost.AddCost(DoCommand(0, old_v->index, 0, flags, GetCmdSellVeh(old_v)));
 
 	if (new_front) {
 		/* now we assign the old unitnumber to the new vehicle */
@@ -295,12 +298,12 @@
  * @param display_costs If set, a cost animation is shown (only if check is false)
  * @return CMD_ERROR if something went wrong. Otherwise the price of the replace
  */
-int32 MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs)
+CommandCost MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs)
 {
 	Vehicle *w;
 	const Player *p = GetPlayer(v->owner);
 	byte flags = 0;
-	int32 cost, temp_cost = 0;
+	CommandCost cost, temp_cost;
 	bool stopped;
 
 	/* Remember the length in case we need to trim train later on
@@ -326,7 +329,7 @@
 	v->leave_depot_instantly = false;
 
 	for (;;) {
-		cost = 0;
+		cost = CommandCost();
 		w = v;
 		do {
 			if (w->type == VEH_TRAIN && IsMultiheaded(w) && !IsTrainEngine(w)) {
@@ -352,7 +355,7 @@
 			}
 
 			/* Now replace the vehicle */
-			temp_cost = ReplaceVehicle(&w, flags, cost);
+			temp_cost = ReplaceVehicle(&w, flags, cost.GetCost());
 
 			if (CmdFailed(temp_cost)) break; // replace failed for some reason. Leave the vehicle alone
 
@@ -364,11 +367,11 @@
 				 */
 				v = w;
 			}
-			cost += temp_cost;
+			cost.AddCost(temp_cost);
 		} while (w->type == VEH_TRAIN && (w = GetNextVehicle(w)) != NULL);
 
-		if (!(flags & DC_EXEC) && (p->money64 < (int32)(cost + p->engine_renew_money) || cost == 0)) {
-			if (!check && p->money64 < (int32)(cost + p->engine_renew_money) && ( _local_player == v->owner ) && cost != 0) {
+		if (!(flags & DC_EXEC) && (p->player_money < (cost.GetCost() + p->engine_renew_money) || cost.GetCost() == 0)) {
+			if (!check && p->player_money < (cost.GetCost() + p->engine_renew_money) && ( _local_player == v->owner ) && cost.GetCost() != 0) {
 				StringID message;
 				SetDParam(0, v->unitnumber);
 				switch (v->type) {
@@ -418,13 +421,13 @@
 			w = GetNextVehicle(w);
 			DoCommand(0, (INVALID_VEHICLE << 16) | temp->index, 0, DC_EXEC, CMD_MOVE_RAIL_VEHICLE);
 			MoveVehicleCargo(v, temp);
-			cost += DoCommand(0, temp->index, 0, DC_EXEC, CMD_SELL_RAIL_WAGON);
+			cost.AddCost(DoCommand(0, temp->index, 0, DC_EXEC, CMD_SELL_RAIL_WAGON));
 		}
 	}
 
 	if (stopped) v->vehstatus &= ~VS_STOPPED;
 	if (display_costs) {
-		if (IsLocalPlayer()) ShowCostOrIncomeAnimation(v->x_pos, v->y_pos, v->z_pos, cost);
+		if (IsLocalPlayer()) ShowCostOrIncomeAnimation(v->x_pos, v->y_pos, v->z_pos, cost.GetCost());
 		_current_player = OWNER_NONE;
 	}
 	return cost;
--- a/src/autoreplace_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/autoreplace_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -288,7 +288,8 @@
 				if (!EngineHasReplacementForPlayer(p, selected_id[0], selected_group)) {
 					SetDParam(0, STR_NOT_REPLACING);
 				} else {
-					SetDParam(0, GetCustomEngineName(EngineReplacementForPlayer(p, selected_id[0], selected_group)));
+					SetDParam(0, STR_ENGINE_NAME);
+					SetDParam(1, EngineReplacementForPlayer(p, selected_id[0], selected_group));
 				}
 			} else {
 				SetDParam(0, STR_NOT_REPLACING_VEHICLE_SELECTED);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/32bpp_anim.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -0,0 +1,277 @@
+#include "../stdafx.h"
+#include "../zoom.hpp"
+#include "../gfx.h"
+#include "../debug.h"
+#include "../table/sprites.h"
+#include "32bpp_anim.hpp"
+
+static FBlitter_32bppAnim iFBlitter_32bppAnim;
+
+void Blitter_32bppAnim::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
+{
+	const SpriteLoader::CommonPixel *src, *src_line;
+	uint32 *dst, *dst_line;
+	uint8 *anim, *anim_line;
+
+	if (_screen.width != this->anim_buf_width || _screen.height != this->anim_buf_height) {
+		/* The size of the screen changed; we can assume we can wipe all data from our buffer */
+		free(this->anim_buf);
+		this->anim_buf = CallocT<uint8>(_screen.width * _screen.height);
+		this->anim_buf_width = _screen.width;
+		this->anim_buf_height = _screen.height;
+	}
+
+	/* Find where to start reading in the source sprite */
+	src_line = (const SpriteLoader::CommonPixel *)bp->sprite + (bp->skip_top * bp->sprite_width + bp->skip_left) * ScaleByZoom(1, zoom);
+	dst_line = (uint32 *)bp->dst + bp->top * bp->pitch + bp->left;
+	anim_line = this->anim_buf + ((uint32 *)bp->dst - (uint32 *)_screen.dst_ptr) + bp->top * this->anim_buf_width + bp->left;
+
+	for (int y = 0; y < bp->height; y++) {
+		dst = dst_line;
+		dst_line += bp->pitch;
+
+		src = src_line;
+		src_line += bp->sprite_width * ScaleByZoom(1, zoom);
+
+		anim = anim_line;
+		anim_line += this->anim_buf_width;
+
+		for (int x = 0; x < bp->width; x++) {
+			switch (mode) {
+				case BM_COLOUR_REMAP:
+					/* In case the m-channel is zero, do not remap this pixel in any way */
+					if (src->m == 0) {
+						if (src->a != 0) *dst = ComposeColourRGBA(src->r, src->g, src->b, src->a, *dst);
+						*anim = 0;
+					} else {
+						if (bp->remap[src->m] != 0) {
+							*dst = ComposeColourPA(this->LookupColourInPalette(bp->remap[src->m]), src->a, *dst);
+							*anim = bp->remap[src->m];
+						}
+					}
+					break;
+
+				case BM_TRANSPARENT:
+					/* TODO -- We make an assumption here that the remap in fact is transparency, not some color.
+					 *  This is never a problem with the code we produce, but newgrfs can make it fail... or at least:
+					 *  we produce a result the newgrf maker didn't expect ;) */
+
+					/* Make the current color a bit more black, so it looks like this image is transparent */
+					if (src->a != 0) {
+						*dst = MakeTransparent(*dst, 75);
+						*anim = bp->remap[*anim];
+					}
+					break;
+
+				default:
+					if (src->a != 0) {
+						/* Above 217 is palette animation */
+						if (src->m >= 217) *dst = ComposeColourPA(this->LookupColourInPalette(src->m), src->a, *dst);
+						else               *dst = ComposeColourRGBA(src->r, src->g, src->b, src->a, *dst);
+						*anim = src->m;
+					}
+					break;
+			}
+			dst++;
+			anim++;
+			src += ScaleByZoom(1, zoom);
+		}
+	}
+}
+
+void Blitter_32bppAnim::DrawColorMappingRect(void *dst, int width, int height, int pal)
+{
+	uint32 *udst = (uint32 *)dst;
+	uint8 *anim;
+
+	anim = this->anim_buf + ((uint32 *)dst - (uint32 *)_screen.dst_ptr);
+
+	if (pal == PALETTE_TO_TRANSPARENT) {
+		do {
+			for (int i = 0; i != width; i++) {
+				*udst = MakeTransparent(*udst, 60);
+				*anim = 0;
+				udst++;
+				anim++;
+			}
+			udst = udst - width + _screen.pitch;
+			anim = anim - width + this->anim_buf_width;
+		} while (--height);
+		return;
+	}
+	if (pal == PALETTE_TO_STRUCT_GREY) {
+		do {
+			for (int i = 0; i != width; i++) {
+				*udst = MakeGrey(*udst);
+				*anim = 0;
+				udst++;
+				anim++;
+			}
+			udst = udst - width + _screen.pitch;
+			anim = anim - width + this->anim_buf_width;
+		} while (--height);
+		return;
+	}
+
+	DEBUG(misc, 0, "32bpp blitter doesn't know how to draw this color table ('%d')", pal);
+}
+
+void Blitter_32bppAnim::SetPixel(void *video, int x, int y, uint8 color)
+{
+	*((uint32 *)video + x + y * _screen.pitch) = LookupColourInPalette(color);
+	/* Set the color in the anim-buffer too */
+	this->anim_buf[((uint32 *)video - (uint32 *)_screen.dst_ptr) + x + y * this->anim_buf_width] = color;
+}
+
+void Blitter_32bppAnim::SetPixelIfEmpty(void *video, int x, int y, uint8 color)
+{
+	uint32 *dst = (uint32 *)video + x + y * _screen.pitch;
+	if (*dst == 0) {
+		*dst = LookupColourInPalette(color);
+		/* Set the color in the anim-buffer too */
+		this->anim_buf[((uint32 *)video - (uint32 *)_screen.dst_ptr) + x + y * this->anim_buf_width] = color;
+	}
+}
+
+void Blitter_32bppAnim::DrawRect(void *video, int width, int height, uint8 color)
+{
+	uint32 color32 = LookupColourInPalette(color);
+	uint8 *anim_line;
+
+	anim_line = ((uint32 *)video - (uint32 *)_screen.dst_ptr) + this->anim_buf;
+
+	do {
+		uint32 *dst = (uint32 *)video;
+		uint8 *anim = anim_line;
+
+		for (int i = width; i > 0; i--) {
+			*dst = color32;
+			/* Set the color in the anim-buffer too */
+			*anim = color;
+			dst++;
+			anim++;
+		}
+		video = (uint32 *)video + _screen.pitch;
+		anim_line += this->anim_buf_width;
+	} while (--height);
+}
+
+void Blitter_32bppAnim::CopyFromBuffer(void *video, const void *src, int width, int height)
+{
+	assert(video >= _screen.dst_ptr && video <= (uint32 *)_screen.dst_ptr + _screen.width + _screen.height * _screen.pitch);
+	uint32 *dst = (uint32 *)video;
+	uint32 *usrc = (uint32 *)src;
+	uint8 *anim_line;
+
+	anim_line = ((uint32 *)video - (uint32 *)_screen.dst_ptr) + this->anim_buf;
+
+	for (; height > 0; height--) {
+		memcpy(dst, usrc, width * sizeof(uint32));
+		usrc += width;
+		dst += _screen.pitch;
+		/* Copy back the anim-buffer */
+		memcpy(anim_line, usrc, width * sizeof(uint8));
+		usrc = (uint32 *)((uint8 *)usrc + width);
+		anim_line += this->anim_buf_width;
+	}
+
+	/* We update the palette (or the pixels that do animation) immediatly, to avoid graphical glitches */
+	this->PaletteAnimate(217, _use_dos_palette ? 38 : 28);
+}
+
+void Blitter_32bppAnim::CopyToBuffer(const void *video, void *dst, int width, int height)
+{
+	assert(video >= _screen.dst_ptr && video <= (uint32 *)_screen.dst_ptr + _screen.width + _screen.height * _screen.pitch);
+	uint32 *udst = (uint32 *)dst;
+	uint32 *src = (uint32 *)video;
+	uint8 *anim_line;
+
+	if (this->anim_buf == NULL) return;
+
+	anim_line = ((uint32 *)video - (uint32 *)_screen.dst_ptr) + this->anim_buf;
+
+	for (; height > 0; height--) {
+		memcpy(udst, src, width * sizeof(uint32));
+		src += _screen.pitch;
+		udst += width;
+		/* Copy the anim-buffer */
+		memcpy(udst, anim_line, width * sizeof(uint8));
+		udst = (uint32 *)((uint8 *)udst + width);
+		anim_line += this->anim_buf_width;
+	}
+}
+
+void Blitter_32bppAnim::ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y)
+{
+	uint8 *dst, *src;
+
+	/* We need to scroll the anim-buffer too */
+	if (scroll_y > 0) {
+		dst = this->anim_buf + left + (top + height - 1) * this->anim_buf_width;
+		src = dst - scroll_y * this->anim_buf_width;
+
+		/* Adjust left & width */
+		if (scroll_x >= 0) dst += scroll_x;
+		else               src -= scroll_x;
+
+		uint tw = width + (scroll_x >= 0 ? -scroll_x : scroll_x);
+		uint th = height - scroll_y;
+		for (; th > 0; th--) {
+			memcpy(dst, src, tw * sizeof(uint8));
+			src -= this->anim_buf_width;
+			dst -= this->anim_buf_width;
+		}
+	} else {
+		/* Calculate pointers */
+		dst = this->anim_buf + left + top * this->anim_buf_width;
+		src = dst - scroll_y * this->anim_buf_width;
+
+		/* Adjust left & width */
+		if (scroll_x >= 0) dst += scroll_x;
+		else               src -= scroll_x;
+
+		/* the y-displacement may be 0 therefore we have to use memmove,
+		 * because source and destination may overlap */
+		uint tw = width + (scroll_x >= 0 ? -scroll_x : scroll_x);
+		uint th = height + scroll_y;
+		for (; th > 0; th--) {
+			memmove(dst, src, tw * sizeof(uint8));
+			src += this->anim_buf_width;
+			dst += this->anim_buf_width;
+		}
+	}
+
+	Blitter_32bppBase::ScrollBuffer(video, left, top, width, height, scroll_x, scroll_y);
+}
+
+int Blitter_32bppAnim::BufferSize(int width, int height)
+{
+	return width * height * (sizeof(uint32) + sizeof(uint8));
+}
+
+void Blitter_32bppAnim::PaletteAnimate(uint start, uint count)
+{
+	uint8 *anim = this->anim_buf;
+
+	/* Never repaint the transparency pixel */
+	if (start == 0) start++;
+
+	/* Let's walk the anim buffer and try to find the pixels */
+	for (int y = 0; y < this->anim_buf_height; y++) {
+		for (int x = 0; x < this->anim_buf_width; x++) {
+			if (*anim >= start && *anim <= start + count) {
+				/* Update this pixel */
+				this->SetPixel(_screen.dst_ptr, x, y, *anim);
+			}
+			anim++;
+		}
+	}
+
+	/* Make sure the backend redraws the whole screen */
+	_video_driver->make_dirty(0, 0, _screen.width, _screen.height);
+}
+
+Blitter::PaletteAnimation Blitter_32bppAnim::UsePaletteAnimation()
+{
+	return Blitter::PALETTE_ANIMATION_BLITTER;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/32bpp_anim.hpp	Tue Jun 26 23:40:58 2007 +0000
@@ -0,0 +1,46 @@
+/* $Id$ */
+
+/** @file 32bpp_anim.hpp */
+
+#ifndef BLITTER_32BPP_ANIM_HPP
+#define BLITTER_32BPP_ANIM_HPP
+
+#include "32bpp_simple.hpp"
+#include "factory.hpp"
+
+class Blitter_32bppAnim : public Blitter_32bppSimple {
+private:
+	uint8 *anim_buf; ///< In this buffer we keep track of the 8bpp indexes so we can do palette animation
+	int anim_buf_width;
+	int anim_buf_height;
+
+public:
+	Blitter_32bppAnim() :
+		anim_buf(NULL),
+		anim_buf_width(0),
+		anim_buf_height(0)
+	{}
+
+	/* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
+	/* virtual */ void DrawColorMappingRect(void *dst, int width, int height, int pal);
+	/* virtual */ void SetPixel(void *video, int x, int y, uint8 color);
+	/* virtual */ void SetPixelIfEmpty(void *video, int x, int y, uint8 color);
+	/* virtual */ void DrawRect(void *video, int width, int height, uint8 color);
+	/* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height);
+	/* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height);
+	/* virtual */ void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y);
+	/* virtual */ int BufferSize(int width, int height);
+	/* virtual */ void PaletteAnimate(uint start, uint count);
+	/* virtual */ Blitter::PaletteAnimation UsePaletteAnimation();
+
+	/* virtual */ const char *GetName() { return "32bpp-anim"; }
+};
+
+class FBlitter_32bppAnim: public BlitterFactory<FBlitter_32bppAnim> {
+public:
+	/* virtual */ const char *GetName() { return "32bpp-anim"; }
+	/* virtual */ const char *GetDescription() { return "32bpp Animation Blitter (palette animation)"; }
+	/* virtual */ Blitter *CreateInstance() { return new Blitter_32bppAnim(); }
+};
+
+#endif /* BLITTER_32BPP_ANIM_HPP */
--- a/src/blitter/32bpp_base.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/32bpp_base.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -18,54 +18,162 @@
 	if (*dst == 0) *dst = LookupColourInPalette(color);
 }
 
-void Blitter_32bppBase::SetHorizontalLine(void *video, int width, uint8 color)
+void Blitter_32bppBase::DrawRect(void *video, int width, int height, uint8 color)
 {
-	uint32 *dst = (uint32 *)video;
 	uint32 color32 = LookupColourInPalette(color);
 
-	for (; width > 0; width--) {
-		*dst = color32;
-		dst++;
+	do {
+		uint32 *dst = (uint32 *)video;
+		for (int i = width; i > 0; i--) {
+			*dst = color32;
+			dst++;
+		}
+		video = (uint32 *)video + _screen.pitch;
+	} while (--height);
+}
+
+void Blitter_32bppBase::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 color)
+{
+	int dy;
+	int dx;
+	int stepx;
+	int stepy;
+	int frac;
+
+	dy = (y2 - y) * 2;
+	if (dy < 0) {
+		dy = -dy;
+		stepy = -1;
+	} else {
+		stepy = 1;
+	}
+
+	dx = (x2 - x) * 2;
+	if (dx < 0) {
+		dx = -dx;
+		stepx = -1;
+	} else {
+		stepx = 1;
+	}
+
+	this->SetPixel(video, x, y, color);
+	if (dx > dy) {
+		frac = dy - (dx / 2);
+		while (x != x2) {
+			if (frac >= 0) {
+				y += stepy;
+				frac -= dx;
+			}
+			x += stepx;
+			frac += dy;
+			if (x > 0 && y > 0 && x < screen_width && y < screen_height) this->SetPixel(video, x, y, color);
+		}
+	} else {
+		frac = dx - (dy / 2);
+		while (y != y2) {
+			if (frac >= 0) {
+				x += stepx;
+				frac -= dy;
+			}
+			y += stepy;
+			frac += dx;
+			if (x > 0 && y > 0 && x < screen_width && y < screen_height) this->SetPixel(video, x, y, color);
+		}
 	}
 }
 
-void Blitter_32bppBase::CopyFromBuffer(void *video, const void *src, int width, int height, int src_pitch)
+void Blitter_32bppBase::CopyFromBuffer(void *video, const void *src, int width, int height)
 {
-	int direction = (height < 0) ? -1 : 1;
 	uint32 *dst = (uint32 *)video;
 	uint32 *usrc = (uint32 *)src;
 
-	height = abs(height);
 	for (; height > 0; height--) {
 		memcpy(dst, usrc, width * sizeof(uint32));
-		usrc += src_pitch * direction;
-		dst += _screen.pitch * direction;
+		usrc += width;
+		dst += _screen.pitch;
 	}
 }
 
-void Blitter_32bppBase::CopyToBuffer(const void *video, void *dst, int width, int height, int dst_pitch)
+void Blitter_32bppBase::CopyToBuffer(const void *video, void *dst, int width, int height)
 {
-	int direction = (height < 0) ? -1 : 1;
 	uint32 *udst = (uint32 *)dst;
 	uint32 *src = (uint32 *)video;
 
-	height = abs(height);
 	for (; height > 0; height--) {
 		memcpy(udst, src, width * sizeof(uint32));
-		src += _screen.pitch * direction;
-		udst += dst_pitch * direction;
+		src += _screen.pitch;
+		udst += width;
 	}
 }
 
-void Blitter_32bppBase::MoveBuffer(void *video_dst, const void *video_src, int width, int height)
+void Blitter_32bppBase::CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch)
 {
-	uint32 *dst = (uint32 *)video_dst;
-	uint32 *src = (uint32 *)video_src;
+	uint32 *udst = (uint32 *)dst;
+	uint32 *src = (uint32 *)video;
 
 	for (; height > 0; height--) {
-		memmove(dst, src, width * sizeof(uint32));
+		memcpy(udst, src, width * sizeof(uint32));
 		src += _screen.pitch;
-		dst += _screen.pitch;
+		udst += dst_pitch;
+	}
+}
+
+void Blitter_32bppBase::ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y)
+{
+	const uint32 *src;
+	uint32 *dst;
+
+	if (scroll_y > 0) {
+		/*Calculate pointers */
+		dst = (uint32 *)video + left + (top + height - 1) * _screen.pitch;
+		src = dst - scroll_y * _screen.pitch;
+
+		/* Decrease height and increase top */
+		top += scroll_y;
+		height -= scroll_y;
+		assert(height > 0);
+
+		/* Adjust left & width */
+		if (scroll_x >= 0) {
+			dst += scroll_x;
+			left += scroll_x;
+			width -= scroll_x;
+		} else {
+			src -= scroll_x;
+			width += scroll_x;
+		}
+
+		for (int h = height; h > 0; h--) {
+			memcpy(dst, src, width * sizeof(uint32));
+			src -= _screen.pitch;
+			dst -= _screen.pitch;
+		}
+	} else {
+		/* Calculate pointers */
+		dst = (uint32 *)video + left + top * _screen.pitch;
+		src = dst - scroll_y * _screen.pitch;
+
+		/* Decrese height. (scroll_y is <=0). */
+		height += scroll_y;
+		assert(height > 0);
+
+		/* Adjust left & width */
+		if (scroll_x >= 0) {
+			dst += scroll_x;
+			left += scroll_x;
+			width -= scroll_x;
+		} else {
+			src -= scroll_x;
+			width += scroll_x;
+		}
+
+		/* the y-displacement may be 0 therefore we have to use memmove,
+		 * because source and destination may overlap */
+		for (int h = height; h > 0; h--) {
+			memmove(dst, src, width * sizeof(uint32));
+			src += _screen.pitch;
+			dst += _screen.pitch;
+		}
 	}
 }
 
@@ -73,3 +181,13 @@
 {
 	return width * height * sizeof(uint32);
 }
+
+void Blitter_32bppBase::PaletteAnimate(uint start, uint count)
+{
+	/* By default, 32bpp doesn't have palette animation */
+}
+
+Blitter::PaletteAnimation Blitter_32bppBase::UsePaletteAnimation()
+{
+	return Blitter::PALETTE_ANIMATION_NONE;
+}
--- a/src/blitter/32bpp_base.hpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/32bpp_base.hpp	Tue Jun 26 23:40:58 2007 +0000
@@ -16,16 +16,102 @@
 	/* virtual */ void *MoveTo(const void *video, int x, int y);
 	/* virtual */ void SetPixel(void *video, int x, int y, uint8 color);
 	/* virtual */ void SetPixelIfEmpty(void *video, int x, int y, uint8 color);
-	/* virtual */ void SetHorizontalLine(void *video, int width, uint8 color);
-	/* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height, int src_pitch);
-	/* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height, int dst_pitch);
-	/* virtual */ void MoveBuffer(void *video_dst, const void *video_src, int width, int height);
+	/* virtual */ void DrawRect(void *video, int width, int height, uint8 color);
+	/* virtual */ void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 color);
+	/* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height);
+	/* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height);
+	/* virtual */ void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch);
+	/* virtual */ void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y);
 	/* virtual */ int BufferSize(int width, int height);
+	/* virtual */ void PaletteAnimate(uint start, uint count);
+	/* virtual */ Blitter::PaletteAnimation UsePaletteAnimation();
 
-	static inline uint32 LookupColourInPalette(uint8 index) {
-		#define ARGB(a, r, g, b) ((((a) << 24) & 0xFF000000) | (((r) << 16) & 0x00FF0000) | (((g) << 8) & 0x0000FF00) | ((b) & 0x000000FF))
-		if (index == 0) return 0x00000000;
-		return ARGB(0xFF, _cur_palette[index].r, _cur_palette[index].g, _cur_palette[index].b);
+	/**
+	 * Compose a colour based on RGB values.
+	 */
+	static inline uint ComposeColour(uint a, uint r, uint g, uint b)
+	{
+		return (((a) << 24) & 0xFF000000) | (((r) << 16) & 0x00FF0000) | (((g) << 8) & 0x0000FF00) | ((b) & 0x000000FF);
+	}
+
+	/**
+	 * Look up the colour in the current palette.
+	 **/
+	static inline uint32 LookupColourInPalette(uint8 index)
+	{
+		if (index == 0) return 0x00000000; // Full transparent pixel */
+		return ComposeColour(0xFF, _cur_palette[index].r, _cur_palette[index].g, _cur_palette[index].b);
+	}
+
+	/**
+	 * Compose a colour based on RGBA values and the current pixel value.
+	 */
+	static inline uint ComposeColourRGBA(uint r, uint g, uint b, uint a, uint current)
+	{
+		uint cr, cg, cb;
+		cr = GB(current, 16, 8);
+		cg = GB(current, 8,  8);
+		cb = GB(current, 0,  8);
+
+		return ComposeColour(0xFF,
+												(r * a + cr * (255 - a)) / 255,
+												(g * a + cg * (255 - a)) / 255,
+												(b * a + cb * (255 - a)) / 255);
+	}
+
+	/**
+	* Compose a colour based on Pixel value, alpha value, and the current pixel value.
+	*/
+	static inline uint ComposeColourPA(uint colour, uint a, uint current)
+	{
+		uint r, g, b, cr, cg, cb;
+		r  = GB(colour,   16, 8);
+		g  = GB(colour,   8,  8);
+		b  = GB(colour,   0,  8);
+		cr = GB(current, 16, 8);
+		cg = GB(current, 8,  8);
+		cb = GB(current, 0,  8);
+
+		return ComposeColour(0xFF,
+												(r * a + cr * (255 - a)) / 255,
+												(g * a + cg * (255 - a)) / 255,
+												(b * a + cb * (255 - a)) / 255);
+	}
+
+	/**
+	* Make a pixel looks like it is transparent.
+	* @param colour the colour already on the screen.
+	* @param amount the amount of transparency, times 100.
+	* @return the new colour for the screen.
+	*/
+	static inline uint MakeTransparent(uint colour, uint amount)
+	{
+		uint r, g, b;
+		r = GB(colour, 16, 8);
+		g = GB(colour, 8,  8);
+		b = GB(colour, 0,  8);
+
+		return ComposeColour(0xFF, r * amount / 100, g * amount / 100, b * amount / 100);
+	}
+
+	/**
+	* Make a colour grey-based.
+	* @param colour the colour to make grey.
+	* @return the new colour, now grey.
+	*/
+	static inline uint MakeGrey(uint colour)
+	{
+		uint r, g, b;
+		r = GB(colour, 16, 8);
+		g = GB(colour, 8,  8);
+		b = GB(colour, 0,  8);
+
+		/* To avoid doubles and stuff, multiple it with a total of 65536 (16bits), then
+		*  divide by it to normalize the value to a byte again. See heightmap.cpp for
+		*  information about the formula. */
+		colour = ((r * 19595) + (g * 38470) + (b * 7471)) / 65536;
+
+		return ComposeColour(0xFF, colour, colour, colour);
 	}
 };
 
--- a/src/blitter/32bpp_simple.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/32bpp_simple.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -7,83 +7,6 @@
 
 static FBlitter_32bppSimple iFBlitter_32bppSimple;
 
-/**
- * Compose a color based on RGB values.
- */
-static inline uint ComposeColor(uint r, uint g, uint b)
-{
-	return (r & 0xFF) << 16 | (g & 0xFF) << 8 | (b & 0xFF) << 0;
-}
-
-/**
- * Compose a color based on RGBA values and the current pixel value.
- */
-static inline uint ComposeColorRGBA(uint r, uint g, uint b, uint a, uint current)
-{
-	uint cr, cg, cb;
-	cr = GB(current, 16, 8);
-	cg = GB(current, 8,  8);
-	cb = GB(current, 0,  8);
-
-	return ComposeColor((r * a + cr * (255 - a)) / 255,
-											(g * a + cg * (255 - a)) / 255,
-											(b * a + cb * (255 - a)) / 255);
-}
-
-/**
- * Compose a color based on Pixel value, alpha value, and the current pixel value.
- */
-static inline uint ComposeColorPA(uint color, uint a, uint current)
-{
-	uint r, g, b, cr, cg, cb;
-	r  = GB(color,   16, 8);
-	g  = GB(color,   8,  8);
-	b  = GB(color,   0,  8);
-	cr = GB(current, 16, 8);
-	cg = GB(current, 8,  8);
-	cb = GB(current, 0,  8);
-
-	return ComposeColor((r * a + cr * (255 - a)) / 255,
-											(g * a + cg * (255 - a)) / 255,
-											(b * a + cb * (255 - a)) / 255);
-}
-
-/**
- * Make a pixel looks like it is transparent.
- * @param color the color already on the screen.
- * @param amount the amount of transparency, times 100.
- * @return the new color for the screen.
- */
-static inline uint MakeTransparent(uint color, uint amount)
-{
-	uint r, g, b;
-	r = GB(color, 16, 8);
-	g = GB(color, 8,  8);
-	b = GB(color, 0,  8);
-
-	return ComposeColor(r * amount / 100, g * amount / 100, b * amount / 100);
-}
-
-/**
- * Make a color grey-based.
- * @param color the color to make grey.
- * @return the new color, now grey.
- */
-static inline uint MakeGrey(uint color)
-{
-	uint r, g, b;
-	r = GB(color, 16, 8);
-	g = GB(color, 8,  8);
-	b = GB(color, 0,  8);
-
-	/* To avoid doubles and stuff, multiple it with a total of 65536 (16bits), then
-	 *  divide by it to normalize the value to a byte again. See heightmap.cpp for
-	 *  information about the formula. */
-	color = ((r * 19595) + (g * 38470) + (b * 7471)) / 65536;
-
-	return ComposeColor(color, color, color);
-}
-
 void Blitter_32bppSimple::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
 {
 	const SpriteLoader::CommonPixel *src, *src_line;
@@ -105,9 +28,9 @@
 				case BM_COLOUR_REMAP:
 					/* In case the m-channel is zero, do not remap this pixel in any way */
 					if (src->m == 0) {
-						if (src->a != 0) *dst = ComposeColorRGBA(src->r, src->g, src->b, src->a, *dst);
+						if (src->a != 0) *dst = ComposeColourRGBA(src->r, src->g, src->b, src->a, *dst);
 					} else {
-						if (bp->remap[src->m] != 0) *dst = ComposeColorPA(this->LookupColourInPalette(bp->remap[src->m]), src->a, *dst);
+						if (bp->remap[src->m] != 0) *dst = ComposeColourPA(this->LookupColourInPalette(bp->remap[src->m]), src->a, *dst);
 					}
 					break;
 
@@ -121,7 +44,7 @@
 					break;
 
 				default:
-					if (src->a != 0) *dst = ComposeColorRGBA(src->r, src->g, src->b, src->a, *dst);
+					if (src->a != 0) *dst = ComposeColourRGBA(src->r, src->g, src->b, src->a, *dst);
 					break;
 			}
 			dst++;
@@ -141,7 +64,7 @@
 				udst++;
 			}
 			udst = udst - width + _screen.pitch;
-		} while (height--);
+		} while (--height);
 		return;
 	}
 	if (pal == PALETTE_TO_STRUCT_GREY) {
@@ -151,7 +74,7 @@
 				udst++;
 			}
 			udst = udst - width + _screen.pitch;
-		} while (height--);
+		} while (--height);
 		return;
 	}
 
--- a/src/blitter/32bpp_simple.hpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/32bpp_simple.hpp	Tue Jun 26 23:40:58 2007 +0000
@@ -13,6 +13,8 @@
 	/* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
 	/* virtual */ void DrawColorMappingRect(void *dst, int width, int height, int pal);
 	/* virtual */ Sprite *Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator);
+
+	/* virtual */ const char *GetName() { return "32bpp-simple"; }
 };
 
 class FBlitter_32bppSimple: public BlitterFactory<FBlitter_32bppSimple> {
--- a/src/blitter/8bpp_base.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/8bpp_base.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -9,7 +9,7 @@
 	do {
 		for (int i = 0; i != width; i++) *((uint8 *)dst + i) = ctab[((uint8 *)dst)[i]];
 		dst = (uint8 *)dst + _screen.pitch;
-	} while (height--);
+	} while (--height);
 }
 
 void *Blitter_8bppBase::MoveTo(const void *video, int x, int y)
@@ -28,48 +28,156 @@
 	if (*dst == 0) *dst = color;
 }
 
-void Blitter_8bppBase::SetHorizontalLine(void *video, int width, uint8 color)
+void Blitter_8bppBase::DrawRect(void *video, int width, int height, uint8 color)
 {
-	memset(video, color, width);
+	do {
+		memset(video, color, width);
+		video = (uint8 *)video + _screen.pitch;
+	} while (--height);
 }
 
-void Blitter_8bppBase::CopyFromBuffer(void *video, const void *src, int width, int height, int src_pitch)
+void Blitter_8bppBase::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 color)
 {
-	int direction = (height < 0) ? -1 : 1;
-	uint8 *dst = (uint8 *)video;
-	uint8 *usrc = (uint8 *)src;
+	int dy;
+	int dx;
+	int stepx;
+	int stepy;
+	int frac;
 
-	height = abs(height);
-	for (; height > 0; height--) {
-		memcpy(dst, usrc, width);
-		usrc += src_pitch * direction;
-		dst += _screen.pitch * direction;
+	dy = (y2 - y) * 2;
+	if (dy < 0) {
+		dy = -dy;
+		stepy = -1;
+	} else {
+		stepy = 1;
+	}
+
+	dx = (x2 - x) * 2;
+	if (dx < 0) {
+		dx = -dx;
+		stepx = -1;
+	} else {
+		stepx = 1;
+	}
+
+	this->SetPixel(video, x, y, color);
+	if (dx > dy) {
+		frac = dy - (dx / 2);
+		while (x != x2) {
+			if (frac >= 0) {
+				y += stepy;
+				frac -= dx;
+			}
+			x += stepx;
+			frac += dy;
+			if (x > 0 && y > 0 && x < screen_width && y < screen_height) this->SetPixel(video, x, y, color);
+		}
+	} else {
+		frac = dx - (dy / 2);
+		while (y != y2) {
+			if (frac >= 0) {
+				x += stepx;
+				frac -= dy;
+			}
+			y += stepy;
+			frac += dx;
+			if (x > 0 && y > 0 && x < screen_width && y < screen_height) this->SetPixel(video, x, y, color);
+		}
 	}
 }
 
-void Blitter_8bppBase::CopyToBuffer(const void *video, void *dst, int width, int height, int dst_pitch)
+void Blitter_8bppBase::CopyFromBuffer(void *video, const void *src, int width, int height)
 {
-	int direction = (height < 0) ? -1 : 1;
+	uint8 *dst = (uint8 *)video;
+	uint8 *usrc = (uint8 *)src;
+
+	for (; height > 0; height--) {
+		memcpy(dst, usrc, width * sizeof(uint8));
+		usrc += width;
+		dst += _screen.pitch;
+	}
+}
+
+void Blitter_8bppBase::CopyToBuffer(const void *video, void *dst, int width, int height)
+{
 	uint8 *udst = (uint8 *)dst;
 	uint8 *src = (uint8 *)video;
 
-	height = abs(height);
 	for (; height > 0; height--) {
-		memcpy(udst, src, width);
-		src += _screen.pitch * direction;
-		udst += dst_pitch * direction;
+		memcpy(udst, src, width * sizeof(uint8));
+		src += _screen.pitch;
+		udst += width;
 	}
 }
 
-void Blitter_8bppBase::MoveBuffer(void *video_dst, const void *video_src, int width, int height)
+void Blitter_8bppBase::CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch)
 {
-	uint8 *dst = (uint8 *)video_dst;
-	uint8 *src = (uint8 *)video_src;
+	uint8 *udst = (uint8 *)dst;
+	uint8 *src = (uint8 *)video;
 
 	for (; height > 0; height--) {
-		memmove(dst, src, width);
+		memcpy(udst, src, width * sizeof(uint8));
 		src += _screen.pitch;
-		dst += _screen.pitch;
+		udst += dst_pitch;
+	}
+}
+
+void Blitter_8bppBase::ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y)
+{
+	const uint8 *src;
+	uint8 *dst;
+
+	if (scroll_y > 0) {
+		/*Calculate pointers */
+		dst = (uint8 *)video + left + (top + height - 1) * _screen.pitch;
+		src = dst - scroll_y * _screen.pitch;
+
+		/* Decrease height and increase top */
+		top += scroll_y;
+		height -= scroll_y;
+		assert(height > 0);
+
+		/* Adjust left & width */
+		if (scroll_x >= 0) {
+			dst += scroll_x;
+			left += scroll_x;
+			width -= scroll_x;
+		} else {
+			src -= scroll_x;
+			width += scroll_x;
+		}
+
+		for (int h = height; h > 0; h--) {
+			memcpy(dst, src, width * sizeof(uint8));
+			src -= _screen.pitch;
+			dst -= _screen.pitch;
+		}
+	} else {
+		/* Calculate pointers */
+		dst = (uint8 *)video + left + top * _screen.pitch;
+		src = dst - scroll_y * _screen.pitch;
+
+		/* Decrese height. (scroll_y is <=0). */
+		height += scroll_y;
+		assert(height > 0);
+
+		/* Adjust left & width */
+		if (scroll_x >= 0) {
+			dst += scroll_x;
+			left += scroll_x;
+			width -= scroll_x;
+		} else {
+			src -= scroll_x;
+			width += scroll_x;
+		}
+
+		/* the y-displacement may be 0 therefore we have to use memmove,
+		 * because source and destination may overlap */
+		for (int h = height; h > 0; h--) {
+			memmove(dst, src, width * sizeof(uint8));
+			src += _screen.pitch;
+			dst += _screen.pitch;
+		}
 	}
 }
 
@@ -77,3 +185,13 @@
 {
 	return width * height;
 }
+
+void Blitter_8bppBase::PaletteAnimate(uint start, uint count)
+{
+	/* Video backend takes care of the palette animation */
+}
+
+Blitter::PaletteAnimation Blitter_8bppBase::UsePaletteAnimation()
+{
+	return Blitter::PALETTE_ANIMATION_VIDEO_BACKEND;
+}
--- a/src/blitter/8bpp_base.hpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/8bpp_base.hpp	Tue Jun 26 23:40:58 2007 +0000
@@ -16,11 +16,15 @@
 	/* virtual */ void *MoveTo(const void *video, int x, int y);
 	/* virtual */ void SetPixel(void *video, int x, int y, uint8 color);
 	/* virtual */ void SetPixelIfEmpty(void *video, int x, int y, uint8 color);
-	/* virtual */ void SetHorizontalLine(void *video, int width, uint8 color);
-	/* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height, int src_pitch);
-	/* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height, int dst_pitch);
-	/* virtual */ void MoveBuffer(void *video_dst, const void *video_src, int width, int height);
+	/* virtual */ void DrawRect(void *video, int width, int height, uint8 color);
+	/* virtual */ void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 color);
+	/* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height);
+	/* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height);
+	/* virtual */ void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch);
+	/* virtual */ void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y);
 	/* virtual */ int BufferSize(int width, int height);
+	/* virtual */ void PaletteAnimate(uint start, uint count);
+	/* virtual */ Blitter::PaletteAnimation UsePaletteAnimation();
 };
 
 #endif /* BLITTER_8BPP_BASE_HPP */
--- a/src/blitter/8bpp_debug.hpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/8bpp_debug.hpp	Tue Jun 26 23:40:58 2007 +0000
@@ -12,6 +12,8 @@
 public:
 	/* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
 	/* virtual */ Sprite *Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator);
+
+	/* virtual */ const char *GetName() { return "8bpp-debug"; }
 };
 
 class FBlitter_8bppDebug: public BlitterFactory<FBlitter_8bppDebug> {
--- a/src/blitter/8bpp_optimized.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/8bpp_optimized.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -151,7 +151,7 @@
 					if (rx == sprite->width) break;
 				}
 
-				if (last_color == 0 || color == 0) {
+				if (last_color == 0 || color == 0 || pixels == 255) {
 					if (count_index != 0) {
 						/* Write how many non-transparent bytes we get */
 						temp_dst[count_index] = pixels;
--- a/src/blitter/8bpp_optimized.hpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/8bpp_optimized.hpp	Tue Jun 26 23:40:58 2007 +0000
@@ -12,6 +12,8 @@
 public:
 	/* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
 	/* virtual */ Sprite *Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator);
+
+	/* virtual */ const char *GetName() { return "8bpp-optimized"; }
 };
 
 class FBlitter_8bppOptimized: public BlitterFactory<FBlitter_8bppOptimized> {
--- a/src/blitter/8bpp_simple.hpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/8bpp_simple.hpp	Tue Jun 26 23:40:58 2007 +0000
@@ -12,6 +12,8 @@
 public:
 	/* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
 	/* virtual */ Sprite *Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator);
+
+	/* virtual */ const char *GetName() { return "8bpp-simple"; }
 };
 
 class FBlitter_8bppSimple: public BlitterFactory<FBlitter_8bppSimple> {
--- a/src/blitter/base.hpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/base.hpp	Tue Jun 26 23:40:58 2007 +0000
@@ -31,6 +31,12 @@
 		int pitch;               ///< The pitch of the destination buffer
 	};
 
+	enum PaletteAnimation {
+		PALETTE_ANIMATION_NONE,           ///< No palette animation
+		PALETTE_ANIMATION_VIDEO_BACKEND,  ///< Palette animation should be done by video backend (8bpp only!)
+		PALETTE_ANIMATION_BLITTER,        ///< The blitter takes care of the palette animation
+	};
+
 	typedef void *AllocatorProc(size_t size);
 
 	/**
@@ -94,7 +100,20 @@
 	 * @param width The lenght of the line.
 	 * @param color A 8bpp mapping color.
 	 */
-	virtual void SetHorizontalLine(void *video, int width, uint8 color) = 0;
+	virtual void DrawRect(void *video, int width, int height, uint8 color) = 0;
+
+	/**
+	 * Draw a line with a given color.
+	 * @param video The destination pointer (video-buffer).
+	 * @param x The x coordinate from where the line starts.
+	 * @param y The y coordinate from where the line starts.
+	 * @param x2 The x coordinate to where the line goes.
+	 * @param y2 The y coordinate to where the lines goes.
+	 * @param screen_width The width of the screen you are drawing in (to avoid buffer-overflows).
+	 * @param screen_height The height of the screen you are drawing in (to avoid buffer-overflows).
+	 * @param color A 8bpp mapping color.
+	 */
+	virtual void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 color) = 0;
 
 	/**
 	 * Copy from a buffer to the screen.
@@ -102,9 +121,9 @@
 	 * @param src The buffer from which the data will be read.
 	 * @param width The width of the buffer.
 	 * @param height The height of the buffer.
-	 * @param src_pitch The pitch (byte per line) of the source buffer.
+	 * @note You can not do anything with the content of the buffer, as the blitter can store non-pixel data in it too!
 	 */
-	virtual void CopyFromBuffer(void *video, const void *src, int width, int height, int src_pitch) = 0;
+	virtual void CopyFromBuffer(void *video, const void *src, int width, int height) = 0;
 
 	/**
 	 * Copy from the screen to a buffer.
@@ -112,18 +131,31 @@
 	 * @param dst The buffer in which the data will be stored.
 	 * @param width The width of the buffer.
 	 * @param height The height of the buffer.
-	 * @param dst_pitch The pitch (byte per line) of the destination buffer.
+	 * @note You can not do anything with the content of the buffer, as the blitter can store non-pixel data in it too!
 	 */
-	virtual void CopyToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) = 0;
+	virtual void CopyToBuffer(const void *video, void *dst, int width, int height) = 0;
 
 	/**
-	 * Move the videobuffer some places (via memmove).
-	 * @param video_dst The destination pointer (video-buffer).
-	 * @param video_src The source pointer (video-buffer).
-	 * @param width The width of the buffer to move.
-	 * @param height The height of the buffer to move.
+	 * Copy from the screen to a buffer in a palette format for 8bpp and RGBA format for 32bpp.
+	 * @param video The destination pointer (video-buffer).
+	 * @param dst The buffer in which the data will be stored.
+	 * @param width The width of the buffer.
+	 * @param height The height of the buffer.
+	 * @param dst_pitch The pitch (byte per line) of the destination buffer.
 	 */
-	virtual void MoveBuffer(void *video_dst, const void *video_src, int width, int height) = 0;
+	virtual void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) = 0;
+
+	/**
+	 * Scroll the videobuffer some 'x' and 'y' value.
+	 * @param video The buffer to scroll into.
+	 * @param left The left value of the screen to scroll.
+	 * @param top The top value of the screen to scroll.
+	 * @param width The width of the screen to scroll.
+	 * @param height The height of the screen to scroll.
+	 * @param scroll_x How much to scroll in X.
+	 * @param scroll_y How much to scroll in Y.
+	 */
+	virtual void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y) = 0;
 
 	/**
 	 * Calculate how much memory there is needed for an image of this size in the video-buffer.
@@ -133,6 +165,25 @@
 	 */
 	virtual int BufferSize(int width, int height) = 0;
 
+	/**
+	 * Called when the 8bpp palette is changed; you should redraw all pixels on the screen that
+	 *  are equal to the 8bpp palette indexes 'start' to 'start + count'.
+	 * @param start The start index in the 8bpp palette.
+	 * @param count The amount of indexes that are (possible) changed.
+	 */
+	virtual void PaletteAnimate(uint start, uint count) = 0;
+
+	/**
+	 * Check if the blitter uses palette animation at all.
+	 * @return True if it uses palette animation.
+	 */
+	virtual Blitter::PaletteAnimation UsePaletteAnimation() = 0;
+
+	/**
+	 * Get the naem of the blitter, the same as the Factory-instance returns.
+	 */
+	virtual const char *GetName() = 0;
+
 	virtual ~Blitter() { }
 };
 
--- a/src/blitter/null.hpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/null.hpp	Tue Jun 26 23:40:58 2007 +0000
@@ -17,11 +17,17 @@
 	/* virtual */ void *MoveTo(const void *video, int x, int y) { return NULL; };
 	/* virtual */ void SetPixel(void *video, int x, int y, uint8 color) {};
 	/* virtual */ void SetPixelIfEmpty(void *video, int x, int y, uint8 color) {};
-	/* virtual */ void SetHorizontalLine(void *video, int width, uint8 color) {};
-	/* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height, int src_pitch) {};
-	/* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) {};
-	/* virtual */ void MoveBuffer(void *video_dst, const void *video_src, int width, int height) {};
+	/* virtual */ void DrawRect(void *video, int width, int height, uint8 color) {};
+	/* virtual */ void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 color) {};
+	/* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height) {};
+	/* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height) {};
+	/* virtual */ void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) {};
+	/* virtual */ void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y) {};
 	/* virtual */ int BufferSize(int width, int height) { return 0; };
+	/* virtual */ void PaletteAnimate(uint start, uint count) { };
+	/* virtual */ Blitter::PaletteAnimation UsePaletteAnimation() { return Blitter::PALETTE_ANIMATION_NONE; };
+
+	/* virtual */ const char *GetName() { return "null"; }
 };
 
 class FBlitter_Null: public BlitterFactory<FBlitter_Null> {
--- a/src/bridge_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/bridge_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -22,7 +22,7 @@
 	TileIndex end_tile;
 	byte type;
 	byte indexes[MAX_BRIDGES];
-	int32 costs[MAX_BRIDGES];
+	Money costs[MAX_BRIDGES];
 } _bridgedata;
 
 void CcBuildBridge(bool success, TileIndex tile, uint32 p1, uint32 p2)
@@ -113,7 +113,7 @@
 void ShowBuildBridgeWindow(TileIndex start, TileIndex end, byte bridge_type)
 {
 	uint j = 0;
-	int32 ret;
+	CommandCost ret;
 	StringID errmsg;
 
 	DeleteWindowById(WC_BUILD_BRIDGE, 0);
@@ -145,7 +145,7 @@
 				const Bridge *b = &_bridge[bridge_type];
 				// bridge is accepted, add to list
 				// add to terraforming & bulldozing costs the cost of the bridge itself (not computed with DC_QUERY_COST)
-				_bridgedata.costs[j] = ret + (((int64)tot_bridgedata_len * _price.build_bridge * b->price) >> 8);
+				_bridgedata.costs[j] = ret.GetCost() + (((int64)tot_bridgedata_len * _price.build_bridge * b->price) >> 8);
 				_bridgedata.indexes[j] = bridge_type;
 				j++;
 			}
--- a/src/build_vehicle_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/build_vehicle_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -140,12 +140,14 @@
 
 	if (va != last_engine[0]) {
 		last_engine[0] = va;
-		GetString(last_name[0], GetCustomEngineName(va), lastof(last_name[0]));
+		SetDParam(0, va);
+		GetString(last_name[0], STR_ENGINE_NAME, lastof(last_name[0]));
 	}
 
 	if (vb != last_engine[1]) {
 		last_engine[1] = vb;
-		GetString(last_name[1], GetCustomEngineName(vb), lastof(last_name[1]));
+		SetDParam(0, vb);
+		GetString(last_name[1], STR_ENGINE_NAME, lastof(last_name[1]));
 	}
 
 	r = strcmp(last_name[0], last_name[1]); // sort by name
@@ -206,9 +208,9 @@
 	const RailVehicleInfo *rvi_a = RailVehInfo(*(const EngineID*)a);
 	const RailVehicleInfo *rvi_b = RailVehInfo(*(const EngineID*)b);
 
-	int va = rvi_a->running_cost_base * _price.running_rail[rvi_a->running_cost_class] * (rvi_a->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
-	int vb = rvi_b->running_cost_base * _price.running_rail[rvi_b->running_cost_class] * (rvi_b->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
-	int r = va - vb;
+	Money va = rvi_a->running_cost_base * _price.running_rail[rvi_a->running_cost_class] * (rvi_a->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
+	Money vb = rvi_b->running_cost_base * _price.running_rail[rvi_b->running_cost_class] * (rvi_b->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
+	int r = ClampToI32(va - vb);
 
 	return _internal_sort_order ? -r : r;
 }
@@ -224,9 +226,9 @@
 		* Because of this, the return value have to be reversed as well and we return b - a instead of a - b.
 		* Another thing is that both power and running costs should be doubled for multiheaded engines.
 		* Since it would be multipling with 2 in both numerator and denumerator, it will even themselves out and we skip checking for multiheaded. */
-	int va = (rvi_a->running_cost_base * _price.running_rail[rvi_a->running_cost_class]) / max((uint16)1, rvi_a->power);
-	int vb = (rvi_b->running_cost_base * _price.running_rail[rvi_b->running_cost_class]) / max((uint16)1, rvi_b->power);
-	int r = vb - va;
+	Money va = (rvi_a->running_cost_base * _price.running_rail[rvi_a->running_cost_class]) / max((uint16)1, rvi_a->power);
+	Money vb = (rvi_b->running_cost_base * _price.running_rail[rvi_b->running_cost_class]) / max((uint16)1, rvi_b->power);
+	int r = ClampToI32(vb - va);
 
 	return _internal_sort_order ? -r : r;
 }
@@ -853,7 +855,8 @@
 		const EngineID engine = eng_list[min];
 		const uint num_engines = IsDefaultGroupID(selected_group) ? p->num_engines[engine] : GetGroup(selected_group)->num_engines[engine];
 
-		DrawString(x + x_offset, y, GetCustomEngineName(engine), engine == selected_id ? 0xC : 0x10);
+		SetDParam(0, engine);
+		DrawString(x + x_offset, y, STR_ENGINE_NAME, engine == selected_id ? 0xC : 0x10);
 		DrawVehicleEngine(type, x, y + y_offset, engine, (show_count && num_engines == 0) ? PALETTE_CRASH : GetEnginePalette(engine, _local_player));
 		if (show_count) {
 			SetDParam(0, num_engines);
@@ -963,7 +966,8 @@
 					case VEH_SHIP:     str = STR_9838_RENAME_SHIP_TYPE;          break;
 					case VEH_AIRCRAFT: str = STR_A039_RENAME_AIRCRAFT_TYPE;      break;
 				}
-				ShowQueryString(GetCustomEngineName(sel_eng), str, 31, 160, w, CS_ALPHANUMERAL);
+				SetDParam(0, sel_eng);
+				ShowQueryString(STR_ENGINE_NAME, str, 31, 160, w, CS_ALPHANUMERAL);
 			}
 			break;
 		}
@@ -996,6 +1000,14 @@
 			BuildVehicleClickEvent(w, e);
 			break;
 
+		case WE_DOUBLE_CLICK:
+			if (e->we.click.widget == BUILD_VEHICLE_WIDGET_LIST) {
+				/* When double clicking, we want to buy a vehicle */
+				e->we.click.widget = BUILD_VEHICLE_WIDGET_BUILD;
+				BuildVehicleClickEvent(w, e);
+			}
+			break;
+
 		case WE_ON_EDIT_TEXT: {
 			if (e->we.edittext.str[0] != '\0') {
 				StringID str = STR_NULL;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cargopacket.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -0,0 +1,357 @@
+/* $Id$ */
+
+/** @file cargopacket.cpp Implementation of the cargo packets */
+
+#include "stdafx.h"
+#include "openttd.h"
+#include "station.h"
+#include "cargopacket.h"
+#include "saveload.h"
+
+/** Cache for speeding up lookups in AllocateRaw */
+static uint _first_free_cargo_packet_index;
+
+/**
+ * Called if a new block is added to the station-pool
+ */
+static void CargoPacketPoolNewBlock(uint cpart_item)
+{
+	/* We don't use FOR_ALL here, because FOR_ALL skips invalid items.
+	 *  TODO - This is just a temporary stage, this will be removed. */
+	for (CargoPacket *cp = GetCargoPacket(cpart_item); cp != NULL; cp = (cp->index + 1U < GetCargoPacketPoolSize()) ? GetCargoPacket(cp->index + 1U) : NULL) cp->index = cpart_item++;
+}
+
+static void CargoPacketPoolCleanBlock(uint cpart_item, uint end_item)
+{
+	for (uint i = cpart_item; i <= end_item; i++) {
+		CargoPacket *cp = GetCargoPacket(i);
+		if (cp->IsValid()) cp->~CargoPacket();
+	}
+}
+
+/* Initialize the cargopacket-pool */
+DEFINE_OLD_POOL(CargoPacket, CargoPacket, CargoPacketPoolNewBlock, CargoPacketPoolCleanBlock)
+
+void InitializeCargoPackets()
+{
+	_first_free_cargo_packet_index = 0;
+	/* Clean the cargo packet pool and create 1 block in it */
+	CleanPool(&_CargoPacket_pool);
+	AddBlockToPool(&_CargoPacket_pool);
+
+	/* Check whether our &cargolist == &cargolist.packets "hack" works */
+	CargoList::AssertOnWrongPacketOffset();
+}
+
+CargoPacket::CargoPacket(StationID source, uint16 count)
+{
+	if (source != INVALID_STATION) assert(count != 0);
+
+	this->source          = source;
+	this->source_xy       = (source != INVALID_STATION) ? GetStation(source)->xy : 0;
+	this->loaded_at_xy    = this->source_xy;
+
+	this->count           = count;
+	this->days_in_transit = 0;
+	this->feeder_share    = 0;
+	this->paid_for        = false;
+}
+
+CargoPacket::~CargoPacket()
+{
+	if (this->index < _first_free_cargo_packet_index) _first_free_cargo_packet_index = this->index;
+	this->count = 0;
+}
+
+bool CargoPacket::SameSource(CargoPacket *cp)
+{
+	return this->source_xy == cp->source_xy && this->days_in_transit == cp->days_in_transit && this->paid_for == cp->paid_for;
+}
+
+void *CargoPacket::operator new(size_t size)
+{
+	CargoPacket *cp = AllocateRaw();
+	return cp;
+}
+
+void *CargoPacket::operator new(size_t size, CargoPacket::ID cp_idx)
+{
+	if (!AddBlockIfNeeded(&_CargoPacket_pool, cp_idx))
+		error("CargoPackets: failed loading savegame: too many cargo packets");
+
+	CargoPacket *cp = GetCargoPacket(cp_idx);
+	return cp;
+}
+
+void CargoPacket::operator delete(void *p)
+{
+}
+
+void CargoPacket::operator delete(void *p, CargoPacket::ID cp_idx)
+{
+}
+
+/*static*/ CargoPacket *CargoPacket::AllocateRaw()
+{
+	CargoPacket *cp = NULL;
+
+	/* We don't use FOR_ALL here, because FOR_ALL skips invalid items.
+	 * TODO - This is just a temporary stage, this will be removed. */
+	for (cp = GetCargoPacket(_first_free_cargo_packet_index); cp != NULL; cp = (cp->index + 1U < GetCargoPacketPoolSize()) ? GetCargoPacket(cp->index + 1U) : NULL) {
+		if (!cp->IsValid()) {
+			CargoPacket::ID index = cp->index;
+
+			memset(cp, 0, sizeof(CargoPacket));
+			cp->index = index;
+			_first_free_cargo_packet_index = cp->index;
+			return cp;
+		}
+	}
+
+	/* Check if we can add a block to the pool */
+	if (AddBlockToPool(&_CargoPacket_pool)) return AllocateRaw();
+
+	error("CargoPackets: too many cargo packets");
+}
+
+static const SaveLoad _cargopacket_desc[] = {
+	SLE_VAR(CargoPacket, source,          SLE_UINT16),
+	SLE_VAR(CargoPacket, source_xy,       SLE_UINT32),
+	SLE_VAR(CargoPacket, loaded_at_xy,    SLE_UINT32),
+	SLE_VAR(CargoPacket, count,           SLE_UINT16),
+	SLE_VAR(CargoPacket, days_in_transit, SLE_UINT8),
+	SLE_VAR(CargoPacket, feeder_share,    SLE_INT64),
+	SLE_VAR(CargoPacket, paid_for,        SLE_BOOL),
+
+	SLE_END()
+};
+
+static void Save_CAPA()
+{
+	CargoPacket *cp;
+
+	FOR_ALL_CARGOPACKETS(cp) {
+		SlSetArrayIndex(cp->index);
+		SlObject(cp, _cargopacket_desc);
+	}
+}
+
+static void Load_CAPA()
+{
+	int index;
+
+	while ((index = SlIterateArray()) != -1) {
+		if (!AddBlockIfNeeded(&_CargoPacket_pool, index)) {
+			error("CargoPackets: failed loading savegame: too many cargo packets");
+		}
+
+		CargoPacket *cp = GetCargoPacket(index);
+		SlObject(cp, _cargopacket_desc);
+	}
+}
+
+extern const ChunkHandler _cargopacket_chunk_handlers[] = {
+	{ 'CAPA', Save_CAPA, Load_CAPA, CH_ARRAY | CH_LAST},
+};
+
+/*
+ *
+ * Cargo list implementation
+ *
+ */
+
+/* static */ void CargoList::AssertOnWrongPacketOffset()
+{
+	CargoList cl;
+	if ((void*)&cl != (void*)cl.Packets()) NOT_REACHED();
+}
+
+
+CargoList::~CargoList()
+{
+	while (!packets.empty()) {
+		delete packets.front();
+		packets.pop_front();
+	}
+}
+
+const CargoList::List *CargoList::Packets() const
+{
+	return &packets;
+}
+
+void CargoList::AgeCargo()
+{
+	if (empty) return;
+
+	uint dit = 0;
+	for (List::const_iterator it = packets.begin(); it != packets.end(); it++) {
+		if ((*it)->days_in_transit != 0xFF) (*it)->days_in_transit++;
+		dit += (*it)->days_in_transit * (*it)->count;
+	}
+	days_in_transit = dit / count;
+}
+
+bool CargoList::Empty() const
+{
+	return empty;
+}
+
+uint CargoList::Count() const
+{
+	return count;
+}
+
+bool CargoList::UnpaidCargo() const
+{
+	return unpaid_cargo;
+}
+
+Money CargoList::FeederShare() const
+{
+	return feeder_share;
+}
+
+StationID CargoList::Source() const
+{
+	return source;
+}
+
+uint CargoList::DaysInTransit() const
+{
+	return days_in_transit;
+}
+
+void CargoList::Append(CargoPacket *cp)
+{
+	assert(cp != NULL);
+	assert(cp->IsValid());
+
+	for (List::iterator it = packets.begin(); it != packets.end(); it++) {
+		if ((*it)->SameSource(cp)) {
+			(*it)->count        += cp->count;
+			(*it)->feeder_share += cp->feeder_share;
+			delete cp;
+
+			InvalidateCache();
+			return;
+		}
+	}
+
+	/* The packet could not be merged with another one */
+	packets.push_back(cp);
+	InvalidateCache();
+}
+
+
+void CargoList::Truncate(uint count)
+{
+	for (List::iterator it = packets.begin(); it != packets.end(); it++) {
+		uint local_count = (*it)->count;
+		if (local_count <= count) {
+			count -= local_count;
+			continue;
+		}
+
+		(*it)->count = count;
+		count = 0;
+	}
+
+	while (!packets.empty()) {
+		CargoPacket *cp = packets.back();
+		if (cp->count != 0) break;
+		delete cp;
+		packets.pop_back();
+	}
+
+	InvalidateCache();
+}
+
+bool CargoList::MoveTo(CargoList *dest, uint count, CargoList::MoveToAction mta, uint data)
+{
+	assert(mta == MTA_FINAL_DELIVERY || dest != NULL);
+	CargoList tmp;
+
+	while (!packets.empty() && count > 0) {
+		CargoPacket *cp = *packets.begin();
+		if (cp->count <= count) {
+			/* Can move the complete packet */
+			packets.remove(cp);
+			switch (mta) {
+				case MTA_FINAL_DELIVERY:
+					if (cp->source == data) {
+						tmp.Append(cp);
+					} else {
+						count -= cp->count;
+						delete cp;
+					}
+					break;
+				case MTA_CARGO_LOAD:
+					cp->loaded_at_xy = data;
+					/* When cargo is moved into another vehicle you have *always* paid for it */
+					cp->paid_for     = false;
+					/* FALL THROUGH */
+				case MTA_OTHER:
+					count -= cp->count;
+					dest->packets.push_back(cp);
+					break;
+			}
+		} else {
+			/* Can move only part of the packet, so split it into two pieces */
+			if (mta != MTA_FINAL_DELIVERY) {
+				CargoPacket *cp_new = new CargoPacket();
+				cp_new->source          = cp->source;
+				cp_new->source_xy       = cp->source_xy;
+				cp_new->loaded_at_xy    = (mta == MTA_CARGO_LOAD) ? data : cp->loaded_at_xy;
+
+				cp_new->days_in_transit = cp->days_in_transit;
+				cp_new->feeder_share    = cp->feeder_share / count;
+				/* When cargo is moved into another vehicle you have *always* paid for it */
+				cp_new->paid_for        = (mta == MTA_CARGO_LOAD) ? false : cp->paid_for;
+
+				cp_new->count = count;
+				dest->packets.push_back(cp_new);
+
+				cp->feeder_share /= cp->count - count;
+			}
+			cp->count -= count;
+
+			count = 0;
+		}
+	}
+
+	bool remaining = !packets.empty();
+
+	if (mta == MTA_FINAL_DELIVERY && !tmp.Empty()) {
+		/* There are some packets that could not be delivered at the station, put them back */
+		tmp.MoveTo(this, MAX_UVALUE(uint));
+		tmp.packets.clear();
+	}
+
+	if (dest != NULL) dest->InvalidateCache();
+	InvalidateCache();
+
+	return remaining;
+}
+
+void CargoList::InvalidateCache()
+{
+	empty = packets.empty();
+	count = 0;
+	unpaid_cargo = false;
+	feeder_share = 0;
+	source = INVALID_STATION;
+	days_in_transit = 0;
+
+	if (empty) return;
+
+	uint dit = 0;
+	for (List::const_iterator it = packets.begin(); it != packets.end(); it++) {
+		count        += (*it)->count;
+		unpaid_cargo |= !(*it)->paid_for;
+		dit          += (*it)->days_in_transit * (*it)->count;
+		feeder_share += (*it)->feeder_share;
+	}
+	days_in_transit = dit / count;
+	source = (*packets.begin())->source;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cargopacket.h	Tue Jun 26 23:40:58 2007 +0000
@@ -0,0 +1,221 @@
+/* $Id$ */
+
+/** @file cargotype.h */
+
+#ifndef CARGOPACKET_H
+#define CARGOPACKET_H
+
+#include <list>
+
+/**
+ * Container for cargo from the same location and time
+ */
+struct CargoPacket {
+	bool touched;
+
+	typedef uint32 ID;      ///< Type for cargopacket identifiers
+
+	ID index;               ///< The unique index of this packet
+
+	StationID source;       ///< The station where the cargo came from first
+	TileIndex source_xy;    ///< The origin of the cargo (first station in feeder chain)
+	TileIndex loaded_at_xy; ///< Location where this cargo has been loaded into the vehicle
+
+	uint16 count;           ///< The amount of cargo in this packet
+	byte days_in_transit;   ///< Amount of days this packet has been in transit
+	Money feeder_share;     ///< Value of feeder pickup to be paid for on delivery of cargo
+	bool paid_for;          ///< Have we been paid for this cargo packet?
+
+	/**
+	 * Creates a new cargo packet
+	 * @param source the source of the packet
+	 * @param count  the number of cargo entities to put in this packet
+	 * @pre count != 0 || source == INVALID_STATION
+	 */
+	CargoPacket(StationID source = INVALID_STATION, uint16 count = 0);
+
+	/** Destroy the packet */
+	~CargoPacket();
+
+
+	/**
+	 * Is this a valid cargo packet ?
+	 * @return true if and only it is valid
+	 */
+	bool IsValid() const { return this->count != 0; }
+
+	/**
+	 * Checks whether the cargo packet is from (exactly) the same source
+	 * in time and location.
+	 * @param cp the cargo packet to compare to
+	 * @return true if and only if days_in_transit and source_xy are equal
+	 */
+	bool SameSource(CargoPacket *cp);
+
+
+	/* normal new/delete operators. Used when building/removing station */
+	void* operator new (size_t size);
+	void operator delete(void *p);
+
+	/* new/delete operators accepting station index. Used when loading station from savegame. */
+	void* operator new (size_t size, CargoPacket::ID cp_idx);
+	void operator delete(void *p, CargoPacket::ID cp_idx);
+
+private:
+	/**
+	 * Allocate the raw memory for this cargo packet
+	 * @return the allocated memory
+	 */
+	static CargoPacket *AllocateRaw();
+};
+
+/** We want to use a pool */
+DECLARE_OLD_POOL(CargoPacket, CargoPacket, 10, 1000)
+
+/**
+ * Iterate over all _valid_ cargo packets from the given start
+ * @param cp    the variable used as "iterator"
+ * @param start the cargo packet ID of the first packet to iterate over
+ */
+#define FOR_ALL_CARGOPACKETS_FROM(cp, start) for (cp = GetCargoPacket(start); cp != NULL; cp = (cp->index + 1U < GetCargoPacketPoolSize()) ? GetCargoPacket(cp->index + 1U) : NULL) if (cp->IsValid())
+
+/**
+ * Iterate over all _valid_ cargo packets from the begin of the pool
+ * @param cp    the variable used as "iterator"
+ */
+#define FOR_ALL_CARGOPACKETS(cp) FOR_ALL_CARGOPACKETS_FROM(cp, 0)
+
+/**
+ * Simple collection class for a list of cargo packets
+ */
+class CargoList {
+public:
+	/** List of cargo packets */
+	typedef std::list<CargoPacket *> List;
+
+	/** Kind of actions that could be done with packets on move */
+	enum MoveToAction {
+		MTA_FINAL_DELIVERY, ///< "Deliver" the packet to the final destination, i.e. destroy the packet
+		MTA_CARGO_LOAD,     ///< Load the packet onto a vehicle, i.e. set the last loaded station ID
+		MTA_OTHER           ///< "Just" move the packet to another cargo list
+	};
+
+private:
+	List packets;         ///< The cargo packets in this list
+
+	bool empty;           ///< Cache for whether this list is empty or not
+	uint count;           ///< Cache for the number of cargo entities
+	bool unpaid_cargo;    ///< Cache for the unpaid cargo
+	Money feeder_share;   ///< Cache for the feeder share
+	StationID source;     ///< Cache for the source of the packet
+	uint days_in_transit; ///< Cache for the number of days in transit
+
+public:
+	/**
+	 * Needed for an ugly hack:
+	 *  - vehicles and stations need to store cargo lists, so they use CargoList as container
+	 *  - this internals of the container should be protected, e.g. private (or protected) by C++
+	 *  - for saving/loading we need to pass pointer to objects
+	 *  -> so *if* the pointer to the cargo list is the same as the pointer to the packet list
+	 *     encapsulated in the CargoList, we can just pass the CargoList as "offset".
+	 *     Normally we would then just add the offset of the packets variable within the cargo list
+	 *     but that is not possible because the variable is private. Furthermore we are not sure
+	 *     that this works on all platforms, we need to check whether the offset is actually 0.
+	 *     This cannot be done compile time, because the variable is private. So we need to write
+	 *     a function that does actually check the offset runtime and call it somewhere where it
+	 *     is always called but it should not be called often.
+	 */
+	static void AssertOnWrongPacketOffset();
+
+	/** Create the cargo list */
+	CargoList() { this->InvalidateCache(); }
+	/** And destroy it ("frees" all cargo packets) */
+	~CargoList();
+
+	/**
+	 * Returns a pointer to the cargo packet list (so you can iterate over it etc).
+	 * @return pointer to the packet list
+	 */
+	const CargoList::List *Packets() const;
+
+	/**
+	 * Ages the all cargo in this list
+	 */
+	void AgeCargo();
+
+	/**
+	 * Checks whether this list is empty
+	 * @return true if and only if the list is empty
+	 */
+	bool Empty() const;
+
+	/**
+	 * Returns the number of cargo entities in this list
+	 * @return the before mentioned number
+	 */
+	uint Count() const;
+
+	/**
+	 * Is there some cargo that has not been paid for?
+	 * @return true if and only if there is such a cargo
+	 */
+	bool UnpaidCargo() const;
+
+	/**
+	 * Returns total sum of the feeder share for all packets
+	 * @return the before mentioned number
+	 */
+	Money FeederShare() const;
+
+	/**
+	 * Returns source of the first cargo packet in this list
+	 * @return the before mentioned source
+	 */
+	StationID Source() const;
+
+	/**
+	 * Returns average number of days in transit for a cargo entity
+	 * @return the before mentioned number
+	 */
+	uint DaysInTransit() const;
+
+
+	/**
+	 * Appends the given cargo packet
+	 * @warning After appending this packet may not exist anymore!
+	 * @note Do not use the cargo packet anymore after it has been appended to this CargoList!
+	 * @param cp the cargo packet to add
+	 * @pre cp != NULL
+	 */
+	void Append(CargoPacket *cp);
+
+	/**
+	 * Truncates the cargo in this list to the given amount. It leaves the
+	 * first count cargo entities and removes the rest.
+	 * @param count the maximum amount of entities to be in the list after the command
+	 */
+	void Truncate(uint count);
+
+	/**
+	 * Moves the given amount of cargo to another list.
+	 * Depending on the value of mta the side effects of this function differ:
+	 *  - MTA_FINAL_DELIVERY: destroys the packets that do not originate from a specific station
+	 *  - MTA_CARGO_LOAD:     sets the loaded_at_xy value of the moved packets
+	 *  - MTA_OTHER:          just move without side effects
+	 * @param dest  the destination to move the cargo to
+	 * @param count the amount of cargo entities to move
+	 * @param mta   how to handle the moving (side effects)
+	 * @param data  Depending on mta the data of this variable differs:
+	 *              - MTA_FINAL_DELIVERY - station ID of packet's origin not to remove
+	 *              - MTA_CARGO_LOAD     - station's tile index of load
+	 *              - MTA_OTHER          - unused
+	 * @param mta == MTA_FINAL_DELIVERY || dest != NULL
+	 * @return true if there are still packets that might be moved from this cargo list
+	 */
+	bool MoveTo(CargoList *dest, uint count, CargoList::MoveToAction mta = MTA_OTHER, uint data = 0);
+
+	/** Invalidates the cached data and rebuild it */
+	void InvalidateCache();
+};
+
+#endif /* CARGOPACKET_H */
--- a/src/clear_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/clear_cmd.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -22,6 +22,7 @@
 #include "unmovable_map.h"
 #include "genworld.h"
 #include "industry.h"
+#include "water_map.h"
 
 struct TerraformerHeightMod {
 	TileIndex tile;
@@ -36,7 +37,7 @@
 	int modheight_count;
 	int tile_table_count;
 
-	int32 cost;
+	CommandCost cost;
 
 	TileIndex *tile_table;
 	TerraformerHeightMod *modheight;
@@ -97,7 +98,7 @@
 static int TerraformProc(TerraformerState *ts, TileIndex tile, int mode)
 {
 	int r;
-	int32 ret;
+	CommandCost ret;
 
 	assert(tile < MapSize());
 
@@ -116,7 +117,7 @@
 		 * basement and then you raise/lower the other corner. */
 		tileh = GetTileSlope(tile, &z);
 		if (tileh == unsafe_slope[mode] ||
-				tileh == ComplementSlope(unsafe_slope[mode])) {
+				tileh == (SLOPE_STEEP | ComplementSlope(unsafe_slope[mode]))) {
 			_terraform_err_tile = tile;
 			_error_message = STR_1008_MUST_REMOVE_RAILROAD_TRACK;
 			return -1;
@@ -141,6 +142,13 @@
 		}
 	}
 
+	/* Canals can't be terraformed */
+	if (IsClearWaterTile(tile) && IsCanal(tile)) {
+		_terraform_err_tile = tile;
+		_error_message = STR_MUST_DEMOLISH_CANAL_FIRST;
+		return -1;
+	}
+
 	ret = DoCommand(tile, 0, 0, ts->flags & ~DC_EXEC, CMD_LANDSCAPE_CLEAR);
 
 	if (CmdFailed(ret)) {
@@ -148,7 +156,7 @@
 		return -1;
 	}
 
-	ts->cost += ret;
+	ts->cost.AddCost(ret.GetCost());
 
 	if (ts->tile_table_count >= 625) return -1;
 	ts->tile_table[ts->tile_table_count++] = tile;
@@ -198,7 +206,7 @@
 	mod->tile = tile;
 	mod->height = (byte)height;
 
-	ts->cost += _price.terraform;
+	ts->cost.AddCost(_price.terraform);
 
 	{
 		int direction = ts->direction, r;
@@ -232,7 +240,7 @@
  * @param p2 direction; eg up or down
  * @return error or cost of terraforming
  */
-int32 CmdTerraformLand(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdTerraformLand(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	TerraformerState ts;
 	TileIndex t;
@@ -248,7 +256,7 @@
 	ts.direction = direction = p2 ? 1 : -1;
 	ts.flags = flags;
 	ts.modheight_count = ts.tile_table_count = 0;
-	ts.cost = 0;
+	ts.cost = CommandCost();
 	ts.modheight = modheight_data;
 	ts.tile_table = tile_table_data;
 
@@ -357,14 +365,16 @@
  * @param p2 unused
  * @return  error or cost of terraforming
  */
-int32 CmdLevelLand(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdLevelLand(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	int size_x, size_y;
 	int ex;
 	int ey;
 	int sx, sy;
 	uint h, curh;
-	int32 ret, cost, money;
+	CommandCost money;
+	CommandCost ret;
+	CommandCost cost;
 
 	if (p1 >= MapSize()) return CMD_ERROR;
 
@@ -385,29 +395,29 @@
 	size_x = ex - sx + 1;
 	size_y = ey - sy + 1;
 
-	money = GetAvailableMoneyForCommand();
-	cost = 0;
+	money.AddCost(GetAvailableMoneyForCommand());
 
 	BEGIN_TILE_LOOP(tile2, size_x, size_y, tile) {
 		curh = TileHeight(tile2);
 		while (curh != h) {
 			ret = DoCommand(tile2, 8, (curh > h) ? 0 : 1, flags & ~DC_EXEC, CMD_TERRAFORM_LAND);
 			if (CmdFailed(ret)) break;
-			cost += ret;
 
 			if (flags & DC_EXEC) {
-				if ((money -= ret) < 0) {
-					_additional_cash_required = ret;
-					return cost - ret;
+				money.AddCost(-ret.GetCost());
+				if (money.GetCost() < 0) {
+					_additional_cash_required = ret.GetCost();
+					return cost;
 				}
 				DoCommand(tile2, 8, (curh > h) ? 0 : 1, flags, CMD_TERRAFORM_LAND);
 			}
 
+			cost.AddCost(ret);
 			curh += (curh > h) ? -1 : 1;
 		}
 	} END_TILE_LOOP(tile2, size_x, size_y, tile)
 
-	return (cost == 0) ? CMD_ERROR : cost;
+	return (cost.GetCost() == 0) ? CMD_ERROR : cost;
 }
 
 /** Purchase a land area. Actually you only purchase one tile, so
@@ -418,9 +428,9 @@
  * @param p2 unused
  * @return error of cost of operation
  */
-int32 CmdPurchaseLandArea(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdPurchaseLandArea(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 cost;
+	CommandCost cost;
 
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 
@@ -438,13 +448,13 @@
 		MarkTileDirtyByTile(tile);
 	}
 
-	return cost + _price.purchase_land * 10;
+	return cost.AddCost(_price.purchase_land * 10);
 }
 
 
-static int32 ClearTile_Clear(TileIndex tile, byte flags)
+static CommandCost ClearTile_Clear(TileIndex tile, byte flags)
 {
-	static const int32* clear_price_table[] = {
+	static const Money* clear_price_table[] = {
 		&_price.clear_1,
 		&_price.purchase_land,
 		&_price.clear_2,
@@ -453,12 +463,10 @@
 		&_price.purchase_land,
 		&_price.clear_2, // XXX unused?
 	};
-	int32 price;
+	CommandCost price;
 
-	if (IsClearGround(tile, CLEAR_GRASS) && GetClearDensity(tile) == 0) {
-		price = 0;
-	} else {
-		price = *clear_price_table[GetClearGround(tile)];
+	if (!IsClearGround(tile, CLEAR_GRASS) || GetClearDensity(tile) != 0) {
+		price.AddCost(*clear_price_table[GetClearGround(tile)]);
 	}
 
 	if (flags & DC_EXEC) DoClearSquare(tile);
@@ -474,7 +482,7 @@
  * @param p2 unused
  * @return error or cost of operation
  */
-int32 CmdSellLandArea(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSellLandArea(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 
@@ -486,7 +494,7 @@
 
 	if (flags & DC_EXEC) DoClearSquare(tile);
 
-	return - _price.purchase_land * 2;
+	return CommandCost(- _price.purchase_land * 2);
 }
 
 
--- a/src/command.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/command.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -17,7 +17,7 @@
 
 const char* _cmd_text = NULL;
 
-#define DEF_COMMAND(yyyy) int32 yyyy(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+#define DEF_COMMAND(yyyy) CommandCost yyyy(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 
 DEF_COMMAND(CmdBuildRailroadTrack);
 DEF_COMMAND(CmdRemoveRailroadTrack);
@@ -177,6 +177,9 @@
 DEF_COMMAND(CmdSetGroupReplaceProtection);
 
 DEF_COMMAND(CmdMoveOrder);
+DEF_COMMAND(CmdChangeTimetable);
+DEF_COMMAND(CmdSetVehicleOnTime);
+DEF_COMMAND(CmdAutofillTimetable);
 
 /* The master command table */
 static const Command _command_proc_table[] = {
@@ -331,6 +334,9 @@
 	{CmdRemoveAllVehiclesGroup,              0}, /* 125 */
 	{CmdSetGroupReplaceProtection,           0}, /* 126 */
 	{CmdMoveOrder,                           0}, /* 127 */
+	{CmdChangeTimetable,                     0}, /* 128 */
+	{CmdSetVehicleOnTime,                    0}, /* 129 */
+	{CmdAutofillTimetable,                   0}, /* 130 */
 };
 
 /* This function range-checks a cmd, and checks if the cmd is not NULL */
@@ -351,9 +357,9 @@
 
 static int _docommand_recursive;
 
-int32 DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc)
+CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc)
 {
-	int32 res;
+	CommandCost res;
 	CommandProc *proc;
 
 	/* Do not even think about executing out-of-bounds tile-commands */
@@ -372,13 +378,13 @@
 	if (_docommand_recursive == 1 || !(flags & DC_EXEC) || (flags & DC_FORCETEST) ) {
 		res = proc(tile, flags & ~DC_EXEC, p1, p2);
 		if (CmdFailed(res)) {
-			if (res & 0xFFFF) _error_message = res & 0xFFFF;
+			res.SetGlobalErrorMessage();
 			goto error;
 		}
 
 		if (_docommand_recursive == 1 &&
 				!(flags & DC_QUERY_COST) &&
-				res != 0 &&
+				res.GetCost() != 0 &&
 				!CheckPlayerHasMoney(res)) {
 			goto error;
 		}
@@ -394,7 +400,7 @@
 	 * themselves with "SET_EXPENSES_TYPE(...);" at the beginning of the function */
 	res = proc(tile, flags, p1, p2);
 	if (CmdFailed(res)) {
-		if (res & 0xFFFF) _error_message = res & 0xFFFF;
+		res.SetGlobalErrorMessage();
 error:
 		_docommand_recursive--;
 		_cmd_text = NULL;
@@ -414,10 +420,10 @@
 	return res;
 }
 
-int32 GetAvailableMoneyForCommand()
+Money GetAvailableMoneyForCommand()
 {
 	PlayerID pid = _current_player;
-	if (!IsValidPlayer(pid)) return 0x7FFFFFFF; // max int
+	if (!IsValidPlayer(pid)) return INT64_MAX;
 	return GetPlayer(pid)->player_money;
 }
 
@@ -425,7 +431,7 @@
  * the callback is called when the command succeeded or failed. */
 bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback, uint32 cmd)
 {
-	int32 res = 0, res2;
+	CommandCost res, res2;
 	CommandProc *proc;
 	uint32 flags;
 	bool notest;
@@ -497,10 +503,10 @@
 		/* estimate the cost. */
 		res = proc(tile, flags, p1, p2);
 		if (CmdFailed(res)) {
-			if (res & 0xFFFF) _error_message = res & 0xFFFF;
+			res.SetGlobalErrorMessage();
 			ShowErrorMessage(_error_message, error_part1, x, y);
 		} else {
-			ShowEstimatedCostOrIncome(res, x, y);
+			ShowEstimatedCostOrIncome(res.GetCost(), x, y);
 		}
 
 		_docommand_recursive = 0;
@@ -513,11 +519,11 @@
 		/* first test if the command can be executed. */
 		res = proc(tile, flags, p1, p2);
 		if (CmdFailed(res)) {
-			if (res & 0xFFFF) _error_message = res & 0xFFFF;
+			res.SetGlobalErrorMessage();
 			goto show_error;
 		}
 		/* no money? Only check if notest is off */
-		if (!notest && res != 0 && !CheckPlayerHasMoney(res)) goto show_error;
+		if (!notest && res.GetCost() != 0 && !CheckPlayerHasMoney(res)) goto show_error;
 	}
 
 #ifdef ENABLE_NETWORK
@@ -552,10 +558,10 @@
 	/* If notest is on, it means the result of the test can be different than
 	 *  the real command.. so ignore the test */
 	if (!notest && !((cmd & CMD_NO_TEST_IF_IN_NETWORK) && _networking)) {
-		assert(res == res2); // sanity check
+		assert(res.GetCost() == res2.GetCost() && CmdFailed(res) == CmdFailed(res2)); // sanity check
 	} else {
 		if (CmdFailed(res2)) {
-			if (res2 & 0xFFFF) _error_message = res2 & 0xFFFF;
+			res.SetGlobalErrorMessage();
 			goto show_error;
 		}
 	}
@@ -563,11 +569,11 @@
 	SubtractMoneyFromPlayer(res2);
 
 	if (IsLocalPlayer() && _game_mode != GM_EDITOR) {
-		if (res2 != 0) ShowCostOrIncomeAnimation(x, y, GetSlopeZ(x, y), res2);
-		if (_additional_cash_required) {
+		if (res2.GetCost() != 0) ShowCostOrIncomeAnimation(x, y, GetSlopeZ(x, y), res2.GetCost());
+		if (_additional_cash_required != 0) {
 			SetDParam(0, _additional_cash_required);
 			ShowErrorMessage(STR_0003_NOT_ENOUGH_CASH_REQUIRES, error_part1, x, y);
-			if (res2 == 0) goto callb_err;
+			if (res2.GetCost() == 0) goto callb_err;
 		}
 	}
 
@@ -590,3 +596,59 @@
 	_cmd_text = NULL;
 	return false;
 }
+
+
+CommandCost CommandCost::AddCost(CommandCost ret)
+{
+	this->AddCost(ret.cost);
+	if (this->success && !ret.success) {
+		this->message = ret.message;
+		this->success = false;
+	}
+	return *this;
+}
+
+CommandCost CommandCost::AddCost(Money cost)
+{
+	/* Overflow protection */
+	if (cost < 0 && (this->cost + cost) > this->cost) {
+		this->cost = INT64_MIN;
+	} else if (cost > 0 && (this->cost + cost) < this->cost) {
+		this->cost = INT64_MAX;
+	} else  {
+		this->cost += cost;
+	}
+	return *this;
+}
+
+CommandCost CommandCost::MultiplyCost(int factor)
+{
+	/* Overflow protection */
+	if (factor != 0 && (INT64_MAX / myabs(factor)) < myabs(this->cost)) {
+		this->cost = (this->cost < 0 == factor < 0) ? INT64_MAX : INT64_MIN;
+	} else {
+		this->cost *= factor;
+	}
+	return *this;
+}
+
+Money CommandCost::GetCost() const
+{
+	return this->cost;
+}
+
+void CommandCost::SetGlobalErrorMessage() const
+{
+	extern StringID _error_message;
+	if (this->message != INVALID_STRING_ID) _error_message = this->message;
+}
+
+bool CommandCost::Succeeded() const
+{
+	return this->success;
+}
+
+bool CommandCost::Failed() const
+{
+	return !this->success;
+}
--- a/src/command.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/command.h	Tue Jun 26 23:40:58 2007 +0000
@@ -153,6 +153,9 @@
 	CMD_SET_GROUP_REPLACE_PROTECTION = 126,
 
 	CMD_MOVE_ORDER                   = 127,
+	CMD_CHANGE_TIMETABLE             = 128,
+	CMD_SET_VEHICLE_ON_TIME          = 129,
+	CMD_AUTOFILL_TIMETABLE           = 130,
 };
 
 enum {
@@ -163,8 +166,6 @@
 	DC_NO_RAIL_OVERLAP = 0x10, ///< don't allow overlap of rails (used in buildrail)
 	DC_NO_TOWN_RATING  = 0x40, ///< town rating does not disallow you from building
 	DC_FORCETEST       = 0x80, ///< force test too.
-
-	CMD_ERROR = ((int32)0x80000000),
 };
 
 #define CMD_MSG(x) ((x) << 16)
@@ -183,30 +184,23 @@
 	CMD_OFFLINE = 0x2, ///< the command cannot be executed in a multiplayer game; single-player only
 };
 
-typedef int32 CommandProc(TileIndex tile, uint32 flags, uint32 p1, uint32 p2);
+typedef CommandCost CommandProc(TileIndex tile, uint32 flags, uint32 p1, uint32 p2);
 
 struct Command {
 	CommandProc *proc;
 	byte flags;
 };
 
-//#define return_cmd_error(errcode) do { _error_message=(errcode); return CMD_ERROR; } while(0)
-#define return_cmd_error(errcode) do { return CMD_ERROR | (errcode); } while (0)
+static inline bool CmdFailed(CommandCost cost) { return cost.Failed(); }
+static inline bool CmdSucceeded(CommandCost cost) { return cost.Succeeded(); }
 
-/**
- * Check the return value of a DoCommand*() function
- * @param res the resulting value from the command to be checked
- * @return Return true if the command failed, false otherwise
- */
-static inline bool CmdFailed(int32 res)
-{
-	/* lower 16bits are the StringID of the possible error */
-	return res <= (CMD_ERROR | INVALID_STRING_ID);
-}
+static const CommandCost CMD_ERROR = CommandCost((StringID)INVALID_STRING_ID);
+
+#define return_cmd_error(errcode) do { return CommandCost((StringID)(errcode)); } while (0)
 
 /* command.cpp */
 typedef void CommandCallback(bool success, TileIndex tile, uint32 p1, uint32 p2);
-int32 DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc);
+CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc);
 bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback, uint32 cmd);
 
 #ifdef ENABLE_NETWORK
@@ -218,6 +212,6 @@
 
 bool IsValidCommand(uint cmd);
 byte GetCommandFlags(uint cmd);
-int32 GetAvailableMoneyForCommand();
+Money GetAvailableMoneyForCommand();
 
 #endif /* COMMAND_H */
--- a/src/console.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/console.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -388,7 +388,8 @@
 	str_validate(str);
 
 	if (_network_dedicated) {
-		printf("%s\n", str);
+		fprintf(stdout, "%s\n", str);
+		fflush(stdout);
 		IConsoleWriteToLogFile(str);
 		free(str); // free duplicated string since it's not used anymore
 		return;
--- a/src/console_cmds.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/console_cmds.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -1248,7 +1248,7 @@
 		const NetworkPlayerInfo *npi = &_network_player_info[p->index];
 
 		GetString(buffer, STR_00D1_DARK_BLUE + _player_colors[p->index], lastof(buffer));
-		IConsolePrintF(8, "#:%d(%s) Company Name: '%s'  Year Founded: %d  Money: %d  Loan: %d  Value: %" OTTD_PRINTF64 "d  (T:%d, R:%d, P:%d, S:%d) %sprotected",
+		IConsolePrintF(8, "#:%d(%s) Company Name: '%s'  Year Founded: %d  Money: %" OTTD_PRINTF64 "d  Loan: %" OTTD_PRINTF64 "d  Value: %" OTTD_PRINTF64 "d  (T:%d, R:%d, P:%d, S:%d) %sprotected",
 			p->index + 1, buffer, npi->company_name, p->inaugurated_year, p->player_money, p->current_loan, CalculateCompanyValue(p),
 			/* trains      */ npi->num_vehicle[0],
 			/* lorry + bus */ npi->num_vehicle[1] + npi->num_vehicle[2],
--- a/src/driver.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/driver.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -64,7 +64,7 @@
 #if defined(LIBTIMIDITY)
 	M("libtimidity", "LibTimidity MIDI Driver", &_libtimidity_music_driver),
 #endif /* LIBTIMIDITY */
-#if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(PSP)
+#if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(__OS2__) && !defined(PSP)
 	M("extmidi", "External MIDI Driver",    &_extmidi_music_driver),
 #endif
 #endif
--- a/src/dummy_land.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/dummy_land.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -26,7 +26,7 @@
 	return SLOPE_FLAT;
 }
 
-static int32 ClearTile_Dummy(TileIndex tile, byte flags)
+static CommandCost ClearTile_Dummy(TileIndex tile, byte flags)
 {
 	return_cmd_error(STR_0001_OFF_EDGE_OF_MAP);
 }
--- a/src/economy.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/economy.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -57,10 +57,11 @@
 
 int _score_part[MAX_PLAYERS][SCORE_END];
 
-int64 CalculateCompanyValue(const Player* p)
+Money CalculateCompanyValue(const Player* p)
 {
 	PlayerID owner = p->index;
-	int64 value;
+	/* Do a little nasty by using CommandCost, so we can use the "overflow" protection of CommandCost */
+	CommandCost value;
 
 	{
 		Station *st;
@@ -70,7 +71,7 @@
 			if (st->owner == owner) num += CountBitsSet(st->facilities);
 		}
 
-		value = num * _price.station_value * 25;
+		value.AddCost(num * _price.station_value * 25);
 	}
 
 	{
@@ -83,14 +84,16 @@
 					v->type == VEH_ROAD ||
 					(v->type == VEH_AIRCRAFT && IsNormalAircraft(v)) ||
 					v->type == VEH_SHIP) {
-				value += v->value * 3 >> 1;
+				value.AddCost(v->value * 3 >> 1);
 			}
 		}
 	}
 
-	value += p->money64 - p->current_loan; // add real money value
+	/* Add real money value */
+	value.AddCost(-p->current_loan);
+	value.AddCost(p->player_money);
 
-	return max(value, 1LL);
+	return max(value.GetCost(), 1LL);
 }
 
 /** if update is set to true, the economy is updated with this score
@@ -109,7 +112,7 @@
 /* Count vehicles */
 	{
 		Vehicle *v;
-		int32 min_profit = 0;
+		Money min_profit = 0;
 		bool min_profit_first = true;
 		uint num = 0;
 
@@ -132,7 +135,7 @@
 		_score_part[owner][SCORE_VEHICLES] = num;
 		/* Don't allow negative min_profit to show */
 		if (min_profit > 0)
-			_score_part[owner][SCORE_MIN_PROFIT] = min_profit;
+			_score_part[owner][SCORE_MIN_PROFIT] = ClampToI32(min_profit);
 	}
 
 /* Count stations */
@@ -148,25 +151,21 @@
 
 /* Generate statistics depending on recent income statistics */
 	{
-		const PlayerEconomyEntry* pee;
-		int numec;
-		int32 min_income;
-		int32 max_income;
+		int numec = min(p->num_valid_stat_ent, 12);
+		if (numec != 0) {
+			const PlayerEconomyEntry *pee = p->old_economy;
+			Money min_income = pee->income + pee->expenses;
+			Money max_income = pee->income + pee->expenses;
 
-		numec = min(p->num_valid_stat_ent, 12);
-		if (numec != 0) {
-			min_income = 0x7FFFFFFF;
-			max_income = 0;
-			pee = p->old_economy;
 			do {
 				min_income = min(min_income, pee->income + pee->expenses);
 				max_income = max(max_income, pee->income + pee->expenses);
 			} while (++pee,--numec);
 
 			if (min_income > 0)
-				_score_part[owner][SCORE_MIN_INCOME] = min_income;
+				_score_part[owner][SCORE_MIN_INCOME] = ClampToI32(min_income);
 
-			_score_part[owner][SCORE_MAX_INCOME] = max_income;
+			_score_part[owner][SCORE_MAX_INCOME] = ClampToI32(max_income);
 		}
 	}
 
@@ -197,15 +196,14 @@
 
 /* Generate score for player money */
 	{
-		int32 money = p->player_money;
-		if (money > 0) {
-			_score_part[owner][SCORE_MONEY] = money;
+		if (p->player_money > 0) {
+			_score_part[owner][SCORE_MONEY] = ClampToI32(p->player_money);
 		}
 	}
 
 /* Generate score for loan */
 	{
-		_score_part[owner][SCORE_LOAN] = _score_info[SCORE_LOAN].needed - p->current_loan;
+		_score_part[owner][SCORE_LOAN] = ClampToI32(_score_info[SCORE_LOAN].needed - p->current_loan);
 	}
 
 	/* Now we calculate the score for each item.. */
@@ -259,7 +257,7 @@
 			for (i = 0; i < 4; i++) {
 				if (p->share_owners[i] == old_player) {
 					/* Sell his shares */
-					int32 res = DoCommand(0, p->index, 0, DC_EXEC, CMD_SELL_SHARE_IN_COMPANY);
+					CommandCost res = DoCommand(0, p->index, 0, DC_EXEC, CMD_SELL_SHARE_IN_COMPANY);
 					/* Because we are in a DoCommand, we can't just execute an other one and
 					 *  expect the money to be removed. We need to do it ourself! */
 					SubtractMoneyFromPlayer(res);
@@ -273,7 +271,7 @@
 			_current_player = p->share_owners[i];
 			if (_current_player != PLAYER_SPECTATOR) {
 				/* Sell the shares */
-				int32 res = DoCommand(0, old_player, 0, DC_EXEC, CMD_SELL_SHARE_IN_COMPANY);
+				CommandCost res = DoCommand(0, old_player, 0, DC_EXEC, CMD_SELL_SHARE_IN_COMPANY);
 				/* Because we are in a DoCommand, we can't just execute an other one and
 				 *  expect the money to be removed. We need to do it ourself! */
 				SubtractMoneyFromPlayer(res);
@@ -287,8 +285,7 @@
 	 * removing his/her property doesn't fail because of lack of money.
 	 * Not too drastically though, because it could overflow */
 	if (new_player == PLAYER_SPECTATOR) {
-		GetPlayer(old_player)->money64 = MAX_UVALUE(uint64) >>2; // jackpot ;p
-		UpdatePlayerMoney32(GetPlayer(old_player));
+		GetPlayer(old_player)->player_money = MAX_UVALUE(uint64) >> 2; // jackpot ;p
 	}
 
 	if (new_player == PLAYER_SPECTATOR) {
@@ -440,7 +437,6 @@
 static void PlayersCheckBankrupt(Player *p)
 {
 	PlayerID owner;
-	int64 val;
 
 	/*  If the player has money again, it does not go bankrupt */
 	if (p->player_money >= 0) {
@@ -468,7 +464,7 @@
 
 			/* Check if the company has any value.. if not, declare it bankrupt
 			 *  right now */
-			val = CalculateCompanyValue(p);
+			Money val = CalculateCompanyValue(p);
 			if (val > 0) {
 				p->bankrupt_value = val;
 				p->bankrupt_asked = 1 << owner; // Don't ask the owner
@@ -482,8 +478,7 @@
 			DeletePlayerWindows(owner);
 
 			/* Show bankrupt news */
-			SetDParam(0, p->name_1);
-			SetDParam(1, p->name_2);
+			SetDParam(0, p->index);
 			AddNewsItem( (StringID)(owner | NB_BBANKRUPT), NEWS_FLAGS(NM_CALLBACK, 0, NT_COMPANY_INFO, DNC_BANKRUPCY),0,0);
 
 			if (IsHumanPlayer(owner)) {
@@ -519,8 +514,7 @@
 	DrawPlayerFace(p->face, p->player_color, 2, 23);
 	GfxFillRect(3, 23, 3 + 91, 23 + 118, PALETTE_TO_STRUCT_GREY | (1 << USE_COLORTABLE));
 
-	SetDParam(0, p->president_name_1);
-	SetDParam(1, p->president_name_2);
+	SetDParam(0, p->index);
 
 	DrawStringMultiCenter(49, 148, STR_7058_PRESIDENT, 94);
 
@@ -528,8 +522,7 @@
 	case NB_BTROUBLE:
 		DrawStringCentered(w->width>>1, 1, STR_7056_TRANSPORT_COMPANY_IN_TROUBLE, 0);
 
-		SetDParam(0, p->name_1);
-		SetDParam(1, p->name_2);
+		SetDParam(0, p->index);
 
 		DrawStringMultiCenter(
 			((w->width - 101) >> 1) + 98,
@@ -543,10 +536,9 @@
 
 		DrawStringCentered(w->width>>1, 1, STR_7059_TRANSPORT_COMPANY_MERGER, 0);
 		COPY_IN_DPARAM(0,WP(w,news_d).ni->params, 2);
-		SetDParam(2, p->name_1);
-		SetDParam(3, p->name_2);
+		SetDParam(2, p->index);
 		price = WP(w,news_d).ni->params[2];
-		SetDParam(4, price);
+		SetDParam(3, price);
 		DrawStringMultiCenter(
 			((w->width - 101) >> 1) + 98,
 			90,
@@ -567,9 +559,8 @@
 
 	case NB_BNEWCOMPANY:
 		DrawStringCentered(w->width>>1, 1, STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED, 0);
-		SetDParam(0, p->name_1);
-		SetDParam(1, p->name_2);
-		COPY_IN_DPARAM(2,WP(w,news_d).ni->params, 2);
+		SetDParam(0, p->index);
+		COPY_IN_DPARAM(1,WP(w,news_d).ni->params, 2);
 		DrawStringMultiCenter(
 			((w->width - 101) >> 1) + 98,
 			90,
@@ -590,16 +581,14 @@
 	case NB_BTROUBLE:
 		SetDParam(0, STR_7056_TRANSPORT_COMPANY_IN_TROUBLE);
 		SetDParam(1, STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED);
-		SetDParam(2, p->name_1);
-		SetDParam(3, p->name_2);
+		SetDParam(2, p->index);
 		return STR_02B6;
 	case NB_BMERGER:
 		SetDParam(0, STR_7059_TRANSPORT_COMPANY_MERGER);
 		SetDParam(1, STR_705A_HAS_BEEN_SOLD_TO_FOR);
 		COPY_IN_DPARAM(2,ni->params, 2);
-		SetDParam(4, p->name_1);
-		SetDParam(5, p->name_2);
-		COPY_IN_DPARAM(6,ni->params + 2, 1);
+		SetDParam(4, p->index);
+		COPY_IN_DPARAM(5,ni->params + 2, 1);
 		return STR_02B6;
 	case NB_BBANKRUPT:
 		SetDParam(0, STR_705C_BANKRUPT);
@@ -609,9 +598,8 @@
 	case NB_BNEWCOMPANY:
 		SetDParam(0, STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED);
 		SetDParam(1, STR_705F_STARTS_CONSTRUCTION_NEAR);
-		SetDParam(2, p->name_1);
-		SetDParam(3, p->name_2);
-		COPY_IN_DPARAM(4,ni->params, 2);
+		SetDParam(2, p->index);
+		COPY_IN_DPARAM(3,ni->params, 2);
 		return STR_02B6;
 	default:
 		NOT_REACHED();
@@ -658,11 +646,17 @@
 	InvalidateWindow(WC_COMPANY_LEAGUE, 0);
 }
 
-static void AddSingleInflation(int32 *value, uint16 *frac, int32 amt)
+static void AddSingleInflation(Money *value, uint16 *frac, int32 amt)
 {
-	int64 tmp = (int64)*value * amt + *frac;
-	*frac   = GB(tmp, 0, 16);
-	*value += tmp >> 16;
+	/* Is it safe to add inflation ? */
+	if ((INT64_MAX / amt) < (*value + 1)) {
+		*value = INT64_MAX / amt;
+		*frac = 0;
+	} else {
+		int64 tmp = (int64)*value * amt + *frac;
+		*frac   = GB(tmp, 0, 16);
+		*value += tmp >> 16;
+	}
 }
 
 static void AddInflation()
@@ -672,10 +666,10 @@
 	 * 12 -> months per year
 	 * This is only a good approxiamtion for small values
 	 */
-	int32 inf = _economy.infl_amount * 54;
+	Money inf = _economy.infl_amount * 54;
 
 	for (uint i = 0; i != NUM_PRICES; i++) {
-		AddSingleInflation((int32*)&_price + i, _price_frac + i, inf);
+		AddSingleInflation((Money*)&_price + i, _price_frac + i, inf);
 	}
 
 	_economy.max_loan_unround += BIGMULUS(_economy.max_loan_unround, inf, 16);
@@ -686,7 +680,7 @@
 	inf = _economy.infl_amount_pr * 54;
 	for (CargoID i = 0; i < NUM_CARGO; i++) {
 		AddSingleInflation(
-			(int32*)_cargo_payment_rates + i,
+			(Money*)_cargo_payment_rates + i,
 			_cargo_payment_rates_frac + i,
 			inf
 		);
@@ -709,7 +703,7 @@
 		_current_player = p->index;
 		SET_EXPENSES_TYPE(EXPENSES_LOAN_INT);
 
-		SubtractMoneyFromPlayer(BIGMULUS(p->current_loan, interest, 16));
+		SubtractMoneyFromPlayer(CommandCost((Money)BIGMULUS(p->current_loan, interest, 16)));
 
 		SET_EXPENSES_TYPE(EXPENSES_OTHER);
 		SubtractMoneyFromPlayer(_price.station_value >> 2);
@@ -739,7 +733,7 @@
 	2,
 };
 
-static const int32 _price_base[NUM_PRICES] = {
+static const Money _price_base[NUM_PRICES] = {
 	    100, ///< station_value
 	    100, ///< build_rail
 	     95, ///< build_road
@@ -822,10 +816,10 @@
 {
 	int i;
 
-	assert(sizeof(_price) == NUM_PRICES * sizeof(int32));
+	assert(sizeof(_price) == NUM_PRICES * sizeof(Money));
 
 	for (i = 0; i != NUM_PRICES; i++) {
-		int32 price = _price_base[i];
+		Money price = _price_base[i];
 		if (_price_category[i] != 0) {
 			uint mod = _price_category[i] == 1 ? _opt.diff.vehicle_costs : _opt.diff.construction_cost;
 			if (mod < 1) {
@@ -839,7 +833,7 @@
 		} else {
 			price >>= 8 - price_base_multiplier[i];
 		}
-		((int32*)&_price)[i] = price;
+		((Money*)&_price)[i] = price;
 		_price_frac[i] = 0;
 	}
 
@@ -1152,7 +1146,7 @@
 		SlObject(&_subsidies[index], _subsidies_desc);
 }
 
-int32 GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, CargoID cargo_type)
+Money GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, CargoID cargo_type)
 {
 	const CargoSpec *cs = GetCargo(cargo_type);
 	byte f;
@@ -1299,8 +1293,7 @@
 			InjectDParam(2);
 
 			p = GetPlayer(_current_player);
-			SetDParam(0, p->name_1);
-			SetDParam(1, p->name_2);
+			SetDParam(0, p->index);
 			AddNewsItem(
 				STR_2031_SERVICE_SUBSIDY_AWARDED + _opt.diff.subsidy_multiplier,
 				NEWS_FLAGS(NM_NORMAL, NF_TILE, NT_SUBSIDIES, 0),
@@ -1314,11 +1307,11 @@
 	return false;
 }
 
-static int32 DeliverGoods(int num_pieces, CargoID cargo_type, StationID source, StationID dest, TileIndex source_tile, byte days_in_transit)
+static Money DeliverGoods(int num_pieces, CargoID cargo_type, StationID source, StationID dest, TileIndex source_tile, byte days_in_transit)
 {
 	bool subsidised;
 	Station *s_from, *s_to;
-	int32 profit;
+	Money profit;
 
 	assert(num_pieces > 0);
 
@@ -1368,14 +1361,9 @@
 {
 	int result = 0;
 
-	int profit = 0;
-	int total_veh_profit = 0;         // accumulates the profit across the vehicle chain (used by trains)
-	int32 route_profit = 0;           // the grand total amount for the route. A-D of transfer chain A-B-C-D
-	int virtual_profit = 0;           // virtual profit of one vehicle element for feeder systems
-	int virtual_profit_total = 0;     // virtual profit for entire vehicle chain
-	int total_cargo_feeder_share = 0; // the feeder cash amount for the goods being loaded/unloaded in this load step
-
-	int all_vehicles_cargo_feeder_share = front_v->cargo_feeder_share; // used to hold transfer value of complete vehicle chain - used by trains
+	Money vehicle_profit = 0; // Money paid to the train
+	Money route_profit   = 0; // The grand total amount for the route. A-D of transfer chain A-B-C-D
+	Money virtual_profit = 0; // The virtual profit for entire vehicle chain
 
 	StationID last_visited = front_v->last_station_visited;
 	Station *st = GetStation(last_visited);
@@ -1392,75 +1380,70 @@
 
 	for (Vehicle *v = front_v; v != NULL; v = v->next) {
 		/* No cargo to unload */
-		if (v->cargo_cap == 0 || v->cargo_count == 0) continue;
+		if (v->cargo_cap == 0 || v->cargo.Empty()) continue;
 
 		/* All cargo has already been paid for, no need to pay again */
-		if (v->cargo_count == v->cargo_paid_for) {
+		if (!v->cargo.UnpaidCargo()) {
 			SETBIT(v->vehicle_flags, VF_CARGO_UNLOADING);
 			continue;
 		}
 
 		GoodsEntry *ge = &st->goods[v->cargo_type];
-
-		if (v->cargo_source != last_visited &&
-				HASBIT(ge->waiting_acceptance, 15) &&
-				(front_v->current_order.flags & OF_TRANSFER) == 0) {
-			/* Deliver goods to the station */
-			st->time_since_unload = 0;
-
-			/* handle end of route payment */
-			profit += DeliverGoods(v->cargo_count - v->cargo_paid_for, v->cargo_type, v->cargo_source, last_visited, v->cargo_source_xy, v->cargo_days);
-			v->cargo_paid_for        = v->cargo_count;
-			route_profit             = profit;                                   // display amount paid for final route delivery, A-D of a chain A-B-C-D
-			total_veh_profit         = profit - all_vehicles_cargo_feeder_share; // whole vehicle is not payed for transfers picked up earlier
-			total_cargo_feeder_share = -all_vehicles_cargo_feeder_share;         // total of transfer fees in vehicle chain needs to be zero at end of unload
-
-			v->cargo_feeder_share = 0;   // clear transfer cost per vehicle
-			result |= 1;
+		const CargoList::List *cargos = v->cargo.Packets();
 
-			SETBIT(v->vehicle_flags, VF_CARGO_UNLOADING);
-		} else if (front_v->current_order.flags & (OF_UNLOAD | OF_TRANSFER)) {
-			if ((front_v->current_order.flags & OF_TRANSFER) != 0) {
-				virtual_profit = GetTransportedGoodsIncome(
-					v->cargo_count - v->cargo_paid_for,
-					/* pay transfer vehicle for only the part of transfer it has done: ie. cargo_loaded_at_xy to here */
-					DistanceManhattan(v->cargo_loaded_at_xy, GetStation(last_visited)->xy),
-					v->cargo_days,
-					v->cargo_type);
+		for (CargoList::List::const_iterator it = cargos->begin(); it != cargos->end(); it++) {
+			CargoPacket *cp = *it;
+			if (!cp->paid_for &&
+					cp->source != last_visited &&
+					ge->acceptance &&
+					(front_v->current_order.flags & OF_TRANSFER) == 0) {
+				/* Deliver goods to the station */
+				st->time_since_unload = 0;
 
-				front_v->profit_this_year += virtual_profit;
-				ge->feeder_profit         += v->cargo_feeder_share + virtual_profit; // transfer cargo transfer fees to station
-				total_cargo_feeder_share  -= v->cargo_feeder_share; // accumulate deduction of feeder shares
-				v->cargo_feeder_share      = 0;                     // clear transfer cost
+				/* handle end of route payment */
+				Money profit = DeliverGoods(cp->count, v->cargo_type, cp->source, last_visited, cp->source_xy, cp->days_in_transit);
+				cp->paid_for = true;
+				route_profit   += profit - cp->feeder_share; // display amount paid for final route delivery, A-D of a chain A-B-C-D
+				vehicle_profit += profit;                    // whole vehicle is not payed for transfers picked up earlier
 
-				/* keep total of cargo unloaded (pending) for accurate cargoshare calculation on load */
-				SB(ge->unload_pending, 0, 12, GB(ge->unload_pending, 0, 12) + v->cargo_count);
+				result |= 1;
 
-				virtual_profit_total += virtual_profit;   // accumulate transfer profits for whole vehicle
-				v->cargo_paid_for = v->cargo_count;       // record how much of the cargo has been paid for to eliminate double counting
+				SETBIT(v->vehicle_flags, VF_CARGO_UNLOADING);
+			} else if (front_v->current_order.flags & (OF_UNLOAD | OF_TRANSFER)) {
+				if (!cp->paid_for && (front_v->current_order.flags & OF_TRANSFER) != 0) {
+					Money profit = GetTransportedGoodsIncome(
+						cp->count,
+						/* pay transfer vehicle for only the part of transfer it has done: ie. cargo_loaded_at_xy to here */
+						DistanceManhattan(cp->loaded_at_xy, GetStation(last_visited)->xy),
+						cp->days_in_transit,
+						v->cargo_type);
+
+					front_v->profit_this_year += profit;
+					virtual_profit   += profit; // accumulate transfer profits for whole vehicle
+					cp->feeder_share += profit; // account for the (virtual) profit already made for the cargo packet
+					cp->paid_for      = true;   // record that the cargo has been paid for to eliminate double counting
+				}
+				result |= 2;
+
+				SETBIT(v->vehicle_flags, VF_CARGO_UNLOADING);
 			}
-			result |= 2;
-
-			SETBIT(v->vehicle_flags, VF_CARGO_UNLOADING);
 		}
+		v->cargo.InvalidateCache();
 	}
 
-	/* Ensure a negative total is only applied to the vehicle if there is value to reduce. */
-	front_v->cargo_feeder_share = max(front_v->cargo_feeder_share + total_cargo_feeder_share, 0);
-
-	if (virtual_profit_total > 0) {
-		ShowFeederIncomeAnimation(front_v->x_pos, front_v->y_pos, front_v->z_pos, virtual_profit_total);
+	if (virtual_profit > 0) {
+		ShowFeederIncomeAnimation(front_v->x_pos, front_v->y_pos, front_v->z_pos, virtual_profit);
 	}
 
 	if (route_profit != 0) {
-		front_v->profit_this_year += total_veh_profit;
+		front_v->profit_this_year += vehicle_profit;
 		SubtractMoneyFromPlayer(-route_profit);
 
 		if (IsLocalPlayer() && !PlayVehicleSound(front_v, VSE_LOAD_UNLOAD)) {
 			SndPlayVehicleFx(SND_14_CASHTILL, front_v);
 		}
 
-		ShowCostOrIncomeAnimation(front_v->x_pos, front_v->y_pos, front_v->z_pos, -total_veh_profit);
+		ShowCostOrIncomeAnimation(front_v->x_pos, front_v->y_pos, front_v->z_pos, -vehicle_profit);
 	}
 
 	_current_player = old_player;
@@ -1483,7 +1466,7 @@
 		if (_patches.improved_load && HASBIT(v->current_order.flags, OFB_FULL_LOAD)) {
 			/* 'Reserve' this cargo for this vehicle, because we were first. */
 			for (; v != NULL; v = v->next) {
-				if (v->cargo_cap != 0) cargo_left[v->cargo_type] -= v->cargo_cap - v->cargo_count;
+				if (v->cargo_cap != 0) cargo_left[v->cargo_type] -= v->cargo_cap - v->cargo.Count();
 			}
 		}
 		return;
@@ -1499,14 +1482,13 @@
 	int unloading_time = 0;
 	Vehicle *u = v;
 	int result = 0;
-	int cap;
+	uint cap;
 
 	bool completely_empty  = true;
 	bool anything_unloaded = false;
 	bool anything_loaded   = false;
 	uint32 cargo_not_full  = 0;
 	uint32 cargo_full      = 0;
-	int total_cargo_feeder_share = 0; // the feeder cash amount for the goods being loaded/unloaded in this load step
 
 	v->cur_speed = 0;
 
@@ -1523,36 +1505,19 @@
 		}
 
 		GoodsEntry *ge = &st->goods[v->cargo_type];
-		int count = GB(ge->waiting_acceptance, 0, 12);
 
 		if (HASBIT(v->vehicle_flags, VF_CARGO_UNLOADING)) {
-			uint16 amount_unloaded = _patches.gradual_loading ? min(v->cargo_count, load_amount) : v->cargo_count;
+			uint cargo_count = v->cargo.Count();
+			uint amount_unloaded = _patches.gradual_loading ? min(cargo_count, load_amount) : cargo_count;
+			bool remaining; // Are there cargo entities in this vehicle that can still be unloaded here?
 
-			if (v->cargo_source != last_visited && ge->waiting_acceptance & 0x8000 && !(u->current_order.flags & OF_TRANSFER)) {
+			if (ge->acceptance && !(u->current_order.flags & OF_TRANSFER)) {
+				/* The cargo has reached it's final destination, the packets may now be destroyed */
+				remaining = v->cargo.MoveTo(NULL, amount_unloaded, CargoList::MTA_FINAL_DELIVERY, last_visited);
+
 				result |= 1;
 			} else if (u->current_order.flags & (OF_UNLOAD | OF_TRANSFER)) {
-				if (count == 0) {
-					/* No goods waiting at station */
-					ge->enroute_time    = v->cargo_days;
-					ge->enroute_from    = v->cargo_source;
-					ge->enroute_from_xy = v->cargo_source_xy;
-				} else {
-					/* Goods already waiting at station. Set counters to the worst value. */
-					if (v->cargo_days >= ge->enroute_time) ge->enroute_time = v->cargo_days;
-
-					if (last_visited != ge->enroute_from) {
-						ge->enroute_from    = v->cargo_source;
-						ge->enroute_from_xy = v->cargo_source_xy;
-					}
-				}
-				/* Update amount of waiting cargo. There is, however, no sense in
-				 * updating the count variable because this vehicle will not be
-				 * able to take the cargo. */
-				SB(ge->waiting_acceptance, 0, 12, min(amount_unloaded + count, 0xFFF));
-
-				/* if there is not enough to unload from pending, ensure it does not go -ve
-				 * else deduct amount actually unloaded from unload_pending */
-				SB(ge->unload_pending, 0, 12, max(GB(ge->unload_pending, 0, 12) - amount_unloaded, 0U));
+				remaining = v->cargo.MoveTo(&ge->cargo, amount_unloaded);
 
 				result |= 2;
 			} else {
@@ -1567,11 +1532,8 @@
 
 			unloading_time += amount_unloaded;
 
-			v->cargo_count -= amount_unloaded;
-			v->cargo_paid_for -= min(amount_unloaded, v->cargo_paid_for);
-
 			anything_unloaded = true;
-			if (_patches.gradual_loading && v->cargo_count != 0) {
+			if (_patches.gradual_loading && remaining) {
 				completely_empty = false;
 			} else {
 				/* We have finished unloading (cargo count == 0) */
@@ -1581,9 +1543,6 @@
 			continue;
 		}
 
-		/* We cannot have paid for more cargo than there is on board. */
-		assert(v->cargo_paid_for <= v->cargo_count);
-
 		/* Do not pick up goods that we unloaded */
 		if (u->current_order.flags & OF_UNLOAD) continue;
 
@@ -1596,14 +1555,14 @@
 		}
 
 		/* if last speed is 0, we treat that as if no vehicle has ever visited the station. */
-		ge->days_since_pickup = 0;
 		ge->last_speed = min(t, 255);
-		ge->last_age = _cur_year - v->build_year;
+		ge->last_age = _cur_year - u->build_year;
 
 		/* If there's goods waiting at the station, and the vehicle
 		 * has capacity for it, load it on the vehicle. */
-		if (count != 0 &&
-				(cap = v->cargo_cap - v->cargo_count) != 0) {
+		if (!ge->cargo.Empty() &&
+				(cap = v->cargo_cap - v->cargo.Count()) != 0) {
+			uint count = ge->cargo.Count();
 
 			/* Skip loading this vehicle if another train/vehicle is already handling
 			 * the same cargo type at this station */
@@ -1616,11 +1575,11 @@
 			if (_patches.gradual_loading) cap = min(cap, load_amount);
 			if (_patches.improved_load) {
 				/* Don't load stuff that is already 'reserved' for other vehicles */
-				cap = min(cargo_left[v->cargo_type], cap);
+				cap = min((uint)cargo_left[v->cargo_type], cap);
 				cargo_left[v->cargo_type] -= cap;
 			}
 
-			if (v->cargo_count == 0) TriggerVehicle(v, VEHICLE_TRIGGER_NEW_CARGO);
+			if (v->cargo.Empty()) TriggerVehicle(v, VEHICLE_TRIGGER_NEW_CARGO);
 
 			/* TODO: Regarding this, when we do gradual loading, we
 			 * should first unload all vehicles and then start
@@ -1632,32 +1591,17 @@
 			completely_empty = false;
 			anything_loaded = true;
 
-			/* cargoshare is proportioned by the amount due to unload
-			 * Otherwise, with gradual loading, 100% of credits would be taken immediately,
-			 * even if the cargo volume represents a tiny percent of the whole.
-			 * ge->unload_pending holds the amount that has been credited, but has not yet been unloaded.
-			 */
-			int cargoshare = cap * 10000 / (ge->waiting_acceptance + ge->unload_pending);
-			int feeder_profit_share = ge->feeder_profit * cargoshare / 10000;
-			v->cargo_count += cap;
-			ge->waiting_acceptance -= cap;
+			ge->cargo.MoveTo(&v->cargo, cap, CargoList::MTA_CARGO_LOAD, st->xy);
+			ge->days_since_pickup = 0;
 
-			total_cargo_feeder_share += feeder_profit_share;    // store cost for later payment when cargo unloaded
-			v->cargo_loaded_at_xy = st->xy;                     // retains location of where the cargo was picked up for intermediate payments
-
-			ge->feeder_profit -= feeder_profit_share;
 			unloading_time += cap;
 			st->time_since_load = 0;
+			st->last_vehicle_type = v->type;
 
-			/* And record the source of the cargo, and the days in travel. */
-			v->cargo_source = ge->enroute_from;
-			v->cargo_source_xy = ge->enroute_from_xy;
-			v->cargo_days = ge->enroute_time;
 			result |= 2;
-			st->last_vehicle_type = v->type;
 		}
 
-		if (v->cargo_count == v->cargo_cap) {
+		if (v->cargo.Count() == v->cargo_cap) {
 			SETBIT(cargo_full, v->cargo_type);
 		} else {
 			SETBIT(cargo_not_full, v->cargo_type);
@@ -1671,14 +1615,12 @@
 	if (_patches.improved_load && HASBIT(u->current_order.flags, OFB_FULL_LOAD)) {
 		/* Update left cargo */
 		for (v = u; v != NULL; v = v->next) {
-			if (v->cargo_cap != 0) cargo_left[v->cargo_type] -= v->cargo_cap - v->cargo_count;
+			if (v->cargo_cap != 0) cargo_left[v->cargo_type] -= v->cargo_cap - v->cargo.Count();
 		}
 	}
 
 	v = u;
 
-	v->cargo_feeder_share += total_cargo_feeder_share;
-
 	if (anything_loaded || anything_unloaded) {
 		if (_patches.gradual_loading) {
 			/* The time it takes to load one 'slice' of cargo or passengers depends
@@ -1693,7 +1635,7 @@
 			if (_patches.full_load_any) {
 				/* if the aircraft carries passengers and is NOT full, then
 				 * continue loading, no matter how much mail is in */
-				if ((v->type == VEH_AIRCRAFT && IsCargoInClass(v->cargo_type, CC_PASSENGERS) && v->cargo_cap != v->cargo_count) ||
+				if ((v->type == VEH_AIRCRAFT && IsCargoInClass(v->cargo_type, CC_PASSENGERS) && v->cargo_cap != v->cargo.Count()) ||
 						(cargo_not_full && (cargo_full & ~cargo_not_full) == 0)) { // There are stull non-full cargos
 					finished_loading = false;
 				}
@@ -1715,6 +1657,17 @@
 		}
 	}
 
+	/* Calculate the loading indicator fill percent and display */
+	if (_patches.loading_indicators && _game_mode != GM_MENU && v->owner == _local_player) {
+		StringID percent_up_down = STR_NULL;
+		int percent = CalcPercentVehicleFilled(v, &percent_up_down);
+		if (v->fill_percent_te_id == INVALID_TE_ID) {
+			v->fill_percent_te_id = ShowFillingPercent(v->x_pos, v->y_pos, v->z_pos + 20, percent, percent_up_down);
+		} else {
+			UpdateFillingPercent(v->fill_percent_te_id, percent, percent_up_down);
+		}
+	}
+
 	v->load_unload_time_rem = unloading_time;
 
 	if (completely_empty) {
@@ -1741,7 +1694,7 @@
 {
 	int cargo_left[NUM_CARGO];
 
-	for (uint i = 0; i < NUM_CARGO; i++) cargo_left[i] = GB(st->goods[i].waiting_acceptance, 0, 12);
+	for (uint i = 0; i < NUM_CARGO; i++) cargo_left[i] = st->goods[i].cargo.Count();
 
 	std::list<Vehicle *>::iterator iter;
 	for (iter = st->loading_vehicles.begin(); iter != st->loading_vehicles.end(); ++iter) {
@@ -1766,11 +1719,10 @@
 {
 	Player *owner;
 	int i;
-	int64 value;
+	Money value;
 
-	SetDParam(0, p->name_1);
-	SetDParam(1, p->name_2);
-	SetDParam(2, p->bankrupt_value);
+	SetDParam(0, p->index);
+	SetDParam(1, p->bankrupt_value);
 	AddNewsItem( (StringID)(_current_player | NB_BMERGER), NEWS_FLAGS(NM_CALLBACK, 0, NT_COMPANY_INFO, DNC_BANKRUPCY),0,0);
 
 	/* original code does this a little bit differently */
@@ -1784,14 +1736,15 @@
 	}
 
 	value = CalculateCompanyValue(p) >> 2;
+	PlayerID old_player = _current_player;
 	for (i = 0; i != 4; i++) {
 		if (p->share_owners[i] != PLAYER_SPECTATOR) {
-			owner = GetPlayer(p->share_owners[i]);
-			owner->money64 += value;
-			owner->yearly_expenses[0][EXPENSES_OTHER] += value;
-			UpdatePlayerMoney32(owner);
+			SET_EXPENSES_TYPE(EXPENSES_OTHER);
+			_current_player = p->share_owners[i];
+			SubtractMoneyFromPlayer(CommandCost(-value));
 		}
 	}
+	_current_player = old_player;
 
 	p->is_active = false;
 
@@ -1807,10 +1760,10 @@
  * @param p1 player to buy the shares from
  * @param p2 unused
  */
-int32 CmdBuyShareInCompany(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuyShareInCompany(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Player *p;
-	int64 cost;
+	CommandCost cost;
 
 	/* Check if buying shares is allowed (protection against modified clients */
 	if (!IsValidPlayer((PlayerID)p1) || !_patches.allow_shares) return CMD_ERROR;
@@ -1822,12 +1775,12 @@
 	if (_cur_year - p->inaugurated_year < 6) return_cmd_error(STR_7080_PROTECTED);
 
 	/* Those lines are here for network-protection (clients can be slow) */
-	if (GetAmountOwnedBy(p, PLAYER_SPECTATOR) == 0) return 0;
+	if (GetAmountOwnedBy(p, PLAYER_SPECTATOR) == 0) return cost;
 
 	/* We can not buy out a real player (temporarily). TODO: well, enable it obviously */
-	if (GetAmountOwnedBy(p, PLAYER_SPECTATOR) == 1 && !p->is_ai) return 0;
+	if (GetAmountOwnedBy(p, PLAYER_SPECTATOR) == 1 && !p->is_ai) return cost;
 
-	cost = CalculateCompanyValue(p) >> 2;
+	cost.AddCost(CalculateCompanyValue(p) >> 2);
 	if (flags & DC_EXEC) {
 		PlayerByte* b = p->share_owners;
 		int i;
@@ -1853,10 +1806,10 @@
  * @param p1 player to sell the shares from
  * @param p2 unused
  */
-int32 CmdSellShareInCompany(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSellShareInCompany(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Player *p;
-	int64 cost;
+	Money cost;
 
 	/* Check if buying shares is allowed (protection against modified clients */
 	if (!IsValidPlayer((PlayerID)p1) || !_patches.allow_shares) return CMD_ERROR;
@@ -1865,7 +1818,7 @@
 	p = GetPlayer((PlayerID)p1);
 
 	/* Those lines are here for network-protection (clients can be slow) */
-	if (GetAmountOwnedBy(p, _current_player) == 0) return 0;
+	if (GetAmountOwnedBy(p, _current_player) == 0) return CommandCost();
 
 	/* adjust it a little to make it less profitable to sell and buy */
 	cost = CalculateCompanyValue(p) >> 2;
@@ -1877,7 +1830,7 @@
 		*b = PLAYER_SPECTATOR;
 		InvalidateWindow(WC_COMPANY, p1);
 	}
-	return cost;
+	return CommandCost(cost);
 }
 
 /** Buy up another company.
@@ -1889,7 +1842,7 @@
  * @param p1 player/company to buy up
  * @param p2 unused
  */
-int32 CmdBuyCompany(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuyCompany(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Player *p;
 	PlayerID pid = (PlayerID)p1;
@@ -1908,13 +1861,14 @@
 	if (flags & DC_EXEC) {
 		DoAcquireCompany(p);
 	}
-	return p->bankrupt_value;
+	return CommandCost(p->bankrupt_value);
 }
 
 /** Prices */
 static void SaveLoad_PRIC()
 {
-	SlArray(&_price,      NUM_PRICES, SLE_INT32);
+	int vt = CheckSavegameVersion(65) ? (SLE_FILE_I32 | SLE_VAR_I64) : SLE_INT64;
+	SlArray(&_price,      NUM_PRICES, vt);
 	SlArray(&_price_frac, NUM_PRICES, SLE_UINT16);
 }
 
@@ -1922,18 +1876,21 @@
 static void SaveLoad_CAPR()
 {
 	uint num_cargo = CheckSavegameVersion(55) ? 12 : NUM_CARGO;
-	SlArray(&_cargo_payment_rates,      num_cargo, SLE_INT32);
+	int vt = CheckSavegameVersion(65) ? (SLE_FILE_I32 | SLE_VAR_I64) : SLE_INT64;
+	SlArray(&_cargo_payment_rates,      num_cargo, vt);
 	SlArray(&_cargo_payment_rates_frac, num_cargo, SLE_UINT16);
 }
 
 static const SaveLoad _economy_desc[] = {
-	SLE_VAR(Economy, max_loan,         SLE_INT32),
-	SLE_VAR(Economy, max_loan_unround, SLE_INT32),
-	SLE_VAR(Economy, fluct,            SLE_FILE_I16 | SLE_VAR_I32),
-	SLE_VAR(Economy, interest_rate,    SLE_UINT8),
-	SLE_VAR(Economy, infl_amount,      SLE_UINT8),
-	SLE_VAR(Economy, infl_amount_pr,   SLE_UINT8),
-	SLE_END()
+	SLE_CONDVAR(Economy, max_loan,         SLE_FILE_I32 | SLE_VAR_I64,  0, 64),
+	SLE_CONDVAR(Economy, max_loan,         SLE_INT64,                  65, SL_MAX_VERSION),
+	SLE_CONDVAR(Economy, max_loan_unround, SLE_FILE_I32 | SLE_VAR_I64,  0, 64),
+	SLE_CONDVAR(Economy, max_loan_unround, SLE_INT64,                  65, SL_MAX_VERSION),
+	    SLE_VAR(Economy, fluct,            SLE_FILE_I16 | SLE_VAR_I32),
+	    SLE_VAR(Economy, interest_rate,    SLE_UINT8),
+	    SLE_VAR(Economy, infl_amount,      SLE_UINT8),
+	    SLE_VAR(Economy, infl_amount_pr,   SLE_UINT8),
+	    SLE_END()
 };
 
 /** Economy variables */
--- a/src/economy.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/economy.h	Tue Jun 26 23:40:58 2007 +0000
@@ -9,8 +9,8 @@
 void SetPriceBaseMultiplier(uint price, byte factor);
 
 struct Economy {
-	int32 max_loan;         ///< Maximum possible loan
-	int32 max_loan_unround; ///< Economy fluctuation status
+	Money max_loan;         ///< Maximum possible loan
+	Money max_loan_unround; ///< Economy fluctuation status
 	int fluct;
 	byte interest_rate;     ///< Interest
 	byte infl_amount;       ///< inflation amount
@@ -65,7 +65,7 @@
 void DeleteSubsidyWithIndustry(IndustryID index);
 void DeleteSubsidyWithStation(StationID index);
 
-int32 GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, CargoID cargo_type);
+Money GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, CargoID cargo_type);
 uint MoveGoodsToStation(TileIndex tile, int w, int h, CargoID type, uint amount);
 
 void VehiclePayment(Vehicle *front_v);
--- a/src/elrail.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/elrail.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -395,6 +395,8 @@
 
 void DrawCatenary(const TileInfo *ti)
 {
+	if (_patches.disable_elrails) return;
+
 	if (MayHaveBridgeAbove(ti->tile) && IsBridgeAbove(ti->tile)) {
 		TileIndex head = GetNorthernBridgeEnd(ti->tile);
 
@@ -402,7 +404,6 @@
 			DrawCatenaryOnBridge(ti);
 		}
 	}
-	if (_patches.disable_elrails) return;
 
 	switch (GetTileType(ti->tile)) {
 		case MP_RAILWAY:
--- a/src/engine.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/engine.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -266,7 +266,7 @@
  * @param p1 engine-prototype offered
  * @param p2 unused
  */
-int32 CmdWantEnginePreview(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdWantEnginePreview(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Engine *e;
 
@@ -276,7 +276,7 @@
 
 	if (flags & DC_EXEC) AcceptEnginePreview(p1, _current_player);
 
-	return 0;
+	return CommandCost();
 }
 
 /* Determine if an engine type is a wagon (and not a loco) */
@@ -374,7 +374,7 @@
  * @param p1 engine ID to rename
  * @param p2 unused
  */
-int32 CmdRenameEngine(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRenameEngine(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	StringID str;
 
@@ -393,7 +393,7 @@
 		DeleteName(str);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -533,7 +533,7 @@
 	return er == NULL ? INVALID_ENGINE : er->to;
 }
 
-int32 AddEngineReplacement(EngineRenewList *erl, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags)
+CommandCost AddEngineReplacement(EngineRenewList *erl, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags)
 {
 	EngineRenew *er;
 
@@ -541,7 +541,7 @@
 	er = GetEngineReplacement(*erl, old_engine, group);
 	if (er != NULL) {
 		if (flags & DC_EXEC) er->to = new_engine;
-		return 0;
+		return CommandCost();
 	}
 
 	er = AllocateEngineRenew();
@@ -557,10 +557,10 @@
 		*erl = (EngineRenewList)er;
 	}
 
-	return 0;
+	return CommandCost();
 }
 
-int32 RemoveEngineReplacement(EngineRenewList *erl, EngineID engine, GroupID group, uint32 flags)
+CommandCost RemoveEngineReplacement(EngineRenewList *erl, EngineID engine, GroupID group, uint32 flags)
 {
 	EngineRenew *er = (EngineRenew *)(*erl);
 	EngineRenew *prev = NULL;
@@ -578,7 +578,7 @@
 				}
 				DeleteEngineRenew(er);
 			}
-			return 0;
+			return CommandCost();
 		}
 		prev = er;
 		er = er->next;
--- a/src/engine.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/engine.h	Tue Jun 26 23:40:58 2007 +0000
@@ -328,7 +328,7 @@
  * @param flags The calling command flags.
  * @return 0 on success, CMD_ERROR on failure.
  */
-int32 AddEngineReplacement(EngineRenewList* erl, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags);
+CommandCost AddEngineReplacement(EngineRenewList* erl, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags);
 
 /**
  * Remove an engine replacement from a given renewlist.
@@ -337,7 +337,7 @@
  * @param flags The calling command flags.
  * @return 0 on success, CMD_ERROR on failure.
  */
-int32 RemoveEngineReplacement(EngineRenewList* erl, EngineID engine, GroupID group, uint32 flags);
+CommandCost RemoveEngineReplacement(EngineRenewList* erl, EngineID engine, GroupID group, uint32 flags);
 
 /** When an engine is made buildable or is removed from being buildable, add/remove it from the build/autoreplace lists
  * @param type The type of engine
--- a/src/engine_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/engine_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -78,7 +78,8 @@
 		SetDParam(0, GetEngineCategoryName(engine));
 		DrawStringMultiCenter(150, 44, STR_8101_WE_HAVE_JUST_DESIGNED_A, 296);
 
-		DrawStringCentered(w->width >> 1, 80, GetCustomEngineName(engine), 0x10);
+		SetDParam(0, engine);
+		DrawStringCentered(w->width >> 1, 80, STR_ENGINE_NAME, 0x10);
 
 		dei = &_draw_engine_list[GetEngine(engine)->type];
 
@@ -177,7 +178,7 @@
 {
 	EngineID engine = ni->string_id;
 	SetDParam(0, GetEngineCategoryName(engine));
-	SetDParam(1, GetCustomEngineName(engine));
+	SetDParam(1, engine);
 	return STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE;
 }
 
@@ -193,7 +194,7 @@
 
 	GfxFillRect(25, 56, w->width - 25, w->height - 2, 10);
 
-	SetDParam(0, GetCustomEngineName(engine));
+	SetDParam(0, engine);
 	DrawStringMultiCenter(w->width >> 1, 57, STR_NEW_VEHICLE_TYPE, w->width - 2);
 
 	dei->engine_proc(w->width >> 1, 88, engine, 0);
--- a/src/fileio.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/fileio.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -410,7 +410,9 @@
 void DetermineBasePaths(const char *exe)
 {
 	char tmp[MAX_PATH];
-#ifdef WITH_PERSONAL_DIR
+#if defined(__MORPHOS__) || defined(__AMIGA__) || !defined(WITH_PERSONAL_DIR)
+	_searchpaths[SP_PERSONAL_DIR] = NULL;
+#else
 	const char *homedir = getenv("HOME");
 
 	if (homedir == NULL) {
@@ -422,14 +424,16 @@
 	AppendPathSeparator(tmp, MAX_PATH);
 
 	_searchpaths[SP_PERSONAL_DIR] = strdup(tmp);
-#else
-	_searchpaths[SP_PERSONAL_DIR] = NULL;
 #endif
 	_searchpaths[SP_SHARED_DIR] = NULL;
 
+#if defined(__MORPHOS__) || defined(__AMIGA__)
+	_searchpaths[SP_WORKING_DIR] = NULL;
+#else
 	getcwd(tmp, MAX_PATH);
 	AppendPathSeparator(tmp, MAX_PATH);
 	_searchpaths[SP_WORKING_DIR] = strdup(tmp);
+#endif
 
 	/* Change the working directory to that one of the executable */
 	ChangeWorkingDirectory((char*)exe);
@@ -437,9 +441,13 @@
 	AppendPathSeparator(tmp, MAX_PATH);
 	_searchpaths[SP_BINARY_DIR] = strdup(tmp);
 
+#if defined(__MORPHOS__) || defined(__AMIGA__)
+	_searchpaths[SP_INSTALLATION_DIR] = NULL;
+#else
 	snprintf(tmp, MAX_PATH, "%s", GLOBAL_DATA_DIR);
 	AppendPathSeparator(tmp, MAX_PATH);
 	_searchpaths[SP_INSTALLATION_DIR] = strdup(tmp);
+#endif
 #ifdef WITH_COCOA
 extern void cocoaSetApplicationBundleDir();
 	cocoaSetApplicationBundleDir();
@@ -524,6 +532,7 @@
 			/* The following characters are not allowed in filenames
 			 * on at least one of the supported operating systems: */
 			case ':': case '\\': case '*': case '?': case '/':
+			case '<': case '>': case '|': case '"':
 				*filename = '_';
 				break;
 		}
--- a/src/fileio.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/fileio.h	Tue Jun 26 23:40:58 2007 +0000
@@ -40,12 +40,13 @@
  * Types of searchpaths OpenTTD might use
  */
 enum Searchpath {
-	SP_WORKING_DIR,            ///< Search in the working directory
-	SP_PERSONAL_DIR,           ///< Search in the personal directory
-	SP_SHARED_DIR,             ///< Search in the shared directory, like 'Shared Files' under Windows
-	SP_BINARY_DIR,             ///< Search in the directory where the binary resides
-	SP_INSTALLATION_DIR,       ///< Search in the installation directory
-	SP_APPLICATION_BUNDLE_DIR, ///< Search within the application bundle
+	SP_FIRST_DIR,
+	SP_WORKING_DIR = SP_FIRST_DIR, ///< Search in the working directory
+	SP_PERSONAL_DIR,               ///< Search in the personal directory
+	SP_SHARED_DIR,                 ///< Search in the shared directory, like 'Shared Files' under Windows
+	SP_BINARY_DIR,                 ///< Search in the directory where the binary resides
+	SP_INSTALLATION_DIR,           ///< Search in the installation directory
+	SP_APPLICATION_BUNDLE_DIR,     ///< Search within the application bundle
 	NUM_SEARCHPATHS
 };
 
@@ -70,7 +71,7 @@
 }
 
 /** Iterator for all the search paths */
-#define FOR_ALL_SEARCHPATHS(sp) for (sp = SP_PERSONAL_DIR; sp < NUM_SEARCHPATHS; sp++) if (IsValidSearchPath(sp))
+#define FOR_ALL_SEARCHPATHS(sp) for (sp = SP_FIRST_DIR; sp < NUM_SEARCHPATHS; sp++) if (IsValidSearchPath(sp))
 
 FILE *FioFOpenFile(const char *filename, const char *mode = "rb", Subdirectory subdir = DATA_DIR);
 bool FioCheckFileExists(const char *filename, Subdirectory subdir = DATA_DIR);
--- a/src/functions.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/functions.h	Tue Jun 26 23:40:58 2007 +0000
@@ -20,12 +20,11 @@
 void TileLoop_Water(TileIndex tile);
 
 /* players.cpp */
-bool CheckPlayerHasMoney(int32 cost);
-void SubtractMoneyFromPlayer(int32 cost);
-void SubtractMoneyFromPlayerFract(PlayerID player, int32 cost);
+bool CheckPlayerHasMoney(CommandCost cost);
+void SubtractMoneyFromPlayer(CommandCost cost);
+void SubtractMoneyFromPlayerFract(PlayerID player, CommandCost cost);
 bool CheckOwnership(Owner owner);
 bool CheckTileOwnership(TileIndex tile);
-StringID GetPlayerNameString(PlayerID player, uint index);
 
 /* standard */
 void ShowInfo(const char *str);
@@ -79,16 +78,6 @@
 uint InteractiveRandomRange(uint max);
 
 /* texteff.cpp */
-void MoveAllTextEffects();
-void AddTextEffect(StringID msg, int x, int y, uint16 duration);
-void InitTextEffects();
-void DrawTextEffects(DrawPixelInfo *dpi);
-
-void InitTextMessage();
-void DrawTextMessage();
-void CDECL AddTextMessage(uint16 color, uint8 duration, const char *message, ...);
-void UndrawTextMessage();
-
 bool AddAnimatedTile(TileIndex tile);
 void DeleteAnimatedTile(TileIndex tile);
 void AnimateAnimatedTiles();
@@ -139,8 +128,8 @@
 bool EnsureNoVehicle(TileIndex tile);
 bool EnsureNoVehicleOnGround(TileIndex tile);
 void MarkAllViewportsDirty(int left, int top, int right, int bottom);
-void ShowCostOrIncomeAnimation(int x, int y, int z, int32 cost);
-void ShowFeederIncomeAnimation(int x, int y, int z, int32 cost);
+void ShowCostOrIncomeAnimation(int x, int y, int z, Money cost);
+void ShowFeederIncomeAnimation(int x, int y, int z, Money cost);
 
 bool CheckIfAuthorityAllows(TileIndex tile);
 Town *ClosestTownFromTile(TileIndex tile, uint threshold);
--- a/src/genworld_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/genworld_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -875,14 +875,12 @@
 		_tp.percent = percent_table[cls];
 	}
 
-	/* Don't update the screen too often. So update it once in every 200ms.
-	 * However, the _tick_counter increases by 8 every 30ms, so compensate
-	 * for that. */
-	if (!_network_dedicated && _tp.timer != 0 && _timer_counter - _tp.timer < (200 * 8 / 30)) return;
+	/* Don't update the screen too often. So update it once in every 200ms */
+	if (!_network_dedicated && _tp.timer != 0 && _realtime_tick - _tp.timer < 200) return;
 
 	/* Percentage is about the number of completed tasks, so 'current - 1' */
 	_tp.percent = percent_table[cls] + (percent_table[cls + 1] - percent_table[cls]) * (_tp.current == 0 ? 0 : _tp.current - 1) / _tp.total;
-	_tp.timer = _timer_counter;
+	_tp.timer = _realtime_tick;
 
 	if (_network_dedicated) {
 		static uint last_percent = 0;
--- a/src/gfx.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/gfx.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -19,12 +19,9 @@
 #include "genworld.h"
 #include "debug.h"
 #include "zoom.hpp"
+#include "texteff.hpp"
 #include "blitter/factory.hpp"
 
-#ifdef _DEBUG
-bool _dbg_screen_rect;
-#endif
-
 byte _dirkeys;        ///< 1 = left, 2 = up, 4 = right, 8 = down
 bool _fullscreen;
 CursorVars _cursor;
@@ -41,7 +38,7 @@
 byte _game_mode;
 byte _pause_game;
 int _pal_first_dirty;
-int _pal_last_dirty;
+int _pal_count_dirty;
 
 Colour _cur_palette[256];
 byte _stringwidth_table[FS_END][224];
@@ -61,59 +58,13 @@
 void GfxScroll(int left, int top, int width, int height, int xo, int yo)
 {
 	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
-	const void *src;
-	void *dst;
 
 	if (xo == 0 && yo == 0) return;
 
 	if (_cursor.visible) UndrawMouseCursor();
 	UndrawTextMessage();
 
-	if (yo > 0) {
-		/*Calculate pointers */
-		dst = blitter->MoveTo(_screen.dst_ptr, left, top + height - 1);
-		src = blitter->MoveTo(dst, 0, -yo);
-
-		/* Decrease height and increase top */
-		top += yo;
-		height -= yo;
-		assert(height > 0);
-
-		/* Adjust left & width */
-		if (xo >= 0) {
-			dst = blitter->MoveTo(dst, xo, 0);
-			left += xo;
-			width -= xo;
-		} else {
-			src = blitter->MoveTo(src, -xo, 0);
-			width += xo;
-		}
-
-		/* Negative height as we want to copy from bottom to top */
-		blitter->CopyFromBuffer(dst, src, width, -height, _screen.pitch);
-	} else {
-		/* Calculate pointers */
-		dst = blitter->MoveTo(_screen.dst_ptr, left, top);
-		src = blitter->MoveTo(dst, 0, -yo);
-
-		/* Decrese height. (yo is <=0). */
-		height += yo;
-		assert(height > 0);
-
-		/* Adjust left & width */
-		if (xo >= 0) {
-			dst = blitter->MoveTo(dst, xo, 0);
-			left += xo;
-			width -= xo;
-		} else {
-			src = blitter->MoveTo(src, -xo, 0);
-			width += xo;
-		}
-
-		/* the y-displacement may be 0 therefore we have to use memmove,
-		 * because source and destination may overlap */
-		blitter->MoveBuffer(dst, src, width, height);
-	}
+	blitter->ScrollBuffer(_screen.dst_ptr, left, top, width, height, xo, yo);
 	/* This part of the screen is now dirty. */
 	_video_driver->make_dirty(left, top, width, height);
 }
@@ -148,10 +99,7 @@
 
 	if (!HASBIT(color, PALETTE_MODIFIER_GREYOUT)) {
 		if (!HASBIT(color, USE_COLORTABLE)) {
-			do {
-				blitter->SetHorizontalLine(dst, right, (uint8)color);
-				dst = blitter->MoveTo(dst, 0, 1);
-			} while (--bottom);
+			blitter->DrawRect(dst, right, bottom, (uint8)color);
 		} else {
 			blitter->DrawColorMappingRect(dst, right, bottom, GB(color, 0, PALETTE_WIDTH));
 		}
@@ -164,79 +112,23 @@
 	}
 }
 
-static void GfxSetPixel(int x, int y, int color)
-{
-	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
-	const DrawPixelInfo *dpi = _cur_dpi;
-
-	if ((x -= dpi->left) < 0 || x >= dpi->width || (y -= dpi->top) < 0 || y >= dpi->height) return;
-	blitter->SetPixel(dpi->dst_ptr, x, y, color);
-}
-
 void GfxDrawLine(int x, int y, int x2, int y2, int color)
 {
-	int dy;
-	int dx;
-	int stepx;
-	int stepy;
-	int frac;
-
-	/* Check clipping first */
-	{
-		DrawPixelInfo *dpi = _cur_dpi;
-		int t;
-
-		if (x < dpi->left && x2 < dpi->left) return;
-
-		if (y < dpi->top && y2 < dpi->top) return;
-
-		t = dpi->left + dpi->width;
-		if (x > t && x2 > t) return;
-
-		t = dpi->top + dpi->height;
-		if (y > t && y2 > t) return;
-	}
-
-	dy = (y2 - y) * 2;
-	if (dy < 0) {
-		dy = -dy;
-		stepy = -1;
-	} else {
-		stepy = 1;
-	}
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
+	DrawPixelInfo *dpi = _cur_dpi;
 
-	dx = (x2 - x) * 2;
-	if (dx < 0) {
-		dx = -dx;
-		stepx = -1;
-	} else {
-		stepx = 1;
-	}
+	x -= dpi->left;
+	x2 -= dpi->left;
+	y -= dpi->top;
+	y2 -= dpi->top;
 
-	GfxSetPixel(x, y, color);
-	if (dx > dy) {
-		frac = dy - (dx >> 1);
-		while (x != x2) {
-			if (frac >= 0) {
-				y += stepy;
-				frac -= dx;
-			}
-			x += stepx;
-			frac += dy;
-			GfxSetPixel(x, y, color);
-		}
-	} else {
-		frac = dx - (dy >> 1);
-		while (y != y2) {
-			if (frac >= 0) {
-				x += stepx;
-				frac -= dy;
-			}
-			y += stepy;
-			frac += dx;
-			GfxSetPixel(x, y, color);
-		}
-	}
+	/* Check clipping */
+	if (x < 0 && x2 < 0) return;
+	if (y < 0 && y2 < 0) return;
+	if (x > dpi->width  && x2 > dpi->width)  return;
+	if (y > dpi->height && y2 > dpi->height) return;
+
+	blitter->DrawLine(dpi->dst_ptr, x, y, x2, y2, dpi->width, dpi->height, color);
 }
 
 
@@ -768,16 +660,17 @@
 {
 	memcpy(_cur_palette, _palettes[_use_dos_palette ? 1 : 0], sizeof(_cur_palette));
 
+	DoPaletteAnimations();
 	_pal_first_dirty = 0;
-	_pal_last_dirty = 255;
-	DoPaletteAnimations();
+	_pal_count_dirty = 255;
 }
 
-#define EXTR(p, q) (((uint16)(_timer_counter * (p)) * (q)) >> 16)
-#define EXTR2(p, q) (((uint16)(~_timer_counter * (p)) * (q)) >> 16)
+#define EXTR(p, q) (((uint16)(_palette_animation_counter * (p)) * (q)) >> 16)
+#define EXTR2(p, q) (((uint16)(~_palette_animation_counter * (p)) * (q)) >> 16)
 
 void DoPaletteAnimations()
 {
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
 	const Colour *s;
 	Colour *d;
 	/* Amount of colors to be rotated.
@@ -785,15 +678,13 @@
 	 * 245-254 for DOS and 217-226 for Windows.  */
 	const ExtraPaletteValues *ev = &_extra_palette_values;
 	int c = _use_dos_palette ? 38 : 28;
-	Colour old_val[38]; // max(38, 28)
+	Colour old_val[38];
 	uint i;
 	uint j;
-	int old_tc = _timer_counter;
+	uint old_tc = _palette_animation_counter;
 
-	/* We can only update the palette in 8bpp for now */
-	/* TODO -- We need support for other bpps too! */
-	if (BlitterFactoryBase::GetCurrentBlitter() != NULL && BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() != 8) {
-		_timer_counter = 0;
+	if (blitter != NULL && blitter->UsePaletteAnimation() == Blitter::PALETTE_ANIMATION_NONE) {
+		_palette_animation_counter = 0;
 	}
 
 	d = &_cur_palette[217];
@@ -836,7 +727,7 @@
 
 	/* Radio tower blinking */
 	{
-		byte i = (_timer_counter >> 1) & 0x7F;
+		byte i = (_palette_animation_counter >> 1) & 0x7F;
 		byte v;
 
 		(v = 255, i < 0x3f) ||
@@ -887,12 +778,14 @@
 		}
 	}
 
-	if (memcmp(old_val, &_cur_palette[217], c * sizeof(*old_val)) != 0) {
-		if (_pal_first_dirty > 217) _pal_first_dirty = 217;
-		if (_pal_last_dirty < 217 + c) _pal_last_dirty = 217 + c;
+	if (blitter != NULL && blitter->UsePaletteAnimation() == Blitter::PALETTE_ANIMATION_NONE) {
+		_palette_animation_counter = old_tc;
+	} else {
+		if (memcmp(old_val, &_cur_palette[217], c * sizeof(*old_val)) != 0) {
+			_pal_first_dirty = 217;
+			_pal_count_dirty = c;
+		}
 	}
-
-	if (old_tc != _timer_counter) _timer_counter = old_tc;
 }
 
 
@@ -940,7 +833,7 @@
 	if (_cursor.visible) {
 		Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
 		_cursor.visible = false;
-		blitter->CopyFromBuffer(blitter->MoveTo(_screen.dst_ptr, _cursor.draw_pos.x, _cursor.draw_pos.y), _cursor_backup, _cursor.draw_size.x, _cursor.draw_size.y, _cursor.draw_size.x);
+		blitter->CopyFromBuffer(blitter->MoveTo(_screen.dst_ptr, _cursor.draw_pos.x, _cursor.draw_pos.y), _cursor_backup, _cursor.draw_size.x, _cursor.draw_size.y);
 		_video_driver->make_dirty(_cursor.draw_pos.x, _cursor.draw_pos.y, _cursor.draw_size.x, _cursor.draw_size.y);
 	}
 }
@@ -987,7 +880,7 @@
 	assert(blitter->BufferSize(w, h) < (int)sizeof(_cursor_backup));
 
 	/* Make backup of stuff below cursor */
-	blitter->CopyToBuffer(blitter->MoveTo(_screen.dst_ptr, _cursor.draw_pos.x, _cursor.draw_pos.y), _cursor_backup, _cursor.draw_size.x, _cursor.draw_size.y, _cursor.draw_size.x);
+	blitter->CopyToBuffer(blitter->MoveTo(_screen.dst_ptr, _cursor.draw_pos.x, _cursor.draw_pos.y), _cursor_backup, _cursor.draw_size.x, _cursor.draw_size.y);
 
 	/* Draw cursor on screen */
 	_cur_dpi = &_screen;
@@ -999,20 +892,6 @@
 	_cursor.dirty = false;
 }
 
-#if defined(_DEBUG)
-static void DbgScreenRect(int left, int top, int right, int bottom)
-{
-	DrawPixelInfo dp;
-	DrawPixelInfo *old;
-
-	old = _cur_dpi;
-	_cur_dpi = &dp;
-	dp = _screen;
-	GfxFillRect(left, top, right - 1, bottom - 1, rand() & 255);
-	_cur_dpi = old;
-}
-#endif
-
 void RedrawScreenRect(int left, int top, int right, int bottom)
 {
 	assert(right <= _screen.width && bottom <= _screen.height);
@@ -1026,12 +905,7 @@
 	}
 	UndrawTextMessage();
 
-#if defined(_DEBUG)
-	if (_dbg_screen_rect)
-		DbgScreenRect(left, top, right, bottom);
-	else
-#endif
-		DrawOverlappedWindowForAll(left, top, right, bottom);
+	DrawOverlappedWindowForAll(left, top, right, bottom);
 
 	_video_driver->make_dirty(left, top, right - left, bottom - top);
 }
--- a/src/gfx.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/gfx.h	Tue Jun 26 23:40:58 2007 +0000
@@ -166,7 +166,7 @@
 extern byte _pause_game;
 
 extern int _pal_first_dirty;
-extern int _pal_last_dirty;
+extern int _pal_count_dirty;
 extern int _num_resolutions;
 extern uint16 _resolutions[32][2];
 extern uint16 _cur_resolution[2];
@@ -302,9 +302,4 @@
 	IS_PALETTE_COLOR = 0x100, ///< color value is already a real palette color index, not an index of a StringColor
 };
 
-
-#ifdef _DEBUG
-extern bool _dbg_screen_rect;
-#endif
-
 #endif /* GFX_H */
--- a/src/graph_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/graph_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -64,7 +64,7 @@
 	uint height;    ///< The height of the graph in pixels.
 	StringID format_str_y_axis;
 	byte colors[GRAPH_MAX_DATASETS];
-	int64 cost[GRAPH_MAX_DATASETS][24]; ///< last 2 years
+	Money cost[GRAPH_MAX_DATASETS][24]; ///< last 2 years
 };
 
 static void DrawGraph(const GraphDrawer *gw)
@@ -132,7 +132,7 @@
 	for (int i = 0; i < gw->num_dataset; i++) {
 		if (!HASBIT(gw->excluded_data, i)) {
 			for (int j = 0; j < gw->num_on_x_axis; j++) {
-				int64 datapoint = gw->cost[i][j];
+				Money datapoint = gw->cost[i][j];
 
 				if (datapoint != INVALID_DATAPOINT) {
 					/* For now, if the graph has negative values the scaling is
@@ -162,7 +162,7 @@
 
 	for (int i = 0; i < GRAPH_NUM_LINES_Y; i++) {
 		SetDParam(0, gw->format_str_y_axis);
-		SetDParam64(1, y_label);
+		SetDParam(1, y_label);
 		DrawStringRightAligned(x, y, STR_0170, GRAPH_AXIS_LABEL_COLOUR);
 
 		y_label -= y_label_separation;
@@ -214,7 +214,7 @@
 			uint prev_y = INVALID_DATAPOINT_POS;
 
 			for (int j = 0; j < gw->num_on_x_axis; j++) {
-				int64 datapoint = gw->cost[i][j];
+				Money datapoint = gw->cost[i][j];
 
 				if (datapoint != INVALID_DATAPOINT) {
 					/* XXX: This can overflow if x_axis_offset * datapoint is
@@ -270,9 +270,8 @@
 
 				DrawPlayerIcon(p->index, 4, 18 + p->index * 12);
 
-				SetDParam(0, p->name_1);
-				SetDParam(1, p->name_2);
-				SetDParam(2, GetPlayerNameString(p->index, 3));
+				SetDParam(0, p->index);
+				SetDParam(1, p->index);
 				DrawString(21, 17 + p->index * 12, STR_7021, HASBIT(_legend_excluded_players, p->index) ? 0x10 : 0xC);
 			}
 			break;
@@ -875,10 +874,9 @@
 			for (uint i = 0; i != pl_num; i++) {
 				p = plist[i];
 				SetDParam(0, i + STR_01AC_1ST);
-				SetDParam(1, p->name_1);
-				SetDParam(2, p->name_2);
-				SetDParam(3, GetPlayerNameString(p->index, 4));
-				SetDParam(5, GetPerformanceTitleFromValue(p->old_economy[1].performance_history));
+				SetDParam(1, p->index);
+				SetDParam(2, p->index);
+				SetDParam(3, GetPerformanceTitleFromValue(p->old_economy[1].performance_history));
 
 				DrawString(2, 15 + i * 10, i == 0 ? STR_7054 : STR_7055, 0);
 				DrawPlayerIcon(p->index, 27, 16 + i * 10);
--- a/src/group_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/group_cmd.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -93,7 +93,7 @@
  * @param p1   vehicle type
  * @param p2   unused
  */
-int32 CmdCreateGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdCreateGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	VehicleType vt = (VehicleType)p1;
 	if (!IsPlayerBuildableVehicleType(vt)) return CMD_ERROR;
@@ -103,14 +103,14 @@
 
 	if (flags & DC_EXEC) {
 		g->owner = _current_player;
-		g->string_id = STR_SV_GROUP_NAME;
+		g->string_id = STR_EMPTY;
 		g->replace_protection = false;
 		g->vehicle_type = vt;
 
 		InvalidateWindowData(GetWCForVT(vt), (vt << 11) | VLW_GROUP_LIST | _current_player);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -121,7 +121,7 @@
  *      - p1 bit 0-15 : GroupID
  * @param p2   unused
  */
-int32 CmdDeleteGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdDeleteGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidGroupID(p1)) return CMD_ERROR;
 
@@ -156,7 +156,7 @@
 		InvalidateWindowData(GetWCForVT(vt), (vt << 11) | VLW_GROUP_LIST | _current_player);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -167,7 +167,7 @@
  *   - p1 bit 0-15 : GroupID
  * @param p2   unused
  */
-int32 CmdRenameGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRenameGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidGroupID(p1) || StrEmpty(_cmd_text)) return CMD_ERROR;
 
@@ -187,7 +187,7 @@
 		InvalidateWindowData(GetWCForVT(g->vehicle_type), (g->vehicle_type << 11) | VLW_GROUP_LIST | _current_player);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -199,7 +199,7 @@
  * @param p2   vehicle to add to a group
  *   - p2 bit 0-15 : VehicleID
  */
-int32 CmdAddVehicleGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdAddVehicleGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	GroupID new_g = p1;
 
@@ -235,7 +235,7 @@
 		InvalidateWindowData(GetWCForVT(v->type), (v->type << 11) | VLW_GROUP_LIST | _current_player);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /**
@@ -245,7 +245,7 @@
  *  - p1 bit 0-15 : GroupID
  * @param p2   type of vehicles
  */
-int32 CmdAddSharedVehicleGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdAddSharedVehicleGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	VehicleType type = (VehicleType)p2;
 	if (!IsValidGroupID(p1) || !IsPlayerBuildableVehicleType(type)) return CMD_ERROR;
@@ -271,7 +271,7 @@
 		InvalidateWindowData(GetWCForVT(type), (type << 11) | VLW_GROUP_LIST | _current_player);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -282,7 +282,7 @@
  * - p1 bit 0-15 : GroupID
  * @param p2   type of vehicles
  */
-int32 CmdRemoveAllVehiclesGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveAllVehiclesGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	VehicleType type = (VehicleType)p2;
 	if (!IsValidGroupID(p1) || !IsPlayerBuildableVehicleType(type)) return CMD_ERROR;
@@ -307,7 +307,7 @@
 		InvalidateWindowData(GetWCForVT(type), (type << 11) | VLW_GROUP_LIST | _current_player);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -319,7 +319,7 @@
  * @param p2
  * - p2 bit 0    : 1 to set or 0 to clear protection.
  */
-int32 CmdSetGroupReplaceProtection(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSetGroupReplaceProtection(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidGroupID(p1)) return CMD_ERROR;
 
@@ -332,7 +332,7 @@
 		InvalidateWindowData(GetWCForVT(g->vehicle_type), (g->vehicle_type << 11) | VLW_GROUP_LIST | _current_player);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /**
--- a/src/group_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/group_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -78,13 +78,13 @@
 	if (ga != last_group[0]) {
 		last_group[0] = ga;
 		SetDParam(0, ga->index);
-		GetString(last_name[0], ga->string_id, lastof(last_name[0]));
+		GetString(last_name[0], STR_GROUP_NAME, lastof(last_name[0]));
 	}
 
 	if (gb != last_group[1]) {
 		last_group[1] = gb;
 		SetDParam(0, gb->index);
-		GetString(last_name[1], gb->string_id, lastof(last_name[1]));
+		GetString(last_name[1], STR_GROUP_NAME, lastof(last_name[1]));
 	}
 
 	r = strcmp(last_name[0], last_name[1]); // sort by name
@@ -344,9 +344,8 @@
 			/* If selected_group == DEFAULT_GROUP, draw the standard caption
 			   We list all vehicles */
 			if (IsDefaultGroupID(gv->group_sel)) {
-				SetDParam(0, p->name_1);
-				SetDParam(1, p->name_2);
-				SetDParam(2, gv->l.list_length);
+				SetDParam(0, p->index);
+				SetDParam(1, gv->l.list_length);
 
 				switch (gv->vehicle_type) {
 					case VEH_TRAIN:
@@ -420,7 +419,7 @@
 
 				/* draw the selected group in white, else we draw it in black */
 				SetDParam(0, g->index);
-				DrawString(10, y1, STR_SV_GROUP_NAME, (gv->group_sel == g->index) ? 12 : 16);
+				DrawString(10, y1, STR_GROUP_NAME, (gv->group_sel == g->index) ? 12 : 16);
 
 				/* draw the number of vehicles of the group */
 				SetDParam(0, g->num_vehicle);
@@ -567,7 +566,7 @@
 					const Group *g = GetGroup(gv->group_sel);
 
 					SetDParam(0, g->index);
-					ShowQueryString(g->string_id, STR_GROUP_RENAME_CAPTION, 31, 150, w, CS_ALPHANUMERAL);
+					ShowQueryString(STR_GROUP_NAME, STR_GROUP_RENAME_CAPTION, 31, 150, w, CS_ALPHANUMERAL);
 				}	break;
 
 
--- a/src/gui.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/gui.h	Tue Jun 26 23:40:58 2007 +0000
@@ -105,7 +105,7 @@
 void ShowPlayerFinances(PlayerID player);
 void ShowPlayerCompany(PlayerID player);
 
-void ShowEstimatedCostOrIncome(int32 cost, int x, int y);
+void ShowEstimatedCostOrIncome(Money cost, int x, int y);
 void ShowErrorMessage(StringID msg_1, StringID msg_2, int x, int y);
 
 void DrawStationCoverageAreaText(int sx, int sy, uint mask,int rad);
--- a/src/industry_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/industry_cmd.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -30,6 +30,8 @@
 #include "water_map.h"
 #include "tree_map.h"
 #include "cargotype.h"
+#include "newgrf_industrytiles.h"
+#include "newgrf_callbacks.h"
 
 void ShowIndustryViewWindow(int industry);
 void BuildOilRig(TileIndex tile);
@@ -241,18 +243,32 @@
 
 static void DrawTile_Industry(TileInfo *ti)
 {
-	const IndustryGfx gfx = GetIndustryGfx(ti->tile);
-	const Industry *ind;
+	IndustryGfx gfx = GetIndustryGfx(ti->tile);
+	Industry *ind = GetIndustryByTile(ti->tile);
+	const IndustryTileSpec *indts = GetIndustryTileSpec(gfx);
 	const DrawBuildingsTileStruct *dits;
 	byte z;
 	SpriteID image;
 	SpriteID pal;
 
-	/* Pointer to industry */
-	ind = GetIndustryByTile(ti->tile);
+	/* Retrieve pointer to the draw industry tile struct */
+	if (gfx >= NEW_INDUSTRYTILEOFFSET) {
+		/* Draw the tile using the specialized method of newgrf industrytile.
+		 * DrawNewIndustry will return false if ever the resolver could not
+		 * find any sprite to display.  So in this case, we will jump on the
+		 * substitute gfx instead. */
+		if (indts->grf_prop.spritegroup != NULL && DrawNewIndustryTile(ti, ind, gfx, indts)) {
+			return;
+		} else {
+			/* No sprite group (or no valid one) found, meaning no graphics associated.
+			 * Use the substitute one instead */
+			gfx = indts->grf_prop.subst_id;
+			/* And point the industrytile spec accordingly */
+			indts = GetIndustryTileSpec(indts->grf_prop.subst_id);
+		}
+	}
 
-	/* Retrieve pointer to the draw industry tile struct */
-	dits = &_industry_draw_tile_data[gfx << 2 | (GetIndustryTileSpec(gfx)->anim_state ?
+	dits = &_industry_draw_tile_data[gfx << 2 | (indts->anim_state ?
 			GetIndustryAnimationState(ti->tile) & 3 :
 			GetIndustryConstructionStage(ti->tile))];
 
@@ -266,14 +282,12 @@
 	z = ti->z;
 	/* Add bricks below the industry? */
 	if (ti->tileh != SLOPE_FLAT) {
-		AddSortableSpriteToDraw(SPR_FOUNDATION_BASE + ti->tileh, PAL_NONE, ti->x, ti->y, 16, 16, 7, z);
-		AddChildSpriteScreen(image, pal, 31, 1);
+		DrawFoundation(ti, ti->tileh);
 		z += TILE_HEIGHT;
-	} else {
-		/* Else draw regular ground */
-		DrawGroundSprite(image, pal);
 	}
 
+	DrawGroundSprite(image, pal);
+
 	/* Add industry on top of the ground? */
 	image = dits->building.sprite;
 	if (image != 0) {
@@ -336,7 +350,7 @@
 	}
 }
 
-static int32 ClearTile_Industry(TileIndex tile, byte flags)
+static CommandCost ClearTile_Industry(TileIndex tile, byte flags)
 {
 	Industry *i = GetIndustryByTile(tile);
 	const IndustrySpec *indspec = GetIndustrySpec(i->type);
@@ -354,7 +368,7 @@
 	}
 
 	if (flags & DC_EXEC) DeleteIndustry(i);
-	return 0;
+	return CommandCost();
 }
 
 static void TransportIndustryGoods(TileIndex tile)
@@ -1469,7 +1483,7 @@
  * @param p2 unused
  * @return index of the newly create industry, or CMD_ERROR if it failed
  */
-int32 CmdBuildIndustry(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildIndustry(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	int num;
 	const IndustryTileTable * const *itt;
@@ -1505,7 +1519,7 @@
 
 	if (CreateNewIndustryHelper(tile, p1, flags, indspec, it) == NULL) return CMD_ERROR;
 
-	return (_price.build_industry >> 8) * indspec->cost_multiplier;
+	return CommandCost((_price.build_industry >> 8) * indspec->cost_multiplier);
 }
 
 
@@ -1517,7 +1531,7 @@
 	return CreateNewIndustryHelper(tile, type, DC_EXEC, indspec, it);
 }
 
-static const byte _numof_industry_table[5][12] = {
+static const byte _numof_industry_table[5][11] = {
 	/* difficulty settings for number of industries */
 	{0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0},   //none
 	{0, 1, 1, 1, 1, 1, 1, 1,  1,  1,  1},   //very low
@@ -1624,13 +1638,17 @@
 				int mag;
 
 				new_prod = old_prod = i->production_rate[j];
-				if (CHANCE16I(20, 1024, r))
-					new_prod -= ((RandomRange(50) + 10) * old_prod) >> 8;
-				if (CHANCE16I(20 + (i->last_month_pct_transported[j] * 20 >> 8), 1024, r >> 16))
-					new_prod += ((RandomRange(50) + 10) * old_prod) >> 8;
 
-				new_prod = clamp(new_prod, 0, 255);
-				if (new_prod == old_prod) {
+				if (CHANCE16I(20, 1024, r)) new_prod -= max(((RandomRange(50) + 10) * old_prod) >> 8, 1U);
+				/* Chance of increasing becomes better when more is transported */
+				if (CHANCE16I(20 + (i->last_month_pct_transported[j] * 20 >> 8), 1024, r >> 16) &&
+						(indspec->behaviour & INDUSTRYBEH_DONT_INCR_PROD) == 0) {
+					new_prod += max(((RandomRange(50) + 10) * old_prod) >> 8, 1U);
+				}
+
+				new_prod = clamp(new_prod, 1, 255);
+				/* Do not stop closing the industry when it has the lowest possible production rate */
+				if (new_prod == old_prod && old_prod > 1) {
 					closeit = false;
 					continue;
 				}
@@ -1638,8 +1656,8 @@
 				percent = new_prod * 100 / old_prod - 100;
 				i->production_rate[j] = new_prod;
 
-				if (new_prod >= indspec->production_rate[j] / 4)
-					closeit = false;
+				/* Close the industry when it has the lowest possible production rate */
+				if (new_prod > 1) closeit = false;
 
 				mag = abs(percent);
 				if (mag >= 10) {
--- a/src/landscape.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/landscape.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -22,7 +22,6 @@
 #include "water_map.h"
 #include "tgp.h"
 #include "genworld.h"
-#include "heightmap.h"
 
 extern const TileTypeProcs
 	_tile_type_clear_procs,
@@ -253,7 +252,7 @@
 		if (f < 15) {
 			/* leveled foundation
 			 * Use the original slope sprites if NW and NE borders should be visible */
-			if (sprite_base  == SPR_SLOPES_BASE - 15) sprite_base = SPR_FOUNDATION_BASE;
+			if (sprite_base == SPR_SLOPES_BASE - 15) sprite_base = SPR_FOUNDATION_BASE;
 
 			AddSortableSpriteToDraw(sprite_base + f, PAL_NONE, ti->x, ti->y, 16, 16, 7, ti->z);
 			ti->z += TILE_HEIGHT;
@@ -367,7 +366,7 @@
  * @param p1 unused
  * @param p2 unused
  */
-int32 CmdLandscapeClear(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdLandscapeClear(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 
@@ -380,9 +379,9 @@
  * @param flags of operation to conduct
  * @param p2 unused
  */
-int32 CmdClearArea(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdClearArea(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 cost, ret, money;
+	CommandCost cost, ret, money;
 	int ex;
 	int ey;
 	int sx, sy;
@@ -401,20 +400,19 @@
 	if (ex < sx) Swap(ex, sx);
 	if (ey < sy) Swap(ey, sy);
 
-	money = GetAvailableMoneyForCommand();
-	cost = 0;
+	money.AddCost(GetAvailableMoneyForCommand());
 
 	for (x = sx; x <= ex; ++x) {
 		for (y = sy; y <= ey; ++y) {
 			ret = DoCommand(TileXY(x, y), 0, 0, flags & ~DC_EXEC, CMD_LANDSCAPE_CLEAR);
 			if (CmdFailed(ret)) continue;
-			cost += ret;
 			success = true;
 
 			if (flags & DC_EXEC) {
-				if (ret > 0 && (money -= ret) < 0) {
-					_additional_cash_required = ret;
-					return cost - ret;
+				money.AddCost(-ret.GetCost());
+				if (ret.GetCost() > 0 && money.GetCost() < 0) {
+					_additional_cash_required = ret.GetCost();
+					return cost;
 				}
 				DoCommand(TileXY(x, y), 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 
@@ -426,6 +424,7 @@
 					);
 				}
 			}
+			cost.AddCost(ret);
 		}
 	}
 
--- a/src/lang/american.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/american.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Off edge of map
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Too close to edge of map
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Not enough cash - requires {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Flat land required
 STR_0008_WAITING                                                :{BLACK}Waiting: {WHITE}{STRING}
@@ -495,7 +495,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Local authority: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :None
 STR_01AA_NAME                                                   :{BLACK}Name
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1st
@@ -778,6 +778,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Difficulty settings
 STR_02C7_CONFIG_PATCHES                                         :Configure patches
 STR_NEWGRF_SETTINGS                                             :Newgrf settings
+STR_TRANSPARENCY_OPTIONS                                        :Transparency options
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Town names displayed
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Station names displayed
@@ -805,7 +806,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Map of world
 STR_EXTRA_VIEW_PORT                                             :Extra viewport
 STR_SIGN_LIST                                                   :Sign list
-STR_TRANSPARENCY_OPTIONS                                        :Transparency options
 STR_02DF_TOWN_DIRECTORY                                         :Town directory
 STR_TOWN_POPULATION                                             :{BLACK}World population: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Viewport {COMMA}
@@ -1103,6 +1103,9 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Map scrollwheel speed: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automatically pause when starting a new game: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Use the advanced vehicle list: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Use loading indicators: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Enable timetabling for vehicles: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Show timetable in ticks rather than days: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Max trains per player: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Max road vehicles per player: {ORANGE}{STRING}
@@ -1186,7 +1189,7 @@
 STR_CHEATS                                                      :{WHITE}Cheats
 STR_CHEATS_TIP                                                  :{BLACK}Checkboxes indicate if you have used this cheat before
 STR_CHEATS_WARNING                                              :{BLACK}Warning! You are about to betray your fellow competitors. Keep in mind that such a disgrace will be remembered for eternity.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Increase money by {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Increase money by {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Playing as player: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Magic bulldozer (remove industries, unmovables): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tunnels may cross each other: {ORANGE}{STRING}
@@ -1397,6 +1400,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :English
 STR_NETWORK_LANG_GERMAN                                         :German
 STR_NETWORK_LANG_FRENCH                                         :French
+STR_NETWORK_LANG_BRAZILIAN                                      :Brazilian
+STR_NETWORK_LANG_BULGARIAN                                      :Bulgarian
+STR_NETWORK_LANG_CHINESE                                        :Chinese
+STR_NETWORK_LANG_CZECH                                          :Czech
+STR_NETWORK_LANG_DANISH                                         :Danish
+STR_NETWORK_LANG_DUTCH                                          :Dutch
+STR_NETWORK_LANG_ESPERANTO                                      :Esperanto
+STR_NETWORK_LANG_FINNISH                                        :Finnish
+STR_NETWORK_LANG_HUNGARIAN                                      :Hungarian
+STR_NETWORK_LANG_ICELANDIC                                      :Icelandic
+STR_NETWORK_LANG_ITALIAN                                        :Italian
+STR_NETWORK_LANG_JAPANESE                                       :Japanese
+STR_NETWORK_LANG_KOREAN                                         :Korean
+STR_NETWORK_LANG_LITHUANIAN                                     :Lithuanian
+STR_NETWORK_LANG_NORWEGIAN                                      :Norwegian
+STR_NETWORK_LANG_POLISH                                         :Polish
+STR_NETWORK_LANG_PORTUGUESE                                     :Portuguese
+STR_NETWORK_LANG_ROMANIAN                                       :Romanian
+STR_NETWORK_LANG_RUSSIAN                                        :Russian
+STR_NETWORK_LANG_SLOVAK                                         :Slovak
+STR_NETWORK_LANG_SLOVENIAN                                      :Slovenian
+STR_NETWORK_LANG_SPANISH                                        :Spanish
+STR_NETWORK_LANG_SWEDISH                                        :Swedish
+STR_NETWORK_LANG_TURKISH                                        :Turkish
+STR_NETWORK_LANG_UKRAINIAN                                      :Ukrainian
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Multiplayer game lobby
@@ -1416,9 +1444,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Company name:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Inauguration:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Company value:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Current balance:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Last year's income:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Company value:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Current balance:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Last year's income:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Performance:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Vehicles:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1653,7 +1681,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Building must be demolished first
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Population: {ORANGE}{COMMA}{BLACK}  Houses: {ORANGE}{COMMA}
@@ -1686,7 +1714,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Show information on local authority
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} local authority
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Transport company ratings:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subsidies
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Subsidies on offer for services taking:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} from {STRING} to {STRING}
@@ -1757,7 +1785,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...tree already here
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...site unsuitable
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Can't plant tree here...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...too many signs
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Can't place sign here...
 STR_280A_SIGN                                                   :Sign
@@ -1866,6 +1894,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Coast or riverbank
 STR_3806_SHIP_DEPOT                                             :Ship depot
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...Can't build on water
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Must demolish canal first
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Save Game
@@ -1875,9 +1904,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte{P "" s} free
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Unable to read drive
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Game Save Failed
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Game Save Failed{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Unable to delete file
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Game Load Failed
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Game Load Failed{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Internal error: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Broken savegame - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Savegame is made with newer version
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :File not readable
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :File not writable
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}List of drives, directories and saved-game files
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Currently selected name for saved-game
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Delete the currently selected saved-game
@@ -2048,8 +2082,7 @@
 STR_SV_STNAME_LOWER                                             :Lower {STRING}
 STR_SV_STNAME_HELIPORT                                          :{STRING} Heliport
 STR_SV_STNAME_FOREST                                            :{STRING} Forest
-
-STR_SV_GROUP_NAME                                               :{GROUP}
+STR_SV_STNAME_FALLBACK                                          :{STRING} Station #{NUM}
 
 ############ end of savegame specific region!
 
@@ -2129,7 +2162,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Player {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}New Face
 STR_7005_COLOR_SCHEME                                           :{BLACK}Color Scheme
@@ -2141,7 +2174,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :President's Name
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Can't change company name...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Can't change president's name...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finances {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finances {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Expenditure/Income
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Construction
@@ -2157,20 +2190,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Ship Income
 STR_701C_LOAN_INTEREST                                          :{GOLD}Loan Interest
 STR_701D_OTHER                                                  :{GOLD}Other
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Total:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Income Graph
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Operating Profit Graph
 STR_7026_BANK_BALANCE                                           :{WHITE}Bank Balance
 STR_7027_LOAN                                                   :{WHITE}Loan
-STR_MAX_LOAN                                                    :{WHITE}Max Loan:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Borrow {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Repay {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Max Loan:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Borrow {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Repay {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...maximum permitted loan size is {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Can't borrow any more money...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...no loan to repay
@@ -2209,8 +2242,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Company performance ratings (maximum rating=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Company values
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Company League Table
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Transport company in trouble!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} will be sold off or declared bankrupt unless performance increases soon!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(President)
@@ -2248,7 +2281,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}World Recession!{}{}Financial experts fear worst as economy slumps!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Recession Over!{}{}Upturn in trade gives confidence to industries as economy strengthens!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Toggle large/small window size
-STR_7076_COMPANY_VALUE                                          :{GOLD}Company value: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Company value: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Buy 25% share in company
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Sell 25% share in company
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Buy 25% share in this company
@@ -2560,7 +2593,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Train Depot
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Citizens celebrate . . .{}First train arrives at {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Details)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Details)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Train in the way
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2581,6 +2614,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Go non-stop to {TOWN} Train Depot
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Service non-stop at {TOWN} Train Depot
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Travel (not timetabled)
+STR_TIMETABLE_TRAVEL_FOR                                        :Travel for {STRING}
+STR_TIMETABLE_STAY_FOR                                          :and stay for {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} day{P "" s}
+STR_TIMETABLE_TICKS                                             :{COMMA} tick{P "" s}
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Heading for {TOWN} Train Depot
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Heading for {TOWN} Train Depot, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Service at {TOWN} Train Depot
@@ -2622,13 +2662,15 @@
 STR_REFIT                                                       :{BLACK}Refit
 STR_REFIT_TIP                                                   :{BLACK}Select what cargo type to refit to in this order. Control click to remove refit instruction
 STR_REFIT_ORDER                                                 :(Refit to {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Timetable
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Switch to the timetable view
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Orders)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - End of Orders - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Service
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Can't build railroad vehicle...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Value: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Value: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Loading / Unloading
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Train must be stopped inside a depot
@@ -2638,6 +2680,9 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Can't insert new order...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Can't delete this order...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Can't modify this order...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Can't move this order...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Can't skip current order...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Can't skip to selected order...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Can't move vehicle...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}The rear engine will always follow its front counterpart
 STR_8838_N_A                                                    :N/A{SKIP}
@@ -2669,11 +2714,16 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Show capacities of each vehicle
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Show total capacity of train, split by cargo type
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Orders list - click on order to highlight it
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Skip the current order, and start the next. CTRL + click skips to the selected order)
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Delete the highlighted order
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Make the highlighted order non-stop
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Insert a new order before the highlighted order, or add to end of list
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Make the highlighted order force the vehicle to wait for a full load
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Make the highlighted order force the vehicle to unload
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Timetable - click on an order to highlight it.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Change the amount of time that the highlighted order should take
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Clear the amount of time for the highlighted order
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Reset the lateness counter, so the vehicle will be on time
 STR_SERVICE_HINT                                                :{BLACK}Skip this order unless a service is needed
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Cost: {CURRENCY} Weight: {WEIGHT_S}{}Speed: {VELOCITY}  Power: {POWER}{}Running Cost: {CURRENCY}/yr{}Capacity: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Broken down
@@ -2695,6 +2745,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Can't rename train vehicle type...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Make the highlighted order force the vehicle to dump cargo
 STR_886F_TRANSFER                                               :{BLACK}Transfer
+STR_CLEAR_TIME                                                  :{BLACK}Clear Time
+STR_RESET_LATENESS                                              :{BLACK}Reset Late Counter
 
 STR_TRAIN_STOPPING                                              :{RED}Stopping
 STR_TRAIN_STOPPING_VEL                                          :{RED}Stopping, {VELOCITY}
@@ -2703,8 +2755,16 @@
 STR_TRAIN_START_NO_CATENARY                                     :This track lacks catenary, so the train can't start
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}New {STRING} now available!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}New {STRING} now available!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}New {STRING} now available!  -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Can't timetable vehicle...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Vehicles can only wait at stations.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}This vehicle is not stopping at this station.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Change Time
+STR_TIMETABLE_STATUS_ON_TIME                                    :This vehicle is currently running on time
+STR_TIMETABLE_STATUS_LATE                                       :This vehicle is currently running {STRING} late
+STR_TIMETABLE_STATUS_EARLY                                      :This vehicle is currently running {STRING} early
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Road vehicle in the way
@@ -2720,7 +2780,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Max. speed: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profit this year: {LTBLUE}{CURRENCY}  (last year: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Reliability: {LTBLUE}{COMMA}%  {BLACK}Breakdowns since last service: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Capacity: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...must be stopped inside a road vehicle depot
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Can't sell road vehicle...
@@ -2747,6 +2807,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Road vehicle selection list - click on vehicle for information
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Build the highlighted road vehicle
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Cost: {CURRENCY}{}Speed: {VELOCITY}{}Running Cost: {CURRENCY}/yr{}Capacity: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Capacity: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Name road vehicle
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Can't name road vehicle...
@@ -2794,7 +2856,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Max. speed: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profit this year: {LTBLUE}{CURRENCY}  (last year: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Reliability: {LTBLUE}{COMMA}%  {BLACK}Breakdowns since last service: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Capacity: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Can't stop/start ship...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Can't send ship to depot...
@@ -2862,7 +2924,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Max. speed: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profit this year: {LTBLUE}{CURRENCY}  (last year: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Reliability: {LTBLUE}{COMMA}%  {BLACK}Breakdowns since last service: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Can't send aircraft to hangar...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Heading for {STATION} Hangar
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Heading for {STATION} Hangar, {VELOCITY}
@@ -2915,6 +2977,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Go to {STATION} Hangar
 SERVICE_AT_AIRPORT_HANGAR                                       :Service at {STATION} Hangar
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Timetable)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Zeppelin disaster at {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Road vehicle destroyed in 'UFO' collision!
@@ -3230,6 +3294,14 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Toggle transparency for buildables like stations, depots, waypoints and catenary
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Toggle transparency for bridges
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Toggle transparency for structures like lighthouses and antennas, maybe in future for eyecandy
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Toggle transparency for loading indicators
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Group {COMMA}
@@ -3267,4 +3339,7 @@
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Profit this year: {GREEN}{CURRENCY} {BLACK}(last year: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Profit this year: {RED}{CURRENCY} {BLACK}(last year: {RED}{CURRENCY}{BLACK})
 
+STR_GROUP_NAME                                                  :{GROUP}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
 ########
--- a/src/lang/brazilian_portuguese.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/brazilian_portuguese.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -12,8 +12,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Fora do mapa
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Muito próximo da borda do mapa
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Não há dinheiro - requer {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Precisa de terreno plano
 STR_0008_WAITING                                                :{BLACK}Aguardando: {WHITE}{STRING}
@@ -497,7 +497,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Autoridade local: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Nenhum
 STR_01AA_NAME                                                   :{BLACK}Nome
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1
@@ -780,6 +780,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Configurações de dificuldade
 STR_02C7_CONFIG_PATCHES                                         :Configurar correções
 STR_NEWGRF_SETTINGS                                             :Configurar NewGRF
+STR_TRANSPARENCY_OPTIONS                                        :Opções de Transparência
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Exibir nomes de cidades
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Exibir nomes de estações
@@ -807,7 +808,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Mapa mundi
 STR_EXTRA_VIEW_PORT                                             :Visualizador extra
 STR_SIGN_LIST                                                   :Lista de placas
-STR_TRANSPARENCY_OPTIONS                                        :Opções de Transparência
 STR_02DF_TOWN_DIRECTORY                                         :Lista de cidades
 STR_TOWN_POPULATION                                             :{BLACK}População mundial: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Visualizador {COMMA}
@@ -1105,6 +1105,17 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Velocidade do scrollwheel do mapa: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Pausar automaticamente ao inicar um novo jogo: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Usar a lista avançada de veículos: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Usar indicadores de carga: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Ativar plano de horário para veículos: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Exibir plano de horário em tiques ao invés de dias: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE                            :{LTBLUE}Tipo padrão de ferrovia (ao criar ou carregar um jogo): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Trilho Normal
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Trilho Elétrico
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Monotrilho
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :Primeiro disponível
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :Último disponível
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :Mais utilizado
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Máximo de trens por jogador: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Máximo de automóveis por jogador: {ORANGE}{STRING}
@@ -1188,7 +1199,7 @@
 STR_CHEATS                                                      :{WHITE}Trapaças
 STR_CHEATS_TIP                                                  :{BLACK}As caixas de verificação indicam se esta trapaça já foi usada antes
 STR_CHEATS_WARNING                                              :{BLACK}Atenção! Você está prestes a trair os seus oponentes. Saiba que isto ficará registrado para sempre.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Aumentar dinheiro em {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Aumentar dinheiro em {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Jogar como jogador: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Bulldozer mágico (destrói indústrias, etc.): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Os túneis poderão cruzar-se: {ORANGE}{STRING}
@@ -1443,9 +1454,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Nome da empresa:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Inauguração:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Valor da empresa: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Balanço atual: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Rendimento do último ano: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Valor da empresa: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Balanço atual: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Rendimento do último ano: {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Desempenho: {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Veículos:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1680,7 +1691,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}O edifício precisa ser demolido primeiro
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}População: {ORANGE}{COMMA}{BLACK}  Casas: {ORANGE}{COMMA}
@@ -1713,7 +1724,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Exibir informações sobre a autoridade local
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}autoridade local de {TOWN}
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Avaliações das empresas
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subsídios
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Ofertas de transporte subsidiados
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} de {STRING} para {STRING}
@@ -1786,7 +1797,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...árvore já plantada aqui
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...local impróprio
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Impossível plantar árvore aqui...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...muitas placas
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Impossível colocar placa aqui...
 STR_280A_SIGN                                                   :Placa
@@ -1895,6 +1906,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Costa ou margem
 STR_3806_SHIP_DEPOT                                             :Depósito naval
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...Impossível construir na água
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Deve demolir o canal primeiro
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Salvar Jogo
@@ -1904,9 +1916,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabytes livres
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Incapaz de ler unidade
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Falha ao Salvar Jogo
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Falha ao Salvar Jogo{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Incapaz de remover o arquivo
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Falha ao Abrir Jogo
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Falha ao Abrir Jogo{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Erro interno: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Arquivo corrompido - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :O arquivo foi criado utilizando uma versão mais nova
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :Arquivo não legível
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :Arquivo não editável
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Lista de unidades, diretórios e arquivos de jogos gravados
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nome selecionado para salvar o jogo
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Remover o jogo selecionado
@@ -2077,8 +2094,7 @@
 STR_SV_STNAME_LOWER                                             :Sul de {STRING}
 STR_SV_STNAME_HELIPORT                                          :Heliporto de {STRING}
 STR_SV_STNAME_FOREST                                            :Floresta de {STRING}
-
-STR_SV_GROUP_NAME                                               :{GROUP}
+STR_SV_STNAME_FALLBACK                                          :{STRING} Estação #{NUM}
 
 ############ end of savegame specific region!
 
@@ -2158,7 +2174,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Jogador {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Novo Rosto
 STR_7005_COLOR_SCHEME                                           :{BLACK}Cores
@@ -2170,7 +2186,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Nome do Presidente
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Impossível alterar o nome da empresa...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Impossível alterar o nome do presidente...
-STR_700E_FINANCES                                               :{WHITE}Finanças de {COMPANY} {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}Finanças de {COMPANY} {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Despesas/Lucros
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Construção
@@ -2186,20 +2202,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Lucros de Embarcações
 STR_701C_LOAN_INTEREST                                          :{GOLD}Juros do Empréstimo
 STR_701D_OTHER                                                  :{GOLD}Outros
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Total:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Gráfico de Rendimentos
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Gráfico de Lucros Operacionais
 STR_7026_BANK_BALANCE                                           :{WHITE}Balanço Bancário
 STR_7027_LOAN                                                   :{WHITE}Empréstimo
-STR_MAX_LOAN                                                    :{WHITE}Empréstimo Máximo:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Pedir {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Pagar {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Empréstimo Máximo:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Pedir {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Pagar {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...o empréstimo máximo permitido é de {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Impossível pedir mais dinheiro emprestado...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...não há empréstimo para pagar
@@ -2238,8 +2254,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Avaliações da empresa (máximo=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Valor da empresa
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Classificação de Empresas
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Empresa de transportes em dificuldades!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} será vendida ou declarada falida a menos que melhore os seus rendimentos em breve!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Presidente)
@@ -2277,7 +2293,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Recesso Mundial!{}{}Economistas temem crise!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Fim do recesso!{}{}Melhoras no comércio inspiram confiança nas indústrias à medida que a economia se fortalece!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Alternar entre janela grande/pequena
-STR_7076_COMPANY_VALUE                                          :{GOLD}Valor da empresa: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Valor da empresa: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Comprar 25% de ações
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Vender 25% de ações
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Comprar 25% das ações desta empresa
@@ -2589,7 +2605,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}Depósito ferroviário de {TOWN}
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Cidadãos celebram . . .{}Primeiro trem chega a {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Detalhes)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Detalhes)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Trem no caminho
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2610,6 +2626,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Ir sem parar para o depósito de {TOWN}
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Manutenção no depósito de {TOWN} sem parar
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Viajar (não progamado)
+STR_TIMETABLE_TRAVEL_FOR                                        :Viajar para {STRING}
+STR_TIMETABLE_STAY_FOR                                          :e ficar durante {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} dia{P "" s}
+STR_TIMETABLE_TICKS                                             :{COMMA} tique{P "" s}
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Dirigindo-se ao depósito de {TOWN}
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Dirigindo-se ao depósito de {TOWN}, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Manutenção no depósito de {TOWN}
@@ -2651,13 +2674,15 @@
 STR_REFIT                                                       :{BLACK}Readaptar
 STR_REFIT_TIP                                                   :{BLACK}Selecionar a adaptação na ordem atual. CTRL + Clique para remover a instrução
 STR_REFIT_ORDER                                                 :(Readaptar para {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Plano de horário
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Exibe o plano de horário
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Ordens)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Fim de Ordens - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Manutenção
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Impossível construir veículo ferroviário...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Valor: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Valor: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Carregando / descarregando
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}O trem precisa estar parado dentro do depósito
@@ -2667,6 +2692,7 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Impossível inserir nova ordem...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Impossível remover esta ordem...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Impossível modificar esta ordem...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Impossível mudar essa ordem
 STR_CAN_T_SKIP_ORDER                                            :{WHITE}Impossível pular a ordem atual...
 STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Impossível pular à ordem selecionada...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Impossível mover veículo...
@@ -2706,6 +2732,10 @@
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Inserir nova ordem antes da ordem selecionada, ou adicionar no fim da lista
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}A ordem selecionada fará com que o veículo espere carregar completamente
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}A ordem selecionada forçará o veículo a descarregar
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Plano de horário - selecione uma ordem clicando nela
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Mude a quantidade de tempo que a ordem deverá levar
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Reseta a quantidade de tempo para a ordem selecionada
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Reseta o contador de atraso, fazendo o veículo estar na hora
 STR_SERVICE_HINT                                                :{BLACK}Saltar esta ordem a menos que seja necessário manutenção
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Custo: {CURRENCY} Peso: {WEIGHT_S}{}Velocidade: {VELOCITY}  Potência: {POWER}{}Custo de circulação: {CURRENCY}/ano{}Capacidade: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Quebrado
@@ -2727,6 +2757,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Impossível renomear tipo de veículo ferroviário...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Força o veículo a deixar a carga na ordem selecionada
 STR_886F_TRANSFER                                               :{BLACK}Transferir
+STR_CLEAR_TIME                                                  :{BLACK}Resetar horário
+STR_RESET_LATENESS                                              :{BLACK}Resetar contador de atraso
 
 STR_TRAIN_STOPPING                                              :{RED}Parando
 STR_TRAIN_STOPPING_VEL                                          :{RED}Parando, {VELOCITY}
@@ -2735,8 +2767,18 @@
 STR_TRAIN_START_NO_CATENARY                                     :Essa linha não tem energia, portanto o trem não parte
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Novo {STRING} agora disponível!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Novo {STRING} agora disponível!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Novo {STRING} agora disponível!  -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Impossível programar veículo...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Veículos só podem aguardar em estações
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Esse veículo não pára nesta estação
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Mudar horário
+STR_TIMETABLE_STATUS_ON_TIME                                    :Esse veículo está no horário
+STR_TIMETABLE_STATUS_LATE                                       :Esse veículo está {STRING} atrasado
+STR_TIMETABLE_STATUS_EARLY                                      :Esse veículo está {STRING} adiantado
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Autopreencher
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Preenche a tabela de horários com os horários da primeira viagem
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Automóvel no caminho
@@ -2752,7 +2794,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Velocidade Máx.: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Lucros deste ano: {LTBLUE}{CURRENCY}  (último ano: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Confiabilidade: {LTBLUE}{COMMA}%  {BLACK}Quebras desde a última manutenção: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Capacidade: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...precisa estar parado dentro de uma garagem
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Impossível vender automóvel...
@@ -2779,6 +2821,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Lista de automóveis - clique num automóvel para informações
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Construir o veículo selecionado
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Custo: {CURRENCY}{}Velocidade: {VELOCITY}{}Custo de circulação: {CURRENCY}/ano{}Capacidade: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Capacidade: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Renomear automóvel
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Impossível renomear automóvel...
@@ -2826,7 +2870,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Velocidade Máx.: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Lucros deste ano: {LTBLUE}{CURRENCY}  (último ano: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Confiabilidade: {LTBLUE}{COMMA}%  {BLACK}Quebras desde a última manutenção: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Capacidade: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Impossível iniciar/parar embarcação...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Impossível enviar embarcação para o depósito...
@@ -2894,7 +2938,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Velocidade Máx.: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Lucros deste ano: {LTBLUE}{CURRENCY}  (último ano: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Confiabilidade: {LTBLUE}{COMMA}%  {BLACK}Quebras desde a última manutenção: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Impossível enviar aeronave para o hangar...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Dirigindo-se ao hangar de {STATION}
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Dirigindo-se ao hangar de {STATION}, {VELOCITY}
@@ -2947,6 +2991,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Ir para o hangar de {STATION}
 SERVICE_AT_AIRPORT_HANGAR                                       :Manutenção no hangar de {STATION}
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Timetable)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Acidente de Zepelim em {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Automóvel destruído em colisão com OVNI!
@@ -3262,6 +3308,14 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Alternar transparência para construções como estações, depósitos, pontos de controle e eletrificação da ferrovia
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Alternar transparência para pontes
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Alternar transparência para estruturas como faróis e antenas, talvez no futuro para efeitos visuais
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Altera transparência para os indicadores de carga
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Agrupar {COMMA}
@@ -3299,4 +3353,11 @@
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Lucros do ano {GREEN}{CURRENCY} {BLACK}(ano passado: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Lucros do ano: {RED}{CURRENCY} {BLACK}(ano passado {RED}{CURRENCY}{BLACK})
 
+STR_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
 ########
--- a/src/lang/bulgarian.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/bulgarian.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -12,8 +12,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Извън картата
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Края на картата е прекалено близо
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Недостатъчно пари - трябват {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Трябва равна земя
 STR_0008_WAITING                                                :{BLACK}Чакане: {WHITE}{STRING}
@@ -497,7 +497,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Община: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Нищо
 STR_01AA_NAME                                                   :{BLACK}Име
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1-ви
@@ -780,6 +780,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Опции за трудност
 STR_02C7_CONFIG_PATCHES                                         :Конфигурирай патчове
 STR_NEWGRF_SETTINGS                                             :Newgrf настройки
+STR_TRANSPARENCY_OPTIONS                                        :Опций на прозрачност
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Показване имената на градовете
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Показване имената на станциите
@@ -807,7 +808,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Карта на света
 STR_EXTRA_VIEW_PORT                                             :Допълнителна камера
 STR_SIGN_LIST                                                   :Списък с табели
-STR_TRANSPARENCY_OPTIONS                                        :Опций на прозрачност
 STR_02DF_TOWN_DIRECTORY                                         :Списък със селищата
 STR_TOWN_POPULATION                                             :{BLACK}Световна популация: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Камера {COMMA}
@@ -1186,7 +1186,7 @@
 STR_CHEATS                                                      :{WHITE}Кодове
 STR_CHEATS_TIP                                                  :{BLACK}Кутийките показват дали този код е бил използван
 STR_CHEATS_WARNING                                              :{BLACK}Внимание! По този начин ще измамите своите съперници. Имайте в предвид, че това безчестие ще бъде запомнено вовеки веков.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Увеличаване на парите с {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Увеличаване на парите с {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Игра като: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Магически булдозер (премахва промишленост, неподвижни обекти): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Тунелите може да се пресичат: {ORANGE}{STRING}
@@ -1441,9 +1441,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Име на компания:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Основаване:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Стойност на компанията:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Текущ баланс:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Приход от предходната година:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Стойност на компанията:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Текущ баланс:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Приход от предходната година:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Представяне:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Превозни средства:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1672,7 +1672,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Сградата първо трябва да бъде разрушена
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Население: {ORANGE}{COMMA}{BLACK}  Жилища: {ORANGE}{COMMA}
@@ -1705,7 +1705,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Показване на информация за местните власти
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} местни власти
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Рейтинги на транспортни компании:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Субсидии
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Субсидии за превоз на:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} от {STRING} до {STRING}
@@ -1776,7 +1776,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...вече има дърво
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...неподходящо място
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Тук не може да бъде засадено дърво...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...твърде много знаци
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Тук не може да бъде поставян знак...
 STR_280A_SIGN                                                   :Знак
@@ -1894,9 +1894,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} мегабайт{P "" а} свободно
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Не може да прочете диска
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Запазването на играта е неуспешно
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Запазването на играта е неуспешно{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Изтриването на файла е неуспешно
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Отварянето на играта е неуспешно
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Отварянето на играта е неуспешно{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Списък с хард-дисковете, директориите и запазените игри
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Избрано име за запазена игра
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Изтрий избраната запазената игра
@@ -2068,8 +2068,6 @@
 STR_SV_STNAME_HELIPORT                                          :{STRING} Хелипорт
 STR_SV_STNAME_FOREST                                            :{STRING} Дървета
 
-STR_SV_GROUP_NAME                                               :{GROUP}
-
 ############ end of savegame specific region!
 
 ##id 0x6800
@@ -2148,7 +2146,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Играч {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Ново лице
 STR_7005_COLOR_SCHEME                                           :{BLACK}Цветове
@@ -2160,7 +2158,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Име на управителя
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Не може да бъде променено името на компанията...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Не може да се промени името на управителя...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Финанси {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Финанси {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Разходи/Приходи
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Строеж
@@ -2176,20 +2174,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Приходи от кораби
 STR_701C_LOAN_INTEREST                                          :{GOLD}Лихва по заема
 STR_701D_OTHER                                                  :{GOLD}Други
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Всичко:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Графика на приходите
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Графика на оперативните приходи
 STR_7026_BANK_BALANCE                                           :{WHITE}Баланс на банковата сметка
 STR_7027_LOAN                                                   :{WHITE}Заем
-STR_MAX_LOAN                                                    :{WHITE}Максимален заем:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Изтегли {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Изплати {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Максимален заем:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Изтегли {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Изплати {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...максимално разрешеният размер на заема е {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Не може да изтеглиш повече пари...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...няма заем за изплащане
@@ -2228,8 +2226,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Райтинг на представянето на компанията (максимален рейтинг=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Стойност на Компанията
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Класиране на Компаниите
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Транспортна компания в беда!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} ще бъде продадена или обявена в банкрут освен ако представянето й не се подобри скоро!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Manager)
@@ -2267,7 +2265,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Световна икономическа криза!{}{}Финансовите експерти очакват най-лошото от сриващата се световна икономика!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Световната икономическа криза отмина!{}{}Възходът на търговията дава увереност на индустриите в новата засилваща се икономическа реалност!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Активирай голям/малък размер на прозореца
-STR_7076_COMPANY_VALUE                                          :{GOLD}Стойност на Компанията: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Стойност на Компанията: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Купи 25% от акциите на компанията
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Продай 25% от акциите на компанията
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Купи 25% от акциите на тази компания
@@ -2579,7 +2577,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Влаково депо
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Хората празнуват . . .{}Първи влак пристигна на {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Подробности)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Подробности)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Влак на пътя
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2600,6 +2598,8 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Отиди без да спираш на {TOWN} Влаково депо
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Ремонт без спиране в {TOWN} влаково депо
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Отиващ към Влаковото депо на {TOWN}
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Отиващ към Влаковото депо на {TOWN}, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}На ремонт във Влаковото депо на {TOWN}
@@ -2646,8 +2646,8 @@
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Ремонт
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Не може да купиш ЖП машина...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Купи: {LTBLUE}{NUM}{BLACK} Цена: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Цена: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Купи: {LTBLUE}{NUM}{BLACK} Цена: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Цена: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Товарене/ Разтоварване
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Влакът трябва да бъде спрян в депото
@@ -2722,8 +2722,9 @@
 STR_TRAIN_START_NO_CATENARY                                     :Влака не може да тръгне, защото ЖП линията няма catenary
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Нов {STRING} е на разположение!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Нов {STRING} е на разположение! - {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Нов {STRING} е на разположение! - {ENGINE}
+
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Кола на пътя
@@ -2739,7 +2740,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Макс. скорост: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Печалба тази година: {LTBLUE}{CURRENCY}  (предходна година: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Надеждност: {LTBLUE}{COMMA}%  {BLACK}Повреди от последния сервиз: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Производство: {LTBLUE}{NUM}{BLACK} Стойност: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Производство: {LTBLUE}{NUM}{BLACK} Стойност: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Капацитет: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...трябва да бъде спряно в сервиз за коли
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Не може да продаде колата...
@@ -2812,7 +2813,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Макс. скорост: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Печалба тази година: {LTBLUE}{CURRENCY}  (миналата година: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Надеждност: {LTBLUE}{COMMA}%  {BLACK}Повреди след последния сервиз: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Купен: {LTBLUE}{NUM}{BLACK} Цена: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Купен: {LTBLUE}{NUM}{BLACK} Цена: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Вместимост: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Не може да спреш/задвижиш кораба...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Не може да пратиш кораба в депото...
@@ -2880,7 +2881,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Макс. скорост: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Печалба тази година: {LTBLUE}{CURRENCY}  (предходната: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Надеждност: {LTBLUE}{COMMA}%  {BLACK}Повреди от последния сервиз: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Произведен: {LTBLUE}{NUM}{BLACK} Стойност: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Произведен: {LTBLUE}{NUM}{BLACK} Стойност: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Не може да изпрати самолета в хангар...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Отиващ към Хангара на летище {STATION}
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Отиващ към Хангара на летище {STATION}, {VELOCITY}
@@ -2933,6 +2934,7 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Отиди до Хангара на летище {STATION}
 SERVICE_AT_AIRPORT_HANGAR                                       :Сервиз в {STATION} хангар
 
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Катастрофа с Цепелин на {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}МПС бе унищожено при сблъсък с НЛО!
@@ -3249,6 +3251,13 @@
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Използвай прозрачност за мостове
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Използвай прозрачност за сгради като фарове и антени, може би в бъдеще за украси
 
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Група {COMMA}
 STR_GROUP_TINY_NAME                                             :{TINYFONT}{GROUP}
@@ -3285,4 +3294,6 @@
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Печалба тази година: {GREEN}{CURRENCY} {BLACK}(предишната година: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Печалба тази година: {RED}{CURRENCY} {BLACK}(предишната година: {RED}{CURRENCY}{BLACK})
 
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
 ########
--- a/src/lang/catalan.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/catalan.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Fora del marc del mapa
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Massa a prop del marc del mapa
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}No tens prou diners - et fan falta {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Es necessita un terreny pla
 STR_0008_WAITING                                                :{BLACK}Esperant: {WHITE}{STRING}
@@ -166,7 +166,7 @@
 
 STR_00C5                                                        :{BLACK}{CROSS}
 STR_00C6                                                        :{SILVER}{CROSS}
-STR_00C7_QUIT                                                   :{WHITE}Sortir
+STR_00C7_QUIT                                                   :{WHITE}Surt
 STR_00C8_YES                                                    :{BLACK}Si
 STR_00C9_NO                                                     :{BLACK}No
 STR_00CA_ARE_YOU_SURE_YOU_WANT_TO                               :{YELLOW}Estàs segur que vols abandonar aquest joc i tornar a {STRING}?
@@ -331,15 +331,15 @@
 STR_UNITS_WEIGHT_SHORT_METRIC                                   :{COMMA}t
 STR_UNITS_WEIGHT_SHORT_SI                                       :{COMMA}kg
 
-STR_UNITS_WEIGHT_LONG_IMPERIAL                                  :{COMMA} tona{P "" s}
-STR_UNITS_WEIGHT_LONG_METRIC                                    :{COMMA} tone{P "" s}
+STR_UNITS_WEIGHT_LONG_IMPERIAL                                  :{COMMA} ton{P a es}
+STR_UNITS_WEIGHT_LONG_METRIC                                    :{COMMA} ton{P a es}
 STR_UNITS_WEIGHT_LONG_SI                                        :{COMMA} kg
 
 STR_UNITS_VOLUME_SHORT_IMPERIAL                                 :{COMMA}gal
 STR_UNITS_VOLUME_SHORT_METRIC                                   :{COMMA}l
 STR_UNITS_VOLUME_SHORT_SI                                       :{COMMA}m³
 
-STR_UNITS_VOLUME_LONG_IMPERIAL                                  :{COMMA} galó{P "" s}
+STR_UNITS_VOLUME_LONG_IMPERIAL                                  :{COMMA} galó{P "" ns}
 STR_UNITS_VOLUME_LONG_METRIC                                    :{COMMA} litre{P "" s}
 STR_UNITS_VOLUME_LONG_SI                                        :{COMMA} m³
 
@@ -362,7 +362,7 @@
 STR_015C_SAVE_GAME                                              :Desa el joc
 STR_015D_LOAD_GAME                                              :Carrega el joc
 STR_015E_QUIT_GAME                                              :Abandona el joc
-STR_015F_QUIT                                                   :Sortir
+STR_015F_QUIT                                                   :Surt
 STR_ABANDON_GAME_QUERY                                          :{YELLOW}Estàs segur que vols abandonar aquest joc?
 STR_0161_QUIT_GAME                                              :{WHITE}Abandona el Joc
 STR_SORT_ORDER_TIP                                              :{BLACK}Selecciona ordre de classificació (descendent/ascendent)
@@ -495,7 +495,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Autoritat Local: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Ningú
 STR_01AA_NAME                                                   :{BLACK}Nom
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1
@@ -735,9 +735,9 @@
 STR_0292_SAVE_SCENARIO                                          :Desa l'escenari
 STR_0293_LOAD_SCENARIO                                          :Carrega un escenari
 STR_LOAD_HEIGHTMAP                                              :Carrega Mapa d'alçades
-STR_0294_QUIT_EDITOR                                            :Sortir de l'editor
+STR_0294_QUIT_EDITOR                                            :Surt de l'editor
 STR_0295                                                        :
-STR_0296_QUIT                                                   :Sortir
+STR_0296_QUIT                                                   :Surt
 STR_0297_SAVE_SCENARIO_LOAD_SCENARIO                            :{BLACK}Desa l'escenari, carrega un escenari, abandona l'editor d'escenaris, sortir
 STR_0298_LOAD_SCENARIO                                          :{WHITE}Carrega un Escenari
 STR_0299_SAVE_SCENARIO                                          :{WHITE}Desa l'Escenari
@@ -745,7 +745,7 @@
 STR_PLAY_HEIGHTMAP                                              :{BLACK}Juga un mapa d'alçades
 STR_PLAY_HEIGHTMAP_HINT                                         :{BLACK}Comença un nou joc, utilitzant un mapa d'alçades com a terreny
 STR_QUIT_SCENARIO_QUERY                                         :{YELLOW}Estàs segur que vols sortir d'aquest escenari ?
-STR_029C_QUIT_EDITOR                                            :{WHITE}Sortir de l'Editor
+STR_029C_QUIT_EDITOR                                            :{WHITE}Surt de l'Editor
 STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...només es pot construir en poblacions de més de 1200 hab.
 STR_029E_MOVE_THE_STARTING_DATE                                 :{BLACK}Retarda la data d'inici 1 any
 STR_029F_MOVE_THE_STARTING_DATE                                 :{BLACK}Avança la data d'inici 1 any
@@ -778,6 +778,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Paràmetres de dificultat
 STR_02C7_CONFIG_PATCHES                                         :Configura pedaços
 STR_NEWGRF_SETTINGS                                             :Configuracions de Newgrf
+STR_TRANSPARENCY_OPTIONS                                        :Opcions de transparència
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Mostra els noms de les poblacions
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Mostra els noms de les estacions
@@ -805,7 +806,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Mapa del món
 STR_EXTRA_VIEW_PORT                                             :Vista extra
 STR_SIGN_LIST                                                   :Llista de senyals
-STR_TRANSPARENCY_OPTIONS                                        :Opcions de transparència
 STR_02DF_TOWN_DIRECTORY                                         :Directori de Poblacions
 STR_TOWN_POPULATION                                             :{BLACK}Població mundial: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Vista {COMMA}
@@ -844,8 +844,8 @@
 STR_0301_DISPLAY_GAME_OPTIONS                                   :{BLACK}Mostra les opcions del joc
 STR_0302_DISPLAY_DIFFICULTY_OPTIONS                             :{BLACK}Mostra les opcions de dificultat
 STR_0303_START_A_NEW_GAME_USING                                 :{BLACK}Comença un joc nou, utilitzant un escenari personalitzat
-STR_0304_QUIT                                                   :{BLACK}Sortir
-STR_0305_QUIT_OPENTTD                                           :{BLACK}Sortir d'OpenTTD
+STR_0304_QUIT                                                   :{BLACK}Surt
+STR_0305_QUIT_OPENTTD                                           :{BLACK}Surt d'OpenTTD
 STR_0307_OPENTTD                                                :{WHITE}OpenTTD {REV}
 STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...només es pot construir en poblacions
 STR_030E_SELECT_TEMPERATE_LANDSCAPE                             :{BLACK}Selecciona l'estil de paisatge 'temperat'
@@ -1098,11 +1098,22 @@
 STR_CONFIG_PATCHES_PREFER_TEAMCHAT                              :{LTBLUE}Prefereix fer un chat d'equip amb <ENTER>: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLLING                        :{LTBLUE}Funció de la rodeta del ratolí: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SCROLLWHEEL_ZOOM                             :Zoom mapa
-STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Moure mapa
+STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Mou el mapa
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Off
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Velocitat del mapa amb la rodeta del ratolí: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Posa en pausa automàticament en començar un joc nou: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Utilitza la llista de vehicles avançada: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Utilitza indicadors de carregament: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Habilita horaris dels vehicles: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Mostra horaris en marques enlloc de dies: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE                            :{LTBLUE}Tipus de via predeterminada (en un joc nou/joc desat): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Via Normal
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Via Electrificada
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Monorail
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :La primera disponible
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :La darrera disponible
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :La més utilitzada
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Max trens per jugador: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Max automòbils per jugador: {ORANGE}{STRING}
@@ -1186,7 +1197,7 @@
 STR_CHEATS                                                      :{WHITE}Trampes
 STR_CHEATS_TIP                                                  :{BLACK}Els quadres marcats indiquen que ja has fet servir aquesta trampa
 STR_CHEATS_WARNING                                              :{BLACK}Atenció! Estàs a punt d'enredar als teus companys competidors. Pensa que una cosa així serà recordada per tota la eternitat!.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Incrementa els diners en {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Incrementa els diners en {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Juga com el jugador: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Eruga màgica (treu indústries, inamovibles): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Els túnels es poden creuar: {ORANGE}{STRING}
@@ -1441,9 +1452,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Nom empresa:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Inauguració:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Valor de l'empresa:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Balanç actual:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Ingressos de l'últim any:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Valor de l'empresa:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Balanç actual:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Ingressos de l'últim any:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Rendiment:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Vehicles:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1584,7 +1595,7 @@
 STR_1007_ALREADY_BUILT                                          :{WHITE}...ja construit
 STR_1008_MUST_REMOVE_RAILROAD_TRACK                             :{WHITE}S'ha de treure la via primer
 STR_100A_RAILROAD_CONSTRUCTION                                  :{WHITE}Construcció de Ferrocarril
-STR_TITLE_ELRAIL_CONSTRUCTION                                   :{WHITE}Construcció de Via Electrificada
+STR_TITLE_ELRAIL_CONSTRUCTION                                   :{WHITE}Construcció de Ferrocarril Elèctric
 STR_100B_MONORAIL_CONSTRUCTION                                  :{WHITE}Construcció de Monorail
 STR_100C_MAGLEV_CONSTRUCTION                                    :{WHITE}Construcció de Maglev
 STR_100D_SELECT_RAIL_BRIDGE                                     :{WHITE}Selecciona pont per la via
@@ -1596,7 +1607,7 @@
 STR_1013_CAN_T_REMOVE_SIGNALS_FROM                              :{WHITE}Aquí no es poden treure les senyals...
 STR_1014_TRAIN_DEPOT_ORIENTATION                                :{WHITE}Cotxeres de Tren
 STR_1015_RAILROAD_CONSTRUCTION                                  :Construcció de Ferrocarril
-STR_TOOLB_ELRAIL_CONSTRUCTION                                   :Contrucció de Via Electrificada
+STR_TOOLB_ELRAIL_CONSTRUCTION                                   :Construcció de Ferrocarril Elèctric
 STR_1016_MONORAIL_CONSTRUCTION                                  :Construcció de Monorail
 STR_1017_MAGLEV_CONSTRUCTION                                    :Construcció de Maglev
 STR_1018_BUILD_RAILROAD_TRACK                                   :{BLACK}Construeix via de tren
@@ -1629,7 +1640,7 @@
 STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}S'ha de treure la carretera primer
 STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Obres en progrés
 STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Construcció de Carreteres
-STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Construcció de via de tramvia
+STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Construcció de Tramvies
 STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Selecciona un Pont per Carretera
 STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}... les carreteres de sentit únic no poden tenir encreuaments
 STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Aquí no es pot construir una carretera...
@@ -1645,9 +1656,9 @@
 STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION                     :{WHITE}No puc construir l'estació de tramvies de passatgers
 STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION                         :{WHITE}No puc construir l'estació de tramvies de càrrega
 STR_180A_ROAD_CONSTRUCTION                                      :Construcció de Carreteres
-STR_180A_TRAMWAY_CONSTRUCTION                                   :Construcció de vies de tramvia
+STR_180A_TRAMWAY_CONSTRUCTION                                   :Construcció de Tramvies
 STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Construeix una secció de carretera
-STR_180B_BUILD_TRAMWAY_SECTION                                  :{BLACK}Construeix secció de via de tramvia
+STR_180B_BUILD_TRAMWAY_SECTION                                  :{BLACK}Construeix una secció de via de tramvia
 STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Construeix una cotxera (per construir i mantenir vehicles)
 STR_180C_BUILD_TRAM_VEHICLE_DEPOT                               :{BLACK}Construeix cotxeres de tramvies (per construir i revisar tramvies)
 STR_180D_BUILD_BUS_STATION                                      :{BLACK}Constueix una parada d'autobús
@@ -1678,7 +1689,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}L'edifici s'ha d'enderrocar primer
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Població: {ORANGE}{COMMA}{BLACK}  Cases: {ORANGE}{COMMA}
@@ -1711,7 +1722,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Mostra informació de l'autoritat local
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} autoritat local
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Ratis de l'Empresa de Transports:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subvencions
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Subvencions per prestació de serveis oferts:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} de {STRING} a {STRING}
@@ -1751,7 +1762,7 @@
 STR_204A_BUILD_STATUE_OF_COMPANY                                :Construeix una estàtua del propietari de l'empresa
 STR_204B_FUND_NEW_BUILDINGS                                     :Patrocina nous edificis
 STR_204C_BUY_EXCLUSIVE_TRANSPORT                                :Compra els drets de transport en exclusiva
-STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY                              :Subornar les autoritats locals
+STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY                              :Suborna les autoritats locals
 STR_204D_INITIATE_A_SMALL_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Inicia una petita campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{}  Cost: {CURRENCY}
 STR_204E_INITIATE_A_MEDIUM_LOCAL                                :{WHITE}{STRING}{}{YELLOW} Inicia una mitjana campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{}  Cost: {CURRENCY}
 STR_204F_INITIATE_A_LARGE_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Inicia una gran campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{}  Cost: {CURRENCY}
@@ -1759,7 +1770,7 @@
 STR_2051_BUILD_A_STATUE_IN_HONOR                                :{WHITE}{STRING}{}{YELLOW} Construeix una estatua en honor a la teva empresa.{} Cost: {CURRENCY}
 STR_2052_FUND_THE_CONSTRUCTION_OF                               :{WHITE}{STRING}{}{YELLOW} Patrocina la construcció de nous edificis comercials en la població.{}  Cost: {CURRENCY}
 STR_2053_BUY_1_YEAR_S_EXCLUSIVE                                 :{WHITE}{STRING}{}{YELLOW} Compra per 1 any els drets exclusius de transport en la població. La autoritat local només permetrà utilitzar les instal·lacions de la teva empresa de transports als passatgers i les mercaderies.{} Cost: {CURRENCY}
-STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY_DESC                         :{WHITE}{STRING}{}{YELLOW} Subornar les autoritats locals per incrementar el teu rati, a risc de greus penalitzacions si et pesquen!!.{}  Cost: {CURRENCY}
+STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY_DESC                         :{WHITE}{STRING}{}{YELLOW} Suborna les autoritats locals per incrementar el teu rati, a risc de greus penalitzacions si et pesquen!!.{}  Cost: {CURRENCY}
 STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING                       :{BIGFONT}{BLACK}Caos de trànsit en  {TOWN}!{}{}El programa de rehabilitació dels carrers patrocinat per {COMPANY} porta 6 mesos de misèria als motoristes!
 STR_2056                                                        :{TINYFONT}{WHITE}{TOWN}
 STR_2057                                                        :{ORANGE}{TOWN}{BLACK} ({COMMA})
@@ -1782,7 +1793,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...aquí ja hi ha arbres
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...lloc inadequat
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Aquí no es poden plantar arbres...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...massa senyals
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Aquí no es pot situar una senyal...
 STR_280A_SIGN                                                   :Senyal
@@ -1891,6 +1902,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Costa o marge de riu
 STR_3806_SHIP_DEPOT                                             :Drassana
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...No es pot construir dins l'aigua
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Has de demolir el canal primer
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Desa el Joc
@@ -1900,9 +1912,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabytes lliures
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Impossible llegir la unitat de disc
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Desat del Joc erroni
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Desat del Joc erroni{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Impossible esborrar l'arxiu
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Càrrega del Joc errònia
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Càrrega del Joc errònia{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Error Intern: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :El joc desat està trencat - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :El joc desat està fet amb una versió més moderna
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :L'arxiu no es pot llegir l'arxiu
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :No es pot escriure a l'arxiu
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Llista de dispositius de disc, carpetes i arxius de jocs desats
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nom actualment seleccionat per joc desat
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Esborra el joc desat actualment seleccionat
@@ -2073,8 +2090,7 @@
 STR_SV_STNAME_LOWER                                             :Baix {STRING}
 STR_SV_STNAME_HELIPORT                                          :{STRING} Heliport
 STR_SV_STNAME_FOREST                                            :{STRING} Bosc
-
-STR_SV_GROUP_NAME                                               :{GROUP}
+STR_SV_STNAME_FALLBACK                                          :{STRING} Estació #{NUM}
 
 ############ end of savegame specific region!
 
@@ -2154,7 +2170,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Jugador {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Nova Cara
 STR_7005_COLOR_SCHEME                                           :{BLACK}Esquema de color
@@ -2166,7 +2182,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Nom President
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}No es pot canviar el nom d'empresa...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}No es pot canviar el nom de president...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Economia {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Economia {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Despeses/Ingressos
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Construcció
@@ -2182,20 +2198,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Ingressos de Vaixells
 STR_701C_LOAN_INTEREST                                          :{GOLD}Interessos del Prèstec
 STR_701D_OTHER                                                  :{GOLD}Altres
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Total:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Gràfic d'Ingressos
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Gràfic de Rendiment d'Operacions
 STR_7026_BANK_BALANCE                                           :{WHITE}Balanç del Banc
 STR_7027_LOAN                                                   :{WHITE}Préstec
-STR_MAX_LOAN                                                    :{WHITE}Max. Prèstec:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Demana {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Amortitza {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Max. Prèstec:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Demana {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Amortitza {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...màxim import permès del préstec és {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}No pots demanar més diners...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...No queda préstec per amortitzar
@@ -2234,8 +2250,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Ratis de rendiment de l'empresa (màxim rati=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Valors de l'empresa
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Taula de la Lliga d'Empreses
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Empresa de Transport en dificultats!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} ha de ser venuda o declarar-se en fallida a menys que el seu rendiment s'incrementi aviat!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(President)
@@ -2273,7 +2289,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Recessió Mundial!{}{}Economistes experts temen que l'economia es desplomi!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Recessió Acabada!{}{}La millora als negocis dóna confiança a les indústries a la vegada que l'economia s'enforteix!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Intercanvia mida gran/petita de finestra
-STR_7076_COMPANY_VALUE                                          :{GOLD}Valor de l'Empresa: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Valor de l'Empresa: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Compra un 25% d'accions
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Vendre un 25% d'accions
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Compra el 25% d'accions d'aquesta empresa
@@ -2585,7 +2601,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Cotxeres de Tren
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Celebració popular . . .{} Arribada del 1er. tren a {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Detalls)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Detalls)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Tren en el camí
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2606,6 +2622,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Ves sense parar a les cotxeres de {TOWN}.
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Manteniment sense parades a cotxeres de {TOWN}.
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Viatge (fora d'horari)
+STR_TIMETABLE_TRAVEL_FOR                                        :Viatge a {STRING}
+STR_TIMETABLE_STAY_FOR                                          :i estigues {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} di{P a es}
+STR_TIMETABLE_TICKS                                             :{COMMA} mar{P ca ques}
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Cap a cotxeres de {TOWN}.
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Cap a cotxeres de {TOWN}, a {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Revisió a la cotxera de {TOWN}
@@ -2640,20 +2663,22 @@
 STR_8820_RENAME                                                 :{BLACK}Reanomena
 STR_8823_SKIP                                                   :{BLACK}Salta
 STR_8824_DELETE                                                 :{BLACK}Esborra
-STR_8825_NON_STOP                                               :{BLACK}Sense Parar
+STR_8825_NON_STOP                                               :{BLACK}No paris
 STR_8826_GO_TO                                                  :{BLACK}Ves a
 STR_8827_FULL_LOAD                                              :{BLACK}Carrega
-STR_8828_UNLOAD                                                 :{BLACK}Descarrega
+STR_8828_UNLOAD                                                 :{BLACK}Descarreg
 STR_REFIT                                                       :{BLACK}Remodela
 STR_REFIT_TIP                                                   :{BLACK}Selecciona quin tipus de càrrega vols remodelar en aquesta ordre. Control + Clic per eliminar l'ordre de remodelar
 STR_REFIT_ORDER                                                 :(Remodela a {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Horari
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Canvia cap a la vista d'horari
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Ordres)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Fí d'Ordres - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Servei
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}No es pot construir el vehicle...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construit: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Valor: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construit: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Valor: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Carregant / Descarregant
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}El tren s'ha de parar dins de la cotxera
@@ -2703,6 +2728,10 @@
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Afegeix una nova ordre abans de la seleccionada, o afegeix-la al final de la llista
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Fer que en l'ordre seleccionada s'esperi a que l'element tingui càrrega total
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Obliga en l'ordre seleccionada a descarregar l'element
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Horari - clica sobre l'ordre per marcar-la.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Canvia la quantitat de temps que l'ordre marcada hauria de prendre
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Esborra la quantitat de temps de l'ordre marcada
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Reseteja el comptador de retrassos, de manera que el vehicle serà puntual
 STR_SERVICE_HINT                                                :{BLACK}Saltar l'ordre a menys que es necessiti manteniment
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Cost: {CURRENCY} Pes: {WEIGHT_S}{}Velocitat: {VELOCITY}  Potència: {POWER}{}Cost de circulació: {CURRENCY}/any{}Capacitat: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Avariat
@@ -2723,7 +2752,9 @@
 STR_886A_RENAME_TRAIN_VEHICLE_TYPE                              :{WHITE}Reanomena el tipus d'element del tren
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}No es pot reanomenar el tipus d'element del tren...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Fer que l'ordre marcada forci al vehicle a volcar la càrrega
-STR_886F_TRANSFER                                               :{BLACK}Transfereix
+STR_886F_TRANSFER                                               :{BLACK}Transf.
+STR_CLEAR_TIME                                                  :{BLACK}Esborra Temps
+STR_RESET_LATENESS                                              :{BLACK}Reseteja el comptador de retrassos
 
 STR_TRAIN_STOPPING                                              :{RED}Parant
 STR_TRAIN_STOPPING_VEL                                          :{RED}Parant, a {VELOCITY}
@@ -2732,8 +2763,18 @@
 STR_TRAIN_START_NO_CATENARY                                     :Aquesta via no té catenària, el tren no pot arrencar
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Nou {STRING} disponible!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Nou/Nova {STRING} disponible!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Nou/Nova {STRING} disponible!  -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Impossible establir l'horari del vehicle...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Els vehicles només poden esperar a les estacions.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Aquest vehicle no para en aquesta estació.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Canvia Temps
+STR_TIMETABLE_STATUS_ON_TIME                                    :Actualment aquest vehicle és puntual
+STR_TIMETABLE_STATUS_LATE                                       :Actualment aquest vehicle va {STRING} tard
+STR_TIMETABLE_STATUS_EARLY                                      :Actualment aquest vehicle va {STRING} d'hora
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Autoomple
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Omple l'horari automàticament amb els valors del primer viatge
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Automòbil en camí
@@ -2749,7 +2790,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Vel. Max.: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Benefici enguany: {LTBLUE}{CURRENCY}  (darrer any: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Rendibilitat: {LTBLUE}{COMMA}%  {BLACK}Avaries des del darrer manteniment: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construit: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construit: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Capacitat: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...s'ha de parar dins d'una cotxera
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}No pots vendre l'automòbil...
@@ -2825,7 +2866,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Max. velocitat: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Benefici enguany: {LTBLUE}{CURRENCY}  (darrer any: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Rendibilitat: {LTBLUE}{COMMA}%  {BLACK}Avaries des de l'últim manteniment: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construit: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construit: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Capacitat: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}No es pot parar/arrencar el vaixell...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}No es pot enviar vaixell a la drassana...
@@ -2893,7 +2934,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Max. velocitat: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Benefici enguany: {LTBLUE}{CURRENCY}  (darrer any: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Rendibilitat: {LTBLUE}{COMMA}%  {BLACK}Avaries des de l'últim manteniment: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construït: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construït: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}No es pot enviar l'aeronau a l'hangar...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Cap a l'hangar de {STATION}.
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Cap a l'hangar de {STATION}, a {VELOCITY}
@@ -2946,6 +2987,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Ves a l'hangar de {STATION}.
 SERVICE_AT_AIRPORT_HANGAR                                       :Manteniment en l'hangar de {STATION}.
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Horari)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Desastre de Zeppelin a {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Automòbil destruit en colisionar amb un 'OVNI'!
@@ -3015,9 +3058,9 @@
 STR_NEWGRF_ADD_TIP                                              :{BLACK}Afegeix un arxiu NewGRF a la llista
 STR_NEWGRF_REMOVE                                               :{BLACK}Treu
 STR_NEWGRF_REMOVE_TIP                                           :{BLACK}Treu l'arxiu NewGRF seleccionat de la llista
-STR_NEWGRF_MOVEUP                                               :{BLACK}Mou Amunt
+STR_NEWGRF_MOVEUP                                               :{BLACK}Mou amunt
 STR_NEWGRF_MOVEUP_TIP                                           :{BLACK}Mou amunt l'arxiu NewGRF seleccionat de la llista
-STR_NEWGRF_MOVEDOWN                                             :{BLACK}Mou Avall
+STR_NEWGRF_MOVEDOWN                                             :{BLACK}Mou avall
 STR_NEWGRF_MOVEDOWN_TIP                                         :{BLACK}Mou avall l'arxiu NewGRF seleccionat de la llista
 STR_NEWGRF_FILE_TIP                                             :{BLACK}Una llista d'arxius NewGRF que ha estat instal·lada. Clica un arxiu per canviar els seus paràmetres
 STR_NEWGRF_PARAMETER                                            :{BLACK}Paràmetres: {SILVER}{STRING}
@@ -3181,8 +3224,8 @@
 STR_NUMBER_OF_TOWNS                                             :{BLACK}No. de pobles:
 STR_NUMBER_OF_INDUSTRIES                                        :{BLACK}No. d'indústries:
 STR_GENERATE_DATE                                               :{BLACK}{DATE_LONG}
-STR_SNOW_LINE_UP                                                :{BLACK}Moure la linia de neu un pas amunt
-STR_SNOW_LINE_DOWN                                              :{BLACK}Moure la linia de neu un pas avall
+STR_SNOW_LINE_UP                                                :{BLACK}Mou la linia de neu un pas amunt
+STR_SNOW_LINE_DOWN                                              :{BLACK}Mou la linia de neu un pas avall
 STR_SNOW_LINE_QUERY_CAPT                                        :{WHITE}Canviar alçada de la linia de neu
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Canviar l'any inicial
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Alerta d'escala
@@ -3211,8 +3254,8 @@
 STR_SE_RANDOM_LAND                                              :{WHITE}Terreny aleatori
 STR_SE_NEW_WORLD                                                :{BLACK}Crear nou escenari
 STR_SE_CAPTION                                                  :{WHITE}Tipus d'escenari
-STR_FLAT_WORLD_HEIGHT_DOWN                                      :{BLACK}Moure l'alçada del terreny pla un pas avall
-STR_FLAT_WORLD_HEIGHT_UP                                        :{BLACK}Moure l'alçada del terreny pla un pas amunt
+STR_FLAT_WORLD_HEIGHT_DOWN                                      :{BLACK}Mou l'alçada del terreny pla un pas avall
+STR_FLAT_WORLD_HEIGHT_UP                                        :{BLACK}Mou l'alçada del terreny pla un pas amunt
 STR_FLAT_WORLD_HEIGHT_QUERY_CAPT                                :{WHITE}Canvia alçada del terreny pla
 STR_FLAT_WORLD_HEIGHT                                           :{BLACK}Alçada del terreny pla:
 STR_FLAT_WORLD_HEIGHT_NUM                                       :{NUM}
@@ -3261,6 +3304,14 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Activa/Desactiva transparència dels edificis com ara estacions, cotxeres, punts de trobada i catenàries
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Activa/Desactiva transparència dels ponts
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Activa/Desactiva transparència de les estructures com ara fars i antenes
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Activa/Desactiva la transparència pels indicadors de carregament
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Grup {COMMA}
@@ -3298,4 +3349,11 @@
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Benefici aquest any: {GREEN}{CURRENCY} {BLACK}(any passat: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Benefici aquest any: {RED}{CURRENCY} {BLACK}(any passat: {RED}{CURRENCY}{BLACK})
 
+STR_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
 ########
--- a/src/lang/czech.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/czech.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -12,8 +12,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Mimo okraj mapy
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Moc blízko k okraji mapy
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Nedostatek peněz - je potřeba {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Je potřeba plochá země
 STR_0008_WAITING                                                :{BLACK}Čeká tu: {WHITE}{STRING}
@@ -553,7 +553,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Místní správa: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Nic
 STR_01AA_NAME                                                   :{BLACK}Jméno
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1.
@@ -1244,7 +1244,7 @@
 STR_CHEATS                                                      :{WHITE}Cheaty
 STR_CHEATS_TIP                                                  :{BLACK}Zaškrtávací políčka ukazují, jestli jsi tento cheat už použil.
 STR_CHEATS_WARNING                                              :{BLACK}Varování! Chystáš se podvést ostatní hráče. Pamatuj si, že tento podlý čin nebude nikdy zapomenut!
-STR_CHEAT_MONEY                                                 :{LTBLUE}Navýšit peníze o {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Navýšit peníze o {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Hrát jako hráč: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Magický buldozer (odstraní průmysl a neodstranitelné předměty): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tunely se mohou křížit: {ORANGE}{STRING}
@@ -1499,9 +1499,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Jméno společnosti:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Založeno:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Hodnota společnosti:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Stav na účtu:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Loňský hrubý zisk:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Hodnota společnosti:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Stav na účtu:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Loňský hrubý zisk:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Výkon:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Vozidla:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1736,7 +1736,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Budova musí být nejprve zničena
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Populace: {ORANGE}{COMMA}{BLACK} Domů: {ORANGE}{COMMA}
@@ -1769,7 +1769,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Ukázat informace o místní správě
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}Místní správa města {TOWN}
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Hodnocení společností:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Dotace
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Nabídnuté dotace pro službu:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING.big} z {STRING} do {STRING}
@@ -1840,7 +1840,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}... strom už tu je
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}... nepoužitelné místo
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Zde nemůžeš vysadit strom...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}... příliš mnoho popisků
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Zde nemůžeš umístit nápis...
 STR_280A_SIGN                                                   :Nápis
@@ -1958,9 +1958,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} MB voln{P ý é ých}
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Nemohu číst z jednotky
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Uložení hry selhalo
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Uložení hry selhalo{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Nemohu smazat soubor
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Nemohu otevřít hru
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Nemohu otevřít hru{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Seznam jednotek, adresářů a uložených her
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Zvolené jméno uložené hry
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Smazat označenou uloženou hru
@@ -2132,7 +2132,7 @@
 STR_SV_STNAME_HELIPORT                                          :{STRING} heliport
 STR_SV_STNAME_FOREST                                            :{STRING} les
 
-STR_SV_GROUP_NAME                                               :{GROUP}
+
 
 ############ end of savegame specific region!
 
@@ -2212,7 +2212,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(hráč {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Nový obličej
 STR_7005_COLOR_SCHEME                                           :{BLACK}Barva
@@ -2224,7 +2224,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Jméno prezidenta
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Nemohu změnit jméno společnosti.
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Nemohu změnit jméno prezidenta.
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finance {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finance {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Příjmy / výdaje
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Výstavba
@@ -2240,20 +2240,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Příjmy lodí
 STR_701C_LOAN_INTEREST                                          :{GOLD}Úroky z půjček
 STR_701D_OTHER                                                  :{GOLD}Další
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Celkem:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Graf příjmu
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Graf provozního zisku
 STR_7026_BANK_BALANCE                                           :{WHITE}Stav na účtu
 STR_7027_LOAN                                                   :{WHITE}Půjčka
-STR_MAX_LOAN                                                    :{WHITE}Max. půjčka:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Půjčit {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Vrátit {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Max. půjčka:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Půjčit {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Vrátit {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}... maximální dovolená výše půjčky je {CURRENCY}.
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Nemohu půjčit více peněz...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}... žádný dluh ke splacení
@@ -2292,8 +2292,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Hodnocení společností (nejvyšší hodnocení=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Hodnota společností
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Tabulka pořadí společností
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Dopravní společnost má problémy!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} bude prodána nebo vyhlásí bankrot, pokud se brzy nezvýší výkonnost!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Prezident)
@@ -2331,7 +2331,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Celosvětový hospodářský úpadek!{}{}Finanční experti se kvůli prudkému poklesu ekonomiky obávají nejhoršího!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Konec hospodářského úpadku!{}{}Posílení trhu zvýšilo u průmyslu důvěru!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Přepnout velké/malé okno
-STR_7076_COMPANY_VALUE                                          :{GOLD}Hodnota společnosti: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Hodnota společnosti: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Koupit 25% podíl ve společnosti
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Prodat 25% podíl ve společnosti
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Koupit 25% podíl v této společnosti
@@ -2649,7 +2649,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}Železniční depo {TOWN}
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Obyvatelé oslavují...{}První vlak dorazil do {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Detaily)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Detaily)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}V cestě je vlak
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2716,8 +2716,8 @@
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Údržba
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Nemohu koupit vagon nebo lokomotivu...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Koupeno: {LTBLUE}{NUM}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Hodnota: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Koupeno: {LTBLUE}{NUM}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Hodnota: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Nakládání / vykládání
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Vlak musí stát v depu
@@ -2796,8 +2796,8 @@
 STR_TRAIN_START_NO_CATENARY                                     :Tato trať není elektrifikována, vlak nemůže odjet
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Nov{G á ý é} {STRING} k dispozici!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Nov{G á ý é} {STRING} k dispozici!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Nov{G á ý é} {STRING} k dispozici!  -  {ENGINE}
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Silniční vozidlo v cestě
@@ -2813,7 +2813,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Max. rychlost: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Příjem tento rok: {LTBLUE}{CURRENCY}  (minulý rok): {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Spolehlivost: {LTBLUE}{COMMA}%  {BLACK}Poruch od posledního servisu: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Koupen: {LTBLUE}{NUM}{BLACK} Cena: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Koupen: {LTBLUE}{NUM}{BLACK} Cena: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Kapacita: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}... musí být zastaven v garáži
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Nemohu prodat silniční vozidlo...
@@ -2889,7 +2889,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Max. rychlost: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Příjem tento rok: {LTBLUE}{CURRENCY}  (minulý rok: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Spolehlivost: {LTBLUE}{COMMA}%  {BLACK}Poruch od posledního servisu: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Koupeno: {LTBLUE}{NUM}{BLACK} Cena: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Koupeno: {LTBLUE}{NUM}{BLACK} Cena: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Kapacita: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Nelze rozjet/zastavit loď...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Nelze poslat loď do depa...
@@ -2957,7 +2957,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Max. rychlost: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Příjem tento rok: {LTBLUE}{CURRENCY}  (minulý rok: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Spolehlivost: {LTBLUE}{COMMA}%  {BLACK}Poruch od posledního servisu: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Koupeno: {LTBLUE}{NUM}{BLACK} Cena: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Koupeno: {LTBLUE}{NUM}{BLACK} Cena: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Nelze poslat letadlo do hangáru...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Jedu do hangáru {STATION}
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Jedu do hangáru {STATION}, {VELOCITY}
--- a/src/lang/danish.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/danish.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Ude over kanten af kortet
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}For tæt på kanten af kortet
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Ikke nok penge - kræver {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Landskabet skal være fladt
 STR_0008_WAITING                                                :{BLACK}Venter: {WHITE}{STRING}
@@ -399,7 +399,7 @@
 STR_SELECT_ALL_FACILITIES                                       :{BLACK}Vælg alle faciliteter
 STR_SELECT_ALL_TYPES                                            :{BLACK}Vælg alle lasttyper (inklusiv fragttyper, der ikke venter)
 STR_AVAILABLE_TRAINS                                            :{BLACK}Tilgængelige tog
-STR_AVAILABLE_ROAD_VEHICLES                                     :{BLACK}Tilgængelige vejkøretøjer
+STR_AVAILABLE_ROAD_VEHICLES                                     :{BLACK}Tilgæn. vejkøretøjer
 STR_AVAILABLE_SHIPS                                             :{BLACK}Tilgængelige skibe
 STR_AVAILABLE_AIRCRAFT                                          :{BLACK}Tilgængelige fly
 STR_AVAILABLE_ENGINES_TIP                                       :{BLACK}Se liste over tilgængelige designs for denne køretøjstype.
@@ -495,7 +495,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Lokal myndighed: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Ingen
 STR_01AA_NAME                                                   :{BLACK}Navn
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1.
@@ -636,7 +636,7 @@
 STR_0231_ROAD_CONSTRUCTION                                      :{BLACK}Bygning af vej
 STR_0233_TOWN_GENERATION                                        :{WHITE}Bygenerering
 STR_0234_NEW_TOWN                                               :{BLACK}Ny by
-STR_0235_CONSTRUCT_NEW_TOWN                                     :{BLACK}Byg en ny by
+STR_0235_CONSTRUCT_NEW_TOWN                                     :{BLACK}Opfør en ny by
 STR_0236_CAN_T_BUILD_TOWN_HERE                                  :{WHITE}Kan ikke bygge en by her...
 STR_0237_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}...for tæt på kanten af kortet
 STR_0238_TOO_CLOSE_TO_ANOTHER_TOWN                              :{WHITE}...for tæt på en anden by
@@ -683,41 +683,41 @@
 STR_025F_BUBBLE_GENERATOR                                       :{BLACK}Boblegenerator
 STR_0260_TOFFEE_QUARRY                                          :{BLACK}Karamelbrud
 STR_0261_SUGAR_MINE                                             :{BLACK}Sukkermine
-STR_0262_CONSTRUCT_COAL_MINE                                    :{BLACK}Byg Kulmine
-STR_0263_CONSTRUCT_POWER_STATION                                :{BLACK}Byg Kraftværk
-STR_0264_CONSTRUCT_SAWMILL                                      :{BLACK}Byg Savværk
+STR_0262_CONSTRUCT_COAL_MINE                                    :{BLACK}Opfør Kulmine
+STR_0263_CONSTRUCT_POWER_STATION                                :{BLACK}Opfør Kraftværk
+STR_0264_CONSTRUCT_SAWMILL                                      :{BLACK}Opfør Savværk
 STR_0265_PLANT_FOREST                                           :{BLACK}Plant Skov
-STR_0266_CONSTRUCT_OIL_REFINERY                                 :{BLACK}Byg Olieraffinaderi
-STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY                             :{BLACK}Byg Boreplatform (Kan kun bygges tæt på kanten af kortet)
-STR_0268_CONSTRUCT_FACTORY                                      :{BLACK}Byg Fabrik
-STR_0269_CONSTRUCT_STEEL_MILL                                   :{BLACK}Byg Stålværk
-STR_026A_CONSTRUCT_FARM                                         :{BLACK}Byg Bondegård
-STR_026B_CONSTRUCT_IRON_ORE_MINE                                :{BLACK}Byg Jernmalmsmine
-STR_026C_CONSTRUCT_OIL_WELLS                                    :{BLACK}Byg Oliekilde
-STR_026D_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Byg Bank (Kan kun bygges i en by med mere end 1200 indbyggere)
-STR_026E_CONSTRUCT_PAPER_MILL                                   :{BLACK}Byg Papirmølle
-STR_026F_CONSTRUCT_FOOD_PROCESSING                              :{BLACK}Byg Fødevareindustri
-STR_0270_CONSTRUCT_PRINTING_WORKS                               :{BLACK}Byg Trykkeri
-STR_0271_CONSTRUCT_GOLD_MINE                                    :{BLACK}Byg Guldmine
-STR_0272_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Byg Bank (Kan kun bygges i en by)
-STR_0273_CONSTRUCT_LUMBER_MILL_TO                               :{BLACK}Byg Træfabrik (for at rydde regnskoven og producere træ)
+STR_0266_CONSTRUCT_OIL_REFINERY                                 :{BLACK}Opfør Olieraffinaderi
+STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY                             :{BLACK}Opfør Boreplatform (Kan kun bygges tæt på kanten af kortet)
+STR_0268_CONSTRUCT_FACTORY                                      :{BLACK}Opfør Fabrik
+STR_0269_CONSTRUCT_STEEL_MILL                                   :{BLACK}Opfør Stålværk
+STR_026A_CONSTRUCT_FARM                                         :{BLACK}Opfør Bondegård
+STR_026B_CONSTRUCT_IRON_ORE_MINE                                :{BLACK}Opfør Jernmalmsmine
+STR_026C_CONSTRUCT_OIL_WELLS                                    :{BLACK}Opfør Oliekilde
+STR_026D_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Opfør Bank (Kan kun bygges i en by med mere end 1200 indbyggere)
+STR_026E_CONSTRUCT_PAPER_MILL                                   :{BLACK}Opfør Papirmølle
+STR_026F_CONSTRUCT_FOOD_PROCESSING                              :{BLACK}Opfør Fødevareindustri
+STR_0270_CONSTRUCT_PRINTING_WORKS                               :{BLACK}Opfør Trykkeri
+STR_0271_CONSTRUCT_GOLD_MINE                                    :{BLACK}Opfør Guldmine
+STR_0272_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Opfør Bank (Kan kun bygges i en by)
+STR_0273_CONSTRUCT_LUMBER_MILL_TO                               :{BLACK}Opfør Savværk (for at rydde regnskoven og producere træ)
 STR_0274_PLANT_FRUIT_PLANTATION                                 :{BLACK}Plant Frugtplantage
 STR_0275_PLANT_RUBBER_PLANTATION                                :{BLACK}Plant Gummiplantage
-STR_0276_CONSTRUCT_WATER_SUPPLY                                 :{BLACK}Byg Vandværk
-STR_0277_CONSTRUCT_WATER_TOWER_CAN                              :{BLACK}Byg Vandtårn (Kan kun bygges i byer)
-STR_0278_CONSTRUCT_DIAMOND_MINE                                 :{BLACK}Byg Diamantmine
-STR_0279_CONSTRUCT_COPPER_ORE_MINE                              :{BLACK}Byg Kobbermalmsmine
+STR_0276_CONSTRUCT_WATER_SUPPLY                                 :{BLACK}Opfør Vandværk
+STR_0277_CONSTRUCT_WATER_TOWER_CAN                              :{BLACK}Opfør Vandtårn (Kan kun bygges i byer)
+STR_0278_CONSTRUCT_DIAMOND_MINE                                 :{BLACK}Opfør Diamantmine
+STR_0279_CONSTRUCT_COPPER_ORE_MINE                              :{BLACK}Opfør Kobbermalmsmine
 STR_027A_PLANT_COTTON_CANDY_FOREST                              :{BLACK}Plant Candyfloss-skov
-STR_027B_CONSTRUCT_CANDY_FACTORY                                :{BLACK}Byg Slikfabrik
-STR_027C_CONSTRUCT_BATTERY_FARM                                 :{BLACK}Byg Batterigård
-STR_027D_CONSTRUCT_COLA_WELLS                                   :{BLACK}Byg Colabrønd
-STR_027E_CONSTRUCT_TOY_SHOP                                     :{BLACK}Byg Legetøjsforretning
-STR_027F_CONSTRUCT_TOY_FACTORY                                  :{BLACK}Byg Legetøjsfabrik
-STR_0280_CONSTRUCT_PLASTIC_FOUNTAINS                            :{BLACK}Byg Plastikspringvand
-STR_0281_CONSTRUCT_FIZZY_DRINK_FACTORY                          :{BLACK}Byg Sodavandsfabrik
-STR_0282_CONSTRUCT_BUBBLE_GENERATOR                             :{BLACK}Byg Boblegenerator
-STR_0283_CONSTRUCT_TOFFEE_QUARRY                                :{BLACK}Byg Karamelbrud
-STR_0284_CONSTRUCT_SUGAR_MINE                                   :{BLACK}Byg Sukkermine
+STR_027B_CONSTRUCT_CANDY_FACTORY                                :{BLACK}Opfør Slikfabrik
+STR_027C_CONSTRUCT_BATTERY_FARM                                 :{BLACK}Opfør Batterigård
+STR_027D_CONSTRUCT_COLA_WELLS                                   :{BLACK}Opfør Colabrønd
+STR_027E_CONSTRUCT_TOY_SHOP                                     :{BLACK}Opfør Legetøjsforretning
+STR_027F_CONSTRUCT_TOY_FACTORY                                  :{BLACK}Opfør Legetøjsfabrik
+STR_0280_CONSTRUCT_PLASTIC_FOUNTAINS                            :{BLACK}Opfør Plastikspringvand
+STR_0281_CONSTRUCT_FIZZY_DRINK_FACTORY                          :{BLACK}Opfør Sodavandsfabrik
+STR_0282_CONSTRUCT_BUBBLE_GENERATOR                             :{BLACK}Opfør Boblegenerator
+STR_0283_CONSTRUCT_TOFFEE_QUARRY                                :{BLACK}Opfør Karamelbrud
+STR_0284_CONSTRUCT_SUGAR_MINE                                   :{BLACK}Opfør Sukkermine
 STR_0285_CAN_T_BUILD_HERE                                       :{WHITE}Kan ikke bygge {STRING} her...
 STR_0286_MUST_BUILD_TOWN_FIRST                                  :{WHITE}...det er nødvendigt at bygge en by først
 STR_0287_ONLY_ONE_ALLOWED_PER_TOWN                              :{WHITE}...kun en tilladt per by
@@ -778,6 +778,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Sværhedsgrad
 STR_02C7_CONFIG_PATCHES                                         :Indstil programrettelser
 STR_NEWGRF_SETTINGS                                             :NewGRF indstillinger
+STR_TRANSPARENCY_OPTIONS                                        :Gennemsigtighedsvalg
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Bynavne vist
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Stationsnavne vist
@@ -805,7 +806,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Kort over verden
 STR_EXTRA_VIEW_PORT                                             :Flere lokalitetsvinduer
 STR_SIGN_LIST                                                   :Liste over skilte
-STR_TRANSPARENCY_OPTIONS                                        :Gennemsigtighedsvalg
 STR_02DF_TOWN_DIRECTORY                                         :Byoversigt
 STR_TOWN_POPULATION                                             :{BLACK}Verdens befolkning: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Lokalitetsvinduer {COMMA}
@@ -1103,6 +1103,9 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Rulleknap-hastighed på kort: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Sæt automatisk på pause når nyt spil startes: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Brug avanceret køretøjsliste: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Benyt laste-indikatorer: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Slå køreplaner for transportmidler til: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Vis køreplan i tik i stedet for dage: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maks. antal tog per spiller: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Maks. antal køretøjer per spiller: {ORANGE}{STRING}
@@ -1126,7 +1129,7 @@
 STR_CONFIG_PATCHES_SERVINT_SHIPS                                :{LTBLUE}Standard service interval for skibe: {ORANGE}{STRING} dage/%
 STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED                       :{LTBLUE}Standard service interval for skibe: {ORANGE}slået fra
 STR_CONFIG_PATCHES_NOSERVICE                                    :{LTBLUE}Slå service fra, når nedbrud er sat til ingen: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_WAGONSPEEDLIMITS                             :{LTBLUE}Aktiver hastigheds begrænsning for vogne: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_WAGONSPEEDLIMITS                             :{LTBLUE}Aktiver hastighedsbegrænsning for vogne: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_DISABLE_ELRAILS                              :{LTBLUE}Slå elektriske jernbaner fra: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_COLORED_NEWS_YEAR                            :{LTBLUE}Farvede nyheder dukker op i: {ORANGE}{STRING}
@@ -1186,7 +1189,7 @@
 STR_CHEATS                                                      :{WHITE}Snydefunktioner
 STR_CHEATS_TIP                                                  :{BLACK}Checkbokse viser, om du har brugt denne snydefunktion før
 STR_CHEATS_WARNING                                              :{BLACK}Advarsel! Du er ved at forråde dine modstandere. Husk at dette vil blive husket i al evighed.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Forøg kassebeholdning med {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Forøg kassebeholdning med {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Spil som spiller: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Magisk bulldozer (nedriv ting, som normalt ikke kan fjernes): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tunneler kan krydse hinanden: {ORANGE}{STRING}
@@ -1263,29 +1266,29 @@
 
 STR_FAST_FORWARD                                                :{BLACK}Kør spillet hurtigere
 STR_MESSAGE_HISTORY                                             :{WHITE}Tidligere beskeder
-STR_MESSAGE_HISTORY_TIP                                         :{BLACK}En liste of seneste nyheder
+STR_MESSAGE_HISTORY_TIP                                         :{BLACK}En liste over seneste nyheder
 STR_MESSAGES_DISABLE_ALL                                        :{BLACK}Slå alle fra
 STR_MESSAGES_ENABLE_ALL                                         :{BLACK}Slå alle til
 
-STR_CONSTRUCT_COAL_MINE_TIP                                     :{BLACK}Byg Kulmine
+STR_CONSTRUCT_COAL_MINE_TIP                                     :{BLACK}Opfør Kulmine
 STR_CONSTRUCT_FOREST_TIP                                        :{BLACK}Plant Skov
-STR_CONSTRUCT_OIL_RIG_TIP                                       :{BLACK}Byg Boreplatform
-STR_CONSTRUCT_FARM_TIP                                          :{BLACK}Opfør en bondegård
-STR_CONSTRUCT_COPPER_ORE_MINE_TIP                               :{BLACK}Byg Kobbermalmsmine
+STR_CONSTRUCT_OIL_RIG_TIP                                       :{BLACK}Opfør Boreplatform
+STR_CONSTRUCT_FARM_TIP                                          :{BLACK}Opfør Bondegård
+STR_CONSTRUCT_COPPER_ORE_MINE_TIP                               :{BLACK}Opfør Kobbermalmsmine
 STR_CONSTRUCT_OIL_WELLS_TIP                                     :{BLACK}Bor efter olie
-STR_CONSTRUCT_GOLD_MINE_TIP                                     :{BLACK}Byg Guldmine
-STR_CONSTRUCT_DIAMOND_MINE_TIP                                  :{BLACK}Byg Diamandmine
-STR_CONSTRUCT_IRON_ORE_MINE_TIP                                 :{BLACK}Byg Jernmalmsmine
-STR_CONSTRUCT_FRUIT_PLANTATION_TIP                              :{BLACK}Opfør Frugtplantage
-STR_CONSTRUCT_RUBBER_PLANTATION_TIP                             :{BLACK}Opfør Gummiplantage
+STR_CONSTRUCT_GOLD_MINE_TIP                                     :{BLACK}Opfør Guldmine
+STR_CONSTRUCT_DIAMOND_MINE_TIP                                  :{BLACK}Opfør Diamantmine
+STR_CONSTRUCT_IRON_ORE_MINE_TIP                                 :{BLACK}Opfør Jernmalmsmine
+STR_CONSTRUCT_FRUIT_PLANTATION_TIP                              :{BLACK}Plant Frugtplantage
+STR_CONSTRUCT_RUBBER_PLANTATION_TIP                             :{BLACK}Plant Gummiplantage
 STR_CONSTRUCT_WATER_SUPPLY_TIP                                  :{BLACK}Opfør Vandforsyning
-STR_CONSTRUCT_COTTON_CANDY_TIP                                  :{BLACK}Plant Candyfloss Skov
+STR_CONSTRUCT_COTTON_CANDY_TIP                                  :{BLACK}Plant Candyfloss-skov
 STR_CONSTRUCT_BATTERY_FARM_TIP                                  :{BLACK}Opfør Batterigård
 STR_CONSTRUCT_COLA_WELLS_TIP                                    :{BLACK}Bor efter Cola
 STR_CONSTRUCT_PLASTIC_FOUNTAINS_TIP                             :{BLACK}Opfør Plastikspringvand
-STR_CONSTRUCT_BUBBLE_GENERATOR_TIP                              :{BLACK}Byg Boblegenerator
+STR_CONSTRUCT_BUBBLE_GENERATOR_TIP                              :{BLACK}Opfør Boblegenerator
 STR_CONSTRUCT_TOFFEE_QUARRY_TIP                                 :{BLACK}Opfør Karamelbrud
-STR_CONSTRUCT_SUGAR_MINE_TIP                                    :{BLACK}Byg Sukkermine
+STR_CONSTRUCT_SUGAR_MINE_TIP                                    :{BLACK}Opfør Sukkermine
 
 STR_INDUSTRYDIR_CAPTION                                         :{WHITE}Industrier
 STR_INDUSTRYDIR_ITEM                                            :{ORANGE}{INDUSTRY}{BLACK} ({CARGO}){YELLOW} ({COMMA}% transporteret)
@@ -1355,7 +1358,7 @@
 
 STR_NETWORK_NEW_GAME_NAME                                       :{BLACK}Spillets navn:
 STR_NETWORK_NEW_GAME_NAME_TIP                                   :{BLACK}Navnet vil blive vist til andre spillere i menuen, hvor man vælger netværksspil
-STR_NETWORK_SET_PASSWORD                                        :{BLACK}Set kodeord
+STR_NETWORK_SET_PASSWORD                                        :{BLACK}Sæt kodeord
 STR_NETWORK_PASSWORD_TIP                                        :{BLACK}Beskyt dit spil med et kodeord hvis du ikke vil have fremmede med
 STR_NETWORK_SELECT_MAP                                          :{BLACK}Vælg et kort:
 STR_NETWORK_SELECT_MAP_TIP                                      :{BLACK}Hvilket kort vil du spille?
@@ -1441,9 +1444,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Selskabsnavn:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Grundlagt:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Virksomhedens værdi:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Nuværende beholdning:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Sidste års indtægt:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Virksomhedens værdi:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Nuværende beholdning:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Sidste års indtægt:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Præstation:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Køretøjer:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1458,9 +1461,9 @@
 STR_NETWORK_CONNECTING_3                                        :{BLACK}(3/6) Venter..
 STR_NETWORK_CONNECTING_4                                        :{BLACK}(4/6) Henter kort..
 STR_NETWORK_CONNECTING_5                                        :{BLACK}(5/6) Behandler data..
-STR_NETWORK_CONNECTING_6                                        :{BLACK}(6/6) Registere..
+STR_NETWORK_CONNECTING_6                                        :{BLACK}(6/6) Registrerer..
 
-STR_NETWORK_CONNECTING_SPECIAL_1                                :{BLACK}Henter spil info..
+STR_NETWORK_CONNECTING_SPECIAL_1                                :{BLACK}Henter spil-info..
 STR_NETWORK_CONNECTING_SPECIAL_2                                :{BLACK}Henter selskabsinfo..
 ############ End of leave-in-this-order
 STR_NETWORK_CONNECTING_WAITING                                  :{BLACK}{NUM} klient{P "" er} foran dig
@@ -1469,7 +1472,7 @@
 STR_NETWORK_DISCONNECT                                          :{BLACK}Afbryd forbindelse
 
 STR_NETWORK_GIVE_MONEY_CAPTION                                  :{WHITE}Skriv det beløb, som du ønsker at give
-STR_NETWORK_NEED_GAME_PASSWORD_CAPTION                          :{WHITE}Serveren er beskyttet. Skriv kodeordet
+STR_NETWORK_NEED_GAME_PASSWORD_CAPTION                          :{WHITE}Serveren er beskyttet. Indtast kodeord
 STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION                       :{WHITE}Selskabet er beskyttet. Indtast kodeord
 STR_NETWORK_CLIENT_LIST                                         :{WHITE}Klient liste
 
@@ -1482,7 +1485,7 @@
 STR_NETWORK_ERR_SAVEGAMEERROR                                   :{WHITE} Kunne ikke hente gemt spil
 STR_NETWORK_ERR_SERVER_START                                    :{WHITE} Kunne ikke starte serveren
 STR_NETWORK_ERR_CLIENT_START                                    :{WHITE} Kunne ikke forbinde
-STR_NETWORK_ERR_TIMEOUT                                         :{WHITE} Forbindelsen #{NUM} svare ikke
+STR_NETWORK_ERR_TIMEOUT                                         :{WHITE} Forbindelsen #{NUM} svarer ikke
 STR_NETWORK_ERR_SERVER_ERROR                                    :{WHITE} Der opstod en protokol-fejl og forbindelse blev lukket
 STR_NETWORK_ERR_WRONG_REVISION                                  :{WHITE} Revisionen af denne klient passer ikke sammen med serverens revision
 STR_NETWORK_ERR_WRONG_PASSWORD                                  :{WHITE} Forkert kodeord
@@ -1678,7 +1681,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Det er nødvendigt at nedrive bygningen først
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Indbyggere: {ORANGE}{COMMA}{BLACK}  Huse: {ORANGE}{COMMA}
@@ -1711,7 +1714,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Vis information om de lokale myndigheder
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} lokal myndighed
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Transportselskabsbedømmelse:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Tilskudsordninger
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Tilskudsordninger i licitation:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} fra {STRING} til {STRING}
@@ -1782,7 +1785,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...der er allerede træer her
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...placeringen er ikke egnet
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Kan ikke plante træer her...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...for mange skilte
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Kan ikke placere skilt her...
 STR_280A_SIGN                                                   :Skilt
@@ -1891,6 +1894,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Kyst eller flodbred
 STR_3806_SHIP_DEPOT                                             :Skibsdok
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...kan ikke bygge på vand
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Kanal må fjernes først
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Gem spil
@@ -1900,9 +1904,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabytes fri
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Kan ikke læse drevet
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Fejl under gemning af spil
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Fejl under gemning af spil{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Kan ikke slette fil
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Fejl under hentning af spil
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Fejl under hentning af spil{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Intern fejl: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Ødelagt gemt spil - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Spillet er gemt med en nyere version
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :Filen kan ikke læses
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :Filen kan ikke skrives
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Liste over drev, biblioteker og gemte spilfiler
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nuværende gemte spils navn
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Slet det valgte gemte spil
@@ -2074,8 +2083,6 @@
 STR_SV_STNAME_HELIPORT                                          :{STRING} Helikopterplads
 STR_SV_STNAME_FOREST                                            :{STRING} Skov
 
-STR_SV_GROUP_NAME                                               :{GROUP}
-
 ############ end of savegame specific region!
 
 ##id 0x6800
@@ -2154,7 +2161,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Spiller {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Nyt ansigt
 STR_7005_COLOR_SCHEME                                           :{BLACK}Farvetema
@@ -2166,7 +2173,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Direktørens navn
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Kan ikke ændre selskabets navn...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Kan ikke ændre direktørens navn...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finanser {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finanser {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Udgifter/Indkomst
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Konstruktion
@@ -2182,20 +2189,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Skibsindkomst
 STR_701C_LOAN_INTEREST                                          :{GOLD}Renter
 STR_701D_OTHER                                                  :{GOLD}Andet
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Total:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Graf over indkomst
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Graf over afkast
 STR_7026_BANK_BALANCE                                           :{WHITE}Bank balance
 STR_7027_LOAN                                                   :{WHITE}Lån
-STR_MAX_LOAN                                                    :{WHITE}Maks. lån:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Lån {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Tilbagebetal {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Maks. lån:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Lån {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Tilbagebetal {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...maksimale størrelse af lån er {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Kan ikke låne flere penge...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...ingen lån at tilbagebetale
@@ -2234,8 +2241,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Selskabets ydelsesrate (maksimal=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Selskabsværdier
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Selskabsoversigt
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Transportselskab i vanskeligheder!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} vil blive erklæret konkurs eller solgt, hvis ikke ydelsen stiger snart!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Direktør)
@@ -2273,7 +2280,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Lavkonjuktur over hele verden!{}{}Vismændende frygter det værste, økonomien skrumper!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Økonomisk krise overvundet!{}{}Stigning i forbrug giver industrien selvtilliden tilbage, produktionen øges!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Skift mellem stort/lille vindue
-STR_7076_COMPANY_VALUE                                          :{GOLD}Selskabsværdi: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Selskabsværdi: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Køb 25% aktier i selskabet
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Sælg 25% aktier i selskabet
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Køb 25% aktier i dette selskab
@@ -2585,7 +2592,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} remise
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Indbyggerne fester . . .{}Første tog ankommer til {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Detaljer)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Detaljer)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Tog i vejen
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2606,6 +2613,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Gå uden stop til {TOWN} remise
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Service uden stop i {TOWN} remise
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Rejs (ikke iflg. køreplan)
+STR_TIMETABLE_TRAVEL_FOR                                        :Rejs i {STRING}
+STR_TIMETABLE_STAY_FOR                                          :og vent i {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} dag{P "" e}
+STR_TIMETABLE_TICKS                                             :{COMMA} tik
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Kører til {TOWN} remise
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Kører til {TOWN} remise, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Service i {TOWN} remise
@@ -2647,13 +2661,15 @@
 STR_REFIT                                                       :{BLACK}Ombyg
 STR_REFIT_TIP                                                   :{BLACK}Vælg hvilken lasttype der skal ombygges til i denne ordre. CTRL-klik for at fjerne ombygningsinstruktion
 STR_REFIT_ORDER                                                 :(Ombyg til {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Køreplan
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Skift til køreplan-visning
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Ordrer)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Slut på ordrer - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Service
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Kan ikke bygge jernbanekøretøj...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Bygget: {LTBLUE}{NUM}{BLACK} Værdi: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Værdi: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Bygget: {LTBLUE}{NUM}{BLACK} Værdi: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Værdi: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Læsser / Aflæsser
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Toget skal være stoppet inde i en remise
@@ -2703,6 +2719,10 @@
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Indsæt en ny ordre før den markerede eller ved slutningen af ordrelisten
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Få den markerede ordre til at tvinge toget til at vente på en fuld last
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Få den markerede ordre til at tvinge toget til at aflæsse
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Køreplan - klik på en ordre for at markere den.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Ændre hvor lang tid den markerede ordre skal tage
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Nulstil tiden for den markerede ordre
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Nulstil forsinkelses-tæller, så transportmidlet kommer til tiden
 STR_SERVICE_HINT                                                :{BLACK}Spring denne ordre over medmindre der er behov for service
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Pris: {CURRENCY} Vægt: {WEIGHT_S}{}Hastighed: {VELOCITY}  Styrke: {POWER}{}Driftsomkostninger: {CURRENCY}/år{}Kapacitet: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Gået i stykker
@@ -2724,6 +2744,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Kan ikke omdøbe tog-/togvognstypen...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Få den valgte ordre til at tvinge køretøjet til at smide lasten
 STR_886F_TRANSFER                                               :{BLACK}Overfør
+STR_CLEAR_TIME                                                  :{BLACK}Nulstil tid
+STR_RESET_LATENESS                                              :{BLACK}Nulstil forsinkelse
 
 STR_TRAIN_STOPPING                                              :{RED}Stopper
 STR_TRAIN_STOPPING_VEL                                          :{RED}Stopper, {VELOCITY}
@@ -2732,8 +2754,16 @@
 STR_TRAIN_START_NO_CATENARY                                     :Toget kan ikke køre, fordi sporet ikke har køreledninger
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Ny {STRING} er nu tilgængelig!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Ny {STRING} er nu tilgængelig!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Ny {STRING} er nu tilgængelig!  -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Kan ikke lave køreplan for transportmiddel...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Transportmidler kan kun vente ved stationer.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Dette transportmiddel stopper ikke ved denne station.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Ændre tid
+STR_TIMETABLE_STATUS_ON_TIME                                    :Dette transportmiddel kommer til tiden
+STR_TIMETABLE_STATUS_LATE                                       :Dette transportmiddel er nu {STRING} forsinket
+STR_TIMETABLE_STATUS_EARLY                                      :Dette transportmiddel er nu {STRING} foran køreplanen
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Køretøj i vejen
@@ -2749,7 +2779,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Maks. hastighed: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Afkast i år: {LTBLUE}{CURRENCY}  (sidste år: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Pålidelighed: {LTBLUE}{COMMA}%  {BLACK}Nedbrud siden sidste service: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Bygget: {LTBLUE}{NUM}{BLACK} Værdi: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Bygget: {LTBLUE}{NUM}{BLACK} Værdi: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Kapacitet: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...skal være stoppet inde i et værksted først
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Kan ikke sælge køretøj...
@@ -2825,7 +2855,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Maks. hastighed: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Afkast i år: {LTBLUE}{CURRENCY}  (sidste år: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Pålidelighed: {LTBLUE}{COMMA}%  {BLACK}Nedbrud siden sidste service: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Bygget: {LTBLUE}{NUM}{BLACK} Værdi: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Bygget: {LTBLUE}{NUM}{BLACK} Værdi: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Kapacitet: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Kan ikke stoppe/starte skibet...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Kan ikke sende skibet til dok...
@@ -2893,7 +2923,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Maks. hastighed: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Afkast i år: {LTBLUE}{CURRENCY}  (sidste år: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Pålidelighed: {LTBLUE}{COMMA}%  {BLACK}Nedbrud siden sidste service: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Bygget: {LTBLUE}{NUM}{BLACK} Værdi: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Bygget: {LTBLUE}{NUM}{BLACK} Værdi: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Kan ikke sende flyet til en hangar...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Flyver til {STATION} hangar
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Flyver til {STATION} hangar, {VELOCITY}
@@ -2946,6 +2976,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Flyv til {STATION} hangar
 SERVICE_AT_AIRPORT_HANGAR                                       :Service i {STATION} hangar
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Køreplan)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Zeppelin katastrofe ved {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Lastbil ødelagt i kollision med en UFO
@@ -3261,6 +3293,14 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Skift gennemsigtighed for konstruktioner som stationer, værksteder, kontrolsteder og køreledninger
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Skift gennemsigtighed for broer
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Skift gennemsigtighed for strukturer som fyrtårne og antenner, og måske i fremtiden for øjeguf
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Slå gennemsigtighed til/fra for laste-indikatorer
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Gruppe {COMMA}
@@ -3298,4 +3338,7 @@
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Afkast i indeværende år: {GREEN}{CURRENCY} {BLACK}(sidste år: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Afkast i indeværende år: {RED}{CURRENCY} {BLACK}(sidste år: {RED}{CURRENCY}{BLACK})
 
+STR_GROUP_NAME                                                  :{GROUP}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
 ########
--- a/src/lang/dutch.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/dutch.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Buiten de kaart
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Te dicht bij de rand van de kaart
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Niet genoeg geld - {CURRENCY} nodig
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Vlak land nodig
 STR_0008_WAITING                                                :{BLACK}Wachtend: {WHITE}{STRING}
@@ -231,7 +231,7 @@
 STR_0105_BANK                                                   :{BLACK}{TINYFONT}Bank
 STR_0106_PAPER_MILL                                             :{BLACK}{TINYFONT}Papierfabriek
 STR_0107_GOLD_MINE                                              :{BLACK}{TINYFONT}Goudmijn
-STR_0108_FOOD_PROCESSING_PLANT                                  :{BLACK}{TINYFONT}Voedselverwerkings fabriek
+STR_0108_FOOD_PROCESSING_PLANT                                  :{BLACK}{TINYFONT}Voedselverwerkingsfabriek
 STR_0109_DIAMOND_MINE                                           :{BLACK}{TINYFONT}Diamantmijn
 STR_010A_COPPER_ORE_MINE                                        :{BLACK}{TINYFONT}Kopermijn
 STR_010B_FRUIT_PLANTATION                                       :{BLACK}{TINYFONT}Fruitplantage
@@ -349,8 +349,8 @@
 
 ############ range for menu starts
 STR_0154_OPERATING_PROFIT_GRAPH                                 :Winstgrafiek
-STR_0155_INCOME_GRAPH                                           :Inkomenstegrafiek
-STR_0156_DELIVERED_CARGO_GRAPH                                  :Afgeleverde lading-grafiek
+STR_0155_INCOME_GRAPH                                           :Inkomstengrafiek
+STR_0156_DELIVERED_CARGO_GRAPH                                  :Afgeleverde ladinggrafiek
 STR_0157_PERFORMANCE_HISTORY_GRAPH                              :Prestatiegrafiek
 STR_0158_COMPANY_VALUE_GRAPH                                    :Bedrijfswaardegrafiek
 STR_0159_CARGO_PAYMENT_RATES                                    :Ladingsprijzen
@@ -358,7 +358,7 @@
 STR_PERFORMANCE_DETAIL_MENU                                     :Detail prestatiewaarde
 ############ range for menu ends
 
-STR_015B_OPENTTD                                                :{WHITE}OpenTTD
+STR_015B_OPENTTD                                                :{WHITE}Over OpenTTD
 STR_015C_SAVE_GAME                                              :Spel opslaan
 STR_015D_LOAD_GAME                                              :Spel laden
 STR_015E_QUIT_GAME                                              :Spel stoppen
@@ -397,7 +397,7 @@
 STR_ENGINE_SORT_CARGO_CAPACITY                                  :Vracht capaciteit
 STR_NO_WAITING_CARGO                                            :{BLACK}Er wacht geen vracht van enig type
 STR_SELECT_ALL_FACILITIES                                       :{BLACK}Kies alle faciliteiten
-STR_SELECT_ALL_TYPES                                            :{BLACK}Kies alle vracht typen (inclusief niet wachtende vracht)
+STR_SELECT_ALL_TYPES                                            :{BLACK}Kies alle vrachttypen (inclusief niet wachtende vracht)
 STR_AVAILABLE_TRAINS                                            :{BLACK}Beschikbare Treinen
 STR_AVAILABLE_ROAD_VEHICLES                                     :{BLACK}Beschikbare Voertuigen
 STR_AVAILABLE_SHIPS                                             :{BLACK}Beschikbare Schepen
@@ -406,10 +406,10 @@
 STR_MANAGE_LIST                                                 :{BLACK}Beheer lijst
 STR_MANAGE_LIST_TIP                                             :{BLACK}Stuur instructies naar alle voertuigen in de lijst
 STR_REPLACE_VEHICLES                                            :Vervang voertuigen
-STR_SEND_TRAIN_TO_DEPOT                                         :Stuur naar Depot
-STR_SEND_ROAD_VEHICLE_TO_DEPOT                                  :Stuur naar Depot
-STR_SEND_SHIP_TO_DEPOT                                          :Stuur naar Depot
-STR_SEND_AIRCRAFT_TO_HANGAR                                     :Stuur naar Hangar
+STR_SEND_TRAIN_TO_DEPOT                                         :Stuur naar depot
+STR_SEND_ROAD_VEHICLE_TO_DEPOT                                  :Stuur naar depot
+STR_SEND_SHIP_TO_DEPOT                                          :Stuur naar depot
+STR_SEND_AIRCRAFT_TO_HANGAR                                     :Stuur naar hangar
 STR_SEND_FOR_SERVICING                                          :Stuur naar onderhoud
 
 ############ range for months starts
@@ -458,9 +458,9 @@
 STR_018A_CAN_T_CHANGE_SERVICING                                 :{WHITE}Kan onderhoudsinterval niet aanpassen...
 STR_018B_CLOSE_WINDOW                                           :{BLACK}Sluit venster
 STR_018C_WINDOW_TITLE_DRAG_THIS                                 :{BLACK}Vensternaam - sleep om venster te verplaatsen
-STR_STICKY_BUTTON                                               :{BLACK}Markeer dit venster als niet-verwijderbaar door de 'Sluit Alle Vensters' knop
+STR_STICKY_BUTTON                                               :{BLACK}Markeer dit venster als niet-sluitbaar door de 'Sluit alle vensters'-knop
 STR_RESIZE_BUTTON                                               :{BLACK}Klik en sleep om dit venster van grootte te veranderen
-STR_SAVELOAD_HOME_BUTTON                                        :{BLACK}Klik hier om naar de standaard bewaar/laad directorie te gaan
+STR_SAVELOAD_HOME_BUTTON                                        :{BLACK}Klik hier om naar de standaard bewaar/laadmap te gaan
 STR_018D_DEMOLISH_BUILDINGS_ETC                                 :{BLACK}Sloop gebouwen etc. op een stuk land
 STR_018E_LOWER_A_CORNER_OF_LAND                                 :{BLACK}Verlaag een hoek van het land
 STR_018F_RAISE_A_CORNER_OF_LAND                                 :{BLACK}Verhoog een hoek van het land
@@ -495,7 +495,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Gemeente: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Geen
 STR_01AA_NAME                                                   :{BLACK}Naam
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1
@@ -778,6 +778,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Moeilijkheidsgraad
 STR_02C7_CONFIG_PATCHES                                         :Kies patches
 STR_NEWGRF_SETTINGS                                             :Newgrf instellingen
+STR_TRANSPARENCY_OPTIONS                                        :Doorzichtigheidsopties
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Geef stadsnamen weer
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Geef stationsnamen weer
@@ -805,7 +806,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Kaart
 STR_EXTRA_VIEW_PORT                                             :Extra kijkvenster
 STR_SIGN_LIST                                                   :Bordenlijst
-STR_TRANSPARENCY_OPTIONS                                        :Doorzichtigheidsopties
 STR_02DF_TOWN_DIRECTORY                                         :Stedenlijst
 STR_TOWN_POPULATION                                             :{BLACK}Wereldbevolking: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Kijkvenster {COMMA}
@@ -872,7 +872,7 @@
 STR_0329_PURCHASE_LAND_FOR_FUTURE                               :{BLACK}Koop land voor toekomstig gebruik
 STR_032F_AUTOSAVE                                               :{RED}AUTOSAVE
 STR_SAVING_GAME                                                 :{RED}*  *  SPEL WORDT OPGESLAGEN  *  *
-STR_SAVE_STILL_IN_PROGRESS                                      :{WHITE}Opslaan van spel is nog bezig,{}wacht tot dit voltooid is!
+STR_SAVE_STILL_IN_PROGRESS                                      :{WHITE}Opslaan van spel is nog bezig,{}Wacht tot dit voltooid is!
 STR_0330_SELECT_EZY_STREET_STYLE                                :{BLACK}Kies 'Ezy Street style music' programma
 
 STR_0335_6                                                      :{BLACK}6
@@ -993,10 +993,10 @@
 STR_TRAIN_HAS_VOID_ORDER                                        :{WHITE}Trein {COMMA} heeft een lege opdracht
 STR_TRAIN_HAS_DUPLICATE_ENTRY                                   :{WHITE}Trein {COMMA} heeft dubbele orders
 STR_TRAIN_HAS_INVALID_ENTRY                                     :{WHITE}Trein {COMMA} heeft een ongeldig station in de orders
-STR_ROADVEHICLE_HAS_TOO_FEW_ORDERS                              :{WHITE}Wegvoertuig {COMMA} heeft te weinig orders in de orderlijst
-STR_ROADVEHICLE_HAS_VOID_ORDER                                  :{WHITE}Wegvoertuig {COMMA} heeft lege order
-STR_ROADVEHICLE_HAS_DUPLICATE_ENTRY                             :{WHITE}Wegvoertuig {COMMA} heeft dubbele orders
-STR_ROADVEHICLE_HAS_INVALID_ENTRY                               :{WHITE}Wegvoertuig {COMMA} heeft een ongeldig station in de orders
+STR_ROADVEHICLE_HAS_TOO_FEW_ORDERS                              :{WHITE}Wagen {COMMA} heeft te weinig orders in de orderlijst
+STR_ROADVEHICLE_HAS_VOID_ORDER                                  :{WHITE}Wagen {COMMA} heeft lege order
+STR_ROADVEHICLE_HAS_DUPLICATE_ENTRY                             :{WHITE}Wagen {COMMA} heeft dubbele orders
+STR_ROADVEHICLE_HAS_INVALID_ENTRY                               :{WHITE}Wagen {COMMA} heeft een ongeldig station in de orders
 STR_SHIP_HAS_TOO_FEW_ORDERS                                     :{WHITE}Schip {COMMA} heeft te weinig order is orderlijst
 STR_SHIP_HAS_VOID_ORDER                                         :{WHITE}Schip {COMMA} heeft lege order
 STR_SHIP_HAS_DUPLICATE_ENTRY                                    :{WHITE}Schip {COMMA} heeft dubbele orders
@@ -1008,7 +1008,7 @@
 # end of order system
 
 STR_TRAIN_AUTORENEW_FAILED                                      :{WHITE}Automatisch vernieuwen mislukt bij trein {COMMA} (onvoldoende geld)
-STR_ROADVEHICLE_AUTORENEW_FAILED                                :{WHITE}Automatisch vernieuwen mislukt bij voertuig {COMMA} (onvoldoende geld)
+STR_ROADVEHICLE_AUTORENEW_FAILED                                :{WHITE}Automatisch vernieuwen mislukt bij wagen {COMMA} (onvoldoende geld)
 STR_SHIP_AUTORENEW_FAILED                                       :{WHITE}Automatisch vernieuwen mislukt bij schip {COMMA} (onvoldoende geld)
 STR_AIRCRAFT_AUTORENEW_FAILED                                   :{WHITE}Automatisch vernieuwen mislukt bij vliegtuig {COMMA} (onvoldoende geld)
 STR_TRAIN_TOO_LONG_AFTER_REPLACEMENT                            :{WHITE}Trein {COMMA} is te lang na het vervangen
@@ -1103,6 +1103,17 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Kaart muiswiel snelheid: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automatisch pauzeren wanneer je een nieuw spel start: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Gebruik de geavanceerde voertuigenlijst: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Gebruik laad indicatoren: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Activeer dienstregeling voor voertuigen: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Toon dienstregeling in tikken ipv in dagen: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE                            :{LTBLUE}Standaard spoorsoort (bij nieuw of opgeslagen spel): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Normaal  spoor
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Elektrisch spoor
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Monorail
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :Eerst beschikbare
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :Laatst beschikbare
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :Meest gebruikte
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maximaal aantal treinen per speler: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Maximaal aantal wegvoertuigen per speler: {ORANGE}{STRING}
@@ -1181,12 +1192,12 @@
 STR_TEMPERATE_LANDSCAPE                                         :gematigd landschap
 STR_SUB_ARCTIC_LANDSCAPE                                        :subarctisch landschap
 STR_SUB_TROPICAL_LANDSCAPE                                      :subtropisch landschap
-STR_TOYLAND_LANDSCAPE                                           :speelgoed landschap
+STR_TOYLAND_LANDSCAPE                                           :Speelgoedlandschap
 
 STR_CHEATS                                                      :{WHITE}Cheats
 STR_CHEATS_TIP                                                  :{BLACK}Keuzevakjes geven aan of je deze cheat al ooit gebruikt hebt.
 STR_CHEATS_WARNING                                              :{BLACK}Waarschuwing! Je staat op het punt je concurrenten te verraden. Bedenk dat zo'n schande eeuwig wordt onthouden.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Verhoog geld met {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Verhoog geld met {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Spelend als speler: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Magische bulldozer (industrieën en andere onverplaatsbare objecten verwijderen): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tunnels mogen elkaar kruisen: {ORANGE}{STRING}
@@ -1258,7 +1269,7 @@
 
 STR_DRAG_DROP                                                   :{BLACK}Slepen
 STR_STATION_DRAG_DROP                                           :{BLACK}Bouw een station door te slepen
-STR_SELECT_STATION_CLASS_TIP                                    :{BLACK}Selecteer een station type
+STR_SELECT_STATION_CLASS_TIP                                    :{BLACK}Selecteer een stationtype
 STR_SELECT_STATION_TYPE_TIP                                     :{BLACK}Selecteer het type station om te bouwen
 
 STR_FAST_FORWARD                                                :{BLACK}Verhoog de spelsnelheid
@@ -1441,9 +1452,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Bedrijfsnaam:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Begonnen in:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Bedrijfswaarde:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Huidige kas:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Inkomen vorig jaar:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Bedrijfswaarde:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Huidige kas:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Inkomen vorig jaar:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Prestatie:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Voertuigen:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1678,7 +1689,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Gebouw moet eerst gesloopt worden
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Bevolking: {ORANGE}{COMMA}{BLACK}  Huizen: {ORANGE}{COMMA}
@@ -1711,7 +1722,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Geef informatie over de gemeente weer
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN}'s gemeenteraad
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Reputatie van transportbedrijven:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subsidies
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Beschikbare subsidies:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} van {STRING} naar {STRING}
@@ -1782,7 +1793,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}....er staat hier al een boom
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...plek niet geschikt
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Kan hier geen boom planten...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...teveel borden
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Kan hier geen bord plaatsen
 STR_280A_SIGN                                                   :Bord
@@ -1891,6 +1902,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Kust of rivierbed
 STR_3806_SHIP_DEPOT                                             :Scheepswerf
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...Kan niet op water bouwen
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Het kanaal moet eerst verwijderd worden
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Spel Opslaan
@@ -1900,9 +1912,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabytes vrij
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Kan niet lezen van schijf
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Opslaan Spel Mislukt
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Opslaan Spel Mislukt{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Kan bestand niet verwijderen
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Laden Spel Mislukt
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Laden Spel Mislukt{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Interne fout: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Kapotte savegame - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Opgeslagen spel hoort bij een nieuwere versie
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :Bestand is niet leesbaar
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :Bestand is niet schrijfbaar
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Lijst van schijven, mappen, en opgeslagen spellen
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Huidige gekozen naam voor opgeslagen spel
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Verwijder het momenteel geselecteerde opgeslagen spel
@@ -2036,7 +2053,7 @@
 STR_SV_EMPTY                                                    :
 STR_SV_UNNAMED                                                  :Geen naam
 STR_SV_TRAIN_NAME                                               :Trein {COMMA}
-STR_SV_ROADVEH_NAME                                             :Automobiel {COMMA}
+STR_SV_ROADVEH_NAME                                             :Wagen {COMMA}
 STR_SV_SHIP_NAME                                                :Schip {COMMA}
 STR_SV_AIRCRAFT_NAME                                            :Vliegtuig {COMMA}
 
@@ -2073,8 +2090,7 @@
 STR_SV_STNAME_LOWER                                             :Lager {STRING}
 STR_SV_STNAME_HELIPORT                                          :{STRING} Helihaven
 STR_SV_STNAME_FOREST                                            :{STRING} Bossen
-
-STR_SV_GROUP_NAME                                               :{GROUP}
+STR_SV_STNAME_FALLBACK                                          :{STRING} Station #{NUM}
 
 ############ end of savegame specific region!
 
@@ -2154,7 +2170,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Speler {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Nieuw gezicht
 STR_7005_COLOR_SCHEME                                           :{BLACK}Kleurenschema
@@ -2166,7 +2182,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Naam van directeur
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Kan bedrijfsnaam niet veranderen...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Kan naam directeur niet veranderen...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Financiën {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Financiën {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Uitgaven/inkomsten
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Bouwkosten
@@ -2182,20 +2198,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Schipinkomsten
 STR_701C_LOAN_INTEREST                                          :{GOLD}Rente van lening
 STR_701D_OTHER                                                  :{GOLD}Overig
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Totaal:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Inkomstengrafiek
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Bedrijfswinst Grafiek
 STR_7026_BANK_BALANCE                                           :{WHITE}Banksaldo
 STR_7027_LOAN                                                   :{WHITE}Lening
-STR_MAX_LOAN                                                    :{WHITE}Max lening:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Leen {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Betaal {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY} terug
+STR_MAX_LOAN                                                    :{WHITE}Max lening:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Leen {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Betaal {SKIP}{SKIP}{CURRENCY} terug
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...maximaal toegestane leninggrootte is {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Kan geen geld meer lenen...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...geen lening om terug te betalen
@@ -2213,7 +2229,7 @@
 STR_7038_INAUGURATED                                            :{GOLD}Gesticht: {WHITE}{NUM}
 STR_7039_VEHICLES                                               :{GOLD}Voertuigen:
 STR_TRAINS                                                      :{WHITE}{COMMA} trein{P "" en}
-STR_ROAD_VEHICLES                                               :{WHITE}{COMMA} wegvoertuig{P "" en}
+STR_ROAD_VEHICLES                                               :{WHITE}{COMMA} wagen{P "" s}
 STR_AIRCRAFT                                                    :{WHITE}{COMMA} vliegtuig{P "" en}
 STR_SHIPS                                                       :{WHITE}{COMMA} sch{P ip epen}
 STR_7042_NONE                                                   :{WHITE}Geen
@@ -2234,8 +2250,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Bedrijfs prestatie score (maximale score=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Bedrijfswaarde
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Bedrijfscompetitietabel
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Transportbedrijf in de problemen!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} wordt verkocht of failliet verklaard tenzij finanicele situatie snel verbetert!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Directeur)
@@ -2273,7 +2289,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Wereld Recessie!{}{}Financiële experts vrezen het ergste terwijl economie ineen stort!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Recessie Voorbij!{}{}Stijgende handel geeft industrie vertrouwen terwijl economie verstevigt!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Schakel tussen groot/klein venster
-STR_7076_COMPANY_VALUE                                          :{GOLD}Bedrijfswaarde: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Bedrijfswaarde: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Koop 25% aandeel in bedrijf
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Verkoop 25% aandeel in bedrijf
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Koop een aandeel van 25% in dit bedrijf
@@ -2585,7 +2601,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Treindepot
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Inwoners feesten... {}Eerste trein arriveert in {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Details)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Details)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Trein in de weg
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2602,9 +2618,16 @@
 STR_8810_GO_NON_STOP_TO_LOAD                                    :Ga non-stop naar {STATION} (Laden)
 STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD                           :Ga non-stop naar {STATION} (Overladen en wacht tot vol geladen)
 STR_GO_TO_TRAIN_DEPOT                                           :Ga naar {TOWN} Trein Depot
-STR_SERVICE_AT_TRAIN_DEPOT                                      :Reparatie in {TOWN} Treindepot
+STR_SERVICE_AT_TRAIN_DEPOT                                      :Reparatie in {TOWN} treindepot
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Ga zonder tussenstop naar {TOWN} Treindepot
-STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Reparatie zonder tussentop in {TOWN} Treindepot
+STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Reparatie zonder tussentop in {TOWN} treindepot
+
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Reis (geen dienstregeling)
+STR_TIMETABLE_TRAVEL_FOR                                        :Reis naar {STRING}
+STR_TIMETABLE_STAY_FOR                                          :en blijf voor {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} dag{P "" en}
+STR_TIMETABLE_TICKS                                             :{COMMA} tik{P "" ken}
 
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Op weg naar {TOWN} Trein Depot
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Op weg naar {TOWN} Trein Depot, {VELOCITY}
@@ -2647,13 +2670,15 @@
 STR_REFIT                                                       :{BLACK}Ombouwen
 STR_REFIT_TIP                                                   :{BLACK}Kies naar welk type vracht ombouwen in deze order. Ctrl-klik om ombouw instructie te verwijderen
 STR_REFIT_ORDER                                                 :(Ombouwen naar {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Dienstregeling
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Schakel naar de dienstregeling
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Orders)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Einde van orders - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Reparatie
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Kan spoorvoertuig niet bouwen...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Gebouwd: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Waarde: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Gebouwd: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Waarde: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}In- en uitladen
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Trein moet gestopt zijn in depot
@@ -2703,6 +2728,10 @@
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Voeg een nieuwe order in voor de geselecteerde order, of voeg het toe aan de eind van de lijst
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Zorg dat de geselecteerde order het voertuig forceert te wachten voor een volledige belading
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Zorg dat de geselecteerde order het voertuig forceert uit te laden
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Dienstregeling - klik op een opdracht om het te selecteren
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Verander de hoeveelheid tijd die de geselecteerde opdracht mag innemen
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Verwijder de hoeveelheid tijd die de geselecteerde opdracht mag innemen
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Reset de teller zodat het voertuig toch op tijd is
 STR_SERVICE_HINT                                                :{BLACK}Sla deze order over tenzij een reparatie nodig is
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Prijs: {CURRENCY} Gewicht: {WEIGHT_S}{}Snelheid: {VELOCITY}  Kracht: {POWER}{}Brandstofprijs: {CURRENCY}/jr{}Capaciteit: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Kapot
@@ -2724,6 +2753,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Kan het trein voertuig type niet hernoemen...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Forceer het voertuig goederen te dumpen bij geselecteerde order
 STR_886F_TRANSFER                                               :{BLACK}Overladen
+STR_CLEAR_TIME                                                  :{BLACK}Reset de tijd
+STR_RESET_LATENESS                                              :{BLACK}Reset teller
 
 STR_TRAIN_STOPPING                                              :{RED}Gestopt
 STR_TRAIN_STOPPING_VEL                                          :{RED}Aan het stoppen, {VELOCITY}
@@ -2732,8 +2763,16 @@
 STR_TRAIN_START_NO_CATENARY                                     :Er is geen bovenleiding, de trein kan niet starten
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Nieuw {STRING} nu beschikbaar!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Nieuw {STRING} nu beschikbaar!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Nieuw {STRING} nu beschikbaar!  -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Kan geen dienstregeling opzetten voor dit voertuig...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Voertuigen kunnen alleen wachten op stations.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Dit voertuig stopt niet op dit station
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Verander de tijd
+STR_TIMETABLE_STATUS_ON_TIME                                    :Dit voertuig loopt op schema
+STR_TIMETABLE_STATUS_LATE                                       :Dit voertuig heeft {STRING} vertraging
+STR_TIMETABLE_STATUS_EARLY                                      :Dit voertuig is {STRING} te vroeg
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Wegvoertuig in de weg
@@ -2749,7 +2788,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Max. snelheid: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Winst dit jaar: {LTBLUE}{CURRENCY}  (vorig jaar: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Betrouwbaarheid: {LTBLUE}{COMMA}%  {BLACK}Pechgevallen sinds laatste reparaties: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Gebouwd: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Gebouwd: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Capaciteit: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...moet gestopt zijn binnen een wegvoertuig depot
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Kan dit wegvoertuig niet verkopen...
@@ -2795,13 +2834,13 @@
 STR_9036_RENAME_ROAD_VEHICLE_TYPE                               :{WHITE}Hernoem wegvoertuigtype
 STR_9037_CAN_T_RENAME_ROAD_VEHICLE                              :{WHITE}Kan wegvoertuigtype niet hernoemen...
 STR_9038_GO_TO_ROADVEH_DEPOT                                    :Ga naar {TOWN} Wegvoertuig Depot
-STR_SERVICE_AT_ROADVEH_DEPOT                                    :Repareren in {TOWN} Wegvoertuig Depot
+STR_SERVICE_AT_ROADVEH_DEPOT                                    :Repareren in {TOWN} wagendepot
 
 STR_REFIT_ROAD_VEHICLE_TO_CARRY                                 :{BLACK}Verbouw het wegvoertuig om een andere lading the vervoeren
 STR_REFIT_ROAD_VEHICLE                                          :{BLACK}Verbouw wegvoertuig
 STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED                     :{BLACK}Verbouw wegvoertuig om geselecteerd vrachttype te vervoeren
 STR_REFIT_ROAD_VEHICLE_CAN_T                                    :{WHITE}Kan wegvoertuig niet verbouwen
-STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Selecteer welk type vracht het wegvoertuig moet vervoeren
+STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Selecteer welk type vracht het wagen moet vervoeren
 
 ##id 0x9800
 STR_9800_DOCK_CONSTRUCTION                                      :Dokbouw
@@ -2825,7 +2864,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Max. snelheid: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Winst dit jaar: {LTBLUE}{CURRENCY}  (vorig jaar: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Betrouwbaarheid: {LTBLUE}{COMMA}%  {BLACK}Pechgevallen sinds laatste reparatie: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Gebouwd: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Gebouwd: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Capaciteit: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Kan schip niet starten of stoppen...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Kan schip niet naar depot sturen...
@@ -2893,7 +2932,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Max. snelheid: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Winst dit jaar: {LTBLUE}{CURRENCY}  (vorig jaar: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Betrouwbaarheid: {LTBLUE}{COMMA}%  {BLACK}Pechgevallen sinds laatste reparatie: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Bouwdatum: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Bouwdatum: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Kan vliegtuig niet naar hangar sturen...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Op weg naar {STATION} Hangar
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Op weg naar {STATION} Hangar, {VELOCITY}
@@ -2946,6 +2985,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Ga naar {STATION} hanger
 SERVICE_AT_AIRPORT_HANGAR                                       :Reperatie bij {STATION} hanger
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Dienstregeling)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Zeppelin ongeluk bij {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Voertuig vernietigd in botsing met 'UFO'
@@ -3055,13 +3096,13 @@
 STR_PLANE                                                       :{BLACK}{PLANE}
 STR_SHIP                                                        :{BLACK}{SHIP}
 
-STR_SCHEDULED_TRAINS                                            :{WHITE}{STATION} - {COMMA} Treinen
-STR_SCHEDULED_ROAD_VEHICLES                                     :{WHITE}{STATION} - {COMMA} Wegvoertuigen
+STR_SCHEDULED_TRAINS                                            :{WHITE}{STATION} - {COMMA} Trein{P "" en}
+STR_SCHEDULED_ROAD_VEHICLES                                     :{WHITE}{STATION} - {COMMA} Wagen{P "" s}
 STR_SCHEDULED_AIRCRAFT                                          :{WHITE}{STATION} - {COMMA} Vliegtuigen
-STR_SCHEDULED_SHIPS                                             :{WHITE}{STATION} - {COMMA} Schepen
+STR_SCHEDULED_SHIPS                                             :{WHITE}{STATION} - {COMMA} Sch{P ip epen}
 
 STR_SCHEDULED_TRAINS_TIP                                        :{BLACK}Geef alle treinen weer die dit station in hun opdrachtenlijst hebben
-STR_SCHEDULED_ROAD_VEHICLES_TIP                                 :{BLACK}Geef alle wegvoertuigen weer die dit station in hun opdrachtenlijst hebben
+STR_SCHEDULED_ROAD_VEHICLES_TIP                                 :{BLACK}Geef alle wagens weer die dit station in hun opdrachtenlijst hebben
 STR_SCHEDULED_AIRCRAFT_TIP                                      :{BLACK}Geef alle vliegtuigen weer die dit station in hun opdrachtenlijst hebben
 STR_SCHEDULED_SHIPS_TIP                                         :{BLACK}Geef alle schepen weer die dit station in hun opdrachtenlijst hebben
 
@@ -3173,17 +3214,17 @@
 STR_LAND_GENERATOR                                              :{BLACK}Land generator:
 STR_TREE_PLACER                                                 :{BLACK}Bos algoritme:
 STR_HEIGHTMAP_ROTATION                                          :{BLACK}Aantal graden hoogtekaart:
-STR_TERRAIN_TYPE                                                :{BLACK}Terrein type:
+STR_TERRAIN_TYPE                                                :{BLACK}Terreintype:
 STR_QUANTITY_OF_SEA_LAKES                                       :{BLACK}Zee niveau:
-STR_SMOOTHNESS                                                  :{BLACK}Vlakte:
-STR_SNOW_LINE_HEIGHT                                            :{BLACK}Sneeuwlijn hoogte:
+STR_SMOOTHNESS                                                  :{BLACK}Gladheid:
+STR_SNOW_LINE_HEIGHT                                            :{BLACK}Hoogte van sneeuwlijn:
 STR_DATE                                                        :{BLACK}Datum:
 STR_NUMBER_OF_TOWNS                                             :{BLACK}Aantal steden:
 STR_NUMBER_OF_INDUSTRIES                                        :{BLACK}Aantal Industrieën:
 STR_GENERATE_DATE                                               :{BLACK}{DATE_LONG}
 STR_SNOW_LINE_UP                                                :{BLACK}Verschuif de sneeuwlijn één omhoog
 STR_SNOW_LINE_DOWN                                              :{BLACK}Verschuif de sneeuwlijn één naar beneden
-STR_SNOW_LINE_QUERY_CAPT                                        :{WHITE}Verander sneeuwlijn hoogte
+STR_SNOW_LINE_QUERY_CAPT                                        :{WHITE}Verander hoogte van sneeuwlijn
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Verander begin jaar
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Schaal waarschuwing
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}Het aanpassen van de grootte van een bronkaar is niet aan te bevelen. Toch doorgaan?
@@ -3207,17 +3248,17 @@
 STR_PREPARING_GAME                                              :{BLACK}Voorbereiden spel
 STR_DIFFICULTY_TO_CUSTOM                                        :{WHITE}Deze aktie past de moeilijkheidsgraag aan naam custom
 STR_SE_FLAT_WORLD                                               :{WHITE}Vlak land
-STR_SE_FLAT_WORLD_TIP                                           :{BLACK}Genereer een platte kaart
+STR_SE_FLAT_WORLD_TIP                                           :{BLACK}Genereer een vlakke kaart
 STR_SE_RANDOM_LAND                                              :{WHITE}Willekeurig land
 STR_SE_NEW_WORLD                                                :{BLACK}Maak nieuw scenario aan
-STR_SE_CAPTION                                                  :{WHITE}Scenario type
+STR_SE_CAPTION                                                  :{WHITE}Scenariotype
 STR_FLAT_WORLD_HEIGHT_DOWN                                      :{BLACK}Maak de hoogte van plat land een lager
 STR_FLAT_WORLD_HEIGHT_UP                                        :{BLACK}Maak de hoogte van plat land een hoger
 STR_FLAT_WORLD_HEIGHT_QUERY_CAPT                                :{WHITE}Verander hoogte van vlak land
 STR_FLAT_WORLD_HEIGHT                                           :{BLACK}Hoogte van platte grond:
 STR_FLAT_WORLD_HEIGHT_NUM                                       :{NUM}
 
-STR_SMALLMAP_CENTER                                             :{BLACK}Centreerd de kleine kaart op heidige positie
+STR_SMALLMAP_CENTER                                             :{BLACK}Centreer de kleine kaart op huidige positie
 
 ########### String for new airports
 STR_SMALL_AIRPORT                                               :{BLACK}Klein
@@ -3261,6 +3302,14 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Wissel doorzichtigheid voor gebouwen zoals stations, depots, waypoints en bovenleiding
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Wissel doorzichtigheid voor bruggen
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Wissel doorzichtigheid voor structuren zoals vuurtoren en antennes, in de toekomst misschien voor eyecandy
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Schakel tussen doorzichtigheid voor laad indicatoren
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Groep {COMMA}
@@ -3298,4 +3347,7 @@
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Winst dit jaar: {GREEN}{CURRENCY} {BLACK}(vorig jaar: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Winst dit jaar: {RED}{CURRENCY} {BLACK}(vorig jaar: {RED}{CURRENCY}{BLACK})
 
+STR_GROUP_NAME                                                  :{GROUP}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
 ########
--- a/src/lang/english.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/english.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Off edge of map
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Too close to edge of map
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Not enough cash - requires {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Flat land required
 STR_0008_WAITING                                                :{BLACK}Waiting: {WHITE}{STRING}
@@ -495,7 +495,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Local authority: {LTBLUE}{STRING1}
 STR_01A9_NONE                                                   :None
 STR_01AA_NAME                                                   :{BLACK}Name
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1st
@@ -778,6 +778,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Difficulty settings
 STR_02C7_CONFIG_PATCHES                                         :Configure patches
 STR_NEWGRF_SETTINGS                                             :NewGRF settings
+STR_TRANSPARENCY_OPTIONS                                        :Transparency options
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Town names displayed
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Station names displayed
@@ -805,7 +806,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Map of world
 STR_EXTRA_VIEW_PORT                                             :Extra viewport
 STR_SIGN_LIST                                                   :Sign list
-STR_TRANSPARENCY_OPTIONS                                        :Transparency options
 STR_02DF_TOWN_DIRECTORY                                         :Town directory
 STR_TOWN_POPULATION                                             :{BLACK}World population: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Viewport {COMMA}
@@ -1103,6 +1103,17 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Map scrollwheel speed: {ORANGE}{STRING1}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automatically pause when starting a new game: {ORANGE}{STRING1}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Use the advanced vehicle list: {ORANGE}{STRING1}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Use loading indicators: {ORANGE}{STRING1}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Enable timetabling for vehicles: {ORANGE}{STRING1}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Show timetable in ticks rather than days: {ORANGE}{STRING1}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE                            :{LTBLUE}Default rail type (after new game/game load): {ORANGE}{STRING1}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Normal Rail
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Electrified Rail
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Monorail
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :First available
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :Last available
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :Most used
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Max trains per player: {ORANGE}{STRING1}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Max road vehicles per player: {ORANGE}{STRING1}
@@ -1186,7 +1197,7 @@
 STR_CHEATS                                                      :{WHITE}Cheats
 STR_CHEATS_TIP                                                  :{BLACK}Checkboxes indicate if you have used this cheat before
 STR_CHEATS_WARNING                                              :{BLACK}Warning! You are about to betray your fellow competitors. Keep in mind that such a disgrace will be remembered for eternity.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Increase money by {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Increase money by {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Playing as player: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Magic bulldozer (remove industries, unmovables): {ORANGE}{STRING1}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tunnels may cross each other: {ORANGE}{STRING1}
@@ -1441,9 +1452,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Company name:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Inauguration:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Company value:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Current balance:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Last year's income:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Company value:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Current balance:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Last year's income:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Performance:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Vehicles:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1678,7 +1689,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING1}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Building must be demolished first
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Population: {ORANGE}{COMMA}{BLACK}  Houses: {ORANGE}{COMMA}
@@ -1711,7 +1722,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Show information on local authority
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} local authority
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Transport company ratings:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subsidies
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Subsidies on offer for services taking:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} from {STRING2} to {STRING2}
@@ -1782,7 +1793,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...tree already here
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...site unsuitable
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Can't plant tree here...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...too many signs
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Can't place sign here...
 STR_280A_SIGN                                                   :Sign
@@ -1891,6 +1902,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Coast or riverbank
 STR_3806_SHIP_DEPOT                                             :Ship depot
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...Can't build on water
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Must demolish canal first
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Save Game
@@ -1900,9 +1912,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte{P "" s} free
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Unable to read drive
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Game Save Failed
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Game Save Failed{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Unable to delete file
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Game Load Failed
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Game Load Failed{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Internal error: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Broken savegame - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Savegame is made with newer version
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :File not readable
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :File not writeable
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}List of drives, directories and saved-game files
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Currently selected name for saved-game
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Delete the currently selected saved-game
@@ -2073,8 +2090,7 @@
 STR_SV_STNAME_LOWER                                             :Lower {STRING1}
 STR_SV_STNAME_HELIPORT                                          :{STRING1} Heliport
 STR_SV_STNAME_FOREST                                            :{STRING1} Forest
-
-STR_SV_GROUP_NAME                                               :{GROUP}
+STR_SV_STNAME_FALLBACK                                          :{STRING1} Station #{NUM}
 
 ############ end of savegame specific region!
 
@@ -2154,7 +2170,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Player {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}New Face
 STR_7005_COLOR_SCHEME                                           :{BLACK}Colour Scheme
@@ -2166,7 +2182,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Manager's Name
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Can't change company name...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Can't change manager's name...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finances {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finances {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Expenditure/Income
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Construction
@@ -2182,20 +2198,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Ship Income
 STR_701C_LOAN_INTEREST                                          :{GOLD}Loan Interest
 STR_701D_OTHER                                                  :{GOLD}Other
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Total:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Income Graph
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Operating Profit Graph
 STR_7026_BANK_BALANCE                                           :{WHITE}Bank Balance
 STR_7027_LOAN                                                   :{WHITE}Loan
-STR_MAX_LOAN                                                    :{WHITE}Max Loan:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Borrow {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Repay {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Max Loan:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Borrow {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Repay {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...maximum permitted loan size is {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Can't borrow any more money...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...no loan to repay
@@ -2234,8 +2250,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Company performance ratings (maximum rating=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Company values
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Company League Table
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Transport company in trouble!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} will be sold off or declared bankrupt unless performance increases soon!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Manager)
@@ -2273,7 +2289,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}World Recession!{}{}Financial experts fear worst as economy slumps!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Recession Over!{}{}Upturn in trade gives confidence to industries as economy strengthens!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Toggle large/small window size
-STR_7076_COMPANY_VALUE                                          :{GOLD}Company value: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Company value: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Buy 25% share in company
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Sell 25% share in company
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Buy 25% share in this company
@@ -2585,7 +2601,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Train Depot
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Citizens celebrate . . .{}First train arrives at {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING1} (Details)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Details)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Train in the way
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING1} {STRING1}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING1} {STRING1}
@@ -2606,6 +2622,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Go non-stop to {TOWN} Train Depot
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Service non-stop at {TOWN} Train Depot
 
+STR_TIMETABLE_GO_TO                                             :{STRING1} {STRING2}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Travel (not timetabled)
+STR_TIMETABLE_TRAVEL_FOR                                        :Travel for {STRING1}
+STR_TIMETABLE_STAY_FOR                                          :and stay for {STRING1}
+STR_TIMETABLE_DAYS                                              :{COMMA} day{P "" s}
+STR_TIMETABLE_TICKS                                             :{COMMA} tick{P "" s}
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Heading for {TOWN} Train Depot
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Heading for {TOWN} Train Depot, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Service at {TOWN} Train Depot
@@ -2647,13 +2670,15 @@
 STR_REFIT                                                       :{BLACK}Refit
 STR_REFIT_TIP                                                   :{BLACK}Select what cargo type to refit to in this order. Control click to remove refit instruction
 STR_REFIT_ORDER                                                 :(Refit to {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Timetable
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Switch to the timetable view
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Orders)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - End of Orders - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Service
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Can't build railway vehicle...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Value: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Value: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Loading / Unloading
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Train must be stopped inside a depot
@@ -2703,6 +2728,10 @@
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Insert a new order before the highlighted order, or add to end of list
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Make the highlighted order force the vehicle to wait for a full load
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Make the highlighted order force the vehicle to unload
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Timetable - click on an order to highlight it.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Change the amount of time that the highlighted order should take
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Clear the amount of time for the highlighted order
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Reset the lateness counter, so the vehicle will be on time
 STR_SERVICE_HINT                                                :{BLACK}Skip this order unless a service is needed
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Cost: {CURRENCY} Weight: {WEIGHT_S}{}Speed: {VELOCITY}  Power: {POWER}{}Running Cost: {CURRENCY}/yr{}Capacity: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Broken down
@@ -2724,6 +2753,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Can't rename train vehicle type...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Make the highlighted order force the vehicle to dump cargo
 STR_886F_TRANSFER                                               :{BLACK}Transfer
+STR_CLEAR_TIME                                                  :{BLACK}Clear Time
+STR_RESET_LATENESS                                              :{BLACK}Reset Late Counter
 
 STR_TRAIN_STOPPING                                              :{RED}Stopping
 STR_TRAIN_STOPPING_VEL                                          :{RED}Stopping, {VELOCITY}
@@ -2732,8 +2763,20 @@
 STR_TRAIN_START_NO_CATENARY                                     :This track lacks catenary, so the train can't start
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}New {STRING} now available!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}New {STRING} now available!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}New {STRING} now available!  -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Can't timetable vehicle...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Vehicles can only wait at stations.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}This vehicle is not stopping at this station.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Change Time
+STR_TIMETABLE_STATUS_ON_TIME                                    :This vehicle is currently running on time
+STR_TIMETABLE_STATUS_LATE                                       :This vehicle is currently running {STRING1} late
+STR_TIMETABLE_STATUS_EARLY                                      :This vehicle is currently running {STRING1} early
+STR_TIMETABLE_TOTAL_TIME                                        :This timetable will take {STRING1} to complete
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :This timetable will take at least {STRING1} to complete (not all timetabled)
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Autofill
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Fill the timetable automatically with the values from the first journey
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Road vehicle in the way
@@ -2749,7 +2792,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Max. speed: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profit this year: {LTBLUE}{CURRENCY}  (last year: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Reliability: {LTBLUE}{COMMA}%  {BLACK}Breakdowns since last service: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Capacity: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...must be stopped inside a road vehicle depot
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Can't sell road vehicle...
@@ -2825,7 +2868,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Max. speed: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profit this year: {LTBLUE}{CURRENCY}  (last year: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Reliability: {LTBLUE}{COMMA}%  {BLACK}Breakdowns since last service: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Capacity: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Can't stop/start ship...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Can't send ship to depot...
@@ -2893,7 +2936,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Max. speed: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profit this year: {LTBLUE}{CURRENCY}  (last year: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Reliability: {LTBLUE}{COMMA}%  {BLACK}Breakdowns since last service: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Can't send aircraft to hangar...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Heading for {STATION} Hangar
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Heading for {STATION} Hangar, {VELOCITY}
@@ -2946,6 +2989,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Go to {STATION} Hangar
 SERVICE_AT_AIRPORT_HANGAR                                       :Service at {STATION} Hangar
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Timetable)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Zeppelin disaster at {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Road vehicle destroyed in 'UFO' collision!
@@ -3261,6 +3306,14 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Toggle transparency for buildables like stations, depots, waypoints and catenary
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Toggle transparency for bridges
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Toggle transparency for structures like lighthouses and antennas, maybe in future for eyecandy
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Toggle transparency for loading indicators
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Group {COMMA}
@@ -3298,4 +3351,11 @@
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Profit this year: {GREEN}{CURRENCY} {BLACK}(last year: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Profit this year: {RED}{CURRENCY} {BLACK}(last year: {RED}{CURRENCY}{BLACK})
 
+STR_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
 ########
--- a/src/lang/esperanto.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/esperanto.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -11,8 +11,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}For de la mapo
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Tro proksime al la mapa rando
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Ne sufiĉe da mono - vi bezonas {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Necesas ebena lando
 STR_0008_WAITING                                                :{BLACK}Atendas: {WHITE}{STRING}
@@ -496,7 +496,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Lokaj estroj: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Neniu
 STR_01AA_NAME                                                   :{BLACK}Nomo
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1a de
@@ -1185,7 +1185,7 @@
 STR_CHEATS                                                      :{WHITE}Filudaĵoj
 STR_CHEATS_TIP                                                  :{BLACK}La kvadratetoj indikas ĉu vi jam uzis la filudaĵon antaŭe.
 STR_CHEATS_WARNING                                              :{BLACK}Atentu! Vi perfidos viajn kunulajn konkurantojn. Memoru ke io tia rememoriĝos eterne.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Altigu monkvanton per {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Altigu monkvanton per {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Ludu kiel ludanto: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Magia forigilo (forviŝu industriojn, nemoveblaĵojn): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tuneloj rajtas kruciĝi unu kun la alia: {ORANGE}{STRING}
@@ -1415,9 +1415,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Kompaninomo:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Inaŭguro:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Kompanivaloro:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Nuna monstato:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Lastjara enspezo:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Kompanivaloro:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Nuna monstato:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Lastjara enspezo:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Rendimento:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Veturiloj:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1626,7 +1626,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Antaŭe forigu konstruaĵon
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Enloĝantoj: {ORANGE}{COMMA}{BLACK}  Domoj: {ORANGE}{COMMA}
@@ -1659,7 +1659,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Montru informojn pri lokaj estroj
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}Lokaj estroj de {TOWN}
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Takso de transportkompanioj:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subvencioj
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Subvencioj haveblas por jenaj servoj:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} de {STRING} al {STRING}
@@ -1730,7 +1730,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...jam estas arbo
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...loko ne uzeblas
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Ne povas planti arbon ĉi tie...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...tro da afiŝoj
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Ne povas meti afiŝon ĉi tie...
 STR_280A_SIGN                                                   :Afiŝo
@@ -1842,9 +1842,9 @@
 STR_4004                                                        :{COMPANY} je {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabitoko{P "" j} libera{P "" j}
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Ne eblas legi diskon
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Ludkonservado Fiaskis
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Ludkonservado Fiaskis{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Ne eblas forviŝi dosieron
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Ludŝarĝado Fiaskis
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Ludŝarĝado Fiaskis{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Listo da diskoj, dosierujoj kaj luddosieroj
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nune elektita nomo por luddosiero
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Forviŝu la nun elektitan luddosieron
@@ -2095,7 +2095,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Ludanto {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Nova Vizaĝo
 STR_7005_COLOR_SCHEME                                           :{BLACK}Kolorskemo
@@ -2107,7 +2107,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Nomo de la Manaĝanto
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Ne povas ŝanĝi kompaninomon...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Ne povas ŝanĝi manaĝantnomon...
-STR_700E_FINANCES                                               :{WHITE}Financoj de {COMPANY} {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}Financoj de {COMPANY} {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Elspezo/Enspezo
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Konstruado
@@ -2123,20 +2123,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Ŝipa Enspezo
 STR_701C_LOAN_INTEREST                                          :{GOLD}Rento pri Prunto
 STR_701D_OTHER                                                  :{GOLD}Alia
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Entute:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Enspeza Grafiko
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Gajna Grafiko
 STR_7026_BANK_BALANCE                                           :{WHITE}Banka Balanco
 STR_7027_LOAN                                                   :{WHITE}Prunto
-STR_MAX_LOAN                                                    :{WHITE}Maksimuma prunto:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Pruntu {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Repagu {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Maksimuma prunto:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Pruntu {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Repagu {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...maksimuma permesata prunto estas {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Ne povas prunti pli da mono...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...ne estas repagebla prunto
@@ -2175,8 +2175,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Kompania rendimento (maksimumo=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Kompaniaj valoroj
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Kompaniara tabelo
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Transportkompanio en problemoj!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} forvendiĝos aŭ bankrotiĝos krom se ĝi pli bone faros!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Manaĝanto)
@@ -2214,7 +2214,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Monda Recesio!{}{}Financaj spertuloj timas ke malpliboniĝas treege! Ekonomio malboniĝadas!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Recesio finiĝis!{}{}Komerca pliboniĝos donas konfidon al industrioj! Ekonomio pliboniĝas!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Ŝaltu inter granda kaj malgranda fenestro
-STR_7076_COMPANY_VALUE                                          :{GOLD}Kompania valoro: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Kompania valoro: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Aĉetu 25%-an dividaĵon
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Vendu 25%-an dividaĵon
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Aĉetu 25%-an dividaĵon en ĉi tiu kompanio
@@ -2524,7 +2524,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Trajndeponejo
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Enloĝantoj festas . . .{}Unua trajno alvenas ĉe {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Detaloj)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Detaloj)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Trajno okupas la lokon
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2591,8 +2591,8 @@
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Prizorgo
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Ne povas krei relan veturilon...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Kreite: {LTBLUE}{NUM}{BLACK} Valoro: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Valoro: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Kreite: {LTBLUE}{NUM}{BLACK} Valoro: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Valoro: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Ŝarĝante / Deŝarĝante
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Trajno estu halta en deponejo
@@ -2667,8 +2667,8 @@
 STR_TRAIN_START_NO_CATENARY                                     :Mankas ĉi-trake supera elektro, do la trajno ne povas starti
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Nova {STRING} nun haveblas!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Nova {STRING} nun haveblas!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Nova {STRING} nun haveblas!  -  {ENGINE}
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Vojveturilo okupas la lokon
@@ -2684,7 +2684,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Maksimuma rapideco: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Ĉi-jara gajno: {LTBLUE}{CURRENCY}  (lastjara: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Fidebleco: {LTBLUE}{COMMA}%  {BLACK}Rompiĝoj post lasta prizorgo: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Kreite: {LTBLUE}{NUM}{BLACK} Valoro: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Kreite: {LTBLUE}{NUM}{BLACK} Valoro: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Kapablo: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...devas esti haltigata en vojveturila deponejo
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Ne povas vendi vojveturilon...
@@ -2756,7 +2756,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Maksimuma rapideco: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Ĉi-jara gajno: {LTBLUE}{CURRENCY}  (lastjara: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Fidebleco: {LTBLUE}{COMMA}%  {BLACK}Rompiĝoj post lasta prizorgo: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Kreite: {LTBLUE}{NUM}{BLACK} Valoro: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Kreite: {LTBLUE}{NUM}{BLACK} Valoro: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Kapablo: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Ne povas haltigi/starti ŝipon...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Ne povas sendi ŝipon al deponejo...
@@ -2824,7 +2824,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Maksimuma rapideco: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Ĉi-jara gajno: {LTBLUE}{CURRENCY}  (lastjara: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Fidebleco: {LTBLUE}{COMMA}%  {BLACK}Rompiĝoj post lasta prizorgo: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Kreite: {LTBLUE}{NUM}{BLACK} Valoro: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Kreite: {LTBLUE}{NUM}{BLACK} Valoro: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Ne povas sendi aviadilon al hangaro...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Irante al {STATION} Hangaro
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Irante al {STATION} Hangaro, {VELOCITY}
--- a/src/lang/estonian.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/estonian.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -11,8 +11,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Väljaspool kaardi piire
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Kaardi äärele liiga lähedal
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Pole piisavalt raha - vajad {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Maapind peab olema tasane
 STR_0008_WAITING                                                :{BLACK}Ootel: {WHITE}{STRING}
@@ -595,7 +595,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Kohalik omavalitsus: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :puudub
 STR_01AA_NAME                                                   :{BLACK}Nimi
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1.
@@ -878,6 +878,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Raskusastme seaded
 STR_02C7_CONFIG_PATCHES                                         :Paranduste seaded
 STR_NEWGRF_SETTINGS                                             :Newgrf seaded
+STR_TRANSPARENCY_OPTIONS                                        :Läbipaistvuse valikud
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Näidatavad linnanimed
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Näidatavad jaamanimed
@@ -905,7 +906,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Maailmakaart
 STR_EXTRA_VIEW_PORT                                             :Lisa vaateaken
 STR_SIGN_LIST                                                   :Siltide nimekiri
-STR_TRANSPARENCY_OPTIONS                                        :Läbipaistvuse valikud
 STR_02DF_TOWN_DIRECTORY                                         :Linnade nimistu
 STR_TOWN_POPULATION                                             :{BLACK}Maailma rahvastik: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Vaateaken {COMMA}
@@ -1203,6 +1203,9 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Kaardi kerimisrulliku kiirus: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Mängu isepeatamine uue mängu alustamisel: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Kasuta laiendatud sõidukinimekirja: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Kasuta laadimisnäidikuid: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Luba sõiduplaanide määramine: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Kasuta sõiduplaanis päevade asemel tikse: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Enim ronge mängija kohta: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Enim mootorsõidukeid mängija kohta: {ORANGE}{STRING}
@@ -1286,7 +1289,7 @@
 STR_CHEATS                                                      :{WHITE}Petmine
 STR_CHEATS_TIP                                                  :{BLACK}Märgistatud kastid näitavad et, kas sa oled varem seda pettust kasutanud
 STR_CHEATS_WARNING                                              :{BLACK}Hoiatus! Sa kavatsed oma konkurente reeta. Pea meeles, et sellisest häbist ei saa sa enam kunagi lahti.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Suurenda raha hulka {CURRENCY64} võrra
+STR_CHEAT_MONEY                                                 :{LTBLUE}Suurenda raha hulka {CURRENCY} võrra
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Mängi, kui mängija: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Maagiline buldooser (eemaldamatute rajatiste lammutamine): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tunnelid võivad üksteist läbida: {ORANGE}{STRING}
@@ -1541,9 +1544,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Ettevõtte nimi:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Avamine:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Firmaväärtus:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Rahaline seis:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Eelmise aasta tulud:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Firmaväärtus:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Rahaline seis:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Eelmise aasta tulud:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Suutlikus:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Sõidukid:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1778,7 +1781,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Ehitis tuleb eelnevalt hävitada
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Rahvastik: {ORANGE}{COMMA}{BLACK}  Ehitisi: {ORANGE}{COMMA}
@@ -1811,7 +1814,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Näita teavet kohaliku omavalitsuse kohta
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} kohalik omavalitsus
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Ettevõtete hinnangud:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Toetused
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Pakutavad toetused teenusepakkumise eest:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} kohast {STRING} kohta {STRING}
@@ -1882,7 +1885,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...siin on juba puu olemas
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...ebasobiv koht
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Siia ei saa puud istutada...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...liiga palju silte
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Siia ei saa silti paigaldada...
 STR_280A_SIGN                                                   :Silt
@@ -1991,6 +1994,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Kallas
 STR_3806_SHIP_DEPOT                                             :Laevaangaar
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...vette ei saa ehitada
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Kanali peab eelnevalt lammutama
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Salvesta mäng
@@ -2000,9 +2004,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabaiti{P "" i} vaba
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Ei suuda kettalt lugeda
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Mängu salvestamine ebaõnnestus
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Mängu salvestamine ebaõnnestus{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Faili ei saa kustutada
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Mängu laadimine ebaõnnestus
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Mängu laadimine ebaõnnestus{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Süsteemi viga: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Katkine salvestus - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Salvestus on tehtud uuemas versioonis
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :Fail pole loetav
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :Faili ei saanud kirjutada
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Nimekiri ketastest, kataloogidest ja salvestatud mängudest
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Mängu salvestuse nimi
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Kustuta valitud salvestus
@@ -2173,8 +2182,7 @@
 STR_SV_STNAME_LOWER                                             :Alumine {STRING}
 STR_SV_STNAME_HELIPORT                                          :{STRING} Kopteriväljak
 STR_SV_STNAME_FOREST                                            :{STRING} mets
-
-STR_SV_GROUP_NAME                                               :{GROUP}
+STR_SV_STNAME_FALLBACK                                          :{STRING} Jaam #{NUM}
 
 ############ end of savegame specific region!
 
@@ -2254,7 +2262,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY}{BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY}{BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 : (mängija {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Uus nägu
 STR_7005_COLOR_SCHEME                                           :{BLACK}Värvivalik
@@ -2266,7 +2274,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Presidendi nimi
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Ei saa ettevõtte nime muuta...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Ei saa presidendi nime muuta...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} rahavoogude aruanne {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} rahavoogude aruanne {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Kulud/tulud
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Ehituskulud
@@ -2282,20 +2290,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Laevade tulud
 STR_701C_LOAN_INTEREST                                          :{GOLD}Laenuintress
 STR_701D_OTHER                                                  :{GOLD}Kõik muu
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Kokku:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Tulugraafik
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Opereerimiskasumi graafik
 STR_7026_BANK_BALANCE                                           :{WHITE}Kontojääk
 STR_7027_LOAN                                                   :{WHITE}Laen
-STR_MAX_LOAN                                                    :{WHITE}Suurim laen:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Laena {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Maksa tagasi {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Suurim laen:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Laena {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Maksa tagasi {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...suurim lubatud laen on {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Rohkem raha ei saa laenata...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...pole laenu, mida tagasi maksta
@@ -2334,8 +2342,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Ettevõtte tegevushinnang (suurim hinnang saab olla 1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Firmaväärtus
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Ettevõtete edetabel
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Ettevõttel on probleeme!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}Ettevõte {COMPANY} müüakse maha ja kuulutatakse pankrot, kui tulemused peatselt ei parane!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(President)
@@ -2373,7 +2381,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Majanduslik tagasilöök!{}{}Finantseksperdid ennustavad suurt majanduslangust!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Madalseis on läbi!{}{}Suurem kauplemine julgustab majanduse tugevnemisega ettevõtteid!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Lülita aken suureks/väikseks
-STR_7076_COMPANY_VALUE                                          :{GOLD}Firmaväärtus: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Firmaväärtus: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Osta 25% ettevõtte aktsiatest
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Müü 25% ettevõtte aktsiatest
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Osta 25% ettevõtte aktsiatest
@@ -2685,7 +2693,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}Linna {TOWN} rongidepoo
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Rahvas rõõmustab. . .{}{STATION} jaama saabus esimene rong!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (üksikasjad)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (üksikasjad)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Rong on ees
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2706,6 +2714,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Sõida läbi linna {TOWN} rongidepoo
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Hooldus linna {TOWN} rongidepoost läbisõidul
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Sõitmine (sõiduplaanita)
+STR_TIMETABLE_TRAVEL_FOR                                        :Sõida {STRING}
+STR_TIMETABLE_STAY_FOR                                          :ja oota {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} päev{P "" a}
+STR_TIMETABLE_TICKS                                             :{COMMA} tiks{P "" u}
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Suundub linna {TOWN} rongidepoosse
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Suundub linna {TOWN} rongidepoosse, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Hooldus linna {TOWN} raudteedepoos
@@ -2747,13 +2762,15 @@
 STR_REFIT                                                       :{BLACK}Taasseadista
 STR_REFIT_TIP                                                   :{BLACK}Vali, millist laadungit ümber seadistada selles järjestuses. Ümberseadistuse käsu eemaldamiseks hoia klõpsamise ajal all Control nuppu
 STR_REFIT_ORDER                                                 :(Taasseadista {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Sõiduplaan
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Näita sõiduplaani
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Käsud)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Käskude Lõpp - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Hooldus
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Raudteesõidukit ei saa ehitada...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Ehitatud: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Väärtus: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Ehitatud: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Väärtus: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Veose ümberlaadimine
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Rong peab olema depoos peatatud
@@ -2803,6 +2820,10 @@
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Lisa uus käsk enne valitud käsku või nimekirja lõppu
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Sunni valitud käsu juures oodata täis laadingut
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Sunni valitud käsu juures maha laadida.
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Sõiduplaan - esiletõstmiseks klõpsa sihtpunktil
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Muuda, kaua esile tõstetud sihtpunkti peale aega peaks kuluma
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Tühista esile tõstetud sihtpunkti ajaperiood
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Tühista hilinemisloendur, et sõiduk ei jääks hiljaks
 STR_SERVICE_HINT                                                :{BLACK}Jäta see käsk vahele, kui hooldust ei vajata
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Hind: {CURRENCY} Tühimass: {WEIGHT_S}{}Tippkiirus: {VELOCITY}  Võimsus: {POWER}{}Käituskulud: {CURRENCY}/aastas{}Kandevõime: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Lagunes
@@ -2824,6 +2845,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Raudteesõiduki tüübinime ei saa muuta...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Sunni valitud käsul visata maha laadung
 STR_886F_TRANSFER                                               :{BLACK}Transpordi
+STR_CLEAR_TIME                                                  :{BLACK}Tühista aeg
+STR_RESET_LATENESS                                              :{BLACK}Tühista hilinemisloendur
 
 STR_TRAIN_STOPPING                                              :{RED}Peatub
 STR_TRAIN_STOPPING_VEL                                          :{RED}Peatub, {VELOCITY}
@@ -2832,8 +2855,16 @@
 STR_TRAIN_START_NO_CATENARY                                     :Selle raja ahel puudub, rong ei saa sõitu alustada
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Uus {STRING} saadaval!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Uus {STRING} saadaval!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Uus {STRING} saadaval!  -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Sõidukile ei saa sõiduplaani anda...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Sõidukid saavad ainult peatustes oodata.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Sellel sõidukil pole ühtegi peatust.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Muuda aega
+STR_TIMETABLE_STATUS_ON_TIME                                    :See sõiduk peab ajast kinni
+STR_TIMETABLE_STATUS_LATE                                       :See sõiduk on {STRING} hiljaks jäämas
+STR_TIMETABLE_STATUS_EARLY                                      :See sõiduk on {STRING} varajane
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Mootorsõiduk takistab teed
@@ -2849,7 +2880,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Tippkiirus: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Selle aasta kasum: {LTBLUE}{CURRENCY}  (eelmisel aastal: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Tehnoseisund: {LTBLUE}{COMMA}%  {BLACK}Rikkeid eelmisest hooldusest: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Ehitatud: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Ehitatud: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Kandevõime: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...peab garaaþis olema
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Ei saa veokit müüa...
@@ -2925,7 +2956,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Tippkiirus: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Selle aasta kasum: {LTBLUE}{CURRENCY}  (viimasel: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Tehnoseisund: {LTBLUE}{COMMA}%  {BLACK}Rikkeid eelmisest hooldusest: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Ehitati: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Ehitati: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Kandevõime: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Ei saa peatada/käivitada laeva...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Ei saa laeva paadikuuri saata...
@@ -2993,7 +3024,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Tippkiirus: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Selle aasta kasum: {LTBLUE}{CURRENCY}  (eelmisel aastal: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Tehnoseisund: {LTBLUE}{COMMA}%  {BLACK}Rikkeid eelmisest hooldusest: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Ehitusaasta: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Ehitusaasta: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Ei saa lennukit angaari saata...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Suundub {STATION} Angaari
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Suundub {STATION} angaari, {VELOCITY}
@@ -3046,6 +3077,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Mine {STATION} angaari
 SERVICE_AT_AIRPORT_HANGAR                                       :Hooldus {STATION} angaaris
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Sõiduplaan)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Tsepeliini õnnetus {STATION}s!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Mootorsõiduk plahvatas kokkupõrkes 'UFO-ga'!
@@ -3361,6 +3394,14 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Vaheta läbipaistvust ehitistel nagu: jaamad, depood, vahepunktid ja elektriliinid
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Vaheta sildade läbipaistvust
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Vaheta läbipaistvust rajatistel, nagu: majakad, antennid ja võimalik, et tulevikus ka silmailu
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Vaheta laadimisnäidikute läbipaistvust
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Üksus {COMMA}
@@ -3398,4 +3439,7 @@
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Selle aasta kasum: {GREEN}{CURRENCY} {BLACK}(eelmisel aastal: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Selle aasta kasum: {RED}{CURRENCY} {BLACK}(eelmisel aastal: {RED}{CURRENCY}{BLACK})
 
+STR_GROUP_NAME                                                  :{GROUP}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
 ########
--- a/src/lang/finnish.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/finnish.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -3,13 +3,15 @@
 ##isocode fi_FI
 ##plural 0
 
+#
+
 ##id 0x0000
 STR_NULL                                                        :
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Kartan reunan ulkopuolella.
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Liian lähellä kartan reunaa.
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Käteinen ei riitä - tarvitaan {CURRENCY}.
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Tarvitaan tasaista maata.
 STR_0008_WAITING                                                :{BLACK}Lähdössä: {WHITE}{STRING}
@@ -493,7 +495,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Kunta: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Ei mitään
 STR_01AA_NAME                                                   :{BLACK}Nimi
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1.
@@ -1180,7 +1182,7 @@
 STR_CHEATS                                                      :{WHITE}Huijaukset
 STR_CHEATS_TIP                                                  :{BLACK}Valintaruudut osoittavat, oletko käyttänyt huijausta aiemmin.
 STR_CHEATS_WARNING                                              :{BLACK}Varoitus! Olet juuri pettämässä kanssakilpailijoitasi. Pidä mielessä, että tällainen häväistys pidetään mielessä ikuisuuden ajan.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Anna lisää rahaa: {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Anna lisää rahaa: {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Pelaa pelaajana: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Taikapuskutraktori (siirrä teollisuutta yms.): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tunnelit voivat mennä ristiin: {ORANGE}{STRING}
@@ -1391,6 +1393,27 @@
 STR_NETWORK_LANG_ENGLISH                                        :englanti
 STR_NETWORK_LANG_GERMAN                                         :saksa
 STR_NETWORK_LANG_FRENCH                                         :ranska
+STR_NETWORK_LANG_DANISH                                         :tanska
+STR_NETWORK_LANG_DUTCH                                          :hollanti
+STR_NETWORK_LANG_ESPERANTO                                      :esperanto
+STR_NETWORK_LANG_FINNISH                                        :suomi
+STR_NETWORK_LANG_HUNGARIAN                                      :unkari
+STR_NETWORK_LANG_ICELANDIC                                      :islanti
+STR_NETWORK_LANG_ITALIAN                                        :italia
+STR_NETWORK_LANG_JAPANESE                                       :japani
+STR_NETWORK_LANG_KOREAN                                         :korea
+STR_NETWORK_LANG_LITHUANIAN                                     :liettua
+STR_NETWORK_LANG_NORWEGIAN                                      :norja
+STR_NETWORK_LANG_POLISH                                         :puola
+STR_NETWORK_LANG_PORTUGUESE                                     :portugali
+STR_NETWORK_LANG_ROMANIAN                                       :romania
+STR_NETWORK_LANG_RUSSIAN                                        :venäjä
+STR_NETWORK_LANG_SLOVAK                                         :slovakia
+STR_NETWORK_LANG_SLOVENIAN                                      :sloveeni
+STR_NETWORK_LANG_SPANISH                                        :espanja
+STR_NETWORK_LANG_SWEDISH                                        :ruotsi
+STR_NETWORK_LANG_TURKISH                                        :turkki
+STR_NETWORK_LANG_UKRAINIAN                                      :ukraina
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Moninpeliaula
@@ -1410,9 +1433,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Yhtiön nimi:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Perustettu:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Yhtiön arvo:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Nykyinen kate:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Viime vuoden tulot:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Yhtiön arvo:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Nykyinen kate:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Viime vuoden tulot:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Suorite:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Liikenneväl.:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1584,6 +1607,13 @@
 STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Rautatie esiopastimin
 STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Rautatie poistumisopastimin
 STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Rautatie yhdistetyin opastimin
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Rautatie esisignaaleilla
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Rautatie poistumis-signaaleilla
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Rautatie yhdistelmäsignaaleilla
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Rautatie esi- ja poistumissignaaleilla
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Rautatie esi- ja yhdistelmäsignaaleilla
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Rautatie poistumis- ja yhdistelmäsignaaleilla
+STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Poista asema ensin
 
 
 
@@ -1591,22 +1621,39 @@
 STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Tie pitää siirtää ensin.
 STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Tietyöt ovat käynnissä.
 STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Tien rakentaminen
+STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Raitiotien rakentaminen
 STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Valitse maantiesilta
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}... yksisuuntaisella kadulla ei voi olla risteystä
 STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Tietä ei voi rakentaa.
+STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}Tähän ei voi rakentaa raitiotietä.
 STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Tietä ei voi poistaa.
+STR_1805_CAN_T_REMOVE_TRAMWAY_FROM                              :{WHITE}Tästä ei voi poistaa raitiotietä.
 STR_1806_ROAD_DEPOT_ORIENTATION                                 :{WHITE}Autovarikon suunta
+STR_1806_TRAM_DEPOT_ORIENTATION                                 :{WHITE}Varikon suunta
 STR_1807_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}Autovarikkoa ei voi rakentaa.
+STR_1807_CAN_T_BUILD_TRAM_VEHICLE                               :{WHITE}Tähän ei voi rakentaa varikkoa.
 STR_1808_CAN_T_BUILD_BUS_STATION                                :{WHITE}Linja-autoasemaa ei voi rakentaa.
 STR_1809_CAN_T_BUILD_TRUCK_STATION                              :{WHITE}Lastauslaituria ei voi rakentaa.
+STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION                     :{WHITE}Ei voi rakentaa asemaa.
+STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION                         :{WHITE}Ei voi rakentaa rahtiasemaa.
 STR_180A_ROAD_CONSTRUCTION                                      :Tien rakentaminen
+STR_180A_TRAMWAY_CONSTRUCTION                                   :Raitiotien rakentaminen
 STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Rakenna tieosuus.
+STR_180B_BUILD_TRAMWAY_SECTION                                  :{BLACK}Rakenna raitiotietä
 STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Rakenna autovarikko (ajoneuvojen rakentamista ja huoltoa varten)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT                               :{BLACK}Rakenna raitiotievarikko (vaunujen rakentamiseen ja korjaamiseen)
 STR_180D_BUILD_BUS_STATION                                      :{BLACK}Rakenna linja-autoasema
 STR_180E_BUILD_TRUCK_LOADING_BAY                                :{BLACK}Rakenna lastauslaituri
+STR_180D_BUILD_PASSENGER_TRAM_STATION                           :{BLACK}Rakenna asema
+STR_180E_BUILD_CARGO_TRAM_STATION                               :{BLACK}Rakenna rahtiasema
 STR_180F_BUILD_ROAD_BRIDGE                                      :{BLACK}Rakenna maantiesilta
+STR_180F_BUILD_TRAMWAY_BRIDGE                                   :{BLACK}Rakenna raitiotiesilta
 STR_1810_BUILD_ROAD_TUNNEL                                      :{BLACK}Rakenna maantietunneli
+STR_1810_BUILD_TRAMWAY_TUNNEL                                   :{BLACK}Rakenna raitiotietunneli
 STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Tien rakentaminen/siirtäminen päälle/pois
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS                       :{BLACK}Vaihda rakentamisen ja purkamisen välillä
 STR_1813_SELECT_ROAD_VEHICLE_DEPOT                              :{BLACK}Valitse autovarikon suunta.
+STR_1813_SELECT_TRAM_VEHICLE_DEPOT                              :{BLACK}Valitse varikon suunta
 STR_1814_ROAD                                                   :Tie
 STR_1815_ROAD_WITH_STREETLIGHTS                                 :Tie katuvaloilla
 STR_1816_TREE_LINED_ROAD                                        :Puilla reunustettu tie
@@ -1614,6 +1661,8 @@
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Tasoristeys
 STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Linja-autoasemaa ei voida poistaa...
 STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Kuorma-auto asemaa ei voida poistaa...
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION                         :{WHITE}Ei voi poistaa asemaa.
+STR_CAN_T_REMOVE_CARGO_TRAM_STATION                             :{WHITE}Ei voi poistaa rahtiasemaa.
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Kaupungit
@@ -1621,7 +1670,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Rakennus täytyy purkaa ensin.
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Asukasluku: {ORANGE}{COMMA}{BLACK}  Taloja: {ORANGE}{COMMA}
@@ -1654,7 +1703,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Näytä tietoja paikallisviranomaisista.
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN}: viranomaiset
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Kuljetusyhtiön arvioinnit:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Tuet
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Tarjotut tuet:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} välille {STRING}-{STRING}
@@ -1725,7 +1774,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...tässä on jo puu.
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...huono paikka.
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Puuta ei voi istuttaa.
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...liian monta kylttiä.
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Kylttiä ei voi sijoittaa.
 STR_280A_SIGN                                                   :Kyltti
@@ -1778,8 +1827,12 @@
 STR_3041_NOW_ACCEPTS_AND                                        :{WHITE}{STATION} ottaa nyt vastaan {STRING} ja {STRING}.
 STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Linja-autoaseman suunta
 STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Lastauslaiturin suunta
+STR_3042_PASSENGER_TRAM_STATION_ORIENTATION                     :{WHITE}Aseman suunta
+STR_3043_CARGO_TRAM_STATION_ORIENT                              :{WHITE}Rahtiaseman suunta
 STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Linja-autoasema pitää purkaa ensin.
 STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Lastauslaituri pitää purkaa ensin.
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION                   :{WHITE}Asema täytyy purkaa ensin
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION                       :{WHITE}Rahtiasema täytyy purkaa ensin
 STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} asema{P "" a}
 STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
 STR_304A_NONE                                                   :{YELLOW}- Ei mitään -
@@ -1791,6 +1844,8 @@
 STR_3050_SELECT_LENGTH_OF_RAILROAD                              :{BLACK}Valitse rautatieaseman pituus.
 STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Valitse linja-autoaseman suunta.
 STR_3052_SELECT_TRUCK_LOADING_BAY                               :{BLACK}Valitse lastauslaiturin suunta.
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION              :{BLACK}Valitse aseman suunta
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION                  :{BLACK}Valitse rahtiaseman suunta
 STR_3053_CENTER_MAIN_VIEW_ON_STATION                            :{BLACK}Keskitä näkymä aseman sijaintiin.
 STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}Näytä aseman arviot.
 STR_3055_CHANGE_NAME_OF_STATION                                 :{BLACK}Muuta aseman nimi.
@@ -1828,6 +1883,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Rannikko tai joenpenkka
 STR_3806_SHIP_DEPOT                                             :Telakka
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...veteen ei voi rakentaa.
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Kanava täytyy purkaa ensin
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Tallenna peli
@@ -1837,9 +1893,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megatavu{P "" a} vapaana
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Asemaa ei voi lukea.
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Tallennus epäonnistui.
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Tallennus epäonnistui.{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Tiedostoa ei voi poistaa.
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Lataus epäonnistui.
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Lataus epäonnistui.{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Lista asemista, hakemistoista ja tallennetuista peleistä.
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Valittu nimi pelitallenteelle.
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Poista valittu pelitallenne.
@@ -2011,6 +2067,8 @@
 STR_SV_STNAME_HELIPORT                                          :{STRING}, helikopterikenttä
 STR_SV_STNAME_FOREST                                            :{STRING}, metsä
 
+
+
 ############ end of savegame specific region!
 
 ##id 0x6800
@@ -2089,7 +2147,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Pelaaja {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Uudet kasvot
 STR_7005_COLOR_SCHEME                                           :{BLACK}Väriteema
@@ -2101,7 +2159,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Pääjohtajan nimi
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Yhtiön nimeä ei voi muuttaa...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Pääjohtajan nimeä ei voi muuttaa...
-STR_700E_FINANCES                                               :{WHITE}Talous, {COMPANY} {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}Talous, {COMPANY} {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Menot/tulot
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Rakentaminen
@@ -2117,20 +2175,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Laivojen tulot
 STR_701C_LOAN_INTEREST                                          :{GOLD}Lainan korko
 STR_701D_OTHER                                                  :{GOLD}Muuta
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Yhteensä:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Tulokuvaaja
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Käyttökatekuvaaja
 STR_7026_BANK_BALANCE                                           :{WHITE}Tilin saldo
 STR_7027_LOAN                                                   :{WHITE}Laina
-STR_MAX_LOAN                                                    :{WHITE}Laina enimmillään:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Lainaa {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Lyhennä lainaa {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Laina enimmillään:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Lainaa {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Lyhennä lainaa {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...suurin sallittu lainan suuruus on {CURRENCY}.
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Lisälainan otto ei onnistu...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...ei lainaa maksettavana.
@@ -2169,8 +2227,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Yhtiön suoritearvio (enimmäisarvio=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Yhtiöiden arvot
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Yhtiökilpataulukko
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Kuljetusyhtiö vaikeuksissa!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} myydään tai julistetaan konkurssiin, ellei suorituskyky lisäänny pian!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(pääjohtaja)
@@ -2208,7 +2266,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Maailmanlaajuinen laskukausi!{}{}Rahoitusasiantuntijat pelkäävät pahinta talouden laskiessa!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Laskukausi ohi!{}{}Kaupankäynnin käänne parempaan lisää luottamusta teollisuuteen talouden vahvistuessa!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Suuri/pieni ikkunan koko
-STR_7076_COMPANY_VALUE                                          :{GOLD}Yhtiön arvo: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Yhtiön arvo: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Osta 25{NBSP}%:n osuus yhtiöstä
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Myy 25{NBSP}%:n osuus yhtiöstä
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Osta 25{NBSP}%:n osuus tästä yhtiöstä
@@ -2239,6 +2297,8 @@
 STR_LIVERY_HELICOPTER                                           :Helikopteri
 STR_LIVERY_SMALL_PLANE                                          :Pieni lentokone
 STR_LIVERY_LARGE_PLANE                                          :Suuri lentokone
+STR_LIVERY_PASSENGER_TRAM                                       :Matkustajavaunu
+STR_LIVERY_FREIGHT_TRAM                                         :Rahtivaunu
 
 STR_LIVERY_GENERAL_TIP                                          :{BLACK}Näytä yleiset väriteemat
 STR_LIVERY_TRAIN_TIP                                            :{BLACK}Näytä junan väriteemat
@@ -2518,7 +2578,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN}: veturitalli
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Kaupungilaiset juhlivat . . .{}Ensimmäinen juna saapuu asemalle ({STATION})!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (yksityiskohdat)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (yksityiskohdat)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Juna on tiellä.
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2539,6 +2599,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Mene pysähtymättä veturitalliin ({TOWN})
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Huolto pysähtymättä veturitallilla ({TOWN})
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Kiertävä (ei aikataulua)
+STR_TIMETABLE_TRAVEL_FOR                                        :Kulje kohteeseen {STRING}
+STR_TIMETABLE_STAY_FOR                                          :ja odota {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} päivä{P "" ä}
+STR_TIMETABLE_TICKS                                             :{COMMA} tunti{P "" a}
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Suuntana veturitalli ({TOWN})
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Suuntana veturitalli ({TOWN}), {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Huolto {TOWN} Varikko
@@ -2580,13 +2647,15 @@
 STR_REFIT                                                       :{BLACK}Sovita
 STR_REFIT_TIP                                                   :{BLACK}Valitse rahdin tyyppi jolla tämä käsky uudistetaan. CTRL+klikkaus poistaa uudistuksen
 STR_REFIT_ORDER                                                 :(Sovita {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Aikataulu
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Näytä aikataulu
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (aikataulu)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - aikataulun loppu - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Huolto
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Yksikköä ei voi rakentaa...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Rakennettu: {LTBLUE}{NUM}{BLACK} Arvo: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Arvo: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Rakennettu: {LTBLUE}{NUM}{BLACK} Arvo: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Arvo: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Lastataan/puretaan
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Juna täytyy pysäyttää veturitallin sisällä
@@ -2596,6 +2665,9 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Uutta pysähdystä ei voi lisätä...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Pysähdystä ei voi poistaa...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Pysähdystä ei voi muokata...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Tätä riviä ei voi siirtää.
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Tätä riviä ei voi ohittaa.
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Tähän riviin ei voi siirtyä.
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Liikennevälinettä ei voi poistaa...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}Moottorivaunun takaosa seuraa aina etuosaansa
 STR_8838_N_A                                                    :-{SKIP}
@@ -2627,11 +2699,16 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Näytä kunkin ajoneuvon kapasiteetti.
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Näytä junan kokonaiskapasiteetti, eritelty rahtityypin mukaan.
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Aikataulu - napsauta määräystä korostaaksesi.
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Ohita nykyinen pysähdys ja aloita seuraava.
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Poista korostettu määräys.
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Tee korostetusta pysäkistä pysähtymätön.
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Lisää uusi pysähdys ennen valittua, tai lisää listan viimeiseksi.
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Aseta korostettu pysähdys pakottamaan ajoneuvon odottamaan täyttä lastausta.
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Aseta korostettu pysähdys pakottamaan ajoneuvo odottamaan purkua.
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Aikataulu - valitse rivi
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Aseta kuinka kauan käskyn tulisi kestää
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Nollaa tämän rivin aika
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Nollaa myöhästymislaskuri, jotta vaunu olisi taas aikataulussa
 STR_SERVICE_HINT                                                :{BLACK}Ohita tämä määräys, ellei palvelua tarvita.
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Kulu: {CURRENCY} Paino: {WEIGHT_S}{}Nopeus: {VELOCITY}  Teho: {POWER}{}Käyttökustannukset: {CURRENCY}/vuosi{}Kapasiteetti: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Rikki
@@ -2653,6 +2730,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Juna(vaunu)n tyyppiä ei voi uudelleennimetä...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Pakottaa tyhjentämään rahdin valitulla pysäkillä
 STR_886F_TRANSFER                                               :{BLACK}Siirrä
+STR_CLEAR_TIME                                                  :{BLACK}Nollaa aika
+STR_RESET_LATENESS                                              :{BLACK}Nollaa myöhästymislaskuri
 
 STR_TRAIN_STOPPING                                              :{RED}Pysäytetään
 STR_TRAIN_STOPPING_VEL                                          :{RED}Pysäytetään, {VELOCITY}
@@ -2661,8 +2740,16 @@
 STR_TRAIN_START_NO_CATENARY                                     :Radasta puuttuu "catenary"; junaa ei voi käynnistää
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Uusi {STRING} on nyt saatavilla!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Uusi {STRING} on nyt saatavilla! - {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Uusi {STRING} on nyt saatavilla! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Ei voi asettaa aikataulua.
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Vain asemalla voi odottaa.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Tämä ajoneuvo ei pysähdy tällä asemalla.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Muuta aikaa
+STR_TIMETABLE_STATUS_ON_TIME                                    :Ajoneuvo on aikataulussa
+STR_TIMETABLE_STATUS_LATE                                       :Ajoneuvo on {STRING} myöhässä
+STR_TIMETABLE_STATUS_EARLY                                      :Ajoneuvo on {STRING} etuajassa
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Ajoneuvo tiellä.
@@ -2678,7 +2765,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Huippunopeus: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Tuottoa tänä vuonna: {LTBLUE}{CURRENCY}  (viime vuonna: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Toimintavarmuus: {LTBLUE}{COMMA}%  {BLACK}Hajoamisia viime huollon jälkeen: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Rakennettu: {LTBLUE}{NUM}{BLACK} Arvo: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Rakennettu: {LTBLUE}{NUM}{BLACK} Arvo: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Kapasiteetti: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...sen pitää olla pysähtyneenä huoltoasemalle.
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Ajoneuvoa ei voi myydä...
@@ -2705,12 +2792,16 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Ajoneuvon valintalista - napsauta ajoneuvoa saadaksesi tietoja.
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Rakenna valittu ajoneuvo.
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Kulu: {CURRENCY}{}Nopeus: {VELOCITY}{}Käyttökustannukset: {CURRENCY}/vuosi{}Kapasiteetti: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Kapasiteetti: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Nimeä ajoneuvo
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Ajoneuvoa ei voi nimetä...
 STR_902E_NAME_ROAD_VEHICLE                                      :{BLACK}Nimeä ajoneuvo
 STR_902F_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Kaupunkilaiset juhlivat . . .{}Ensimmäinen linja-auto saapuu asemalle {STATION}!
 STR_9030_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Kaupunkilaiset juhlivat . . .{}Ensimmäinen kuorma-auto saapuu asemalle {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Kaupunkilaiset juhlivat . . .{}Ensimmäinen raitiovaunu saapuu asemalle {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Kaupunkilaiset juhlivat . . .{}Ensimmäinen rahtiraitiovaunu saapuu asemalle {STATION}!
 STR_9031_ROAD_VEHICLE_CRASH_DRIVER                              :{BLACK}{BIGFONT}Ajoneuvokolari!{}Kuljettaja kuolee junaan törmäyksen jälkeisessä tulipallossa
 STR_9032_ROAD_VEHICLE_CRASH_DIE                                 :{BLACK}{BIGFONT}Ajoneuvokolari!{}{COMMA} kuolee junaan törmäyksen jälkeisessä tulipallossa
 STR_9033_CAN_T_MAKE_VEHICLE_TURN                                :{WHITE}Ajoneuvoa ei voi pakottaa kääntymään ympäri...
@@ -2750,7 +2841,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Huippunopeus: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Tuottoa tänä vuonna: {LTBLUE}{CURRENCY}  (viime vuonna: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Toimintavarmuus: {LTBLUE}{COMMA}%  {BLACK}Hajoamisia viime huollon jälkeen: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Rakennettu: {LTBLUE}{NUM}{BLACK} Arvo: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Rakennettu: {LTBLUE}{NUM}{BLACK} Arvo: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Kapasiteetti: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Laivaa ei voi pysäyttää/laittaa liikkeelle...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Laivaa ei voi lähettää telakalle...
@@ -2818,7 +2909,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Huippunopeus: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Tuotto tänä vuonna: {LTBLUE}{CURRENCY}  (viime vuonna: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Luotettavuus: {LTBLUE}{COMMA}%  {BLACK}Hajoamisia viime huollon jälkeen: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Rakennettu: {LTBLUE}{NUM}{BLACK} Arvo: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Rakennettu: {LTBLUE}{NUM}{BLACK} Arvo: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Lentokonetta ei voi lähettää lentokonehalliin...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Suuntana lentokonehalli, {STATION}
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Suuntana lentokonehalli, {STATION}, {VELOCITY}
@@ -2871,6 +2962,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Aseta kohteeksi lentokonehalli, {STATION}
 SERVICE_AT_AIRPORT_HANGAR                                       :Huolto, kohteena lentokonehalli, {STATION}
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Aikataulu)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}{STATION}: Ilmalaivaonnettomuus!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Ajoneuvo tuhoitui törmäyksessä UFO:n kanssa!
@@ -2995,6 +3088,7 @@
 
 ### depot strings
 STR_DEPOT_SELL_CONFIRMATION_TEXT                                :{YELLOW}Olet myymässä kaikki varikon ajoneuvot. Oletko varma?
+STR_DEPOT_WRONG_DEPOT_TYPE                                      :Väärä varikkotyyppi
 
 STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP                             :{BLACK}Myy kaikki varikolla olevat junat
 STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP                           :{BLACK}Myy kaikki varikolla olevat ajoneuvot
@@ -3185,3 +3279,42 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Läpinäkyvät asemat, varikot, rastit ja sähkölinjat
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Läpinäkyvät sillat
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Läpinäkyvät rakenteet kuten majakat ja antennit
+
+
+##### Mass Order
+STR_GROUP_NAME_FORMAT                                           :Ryhmä {COMMA}
+STR_GROUP_TINY_NAME                                             :{TINYFONT}{GROUP}
+STR_GROUP_ALL_TRAINS                                            :Kaikki junat
+STR_GROUP_ALL_ROADS                                             :Kaikki autot
+STR_GROUP_ALL_SHIPS                                             :Kaikki laivat
+STR_GROUP_ALL_AIRCRAFTS                                         :Kaikki lentoalukset
+STR_GROUP_TINY_NUM                                              :{TINYFONT}{COMMA}
+STR_GROUP_ADD_SHARED_VEHICLE                                    :Lisää jaettuja ajoneuvoja
+STR_GROUP_REMOVE_ALL_VEHICLES                                   :Poista kaikki ajoneuvot
+
+STR_GROUP_TRAINS_CAPTION                                        :{WHITE}{GROUP} - {COMMA} Juna{P "" t}
+STR_GROUP_ROADVEH_CAPTION                                       :{WHITE}{GROUP} - {COMMA} Auto{P "" t}
+STR_GROUP_SHIPS_CAPTION                                         :{WHITE}{GROUP} - {COMMA} Laiva{P "" t}
+STR_GROUP_AIRCRAFTS_CAPTION                                     :{WHITE}{GROUP} - {COMMA} {P Lentoalus Lentoalukset}
+STR_GROUP_RENAME_CAPTION                                        :{BLACK}Nimeä ryhmä
+STR_GROUP_REPLACE_CAPTION                                       :{WHITE}Korvaa ryhmän "{GROUP}" ajoneuvot
+
+STR_GROUP_CAN_T_CREATE                                          :{WHITE}Ei voi luoda ryhmää.
+STR_GROUP_CAN_T_DELETE                                          :{WHITE}Ryhmää ei voi poistaa.
+STR_GROUP_CAN_T_RENAME                                          :{WHITE}Ryhmää ei voi nimetä.
+STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES                             :{WHITE}Ryhmän kaikkia ajoneuvoja ei voi poistaa.
+STR_GROUP_CAN_T_ADD_VEHICLE                                     :{WHITE}Ei voi lisätä ajoneuvoa ryhmään.
+STR_GROUP_CAN_T_ADD_SHARED_VEHICLE                              :{WHITE}Ei voi lisätä jaettuja ajoneuvoja ryhmään.
+
+STR_GROUPS_CLICK_ON_GROUP_FOR_TIP                               :{BLACK}Ryhmät - Valitse ryhmä
+STR_GROUP_CREATE_TIP                                            :{BLACK}Luo ryhmä
+STR_GROUP_DELETE_TIP                                            :{BLACK}Poista valittu ryhmä
+STR_GROUP_RENAME_TIP                                            :{BLACK}Nimeä valittu ryhmä
+STR_GROUP_REPLACE_PROTECTION_TIP                                :{BLACK}Poista ryhmä automaattisesti korvattavien joukosta
+
+STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR                        :{TINYFONT}{BLACK}Tulos tänä vuonna: {GREEN}{CURRENCY} {BLACK}(viime vuonna: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR                         :{TINYFONT}{BLACK}Tulos tänä vuonna: {RED}{CURRENCY} {BLACK}(viime vuonna: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Tulos tänä vuonna: {GREEN}{CURRENCY} {BLACK}(viime vuonna: {RED}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Tulos tänä vuonna: {RED}{CURRENCY} {BLACK}(viime vuonna: {RED}{CURRENCY}{BLACK})
+
+########
--- a/src/lang/french.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/french.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -11,8 +11,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Hors limites
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Trop près des bords de la carte
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Fonds insuffisants{}Somme de {CURRENCY} requise
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Terrain plat requis
 STR_0008_WAITING                                                :{BLACK}En attente: {WHITE}{STRING}
@@ -496,7 +496,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Municipalité: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Aucun
 STR_01AA_NAME                                                   :{BLACK}Nom
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1er
@@ -779,6 +779,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Niveau de Difficulté
 STR_02C7_CONFIG_PATCHES                                         :Configuration Avancée
 STR_NEWGRF_SETTINGS                                             :Paramètres Newgrf
+STR_TRANSPARENCY_OPTIONS                                        :Options de transparence
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Afficher le nom des villes
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Afficher le nom des stations
@@ -806,7 +807,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Carte du monde
 STR_EXTRA_VIEW_PORT                                             :Vue supplémentaire
 STR_SIGN_LIST                                                   :Liste des panneaux
-STR_TRANSPARENCY_OPTIONS                                        :Options de transparence
 STR_02DF_TOWN_DIRECTORY                                         :Annuaire des villes
 STR_TOWN_POPULATION                                             :{BLACK}Population mondiale : {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Vue {COMMA}
@@ -1104,6 +1104,17 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Vitesse de défilement avec molette: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Pause automatique en début de nouvelle partie: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Utiliser la liste de véhicules avancée: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Utiliser les indicateurs de chargement: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Activer les horaires pour les véhicules: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Afficher l'horaire en ticks plutôt qu'en jours: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE                            :{LTBLUE}Type de rail par défaut (après nouvelle partie/chargement): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Rail normal
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Rail électrifié
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Monorail
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :Premier disponible
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :Dernier disponible
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :Le plus utilisé
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Nombre de trains max. par joueur: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Nombre de véhicules routiers max. par joueur: {ORANGE}{STRING}
@@ -1187,7 +1198,7 @@
 STR_CHEATS                                                      :{WHITE}Triches
 STR_CHEATS_TIP                                                  :{BLACK}Les cases à cocher indiquent que vous avez déjà utilisé cette triche auparavant
 STR_CHEATS_WARNING                                              :{BLACK}Attention ! Vous êtes sur le point de trahir vos adversaires. Gardez en tête qu'une telle honte sera gardée en mémoire pour l'éternité.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Augmenter l'argent de {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Augmenter l'argent de {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Jouer en tant que joueur n°: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Bulldozer magique (enlèvement industries et objets fixes): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Les tunnels peuvent se croiser: {ORANGE}{STRING}
@@ -1442,9 +1453,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Nom de la compagnie :  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Inauguration :  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Valeur de la compagnie :  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Argent courant :  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Revenus de l'année dernière :  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Valeur de la compagnie :  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Argent courant :  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Revenus de l'année dernière :  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Performance :  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Véhicules :  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1679,7 +1690,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}L'édifice doit d'abord être démolit
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Population: {ORANGE}{COMMA}{BLACK}  Maisons: {ORANGE}{COMMA}
@@ -1712,7 +1723,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Afficher des informations sur la municipalité
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}Municipalité de {TOWN}
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Qualité de service des compagnies:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subventions
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Offres de subvention pour le transport de:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} de {STRING} à {STRING}
@@ -1783,7 +1794,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...il y a déjà des arbres
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...l'endroit ne convient pas
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Plantation impossible...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...trop de panneaux
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Place du panneau impossible...
 STR_280A_SIGN                                                   :Panneau
@@ -1892,6 +1903,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Rivage ou berge
 STR_3806_SHIP_DEPOT                                             :Dépôt naval
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...Impossible de construire sur l'eau
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Vous devez d'abord détruire le canal
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Sauvegarder la partie
@@ -1901,9 +1913,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} Mo libre{P "" s}
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Impossible d'accéder au disque
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}La sauvegarde à échoué
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}La sauvegarde à échoué{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Impossible de supprimer le fichier
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Le chargement à échoué
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Le chargement à échoué{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Erreur interne: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Sauvegarde corrompue - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Sauvegarde modifiée avec une version plus récente
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :Fichier illisibble
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :Fichier non modifiable
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Liste des disques, répertoires, et fichiers de sauvegarde
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nom sélectionné pour la sauvegarde
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Supprime la sauvegarde sélectionnée
@@ -2074,8 +2091,7 @@
 STR_SV_STNAME_LOWER                                             :Bas {STRING}
 STR_SV_STNAME_HELIPORT                                          :{STRING} Héliport
 STR_SV_STNAME_FOREST                                            :{STRING} Forêt
-
-STR_SV_GROUP_NAME                                               :{GROUP}
+STR_SV_STNAME_FALLBACK                                          :{STRING} Station #{NUM}
 
 ############ end of savegame specific region!
 
@@ -2155,7 +2171,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Joueur {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Nouveau visage
 STR_7005_COLOR_SCHEME                                           :{BLACK}Couleur
@@ -2167,7 +2183,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Nom du P.D.G.
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Impossible de changer le nom de compagnie...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Impossible de changer le nom du P.D.G. ...
-STR_700E_FINANCES                                               :{WHITE}Finances: {COMPANY} {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}Finances: {COMPANY} {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Dépenses/Revenus
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Construction
@@ -2183,20 +2199,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Revenu naval
 STR_701C_LOAN_INTEREST                                          :{GOLD}Intérêts du prêt
 STR_701D_OTHER                                                  :{GOLD}Autres
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Total:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Graphique du Revenu
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Graphique du profit d'opération
 STR_7026_BANK_BALANCE                                           :{WHITE}Equilibre bancaire
 STR_7027_LOAN                                                   :{WHITE}Prêt
-STR_MAX_LOAN                                                    :{WHITE}Emprunt maximum :  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Emprunter {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Rembourser {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Emprunt maximum :  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Emprunter {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Rembourser {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...le prêt maximum est de {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Impossible d'emprunter plus...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...Prêt déjà remboursé
@@ -2235,8 +2251,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Historique de performance (performance max=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Valeur de la compagnie
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Classement des compagnies
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}La compagnie de transport à des ennuis!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} va être en banqueroute si ses performances ne s'améliorent pas!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Président)
@@ -2274,7 +2290,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Récession mondiale!{}{}Les experts financiers craignent le pire!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Fin de la récession!{}{}La reprise redonne confiance aux industries!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Bascule entre une grande/petite fenêtre
-STR_7076_COMPANY_VALUE                                          :{GOLD}Valeur de la compagnie : {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Valeur de la compagnie : {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Acheter 25% de la compagnie
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Vendre 25% de la compagnie
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Acheter 25% de la compagnie
@@ -2586,7 +2602,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Dépôt ferroviaire
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Les habitants célèbrent{}l'arrivée du premier train à {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Détails)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Détails)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Train présent
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2607,6 +2623,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Aller sans s'arrêter au dépôt de {TOWN}
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Aller faire l'entretien sans s'arrêter au dépôt de {TOWN}
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Voyager (sans horaires)
+STR_TIMETABLE_TRAVEL_FOR                                        :Voyager pendant {STRING}
+STR_TIMETABLE_STAY_FOR                                          :et rester pendant {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} jour{P "" s}
+STR_TIMETABLE_TICKS                                             :{COMMA} tick{P "" s}
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}En route pour le dépôt de {TOWN}
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}En route pour le dépôt de {TOWN}, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Entretien au dépôt de {TOWN}
@@ -2648,13 +2671,15 @@
 STR_REFIT                                                       :{BLACK}Réaménager
 STR_REFIT_TIP                                                   :{BLACK}Choisir pour quelle cargaison réaménager pour cet ordre. Ctrl-clic  pour retirer l'instruction de réaménagement
 STR_REFIT_ORDER                                                 :(Réaménager pour {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Horaire
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Basculer vers la vue horaire
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Ordres)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Fin des ordres - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Entretien
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Impossible de construire le véhicule ferroviaire...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construit en: {LTBLUE}{NUM}{BLACK} Valeur: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Valeur: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construit en: {LTBLUE}{NUM}{BLACK} Valeur: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Valeur: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Chargement/déchargement
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Le train doit être stoppé dans un dépôt
@@ -2704,6 +2729,10 @@
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Insérer un nouvel ordre
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Forcer le véhicule à attendre un chargement complet pour l'ordre sélectionné
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Forcer le véhicule à attendre un déchargement complet pour l'ordre sélectionné
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Horaire - cliquer sur un ordre pour le séléctionner.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Modifier la durée de l'ordre séléctionné
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Annuler la durée de l'ordre séléctionné
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Remet à zéro le compteur de retard, le véhicule sera donc à l'heure
 STR_SERVICE_HINT                                                :{BLACK}Sauter cet ordre tant qu'aucun entretien n'est requis
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Prix: {CURRENCY} Poids: {WEIGHT_S}{}Vitesse: {VELOCITY}  Puissance: {POWER}{}Coût d'entretien: {CURRENCY}/an{}Capacité: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}En panne
@@ -2725,6 +2754,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Impossible de renommer le type de train...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Forcer le véhicule à vider sa cargaison pour l'ordre sélectionné
 STR_886F_TRANSFER                                               :{BLACK}Transfert
+STR_CLEAR_TIME                                                  :{BLACK}Annuler durée
+STR_RESET_LATENESS                                              :{BLACK}RAZ compteur de retard
 
 STR_TRAIN_STOPPING                                              :{RED}Ralentit
 STR_TRAIN_STOPPING_VEL                                          :{RED}Ralentit, {VELOCITY}
@@ -2733,8 +2764,20 @@
 STR_TRAIN_START_NO_CATENARY                                     :Cette voie n'a pas de caténaire, le train ne peut pas démarrer
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Nouv{G eau el elle} {STRING} disponible!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Nouv{G eau el elle} {STRING} disponible!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Nouv{G eau el elle} {STRING} disponible!  -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Impossible d'affecter un horaire au véhicule...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Les véhicules ne peuvent attendre qu'aux stations.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Ce véhicule ne s'arrête pas à cette station.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Modifier durée
+STR_TIMETABLE_STATUS_ON_TIME                                    :Ce véhicule est à l'heure
+STR_TIMETABLE_STATUS_LATE                                       :Ce véhicule est en retard de {STRING}
+STR_TIMETABLE_STATUS_EARLY                                      :Ce véhicule est en avance de {STRING}
+STR_TIMETABLE_TOTAL_TIME                                        :Cet horaire prendra {STRING} pour s'achever
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :Cet horaire prendra au moins {STRING} pour s'achever (horaire incomplet)
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Autoremplir
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Remplit l'horaire automatiquement avec les valeurs du premier trajet
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Véhicule Routier présent
@@ -2750,7 +2793,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Vitesse max.: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profit de cette année: {LTBLUE}{CURRENCY}  (année dernière: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Fiabilité: {LTBLUE}{COMMA}%  {BLACK}Pannes depuis le dernier entretien: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construit en: {LTBLUE}{NUM}{BLACK} Valeur: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construit en: {LTBLUE}{NUM}{BLACK} Valeur: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Capacité: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...doit être à l'arrêt dans un dépôt routier
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Impossible de vendre le véhicule...
@@ -2826,7 +2869,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Vitesse max.: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profit cette année: {LTBLUE}{CURRENCY}  (l'an dernier: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Fiabilité: {LTBLUE}{COMMA}%  {BLACK}Pannes depuis le dernier entretien: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construit: {LTBLUE}{NUM}{BLACK} Valeur: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construit: {LTBLUE}{NUM}{BLACK} Valeur: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Capacité: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Impossible d'arrêter/démarrer le navire...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Impossible d'envoyer le navire au dépôt...
@@ -2894,7 +2937,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Vitesse max.: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profits cette année: {LTBLUE}{CURRENCY} (l'an dernier: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Fiabilité: {LTBLUE}{COMMA}%   {BLACK}Pannes depuis le dernier service: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construit: {LTBLUE}{NUM}{BLACK} Valeur: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construit: {LTBLUE}{NUM}{BLACK} Valeur: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Impossible d'envoyer l'aéronef au hangar...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}En route pour le hangar de {STATION}
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}En route pour le hangar de {STATION}, {VELOCITY}
@@ -2947,6 +2990,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Aller au hangar {STATION}
 SERVICE_AT_AIRPORT_HANGAR                                       :Entretien au hangar {STATION}
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Horaire)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Désastre impliquant un Zeppelin à {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Un véhicule routier est détruit dans une collision avec un 'OVNI'!
@@ -3262,6 +3307,14 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Transparence des éléments constructibles tels que stations, dépôts, points de contrôle et caténaire
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Transparence des ponts
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Transparence des structures telles que phares et antennes
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Basculer la transparence pour les indicateurs de chargement
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Groupe {COMMA}
@@ -3299,4 +3352,11 @@
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Profit cette année: {GREEN}{CURRENCY} {BLACK}(an dernier: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Profit cette année: {RED}{CURRENCY} {BLACK}(an dernier: {RED}{CURRENCY}{BLACK})
 
+STR_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
 ########
--- a/src/lang/galician.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/galician.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Fora do borde do mapa
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Demasiado cerca do borde do mapa
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Diñeiro insuficiente - necesitas {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Necesitas terreo chan
 STR_0008_WAITING                                                :{BLACK}Esperando: {WHITE}{STRING}
@@ -478,7 +478,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Autoridade local: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Ningún
 STR_01AA_NAME                                                   :{BLACK}Nome
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1º
@@ -1110,7 +1110,7 @@
 STR_CHEATS                                                      :{WHITE}Trampas
 STR_CHEATS_TIP                                                  :{BLACK}As caixas de confirmación indican se usaches esta trampa antes
 STR_CHEATS_WARNING                                              :{BLACK}¡Advertencia! Estás a piques de traizoa-los teus oponentes. Ten en conta que unha desgracia coma esta se lembrará eternamente.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Incrementa-lo diñeiro en {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Incrementa-lo diñeiro en {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Xogar coma xogador: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Escavadora máxica(Elimina industrias, non eliminables): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Os tuneis poden cruzarse entre eles: {ORANGE}{STRING}
@@ -1334,9 +1334,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Nome da compañía:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Inauguración:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Valor da compañía:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Balance actual:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Ingresos do ano pasado:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Valor da compañía:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Balance actual:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Ingresos do ano pasado:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Rendemento:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Vehículos:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1535,7 +1535,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Debes demole-lo edificio primeiro
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Poboación: {ORANGE}{COMMA}{BLACK}  Casas: {ORANGE}{COMMA}
@@ -1568,7 +1568,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Mostra-la información sobre a autoridade local
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}Autoridade local de {TOWN}
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Puntuacións das compañías de transporte:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subsidios
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Sibsidios en oferta para sevicios que transporten:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} dende {STRING} ata {STRING}
@@ -1639,7 +1639,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...Xa hai unha árbore aí
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...emprazamento inadecuado
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Non se pode plantar unha árbore aí...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...demasiados sinais
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Non se pode situa-lo sinal aí...
 STR_280A_SIGN                                                   :Sinal
@@ -1751,9 +1751,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabytes libres
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}No se pode lee-la unidade
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Grabación da partida fallida
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Grabación da partida fallida{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Non se pode borra-lo arquivo
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Carga da partida fallida
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Carga da partida fallida{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Lista de unidades, directorios e arquivos de partida
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nome seleccionado actualmente para o arquivo
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Borra-lo arquivo que está seleccionado
@@ -2002,7 +2002,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Xogador {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Nova Cara
 STR_7005_COLOR_SCHEME                                           :{BLACK}Esquema de Cor
@@ -2014,7 +2014,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Nome Do Presidente
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Non se pode cambia-lo nome da compañía...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Non se pode cambia-lo nome do presidente...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finanzas {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finanzas {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Gastos/Ingresos
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Construccción
@@ -2030,20 +2030,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Ingresos dos Barcos
 STR_701C_LOAN_INTEREST                                          :{GOLD}Interese do Préstamo
 STR_701D_OTHER                                                  :{GOLD}Outros
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Total:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Gráfico de Ingresos
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Gráfica de Beneficios Operativos
 STR_7026_BANK_BALANCE                                           :{WHITE}Balance do Banco
 STR_7027_LOAN                                                   :{WHITE}Préstamo
-STR_MAX_LOAN                                                    :{WHITE}Préstamo Max:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Solicitar {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Devolver {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Préstamo Max:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Solicitar {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Devolver {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...O tamaño máximo do préstamo permitido e de {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Non se pode solicitar máis diñeiro...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...non queda préstamo a pagar
@@ -2081,8 +2081,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Puntuación de rendemento da compañía (Máximo=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Valor da Compañía
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Tabla da Liga de Compañías
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}¡Compañía de transporte en problemas!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} vai ser vendida ou declarada en bancarrota se non mellora o seu rendemento pronto!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Presidente)
@@ -2120,7 +2120,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}¡Recesión Mundial!{}{}¡Os expertos en finanzas témense o peor a medida que a economía afúndese!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}¡Fin da Recesión!{}{}¡A mellora no comercio inspira confianza nas industrias a media que a economía reforzase!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Intercambiar entre fiestra grande/pequena
-STR_7076_COMPANY_VALUE                                          :{GOLD}Valor da Compañía: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Valor da Compañía: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Comprar un 25% das accións da compañía
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Vender un 25% das accións da compañía
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Comprar un 25% das accións nesta compañía
@@ -2421,7 +2421,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}Depósito de Tren de {TOWN}
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Celebración cidadá . . .{}Chega o primeiro tren a {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Detalles)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Detalles)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Hai un tren no camiño
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2483,8 +2483,8 @@
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Servicio
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}No se pode construí-lo vehículo de ferrocarril...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Valor: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Valor: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Cargando / Descargando
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}O tren debe estar parado nun depósito
@@ -2555,7 +2555,7 @@
 STR_TRAIN_NO_POWER                                              :{RED}Sen enerxía
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}¡Novo {STRING} agora dispoñible!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Haí un vehículo de estrada no camiño
@@ -2571,7 +2571,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Velocidade Máx.: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Beneficio este ano: {LTBLUE}{CURRENCY}  (último ano: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Fiabilidade: {LTBLUE}{COMMA}%  {BLACK}Roturas dende o último servicio: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Capacidade: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...debe estar parado dentro dun depósito de vehículos de estrada
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Non se pode vende-lo vehículo de estrada...
@@ -2641,7 +2641,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Velodidade Máx.: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Beneficio este ano: {LTBLUE}{CURRENCY}  (último ano: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Fiabilidade: {LTBLUE}{COMMA}%  {BLACK}Roturas dende o último servicio: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Capacidade: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Non se pode parar/arrincar o barco...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Non se pode envia-lo barco o depósito...
@@ -2709,7 +2709,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Velocidade Máx.: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Beneficio este ano: {LTBLUE}{CURRENCY}  (último ano: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Fiabilidade: {LTBLUE}{COMMA}%  {BLACK}Roturas dende o último servicio: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Non se pode envia-la aeronave ó hangar...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Diríxese ó hangar de {STATION}
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Diríxese ó hangar de {STATION}, {VELOCITY}
--- a/src/lang/german.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/german.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -11,8 +11,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Zu weit vom Kartenrand entfernt
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Zu nahe am Kartenrand
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Nicht genug Geld - {CURRENCY} benötigt!
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Ebenes Land erforderlich
 STR_0008_WAITING                                                :{BLACK}Wartend:  {WHITE}{STRING}
@@ -496,7 +496,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Gehört zur Gemeinde: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Keine
 STR_01AA_NAME                                                   :{BLACK}Name
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1.
@@ -779,6 +779,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Schwierigkeitsgrad
 STR_02C7_CONFIG_PATCHES                                         :Einstellungen der Patches
 STR_NEWGRF_SETTINGS                                             :Newgrf-Einstellungen
+STR_TRANSPARENCY_OPTIONS                                        :Transparenzeinstellungen
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Städtenamen anzeigen
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Stationsnamen anzeigen
@@ -806,7 +807,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Weltkarte
 STR_EXTRA_VIEW_PORT                                             :Zusatzansicht
 STR_SIGN_LIST                                                   :Schilderliste
-STR_TRANSPARENCY_OPTIONS                                        :Transparenzeinstellungen
 STR_02DF_TOWN_DIRECTORY                                         :Städteverzeichnis
 STR_TOWN_POPULATION                                             :{BLACK}Weltbevölkerung: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Ansicht {COMMA}
@@ -1104,6 +1104,13 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Scrollradgeschwindigkeit auf der Karte: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automatische Pause bei Spielstart: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Erweiterte Fahrzeugliste benutzen: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE                            :{LTBLUE}Standard-Gleistyp (bei Spielbeginn/geladenem Spiel): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :normales Gleis
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :elektrifiziertes Gleis
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Einschienenbahn
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Magnetschwebebahn
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :zuerst verfügbarer
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :Meistbenutze
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maximale Anzahl der Züge pro Spieler: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Maximale Anzahl der Straßenfahrzeuge pro Spieler: {ORANGE}{STRING}
@@ -1187,7 +1194,7 @@
 STR_CHEATS                                                      :{WHITE}Cheats
 STR_CHEATS_TIP                                                  :{BLACK}Kontrollfelder zeigen, ob du diesen Cheat schonmal benutzt hast.
 STR_CHEATS_WARNING                                              :{BLACK}Achtung! Du bist im Begriff, deine Mitspieler zu betrügen. Denke daran, dass dies niemals vergessen werden wird.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Kontostand um {CURRENCY64} erhöhen
+STR_CHEAT_MONEY                                                 :{LTBLUE}Kontostand um {CURRENCY} erhöhen
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Folgenden Spieler steuern: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Mächtigeres Abrisswerkzeug: {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tunnel dürfen sich kreuzen {ORANGE}{STRING}
@@ -1442,9 +1449,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Firmenname:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Gründung:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Firmenwert:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Kontostand:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Einkommen (letzes Jahr):  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Firmenwert:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Kontostand:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Einkommen (letzes Jahr):  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Leistung:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Fahrzeuge:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1679,7 +1686,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Gebäude muss erst abgerissen werden
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Bevölkerung: {ORANGE}{COMMA}{BLACK}  Häuser: {ORANGE}{COMMA}
@@ -1712,7 +1719,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Zeige Einzelheiten der Stadtverwaltung
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}Stadtverwaltung {TOWN}
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Bewertung der Transportfirma:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subventionen
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Subventionsangebot für:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} von {STRING} nach {STRING}
@@ -1783,7 +1790,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...hier sind bereits Bäume
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...ungeeignetes Gelände
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Baum kann hier nicht gepflanzt werden...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...zu viele Schilder
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Schild kann hier nicht aufgestellt werden...
 STR_280A_SIGN                                                   :Schild
@@ -1892,6 +1899,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Küste oder Flussufer
 STR_3806_SHIP_DEPOT                                             :Werft
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...kann nicht auf Wasser gebaut werden
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Kanal muß erst abgerissen werden
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Spiel speichern
@@ -1901,9 +1909,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} Megabyte{P "" s} frei
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Kann vom Laufwerk nicht lesen
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Spielspeicherung fehlgeschlagen
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Spielspeicherung fehlgeschlagen{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Datei kann nicht gelöscht werden
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Laden des Spieles fehlgeschlagen
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Laden des Spieles fehlgeschlagen{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :interner Fehler: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Defekte Spielstandsdatei - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Spielstand wurde mit neuerer Version erstellt
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :Datei nicht lesbar
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :Kann Datei nicht schreiben
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Liste der Laufwerke, Verzeichnisse und gespeicherten Spiele
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Ausgewählter Spielname
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Lösche gewählten Spielstand
@@ -2075,8 +2088,6 @@
 STR_SV_STNAME_HELIPORT                                          :{STRING} Heliport
 STR_SV_STNAME_FOREST                                            :{STRING} Wald
 
-STR_SV_GROUP_NAME                                               :{GROUP}
-
 ############ end of savegame specific region!
 
 ##id 0x6800
@@ -2155,7 +2166,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Spieler {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Neues Gesicht
 STR_7005_COLOR_SCHEME                                           :{BLACK}Farbauswahl
@@ -2167,7 +2178,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Name des Managers
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Firmenname kann nicht geändert werden...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Managername kann nicht geändert werden...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finanzen {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finanzen {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Ausgaben / Einnahmen
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Baukosten
@@ -2183,20 +2194,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Einnahmen Schiffe
 STR_701C_LOAN_INTEREST                                          :{GOLD}Kreditzinsen
 STR_701D_OTHER                                                  :{GOLD}Sonstiges
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Gesamt:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Einkommensdiagramm
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Betriebsgewinndiagramm
 STR_7026_BANK_BALANCE                                           :{WHITE}Kontostand
 STR_7027_LOAN                                                   :{WHITE}Kredit
-STR_MAX_LOAN                                                    :{WHITE}Maximaler Kredit:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Leihen {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Rückzahlen {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Maximaler Kredit:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Leihen {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Rückzahlen {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...Maximaler Kredit ist {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Kann keinen weiteren Kredit aufnehmen ...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...Kredit bereits zurückgezahlt
@@ -2235,8 +2246,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Bewertung der Firmenleistung (Höchstwert = 1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Firmenwertdiagramm
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Firmentabelle
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Transportfirma in der Krise!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} Falls die Firmenleitung sich nicht bessert, wird der Verkauf oder die Insolvenz eingeleitet!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Manager)
@@ -2274,7 +2285,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Weltwirtschaftskrise!{}{}Finanzexperten befürchten schlimmsten Zusammenbruch der Wirtschaft!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Wirtschaftskrise beendet!{}{}Aufschwung des Handels gibt Vertrauen in die Industrie und stärkt die Wirtschaft!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Schalter für großes/kleines Fenster
-STR_7076_COMPANY_VALUE                                          :{GOLD}Firmenwert: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Firmenwert: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Kaufe 25% Anteil an Firma
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Verkaufe 25% Anteil an Firma
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Kaufe 25% Anteil an dieser Firma
@@ -2586,7 +2597,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Zugdepot
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Die Stadt feiert . . .{}Der erste Zug erreicht {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Details)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Details)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Zug ist im Weg
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2607,6 +2618,7 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Fahre ohne Halt zu {TOWN} Zugdepot
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Wartung (ohne Halt) bei {TOWN} Zugdepot
 
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Unterwegs zu {TOWN} Zugdepot
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Unterwegs zu {TOWN} Zugdepot, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Wartung in {TOWN} Zugdepot
@@ -2648,13 +2660,15 @@
 STR_REFIT                                                       :{BLACK}Ersetzen
 STR_REFIT_TIP                                                   :{BLACK}Wähle welche Frachtart du ersetzen möchtest. STRG+Klick um die Auswahl rückgängig zu machen
 STR_REFIT_ORDER                                                 :(Ersetzen zu {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Fahrplan
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Gehe zur Fahrplanansicht
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Aufträge)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Ende der Aufträge - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Wartung
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Kann Schienenfahrzeug nicht bauen...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Gebaut: {LTBLUE}{NUM}{BLACK}  Wert: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Wert: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Gebaut: {LTBLUE}{NUM}{BLACK}  Wert: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Wert: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Laden / Entladen
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Zug muss im Depot angehalten sein
@@ -2704,6 +2718,10 @@
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Füge einen neuen Auftrag vor dem markierten Auftrag ein, oder setze ihn ans Ende der Liste
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Der markierte Auftrag wird nur nach voller Beladung ausgeführt
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Beim markierten Auftrag wird die volle Entladung veranlasst
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Fahrplan - Einträge anklicken um sie zu markieren.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Ändere den Zeitrahmen für den markierten Auftrag
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Lösche den Zeitrahmen für den markierten Auftrag
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Setze den Verspätungsmelder zurück, das Fahrzeug ist dann pünktlich.
 STR_SERVICE_HINT                                                :{BLACK}Überspringe diesen Auftrag, sofern keine Wartung benötigt wird
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Kosten: {CURRENCY}   Gewicht: {WEIGHT_S}{}Geschwindigk.: {VELOCITY} Leistung: {POWER}{}Betriebskosten: {CURRENCY}/Jahr{}Kapazität: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Panne
@@ -2725,6 +2743,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Zugtyp kann nicht umbenannt werden...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Beim markierten Eintrag wird die Ladung in den Bahnhof entladen (für späteren Weitertransport)
 STR_886F_TRANSFER                                               :{BLACK}Umladen
+STR_CLEAR_TIME                                                  :{BLACK}Zeit löschen
+STR_RESET_LATENESS                                              :{BLACK}Setze Verspätungszähler zurück
 
 STR_TRAIN_STOPPING                                              :{RED}Halte an
 STR_TRAIN_STOPPING_VEL                                          :{RED}Halte an, {VELOCITY}
@@ -2733,8 +2753,16 @@
 STR_TRAIN_START_NO_CATENARY                                     :Wegen fehlender Oberleitung kann der Zug nicht starten.
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Neue{G r "" s} {STRING} jetzt erhältlich!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Neue{G r "" s} {STRING} jetzt erhältlich!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Neue{G r "" s} {STRING} jetzt erhältlich!  -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Kein Fahrplan für das Fahrzeug...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Fahrzeuge halten nur an Stationen.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Das Fahrzeug hält nicht an dieser Station.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Ändere Zeit
+STR_TIMETABLE_STATUS_ON_TIME                                    :Das Fahrzeug ist derzeit pünktlich.
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Autom. Füllung
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Ergänze den Fahrplan automatisch mit den Werten der ersten Fahrt
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Fahrzeug ist im Weg
@@ -2750,7 +2778,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Höchstgeschwindigk.: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profit lfd. Jahr: {LTBLUE}{CURRENCY}  (letztes Jahr: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Zuverlässigkeit: {LTBLUE}{COMMA}% {BLACK}Pannen seit letzter Wartung: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}  Gebaut: {LTBLUE}{NUM}{BLACK} Wert: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}  Gebaut: {LTBLUE}{NUM}{BLACK} Wert: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Kapazität: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...muss in einem Fahrzeugdepot angehalten werden
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Kann das Fahrzeug nicht verkaufen...
@@ -2777,6 +2805,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Fahrzeugauswahlliste - Klicke auf ein Fahrzeug für Einzelheiten
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Baue das ausgewählte Fahrzeug
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Kosten: {CURRENCY}{}Geschwindigk.: {VELOCITY}{}Betriebskosten: {CURRENCY}/Jahr{}Ladevermögen: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Kapazität: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Name des Fahrzeuges
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Kann das Fahrzeug nicht benennen...
@@ -2824,7 +2854,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Höchstgeschwindigk.: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profit lfd. Jahr: {LTBLUE}{CURRENCY}  (letztes Jahr: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Zuverlässigkeit: {LTBLUE}{COMMA}% {BLACK}Pannen seit letzter Wartung: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK} Gebaut: {LTBLUE}{NUM}{BLACK}   Wert: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK} Gebaut: {LTBLUE}{NUM}{BLACK}   Wert: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Kapazität: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Kann das Schiff nicht anhalten/starten...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Kann das Schiff nicht in die Werft schicken...
@@ -2892,7 +2922,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Höchstgeschwindigk.: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profit lfd. Jahr: {LTBLUE}{CURRENCY}  (letztes Jahr: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Zuverlässigkeit: {LTBLUE}{COMMA}% {BLACK}Pannen seit letzter Wartung: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK} Gebaut: {LTBLUE}{NUM}{BLACK}   Wert: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK} Gebaut: {LTBLUE}{NUM}{BLACK}   Wert: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Kann das Flugzeug nicht in den Hangar schicken...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Unterwegs zu {STATION} Hangar
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Unterwegs zu {STATION} Hangar, {VELOCITY}
@@ -2945,6 +2975,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Fliege zu {STATION} Hangar
 SERVICE_AT_AIRPORT_HANGAR                                       :Wartung im {STATION} Hangar
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Fahrplan)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Zeppelinabsturz bei {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Fahrzeug bei Zusammenstoß mit einem 'UFO' zerstört!
@@ -3260,6 +3292,8 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Verändere die Transparenz für Gebäude wie Bahnhöfe, Depots, Wegpunkte und Oberleitung
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Verändere die Transparenz für Brücken
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Verändere die Transparenz für Bauten wie Leuchttürme und Antennen, evtl. in der Zukunft auch für Sehenswürdigkeiten
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Transparenz für Ladestandsanzeige umschalten
+
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Gruppe {COMMA}
@@ -3269,20 +3303,33 @@
 STR_GROUP_ALL_SHIPS                                             :Alle Schiffe
 STR_GROUP_ALL_AIRCRAFTS                                         :Alle Flugzeuge
 STR_GROUP_TINY_NUM                                              :{TINYFONT}{COMMA}
+STR_GROUP_ADD_SHARED_VEHICLE                                    :Gemeinsame Fahrzeuge hinzufügen
 STR_GROUP_REMOVE_ALL_VEHICLES                                   :Entferne alle Fahrzeuge
 
+STR_GROUP_TRAINS_CAPTION                                        :{WHITE}{GROUP} - {COMMA} Z{P ug üge}
+STR_GROUP_ROADVEH_CAPTION                                       :{WHITE}{GROUP} - {COMMA} Fahrzeug{P "" e}
+STR_GROUP_SHIPS_CAPTION                                         :{WHITE}{GROUP} - {COMMA} Schiff{P "" e}
+STR_GROUP_AIRCRAFTS_CAPTION                                     :{WHITE}{GROUP} - {COMMA} Flugzeug{P "" e}
 STR_GROUP_RENAME_CAPTION                                        :{BLACK}Gruppe umbenennen
+STR_GROUP_REPLACE_CAPTION                                       :{WHITE}Fahrzeuge ersetzen von "{GROUP}"
 
 STR_GROUP_CAN_T_CREATE                                          :{WHITE}Kann Gruppe nicht erstellen...
 STR_GROUP_CAN_T_DELETE                                          :{WHITE}Kann diese Gruppe nicht löschen...
 STR_GROUP_CAN_T_RENAME                                          :{WHITE}Kann Gruppe nicht umbenennen...
 STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES                             :{WHITE}Kann nicht alle Fahrzeuge dieser Gruppe entfernen...
 STR_GROUP_CAN_T_ADD_VEHICLE                                     :{WHITE}Kann das Fahrzeug nicht zu dieser Gruppe hinzufügen...
+STR_GROUP_CAN_T_ADD_SHARED_VEHICLE                              :{WHITE}Die gemeinsamen Fahrzeuge können nicht zur Gruppe hinzugefügt werden...
 
 STR_GROUPS_CLICK_ON_GROUP_FOR_TIP                               :{BLACK}Gruppen - Klicke auf eine Gruppe für eine Liste aller Fahrzeuge der Gruppe
 STR_GROUP_CREATE_TIP                                            :{BLACK}Klicken um eine Gruppe zu erstellen
 STR_GROUP_DELETE_TIP                                            :{BLACK}Die ausgewählte Gruppe löschen
 STR_GROUP_RENAME_TIP                                            :{BLACK}Die ausgewählte Gruppe umbenennen
+STR_GROUP_REPLACE_PROTECTION_TIP                                :{BLACK}Hier klicken um diese Gruppe aus der automatischen Fahrzeugersetzung zu nehmen
+
+STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR                        :{TINYFONT}{BLACK}Profit dieses Jahr: {GREEN}{CURRENCY} {BLACK}(letztes Jahr: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR                         :{TINYFONT}{BLACK}Profit dieses Jahr: {RED}{CURRENCY} {BLACK}(letztes Jahr: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Profit dieses Jahr: {GREEN}{CURRENCY} {BLACK}(letztes Jahr: {RED}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Profit dieses Jahr: {RED}{CURRENCY} {BLACK}(letztes Jahr: {RED}{CURRENCY}{BLACK})
 
 
 ########
--- a/src/lang/hungarian.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/hungarian.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -11,8 +11,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Kilóg a térképről
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Túl közel van a térkép széléhez
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Nincs elég pénzed - {CURRENCY} kellene
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Sima talaj szükséges
 STR_0008_WAITING                                                :{BLACK}Várakozik: {WHITE}{STRING}
@@ -561,7 +561,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Helyi önkormányzat: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Nincs
 STR_01AA_NAME                                                   :{BLACK}Név
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1.
@@ -844,6 +844,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Nehézségi beállítások
 STR_02C7_CONFIG_PATCHES                                         :Foltok beállítása
 STR_NEWGRF_SETTINGS                                             :Newgrf beállítások
+STR_TRANSPARENCY_OPTIONS                                        :Átlátszósági beállítások
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Városnevek mutatása
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Állomásnevek mutatása
@@ -871,7 +872,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Világtérkép
 STR_EXTRA_VIEW_PORT                                             :Extra látkép
 STR_SIGN_LIST                                                   :Feliratok listája
-STR_TRANSPARENCY_OPTIONS                                        :Átlátszósági beállítások
 STR_02DF_TOWN_DIRECTORY                                         :Városlista
 STR_TOWN_POPULATION                                             :{BLACK}Világnépesség: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}{COMMA}. látkép
@@ -1169,6 +1169,17 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Scrollgomb sebessége a térképen: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automatikus pause-mode új játék esetén: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Továbbfejlesztett járműlista használata: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Betöltésjelző használata: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Időalapú menetrend engedélyezése: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Menetrendi idő-alapegység tick a nap helyett: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE                            :{LTBLUE}Alapértelmezett síntipus (játéktöltés/új játék után): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Normál sín
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Elektromos sín
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Egysín
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :Első elérhető
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :Utolsó elérhető
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :Leginkább használt
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maximum vonat játékosonként: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Maximum közúti jármű játékosonként: {ORANGE}{STRING}
@@ -1252,7 +1263,7 @@
 STR_CHEATS                                                      :{WHITE}Csalások
 STR_CHEATS_TIP                                                  :{BLACK}A kijelölőnégyzetek jelzik a csalások eddigi használtságát
 STR_CHEATS_WARNING                                              :{BLACK}Figyelem! Te épp a versenytársaidat készülöd elárulni. Sose felejtsd el, hogy egy ilyen szégyenletes tett sose merül feledésbe.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Tőkeemelés {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Tőkeemelés {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Játszani mint játékos #{ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Csodabuldózer (lerombol gazdasági épületeket, stb): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}A csatornák keresztezhessék egymást: {ORANGE}{STRING}
@@ -1507,9 +1518,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}A cég neve:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Beiktatás:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}A cég értéke:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Jelelegi összeg:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Előző évi bevétel:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}A cég értéke:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Jelelegi összeg:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Előző évi bevétel:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Teljesítmény:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Járművek:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1744,7 +1755,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Előbb le kell rombolnod az épületet
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Lakosság: {ORANGE}{COMMA}{BLACK} Házak: {ORANGE}{COMMA}
@@ -1777,7 +1788,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Az önkormányzat adatainak megmutatása
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} önkormányzata
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Vélemény a szállítási cégekről:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Támogatások
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Támogatás jár
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} szállításáért {STRING} és {STRING} között
@@ -1848,7 +1859,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...már van itt
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...nem alkalmas rá a hely
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Nem ültethetsz ide fát...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...túl sok a felirat
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Nem rakhatsz ide feliratot...
 STR_280A_SIGN                                                   :Felirat
@@ -1957,6 +1968,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Tenger- vagy folyópart
 STR_3806_SHIP_DEPOT                                             :Dokk
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...nem építhető vízen
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}A csatornát előbb le kell rombolni
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Játék mentése
@@ -1966,9 +1978,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabájt szabad
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Nem olvasható a meghajtó
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}A mentés nem sikerült
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}A mentés nem sikerült{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Nem sikerült törölni a fájlt
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}A betöltés nem sikerült
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}A betöltés nem sikerült{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Belső hiba: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Hibás játékállás-mentés - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :A játékállást újabb verzió mentette el
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :A fájl nem olvasható
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :A fájl nem írható
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Meghajtók, könyvtárak és mentések listája
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}A mentés neve
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}A kijelölt mentés törlése
@@ -2176,8 +2193,7 @@
 STR_SV_STNAME_LOWER                                             :{STRING}-alsó
 STR_SV_STNAME_HELIPORT                                          :{STRING}i helikopter-leszálló
 STR_SV_STNAME_FOREST                                            :{STRING}i erdőség
-
-STR_SV_GROUP_NAME                                               :{GROUP}
+STR_SV_STNAME_FALLBACK                                          :{STRING}{NUM}. állomás
 
 ############ end of savegame specific region!
 
@@ -2257,7 +2273,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :({COMMA}. játékos)
 STR_7004_NEW_FACE                                               :{BLACK}Új arc
 STR_7005_COLOR_SCHEME                                           :{BLACK}Szín váltása
@@ -2269,7 +2285,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Az elnök neve
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Nem változtathatod meg a cég nevét...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Nem változtathatod meg az elnök nevét...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} pénzügyei {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} pénzügyei {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Kiadás/Bevétel
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Építkezés
@@ -2285,20 +2301,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Hajók bevétele
 STR_701C_LOAN_INTEREST                                          :{GOLD}Kölcsön kamata
 STR_701D_OTHER                                                  :{GOLD}Egyéb
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Összesen:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Jövedelem grafikon
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Működési nyereség grafikon
 STR_7026_BANK_BALANCE                                           :{WHITE}Banki egyenleg
 STR_7027_LOAN                                                   :{WHITE}Kölcsön
-STR_MAX_LOAN                                                    :{WHITE}Max. kölcsön:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Kölcsönkér {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Visszafizet {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Max. kölcsön:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Kölcsönkér {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Visszafizet {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...{CURRENCY} a megengedett legnagyobb kölcsön
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Nem kölcsönözhetsz több pénzt...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...már letörlesztetted az összeset
@@ -2337,8 +2353,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Cégek teljesítménye (legjobb teljesítmény=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Vállalatok értéke
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}A cégek helyezése
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Egy szállítási cég bajban van!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} csődöt jelent vagy el kell adni, ha teljesítménye nem nő hamarosan!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME} {}(Elnök)
@@ -2376,7 +2392,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Gazdasági visszaesés!{}{}A közgazdászok gazdasági válságtól tartanak!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Vége a visszaesésnek!{}{}A kereskedelem fellendül, ami önbizalmat ad az iparnak, és erősödik a gazdaság!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Kicsi/nagy ablakméret közötti váltás
-STR_7076_COMPANY_VALUE                                          :{GOLD}Cég értéke: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Cég értéke: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}25% megvétele a cégből
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}25% eladása a cégből
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}25% megvétele ebből a cégből
@@ -2688,7 +2704,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN}i járműtelep
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Az emberek ünnepelnek . . .{}Megérkezett az első vonat {STATION} állomásra!
-STR_8802_DETAILS                                                :{WHITE}{STRING} adatai
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} adatai
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Vonat van az útban
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING}{STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING}{STRING}
@@ -2709,6 +2725,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Menj megállás nélkül {TOWN}i járműtelepre
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Mindig javítsd a vonatot a {TOWN}i járműtelepen
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Útipont (időzítetlen)
+STR_TIMETABLE_TRAVEL_FOR                                        :Menjen {STRING} állomásra
+STR_TIMETABLE_STAY_FOR                                          :és maradjon {STRING.t}
+STR_TIMETABLE_DAYS                                              :{COMMA} nap
+STR_TIMETABLE_TICKS                                             :{COMMA} tick
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Úton {TOWN} járműtelepére
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Úton {TOWN} járműtelepére, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Javítás {TOWN} depójában
@@ -2750,13 +2773,15 @@
 STR_REFIT                                                       :{BLACK}Átalakít
 STR_REFIT_TIP                                                   :{BLACK}Válaszd ki minek a szállítására álljunk át. Ctrl+kattintással eltávolítod az átalakítási utasítást.
 STR_REFIT_ORDER                                                 :(Átalakít erre: {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Menetrend
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Átkapcsolás menetrendi nézetre
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} menetrendje
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Menetrend vége - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Javítás
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Nem veheted meg a vasúti járművet...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK} Vásárlás éve: {LTBLUE}{NUM}{BLACK} Érték: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Érték: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK} Vásárlás éve: {LTBLUE}{NUM}{BLACK} Érték: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Érték: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Felpakol / Lepakol
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}A remízben kellene állnia ehhez
@@ -2806,6 +2831,10 @@
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Új célpont beillesztése a kijelölt elé vagy a lista végére
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}A kijelölt célponton meg kell várni, amíg telerakják a járművet
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}A kijelölt célponton le kell pakolni a rakományt
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Menetrend - kijelöléshez kattints egy elemére
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}A kijelölt menetrend-sor végrehajtási idejét változtatja meg
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}A kijelölt menetrendi sorhoz tartozó végrehajtási idő törlése
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Késés-számláló nullázása, azaz a jármű pontos lesz
 STR_SERVICE_HINT                                                :{BLACK}Célpont kihagyása, ha javítás szükséges
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Ár: {CURRENCY}    Súly: {WEIGHT_S}{}Sebesség: {VELOCITY}    Teljesítmény: {POWER}{}Működtetési költség: {CURRENCY}/év{}Kapacitás: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Lerobbant
@@ -2827,6 +2856,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Nem változtathatod meg a márkanevet...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}A kiválasztott állomásnál a jármű a rakományt leteszi
 STR_886F_TRANSFER                                               :{BLACK}Elszállít
+STR_CLEAR_TIME                                                  :{BLACK}Idő törlése
+STR_RESET_LATENESS                                              :{BLACK}Késés nullázása
 
 STR_TRAIN_STOPPING                                              :{RED}Lassít
 STR_TRAIN_STOPPING_VEL                                          :{RED}Lassít, {VELOCITY}
@@ -2835,8 +2866,20 @@
 STR_TRAIN_START_NO_CATENARY                                     :Ennek a sínnek nincs felsővezetéke, a vonat nem tud indulni
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Új {STRING} elérhető!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Új {STRING} elérhető!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Új {STRING} elérhető!  -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}A jármű nem időzíthető
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}A járművek csak az állomáson várakozhatnak
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Ez a jármű nem áll meg ezen az állomáson
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Idő megváltoztatása
+STR_TIMETABLE_STATUS_ON_TIME                                    :Ez a jármű jelenleg pontosan közlekedik
+STR_TIMETABLE_STATUS_LATE                                       :Ez a jármű jelenleg {STRING} késéssel közlekedik
+STR_TIMETABLE_STATUS_EARLY                                      :Ez a jármű jelenleg {STRING} korábban közlekedik
+STR_TIMETABLE_TOTAL_TIME                                        :Ezen menetrend teljesítési ideje: {STRING}
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :Ezen menetrend teljesítési ideje legalább: {STRING} (nincs minden időzítve)
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Automata kitöltés
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}A menetrendet kitölti automatikusan az első utazás értékeivel
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Közúti jármű van az útban
@@ -2852,7 +2895,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Végsebesség: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Idei haszon: {LTBLUE}{CURRENCY}  (tavalyi: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Megbízhatóság: {LTBLUE}{COMMA}%   {BLACK}Lerobbanások az utolsó javítás óta: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Vásárlás éve: {LTBLUE}{NUM}{BLACK}   Érték: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Vásárlás éve: {LTBLUE}{NUM}{BLACK}   Érték: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Kapacitás: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...garázsban kellene állnia ehhez
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Nem adhatod el a közúti járművet...
@@ -2928,7 +2971,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Végsebesség: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Idei haszon: {LTBLUE}{CURRENCY}  (tavalyi: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Megbízhatóság: {LTBLUE}{COMMA}%   {BLACK}Lerobbanások az utolsó javítás óta: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Vásárlás éve: {LTBLUE}{NUM}{BLACK}   Érték: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Vásárlás éve: {LTBLUE}{NUM}{BLACK}   Érték: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Kapacitás: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Nem indíthatod el/ állíthatod meg a hajót...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Nem küldheted a hajót a dokkba...
@@ -2996,7 +3039,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Végsebesség: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Idei haszon: {LTBLUE}{CURRENCY}  (tavalyi: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Megbízhatóság: {LTBLUE}{COMMA}%   {BLACK}Lerobbanások az utolsó javítás óta: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Vásárlás éve: {LTBLUE}{NUM}{BLACK}   Érték: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Vásárlás éve: {LTBLUE}{NUM}{BLACK}   Érték: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Nem küldheted a repülőgépet a hangárba...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Úton {STATION} hangárjába
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Úton {STATION} hangárjába, {VELOCITY}
@@ -3049,6 +3092,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Menj a {STATION} repülőtér hangárjába
 SERVICE_AT_AIRPORT_HANGAR                                       :Javítás a(z) {STATION} hangárban
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Menetrendesítve)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Zeppelinbaleset {STATION} közelében!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}'UFO' ütközés pusztított el egy közúti járművet!
@@ -3364,6 +3409,14 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Átkapcsolni az építhető elemekre (állomások, depók, útipontok és felsővezeték)
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Átkapcsolni a hidakra
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Átkapcsolni egyéb épületekre, mint világítótorony és antennák (esetleg egyéb jövőbeni díszek)
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Átlátszó betöltésjelző kapcsolása (ki/be)
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :{COMMA} csoport
@@ -3401,4 +3454,11 @@
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Idei profit: {GREEN}{CURRENCY} {BLACK}(tavalyi: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Idei profit: {RED}{CURRENCY} {BLACK}(tavalyi: {RED}{CURRENCY}{BLACK})
 
+STR_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
 ########
--- a/src/lang/icelandic.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/icelandic.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -9,8 +9,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Brún kortsins
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Of nálægt brún kortsins
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Ekki nógu mikið reiðufé - þarf {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Sléttlendi nauðsynlegt
 STR_0008_WAITING                                                :{BLACK}Bíður: {WHITE}{STRING}
@@ -493,7 +493,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Bæjaryfirvöld: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Enginn
 STR_01AA_NAME                                                   :{BLACK}Nafn
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1.
@@ -1153,7 +1153,7 @@
 STR_CHEATS                                                      :{WHITE}Svindl
 STR_CHEATS_TIP                                                  :{BLACK}Valreitur segir til um ef þú hefur notað þetta svindl áður
 STR_CHEATS_WARNING                                              :{BLACK}Aðvörun! Þú ert í þann mund að svíkja keppinauta þína. Hafðu í huga að þess lags svívirðing mun ætíð höfð í minnum.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Auka pening um {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Auka pening um {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Spila sem leikmaður: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Töfrajarðýta (eyða iðnaði og óeyðanlegu): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Göng mega skerast: {ORANGE}{STRING}
@@ -1382,9 +1382,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Nafn fyrirtækis:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Upphaf:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Heildarverðmæti fyrirtækis:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Núverandi staða:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Innkoma síðasta árs:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Heildarverðmæti fyrirtækis:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Núverandi staða:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Innkoma síðasta árs:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Frammistaða:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Farartæki:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1593,7 +1593,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Verður að eyða byggingu fyrst
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Íbúafjöldi: {ORANGE}{COMMA}{BLACK}  Hús: {ORANGE}{COMMA}
@@ -1626,7 +1626,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Sýna upplýsingar um bæjaryfirvöld
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}Bæjaryfirvöld {TOWN}
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Einkunnir flutningsfyrirtækis:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Samstarfssamningar
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Samstarfssamningar í boði fyrir eftirfarandi þjónustur:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} frá {STRING} til {STRING}
@@ -1697,7 +1697,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...hér er nú þegar tré
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...óhentugur staður
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Ekki hægt að gróðursetja tré hér...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...of mörg skilti
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Ekki hægt að setja tré hér...
 STR_280A_SIGN                                                   :Skilti
@@ -1809,9 +1809,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabæti laus
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Get ekki lesið af drifi
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Vistun leiks mistókst
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Vistun leiks mistókst{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Get ekki eytt skrá
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Mistókst að opna leik
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Mistókst að opna leik{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Listi yfir drif, möppur og vistaða leiki
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nafn fyrir vistun leiks
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Eyða nafninu
@@ -2060,7 +2060,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Leikmaður {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Nýtt Andlit
 STR_7005_COLOR_SCHEME                                           :{BLACK}Litaskema
@@ -2072,7 +2072,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Nafn forstöðumanns
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Ekki hægt að breyta nafni fyrirtækis...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Ekki hægt að breyta nafni forstöðumanns...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Fjármál {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Fjármál {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Útgjöld/Tekjur
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Bygging
@@ -2088,20 +2088,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Tekjur vegna skipa
 STR_701C_LOAN_INTEREST                                          :{GOLD}Lánsvextir
 STR_701D_OTHER                                                  :{GOLD}Annað
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Summa:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Tekjulínurit
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Resktrartekju línurit
 STR_7026_BANK_BALANCE                                           :{WHITE}Bankainnistæða
 STR_7027_LOAN                                                   :{WHITE}Lán
-STR_MAX_LOAN                                                    :{WHITE}Hámarkslán:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Taka lán {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Borga lán {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Hámarkslán:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Taka lán {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Borga lán {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...hámarksleyfi á láni er {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Ekki hægt að fá meiri pening lánaðan...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...ekkert lán til að borga
@@ -2140,8 +2140,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Einkunn fyrirtækis (hámarkseinkunn=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Fyrirtækisvirði
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Fyrirtækjalisti
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Flutningsfyrirtæki í vandræðum!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} mun vera selt eða skráð gjaldþrota nema það fari að taka sig á sem fyrst!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Forstöðumaður)
@@ -2179,7 +2179,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Heimssamdráttur!{}{}Hagfræðingar hræddir um efnahagshrun!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Samdráttur!{}{}Uppslag í viðskiptum gefur bjartari von um betri efnahag!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Stækka/smækka gluggastærð
-STR_7076_COMPANY_VALUE                                          :{GOLD}Heildarverðmæti fyrirtækis: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Heildarverðmæti fyrirtækis: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Kaupa 25% hlut í fyrirtæki
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Selja 25% hlut í fyrirtæki
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Kaupa 25% hlut í þessu fyrirtæki
@@ -2489,7 +2489,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Lestar Bygging
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Bæjarbúar fagna . . .{}Fyrsta lest kemur við á {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Upplýsingar)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Upplýsingar)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Lest fyrir
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2556,8 +2556,8 @@
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Skoðun
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Get ekki byggt lest...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Framleitt: {LTBLUE}{NUM}{BLACK} Virði: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Virði: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Framleitt: {LTBLUE}{NUM}{BLACK} Virði: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Virði: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Fermandi / Affermandi
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Lest þarf að vera stöðvuð í skýli
@@ -2645,7 +2645,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Hámarkshraði: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Hagnaður á þessu ári: {LTBLUE}{CURRENCY}  (síðasta ár: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Áreiðanleiki: {LTBLUE}{COMMA}%  {BLACK}Bilanir frá síðustu viðgerð: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Byggður: {LTBLUE}{NUM}{BLACK} Virði: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Byggður: {LTBLUE}{NUM}{BLACK} Virði: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Burðargeta: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...verður að stöðvast í bifreiðaskýli
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Get ekki selt bifreið...
@@ -2717,7 +2717,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Hámarkshraði: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Tekjur þessa árs: {LTBLUE}{CURRENCY}  (síðasta ár: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Áreiðanleiki: {LTBLUE}{COMMA}%  {BLACK}Bilanir frá síðustu skoðun: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Smíðað: {LTBLUE}{NUM}{BLACK} Verðmæti: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Smíðað: {LTBLUE}{NUM}{BLACK} Verðmæti: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Burðargeta: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Get ekki stöðvað/ræst skip...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Get ekki sent skip í slipp...
@@ -2785,7 +2785,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Hámarkshraði: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Hagnaður í ár: {LTBLUE}{CURRENCY}  (í fyrra: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Áreiðanleiki: {LTBLUE}{COMMA}%  {BLACK}Bilanir frá síðustu skoðun: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Smíðuð: {LTBLUE}{NUM}{BLACK} Virði: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Smíðuð: {LTBLUE}{NUM}{BLACK} Virði: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Get ekki sent flugvél í flugskýli...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Stefnir á {STATION} flugskýli
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Stefnir á {STATION} flugskýli, {VELOCITY}
--- a/src/lang/italian.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/italian.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -12,8 +12,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Fuori dal bordo della mappa
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Troppo vicino al bordo della mappa
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Denaro insufficiente - servono {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Richiesto terreno pianeggiante
 STR_0008_WAITING                                                :{BLACK}In attesa: {WHITE}{STRING}
@@ -497,7 +497,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Autorità locale: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Nessuno
 STR_01AA_NAME                                                   :{BLACK}Nome
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1
@@ -780,6 +780,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Impostazioni difficoltà
 STR_02C7_CONFIG_PATCHES                                         :Configura patch
 STR_NEWGRF_SETTINGS                                             :Impostazioni NewGRF
+STR_TRANSPARENCY_OPTIONS                                        :Opzioni trasparenza
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Mostra nomi città
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Mostra nomi stazioni
@@ -807,7 +808,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Mappa del mondo
 STR_EXTRA_VIEW_PORT                                             :Mini visuale extra
 STR_SIGN_LIST                                                   :Elenco cartelli
-STR_TRANSPARENCY_OPTIONS                                        :Opzioni trasparenza
 STR_02DF_TOWN_DIRECTORY                                         :Elenco città
 STR_TOWN_POPULATION                                             :{BLACK}Popolazione mondiale: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Mini visuale {COMMA}
@@ -1105,6 +1105,17 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Velocità rotellina mappa: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Metti in pausa all'inizio di una nuova partita: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Utilizza la lista veicoli avanzata: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Utilizza gli indicatori di caricamento: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Abilita la definizione di tabelle orarie per i veicoli: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Mostra le tabelle orarie in tick piuttosto che in giorni: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE                            :{LTBLUE}Tipo predefinito rotaie (a inizio/ripresa partita): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Ferrovia normale
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Ferrovia elettrificata
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Monorotaia
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :Il primo disponibile
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :L'ultimo disponibile
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :Il più usato
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Max treni per giocatore: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Max automezzi per giocatore: {ORANGE}{STRING}
@@ -1188,7 +1199,7 @@
 STR_CHEATS                                                      :{WHITE}Trucchi
 STR_CHEATS_TIP                                                  :{BLACK}Le caselle indicano se un trucco è già stato usato una volta
 STR_CHEATS_WARNING                                              :{BLACK}Attenzione! Stai per tradire i tuoi avversari. Ricordati che un così grande disonore sarà ricordato per l'eternità.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Aumenta denaro di {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Aumenta denaro di {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Controlla il giocatore: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Bulldozer magico (rimuove industrie e oggetti inamovibili): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}I tunnel possono incrociarsi tra loro: {ORANGE}{STRING}
@@ -1443,9 +1454,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Nome compagnia:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Inaugurazione:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Valore compagnia:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Bilancio corrente:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Incassi anno scorso:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Valore compagnia:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Bilancio corrente:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Incassi anno scorso:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Prestazioni:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Veicoli:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1680,7 +1691,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}L'edificio deve essere demolito prima
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Popolazione: {ORANGE}{COMMA}{BLACK}  Case: {ORANGE}{COMMA}
@@ -1713,7 +1724,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Mostra informazioni sull'autorità locale
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}Autorità locale di {TOWN}
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Valutazione delle compagnie di trasporto:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Sussidi
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Sussidi offerti per la realizzazione di servizi:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} da {STRING} a {STRING}
@@ -1784,7 +1795,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...albero già qui
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...sito inadatto
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Impossibile piantare l'albero qui...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...troppi cartelli
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Impossibile piazzare il cartello qui...
 STR_280A_SIGN                                                   :Cartello
@@ -1893,6 +1904,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Costa
 STR_3806_SHIP_DEPOT                                             :Deposito navale
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...impossibile costruire sull'acqua
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Bisogna demolire il canale prima
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Salva partita
@@ -1902,9 +1914,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte liber{P o i}
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Impossibile leggere dall'unità
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Salvataggio fallito
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Salvataggio fallito{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Impossibile eliminare il file
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Caricamento fallito
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Caricamento fallito{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Errore interno: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Salvataggio danneggiato - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Salvataggio creato con una versione più recente
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :File non leggibile
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :File non scrivibile
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Elenco delle unità, delle cartelle e dei file delle partite salvate
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nome del salvataggio selezionato
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Elimina il salvataggio selezionato
@@ -2075,8 +2092,7 @@
 STR_SV_STNAME_LOWER                                             :Bassa {STRING}
 STR_SV_STNAME_HELIPORT                                          :Eliporto di {STRING}
 STR_SV_STNAME_FOREST                                            :{STRING} Foresta
-
-STR_SV_GROUP_NAME                                               :{GROUP}
+STR_SV_STNAME_FALLBACK                                          :{STRING} Stazione #{NUM}
 
 ############ end of savegame specific region!
 
@@ -2156,7 +2172,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 : (Giocatore {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Nuova faccia
 STR_7005_COLOR_SCHEME                                           :{BLACK}Colori compagnia
@@ -2168,7 +2184,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Nome del presidente
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Impossibile cambiare il nome della compagnia...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Impossibile cambiare il nome del presidente...
-STR_700E_FINANCES                                               :{WHITE}Finanze della {COMPANY} {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}Finanze della {COMPANY} {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Spese/ricavi
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Costruzioni
@@ -2184,20 +2200,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Ricavi navi
 STR_701C_LOAN_INTEREST                                          :{GOLD}Interessi sul prestito
 STR_701D_OTHER                                                  :{GOLD}Altro
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Totale:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Grafico incassi
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Grafico profitto operativo
 STR_7026_BANK_BALANCE                                           :{WHITE}Bilancio bancario
 STR_7027_LOAN                                                   :{WHITE}Prestito
-STR_MAX_LOAN                                                    :{WHITE}Prestito massimo:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Chiedi in prestito {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Ripaga {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Prestito massimo:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Chiedi in prestito {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Ripaga {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...il prestito massimo concesso è di {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Impossibile chiedere in prestito altro denaro...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...debito già estinto
@@ -2236,8 +2252,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Valutazione prestazioni compagnie (massima valutazione=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Valore delle compagnie
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Classifica compagnie
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Compagnia di trasporti in difficolta!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}La {COMPANY} verrà venduta o dichiarerà bancarotta a meno che le prestazioni non migliorino presto!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Presidente)
@@ -2275,7 +2291,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Recessione mondiale!{}{}Il crollo dell'economia porta gli analisti finanziari a temere il peggio!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Recessione finita!{}{}La ripresa del commercio da fiducia alle industrie e rafforza l'economia!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Seleziona dimensione grande/piccola della finestra
-STR_7076_COMPANY_VALUE                                          :{GOLD}Valore compagnia: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Valore compagnia: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Compra il 25% delle azioni
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Vendi il 25% delle azioni
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Compra il 25% delle azioni di questa compagnia
@@ -2587,7 +2603,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}Deposito ferroviario di {TOWN}
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}I cittadini festeggiano . . .{}Il primo treno arriva a {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Dettagli)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Dettagli)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Treno di mezzo
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2608,6 +2624,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Vai non-stop al Deposito ferroviario di {TOWN}
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Manutenzione non-stop al Deposito di {TOWN}
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Viaggia senza orario
+STR_TIMETABLE_TRAVEL_FOR                                        :Viaggia per {STRING}
+STR_TIMETABLE_STAY_FOR                                          :e sosta per {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} giorn{P o i}
+STR_TIMETABLE_TICKS                                             :{COMMA} tick
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Diretto al Deposito di {TOWN}
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Diretto al Deposito di {TOWN}, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Manutenzione al Deposito di {TOWN}
@@ -2649,13 +2672,15 @@
 STR_REFIT                                                       :{BLACK}Riadatta
 STR_REFIT_TIP                                                   :{BLACK}Selezionare il tipo di carico per il quale riadattare in questo ordine.  Premere CTRL+clic per rimuovere l'istruzione di riadattamento
 STR_REFIT_ORDER                                                 :(Riadatta per {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Orario
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Passa alla visualizzazione della tabella oraria
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Ordini)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Fine degli ordini - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Manutieni
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Impossibile costruire il veicolo ferroviario...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Costruito nel: {LTBLUE}{NUM}{BLACK} Valore: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Valore: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Costruito nel: {LTBLUE}{NUM}{BLACK} Valore: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Valore: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Caricamento / Scaricamento
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Il treno deve essere fermo in un deposito
@@ -2705,12 +2730,16 @@
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Inserisce un nuovo ordine prima di quello selezionato, o lo aggiunge alla fine della lista
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Fa in modo che l'ordine selezionato forzi il veicolo ad aspettare il carico completo
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Fa in modo che l'ordine selezionato forzi il veicolo a scaricare
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Tabella oraria - fare clic su un ordine per selezionarlo
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Cambia la quantità di tempo che dovrebbe essere impiegata per l'ordine selezionato
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Elimina l'impostazione della quantità di tempo per l'ordine selezionato
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Azzera il contatore del ritardo, in modo che il veicolo sia considerato in orario
 STR_SERVICE_HINT                                                :{BLACK}Ingnora quest'ordine a meno che non sia necessaria una manutenzione
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Costo: {CURRENCY} Peso: {WEIGHT_S}{}Velocità: {VELOCITY}  Potenza: {POWER}{}Costo d'esercizio: {CURRENCY}/anno{}Capacità: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Guasto
 STR_885D_AGE_RUNNING_COST_YR                                    :{BLACK}Età: {LTBLUE}{STRING}{BLACK}   Costo d'esercizio: {LTBLUE}{CURRENCY}/anno
 STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED                         :{BLACK}Peso: {LTBLUE}{WEIGHT_S}  {BLACK}Potenza: {LTBLUE}{POWER}{BLACK} Velocità max: {LTBLUE}{VELOCITY}
-STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE                  :{BLACK}Peso: {LTBLUE}{WEIGHT_S} {BLACK}Potenza: {LTBLUE}{POWER}{BLACK} Velocità max: {LTBLUE}{VELOCITY} {BLACK}Trazione max: {LTBLUE}{FORCE}
+STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE                  :{BLACK}Peso: {LTBLUE}{WEIGHT_S} {BLACK}Potenza: {LTBLUE}{POWER}{BLACK} Velocità max: {LTBLUE}{VELOCITY} {BLACK}S.T. max: {LTBLUE}{FORCE}
 STR_885F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profitto quest'anno: {LTBLUE}{CURRENCY}  (anno scorso: {CURRENCY})
 STR_8860_RELIABILITY_BREAKDOWNS                                 :{BLACK}Affidabilità: {LTBLUE}{COMMA}%  {BLACK}Guasti dall'ultima manutenzione: {LTBLUE}{COMMA}
 STR_8861_STOPPED                                                :{RED}Fermo
@@ -2726,6 +2755,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Impossibile rinominare il tipo di veicolo ferroviario...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Fa in modo che l'ordine selezionato forzi il veicolo a trasferire il carico
 STR_886F_TRANSFER                                               :{BLACK}Trasferisci
+STR_CLEAR_TIME                                                  :{BLACK}Elimina tempo
+STR_RESET_LATENESS                                              :{BLACK}Azzera ritardo
 
 STR_TRAIN_STOPPING                                              :{RED}In frenata
 STR_TRAIN_STOPPING_VEL                                          :{RED}In frenata, {VELOCITY}
@@ -2734,8 +2765,20 @@
 STR_TRAIN_START_NO_CATENARY                                     :In questo binario manca la catenaria, quindi il treno non può essere avviato
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Nuov{G o a} {STRING} disponibile!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Nuov{G o a} {STRING} disponibile! -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Nuov{G o a} {STRING} disponibile! -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Impossibile dare un orario al veicolo...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}I veicoli possono attendere solo alle stazioni.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Il veicolo non ferma a questa stazione.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Cambia tempo
+STR_TIMETABLE_STATUS_ON_TIME                                    :Il veicolo viaggia in orario
+STR_TIMETABLE_STATUS_LATE                                       :Il veicolo viaggia con un ritardo di {STRING}
+STR_TIMETABLE_STATUS_EARLY                                      :Il veicolo viaggia con un anticipo di {STRING}
+STR_TIMETABLE_TOTAL_TIME                                        :Questo orario richiede {STRING}
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :Questo orario richiede almeno {STRING} (non completamente impostato)
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Auto-imposta
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Riempie automaticamente la tabella oraria con i tempi del primo viaggio
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Automezzo di mezzo
@@ -2751,7 +2794,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Velocità max: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profitto quest'anno: {LTBLUE}{CURRENCY}  (anno scorso: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Affidabilità: {LTBLUE}{COMMA}%  {BLACK}Guasti dall'ultima manutenzione: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Costruito nel: {LTBLUE}{NUM}{BLACK} Valore: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Costruito nel: {LTBLUE}{NUM}{BLACK} Valore: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Capacità: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...deve essere fermo nel deposito automezzi
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Impossibile vendere l'automezzo...
@@ -2827,7 +2870,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Velocità max: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profitto quest'anno: {LTBLUE}{CURRENCY}  (anno scorso: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Affidabilità: {LTBLUE}{COMMA}%  {BLACK}Guasti dall'ultima manutenzione: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Costruito nel: {LTBLUE}{NUM}{BLACK} Valore: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Costruito nel: {LTBLUE}{NUM}{BLACK} Valore: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Capacità: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Impossibile fermare/avviare la nave...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Impossibile mandare la nave al deposito...
@@ -2895,7 +2938,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Velocità max: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profitto quest'anno: {LTBLUE}{CURRENCY}  (anno scorso: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Affidabilità: {LTBLUE}{COMMA}%  {BLACK}Guasti dall'ultima manutenzione: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Costruito nel: {LTBLUE}{NUM}{BLACK} Valore: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Costruito nel: {LTBLUE}{NUM}{BLACK} Valore: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Impossibile mandare l'aeromobile all'hangar...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Diretto all'Hangar di {STATION}
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Diretto all'Hangar di {STATION}, {VELOCITY}
@@ -2948,6 +2991,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Vai all'Hangar di {STATION}
 SERVICE_AT_AIRPORT_HANGAR                                       :Manutenzione all'Hangar di {STATION}
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Tabella oraria)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Disastro Zeppelin a {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Automezzo distrutto in una collisione con un 'UFO'!
@@ -3162,7 +3207,7 @@
 STR_PURCHASE_INFO_REFITTABLE_TO                                 :{BLACK}Riadattabile per: {GOLD}
 STR_PURCHASE_INFO_ALL_TYPES                                     :Tutti i tipi di carico
 STR_PURCHASE_INFO_ALL_BUT                                       :Tutto tranne {GOLD}
-STR_PURCHASE_INFO_MAX_TE                                        :{BLACK}Trazione massima: {GOLD}{FORCE}
+STR_PURCHASE_INFO_MAX_TE                                        :{BLACK}Sforzo di trazione massimo: {GOLD}{FORCE}
 
 ########### String for New Landscape Generator
 
@@ -3263,6 +3308,14 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Attiva/disattiva la trasparenza delle strutture edificabili come stazioni, depositi, waypoint e catenarie
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Attiva/disattiva la trasparenza dei ponti
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Attiva/disattiva la trasparenza di strutture come fari, antenne e altri futuri oggetti decorativi
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Attiva/disattiva la trasparenza degli indicatori di caricamento
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Gruppo {COMMA}
@@ -3289,7 +3342,7 @@
 STR_GROUP_CAN_T_ADD_VEHICLE                                     :{WHITE}Impossibile aggiungere il veicolo al gruppo...
 STR_GROUP_CAN_T_ADD_SHARED_VEHICLE                              :{WHITE}Impossibile aggiungere veicoli condivisi al gruppo...
 
-STR_GROUPS_CLICK_ON_GROUP_FOR_TIP                               :{BLACK}Gruppi - Fare clic su un gruppo per elencare tutti i suoi veicoli
+STR_GROUPS_CLICK_ON_GROUP_FOR_TIP                               :{BLACK}Gruppi - fare clic su un gruppo per elencare tutti i suoi veicoli
 STR_GROUP_CREATE_TIP                                            :{BLACK}Fare clic per creare un gruppo
 STR_GROUP_DELETE_TIP                                            :{BLACK}Elimina il gruppo selezionato
 STR_GROUP_RENAME_TIP                                            :{BLACK}Rinomina il gruppo selezionato
@@ -3300,4 +3353,11 @@
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Profitto quest'anno: {GREEN}{CURRENCY} {BLACK}(anno scorso: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Profitto quest'anno: {RED}{CURRENCY} {BLACK}(anno scorso: {RED}{CURRENCY}{BLACK})
 
+STR_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
 ########
--- a/src/lang/japanese.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/japanese.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}地図の端を越えています
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}地図の端に近すぎます
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}資金が足りません。{CURRENCY}がかかります
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}平地が必要です
 STR_0008_WAITING                                                :{BLACK}到着待ち:{WHITE}{STRING}
@@ -495,7 +495,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}町議会:{LTBLUE}{STRING}
 STR_01A9_NONE                                                   :なし
 STR_01AA_NAME                                                   :{BLACK}名称
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1日
@@ -778,6 +778,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :難易度の設定
 STR_02C7_CONFIG_PATCHES                                         :パッチの設定
 STR_NEWGRF_SETTINGS                                             :NewGRFの設定
+STR_TRANSPARENCY_OPTIONS                                        :半透明設定
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}市町村名を表示
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}駅名を表示
@@ -805,7 +806,6 @@
 STR_02DE_MAP_OF_WORLD                                           :世界の地図
 STR_EXTRA_VIEW_PORT                                             :特別ビューア
 STR_SIGN_LIST                                                   :標示のリスト
-STR_TRANSPARENCY_OPTIONS                                        :半透明設定
 STR_02DF_TOWN_DIRECTORY                                         :市町村のリスト
 STR_TOWN_POPULATION                                             :{BLACK}世界人口:{COMMA}人
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}ビューア {COMMA}
@@ -1103,6 +1103,17 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}地図のスクロール速度:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}新規ゲームを開始したときに自動的にポーズ:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}詳細の車両リストを使用:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}積み降ろしを表示:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}車両の時刻表を使用:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}日の代わりに時刻表をティックで表示:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE                            :{LTBLUE}デフォルトの鉄道の種類(新規ゲーム後/ゲームの読み込み後):{ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :通常の鉄道
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :電鉄
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :モノレール
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :磁気浮上式鉄道
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :最初の鉄道種類
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :最新の鉄道種類
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :最も使われている鉄道種類
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}一人のプレヤーの列車数上限:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}一人のプレヤーの道路車両数上限:{ORANGE}{STRING}
@@ -1186,7 +1197,7 @@
 STR_CHEATS                                                      :{WHITE}チート
 STR_CHEATS_TIP                                                  :{BLACK}以前にこのチートを使用したことがあることを示します
 STR_CHEATS_WARNING                                              :{BLACK}中位!チートすると、競争者の裏切りとして見られていて、永遠にのろわれる可能性があります!
-STR_CHEAT_MONEY                                                 :{LTBLUE}残額に{CURRENCY64}を追加
+STR_CHEAT_MONEY                                                 :{LTBLUE}残額に{CURRENCY}を追加
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}プレヤーの変更:{ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}ゴジラブルドーザー(産業など何でも破壊できる):{ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}トンネルが交差可能ようにする:{ORANGE}{STRING}
@@ -1441,9 +1452,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}会社名:{WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}開業日付:{WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}企業価値:{WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}残額:{WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}昨年の損益:{WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}企業価値:{WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}残額:{WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}昨年の損益:{WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}パフォーマンス:{WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}車両:{WHITE}{NUM} {TRAIN}、{NUM} {LORRY}、{NUM} {BUS}、{NUM} {PLANE}、{NUM} {SHIP}
@@ -1678,7 +1689,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}まずは建物を破壊しなければなりません
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}人口:{ORANGE}{COMMA}人{BLACK} 建物:{ORANGE}{COMMA}戸
@@ -1711,7 +1722,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}町議会の情報を表示します
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN}の町議会
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}会社の町内の世評:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}:{ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}:{ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}助成金
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}次の運送経路に助成金を提案:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING}を{STRING}から{STRING}へ
@@ -1782,7 +1793,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...木はsすでにあります
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...不適当な位置です
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}ここに木が植林できません...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...標示が多すぎます
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}ここに標示が設置できません...
 STR_280A_SIGN                                                   :標示
@@ -1891,6 +1902,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :海岸または川岸
 STR_3806_SHIP_DEPOT                                             :造船所
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...水上に建設できません
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}先に運河を破壊しなければなりません
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}ゲームを保存
@@ -1900,9 +1912,14 @@
 STR_4004                                                        :{COMPANY}、{DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} MB 使用可能
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}ドライブが読み込めません
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}ゲームの保存が失敗しました
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}ゲームの保存が失敗しました{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}ファイルを削除できません
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}ゲームの読み込むが失敗しました
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}ゲームの読み込むが失敗しました{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :内部エラー:{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :壊れているセーブゲーム:{STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :セーブゲームはより新しいバージョンによって保存されました
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :ファイルを読み込むことができません
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :ファイルを書き込むことができません
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}ドライブ、フォルダ、ゲームファイルのリスト
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}ゲームのファイル名
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}選択したゲームを削除します
@@ -2073,8 +2090,7 @@
 STR_SV_STNAME_LOWER                                             :下{STRING}
 STR_SV_STNAME_HELIPORT                                          :{STRING}ヘリポート
 STR_SV_STNAME_FOREST                                            :{STRING}森林
-
-STR_SV_GROUP_NAME                                               :{GROUP}
+STR_SV_STNAME_FALLBACK                                          :{STRING} 駅 {NUM}号
 
 ############ end of savegame specific region!
 
@@ -2154,7 +2170,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(プレヤー {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}新規顔
 STR_7005_COLOR_SCHEME                                           :{BLACK}カラースキーム
@@ -2166,7 +2182,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :社長の名前
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}会社名が変更できません...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}社長の名前が変更できません...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY}の経営状況 {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY}の経営状況 {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}支払い/収益
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}建設
@@ -2182,20 +2198,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}船舶の損益
 STR_701C_LOAN_INTEREST                                          :{GOLD}借入金の金利
 STR_701D_OTHER                                                  :{GOLD}その他
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}合計:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}損益グラフ
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}営業利益グラフ
 STR_7026_BANK_BALANCE                                           :{WHITE}残額
 STR_7027_LOAN                                                   :{WHITE}借入金
-STR_MAX_LOAN                                                    :{WHITE}最高借入金:{BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}を借りる
-STR_702A_REPAY                                                  :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}を返済
+STR_MAX_LOAN                                                    :{WHITE}最高借入金:{BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}{SKIP}{SKIP}{CURRENCY}を借りる
+STR_702A_REPAY                                                  :{BLACK}{SKIP}{SKIP}{CURRENCY}を返済
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...最高借入金が{CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}より借入できません...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...残額がありません
@@ -2234,8 +2250,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}会社のパフォーマンス率(最大=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}会社の価値
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}交通会社成績表
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}交通会社が経営困難!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}もうすぐ{COMPANY}のパフォーマンスが改良なしで売却および破産のリスク!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(社長)
@@ -2273,7 +2289,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}世界中不景気!{}{}経済がスランプに陥る、アナリストの不安説!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}スランプの終わり!{}{}経済が上昇気流、産業が好転!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}大きい/小さいウィンドウサイズを切り替えます
-STR_7076_COMPANY_VALUE                                          :{GOLD}会社の価値:{WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}会社の価値:{WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}会社の25%の株を買収
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}会社の25%の株を販売
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}この会社の25%の株を購入
@@ -2585,7 +2601,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN}電車庫
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}町民の祝賀{}初列車が{STATION}駅に到着!
-STR_8802_DETAILS                                                :{WHITE}{STRING}(詳細)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE}(詳細)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}列車があります
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2606,6 +2622,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :{TOWN}電車庫へ直行で回送
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :{TOWN}電車庫へ直行で回送して修理
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :運行(未計画)
+STR_TIMETABLE_TRAVEL_FOR                                        :{STRING}運行
+STR_TIMETABLE_STAY_FOR                                          :{STRING}停車
+STR_TIMETABLE_DAYS                                              :{COMMA}日間
+STR_TIMETABLE_TICKS                                             :{COMMA}ティック
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}{TOWN}電車庫へ行く
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}{TOWN}電車庫へ行く、{VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}{TOWN}電車庫で修理
@@ -2647,13 +2670,15 @@
 STR_REFIT                                                       :{BLACK}再装備
 STR_REFIT_TIP                                                   :{BLACK}貨物の種類を選択してください。Control+クリックすると、再装備をキャンセルします。
 STR_REFIT_ORDER                                                 :({STRING}に再装備)
+STR_TIMETABLE_VIEW                                              :{BLACK}時刻表
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}時刻表を表示します
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE}(指令)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - 指令終了 - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}修理
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}鉄道車両が購入できません...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK} 購入日付:{LTBLUE}{NUM}{BLACK} 価値:{LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK} 価値:{LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK} 購入日付:{LTBLUE}{NUM}{BLACK} 価値:{LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK} 価値:{LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}積み降ろし中
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}列車は車庫に止めなければ成らないんです
@@ -2703,6 +2728,10 @@
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}選択した指令の前/リストの終わりに新規指令を挿入します
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}選択した指令に全負荷まで待つことを強制します
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}選択した指令に降ろすことを強制します
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}時刻表 - 指令を選択するにはクリックします。
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}選択した指令の実行時間を変更します
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}選択した指令の実行時間を消去します
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}遅刻回数をリセットして、車両が定刻になります
 STR_SERVICE_HINT                                                :{BLACK}修理が必要でないとこの指令をスキップ
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}価格:{CURRENCY} 重量:{WEIGHT_S}{}最大速度:{VELOCITY} 出力:{POWER}{}運転費:一年間{CURRENCY}{}容量:{CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}故障
@@ -2724,6 +2753,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}鉄道車両の名称が変更できません...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}選択した指令に貨物の降ろすことを含みます
 STR_886F_TRANSFER                                               :{BLACK}運搬
+STR_CLEAR_TIME                                                  :{BLACK}時間を消去
+STR_RESET_LATENESS                                              :{BLACK}遅刻回数をリセット
 
 STR_TRAIN_STOPPING                                              :{RED}停車中
 STR_TRAIN_STOPPING_VEL                                          :{RED}停車中、{VELOCITY}
@@ -2732,8 +2763,20 @@
 STR_TRAIN_START_NO_CATENARY                                     :線路は懸垂線がないため、この列車が動けません
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}{STRING}が新登場!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}{STRING}が新登場!ー{STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}{STRING}が新登場!ー{ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}この車両に時刻表が設定できません...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}車両が駅/バス停のみで停車できます。
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}この車両はこの駅/バス停で停車しません。
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}時間を変更
+STR_TIMETABLE_STATUS_ON_TIME                                    :この車両は現在定刻しています
+STR_TIMETABLE_STATUS_LATE                                       :この車両は現在{STRING}遅刻しています
+STR_TIMETABLE_STATUS_EARLY                                      :この車両は現在{STRING}早刻しています
+STR_TIMETABLE_TOTAL_TIME                                        :この時刻を実行するには{STRING}がかかります
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :この時刻を実行するには少なくとも{STRING}がかかります(時刻されていない部分があります)
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}自動時刻
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}最初の旅行の時間を用いて時刻表を作成します
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}道路車両があります
@@ -2749,7 +2792,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}最大速度:{LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}今年の損益:{LTBLUE}{CURRENCY}(昨年:{CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}信頼度:{LTBLUE}{COMMA}% {BLACK}最終修理後の故障回数:{LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK} 購入年:{LTBLUE}{NUM}{BLACK} 価値:{LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK} 購入年:{LTBLUE}{NUM}{BLACK} 価値:{LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}容量:{LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...車庫内に停止しなければなりません
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}道路車両が販売できません...
@@ -2776,6 +2819,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}道路車両のリスト - 情報を見るには車両をクリックします
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}選択した道路車両を購入します
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}価格:{CURRENCY}{}最大速度:{VELOCITY}{}運転費:一年間{CURRENCY}{}容量:{CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}容量:{LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}道路車両を名付ける
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}道路車両が名付けません...
@@ -2823,7 +2868,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}最大速度:{LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}今年の損益:{LTBLUE}{CURRENCY}(昨年:{CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}信頼度:{LTBLUE}{COMMA}% {BLACK}最終修理後の故障回数:{LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK} 購入年:{LTBLUE}{NUM}{BLACK} 価値:{LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK} 購入年:{LTBLUE}{NUM}{BLACK} 価値:{LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}容量:{LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}船舶が開始/停止できません...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}船舶が造船所へ回送できません...
@@ -2891,7 +2936,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}最大速度:{LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}今年の損益:{LTBLUE}{CURRENCY}(昨年:{CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}信頼度:{LTBLUE}{COMMA}% {BLACK}最終修理後の故障回数:{LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK} 購入年:{LTBLUE}{NUM}{BLACK} 価値:{LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK} 購入年:{LTBLUE}{NUM}{BLACK} 価値:{LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}飛行機が格納庫へ回送できません...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}{STATION}格納庫へ行く
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}{STATION}格納庫へ行く、{VELOCITY}
@@ -2944,6 +2989,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :{STATION}格納庫へ行く
 SERVICE_AT_AIRPORT_HANGAR                                       : {STATION}のハンガーでサービスします
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE}(時刻表)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}{STATION}で飛行船墜落!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}交通事故!UFO と衝突、車両が壊れた!
@@ -3259,6 +3306,14 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}交通社所有の建物などの透明性を入/切
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}橋の透明性を入/切
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}灯台、送信機などの透明性を入/切
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}積み降ろしの表示の透明性を切り替え
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :グループ {COMMA}
@@ -3296,4 +3351,11 @@
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}今年の収益:{GREEN}{CURRENCY} {BLACK}(昨年:{RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}今年の収益:{RED}{CURRENCY} {BLACK}(昨年:{RED}{CURRENCY}{BLACK})
 
+STR_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
 ########
--- a/src/lang/korean.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/korean.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -11,8 +11,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}맵 가장자리에서 너무 멉니다!
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}맵 가장자리와 너무 가깝습니다!
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}재정이 부족합니다 - {CURRENCY} 이(가) 필요합니다
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}평지가 필요합니다!
 STR_0008_WAITING                                                :{BLACK}대기: {WHITE}{STRING}
@@ -496,7 +496,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}지역 당국: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :없음
 STR_01AA_NAME                                                   :{BLACK}이름
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1
@@ -779,6 +779,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :난이도 설정
 STR_02C7_CONFIG_PATCHES                                         :패치 구성
 STR_NEWGRF_SETTINGS                                             :NewGRF 설정
+STR_TRANSPARENCY_OPTIONS                                        :투명 옵션
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}도시 이름 표시됨
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}역 이름 표시됨
@@ -806,7 +807,6 @@
 STR_02DE_MAP_OF_WORLD                                           :전체 지도 보기
 STR_EXTRA_VIEW_PORT                                             :추가 뷰포인트
 STR_SIGN_LIST                                                   :팻말 목록
-STR_TRANSPARENCY_OPTIONS                                        :투명 옵션
 STR_02DF_TOWN_DIRECTORY                                         :도시 목록
 STR_TOWN_POPULATION                                             :{BLACK}세계 인구: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}뷰포인트 {COMMA}
@@ -1104,6 +1104,17 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}맵 스크롤 속도: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}새로운 게임 시작할 때 자동으로 일시정지: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}진보된 차량 목록 사용: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}적재 정도 표시: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}차량에 시간표 사용: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}시간표를 날보다 초로 표시: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE                            :{LTBLUE}기본 철도 종류 (새 게임/불러오기 후): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :보통 철도
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :전개 철도
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :모노레일
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :자기부상
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :처음 사용 가능한 것
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :마지막으로 사용 가능한 것
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :가장 많이 사용한 것
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}최대 열차 수: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}최대 자동차 수: {ORANGE}{STRING}
@@ -1187,7 +1198,7 @@
 STR_CHEATS                                                      :{WHITE}치트
 STR_CHEATS_TIP                                                  :{BLACK}체크박스는 이전에 사용한 치트를 나타냅니다.
 STR_CHEATS_WARNING                                              :{BLACK}경고! 당신은 경쟁자를 속이고 있습니다. 그러한 창피는 영원히 지워지지 않으리란 것을 명심하십시오.
-STR_CHEAT_MONEY                                                 :{LTBLUE}재정을 {CURRENCY64} 만큼 증가
+STR_CHEAT_MONEY                                                 :{LTBLUE}재정을 {CURRENCY} 만큼 증가
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}플레이어 {ORANGE}{COMMA} (으)로 플레이
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}마법 불도저 (산업시설, 움직이지 못하는 것들 제거) : {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}터널 교차를 허용 : {ORANGE}{STRING}
@@ -1442,9 +1453,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}회사 이름:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}설립:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}회사가치:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}재정 수익:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}작년 수익:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}회사가치:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}재정 수익:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}작년 수익:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}퍼포먼스:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}차량:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1679,7 +1690,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}건물을 먼저 제거하십시오!
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}인구: {ORANGE}{COMMA}{BLACK}  가구수: {ORANGE}{COMMA}
@@ -1712,7 +1723,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}지역당국 정보 보기
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} 지역당국
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}회사 운송 성취도:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}보조금
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}제공되는 보조금:
 STR_2027_FROM_TO                                                :{ORANGE}{1:STRING}에서 {2:STRING}까지 {0:STRING} 수송
@@ -1783,7 +1794,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...이미 나무가 심어져 있습니다.
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...알맞지 않은 장소
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}여기에 나무를 심을 수 없습니다...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...팻말 수가 너무 많습니다
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}여기에 팻말을 달 수 없습니다...
 STR_280A_SIGN                                                   :팻말
@@ -1892,6 +1903,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :해안 또는 강기슭
 STR_3806_SHIP_DEPOT                                             :정박소
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...물 위에 지을 수 없습니다
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}운하를 먼저 제거하십시오
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}게임 저장
@@ -1901,9 +1913,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} Mb 남음
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}드라이브를 읽을 수 없음
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}게임 저장 실패
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}게임 저장 실패{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}파일을 삭제할 수 없음
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}게임 불러오기 실패
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}게임 불러오기 실패{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :내부 오류: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :손상된 세이브 게임 - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :상위 버젼의 세이브 게임입니다
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :파일을 읽을 수 없습니다
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :파일을 쓸 수 없습니다
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}드라이프, 폴더, 저장된 게임 파일의 목록입니다
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}저장될 세이브 파일의 이름입니다.
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}선택된 세이브 파일을 삭제합니다.
@@ -2074,8 +2091,7 @@
 STR_SV_STNAME_LOWER                                             :하부 {STRING}
 STR_SV_STNAME_HELIPORT                                          :{STRING} 헬리포트
 STR_SV_STNAME_FOREST                                            :{STRING} 삼림
-
-STR_SV_GROUP_NAME                                               :{GROUP}
+STR_SV_STNAME_FALLBACK                                          :{STRING} 정거장 #{NUM}
 
 ############ end of savegame specific region!
 
@@ -2155,7 +2171,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(플레이어 {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}새 얼굴
 STR_7005_COLOR_SCHEME                                           :{BLACK}색상
@@ -2167,7 +2183,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :매니저 이름
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}회사 이름을 바꿀 수 없습니다...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}매니저 이름을 바꿀 수 없습니다...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY}의 재정 {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY}의 재정 {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}지출/수입
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}건설
@@ -2183,20 +2199,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}선박 수익
 STR_701C_LOAN_INTEREST                                          :{GOLD}이자
 STR_701D_OTHER                                                  :{GOLD}기타
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}총계:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}수익 그래프
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}수행 이익 그래프
 STR_7026_BANK_BALANCE                                           :{WHITE}소유금
 STR_7027_LOAN                                                   :{WHITE}대출
-STR_MAX_LOAN                                                    :{WHITE}최대 대출:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY} 빌리기
-STR_702A_REPAY                                                  :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY} 갚기
+STR_MAX_LOAN                                                    :{WHITE}최대 대출:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}{SKIP}{SKIP}{CURRENCY} 빌리기
+STR_702A_REPAY                                                  :{BLACK}{SKIP}{SKIP}{CURRENCY} 갚기
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...허용된 최대 대출금은 {CURRENCY} 입니다.
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}더이상 돈을 빌릴 수 없습니다...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...값아야할 대출금이 없습니다.
@@ -2235,8 +2251,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}회사 성취도 (최고 1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}회사 가치
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}회사 성취도 순위
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}운송회사에 문제가 생김!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY}이/가 퍼포먼스가 오르지 않아 곧 팔리거나 파산될 위기에 처했습니다!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(매니저)
@@ -2274,7 +2290,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}세계 공황!{}{}경제 전문가들이 경제 슬럼프에 대해 우려를 표망하고 있습니다!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}공황 종료!{}{}무역량의 증대로 경제를 살려낸 결과 산업시설에 대한 신뢰를 가져왔습니다!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}대형/소형 창 크기 토글
-STR_7076_COMPANY_VALUE                                          :{GOLD}회사가치: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}회사가치: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}회사 주식의 25%를 매입
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}회사 주식의 25%를 매도
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}이 회사 주식의 25%를 매입합니다.
@@ -2586,7 +2602,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} 차량기지
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}{STATION}에 처음으로 기차가 도착했습니다!{}사람들이 환호성을 지릅니다!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (상세정보)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (상세정보)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}중간에 기차가 있습니다
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2607,6 +2623,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :{TOWN} 차량기지 급행
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :{TOWN} 차량기지 급행 (점검)
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :여행 (시간표 없음)
+STR_TIMETABLE_TRAVEL_FOR                                        :{STRING}로 여행
+STR_TIMETABLE_STAY_FOR                                          :그리고 {STRING}에 머무름
+STR_TIMETABLE_DAYS                                              :{COMMA} 일
+STR_TIMETABLE_TICKS                                             :{COMMA} 초
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}{TOWN} 차량기지로 가는 중
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}{TOWN} 차량기지로 가는 중 ({VELOCITY})
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}{TOWN} 차량기지로 점검하러 가는중
@@ -2648,13 +2671,15 @@
 STR_REFIT                                                       :{BLACK}개조
 STR_REFIT_TIP                                                   :{BLACK}이 경로에서 어떤 화물을 받을 것인지 선택하십시오. CTRL+클릭은 제거입니다.
 STR_REFIT_ORDER                                                 :({STRING}(으)로 개조)
+STR_TIMETABLE_VIEW                                              :{BLACK}시간표
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}시간표 보기 전환
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (경로)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - 경로의 끝 - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}점검
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}기차를 생성할 수 없습니다...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   생산: {LTBLUE}{NUM}{BLACK} 가격: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   가격: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   생산: {LTBLUE}{NUM}{BLACK} 가격: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   가격: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}싣는중 / 내리는중
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}차량기지 안에서 정지해있어야 합니다!
@@ -2704,6 +2729,10 @@
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}선택된 경로 바로 전이나 목록 맨 끝에 새로운 경로를 삽입합니다.
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}선택된 경로에서 모든 화물을 가득 싣도록 변경합니다.
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}선택된 경로에서 모든 화물을 전부 내리도록 변경합니다.
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}시간표 - 경로를 클릭하면 선택합니다.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}선택한 경로가 대기하고 있을 시간 변경
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}선택한 경로의 시간 초기화
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}지각 카운터 초기화, 차량은 제시간으로 운행합니다.
 STR_SERVICE_HINT                                                :{BLACK}점검이 필요하면 이 경로를 건너뜁니다.
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}가격: {CURRENCY} 무게: {WEIGHT_S}{}속도: {VELOCITY}  힘: {POWER}{}운행비용: {CURRENCY}/년{}수송량: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}고장
@@ -2725,6 +2754,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}차량 타입의 이름을 다시 지정할 수 없습니다...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}선택된 경로에서 모든 화물을 내려서 쌓아놓도록 변경합니다.
 STR_886F_TRANSFER                                               :{BLACK}환승
+STR_CLEAR_TIME                                                  :{BLACK}시간 초기화
+STR_RESET_LATENESS                                              :{BLACK}지각 카운터 초기화
 
 STR_TRAIN_STOPPING                                              :{RED}정지중
 STR_TRAIN_STOPPING_VEL                                          :{RED}{VELOCITY}의 속도로 정지중
@@ -2733,8 +2764,20 @@
 STR_TRAIN_START_NO_CATENARY                                     :연결고리가 모자라 운행을 시작할 수 없습니다.
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}신형 {STRING} 자동차가 출시되었습니다!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}신형 {STRING} 자동차가 출시되었습니다!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}신형 {STRING} 자동차가 출시되었습니다!  -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}차량의 시간표를 정할 수 없습니다...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}정거장에서만 기다릴 수 있습니다.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}이 차량은 이 정거장에 서지 않습니다.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}시간 변경
+STR_TIMETABLE_STATUS_ON_TIME                                    :이 차량은 현재 제시간에 운행하고 있습니다
+STR_TIMETABLE_STATUS_LATE                                       :이 차량은 현재 {STRING} 늦게 운행하고 있습니다
+STR_TIMETABLE_STATUS_EARLY                                      :이 차량은 현재 {STRING} 빨리 운행하고 있습니다
+STR_TIMETABLE_TOTAL_TIME                                        :이 시간표는 완주하는데 {STRING}이(가) 걸릴 것입니다
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :이 시간표는 완주하는데 최소 {STRING}이(가) 필요합니다 (일부만 시간지정됨)
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}자동채움
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}첫 여행으로부터의 값으로 시간표 자동 작성
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}중간에 자동차가 있습니다.
@@ -2750,7 +2793,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}최고속력: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}올해 수익: {LTBLUE}{CURRENCY}  (작년: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}신뢰도: {LTBLUE}{COMMA}%  {BLACK}최근 점검 이후의 고장: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   생산: {LTBLUE}{NUM}{BLACK} 가격: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   생산: {LTBLUE}{NUM}{BLACK} 가격: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}수송량: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...차고 안에서 정지해있어야 합니다!
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}자동차를 팔 수 없습니다...
@@ -2826,7 +2869,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}최고속력: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}올해 수익: {LTBLUE}{CURRENCY}  (작년: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}신뢰도: {LTBLUE}{COMMA}%  {BLACK}최근 점검 이후의 고장: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   생산: {LTBLUE}{NUM}{BLACK} 가격: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   생산: {LTBLUE}{NUM}{BLACK} 가격: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}수송량: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}선박을 운행/중지시킬 수 없습니다...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}선박을 정박소로 보낼 수 없습니다...
@@ -2894,7 +2937,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}최고속력: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}올해 수익: {LTBLUE}{CURRENCY}  (작년: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}신뢰도: {LTBLUE}{COMMA}%  {BLACK}최근 점검 이후의 고장: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   생산: {LTBLUE}{NUM}{BLACK} 가격: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   생산: {LTBLUE}{NUM}{BLACK} 가격: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}항공기를 격납고로 보낼 수 없습니다...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}{STATION}공항 격납고로 가는 중
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}{STATION}공항 격납고로 가는 중 ({VELOCITY})
@@ -2947,6 +2990,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :{STATION}공항 격납고로 가는 중
 SERVICE_AT_AIRPORT_HANGAR                                       :{STATION}공항 격납고로 점검하러 가는 중
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (시간표)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}{STATION}에서 체펠린 재앙이 발생했습니다!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}UFO의 폭격으로 자동차가 파괴되었습니다!
@@ -3262,6 +3307,14 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}정거장, 차량기지, 웨이포인트, 연결고리와 같은 건설 가능한 것들에 대한 투명 전환
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}다리 투명 전환
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}등대와 안테나와 같은 구조물 투명 전환
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}적재 정도 투명 전환
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :그룹 {COMMA}
@@ -3299,4 +3352,11 @@
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}올해 수입: {GREEN}{CURRENCY} {BLACK}(작년: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}올해 수입: {RED}{CURRENCY} {BLACK}(작년: {RED}{CURRENCY}{BLACK})
 
+STR_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
 ########
--- a/src/lang/lithuanian.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/lithuanian.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Už žemelapio kraštų
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Per arti žemėlapio krašto
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Neužtenka lėšų: reikia {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Paviršius turi būti lygus
 STR_0008_WAITING                                                :{BLACK}Laukia: {WHITE}{STRING}
@@ -526,7 +526,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Vietos valdžia: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Nėra
 STR_01AA_NAME                                                   :{BLACK}Vardas
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1
@@ -1185,7 +1185,7 @@
 STR_CHEATS                                                      :{WHITE}Sukciavimai
 STR_CHEATS_TIP                                                  :{BLACK}Laukeliai rodo ar jus naudojote si triuka pries tai
 STR_CHEATS_WARNING                                              :{BLACK}Demesio! Tu bandai isduoti vargsus savo varzovus. Tai bus tavo geda visiems laikams ir niekada neuzmirsta.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Padauginti pinigu {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Padauginti pinigu {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Zaisti uz zaideja: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Magiskas buldozeris (pasalina gamyklas ir kt.): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tuneliai gali susikirsti: {ORANGE}{STRING}
@@ -1414,9 +1414,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Kompanijos pavadinimas:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Pradejo zaisti:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Kompanijos verte:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Dabartinis balansas:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Praeitu metu pajamos:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Kompanijos verte:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Dabartinis balansas:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Praeitu metu pajamos:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Sparta:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Transporto priemones:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1623,7 +1623,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Pirmiau reikia nugriauti pastatą
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Populiacija: {ORANGE}{COMMA}{BLACK}  Namų skaičius: {ORANGE}{COMMA}
@@ -1656,7 +1656,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Rodyti informaciją apie valdzią
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} vietinė valdžia
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Transporto kompanijų reitingai:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subsidijos
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Dar nepanaudotos subsidijos:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} iš {STRING} į {STRING}
@@ -1727,7 +1727,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...medis jau yra
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...netinkama vieta
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Neįmanoma pasodinti medžio...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...per daug ženklų
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Čia ženklo statyti negalima...
 STR_280A_SIGN                                                   :Ženklas
@@ -1839,9 +1839,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} Mb laisva
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Negali pasiekti disko
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Zaidimo issaugoti nepavyko
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Zaidimo issaugoti nepavyko{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Failo istrinti nepavyko
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Zaidimo atverti nepavyko
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Zaidimo atverti nepavyko{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Disku, katalogu ir issaugotu zaidimu sarasas
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Pasirinktas zaidimas
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Istrinti pasirinkta zaidima
@@ -2090,7 +2090,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Zaidejas {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Naujas veidas
 STR_7005_COLOR_SCHEME                                           :{BLACK}Spalva
@@ -2102,7 +2102,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Direktoriaus vardas
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Kompanijos vardo pakeisti negalima...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Direktoriaus vardo pakeisti negalima...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finansai {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finansai {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Sanaudos/Pajamos
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Konstrukcijos
@@ -2118,20 +2118,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Laivu pajamos
 STR_701C_LOAN_INTEREST                                          :{GOLD}Paskolos palukanos
 STR_701D_OTHER                                                  :{GOLD}Kita
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Viso:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Pajamu diagrama
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Įprastinės veiklos pelno diagrama
 STR_7026_BANK_BALANCE                                           :{WHITE}Saskaitos balansas
 STR_7027_LOAN                                                   :{WHITE}Paskola
-STR_MAX_LOAN                                                    :{WHITE}Maksimali paskola:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Skolintis{SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Grazinti{SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Maksimali paskola:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Skolintis{SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Grazinti{SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...skolintis maksimaliai galima {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Daugiau skolintis negalima...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...kreditas grazintas
@@ -2170,8 +2170,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Kompanijos pajegumo reitingas (maksimalus=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Kompanijos verte
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Kompaniju lentele
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Transporto kompanija susidure su sunkumais!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} kompanija bus parduota arba bankrutuos nebent reikalai pasitaisys!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Valdytojas)
@@ -2209,7 +2209,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Pasauline krize!{}{}Ekonomikai griuvant, finansu ekspertai bijo paties blogiausio!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Krize iveikta!{}{}Prekybos pagyvejimas suteikia naujas viltis pramones imonems!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Pakeisti lango dydi
-STR_7076_COMPANY_VALUE                                          :{GOLD}Kompanijos verte: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Kompanijos verte: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Pirkti 25% kompanijos akciju
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Parduoti 25% kompanijos akciju
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Pirkti 25% sios kompanijos akciju
@@ -2519,7 +2519,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Traukinių depas
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Gyventojai džiūgauja. . .{}Pirmas traukinys atvažiavo į {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Detales)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Detales)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Traukinys kelyje
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2586,8 +2586,8 @@
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Remontas
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Gelezinkelio transporto priemones nupirkti negalima...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Pastatyta: {LTBLUE}{NUM}{BLACK} Verte: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Verte: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Pastatyta: {LTBLUE}{NUM}{BLACK} Verte: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Verte: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Pasikrauna / Issikrauna
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Traukinys turi buti sustabdytas depe
@@ -2675,7 +2675,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Maks. greitis: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Pelnas šiais metais: {LTBLUE}{CURRENCY}  (pernai: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Patikimumas: {LTBLUE}{COMMA}%  {BLACK}Sugedo po paskutinio remonto: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Pastatytas: {LTBLUE}{NUM}{BLACK} Verte: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Pastatytas: {LTBLUE}{NUM}{BLACK} Verte: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Talpa: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...automobilis turi buti sustabdytas garaze
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Automobilio parduoti negalima...
@@ -2747,7 +2747,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Maks. greitis: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Pelnas šiais metais: {LTBLUE}{CURRENCY}  (pernai: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Patikimumas: {LTBLUE}{COMMA}%  {BLACK}Gedimai po paskutinio remonto: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Pastatytas: {LTBLUE}{NUM}{BLACK} Verte: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Pastatytas: {LTBLUE}{NUM}{BLACK} Verte: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Talpa: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Sustabdyti/paleisti laivo negalima...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Nusiusti i laivu depa negalima...
@@ -2815,7 +2815,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Maks. greitis: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Pelnas šiais metais: {LTBLUE}{CURRENCY}  (pernai: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Patikimumas: {LTBLUE}{COMMA}%  {BLACK}Gedimai po paskutinio remonto: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Pastatytas: {LTBLUE}{NUM}{BLACK} Verte: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Pastatytas: {LTBLUE}{NUM}{BLACK} Verte: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Negalima lektuvo nusiusti i angara...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Kursas: {STATION} angaras
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Kursas: {STATION} angarasangar, {VELOCITY}
--- a/src/lang/norwegian_bokmal.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/norwegian_bokmal.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Utenfor kartet
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}For nært kanten av kartet
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Du har ikke nok penger - du trenger {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Flatt land er nødvendig
 STR_0008_WAITING                                                :{BLACK}Venter: {WHITE}{STRING}
@@ -495,7 +495,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Lokal myndighet: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Ingen
 STR_01AA_NAME                                                   :{BLACK}Navn
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1.
@@ -778,6 +778,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Vanskelighetsgrad
 STR_02C7_CONFIG_PATCHES                                         :Konfigurer patcher
 STR_NEWGRF_SETTINGS                                             :Innstillinger for ny grafikk
+STR_TRANSPARENCY_OPTIONS                                        :Instillinger for gjennomsiktighet
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Vis bynavn
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Vis stasjonsnavn
@@ -805,7 +806,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Verdenskart
 STR_EXTRA_VIEW_PORT                                             :Ekstra vindu
 STR_SIGN_LIST                                                   :Skiltliste
-STR_TRANSPARENCY_OPTIONS                                        :Instillinger for gjennomsiktighet
 STR_02DF_TOWN_DIRECTORY                                         :Byoversikt
 STR_TOWN_POPULATION                                             :{BLACK}Verdensbefolkning: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Vindu {COMMA}
@@ -1183,7 +1183,7 @@
 STR_CHEATS                                                      :{WHITE}Juks
 STR_CHEATS_TIP                                                  :{BLACK}Avkrysningsbokser indikerer at du har brukt denne juksekoden tidligere.
 STR_CHEATS_WARNING                                              :{BLACK}Advarsel! Vær klar over at du er i ferd med å bedra dine motstandere og at straffen for slike handlinger er evig tid i skjærsilden.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Øk pengebeholdningen med {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Øk pengebeholdningen med {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Spiller som spiller: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Magisk bulldoser (fjern industrier, ufjernbare ting): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tuneller kan krysse hverandre: {ORANGE}{STRING}
@@ -1430,9 +1430,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Firmaname:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Innviet:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Firmaverdi:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Balanse nå:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Inntekt i fjor:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Firmaverdi:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Balanse nå:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Inntekt i fjor:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Nettverksytelse:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Kjøretøy:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1648,7 +1648,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Bygningen må rives først
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Innbyggertall: {ORANGE}{COMMA}{BLACK}  Antall hus: {ORANGE}{COMMA}
@@ -1681,7 +1681,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Vis informasjon om bystyret
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN}s bystyre
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Vurdering av transportfirma:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subsidier
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Tilbudte subsidier:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} fra {STRING} til {STRING}
@@ -1752,7 +1752,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...det er allerede et tre her
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...upassende område
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Kan ikke plante trær her...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...for mange skilt
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Kan ikke plassere skilt her...
 STR_280A_SIGN                                                   :Skilt
@@ -1864,9 +1864,11 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte ledig
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Kan ikke lese fra disk
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Lagring av spillet mislyktes
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Lagring av spillet mislyktes{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Kan ikke slette fil
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Feil ved fremhenting av spill
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Feil ved fremhenting av spill{}{STRING}
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :Kan ikke lese filen
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :Kan ikke skrive til filen
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Liste over disker, mapper og lagrede spill
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Gjeldende navn for valgt lagret spill
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Slett valgte lagring
@@ -2037,7 +2039,7 @@
 STR_SV_STNAME_LOWER                                             :Nedre {STRING}
 STR_SV_STNAME_HELIPORT                                          :{STRING} helikopterstasjon
 STR_SV_STNAME_FOREST                                            :{STRING}skogen
-
+STR_SV_STNAME_FALLBACK                                          :{STRING} Stasjon #{NUM}
 
 ############ end of savegame specific region!
 
@@ -2074,6 +2076,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :Ingen
+STR_NUM_VERY_LOW                                                :Veldig lav
 STR_6816_LOW                                                    :Lite
 STR_6817_NORMAL                                                 :Normal
 STR_6818_HIGH                                                   :Høyt
@@ -2116,7 +2119,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Spiller {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Nytt ansikt
 STR_7005_COLOR_SCHEME                                           :{BLACK}Firmafarge
@@ -2128,7 +2131,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Sjefens navn
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Kan ikke endre firmanavn...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Kan ikke bytte navn på sjefen...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY}s regnskap{BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY}s regnskap{BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Kostnader/inntekter
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Konstruksjon
@@ -2144,20 +2147,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Inntekter fra skip
 STR_701C_LOAN_INTEREST                                          :{GOLD}Renter
 STR_701D_OTHER                                                  :{GOLD}Annet
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Totalt:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Inntektsgraf
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Overskuddsgraf
 STR_7026_BANK_BALANCE                                           :{WHITE}Saldo
 STR_7027_LOAN                                                   :{WHITE}Lån
-STR_MAX_LOAN                                                    :{WHITE}Maks lån:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Låne mer ({SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY})
-STR_702A_REPAY                                                  :{BLACK}Betale tilbake ({SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY})
+STR_MAX_LOAN                                                    :{WHITE}Maks lån:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Låne mer ({SKIP}{SKIP}{CURRENCY})
+STR_702A_REPAY                                                  :{BLACK}Betale tilbake ({SKIP}{SKIP}{CURRENCY})
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...maksimalt lån er {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Kan ikke låne mer penger...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...lånet er allerede betalt tilbake
@@ -2196,8 +2199,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Prestasjonsvudering av firma (maks poeng=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Firmaverdi
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Firmarangering
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Transportfirma har problemer!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} vil bli solgt eller nedlagt, hvis ikke firmaets økonomi tar seg opp!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Sjef)
@@ -2235,7 +2238,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Verdenskrise!{}{}Økonomer frykter det verste. Nedgangstider i møte.
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Verdenskrise over!{}{}Opptur i markedet gir industrien selvsikkerheten tilbake.
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Bytte mellom stor/liten vindustørrelse
-STR_7076_COMPANY_VALUE                                          :{GOLD}Firmaverdi: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Firmaverdi: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Kjøp 25 % av aksjene i firmaet
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Selg 25 % av aksjene du eier
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Kjøp 25 % av aksjene i firmaet
@@ -2545,7 +2548,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} togstall
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Innbyggerne jubler . . .{}Første tog ankommer {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Detaljer)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Detaljer)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Tog i veien
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2566,6 +2569,9 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Kjør uten å stoppe til {TOWN} togstall
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Vedlikehold (uten å stoppe) ved {TOWN} togstall
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} dag{P "" s}
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Er på vei til {TOWN} togstall
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Er på vei til {TOWN} togstall, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Vedlikehold ved {TOWN} togstall
@@ -2607,13 +2613,14 @@
 STR_REFIT                                                       :{BLACK}Bygg om
 STR_REFIT_TIP                                                   :{BLACK}Velg varetypen det skal endres til. CTRL-klikk for å omgjøre.
 STR_REFIT_ORDER                                                 :(Bygg om til {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Tidstabell
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Ordre)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Slutt på ordre - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Vedlikehold
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Kan ikke bygge jernbanekjøretøy...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Bygget: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Verdi: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Bygget: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Verdi: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Laster på/av
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Toget må være stoppet i togstallen
@@ -2623,6 +2630,9 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Kan ikke sette inn ny ordre...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Kan ikke slette denne ordren...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Kan ikke endre denne ordren...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Kan ikke flytte ordren...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Kan ikke hoppe over nåverende ordre...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Kan ikke hoppe over den valgte ordren...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Kan ikke flytte kjøretøy...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}Bakmaskinen vil alltid følge det fremste motstykket
 STR_8838_N_A                                                    :N/A{SKIP}
@@ -2688,8 +2698,16 @@
 STR_TRAIN_START_NO_CATENARY                                     :Dette sporet mangler et kjede, så toget kan ikke starte
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Ny {STRING} nå tilgjengelig!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Ny {STRING} Nå tilgjengelig!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Ny {STRING} Nå tilgjengelig!  -  {ENGINE}
+
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Kjøretøy kan bare vente på stasjoner.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Dette kjøretøyet stopper ikke på denne stasjonen.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Skift Tid
+STR_TIMETABLE_STATUS_ON_TIME                                    :Dette kjøretøyet går på tid
+STR_TIMETABLE_STATUS_LATE                                       :Dette kjøretøyet er {STRING} for sent ute
+STR_TIMETABLE_STATUS_EARLY                                      :Dette kjøretøyet er {STRING} for tidlig ute
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Fyll automatisk
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Kjøretøy i veien
@@ -2705,7 +2723,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Maks. fart: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Inntekt i år: {LTBLUE}{CURRENCY}  (sist år: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Pålitelighet: {LTBLUE}{COMMA} %  {BLACK}Havarier siden forrige vedlikehold: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Bygget: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Bygget: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Kapasitet: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...må være stoppet i en garasje
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Kan ikke selge kjøretøy...
@@ -2732,6 +2750,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Kjøretøyliste - trykk på kjøretøy for mer informasjon
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Bygg det valgte kjøretøyet
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Koster: {CURRENCY}{}Fart: {VELOCITY}{}Driftkostnader: {CURRENCY}/år{}Kapasitet: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Kapasitet: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Navngi kjøretøy
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Kan ikke navngi kjøretøy...
@@ -2777,7 +2797,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Maks. fart: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Inntekt i år: {LTBLUE}{CURRENCY}  (sist år: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Pålitelighet: {LTBLUE}{COMMA} %  {BLACK}Havarier siden forrige vedlikehold: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Bygget: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Bygget: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Kapasitet: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Kan ikke starte/stoppe skip...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Kan ikke sende skip til depotet...
@@ -2845,7 +2865,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Maks. fart: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Inntekt i år: {LTBLUE}{CURRENCY}  (forrige år: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Pålitelighet: {LTBLUE}{COMMA} %  {BLACK}Havarier siden forrige vedlikehold: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Bygget: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Bygget: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Kan ikke sende fly til hangar...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Er på vei til {STATION} hangar
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Er på vei til {STATION} hangar, {VELOCITY}
@@ -2898,6 +2918,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Fly til {STATION} hangar
 SERVICE_AT_AIRPORT_HANGAR                                       :Vedlikehold ved {STATION} hangar
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Tidstabell)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Zeppelinulykke på {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Kjøretøy ødelagt i UFO-kollisjon!
@@ -3211,10 +3233,50 @@
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Skru på gjennomsiktighet for broer
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Skru på gjennomsiktighet for fyrtårn og antenner
 
-##### Mass Order
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
+##### Mass Order
+STR_GROUP_NAME_FORMAT                                           :Gruppe {COMMA}
+STR_GROUP_TINY_NAME                                             :{TINYFONT}{GROUP}
+STR_GROUP_ALL_TRAINS                                            :Alle tog
+STR_GROUP_ALL_ROADS                                             :Alle kjøretøyer
+STR_GROUP_ALL_SHIPS                                             :Alle båter
+STR_GROUP_ALL_AIRCRAFTS                                         :Alle flyfartøy
+STR_GROUP_TINY_NUM                                              :{TINYFONT}{COMMA}
+STR_GROUP_ADD_SHARED_VEHICLE                                    :Legg til delte kjøretøy
+STR_GROUP_REMOVE_ALL_VEHICLES                                   :Fjern alle kjøretøy
 
+STR_GROUP_TRAINS_CAPTION                                        :{WHITE}{GROUP} - {COMMA} Tog{P "" s}
+STR_GROUP_ROADVEH_CAPTION                                       :{WHITE}{GROUP} - {COMMA} Kjøretøy{P "" s}
+STR_GROUP_SHIPS_CAPTION                                         :{WHITE}{GROUP} - {COMMA} Skip{P "" s}
+STR_GROUP_AIRCRAFTS_CAPTION                                     :{WHITE}{GROUP} - {COMMA} Luftfartøy
+STR_GROUP_RENAME_CAPTION                                        :{BLACK}Gi nytt navn på gruppen
+STR_GROUP_REPLACE_CAPTION                                       :{WHITE}Skift kjøretøyer i "{GROUP}"
 
+STR_GROUP_CAN_T_CREATE                                          :{WHITE}Kan ikke opprette gruppe...
+STR_GROUP_CAN_T_DELETE                                          :{WHITE}Kan ikke slette denne gruppen...
+STR_GROUP_CAN_T_RENAME                                          :{WHITE}Kan ikke gi nytt navn på denne gruppen...
+STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES                             :{WHITE}Kan ikke fjerne alle kjøretøy fra denne gruppen...
+STR_GROUP_CAN_T_ADD_VEHICLE                                     :{WHITE}Kan ikke legge til kjøretøy i denne grupppen...
 
+STR_GROUP_DELETE_TIP                                            :{BLACK}Fjern den valgte gruppen
+STR_GROUP_RENAME_TIP                                            :{BLACK}Gi nytt navn på den valgte gruppen
+
+STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR                        :{TINYFONT}{BLACK}Overskudd i år: {GREEN}{CURRENCY} {BLACK}(i fjor: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR                         :{TINYFONT}{BLACK}Overskudd i år: {RED}{CURRENCY} {BLACK}(i fjor: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Overskudd i år: {GREEN}{CURRENCY} {BLACK}(i fjor: {RED}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Overskudd i år: {RED}{CURRENCY} {BLACK}(i fjor: {RED}{CURRENCY}{BLACK})
+
+STR_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
 
 ########
--- a/src/lang/norwegian_nynorsk.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/norwegian_nynorsk.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -11,8 +11,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Utføre kartet
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}For nært kanten av kartet
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Du har ikkje nok pengar - du treng {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Flatt land er naudsynt
 STR_0008_WAITING                                                :{BLACK}Ventar: {WHITE}{STRING}
@@ -496,7 +496,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Lokale styresmaktar: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Ingen
 STR_01AA_NAME                                                   :{BLACK}Namn
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1.
@@ -779,6 +779,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Vanskegrad
 STR_02C7_CONFIG_PATCHES                                         :Konfigurer patcher
 STR_NEWGRF_SETTINGS                                             :Instillingar for ny grafikk
+STR_TRANSPARENCY_OPTIONS                                        :Gjennomsiktigheitsinnstillingar
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Vis namn på by
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Vis namn på stasjon
@@ -806,7 +807,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Verdskart
 STR_EXTRA_VIEW_PORT                                             :Ekstra vindauge
 STR_SIGN_LIST                                                   :Skiltliste
-STR_TRANSPARENCY_OPTIONS                                        :Gjennomsiktigheitsinnstillingar
 STR_02DF_TOWN_DIRECTORY                                         :Byoversikt
 STR_TOWN_POPULATION                                             :{BLACK}Verdsinnbyggjartal: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Vindauge {COMMA}
@@ -1090,6 +1090,7 @@
 STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Gjer vedlikehald på helikopter automatisk på helikopterlandingsplassar: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Koble landskapsverktøylinja til tog-/vei-/vass- og flyplassverktøylinjene: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Ved rulling med musa, flytt synsvinkelen i den motsette retninga: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING                             :{LTBLUE}glatt scrolling: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Vis eit målingverktøytips når ymse byggjeverktøy brukast: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Vis firmaovertakingar: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES_NONE                                :Ingen
@@ -1103,6 +1104,9 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Fart på rullehjul: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automatisk pause når ein startar nytt spel: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Bruk avansert køyretøyliste: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Bruk lasteindikatorar: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Bruk rutetabellar for køyretøy: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Vis rutetabell i klikk i staden for dagar: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maks antal tog per speler: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Maks antal køyretøy per spelar: {ORANGE}{STRING}
@@ -1186,7 +1190,7 @@
 STR_CHEATS                                                      :{WHITE}Juks
 STR_CHEATS_TIP                                                  :{BLACK}Avkrysningsbokser fortel at du har nytta denne juksekoden tidlegare
 STR_CHEATS_WARNING                                              :{BLACK}Åtvaring! Du skal vete at du er i ferd med å gjera motspelarane ein stor urett. Gud tilgjev, men det er ikkje sikkert at venene dine gjer det same.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Auk lommeboka di med {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Auk lommeboka di med {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Spelar som speler: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Magisk bulldoser (fjern industriar, ufjernbare ting): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tunnelar kan krysse kvarandre: {ORANGE}{STRING}
@@ -1441,9 +1445,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Firmanamn:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Skipa:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Firmaverdi:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Noverande saldo:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Inntekt i fjor:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Firmaverdi:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Noverande saldo:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Inntekt i fjor:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Nettverksyting:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Køyretøy:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1678,7 +1682,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Bygningen må rivst først
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Innbyggjartal: {ORANGE}{COMMA}{BLACK}  Antal hus: {ORANGE}{COMMA}
@@ -1711,7 +1715,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Vis informasjon om bystyret
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}Bystyret i {TOWN}
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Vurdering av transportfirma:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subsidiar
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Tilbydde subsidiar:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} frå {STRING} til {STRING}
@@ -1782,7 +1786,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...det er allereie eit tre her
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...uhøveleg område
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Kan ikkje plante tre her...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...for mange skilt
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Kan ikkje plassere skilt her...
 STR_280A_SIGN                                                   :Skilt
@@ -1891,6 +1895,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Kyst eller elvebreidd
 STR_3806_SHIP_DEPOT                                             :Skipsdepot
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...Kan ikkje byggje på vatn
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Må fjerna kanal først
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Lagre spel
@@ -1900,9 +1905,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte ledig
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Kan ikkje lese frå disk
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Lagring av spelet mislukkast
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Lagring av spelet mislukkast{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Kan ikkje slette fil
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Feil ved henting av spel
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Feil ved henting av spel{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Intern feil: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Det lagra spelet er øydelagd - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Dette spelet er lagra frå ei nyare utgåve
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :Kan ikkje lesa fil
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :Kan ikkje skriva fil
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Liste over diskar, mapper og lagra spel
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Gjeldande namn for vald lagra spel
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Slett valde lagra spel
@@ -2074,7 +2084,7 @@
 STR_SV_STNAME_HELIPORT                                          :{STRING} helikopterstasjon
 STR_SV_STNAME_FOREST                                            :{STRING}skogen
 
-STR_SV_GROUP_NAME                                               :{GROUP}
+
 
 ############ end of savegame specific region!
 
@@ -2154,7 +2164,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Spelar {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Nytt andlet
 STR_7005_COLOR_SCHEME                                           :{BLACK}Firmafarge
@@ -2166,7 +2176,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Namnet til sjefen
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Kan ikkje endre firmanamn...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Kan ikkje byte namn på sjefen...
-STR_700E_FINANCES                                               :{WHITE}Rekneskapen til {COMPANY} {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}Rekneskapen til {COMPANY} {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Kostnader/inntekter
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Konstruksjon
@@ -2182,20 +2192,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Inntekter frå skip
 STR_701C_LOAN_INTEREST                                          :{GOLD}Renter
 STR_701D_OTHER                                                  :{GOLD}Anna
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Totalt:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Graf over inntekter
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Graf over overskot
 STR_7026_BANK_BALANCE                                           :{WHITE}Saldo
 STR_7027_LOAN                                                   :{WHITE}Lån
-STR_MAX_LOAN                                                    :{WHITE}Maks lån:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Lån meir ({SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY})
-STR_702A_REPAY                                                  :{BLACK}Betal attende ({SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY})
+STR_MAX_LOAN                                                    :{WHITE}Maks lån:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Lån meir ({SKIP}{SKIP}{CURRENCY})
+STR_702A_REPAY                                                  :{BLACK}Betal attende ({SKIP}{SKIP}{CURRENCY})
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...maksimalt lån er {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Kan ikkje låne meir pengar...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...lånet er allereie betalt attende
@@ -2234,8 +2244,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Prestasjonsvurdering av firma (maks poeng=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Firmaverdi
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Firmarangering
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Transportfirma har problemer!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} vil verte seld eller nedlagt, dersom ikkje økonomien til firmaet tek seg opp!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Sjef)
@@ -2273,7 +2283,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Verdskrise!{}{}Økonomar fryktar det verste. Nedgangstider i kjømda.
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Verdskrise over!{}{}Opptur i marknaden gjer industrien sjølvkjensla attende.
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Byt mellom stor/liten storleik på vindauga
-STR_7076_COMPANY_VALUE                                          :{GOLD}Firmaverdi: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Firmaverdi: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Kjøp 25 % av aksjane i firmaet
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Sel 25 % av aksjane du eig
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Kjøp 25 % av aksjane i firmaet
@@ -2585,7 +2595,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} togstall
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Innbyggjarane jublar . . .{}Første tog kjem til {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Detaljar)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Detaljar)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Tog i vegen
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2606,6 +2616,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Køyr utan stopp til togstallen i {TOWN}
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Vedlikehald (utan å stoppe) ved {TOWN} togstall
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Reis (ikke på rutetabell)
+STR_TIMETABLE_TRAVEL_FOR                                        :Reis i  {STRING}
+STR_TIMETABLE_STAY_FOR                                          :stå i {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} dag{P "" ar}
+STR_TIMETABLE_TICKS                                             :{COMMA} Tjukk{P "" s}
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Er på veg til {TOWN} togstall
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Er på veg til {TOWN} togstall, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Vedlikehald ved {TOWN} togstall
@@ -2647,13 +2664,15 @@
 STR_REFIT                                                       :{BLACK}Bygg om
 STR_REFIT_TIP                                                   :{BLACK}Vel varetypen det skal skiftast til. CTRL-klikk for å fjerne ombyggingsinstruksjonar
 STR_REFIT_ORDER                                                 :(Bygg om til {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Rutetabell
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Bytt til rutetabellvinauge
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Ordre)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Slutt på ordre - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Vedlikehald
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Kan ikkje byggje jernbanekøyretøy...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Bygd: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Verdi: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Bygd: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Verdi: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Lastar på/av
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Toget må vere stoppa i togstallen
@@ -2663,6 +2682,7 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Kan ikkje setje inn ny ordre...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Kan ikkje slette denne ordren...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Kan ikkje endre denne ordren...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Kan ikkje flytte denne ordra
 STR_CAN_T_SKIP_ORDER                                            :{WHITE}Kan ikkje hoppa over gjeldande ordre
 STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Kan ikkje hoppa til valde ordre
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Kan ikkje flytte køyretøy...
@@ -2702,6 +2722,10 @@
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Sett inn ein ordre før den valde ordren, eller i slutten av lista
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Alltid fyll køyretøyet ved den valde stasjonen
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Alltid tøm køyretøyet ved den valde stasjonen
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Rutetabell - klikk på ei ordre for å merka den
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Bytt tida den merka ordra skal bruke
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Fjern tida den merka ordra skal bruke
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Still attende teljaren for forseining, slik at køyretøyet vert presis
 STR_SERVICE_HINT                                                :{BLACK}Hopp over ordren dersom ikkje vedlikehald trengst
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Kostnad: {CURRENCY} Vekt: {WEIGHT_S}{}Fart: {VELOCITY}  Kraft: {POWER}{}Driftskostnader: {CURRENCY}/år{}Kapasitet: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Havarert
@@ -2723,6 +2747,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Kan ikkje gje tog/vogn nytt namn...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Få den merka ordren til å tvinge køyretøyet til å dumpe lasta
 STR_886F_TRANSFER                                               :{BLACK}Overfør
+STR_CLEAR_TIME                                                  :{BLACK}Fjern Tid
+STR_RESET_LATENESS                                              :{BLACK}Still attende teljaren for forseining
 
 STR_TRAIN_STOPPING                                              :{RED}Stoppar
 STR_TRAIN_STOPPING_VEL                                          :{RED}Stoppar, {VELOCITY}
@@ -2731,8 +2757,16 @@
 STR_TRAIN_START_NO_CATENARY                                     :Dette sporet manglar eit kjede, så toget kan ikkje starte
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Ny {STRING}type er tilgjengeleg!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Ny {STRING}type er tilgjengeleg!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Ny {STRING}type er tilgjengeleg!  -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Kan ikkje lage rutetabell for køyretøyet
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Køyretøy kan berre venta på stasjonar
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Dette køyretøyet stoppar ikkje på denne stasjonen
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Bytt Tid
+STR_TIMETABLE_STATUS_ON_TIME                                    :Dette køyretøyet er presis
+STR_TIMETABLE_STATUS_LATE                                       :Dette køyretøyet er {STRING} for seint
+STR_TIMETABLE_STATUS_EARLY                                      :Dette køyretøyet er {STRING} for tidleg
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Køyretøy i vegen
@@ -2748,7 +2782,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Maks. fart: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Inntekt i år: {LTBLUE}{CURRENCY}  (førre år: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Pålitelegskap: {LTBLUE}{COMMA} %  {BLACK}Havari sidan førre vedlikehald: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Bygd: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Bygd: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Kapasitet: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...må verte stoppa i ein garasje
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Kan ikkje selje køyretøy...
@@ -2775,6 +2809,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Køyretøyliste - trykk på køyretøy for meir informasjon
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Bygg det valde køyretøyet
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Kostnad: {CURRENCY}{}Fart: {VELOCITY}{}Driftskostnader: {CURRENCY}/år{}Kapasitet: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Kapasitet: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Namngje køyretøy
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Kan ikkje namngje køyretøy...
@@ -2822,7 +2858,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Maks. fart: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Inntekt i år: {LTBLUE}{CURRENCY}  (førre år: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Pålitelegskap: {LTBLUE}{COMMA} %  {BLACK}Havari sidan førre vedlikehald: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Bygd: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Bygd: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Kapasitet: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Kan ikkje starte/stoppe skip...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Kan ikkje sende skip til depotet...
@@ -2890,7 +2926,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Maks. fart: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Inntekt i år: {LTBLUE}{CURRENCY}  (førre år: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Pålitelegskap: {LTBLUE}{COMMA} %  {BLACK}Havari sidan førre  vedlikehald: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Bygd: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Bygd: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Kan ikkje sende fly til hangar...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Er på veg til {STATION} hangar
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Er på veg til {STATION} hangar, {VELOCITY}
@@ -2943,6 +2979,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Fly til {STATION} hangar
 SERVICE_AT_AIRPORT_HANGAR                                       :Service ved {STATION} Hangar.
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Rutetabell)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Zeppelinerulukke på {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Køyretøy øydelagd i kollisjon med UFO!
@@ -3258,6 +3296,14 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Byt gjennomsyn for bygningar som kan byggast, til dømes depot og vegmerker
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Byt gjennomsyn for bruer
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Byt gjennomsyn for bygningar som fyrtårn og antenner, kanskje i framtida for fine effekter
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Bytt gjennomsyn for lasteindikatorar
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Gruppe {COMMA}
@@ -3295,4 +3341,5 @@
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Forteneste i år: {GREEN}{CURRENCY} {BLACK}(førre år: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Forteneste i år: {RED}{CURRENCY} {BLACK}(førre år: {RED}{CURRENCY}{BLACK})
 
+
 ########
--- a/src/lang/piglatin.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/piglatin.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Offway edgeway ofway apmay
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Ootay oseclay otay edgeway ofway apmay
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Otnay enoughway ashcay - equiresray {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Atflay andlay equiredray
 STR_0008_WAITING                                                :{BLACK}Aitingway: {WHITE}{STRING}
@@ -495,7 +495,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Ocallay authorityway: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Onenay
 STR_01AA_NAME                                                   :{BLACK}Amenay
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1stay
@@ -1103,6 +1103,8 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Apmay ollwheelscray eedspay: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automaticallyway ausepay enwhay artingstay away ewnay amegay: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Useway ethay advancedway ehiclevay istlay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Enableway imetablingtay orfay ehiclesvay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Owshay imetabletay inway ickstay atherray anthay aysday: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Axmay ainstray erpay ayerplay: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Axmay oadray ehiclesvay erpay ayerplay: {ORANGE}{STRING}
@@ -1186,7 +1188,7 @@
 STR_CHEATS                                                      :{WHITE}Eatschay
 STR_CHEATS_TIP                                                  :{BLACK}Eckboxeschay indicateway ifway ouyay avehay usedway isthay eatchay eforebay
 STR_CHEATS_WARNING                                              :{BLACK}Arningway! Ouyay areway aboutway otay etraybay ouryay ellowfay ompetitorscay. Eepkay inway indmay atthay uchsay away isgraceday illway ebay ememberedray orfay eternityway.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Increaseway oneymay ybay {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Increaseway oneymay ybay {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Ayingplay asway ayerplay: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Agicmay ulldozerbay (emoveray industriesway, unmovablesway): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Unnelstay aymay osscray eachway otherway: {ORANGE}{STRING}
@@ -1441,9 +1443,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Ompanycay amenay:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Inaugurationway:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Ompanycay aluevay:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Urrentcay alancebay:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Astlay ear'syay incomeway:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Ompanycay aluevay:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Urrentcay alancebay:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Astlay ear'syay incomeway:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Erformancepay:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Ehiclesvay:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1678,7 +1680,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Uildingbay ustmay ebay emolishedday irstfay
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Opulationpay: {ORANGE}{COMMA}{BLACK}  Ouseshay: {ORANGE}{COMMA}
@@ -1711,7 +1713,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Owshay informationway onway ocallay authorityway
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} ocallay authorityway
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Ansporttray ompanycay atingsray:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Ubsidiessay
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Ubsidiessay onway offerway orfay ervicessay akingtay:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} omfray {STRING} otay {STRING}
@@ -1782,7 +1784,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...eetray alreadyway erehay
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...itesay unsuitableway
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}An'tcay antplay eetray erehay...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...ootay anymay ignssay
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}An'tcay aceplay ignsay erehay...
 STR_280A_SIGN                                                   :Ignsay
@@ -1891,6 +1893,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Oastcay orway iverbankray
 STR_3806_SHIP_DEPOT                                             :Ipshay epotday
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...An'tcay uildbay onway aterway
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Ustmay emolishday analcay irstfay
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Avesay Amegay
@@ -1900,9 +1903,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} egabyte{P "" s}may eefray
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Unableway otay eadray ivedray
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Amegay Avesay Ailedfay
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Amegay Avesay Ailedfay{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Unableway otay eleteday ilefay
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Amegay Oadlay Ailedfay
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Amegay Oadlay Ailedfay{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Istlay ofway ivesdray, irectoriesday andway avedsay-amegay ilesfay
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Urrentlycay electedsay amenay orfay avedsay-amegay
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Eleteday ethay urrentlycay electedsay avedsay-amegay
@@ -2074,7 +2077,7 @@
 STR_SV_STNAME_HELIPORT                                          :{STRING} Eliporthay
 STR_SV_STNAME_FOREST                                            :{STRING} Orestfay
 
-STR_SV_GROUP_NAME                                               :{GROUP}
+
 
 ############ end of savegame specific region!
 
@@ -2154,7 +2157,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Ayerplay {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Ewnay Acefay
 STR_7005_COLOR_SCHEME                                           :{BLACK}Olourcay Emeschay
@@ -2166,7 +2169,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Anager'smay Amenay
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}An'tcay angechay ompanycay amenay...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}An'tcay angechay anager'smay amenay...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Inancesfay {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Inancesfay {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Expenditureway/Incomeway
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Onstructioncay
@@ -2182,20 +2185,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Ipshay Incomeway
 STR_701C_LOAN_INTEREST                                          :{GOLD}Oanlay Interestway
 STR_701D_OTHER                                                  :{GOLD}Otherway
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Otaltay:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Incomeway Aphgray
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Operatingway Ofitpray Aphgray
 STR_7026_BANK_BALANCE                                           :{WHITE}Ankbay Alancebay
 STR_7027_LOAN                                                   :{WHITE}Oanlay
-STR_MAX_LOAN                                                    :{WHITE}Axmay Oanlay:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Orrowbay {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Epayray {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Axmay Oanlay:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Orrowbay {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Epayray {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...aximummay ermittedpay oanlay izesay isway {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}An'tcay orrowbay anyway oremay oneymay...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...onay oanlay otay epayray
@@ -2234,8 +2237,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Ompanycay erformancepay atingsray (aximummay atingray=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Ompanycay aluesvay
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Ompanycay Eaguelay Abletay
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Ansporttray ompanycay inway oubletray!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} illway ebay oldsay offway orway eclaredday ankruptbay unlessway erformancepay increasesway oonsay!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Anagermay)
@@ -2273,7 +2276,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Orldway Ecessionray!{}{}Inancialfay expertsway earfay orstway asway economyway umpsslay!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Ecessionray Overway!{}{}Upturnway inway adetray ivesgay onfidencecay otay industriesway asway economyway engthensstray!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Oggletay argelay/allsmay indowway izesay
-STR_7076_COMPANY_VALUE                                          :{GOLD}Ompanycay aluevay: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Ompanycay aluevay: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Uybay 25% areshay inway ompanycay
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Ellsay 25% areshay inway ompanycay
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Uybay 25% areshay inway isthay ompanycay
@@ -2585,7 +2588,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Aintray Epotday
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Itizenscay elebratecay . . .{}Irstfay aintray arrivesway atway {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Etailsday)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Etailsday)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Aintray inway ethay ayway
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2606,6 +2609,11 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Ogay onnay-opstay otay {TOWN} Aintray Epotday
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Ervicesay onnay-opstay atway {TOWN} Aintray Epotday
 
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Aveltray (otnay imetabledtay)
+STR_TIMETABLE_STAY_FOR                                          :andway aystay orfay {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} ay{P "" s}day
+STR_TIMETABLE_TICKS                                             :{COMMA} ick{P "" s}tay
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Eadinghay orfay {TOWN} Aintray Epotday
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Eadinghay orfay {TOWN} Aintray Epotday, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Ervicesay atway {TOWN} Aintray Epotday
@@ -2647,13 +2655,15 @@
 STR_REFIT                                                       :{BLACK}Efitray
 STR_REFIT_TIP                                                   :{BLACK}Electsay atwhay argocay ypetay otay efitray otay inway isthay orderway. Ontrolcay ickclay otay emoveray efitray instructionway
 STR_REFIT_ORDER                                                 :(Efitray otay {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Imetabletay
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Itchsway otay ethay imetabletay iewvay
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Ordersway)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Endway ofway Ordersway - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Ervicesay
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}An'tcay uildbay ailwayray ehiclevay...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Uiltbay: {LTBLUE}{NUM}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Aluevay: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Uiltbay: {LTBLUE}{NUM}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Aluevay: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Oadinglay / Unloadingway
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Aintray ustmay ebay oppedstay insideway away epotday
@@ -2703,6 +2713,9 @@
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Insertway away ewnay orderway eforebay ethay ighlightedhay orderway, orway addway otay endway ofway istlay
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Akemay ethay ighlightedhay orderway orcefay ethay ehiclevay otay aitway orfay away ullfay oadlay
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Akemay ethay ighlightedhay orderway orcefay ethay ehiclevay otay unloadway
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Imetabletay - ickclay onway anway orderway otay ighlighthay itway.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Angechay ethay amountway ofway imetay atthay ethay ighlightedhay orderway ouldshay aketay
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Earclay ethay amountway ofway imetay orfay ethay ighlightedhay orderway
 STR_SERVICE_HINT                                                :{BLACK}Ipskay isthay orderway unlessway away ervicesay isway eedednay
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Ostcay: {CURRENCY} Eightway: {WEIGHT_S}{}Eedspay: {VELOCITY}  Owerpay: {POWER}{}Unningray Ostcay: {CURRENCY}/yray{}Apacitycay: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Okenbray ownday
@@ -2732,8 +2745,9 @@
 STR_TRAIN_START_NO_CATENARY                                     :Isthay acktray ackslay atenarycay, osay ethay aintray an'tcay artstay
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Ewnay {STRING} ownay availableway!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Ewnay {STRING} ownay availableway!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Ewnay {STRING} ownay availableway!  -  {ENGINE}
+
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Oadray ehiclevay inway ethay ayway
@@ -2749,7 +2763,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Axmay. eedspay: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Ofitpray isthay earyay: {LTBLUE}{CURRENCY}  (astlay earyay: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Eliabilityray: {LTBLUE}{COMMA}%  {BLACK}Eakdownsbray incesay astlay ervicesay: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Uiltbay: {LTBLUE}{NUM}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Uiltbay: {LTBLUE}{NUM}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Apacitycay: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...ustmay ebay oppedstay insideway away oadray ehiclevay epotday
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}An'tcay ellsay oadray ehiclevay...
@@ -2825,7 +2839,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Axmay. eedspay: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Ofitpray isthay earyay: {LTBLUE}{CURRENCY}  (astlay earyay: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Eliabilityray: {LTBLUE}{COMMA}%  {BLACK}Eakdownsbray incesay astlay ervicesay: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Uiltbay: {LTBLUE}{NUM}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Uiltbay: {LTBLUE}{NUM}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Apacitycay: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}An'tcay opstay/artstay ipshay...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}An'tcay endsay ipshay otay epotday...
@@ -2893,7 +2907,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Axmay. eedspay: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Ofitpray isthay earyay: {LTBLUE}{CURRENCY}  (astlay earyay: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Eliabilityray: {LTBLUE}{COMMA}%  {BLACK}Eakdownsbray incesay astlay ervicesay: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Uiltbay: {LTBLUE}{NUM}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Uiltbay: {LTBLUE}{NUM}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}An'tcay endsay aircraftway otay angarhay...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Eadinghay orfay {STATION} Angarhay
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Eadinghay orfay {STATION} Angarhay, {VELOCITY}
@@ -2946,6 +2960,7 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Ogay otay {STATION} Angarhay
 SERVICE_AT_AIRPORT_HANGAR                                       :Ervicesay atway {STATION} Angarhay
 
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Eppelinzay isasterday atway {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Oadray ehiclevay estroyedday inway 'UFO'WAY ollisioncay!
@@ -3262,6 +3277,7 @@
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Oggletay ansparencytray orfay idgesbray
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Oggletay ansparencytray orfay ucturesstray ikelay ighthouseslay andway antennasway, aybemay inway uturefay orfay eyecandyway
 
+
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Oupgray {COMMA}
 STR_GROUP_TINY_NAME                                             :{TINYFONT}{GROUP}
--- a/src/lang/polish.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/polish.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -5,13 +5,15 @@
 ##case d c b n m w
 ##gender m f n
 
+#
+
 ##id 0x0000
 STR_NULL                                                        :
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Poza krawędzią mapy
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Zbyt blisko krawędzi mapy
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Za mało pieniędzy - wymagane {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Wymagany płaski teren
 STR_0008_WAITING                                                :{BLACK}Czeka: {WHITE}{STRING}
@@ -546,7 +548,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Lokalne władze: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Brak
 STR_01AA_NAME                                                   :{BLACK}Nazwa
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1szy
@@ -804,7 +806,7 @@
 STR_0283_CONSTRUCT_TOFFEE_QUARRY                                :{BLACK}Zbuduj Odkrywkę Toffi
 STR_0284_CONSTRUCT_SUGAR_MINE                                   :{BLACK}Zbuduj Kopalnię cukru
 STR_0285_CAN_T_BUILD_HERE                                       :{WHITE}Nie można tutaj wybudować: {STRING}...
-STR_0286_MUST_BUILD_TOWN_FIRST                                  :{WHITE}...najpierw trzeba wybudować miasto
+STR_0286_MUST_BUILD_TOWN_FIRST                                  :{WHITE}...należy najpierw wybudować miasto
 STR_0287_ONLY_ONE_ALLOWED_PER_TOWN                              :{WHITE}...dozwolone jedno na miasto
 STR_0288_PLANT_TREES                                            :{BLACK}Posadź drzewa
 STR_0289_PLACE_SIGN                                             :{BLACK}Umieść napis
@@ -863,6 +865,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Ustawienia trudności
 STR_02C7_CONFIG_PATCHES                                         :Konfiguracja wtyczek
 STR_NEWGRF_SETTINGS                                             :Ustawienia newgrf
+STR_TRANSPARENCY_OPTIONS                                        :Opcje przeźroczystości
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Wyświetlanie nazw miast
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Wyświetlanie nazw stacji
@@ -890,7 +893,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Mapa świata
 STR_EXTRA_VIEW_PORT                                             :Dodatkowy podgląd
 STR_SIGN_LIST                                                   :Lista tablic
-STR_TRANSPARENCY_OPTIONS                                        :Opcje przeźroczystości
 STR_02DF_TOWN_DIRECTORY                                         :Lista miast
 STR_TOWN_POPULATION                                             :{BLACK}Populacja świata: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Podgląd {COMMA}
@@ -1007,7 +1009,7 @@
 STR_CURR_NLG                                                    :Gulden holenderski (NLG)
 STR_CURR_NOK                                                    :Korona norweska (NOK)
 STR_CURR_PLN                                                    :Złoty polski (PLN)
-STR_CURR_ROL                                                    :Lewy rumuńskie (ROL)
+STR_CURR_ROL                                                    :Lej rumuński (ROL)
 STR_CURR_RUR                                                    :Rubel rosyjski (RUR)
 STR_CURR_SIT                                                    :Tolar słowenski (SIT)
 STR_CURR_SEK                                                    :Korona szwedzka (SEK)
@@ -1172,7 +1174,7 @@
 STR_CONFIG_PATCHES_STATION_SPREAD                               :{LTBLUE}Maks. wielkość stacji: {ORANGE}{STRING} {RED}Uwaga: Duże wartości spowalniają grę
 STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Automatycznie serwisuj helikoptery na lądowiskach: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Przyłącz okno narzędzi krajobrazu do okien środków transportu: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Przewijaj obraz myszka w przeciwnym kierunku: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Przewijaj obraz myszką w przeciwnym kierunku: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Pokaż dymek z pomiarem podczas używania rożnych narzędzi: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Pokaż poboczne schematy koloru: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES_NONE                                :Żadne
@@ -1215,7 +1217,7 @@
 STR_CONFIG_PATCHES_STARTING_YEAR                                :{LTBLUE}Data rozpoczęcia gry: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ENDING_YEAR                                  :{LTBLUE}Data zakończenia gry: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SMOOTH_ECONOMY                               :{LTBLUE}Pozwól na łagodną ekonomię (więcej małych zmian)
-STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Pozwól kupować odziały w innych firmach
+STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Pozwól kupować udziały w innych firmach
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}W trakcie przeciągania ustaw sygnały co: {ORANGE}{STRING} kratk{P e i ek}
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Automatycznie buduj semafory przed: {ORANGE}{STRING}
 
@@ -1268,7 +1270,7 @@
 STR_CHEATS                                                      :{WHITE}Oszukiwanie
 STR_CHEATS_TIP                                                  :{BLACK}Checkboxy pokazują czy używano już tego oszustwa
 STR_CHEATS_WARNING                                              :{BLACK}Uwaga! Właśnie chcesz zdradzić swoich wspólników.{}Miej na uwadze, że zostanie to zapamiętane na wieki!
-STR_CHEAT_MONEY                                                 :{LTBLUE}Zwiększ ilość pieniędzy o {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Zwiększ ilość pieniędzy o {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Graj jako gracz: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Magiczny buldożer (usuwanie przedsiębiorstw, itp.): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tunele mogą się krzyżować: {ORANGE}{STRING}
@@ -1397,8 +1399,8 @@
 STR_NETWORK_CONNECTION                                          :{BLACK}Połączenie:
 STR_NETWORK_CONNECTION_TIP                                      :{BLACK}Wybierz między grą w internecie a grą w sieci lokalnej
 
-STR_NETWORK_START_SERVER                                        :{BLACK}Uruchomienie serwera
-STR_NETWORK_START_SERVER_TIP                                    :{BLACK}Uruchomienie własnego serwera
+STR_NETWORK_START_SERVER                                        :{BLACK}Uruchom serwer
+STR_NETWORK_START_SERVER_TIP                                    :{BLACK}Uruchom własny serwer
 
 STR_NETWORK_GAME_NAME                                           :{BLACK}Nazwa
 STR_NETWORK_GAME_NAME_TIP                                       :{BLACK}Nazwa gry
@@ -1466,7 +1468,7 @@
 STR_NETWORK_NUMBER_OF_SPECTATORS                                :{BLACK}Maksymalna ilość widzów:
 STR_NETWORK_NUMBER_OF_SPECTATORS_TIP                            :{BLACK}Ogranicz serwer do określonej ilości widzów
 STR_NETWORK_COMBO4                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_LANGUAGE_SPOKEN                                     :{BLACK}Wzywany język w grze:
+STR_NETWORK_LANGUAGE_SPOKEN                                     :{BLACK}Używany język:
 STR_NETWORK_LANGUAGE_TIP                                        :{BLACK}Inni gracze będą poinformowani jaki język jest używany na serwerze
 STR_NETWORK_COMBO5                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
 STR_NETWORK_START_GAME                                          :{BLACK}Rozpocznij grę
@@ -1479,6 +1481,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :Angielski
 STR_NETWORK_LANG_GERMAN                                         :Niemiecki
 STR_NETWORK_LANG_FRENCH                                         :Francuski
+STR_NETWORK_LANG_BRAZILIAN                                      :Brazylijski
+STR_NETWORK_LANG_BULGARIAN                                      :Bułgarski
+STR_NETWORK_LANG_CHINESE                                        :Chiński
+STR_NETWORK_LANG_CZECH                                          :Czeski
+STR_NETWORK_LANG_DANISH                                         :Duński
+STR_NETWORK_LANG_DUTCH                                          :Holenderski
+STR_NETWORK_LANG_ESPERANTO                                      :Esperanto
+STR_NETWORK_LANG_FINNISH                                        :Fiński
+STR_NETWORK_LANG_HUNGARIAN                                      :Węgierski
+STR_NETWORK_LANG_ICELANDIC                                      :Islandzki
+STR_NETWORK_LANG_ITALIAN                                        :Włoski
+STR_NETWORK_LANG_JAPANESE                                       :Japoński
+STR_NETWORK_LANG_KOREAN                                         :Koreański
+STR_NETWORK_LANG_LITHUANIAN                                     :Litewski
+STR_NETWORK_LANG_NORWEGIAN                                      :Norweski
+STR_NETWORK_LANG_POLISH                                         :Polski
+STR_NETWORK_LANG_PORTUGUESE                                     :Portugalski
+STR_NETWORK_LANG_ROMANIAN                                       :Rumuński
+STR_NETWORK_LANG_RUSSIAN                                        :Rosyjski
+STR_NETWORK_LANG_SLOVAK                                         :Słowacki
+STR_NETWORK_LANG_SLOVENIAN                                      :Słoweński
+STR_NETWORK_LANG_SPANISH                                        :Hiszpański
+STR_NETWORK_LANG_SWEDISH                                        :Szwedzki
+STR_NETWORK_LANG_TURKISH                                        :Turecki
+STR_NETWORK_LANG_UKRAINIAN                                      :Ukraiński
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Lobby gry wieloosobowej
@@ -1498,9 +1525,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Nazwa firmy:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Inauguracja:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Wartość firmy:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Bieżący bilans:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Przychód w ostatnim roku:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Wartość firmy:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Bieżący bilans:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Przychód w ostatnim roku:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Wydajność:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Pojazdy:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1639,7 +1666,7 @@
 STR_1004_TOO_HIGH                                               :{WHITE}Zbyt wysoko
 STR_1005_NO_SUITABLE_RAILROAD_TRACK                             :{WHITE}Nieodpowiednie tory
 STR_1007_ALREADY_BUILT                                          :{WHITE}...już zbudowano
-STR_1008_MUST_REMOVE_RAILROAD_TRACK                             :{WHITE}Najpierw trzeba usunąć tory
+STR_1008_MUST_REMOVE_RAILROAD_TRACK                             :{WHITE}Należy najpierw usunąć tory
 STR_100A_RAILROAD_CONSTRUCTION                                  :{WHITE}Konstrukcja torowiska
 STR_TITLE_ELRAIL_CONSTRUCTION                                   :{WHITE}Konstrukcja elektryfikowanego torowiska
 STR_100B_MONORAIL_CONSTRUCTION                                  :{WHITE}Konstrukcja torowiska jednoszynowego
@@ -1651,7 +1678,7 @@
 STR_1011_CAN_T_BUILD_RAILROAD_TRACK                             :{WHITE}Nie można tutaj ułożyć torów...
 STR_1012_CAN_T_REMOVE_RAILROAD_TRACK                            :{WHITE}Nie można stąd usunąć torów...
 STR_1013_CAN_T_REMOVE_SIGNALS_FROM                              :{WHITE}Nie można stąd usunąć sygnałów...
-STR_1014_TRAIN_DEPOT_ORIENTATION                                :{WHITE}Orientacja zajezdni
+STR_1014_TRAIN_DEPOT_ORIENTATION                                :{WHITE}Ukierunkowanie zajezdni
 STR_1015_RAILROAD_CONSTRUCTION                                  :Konstrukcja torowiska
 STR_TOOLB_ELRAIL_CONSTRUCTION                                   :Konstrukcja elektryfikowanego torowiska
 STR_1016_MONORAIL_CONSTRUCTION                                  :Konstrukcja torowiska jednoszynowego
@@ -1664,37 +1691,60 @@
 STR_101D_BUILD_RAILROAD_TUNNEL                                  :{BLACK}Budowa tunelu kolejowego
 STR_101E_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Przełącz buduj/usuń dla torów i semaforów
 STR_101F_BRIDGE_SELECTION_CLICK                                 :{BLACK}Wybór mostu - klik na wybranym moście aby go zbudować
-STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO                       :{BLACK}Wybierz orientacje zajezdni kolejowej
-STR_1021_RAILROAD_TRACK                                         :Tory
+STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO                       :{BLACK}Wybierz ukierunkowanie zajezdni kolejowej
+STR_1021_RAILROAD_TRACK                                         :Tory kolejowe
 STR_1023_RAILROAD_TRAIN_DEPOT                                   :Zajezdnia kolejowa
 STR_1024_AREA_IS_OWNED_BY_ANOTHER                               :{WHITE}...teren jest własnością innej firmy
 STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS                          :Tory kolejowe ze zwykłą sygnalizacją
 STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Tory kolejowe z pre-sygnałami
-STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Tory kolejowe z sygnalizacją wyjsciową
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Tory kolejowe z sygnalizacja combo
+STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Tory kolejowe z exit-sygnałami
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Tory kolejowe z combo-sygnałami
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Torry kolejowe z normalnymi i pre-sygnałami
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Tory kolejowe z normalnymi i exit-sygnałami
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Tory kolejowe z normalnymi i combo-sygnałami
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Tory kolejowe z pre- i exit-sygnałami
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Tory kolejowe z pre- i combo-sygnałami
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Tory kolejowe z exit- i combo-sygnałami
 
 
 
 ##id 0x1800
-STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Trzeba najpierw usunąć drogę
+STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Należy najpierw usunąć drogę
 STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Trwają roboty drogowe
 STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Tworzenie dróg
+STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Budowa torowiska tramwajowego
 STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Wybierz most drogowy
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}... drogi jednokierunkowe nie mogą mieć skrzyżowań
 STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Nie można tutaj zbudować drogi...
+STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}Nie można tutaj zbudować torowiska...
 STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Nie można usunąć drogi z tego miejsca...
-STR_1806_ROAD_DEPOT_ORIENTATION                                 :{WHITE}Orientacja zajezdni samochodowej
+STR_1805_CAN_T_REMOVE_TRAMWAY_FROM                              :{WHITE}Nie można torowiska z tego miejsca...
+STR_1806_ROAD_DEPOT_ORIENTATION                                 :{WHITE}Ukierunkowanie zajezdni samochodowej
+STR_1806_TRAM_DEPOT_ORIENTATION                                 :{WHITE}Orientacja zajezdni
 STR_1807_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}Nie można tutaj zbudować zajezdni...
+STR_1807_CAN_T_BUILD_TRAM_VEHICLE                               :{WHITE}Nie można tutaj zbudować zajezdni...
 STR_1808_CAN_T_BUILD_BUS_STATION                                :{WHITE}Nie można zbudować przystanku...
 STR_1809_CAN_T_BUILD_TRUCK_STATION                              :{WHITE}Nie można zbudować stacji ciężarówek...
+STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION                     :{WHITE}Nie można zbudować przystanku tramwajowego...
+STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION                         :{WHITE}Nie można zbudować tramwajowej stacji załadunkowej...
 STR_180A_ROAD_CONSTRUCTION                                      :Budowa drogi
+STR_180A_TRAMWAY_CONSTRUCTION                                   :Budowa torowiska tramwajowego
 STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Sekcja budowy dróg
-STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Zbuduj zajezdnie samochodową (do budowania i serwisowania pojazdów)
+STR_180B_BUILD_TRAMWAY_SECTION                                  :{BLACK}Zbuduj fragment torowiska tramwajowego
+STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Zbuduj zajezdnię samochodową (do budowania i serwisowania pojazdów)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT                               :{BLACK}Zbuduj zajezdnię tramwajową (do budowania i serwisowania pojazdów)
 STR_180D_BUILD_BUS_STATION                                      :{BLACK}Budowa przystanku
 STR_180E_BUILD_TRUCK_LOADING_BAY                                :{BLACK}Zbuduj stację załadunku ciężarówek
+STR_180D_BUILD_PASSENGER_TRAM_STATION                           :{BLACK}Zbuduj przystanek tramwajowy
+STR_180E_BUILD_CARGO_TRAM_STATION                               :{BLACK}Zbuduj tramwajową stację załadunkową
 STR_180F_BUILD_ROAD_BRIDGE                                      :{BLACK}Budowa mostu drogowego
+STR_180F_BUILD_TRAMWAY_BRIDGE                                   :{BLACK}Zbuduj most tramwajowy
 STR_1810_BUILD_ROAD_TUNNEL                                      :{BLACK}Budowa tunelu drogowego
+STR_1810_BUILD_TRAMWAY_TUNNEL                                   :{BLACK}Zbuduj tunel tramwajowy
 STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Przełącz buduj/usuń dla konstrukcji dróg
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS                       :{BLACK}Przełącz buduj/usuń dla konstrukcji torowiska tramwajowego
 STR_1813_SELECT_ROAD_VEHICLE_DEPOT                              :{BLACK}Wybierz umiejscowienie zajezdni samochodowej
+STR_1813_SELECT_TRAM_VEHICLE_DEPOT                              :{BLACK}Wybierz ukierunkowanie zajezdni tramwajowej
 STR_1814_ROAD                                                   :Droga
 STR_1815_ROAD_WITH_STREETLIGHTS                                 :Droga z oświetleniem ulicznym
 STR_1816_TREE_LINED_ROAD                                        :Droga z drzewami
@@ -1702,6 +1752,8 @@
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Przejazd kolejowy
 STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Nie można usunąć przystanku...
 STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Nie można usunąć stacji załadunkowej...
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION                         :{WHITE}Nie można usunąć przystanku tramwajowego...
+STR_CAN_T_REMOVE_CARGO_TRAM_STATION                             :{WHITE}Nie można usunąć tramwajowej stacji załadunkowej...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Miasta
@@ -1709,8 +1761,8 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
-STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Budynek musi być najpierw zburzony
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
+STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Należy najpierw zburzyć budynek
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Populacja: {ORANGE}{COMMA}{BLACK}  Domów: {ORANGE}{COMMA}
 STR_2007_RENAME_TOWN                                            :Zmień nazwę miasta
@@ -1742,7 +1794,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Pokaż informacje o lokalnych władzach
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} lokalne władze
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Ocena transportu firmy:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subsydia
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Oferta subsydiów dla usługi przewozu:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} z {STRING} do {STRING}
@@ -1813,7 +1865,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...drzewo już tu jest
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...niewłaściwe miejsce
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Nie można posadzić drzewa...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...zbyt wiele napisów
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Nie można umieścić napisu...
 STR_280A_SIGN                                                   :Napis
@@ -1827,7 +1879,7 @@
 ##id 0x3000
 STR_3000_RAIL_STATION_SELECTION                                 :{WHITE}Wybór stacji
 STR_3001_AIRPORT_SELECTION                                      :{WHITE}Wybór lotniska
-STR_3002_ORIENTATION                                            :{BLACK}Orientacja
+STR_3002_ORIENTATION                                            :{BLACK}Ukierunkowanie
 STR_3003_NUMBER_OF_TRACKS                                       :{BLACK}Ilość peronów
 STR_3004_PLATFORM_LENGTH                                        :{BLACK}Długość peronu
 STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD                          :{WHITE}Zbyt blisko innej stacji
@@ -1838,9 +1890,9 @@
 STR_3008B_TOO_MANY_TRUCK_STOPS                                  :{WHITE}Za dużo  wiele stacji załadunku ciężarówek
 STR_3009_TOO_CLOSE_TO_ANOTHER_STATION                           :{WHITE}Zbyt  blisko innej stacji
 STR_300A_0                                                      :{WHITE}{STATION} {STATIONFEATURES}
-STR_300B_MUST_DEMOLISH_RAILROAD                                 :{WHITE}Najpierw musisz zniszczyć stację
+STR_300B_MUST_DEMOLISH_RAILROAD                                 :{WHITE}Należy najpierw usunąc stację
 STR_300D_TOO_CLOSE_TO_ANOTHER_AIRPORT                           :{WHITE}Zbyt blisko innego lotniska
-STR_300E_MUST_DEMOLISH_AIRPORT_FIRST                            :{WHITE}Najpierw  musisz zniszczyć lotnisko
+STR_300E_MUST_DEMOLISH_AIRPORT_FIRST                            :{WHITE}Należy najpierw usunąć lotnisko
 
 STR_3030_RENAME_STATION_LOADING                                 :Zmień nazwę stacji
 STR_3031_CAN_T_RENAME_STATION                                   :{WHITE}Nie można zmienić nazwy.
@@ -1864,21 +1916,27 @@
 STR_303F_NO_LONGER_ACCEPTS_OR                                   :{WHITE}{STATION} już nie akceptuje {STRING.d} ani {STRING.d}
 STR_3040_NOW_ACCEPTS                                            :{WHITE}{STATION} już akceptuje {STRING}
 STR_3041_NOW_ACCEPTS_AND                                        :{WHITE}{STATION} już akceptuje {STRING} i {STRING}
-STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Orientacja przystanku
-STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Orientacja st. załadunku
-STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Najpierw musisz zniszczyć przystanek
-STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Najpierw musisz zniszczyć stację załadunku ciężarówek
+STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Ukierunkowanie przystanku
+STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Ukierunkowanie st. załadunku
+STR_3042_PASSENGER_TRAM_STATION_ORIENTATION                     :{WHITE}Ukierunkowanie przystanku tramwajowego
+STR_3043_CARGO_TRAM_STATION_ORIENT                              :{WHITE}Ukierunkowanie tramwajowej stacji załadunkowej
+STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Należy najpierw usunąć przystanek
+STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Należy najpierw usunąć stację załadunku ciężarówek
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION                   :{WHITE}Najpierw musisz zniszczyć przystanek tramwajowy
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION                       :{WHITE}Najpierw musisz zniszczyć tramwajową stację załadunkową
 STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA}
 STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
 STR_304A_NONE                                                   :{YELLOW}- Nic -
 STR_304B_SITE_UNSUITABLE                                        :{WHITE}...niewłaściwe miejsce
 STR_304C_TOO_CLOSE_TO_ANOTHER_DOCK                              :{WHITE}Zbyt blisko innego portu
-STR_304D_MUST_DEMOLISH_DOCK_FIRST                               :{WHITE}Najpierw musisz zniszczyć port
-STR_304E_SELECT_RAILROAD_STATION                                :{BLACK}Wybierz orientacje stacji
+STR_304D_MUST_DEMOLISH_DOCK_FIRST                               :{WHITE}Należy najpierw usunąć port
+STR_304E_SELECT_RAILROAD_STATION                                :{BLACK}Wybierz ukierunkowanie stacji
 STR_304F_SELECT_NUMBER_OF_PLATFORMS                             :{BLACK}Wybierz ilość peronów na stacji
 STR_3050_SELECT_LENGTH_OF_RAILROAD                              :{BLACK}Wybierz długość stacji
-STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Wybierz orientacje przystanku
-STR_3052_SELECT_TRUCK_LOADING_BAY                               :{BLACK}Orientacja stacji załadunku ciężarówek
+STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Wybierz ukierunkowanie przystanku
+STR_3052_SELECT_TRUCK_LOADING_BAY                               :{BLACK}Ukierunkowanie stacji załadunku ciężarówek
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION              :{BLACK}Wybierz ukierunkowanie przystanku tramwajowego
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION                  :{BLACK}Wybierz ukierunkowanie tramwajowej stacji załadunkowej
 STR_3053_CENTER_MAIN_VIEW_ON_STATION                            :{BLACK}Centruj główny widok na stacji
 STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}Pokaż ocenę stacji
 STR_3055_CHANGE_NAME_OF_STATION                                 :{BLACK}Zmień nazwę stacji
@@ -1908,14 +1966,15 @@
 STR_STAT_CLASS_WAYP                                             :Pkt. kontrolne
 
 ##id 0x3800
-STR_3800_SHIP_DEPOT_ORIENTATION                                 :{WHITE}Orientacja stoczni
+STR_3800_SHIP_DEPOT_ORIENTATION                                 :{WHITE}Ukierunkowanie stoczni
 STR_3801_MUST_BE_BUILT_ON_WATER                                 :{WHITE}...musi być wybudowane na wodzie
 STR_3802_CAN_T_BUILD_SHIP_DEPOT                                 :{WHITE}Nie można tutaj wybudować stoczni...
-STR_3803_SELECT_SHIP_DEPOT_ORIENTATION                          :{BLACK}wybierz orientację stoczni
+STR_3803_SELECT_SHIP_DEPOT_ORIENTATION                          :{BLACK}wybierz ukierunkowanie stoczni
 STR_3804_WATER                                                  :Woda
 STR_3805_COAST_OR_RIVERBANK                                     :Wybrzeże lub brzeg rzeki
 STR_3806_SHIP_DEPOT                                             :Stocznia
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...Nie można wybudować na wodzie
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Należy najpierw usunąć kanał
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Zapisz grę
@@ -1925,9 +1984,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} MB wolnego miejsca
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Nie można odczytać napędu
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Nie można zapisać gry
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Nie można zapisać gry{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Nie można usunąć pliku
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Nie można wczytać gry
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Nie można wczytać gry{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Błąd wewnętrzny: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Zepsuta zapisana gra - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Zapisana gra zrobiona w nowszej wersji
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :Plik nie jest odczytywalny
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :Plik nie jest zapisywalny
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Lista napędów, katalogów i zapisanych gier
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Obecnie zaznaczona nazwa dla zapisanej gry
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Skasuj zaznaczoną zapisaną grę
@@ -2046,8 +2110,8 @@
 STR_5001_ROAD_VEHICLE_IN_TUNNEL                                 :{WHITE}Samochód w tunelu
 STR_5003_ANOTHER_TUNNEL_IN_THE_WAY                              :{WHITE}Inny tunel na drodze
 STR_5005_UNABLE_TO_EXCAVATE_LAND                                :{WHITE}Nie można wydrążyć drugiego końca tunelu
-STR_5006_MUST_DEMOLISH_TUNNEL_FIRST                             :{WHITE}Trzeba najpierw zniszczyć tunel
-STR_5007_MUST_DEMOLISH_BRIDGE_FIRST                             :{WHITE}Trzeba najpierw zniszczyć most
+STR_5006_MUST_DEMOLISH_TUNNEL_FIRST                             :{WHITE}Należy najpierw usunąć tunel
+STR_5007_MUST_DEMOLISH_BRIDGE_FIRST                             :{WHITE}Należy najpierw usunąć most
 STR_5008_CANNOT_START_AND_END_ON                                :{WHITE}Nie można zaczynać i kończyć w tym samym miejscu
 STR_5009_LEVEL_LAND_OR_WATER_REQUIRED                           :{WHITE}Wymagany równy ląd lub woda pod mostem
 STR_500A_START_AND_END_MUST_BE_IN                               :{WHITE}Początek i koniec muszą być w jednej linii
@@ -2134,6 +2198,7 @@
 STR_SV_STNAME_LOWER                                             :{STRING} Dolny
 STR_SV_STNAME_HELIPORT                                          :{STRING} Lądowisko
 STR_SV_STNAME_FOREST                                            :{STRING} Las
+STR_SV_STNAME_FALLBACK                                          :{STRING} Stacja #{NUM}
 
 ############ end of savegame specific region!
 
@@ -2212,7 +2277,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Gracz {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Nowa Twarz
 STR_7005_COLOR_SCHEME                                           :{BLACK}Schemat Koloru
@@ -2224,7 +2289,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Nazwisko prezesa
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Nie można zmienić nazwy firmy...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Nie można zmienić nazwiska prezesa...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finanse {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finanse {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Wydatki/Przychody
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Konstrukcje
@@ -2240,20 +2305,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Przychód ze statków
 STR_701C_LOAN_INTEREST                                          :{GOLD}Odsetki od pożyczki
 STR_701D_OTHER                                                  :{GOLD}Inne
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Łącznie:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Wykres przychodów
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Wykres obrotów
 STR_7026_BANK_BALANCE                                           :{WHITE}Bilans bankowy
 STR_7027_LOAN                                                   :{WHITE}Pożyczka
-STR_MAX_LOAN                                                    :{WHITE}Maks. pożyczka:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Pożyczka {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Zwrot {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Maks. pożyczka:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Pożyczka {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Zwrot {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...maksymalna dozwolona pożyczka wynosi {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Nie można pożyczyć więcej pieniędzy...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...pożyczka już jest spłacona
@@ -2292,8 +2357,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Ocena działalności firmy (max. ocena=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Wartości firm
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Tabela Ligi Firm
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Firma ma problemy!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} będzie odsprzedane lub ogłoszone upadłym jeżeli zysk firmy nie wzrośnie!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Prezes)
@@ -2331,7 +2396,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Światowa recesja!{}{}Eksperci finansowi obawiają się najgorszego z powodu kryzysu!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Koniec recesji!{}{}Polepszenie się transakcji handlowych daje pewność przedsiębiorstwom dzięki umacniającej się ekonomii!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Przełącz duży/mały rozmiar okna
-STR_7076_COMPANY_VALUE                                          :{GOLD}Wartość firmy: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Wartość firmy: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Kup 25% udziałów w firmie
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Sprzedaj 25% udziałów w firmie
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Kup 25% udziałów w tej firmie
@@ -2362,6 +2427,8 @@
 STR_LIVERY_HELICOPTER                                           :Helikopter
 STR_LIVERY_SMALL_PLANE                                          :Mały samolot
 STR_LIVERY_LARGE_PLANE                                          :Duży samolot
+STR_LIVERY_PASSENGER_TRAM                                       :Tramwaj pasażerski
+STR_LIVERY_FREIGHT_TRAM                                         :Tramwaj towarowy
 
 STR_LIVERY_GENERAL_TIP                                          :{BLACK}Pokaż ogólne schematy koloru
 STR_LIVERY_TRAIN_TIP                                            :{BLACK}Pokaż schematy koloru pociągów
@@ -2647,7 +2714,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}Zajezdnia w {TOWN}
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Mieszkańcy świętują . . .{}Pierwszy pociąg przybył do {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Szczegóły)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Szczegóły)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Pociąg na drodze
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2668,6 +2735,7 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Idź bez zatrzymywania do zajezdni w {TOWN}
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Idź bez zatrzymywania do serwisu w zajezdni w {TOWN}
 
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Zmierza do zajezdni w {TOWN}
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Zmierza do zajezdni w {TOWN}, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Serwisuj w Zajezdni w {TOWN}
@@ -2714,8 +2782,8 @@
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Serwis
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Nie można wybudować lokomotywy...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Budowa: {LTBLUE}{NUM}{BLACK} Wartość: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Wartość: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Budowa: {LTBLUE}{NUM}{BLACK} Wartość: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Wartość: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Załadunek / Wyładunek
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Pociąg musi być zatrzymany w zajezdni
@@ -2725,6 +2793,8 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Nie można wstawić polecenia...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Nie można usunąć tego polecenia...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Nie można zmodyfikować tego polecenia...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Nie można pominąć obecnego zadania...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Nie można przejść do wybranego zadania...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Nie można ruszyć pojazdem...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}Tylna lokomotywa zawsze porusza się razem z przednią
 STR_8838_N_A                                                    :N/D{SKIP}
@@ -2790,8 +2860,9 @@
 STR_TRAIN_START_NO_CATENARY                                     :Ta trasa nie jest zelektryfikowana, wiec pociąg nie wystartuje
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Dostępn{G y a e} now{G y a e} {STRING}!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Dostępn{G y a e} now{G y a e} {STRING} - {STRING}!
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Dostępn{G y a e} now{G y a e} {STRING} - {ENGINE}!
+
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Samochód na drodze
@@ -2807,7 +2878,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Max. prędkość: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Zysk w tym roku: {LTBLUE}{CURRENCY}  (ostatni rok: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Niezawodność: {LTBLUE}{COMMA}%  {BLACK}Awarie od ostatniego serwisowania: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Zbudowany: {LTBLUE}{NUM}{BLACK} Wartość: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Zbudowany: {LTBLUE}{NUM}{BLACK} Wartość: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Pojemność: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...musi być zatrzymany w zajezdni samochodowej
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Nie można sprzedać samochodu...
@@ -2834,12 +2905,16 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Lista wyboru samochodów - klik na pojeździe po więcej informacji
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Zbuduj wybrany samochód
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Koszt: {CURRENCY}{}Prędkość: {VELOCITY}{}Utrzymanie: {CURRENCY}/rok{}Pojemność: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Pojemność: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Nazwij samochód
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Nie można nazwać samochodu...
 STR_902E_NAME_ROAD_VEHICLE                                      :{BLACK}Nazwij samochód
 STR_902F_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Mieszkańcy świętują . . .{}Pierwszy autobus przybył do {STATION}!
 STR_9030_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Mieszkańcy świętują . . .{}Pierwsza ciężarówka przybyła do {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Mieszkańcy świętują . . .{}Pierwszy tramwaj pasażerski przybył do {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Mieszkańcy świętują . . .{}Pierwszy tramwaj towarowy przybył do {STATION}!
 STR_9031_ROAD_VEHICLE_CRASH_DRIVER                              :{BLACK}{BIGFONT}Wypadek samochodowy!{}Kierowca zginął w zderzeniu z pociągiem
 STR_9032_ROAD_VEHICLE_CRASH_DIE                                 :{BLACK}{BIGFONT}Wypadek samochodowy!{}{COMMA} ofiar{P a y ""} zderzenia z pociągiem
 STR_9033_CAN_T_MAKE_VEHICLE_TURN                                :{WHITE}Nie można zawrócić samochodu...
@@ -2879,7 +2954,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Max. prędkość: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Zysk w tym roku: {LTBLUE}{CURRENCY}  (w ostatnim roku: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Niezawodność: {LTBLUE}{COMMA}%  {BLACK}Awarie od ostatniego serwisowania: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Wybudowany: {LTBLUE}{NUM}{BLACK} Wartość: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Wybudowany: {LTBLUE}{NUM}{BLACK} Wartość: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Pojemność: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Nie można zatrzymać/ruszyć statku...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Nie można wysłać statku do stoczni...
@@ -2947,7 +3022,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Max. prędkość: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Zysk w tym roku: {LTBLUE}{CURRENCY}  (w ostatnim roku: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Niezawodność: {LTBLUE}{COMMA}%  {BLACK}Awarie od ostatniego serwisowania: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Zbudowany: {LTBLUE}{NUM}{BLACK} Wartość: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Zbudowany: {LTBLUE}{NUM}{BLACK} Wartość: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Nie można wysłać samolotu do hangaru...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Zmierza do hangaru w {STATION}
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Zmierza do hangaru w {STATION}, {VELOCITY}
@@ -3000,6 +3075,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Idź do hangaru na {STATION}
 SERVICE_AT_AIRPORT_HANGAR                                       :Serwisuj w hangarze na {STATION}
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Rozkład jazdy)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Katastrofa Zeppelina na {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Samochód zniszczony w kolizji z 'UFO'!
@@ -3124,6 +3201,7 @@
 
 ### depot strings
 STR_DEPOT_SELL_CONFIRMATION_TEXT                                :{YELLOW}Sprzedasz wszystkie pojazdy z zajezdni. Jesteś pewien?
+STR_DEPOT_WRONG_DEPOT_TYPE                                      :Zły typ zajezdni
 
 STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP                             :{BLACK}Sprzedaj wszystkie pociągi z zajezdni
 STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP                           :{BLACK}Sprzedaj wszystkie samochody z zajezdni
@@ -3240,6 +3318,8 @@
 STR_START_DATE_QUERY_CAPT                                       :{WHITE}Zmień datę rozpoczęcia
 STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Ostrzeżenie o skali
 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}Nie zaleca się zbyt dużej zmiany wielkości mapy źrodłowej. Kontynuować tworzenie?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Ostrzeżenie o planie miasta
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}Model rozwoju miasta "bez nowych dróg" nie jest polecany. Kontynuować tworzenie?
 STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
 STR_HEIGHTMAP_NAME                                              :{BLACK}Nazwa mapy wysokosci:
 STR_HEIGHTMAP_SIZE                                              :{BLACK}Rozmiar: {ORANGE}{NUM} x {NUM}
@@ -3312,3 +3392,51 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Przełącz przeźroczystość infrastruktury takiej jak stacje, zajezdnie, punkty kontrolne i trakcja elektryczna
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Przełącz przeźroczystość mostów
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Przełącz przeźroczystość obiektów takich jak latarnie morskie i nadajniki, być może w przyszłości dodatki graficzne
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Przełącz przeźroczystość wskaźników załadunku
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+
+##### Mass Order
+STR_GROUP_NAME_FORMAT                                           :Grupa {COMMA}
+STR_GROUP_TINY_NAME                                             :{TINYFONT}{GROUP}
+STR_GROUP_ALL_TRAINS                                            :Wszystkie pociągi
+STR_GROUP_ALL_ROADS                                             :Wszystkie samochody
+STR_GROUP_ALL_SHIPS                                             :Wszystkie statki
+STR_GROUP_ALL_AIRCRAFTS                                         :Wszystkie samoloty
+STR_GROUP_TINY_NUM                                              :{TINYFONT}{COMMA}
+STR_GROUP_REMOVE_ALL_VEHICLES                                   :Usuń wszystkie pojazdy
+
+STR_GROUP_TRAINS_CAPTION                                        :{WHITE}{GROUP} - {COMMA} Pociąg{P "" i ów}
+STR_GROUP_ROADVEH_CAPTION                                       :{WHITE}{GROUP} - {COMMA} Samoch{P ód ody odów}
+STR_GROUP_SHIPS_CAPTION                                         :{WHITE}{GROUP} - {COMMA} Stat{P ek ki ków}
+STR_GROUP_AIRCRAFTS_CAPTION                                     :{WHITE}{GROUP} - {COMMA} Samolot{P "" y ów}
+STR_GROUP_RENAME_CAPTION                                        :{BLACK}Zmień nazwę grupy
+
+STR_GROUP_CAN_T_CREATE                                          :{WHITE}Nie można stworzyć grupy...
+STR_GROUP_CAN_T_DELETE                                          :{WHITE}Nie można usunąć tej grupy...
+STR_GROUP_CAN_T_RENAME                                          :{WHITE}Nie można zmienić nazwy grupy...
+STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES                             :{WHITE}Nie można usunąć wszystkich pojazdów z tej grupy...
+STR_GROUP_CAN_T_ADD_VEHICLE                                     :{WHITE}Nie można dodać pojazdu do tej grupy...
+
+STR_GROUP_CREATE_TIP                                            :{BLACK}Kliknij aby stworzyć grupę
+STR_GROUP_DELETE_TIP                                            :{BLACK}Usuń zaznaczoną grupę
+STR_GROUP_RENAME_TIP                                            :{BLACK}Zmień nazwę zaznaczonej grupy
+
+STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR                        :{TINYFONT}{BLACK}Zysk w tym roku: {GREEN}{CURRENCY} {BLACK}(w ostatnim roku: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR                         :{TINYFONT}{BLACK}Zysk w tym roku: {RED}{CURRENCY} {BLACK}(w ostatnim roku: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Zysk w tym roku: {GREEN}{CURRENCY} {BLACK}(w ostatnim roku: {RED}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Zysk w tym roku: {RED}{CURRENCY} {BLACK}(w ostatnim roku: {RED}{CURRENCY}{BLACK})
+
+STR_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
+########
--- a/src/lang/portuguese.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/portuguese.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Fora da borda do mapa
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Muito perto da borda do mapa
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Dinheiro insuficiente - necessário {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}É necessário terreno plano
 STR_0008_WAITING                                                :{BLACK}Em espera: {WHITE}{STRING}
@@ -495,7 +495,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Autoridade local: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Nenhum
 STR_01AA_NAME                                                   :{BLACK}Nome
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1
@@ -778,6 +778,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Configurações de dificuldade
 STR_02C7_CONFIG_PATCHES                                         :Configurar correcções
 STR_NEWGRF_SETTINGS                                             :Definições Newgrf
+STR_TRANSPARENCY_OPTIONS                                        :Opções de Transparência
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Mostrar nomes de cidades
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Mostrar nomes de estações
@@ -805,7 +806,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Mapa do mundo
 STR_EXTRA_VIEW_PORT                                             :Visualizador extra
 STR_SIGN_LIST                                                   :Lista de sinais
-STR_TRANSPARENCY_OPTIONS                                        :Opções de Transparência
 STR_02DF_TOWN_DIRECTORY                                         :Lista de cidades
 STR_TOWN_POPULATION                                             :{BLACK}População Mundial: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Visualizador {COMMA}
@@ -1184,7 +1184,7 @@
 STR_CHEATS                                                      :{WHITE}Truques
 STR_CHEATS_TIP                                                  :{BLACK}As caixas de verificação indicam se já usou este truque antes
 STR_CHEATS_WARNING                                              :{BLACK}Atenção! Está prestes a trair os seus oponentes. Tenha em conta que isto ficará registado para sempre.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Aumentar dinheiro em {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Aumentar dinheiro em {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Jogar pelo jogador: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Bulldozer mágico (destrói indústrias, etc.): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Os túneis poderão cruzar-se: {ORANGE}{STRING}
@@ -1439,9 +1439,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Nome da empresa:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Inauguração:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Valor da Companhia: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Balanço actual: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Rendimento do último ano: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Valor da Companhia: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Balanço actual: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Rendimento do último ano: {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Desempenho: {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Veículos:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1651,7 +1651,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}O edifício deve ser demolido primeiro
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}População: {ORANGE}{COMMA}{BLACK}  Casas: {ORANGE}{COMMA}
@@ -1684,7 +1684,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Ver informações sobre a autoridade local
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} autoridade local
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Avaliações da companhia de transporte
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subsídios
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Oferta de subsídios para os serviços:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} de {STRING} para {STRING}
@@ -1755,7 +1755,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...árvore já plantada aqui
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...local impróprio
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Impossível plantar árvore aqui...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...demasiados sinais
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Não pode colocar um sinal aqui...
 STR_280A_SIGN                                                   :Sinal
@@ -1867,9 +1867,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabytes livres
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Não é possível ler unidade
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Falha ao Guardar Jogo
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Falha ao Guardar Jogo{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Não é possível eliminar ficheiro
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Falha ao Abrir Jogo
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Falha ao Abrir Jogo{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Lista de unidades, directorias e ficheiros de jogos guardados
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nome escolhido para guardar o jogo
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Eliminar o jogo guardado seleccionado
@@ -2041,7 +2041,7 @@
 STR_SV_STNAME_HELIPORT                                          :Heliporto de {STRING}
 STR_SV_STNAME_FOREST                                            :Floresta de {STRING}
 
-STR_SV_GROUP_NAME                                               :{GROUP}
+
 
 ############ end of savegame specific region!
 
@@ -2121,7 +2121,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Jogador {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Nova Cara
 STR_7005_COLOR_SCHEME                                           :{BLACK}Cores
@@ -2133,7 +2133,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Nome do Presidente
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Não é possível alterar o nome da empresa...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Não é possível alterar o nome do presidente...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finanças {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finanças {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Despesas/Lucros
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Construção
@@ -2149,20 +2149,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Lucros dos Barcos
 STR_701C_LOAN_INTEREST                                          :{GOLD}Juros do Empréstimo
 STR_701D_OTHER                                                  :{GOLD}Outros
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Total:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Gráfico de Rendimentos
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Gráfico de Benefícios Operativos
 STR_7026_BANK_BALANCE                                           :{WHITE}Balanço Bancário
 STR_7027_LOAN                                                   :{WHITE}Empréstimo
-STR_MAX_LOAN                                                    :{WHITE}Empréstimo Máximo:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Pedir emprestado {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Pagar empréstimo {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Empréstimo Máximo:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Pedir emprestado {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Pagar empréstimo {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...o empréstimo máximo permitido é de {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Não é possível pedir mais dinheiro emprestado...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...não há empréstimo para pagar
@@ -2201,8 +2201,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Avaliações da empresa (máximo=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Valor da empresa
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Classificação de Empresas
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Empresa de transportes em dificuldades!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} será vendida ou declarada falida a menos que melhore os seus rendimentos em breve!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Presidente)
@@ -2240,7 +2240,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Retrocesso Mundial!{}{}Especialistas financeiros temem crise económica!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Fim do retrocesso!{}{}Melhoras no comércio inspiram confiança nas indústrias à medida que a economia se fortalece!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Alternar entre janela grande/pequena
-STR_7076_COMPANY_VALUE                                          :{GOLD}Valor da empresa: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Valor da empresa: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Comprar 25% de acções
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Vender 25% de acções
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Comprar 25% de acções nesta empresa
@@ -2550,7 +2550,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Depósito Ferroviário
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Cidadãos celebram . . .{}Primeiro comboio chega a {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Detalhes)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Detalhes)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Comboio no caminho
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2571,6 +2571,7 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Ir sem parar para o depósito de {TOWN}
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Manutenção no depósito de {TOWN} sem parar
 
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Dirige-se ao depósito de {TOWN}
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Dirige-se ao depósito de {TOWN}, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Serviço no depósito de {TOWN}
@@ -2617,8 +2618,8 @@
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Manutenção
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Não é possível construir veículo ferroviário...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Valor: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Valor: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}A carregar / descarregar
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Comboio tem que estar parado dentro do depósito
@@ -2693,8 +2694,9 @@
 STR_TRAIN_START_NO_CATENARY                                     :Esta linha não tem catenária, o comboio não pode arrancar
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Novo {STRING} agora disponível!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Novo {STRING} agora disponível! - {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Novo {STRING} agora disponível! - {ENGINE}
+
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Veículo de estrada no caminho
@@ -2710,7 +2712,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Velocidade Máx.: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Lucros deste ano: {LTBLUE}{CURRENCY}  (último ano: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Fiabilidade: {LTBLUE}{COMMA}%  {BLACK}Avarias desde a última manutenção: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Capacidade: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...deve estar parado num depósito de veículos de estrada
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Não é possível vender veículo de estrada...
@@ -2737,6 +2739,7 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Lista de veículos de estrada - clique num veículo para informações
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Construir o veículo de estrada seleccionado
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Custo: {CURRENCY}{}Velocidade: {VELOCITY}{}Custo de circulação: {CURRENCY}/ano{}Capacidade: {CARGO}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Renomear veículo de estrada
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Não é possível renomear veículo de estrada...
@@ -2782,7 +2785,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Velocidade Máx.: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Lucros deste ano: {LTBLUE}{CURRENCY}  (último ano: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Fiabilidade: {LTBLUE}{COMMA}%  {BLACK}Avarias desde a última manutenção: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Capacidade: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Não é possível iniciar/parar barco...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Não é possível mandar barco para o depósito...
@@ -2850,7 +2853,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Velocidade Máx.: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Lucros deste ano: {LTBLUE}{CURRENCY}  (último ano: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Fiabilidade: {LTBLUE}{COMMA}%  {BLACK}Avarias desde a última manutenção: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Não é possível mandar aeronave para o hangar...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Dirige-se ao hangar de {STATION}
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Dirige-se ao hangar de {STATION}, {VELOCITY}
@@ -2903,6 +2906,7 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Ir para o hangar de {STATION}
 SERVICE_AT_AIRPORT_HANGAR                                       :Manutenção no hangar de {STATION}
 
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Acidente de Zepelim em {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Veículo de estrada destruído em colisão com OVNI!
@@ -3218,6 +3222,13 @@
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Comutar transparência para pontes
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Comutar transparência para estruturas como faróis-terrestres e antenas (talvez, no futuro, para embelezamentos)
 
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Grupo {COMMA}
 STR_GROUP_TINY_NAME                                             :{TINYFONT}{GROUP}
--- a/src/lang/romanian.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/romanian.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Depăşeşte limita hărţii
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Prea aproape de marginea hărţii
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Nu ai destui bani - îţi trebuie {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Necesită teren plat
 STR_0008_WAITING                                                :{BLACK}În aşteptare: {WHITE}{STRING}
@@ -495,7 +495,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Autoritatea localã: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :nici una
 STR_01AA_NAME                                                   :{BLACK}Nume
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1
@@ -778,6 +778,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Setări dificultate
 STR_02C7_CONFIG_PATCHES                                         :Configurare patch
 STR_NEWGRF_SETTINGS                                             :Setari Newgrf
+STR_TRANSPARENCY_OPTIONS                                        :Optiuni transparenta
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Afişează numele oraşelor
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Afişează numele staţiilor
@@ -805,7 +806,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Harta lumii (F4)
 STR_EXTRA_VIEW_PORT                                             :Extra ecran
 STR_SIGN_LIST                                                   :Lista de semne
-STR_TRANSPARENCY_OPTIONS                                        :Optiuni transparenta
 STR_02DF_TOWN_DIRECTORY                                         :Lista oraşelor
 STR_TOWN_POPULATION                                             :{BLACK}Populatia totala: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Ecran{COMMA}
@@ -1038,7 +1038,7 @@
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Permite mai multe industrii similare in acelasi oras: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Industrii identice pot fi construite aproape una de cealaltã: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Afiseazã intotdeauna data in format lung in bara de stare: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SIGNALSIDE                                   :{LTBLUE}Afiseazã semnalele pe partea de circulatie: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SIGNALSIDE                                   :{LTBLUE}Afişează semafoarele pe partea de circulaţie: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SHOWFINANCES                                 :{LTBLUE}Afiseazã finantele la sfârsitul fiecãrui an: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_NONSTOP                                  :{LTBLUE}Utilizeazã o metodã gen TTDPatch pentru 'non stop': {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ROADVEH_QUEUE                                :{LTBLUE}Autovehiculele formeazã o coadã (cu efecte cuantice): {ORANGE}{STRING}
@@ -1089,6 +1089,7 @@
 STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Service automat pentru elicoptere la helipaduri: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Conecteaza bara de instrumente pentru peisaj cu cea de constructii feroviare/auto/aeriane: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Cand faci scroll cu mouse-ul muta ecranul in directia opusã: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING                             :{LTBLUE}Derulare usoara ecran: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Arata o bara de unelte de masuratori la folosirea uneltelor de constructie: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Arata uniformele companiilor: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES_NONE                                :Niciunul
@@ -1101,6 +1102,18 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :inactiva
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Viteza harta la rotita mouse: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}La pornirea unui joc nou, pune-l pe pauza: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Foloseste lista avanata de vehicule: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Foloseste indicatorii de incarcare: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Foloseste orarul pentru vehicule: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Arata orarul per programari, nu per zile: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE                            :{LTBLUE}Tipul implicit de sina (dupa joc nou/incarcare joc): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Sina normala
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Sina electrificata
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Mono-sina
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :Prima disponibila
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :Ultima disponibila
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :Cea mai folosita
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Nr. max. de trenuri per jucãtor: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Nr. max. de autovehicule pentru un jucãtor: {ORANGE}{STRING}
@@ -1132,7 +1145,7 @@
 STR_CONFIG_PATCHES_ENDING_YEAR                                  :{LTBLUE}Termina jocul in: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SMOOTH_ECONOMY                               :{LTBLUE}Economie cu schimbãri de productie mai reduse, dar mai frecvente
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Permite cumpararea de actiuni de la alte companii
-STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Plasare automatã a semnalelor la fiecare: {ORANGE}{STRING} pãtrãtele
+STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Plasare automată a semafoarelor la fiecare: {ORANGE}{STRING} pătrăţele
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Construieste automat semafaore înainte de: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}Apectul de oras "fara alte drumuri" nu este valid in editorul de scenarii
@@ -1184,7 +1197,7 @@
 STR_CHEATS                                                      :{WHITE}Cheat-uri
 STR_CHEATS_TIP                                                  :{BLACK}Checkbox-urile aratã un cheat folosit anterior
 STR_CHEATS_WARNING                                              :{BLACK}Atentie! Esti pe cale sã-ti trãdezi colegii de joc! Nu uita cã aceastã rusine va rãmâne înregistratã pentru totdeauna!
-STR_CHEAT_MONEY                                                 :{LTBLUE}Mãreste fondurile cu {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Mãreste fondurile cu {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Joacã în locul jucãtorului: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Buldozer magic (demoleazã industrii si lucruri amovibile): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tunelele se pot intersecta: {ORANGE}{STRING}
@@ -1439,9 +1452,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Numele companiei:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Inaugurarea:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Valoarea companiei:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Balanţa curentă:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Venituri anul trecut:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Valoarea companiei:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Balanţa curentă:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Venituri anul trecut:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Performanta:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Vehicule:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1588,10 +1601,10 @@
 STR_100D_SELECT_RAIL_BRIDGE                                     :{WHITE}Alege podul de cale ferată
 STR_100E_CAN_T_BUILD_TRAIN_DEPOT                                :{WHITE}Nu pot construi un depou feroviar aici...
 STR_100F_CAN_T_BUILD_RAILROAD_STATION                           :{WHITE}Nu pot construi o gară aici...
-STR_1010_CAN_T_BUILD_SIGNALS_HERE                               :{WHITE}Nu pot plasa semnale aici...
+STR_1010_CAN_T_BUILD_SIGNALS_HERE                               :{WHITE}Nu pot plasa semafoare aici...
 STR_1011_CAN_T_BUILD_RAILROAD_TRACK                             :{WHITE}Nu pot construi cale ferată aici...
 STR_1012_CAN_T_REMOVE_RAILROAD_TRACK                            :{WHITE}Nu pot înlătura calea ferată...
-STR_1013_CAN_T_REMOVE_SIGNALS_FROM                              :{WHITE}Nu pot înlătura semnalele de aici...
+STR_1013_CAN_T_REMOVE_SIGNALS_FROM                              :{WHITE}Nu pot înlătura semafoarele de aici...
 STR_1014_TRAIN_DEPOT_ORIENTATION                                :{WHITE}Orientarea depoului feroviar
 STR_1015_RAILROAD_CONSTRUCTION                                  :Construcţii feroviare
 STR_TOOLB_ELRAIL_CONSTRUCTION                                   :Construcţie cale ferată electrificată
@@ -1600,7 +1613,7 @@
 STR_1018_BUILD_RAILROAD_TRACK                                   :{BLACK}Construieşte cale ferată
 STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING                         :{BLACK}Construieşte un depou feroviar (pentru construire şi întreţinere de trenuri)
 STR_101A_BUILD_RAILROAD_STATION                                 :{BLACK}Construieşte gară
-STR_101B_BUILD_RAILROAD_SIGNALS                                 :{BLACK}Plasează semnale feroviare
+STR_101B_BUILD_RAILROAD_SIGNALS                                 :{BLACK}Plasează semafoare feroviare
 STR_101C_BUILD_RAILROAD_BRIDGE                                  :{BLACK}Construieşte pod de cale ferată
 STR_101D_BUILD_RAILROAD_TUNNEL                                  :{BLACK}Construieşte tunel feroviar
 STR_101E_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Comutator pentru construcţie/înlăturare căi ferate şi semnale
@@ -1609,10 +1622,16 @@
 STR_1021_RAILROAD_TRACK                                         :Cale ferată
 STR_1023_RAILROAD_TRAIN_DEPOT                                   :Depou de cale ferată
 STR_1024_AREA_IS_OWNED_BY_ANOTHER                               :{WHITE}...terenul se află în proprietatea altei companii
-STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS                          :Cale feratã cu semnale normale
-STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Cale feratã cu pre-semnalizare
-STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Cale feratã cu semnale de iesire
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Cale feratã cu semnale combinate
+STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS                          :Cale ferată cu semafoare normale
+STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Cale ferată cu pre-semafoare
+STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Cale ferată cu semafoare de ieşire
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Cale ferată cu semafoare combinate
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Cale ferată cu semafoare normale şi pre-semafoare
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Cale ferată cu semafoare normale şi semafoare de ieşire
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Cale ferată cu semafoare normale şi semafoare combinate
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Cale ferată cu pre-semafoare şi semafoare de ieşire
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Cale ferată cu pre-semafoare şi semafoare combinate
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Sina de cale ferata cu semnale de iesire si combinate
 STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Trebuie mai intai sa demolati gara
 
 
@@ -1623,6 +1642,7 @@
 STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Construcţii rutiere
 STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Construcţie Tramvai
 STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Alege pod rutier
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}... drumurile cu sens unic nu pot avea bifurcatii
 STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Nu pot construi şosea aici...
 STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}Nu pot construi şină de tramvai aici...
 STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Nu pot înlătura şoseaua...
@@ -1640,13 +1660,17 @@
 STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Construieşte secţiune de şosea
 STR_180B_BUILD_TRAMWAY_SECTION                                  :{BLACK}Construcieşte şină de tramvai
 STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Construieşte o autobază (pentru construire şi întreţinere de autovehicule)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT                               :{BLACK}Construieste depou tramvaie (pentru constructii si reparatii vehicule)
 STR_180D_BUILD_BUS_STATION                                      :{BLACK}Plasează staţie de autobuz
 STR_180E_BUILD_TRUCK_LOADING_BAY                                :{BLACK}Construieşte platformă pentru camioane
+STR_180D_BUILD_PASSENGER_TRAM_STATION                           :{BLACK}Construieste statie de tramvai pentru calatori
+STR_180E_BUILD_CARGO_TRAM_STATION                               :{BLACK}Construieste statie de transport marfar
 STR_180F_BUILD_ROAD_BRIDGE                                      :{BLACK}Construieşte pod rutier
 STR_180F_BUILD_TRAMWAY_BRIDGE                                   :{BLACK}Construieşte pod pentru tramvaie
 STR_1810_BUILD_ROAD_TUNNEL                                      :{BLACK}Construieşte tunel rutier
 STR_1810_BUILD_TRAMWAY_TUNNEL                                   :{BLACK}Construieşte tunel pentru tramvaie
 STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Comutator pentru construcţie/înlăturare şosele
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS                       :{BLACK}Comuta constructie/stergere pentru constructia de linii de tramvaie
 STR_1813_SELECT_ROAD_VEHICLE_DEPOT                              :{BLACK}Alege orientarea autobazei
 STR_1813_SELECT_TRAM_VEHICLE_DEPOT                              :{BLACK}Alege orientarea depoului de tramvaie
 STR_1814_ROAD                                                   :Şosea
@@ -1665,7 +1689,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Mai întâi trebuie demolată clădirea
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Populaţia: {ORANGE}{COMMA}{BLACK}  Locuinţe: {ORANGE}{COMMA}
@@ -1698,7 +1722,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Afişează informaţii referitoare la autoritatea locală
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}Autoritatea locală din {TOWN}
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Evaluarea companiilor de transport:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subvenţii (F6)
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Subvenţii disponibile:
 STR_2027_FROM_TO                                                :{ORANGE}- {STRING} de la {STRING} la {STRING}
@@ -1769,7 +1793,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...sunt deja plantaţi arbori
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...locaţie nepotrivită
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Nu pot planta arbori aici...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...prea multe semne
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Nu pot plasa un semn aici...
 STR_280A_SIGN                                                   :Semn
@@ -1878,6 +1902,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Mal/Coastă
 STR_3806_SHIP_DEPOT                                             :Şantier naval
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...Nu pot construi pe apă
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Trebuie sa demolezi canalul inainte
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Salvează joc
@@ -1887,9 +1912,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte{P "" s} liberi
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Nu pot citi acest disc
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Salvarea jocului eşuată
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Salvarea jocului eşuată{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Ştergerea jocului eşuată
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Încărcarea jocului eşuată
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Încărcarea jocului eşuată{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Eroare interna: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Salvare eronata - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Slavarea a fost facuta cu o versiune mai noua
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :Fisierul nu poate fi citit
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :Fisierul nu poate fi scris
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Lista de discuri, directoare şi fişiere cu jocuri salvate
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Numele selectat pentru un joc salvat
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Şterge jocul salvat selectat
@@ -2060,8 +2090,7 @@
 STR_SV_STNAME_LOWER                                             :{STRING} de Jos
 STR_SV_STNAME_HELIPORT                                          :Heliportul {STRING}
 STR_SV_STNAME_FOREST                                            :Pãdurea {STRING}
-
-STR_SV_GROUP_NAME                                               :{GROUP}
+STR_SV_STNAME_FALLBACK                                          :{STRING} Statia #{NUM}
 
 ############ end of savegame specific region!
 
@@ -2141,7 +2170,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Jucătorul {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Schimbă poza
 STR_7005_COLOR_SCHEME                                           :{BLACK}Culoare
@@ -2153,7 +2182,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Noul nume al preşedintelui
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Nu pot schimba numele companiei...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Nu pot schimba numele preşedintelui...
-STR_700E_FINANCES                                               :{WHITE}Situaţia financiară a companiei {COMPANY} {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}Situaţia financiară a companiei {COMPANY} {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Cheltuieli/Venituri
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Construcţii
@@ -2169,20 +2198,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Venituri nave
 STR_701C_LOAN_INTEREST                                          :{GOLD}Dobânda la credit
 STR_701D_OTHER                                                  :{GOLD}Altele
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Total:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Graficul veniturilor
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Graficul profitului din operare
 STR_7026_BANK_BALANCE                                           :{WHITE}Balanţă curentă
 STR_7027_LOAN                                                   :{WHITE}Credite
-STR_MAX_LOAN                                                    :{WHITE}Limită credite:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Împrumută {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Plăteşte înapoi {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Limită credite:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Împrumută {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Plăteşte înapoi {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...creditul maxim permis este de {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Nu mai poţi împrumuta bani...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...nu ai nici un credit de plătit
@@ -2221,8 +2250,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Evaluarea performanţelor companiilor (maxim=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Valorile companiilor
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Clasamentul companiilor
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Companie de transport cu probleme!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} va fi vândută dacă situaţia financiară nu se va îmbunătăţi curând!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Preşedinte)
@@ -2260,7 +2289,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Recesiune mondială!{}{}Experţii financiari se tem de ceea ce e mai rău odată cu prăbuşirea economică!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Recesiunea s-a încheiat!{}{}Creşterea comerţului dă încredere industriei, iar economia se redresează!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Comutator pentru mărimea ferestrei
-STR_7076_COMPANY_VALUE                                          :{GOLD}Valoarea companiei: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Valoarea companiei: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Cumpără 25% din acţiunile companiei
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Vinde 25% din acţiunile companiei
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Cumpără 25% din acţiunile acestei companii
@@ -2291,6 +2320,8 @@
 STR_LIVERY_HELICOPTER                                           :Elicopter
 STR_LIVERY_SMALL_PLANE                                          :Aeroplan mic
 STR_LIVERY_LARGE_PLANE                                          :Aeroplan mare
+STR_LIVERY_PASSENGER_TRAM                                       :Tramvai calatori
+STR_LIVERY_FREIGHT_TRAM                                         :Tramvai marfa
 
 STR_LIVERY_GENERAL_TIP                                          :{BLACK}Afiseaza schemele generale de culori
 STR_LIVERY_TRAIN_TIP                                            :{BLACK}Arata schemele de culori pentru trenuri
@@ -2570,7 +2601,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}Depoul {TOWN}
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Cetăţenii sărbătoresc {}sosirea primului tren la {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Detalii)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Detalii)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Tren în drum
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2591,6 +2622,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Mergi fără oprire la Depoul {TOWN}
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Non-stop pt. service la Depoul {TOWN}
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Calatorie (fara orar)
+STR_TIMETABLE_TRAVEL_FOR                                        :Calatorii pentru {STRING}
+STR_TIMETABLE_STAY_FOR                                          :si opriri pentru {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} zi{P "" s}
+STR_TIMETABLE_TICKS                                             :{COMMA} programare{P "" s}
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Merge la Depoul {TOWN}
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Merge la Depoul {TOWN}, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Service la Depoul {TOWN}
@@ -2632,13 +2670,15 @@
 STR_REFIT                                                       :{BLACK}Rearanjeaza
 STR_REFIT_TIP                                                   :{BLACK}Alege tipul de marfa pentru rearanjare. Control+click pt a anula rearanjarea
 STR_REFIT_ORDER                                                 :(Rearanjeaza in {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Orar
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Comuta in modul de vizualizare orar
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Comenzi)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Sfârşitul comenzilor - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Service
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Nu pot construi vehiculul...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Cumpărat: {LTBLUE}{NUM}{BLACK} Valoare: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Valoare: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Cumpărat: {LTBLUE}{NUM}{BLACK} Valoare: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Valoare: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Încărcare / Descărcare
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Trenul trebuie oprit intr-un depou
@@ -2648,6 +2688,8 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Nu pot adăuga o comandă nouă...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Nu pot şterge această comandă...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Nu pot modifica această comandă...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Nu pot muta acest ordin...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Nu pot renunta la comanda actuala...
 STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Nu pot sări la ordinul selectat...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Nu pot muta vehiculul...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}Al doilea vagon+motor va avea mereu aceeasi destinatie ca si primul
@@ -2680,11 +2722,16 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Afiseazã capacitãtile componentelor trenului
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Afiseazã capacitãtile totale ale trenului, diferentiate pe tip de încãrcãturã
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Lista de comenzi - clic pe comandã pentru a o selecta
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Renunta la comanta acruala si preia-o pe urmatoarea. CTRL + click face salt la comanda selectata
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Sterge comanda selectatã
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Circulă fără oprire până la destinaţia selectată
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Introdu o comandã înaintea celei selectate sau adaugã o comandã la sfârsitul listei
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Forteazã trenul sã astepte la destinatia selectatã pânã la umplerea la capacitate maximã
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Forteazã trenul sã descarce marfa la destinatia selectatã
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Orar - click on an order to highlight it.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Modifica durata de timp alocata pentru comanda selectata
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Elimina durata de timp pentru comanda selectata
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Reinitializeaza contorul de intarziere, astfel ca vehiculul sa ajunga la timp
 STR_SERVICE_HINT                                                :{BLACK}Sari peste aceastã comandã dacã nu este necesar un service
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Cost: {CURRENCY} Greutate: {WEIGHT_S}{}Vitezã: {VELOCITY}  Putere: {POWER}{}Cost de rulare: {CURRENCY}/an{}Capacitate: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Defectiune
@@ -2706,6 +2753,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Nu pot redenumi modelul acestui vehicul...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Comanda selectatã forteazã vehiculul sã arunce încãrcãtura
 STR_886F_TRANSFER                                               :{BLACK}Transferã
+STR_CLEAR_TIME                                                  :{BLACK}Curata timp
+STR_RESET_LATENESS                                              :{BLACK}Reinitializeaza contorul de intarziere
 
 STR_TRAIN_STOPPING                                              :{RED}Oprire
 STR_TRAIN_STOPPING_VEL                                          :{RED}Oprire, {VELOCITY}
@@ -2714,8 +2763,20 @@
 STR_TRAIN_START_NO_CATENARY                                     :Aceasta sina nu este electrificata, deci trenul nu poate porni
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Un nou {STRING} este acum disponibil!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Un nou {STRING} este acum disponibil!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Un nou {STRING} este acum disponibil!  -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Nu pot programa vehiculul...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Vehiculele pot astepta numai in statii.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Acest vehicul nu opreste in aceasta statie.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Modifica timpul
+STR_TIMETABLE_STATUS_ON_TIME                                    :Acest vehicul se incadreaza in timp
+STR_TIMETABLE_STATUS_LATE                                       :Momentan, acest vehicul este in intarziere {STRING}
+STR_TIMETABLE_STATUS_EARLY                                      :Momentan, acest vehicul si-a devansat programul {STRING}
+STR_TIMETABLE_TOTAL_TIME                                        :Acest orar va lua {STRING} pentru finalizare
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :Acest orar va lua cel putin {STRING} pentru finalizare (nu in intregime programat)
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Auto-completare
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Completeaza automat orarul cu valorile primei calatorii
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Autovehicul in cale
@@ -2731,7 +2792,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Vitezã max.: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profit anul acesta: {LTBLUE}{CURRENCY}  (anul trecut: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Eficientã: {LTBLUE}{COMMA}%  {BLACK}Defectiuni de la ultimul service: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Cumpãrat: {LTBLUE}{NUM}{BLACK} Valoare: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Cumpãrat: {LTBLUE}{NUM}{BLACK} Valoare: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Capacitate: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...trebuie oprit intr-o autobazã
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Nu pot vinde autovehiculul...
@@ -2807,7 +2868,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Viteza max.: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profit anul acesta: {LTBLUE}{CURRENCY}  (anul trecut: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Eficientã: {LTBLUE}{COMMA}%  {BLACK}Defectiuni de la ultimul service: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construit: {LTBLUE}{NUM}{BLACK} Valoare: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construit: {LTBLUE}{NUM}{BLACK} Valoare: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Capacitate: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Nu pot opri/porni nava...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Nu pot trimite nava în santier...
@@ -2875,7 +2936,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Vitezã max.: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profit anul acesta: {LTBLUE}{CURRENCY}  (anul trecut: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Eficientã: {LTBLUE}{COMMA}%  {BLACK}Defectiuni de la ultimul service: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Cumpãrat în: {LTBLUE}{NUM}{BLACK} Valoare: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Cumpãrat în: {LTBLUE}{NUM}{BLACK} Valoare: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Nu pot trimite nava într+un hangar...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Merge la Hangarul {STATION}
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Merge la Hangarul {STATION}, {VELOCITY}
@@ -2928,6 +2989,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Mergi la Hangarul {STATION}
 SERVICE_AT_AIRPORT_HANGAR                                       :Întreţinere la hangarul {STATION}
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Orar)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Accident de zepelin la{STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Autovehicul distrus în urma coliziunii cu un OZN!
@@ -3243,25 +3306,56 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Comuta transparenta pentru construibile, precum statii, depouri, indicatoare si linii electrificate
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Comuta transparenta pentru poduri
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Comuta transparenta pentru structuri ca farurile si antenele - poate in viitor, pentru efect
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Comuta transparenta pentru indicatorii de incarcare
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
+STR_GROUP_NAME_FORMAT                                           :Grup {COMMA}
 STR_GROUP_TINY_NAME                                             :{TINYFONT}{GROUP}
 STR_GROUP_ALL_TRAINS                                            :Toate trenurile
 STR_GROUP_ALL_ROADS                                             :Toate autovehiculele
 STR_GROUP_ALL_SHIPS                                             :Toate navele
 STR_GROUP_ALL_AIRCRAFTS                                         :Toate aeronavele
 STR_GROUP_TINY_NUM                                              :{TINYFONT}{COMMA}
+STR_GROUP_ADD_SHARED_VEHICLE                                    :Adauga vehiculele partajate
+STR_GROUP_REMOVE_ALL_VEHICLES                                   :Elimina toate vehiculele
 
 STR_GROUP_TRAINS_CAPTION                                        :{WHITE}{GROUP} - {COMMA} Tren{P "" uri}
 STR_GROUP_ROADVEH_CAPTION                                       :{WHITE}{GROUP} - {COMMA} Autovehicul{P "" e}
 STR_GROUP_SHIPS_CAPTION                                         :{WHITE}{GROUP} - {COMMA} Nav{P a e}
 STR_GROUP_AIRCRAFTS_CAPTION                                     :{WHITE}{GROUP} - {COMMA} Aeronav{P a e}
+STR_GROUP_RENAME_CAPTION                                        :{BLACK}Redenumeste un grup
+STR_GROUP_REPLACE_CAPTION                                       :{WHITE}Inlocuieste vehiculele din "{GROUP}"
 
+STR_GROUP_CAN_T_CREATE                                          :{WHITE}Nu pot crea grup...
+STR_GROUP_CAN_T_DELETE                                          :{WHITE}Nu pot şterge grup...
+STR_GROUP_CAN_T_RENAME                                          :{WHITE}Nu pot redenumi grupul...
+STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES                             :{WHITE}Nu pot elimina toate vehiculele din acest grup...
+STR_GROUP_CAN_T_ADD_VEHICLE                                     :{WHITE}Nu pot adauga vehiculul in acest grup...
+STR_GROUP_CAN_T_ADD_SHARED_VEHICLE                              :{WHITE}Nu pot adauga vehicule partajate in grup...
 
+STR_GROUPS_CLICK_ON_GROUP_FOR_TIP                               :{BLACK}Grupuri - Da click pe un grup pentru lista completa a vehiculelor acestuia
+STR_GROUP_CREATE_TIP                                            :{BLACK}Da click pentru a creea un grup
+STR_GROUP_DELETE_TIP                                            :{BLACK}Sterge grupul selectat
+STR_GROUP_RENAME_TIP                                            :{BLACK}Redenumeste grupul selectat
+STR_GROUP_REPLACE_PROTECTION_TIP                                :{BLACK}Click aici pentru a proteja acest grup de la inlocuirile automate globale
 
 STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR                        :{TINYFONT}{BLACK}Profit anul acesta: {GREEN}{CURRENCY} {BLACK}(anul trecut: {GREEN}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR                         :{TINYFONT}{BLACK}Profit anul acesta: {RED}{CURRENCY} {BLACK}(anul trecut: {GREEN}{CURRENCY}{BLACK})
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Profit anul acesta: {GREEN}{CURRENCY} {BLACK}(anul trecut: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Profit anul acesta: {RED}{CURRENCY} {BLACK}(anul trecut: {RED}{CURRENCY}{BLACK})
 
+STR_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
 ########
--- a/src/lang/russian.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/russian.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -12,8 +12,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Край карты
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Слишком близко к краю карты
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Недостаточно денег - требуется {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Необходимо ровное место
 STR_0008_WAITING                                                :{BLACK}Ожидает: {WHITE}{STRING}
@@ -497,7 +497,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Администрация: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Нет
 STR_01AA_NAME                                                   :{BLACK}Имя
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1ое
@@ -780,6 +780,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Настройки сложности
 STR_02C7_CONFIG_PATCHES                                         :Настройки патчей
 STR_NEWGRF_SETTINGS                                             :Настройки NewGRF
+STR_TRANSPARENCY_OPTIONS                                        :Настройки прозрачности
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Показ названий городов
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Показ названий станций
@@ -807,7 +808,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Карта мира
 STR_EXTRA_VIEW_PORT                                             :Доп. окно просмотра
 STR_SIGN_LIST                                                   :Список меток
-STR_TRANSPARENCY_OPTIONS                                        :Настройки прозрачности
 STR_02DF_TOWN_DIRECTORY                                         :Список городов
 STR_TOWN_POPULATION                                             :{BLACK}Население: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Окно просмотра {COMMA}
@@ -985,8 +985,8 @@
 STR_CANT_COPY_ORDER_LIST                                        :{WHITE}Невозможно скопировать список заданий
 STR_END_OF_SHARED_ORDERS                                        :{SETX 10}- - Конец общих заданий - -
 
-STR_TRAIN_IS_LOST                                               :{WHITE}Поезд {COMMA} не может найти пути
-STR_TRAIN_IS_UNPROFITABLE                                       :{WHITE}Поезд {COMMA} за прошлый год принёс {CURRENCY} убытка
+STR_TRAIN_IS_LOST                                               :{WHITE}Поезд {COMMA} заблудился
+STR_TRAIN_IS_UNPROFITABLE                                       :{WHITE}Доход поезда {COMMA} за прошлый год составил {CURRENCY}
 STR_EURO_INTRODUCE                                              :{BLACK}{BIGFONT}Создана зона евро!{}{}Теперь в вашей стране в качестве единой валюты используется евро!
 
 # Start of order review system.
@@ -1050,6 +1050,7 @@
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Алгоритм навигации NPF (замена оригинального): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Множитель увеличения веса груза для товарных поездов: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Позволять строить остановки на городских дорогах: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADJACENT_STATIONS                            :{LTBLUE}Разрешить строительство смежных станций: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Малые аэропорты всегда доступны: {ORANGE}{STRING}
 
@@ -1090,6 +1091,7 @@
 STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Включить обслуживание на вертолетных площадках: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Связать ландшафтную панель с транспортной: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Обратить направление перемещения обзора мышью: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING                             :{LTBLUE}Плавный скроллинг окна просмотра: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Показывать замеры при строительстве: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Показывать окраску транспорта: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES_NONE                                :нет
@@ -1103,6 +1105,17 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Скорость смещения обзора прокруткой колеса мыши: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Автопауза в начале игры: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Использовать расширенный список транспорта: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Использовать индикатор загрузки: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Использовать расписание для транспорта: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Показывать расписание в 'тиках', а не днях: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE                            :{LTBLUE}Тип рельс по умолчанию (после старта/загрузки игры): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Обычные
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Электро
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Монорельс
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Маглев
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :Перв. доступн.
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :Посл. доступн.
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :Наиб. исп.
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Максимальное количество поездов на игрока: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Максимальное количество автотранспорта на игрока: {ORANGE}{STRING}
@@ -1186,7 +1199,7 @@
 STR_CHEATS                                                      :{WHITE}ЧИТЫ
 STR_CHEATS_TIP                                                  :{BLACK}Галочка показывает, использовали ли Вы этот ЧИТ раньше
 STR_CHEATS_WARNING                                              :{BLACK}Внимание, вы собираетесь предать своих соперников! Этого вам никогда не простят!
-STR_CHEAT_MONEY                                                 :{LTBLUE}Увеличить деньги на {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Увеличить деньги на {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Играть за компанию: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Волшебный динамит (снос _ВСЕГО_): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Туннели могут пересекаться: {ORANGE}{STRING}
@@ -1397,6 +1410,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :Английский
 STR_NETWORK_LANG_GERMAN                                         :Немецкий
 STR_NETWORK_LANG_FRENCH                                         :Французский
+STR_NETWORK_LANG_BRAZILIAN                                      :Бразильский
+STR_NETWORK_LANG_BULGARIAN                                      :Болгарский
+STR_NETWORK_LANG_CHINESE                                        :Китайский
+STR_NETWORK_LANG_CZECH                                          :Чешский
+STR_NETWORK_LANG_DANISH                                         :Датский
+STR_NETWORK_LANG_DUTCH                                          :Немецкий
+STR_NETWORK_LANG_ESPERANTO                                      :Эсперанто
+STR_NETWORK_LANG_FINNISH                                        :Финский
+STR_NETWORK_LANG_HUNGARIAN                                      :Венгерский
+STR_NETWORK_LANG_ICELANDIC                                      :Исландский
+STR_NETWORK_LANG_ITALIAN                                        :Итальянский
+STR_NETWORK_LANG_JAPANESE                                       :Японский
+STR_NETWORK_LANG_KOREAN                                         :Корейский
+STR_NETWORK_LANG_LITHUANIAN                                     :Латвийский
+STR_NETWORK_LANG_NORWEGIAN                                      :Норвержский
+STR_NETWORK_LANG_POLISH                                         :Польский
+STR_NETWORK_LANG_PORTUGUESE                                     :Португальский
+STR_NETWORK_LANG_ROMANIAN                                       :Румынский
+STR_NETWORK_LANG_RUSSIAN                                        :Русский
+STR_NETWORK_LANG_SLOVAK                                         :Словацкий
+STR_NETWORK_LANG_SLOVENIAN                                      :Словенский
+STR_NETWORK_LANG_SPANISH                                        :Испанский
+STR_NETWORK_LANG_SWEDISH                                        :Шведский
+STR_NETWORK_LANG_TURKISH                                        :Турецкий
+STR_NETWORK_LANG_UKRAINIAN                                      :Украинский
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Состояние сетевой игры
@@ -1416,9 +1454,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Имя компании:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Основана: {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Оценочная стоимость: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Текущий баланс: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Доход в прошлом году: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Оценочная стоимость: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Текущий баланс: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Доход в прошлом году: {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Результативность: {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Трансп. средства: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1560,7 +1598,7 @@
 STR_1008_MUST_REMOVE_RAILROAD_TRACK                             :{WHITE}Сначала надо удалить рельсы
 STR_100A_RAILROAD_CONSTRUCTION                                  :{WHITE}Железные дороги
 STR_TITLE_ELRAIL_CONSTRUCTION                                   :{WHITE}Электрифицированные ж/д
-STR_100B_MONORAIL_CONSTRUCTION                                  :{WHITE}Монорельсы
+STR_100B_MONORAIL_CONSTRUCTION                                  :{WHITE}Монорельс
 STR_100C_MAGLEV_CONSTRUCTION                                    :{WHITE}Магнитные поезда
 STR_100D_SELECT_RAIL_BRIDGE                                     :{WHITE}Выберите железнодорожный мост
 STR_100E_CAN_T_BUILD_TRAIN_DEPOT                                :{WHITE}Невозможно построить депо здесь...
@@ -1590,6 +1628,13 @@
 STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Ж/Д путь с пресигналами
 STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Ж/Д путь с выходными сигналами
 STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Ж/Д путь с комбинированными сигналами
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Рельсы и нормальными и пре-сигналами
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Рельсы и нормальными и выходными сигналами
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Рельсы с нормальными и комбо-сигналами
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Рельсы с пре- и выходными сигналами
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Рельсы с пре- и комбо-сигналами
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Рельсы с выходными и комбо-сигналами
+STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Сначала удалите ЖД станцию
 
 
 
@@ -1597,22 +1642,39 @@
 STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Сначала удалите дорогу
 STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Идут дорожные работы...
 STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Строительство дорог
+STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Трамваи
 STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Выберите тип моста
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}... односторонние дороги не могут иметь такое пересечение
 STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Не могу проложить дорогу здесь...
+STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}Нельзя построить здесь трамвай...
 STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Не могу удалить дорогу...
+STR_1805_CAN_T_REMOVE_TRAMWAY_FROM                              :{WHITE}Не могу удалить этот трамвай...
 STR_1806_ROAD_DEPOT_ORIENTATION                                 :{WHITE}Направление гаража
+STR_1806_TRAM_DEPOT_ORIENTATION                                 :{WHITE}Ориентация трамвайного депо
 STR_1807_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}Не могу построить гараж здесь...
+STR_1807_CAN_T_BUILD_TRAM_VEHICLE                               :{WHITE}Не могу построить здесь трамвайное депо...
 STR_1808_CAN_T_BUILD_BUS_STATION                                :{WHITE}Не могу построить остановку здесь...
 STR_1809_CAN_T_BUILD_TRUCK_STATION                              :{WHITE}Не могу построить грузовую станцию...
+STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION                     :{WHITE}Не могу построить пассажирскую трамвайную остановку...
+STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION                         :{WHITE}Не могу построить грузовую трамвайную остановку...
 STR_180A_ROAD_CONSTRUCTION                                      :Строительство дорог
+STR_180A_TRAMWAY_CONSTRUCTION                                   :Трамваи
 STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Проложить дорогу
+STR_180B_BUILD_TRAMWAY_SECTION                                  :{BLACK}Проложить трамвайные пути
 STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Построить гараж (для закупки и обслуживания машин)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT                               :{BLACK}Построить трамвайное депо (для закупки и обслуживания трамваев)
 STR_180D_BUILD_BUS_STATION                                      :{BLACK}Построить автобусную остановку
 STR_180E_BUILD_TRUCK_LOADING_BAY                                :{BLACK}Построить погрузочную станцию
+STR_180D_BUILD_PASSENGER_TRAM_STATION                           :{BLACK}Построить пассажирскую трамвайную остановку
+STR_180E_BUILD_CARGO_TRAM_STATION                               :{BLACK}Построить грузовую трамвайную остановку
 STR_180F_BUILD_ROAD_BRIDGE                                      :{BLACK}Построить мост (авто)
+STR_180F_BUILD_TRAMWAY_BRIDGE                                   :{BLACK}Построить трамвайный мост
 STR_1810_BUILD_ROAD_TUNNEL                                      :{BLACK}Построить туннель (авто)
+STR_1810_BUILD_TRAMWAY_TUNNEL                                   :{BLACK}Построить трамвайный туннель
 STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Переключение строительства/удаления автомобильной инфраструктуры
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS                       :{BLACK}Переключение строительства/удаления трамвайной инфраструктуры
 STR_1813_SELECT_ROAD_VEHICLE_DEPOT                              :{BLACK}Выбор ориентации гаража
+STR_1813_SELECT_TRAM_VEHICLE_DEPOT                              :{BLACK}Выбор ориентации трамвайного депо
 STR_1814_ROAD                                                   :Дорога
 STR_1815_ROAD_WITH_STREETLIGHTS                                 :Дорога с уличным освещением
 STR_1816_TREE_LINED_ROAD                                        :Шоссе
@@ -1620,6 +1682,8 @@
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Железнодорожный переезд
 STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Невозможно удалить автобусную остановку...
 STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Невозможно удалить грузовой терминал...
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION                         :{WHITE}Не могу удалить пассажирскую трамвайную станцию...
+STR_CAN_T_REMOVE_CARGO_TRAM_STATION                             :{WHITE}Не могу удалить грузовую трамвайную станцию...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Города
@@ -1627,7 +1691,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Сначала надо уничтожить здания
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Население: {ORANGE}{COMMA}{BLACK}  Зданий: {ORANGE}{COMMA}
@@ -1660,7 +1724,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Информация о местных властях
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} местные власти
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Рейтинг транспортной компании
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Субсидии
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Свободные субсидии
 STR_2027_FROM_TO                                                :{ORANGE}{STRING.p} по маршруту из {STRING} в {STRING}
@@ -1731,7 +1795,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...уже есть дерево
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...неподходящее место
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Невозможно высадить деревья...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...слишком много знаков
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Невозможно установить знак...
 STR_280A_SIGN                                                   :Знак
@@ -1784,8 +1848,12 @@
 STR_3041_NOW_ACCEPTS_AND                                        :{WHITE}{STATION} теперь принимает {STRING} и {STRING}
 STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Направление остановки
 STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Ориентация станции
+STR_3042_PASSENGER_TRAM_STATION_ORIENTATION                     :{WHITE}Направление пассажирской трамвайной остановки
+STR_3043_CARGO_TRAM_STATION_ORIENT                              :{WHITE}Направление грузовой трамвайной остановки
 STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Сначала удалите автобусную остановку
 STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Сначала удалите грузовой терминал
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION                   :{WHITE}Сначала надо уничтожить пассажирскую трамвайную остановку
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION                       :{WHITE}Сначала надо уничтожить грузовую трамвайную остановку
 STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} Станц{P 2 ия ии ий}
 STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
 STR_304A_NONE                                                   :{YELLOW}- Нет -
@@ -1797,6 +1865,8 @@
 STR_3050_SELECT_LENGTH_OF_RAILROAD                              :{BLACK}Выберите длину ж/д станции
 STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Выберите направление автобусной остановки
 STR_3052_SELECT_TRUCK_LOADING_BAY                               :{BLACK}Выберите направление погрузочной станции
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION              :{BLACK}Выберите направление пассажирской трамвайной остановки
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION                  :{BLACK}Выберите направление грузовой трамвайной остановки
 STR_3053_CENTER_MAIN_VIEW_ON_STATION                            :{BLACK}Показать станцию в основном окне
 STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}Показать рейтинг станции
 STR_3055_CHANGE_NAME_OF_STATION                                 :{BLACK}Переименовать станцию
@@ -1834,6 +1904,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Морской или речной берег
 STR_3806_SHIP_DEPOT                                             :Верфь
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...Невозможно построить на воде
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Сначала надо уничтожить канал
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Сохранить игру
@@ -1843,9 +1914,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} Мб свободно
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Не удалось прочитать диск
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Невозможно сохранить игру
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Невозможно сохранить игру{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Невозможно удалить файл
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Невозможно загрузить игру
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Невозможно загрузить игру{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Внутренняя ошибка: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Нарушена структура сэйва - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Сэйв сделан в более новой версии
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :Файл не читается
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :Незаписываемый файл
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Список дисков, папок и сохраненных игр
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Выбранное имя для сохранения игры
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Удалить выбранную сохраненную игру
@@ -1984,12 +2060,12 @@
 STR_SV_AIRCRAFT_NAME                                            :Самолет {COMMA}
 
 STR_SV_STNAME                                                   :{STRING}
-STR_SV_STNAME_NORTH                                             :Северный {STRING}
-STR_SV_STNAME_SOUTH                                             :Южный {STRING}
-STR_SV_STNAME_EAST                                              :Восточный {STRING}
-STR_SV_STNAME_WEST                                              :Западный {STRING}
+STR_SV_STNAME_NORTH                                             :Северная {STRING}
+STR_SV_STNAME_SOUTH                                             :Южная {STRING}
+STR_SV_STNAME_EAST                                              :Восточная {STRING}
+STR_SV_STNAME_WEST                                              :Западная {STRING}
 STR_SV_STNAME_CENTRAL                                           :Центральный {STRING}
-STR_SV_STNAME_TRANSFER                                          :Перегонный {STRING}
+STR_SV_STNAME_TRANSFER                                          :Перегонная {STRING}
 STR_SV_STNAME_HALT                                              :{STRING}-привал
 STR_SV_STNAME_VALLEY                                            :Долина {STRING}
 STR_SV_STNAME_HEIGHTS                                           :{STRING}-высотная
@@ -2010,14 +2086,13 @@
 STR_SV_STNAME_BUOY_8                                            :{STRING} Буй 8
 STR_SV_STNAME_BUOY_9                                            :{STRING} Буй 9
 STR_SV_STNAME_ANNEXE                                            :{STRING}-дополнительная
-STR_SV_STNAME_SIDINGS                                           :{STRING}-запасный
+STR_SV_STNAME_SIDINGS                                           :{STRING}-запасная
 STR_SV_STNAME_BRANCH                                            :{STRING}-ветка
-STR_SV_STNAME_UPPER                                             :Верхний {STRING}
-STR_SV_STNAME_LOWER                                             :Нижний {STRING}
+STR_SV_STNAME_UPPER                                             :Верхняя {STRING}
+STR_SV_STNAME_LOWER                                             :Нижняя {STRING}
 STR_SV_STNAME_HELIPORT                                          :Площадка {STRING}
 STR_SV_STNAME_FOREST                                            :Лес {STRING}
-
-STR_SV_GROUP_NAME                                               :{GROUP}
+STR_SV_STNAME_FALLBACK                                          :{STRING}-{NUM}
 
 ############ end of savegame specific region!
 
@@ -2108,7 +2183,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Игрок {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Лицо
 STR_7005_COLOR_SCHEME                                           :{BLACK}Цвет
@@ -2120,7 +2195,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Имя директора
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Невозможно изменить название компании...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Невозможно изменить имя директора...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Денежные средства {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Денежные средства {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Расход/доход
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Строительство
@@ -2136,20 +2211,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Доход от водного транспорта
 STR_701C_LOAN_INTEREST                                          :{GOLD}Проценты по займу
 STR_701D_OTHER                                                  :{GOLD}Другое
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}ИТОГО:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}График доходов
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}График прибыли от основной деятельности
 STR_7026_BANK_BALANCE                                           :{WHITE}Баланс
 STR_7027_LOAN                                                   :{WHITE}Ссуда
-STR_MAX_LOAN                                                    :{WHITE}Макс. Ссуда: {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Занять {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Отдать {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Макс. Ссуда: {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Занять {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Отдать {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...максимально допустимый размер ссуды - {CURRENCY}.
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Невозможно занять больше денег...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...нет ссуды для выплачивания
@@ -2188,8 +2263,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Рейтинг деятельности компании (макс=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Стоимость активов компании
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Сравнительная таблица компаний
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Транспортная компания в опасном положении!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT} {COMPANY} будет продана или объявлена банкротом, если ситуация не изменится!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Директор)
@@ -2227,7 +2302,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Мировой спад{}{}Финансовые эксперты дают ужасные прогнозы в связи с кризисом экономики!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Спад закончился!{}{}Увеличение объемов торговли внушает уверенность владельцам предприятий. Экономика укрепляет свои позиции.
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Большое/маленькое окно
-STR_7076_COMPANY_VALUE                                          :{GOLD}Стоимость компании: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Стоимость компании: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Купить 25% акций компании
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Продать 25% акций компании
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Купить 25% акций этой компании
@@ -2258,6 +2333,8 @@
 STR_LIVERY_HELICOPTER                                           :Вертолет
 STR_LIVERY_SMALL_PLANE                                          :Малый самолет
 STR_LIVERY_LARGE_PLANE                                          :Большой самолет
+STR_LIVERY_PASSENGER_TRAM                                       :Пассажирский трамвай
+STR_LIVERY_FREIGHT_TRAM                                         :Грузовой трамвай
 
 STR_LIVERY_GENERAL_TIP                                          :{BLACK}Настройка основной цветовой схемы
 STR_LIVERY_TRAIN_TIP                                            :{BLACK}Настройка цветовой схемы поездов
@@ -2537,7 +2614,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}Депо {TOWN}
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Жители празднуют!{}Первый поезд прибыл на станцию {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Детали)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Детали)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Поезд мешает
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2558,6 +2635,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Ехать в депо {TOWN} без остановки
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Обслужиться в депо {TOWN} без остановки
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Путешествует (не учитывается)
+STR_TIMETABLE_TRAVEL_FOR                                        :Идти до {STRING}
+STR_TIMETABLE_STAY_FOR                                          :и ждать {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} д{P ень ня ней}
+STR_TIMETABLE_TICKS                                             :{COMMA} тик{P "" а ов}
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Следует в депо {TOWN}
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Следует в Депо {TOWN}, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Обслуж. в депо {TOWN}
@@ -2599,13 +2683,15 @@
 STR_REFIT                                                       :{BLACK}Переоб.
 STR_REFIT_TIP                                                   :{BLACK}Выберите тип грузов для переоборудования. CTRL+клик - для удаления.
 STR_REFIT_ORDER                                                 :(Переоборуд. для {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Расписание
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Просмотр расписания
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Задания)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Конец заданий - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Обслуж.
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Невозможно построить ж/д транспорт...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Построен: {LTBLUE}{NUM}{BLACK} Стоимость: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Стоимость: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Построен: {LTBLUE}{NUM}{BLACK} Стоимость: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Стоимость: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Разгрузка/Погрузка
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Поезд должен быть остановлен в депо
@@ -2615,6 +2701,9 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Невозможно вставить новое задание...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Невозможно удалить это задание...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Невозможно изменить это задание...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Не могу переместить это задание ...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Не могу пропустить это задание...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Не могу пропустить выделенное задание...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Невозможно переместить трансп. средство...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}Тыловой локомотив всегда следует за его передней частью
 STR_8838_N_A                                                    :отсутствует{SKIP}
@@ -2646,11 +2735,16 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Показать вместимость вагонов
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Показать общую вместимость поезда по типам грузов
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Показ списка заданий - щелкните для выделения. Если зажать CTRL - обзор станции.
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Пропустить данное задание и начать следующее. CTRL + клик пропускает выделенное задание.
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Удалить выделенное задание
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Ехать по выбранному заданию без остановок
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Вставить новое задание перед выделенным, или в конец списка
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Задать ожидание полной загрузки
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Задать ожидание полной разгрузки
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Расписание - выберите задание.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Изменить время для выделенного задания
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Очистить время в выделенном задании
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Сбросить задержку счетчика, так чтобы транспорт прибыл вовремя.
 STR_SERVICE_HINT                                                :{BLACK}Пропустить это задание, если обслуживание не требуется
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Цена: {CURRENCY} Вес: {WEIGHT_S}{}Скорость: {VELOCITY}  Мощность: {POWER}{}Цена обслуж.: {CURRENCY}/год{}Емкость: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Поломка
@@ -2672,6 +2766,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Невозможно переименовать тип вагона ...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}По выделенному приказу произойдет принудительная разгрузка транспортного средства
 STR_886F_TRANSFER                                               :{BLACK}Трансфер
+STR_CLEAR_TIME                                                  :{BLACK}Сбросить Время
+STR_RESET_LATENESS                                              :{BLACK}Сброс счетчика
 
 STR_TRAIN_STOPPING                                              :{RED}Остановлен
 STR_TRAIN_STOPPING_VEL                                          :{RED}Останавливаю, {VELOCITY}
@@ -2680,8 +2776,18 @@
 STR_TRAIN_START_NO_CATENARY                                     :Кто-то украл все провода, поезд не может ехать...
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Появился новый {STRING}!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Появился новый {STRING}!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Появился новый {STRING}!  -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Не могу составить расписание для этого транспорта...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Транспорт может только ждать на станции.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Этот транспорт не останавливается на этой станции.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Изм. время
+STR_TIMETABLE_STATUS_ON_TIME                                    :Этот транспорт приходит вовремя
+STR_TIMETABLE_STATUS_LATE                                       :Этот транспорт приходит на  {STRING} позже
+STR_TIMETABLE_STATUS_EARLY                                      :Этот транспорт приходит на  {STRING} раньше
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Автомат.
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Заполнить расписание автоматически данными из первой поездки
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Машина на пути
@@ -2697,7 +2803,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Макс. скорость: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Прибыль в этом году: {LTBLUE}{CURRENCY}  (прошлый год: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Надежность: {LTBLUE}{COMMA}%  {BLACK}Поломок с последнего ремонта: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Построено: {LTBLUE}{NUM}{BLACK} Цена: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Построено: {LTBLUE}{NUM}{BLACK} Цена: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Емкость: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...должен быть остановлен в гараже
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Невозможно продать автомобиль...
@@ -2724,12 +2830,16 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Список автотранспорта - кликните для получения информации
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Построить выделенный автомобиль
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Цена: {CURRENCY}{}Скорость: {VELOCITY}{}Стоимость обслуживания: {CURRENCY}/год{}Емкость: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Емкость: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Назвать автотранспорт
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Невозможно переименовать автотранспорт ...
 STR_902E_NAME_ROAD_VEHICLE                                      :{BLACK}Назвать автотранспорт
 STR_902F_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Жители празднуют!{}Первый автобус прибыл на остановку {STATION}!
 STR_9030_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Жители празднуют!{}Первый грузовик прибыл на станцию {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Жители празднуют . . .{}Первый трамвай прибыл на {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Жители празднуют . . .{}Первый грузовой трамвай прибыл на {STATION}!
 STR_9031_ROAD_VEHICLE_CRASH_DRIVER                              :{BLACK}{BIGFONT}АВАРИЯ!{}Водитель погиб при столкновении с поездом
 STR_9032_ROAD_VEHICLE_CRASH_DIE                                 :{BLACK}{BIGFONT}АВАРИЯ!{}{COMMA} человек{P "" а ""} погиб{P "" ло ли} в столкновении с поездом!
 STR_9033_CAN_T_MAKE_VEHICLE_TURN                                :{WHITE}Невозможно развернуть автомобиль...
@@ -2769,7 +2879,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Макс. скорость: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Прибыль в этом году: {LTBLUE}{CURRENCY}  (прошлый год: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Надежность: {LTBLUE}{COMMA}%  {BLACK}Поломок с последнего обслуж.: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Построено: {LTBLUE}{NUM}{BLACK} Стоимость: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Построено: {LTBLUE}{NUM}{BLACK} Стоимость: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Емкость: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Не могу остановить/запустить корабль...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Не могу отправить корабль в док...
@@ -2837,7 +2947,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Макс. скорость: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Прибыль в этом году: {LTBLUE}{CURRENCY}  (прошлый год: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Надежность: {LTBLUE}{COMMA}%  {BLACK}Поломок с последнего ремонта: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Построено: {LTBLUE}{NUM}{BLACK} Цена: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Построено: {LTBLUE}{NUM}{BLACK} Цена: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Невозможно отправить его в ангар...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Летит в Ангар {STATION}
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Следует в Ангар {STATION}, {VELOCITY}
@@ -2890,6 +3000,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Лететь в Ангар {STATION}
 SERVICE_AT_AIRPORT_HANGAR                                       :Сервис в ангаре {STATION}
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Расписание)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Крушение дирижабля в {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Автомобиль уничтожен при столкновении с НЛО!
@@ -3014,6 +3126,7 @@
 
 ### depot strings
 STR_DEPOT_SELL_CONFIRMATION_TEXT                                :{YELLOW}Весь транспорт в депо будет продан. Вы уверены?
+STR_DEPOT_WRONG_DEPOT_TYPE                                      :Неверный тип депо
 
 STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP                             :{BLACK}Продать все поезда в депо
 STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP                           :{BLACK}Продать все авто в гараже
@@ -3204,6 +3317,14 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Переключить прозрачность зданий, которые можно строить игроком. Например -- станции, депо, точки пути и столбы для электричества.
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Переключить прозрачность мостов
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Переключить прозрачность зданий, вроде антенн и маяков.
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Переключить прозрачность для индикаторов загрузки
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Группа {COMMA}
@@ -3241,4 +3362,11 @@
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Прибыль за год: {GREEN}{CURRENCY} {BLACK}(прошлый год: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Прибыль за год: {RED}{CURRENCY} {BLACK}(прошлый год: {RED}{CURRENCY}{BLACK})
 
+STR_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
 ########
--- a/src/lang/simplified_chinese.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/simplified_chinese.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -8,8 +8,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}超过地图边界
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}距离地图边界过近
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}没有足够的现金 - 需要 {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}需要平坦的地面
 STR_0008_WAITING                                                :{BLACK}等待:{WHITE}{STRING}
@@ -493,7 +493,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}地方政府:{LTBLUE}{STRING}
 STR_01A9_NONE                                                   :没有
 STR_01AA_NAME                                                   :{BLACK}名称
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1日
@@ -1171,7 +1171,7 @@
 STR_CHEATS                                                      :{WHITE}作弊
 STR_CHEATS_TIP                                                  :{BLACK}标志你是否用过此项作弊手段的单选框
 STR_CHEATS_WARNING                                              :{BLACK}警告!你将要背叛你的盟友,这将被永久记录!
-STR_CHEAT_MONEY                                                 :{LTBLUE}增加 {CURRENCY64} 现金
+STR_CHEAT_MONEY                                                 :{LTBLUE}增加 {CURRENCY} 现金
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}作为玩家 {ORANGE}{COMMA} 进行游戏
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}神奇推土机 (清除工业设施或不可移除物): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}隧道可以相交:{ORANGE}{STRING}
@@ -1401,9 +1401,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}公司信息:{WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}开业时间:{WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}公司市值:{WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}流动资金:{WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}去年收入:{WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}公司市值:{WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}流动资金:{WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}去年收入:{WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}表现情况:{WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}车辆:{WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1612,7 +1612,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}必须先摧毁建筑
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}人口:{ORANGE}{COMMA}{BLACK}  房屋:{ORANGE}{COMMA}
@@ -1645,7 +1645,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}显示地方政府的信息
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} 地方政府
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}对运输公司评价:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}财政补贴项目
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}尚未中标的项目:
 STR_2027_FROM_TO                                                :{ORANGE}将 {STRING} 从 {STRING} 运送到 {STRING}
@@ -1716,7 +1716,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}……此处已经有树木了
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}……地点不合适
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}不能在这里植树……
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}……标志太多了
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}不能在这里放置标志……
 STR_280A_SIGN                                                   :标志
@@ -1828,9 +1828,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte(s) 可用
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}不能读取驱动器
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}保存游戏失败
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}保存游戏失败{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}不能删除文件
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}游戏存档读取失败
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}游戏存档读取失败{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}驱动器、目录和游戏存档列表
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}保存当前游戏用的存档名字
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}删除选定的游戏存档
@@ -2079,7 +2079,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Player {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}新的肖像
 STR_7005_COLOR_SCHEME                                           :{BLACK}配色方案
@@ -2091,7 +2091,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :总裁姓名
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}不能为公司更名……
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}不能更改总裁的名字……
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} 财务报表 {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} 财务报表 {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}收入/支出
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}建设费用
@@ -2107,20 +2107,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}水上运输收入
 STR_701C_LOAN_INTEREST                                          :{GOLD}贷款利息
 STR_701D_OTHER                                                  :{GOLD}其他费用
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}总计:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}收入图表
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}利润图表
 STR_7026_BANK_BALANCE                                           :{WHITE}流动资金
 STR_7027_LOAN                                                   :{WHITE}贷款
-STR_MAX_LOAN                                                    :{WHITE}最大贷款额度:{BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}贷款 {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}还款 {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}最大贷款额度:{BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}贷款 {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}还款 {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}最大贷款额度是{CURRENCY}……
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}不能再贷款了……
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}没有要偿还的贷款了
@@ -2159,8 +2159,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}公司表现指数 (最大指数为1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}公司市值
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}公司评价表
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}运输公司陷入困境!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} 如果不能在短期摆脱困境,则将被收购或破产!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(总裁)
@@ -2198,7 +2198,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}大萧条!{}{}金融专家预测世界经济将全面倒退!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}大萧条结束!{}{}贸易复苏带动经济全面启动!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}切换窗口大小
-STR_7076_COMPANY_VALUE                                          :{GOLD}公司市值:{WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}公司市值:{WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}购买其 25% 的股份
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}出售其 25% 的股份
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}购买此公司 25% 的股份
@@ -2508,7 +2508,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} 列车车库
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}市民举行庆祝仪式……{}第一列火车抵达 {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (详细信息)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (详细信息)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}指定位置有列车
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2575,8 +2575,8 @@
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}保养
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}不能购买列车……
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   建造时间:{LTBLUE}{NUM}{BLACK} 价值:{LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   价值:{LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   建造时间:{LTBLUE}{NUM}{BLACK} 价值:{LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   价值:{LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}装载/卸货
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}列车必须停在一个车库中
@@ -2651,8 +2651,8 @@
 STR_TRAIN_START_NO_CATENARY                                     :这不是电气化铁路,电力机车不能启动
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}新 {STRING} 上市了!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}新 {STRING} 上市了!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}新 {STRING} 上市了!  -  {ENGINE}
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}指定的位置有汽车
@@ -2668,7 +2668,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}最大时速: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}今年的利润: {LTBLUE}{CURRENCY}  (last year: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}可靠性: {LTBLUE}{COMMA}%  {BLACK}上次保养后抛锚的次数: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   建造年份: {LTBLUE}{NUM}{BLACK} 价值: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   建造年份: {LTBLUE}{NUM}{BLACK} 价值: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}装载能力:{LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...必须完全停在一个车库中
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}不能出售汽车...
@@ -2740,7 +2740,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}最大速度:{LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}今年利润:{LTBLUE}{CURRENCY}  (去年:{CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}可靠性:{LTBLUE}{COMMA}%  {BLACK}上次保养后的故障次数:{LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   建造时间:{LTBLUE}{NUM}{BLACK} 价值:{LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   建造时间:{LTBLUE}{NUM}{BLACK} 价值:{LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}运载能力: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}不能停止/启动船只……
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}不能命令船只前往船坞……
@@ -2808,7 +2808,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}最大速度:{LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}今年的利润:{LTBLUE}{CURRENCY}  (去年:{CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}可靠性:{LTBLUE}{COMMA}%  {BLACK}上次保养后的故障次数:{LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   制造年份:{LTBLUE}{NUM}{BLACK} 价值:{LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   制造年份:{LTBLUE}{NUM}{BLACK} 价值:{LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}不能命令飞机返回机库……
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}正在前往 {STATION} 的机库
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}正在前往 {STATION} 的机库,{VELOCITY}
--- a/src/lang/slovak.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/slovak.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -12,8 +12,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Za okrajom mapy
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Príliš blízko okraja mapy
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Malá hotovost - potrebných {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Potrebný rovný terén
 STR_0008_WAITING                                                :{BLACK}Caka: {WHITE}{STRING}
@@ -559,7 +559,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Miestna správa: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Neznáme
 STR_01AA_NAME                                                   :{BLACK}Meno
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1.
@@ -842,6 +842,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Nastavenia obtiaznosti
 STR_02C7_CONFIG_PATCHES                                         :Nastavenia patchov
 STR_NEWGRF_SETTINGS                                             :Nastavenie newgrf
+STR_TRANSPARENCY_OPTIONS                                        :Nastavenia priehladnosti
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Zobrazit nazvy miest
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Zobrazit nazvy stanic
@@ -869,7 +870,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Mapa sveta
 STR_EXTRA_VIEW_PORT                                             :Dalsi pohlad
 STR_SIGN_LIST                                                   :Zoznam popisov
-STR_TRANSPARENCY_OPTIONS                                        :Nastavenia priehladnosti
 STR_02DF_TOWN_DIRECTORY                                         :Zoznam miest
 STR_TOWN_POPULATION                                             :{BLACK}Svetova populacia: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Pohlad {COMMA}
@@ -1167,6 +1167,17 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Rychlost posúvania mapy: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automaticka pauza pri štarte novej hry: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Použit vylepšený zoznam vozidiel: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Použit ukazovatele nakladnia: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Povolit cestovné poriadky pre vozidlá: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Zobrazovat cestovné poriadky v tikoch namiesto dní: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE                            :{LTBLUE}Predvolený typ kolají (v novej/nahranej hre): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Normálne
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Elektrifikované
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Monorail
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :Prvé dostupné
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :Posledné dostupné
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :Najcastejsie používané
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maximalny pocet vlakov hraca: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Maximalny pocet automobilov hraca: {ORANGE}{STRING}
@@ -1250,7 +1261,7 @@
 STR_CHEATS                                                      :{WHITE}Cheaty
 STR_CHEATS_TIP                                                  :{BLACK}Checkbox indikuje opakovane pouzite cheatu
 STR_CHEATS_WARNING                                              :{BLACK}Varovanie! Chcete podviest vasich protihracov. Tento podvod sa navzdy zapameta.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Zvysit hotovost o {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Zvysit hotovost o {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Hrat ako hrac: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Magicky buldozer (odstrani priemysel, budovy): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tunely sa mozu navzajom krizit: {ORANGE}{STRING}
@@ -1466,6 +1477,7 @@
 STR_NETWORK_LANG_CHINESE                                        :Cinsky
 STR_NETWORK_LANG_CZECH                                          :Cesky
 STR_NETWORK_LANG_DANISH                                         :Dánsky
+STR_NETWORK_LANG_DUTCH                                          :Holadnsky
 STR_NETWORK_LANG_ESPERANTO                                      :Esperanto
 STR_NETWORK_LANG_FINNISH                                        :Fínsky
 STR_NETWORK_LANG_HUNGARIAN                                      :Madarsky
@@ -1504,9 +1516,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Nazov spolocnosti:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Zalozene:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Hodnota spolocnosti:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Stav uctu:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Zisk v minulom roku:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Hodnota spolocnosti:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Stav uctu:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Zisk v minulom roku:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Vykon:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Vozidla:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1708,14 +1720,23 @@
 STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION                     :{WHITE}Nie je možné postavit elektrickovú osobnú stanicu ...
 STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION                         :{WHITE}Nie je možné postavit elektrickovú nákladnú stanicu ...
 STR_180A_ROAD_CONSTRUCTION                                      :Vystavba cesty
+STR_180A_TRAMWAY_CONSTRUCTION                                   :Výstavba elektrickovej dráhy
 STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Postavit cast cesty
+STR_180B_BUILD_TRAMWAY_SECTION                                  :{BLACK}Postavit cast elektrickovej dráhy
 STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Postavit garaz (na vyroby a opravy automobilov)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT                               :{BLACK}Postavit elektrickové depo
 STR_180D_BUILD_BUS_STATION                                      :{BLACK}Postavit autobusovu zastavku
 STR_180E_BUILD_TRUCK_LOADING_BAY                                :{BLACK}Postavit vykladku
+STR_180D_BUILD_PASSENGER_TRAM_STATION                           :{BLACK}Postavit osobnú elektrickovú stanicu
+STR_180E_BUILD_CARGO_TRAM_STATION                               :{BLACK}Postavit nákladnú elektrickovú stanicu
 STR_180F_BUILD_ROAD_BRIDGE                                      :{BLACK}Postavit cestny most
+STR_180F_BUILD_TRAMWAY_BRIDGE                                   :{BLACK}Postavit most s elektrickovou dráhou
 STR_1810_BUILD_ROAD_TUNNEL                                      :{BLACK}Postavit cestny tunel
+STR_1810_BUILD_TRAMWAY_TUNNEL                                   :{BLACK}Postavit tunel s elektrickovou dráhou
 STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Prepnut stavbu/odstranovanie cesty
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS                       :{BLACK}Prepnút stavbu/odstranovanie elektrickovej dráhy
 STR_1813_SELECT_ROAD_VEHICLE_DEPOT                              :{BLACK}Vybrat orientaciu garaze
+STR_1813_SELECT_TRAM_VEHICLE_DEPOT                              :{BLACK}Vybrat orientáciu elektrickového depa
 STR_1814_ROAD                                                   :Cesta
 STR_1815_ROAD_WITH_STREETLIGHTS                                 :Cesta s lampami
 STR_1816_TREE_LINED_ROAD                                        :Cesta v aleji
@@ -1723,6 +1744,8 @@
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Zeleznicne priecestie
 STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Nie je možné odstránit autobusovú stanicu ...
 STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Nie je možné odstránit nakladaciu rampu ...
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION                         :{WHITE}Nie je možné odstránit osobnú elektrickovú stanicu ...
+STR_CAN_T_REMOVE_CARGO_TRAM_STATION                             :{WHITE}Nie je možné odstránit nákladnú elektrickovú stanicu ...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Mesta
@@ -1730,7 +1753,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Budova sa musi zburat
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Obyvatelstvo: {ORANGE}{COMMA}{BLACK}  Domov: {ORANGE}{COMMA}
@@ -1763,7 +1786,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Zobrazit informacie o miestnej sprave
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}Miestna sprava {TOWN}
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Hodnotenie dopravnych spolocnosti:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Dotacie
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Ponuknute dotacie:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} z {STRING} do {STRING}
@@ -1834,7 +1857,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}... strom tu uz je
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}... nevhodne miesto
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Tu sa strom neda zasadit ...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}... prilis vela popisov
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Tu sa neda dat popis ...
 STR_280A_SIGN                                                   :Popis
@@ -1887,8 +1910,12 @@
 STR_3041_NOW_ACCEPTS_AND                                        :{WHITE}{STATION} teraz prijima {STRING} a {STRING}
 STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Orientacia stanice
 STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Orientacia vykladky
+STR_3042_PASSENGER_TRAM_STATION_ORIENTATION                     :{WHITE}Orientácia osobnej elektricky
+STR_3043_CARGO_TRAM_STATION_ORIENT                              :{WHITE}Orientácia nákladnej elektricky
 STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Stanica musi byt najskor zburana
 STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Vykladka musi byt najskor zburana
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION                   :{WHITE}Najprv sa musí zbúrat osobná elektricková stanica
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION                       :{WHITE}Najprv sa musí zbúrat nákladná elektricková stanica
 STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} Stanic{P a e ""}
 STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
 STR_304A_NONE                                                   :{YELLOW}- Ziadne -
@@ -1900,6 +1927,8 @@
 STR_3050_SELECT_LENGTH_OF_RAILROAD                              :{BLACK}Dlzka zeleznicnej stanice
 STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Vybrat orientaciu stanice
 STR_3052_SELECT_TRUCK_LOADING_BAY                               :{BLACK}Vybrat orientaciu vykladky
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION              :{BLACK}Vyberte orientáciu osobnej elektrickovej stanice
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION                  :{BLACK}Vyberte orientáciu nákladnej elektrickovej stanice
 STR_3053_CENTER_MAIN_VIEW_ON_STATION                            :{BLACK}Vycentrovat pohlad na poziciu stanice
 STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}Zobrazit hodnotenie stanice
 STR_3055_CHANGE_NAME_OF_STATION                                 :{BLACK}Zmenit nazov stanice
@@ -1937,6 +1966,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Pobrezie alebo nabrezie
 STR_3806_SHIP_DEPOT                                             :Lodenica
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}... nemoze byt postavene na vode
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Najprv sa musí zbúrat kanál
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Ulozit hru
@@ -1946,9 +1976,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabajtov volnych
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Zariadenie je necitatelne
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Ulozenie hry zlyhalo
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Ulozenie hry zlyhalo{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Subor sa neda vymazat
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Nahratie hry zlyhalo
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Nahratie hry zlyhalo{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Interná chyba: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Poškodená uložená hra - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Hra bola uložená vo vyššej verzii
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :Súbor nie je možné precítat
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :Nie je možný zápis do súboru
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Zoznam diskov, adresarov a subory ulozenych hier
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Vybrany nazov pre ulozenie hry
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Vymazat vybranu ulozenu hru
@@ -2119,8 +2154,7 @@
 STR_SV_STNAME_LOWER                                             :Dolny {STRING}
 STR_SV_STNAME_HELIPORT                                          :{STRING} Heliport
 STR_SV_STNAME_FOREST                                            :{STRING} Les
-
-STR_SV_GROUP_NAME                                               :{GROUP}
+STR_SV_STNAME_FALLBACK                                          :{STRING} Stanica #{NUM}
 
 ############ end of savegame specific region!
 
@@ -2200,7 +2234,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Hrac {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Nová tvár
 STR_7005_COLOR_SCHEME                                           :{BLACK}Farebna schema
@@ -2212,7 +2246,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Meno prezidenta
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Nazov spolocnosti sa neda zmenit...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Meno prezidenta sa neda zmenit...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Financie {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Financie {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Vydavky/Prijmy
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Vystavba
@@ -2228,20 +2262,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Trzby lodi
 STR_701C_LOAN_INTEREST                                          :{GOLD}Uroky
 STR_701D_OTHER                                                  :{GOLD}Ostatne
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Spolu:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Graf príjmov
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Graf prevadzkoveho zisku
 STR_7026_BANK_BALANCE                                           :{WHITE}Zostatok v banke
 STR_7027_LOAN                                                   :{WHITE}Uver
-STR_MAX_LOAN                                                    :{WHITE}Uverovy limit:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Pozicat {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Splatit {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Uverovy limit:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Pozicat {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Splatit {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}... uverovy limit je {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Nemozno pozicat viac penazi ...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}... uver uz bol splateny
@@ -2280,8 +2314,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Hodnotenie produktivity spolocnosti (maximalna produktivita je 1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Hodnota spolocnosti
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Hodnotenie spolocnosti
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Dopravna spolocnost ma problemy!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} bude predana alebo vyhlasi bankrot pokial coskoro nezvysi produktivitu!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Prezident)
@@ -2319,7 +2353,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Svetova kriza!{}{}Financni experti maju obavy z prepadu ekonomiky!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Koniec krizy!{}{}Ocakava sa vzostup predaja a posilnenie ekonomiky!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Prepnut velkost okna
-STR_7076_COMPANY_VALUE                                          :{GOLD}Hodnota spolocnosti: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Hodnota spolocnosti: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Kupit 25% podiel v spolocnosti
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Predat 25% podiel v spolocnosti
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Kupit 25% podiel v tejto spolocnosti
@@ -2350,6 +2384,8 @@
 STR_LIVERY_HELICOPTER                                           :Helikoptera
 STR_LIVERY_SMALL_PLANE                                          :Male lietadlo
 STR_LIVERY_LARGE_PLANE                                          :Velke lietadlo
+STR_LIVERY_PASSENGER_TRAM                                       :Osobná elektricka
+STR_LIVERY_FREIGHT_TRAM                                         :Nákladná elektricka
 
 STR_LIVERY_GENERAL_TIP                                          :{BLACK}Zobrazit všeobecné farebné schémy
 STR_LIVERY_TRAIN_TIP                                            :{BLACK}Zobrazit farebné schémy pre vlaky
@@ -2629,7 +2665,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Depo
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Mesto oslavuje . . .{}Prvy vlak dorazil do stanice {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Detaily)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Detaily)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Vlak v ceste
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2650,6 +2686,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Chod bez zastavenia do depa {TOWN}
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Opravovat bez zastavenia v depe {TOWN}
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Cesta (neurcený cas)
+STR_TIMETABLE_TRAVEL_FOR                                        :Cesta do {STRING}
+STR_TIMETABLE_STAY_FOR                                          :prestávka {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} d{P en ni ní}
+STR_TIMETABLE_TICKS                                             :{COMMA} tik{P "" y ov}
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Smeruje do {TOWN} depa
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Smeruje do {TOWN} depa, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Servis v depe {TOWN}
@@ -2691,13 +2734,15 @@
 STR_REFIT                                                       :{BLACK}Prestavba
 STR_REFIT_TIP                                                   :{BLACK}Vyberte typ nákladu na prestavbu v tomto poradí. CTRL+klik na odstránenie príkazu prestavby
 STR_REFIT_ORDER                                                 :(Prestavba na {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Cestovný poriadok
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Prepnút na zobrazenie cestovného poriadku
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Prikazy)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Koniec prikazov - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Oprava
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Nemozno kupit vlak...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Vyrobene: {LTBLUE}{NUM}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Hodnota: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Vyrobene: {LTBLUE}{NUM}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Hodnota: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Naklada/Vyklada
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Vlak musi byt zastaveny v depe
@@ -2707,6 +2752,9 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Nemozno vlozit novy prikaz...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Nemozno vymazat tebnto prikaz ...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Nemozno zmenit tento prikaz ...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Nie je možné presunút tento príkaz ...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Nie je možné vynechat tento príkaz ...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Nie je možné preskocit na vybraný príkaz ...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Nemozno posuvat vozdlo ...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}Zadný stroj vždy doprevádza svoj druhý stroj vpredu
 STR_8838_N_A                                                    :Nie je{SKIP}
@@ -2738,11 +2786,16 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Zobrazit kapacitu kazdeho vozidla
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Zobrazit celkovu kapacitu vlaku, rozdelenu podla typu nakladu
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Zoznam prikazov - kliknut na prikaz pre oznacenie
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Preskocit aktuálny príkaz a zacat další. Podržte CTRL pre skok na oznacený príkaz
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Vymazat oznaceny prikaz
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Oznaceny prikaz bude prevedeny bez zastavenia
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Vlozit novy prikaz pred oznaceny prikaz, alebo na koniec zoznamu
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Na oznacenom prikaze bude vozidlo cakat na plne nalozenie
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Na oznacenom prikaze bude vozidlo uplne vylozene
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Cestovný poriadok - kliknite na príkaz pre jeho oznacenie
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Zmenit dlžku trvania oznaceného príkazu
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Vymazat dlžku trvania oznaceného príkazu
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Resetnút pocítadlo meškania, takye vozidlo pojde presne
 STR_SERVICE_HINT                                                :{BLACK}Vynechat tento prikaz pokial nie je potrebna oprava
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Cena: {CURRENCY} Hmotnost: {WEIGHT_S}{}Rýchlost: {VELOCITY}  Výkon: {POWER}{}Náklady na prevádzku: {CURRENCY}/rok{}Kapacita: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Pokazene
@@ -2764,6 +2817,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Typ vlaku nemoze byt premenovany ...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}U vyznaceneho prikazu musi vozidlo vylozit naklad
 STR_886F_TRANSFER                                               :{BLACK}Prekladka
+STR_CLEAR_TIME                                                  :{BLACK}Vymazat cas
+STR_RESET_LATENESS                                              :{BLACK}Reset meskania
 
 STR_TRAIN_STOPPING                                              :{RED}Zastavuje
 STR_TRAIN_STOPPING_VEL                                          :{RED}Zastavuje, {VELOCITY}
@@ -2772,8 +2827,20 @@
 STR_TRAIN_START_NO_CATENARY                                     :Vlak nemoze nastartovat, pretoze trat nie je pripojena
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Nové {STRING} dostupné!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Nové {STRING} dostupné!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Nové {STRING} dostupné!  -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Vozidlu nie je možné zadat cestovný poriadok ...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Vozidlá možu cakat len v staniciach.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Toto vozidlo nezastavuje v tejto stanici.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Zmenit cas
+STR_TIMETABLE_STATUS_ON_TIME                                    :Toto vozidlo ide presne
+STR_TIMETABLE_STATUS_LATE                                       :Toto vozidlo mešká {STRING}
+STR_TIMETABLE_STATUS_EARLY                                      :Toto vozidlo ide {STRING} skor
+STR_TIMETABLE_TOTAL_TIME                                        :Na dokoncenie cestovného poriadku je potrebných {STRING}
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :Na dokoncenie cestovného poriadku je potrebných najmenej {STRING} (nie všetko je urcené)
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Autovyplnenie
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Vyplnit cestovný poriadok automaticky hodnotami z prvej cesty
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Automobil v ceste
@@ -2789,7 +2856,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Max. rychlost: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Zisk tento rok: {LTBLUE}{CURRENCY}  (posledny rok: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Spolahlivost: {LTBLUE}{COMMA}%  {BLACK}Pocet poruch od posledneho servisu: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Vyrobene: {LTBLUE}{NUM}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Vyrobene: {LTBLUE}{NUM}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Kapacita: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}... musi byt zastaveny v garazi
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Nemozno predat automobil ...
@@ -2816,12 +2883,16 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Vyber vozidiel - kliknut pre detaily
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Zakupit vybrany automobil
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Cena: {CURRENCY}{}Rychlost: {VELOCITY}{}Naklady na prevadzku: {CURRENCY}/rok{}Kapacita: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Kapacita: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Pomenovat automobil
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Nemozno pomenovat automobil ...
 STR_902E_NAME_ROAD_VEHICLE                                      :{BLACK}Pomenovat automobil
 STR_902F_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Mesto oslavuje . . .{}Prvy autobus dorazil do {STATION}!
 STR_9030_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Mesto oslavuje . . .{}Prvy automobil dorazil do {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Mesto oslavuje . . .{}Prvá elektricka dorazila do stanice {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Mesto oslavuje . . .{}Prvá nákladná elektricka dorazila do stanice {STATION}!
 STR_9031_ROAD_VEHICLE_CRASH_DRIVER                              :{BLACK}{BIGFONT}Dopravna nehoda!{}Vodic zahynul po kolizii s vlakom
 STR_9032_ROAD_VEHICLE_CRASH_DIE                                 :{BLACK}{BIGFONT}Dopravna nehoda!{}{COMMA} mrtvych po kolizii s vlakom
 STR_9033_CAN_T_MAKE_VEHICLE_TURN                                :{WHITE}Nemozno otocit vozidlo ...
@@ -2861,7 +2932,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Max. rychlost: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Zisk tento rok: {LTBLUE}{CURRENCY}  (posledny rok: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Spolahlivost: {LTBLUE}{COMMA}%  {BLACK}Pocet poruch od posledneho servisu: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Vyrobene: {LTBLUE}{NUM}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Vyrobene: {LTBLUE}{NUM}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Kapacita: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Nemozno zastavit/spustit lod ...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Nemozno poslat lod do lodenice ...
@@ -2929,7 +3000,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Max. rychlost: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Zisk tento rok: {LTBLUE}{CURRENCY}  (posledny rok: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Spolahlivost: {LTBLUE}{COMMA}%  {BLACK}Pocet poruch od posledneho servisu: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Vyrobene: {LTBLUE}{NUM}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Vyrobene: {LTBLUE}{NUM}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Nemozno poslat lietadlo do hangaru ...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Smeruje do {STATION} hangaru
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Smeruje do {STATION} hangaru, {VELOCITY}
@@ -2982,6 +3053,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Chod do {STATION} Hangaru
 SERVICE_AT_AIRPORT_HANGAR                                       :Opravit v {STATION} hangári
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Cestovný poriadok)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Zeppelin zniceny pri nehode na {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Automobil bol zniceny pri kolizii s 'UFO'
@@ -3106,6 +3179,7 @@
 
 ### depot strings
 STR_DEPOT_SELL_CONFIRMATION_TEXT                                :{YELLOW}Chystáte sa predat všetky vozidlá v depe. Ste si isý?
+STR_DEPOT_WRONG_DEPOT_TYPE                                      :Nesprávny typ depa
 
 STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP                             :{BLACK}Predat všetky vlaky v depe
 STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP                           :{BLACK}Predat všetky vozidlá v garáži
@@ -3296,6 +3370,14 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Prepnút priehladnost staníc, garáží, tratí, ...
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Prepnút priehladnost mostov
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Prepnút priehladnost objektov ako sú majáky a antény
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Prepnút priehladnost pre ukazovatele nakladnia
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Skupina {COMMA}
@@ -3333,4 +3415,11 @@
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Zisk tento rok: {GREEN}{CURRENCY} {BLACK}(minulý rok: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Zisk tento rok: {RED}{CURRENCY} {BLACK}(minulý rok: {RED}{CURRENCY}{BLACK})
 
+STR_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
 ########
--- a/src/lang/slovenian.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/slovenian.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -11,8 +11,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Čez rob zemljevida
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Preblizu roba zemljevida
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Premalo denarja - potrebuješ {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Potrebno je ravno zemljišče
 STR_0008_WAITING                                                :{BLACK}Čaka: {WHITE}{STRING}
@@ -537,7 +537,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Lokalna oblast: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Brez
 STR_01AA_NAME                                                   :{BLACK}Ime
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1.
@@ -820,6 +820,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Nastavitve težavnosti
 STR_02C7_CONFIG_PATCHES                                         :Urejanje popravkov
 STR_NEWGRF_SETTINGS                                             :NewGRF nastavitve
+STR_TRANSPARENCY_OPTIONS                                        :Nastavitve prozornega pogleda
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Imena mest prikazana
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Imena postaj prikazana
@@ -847,7 +848,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Zemljevid sveta
 STR_EXTRA_VIEW_PORT                                             :Dodaten pogled
 STR_SIGN_LIST                                                   :Seznam napisov
-STR_TRANSPARENCY_OPTIONS                                        :Nastavitve prozornega pogleda
 STR_02DF_TOWN_DIRECTORY                                         :Imenik mest
 STR_TOWN_POPULATION                                             :{BLACK}Svetovno prebivalstvo: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Pogled {COMMA}
@@ -1145,6 +1145,9 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Hitrost premika s kolescem miške: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Avtomatsko pavziraj ob zagonu nove igre: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Uporabi napreden seznam vozil: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Uporabi pregledno polnenje: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Omogoči časovne tabele vozil: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Prikaz časovnih tabel v pikah namesto dneh: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Največ vlakov na igralca: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Največ cestnih vozil na igralca: {ORANGE}{STRING}
@@ -1228,7 +1231,7 @@
 STR_CHEATS                                                      :{WHITE}Goljufije
 STR_CHEATS_TIP                                                  :{BLACK}Kljukice kažejo, če so bile goljufije že kdaj uporabljene
 STR_CHEATS_WARNING                                              :{BLACK}Pozor! Nameravaš izdati svoje tekmece. Tako sramotno dejanje bo zabeleženo za vselej.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Povečaj denar za {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Povečaj denar za {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Igra se kot igralec: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Čarobni buldožer (odstrani tovarne, neodstranljive objekte): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tuneli se lahko križajo pod zemljo: {ORANGE}{STRING}
@@ -1483,9 +1486,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Ime podjetja:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Ustanovljeno:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Vrednost podjetja:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Trenutno stanje:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Lanski dohodek:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Vrednost podjetja:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Trenutno stanje:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Lanski dohodek:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Ocene:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Vozila:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1720,7 +1723,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Najprej mora biti stavba porušena
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Prebivalstvo: {ORANGE}{COMMA}{BLACK}  Število stavb: {ORANGE}{COMMA}
@@ -1753,7 +1756,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Pokaži informacije o mestni oblasti
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} mestni svet
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Ocene prevoznega podjetja:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subvencije
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Ponudba subvencije za storitev:
 STR_2027_FROM_TO                                                :{ORANGE}Prevoz {STRING.r} iz {STRING} v {STRING}
@@ -1825,7 +1828,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE} ... drevo je že posajeno
 STR_2804_SITE_UNSUITABLE                                        :{WHITE} ... neprimerna lokacija
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Ne moreš posaditi drevesa tukaj ...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE} ... preveč znakov
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Ne moreš postaviti znaka tukaj
 STR_280A_SIGN                                                   :Znak
@@ -1934,6 +1937,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Obala ali nabrežje
 STR_3806_SHIP_DEPOT                                             :Ladjedelnica
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE} ... Nemogoča gradnja na vodi
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Najprej moraš porušiti kanal
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Shrani igro
@@ -1943,9 +1947,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabajt{P "" a i ov} prosto
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Nemogoče branje pogona
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Shranjevanje igre ni uspelo
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Shranjevanje igre ni uspelo{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Nemogoče brisanje datoteke
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Nalaganje igre ni uspelo
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Nalaganje igre ni uspelo{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Interna napaka: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Napaka v shranjeni igri - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Igra je bila shranjena z novejso razlicico
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :Datoteke ni mozno brati
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :V datoteko ni mozno pisati
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Seznam pogonov, map in shranjenih iger
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Trenutno izbrano ime za shranjevanje
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Izbriši trenutno izbrano shranjeno igro
@@ -2154,7 +2163,7 @@
 STR_SV_STNAME_HELIPORT                                          :{STRING} Pristajališče
 STR_SV_STNAME_FOREST                                            :{STRING} Gozd
 
-STR_SV_GROUP_NAME                                               :{GROUP}
+
 
 ############ end of savegame specific region!
 
@@ -2234,7 +2243,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Igralec {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Nov obraz
 STR_7005_COLOR_SCHEME                                           :{BLACK}Barvna shema
@@ -2246,7 +2255,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Ime lastnika
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Ni mogoče spremeniti imena podjetja ...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Ni mogoče spremeniti imena lastnika ...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finance {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finance {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Stroški/dohodek
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Gradnja
@@ -2262,20 +2271,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Prihodek ladij
 STR_701C_LOAN_INTEREST                                          :{GOLD}Obresti posojila
 STR_701D_OTHER                                                  :{GOLD}Drugo
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Skupaj:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Graf prihodkov
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Graf čistega dobička
 STR_7026_BANK_BALANCE                                           :{WHITE}Bančno stanje
 STR_7027_LOAN                                                   :{WHITE}Posojilo
-STR_MAX_LOAN                                                    :{WHITE}Meja posojila:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Izposoja {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Vračilo {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Meja posojila:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Izposoja {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Vračilo {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE} ... najvišje posojilo je {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Ni mogoča izposoja več denarja ...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE} ... ni posojila za odplačati
@@ -2314,8 +2323,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Ocene uspeha podjetja (max=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Vrednosti podjetij
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Seznam najboljših podjetij
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Podjetje v težavah!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :Podjetje {BLACK}{BIGFONT}{COMPANY} bo prodano ali prisiljeno v stečajni postopek, če se stanje kaj kmalu ne izboljša!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Lastnik)
@@ -2353,7 +2362,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Svetovna recesija!{}{}Ekonomisti se bojijo najhujšega ob trenutnem poteku dogodkov!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Konec recesije!{}{}Izboljšanje trgovanja povečuje zaupanje domače industrije, gospodarstvo napreduje!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Preklopi veliko/majhno velikost okna
-STR_7076_COMPANY_VALUE                                          :{GOLD}Vrednost podjetja: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Vrednost podjetja: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Kupi 25% delnic podjetja
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Prodaj 25% delnic podjetja
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Kupi 25% delnic tega podjetja
@@ -2665,7 +2674,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Železniška garaža
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Prebivalci praznujejo . . .{}Prvi vlak je slovesno pripeljal{}na postajo {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Podrobnosti)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Podrobnosti)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Vlak v napoto
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING}{STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING}{STRING}
@@ -2686,6 +2695,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Pojdi brez postanka do garaže {TOWN}
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Non stop na servis v {TOWN} železniško garažo
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Potovanje (brez časovnih tabel)
+STR_TIMETABLE_TRAVEL_FOR                                        :Potuj za {STRING}
+STR_TIMETABLE_STAY_FOR                                          :in ostani za {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} d{P an neva i i}
+STR_TIMETABLE_TICKS                                             :{COMMA} pik{P a i e ""}
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Pelje v {TOWN} železniško garažo
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Pelje v {TOWN} železniško garažo, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Na servis v {TOWN} železniško garažo
@@ -2727,13 +2743,15 @@
 STR_REFIT                                                       :{BLACK}Predelaj
 STR_REFIT_TIP                                                   :{BLACK}Izberi predelavo za vrsto tovora, ki ga želiš. CTRL + klik za odstranitev ukaza predelave
 STR_REFIT_ORDER                                                 :(Predelaj za {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Časovna tabela
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Preklop na pogled časovnih tabel
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Ukazi)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Konec ukazov - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Servis
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Ni mogoče kupiti vozila ...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Zgrajeno: {LTBLUE}{NUM}{BLACK} Vrednost: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Vrednost: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Zgrajeno: {LTBLUE}{NUM}{BLACK} Vrednost: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Vrednost: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Natovarjanje / Raztovarjanje
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Vlak mora biti ustavljen v garaži
@@ -2743,6 +2761,7 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Ni mogoče vstaviti nov ukaz ...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Ni mogoče izbrisati ukaza ...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Ni mogoče spreminjati ukaza ...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Ni možen premik tega ukaza...
 STR_CAN_T_SKIP_ORDER                                            :{WHITE}Nemogoč preskok trenutnega ukaza...
 STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Nemogoč preskok na izbran ukaz...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Ni mogoče premakniti vozila ...
@@ -2782,6 +2801,10 @@
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Vstavi nov ukaz pred izbranega ali pa ga dodaj na koncu seznama
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Označi izbran ukaz, naj vozilo čaka na polno obremenitev
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Označi izbran ukaz, naj se vozilo v celoti raztovori
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Časovna tabela - clikni na ukaz za ga označit.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Spremeni čas, ki naj bi ga označeni ukaz porabil
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Počisti čas za označen ukaz
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Resetiraj števec zamud, da bodo vozila točna
 STR_SERVICE_HINT                                                :{BLACK}Preskoči ta ukaz, razen če je potreben servis
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Cena: {CURRENCY} Teža: {WEIGHT_S}{}Hitrost: {VELOCITY}  Moč: {POWER}{}Cena delovanja: {CURRENCY}/leto{}Zmogljivost: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}V okvari
@@ -2803,6 +2826,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Ni mogoče preimenovati železniškega vozila ...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Nastavi označen ukaz, naj prisili vozilo, da se raztovori
 STR_886F_TRANSFER                                               :{BLACK}Pretovori
+STR_CLEAR_TIME                                                  :{BLACK}Počisti čas
+STR_RESET_LATENESS                                              :{BLACK}Resetiraj  Late Counter
 
 STR_TRAIN_STOPPING                                              :{RED}Se ustavlja
 STR_TRAIN_STOPPING_VEL                                          :{RED}Se ustavlja, {VELOCITY}
@@ -2811,8 +2836,16 @@
 STR_TRAIN_START_NO_CATENARY                                     :Ta proga nima napetostnih vodov, zato vlak ne more z mesta
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Novo! {STRING} sedaj na razpolago!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Novo! {STRING} sedaj na razpolago!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Novo! {STRING} sedaj na razpolago!  -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Nemogoče določiti časa vozilu...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Vozila lahko čakajo le na postajah.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}To vozilo se ne ustavlja na tej postaji.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Spremeni čas
+STR_TIMETABLE_STATUS_ON_TIME                                    :To vozilo trenutno vozi po točnem času
+STR_TIMETABLE_STATUS_LATE                                       :To vozilo zamuja za  {STRING} .
+STR_TIMETABLE_STATUS_EARLY                                      :To vozilo prehiteva za {STRING} .
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Cestno vozilo na poti
@@ -2828,7 +2861,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Max. hitrost: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Letošnji dobiček: {LTBLUE}{CURRENCY}  (lanski: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Zanesljivost: {LTBLUE}{COMMA}%  {BLACK}Št. okvar od zadnjega servisa: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Zgrajen: {LTBLUE}{NUM}{BLACK} Vrednost: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Zgrajen: {LTBLUE}{NUM}{BLACK} Vrednost: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Zmogljivost: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE} ... mora biti ustavljen v garaži
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Ni mogoče prodati cestnega vozila...
@@ -2855,6 +2888,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Seznam cestnih vozil - klikni na vozilo za informacije
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Zgradi izbrano cestno vozilo
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Cena: {CURRENCY}{}Hitrost: {VELOCITY}{}Cena delovanja: {CURRENCY}/leto{}Zmogljivost: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Zmogljivost: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Poimenuj cestno vozilo
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Ni mogoče poimenovati cestnega vozila ...
@@ -2902,7 +2937,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Max. hitrost: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Dobiček letos: {LTBLUE}{CURRENCY}  (lani: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Zanesljivost: {LTBLUE}{COMMA}%  {BLACK}Št. okvar po zadnjem servisu: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Zgrajen: {LTBLUE}{NUM}{BLACK} Vrednost: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Zgrajen: {LTBLUE}{NUM}{BLACK} Vrednost: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Zmogljivost: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Ni mogoče ustaviti/zagnati ladje...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Ni mogoče poslati ladje v garažo...
@@ -2970,7 +3005,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Max. hitrost: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Dobiček letos: {LTBLUE}{CURRENCY}  (lani: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Zanesljivost: {LTBLUE}{COMMA}%  {BLACK}Št. okvar po zadnjem servisu: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Zgrajeno: {LTBLUE}{NUM}{BLACK} Vrednost: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Zgrajeno: {LTBLUE}{NUM}{BLACK} Vrednost: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Ni mogoče poslati letala v hangar ...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Na poti v {STATION} hangar
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Na poti v {STATION} hangar, {VELOCITY}
@@ -3023,6 +3058,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Pojdi v {STATION} hangar
 SERVICE_AT_AIRPORT_HANGAR                                       :Na servisiranje v {STATION} Hangar
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Časovna tabela)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Nesreča cepelina na letališču {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Cestno vozilo uničeno v trku z 'NLP'!
@@ -3338,6 +3375,14 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Prozoren ali navaden pogled ostalih objektov kot so postaje, garaže...
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Prozoren ali navaden pogled mostov
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Prozoren ali navaden pogled struktur kot so antene, svetilniki...
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Preklop na prosojnost za prikaz polnenja
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Skupina {COMMA}
@@ -3375,4 +3420,5 @@
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Dobiček letos: {GREEN}{CURRENCY} {BLACK}(lani: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Dobiček letos: {RED}{CURRENCY} {BLACK}(lani: {RED}{CURRENCY}{BLACK})
 
+
 ########
--- a/src/lang/spanish.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/spanish.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -4,13 +4,15 @@
 ##plural 0
 ##gender masculino femenino
 
+#
+
 ##id 0x0000
 STR_NULL                                                        :
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Fuera del borde del mapa
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Demasiado cerca del borde del mapa
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}No hay suficiente dinero - se requiere {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Se requiere terreno llano
 STR_0008_WAITING                                                :{BLACK}Esperando: {WHITE}{STRING}
@@ -494,7 +496,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Autoridad local: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Ninguna
 STR_01AA_NAME                                                   :{BLACK}Nombre
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1
@@ -777,6 +779,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Configuración de dificultad
 STR_02C7_CONFIG_PATCHES                                         :Configurar parches
 STR_NEWGRF_SETTINGS                                             :Configuración Newgrf
+STR_TRANSPARENCY_OPTIONS                                        :Opciones de transparencia
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Ver nombres de poblaciones
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Ver nombres de estaciones
@@ -804,7 +807,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Mapa del mundo
 STR_EXTRA_VIEW_PORT                                             :Punto de vista extra
 STR_SIGN_LIST                                                   :Lista de señales
-STR_TRANSPARENCY_OPTIONS                                        :Opciones de transparencia
 STR_02DF_TOWN_DIRECTORY                                         :Listado de poblaciones
 STR_TOWN_POPULATION                                             :{BLACK}Población mundial: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Vista {COMMA}
@@ -1047,6 +1049,7 @@
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Nuevo sistema de busq. de rutas global (NPF, anula a NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Carga el multiplicador de peso para simular trenes pesados: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Permite conducir en paradas sobre carreteras de ciudades: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADJACENT_STATIONS                            :{LTBLUE}Permitir construcción en estaciones contiguas : {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Permitir siempre aeropuertos pequeños: {ORANGE}{STRING}
 
@@ -1087,6 +1090,7 @@
 STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Mantener los helicópteros en helipuertos automáticamente: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Une la caja de paisaje a la barra de rail/carretera...: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}El scroll de ratón mueve la vista en dirección opuesta: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING                             :{LTBLUE}Scroll de vista suavizado: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Muestra medidas con las herramientras construcción: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Ver estaciones de la empresa: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES_NONE                                :Ninguno
@@ -1100,6 +1104,17 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Velocidad del scroll sobre el mapa: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automaticamente hace pausa cuando empieza un juego nuevo: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Usar la lista avanza de vehículos: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Usar indicadores de carga: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Activar horarios para vehículos: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Mostrar horario en ticks en vez de en dias: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE                            :{LTBLUE}Tipo de rail por defecto (después de juego nuevo/cargar juego): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Rail Normal
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Rail Electrificado
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Monorail
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :Primero disponible
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :Último disponible
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :Más usados
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Máx trenes por jugador: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Máx vehículos de carretera por jugador: {ORANGE}{STRING}
@@ -1183,7 +1198,7 @@
 STR_CHEATS                                                      :{WHITE}Trucos
 STR_CHEATS_TIP                                                  :{BLACK}Las casillas indican si ha usado este truco antes
 STR_CHEATS_WARNING                                              :{BLACK}Atención! Usted está a punto de traicionar a sus competidores. Tenga presente que tal deshonra será recordada para toda la eternidad.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Incrementar dinero en {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Incrementar dinero en {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Jugar como el jugador: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Bulldozer mágico (elimina industrias, etc.): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Los túneles pueden cruzarse: {ORANGE}{STRING}
@@ -1394,6 +1409,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :Inglés
 STR_NETWORK_LANG_GERMAN                                         :Alemán
 STR_NETWORK_LANG_FRENCH                                         :Francés
+STR_NETWORK_LANG_BRAZILIAN                                      :Brasileño
+STR_NETWORK_LANG_BULGARIAN                                      :Búlgaro
+STR_NETWORK_LANG_CHINESE                                        :Chino
+STR_NETWORK_LANG_CZECH                                          :Checo
+STR_NETWORK_LANG_DANISH                                         :Danés
+STR_NETWORK_LANG_DUTCH                                          :Alemán
+STR_NETWORK_LANG_ESPERANTO                                      :Esperanto
+STR_NETWORK_LANG_FINNISH                                        :Fines
+STR_NETWORK_LANG_HUNGARIAN                                      :Hungaro
+STR_NETWORK_LANG_ICELANDIC                                      :Islandes
+STR_NETWORK_LANG_ITALIAN                                        :Italiano
+STR_NETWORK_LANG_JAPANESE                                       :Japones
+STR_NETWORK_LANG_KOREAN                                         :Coreano
+STR_NETWORK_LANG_LITHUANIAN                                     :Lituano
+STR_NETWORK_LANG_NORWEGIAN                                      :Noruego
+STR_NETWORK_LANG_POLISH                                         :Polaco
+STR_NETWORK_LANG_PORTUGUESE                                     :Portugués
+STR_NETWORK_LANG_ROMANIAN                                       :Rumano
+STR_NETWORK_LANG_RUSSIAN                                        :Ruso
+STR_NETWORK_LANG_SLOVAK                                         :Eslovaco
+STR_NETWORK_LANG_SLOVENIAN                                      :Esloveno
+STR_NETWORK_LANG_SPANISH                                        :Español
+STR_NETWORK_LANG_SWEDISH                                        :Sueco
+STR_NETWORK_LANG_TURKISH                                        :Turco
+STR_NETWORK_LANG_UKRAINIAN                                      :Ucraniano
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Sala de estar del juego multijugador
@@ -1413,9 +1453,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Nombre empresa:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Inauguración:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Valor empresa:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Balance actual:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Ingresos último año:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Valor empresa:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Balance actual:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Ingresos último año:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Rendimiento:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Vehículos:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1587,6 +1627,13 @@
 STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Vía del tren con pre-señales
 STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Vía del tren con señales de salida
 STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Vía del tren con señales combo
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Vía de tren con señales normales y preseñalización
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Vía de tren con señales normales y señales de salida
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Vía de tren con señales combo y normales
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Vía de tren con preseñalización y señales de salida
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Vía de tren con preseñalización y señales combo
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Vía de tren con señales de salida y señales combo
+STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Debes quitar la estación de tren primero
 
 
 
@@ -1594,22 +1641,39 @@
 STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Ha de retirar carretera primero
 STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Trabajos en la carretera en progreso
 STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Construcción de carretera
+STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Construcción de tranvía
 STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Elige puente de carretera
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}... carreteras de un sentido no pueden tener intersecciones
 STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}No se puede construir carretera aquí...
+STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}No se puede construir un tranvía aquí...
 STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}No se puede retirar carretera de aquí...
+STR_1805_CAN_T_REMOVE_TRAMWAY_FROM                              :{WHITE}No se puede quitar el tranvía de aquí...
 STR_1806_ROAD_DEPOT_ORIENTATION                                 :{WHITE}Orientación del depósito
+STR_1806_TRAM_DEPOT_ORIENTATION                                 :{WHITE}Orientación del depósito de tranvía
 STR_1807_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}No se puede construir depósito de carretera aquí...
+STR_1807_CAN_T_BUILD_TRAM_VEHICLE                               :{WHITE}No se puede construir depósito de tranvía aquí...
 STR_1808_CAN_T_BUILD_BUS_STATION                                :{WHITE}No se puede construir estación de autobuses...
 STR_1809_CAN_T_BUILD_TRUCK_STATION                              :{WHITE}No se puede construir estación de camiones...
+STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION                     :{WHITE}No se puede construir estación de tranvía de pasajeros...
+STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION                         :{WHITE}No puede construir estación de tranvía de carga...
 STR_180A_ROAD_CONSTRUCTION                                      :Construcción de carretera
+STR_180A_TRAMWAY_CONSTRUCTION                                   :Construcción de tranvía
 STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Construir sección de carretera
+STR_180B_BUILD_TRAMWAY_SECTION                                  :{BLACK}Construir sección de tranvía
 STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Construir depósito de carretera (para construir y despachar vehículos)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT                               :{BLACK}Construir depósito de tranvías (para vehículos de contrucción y servicio)
 STR_180D_BUILD_BUS_STATION                                      :{BLACK}Construir estación de autobús
 STR_180E_BUILD_TRUCK_LOADING_BAY                                :{BLACK}Construir estación de carga para camiones
+STR_180D_BUILD_PASSENGER_TRAM_STATION                           :{BLACK}Construir estación de tranvía de pasajeros
+STR_180E_BUILD_CARGO_TRAM_STATION                               :{BLACK}Construir estación de tranvía de carga
 STR_180F_BUILD_ROAD_BRIDGE                                      :{BLACK}Construir puente de carretera
+STR_180F_BUILD_TRAMWAY_BRIDGE                                   :{BLACK}Construir puente de tranvía
 STR_1810_BUILD_ROAD_TUNNEL                                      :{BLACK}Construir túnel de carretera
+STR_1810_BUILD_TRAMWAY_TUNNEL                                   :{BLACK}Construir tunel de tranvía
 STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Cambiar entre construir/retirar carretera
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS                       :{BLACK}Activar construir/quitar para construcciones de tranvía
 STR_1813_SELECT_ROAD_VEHICLE_DEPOT                              :{BLACK}Elegir orientación del depósito de carretera
+STR_1813_SELECT_TRAM_VEHICLE_DEPOT                              :{BLACK}Seleccione orientación del depósito de tranvías
 STR_1814_ROAD                                                   :Road
 STR_1815_ROAD_WITH_STREETLIGHTS                                 :Carretera con farolas
 STR_1816_TREE_LINED_ROAD                                        :Carretera arbolada
@@ -1617,6 +1681,8 @@
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Paso a nivel
 STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}No se puede quitar la estación de bus...
 STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}No se puede quitar la estación de camiones...
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION                         :{WHITE}No se puede quitar estación de tranvía de pasajeros...
+STR_CAN_T_REMOVE_CARGO_TRAM_STATION                             :{WHITE}No se puede quitar estación de tranvía de carga...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Poblaciones
@@ -1624,7 +1690,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}El edificio debe demolerse primero
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Habitantes: {ORANGE}{COMMA}{BLACK}  Casas: {ORANGE}{COMMA}
@@ -1657,7 +1723,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Mostrar información sobre autoridades locales
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} autoridad local
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Ranking de empresas de transporte:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subvenciones
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Se ofrecen subvenciones por llevar:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} desde {STRING} a {STRING}
@@ -1728,7 +1794,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...ya hay árboles aquí
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...sitio no apropiado
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}No se pueden plantar árboles aquí...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...demasiadas señales
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}No se puede colocar una señal aquí...
 STR_280A_SIGN                                                   :Señal
@@ -1781,8 +1847,12 @@
 STR_3041_NOW_ACCEPTS_AND                                        :{WHITE}{STATION} acepta ahora {STRING} y {STRING}
 STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Or. estación de autobús
 STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Or. estación de camiones
+STR_3042_PASSENGER_TRAM_STATION_ORIENTATION                     :{WHITE}Orientación Tranvía Pasajeros
+STR_3043_CARGO_TRAM_STATION_ORIENT                              :{WHITE}Orientación Tranvía de Carga
 STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Primero debe demolerse estación de autobús
 STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Primero debe demolerse estación de camiones
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION                   :{WHITE}Debe demoler la estación del tranvía de pasajeros primero
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION                       :{WHITE}Debe demoler la estación del tranvía de carga primero
 STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} Estaciones
 STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
 STR_304A_NONE                                                   :{YELLOW}- Ninguna -
@@ -1794,6 +1864,8 @@
 STR_3050_SELECT_LENGTH_OF_RAILROAD                              :{BLACK}Elige longitud de la estación de tren
 STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Elige la orientación de la estación de autobús
 STR_3052_SELECT_TRUCK_LOADING_BAY                               :{BLACK}Elige la orientación de la estación de camiones
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION              :{BLACK}Seleccione la orientación de la estación del tranvía de pasajeros
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION                  :{BLACK}Seleccione la orientación de la estación del tranvía de carga
 STR_3053_CENTER_MAIN_VIEW_ON_STATION                            :{BLACK}Centrar vista en la posición de la estación
 STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}Ver calificación de la estación
 STR_3055_CHANGE_NAME_OF_STATION                                 :{BLACK}Cambiar nombre de la estación
@@ -1831,6 +1903,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Costa o rivera
 STR_3806_SHIP_DEPOT                                             :Astillero
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...No se puede construir sobre el agua
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Debes demoler el canal primero
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Guardar Juego
@@ -1840,9 +1913,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabytes libres
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}No es posible leer la unidad
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Error guardando juego
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Error guardando juego{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}No es posible borrar el fichero
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Carga de juego erronea
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Carga de juego erronea{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Error interno: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Partida guardada corrupta - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :La partida guardada ha sido realizada con una versión más nueva
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :No se puede leer fichero
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :Fichero no escribible
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Listado de unidades, directorios y juegos guardados
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Nombre seleccionado actualmente para el juego guardado
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Borrar el juego guardado seleccionado
@@ -2013,7 +2091,7 @@
 STR_SV_STNAME_LOWER                                             :{STRING} Bajo
 STR_SV_STNAME_HELIPORT                                          :Helipuerto de {STRING}
 STR_SV_STNAME_FOREST                                            :Bosque de {STRING}
-
+STR_SV_STNAME_FALLBACK                                          :{STRING} Estación #{NUM}
 
 ############ end of savegame specific region!
 
@@ -2093,7 +2171,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Jugador {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Nueva Cara
 STR_7005_COLOR_SCHEME                                           :{BLACK}Esquema Color
@@ -2105,7 +2183,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Nombre del Presidente
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}No se puede cambiar el nombre de la empresa...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}No se puede cambiar el nombre del presidente...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finanzas {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finanzas {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Gastos/Ingresos
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Construcción
@@ -2121,20 +2199,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Ingresos Barcos
 STR_701C_LOAN_INTEREST                                          :{GOLD}Intereses de Préstamo
 STR_701D_OTHER                                                  :{GOLD}Otros
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Total:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Gráfico de Ingresos
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Gráfico de Beneficio Operativo
 STR_7026_BANK_BALANCE                                           :{WHITE}Saldo en Banco
 STR_7027_LOAN                                                   :{WHITE}Préstamo
-STR_MAX_LOAN                                                    :{WHITE}Préstamo Máx:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Pedir Préstamo {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Pagar Préstamo {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Préstamo Máx:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Pedir Préstamo {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Pagar Préstamo {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...máxima cantidad de préstamo permitida es {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}No se puede pedir más prestamo...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...no hay préstamo que pagar
@@ -2173,8 +2251,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Calificaciones de actuación de compañías (tasa máx.=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Valores de las empresas
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Ranking de Empresas
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}¡Empresa en problemas!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} debe ser vendida o declarada en bancarrota a no ser que mejore su actuación!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Presidente)
@@ -2212,7 +2290,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}¡Recesión Mundial!{}{}¡Los expertos financieros son pesimistas mientras la economía se hunde!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}¡Fin de la Recesión!{}{}¡Mejora en el comercio da ánimos a las industrias mientras la economía se fortalece!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Cambiar entre tamaño de ventana grande/pequeño
-STR_7076_COMPANY_VALUE                                          :{GOLD}Valor de la empresa: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Valor de la empresa: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Comprar un 25% de sus acciones
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Vender 25% de acciones
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Comprar 25% de acciones de esta empresa
@@ -2243,6 +2321,8 @@
 STR_LIVERY_HELICOPTER                                           :Helicoptero
 STR_LIVERY_SMALL_PLANE                                          :Aeroplano Pequeño
 STR_LIVERY_LARGE_PLANE                                          :Aeroplano Grande
+STR_LIVERY_PASSENGER_TRAM                                       :Tranvía de Pasajeros
+STR_LIVERY_FREIGHT_TRAM                                         :Tranvía de Carga
 
 STR_LIVERY_GENERAL_TIP                                          :{BLACK}Mostrar esquema de colores general
 STR_LIVERY_TRAIN_TIP                                            :{BLACK}Ver esquema de color de los trenes
@@ -2522,7 +2602,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN}, Depósito de tren
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Los ciudadanos celebran . . .{}¡Primer tren llega a {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Detalles)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Detalles)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Tren en camino
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING}{STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING}{STRING}
@@ -2543,6 +2623,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Ir sin parar al depósito de {TOWN}
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Ir sin parar al depósito de {TOWN} para mantenimiento
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Viaje (sin horarios)
+STR_TIMETABLE_TRAVEL_FOR                                        :Viaje para {STRING}
+STR_TIMETABLE_STAY_FOR                                          :y estancia en {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} días{P "" s}
+STR_TIMETABLE_TICKS                                             :{COMMA} señal{P "" s}
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Hacia el depósito de {TOWN}
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Hacia el depósito de {TOWN}, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Servicio en el depósito de trenes de {TOWN}
@@ -2584,13 +2671,15 @@
 STR_REFIT                                                       :{BLACK}Recargar
 STR_REFIT_TIP                                                   :{BLACK}Selecciona el tipo de carga a recargar en esta orden. Control+click para quitar la orden de recargar
 STR_REFIT_ORDER                                                 :(Recargar en {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Horarios
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Cambiar a la vista de horarios
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Órdenes)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Fin de pedidos - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Servicio
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}No se puede construir vehículo...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Construido: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Valor: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Construido: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Valor: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Cargando / Descargando
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}El tren debe pararse dentro del depósito
@@ -2600,6 +2689,9 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}No se puede insertar un nuevo pedido...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}No se puede borrar este pedido...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}No se puede modificar este pedido...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}No se puede mover esta orden...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}No se puede saltar la orden actual...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}No se puede saltar a la orden seleccionada...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}No se puede mover vehículo...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}El motor posterior seguirá siempre su contraparte delantera
 STR_8838_N_A                                                    :N/D{SKIP}
@@ -2631,11 +2723,16 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Mostrar capacidades de cada vehículo
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Mostrar capacidad total del tren, dividida por tipo de carga
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Lista de órdenes - click en orden para resaltarla
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Saltar orden actual y comenzar la siguiente
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Borrar orden resaltada
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Hacer la orden resaltada sin parada
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Añadir nueva orden antes de la orden resaltada, o añadirla al final de la lista
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Hacer que en la orden resaltada, el vehículo espere a carga completa
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Hacer que en la orden resaltada, el vehículo espere a descargar completamente
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Horarios - pulse en una orden para marcarla.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Cambia la cantidad de tiempo que debe tomar una orden marcada
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Limpiar la cantidad de tiempo para la orden seleccionada
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Reajustar el contador del retraso, así el vehículo estará en horario
 STR_SERVICE_HINT                                                :{BLACK}Saltar esta orden a menos que el servicio sea necesario
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Coste: {CURRENCY} Peso: {WEIGHT_S}{}Velocidad: {VELOCITY}  Potencia: {POWER}{}Coste Operativo: {CURRENCY}/año{}Capacidad: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Averiado
@@ -2657,6 +2754,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}No se puede renombrar tipo de vehículo...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Hacer que la orden marcada fuerce al vehículo a descargar
 STR_886F_TRANSFER                                               :{BLACK}Transferir
+STR_CLEAR_TIME                                                  :{BLACK}Limpiar Horario
+STR_RESET_LATENESS                                              :{BLACK}Resetear Contador de Retrasos
 
 STR_TRAIN_STOPPING                                              :{RED}Parándose
 STR_TRAIN_STOPPING_VEL                                          :{RED}Parándose, {VELOCITY}
@@ -2665,8 +2764,20 @@
 STR_TRAIN_START_NO_CATENARY                                     :Esta vía carece la catenaria, así que el tren no puede comenzar
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Nuevo{STRING} ahora disponible!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Nuevo {STRING} ahora disponible!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Nuevo {STRING} ahora disponible!  -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}No se puede ajustar horarios al vehículo...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Los vehículos solo pueden esperar en las estaciones.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Este vehículo no está parando en esta estación.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Cambiar Horario
+STR_TIMETABLE_STATUS_ON_TIME                                    :Este vehículo está actualmente en hora
+STR_TIMETABLE_STATUS_LATE                                       :Este vehículo está actualmente retrasado {STRING}
+STR_TIMETABLE_STATUS_EARLY                                      :Este vehículo está actualmente {STRING} adelantado
+STR_TIMETABLE_TOTAL_TIME                                        :Los horarios tomarán  {STRING} para completarse
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :Estos horarios tomarán {STRING} para completarse (no todos los horarios)
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Asignar automáticamente
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Asigna automáticamente la tabla de horarios con los valores del primer viaje
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Vehículo de carretera en camino
@@ -2682,7 +2793,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Velocidad Máx.: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Beneficio este año: {LTBLUE}{CURRENCY}  (último año: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Fiabilidad: {LTBLUE}{COMMA}%  {BLACK}Averías desde último despacho: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Const.: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Const.: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Capacidad: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...debe estar detenido dentro de un depósito
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}No se puede vender vehículo...
@@ -2709,12 +2820,16 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Lista de selección de vehículos - click en vehículo para información
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Construir el vehículo resaltado
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Coste: {CURRENCY}{}Velocidad: {VELOCITY}{}Coste Operativo: {CURRENCY}/año{}Capacidad: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Capacidad: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Nombrar vehículo
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}No se puede nombrar vehículo...
 STR_902E_NAME_ROAD_VEHICLE                                      :{BLACK}Nombrar vehículo
 STR_902F_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Los ciudadanos celebran . . .{}¡Primer autobús llega a {STATION}!
 STR_9030_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Los ciudadanos celebran . . .{}¡Primer camión llega a {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Ciudadanos celebran . . .{}Llega primer tranvía de pasajeros a {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Ciudadanos celebran . . .{}Llega primer tranvía de carga a {STATION}!
 STR_9031_ROAD_VEHICLE_CRASH_DRIVER                              :{BLACK}{BIGFONT}¡Accidente de tráfico!{}El conductor fallece en la explosión tras la colisión con el tren
 STR_9032_ROAD_VEHICLE_CRASH_DIE                                 :{BLACK}{BIGFONT}Accidente de tráfico!{}{COMMA} fallecidos en la explosión tras la colisión con el tren
 STR_9033_CAN_T_MAKE_VEHICLE_TURN                                :{WHITE}No se puede hacer girar al vehículo...
@@ -2754,7 +2869,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Velocidad Máx.: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Beneficio este año: {LTBLUE}{CURRENCY}  (año anterior: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Fiabilidad: {LTBLUE}{COMMA}%  {BLACK}Averías desde último despacho: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Const.: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Const.: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Capacidad: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}No se puede detener/arrancar barco...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}No se puede mandar barco a astillero...
@@ -2822,7 +2937,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Velocidad Máx.: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Beneficio este año: {LTBLUE}{CURRENCY}  (año anterior: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Fiabilidad: {LTBLUE}{COMMA}%  {BLACK}Averías desde último despacho: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Const.: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Const.: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}No se puede enviar la aeronave al hangar
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Ir al hangar de {STATION}
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Ir al hangar de {STATION}, {VELOCITY}
@@ -2875,6 +2990,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Ir al hangar de {STATION}
 SERVICE_AT_AIRPORT_HANGAR                                       :Ir al hangar de {STATION} para mantenimiento
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Horarios)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}¡Desastre de zepelín en {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}¡Vehículo terrestre destruído en colisión con OVNI!
@@ -2999,6 +3116,7 @@
 
 ### depot strings
 STR_DEPOT_SELL_CONFIRMATION_TEXT                                :{YELLOW}Vas a vender todos los vehículos que tienes en el depósito.  ¿Estás seguro?
+STR_DEPOT_WRONG_DEPOT_TYPE                                      :Tipo de depósito erroneo
 
 STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP                             :{BLACK}Vender todos los trenes del depósito
 STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP                           :{BLACK}Vender todos los vehículos del depósito
@@ -3189,9 +3307,18 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Activar transparencias para construcciones como estaciones, depósitos, puntos de paso, etc.
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Activar transparencias para puentes
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Activar transparencias para estructuras como faros, antenas, etc.
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Ajustar transparencia para los indicadores de carga
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Grupo {COMMA}
+STR_GROUP_TINY_NAME                                             :{TINYFONT}{GROUP}
 STR_GROUP_ALL_TRAINS                                            :Todos los trenes
 STR_GROUP_ALL_ROADS                                             :Todos los vehículos de carretera
 STR_GROUP_ALL_SHIPS                                             :Todos los barcos
@@ -3200,7 +3327,12 @@
 STR_GROUP_ADD_SHARED_VEHICLE                                    :Todos los vehículos compartidos
 STR_GROUP_REMOVE_ALL_VEHICLES                                   :Quitar todos los vehículos
 
+STR_GROUP_TRAINS_CAPTION                                        :{WHITE}{GROUP} - {COMMA} Tren{P "" s}
+STR_GROUP_ROADVEH_CAPTION                                       :{WHITE}{GROUP} - {COMMA} Vehículo de carretera{P "" s}
+STR_GROUP_SHIPS_CAPTION                                         :{WHITE}{GROUP} - {COMMA} Barco{P "" s}
+STR_GROUP_AIRCRAFTS_CAPTION                                     :{WHITE}{GROUP} - {COMMA} Aeronave
 STR_GROUP_RENAME_CAPTION                                        :{BLACK}Renombrar un grupo
+STR_GROUP_REPLACE_CAPTION                                       :{WHITE}Reemplazar vehículos de "{GROUP}"
 
 STR_GROUP_CAN_T_CREATE                                          :{WHITE}No se puede crear grupo...
 STR_GROUP_CAN_T_DELETE                                          :{WHITE}No se puede borrar este grupo...
@@ -3220,4 +3352,7 @@
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Beneficio este año: {GREEN}{CURRENCY} {BLACK}(año pasado: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Beneficio este año: {RED}{CURRENCY} {BLACK}(año pasado: {RED}{CURRENCY}{BLACK})
 
+STR_GROUP_NAME                                                  :{GROUP}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
 ########
--- a/src/lang/swedish.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/swedish.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Utanför kanten
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}För nära kanten av kartan
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Inte tillräckligt med pengar - krävs {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Platt mark krävs
 STR_0008_WAITING                                                :{BLACK}Väntar: {WHITE}{STRING}
@@ -495,7 +495,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Lokala myndigheter: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Ingen
 STR_01AA_NAME                                                   :{BLACK}Namn
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1
@@ -778,6 +778,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Svårighetsgrad
 STR_02C7_CONFIG_PATCHES                                         :Ändra Patchar
 STR_NEWGRF_SETTINGS                                             :NewGRF inställningar
+STR_TRANSPARENCY_OPTIONS                                        :Genomskinlighetsinställningar
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Stadsnamn visas
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Stationsnamn visas
@@ -805,7 +806,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Världskarta
 STR_EXTRA_VIEW_PORT                                             :Nytt vyfönster
 STR_SIGN_LIST                                                   :Skyltlista
-STR_TRANSPARENCY_OPTIONS                                        :Genomskinlighetsinställningar
 STR_02DF_TOWN_DIRECTORY                                         :Stadslista
 STR_TOWN_POPULATION                                             :{BLACK}Världsbefolkning: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Vyfönster {COMMA}
@@ -1103,6 +1103,17 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Mushjulshastighet: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Pausa automatiskt vid start av nytt spel: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Använd den avancerade fordonslistan: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Använd lastningsindikatörer: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Aktivera Tidtabeller för fordon: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Visa tidtabeller räknat i ticks istället för dagar: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE                            :{LTBLUE}Standard järnvägsräls (efter nytt/laddat spel): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Normal Järnvägsräls
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Elektrisk Järnvägsräls
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Monorail
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :Första tillgängliga
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :Sista tillgängliga
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :Mest använd
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Max antal tåg per spelare: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Max antal vägfordon per spelare: {ORANGE}{STRING}
@@ -1186,7 +1197,7 @@
 STR_CHEATS                                                      :{WHITE}Fusk
 STR_CHEATS_TIP                                                  :{BLACK}Checkboxar indikerar om du använt det här fusket förut
 STR_CHEATS_WARNING                                              :{BLACK}Varning! Du är på väg att förråda dina motståndare. Kom ihåg att detta inte kommer glömmas.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Öka pengar med {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Öka pengar med {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Spela som Spelare: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Magisk Bulldozer (ta bort industrier, fyrar etc.): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tunnlar kan korsa varandra: {ORANGE}{STRING}
@@ -1441,9 +1452,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Företagsnamn: {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Etableringsår:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Företagsvärde:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Nuvarande saldo:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Förra årets inkomst:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Företagsvärde:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Nuvarande saldo:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Förra årets inkomst:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Prestandabetyg:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Fordon:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1678,7 +1689,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Byggnad måste rivas först
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Invånare: {ORANGE}{COMMA}{BLACK}  Hus: {ORANGE}{COMMA}
@@ -1711,7 +1722,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Visa information om de lokala myndigheterna
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} lokala myndigheter
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Transportföretags värderingar:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subventioner
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Aktuella subventioner:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} från {STRING} till {STRING}
@@ -1782,7 +1793,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...träd redan här
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...plats olämplig
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Kan inte plantera träd här...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...för många skyltar
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Kan inte placera skylt här...
 STR_280A_SIGN                                                   :Skylt
@@ -1891,6 +1902,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Kust eller flodbank
 STR_3806_SHIP_DEPOT                                             :Skeppsdepå
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...Kan inte bygga på vatten
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Måste först ta bort kanalen
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Spara spel
@@ -1900,9 +1912,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte{P "" s} ledigt
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Kan inte läsa från disk
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Sparandet av spelet misslyckades
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Sparandet av spelet misslyckades{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Kan inte ta bort filen
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Läsningen av spelet misslyckades
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Läsningen av spelet misslyckades{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Internt fel: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Trasig sparfil - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Sparfilen är gjord med en ny version
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :Filen är inte läsbar
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :Filen är inte skrivbar
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Listar enheter, kataloger och sparade spel
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Valt namn för spelet
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Ta bort markerat sparat spel
@@ -2073,8 +2090,7 @@
 STR_SV_STNAME_LOWER                                             :Nedre {STRING}
 STR_SV_STNAME_HELIPORT                                          :{STRING} Helikopterplats
 STR_SV_STNAME_FOREST                                            :{STRING} Skog
-
-STR_SV_GROUP_NAME                                               :{GROUP}
+STR_SV_STNAME_FALLBACK                                          :{STRING} Station #{NUM}
 
 ############ end of savegame specific region!
 
@@ -2154,7 +2170,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Spelare {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Nytt ansikte
 STR_7005_COLOR_SCHEME                                           :{BLACK}Färgval
@@ -2166,7 +2182,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Namn på VD
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Kan inte ändra företagsnamn...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Kan inte ändra namnet på VD:n...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Budget {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Budget {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Utgifter/inkomster
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Konstruktioner
@@ -2182,20 +2198,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Inkomst från skepp
 STR_701C_LOAN_INTEREST                                          :{GOLD}Ränta på lån
 STR_701D_OTHER                                                  :{GOLD}Övrigt
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Totalt:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Graf över inkomster
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Graf över vinst
 STR_7026_BANK_BALANCE                                           :{WHITE}Banksaldo
 STR_7027_LOAN                                                   :{WHITE}Lån
-STR_MAX_LOAN                                                    :{WHITE}Maxlån:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Låna {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Återbetala {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Maxlån:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Låna {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Återbetala {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...maximal storlek på lånet är {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Kan inte låna mer pengar...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...lånet redan återbetalt
@@ -2234,8 +2250,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Företagets prestationsvärderingar (maxvärdering=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Företagsvärde
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Företagstabell
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Transportföretag har problem!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} kommer att säljas eller gå bankrutt om det inte går bättre snart!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(VD)
@@ -2273,7 +2289,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Lågkonjuktur!{}{}Finansexperter befarar det värsta när ekonomin sjunker!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Lågkonjuktur Över!{}{}Uppsving i byteshandeln ger tillförsikt till industrier när ekonomin stärks!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Växla stor/liten fönsterstorlek
-STR_7076_COMPANY_VALUE                                          :{GOLD}Företagets värde: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Företagets värde: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Köp 25% andelar i företaget
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Sälj 25% andelar i företaget
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Köp 25% andelar i detta företag
@@ -2585,7 +2601,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} tågdepå
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Invånarna firar . . .{}Första tåget ankommer till {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Details)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Details)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Tåg i vägen
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2606,6 +2622,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Åk non-stop till {TOWN}s tågdepå
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Servning non-stop {TOWN} tågdepå
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Avres (Inte tillagd i tidtabell)
+STR_TIMETABLE_TRAVEL_FOR                                        :Res till {STRING}
+STR_TIMETABLE_STAY_FOR                                          :och stanna i {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} dag{P "" s}
+STR_TIMETABLE_TICKS                                             :{COMMA} tick{P "" s}
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}På väg mot {TOWN}s tågdepå
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}På väg mot {TOWN}s tågdepå, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Service vid {TOWN}s tågdepå
@@ -2647,13 +2670,15 @@
 STR_REFIT                                                       :{BLACK}Anpassa
 STR_REFIT_TIP                                                   :{BLACK}Välj vilken godstyp anpassningen ska göras i denna order. CTRL+ klicka för att ta bort anpassningsordern
 STR_REFIT_ORDER                                                 :(Anpassa för {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Tidtabell
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Ändra till tidtabellsvy
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Order)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Slut på order - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Servning
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Kan inte bygga järnvägfordon...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Byggt: {LTBLUE}{NUM}{BLACK} Värde: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Värde: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Byggt: {LTBLUE}{NUM}{BLACK} Värde: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Värde: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Lastar / lastar av
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Tåget måste stoppas inne i depån
@@ -2703,6 +2728,10 @@
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Infoga ny order före markerad order, eller lägg till i slutet av listan
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Gör markerad order att tvinga fordonet att vänta på full last
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Gör markerad order att tvinga fordonet att vänta på tom last
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Tidstabell - klicka på en order för att markera den.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Ändra tid som den markerade ordern bör ta
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Rensa tiden för markerad order
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Nollställ räknaren för sen ankomst så att fordonet kommer i tid
 STR_SERVICE_HINT                                                :{BLACK}Skippa den här ordern om inte servning behövs
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Kostnad: {CURRENCY} Vikt: {WEIGHT_S}{}Hastighet: {VELOCITY}  Kraft {POWER}{}Löpande kostnad: {CURRENCY}/år{}Kapacitet: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Motorstopp
@@ -2724,6 +2753,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Kan inte byta namn på tågets fordonstyp...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Gör så att den markerade ordern tvingar fordonet att lasta av
 STR_886F_TRANSFER                                               :{BLACK}Lasta om
+STR_CLEAR_TIME                                                  :{BLACK}Rensa tid
+STR_RESET_LATENESS                                              :{BLACK}Rensa räknaren för sen ankomst
 
 STR_TRAIN_STOPPING                                              :{RED}Stannar
 STR_TRAIN_STOPPING_VEL                                          :{RED}Stannar, {VELOCITY}
@@ -2732,8 +2763,20 @@
 STR_TRAIN_START_NO_CATENARY                                     :Detta spår saknar kedjekurva, så tåget kan inte starta
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Nya {STRING} är nu tillgänglig!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Nya {STRING} är nu tillgänglig  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Nya {STRING} är nu tillgänglig  -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Kan inte lägga till fordonet i en tidtabell...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Fordon kan enbart vänta vid stationer.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Detta fordon stannar inte vid denna station.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Ändra Tid
+STR_TIMETABLE_STATUS_ON_TIME                                    :Detta fordon ligger efter i tidtabellen
+STR_TIMETABLE_STATUS_LATE                                       :Detta fordon är för tillfället {STRING} sen
+STR_TIMETABLE_STATUS_EARLY                                      :Detta fordon är för tillfället {STRING} tidig
+STR_TIMETABLE_TOTAL_TIME                                        :Denna tidtabell kommer ta {STRING} att slutföra
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :Denna tidtabell kommer att ta åtminstonde {STRING} att slutföra (allt är inte inlagt i en tidtabell)
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Automatisk ifyllning
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Fyll tidtabellen automatiskt med värdet från den första resan
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Vägfordon i vägen
@@ -2749,7 +2792,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Tophastighet: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Vinst detta år: {LTBLUE}{CURRENCY}  (förra året: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Tillförlitlighet: {LTBLUE}{COMMA}%  {BLACK}Motorstopp sedan senaste service: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Byggt: {LTBLUE}{NUM}{BLACK} Värde: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Byggt: {LTBLUE}{NUM}{BLACK} Värde: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Kapacitet: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...måste stoppas inuti ett bussgarage
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Kan inte sälja vägfordon...
@@ -2825,7 +2868,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Tophastighet: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Vinst detta år: {LTBLUE}{CURRENCY}  (förra år: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Tillförlitlighet: {LTBLUE}{COMMA}%  {BLACK}Motorstopp sedan senaste service: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Byggt: {LTBLUE}{NUM}{BLACK} Värde: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Byggt: {LTBLUE}{NUM}{BLACK} Värde: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Kapacitet: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Kan inte stoppa/starta skepp...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Kan inte skicka skepp till depå...
@@ -2893,7 +2936,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Tophastighet: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Vinst detta år: {LTBLUE}{CURRENCY}  (förra året: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Tillförlitlighet: {LTBLUE}{COMMA}%  {BLACK}Motorstopp sedan senaste service: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Byggt: {LTBLUE}{NUM}{BLACK} Värde: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Byggt: {LTBLUE}{NUM}{BLACK} Värde: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Kan inte skicka flygplan till hangar...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}På väg mot {STATION}s hangar
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}På väg mot {STATION}s hangar, {VELOCITY}
@@ -2946,6 +2989,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Gå till {STATION}s hangar
 SERVICE_AT_AIRPORT_HANGAR                                       :Service vid {STATION} hangar
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Tidtabell)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Zeppelinare-katastrof på {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Vägfordon förstört i 'UFO'-kollision!
@@ -3261,6 +3306,14 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Växla genomskinlighet för byggnader såsom stationer, depåer, riktmärken eller kedjelinje
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Växla genomskinlighet för industrier
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Växla genomskinlighet för byggnader såsom fyrar och antenner, kanske i framtiden även ögongodis
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Växla genomskinlighet för lastningsindikatörer
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Grupp {COMMA}
@@ -3298,4 +3351,11 @@
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Vinst detta år: {GREEN}{CURRENCY} {BLACK}(förra året: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Vinst detta år: {RED}{CURRENCY} {BLACK}(förra året: {RED}{CURRENCY}{BLACK})
 
+STR_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
 ########
--- a/src/lang/traditional_chinese.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/traditional_chinese.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}超越版圖邊緣
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}太接近版圖邊緣
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}現金不足 - 需要 {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}需要平地
 STR_0008_WAITING                                                :{BLACK}等候:{WHITE}{STRING}
@@ -495,7 +495,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}地方政府:{LTBLUE}{STRING}
 STR_01A9_NONE                                                   :無
 STR_01AA_NAME                                                   :{BLACK}名稱
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1
@@ -778,6 +778,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :難易設定
 STR_02C7_CONFIG_PATCHES                                         :設置修正
 STR_NEWGRF_SETTINGS                                             :NewGRF 設定
+STR_TRANSPARENCY_OPTIONS                                        :透明度選項
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}顯示市鎮名稱
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}顯示車站/機場/碼頭名稱
@@ -805,7 +806,6 @@
 STR_02DE_MAP_OF_WORLD                                           :世界地圖
 STR_EXTRA_VIEW_PORT                                             :打開新視野
 STR_SIGN_LIST                                                   :標誌清單
-STR_TRANSPARENCY_OPTIONS                                        :透明度選項
 STR_02DF_TOWN_DIRECTORY                                         :市鎮索引
 STR_TOWN_POPULATION                                             :{BLACK}世界人口:{COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}視野 {COMMA}
@@ -1089,6 +1089,7 @@
 STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}直升機於直升機台自動維修:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}地形工具列與路軌/道路/碼頭建設/機場建設合併:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}倒轉滾動棒方向:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING                             :{LTBLUE}視野平滑移動:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}使用某些建設工具時顯示量度提示:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}顯示公司標記:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES_NONE                                :不顯示
@@ -1102,6 +1103,17 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}滾輪地圖捲動速度: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}自動在開始新遊戲時暫停:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}使用進階載具名單: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}使用載入指示:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}啟用運具時刻表功能:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}顯示時刻表時以 Tick 為單位而不是日:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE                            :{LTBLUE}預設的路軌類型 (將在新遊戲或載入遊戲時生效):{ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :鐵路
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :電氣化鐵路
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :單軌
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :磁浮
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :最先可用的
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :最新誕生的
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :最常使用的
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}每位玩家可擁有列車數目:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}每位玩家可擁有車輛數目:{ORANGE}{STRING}
@@ -1185,7 +1197,7 @@
 STR_CHEATS                                                      :{WHITE}作弊
 STR_CHEATS_TIP                                                  :{BLACK}被勾選的項目表示你之前用過這個作弊
 STR_CHEATS_WARNING                                              :{BLACK}注意! 你要背叛你的對手喔! 你要記住這種行為會被一輩子記著的。
-STR_CHEAT_MONEY                                                 :{LTBLUE}增加金錢:{CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}增加金錢:{CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}控制玩家:{ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}神奇剷泥車 (可以移除工業等平時拆不掉的東西):{ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}隧道可以互相穿過:{ORANGE}{STRING}
@@ -1396,6 +1408,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :英文
 STR_NETWORK_LANG_GERMAN                                         :德文
 STR_NETWORK_LANG_FRENCH                                         :法文
+STR_NETWORK_LANG_BRAZILIAN                                      :巴西
+STR_NETWORK_LANG_BULGARIAN                                      :保加利亞語
+STR_NETWORK_LANG_CHINESE                                        :中文
+STR_NETWORK_LANG_CZECH                                          :捷克語
+STR_NETWORK_LANG_DANISH                                         :丹麥語
+STR_NETWORK_LANG_DUTCH                                          :荷蘭語
+STR_NETWORK_LANG_ESPERANTO                                      :世界語
+STR_NETWORK_LANG_FINNISH                                        :芬蘭語
+STR_NETWORK_LANG_HUNGARIAN                                      :匈牙利
+STR_NETWORK_LANG_ICELANDIC                                      :冰島語
+STR_NETWORK_LANG_ITALIAN                                        :義大利語
+STR_NETWORK_LANG_JAPANESE                                       :日文
+STR_NETWORK_LANG_KOREAN                                         :韓文
+STR_NETWORK_LANG_LITHUANIAN                                     :立陶宛語
+STR_NETWORK_LANG_NORWEGIAN                                      :挪威語
+STR_NETWORK_LANG_POLISH                                         :波蘭語
+STR_NETWORK_LANG_PORTUGUESE                                     :葡萄牙語
+STR_NETWORK_LANG_ROMANIAN                                       :羅馬尼亞語
+STR_NETWORK_LANG_RUSSIAN                                        :俄語
+STR_NETWORK_LANG_SLOVAK                                         :斯洛法克語
+STR_NETWORK_LANG_SLOVENIAN                                      :斯洛法尼亞語
+STR_NETWORK_LANG_SPANISH                                        :西班牙語
+STR_NETWORK_LANG_SWEDISH                                        :瑞典語
+STR_NETWORK_LANG_TURKISH                                        :土耳其語
+STR_NETWORK_LANG_UKRAINIAN                                      :烏克蘭語
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}連線遊戲大廳
@@ -1415,9 +1452,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}公司名稱:{WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}成立於:{WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}公司市值:{WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}目前餘額:{WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}去年收入:{WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}公司市值:{WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}目前餘額:{WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}去年收入:{WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}效率:{WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}運具:{WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1589,6 +1626,12 @@
 STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :有入口號誌的鐵軌
 STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :有出口號誌的鐵軌
 STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :有綜合號誌的鐵軌
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :有一般號誌及入口號誌的鐵軌
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :有一般號誌及出口號誌的鐵軌
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :有一般號誌及綜合號誌的鐵軌
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :有入口號誌及出口號誌的鐵軌
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :有入口號誌及綜合號誌的鐵軌
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :有出口號誌及綜合號誌的鐵軌
 STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}必須先移除火車站
 
 
@@ -1599,6 +1642,7 @@
 STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}鋪設道路
 STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}鋪設電車軌
 STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}選擇道路橋樑
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}... 單向的道路不能有交叉點
 STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}不能在此鋪設道路...
 STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}不可以在這裏鋪設電車軌...
 STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}不能從此移除道路...
@@ -1645,7 +1689,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}必須先摧毀建築
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}人口:{ORANGE}{COMMA}{BLACK}  房屋:{ORANGE}{COMMA}
@@ -1678,7 +1722,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}顯示地方政府資訊
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} 地方政府
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}運輸公司評比:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}:{ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}:{ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}補助
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}提供補助的運輸服務:
 STR_2027_FROM_TO                                                :{ORANGE}將 {STRING} 從 {STRING} 運到 {STRING}
@@ -1749,7 +1793,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...這邊已經有樹了
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...地點不適合
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}不能在這邊種樹...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...太多標誌了
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}不能在這邊放標誌...
 STR_280A_SIGN                                                   :標誌
@@ -1858,6 +1902,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :海岸或河邊
 STR_3806_SHIP_DEPOT                                             :船塢
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...不能建在水域
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}必須先移除運河
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}儲存遊戲
@@ -1867,9 +1912,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}空間尚有 {COMMA} MB
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}無法讀取磁碟
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}遊戲儲存失敗
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}遊戲儲存失敗{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}無法刪除檔案
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}遊戲載入失敗
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}遊戲載入失敗{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :內部錯誤:{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :損壞的存檔 - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :存檔是由較新版本的遊戲產生
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :檔案無法讀取
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :檔案無法寫入
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}列出磁碟、目錄與遊戲存檔
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}目前選定的存檔名稱
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}刪除目前選定的存檔
@@ -2040,8 +2090,7 @@
 STR_SV_STNAME_LOWER                                             :{STRING} 盆地
 STR_SV_STNAME_HELIPORT                                          :{STRING} 直升機場
 STR_SV_STNAME_FOREST                                            :{STRING} 森林
-
-STR_SV_GROUP_NAME                                               :{GROUP}
+STR_SV_STNAME_FALLBACK                                          :{STRING} 車站 #{NUM}
 
 ############ end of savegame specific region!
 
@@ -2121,7 +2170,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(玩家 {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}新臉孔
 STR_7005_COLOR_SCHEME                                           :{BLACK}配色
@@ -2133,7 +2182,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :經理姓名
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}無法修改公司名稱...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}無法修改經理名稱...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} 財務狀況 {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} 財務狀況 {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}收入/支出
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}建造
@@ -2149,20 +2198,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}船運收入
 STR_701C_LOAN_INTEREST                                          :{GOLD}貸款利息
 STR_701D_OTHER                                                  :{GOLD}其它
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}總計:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}收入圖
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}營運損益圖
 STR_7026_BANK_BALANCE                                           :{WHITE}餘額
 STR_7027_LOAN                                                   :{WHITE}貸款
-STR_MAX_LOAN                                                    :{WHITE}貸款上限::{BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}貸款 {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}償還 {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}貸款上限::{BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}貸款 {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}償還 {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...貸款額度上限是 {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}無法再借更多錢...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...不需償還貸款
@@ -2201,8 +2250,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}公司效率指標 (最高 1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}公司價值
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}公司排行榜
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}運輸公司有麻煩了!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} 將被拍賣或宣告破產,除非效率盡快提昇!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(經理)
@@ -2240,7 +2289,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}世界不景氣!{}{}財務專家對經濟蕭條做出最壞打算!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}景氣回升!{}{}湧現的訂單讓工業對經濟熱絡充滿信心!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}切換大/小視窗
-STR_7076_COMPANY_VALUE                                          :{GOLD}公司價值:{WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}公司價值:{WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}購買 25% 公司股份
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}出售 25% 公司股份
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}購買這間公司的 25% 股份
@@ -2271,6 +2320,8 @@
 STR_LIVERY_HELICOPTER                                           :直升機
 STR_LIVERY_SMALL_PLANE                                          :小飛機
 STR_LIVERY_LARGE_PLANE                                          :大飛機
+STR_LIVERY_PASSENGER_TRAM                                       :客運輕軌
+STR_LIVERY_FREIGHT_TRAM                                         :貨運輕軌
 
 STR_LIVERY_GENERAL_TIP                                          :{BLACK}顯示通用配色
 STR_LIVERY_TRAIN_TIP                                            :{BLACK}顯示鐵道配色
@@ -2549,8 +2600,8 @@
 
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} 鐵道機廠
-STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}市民慶祝 . . .{}首輛列車抵達 {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (詳細資料)
+STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}市民慶賀 . . .{}首輛列車抵達 {STATION}!
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (詳細資料)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}前方有列車
 STR_8804                                                        :{SETX 10}{COMMA}:{STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}:{STRING} {STRING}
@@ -2571,6 +2622,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :前往 {TOWN} 機廠 中途不停
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :在 {TOWN} 機廠維護 中途不停
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :漫遊 (無時刻表)
+STR_TIMETABLE_TRAVEL_FOR                                        :通行於 {STRING}
+STR_TIMETABLE_STAY_FOR                                          :並等待 {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} 日
+STR_TIMETABLE_TICKS                                             :{COMMA} tick
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}正前往 {TOWN} 機廠
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}正前往 {TOWN} 機廠, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}正在 {TOWN} 機廠維護中
@@ -2612,13 +2670,15 @@
 STR_REFIT                                                       :{BLACK}改裝
 STR_REFIT_TIP                                                   :{BLACK}選擇這個指令要改裝的酬載種類。按住 CTRL 點選可移除改裝指令
 STR_REFIT_ORDER                                                 :(改裝成 {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}時刻表
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}切換至時刻表檢視模式
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (指令)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - 指令結束 - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}維護
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}無法購買鐵道車輛...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   購於:{LTBLUE}{NUM}{BLACK} 價值:{LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   價值:{LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   購於:{LTBLUE}{NUM}{BLACK} 價值:{LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   價值:{LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}正在裝卸客貨
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}列車必須停在機廠内
@@ -2628,6 +2688,9 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}無法插入新指令...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}無法刪除這個指令...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}無法修改這個指令...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}無法移動這個命令...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}無法跳過目前的命令...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}無法跳過指定的命令...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}無法移動車輛...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}後端車頭一定跟著前端車頭
 STR_8838_N_A                                                    :N/A{SKIP}
@@ -2659,11 +2722,16 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}顯示車輛的容量
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}顯示列車的總容量,照貨物分類
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}指令清單 - 點選指令可選擇。按住 CTRL 點選可跳到車站位置
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}跳過目前的命令,從下一個開始。CTRL + 左鍵 可直接跳至所選的命令
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}刪除選定指令
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}使選定的指令中途不停
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}在選定的指令前插入新指令,或在最後新增指令
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}讓列車在選定的指令等待載滿
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}讓列車在選定的指令強制卸載
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}時刻表 - 點一個命令來標記它。
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}改變目前選定命令所需花費的時間
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}清除目前選定命令所設定的時間
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}將誤點/慢分歸零,如此運具將會準時抵達
 STR_SERVICE_HINT                                                :{BLACK}跳過這個指令,除非需要維護
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}價格:{CURRENCY} 重量:{WEIGHT_S}{}速度:{VELOCITY}  功率:{POWER}{}操作成本:{CURRENCY} / 年{}Capacity:{CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}故障
@@ -2685,6 +2753,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}無法修改鐵道車輛名稱...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}讓列車在選定的指令強制卸載
 STR_886F_TRANSFER                                               :{BLACK}轉運
+STR_CLEAR_TIME                                                  :{BLACK}清除時刻
+STR_RESET_LATENESS                                              :{BLACK}歸零誤點/慢分
 
 STR_TRAIN_STOPPING                                              :{RED}正在停止
 STR_TRAIN_STOPPING_VEL                                          :{RED}正在停止, {VELOCITY}
@@ -2693,8 +2763,18 @@
 STR_TRAIN_START_NO_CATENARY                                     :這個軌道沒有電氣化,所以列車無法起動
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}{STRING} 問世了!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}{STRING} 問世了! -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}{STRING} 問世了! -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}無法為運具加入時刻表...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}運具只能等待於站點。
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}此運具將不停靠此站點。
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}變更時刻
+STR_TIMETABLE_STATUS_ON_TIME                                    :此運具目前準點
+STR_TIMETABLE_STATUS_LATE                                       :此運具目前慢了 {STRING}
+STR_TIMETABLE_STATUS_EARLY                                      :此運具目前早了 {STRING}
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}自動製表
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}自動地將第一次的路程列為時刻表
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}前方有汽車
@@ -2710,7 +2790,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}極速:{LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}今年損益:{LTBLUE}{CURRENCY}  (去年:{CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}可靠度:{LTBLUE}{COMMA}%  {BLACK}上次維護後故障次數:{LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   購買於:{LTBLUE}{NUM}{BLACK} 價值:{LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   購買於:{LTBLUE}{NUM}{BLACK} 價值:{LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}容量:{LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...必須停在汽車庫内
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}無法出售汽車...
@@ -2737,12 +2817,16 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}汽車清單 - 點選汽車可看到詳細資訊
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}購買選定的汽車
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}價格:{CURRENCY}{}速度:{VELOCITY}{}營運費用:{CURRENCY}/年{}容量:{CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}容量:{LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}命名汽車
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}無法命名汽車...
 STR_902E_NAME_ROAD_VEHICLE                                      :{BLACK}命名汽車
 STR_902F_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}市民慶賀 . . .{}首輛公車抵達 {STATION}!
 STR_9030_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}市民慶賀 . . .{}首輛貨車抵達 {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}市民慶賀 . . .{}首輛客運輕軌抵達 {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}市民慶賀 . . .{}首輛貨運輕軌抵達 {STATION}!
 STR_9031_ROAD_VEHICLE_CRASH_DRIVER                              :{BLACK}{BIGFONT}汽車撞毀!{}駕駛在與列車相撞後死於火球下
 STR_9032_ROAD_VEHICLE_CRASH_DIE                                 :{BLACK}{BIGFONT}汽車撞毀!{}與列車相撞後 {COMMA} 人死於火球下
 STR_9033_CAN_T_MAKE_VEHICLE_TURN                                :{WHITE}無法使汽車掉頭...
@@ -2782,7 +2866,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}極速:{LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}今年損益:{LTBLUE}{CURRENCY}  (去年:{CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}可靠度:{LTBLUE}{COMMA}%  {BLACK}上次維護後故障次數:{LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   購買於:{LTBLUE}{NUM}{BLACK} 價值:{LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   購買於:{LTBLUE}{NUM}{BLACK} 價值:{LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}容量:{LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}無法停止/起動船舶...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}無法將船舶送到船塢...
@@ -2812,7 +2896,7 @@
 
 STR_9831_NAME_SHIP                                              :{WHITE}命名船舶
 STR_9832_CAN_T_NAME_SHIP                                        :{WHITE}無法命名船舶...
-STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}市民慶祝 . . .{}首艘船舶抵達 {STATION}!
+STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}市民慶賀 . . .{}首艘船舶抵達 {STATION}!
 STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}放置浮標,可用作導航點
 STR_9835_CAN_T_POSITION_BUOY_HERE                               :{WHITE}無法在此放置浮標...
 STR_9836_RENAME                                                 :{BLACK}更名
@@ -2850,7 +2934,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}極速:{LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}今年損益:{LTBLUE}{CURRENCY}  (去年:{CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}可靠度:{LTBLUE}{COMMA}%  {BLACK}上次維護後故障次數:{LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   購買於:{LTBLUE}{NUM}{BLACK} 價值:{LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   購買於:{LTBLUE}{NUM}{BLACK} 價值:{LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}無法將飛機送回機棚...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}正前往 {STATION} 機棚
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}正前往 {STATION} 機棚, {VELOCITY}
@@ -2903,6 +2987,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :前往 {STATION} 機棚
 SERVICE_AT_AIRPORT_HANGAR                                       :在{STATION}機棚進行檢修
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (時刻表)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}{STATION} 發生飛船災難!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}汽車被 UFO 摧毀!
@@ -3027,6 +3113,7 @@
 
 ### depot strings
 STR_DEPOT_SELL_CONFIRMATION_TEXT                                :{YELLOW}您正準備出售庫房内所有車輛。確定嗎?
+STR_DEPOT_WRONG_DEPOT_TYPE                                      :錯誤的機廠類型
 
 STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP                             :{BLACK}出售機廠内所有列車
 STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP                           :{BLACK}出售車庫内所有汽車
@@ -3217,6 +3304,14 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}將透明度套用於建物,如車站、廠棚、路標及電線
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}將透明度套用於橋樑
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}將透明度套用於設施,如燈塔、天線塔等
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}將透明度套用於運載顯示表
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :群組 {COMMA}
@@ -3247,10 +3342,18 @@
 STR_GROUP_CREATE_TIP                                            :{BLACK}單擊建立群組
 STR_GROUP_DELETE_TIP                                            :{BLACK}移除選擇群組
 STR_GROUP_RENAME_TIP                                            :{BLACK}為群組重新命名
+STR_GROUP_REPLACE_PROTECTION_TIP                                :{BLACK}點此可避免此群組內的設備被來自全域的設定替換
 
 STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR                        :{TINYFONT}{BLACK}本年盈餘: {GREEN}{CURRENCY} {BLACK}(去年: {GREEN}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR                         :{TINYFONT}{BLACK}本年盈餘:{RED}{CURRENCY} {BLACK}(去年: {GREEN}{CURRENCY}{BLACK})
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}本年盈餘: {GREEN}{CURRENCY} {BLACK}(去年: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}本年盈餘: {RED}{CURRENCY} {BLACK}(去年:{RED}{CURRENCY}{BLACK})
 
+STR_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
 ########
--- a/src/lang/turkish.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/turkish.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Harita kenarında
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Sınıra çok yakın
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Para Yetersiz - şu kadar gerekli: {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Yerin düzleştirilmesi lazım
 STR_0008_WAITING                                                :{BLACK}Bekleyen: {WHITE}{STRING}
@@ -495,7 +495,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Belediyesi: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Hiçbiri
 STR_01AA_NAME                                                   :{BLACK}İsim
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1
@@ -778,6 +778,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Zorluk Ayarları
 STR_02C7_CONFIG_PATCHES                                         :Yamaları Düzenle
 STR_NEWGRF_SETTINGS                                             :Newgrf ayarları
+STR_TRANSPARENCY_OPTIONS                                        :Şeffaflık seçenekleri
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Şehir isimlerini göster
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}İstasyon isimlerini göster
@@ -805,7 +806,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Dünya haritası
 STR_EXTRA_VIEW_PORT                                             :Ekstra görünüm
 STR_SIGN_LIST                                                   :Tabela listesi
-STR_TRANSPARENCY_OPTIONS                                        :Şeffaflık seçenekleri
 STR_02DF_TOWN_DIRECTORY                                         :Şehir listesi
 STR_TOWN_POPULATION                                             :{BLACK}Dünya nüfusu: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Görünüm {COMMA}
@@ -1048,6 +1048,7 @@
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Yeni evrensel yol bulma (NPF, NTP üzerinde): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Ağır yük trenleri için ağırlık çarpanı: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Şehiriçi yollara durak yapmak izinli: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADJACENT_STATIONS                            :{LTBLUE}Bitişik istasyonlar izinli: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Küçük havalimanı her zaman etkin: {ORANGE}{STRING}
 
@@ -1099,6 +1100,17 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Haritayı kaydır
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Kapalı
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Tekerlek hızı: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Yeni bir oyun başlatırken zamanı duraklat: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Gelişmiş araç listesini kullan: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Araç yükleme bilgisini göster: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Araç zaman çizelgesi açık: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Normal Ray
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Elektrikli Ray
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Monoray
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :En eskisi
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :En yenisi
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :En çok kullanılan
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Her oyuncu için en fazla tren: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Her oyuncu için en fazla araba: {ORANGE}{STRING}
@@ -1179,7 +1191,7 @@
 STR_CHEATS                                                      :{WHITE}Hileler
 STR_CHEATS_TIP                                                  :{BLACK}Onay kutuları bu hilenin daha önce kullanılıp kullanmadığını bildirir.
 STR_CHEATS_WARNING                                              :{BLACK}Uyarı! Rakiplerine ihanet etmek üzeresin. Böyle bir davranışı sonsuza dek unutmayacaklarını akılda tut.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Parayı {CURRENCY64} kadar arttır
+STR_CHEAT_MONEY                                                 :{LTBLUE}Parayı {CURRENCY} kadar arttır
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Oyuncunun yerine geç: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Sihirli buldözer (normalde silinemeyen binaları siler): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tüneller kesişebilir: {ORANGE}{STRING}
@@ -1390,6 +1402,14 @@
 STR_NETWORK_LANG_ENGLISH                                        :İngilizce
 STR_NETWORK_LANG_GERMAN                                         :Almanca
 STR_NETWORK_LANG_FRENCH                                         :Fransızca
+STR_NETWORK_LANG_BULGARIAN                                      :Bulgarca
+STR_NETWORK_LANG_CHINESE                                        :Çince
+STR_NETWORK_LANG_CZECH                                          :Çekce
+STR_NETWORK_LANG_FINNISH                                        :Fince
+STR_NETWORK_LANG_HUNGARIAN                                      :Bulgarca
+STR_NETWORK_LANG_ITALIAN                                        :İtalyanca
+STR_NETWORK_LANG_JAPANESE                                       :Japonca
+STR_NETWORK_LANG_KOREAN                                         :Korece
 STR_NETWORK_LANG_LITHUANIAN                                     :Litvanyaca
 STR_NETWORK_LANG_NORWEGIAN                                      :Norveççe
 STR_NETWORK_LANG_PORTUGUESE                                     :Portekizce
@@ -1419,9 +1439,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Şirket adı:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Kurulus:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Şirket değeri:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Şimdiki dengesi:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Geçen seneki geliri:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Şirket değeri:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Şimdiki dengesi:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Geçen seneki geliri:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Performans:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Araçlar:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1631,6 +1651,7 @@
 STR_1810_BUILD_ROAD_TUNNEL                                      :{BLACK}Tünel Yap
 STR_1810_BUILD_TRAMWAY_TUNNEL                                   :{BLACK}Tramvay tüneli yap
 STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Yol yap/sil arasında geçiş yap
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS                       :{BLACK}Tramvay yapımı/yıkımı
 STR_1813_SELECT_ROAD_VEHICLE_DEPOT                              :{BLACK}Garaj yönünü seç
 STR_1813_SELECT_TRAM_VEHICLE_DEPOT                              :{BLACK}Tramvay garı yönü
 STR_1814_ROAD                                                   :Yol
@@ -1649,7 +1670,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Önce bina yıkılmalı
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Nüfus: {ORANGE}{COMMA}{BLACK}  Ev: {ORANGE}{COMMA}
@@ -1682,7 +1703,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Belediye hakkında bilgi göster
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} belediyesi
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Taşıma şirketi reytingleri:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}İhaleler
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Beklenen ihaleler:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} {STRING} -> {STRING}
@@ -1753,7 +1774,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...burada zaten ağaç var
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...yer uygun değil
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Buraya ağaç dikilemez...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...çok fazla tabela
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Buraya tabela konulamiyor...
 STR_280A_SIGN                                                   :Tabela
@@ -1811,6 +1832,7 @@
 STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Önce otobüs durağı yıkılmalı
 STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Önce kamyon durağı yıkılmalı
 STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION                   :{WHITE}Önce yolcu tramvayı istasyonu yıkılmalı
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION                       :{WHITE}Önce yük tramvayı istasyonu kaldırılmalı
 STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} istasyonları
 STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
 STR_304A_NONE                                                   :{YELLOW}- Yok -
@@ -1822,6 +1844,8 @@
 STR_3050_SELECT_LENGTH_OF_RAILROAD                              :{BLACK}Tren istasyonu uzunluğu seç
 STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Otobüs durağı yönünü seç
 STR_3052_SELECT_TRUCK_LOADING_BAY                               :{BLACK}Kamyon durağı yönünü seç
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION              :{BLACK}Yolcu tramvayı istasyonu yönünü seçin
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION                  :{BLACK}Yük tramvayı istasyonu yönünü seçin
 STR_3053_CENTER_MAIN_VIEW_ON_STATION                            :{BLACK}Durağın oldugu yere git
 STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}İstasyonun reytinglerini göster
 STR_3055_CHANGE_NAME_OF_STATION                                 :{BLACK}İstasyonun ismini değiştir
@@ -1859,6 +1883,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Sahil veya göl kenarı
 STR_3806_SHIP_DEPOT                                             :Tersane
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...Suya yapılamaz
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Önce kanal kaldırılmalı
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Kaydet
@@ -1868,9 +1893,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} MB bos
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Sürücü okunamıyor
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Oyun kaydedilemedi
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Oyun kaydedilemedi{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Dosya silinemedi
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Dosya yüklenemedi
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Dosya yüklenemedi{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :İç hata: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Bozuk kayıtlı oyun - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Kayıtlı oyun yeni bir sürümle yapılmış
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :Dosya okunabilir değil
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :Dosya yazılabilir değil
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Sürücü, klasör ve kayıtli oyun listesi
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Kaydetmek için kullanılacak dosya adı
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Seçili oyunu sil
@@ -2041,8 +2071,7 @@
 STR_SV_STNAME_LOWER                                             :Asağı {STRING}
 STR_SV_STNAME_HELIPORT                                          :{STRING} Heliport
 STR_SV_STNAME_FOREST                                            :{STRING} Ormanı
-
-STR_SV_GROUP_NAME                                               :{GROUP}
+STR_SV_STNAME_FALLBACK                                          :{STRING} {NUM}. istasyon
 
 ############ end of savegame specific region!
 
@@ -2122,7 +2151,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :({COMMA}. Oyuncu)
 STR_7004_NEW_FACE                                               :{BLACK}Yeni Surat
 STR_7005_COLOR_SCHEME                                           :{BLACK}Renkler
@@ -2134,7 +2163,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Yöneticinin ismi
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Şirket ismi değiştirilemez...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Yönetici ismi degitirilemez...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Hesaplar {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Hesaplar {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Gider/Gelir
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}İnşaat
@@ -2150,20 +2179,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Gemi Geliri
 STR_701C_LOAN_INTEREST                                          :{GOLD}Kredi Faizi
 STR_701D_OTHER                                                  :{GOLD}Diğer
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Toplam:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Gelir Grafiği
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Çalıştirma Geliri Grafiği
 STR_7026_BANK_BALANCE                                           :{WHITE}Banka Hesabı
 STR_7027_LOAN                                                   :{WHITE}Kredi
-STR_MAX_LOAN                                                    :{WHITE}Mak Kredi:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Ödünç al {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Öde {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Mak Kredi:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Ödünç al {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Öde {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...maksimum kredi miktarı {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Daha fazla kredi alınamaz...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...ödenecek kredi yok
@@ -2202,8 +2231,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Performans (en fazla=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Şirket Değerleri
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Şirketler Ligi
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Şirket tehlikede!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY}, performansı artmazsa satılacak ya da yok olacak!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Yönetici)
@@ -2241,7 +2270,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Dünyada Kriz!{}{}Çok büyük bir ekonomik kriz yaşanacağı öngörüldü!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Kriz Atlatıldı!{}{}Ekonomi yine eski güzel günlerine döndü!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Pencere boyutunu büyült/küçült
-STR_7076_COMPANY_VALUE                                          :{GOLD}Şirket değeri: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Şirket değeri: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}%25'ini satın al
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}%25'ini geri ver
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Şirketin %25 hissesini al
@@ -2553,7 +2582,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Tren Garaji
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Kutlama Yapıldı . . .{} {STATION} istasyonuna ilk kez tren geldi!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Detaylar)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Detaylar)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Yolda tren var
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2574,6 +2603,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Durmadan git: {TOWN} Tren Garı
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Durmadan bakıma git: {TOWN} Tren Garı
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Gezi (zamanlı değil)
+STR_TIMETABLE_TRAVEL_FOR                                        :{STRING} için gezi
+STR_TIMETABLE_STAY_FOR                                          :{STRING} için bekle
+STR_TIMETABLE_DAYS                                              :{COMMA} gün
+STR_TIMETABLE_TICKS                                             :{COMMA} birim
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}{TOWN} Tren Garına gidiyor
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}{TOWN} Tren Garına gidiyor, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}{TOWN} Garında Bakım
@@ -2615,13 +2651,15 @@
 STR_REFIT                                                       :{BLACK}Modifiye
 STR_REFIT_TIP                                                   :{BLACK}Bu talimatta değiştirilecek kargo türünü seçin. Değiştirmeyi kaldırmak için CTRL ile tıklayın
 STR_REFIT_ORDER                                                 :(Moifiye ile > {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Zaman çizelgesi
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Zaman tablosu görünümüne geç
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Talimatlar)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Talimatların Sonu - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Bakım
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Tren satın alınamaz...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Tarih: {LTBLUE}{NUM}{BLACK} Değeri: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Değeri: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Tarih: {LTBLUE}{NUM}{BLACK} Değeri: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Değeri: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Yükleme / Boşaltma
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Tren garda durdurulmalı
@@ -2631,6 +2669,9 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Yeni talimat verilemiyor...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Bu talimat silinemez...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Bu talimat değiştirilemez...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Talimat taşınamıyor...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Talimat atlanamıyor...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Seçili talimata atlanamıyor...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Araç hareket edemiyor...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}Arkadaki lokomotif daima önündekini takip edecek
 STR_8838_N_A                                                    :yok{SKIP}
@@ -2688,6 +2729,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Tren yeniden adlandırılamaz...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Seçili talimatta aracı kargoyu boşaltmaya zorla
 STR_886F_TRANSFER                                               :{BLACK}Aktar
+STR_CLEAR_TIME                                                  :{BLACK}Zamanı Temizle
+STR_RESET_LATENESS                                              :{BLACK}Gecikme sayacını sıfırla
 
 STR_TRAIN_STOPPING                                              :{RED}Frenliyor
 STR_TRAIN_STOPPING_VEL                                          :{RED}Frenliyor, {VELOCITY}
@@ -2696,8 +2739,17 @@
 STR_TRAIN_START_NO_CATENARY                                     :Bu rayda elektrik olmadiği için bu tren çalışamaz
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}{STRING} artık kullanılabilir!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}{STRING} artık kullanılabilir!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}{STRING} artık kullanılabilir!  -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Aracın zaman çizelgesi oluşturulamıyor...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Araçlar sadece istasyonlarda bekleyebilir.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Araç bu istasyonda durmuyor.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Zamanı değiştir
+STR_TIMETABLE_STATUS_ON_TIME                                    :Bu araç zamanında çalışıyor
+STR_TIMETABLE_STATUS_LATE                                       :Bu araç {STRING} geç çalışıyor
+STR_TIMETABLE_STATUS_EARLY                                      :Bu araç {STRING} erken çalışıyor
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Otomatik doldur
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Yolda araba var
@@ -2713,7 +2765,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Mak. hız: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Bu seneki kâr: {LTBLUE}{CURRENCY}  (geçen sene: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}güvenilirlik: {LTBLUE}%{COMMA}  {BLACK}Breakdowns since last service: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Yapım yılı: {LTBLUE}{NUM}{BLACK} Değeri: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Yapım yılı: {LTBLUE}{NUM}{BLACK} Değeri: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Kapasite: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...bir araba garajında duruyor olmalı
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Araba satılamıyor...
@@ -2748,6 +2800,8 @@
 STR_902E_NAME_ROAD_VEHICLE                                      :{BLACK}Arabayı adlandır
 STR_902F_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Kutlama yapıldı . . .{}Şuraya ilk kez otobüs geldi: {STATION}!
 STR_9030_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Kutlama yapıldı . . .{}Şuraya ilk kez kamyon geldi: {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Kutlama yapıldı . . .{}{STATION} istasyonuna ilk kez yolcu tramvayı geldi!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Kutlama yapıldı . . .{}{STATION} istasyonuna ilk kez yük tramvayı geldi!
 STR_9031_ROAD_VEHICLE_CRASH_DRIVER                              :{BLACK}{BIGFONT}Trafik kazasi!{}Trenle çarpisan aracın soförü feci şekilde can verdi
 STR_9032_ROAD_VEHICLE_CRASH_DIE                                 :{BLACK}{BIGFONT}Trafik kazasi!{}{COMMA} kişi patlamadan kurtulamadı
 STR_9033_CAN_T_MAKE_VEHICLE_TURN                                :{WHITE}Araç döndürülemiyor...
@@ -2787,7 +2841,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Mak. Hız: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Bu seneki kâr: {LTBLUE}{CURRENCY}  (geçen sene: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Güven: {LTBLUE}%{COMMA}  {BLACK}Son yolculuktaki bozulmalar: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Yapım yılı: {LTBLUE}{NUM}{BLACK} Değeri: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Yapım yılı: {LTBLUE}{NUM}{BLACK} Değeri: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Kapasite: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Gemi durdurulamaz/başlatılamaz...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Gemi tersaneye gönderilemez...
@@ -2855,7 +2909,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Mak. hız: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Bu seneki kâr: {LTBLUE}{CURRENCY}  (geçen sene: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Güvenilirlik: {LTBLUE}%{COMMA}  {BLACK}Son servisten beri bozulmalar: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Yapım: {LTBLUE}{NUM}{BLACK} Değeri: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Yapım: {LTBLUE}{NUM}{BLACK} Değeri: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Hangara gönderilemiyor...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}{STATION} Hangarına gidiyor
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}{STATION} Hangarına gidiyor, {VELOCITY}
@@ -2908,6 +2962,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :{STATION} Hangarına git
 SERVICE_AT_AIRPORT_HANGAR                                       :Servis: {STATION} Hangarı
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Zaman çizelgesi)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Zeplin düştü - {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}UFO'yla çarpışan araba parçalandı!
@@ -3220,6 +3276,14 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}İstasyonlar, garajlar tershaneler vb. için şeffaflık
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Köprüler için şeffaflık
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Antenler ve deniz fenerleri için şeffaflık
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Transparan yükleme göstergesi
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}%{NUM}{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}%{NUM}{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}%{NUM}{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}%{NUM}{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}%{NUM}{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}%{NUM}{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Grup {COMMA}
@@ -3250,6 +3314,18 @@
 STR_GROUP_CREATE_TIP                                            :{BLACK}Grup oluşturmak için tıklayın
 STR_GROUP_DELETE_TIP                                            :{BLACK}Seçili grubu sil
 STR_GROUP_RENAME_TIP                                            :{BLACK}Seçili grubun ismini değiştir
+STR_GROUP_REPLACE_PROTECTION_TIP                                :{BLACK}Bu grubu otomatik yenilemeden ayrı tutmak için tıklayın
 
+STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR                        :{TINYFONT}{BLACK}Bu seneki gelir: {GREEN}{CURRENCY} {BLACK}(geçen sene: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR                         :{TINYFONT}{BLACK}Bu seneki gelir: {RED}{CURRENCY} {BLACK}(geçen sene: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Bu seneki gelir: {GREEN}{CURRENCY} {BLACK}(geçen sene: {RED}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Bu seneki gelir: {RED}{CURRENCY} {BLACK}(geçen sene: {RED}{CURRENCY}{BLACK})
+
+STR_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
 
 ########
--- a/src/lang/ukrainian.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/ukrainian.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -2,8 +2,8 @@
 ##ownname Українська
 ##isocode uk_UA
 ##plural 6
+##gender m f s mn
 ##case r d z
-##gender m f s mn
 
 #
 
@@ -12,8 +12,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}За межами карти
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Надто близько до краю карти
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Недостатньо коштів - потрібно {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Потрібна рівна ділянка
 STR_0008_WAITING                                                :{BLACK}Чекає: {WHITE}{STRING}
@@ -621,7 +621,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Місцева влада: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :немає
 STR_01AA_NAME                                                   :{BLACK}Назва
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1
@@ -904,6 +904,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Налаштування складності
 STR_02C7_CONFIG_PATCHES                                         :Розширені налаштування
 STR_NEWGRF_SETTINGS                                             :Нова графіка
+STR_TRANSPARENCY_OPTIONS                                        :Опції прозорості
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Показ назви міст
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Показ назви станцій
@@ -931,7 +932,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Карта світу
 STR_EXTRA_VIEW_PORT                                             :Додаткове вікно
 STR_SIGN_LIST                                                   :Список позначень
-STR_TRANSPARENCY_OPTIONS                                        :Опції прозорості
 STR_02DF_TOWN_DIRECTORY                                         :Список міст
 STR_TOWN_POPULATION                                             :{BLACK}Населення світу: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Вікно {COMMA}
@@ -1229,6 +1229,17 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Швидкість прокрутки колесом миші: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Автоматично ставити паузу при старті нової гри: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Використовувати покращений список транспорту: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Використовувати індикатори завантаження: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Дозволити розклад руху для транспорту: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Показувати розклад в одиницях, а не в днях: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE                            :{LTBLUE}Тип колії за замовчанням (при новій грі/завантаженні): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Звичайна колія
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Електрична колія
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Монорейка
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Магнітна подушка
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :Перша з доступних
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :Остання з доступних
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :Найчастіш використовувана
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Макс. поїздів у гравця: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Макс. авто у гравця: {ORANGE}{STRING}
@@ -1312,7 +1323,7 @@
 STR_CHEATS                                                      :{WHITE}Гратиму нечесно
 STR_CHEATS_TIP                                                  :{BLACK}Галка показує, що Ви стали грати нечесно
 STR_CHEATS_WARNING                                              :{BLACK}Попередження! Ви збираєтеся обманювати конкурентів. Зауважте, подібне безчестя запам'ятається назавжди.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Збільшити кошти на {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Збільшити кошти на {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Грати за гравця: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Супер бульдозер (руйнує все): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Тунелі перетинаються: {ORANGE}{STRING}
@@ -1567,9 +1578,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Назва компанії:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Засновано:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Вартість компанії:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Поточний баланс:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Прибуток торік:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Вартість компанії:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Поточний баланс:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Прибуток торік:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Продуктивність:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Транспорт:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1804,7 +1815,7 @@
 STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Спочатку зруйнуйте споруду
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Населення: {ORANGE}{COMMA}{BLACK}  Будинки: {ORANGE}{COMMA}
@@ -1837,7 +1848,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Інформація про місцеву владу
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} місцева влада
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Рейтинги компаній:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Субсидії
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Пропонуються субсидії:-
 STR_2027_FROM_TO                                                :{ORANGE}Перевезення {STRING.r} з {STRING} до {STRING}
@@ -1908,7 +1919,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...Тут вже росте дерево
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...невідповідне місце
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Неможливо посадити тут дерево
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...дуже багато позначень
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Неможливо позначити місце
 STR_280A_SIGN                                                   :Позначення
@@ -2017,6 +2028,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Берег
 STR_3806_SHIP_DEPOT                                             :Корабельне депо
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...Неможливо будувати на воді
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Спочатку потрібно прибрати канал
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Зберегти гру
@@ -2026,9 +2038,14 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} мегабайт{P "" и ""}  вільно
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Неможливо прочитати пристрій
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Помилка запису гри
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Помилка запису гри{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Неможливо стерти файл
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Помилка завантаження гри
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Помилка завантаження гри{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Внутрішня помилка: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Файл збереженої гри пошкоджений - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Файл збереженої гри зроблений більш новою версією
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :Неможливо прочитати файл
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :Неможливо записати файл
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Список пристроїв, каталогів і збережених файлів гри
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Поточне вибране ім'я файлу для збереження гри
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Стерти вибрану збережену гру
@@ -2236,8 +2253,7 @@
 STR_SV_STNAME_LOWER                                             :Нижній {STRING}
 STR_SV_STNAME_HELIPORT                                          :{STRING} ГелМайданчик
 STR_SV_STNAME_FOREST                                            :{STRING} Ліс
-
-STR_SV_GROUP_NAME                                               :{GROUP}
+STR_SV_STNAME_FALLBACK                                          :{STRING} Станція №{NUM}
 
 ############ end of savegame specific region!
 
@@ -2317,7 +2333,7 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Гравець {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Нове лице
 STR_7005_COLOR_SCHEME                                           :{BLACK}Колір
@@ -2329,7 +2345,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Ім'я керівника
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Неможливо змінити назву компанії...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Неможливо змінити ім'я керівника...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} - фінанси {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} - фінанси {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Витрати/доходи
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Будівництво
@@ -2345,20 +2361,20 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Кораблі: дохід
 STR_701C_LOAN_INTEREST                                          :{GOLD}Відсотки за кредит
 STR_701D_OTHER                                                  :{GOLD}Інше
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Всього:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Графік доходів
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Графік прибутку від виробництва
 STR_7026_BANK_BALANCE                                           :{WHITE}Рахунок
 STR_7027_LOAN                                                   :{WHITE}Взято в кредит
-STR_MAX_LOAN                                                    :{WHITE}Макс. кредит:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Позичити {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Повернути {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Макс. кредит:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Позичити {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Повернути {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...найбільший дозволений розмір кредиту {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Неможливо взяти кредит...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...кредит вже оплачено
@@ -2397,8 +2413,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Рейтинг продуктивності компанії(найбільший рейтинг=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Вартість компанії
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Таблиця компаній
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
+STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM}  '{STRING}'
 STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Компанія у скруті!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} буде продано або оголошено банкрутом, якщо найблищим часом не зросте її продуктивність!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Керівник)
@@ -2436,7 +2452,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Світова економічна криза!{}{}Фінансисти очікують спад виробництва та попиту!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Криза минула!{}{}Збільшення виробництва внаслідок стабілізації економіки надає впевненості підприємствам!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Розмір вікна великий/малий
-STR_7076_COMPANY_VALUE                                          :{GOLD}Вартість компанії: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Вартість компанії: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Купити 25% акцій компанії
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Продати 25% акцій компанії
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Купити 25% акцій цієї компанії
@@ -2748,7 +2764,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Залізничне депо
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Жителі святкують . . .{}Перший поїзд з'явився на {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Детально)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Детально)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Поїзд на шляху
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING}{STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING}{STRING}
@@ -2769,6 +2785,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Прямувати без зупинок до {TOWN} депо
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Ремонтуватись без зупинок в {TOWN} депо
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Прямує (не за розкладом)
+STR_TIMETABLE_TRAVEL_FOR                                        :Прямує до {STRING}
+STR_TIMETABLE_STAY_FOR                                          :і стояти {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} д{P ень ні нів}
+STR_TIMETABLE_TICKS                                             :{COMMA} одиниц{P ю і ь}
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Прямує до {TOWN} депо
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Прямує до {TOWN} депо, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Техогляд в {TOWN} депо
@@ -2810,13 +2833,15 @@
 STR_REFIT                                                       :{BLACK}Переобладнати
 STR_REFIT_TIP                                                   :{BLACK}Оберіть на який тип вантажу переобладнати це завдання. Control+клік видалити команду переобладнання
 STR_REFIT_ORDER                                                 :(Переобладнати до {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Розклад
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Переключитись на розклад
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Накази)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Кінець наказів - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Техогляд
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Неможливо збудувати поїзд...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Рік випуску: {LTBLUE}{NUM}{BLACK} Ціна: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Ціна: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Рік випуску: {LTBLUE}{NUM}{BLACK} Ціна: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Ціна: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Завантажуюся/Розвантажуюся
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Поїзд повинен стояти в депо
@@ -2866,6 +2891,10 @@
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Вставити новий пункт перед відміченим або додати в кінець
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Чекати повного завантаження на цій станції
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Лише розвантажитися на цій станції
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Розклад - клікніть на наказі, щоб виділити.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Змінити час, впродовж якого має виконуватись наказ
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Очистити час для виділеного наказу
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Очистити лічильник запізнення, щоб транспорт встигнув
 STR_SERVICE_HINT                                                :{BLACK}Пропустити це завдання поки обслуговування потрібне!!!
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Ціна: {CURRENCY} Вага: {WEIGHT_S}{}Швидкість: {VELOCITY}{}Потужність: {POWER}{}Вартість експлуатації: {CURRENCY}/рік{}Місткість: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Зламався
@@ -2887,6 +2916,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Неможливо перейменувати тип поїзду...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Наказати транспорту примусово відвантажити вантаж
 STR_886F_TRANSFER                                               :{BLACK}Пересадка
+STR_CLEAR_TIME                                                  :{BLACK}Очистити час
+STR_RESET_LATENESS                                              :{BLACK}Очистити лічильник запізнення
 
 STR_TRAIN_STOPPING                                              :{RED}Зупиняється
 STR_TRAIN_STOPPING_VEL                                          :{RED}Зупиняється, {VELOCITY}
@@ -2895,8 +2926,18 @@
 STR_TRAIN_START_NO_CATENARY                                     :Нема електрики, поїзд стоїть
 
 STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Став доступним новий {STRING}!
-STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Став доступним новий {STRING}!  -  {STRING}
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Став доступним новий {STRING}!  -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Не можна встановити розклад для транспорту...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Транспорт може чекати тільки на станціях.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Цей транспорт не зупиняється на цій станції.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Змінити час
+STR_TIMETABLE_STATUS_ON_TIME                                    :Цей транспорт зараз прямує за розкладом
+STR_TIMETABLE_STATUS_LATE                                       :Цей транспорт запізнюється на {STRING}
+STR_TIMETABLE_STATUS_EARLY                                      :Цей транспорт випереджує розклад на {STRING}
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Автозаповнення
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Автоматично заповнювати розпис згiдно з даними першої подорожі
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}На шляху авто
@@ -2912,7 +2953,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Макс. швидкість: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Прибуток цього року: {LTBLUE}{CURRENCY}  (минулого року: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Надійність: {LTBLUE}{COMMA}%  {BLACK}Поломок після останнього техогляду: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Рік випуску: {LTBLUE}{NUM}{BLACK} Ціна: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Рік випуску: {LTBLUE}{NUM}{BLACK} Ціна: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Місткість: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...авто повинно стояти в депо
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Неможливо продати авто...
@@ -2988,7 +3029,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Макс. швидкість: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Прибуток цього року: {LTBLUE}{CURRENCY}  (минулого року: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Надійність: {LTBLUE}{COMMA}%  {BLACK}Поломок після останнього техогляду: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Рік випуску: {LTBLUE}{NUM}{BLACK} Ціна: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Рік випуску: {LTBLUE}{NUM}{BLACK} Ціна: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Місткість: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Неможливо зупинити корабель...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Неможливо направити корабель в депо...
@@ -3056,7 +3097,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Макс. швидкість: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Прибуток цього року: {LTBLUE}{CURRENCY}  (минулого року: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Надійність: {LTBLUE}{COMMA}%  {BLACK}Поломок після останнього техогляду: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Рік випуску: {LTBLUE}{NUM}{BLACK} Ціна: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Рік випуску: {LTBLUE}{NUM}{BLACK} Ціна: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Неможливо направити літак до ангару...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Летить до {STATION} ангару
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Летить до {STATION} ангару, {VELOCITY}
@@ -3109,6 +3150,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Летіти в {STATION} ангар
 SERVICE_AT_AIRPORT_HANGAR                                       :Ремонтуватись в {STATION} ангарі
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (розклад)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Дирижабль впав на {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Аварія!'НЛО' зіткнулось з авто!
@@ -3424,6 +3467,14 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Переключити прозорість для споруд, таких як станції, депо, ЛЕП тощо
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Переключити прозорість для мостів
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Переключити прозорість для споруд, таких як маяки та антенни (може, потім)
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Змінити прозорість індикаторів завантаження
+
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Група {COMMA}
@@ -3461,4 +3512,11 @@
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Прибуток цього року: {GREEN}{CURRENCY} {BLACK}(торік: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Прибуток цього року: {RED}{CURRENCY} {BLACK}(торік: {RED}{CURRENCY}{BLACK})
 
+STR_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
 ########
--- a/src/lang/unfinished/afrikaans.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/unfinished/afrikaans.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -8,8 +8,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Oor kant van kaart
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Te naby aan kant van kaart
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Nie genoeg kontant nie - vereis {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Platte land vereis
 STR_0008_WAITING                                                :{BLACK}Wagtend: {WHITE}{STRING}
@@ -1093,7 +1093,7 @@
 STR_CHEATS                                                      :{WHITE}Bedriege
 STR_CHEATS_TIP                                                  :{BLACK}tikblokkies aanwys as jy die bedreig vroe� gebruik het
 STR_CHEATS_WARNING                                              :{BLACK}Waarskuwing! Jy gaan omtrent jou genoote mededingers verrai. Hou in gemoed dat so 'n skande sal vir ewig onhout word.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Vermeerder geld by {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Vermeerder geld by {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Speel as speler: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Tower stootskraper (uitwis nywerheide, onbeweegbares): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tonnels mag vir mekaar kruis: {ORANGE}{STRING}
@@ -1299,9 +1299,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Maatskappy naam:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Inwyding:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Maatskappy waarde:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Hudige balans:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Verlede jaar se inkome:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Maatskappy waarde:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Hudige balans:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Verlede jaar se inkome:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Prestasie:  {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Voertuie:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1697,9 +1697,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte{P "" s} vry
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Kan nie skyf lees nie
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Spel Bewaar Gedop
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Spel Bewaar Gedop{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Kan nie l�r uitwis nie
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Spel Laai Gedop
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Spel Laai Gedop{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Lys van skywe, voublaaie en spel-bewaar l�rs
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Huidige naam vir bewaarde-spel
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Uitwis die verkieste bewaarde-spel
@@ -1965,18 +1965,18 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Skip Inkome
 STR_701C_LOAN_INTEREST                                          :{GOLD}Lening Rente
 STR_701D_OTHER                                                  :{GOLD}Ander
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Totaal:
 STR_7021                                                        :{COMPANY}{PLAYERNAME}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Inkome Grafiek
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Bewerking Profyt Grafiek
 STR_7026_BANK_BALANCE                                           :{WHITE}Bank Balans
 STR_7027_LOAN                                                   :{WHITE}Lening
-STR_MAX_LOAN                                                    :{WHITE}Max Lening:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
+STR_MAX_LOAN                                                    :{WHITE}Max Lening:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
 STR_7029_BORROW                                                 :{BLACK}Leen {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
 STR_702A_REPAY                                                  :{BLACK}Terugbetaal {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...maksimum vergun lening groote is {CURRENCY}
@@ -2055,7 +2055,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}W�eld Insinking!{}{}Finansieel eksperte vrees ergste as ekconomie inmekaar sak!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Insinking Oor!{}{}Oplewing in sake gee vertroue na nywerheide as ekonomie versterk!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Skakel groot/klein venster groote
-STR_7076_COMPANY_VALUE                                          :{GOLD}Maatskappy waarde: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Maatskappy waarde: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Koop 25% aandeel in maatskappy
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Verkoop 25% aandeel in maatskappy
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Koop 25% aandeel in die maatskappy
--- a/src/lang/unfinished/croatian.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/unfinished/croatian.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -11,8 +11,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Izvan rubova karte
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Preblizu rubu karte
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Nedovoljno gotovine - potrebno je {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Potrebna ravna površina
 STR_0008_WAITING                                                :{BLACK}Čekanje: {WHITE}{STRING}
@@ -1152,7 +1152,7 @@
 STR_CHEATS                                                      :{WHITE}Varanje
 STR_CHEATS_TIP                                                  :{BLACK}Kvačice ukazuju na to jesi li koristio ovo varanje prije
 STR_CHEATS_WARNING                                              :{BLACK}Upozorenje! Upravo se spremaš izdati svoj kolege natjecatelje. Imaj na umu da se takva sramota pamti zauvijek.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Povećava novce za {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Povećava novce za {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Igraj kao igrač: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Čudesni buldožer (uklanja industrije, nepokretne objekte): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tuneli se mogu ukrštavati međusobno: {ORANGE}{STRING}
@@ -1403,9 +1403,9 @@
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Ime tvrtke:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Preuzimanje dužnosti:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Vrijednost tvrtke:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Trenutno stanje:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Prošlogodišnji prihod:  {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE                                               :{SILVER}Vrijednost tvrtke:  {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Trenutno stanje:  {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Prošlogodišnji prihod:  {WHITE}{CURRENCY}
 STR_NETWORK_PERFORMANCE                                         :{SILVER}Izvršavanje: {WHITE}{NUM}
 
 STR_NETWORK_VEHICLES                                            :{SILVER}Vozila:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1828,9 +1828,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabajt{P "" a a} slobod{P an na no}
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Ne mogu pročitati disk
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Spremanje igre nije uspjelo
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Spremanje igre nije uspjelo{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Ne mogu obrisati datoteku
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Učitavanje igre nije uspjelo
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Učitavanje igre nije uspjelo{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Popis diskova, mapa i spremljenih datoteka
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Trenutno odabrano ime za spremanje igre
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Obriši trenutno odabranu spremljenu igru
@@ -2108,18 +2108,18 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Prihod od brodova
 STR_701C_LOAN_INTEREST                                          :{GOLD}Kamate
 STR_701D_OTHER                                                  :{GOLD}Ostalo
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Ukupno:
 STR_7021                                                        :{COMPANY}{PLAYERNAME}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Graf prihoda
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Graf operativnih prihoda
 STR_7026_BANK_BALANCE                                           :{WHITE}Bankovna bilanca
 STR_7027_LOAN                                                   :{WHITE}Kredit
-STR_MAX_LOAN                                                    :{WHITE}Maks zajam:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
+STR_MAX_LOAN                                                    :{WHITE}Maks zajam:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
 STR_7029_BORROW                                                 :{BLACK}Pozajmi {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
 STR_702A_REPAY                                                  :{BLACK}Otplati {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...najveći dopušteni kredit iznosi {CURRENCY}
@@ -2197,7 +2197,7 @@
 STR_SET_COMPANY_PASSWORD                                        :Postavi zaporku tvrtke
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Svjetska recesija!{}{}Financijski stručnjaci očekuju najgore zbog ekonomske krize!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Recesija završena!{}{}Obrat  u trgovanu daje samopouzdanje gospodarstvu jer ekonomija jača!
-STR_7076_COMPANY_VALUE                                          :{GOLD}Vrijednost tvrtke: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Vrijednost tvrtke: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Kupi 25% udjela u tvrtci
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Prodaj 25% udio u tvrtci
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Kupi 25% udjela u ovoj tvrtci
--- a/src/lang/unfinished/frisian.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/unfinished/frisian.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -7,8 +7,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Bûten de map
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Te ticht by de râne fan 'e map
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Net genôch jild - {CURRENCY} nedich
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Flak lân nedich
 STR_0008_WAITING                                                :{BLACK}Wachtsjend: {WHITE}{STRING}
@@ -1048,9 +1048,9 @@
 STR_4003_DELETE                                                 :{BLACK}Fuortsmite
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Koe net fan 'e skiif lêze
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Opslaan Mislearre
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Opslaan Mislearre{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Kin triem net fuortsmite
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Laden Mislearre
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Laden Mislearre{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}List fan skiven, mappen en triemen
 STR_4011_LOAD_HEIGHTMAP                                         :{WHITE}Laad Hichtemap
 
@@ -1193,14 +1193,14 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Ynkomsten Skepen
 STR_701C_LOAN_INTEREST                                          :{GOLD}Rinte Liening
 STR_701D_OTHER                                                  :{GOLD}Oaren
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Totaal:
 STR_7021                                                        :{COMPANY}{PLAYERNAME}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Ynkomsten Grafyk
 STR_7024                                                        :{COMMA}
 STR_7027_LOAN                                                   :{WHITE}Liening
-STR_7028                                                        :{BLACK}{CURRENCY64}
+STR_7028                                                        :{BLACK}{CURRENCY}
 STR_7029_BORROW                                                 :{BLACK}Lien {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
 STR_702A_REPAY                                                  :{BLACK}Betelje {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY} werom
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Kin net mear jild liene
--- a/src/lang/unfinished/greek.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/unfinished/greek.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -9,8 +9,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Απο την άκρη του χάρτη
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Πολυ κοντά στην άκρη του χάρτη
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Δεν υπάρχουν αρκετά χρήματα - απαιτούνται {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}.
-STR_0005                                                        :{RED}{CURRENCY64}.
+STR_0004                                                        :{WHITE}{CURRENCY}.
+STR_0005                                                        :{RED}{CURRENCY}.
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Απαιτείται επίπεδο εδαφος
 STR_0008_WAITING                                                :{BLACK}Αναμονη: {WHITE}{STRING}
@@ -1159,7 +1159,7 @@
 STR_CHEATS                                                      :{WHITE}Κλεψιές
 STR_CHEATS_TIP                                                  :{BLACK}Τα κουτάκια δείχνουν αν έχετε χρησιμοποιήσει αυτό το κόλπο πρίν
 STR_CHEATS_WARNING                                              :{BLACK}Προσοχή! Είστε έτοιμος να προδώσετε τους φίλους ανταγωνιστές σας. Θυμηθείτε ότι αυτή η ντροπή θα μείνει για πάντα.
-STR_CHEAT_MONEY                                                 :{LTBLUE}Αύξηση χρημάτων κατά {CURRENCY64}
+STR_CHEAT_MONEY                                                 :{LTBLUE}Αύξηση χρημάτων κατά {CURRENCY}
 STR_CHEAT_CHANGE_PLAYER                                         :{LTBLUE}Παίξτε σαν παίκτης: {ORANGE}{COMMA}
 STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Μαγική μπουλντόζα (αφαιρεί βιομηχανίες, αμετακίνητα): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Τα τούνελ διασταυρώνονται: {ORANGE}{STRING}
@@ -1557,9 +1557,9 @@
 STR_4004                                                        :{COMPANY}, {DATE_LONG}
 STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte{P "" s} ελεύθερα
 STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Αδύνατη η ανάγνωση του δίσκου
-STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Αποθήκευση Παιχνιδιού Απέτυχε
+STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Αποθήκευση Παιχνιδιού Απέτυχε{}{STRING}
 STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Αδύνατη η διαγραφή του αρχείου
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Φόρτωση Παιχνιδιού Απέτυχε
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Φόρτωση Παιχνιδιού Απέτυχε{}{STRING}
 STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}Λίστα δίσκων, φακέλλων και αποθηκευμένων παιχνιδιών
 STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Τρέχον όνομα για το αποθηκευμένο παιχνίδι
 STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Διαγραφή του επιλεγμένου αποθηκευμένου παιχνιδιού
@@ -1792,8 +1792,8 @@
 STR_701B_SHIP_INCOME                                            :{GOLD}Έσοδα Πλοίων
 STR_701C_LOAN_INTEREST                                          :{GOLD}Τόκος Δανείου
 STR_701D_OTHER                                                  :{GOLD}Άλλα
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7020_TOTAL                                                  :{WHITE}Σύνολο:
 STR_7021                                                        :{COMPANY}{PLAYERNAME}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Γράφημα Εισοδήματος
@@ -1801,7 +1801,7 @@
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Γράφημα Ενεργών Εσόδων
 STR_7026_BANK_BALANCE                                           :{WHITE}Ισολογισμός Τραπέζης
 STR_7027_LOAN                                                   :{WHITE}Δάνειο
-STR_7028                                                        :{BLACK}{CURRENCY64}
+STR_7028                                                        :{BLACK}{CURRENCY}
 STR_7029_BORROW                                                 :{BLACK}Δανεισμός {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
 STR_702A_REPAY                                                  :{BLACK}Πληρωμή {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...το μέγιστο επιτρεπόμενο δάνειο είναι {CURRENCY}
@@ -1871,7 +1871,7 @@
 STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}Παγκόσμια Υποχώρηση!{}{}Οι οικονομολόγοι φοβούνται τα χειρότερα καθώς η οικονομία πιάνει πάτο!
 STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Υποχώρηση Τέλος!{}{}Κέρδη στο εμπόριο δίνει σιγουριά στις βιομηχανίες καθώς η οικονομία δυναμώνει!
 STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Εναλλαγή μεγάλου/μικρού παραθύρου
-STR_7076_COMPANY_VALUE                                          :{GOLD}Αξία εταιρείας: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE                                          :{GOLD}Αξία εταιρείας: {WHITE}{CURRENCY}
 STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Αγορά μεριδίου 25% στην εταιρεία
 STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Πώληση μεριδίου 25% της εταιρείας
 STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Αγορά μεριδίου 25% της εταιρείας
--- a/src/lang/unfinished/latvian.txt	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/unfinished/latvian.txt	Tue Jun 26 23:40:58 2007 +0000
@@ -8,8 +8,8 @@
 STR_0001_OFF_EDGE_OF_MAP                                        :{WHITE}A'rpus kartes robez'as
 STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Pa'ra'k tuvu kartes malai
 STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Nepietiek naudas - vajag {CURRENCY}
-STR_0004                                                        :{WHITE}{CURRENCY64}
-STR_0005                                                        :{RED}{CURRENCY64}
+STR_0004                                                        :{WHITE}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
 STR_EMPTY                                                       :
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Zemei ja'bu't plakanai
 STR_0008_WAITING                                                :{BLACK}Gaidam: {WHITE}{STRING}
@@ -1241,14 +1241,14 @@
 STR_7007_NEW_COLOR_SCHEME                                       :{WHITE}Jaunâ Krasas shçma
 STR_7010                                                        :{WHITE}{NUM}
 STR_701D_OTHER                                                  :{GOLD}Citi
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
 STR_7021                                                        :{COMPANY}{PLAYERNAME}
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_CURRCOMPACT                                                 :{CURRCOMPACT}
 STR_7024                                                        :{COMMA}
 STR_7027_LOAN                                                   :{WHITE}Aizdevums
-STR_MAX_LOAN                                                    :{WHITE}Maksmalais Aizdevums:  {BLACK}{CURRENCY64}
-STR_7028                                                        :{BLACK}{CURRENCY64}
+STR_MAX_LOAN                                                    :{WHITE}Maksmalais Aizdevums:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
 STR_INSUFFICIENT_FUNDS                                          :{WHITE}Naudu, kas ir bankas aizn'e'mums, nevar dot prom...
 STR_7042_NONE                                                   :{WHITE}Neviens
 STR_7044_MALE                                                   :{BLACK}Viriešu
--- a/src/macros.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/macros.h	Tue Jun 26 23:40:58 2007 +0000
@@ -26,6 +26,12 @@
 	return a >= b ? a : b;
 }
 
+template <typename T>
+static inline T min(T a, T b)
+{
+	return a < b ? a : b;
+}
+
 static inline int min(int a, int b) { if (a <= b) return a; return b; }
 
 static inline uint minu(uint a, uint b) { if (a <= b) return a; return b; }
@@ -45,6 +51,14 @@
 	return a;
 }
 
+/* Gracefully reduce a signed 64-bit int to signed 32-bit -- no bogusly truncating the sign bit */
+static inline int32 ClampToI32(int64 a)
+{
+	if (a <= (int32)0x80000000) return 0x80000000;
+	if (a >= (int32)0x7FFFFFFF) return 0x7FFFFFFF;
+	return (int32)a;
+}
+
 static inline int32 BIGMULSS(int32 a, int32 b, int shift)
 {
 	return (int32)((int64)a * (int64)b >> shift);
--- a/src/main_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/main_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -92,12 +92,12 @@
 #ifdef ENABLE_NETWORK
 	case 3: { // Give money, you can only give money in excess of loan
 		const Player *p = GetPlayer(_current_player);
-		int32 money = min(p->money64 - p->current_loan, atoi(str) / _currency->rate);
-
-		money = clamp(money, 0, 20000000); // Clamp between 20 million and 0
+		Money money = min(p->player_money - p->current_loan, atoi(str) / _currency->rate);
+
+		uint32 money_c = clamp(ClampToI32(money), 0, 20000000); // Clamp between 20 million and 0
 
 		/* Give 'id' the money, and substract it from ourself */
-		DoCommandP(0, money, id, CcGiveMoney, CMD_GIVE_MONEY | CMD_MSG(STR_INSUFFICIENT_FUNDS));
+		DoCommandP(0, money_c, id, CcGiveMoney, CMD_GIVE_MONEY | CMD_MSG(STR_INSUFFICIENT_FUNDS));
 	} break;
 #endif /* ENABLE_NETWORK */
 		default: NOT_REACHED();
@@ -179,15 +179,16 @@
 		case 1: ShowGameDifficulty();   return;
 		case 2: ShowPatchesSelection(); return;
 		case 3: ShowNewGRFSettings(!_networking, true, true, &_grfconfig);   return;
-
-		case  5: TOGGLEBIT(_display_opt, DO_SHOW_TOWN_NAMES);    break;
-		case  6: TOGGLEBIT(_display_opt, DO_SHOW_STATION_NAMES); break;
-		case  7: TOGGLEBIT(_display_opt, DO_SHOW_SIGNS);         break;
-		case  8: TOGGLEBIT(_display_opt, DO_WAYPOINTS);          break;
-		case  9: TOGGLEBIT(_display_opt, DO_FULL_ANIMATION);     break;
-		case 10: TOGGLEBIT(_display_opt, DO_FULL_DETAIL);        break;
-		case 11: ToggleTransparency(); break;
-		case 12: TOGGLEBIT(_transparent_opt, TO_SIGNS); break;
+		case 4: ShowTransparencyToolbar(); break;
+
+		case  6: TOGGLEBIT(_display_opt, DO_SHOW_TOWN_NAMES);    break;
+		case  7: TOGGLEBIT(_display_opt, DO_SHOW_STATION_NAMES); break;
+		case  8: TOGGLEBIT(_display_opt, DO_SHOW_SIGNS);         break;
+		case  9: TOGGLEBIT(_display_opt, DO_WAYPOINTS);          break;
+		case 10: TOGGLEBIT(_display_opt, DO_FULL_ANIMATION);     break;
+		case 11: TOGGLEBIT(_display_opt, DO_FULL_DETAIL);        break;
+		case 12: ToggleTransparency(); break;
+		case 13: TOGGLEBIT(_transparent_opt, TO_SIGNS); break;
 	}
 	MarkWholeScreenDirty();
 }
@@ -218,7 +219,6 @@
 		case 0: ShowSmallMap();            break;
 		case 1: ShowExtraViewPortWindow(); break;
 		case 2: ShowSignList();            break;
-		case 3: ShowTransparencyToolbar(); break;
 	}
 }
 
@@ -346,7 +346,8 @@
 {
 	_rename_id = si->index;
 	_rename_what = 0;
-	ShowQueryString(si->str, STR_280B_EDIT_SIGN_TEXT, 30, 180, NULL, CS_ALPHANUMERAL);
+	SetDParam(0, si->index);
+	ShowQueryString(STR_SIGN_NAME, STR_280B_EDIT_SIGN_TEXT, 30, 180, NULL, CS_ALPHANUMERAL);
 }
 
 void ShowRenameWaypointWindow(const Waypoint *wp)
@@ -604,9 +605,8 @@
 
 				DrawPlayerIcon(p->index, x + 2, y + 1);
 
-				SetDParam(0, p->name_1);
-				SetDParam(1, p->name_2);
-				SetDParam(2, GetPlayerNameString(p->index, 3));
+				SetDParam(0, p->index);
+				SetDParam(1, p->index);
 
 				color = (p->index == sel) ? 0xC : 0x10;
 				if (chk&1) color = 14;
@@ -791,7 +791,7 @@
 
 static void ToolbarMapClick(Window *w)
 {
-	PopupMainToolbMenu(w, 4, STR_02DE_MAP_OF_WORLD, 4, 0);
+	PopupMainToolbMenu(w, 4, STR_02DE_MAP_OF_WORLD, 3, 0);
 }
 
 static void ToolbarTownClick(Window *w)
@@ -988,16 +988,16 @@
 {
 	uint16 x = 0;
 
-	w = PopupMainToolbMenu(w, 2, STR_02C3_GAME_OPTIONS, 13, 0);
-
-	if (HASBIT(_display_opt, DO_SHOW_TOWN_NAMES))    SETBIT(x,  5);
-	if (HASBIT(_display_opt, DO_SHOW_STATION_NAMES)) SETBIT(x,  6);
-	if (HASBIT(_display_opt, DO_SHOW_SIGNS))         SETBIT(x,  7);
-	if (HASBIT(_display_opt, DO_WAYPOINTS))          SETBIT(x,  8);
-	if (HASBIT(_display_opt, DO_FULL_ANIMATION))     SETBIT(x,  9);
-	if (HASBIT(_display_opt, DO_FULL_DETAIL))        SETBIT(x, 10);
-	if (GB(_transparent_opt, 1, 7) != 0)      SETBIT(x, 11);
-	if (HASBIT(_transparent_opt, TO_SIGNS))   SETBIT(x, 12);
+	w = PopupMainToolbMenu(w, 2, STR_02C3_GAME_OPTIONS, 14, 0);
+
+	if (HASBIT(_display_opt, DO_SHOW_TOWN_NAMES))    SETBIT(x,  6);
+	if (HASBIT(_display_opt, DO_SHOW_STATION_NAMES)) SETBIT(x,  7);
+	if (HASBIT(_display_opt, DO_SHOW_SIGNS))         SETBIT(x,  8);
+	if (HASBIT(_display_opt, DO_WAYPOINTS))          SETBIT(x,  9);
+	if (HASBIT(_display_opt, DO_FULL_ANIMATION))     SETBIT(x, 10);
+	if (HASBIT(_display_opt, DO_FULL_DETAIL))        SETBIT(x, 11);
+	if (GB(_transparent_opt, 1, 7) != 0)      SETBIT(x, 12);
+	if (HASBIT(_transparent_opt, TO_SIGNS))   SETBIT(x, 13);
 	WP(w,menu_d).checked_items = x;
 }
 
@@ -1886,7 +1886,7 @@
 		case WKC_F7: ShowPlayerStations(_local_player); break;
 		case WKC_F8: ShowPlayerFinances(_local_player); break;
 		case WKC_F9: ShowPlayerCompany(_local_player); break;
-		case WKC_F10:ShowOperatingProfitGraph(); break;
+		case WKC_F10: ShowOperatingProfitGraph(); break;
 		case WKC_F11: ShowCompanyLeagueTable(); break;
 		case WKC_F12: ShowBuildIndustryWindow(); break;
 		case WKC_SHIFT | WKC_F1: ShowVehicleListWindow(_local_player, VEH_TRAIN); break;
@@ -1898,7 +1898,7 @@
 		case WKC_SHIFT | WKC_F7: ShowBuildRailToolbar(_last_built_railtype, -1); break;
 		case WKC_SHIFT | WKC_F8: ShowBuildRoadToolbar(_last_built_roadtype); break;
 		case WKC_SHIFT | WKC_F9: ShowBuildDocksToolbar(); break;
-		case WKC_SHIFT | WKC_F10:ShowBuildAirToolbar(); break;
+		case WKC_SHIFT | WKC_F10: ShowBuildAirToolbar(); break;
 		case WKC_SHIFT | WKC_F11: ShowBuildTreesToolbar(); break;
 		case WKC_SHIFT | WKC_F12: ShowMusicWindow(); break;
 		case WKC_CTRL  | 'S': MenuClickSmallScreenshot(); break;
@@ -2091,7 +2091,7 @@
 
 	case WE_KEYPRESS:
 		switch (e->we.keypress.keycode) {
-			case WKC_F1: ToolbarPauseClick(w); break;
+			case WKC_F1: case WKC_PAUSE: ToolbarPauseClick(w); break;
 			case WKC_F2: ShowGameOptions(); break;
 			case WKC_F3: MenuClickSaveLoad(0); break;
 			case WKC_F4: ToolbarScenGenLand(w); break;
@@ -2208,7 +2208,7 @@
 
 		if (p != NULL) {
 			/* Draw player money */
-			SetDParam64(0, p->money64);
+			SetDParam(0, p->player_money);
 			DrawStringCentered(570, 1, p->player_money >= 0 ? STR_0004 : STR_0005, 0);
 		}
 
@@ -2226,8 +2226,7 @@
 		} else {
 			if (p != NULL) {
 				/* This is the default text */
-				SetDParam(0, p->name_1);
-				SetDParam(1, p->name_2);
+				SetDParam(0, p->index);
 				DrawStringCentered(320, 1, STR_02BA, 0);
 			}
 		}
--- a/src/misc.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/misc.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -93,6 +93,7 @@
 void InitializeTrees();
 void InitializeSigns();
 void InitializeStations();
+void InitializeCargoPackets();
 static void InitializeNameMgr();
 void InitializePlayers();
 static void InitializeCheats();
@@ -109,6 +110,7 @@
 	_pause_game = 0;
 	_fast_forward = 0;
 	_tick_counter = 0;
+	_realtime_tick = 0;
 	_date_fract = 0;
 	_cur_tileloop_tile = 0;
 
@@ -134,6 +136,7 @@
 	InitializeTrees();
 	InitializeSigns();
 	InitializeStations();
+	InitializeCargoPackets();
 	InitializeIndustries();
 	InitializeBuildingCounts();
 	InitializeMainGui();
--- a/src/misc_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/misc_cmd.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -24,7 +24,7 @@
  * @param p1 unused
  * @param p2 face bitmasked
  */
-int32 CmdSetPlayerFace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSetPlayerFace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	PlayerFace pf = (PlayerFace)p2;
 
@@ -34,7 +34,7 @@
 		GetPlayer(_current_player)->face = pf;
 		MarkWholeScreenDirty();
 	}
-	return 0;
+	return CommandCost();
 }
 
 /** Change the player's company-colour
@@ -45,7 +45,7 @@
  * p1 bits 8-9 set in use state or first/second colour
  * @param p2 new colour for vehicles, property, etc.
  */
-int32 CmdSetPlayerColor(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSetPlayerColor(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Player *p, *pp;
 	byte colour;
@@ -114,7 +114,7 @@
 		}
 		MarkWholeScreenDirty();
 	}
-	return 0;
+	return CommandCost();
 }
 
 /** Increase the loan of your company.
@@ -125,7 +125,7 @@
  *           when 1: loans the maximum loan permitting money (press CTRL),
  *           when 2: loans the amount specified in p1
  */
-int32 CmdIncreaseLoan(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdIncreaseLoan(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Player *p = GetPlayer(_current_player);
 
@@ -134,7 +134,7 @@
 		return_cmd_error(STR_702B_MAXIMUM_PERMITTED_LOAN);
 	}
 
-	int32 loan;
+	Money loan;
 	switch (p2) {
 		default: return CMD_ERROR; // Invalid method
 		case 0: // Take some extra loan
@@ -149,14 +149,16 @@
 			break;
 	}
 
+	/* Overflow protection */
+	if (p->player_money + p->current_loan + loan < p->player_money) return CMD_ERROR;
+
 	if (flags & DC_EXEC) {
-		p->money64 += loan;
+		p->player_money += loan;
 		p->current_loan += loan;
-		UpdatePlayerMoney32(p);
 		InvalidatePlayerWindows(p);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Decrease the loan of your company.
@@ -167,20 +169,20 @@
  *           when 1: pays back the maximum loan permitting money (press CTRL),
  *           when 2: pays back the amount specified in p1
  */
-int32 CmdDecreaseLoan(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdDecreaseLoan(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Player *p = GetPlayer(_current_player);
 
 	if (p->current_loan == 0) return_cmd_error(STR_702D_LOAN_ALREADY_REPAYED);
 
-	int32 loan;
+	Money loan;
 	switch (p2) {
 		default: return CMD_ERROR; // Invalid method
 		case 0: // Pay back one step
-			loan = min(p->current_loan, LOAN_INTERVAL);
+			loan = min(p->current_loan, (Money)LOAN_INTERVAL);
 			break;
 		case 1: // Pay back as much as possible
-			loan = max(min(p->current_loan, p->player_money), (int32)LOAN_INTERVAL);
+			loan = max(min(p->current_loan, p->player_money), (Money)LOAN_INTERVAL);
 			loan -= loan % LOAN_INTERVAL;
 			break;
 		case 2: // Repay the given amount of loan
@@ -195,12 +197,11 @@
 	}
 
 	if (flags & DC_EXEC) {
-		p->money64 -= loan;
+		p->player_money -= loan;
 		p->current_loan -= loan;
-		UpdatePlayerMoney32(p);
 		InvalidatePlayerWindows(p);
 	}
-	return 0;
+	return CommandCost();
 }
 
 /** Change the name of the company.
@@ -209,7 +210,7 @@
  * @param p1 unused
  * @param p2 unused
  */
-int32 CmdChangeCompanyName(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdChangeCompanyName(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	StringID str;
 	Player *p;
@@ -228,7 +229,7 @@
 		DeleteName(str);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Change the name of the president.
@@ -237,7 +238,7 @@
  * @param p1 unused
  * @param p2 unused
  */
-int32 CmdChangePresidentName(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdChangePresidentName(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	StringID str;
 	Player *p;
@@ -264,7 +265,7 @@
 		DeleteName(str);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Pause/Unpause the game (server-only).
@@ -276,7 +277,7 @@
  * @param p1 0 = decrease pause counter; 1 = increase pause counter
  * @param p2 unused
  */
-int32 CmdPause(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdPause(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (flags & DC_EXEC) {
 		_pause_game += (p1 == 1) ? 1 : -1;
@@ -284,7 +285,7 @@
 		InvalidateWindow(WC_STATUS_BAR, 0);
 		InvalidateWindow(WC_MAIN_TOOLBAR, 0);
 	}
-	return 0;
+	return CommandCost();
 }
 
 /** Change the financial flow of your company.
@@ -295,13 +296,13 @@
  * @param p1 the amount of money to receive (if negative), or spend (if positive)
  * @param p2 unused
  */
-int32 CmdMoneyCheat(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdMoneyCheat(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 #ifndef _DEBUG
 	if (_networking) return CMD_ERROR;
 #endif
 	SET_EXPENSES_TYPE(EXPENSES_OTHER);
-	return -(int32)p1;
+	return CommandCost(-(Money)p1);
 }
 
 /** Transfer funds (money) from one player to another.
@@ -313,22 +314,22 @@
  * @param p1 the amount of money to transfer; max 20.000.000
  * @param p2 the player to transfer the money to
  */
-int32 CmdGiveMoney(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdGiveMoney(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	const Player *p = GetPlayer(_current_player);
-	int32 amount = min((int32)p1, 20000000);
+	CommandCost amount(min((Money)p1, (Money)20000000LL));
 
 	SET_EXPENSES_TYPE(EXPENSES_OTHER);
 
 	/* You can only transfer funds that is in excess of your loan */
-	if (p->money64 - p->current_loan < amount || amount <= 0) return CMD_ERROR;
+	if (p->player_money - p->current_loan < amount.GetCost() || amount.GetCost() <= 0) return CMD_ERROR;
 	if (!_networking || !IsValidPlayer((PlayerID)p2)) return CMD_ERROR;
 
 	if (flags & DC_EXEC) {
 		/* Add money to player */
 		PlayerID old_cp = _current_player;
 		_current_player = (PlayerID)p2;
-		SubtractMoneyFromPlayer(-amount);
+		SubtractMoneyFromPlayer(CommandCost(-amount.GetCost()));
 		_current_player = old_cp;
 	}
 
@@ -346,7 +347,7 @@
  *           itself is changed. The new value is inside p2
  * @param p2 new value for a difficulty setting or difficulty level
  */
-int32 CmdChangeDifficultyLevel(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdChangeDifficultyLevel(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (p1 != (uint32)-1L && ((int32)p1 >= GAME_DIFFICULTY_NUM || (int32)p1 < 0)) return CMD_ERROR;
 
@@ -364,5 +365,5 @@
 		if (_networking && !_network_server && FindWindowById(WC_GAME_OPTIONS, 0) != NULL)
 			ShowGameDifficulty();
 	}
-	return 0;
+	return CommandCost();
 }
--- a/src/misc_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/misc_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -89,8 +89,8 @@
 	Player *p;
 	Window *w;
 	Town *t;
-	int64 old_money;
-	int64 costclear;
+	Money old_money;
+	CommandCost costclear;
 	AcceptedCargo ac;
 	TileDesc td;
 	StringID str;
@@ -103,11 +103,10 @@
 	p = GetPlayer(IsValidPlayer(_local_player) ? _local_player : PLAYER_FIRST);
 	t = ClosestTownFromTile(tile, _patches.dist_local_authority);
 
-	old_money = p->money64;
-	p->money64 = p->player_money = 0x7fffffff;
+	old_money = p->player_money;
+	p->player_money = INT64_MAX;
 	costclear = DoCommand(tile, 0, 0, 0, CMD_LANDSCAPE_CLEAR);
-	p->money64 = old_money;
-	UpdatePlayerMoney32(p);
+	p->player_money = old_money;
 
 	/* Because build_date is not set yet in every TileDesc, we make sure it is empty */
 	td.build_date = 0;
@@ -122,8 +121,8 @@
 	GetString(_landinfo_data[1], STR_01A7_OWNER, lastof(_landinfo_data[1]));
 
 	str = STR_01A4_COST_TO_CLEAR_N_A;
-	if (!CmdFailed(costclear)) {
-		SetDParam(0, costclear);
+	if (CmdSucceeded(costclear)) {
+		SetDParam(0, costclear.GetCost());
 		str = STR_01A5_COST_TO_CLEAR;
 	}
 	GetString(_landinfo_data[2], str, lastof(_landinfo_data[2]));
@@ -218,16 +217,16 @@
 	"  Jaroslav Mazanec (KUDr) - YAPG (Yet Another Pathfinder God) ;)",
 	"  Jonathan Coome (Maedhros) - High priest of the newGRF Temple",
 	"  Attila Bán (MiHaMiX) - WebTranslator, Nightlies, Wiki and bugtracker host",
+	"  Owen Rudge (orudge) - Forum host, OS/2 port",
 	"  Peter Nelson (peter1138) - Spiritual descendant from newgrf gods",
 	"  Remko Bijker (Rubidium) - THE desync hunter",
 	"  Christoph Mallon (Tron) - Programmer, code correctness police",
-	"  Patric Stout (TrueLight) - Coder, network guru, SVN- and website host",
+	"  Patric Stout (TrueLight) - Coder, network guru, SVN-, MS- and website host",
 	"",
 	"Retired Developers:",
 	"  Ludvig Strigeus (ludde) - OpenTTD author, main coder (0.1 - 0.3.3)",
 	"  Serge Paquet (vurlix) - Assistant project manager, coder (0.1 - 0.3.3)",
 	"  Dominik Scherer (dominik81) - Lead programmer, GUI expert (0.3.0 - 0.3.6)",
-	"  Owen Rudge (orudge) - Forum- and masterserver host, OS/2 port (0.1 - 0.4.8)",
 	"",
 	"Special thanks go out to:",
 	"  Josef Drexler - For his great work on TTDPatch",
@@ -479,7 +478,7 @@
 	AllocateWindowDescFront(&_build_trees_scen_desc, 0);
 }
 
-static uint32 _errmsg_decode_params[20];
+static uint64 _errmsg_decode_params[20];
 static StringID _errmsg_message_1, _errmsg_message_2;
 static uint _errmsg_duration;
 
@@ -611,7 +610,7 @@
 }
 
 
-void ShowEstimatedCostOrIncome(int32 cost, int x, int y)
+void ShowEstimatedCostOrIncome(Money cost, int x, int y)
 {
 	StringID msg = STR_0805_ESTIMATED_COST;
 
@@ -623,7 +622,7 @@
 	ShowErrorMessage(INVALID_STRING_ID, msg, x, y);
 }
 
-void ShowCostOrIncomeAnimation(int x, int y, int z, int32 cost)
+void ShowCostOrIncomeAnimation(int x, int y, int z, Money cost)
 {
 	StringID msg;
 	Point pt = RemapCoords(x,y,z);
@@ -634,15 +633,38 @@
 		msg = STR_0803_INCOME;
 	}
 	SetDParam(0, cost);
-	AddTextEffect(msg, pt.x, pt.y, 0x250);
+	AddTextEffect(msg, pt.x, pt.y, 0x250, TE_RISING);
 }
 
-void ShowFeederIncomeAnimation(int x, int y, int z, int32 cost)
+void ShowFeederIncomeAnimation(int x, int y, int z, Money cost)
 {
 	Point pt = RemapCoords(x,y,z);
 
 	SetDParam(0, cost);
-	AddTextEffect(STR_FEEDER, pt.x, pt.y, 0x250);
+	AddTextEffect(STR_FEEDER, pt.x, pt.y, 0x250, TE_RISING);
+}
+
+TextEffectID ShowFillingPercent(int x, int y, int z, uint8 percent, StringID string)
+{
+	Point pt = RemapCoords(x, y, z);
+
+	assert(string != STR_NULL);
+
+	SetDParam(0, percent);
+	return AddTextEffect(string, pt.x, pt.y, 0xFFFF, TE_STATIC);
+}
+
+void UpdateFillingPercent(TextEffectID te_id, uint8 percent, StringID string)
+{
+	assert(string != STR_NULL);
+
+	SetDParam(0, percent);
+	UpdateTextEffect(te_id, string);
+}
+
+void HideFillingPercent(TextEffectID te_id)
+{
+	if (te_id != INVALID_TE_ID) RemoveTextEffect(te_id);
 }
 
 static const Widget _tooltips_widgets[] = {
@@ -684,7 +706,7 @@
  * @param paramcount number of params to deal with
  * @param params (optional) up to 5 pieces of additional information that may be
  * added to a tooltip; currently only supports parameters of {NUM} (integer) */
-void GuiShowTooltipsWithArgs(StringID str, uint paramcount, const uint32 params[])
+void GuiShowTooltipsWithArgs(StringID str, uint paramcount, const uint64 params[])
 {
 	char buffer[512];
 	BoundingRect br;
@@ -1195,8 +1217,8 @@
 
 struct query_d {
 	void (*proc)(Window*, bool); ///< callback function executed on closing of popup. Window* points to parent, bool is true if 'yes' clicked, false otherwise
+	uint64 params[10];           ///< local copy of _decode_parameters
 	StringID message;            ///< message shown for query window
-	uint32 params[20];           ///< local copy of _decode_parameters
 	bool calledback;             ///< has callback been executed already (internal usage for WE_DESTROY event)
 };
 assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(query_d));
@@ -1394,9 +1416,8 @@
 	    Let's use the name of player #0 for now. */
 	const Player *p = GetPlayer(IsValidPlayer(_local_player) ? _local_player : PLAYER_FIRST);
 
-	SetDParam(0, p->name_1);
-	SetDParam(1, p->name_2);
-	SetDParam(2, _date);
+	SetDParam(0, p->index);
+	SetDParam(1, _date);
 	GetString(_edit_str_buf, STR_4004, lastof(_edit_str_buf));
 	SanitizeFilename(_edit_str_buf);
 }
@@ -1827,7 +1848,7 @@
 				if (ce->flags & CE_CLICK) {
 					DrawFrameRect(x + 20, y + 1, x + 30 + 9, y + 9, 0, (clk - (i * 2) == 1) ? FR_LOWERED : FR_NONE);
 					if (i == 0) { // XXX - hack/hack for first element which is increase money. Told ya it's a mess
-						SetDParam64(0, 10000000);
+						SetDParam(0, 10000000);
 					} else {
 						SetDParam(0, false);
 					}
--- a/src/network/network.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/network/network.h	Tue Jun 26 23:40:58 2007 +0000
@@ -44,9 +44,9 @@
 	char company_name[NETWORK_NAME_LENGTH];         // Company name
 	char password[NETWORK_PASSWORD_LENGTH];         // The password for the player
 	Year inaugurated_year;                          // What year the company started in
-	int64 company_value;                            // The company value
-	int64 money;                                    // The amount of money the company has
-	int64 income;                                   // How much did the company earned last year
+	Money company_value;                            // The company value
+	Money money;                                    // The amount of money the company has
+	Money income;                                   // How much did the company earned last year
 	uint16 performance;                             // What was his performance last month?
 	bool use_password;                              // Is there a password
 	uint16 num_vehicle[NETWORK_VEHICLE_TYPES];      // How many vehicles are there of this type?
--- a/src/network/network_client.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/network/network_client.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -671,7 +671,8 @@
 				if (!IsValidPlayer(ci_to->client_playas)) return NETWORK_RECV_STATUS_OKAY;
 				/* fallthrough */
 			case NETWORK_ACTION_CHAT_COMPANY: {
-				StringID str = IsValidPlayer(ci_to->client_playas) ? GetPlayer(ci_to->client_playas)->name_1 : (uint16)STR_NETWORK_SPECTATORS;
+				StringID str = IsValidPlayer(ci_to->client_playas) ? STR_COMPANY_NAME : STR_NETWORK_SPECTATORS;
+				SetDParam(0, ci_to->client_playas);
 
 				GetString(name, str, lastof(name));
 				ci = NetworkFindClientInfoFromIndex(_network_own_client_index);
--- a/src/network/network_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/network/network_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -894,15 +894,15 @@
 			DrawString(x, y, STR_NETWORK_INAUGURATION_YEAR, 2); // inauguration year
 			y += 10;
 
-			SetDParam64(0, _network_player_info[nd->company].company_value);
+			SetDParam(0, _network_player_info[nd->company].company_value);
 			DrawString(x, y, STR_NETWORK_VALUE, 2); // company value
 			y += 10;
 
-			SetDParam64(0, _network_player_info[nd->company].money);
+			SetDParam(0, _network_player_info[nd->company].money);
 			DrawString(x, y, STR_NETWORK_CURRENT_BALANCE, 2); // current balance
 			y += 10;
 
-			SetDParam64(0, _network_player_info[nd->company].income);
+			SetDParam(0, _network_player_info[nd->company].income);
 			DrawString(x, y, STR_NETWORK_LAST_YEARS_INCOME, 2); // last year's income
 			y += 10;
 
@@ -1047,7 +1047,8 @@
 
 static const Widget _client_list_widgets[] = {
 {   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                 STR_018B_CLOSE_WINDOW},
-{    WWT_CAPTION,   RESIZE_NONE,    14,    11,   249,     0,    13, STR_NETWORK_CLIENT_LIST,  STR_018C_WINDOW_TITLE_DRAG_THIS},
+{    WWT_CAPTION,   RESIZE_NONE,    14,    11,   237,     0,    13, STR_NETWORK_CLIENT_LIST,  STR_018C_WINDOW_TITLE_DRAG_THIS},
+{  WWT_STICKYBOX,   RESIZE_NONE,    14,   238,   249,     0,    13, STR_NULL,                 STR_STICKY_BUTTON},
 
 {      WWT_PANEL,   RESIZE_NONE,    14,     0,   249,    14,    14 + CLNWND_ROWSIZE + 1, 0x0, STR_NULL},
 {   WIDGETS_END},
@@ -1061,7 +1062,7 @@
 static WindowDesc _client_list_desc = {
 	WDP_AUTO, WDP_AUTO, 250, 1,
 	WC_CLIENT_LIST, WC_NONE,
-	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
+	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
 	_client_list_widgets,
 	ClientListWndProc
 };
@@ -1157,7 +1158,7 @@
 	if (w->height != CLNWND_OFFSET + num + 1) {
 		// XXX - magic unfortunately; (num + 2) has to be one bigger than heigh (num + 1)
 		SetWindowDirty(w);
-		w->widget[2].bottom = w->widget[2].top + num + 2;
+		w->widget[3].bottom = w->widget[3].top + num + 2;
 		w->height = CLNWND_OFFSET + num + 1;
 		SetWindowDirty(w);
 		return false;
@@ -1519,8 +1520,8 @@
 
 		FOR_ALL_TOWNS_FROM(t, *item - MAX_CLIENT_INFO) {
 			/* Get the town-name via the string-system */
-			SetDParam(0, t->townnameparts);
-			GetString(chat_tab_temp_buffer, t->townnametype, lastof(chat_tab_temp_buffer));
+			SetDParam(0, t->index);
+			GetString(chat_tab_temp_buffer, STR_TOWN, lastof(chat_tab_temp_buffer));
 			return &chat_tab_temp_buffer[0];
 		}
 	}
--- a/src/network/network_server.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/network/network_server.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -1090,7 +1090,8 @@
 		if (ci != NULL && show_local) {
 			if (from_index == NETWORK_SERVER_INDEX) {
 				char name[NETWORK_NAME_LENGTH];
-				StringID str = IsValidPlayer(ci_to->client_playas) ? GetPlayer(ci_to->client_playas)->name_1 : (uint16)STR_NETWORK_SPECTATORS;
+				StringID str = IsValidPlayer(ci_to->client_playas) ? STR_COMPANY_NAME : STR_NETWORK_SPECTATORS;
+				SetDParam(0, ci_to->client_playas);
 				GetString(name, str, lastof(name));
 				NetworkTextMessage(action, GetDrawStringPlayerColor(ci_own->client_playas), true, name, "%s", msg);
 			} else {
@@ -1259,9 +1260,8 @@
 		ttd_strlcpy(_network_player_info[p->index].password, password, sizeof(_network_player_info[p->index].password));
 
 		// Grap the company name
-		SetDParam(0, p->name_1);
-		SetDParam(1, p->name_2);
-		GetString(_network_player_info[p->index].company_name, STR_JUST_STRING, lastof(_network_player_info[p->index].company_name));
+		SetDParam(0, p->index);
+		GetString(_network_player_info[p->index].company_name, STR_COMPANY_NAME, lastof(_network_player_info[p->index].company_name));
 
 		// Check the income
 		if (_cur_year - 1 == p->inaugurated_year) {
@@ -1278,7 +1278,7 @@
 		// Set some general stuff
 		_network_player_info[p->index].inaugurated_year = p->inaugurated_year;
 		_network_player_info[p->index].company_value = p->old_economy[0].company_value;
-		_network_player_info[p->index].money = p->money64;
+		_network_player_info[p->index].money = p->player_money;
 		_network_player_info[p->index].performance = p->old_economy[0].performance_history;
 	}
 
--- a/src/network/network_udp.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/network/network_udp.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -124,7 +124,7 @@
 		packet.Send_uint16(_network_player_info[player->index].performance);
 
 		/* Send 1 if there is a passord for the company else send 0 */
-		packet.Send_bool  (StrEmpty(_network_player_info[player->index].password));
+		packet.Send_bool  (!StrEmpty(_network_player_info[player->index].password));
 
 		for (i = 0; i < NETWORK_VEHICLE_TYPES; i++)
 			packet.Send_uint16(_network_player_info[player->index].num_vehicle[i]);
@@ -395,7 +395,6 @@
 		config->status = GCS_NOT_FOUND;
 	} else {
 		config->filename  = f->filename;
-		config->full_path = f->full_path;
 		config->name      = f->name;
 		config->info      = f->info;
 	}
--- a/src/newgrf.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -42,6 +42,7 @@
 #include "industry.h"
 #include "newgrf_canal.h"
 #include "newgrf_commons.h"
+#include "newgrf_townname.h"
 
 /* TTDPatch extended GRF format codec
  * (c) Petr Baudis 2004 (GPL'd)
@@ -3898,6 +3899,106 @@
 	}
 }
 
+/* Action 0x0F */
+static void FeatureTownName(byte *buf, int len)
+{
+	/* <0F> <id> <style-name> <num-parts> <parts>
+	 *
+	 * B id          ID of this definition in bottom 7 bits (final definition if bit 7 set)
+	 * V style-name  Name of the style (only for final definition)
+	 * B num-parts   Number of parts in this definition
+	 * V parts       The parts */
+
+	if (!check_length(len, 1, "FeatureTownName: definition ID")) return;
+	buf++; len--;
+
+	uint32 grfid = _cur_grffile->grfid;
+
+	GRFTownName *townname = AddGRFTownName(grfid);
+
+	byte id = grf_load_byte(&buf);
+	len--;
+	grfmsg(6, "FeatureTownName: definition 0x%02X", id & 0x7F);
+
+	if (HASBIT(id, 7)) {
+		/* Final definition */
+		CLRBIT(id, 7);
+		bool new_scheme = _cur_grffile->grf_version >= 7;
+
+		if (!check_length(len, 1, "FeatureTownName: lang_id")) return;
+		byte lang = grf_load_byte(&buf);
+		len--;
+
+		byte nb_gen = townname->nb_gen;
+		do {
+			CLRBIT(lang, 7);
+
+			if (!check_length(len, 1, "FeatureTownName: style name")) return;
+			const char *name = grf_load_string(&buf, len);
+			len -= strlen(name) + 1;
+			grfmsg(6, "FeatureTownName: lang 0x%X -> '%s'", lang, TranslateTTDPatchCodes(name));
+
+			townname->name[nb_gen] = AddGRFString(grfid, id, lang, new_scheme, name, STR_UNDEFINED);
+
+			if (!check_length(len, 1, "FeatureTownName: lang_id")) return;
+			lang = grf_load_byte(&buf);
+			len--;
+		} while (lang != 0);
+		townname->id[nb_gen] = id;
+		townname->nb_gen++;
+	}
+
+	if (!check_length(len, 1, "FeatureTownName: number of parts")) return;
+	byte nb = grf_load_byte(&buf);
+	len--;
+	grfmsg(6, "FeatureTownName: %d parts", nb, nb);
+
+	townname->nbparts[id] = nb;
+	townname->partlist[id] = CallocT<NamePartList>(nb);
+
+	for (int i = 0; i < nb; i++) {
+		if (!check_length(len, 3, "FeatureTownName: parts header")) return;
+		byte nbtext =  grf_load_byte(&buf);
+		townname->partlist[id][i].bitstart  = grf_load_byte(&buf);
+		townname->partlist[id][i].bitcount  = grf_load_byte(&buf);
+		townname->partlist[id][i].maxprob   = 0;
+		townname->partlist[id][i].partcount = nbtext;
+		townname->partlist[id][i].parts     = CallocT<NamePart>(nbtext);
+		len -= 3;
+		grfmsg(6, "FeatureTownName: part %d contains %d texts and will use GB(seed, %d, %d)", i, nbtext, townname->partlist[id][i].bitstart, townname->partlist[id][i].bitcount);
+
+		for (int j = 0; j < nbtext; j++) {
+			if (!check_length(len, 2, "FeatureTownName: part")) return;
+			byte prob = grf_load_byte(&buf);
+			len--;
+
+			if (HASBIT(prob, 7)) {
+				byte ref_id = grf_load_byte(&buf);
+				len--;
+
+				if (townname->nbparts[ref_id] == 0) {
+					grfmsg(0, "FeatureTownName: definition 0x%02X doesn't exist, deactivating", ref_id);
+					DelGRFTownName(grfid);
+					_cur_grfconfig->status = GCS_DISABLED;
+					_skip_sprites = -1;
+					return;
+				}
+
+				grfmsg(6, "FeatureTownName: part %d, text %d, uses intermediate definition 0x%02X (with probability %d)", i, j, ref_id, prob & 0x7F);
+				townname->partlist[id][i].parts[j].data.id = ref_id;
+			} else {
+				const char *text = grf_load_string(&buf, len);
+				len -= strlen(text) + 1;
+				townname->partlist[id][i].parts[j].data.text = TranslateTTDPatchCodes(text);
+				grfmsg(6, "FeatureTownName: part %d, text %d, '%s' (with probability %d)", i, j, townname->partlist[id][i].parts[j].data.text, prob);
+			}
+			townname->partlist[id][i].parts[j].prob = prob;
+			townname->partlist[id][i].maxprob += GB(prob, 0, 7);
+		}
+		grfmsg(6, "FeatureTownName: part %d, total probability %d", i, townname->partlist[id][i].maxprob);
+	}
+}
+
 /* Action 0x10 */
 static void DefineGotoLabel(byte *buf, int len)
 {
@@ -4241,7 +4342,7 @@
 	                   |    ((_patches.freight_trains > 1 ? 1 : 0) << 0x18)  // freighttrains
 	                   |                                        (1 << 0x19)  // newhouses
 	                   |                                        (1 << 0x1A)  // newbridges
-	                   |                                        (0 << 0x1B)  // newtownnames
+	                   |                                        (1 << 0x1B)  // newtownnames
 	                   |                                        (0 << 0x1C)  // moreanimations
 	                   |    ((_patches.wagon_speed_limits ? 1 : 0) << 0x1D)  // wagonspeedlimits
 	                   |                                        (1 << 0x1E)  // newshistory
@@ -4418,6 +4519,7 @@
 static void ResetNewGRFData()
 {
 	CleanUpStrings();
+	CleanUpGRFTownNames();
 
 	/* Copy/reset original engine info data */
 	memcpy(&_engine_info, &orig_engine_info, sizeof(orig_engine_info));
@@ -4557,7 +4659,7 @@
 
 	if (newfile == NULL) error ("Out of memory");
 
-	newfile->filename = strdup(config->full_path);
+	newfile->filename = strdup(config->filename);
 	newfile->sprite_offset = sprite_offset;
 
 	/* Copy the initial parameter list */
@@ -4787,7 +4889,7 @@
 		/* 0x0C */ { NULL,     NULL,      NULL,            GRFComment,     NULL,              GRFComment, },
 		/* 0x0D */ { NULL,     SafeParamSet, NULL,         ParamSet,       ParamSet,          ParamSet, },
 		/* 0x0E */ { NULL,     SafeGRFInhibit, NULL,       GRFInhibit,     GRFInhibit,        GRFInhibit, },
-		/* 0x0F */ { NULL,     NULL,      NULL,            NULL,           NULL,              NULL, },
+		/* 0x0F */ { NULL,     GRFUnsafe, NULL,            FeatureTownName, NULL,             NULL, },
 		/* 0x10 */ { NULL,     NULL,      DefineGotoLabel, NULL,           NULL,              NULL, },
 		/* 0x11 */ { NULL,     GRFUnsafe, NULL,            NULL,           NULL,              GRFSound, },
 		/* 0x12 */ { NULL,     NULL,      NULL,            NULL,           NULL,              LoadFontGlyph, },
@@ -4834,7 +4936,7 @@
 
 void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage)
 {
-	const char *filename = config->full_path;
+	const char *filename = config->filename;
 	uint16 num;
 
 	/* A .grf file is activated only if it was active when the game was
@@ -4917,6 +5019,8 @@
 
 void InitDepotWindowBlockSizes();
 
+extern void SortTownGeneratorNames();
+
 static void AfterLoadGRFs()
 {
 	/* Update the bitmasks for the vehicle lists */
@@ -4941,6 +5045,9 @@
 	/* Map cargo strings. This is a separate step because cargos are
 	 * loaded before strings... */
 	MapNewCargoStrings();
+
+	/* Update the townname generators list */
+	SortTownGeneratorNames();
 }
 
 void LoadNewGRF(uint load_index, uint file_index)
@@ -4959,9 +5066,10 @@
 		_cur_spriteid = load_index;
 		for (GRFConfig *c = _grfconfig; c != NULL; c = c->next) {
 			if (c->status == GCS_DISABLED || c->status == GCS_NOT_FOUND) continue;
+			if (stage > GLS_INIT && HASBIT(c->flags, GCF_INIT_ONLY)) continue;
 
 			/* @todo usererror() */
-			if (!FioCheckFileExists(c->full_path)) error("NewGRF file is missing '%s'", c->filename);
+			if (!FioCheckFileExists(c->filename)) error("NewGRF file is missing '%s'", c->filename);
 
 			if (stage == GLS_LABELSCAN) InitNewGRFFile(c, _cur_spriteid);
 			LoadNewGRFFile(c, slot++, stage);
--- a/src/newgrf_commons.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf_commons.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -220,6 +220,29 @@
 	_industry_specs[ind_id].enabled = true;
 }
 
+void IndustryTileOverrideManager::SetEntitySpec(const IndustryTileSpec *its)
+{
+	IndustryGfx indt_id = this->AddEntityID(its->grf_prop.local_id, its->grf_prop.grffile->grfid, its->grf_prop.subst_id);
+
+	if (indt_id == invalid_ID) {
+		grfmsg(1, "IndustryTile.SetEntitySpec: Too many industry tiles allocated. Ignoring.");
+		return;
+	}
+
+	memcpy(&_industry_tile_specs[indt_id], its, sizeof(*its));
+
+	/* Now add the overrides. */
+	for (int i = 0; i < max_offset; i++) {
+		IndustryTileSpec *overridden_its = &_industry_tile_specs[i];
+
+		if (entity_overrides[i] != its->grf_prop.local_id) continue;
+
+		overridden_its->grf_prop.override = indt_id;
+		overridden_its->enabled = false;
+		entity_overrides[i] = invalid_ID;
+	}
+}
+
 /** Function used by houses (and soon industries) to get information
  * on type of "terrain" the tile it is queries sits on.
  * @param tile TileIndex of the tile been queried
--- a/src/newgrf_commons.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf_commons.h	Tue Jun 26 23:40:58 2007 +0000
@@ -76,8 +76,19 @@
 		void SetEntitySpec(const IndustrySpec *inds);
 };
 
+
+struct IndustryTileSpec;
+class IndustryTileOverrideManager : public OverrideManagerBase
+{
+	public:
+		IndustryTileOverrideManager(uint16 offset, uint16 maximum, uint16 invalid) :
+				OverrideManagerBase(offset, maximum, invalid) {};
+		void SetEntitySpec(const IndustryTileSpec *indts);
+};
+
 extern HouseOverrideManager _house_mngr;
 extern IndustryOverrideManager _industry_mngr;
+extern IndustryTileOverrideManager _industile_mngr;
 
 uint32 GetTerrainType(TileIndex tile);
 TileIndex GetNearbyTile(byte parameter, TileIndex tile);
--- a/src/newgrf_config.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf_config.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -40,7 +40,7 @@
 	size_t len;
 
 	/* open the file */
-	f = FioFOpenFile(config->full_path);
+	f = FioFOpenFile(config->filename);
 	if (f == NULL) return false;
 
 	/* calculate md5sum */
@@ -59,16 +59,11 @@
 /* Find the GRFID and calculate the md5sum */
 bool FillGRFDetails(GRFConfig *config, bool is_static)
 {
-	if (!FioCheckFileExists(config->full_path)) {
+	if (!FioCheckFileExists(config->filename)) {
 		config->status = GCS_NOT_FOUND;
 		return false;
 	}
 
-	if (config->filename == NULL) {
-		const char *t = strrchr(config->full_path, PATHSEPCHAR);
-		config->filename = strdup(t != NULL ? t + 1 : config->full_path);
-	}
-
 	/* Find and load the Action 8 information */
 	/* 62 is the last file slot before sample.cat.
 	 * Should perhaps be some "don't care" value */
@@ -94,7 +89,6 @@
 	/* GCF_COPY as in NOT strdupped/alloced the filename, name and info */
 	if (!HASBIT((*config)->flags, GCF_COPY)) {
 		free((*config)->filename);
-		free((*config)->full_path);
 		free((*config)->name);
 		free((*config)->info);
 
@@ -124,8 +118,9 @@
 /** Copy a GRF Config list
  * @param dst pointer to destination list
  * @param src pointer to source list values
+ * @param init_only the copied GRF will be processed up to GLS_INIT
  * @return pointer to the last value added to the destination list */
-GRFConfig **CopyGRFConfigList(GRFConfig **dst, const GRFConfig *src)
+GRFConfig **CopyGRFConfigList(GRFConfig **dst, const GRFConfig *src, bool init_only)
 {
 	/* Clear destination as it will be overwritten */
 	ClearGRFConfigList(dst);
@@ -133,7 +128,6 @@
 		GRFConfig *c = CallocT<GRFConfig>(1);
 		*c = *src;
 		if (src->filename  != NULL) c->filename  = strdup(src->filename);
-		if (src->full_path != NULL) c->full_path = strdup(src->full_path);
 		if (src->name      != NULL) c->name      = strdup(src->name);
 		if (src->info      != NULL) c->info      = strdup(src->info);
 		if (src->error     != NULL) {
@@ -143,6 +137,9 @@
 			if (src->error->custom_message != NULL) c->error->custom_message = strdup(src->error->custom_message);
 		}
 
+		CLRBIT(c->flags, GCF_INIT_ONLY);
+		if (init_only) SETBIT(c->flags, GCF_INIT_ONLY);
+
 		*dst = c;
 		dst = &c->next;
 	}
@@ -190,7 +187,7 @@
 	GRFConfig **tail = dst;
 	while (*tail != NULL) tail = &(*tail)->next;
 
-	CopyGRFConfigList(tail, _grfconfig_static);
+	CopyGRFConfigList(tail, _grfconfig_static, false);
 	RemoveDuplicatesFromGRFConfigList(*dst);
 }
 
@@ -210,14 +207,7 @@
 /* Reset the current GRF Config to either blank or newgame settings */
 void ResetGRFConfig(bool defaults)
 {
-	GRFConfig **c = &_grfconfig;
-
-	if (defaults) {
-		c = CopyGRFConfigList(c, _grfconfig_newgame);
-	} else {
-		ClearGRFConfigList(c);
-	}
-
+	CopyGRFConfigList(&_grfconfig, _grfconfig_newgame, !defaults);
 	AppendStaticGRFConfigs(&_grfconfig);
 }
 
@@ -268,9 +258,7 @@
 			 * already a local one, so there is no need to replace it. */
 			if (!HASBIT(c->flags, GCF_COPY)) {
 				free(c->filename);
-				free(c->full_path);
 				c->filename = strdup(f->filename);
-				c->full_path = strdup(f->full_path);
 				memcpy(c->md5sum, f->md5sum, sizeof(c->md5sum));
 				if (c->name == NULL && f->name != NULL) c->name = strdup(f->name);
 				if (c->info == NULL && f->info != NULL) c->info = strdup(f->info);
@@ -317,7 +305,7 @@
 			if (strcasecmp(ext, ".grf") != 0) continue;
 
 			GRFConfig *c = CallocT<GRFConfig>(1);
-			c->full_path = strdup(filename + basepath_length);
+			c->filename = strdup(filename + basepath_length);
 
 			bool added = true;
 			if (FillGRFDetails(c, false)) {
@@ -344,7 +332,6 @@
 				/* File couldn't be opened, or is either not a NewGRF or is a
 				 * 'system' NewGRF or it's already known, so forget about it. */
 				free(c->filename);
-				free(c->full_path);
 				free(c->name);
 				free(c->info);
 				free(c);
--- a/src/newgrf_config.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf_config.h	Tue Jun 26 23:40:58 2007 +0000
@@ -14,6 +14,7 @@
 	GCF_STATIC,    ///< GRF file is used statically (can be used in any MP game)
 	GCF_COMPATIBLE,///< GRF file does not exactly match the requested GRF (different MD5SUM), but grfid matches)
 	GCF_COPY,      ///< The data is copied from a grf in _all_grfs
+	GCF_INIT_ONLY, ///< GRF file is processed up to GLS_INIT
 };
 
 enum GRFStatus {
@@ -46,7 +47,6 @@
 
 struct GRFConfig : public GRFIdentifier {
 	char *filename;
-	char *full_path;
 	char *name;
 	char *info;
 	GRFError *error;
@@ -74,7 +74,7 @@
 void ScanNewGRFFiles();
 const GRFConfig *FindGRFConfig(uint32 grfid, const uint8 *md5sum = NULL);
 GRFConfig *GetGRFConfig(uint32 grfid);
-GRFConfig **CopyGRFConfigList(GRFConfig **dst, const GRFConfig *src);
+GRFConfig **CopyGRFConfigList(GRFConfig **dst, const GRFConfig *src, bool init_only);
 void AppendStaticGRFConfigs(GRFConfig **dst);
 void AppendToGRFConfigList(GRFConfig **dst, GRFConfig *el);
 void ClearGRFConfig(GRFConfig **config);
--- a/src/newgrf_engine.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf_engine.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -705,10 +705,10 @@
 		case 0x39: return v->cargo_type;
 		case 0x3A: return v->cargo_cap;
 		case 0x3B: return GB(v->cargo_cap, 8, 8);
-		case 0x3C: return v->cargo_count;
-		case 0x3D: return GB(v->cargo_count, 8, 8);
-		case 0x3E: return v->cargo_source;
-		case 0x3F: return v->cargo_days;
+		case 0x3C: return v->cargo.Count();
+		case 0x3D: return GB(v->cargo.Count(), 8, 8);
+		case 0x3E: return v->cargo.Source();
+		case 0x3F: return v->cargo.DaysInTransit();
 		case 0x40: return v->age;
 		case 0x41: return GB(v->age, 8, 8);
 		case 0x42: return v->max_age;
@@ -727,19 +727,19 @@
 		case 0x4F: return GB(v->reliability, 8, 8);
 		case 0x50: return v->reliability_spd_dec;
 		case 0x51: return GB(v->reliability_spd_dec, 8, 8);
-		case 0x52: return v->profit_this_year;
-		case 0x53: return GB(v->profit_this_year,  8, 24);
-		case 0x54: return GB(v->profit_this_year, 16, 16);
-		case 0x55: return GB(v->profit_this_year, 24,  8);
-		case 0x56: return v->profit_last_year;
-		case 0x57: return GB(v->profit_last_year,  8, 24);
-		case 0x58: return GB(v->profit_last_year, 16, 16);
-		case 0x59: return GB(v->profit_last_year, 24,  8);
+		case 0x52: return ClampToI32(v->profit_this_year);
+		case 0x53: return GB(ClampToI32(v->profit_this_year),  8, 24);
+		case 0x54: return GB(ClampToI32(v->profit_this_year), 16, 16);
+		case 0x55: return GB(ClampToI32(v->profit_this_year), 24,  8);
+		case 0x56: return ClampToI32(v->profit_last_year);
+		case 0x57: return GB(ClampToI32(v->profit_last_year),  8, 24);
+		case 0x58: return GB(ClampToI32(v->profit_last_year), 16, 16);
+		case 0x59: return GB(ClampToI32(v->profit_last_year), 24,  8);
 		case 0x5A: return v->next == NULL ? INVALID_VEHICLE : v->next->index;
-		case 0x5C: return v->value;
-		case 0x5D: return GB(v->value,  8, 24);
-		case 0x5E: return GB(v->value, 16, 16);
-		case 0x5F: return GB(v->value, 24,  8);
+		case 0x5C: return ClampToI32(v->value);
+		case 0x5D: return GB(ClampToI32(v->value),  8, 24);
+		case 0x5E: return GB(ClampToI32(v->value), 16, 16);
+		case 0x5F: return GB(ClampToI32(v->value), 24,  8);
 		case 0x60: return v->string_id;
 		case 0x61: return GB(v->string_id, 8, 8);
 		case 0x72: return v->cargo_subtype;
@@ -811,12 +811,12 @@
 
 	totalsets = in_motion ? group->g.real.num_loaded : group->g.real.num_loading;
 
-	if (v->cargo_count == v->cargo_cap || totalsets == 1) {
+	if (v->cargo.Count() == v->cargo_cap || totalsets == 1) {
 		set = totalsets - 1;
-	} else if (v->cargo_count == 0 || totalsets == 2) {
+	} else if (v->cargo.Empty() || totalsets == 2) {
 		set = 0;
 	} else {
-		set = v->cargo_count * (totalsets - 2) / max((uint16)1, v->cargo_cap) + 1;
+		set = v->cargo.Count() * (totalsets - 2) / max((uint16)1, v->cargo_cap) + 1;
 	}
 
 	return in_motion ? group->g.real.loaded[set] : group->g.real.loading[set];
--- a/src/newgrf_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -156,6 +156,11 @@
 			break;
 		}
 
+		case WE_DOUBLE_CLICK:
+			if (e->we.click.widget != 3) break;
+			e->we.click.widget = 6;
+			/* Fall through */
+
 		case WE_CLICK:
 			switch (e->we.click.widget) {
 				case 3: {
@@ -186,7 +191,6 @@
 						GRFConfig *c = CallocT<GRFConfig>(1);
 						*c = *src;
 						c->filename = strdup(src->filename);
-						if (src->full_path != NULL) c->full_path = strdup(src->full_path);
 						if (src->name      != NULL) c->name      = strdup(src->name);
 						if (src->info      != NULL) c->info      = strdup(src->info);
 						c->next = NULL;
@@ -307,12 +311,12 @@
 		GRFConfig *c;
 		int i = 0;
 
-		CopyGRFConfigList(nd->orig_list, *nd->list);
+		CopyGRFConfigList(nd->orig_list, *nd->list, false);
 		ReloadNewGRFData();
 
 		/* Show new, updated list */
 		for (c = *nd->list; c != NULL && c != nd->sel; c = c->next, i++);
-		CopyGRFConfigList(nd->list, *nd->orig_list);
+		CopyGRFConfigList(nd->list, *nd->orig_list, false);
 		for (c = *nd->list; c != NULL && i > 0; c = c->next, i--);
 		nd->sel = c;
 
@@ -469,7 +473,9 @@
 							NewGRFConfirmationCallback
 						);
 					} else {
-						CopyGRFConfigList(WP(w, newgrf_d).orig_list, *WP(w, newgrf_d).list);
+						CopyGRFConfigList(WP(w, newgrf_d).orig_list, *WP(w, newgrf_d).list, true);
+						ResetGRFConfig(false);
+						ReloadNewGRFData();
 					}
 					break;
 
@@ -498,7 +504,9 @@
 
 		case WE_DESTROY:
 			if (!WP(w, newgrf_d).execute) {
-				CopyGRFConfigList(WP(w, newgrf_d).orig_list, *WP(w, newgrf_d).list);
+				CopyGRFConfigList(WP(w, newgrf_d).orig_list, *WP(w, newgrf_d).list, true);
+				ResetGRFConfig(false);
+				ReloadNewGRFData();
 			}
 			/* Remove the temporary copy of grf-list used in window */
 			ClearGRFConfigList(WP(w, newgrf_d).list);
@@ -565,7 +573,7 @@
 	if (w == NULL) return;
 
 	w->resize.step_height = 14;
-	CopyGRFConfigList(&local, *config);
+	CopyGRFConfigList(&local, *config, false);
 
 	/* Clear selections */
 	WP(w, newgrf_d).sel         = NULL;
--- a/src/newgrf_industries.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf_industries.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -19,6 +19,7 @@
  * to those used by the game, the IDs used for overriding old industries must be
  * translated when the idustry spec is set. */
 IndustryOverrideManager _industry_mngr(NEW_INDUSTRYOFFSET, NUM_INDUSTRYTYPES, INVALID_INDUSTRYTYPE);
+IndustryTileOverrideManager _industile_mngr(NEW_INDUSTRYTILEOFFSET, NUM_INDUSTRYTILES, INVALID_INDUSTRYTILE);
 
 /**
  * Finds the distance for the closest tile with water/land given a tile
--- a/src/newgrf_industrytiles.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf_industrytiles.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -143,6 +143,44 @@
 	res->reseed          = 0;
 }
 
+void IndustryDrawTileLayout(const TileInfo *ti, const SpriteGroup *group, byte rnd_color, byte stage, IndustryGfx gfx)
+{
+	const DrawTileSprites *dts = group->g.layout.dts;
+	const DrawTileSeqStruct *dtss;
+
+	SpriteID image = dts->ground_sprite;
+	SpriteID pal   = dts->ground_pal;
+
+	if (GB(image, 0, SPRITE_WIDTH) != 0) DrawGroundSprite(image, pal);
+
+	foreach_draw_tile_seq(dtss, dts->seq) {
+		if (GB(dtss->image, 0, SPRITE_WIDTH) == 0) continue;
+
+		image = dtss->image + stage;
+		pal   = dtss->pal;
+
+		if (!HASBIT(image, SPRITE_MODIFIER_OPAQUE) && HASBIT(_transparent_opt, TO_INDUSTRIES)) {
+			SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
+			pal = PALETTE_TO_TRANSPARENT;
+		} else if (HASBIT(image, PALETTE_MODIFIER_COLOR)) {
+			pal = GENERAL_SPRITE_COLOR(rnd_color);
+		} else {
+			pal = PAL_NONE;
+		}
+
+		if ((byte)dtss->delta_z != 0x80) {
+			AddSortableSpriteToDraw(
+				image, pal,
+				ti->x + dtss->delta_x, ti->y + dtss->delta_y,
+				dtss->size_x, dtss->size_y,
+				dtss->size_z, ti->z + dtss->delta_z
+			);
+		} else {
+			AddChildSpriteScreen(image, pal, dtss->delta_x, dtss->delta_y);
+		}
+	}
+}
+
 uint16 GetIndustryTileCallback(uint16 callback, uint32 param1, uint32 param2, IndustryGfx gfx_id, Industry *industry, TileIndex tile)
 {
 	ResolverObject object;
@@ -158,3 +196,33 @@
 
 	return group->g.callback.result;
 }
+
+bool DrawNewIndustryTile(TileInfo *ti, Industry *i, IndustryGfx gfx, const IndustryTileSpec *inds)
+{
+	const SpriteGroup *group;
+	ResolverObject object;
+
+	if (ti->tileh != SLOPE_FLAT) {
+		bool draw_old_one = true;
+		if (HASBIT(inds->callback_flags, CBM_INDT_DRAW_FOUNDATIONS)) {
+			/* Called to determine the type (if any) of foundation to draw for industry tile */
+			uint32 callback_res = GetIndustryTileCallback(CBID_INDUSTRY_DRAW_FOUNDATIONS, 0, 0, gfx, i, ti->tile);
+			draw_old_one = callback_res == 0 || callback_res == CALLBACK_FAILED;
+		}
+
+		if (draw_old_one) DrawFoundation(ti, ti->tileh);
+	}
+
+	NewIndustryTileResolver(&object, gfx, ti->tile, i);
+
+	group = Resolve(inds->grf_prop.spritegroup, &object);
+	if (group == NULL || group->type != SGT_TILELAYOUT) {
+		return false;
+	} else {
+		/* Limit the building stage to the number of stages supplied. */
+		byte stage = GetIndustryConstructionStage(ti->tile);
+		stage = clamp(stage - 4 + group->g.layout.num_sprites, 0, group->g.layout.num_sprites - 1);
+		IndustryDrawTileLayout(ti, group, i->random_color, stage, gfx);
+		return true;
+	}
+}
--- a/src/newgrf_industrytiles.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf_industrytiles.h	Tue Jun 26 23:40:58 2007 +0000
@@ -5,7 +5,7 @@
 #ifndef NEWGRF_INDUSTRYTILES_H
 #define NEWGRF_INDUSTRYTILES_H
 
-void DrawNewIndustryTile(TileInfo *ti, IndustryGfx gfx);
+bool DrawNewIndustryTile(TileInfo *ti, Industry *i, IndustryGfx gfx, const IndustryTileSpec *inds);
 uint16 GetIndustryTileCallback(uint16 callback, uint32 param1, uint32 param2, IndustryGfx gfx_id, Industry *industry, TileIndex tile);
 
 #endif /* NEWGRF_INDUSTRYTILES_H */
--- a/src/newgrf_station.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf_station.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -400,7 +400,7 @@
 			uint32 value = 0;
 
 			for (cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) {
-				if (HASBIT(st->goods[cargo_type].waiting_acceptance, 15)) SETBIT(value, cargo_type);
+				if (st->goods[cargo_type].acceptance) SETBIT(value, cargo_type);
 			}
 			return value;
 		}
@@ -431,12 +431,12 @@
 		const GoodsEntry *ge = &st->goods[c];
 
 		switch (variable) {
-			case 0x60: return GB(ge->waiting_acceptance, 0, 12);
+			case 0x60: return min(ge->cargo.Count(), 4095);
 			case 0x61: return ge->days_since_pickup;
 			case 0x62: return ge->rating;
-			case 0x63: return ge->enroute_time;
+			case 0x63: return ge->cargo.DaysInTransit();
 			case 0x64: return ge->last_speed | (ge->last_age << 8);
-			case 0x65: return GB(ge->waiting_acceptance, 12, 4);
+			case 0x65: return ge->acceptance << 3;
 		}
 	}
 
@@ -444,12 +444,12 @@
 	if (variable >= 0x8C && variable <= 0xEC) {
 		const GoodsEntry *g = &st->goods[GB(variable - 0x8C, 3, 4)];
 		switch (GB(variable - 0x8C, 0, 3)) {
-			case 0: return g->waiting_acceptance;
-			case 1: return GB(g->waiting_acceptance, 8, 8);
+			case 0: return g->cargo.Count();
+			case 1: return GB(min(g->cargo.Count(), 4095), 0, 4) | (g->acceptance << 7);
 			case 2: return g->days_since_pickup;
 			case 3: return g->rating;
-			case 4: return g->enroute_from;
-			case 5: return g->enroute_time;
+			case 4: return g->cargo.Source();
+			case 5: return g->cargo.DaysInTransit();
 			case 6: return g->last_speed;
 			case 7: return g->last_age;
 		}
@@ -484,12 +484,12 @@
 
 		case CT_DEFAULT:
 			for (cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) {
-				cargo += GB(st->goods[cargo_type].waiting_acceptance, 0, 12);
+				cargo += st->goods[cargo_type].cargo.Count();
 			}
 			break;
 
 		default:
-			cargo = GB(st->goods[cargo_type].waiting_acceptance, 0, 12);
+			cargo = st->goods[cargo_type].cargo.Count();
 			break;
 	}
 
@@ -545,7 +545,7 @@
 		for (CargoID cargo = 0; cargo < NUM_CARGO; cargo++) {
 			const CargoSpec *cs = GetCargo(cargo);
 			if (cs->IsValid() && object->u.station.statspec->spritegroup[cargo] != NULL &&
-					GB(object->u.station.st->goods[cargo].waiting_acceptance, 0, 12) != 0) {
+					!object->u.station.st->goods[cargo].cargo.Empty()) {
 				ctype = cargo;
 				break;
 			}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/newgrf_townname.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -0,0 +1,132 @@
+/* $Id$ */
+
+/** @file newgrf_townname.cpp
+ * Implementation of  Action 0F "universal holder" structure and functions.
+ * This file implements a linked-lists of townname generators,
+ * holding everything that the newgrf action 0F will send over to OpenTTD.
+ */
+
+#include "stdafx.h"
+#include "openttd.h"
+#include "table/strings.h"
+#include "newgrf_townname.h"
+#include "string.h"
+
+static GRFTownName *_grf_townnames = NULL;
+
+GRFTownName *GetGRFTownName(uint32 grfid)
+{
+	GRFTownName *t = _grf_townnames;
+	for (; t != NULL; t = t->next) {
+		if (t->grfid == grfid) return t;
+	}
+	return NULL;
+}
+
+GRFTownName *AddGRFTownName(uint32 grfid)
+{
+	GRFTownName *t = GetGRFTownName(grfid);
+	if (t == NULL) {
+		t = CallocT<GRFTownName>(1);
+		t->grfid = grfid;
+		t->next = _grf_townnames;
+		_grf_townnames = t;
+	}
+	return t;
+}
+
+void DelGRFTownName(uint32 grfid)
+{
+	GRFTownName *t = _grf_townnames;
+	GRFTownName *p = NULL;
+	for (;t != NULL; p = t, t = t->next) if (t->grfid == grfid) break;
+	if (t != NULL) {
+		for (int i = 0; i < 128; i++) {
+			for (int j = 0; j < t->nbparts[i]; j++) {
+				for (int k = 0; k < t->partlist[i][j].partcount; k++) {
+					if (!HASBIT(t->partlist[i][j].parts[k].prob, 7)) free(t->partlist[i][j].parts[k].data.text);
+				}
+				free(t->partlist[i][j].parts);
+			}
+			free(t->partlist[i]);
+		}
+		if (p != NULL) {
+			p->next = t->next;
+		} else {
+			_grf_townnames = t->next;
+		}
+		free(t);
+	}
+}
+
+static char *RandomPart(char *buf, GRFTownName *t, uint32 seed, byte id, const char *last)
+{
+	assert(t != NULL);
+	for (int i = 0; i < t->nbparts[id]; i++) {
+		byte count = t->partlist[id][i].bitcount;
+		uint16 maxprob = t->partlist[id][i].maxprob;
+		uint32 r = (GB(seed, t->partlist[id][i].bitstart, count) * maxprob) >> count;
+		for (int j = 0; j < t->partlist[id][i].partcount; j++) {
+			byte prob = t->partlist[id][i].parts[j].prob;
+			maxprob -= GB(prob, 0, 7);
+			if (maxprob > r) continue;
+			if (HASBIT(prob, 7)) {
+				buf = RandomPart(buf, t, seed, t->partlist[id][i].parts[j].data.id, last);
+			} else {
+				buf = strecat(buf, t->partlist[id][i].parts[j].data.text, last);
+			}
+			break;
+		}
+	}
+	return buf;
+}
+
+char *GRFTownNameGenerate(char *buf, uint32 grfid, uint16 gen, uint32 seed, const char *last)
+{
+	strecpy(buf, "", last);
+	for (GRFTownName *t = _grf_townnames; t != NULL; t = t->next) {
+		if (t->grfid == grfid) {
+			assert(gen < t->nb_gen);
+			buf = RandomPart(buf, t, seed, t->id[gen], last);
+			break;
+		}
+	}
+	return buf;
+}
+
+StringID *GetGRFTownNameList()
+{
+	int nb_names = 0, n = 0;
+	for (GRFTownName *t = _grf_townnames; t != NULL; t = t->next) nb_names += t->nb_gen;
+	StringID *list = MallocT<StringID>(nb_names + 1);
+	for (GRFTownName *t = _grf_townnames; t != NULL; t = t->next) {
+		for (int j = 0; j < t->nb_gen; j++) list[n++] = t->name[j];
+	}
+	list[n] = INVALID_STRING_ID;
+	return list;
+}
+
+void CleanUpGRFTownNames()
+{
+	while (_grf_townnames != NULL) DelGRFTownName(_grf_townnames->grfid);
+}
+
+uint32 GetGRFTownNameId(int gen)
+{
+	for (GRFTownName *t = _grf_townnames; t != NULL; t = t->next) {
+		if (gen < t->nb_gen) return t->grfid;
+		gen -= t->nb_gen;
+	}
+	/* Fallback to no NewGRF */
+	return 0;
+}
+
+uint16 GetGRFTownNameType(int gen)
+{
+	for (GRFTownName *t = _grf_townnames; t != NULL; t = t->next) {
+		if (gen < t->nb_gen) return gen;
+		gen -= t->nb_gen;
+	}
+	/* Fallback to english original */
+	return SPECSTR_TOWNNAME_ENGLISH;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/newgrf_townname.h	Tue Jun 26 23:40:58 2007 +0000
@@ -0,0 +1,44 @@
+/* $Id$ */
+#ifndef NEWGRF_TOWNNAME_H
+#define NEWGRF_TOWNNAME_H
+
+/** @file newgrf_townname.h
+ * Header of Action 0F "universal holder" structure and functions
+ */
+
+struct NamePart {
+	byte prob;     ///< The relative probablity of the following name to appear in the bottom 7 bits.
+	union {
+		char *text;    ///< If probability bit 7 is clear
+		byte id;       ///< If probability bit 7 is set
+	} data;
+};
+
+struct NamePartList {
+	byte partcount;
+	byte bitstart;
+	byte bitcount;
+	uint16 maxprob;
+	NamePart *parts;
+};
+
+struct GRFTownName {
+	uint32 grfid;
+	byte nb_gen;
+	byte id[128];
+	StringID name[128];
+	byte nbparts[128];
+	NamePartList *partlist[128];
+	GRFTownName *next;
+};
+
+GRFTownName *AddGRFTownName(uint32 grfid);
+GRFTownName *GetGRFTownName(uint32 grfid);
+void DelGRFTownName(uint32 grfid);
+void CleanUpGRFTownNames();
+StringID *GetGRFTownNameList();
+char *GRFTownNameGenerate(char *buf, uint32 grfid, uint16 gen, uint32 seed, const char *last);
+uint32 GetGRFTownNameId(int gen);
+uint16 GetGRFTownNameType(int gen);
+
+#endif /* NEWGRF_TOWNNAME_H */
--- a/src/news.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/news.h	Tue Jun 26 23:40:58 2007 +0000
@@ -17,7 +17,7 @@
 	TileIndex data_a;
 	TileIndex data_b;
 
-	uint32 params[10];
+	uint64 params[10];
 };
 
 typedef bool ValidationProc ( uint data_a, uint data_b );
--- a/src/oldloader.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/oldloader.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -541,7 +541,7 @@
 
 	/* We use a struct to store the prices, but they are ints in a row..
 	so just access the struct as an array of int32's */
-	((int32*)&_price)[num] = _old_price;
+	((Money*)&_price)[num] = _old_price;
 	_price_frac[num] = _old_price_frac;
 
 	return true;
@@ -565,15 +565,18 @@
 	return true;
 }
 
-static uint8 _old_platforms;
-static uint _current_station_id;
+static uint8  _old_platforms;
+static uint   _current_station_id;
+static uint16 _waiting_acceptance;
+static uint8  _cargo_source;
+static uint8  _cargo_days;
 
 static const OldChunks goods_chunk[] = {
-	OCL_SVAR( OC_UINT16, GoodsEntry, waiting_acceptance ),
+	OCL_VAR ( OC_UINT16, 1,          &_waiting_acceptance ),
 	OCL_SVAR(  OC_UINT8, GoodsEntry, days_since_pickup ),
 	OCL_SVAR(  OC_UINT8, GoodsEntry, rating ),
-	OCL_SVAR(  OC_FILE_U8 | OC_VAR_U16, GoodsEntry, enroute_from ),
-	OCL_SVAR(  OC_UINT8, GoodsEntry, enroute_time ),
+	OCL_VAR (  OC_UINT8, 1,          &_cargo_source ),
+	OCL_VAR (  OC_UINT8, 1,          &_cargo_days ),
 	OCL_SVAR(  OC_UINT8, GoodsEntry, last_speed ),
 	OCL_SVAR(  OC_UINT8, GoodsEntry, last_age ),
 
@@ -583,7 +586,17 @@
 static bool LoadOldGood(LoadgameState *ls, int num)
 {
 	Station *st = GetStation(_current_station_id);
-	return LoadChunk(ls, &st->goods[num], goods_chunk);
+	GoodsEntry *ge = &st->goods[num];
+	bool ret = LoadChunk(ls, ge, goods_chunk);
+	if (ret && GB(_waiting_acceptance, 0, 12) != 0) {
+		CargoPacket *cp = new CargoPacket();
+		cp->source          = (_cargo_source == 0xFF) ? INVALID_STATION : _cargo_source;
+		cp->count           = GB(_waiting_acceptance, 0, 12);
+		cp->days_in_transit = _cargo_days;
+		ge->acceptance      = HASBIT(_waiting_acceptance, 15);
+		ge->cargo.Append(cp);
+	}
+	return ret;
 }
 
 static const OldChunks station_chunk[] = {
@@ -814,7 +827,7 @@
 
 	p->name_1 = RemapOldStringID(_old_string_id);
 	p->president_name_1 = RemapOldStringID(_old_string_id_2);
-	p->money64 = p->player_money;
+	p->player_money = p->player_money;
 
 	if (num == 0) {
 		/* If the first player has no name, make sure we call it UNNAMED */
@@ -832,7 +845,7 @@
 	Ps: this also means that if you had exact 893288 pounds, you will go back
 	to 10000.. this is a very VERY small chance ;) */
 	if (p->player_money == 893288)
-		p->money64 = p->player_money = p->current_loan = 100000;
+		p->player_money = p->current_loan = 100000;
 
 	_player_colors[num] = p->player_color;
 	p->inaugurated_year -= ORIGINAL_BASE_YEAR;
@@ -944,6 +957,8 @@
 	return res;
 }
 
+static uint16 _cargo_count;
+
 static const OldChunks vehicle_chunk[] = {
 	OCL_SVAR(  OC_UINT8, Vehicle, type ),
 	OCL_SVAR(  OC_UINT8, Vehicle, subtype ),
@@ -986,9 +1001,9 @@
 
 	OCL_SVAR(  OC_UINT8, Vehicle, cargo_type ),
 	OCL_SVAR( OC_UINT16, Vehicle, cargo_cap ),
-	OCL_SVAR( OC_UINT16, Vehicle, cargo_count ),
-	OCL_SVAR( OC_FILE_U8 | OC_VAR_U16, Vehicle, cargo_source ),
-	OCL_SVAR(  OC_UINT8, Vehicle, cargo_days ),
+	OCL_VAR ( OC_UINT16, 1,       &_cargo_count ),
+	OCL_VAR (  OC_UINT8, 1,       &_cargo_source ),
+	OCL_VAR (  OC_UINT8, 1,       &_cargo_days ),
 
 	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Vehicle, age ),
 	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Vehicle, max_age ),
@@ -1066,6 +1081,12 @@
 
 		/* Vehicle-subtype is different in TTD(Patch) */
 		if (v->type == VEH_SPECIAL) v->subtype = v->subtype >> 1;
+
+		if (_cargo_count != 0) {
+			CargoPacket *cp = new CargoPacket((_cargo_source == 0xFF) ? INVALID_STATION : _cargo_source, _cargo_count);
+			cp->days_in_transit = _cargo_days;
+			v->cargo.Append(cp);
+		}
 	}
 
 	return true;
--- a/src/openttd.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/openttd.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -86,6 +86,7 @@
 extern void SetDifficultyLevel(int mode, GameOptions *gm_opt);
 extern Player* DoStartupNewPlayer(bool is_ai);
 extern void ShowOSErrorBox(const char *buf);
+extern void SetDefaultRailGui();
 
 const char *_default_blitter = "8bpp-optimized";
 
@@ -310,6 +311,7 @@
 	CleanPool(&_Sign_pool);
 	CleanPool(&_Order_pool);
 	CleanPool(&_Group_pool);
+	CleanPool(&_CargoPacket_pool);
 
 	free((void*)_town_sort);
 	free((void*)_industry_sort);
@@ -700,6 +702,7 @@
 	DoCommandP(0, (_patches.autorenew << 15 ) | (_patches.autorenew_months << 16) | 4, _patches.autorenew_money, NULL, CMD_SET_AUTOREPLACE);
 
 	SettingsDisableElrail(_patches.disable_elrails);
+	SetDefaultRailGui();
 
 	MarkWholeScreenDirty();
 }
@@ -748,7 +751,8 @@
 	/* invalid type */
 	if (_file_to_saveload.mode == SL_INVALID) {
 		DEBUG(sl, 0, "Savegame is obsolete or invalid format: '%s'", _file_to_saveload.name);
-		ShowErrorMessage(INVALID_STRING_ID, STR_4009_GAME_LOAD_FAILED, 0, 0);
+		SetDParamStr(0, GetSaveLoadErrorString());
+		ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
 		_game_mode = GM_MENU;
 		return;
 	}
@@ -763,7 +767,8 @@
 	/* Load game */
 	if (SaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, SCENARIO_DIR) != SL_OK) {
 		LoadIntroGame();
-		ShowErrorMessage(INVALID_STRING_ID, STR_4009_GAME_LOAD_FAILED, 0, 0);
+		SetDParamStr(0, GetSaveLoadErrorString());
+		ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
 	}
 
 	_opt_ptr = &_opt;
@@ -871,7 +876,8 @@
 
 		if (!SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_NORMAL, NO_DIRECTORY)) {
 			LoadIntroGame();
-			ShowErrorMessage(INVALID_STRING_ID, STR_4009_GAME_LOAD_FAILED, 0, 0);
+			SetDParamStr(0, GetSaveLoadErrorString());
+			ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
 		} else {
 			/* Update the local player for a loaded game. It is either always
 			 * player #1 (eg 0) or in the case of a dedicated server a spectator */
@@ -909,7 +915,8 @@
 			SetLocalPlayer(OWNER_NONE);
 			_patches_newgame.starting_year = _cur_year;
 		} else {
-			ShowErrorMessage(INVALID_STRING_ID, STR_4009_GAME_LOAD_FAILED, 0, 0);
+			SetDParamStr(0, GetSaveLoadErrorString());
+			ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
 		}
 		break;
 	}
@@ -920,7 +927,8 @@
 
 	case SM_SAVE: /* Save game */
 		if (SaveOrLoad(_file_to_saveload.name, SL_SAVE, NO_DIRECTORY) != SL_OK) {
-			ShowErrorMessage(INVALID_STRING_ID, STR_4007_GAME_SAVE_FAILED, 0, 0);
+			SetDParamStr(0, GetSaveLoadErrorString());
+			ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
 		} else {
 			DeleteWindowById(WC_SAVELOAD, 0);
 		}
@@ -939,6 +947,31 @@
 	}
 }
 
+#include "cargopacket.h"
+void CheckCargoPacketLeaks()
+{
+	CargoPacket *cp;
+	FOR_ALL_CARGOPACKETS(cp) cp->touched = false;
+
+	Vehicle *v;
+	FOR_ALL_VEHICLES(v) {
+		const CargoList::List *packets = v->cargo.Packets();
+		for (CargoList::List::const_iterator it = packets->begin(); it != packets->end(); it++) (*it)->touched = true;
+	}
+
+	Station *st;
+	FOR_ALL_STATIONS(st) {
+		for (CargoID c = 0; c < NUM_CARGO; c++) {
+			GoodsEntry *ge = &st->goods[c];
+
+			const CargoList::List *packets = ge->cargo.Packets();
+			for (CargoList::List::const_iterator it = packets->begin(); it != packets->end(); it++) (*it)->touched = true;
+		}
+	}
+
+	FOR_ALL_CARGOPACKETS(cp) assert(cp->touched);
+}
+
 
 /* State controlling game loop.
  * The state must not be changed from anywhere
@@ -973,6 +1006,7 @@
 		CallWindowTickEvent();
 		NewsLoop();
 		_current_player = p;
+		CheckCargoPacketLeaks();
 	}
 }
 
@@ -989,11 +1023,8 @@
 #endif /* PSP */
 
 	if (_patches.keep_all_autosave && _local_player != PLAYER_SPECTATOR) {
-		const Player *p = GetPlayer(_local_player);
-
-		SetDParam(0, p->name_1);
-		SetDParam(1, p->name_2);
-		SetDParam(2, _date);
+		SetDParam(0, _local_player);
+		SetDParam(1, _date);
 		GetString(buf, STR_4004, lastof(buf));
 		ttd_strlcpy(buf, ".sav", sizeof(buf));
 	} else {
@@ -1081,7 +1112,7 @@
 	}
 
 	_caret_timer += 3;
-	_timer_counter += 8;
+	_palette_animation_counter += 8;
 	CursorTick();
 
 #ifdef ENABLE_NETWORK
@@ -1250,7 +1281,10 @@
 
 	/* Check if all NewGRFs are present, we are very strict in MP mode */
 	GRFListCompatibility gcf_res = IsGoodGRFConfigList();
-	if (_networking && gcf_res != GLC_ALL_GOOD) return false;
+	if (_networking && gcf_res != GLC_ALL_GOOD) {
+		SetSaveLoadError(STR_NETWORK_ERR_CLIENT_NEWGRF_MISMATCH);
+		return false;
+	}
 
 	switch (gcf_res) {
 		case GLC_COMPATIBLE: _switch_mode_errorstr = STR_NEWGRF_COMPATIBLE_LOAD_WARNING; break;
@@ -1295,7 +1329,7 @@
 
 	/* make sure there is a town in the game */
 	if (_game_mode == GM_NORMAL && !ClosestTownFromTile(0, (uint)-1)) {
-		_error_message = STR_NO_TOWN_IN_SCENARIO;
+		SetSaveLoadError(STR_NO_TOWN_IN_SCENARIO);
 		return false;
 	}
 
@@ -1835,6 +1869,7 @@
 	if (CheckSavegameVersion(38)) _patches.disable_elrails = false;
 	/* do the same as when elrails were enabled/disabled manually just now */
 	SettingsDisableElrail(_patches.disable_elrails);
+	SetDefaultRailGui();
 
 	/* From version 53, the map array was changed for house tiles to allow
 	 * space for newhouses grf features. A new byte, m7, was also added. */
@@ -1905,13 +1940,19 @@
 	if (CheckSavegameVersion(44)) {
 		Vehicle *v;
 		/* If we remove a station while cargo from it is still enroute, payment calculation will assume
-		 * 0, 0 to be the origin of the cargo, resulting in very high payments usually. v->cargo_source_xy
+		 * 0, 0 to be the source of the cargo, resulting in very high payments usually. v->source_xy
 		 * stores the coordinates, preserving them even if the station is removed. However, if a game is loaded
-		 * where this situation exists, the cargo-source information is lost. in this case, we set the origin
+		 * where this situation exists, the cargo-source information is lost. in this case, we set the source
 		 * to the current tile of the vehicle to prevent excessive profits
 		 */
 		FOR_ALL_VEHICLES(v) {
-			v->cargo_source_xy = IsValidStationID(v->cargo_source) ? GetStation(v->cargo_source)->xy : v->tile;
+			const CargoList::List *packets = v->cargo.Packets();
+			for (CargoList::List::const_iterator it = packets->begin(); it != packets->end(); it++) {
+				CargoPacket *cp = *it;
+				cp->source_xy = IsValidStationID(cp->source) ? GetStation(cp->source)->xy : v->tile;
+				cp->loaded_at_xy = cp->source_xy;
+			}
+			v->cargo.InvalidateCache();
 		}
 
 		/* Store position of the station where the goods come from, so there
@@ -1924,12 +1965,12 @@
 			for (CargoID c = 0; c < NUM_CARGO; c++) {
 				GoodsEntry *ge = &st->goods[c];
 
-				/* In old versions, enroute_from used 0xFF as INVALID_STATION */
-				if (CheckSavegameVersion(7) && ge->enroute_from == 0xFF) {
-					ge->enroute_from = INVALID_STATION;
+				const CargoList::List *packets = ge->cargo.Packets();
+				for (CargoList::List::const_iterator it = packets->begin(); it != packets->end(); it++) {
+					CargoPacket *cp = *it;
+					cp->source_xy = IsValidStationID(cp->source) ? GetStation(cp->source)->xy : st->xy;
+					cp->loaded_at_xy = cp->source_xy;
 				}
-
-				ge->enroute_from_xy = IsValidStationID(ge->enroute_from) ? GetStation(ge->enroute_from)->xy : st->xy;
 			}
 		}
 	}
@@ -1942,12 +1983,13 @@
 		 * loading again, even if it didn't actually load anything, so now the
 		 * amount of cargo that has been paid for is stored. */
 		FOR_ALL_VEHICLES(v) {
-			if (HASBIT(v->vehicle_flags, 2)) {
-				v->cargo_paid_for = v->cargo_count;
-				CLRBIT(v->vehicle_flags, 2);
-			} else {
-				v->cargo_paid_for = 0;
+			const CargoList::List *packets = v->cargo.Packets();
+			for (CargoList::List::const_iterator it = packets->begin(); it != packets->end(); it++) {
+				CargoPacket *cp = *it;
+				cp->paid_for = HASBIT(v->vehicle_flags, 2);
 			}
+			CLRBIT(v->vehicle_flags, 2);
+			v->cargo.InvalidateCache();
 		}
 	}
 
@@ -2036,6 +2078,16 @@
 		}
 	}
 
+	if (CheckSavegameVersion(69)) {
+		/* In some old savegames a bit was cleared when it should not be cleared */
+		Vehicle *v;
+		FOR_ALL_VEHICLES(v) {
+			if (v->type == VEH_ROAD && (v->u.road.state == 250 || v->u.road.state == 251)) {
+				SETBIT(v->u.road.state, RVS_IS_STOPPING);
+			}
+		}
+	}
+
 	/* Recalculate */
 	Group *g;
 	FOR_ALL_GROUPS(g) {
--- a/src/openttd.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/openttd.h	Tue Jun 26 23:40:58 2007 +0000
@@ -52,11 +52,14 @@
 typedef uint16 EngineID;
 typedef uint16 UnitID;
 typedef uint16 StringID;
+#define INVALID_STRING_ID 0xFFFF
+
 typedef EngineID *EngineList; ///< engine list type placeholder acceptable for C code (see helpers.cpp)
 
 /* IDs used in Pools */
 typedef uint16 VehicleID;
 typedef uint16 StationID;
+static const StationID INVALID_STATION = 0xFFFF;
 typedef uint16 RoadStopID;
 typedef uint16 TownID;
 typedef uint16 IndustryID;
@@ -67,6 +70,7 @@
 typedef uint16 GroupID;
 typedef uint16 EngineRenewID;
 typedef uint16 DestinationID;
+typedef int64 Money;
 
 /* DestinationID must be at least as large as every these below, because it can
  * be any of them
@@ -189,6 +193,7 @@
 	TO_BUILDINGS,
 	TO_BRIDGES,
 	TO_STRUCTURES,
+	TO_LOADING,
 };
 
 /* Landscape types */
@@ -224,53 +229,53 @@
 };
 
 struct Prices {
-	int32 station_value;
-	int32 build_rail;
-	int32 build_road;
-	int32 build_signals;
-	int32 build_bridge;
-	int32 build_train_depot;
-	int32 build_road_depot;
-	int32 build_ship_depot;
-	int32 build_tunnel;
-	int32 train_station_track;
-	int32 train_station_length;
-	int32 build_airport;
-	int32 build_bus_station;
-	int32 build_truck_station;
-	int32 build_dock;
-	int32 build_railvehicle;
-	int32 build_railwagon;
-	int32 aircraft_base;
-	int32 roadveh_base;
-	int32 ship_base;
-	int32 build_trees;
-	int32 terraform;
-	int32 clear_1;
-	int32 purchase_land;
-	int32 clear_2;
-	int32 clear_3;
-	int32 remove_trees;
-	int32 remove_rail;
-	int32 remove_signals;
-	int32 clear_bridge;
-	int32 remove_train_depot;
-	int32 remove_road_depot;
-	int32 remove_ship_depot;
-	int32 clear_tunnel;
-	int32 clear_water;
-	int32 remove_rail_station;
-	int32 remove_airport;
-	int32 remove_bus_station;
-	int32 remove_truck_station;
-	int32 remove_dock;
-	int32 remove_house;
-	int32 remove_road;
-	int32 running_rail[3];
-	int32 aircraft_running;
-	int32 roadveh_running;
-	int32 ship_running;
-	int32 build_industry;
+	Money station_value;
+	Money build_rail;
+	Money build_road;
+	Money build_signals;
+	Money build_bridge;
+	Money build_train_depot;
+	Money build_road_depot;
+	Money build_ship_depot;
+	Money build_tunnel;
+	Money train_station_track;
+	Money train_station_length;
+	Money build_airport;
+	Money build_bus_station;
+	Money build_truck_station;
+	Money build_dock;
+	Money build_railvehicle;
+	Money build_railwagon;
+	Money aircraft_base;
+	Money roadveh_base;
+	Money ship_base;
+	Money build_trees;
+	Money terraform;
+	Money clear_1;
+	Money purchase_land;
+	Money clear_2;
+	Money clear_3;
+	Money remove_trees;
+	Money remove_rail;
+	Money remove_signals;
+	Money clear_bridge;
+	Money remove_train_depot;
+	Money remove_road_depot;
+	Money remove_ship_depot;
+	Money clear_tunnel;
+	Money clear_water;
+	Money remove_rail_station;
+	Money remove_airport;
+	Money remove_bus_station;
+	Money remove_truck_station;
+	Money remove_dock;
+	Money remove_house;
+	Money remove_road;
+	Money running_rail[3];
+	Money aircraft_running;
+	Money roadveh_running;
+	Money ship_running;
+	Money build_industry;
 };
 
 #define GAME_DIFFICULTY_NUM 18
@@ -349,7 +354,7 @@
 	StringID str;
 	Owner owner;
 	Date build_date;
-	uint32 dparam[2];
+	uint64 dparam[2];
 };
 
 struct ViewportSign {
@@ -358,10 +363,82 @@
 	byte width_1, width_2;
 };
 
+/**
+ * Common return value for all commands. Wraps the cost and
+ * a possible error message/state together.
+ */
+class CommandCost {
+	Money cost;       ///< The cost of this action
+	StringID message; ///< Warning message for when success is unset
+	bool success;     ///< Whether the comment went fine up to this moment
+
+public:
+	/**
+	 * Creates a command cost return with no cost and no error
+	 */
+	CommandCost() : cost(0), message(INVALID_STRING_ID), success(true) {}
+
+	/**
+	 * Creates a command return value the is failed with the given message
+	 */
+	CommandCost(StringID msg) : cost(0), message(msg), success(false) {}
+
+	/**
+	 * Creates a command return value with the given start cost
+	 * @param cst the initial cost of this command
+	 */
+	CommandCost(Money cst) : cost(cst), message(INVALID_STRING_ID), success(true) {}
+
+	/**
+	 * Adds the cost of the given command return value to this cost.
+	 * Also takes a possible error message when it is set.
+	 * @param ret the command to add the cost of.
+	 * @return this class.
+	 */
+	CommandCost AddCost(CommandCost ret);
+
+	/**
+	 * Adds the given cost to the cost of the command.
+	 * @param cost the cost to add
+	 * @return this class.
+	 */
+	CommandCost AddCost(Money cost);
+
+	/**
+	 * Multiplies the cost of the command by the given factor.
+	 * @param cost factor to multiply the costs with
+	 * @return this class
+	 */
+	CommandCost MultiplyCost(int factor);
+
+	/**
+	 * The costs as made up to this moment
+	 * @return the costs
+	 */
+	Money GetCost() const;
+
+	/**
+	 * Sets the global error message *if* this class has one.
+	 */
+	void SetGlobalErrorMessage() const;
+
+	/**
+	 * Did this command succeed?
+	 * @return true if and only if it succeeded
+	 */
+	bool Succeeded() const;
+
+	/**
+	 * Did this command fail?
+	 * @return true if and only if it failed
+	 */
+	bool Failed() const;
+};
+
 
 typedef void DrawTileProc(TileInfo *ti);
 typedef uint GetSlopeZProc(TileIndex tile, uint x, uint y);
-typedef int32 ClearTileProc(TileIndex tile, byte flags);
+typedef CommandCost ClearTileProc(TileIndex tile, byte flags);
 typedef void GetAcceptedCargoProc(TileIndex tile, AcceptedCargo res);
 typedef void GetTileDescProc(TileIndex tile, TileDesc *td);
 /**
@@ -495,6 +572,7 @@
 	WC_GENERATE_PROGRESS_WINDOW,
 	WC_CONFIRM_POPUP_QUERY,
 	WC_TRANSPARENCY_TOOLBAR,
+	WC_VEHICLE_TIMETABLE,
 };
 
 
@@ -588,8 +666,6 @@
 
 VARDEF byte _savegame_sort_order;
 
-#define INVALID_STRING_ID 0xFFFF
-
 enum {
 	MAX_SCREEN_WIDTH  = 2048,
 	MAX_SCREEN_HEIGHT = 1200,
--- a/src/order.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/order.h	Tue Jun 26 23:40:58 2007 +0000
@@ -86,7 +86,7 @@
 /* If you change this, keep in mind that it is saved on 3 places:
  * - Load_ORDR, all the global orders
  * - Vehicle -> current_order
- * - REF_SHEDULE (all REFs are currently limited to 16 bits!!)
+ * - REF_ORDER (all REFs are currently limited to 16 bits!!)
  */
 struct Order {
 	Order *next;          ///< Pointer to next order. If NULL, end of list
@@ -100,6 +100,9 @@
 	CargoID refit_cargo; // Refit CargoID
 	byte refit_subtype; // Refit subtype
 
+	uint16 wait_time;    ///< How long in ticks to wait at the destination.
+	uint16 travel_time;  ///< How long in ticks the journey to this destination should take.
+
 	bool IsValid() const;
 	void Free();
 	void FreeChain();
@@ -197,6 +200,8 @@
 	order.index   = 0; // avoid compiler warning
 	order.refit_cargo   = CT_NO_REFIT;
 	order.refit_subtype = 0;
+	order.wait_time     = 0;
+	order.travel_time   = 0;
 	return order;
 }
 
--- a/src/order_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/order_cmd.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -18,6 +18,7 @@
 #include "saveload.h"
 #include "vehicle_gui.h"
 #include "cargotype.h"
+#include "strings.h"
 
 /**
  * Called if a new block is added to the order-pool
@@ -48,6 +49,8 @@
 
 	order.refit_cargo   = CT_NO_REFIT;
 	order.refit_subtype = 0;
+	order.wait_time     = 0;
+	order.travel_time   = 0;
 	order.index = 0; // avoid compiler warning
 
 	// Sanity check
@@ -75,6 +78,8 @@
 	order.index = 0; // avoid compiler warning
 	order.refit_cargo   = CT_NO_REFIT;
 	order.refit_subtype = 0;
+	order.wait_time     = 0;
+	order.travel_time   = 0;
 	return order;
 }
 
@@ -85,8 +90,9 @@
  */
 void InvalidateVehicleOrder(const Vehicle *v)
 {
-	InvalidateWindow(WC_VEHICLE_VIEW,   v->index);
-	InvalidateWindow(WC_VEHICLE_ORDERS, v->index);
+	InvalidateWindow(WC_VEHICLE_VIEW,      v->index);
+	InvalidateWindow(WC_VEHICLE_ORDERS,    v->index);
+	InvalidateWindow(WC_VEHICLE_TIMETABLE, v->index);
 }
 
 /**
@@ -127,6 +133,8 @@
 			order->next = NULL;
 			order->refit_cargo   = CT_NO_REFIT;
 			order->refit_subtype = 0;
+			order->wait_time     = 0;
+			order->travel_time   = 0;
 
 			return order;
 		}
@@ -152,6 +160,9 @@
 
 	order->refit_cargo   = data.refit_cargo;
 	order->refit_subtype = data.refit_subtype;
+
+	order->wait_time   = data.wait_time;
+	order->travel_time = data.travel_time;
 }
 
 
@@ -190,7 +201,7 @@
  *                        only the first 8 bits used currently (bit 16 - 23) (max 255)
  * @param p2 packed order to insert
  */
-int32 CmdInsertOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdInsertOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 	VehicleID veh   = GB(p1,  0, 16);
@@ -441,21 +452,21 @@
 		RebuildVehicleLists();
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Declone an order-list
  * @param *dst delete the orders of this vehicle
  * @param flags execution flags
  */
-static int32 DecloneOrder(Vehicle *dst, uint32 flags)
+static CommandCost DecloneOrder(Vehicle *dst, uint32 flags)
 {
 	if (flags & DC_EXEC) {
 		DeleteVehicleOrders(dst);
 		InvalidateVehicleOrder(dst);
 		RebuildVehicleLists();
 	}
-	return 0;
+	return CommandCost();
 }
 
 /**
@@ -483,7 +494,7 @@
  * @param p1 the ID of the vehicle
  * @param p2 the order to delete (max 255)
  */
-int32 CmdDeleteOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdDeleteOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v, *u;
 	VehicleID veh_id = p1;
@@ -554,7 +565,7 @@
 		RebuildVehicleLists();
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Goto order of order-list.
@@ -563,7 +574,7 @@
  * @param p1 The ID of the vehicle which order is skipped
  * @param p2 the selected order to which we want to skip
  */
-int32 CmdSkipToOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSkipToOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 	VehicleID veh_id = p1;
@@ -595,7 +606,7 @@
 	if (v->type == VEH_AIRCRAFT) InvalidateWindowClasses(WC_AIRCRAFT_LIST);
 	if (v->type == VEH_SHIP) InvalidateWindowClasses(WC_SHIPS_LIST);
 
-	return 0;
+	return CommandCost();
 }
 
 /**
@@ -608,7 +619,7 @@
  * @note The target order will move one place down in the orderlist
  *  if you move the order upwards else it'll move it one place down
  */
-int32 CmdMoveOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdMoveOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	VehicleID veh = p1;
 	VehicleOrderID moving_order = GB(p2,  0, 16);
@@ -681,7 +692,7 @@
 		RebuildVehicleLists();
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Modify an order in the orderlist of a vehicle.
@@ -694,7 +705,7 @@
  *                        only the first 8 bits used currently (bit 16 - 23) (max 255)
  * @param p2 mode to change the order to (always set)
  */
-int32 CmdModifyOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdModifyOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 	Order *order;
@@ -763,7 +774,7 @@
 		}
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Clone/share/copy an order-list of an other vehicle.
@@ -774,7 +785,7 @@
  * - p1 = (bit 16-31) - source vehicle to clone orders from, if any (none for CO_UNSHARE)
  * @param p2 mode of cloning: CO_SHARE, CO_COPY, or CO_UNSHARE
  */
-int32 CmdCloneOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdCloneOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *dst;
 	VehicleID veh_src = GB(p1, 16, 16);
@@ -896,7 +907,7 @@
 		default: return CMD_ERROR;
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Add/remove refit orders from an order
@@ -908,7 +919,7 @@
  *   - bit 8-15 Cargo subtype
  *   - bit 16-23 number of order to modify
  */
-int32 CmdOrderRefit(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdOrderRefit(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	const Vehicle *v;
 	Order *order;
@@ -945,7 +956,7 @@
 		}
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /**
@@ -964,7 +975,8 @@
 	if (!IsCustomName(v->string_id)) {
 		bak->name[0] = '\0';
 	} else {
-		GetName(bak->name, v->string_id & 0x7FF, lastof(bak->name));
+		SetDParam(0, v->index);
+		GetString(bak->name, STR_VEHICLE_NAME, lastof(bak->name));
 	}
 
 	/* If we have shared orders, store it on a special way */
@@ -1039,7 +1051,7 @@
  * If we do want to backup/restore it, just add UnitID uid to BackuppedOrders, and
  * restore it as parameter 'y' (ugly hack I know) for example. "v->unitnumber = y;"
  */
-int32 CmdRestoreOrderIndex(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRestoreOrderIndex(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 	VehicleOrderID cur_ord = GB(p2,  0, 16);
@@ -1058,7 +1070,7 @@
 		v->service_interval = serv_int;
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -1315,8 +1327,10 @@
 	SLE_VAR(Order, flags, SLE_UINT8),
 	SLE_VAR(Order, dest,  SLE_UINT16),
 	SLE_REF(Order, next,  REF_ORDER),
-	SLE_CONDVAR(Order, refit_cargo,    SLE_UINT8, 36, SL_MAX_VERSION),
-	SLE_CONDVAR(Order, refit_subtype,  SLE_UINT8, 36, SL_MAX_VERSION),
+	SLE_CONDVAR(Order, refit_cargo,    SLE_UINT8,  36, SL_MAX_VERSION),
+	SLE_CONDVAR(Order, refit_subtype,  SLE_UINT8,  36, SL_MAX_VERSION),
+	SLE_CONDVAR(Order, wait_time,      SLE_UINT16, 67, SL_MAX_VERSION),
+	SLE_CONDVAR(Order, travel_time,    SLE_UINT16, 67, SL_MAX_VERSION),
 
 	/* Leftover from the minor savegame version stuff
 	 * We will never use those free bytes, but we have to keep this line to allow loading of old savegames */
--- a/src/order_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/order_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -24,11 +24,13 @@
 #include "train.h"
 #include "water_map.h"
 #include "vehicle_gui.h"
+#include "timetable.h"
 #include "cargotype.h"
 
 enum OrderWindowWidgets {
 	ORDER_WIDGET_CLOSEBOX = 0,
 	ORDER_WIDGET_CAPTION,
+	ORDER_WIDGET_TIMETABLE_VIEW,
 	ORDER_WIDGET_ORDER_LIST,
 	ORDER_WIDGET_SCROLLBAR,
 	ORDER_WIDGET_SKIP,
@@ -174,8 +176,7 @@
 		}
 	}
 
-	SetDParam(0, v->string_id);
-	SetDParam(1, v->unitnumber);
+	SetDParam(0, v->index);
 	DrawWindowWidgets(w);
 
 	y = 15;
@@ -540,6 +541,13 @@
 				assert(w->widget[ORDER_WIDGET_REFIT].bottom        == w->widget[ORDER_WIDGET_UNLOAD].bottom);
 				assert(w->widget[ORDER_WIDGET_REFIT].display_flags == w->widget[ORDER_WIDGET_UNLOAD].display_flags);
 			}
+
+			if (_patches.timetabling) {
+				w->widget[ORDER_WIDGET_CAPTION].right -= 61;
+			} else {
+				HideWindowWidget(w, ORDER_WIDGET_TIMETABLE_VIEW);
+			}
+
 			break;
 
 	case WE_PAINT:
@@ -623,6 +631,11 @@
 		case ORDER_WIDGET_TRANSFER:
 			OrderClick_Transfer(w, v);
 			break;
+
+		case ORDER_WIDGET_TIMETABLE_VIEW:
+			ShowTimetableWindow(v);
+			break;
+
 		case ORDER_WIDGET_SHARED_ORDER_LIST:
 			ShowVehicleListWindow(v);
 			break;
@@ -733,6 +746,7 @@
 static const Widget _orders_train_widgets[] = {
 	{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                STR_018B_CLOSE_WINDOW},               // ORDER_WIDGET_CLOSEBOX
 	{    WWT_CAPTION,   RESIZE_RIGHT,   14,    11,   398,     0,    13, STR_8829_ORDERS,         STR_018C_WINDOW_TITLE_DRAG_THIS},     // ORDER_WIDGET_CAPTION
+	{ WWT_PUSHTXTBTN,   RESIZE_LR,      14,   338,   398,     0,    13, STR_TIMETABLE_VIEW,      STR_TIMETABLE_VIEW_TOOLTIP},          // ORDER_WIDGET_TIMETABLE_VIEW
 
 	{      WWT_PANEL,   RESIZE_RB,      14,     0,   386,    14,    75, 0x0,                     STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, // ORDER_WIDGET_ORDER_LIST
 
@@ -769,6 +783,7 @@
 static const Widget _orders_widgets[] = {
 	{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                STR_018B_CLOSE_WINDOW},               // ORDER_WIDGET_CLOSEBOX
 	{    WWT_CAPTION,   RESIZE_RIGHT,   14,    11,   409,     0,    13, STR_8829_ORDERS,         STR_018C_WINDOW_TITLE_DRAG_THIS},     // ORDER_WIDGET_CAPTION
+	{ WWT_PUSHTXTBTN,   RESIZE_LR,      14,   349,   409,     0,    13, STR_TIMETABLE_VIEW,      STR_TIMETABLE_VIEW_TOOLTIP},          // ORDER_WIDGET_TIMETABLE_VIEW
 
 	{      WWT_PANEL,   RESIZE_RB,      14,     0,   397,    14,    75, 0x0,                     STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, // ORDER_WIDGET_ORDER_LIST
 
@@ -803,27 +818,28 @@
  * Widget definition for competitor orders
  */
 static const Widget _other_orders_widgets[] = {
-	{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,        STR_018B_CLOSE_WINDOW},               // ORDER_WIDGET_CLOSEBOX
-	{    WWT_CAPTION,   RESIZE_RIGHT,   14,    11,   331,     0,    13, STR_A00B_ORDERS, STR_018C_WINDOW_TITLE_DRAG_THIS},     // ORDER_WIDGET_CAPTION
-
-	{      WWT_PANEL,   RESIZE_RB,      14,     0,   319,    14,    75, 0x0,             STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, // ORDER_WIDGET_ORDER_LIST
-
-	{  WWT_SCROLLBAR,   RESIZE_LRB,     14,   320,   331,    14,    75, 0x0,             STR_0190_SCROLL_BAR_SCROLLS_LIST},    // ORDER_WIDGET_SCROLLBAR
+	{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,           STR_018B_CLOSE_WINDOW},               // ORDER_WIDGET_CLOSEBOX
+	{    WWT_CAPTION,   RESIZE_RIGHT,   14,    11,   331,     0,    13, STR_A00B_ORDERS,    STR_018C_WINDOW_TITLE_DRAG_THIS},     // ORDER_WIDGET_CAPTION
+	{ WWT_PUSHTXTBTN,   RESIZE_LR,      14,   271,   331,     0,    13, STR_TIMETABLE_VIEW, STR_TIMETABLE_VIEW_TOOLTIP},          // ORDER_WIDGET_TIMETABLE_VIEW
 
-	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,             STR_NULL},                            // ORDER_WIDGET_SKIP
-	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,             STR_NULL},                            // ORDER_WIDGET_DELETE
-	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,             STR_NULL},                            // ORDER_WIDGET_NON_STOP
-	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,             STR_NULL},                            // ORDER_WIDGET_GOTO
-	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,             STR_NULL},                            // ORDER_WIDGET_FULL_LOAD
-	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,             STR_NULL},                            // ORDER_WIDGET_UNLOAD
-	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,             STR_NULL},                            // ORDER_WIDGET_REFIT
-	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,             STR_NULL},                            // ORDER_WIDGET_TRANSFER
+	{      WWT_PANEL,   RESIZE_RB,      14,     0,   319,    14,    75, 0x0,                STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, // ORDER_WIDGET_ORDER_LIST
 
-	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,             STR_NULL},                            // ORDER_WIDGET_SHARED_ORDER_LIST
+	{  WWT_SCROLLBAR,   RESIZE_LRB,     14,   320,   331,    14,    75, 0x0,                STR_0190_SCROLL_BAR_SCROLLS_LIST},    // ORDER_WIDGET_SCROLLBAR
 
-	{      WWT_PANEL,   RESIZE_RTB,     14,     0,   319,    76,    87, 0x0,             STR_NULL},                            // ORDER_WIDGET_RESIZE_BAR
+	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_SKIP
+	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_DELETE
+	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_NON_STOP
+	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_GOTO
+	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_FULL_LOAD
+	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_UNLOAD
+	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_REFIT
+	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_TRANSFER
 
-	{  WWT_RESIZEBOX,   RESIZE_LRTB,    14,   320,   331,    76,    87, 0x0,             STR_RESIZE_BUTTON},                   // ORDER_WIDGET_RESIZE
+	{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_SHARED_ORDER_LIST
+
+	{      WWT_PANEL,   RESIZE_RTB,     14,     0,   319,    76,    87, 0x0,                STR_NULL},                            // ORDER_WIDGET_RESIZE_BAR
+
+	{  WWT_RESIZEBOX,   RESIZE_LRTB,    14,   320,   331,    76,    87, 0x0,                STR_RESIZE_BUTTON},                   // ORDER_WIDGET_RESIZE
 	{   WIDGETS_END},
 };
 
--- a/src/os/macosx/splash.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/os/macosx/splash.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -128,7 +128,7 @@
 	_cur_palette[0xff].b = 0;
 
 	_pal_first_dirty = 0;
-	_pal_last_dirty = 0xff;
+	_pal_count_dirty = 255;
 
 	png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
 	fclose(f);
--- a/src/os2.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/os2.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -12,6 +12,7 @@
 #include "functions.h"
 #include "macros.h"
 #include "fileio.h"
+#include "fios.h" // opendir/readdir/closedir
 
 #include <dirent.h>
 #include <unistd.h>
@@ -124,7 +125,7 @@
 	return ent->d_name[0] == '.';
 }
 
-void ShowInfo(const unsigned char *str)
+void ShowInfo(const char *str)
 {
 	HAB hab;
 	HMQ hmq;
@@ -134,14 +135,14 @@
 	hmq = WinCreateMsgQueue((hab = WinInitialize(0)), 0);
 
 	// display the box
-	rc = WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, str, (const unsigned char *)"OpenTTD", 0, MB_OK | MB_MOVEABLE | MB_INFORMATION);
+	rc = WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, (const unsigned char *)str, (const unsigned char *)"OpenTTD", 0, MB_OK | MB_MOVEABLE | MB_INFORMATION);
 
 	// terminate PM env.
 	WinDestroyMsgQueue(hmq);
 	WinTerminate(hab);
 }
 
-void ShowOSErrorBox(const unsigned char *buf)
+void ShowOSErrorBox(const char *buf)
 {
 	HAB hab;
 	HMQ hmq;
@@ -151,7 +152,7 @@
 	hmq = WinCreateMsgQueue((hab = WinInitialize(0)), 0);
 
 	// display the box
-	rc = WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, buf, (const unsigned char *)"OpenTTD", 0, MB_OK | MB_MOVEABLE | MB_ERROR);
+	rc = WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, (const unsigned char *)buf, (const unsigned char *)"OpenTTD", 0, MB_OK | MB_MOVEABLE | MB_ERROR);
 
 	// terminate PM env.
 	WinDestroyMsgQueue(hmq);
--- a/src/pathfind.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/pathfind.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -254,37 +254,13 @@
 48, 56, 56, 58, 56, 60, 60, 62,
 };
 
-static void TPFMode1(TrackPathFinder* tpf, TileIndex tile, DiagDirection direction)
-{
-	uint bits;
-	int i;
-	RememberData rd;
-	TileIndex tile_org = tile;
+static void TPFMode1(TrackPathFinder* tpf, TileIndex tile, DiagDirection direction);
 
-	if (IsTileType(tile, MP_TUNNELBRIDGE)) {
-		if (IsTunnel(tile)) {
-			if (GetTunnelDirection(tile) != direction ||
-					GetTunnelTransportType(tile) != tpf->tracktype) {
-				return;
-			}
-			tile = SkipToEndOfTunnel(tpf, tile, direction);
-		} else {
-			TileIndex tile_end;
-			if (GetBridgeRampDirection(tile) != direction ||
-					GetBridgeTransportType(tile) != tpf->tracktype) {
-				return;
-			}
-			//fprintf(stderr, "%s: Planning over bridge\n", __func__);
-			// TODO doesn't work - WHAT doesn't work?
-			TPFSetTileBit(tpf, tile, 14);
-			tile_end = GetOtherBridgeEnd(tile);
-			tpf->rd.cur_length += DistanceManhattan(tile, tile_end);
-			tile = tile_end;
-			TPFSetTileBit(tpf, tile, 14);
-		}
-	}
-	tile += TileOffsByDiagDir(direction);
-
+/** Most code of the "Normal" case of TPF Mode 1; for signals special tricks
+ * have to be done, but those happen in TPFMode1; this is just to prevent
+ * gotos ;). */
+static inline void TPFMode1_NormalCase(TrackPathFinder* tpf, TileIndex tile, TileIndex tile_org, DiagDirection direction)
+{
 	/* Check in case of rail if the owner is the same */
 	if (tpf->tracktype == TRANSPORT_RAIL) {
 		/* don't enter train depot from the back */
@@ -322,7 +298,7 @@
 
 	tpf->rd.cur_length++;
 
-	bits = GetTileTrackStatus(tile, tpf->tracktype, tpf->sub_type);
+	uint bits = GetTileTrackStatus(tile, tpf->tracktype, tpf->sub_type);
 
 	if ((byte)bits != tpf->var2) {
 		bits &= _tpfmode1_and[direction];
@@ -333,11 +309,11 @@
 	if (bits != 0) {
 		if (!tpf->disable_tile_hash || (tpf->rd.cur_length <= 64 && (KILL_FIRST_BIT(bits) == 0 || ++tpf->rd.depth <= 7))) {
 			do {
-				i = FIND_FIRST_BIT(bits);
+				int i = FIND_FIRST_BIT(bits);
 				bits = KILL_FIRST_BIT(bits);
 
 				tpf->the_dir = (Trackdir)((_otherdir_mask[direction] & (byte)(1 << i)) ? (i + 8) : i);
-				rd = tpf->rd;
+				RememberData rd = tpf->rd;
 
 				if (TPFSetTileBit(tpf, tile, tpf->the_dir) &&
 						!tpf->enum_proc(tile, tpf->userdata, tpf->the_dir, tpf->rd.cur_length, &tpf->rd.pft_var6) ) {
@@ -347,6 +323,45 @@
 			} while (bits != 0);
 		}
 	}
+}
+
+static void TPFMode1(TrackPathFinder* tpf, TileIndex tile, DiagDirection direction)
+{
+	TileIndex tile_org = tile;
+
+	if (IsTileType(tile, MP_TUNNELBRIDGE)) {
+		if (IsTunnel(tile)) {
+			if (GetTunnelTransportType(tile) != tpf->tracktype) {
+				return;
+			}
+			/* Only skip through the tunnel if heading inwards. We can
+			 * be headed outwards if our starting position was in a
+			 * tunnel and we're pathfinding backwards */
+			if (GetTunnelDirection(tile) == direction) {
+				tile = SkipToEndOfTunnel(tpf, tile, direction);
+			} else if (GetTunnelDirection(tile) != ReverseDiagDir(direction)) {
+				/* We don't support moving through the sides of a tunnel
+				 * entrance :-) */
+				return;
+			}
+		} else {
+			TileIndex tile_end;
+			if (GetBridgeRampDirection(tile) != direction ||
+					GetBridgeTransportType(tile) != tpf->tracktype) {
+				return;
+			}
+			//fprintf(stderr, "%s: Planning over bridge\n", __func__);
+			// TODO doesn't work - WHAT doesn't work?
+			TPFSetTileBit(tpf, tile, 14);
+			tile_end = GetOtherBridgeEnd(tile);
+			tpf->rd.cur_length += DistanceManhattan(tile, tile_end);
+			tile = tile_end;
+			TPFSetTileBit(tpf, tile, 14);
+		}
+	}
+	tile += TileOffsByDiagDir(direction);
+
+	TPFMode1_NormalCase(tpf, tile, tile_org, direction);
 
 	/* the next is only used when signals are checked.
 	 * seems to go in 2 directions simultaneously */
@@ -363,7 +378,7 @@
 	direction = ReverseDiagDir(direction);
 	tile += TileOffsByDiagDir(direction);
 
-	bits = GetTileTrackStatus(tile, tpf->tracktype, tpf->sub_type);
+	uint bits = GetTileTrackStatus(tile, tpf->tracktype, tpf->sub_type);
 	bits |= (bits >> 8);
 
 	if ( (byte)bits != tpf->var2) {
@@ -375,11 +390,11 @@
 		return;
 
 	do {
-		i = FIND_FIRST_BIT(bits);
+		uint i = FIND_FIRST_BIT(bits);
 		bits = KILL_FIRST_BIT(bits);
 
 		tpf->the_dir = (Trackdir)((_otherdir_mask[direction] & (byte)(1 << i)) ? (i + 8) : i);
-		rd = tpf->rd;
+		RememberData rd = tpf->rd;
 		if (TPFSetTileBit(tpf, tile, tpf->the_dir) &&
 				!tpf->enum_proc(tile, tpf->userdata, tpf->the_dir, tpf->rd.cur_length, &tpf->rd.pft_var6) ) {
 			TPFMode1(tpf, tile, _tpf_new_direction[tpf->the_dir]);
--- a/src/player.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/player.h	Tue Jun 26 23:40:58 2007 +0000
@@ -12,11 +12,11 @@
 #include "livery.h"
 
 struct PlayerEconomyEntry {
-	int32 income;
-	int32 expenses;
+	Money income;
+	Money expenses;
 	int32 delivered_cargo;
 	int32 performance_history; ///< player score (scale 0-1000)
-	int64 company_value;
+	Money company_value;
 };
 
 /* The "steps" in loan size, in British Pounds! */
@@ -35,9 +35,8 @@
 
 	PlayerFace face;
 
-	int32 player_money;
-	int32 current_loan;
-	int64 money64; ///< internal 64-bit version of the money. the 32-bit field will be clamped to plus minus 2 billion
+	Money player_money;
+	Money current_loan;
 
 	byte player_color;
 	Livery livery[LS_END];
@@ -60,13 +59,13 @@
 	byte quarters_of_bankrupcy;
 	byte bankrupt_asked; ///< which players were asked about buying it?
 	int16 bankrupt_timeout;
-	int32 bankrupt_value;
+	Money bankrupt_value;
 
 	bool is_active;
 	bool is_ai;
 	bool is_noai; ///< This is a NoAI player (for loading old savegames properly). Part of the NoAI 'hack' to retain savegame compatability with trunk.
 
-	int64 yearly_expenses[3][13];
+	Money yearly_expenses[3][13];
 	PlayerEconomyEntry cur_economy;
 	PlayerEconomyEntry old_economy[24];
 	EngineRenewList engine_renew_list; ///< Defined later
@@ -81,9 +80,8 @@
 
 void ChangeOwnershipOfPlayerItems(PlayerID old_player, PlayerID new_player);
 void GetNameOfOwner(Owner owner, TileIndex tile);
-int64 CalculateCompanyValue(const Player* p);
+Money CalculateCompanyValue(const Player* p);
 void InvalidatePlayerWindows(const Player* p);
-void UpdatePlayerMoney32(Player *p);
 void SetLocalPlayer(PlayerID new_player);
 #define FOR_ALL_PLAYERS(p) for (p = _players; p != endof(_players); p++)
 
@@ -205,7 +203,7 @@
  * @param flags The calling command flags.
  * @return 0 on success, CMD_ERROR on failure.
  */
-static inline int32 AddEngineReplacementForPlayer(Player *p, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags) { return AddEngineReplacement(&p->engine_renew_list, old_engine, new_engine, group, flags); }
+static inline CommandCost AddEngineReplacementForPlayer(Player *p, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags) { return AddEngineReplacement(&p->engine_renew_list, old_engine, new_engine, group, flags); }
 
 /**
  * Remove an engine replacement for the player.
@@ -214,7 +212,7 @@
  * @param flags The calling command flags.
  * @return 0 on success, CMD_ERROR on failure.
  */
-static inline int32 RemoveEngineReplacementForPlayer(Player *p, EngineID engine, GroupID group, uint32 flags) {return RemoveEngineReplacement(&p->engine_renew_list, engine, group, flags); }
+static inline CommandCost RemoveEngineReplacementForPlayer(Player *p, EngineID engine, GroupID group, uint32 flags) {return RemoveEngineReplacement(&p->engine_renew_list, engine, group, flags); }
 
 /**
  * Reset the livery schemes to the player's primary colour.
--- a/src/player_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/player_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -31,8 +31,8 @@
 static void DrawPlayerEconomyStats(const Player *p, byte mode)
 {
 	int x, y, i, j, year;
-	const int64 (*tbl)[13];
-	int64 sum, cost;
+	const Money (*tbl)[13];
+	Money sum, cost;
 	StringID str;
 
 	if (!(mode & 1)) { // normal sized economics window (mode&1) is minimized status
@@ -60,14 +60,14 @@
 
 						str = STR_701E;
 						if (cost < 0) { cost = -cost; str++; }
-						SetDParam64(0, cost);
+						SetDParam(0, cost);
 						DrawStringRightAligned(x, 27 + i * 10, str, 0);
 					}
 				}
 
 				str = STR_701E;
 				if (sum < 0) { sum = -sum; str++; }
-				SetDParam64(0, sum);
+				SetDParam(0, sum);
 				DrawStringRightAligned(x, 27 + 13 * 10 + 2, str, 0);
 
 				GfxFillRect(x - 75, 27 + 10 * 13, x, 27 + 10 * 13, 215);
@@ -80,27 +80,27 @@
 		y = 171;
 
 		/* draw max loan aligned to loan below (y += 10) */
-		SetDParam64(0, (uint64)_economy.max_loan);
+		SetDParam(0, _economy.max_loan);
 		DrawString(202, y + 10, STR_MAX_LOAN, 0);
 	} else {
 		y = 15;
 	}
 
 	DrawString(2, y, STR_7026_BANK_BALANCE, 0);
-	SetDParam64(0, p->money64);
+	SetDParam(0, p->player_money);
 	DrawStringRightAligned(182, y, STR_7028, 0);
 
 	y += 10;
 
 	DrawString(2, y, STR_7027_LOAN, 0);
-	SetDParam64(0, p->current_loan);
+	SetDParam(0, p->current_loan);
 	DrawStringRightAligned(182, y, STR_7028, 0);
 
 	y += 12;
 
 	GfxFillRect(182 - 75, y - 2, 182, y - 2, 215);
 
-	SetDParam64(0, p->money64 - p->current_loan);
+	SetDParam(0, p->player_money - p->current_loan);
 	DrawStringRightAligned(182, y, STR_7028, 0);
 }
 
@@ -165,10 +165,9 @@
 			SetWindowWidgetDisabledState(w, 7, p->current_loan == 0);
 		}
 
-		SetDParam(0, p->name_1);
-		SetDParam(1, p->name_2);
-		SetDParam(2, GetPlayerNameString(player, 3));
-		SetDParam(4, LOAN_INTERVAL);
+		SetDParam(0, p->index);
+		SetDParam(1, p->index);
+		SetDParam(2, LOAN_INTERVAL);
 		DrawWindowWidgets(w);
 
 		DrawPlayerEconomyStats(p, (byte)WP(w, def_d).data_1);
@@ -708,9 +707,8 @@
 		if (amt != 0) {
 			num++;
 
-			SetDParam(num * 3 + 0, amt * 25);
-			SetDParam(num * 3 + 1, p2->name_1);
-			SetDParam(num * 3 + 2, p2->name_2);
+			SetDParam(num * 2 + 0, amt * 25);
+			SetDParam(num * 2 + 1, p2->index);
 
 			if (num != 0) break;
 		}
@@ -757,9 +755,8 @@
 				}
 			}
 
-			SetDParam(0, p->name_1);
-			SetDParam(1, p->name_2);
-			SetDParam(2, GetPlayerNameString((PlayerID)w->window_number, 3));
+			SetDParam(0, p->index);
+			SetDParam(1, p->index);
 
 			DrawWindowWidgets(w);
 
@@ -774,11 +771,10 @@
 
 			DrawPlayerFace(p->face, p->player_color, 2, 16);
 
-			SetDParam(0, p->president_name_1);
-			SetDParam(1, p->president_name_2);
+			SetDParam(0, p->index);
 			DrawStringMultiCenter(48, 141, STR_7037_PRESIDENT, 94);
 
-			SetDParam64(0, CalculateCompanyValue(p));
+			SetDParam(0, CalculateCompanyValue(p));
 			DrawString(110, 114, STR_7076_COMPANY_VALUE, 0);
 
 			DrawCompanyOwnerText(p);
@@ -812,16 +808,16 @@
 				case PCW_WIDGET_PRESIDENT_NAME: {
 					const Player *p = GetPlayer((PlayerID)w->window_number);
 					WP(w, def_d).byte_1 = 0;
-					SetDParam(0, p->president_name_2);
-					ShowQueryString(p->president_name_1, STR_700B_PRESIDENT_S_NAME, 31, 94, w, CS_ALPHANUMERAL);
+					SetDParam(0, p->index);
+					ShowQueryString(STR_PLAYER_NAME, STR_700B_PRESIDENT_S_NAME, 31, 94, w, CS_ALPHANUMERAL);
 					break;
 				}
 
 				case PCW_WIDGET_COMPANY_NAME: {
 					Player *p = GetPlayer((PlayerID)w->window_number);
 					WP(w, def_d).byte_1 = 1;
-					SetDParam(0, p->name_2);
-					ShowQueryString(p->name_1, STR_700A_COMPANY_NAME, 31, 150, w, CS_ALPHANUMERAL);
+					SetDParam(0, p->index);
+					ShowQueryString(STR_COMPANY_NAME, STR_700A_COMPANY_NAME, 31, 150, w, CS_ALPHANUMERAL);
 					break;
 				}
 
@@ -939,15 +935,13 @@
 	switch (e->event) {
 	case WE_PAINT: {
 		Player *p = GetPlayer((PlayerID)w->window_number);
-		SetDParam(0, p->name_1);
-		SetDParam(1, p->name_2);
+		SetDParam(0, p->index);
 		DrawWindowWidgets(w);
 
 		DrawPlayerFace(p->face, p->player_color, 2, 16);
 
-		SetDParam(0, p->name_1);
-		SetDParam(1, p->name_2);
-		SetDParam(2, p->bankrupt_value);
+		SetDParam(0, p->index);
+		SetDParam(1, p->bankrupt_value);
 		DrawStringMultiCenter(214, 65, STR_705B_WE_ARE_LOOKING_FOR_A_TRANSPORT, 238);
 		break;
 	}
@@ -1028,16 +1022,13 @@
 		/* We need to get performance from last year because the image is shown
 		 * at the start of the new year when these things have already been copied */
 		if (WP(w, highscore_d).background_img == SPR_TYCOON_IMG2_BEGIN) { // Tycoon of the century \o/
-			SetDParam(0, p->president_name_1);
-			SetDParam(1, p->president_name_2);
-			SetDParam(2, p->name_1);
-			SetDParam(3, p->name_2);
-			SetDParam(4, EndGameGetPerformanceTitleFromValue(p->old_economy[0].performance_history));
+			SetDParam(0, p->index);
+			SetDParam(1, p->index);
+			SetDParam(2, EndGameGetPerformanceTitleFromValue(p->old_economy[0].performance_history));
 			DrawStringMultiCenter(x + (640 / 2), y + 107, STR_021C_OF_ACHIEVES_STATUS, 640);
 		} else {
-			SetDParam(0, p->name_1);
-			SetDParam(1, p->name_2);
-			SetDParam(2, EndGameGetPerformanceTitleFromValue(p->old_economy[0].performance_history));
+			SetDParam(0, p->index);
+			SetDParam(1, EndGameGetPerformanceTitleFromValue(p->old_economy[0].performance_history));
 			DrawStringMultiCenter(x + (640 / 2), y + 157, STR_021B_ACHIEVES_STATUS, 640);
 		}
 	} break;
--- a/src/players.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/players.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -173,12 +173,12 @@
 	InvalidateWindow(WC_FINANCES, pid);
 }
 
-bool CheckPlayerHasMoney(int32 cost)
+bool CheckPlayerHasMoney(CommandCost cost)
 {
-	if (cost > 0) {
+	if (cost.GetCost() > 0) {
 		PlayerID pid = _current_player;
-		if (IsValidPlayer(pid) && cost > GetPlayer(pid)->player_money) {
-			SetDParam(0, cost);
+		if (IsValidPlayer(pid) && cost.GetCost() > GetPlayer(pid)->player_money) {
+			SetDParam(0, cost.GetCost());
 			_error_message = STR_0003_NOT_ENOUGH_CASH_REQUIRES;
 			return false;
 		}
@@ -186,58 +186,54 @@
 	return true;
 }
 
-static void SubtractMoneyFromAnyPlayer(Player *p, int32 cost)
+static void SubtractMoneyFromAnyPlayer(Player *p, CommandCost cost)
 {
-	p->money64 -= cost;
-	UpdatePlayerMoney32(p);
+	CommandCost tmp(p->player_money);
+	tmp.AddCost(-cost.GetCost());
+	p->player_money = tmp.GetCost();
 
-	p->yearly_expenses[0][_yearly_expenses_type] += cost;
+	tmp = CommandCost(p->yearly_expenses[0][_yearly_expenses_type]);
+	tmp.AddCost(cost);
+	p->yearly_expenses[0][_yearly_expenses_type] = tmp.GetCost();
 
 	if (HASBIT(1 << EXPENSES_TRAIN_INC    |
 	           1 << EXPENSES_ROADVEH_INC  |
 	           1 << EXPENSES_AIRCRAFT_INC |
 	           1 << EXPENSES_SHIP_INC, _yearly_expenses_type)) {
-		p->cur_economy.income -= cost;
+		tmp = CommandCost(p->cur_economy.income);
+		tmp.AddCost(-cost.GetCost());
+		p->cur_economy.income = tmp.GetCost();
 	} else if (HASBIT(1 << EXPENSES_TRAIN_RUN    |
 	                  1 << EXPENSES_ROADVEH_RUN  |
 	                  1 << EXPENSES_AIRCRAFT_RUN |
 	                  1 << EXPENSES_SHIP_RUN     |
 	                  1 << EXPENSES_PROPERTY     |
 	                  1 << EXPENSES_LOAN_INT, _yearly_expenses_type)) {
-		p->cur_economy.expenses -= cost;
+		tmp = CommandCost(p->cur_economy.expenses);
+		tmp.AddCost(-cost.GetCost());
+		p->cur_economy.expenses = tmp.GetCost();
 	}
 
 	InvalidatePlayerWindows(p);
 }
 
-void SubtractMoneyFromPlayer(int32 cost)
+void SubtractMoneyFromPlayer(CommandCost cost)
 {
 	PlayerID pid = _current_player;
 
 	if (IsValidPlayer(pid)) SubtractMoneyFromAnyPlayer(GetPlayer(pid), cost);
 }
 
-void SubtractMoneyFromPlayerFract(PlayerID player, int32 cost)
+void SubtractMoneyFromPlayerFract(PlayerID player, CommandCost cst)
 {
 	Player *p = GetPlayer(player);
 	byte m = p->player_money_fraction;
+	Money cost = cst.GetCost();
 
 	p->player_money_fraction = m - (byte)cost;
 	cost >>= 8;
 	if (p->player_money_fraction > m) cost++;
-	if (cost != 0) SubtractMoneyFromAnyPlayer(p, cost);
-}
-
-/** the player_money field is kept as it is, but money64 contains the actual amount of money. */
-void UpdatePlayerMoney32(Player *p)
-{
-	if (p->money64 < -2000000000) {
-		p->player_money = -2000000000;
-	} else if (p->money64 > 2000000000) {
-		p->player_money = 2000000000;
-	} else {
-		p->player_money = (int32)p->money64;
-	}
+	if (cost != 0) SubtractMoneyFromAnyPlayer(p, CommandCost(cost));
 }
 
 void GetNameOfOwner(Owner owner, TileIndex tile)
@@ -250,8 +246,8 @@
 		} else {
 			const Player* p = GetPlayer(owner);
 
-			SetDParam(0, p->name_1);
-			SetDParam(1, p->name_2);
+			SetDParam(0, STR_COMPANY_NAME);
+			SetDParam(1, p->index);
 		}
 	} else {
 		const Town* t = ClosestTownFromTile(tile, (uint)-1);
@@ -418,15 +414,15 @@
 		p->president_name_2 = Random();
 		p->president_name_1 = SPECSTR_PRESIDENT_NAME;
 
-		SetDParam(0, p->president_name_2);
-		GetString(buffer, p->president_name_1, lastof(buffer));
+		SetDParam(0, p->index);
+		GetString(buffer, STR_PLAYER_NAME, lastof(buffer));
 		if (strlen(buffer) >= 32 || GetStringBoundingBox(buffer).width >= 94)
 			continue;
 
 		FOR_ALL_PLAYERS(pp) {
 			if (pp->is_active && p != pp) {
-				SetDParam(0, pp->president_name_2);
-				GetString(buffer2, pp->president_name_1, lastof(buffer2));
+				SetDParam(0, pp->index);
+				GetString(buffer2, STR_PLAYER_NAME, lastof(buffer2));
 				if (strcmp(buffer2, buffer) == 0)
 					goto restart;
 			}
@@ -474,7 +470,7 @@
 	p->name_1 = STR_SV_UNNAMED;
 	p->is_active = true;
 
-	p->money64 = p->player_money = p->current_loan = 100000;
+	p->player_money = p->current_loan = 100000;
 
 	p->is_ai = is_ai;
 	p->share_owners[0] = p->share_owners[1] = p->share_owners[2] = p->share_owners[3] = PLAYER_SPECTATOR;
@@ -558,16 +554,6 @@
 		MaybeStartNewPlayer();
 }
 
-/** index is the next parameter in _decode_parameters to set up */
-StringID GetPlayerNameString(PlayerID player, uint index)
-{
-	if (IsHumanPlayer(player) && IsValidPlayer(player)) {
-		SetDParam(index, player+1);
-		return STR_7002_PLAYER;
-	}
-	return STR_EMPTY;
-}
-
 extern void ShowPlayerFinances(PlayerID player);
 
 void PlayersYearlyLoop()
@@ -675,7 +661,7 @@
  * if p1 = 5, then
  * - p2 = enable renew_keep_length
  */
-int32 CmdSetAutoReplace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSetAutoReplace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Player *p;
 	if (!IsValidPlayer(_current_player)) return CMD_ERROR;
@@ -722,7 +708,7 @@
 			EngineID old_engine_type = GB(p2, 0, 16);
 			EngineID new_engine_type = GB(p2, 16, 16);
 			GroupID id_g = GB(p1, 16, 16);
-			int32 cost;
+			CommandCost cost;
 
 			if (!IsValidGroupID(id_g) && !IsDefaultGroupID(id_g)) return CMD_ERROR;
 			if (new_engine_type != INVALID_ENGINE) {
@@ -781,7 +767,7 @@
 		break;
 
 	}
-	return 0;
+	return CommandCost();
 }
 
 /** Control the players: add, delete, etc.
@@ -804,7 +790,7 @@
  * @arg - network_server.c:838 DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_COMMAND)@n
  * @arg - network_client.c:536 DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_MAP) from where the map has been received
  */
-int32 CmdPlayerCtrl(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdPlayerCtrl(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (flags & DC_EXEC) _current_player = OWNER_NONE;
 
@@ -826,9 +812,9 @@
 		if (!_networking) return CMD_ERROR;
 
 		/* Has the network client a correct ClientID? */
-		if (!(flags & DC_EXEC)) return 0;
+		if (!(flags & DC_EXEC)) return CommandCost();
 #ifdef ENABLE_NETWORK
-		if (cid >= MAX_CLIENT_INFO) return 0;
+		if (cid >= MAX_CLIENT_INFO) return CommandCost();
 #endif /* ENABLE_NETWORK */
 
 		/* Delete multiplayer progress bar */
@@ -843,12 +829,10 @@
 				NetworkClientInfo *ci = &_network_client_info[cid];
 				ci->client_playas = PLAYER_SPECTATOR;
 				NetworkUpdateClientInfo(ci->client_index);
-			} else
+			} else if (_local_player == PLAYER_SPECTATOR) {
+				_network_playas = PLAYER_SPECTATOR;
+			}
 #endif /* ENABLE_NETWORK */
-			{
-				_network_playas = PLAYER_SPECTATOR;
-				SetLocalPlayer(PLAYER_SPECTATOR);
-			}
 			break;
 		}
 
@@ -902,7 +886,7 @@
 	} break;
 
 	case 1: /* Make a new AI player */
-		if (!(flags & DC_EXEC)) return 0;
+		if (!(flags & DC_EXEC)) return CommandCost();
 
 		DoStartupNewPlayer(true);
 		break;
@@ -912,7 +896,7 @@
 
 		if (!IsValidPlayer((PlayerID)p2)) return CMD_ERROR;
 
-		if (!(flags & DC_EXEC)) return 0;
+		if (!(flags & DC_EXEC)) return CommandCost();
 
 		p = GetPlayer((PlayerID)p2);
 
@@ -922,8 +906,7 @@
 			DeletePlayerWindows(p->index);
 
 			/* Show the bankrupt news */
-			SetDParam(0, p->name_1);
-			SetDParam(1, p->name_2);
+			SetDParam(0, p->index);
 			AddNewsItem( (StringID)(p->index | NB_BBANKRUPT), NEWS_FLAGS(NM_CALLBACK, 0, NT_COMPANY_INFO, DNC_BANKRUPCY),0,0);
 
 			/* Remove the company */
@@ -950,7 +933,7 @@
 	default: return CMD_ERROR;
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 static const StringID _endgame_perf_titles[] = {
@@ -1007,10 +990,8 @@
 		if (hs[i].score <= score) {
 			/* move all elements one down starting from the replaced one */
 			memmove(&hs[i + 1], &hs[i], sizeof(HighScore) * (lengthof(_highscore_table[0]) - i - 1));
-			SetDParam(0, p->president_name_1);
-			SetDParam(1, p->president_name_2);
-			SetDParam(2, p->name_1);
-			SetDParam(3, p->name_2);
+			SetDParam(0, p->index);
+			SetDParam(1, p->index);
 			GetString(hs[i].company, STR_HIGHSCORE_NAME, lastof(hs[i].company)); // get manager/company name string
 			hs[i].score = score;
 			hs[i].title = EndGameGetPerformanceTitleFromValue(score);
@@ -1052,10 +1033,8 @@
 		for (i = 0; i < lengthof(_highscore_table[LAST_HS_ITEM]) && i < count; i++) {
 			HighScore* hs = &_highscore_table[LAST_HS_ITEM][i];
 
-			SetDParam(0, pl[i]->president_name_1);
-			SetDParam(1, pl[i]->president_name_2);
-			SetDParam(2, pl[i]->name_1);
-			SetDParam(3, pl[i]->name_2);
+			SetDParam(0, pl[i]->index);
+			SetDParam(1, pl[i]->index);
 			GetString(hs->company, STR_HIGHSCORE_NAME, lastof(hs->company)); // get manager/company name string
 			hs->score = pl[i]->old_economy[0].performance_history;
 			hs->title = EndGameGetPerformanceTitleFromValue(hs->score);
@@ -1133,10 +1112,11 @@
 	    SLE_VAR(Player, face,            SLE_UINT32),
 
 	/* money was changed to a 64 bit field in savegame version 1. */
-	SLE_CONDVAR(Player, money64,               SLE_VAR_I64 | SLE_FILE_I32, 0, 0),
-	SLE_CONDVAR(Player, money64,               SLE_INT64, 1, SL_MAX_VERSION),
+	SLE_CONDVAR(Player, player_money,          SLE_VAR_I64 | SLE_FILE_I32,  0, 0),
+	SLE_CONDVAR(Player, player_money,          SLE_INT64,                   1, SL_MAX_VERSION),
 
-	    SLE_VAR(Player, current_loan,          SLE_INT32),
+	SLE_CONDVAR(Player, current_loan,          SLE_VAR_I64 | SLE_FILE_I32,  0, 64),
+	SLE_CONDVAR(Player, current_loan,          SLE_INT64,                  65, SL_MAX_VERSION),
 
 	    SLE_VAR(Player, player_color,          SLE_UINT8),
 	    SLE_VAR(Player, player_money_fraction, SLE_UINT8),
@@ -1158,7 +1138,8 @@
 	    SLE_VAR(Player, quarters_of_bankrupcy, SLE_UINT8),
 	    SLE_VAR(Player, bankrupt_asked,        SLE_UINT8),
 	    SLE_VAR(Player, bankrupt_timeout,      SLE_INT16),
-	    SLE_VAR(Player, bankrupt_value,        SLE_INT32),
+	SLE_CONDVAR(Player, bankrupt_value,        SLE_VAR_I64 | SLE_FILE_I32,  0, 64),
+	SLE_CONDVAR(Player, bankrupt_value,        SLE_INT64,                  65, SL_MAX_VERSION),
 
 	/* yearly expenses was changed to 64-bit in savegame version 2. */
 	SLE_CONDARR(Player, yearly_expenses,       SLE_FILE_I32 | SLE_VAR_I64, 3 * 13, 0, 1),
@@ -1186,11 +1167,11 @@
 
 static const SaveLoad _player_economy_desc[] = {
 	/* these were changed to 64-bit in savegame format 2 */
-	SLE_CONDVAR(PlayerEconomyEntry, income,              SLE_INT32,                  0, 1),
-	SLE_CONDVAR(PlayerEconomyEntry, expenses,            SLE_INT32,                  0, 1),
+	SLE_CONDVAR(PlayerEconomyEntry, income,              SLE_FILE_I32 | SLE_VAR_I64, 0, 1),
+	SLE_CONDVAR(PlayerEconomyEntry, income,              SLE_INT64,                  2, SL_MAX_VERSION),
+	SLE_CONDVAR(PlayerEconomyEntry, expenses,            SLE_FILE_I32 | SLE_VAR_I64, 0, 1),
+	SLE_CONDVAR(PlayerEconomyEntry, expenses,            SLE_INT64,                  2, SL_MAX_VERSION),
 	SLE_CONDVAR(PlayerEconomyEntry, company_value,       SLE_FILE_I32 | SLE_VAR_I64, 0, 1),
-	SLE_CONDVAR(PlayerEconomyEntry, income,              SLE_FILE_I64 | SLE_VAR_I32, 2, SL_MAX_VERSION),
-	SLE_CONDVAR(PlayerEconomyEntry, expenses,            SLE_FILE_I64 | SLE_VAR_I32, 2, SL_MAX_VERSION),
 	SLE_CONDVAR(PlayerEconomyEntry, company_value,       SLE_INT64,                  2, SL_MAX_VERSION),
 
 	    SLE_VAR(PlayerEconomyEntry, delivered_cargo,     SLE_INT32),
@@ -1307,7 +1288,6 @@
 		SaveLoad_PLYR(p);
 		_player_colors[index] = p->player_color;
 		p->is_noai = true;
-		UpdatePlayerMoney32(p);
 
 		/* This is needed so an AI is attached to a loaded AI */
 		if (p->is_ai) AI_StartNewAI(p->index);
--- a/src/rail_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/rail_cmd.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -189,7 +189,7 @@
 }
 
 
-static uint32 CheckRailSlope(Slope tileh, TrackBits rail_bits, TrackBits existing, TileIndex tile)
+static CommandCost CheckRailSlope(Slope tileh, TrackBits rail_bits, TrackBits existing, TileIndex tile)
 {
 	if (IsSteepSlope(tileh)) {
 		if (_patches.build_on_slopes && existing == 0) {
@@ -207,7 +207,7 @@
 
 		/* no special foundation */
 		if ((~_valid_tileh_slopes[0][tileh] & rail_bits) == 0) {
-			return 0;
+			return CommandCost();
 		} else if (!_patches.build_on_slopes) {
 			return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
 		}
@@ -216,7 +216,7 @@
 					(rail_bits == TRACK_BIT_X || rail_bits == TRACK_BIT_Y) &&
 					(tileh == SLOPE_W || tileh == SLOPE_S || tileh == SLOPE_E || tileh == SLOPE_N)
 				)) { // partly up
-			return (existing != 0) ? 0 : _price.terraform;
+			return CommandCost((existing != 0) ? 0 : _price.terraform);
 		}
 	}
 	return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
@@ -231,14 +231,14 @@
  * @param p1 railtype of being built piece (normal, mono, maglev)
  * @param p2 rail track to build
  */
-int32 CmdBuildSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Slope tileh;
 	RailType railtype;
 	Track track;
 	TrackBits trackbit;
-	int32 cost = 0;
-	int32 ret;
+	CommandCost cost;
+	CommandCost ret;
 
 	if (!ValParamRailtype(p1) || !ValParamTrackOrientation((Track)p2)) return CMD_ERROR;
 	railtype = (RailType)p1;
@@ -263,14 +263,14 @@
 
 			ret = CheckRailSlope(tileh, trackbit, GetTrackBits(tile), tile);
 			if (CmdFailed(ret)) return ret;
-			cost += ret;
+			cost.AddCost(ret);
 
 			/* If the rail types don't match, try to convert only if engines of
 			 * the present rail type are powered on the new rail type. */
 			if (GetRailType(tile) != railtype && HasPowerOnRail(GetRailType(tile), railtype)) {
 				ret = DoCommand(tile, tile, railtype, flags, CMD_CONVERT_RAIL);
 				if (CmdFailed(ret)) return ret;
-				cost += ret;
+				cost.AddCost(ret);
 			}
 
 			if (flags & DC_EXEC) {
@@ -330,11 +330,11 @@
 		default:
 			ret = CheckRailSlope(tileh, trackbit, TRACK_BIT_NONE, tile);
 			if (CmdFailed(ret)) return ret;
-			cost += ret;
+			cost.AddCost(ret);
 
 			ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 			if (CmdFailed(ret)) return ret;
-			cost += ret;
+			cost.AddCost(ret);
 
 			if (flags & DC_EXEC) MakeRailNormal(tile, _current_player, trackbit, railtype);
 			break;
@@ -346,7 +346,7 @@
 		YapfNotifyTrackLayoutChange(tile, track);
 	}
 
-	return cost + _price.build_rail;
+	return cost.AddCost(_price.build_rail);
 }
 
 /** Remove a single piece of track
@@ -355,11 +355,11 @@
  * @param p1 unused
  * @param p2 rail orientation
  */
-int32 CmdRemoveSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Track track = (Track)p2;
 	TrackBits trackbit;
-	int32 cost = _price.remove_rail;
+	CommandCost cost(_price.remove_rail);
 	bool crossing = false;
 
 	if (!ValParamTrackOrientation((Track)p2)) return CMD_ERROR;
@@ -397,7 +397,7 @@
 
 			/* Charge extra to remove signals on the track, if they are there */
 			if (HasSignalOnTrack(tile, track))
-				cost += DoCommand(tile, track, 0, flags, CMD_REMOVE_SIGNALS);
+				cost.AddCost(DoCommand(tile, track, 0, flags, CMD_REMOVE_SIGNALS));
 
 			if (flags & DC_EXEC) {
 				present ^= trackbit;
@@ -444,7 +444,7 @@
 };
 
 
-static int32 ValidateAutoDrag(Trackdir *trackdir, TileIndex start, TileIndex end)
+static CommandCost ValidateAutoDrag(Trackdir *trackdir, TileIndex start, TileIndex end)
 {
 	int x = TileX(start);
 	int y = TileY(start);
@@ -492,7 +492,7 @@
 			return CMD_ERROR;
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Build a stretch of railroad tracks.
@@ -504,9 +504,9 @@
  * - p2 = (bit 4-6) - track-orientation, valid values: 0-5 (Track enum)
  * - p2 = (bit 7)   - 0 = build, 1 = remove tracks
  */
-static int32 CmdRailTrackHelper(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+static CommandCost CmdRailTrackHelper(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 ret, total_cost = 0;
+	CommandCost ret, total_cost;
 	Track track = (Track)GB(p2, 4, 3);
 	Trackdir trackdir;
 	byte mode = HASBIT(p2, 7);
@@ -531,7 +531,7 @@
 			if ((_error_message != STR_1007_ALREADY_BUILT) && (mode == 0)) break;
 			_error_message = INVALID_STRING_ID;
 		} else {
-			total_cost += ret;
+			total_cost.AddCost(ret);
 		}
 
 		if (tile == end_tile) break;
@@ -542,7 +542,7 @@
 		if (!IsDiagonalTrackdir(trackdir)) ToggleBitT(trackdir, 0);
 	}
 
-	return (total_cost == 0) ? CMD_ERROR : total_cost;
+	return (total_cost.GetCost() == 0) ? CMD_ERROR : total_cost;
 }
 
 /** Build rail on a stretch of track.
@@ -556,7 +556,7 @@
  * - p2 = (bit 7)   - 0 = build, 1 = remove tracks
  * @see CmdRailTrackHelper
  */
-int32 CmdBuildRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	return CmdRailTrackHelper(tile, flags, p1, CLRBIT(p2, 7));
 }
@@ -572,7 +572,7 @@
  * - p2 = (bit 7)   - 0 = build, 1 = remove tracks
  * @see CmdRailTrackHelper
  */
-int32 CmdRemoveRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	return CmdRailTrackHelper(tile, flags, p1, SETBIT(p2, 7));
 }
@@ -586,10 +586,10 @@
  * @todo When checking for the tile slope,
  * distingush between "Flat land required" and "land sloped in wrong direction"
  */
-int32 CmdBuildTrainDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildTrainDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Depot *d;
-	int32 cost, ret;
+	CommandCost cost;
 	Slope tileh;
 
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
@@ -617,9 +617,8 @@
 		return_cmd_error(STR_0007_FLAT_LAND_REQUIRED);
 	}
 
-	ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
-	if (CmdFailed(ret)) return CMD_ERROR;
-	cost = ret;
+	cost = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
+	if (CmdFailed(cost)) return CMD_ERROR;
 
 	if (MayHaveBridgeAbove(tile) && IsBridgeAbove(tile)) return_cmd_error(STR_5007_MUST_DEMOLISH_BRIDGE_FIRST);
 
@@ -637,7 +636,7 @@
 		YapfNotifyTrackLayoutChange(tile, TrackdirToTrack(DiagdirToDiagTrackdir(dir)));
 	}
 
-	return cost + _price.build_train_depot;
+	return cost.AddCost(_price.build_train_depot);
 }
 
 /** Build signals, alternate between double/single, signal/semaphore,
@@ -652,12 +651,12 @@
  * @param p2 used for CmdBuildManySignals() to copy direction of first signal
  * TODO: p2 should be replaced by two bits for "along" and "against" the track.
  */
-int32 CmdBuildSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Track track = (Track)GB(p1, 0, 3);
 	bool pre_signal = HASBIT(p1, 3);
 	SignalVariant sigvar = (pre_signal ^ HASBIT(p1, 4)) ? SIG_SEMAPHORE : SIG_ELECTRIC;
-	int32 cost;
+	CommandCost cost;
 
 	if (!ValParamTrackOrientation(track) || !IsTileType(tile, MP_RAILWAY) || !EnsureNoVehicleOnGround(tile))
 		return CMD_ERROR;
@@ -686,14 +685,14 @@
 
 	if (!HasSignalOnTrack(tile, track)) {
 		/* build new signals */
-		cost = _price.build_signals;
+		cost = CommandCost(_price.build_signals);
 	} else {
 		if (p2 != 0 && sigvar != GetSignalVariant(tile, track)) {
 			/* convert signals <-> semaphores */
-			cost = _price.build_signals + _price.remove_signals;
+			cost = CommandCost(_price.build_signals + _price.remove_signals);
 		} else {
 			/* it is free to change orientation/pre-exit-combo signals */
-			cost = 0;
+			cost = CommandCost();
 		}
 	}
 
@@ -749,9 +748,10 @@
  * - p2 = (bit  5)    - 0 = build, 1 = remove signals
  * - p2 = (bit 24-31) - user defined signals_density
  */
-static int32 CmdSignalTrackHelper(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+static CommandCost CmdSignalTrackHelper(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 ret, total_cost, signal_ctr;
+	CommandCost ret, total_cost;
+	int signal_ctr;
 	byte signals;
 	bool error = true;
 	TileIndex end_tile;
@@ -798,7 +798,7 @@
 	 * signals    - is there a signal/semaphore on the first tile, copy its style (two-way/single-way)
 	 *              and convert all others to semaphore/signal
 	 * remove     - 1 remove signals, 0 build signals */
-	signal_ctr = total_cost = 0;
+	signal_ctr = 0;
 	for (;;) {
 		/* only build/remove signals with the specified density */
 		if (signal_ctr % signal_density == 0) {
@@ -808,9 +808,9 @@
 			ret = DoCommand(tile, p1, signals, flags, remove ? CMD_REMOVE_SIGNALS : CMD_BUILD_SIGNALS);
 
 			/* Be user-friendly and try placing signals as much as possible */
-			if (!CmdFailed(ret)) {
+			if (CmdSucceeded(ret)) {
 				error = false;
-				total_cost += ret;
+				total_cost.AddCost(ret);
 			}
 		}
 
@@ -839,7 +839,7 @@
  * - p2 = (bit 24-31) - user defined signals_density
  * @see CmdSignalTrackHelper
  */
-int32 CmdBuildSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	return CmdSignalTrackHelper(tile, flags, p1, p2);
 }
@@ -853,7 +853,7 @@
  *           - (bit  4)    - 0 = signals, 1 = semaphores
  * @param p2 unused
  */
-int32 CmdRemoveSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Track track = (Track)GB(p1, 0, 3);
 
@@ -886,7 +886,7 @@
 		MarkTileDirtyByTile(tile);
 	}
 
-	return _price.remove_signals;
+	return CommandCost(_price.remove_signals);
 }
 
 /** Remove signals on a stretch of track.
@@ -902,12 +902,12 @@
  * - p2 = (bit 24-31) - user defined signals_density
  * @see CmdSignalTrackHelper
  */
-int32 CmdRemoveSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	return CmdSignalTrackHelper(tile, flags, p1, SETBIT(p2, 5)); // bit 5 is remove bit
 }
 
-typedef int32 DoConvertRailProc(TileIndex tile, RailType totype, bool exec);
+typedef CommandCost DoConvertRailProc(TileIndex tile, RailType totype, bool exec);
 
 /**
  * Switches the rail type.
@@ -919,7 +919,7 @@
  * @return            The cost and state of the operation
  * @retval CMD_ERROR  An error occured during the operation.
  */
-static int32 DoConvertRail(TileIndex tile, RailType totype, bool exec)
+static CommandCost DoConvertRail(TileIndex tile, RailType totype, bool exec)
 {
 	if (!CheckTileOwnership(tile)) return CMD_ERROR;
 
@@ -956,12 +956,12 @@
 		}
 	}
 
-	return _price.build_rail / 2;
+	return CommandCost(_price.build_rail / 2);
 }
 
-extern int32 DoConvertStationRail(TileIndex tile, RailType totype, bool exec);
-extern int32 DoConvertStreetRail(TileIndex tile, RailType totype, bool exec);
-extern int32 DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec);
+extern CommandCost DoConvertStationRail(TileIndex tile, RailType totype, bool exec);
+extern CommandCost DoConvertStreetRail(TileIndex tile, RailType totype, bool exec);
+extern CommandCost DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec);
 
 /** Convert one rail type to the other. You can convert normal rail to
  * monorail/maglev easily or vice-versa.
@@ -970,9 +970,10 @@
  * @param p1 start tile of drag
  * @param p2 new railtype to convert to
  */
-int32 CmdConvertRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdConvertRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 ret, cost, money;
+	CommandCost ret, cost;
+	Money money;
 	int ex;
 	int ey;
 	int sx, sy, x, y;
@@ -991,8 +992,6 @@
 	if (ey < sy) Swap(ey, sy);
 
 	money = GetAvailableMoneyForCommand();
-	cost = 0;
-	ret = 0;
 
 	for (x = sx; x <= ex; ++x) {
 		for (y = sy; y <= ey; ++y) {
@@ -1009,23 +1008,23 @@
 
 			ret = proc(tile, (RailType)p2, false);
 			if (CmdFailed(ret)) continue;
-			cost += ret;
 
 			if (flags & DC_EXEC) {
-				money -= ret;
+				money -= ret.GetCost();
 				if (money < 0) {
-					_additional_cash_required = ret;
-					return cost - ret;
+					_additional_cash_required = ret.GetCost();
+					return cost;
 				}
 				proc(tile, (RailType)p2, true);
 			}
+			cost.AddCost(ret);
 		}
 	}
 
-	return (cost == 0) ? ret : cost;
+	return (cost.GetCost() == 0) ? ret : cost;
 }
 
-static int32 RemoveTrainDepot(TileIndex tile, uint32 flags)
+static CommandCost RemoveTrainDepot(TileIndex tile, uint32 flags)
 {
 	if (!CheckTileOwnership(tile) && _current_player != OWNER_WATER)
 		return CMD_ERROR;
@@ -1041,13 +1040,13 @@
 		YapfNotifyTrackLayoutChange(tile, TrackdirToTrack(DiagdirToDiagTrackdir(dir)));
 	}
 
-	return _price.remove_train_depot;
+	return CommandCost(_price.remove_train_depot);
 }
 
-static int32 ClearTile_Track(TileIndex tile, byte flags)
+static CommandCost ClearTile_Track(TileIndex tile, byte flags)
 {
-	int32 cost;
-	int32 ret;
+	CommandCost cost;
+	CommandCost ret;
 
 	if (flags & DC_AUTO) {
 		if (!IsTileOwner(tile, _current_player))
@@ -1060,8 +1059,6 @@
 		}
 	}
 
-	cost = 0;
-
 	switch (GetRailTileType(tile)) {
 		case RAIL_TILE_SIGNALS:
 		case RAIL_TILE_NORMAL: {
@@ -1070,7 +1067,7 @@
 				Track track = RemoveFirstTrack(&tracks);
 				ret = DoCommand(tile, 0, track, flags, CMD_REMOVE_SINGLE_RAIL);
 				if (CmdFailed(ret)) return CMD_ERROR;
-				cost += ret;
+				cost.AddCost(ret);
 			}
 			return cost;
 		}
@@ -1291,9 +1288,6 @@
 		if (track & TRACK_BIT_LEFT)  DrawGroundSprite(rti->base_sprites.single_w, PAL_NONE);
 		if (track & TRACK_BIT_RIGHT) DrawGroundSprite(rti->base_sprites.single_e, PAL_NONE);
 	}
-
-	if (GetRailType(ti->tile) == RAILTYPE_ELECTRIC) DrawCatenary(ti);
-
 }
 
 static void DrawSignals(TileIndex tile, TrackBits rails)
@@ -1342,6 +1336,8 @@
 
 		if (HASBIT(_display_opt, DO_FULL_DETAIL)) DrawTrackDetails(ti);
 
+		if (GetRailType(ti->tile) == RAILTYPE_ELECTRIC) DrawCatenary(ti);
+
 		if (HasSignals(ti->tile)) DrawSignals(ti->tile, rails);
 	} else {
 		/* draw depot/waypoint */
--- a/src/rail_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/rail_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -26,6 +26,12 @@
 #include "newgrf_station.h"
 #include "train.h"
 
+#include "bridge_map.h"
+#include "rail_map.h"
+#include "road_map.h"
+#include "station_map.h"
+#include "tunnel_map.h"
+
 static RailType _cur_railtype;
 static bool _remove_button_clicked;
 static DiagDirection _build_depot_direction;
@@ -1223,4 +1229,56 @@
 	MarkWholeScreenDirty();
 }
 
+void SetDefaultRailGui()
+{
+	if (_local_player == PLAYER_SPECTATOR) return;
 
+	extern RailType _last_built_railtype;
+	RailType rt = (RailType)_patches.default_rail_type;
+	if (rt >= RAILTYPE_END) {
+		if (rt == RAILTYPE_END + 2) {
+			/* Find the most used rail type */
+			RailType count[RAILTYPE_END];
+			memset(count, 0, sizeof(count));
+			for (TileIndex t = 0; t < MapSize(); t++) {
+				if (IsTileType(t, MP_RAILWAY) ||
+						IsLevelCrossingTile(t) ||
+						IsRailwayStationTile(t) ||
+						(IsTunnelTile(t) && GetTunnelTransportType(t) == TRANSPORT_RAIL) ||
+						(IsBridgeTile(t) && GetBridgeTransportType(t) == TRANSPORT_RAIL)
+						) {
+					count[GetRailType(t)]++;
+				}
+			}
+
+			rt = RAILTYPE_RAIL;
+			for (RailType r = RAILTYPE_ELECTRIC; r < RAILTYPE_END; r++) {
+				if (count[r] >= count[rt]) rt = r;
+			}
+
+			/* No rail, just get the first available one */
+			if (count[rt] == 0) rt = RAILTYPE_END;
+		}
+		switch (rt) {
+			case RAILTYPE_END + 0:
+				rt = RAILTYPE_RAIL;
+				while (rt < RAILTYPE_END && !HasRailtypeAvail(GetPlayer(_local_player), rt)) rt++;
+				break;
+
+			case RAILTYPE_END + 1:
+				rt = GetBestRailtype(GetPlayer(_local_player));
+				break;
+
+			default:
+				break;
+		}
+	}
+
+	_last_built_railtype = _cur_railtype = rt;
+	Window *w = FindWindowById(WC_BUILD_TOOLBAR, 0);
+	if (w != NULL && w->wndproc == BuildRailToolbWndProc) {
+		SetupRailToolbar(_cur_railtype, w);
+		SetWindowDirty(w);
+	}
+}
+
--- a/src/road_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/road_cmd.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -107,7 +107,7 @@
  *                    removing the tram bits before the test.
  * @param p2 unused
  */
-int32 CmdRemoveRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	/* cost for removing inner/edge -roads */
 	static const uint16 road_remove_cost[2] = {50, 18};
@@ -166,11 +166,11 @@
 		/* If it's the last roadtype, just clear the whole tile */
 		if (rts == RoadTypeToRoadTypes(rt)) return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 
-		int32 cost;
+		CommandCost cost;
 		if (IsTileType(tile, MP_TUNNELBRIDGE)) {
 			TileIndex other_end = IsTunnel(tile) ? GetOtherTunnelEnd(tile) : GetOtherBridgeEnd(tile);
 			/* Pay for *every* tile of the bridge or tunnel */
-			cost = (DistanceManhattan(IsTunnel(tile) ? GetOtherTunnelEnd(tile) : GetOtherBridgeEnd(tile), tile) + 1) * _price.remove_road;
+			cost.AddCost((DistanceManhattan(IsTunnel(tile) ? GetOtherTunnelEnd(tile) : GetOtherBridgeEnd(tile), tile) + 1) * _price.remove_road);
 			if (flags & DC_EXEC) {
 				SetRoadTypes(other_end, GetRoadTypes(other_end) & ~RoadTypeToRoadTypes(rt));
 				SetRoadTypes(tile, GetRoadTypes(tile) & ~RoadTypeToRoadTypes(rt));
@@ -185,13 +185,13 @@
 				}
 			}
 		} else {
-			cost = _price.remove_road;
+			cost.AddCost(_price.remove_road);
 			if (flags & DC_EXEC) {
 				SetRoadTypes(tile, GetRoadTypes(tile) & ~RoadTypeToRoadTypes(rt));
 				MarkTileDirtyByTile(tile);
 			}
 		}
-		return cost;
+		return CommandCost(cost);
 	}
 
 	switch (GetRoadTileType(tile)) {
@@ -232,7 +232,7 @@
 					MarkTileDirtyByTile(tile);
 				}
 			}
-			return CountRoadBits(c) * _price.remove_road;
+			return CommandCost(CountRoadBits(c) * _price.remove_road);
 		}
 
 		case ROAD_TILE_CROSSING: {
@@ -258,7 +258,7 @@
 				MarkTileDirtyByTile(tile);
 				YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetTrackBits(tile)));
 			}
-			return _price.remove_road * 2;
+			return CommandCost(_price.remove_road * 2);
 		}
 
 		default:
@@ -301,7 +301,7 @@
 };
 
 
-static uint32 CheckRoadSlope(Slope tileh, RoadBits* pieces, RoadBits existing)
+static CommandCost CheckRoadSlope(Slope tileh, RoadBits* pieces, RoadBits existing)
 {
 	RoadBits road_bits;
 
@@ -320,12 +320,12 @@
 	if ((~_valid_tileh_slopes_road[0][tileh] & road_bits) == 0) {
 		/* force that all bits are set when we have slopes */
 		if (tileh != SLOPE_FLAT) *pieces |= _valid_tileh_slopes_road[0][tileh];
-		return 0; // no extra cost
+		return CommandCost(); // no extra cost
 	}
 
 	/* foundation is used. Whole tile is leveled up */
 	if ((~_valid_tileh_slopes_road[1][tileh] & road_bits) == 0) {
-		return existing != 0 ? 0 : _price.terraform;
+		return CommandCost(existing != 0 ? 0 : _price.terraform);
 	}
 
 	/* partly leveled up tile, only if there's no road on that tile */
@@ -346,10 +346,10 @@
  *           bit 6..7 disallowed directions to toggle
  * @param p2 the town that is building the road (0 if not applicable)
  */
-int32 CmdBuildRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 cost = 0;
-	int32 ret;
+	CommandCost cost;
+	CommandCost ret;
 	RoadBits existing = ROAD_NONE;
 	RoadBits all_bits = ROAD_NONE;
 	Slope tileh;
@@ -396,7 +396,7 @@
 								SetDisallowedRoadDirections(tile, GetDisallowedRoadDirections(tile) ^ toggle_drd);
 								MarkTileDirtyByTile(tile);
 							}
-							return 0;
+							return CommandCost();
 						}
 						return_cmd_error(STR_1007_ALREADY_BUILT);
 					}
@@ -451,7 +451,7 @@
 				MakeRoadCrossing(tile, _current_player, _current_player, _current_player, GetTileOwner(tile), roaddir, GetRailType(tile), RoadTypeToRoadTypes(rt) | ROADTYPES_ROAD, p2);
 				MarkTileDirtyByTile(tile);
 			}
-			return _price.build_road * (rt == ROADTYPE_ROAD ? 2 : 4);
+			return CommandCost(_price.build_road * (rt == ROADTYPE_ROAD ? 2 : 4));
 		}
 
 		case MP_STATION:
@@ -473,7 +473,7 @@
 do_clear:;
 			ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 			if (CmdFailed(ret)) return ret;
-			cost += ret;
+			cost.AddCost(ret);
 	}
 
 	if (all_bits != pieces) {
@@ -481,10 +481,10 @@
 		ret = CheckRoadSlope(tileh, &pieces, all_bits | existing);
 		/* Return an error if we need to build a foundation (ret != 0) but the
 		 * current patch-setting is turned off (or stupid AI@work) */
-		if (CmdFailed(ret) || (ret != 0 && !_patches.build_on_slopes)) {
+		if (CmdFailed(ret) || (ret.GetCost() != 0 && !_patches.build_on_slopes)) {
 			return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
 		}
-		cost += ret;
+		cost.AddCost(ret);
 	}
 
 	if (IsTileType(tile, MP_STREET)) {
@@ -492,10 +492,10 @@
 		pieces &= ComplementRoadBits(existing);
 	}
 
-	cost += CountRoadBits(pieces) * _price.build_road;
+	cost.AddCost(CountRoadBits(pieces) * _price.build_road);
 	if (IsTileType(tile, MP_TUNNELBRIDGE)) {
 		/* Pay for *every* tile of the bridge or tunnel */
-		cost *= DistanceManhattan(IsTunnel(tile) ? GetOtherTunnelEnd(tile) : GetOtherBridgeEnd(tile), tile);
+		cost.MultiplyCost(DistanceManhattan(IsTunnel(tile) ? GetOtherTunnelEnd(tile) : GetOtherBridgeEnd(tile), tile));
 	}
 
 	if (flags & DC_EXEC) {
@@ -505,6 +505,7 @@
 				if (existing == ROAD_NONE || rtt == ROAD_TILE_CROSSING) {
 					SetRoadTypes(tile, GetRoadTypes(tile) | RoadTypeToRoadTypes(rt));
 					SetRoadOwner(tile, rt, _current_player);
+					if (_current_player == OWNER_TOWN && rt == ROADTYPE_ROAD) SetTownIndex(tile, p2);
 				}
 				if (rtt != ROAD_TILE_CROSSING) SetRoadBits(tile, existing | pieces, rt);
 			} break;
@@ -553,7 +554,7 @@
  * @return            The cost and state of the operation
  * @retval CMD_ERROR  An error occured during the operation.
  */
-int32 DoConvertStreetRail(TileIndex tile, RailType totype, bool exec)
+CommandCost DoConvertStreetRail(TileIndex tile, RailType totype, bool exec)
 {
 	/* not a railroad crossing? */
 	if (!IsLevelCrossing(tile)) return CMD_ERROR;
@@ -572,7 +573,7 @@
 		YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetCrossingRailBits(tile)));
 	}
 
-	return _price.build_rail / 2;
+	return CommandCost(_price.build_rail / 2);
 }
 
 
@@ -587,10 +588,10 @@
  * - p2 = (bit 3 + 4) - road type
  * - p2 = (bit 5) - set road direction
  */
-int32 CmdBuildLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	TileIndex start_tile, tile;
-	int32 cost, ret;
+	CommandCost cost, ret;
 	bool had_bridge = false;
 	bool had_success = false;
 	DisallowedRoadDirections drd = DRD_NORTHBOUND;
@@ -623,7 +624,6 @@
 	/* No disallowed direction bits have to be toggled */
 	if (!HASBIT(p2, 5)) drd = DRD_NONE;
 
-	cost = 0;
 	tile = start_tile;
 	/* Start tile is the small number. */
 	for (;;) {
@@ -641,11 +641,11 @@
 			/* Only pay for the upgrade on one side of the bridge */
 			if (IsBridgeTile(tile)) {
 				if ((!had_bridge || GetBridgeRampDirection(tile) == DIAGDIR_SE || GetBridgeRampDirection(tile) == DIAGDIR_SW)) {
-					cost += ret;
+					cost.AddCost(ret);
 				}
 				had_bridge = true;
 			} else {
-				cost += ret;
+				cost.AddCost(ret);
 			}
 		}
 
@@ -667,10 +667,10 @@
  * - p2 = (bit 2) - direction: 0 = along x-axis, 1 = along y-axis (p2 & 4)
  * - p2 = (bit 3 + 4) - road type
  */
-int32 CmdRemoveLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	TileIndex start_tile, tile;
-	int32 cost, ret;
+	CommandCost cost, ret;
 
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 
@@ -692,7 +692,6 @@
 		p2 ^= IS_INT_INSIDE(p2 & 3, 1, 3) ? 3 : 0;
 	}
 
-	cost = 0;
 	tile = start_tile;
 	/* Start tile is the small number. */
 	for (;;) {
@@ -704,7 +703,7 @@
 		/* try to remove the halves. */
 		if (bits != 0) {
 			ret = DoCommand(tile, rt << 4 | bits, 0, flags, CMD_REMOVE_ROAD);
-			if (!CmdFailed(ret)) cost += ret;
+			if (CmdSucceeded(ret)) cost.AddCost(ret);
 		}
 
 		if (tile == end_tile) break;
@@ -712,7 +711,7 @@
 		tile += HASBIT(p2, 2) ? TileDiffXY(0, 1) : TileDiffXY(1, 0);
 	}
 
-	return (cost == 0) ? CMD_ERROR : cost;
+	return (cost.GetCost() == 0) ? CMD_ERROR : cost;
 }
 
 /** Build a road depot.
@@ -725,9 +724,9 @@
  * @todo When checking for the tile slope,
  * distingush between "Flat land required" and "land sloped in wrong direction"
  */
-int32 CmdBuildRoadDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildRoadDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 cost;
+	CommandCost cost;
 	Depot *dep;
 	Slope tileh;
 
@@ -762,10 +761,10 @@
 		MakeRoadDepot(tile, _current_player, dir, rt);
 		MarkTileDirtyByTile(tile);
 	}
-	return cost + _price.build_road_depot;
+	return cost.AddCost(_price.build_road_depot);
 }
 
-static int32 RemoveRoadDepot(TileIndex tile, uint32 flags)
+static CommandCost RemoveRoadDepot(TileIndex tile, uint32 flags)
 {
 	if (!CheckTileOwnership(tile) && _current_player != OWNER_WATER)
 		return CMD_ERROR;
@@ -774,10 +773,10 @@
 
 	if (flags & DC_EXEC) DeleteDepot(GetDepotByTile(tile));
 
-	return _price.remove_road_depot;
+	return CommandCost(_price.remove_road_depot);
 }
 
-static int32 ClearTile_Road(TileIndex tile, byte flags)
+static CommandCost ClearTile_Road(TileIndex tile, byte flags)
 {
 	switch (GetRoadTileType(tile)) {
 		case ROAD_TILE_NORMAL: {
@@ -788,12 +787,12 @@
 			 * to clear town road OR we are not using the DC_AUTO flag */
 			if ((M(b) & (M(ROAD_NW) | M(ROAD_SW) | M(ROAD_SE) | M(ROAD_NE))) || !(flags & DC_AUTO)) {
 				RoadTypes rts = GetRoadTypes(tile);
-				int32 ret = 0;
+				CommandCost ret;
 				for (RoadType rt = ROADTYPE_ROAD; rt < ROADTYPE_END; rt++) {
 					if (HASBIT(rts, rt)) {
-						int32 tmp_ret = DoCommand(tile, rt << 4 | GetRoadBits(tile, rt), 0, flags, CMD_REMOVE_ROAD);
+						CommandCost tmp_ret = DoCommand(tile, rt << 4 | GetRoadBits(tile, rt), 0, flags, CMD_REMOVE_ROAD);
 						if (CmdFailed(tmp_ret)) return tmp_ret;
-						ret += tmp_ret;
+						ret.AddCost(tmp_ret);
 					}
 				}
 				return ret;
@@ -804,7 +803,7 @@
 
 		case ROAD_TILE_CROSSING: {
 			RoadTypes rts = GetRoadTypes(tile);
-			int32 ret = 0;
+			CommandCost ret;
 
 			if (flags & DC_AUTO) return_cmd_error(STR_1801_MUST_REMOVE_ROAD_FIRST);
 
@@ -812,9 +811,9 @@
 			 * tram tracks must be removed before the road bits. */
 			for (RoadType rt = ROADTYPE_HWAY; rt >= ROADTYPE_ROAD; rt--) {
 				if (HASBIT(rts, rt)) {
-					int32 tmp_ret = DoCommand(tile, 1 << 6 | rt << 4 | GetCrossingRoadBits(tile), 0, flags, CMD_REMOVE_ROAD);
+					CommandCost tmp_ret = DoCommand(tile, 1 << 6 | rt << 4 | GetCrossingRoadBits(tile), 0, flags, CMD_REMOVE_ROAD);
 					if (CmdFailed(tmp_ret)) return tmp_ret;
-					ret += tmp_ret;
+					ret.AddCost(tmp_ret);
 				}
 			}
 
@@ -991,13 +990,6 @@
 
 	DrawGroundSprite(image, pal);
 
-	if (road != ROAD_NONE) {
-		DisallowedRoadDirections drd = GetDisallowedRoadDirections(ti->tile);
-		if (drd != DRD_NONE) {
-			DrawRoadDetail(SPR_ONEWAY_BASE + drd - 1 + ((road == ROAD_X) ? 0 : 3), ti, 8, 8, 0);
-		}
-	}
-
 	/* For tram we overlay the road graphics with either tram tracks only
 	 * (when there is actual road beneath the trams) or with tram tracks
 	 * and some dirts which hides the road graphics */
@@ -1011,6 +1003,13 @@
 		DrawGroundSprite(image, pal);
 	}
 
+	if (road != ROAD_NONE) {
+		DisallowedRoadDirections drd = GetDisallowedRoadDirections(ti->tile);
+		if (drd != DRD_NONE) {
+			DrawRoadDetail(SPR_ONEWAY_BASE + drd - 1 + ((road == ROAD_X) ? 0 : 3), ti, 8, 8, 0);
+		}
+	}
+
 	if (HasRoadWorks(ti->tile)) {
 		/* Road works */
 		DrawGroundSprite((road | tram) & ROAD_X ? SPR_EXCAVATION_X : SPR_EXCAVATION_Y, PAL_NONE);
--- a/src/roadveh_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/roadveh_cmd.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -14,6 +14,7 @@
 #include "map.h"
 #include "tile.h"
 #include "vehicle.h"
+#include "timetable.h"
 #include "engine.h"
 #include "command.h"
 #include "station.h"
@@ -96,7 +97,7 @@
 	}
 
 	image = direction + _roadveh_images[img];
-	if (v->cargo_count >= v->cargo_cap / 2) image += _roadveh_full_adder[img];
+	if (v->cargo.Count() >= v->cargo_cap / 2U) image += _roadveh_full_adder[img];
 	return image;
 }
 
@@ -116,9 +117,9 @@
 	DrawSprite(6 + _roadveh_images[spritenum], pal, x, y);
 }
 
-static int32 EstimateRoadVehCost(EngineID engine_type)
+static CommandCost EstimateRoadVehCost(EngineID engine_type)
 {
-	return ((_price.roadveh_base >> 3) * GetEngineProperty(engine_type, 0x11, RoadVehInfo(engine_type)->base_cost)) >> 5;
+	return CommandCost(((_price.roadveh_base >> 3) * GetEngineProperty(engine_type, 0x11, RoadVehInfo(engine_type)->base_cost)) >> 5);
 }
 
 byte GetRoadVehLength(const Vehicle *v)
@@ -156,9 +157,9 @@
  * @param p1 bus/truck type being built (engine)
  * @param p2 bit 0 when set, the unitnumber will be 0, otherwise it will be a free number
  */
-int32 CmdBuildRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 cost;
+	CommandCost cost;
 	Vehicle *v;
 	UnitID unit_num;
 	Engine *e;
@@ -219,7 +220,7 @@
 		v->cargo_subtype = 0;
 		v->cargo_cap = rvi->capacity;
 //		v->cargo_count = 0;
-		v->value = cost;
+		v->value = cost.GetCost();
 //		v->day_counter = 0;
 //		v->next_order_param = v->next_order = 0;
 //		v->load_unload_time_rem = 0;
@@ -273,7 +274,7 @@
 		GetPlayer(_current_player)->num_engines[p1]++;
 	}
 
-	return cost;
+	return CommandCost(cost);
 }
 
 /** Start/Stop a road vehicle.
@@ -282,7 +283,7 @@
  * @param p1 road vehicle ID to start/stop
  * @param p2 unused
  */
-int32 CmdStartStopRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdStartStopRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 	uint16 callback;
@@ -312,7 +313,7 @@
 		InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 void ClearSlot(Vehicle *v)
@@ -347,7 +348,7 @@
  * @param p1 vehicle ID to be sold
  * @param p2 unused
  */
-int32 CmdSellRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSellRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 
@@ -373,7 +374,7 @@
 		DeleteVehicle(v);
 	}
 
-	return -(int32)v->value;
+	return CommandCost(-v->value);
 }
 
 struct RoadFindDepotData {
@@ -415,7 +416,7 @@
 		/* See where we are now */
 		Trackdir trackdir = GetVehicleTrackdir(v);
 
-		ftd = NPFRouteToDepotBreadthFirst(v->tile, trackdir, TRANSPORT_ROAD, v->u.road.compatible_roadtypes, v->owner, INVALID_RAILTYPE);
+		ftd = NPFRouteToDepotBreadthFirstTwoWay(v->tile, trackdir, v->tile, ReverseTrackdir(trackdir), TRANSPORT_ROAD, v->u.road.compatible_roadtypes, v->owner, INVALID_RAILTYPE, 0);
 		if (ftd.best_bird_dist == 0) {
 			return GetDepotByTile(ftd.node.tile); /* Target found */
 		} else {
@@ -447,7 +448,7 @@
  * - p2 bit 0-3 - DEPOT_ flags (see vehicle.h)
  * - p2 bit 8-10 - VLW flag (for mass goto depot)
  */
-int32 CmdSendRoadVehToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSendRoadVehToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 	const Depot *dep;
@@ -478,7 +479,7 @@
 				TOGGLEBIT(v->current_order.flags, OFB_HALT_IN_DEPOT);
 				InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 			}
-			return 0;
+			return CommandCost();
 		}
 
 		if (p2 & DEPOT_DONT_CANCEL) return CMD_ERROR; // Requested no cancelation of depot orders
@@ -492,7 +493,7 @@
 			v->current_order.flags = 0;
 			InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 		}
-		return 0;
+		return CommandCost();
 	}
 
 	dep = FindClosestRoadDepot(v);
@@ -511,7 +512,7 @@
 		InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Turn a roadvehicle around.
@@ -520,7 +521,7 @@
  * @param p1 vehicle ID to turn
  * @param p2 unused
  */
-int32 CmdTurnRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdTurnRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 
@@ -548,7 +549,7 @@
 
 	if (flags & DC_EXEC) v->u.road.reverse_ctr = 180;
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -676,7 +677,7 @@
 	v->u.road.crashed_ctr++;
 
 	for (Vehicle *u = v; u != NULL; u = u->next) {
-		if (IsCargoInClass(u->cargo_type, CC_PASSENGERS)) pass += u->cargo_count;
+		if (IsCargoInClass(u->cargo_type, CC_PASSENGERS)) pass += u->cargo.Count();
 
 		u->vehstatus |= VS_CRASHED;
 
@@ -757,6 +758,7 @@
 			if (!(v->current_order.flags & OF_PART_OF_ORDERS)) return;
 			if (v->current_order.flags & OF_SERVICE_IF_NEEDED &&
 					!VehicleNeedsService(v)) {
+				UpdateVehicleTimetable(v, true);
 				v->cur_order_index++;
 			}
 			break;
@@ -1784,6 +1786,7 @@
 {
 	/* decrease counters */
 	v->tick_counter++;
+	v->current_order_time++;
 	if (v->u.road.reverse_ctr != 0) v->u.road.reverse_ctr--;
 
 	/* handle crashed */
@@ -1823,7 +1826,7 @@
 static void AgeRoadVehCargo(Vehicle *v)
 {
 	if (_age_cargo_skip_counter != 0) return;
-	if (v->cargo_days != 255) v->cargo_days++;
+	v->cargo.AgeCargo();
 }
 
 void RoadVeh_Tick(Vehicle *v)
@@ -1886,7 +1889,7 @@
 
 void OnNewDay_RoadVeh(Vehicle *v)
 {
-	int32 cost;
+	CommandCost cost;
 
 	if (!IsRoadVehFront(v)) return;
 
@@ -1968,10 +1971,10 @@
 
 	cost = RoadVehInfo(v->engine_type)->running_cost * _price.roadveh_running / 364;
 
-	v->profit_this_year -= cost >> 8;
+	v->profit_this_year -= cost.GetCost() >> 8;
 
 	SET_EXPENSES_TYPE(EXPENSES_ROADVEH_RUN);
-	SubtractMoneyFromPlayerFract(v->owner, cost);
+	SubtractMoneyFromPlayerFract(v->owner, CommandCost(cost));
 
 	InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
 	InvalidateWindowClasses(WC_ROADVEH_LIST);
@@ -2001,10 +2004,10 @@
  * - p2 = (bit 16) - refit only this vehicle (ignored)
  * @return cost of refit or error
  */
-int32 CmdRefitRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRefitRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
-	int32 cost;
+	CommandCost cost;
 	CargoID new_cid = GB(p2, 0, 8);
 	byte new_subtype = GB(p2, 8, 8);
 	uint16 capacity = CALLBACK_FAILED;
@@ -2060,14 +2063,13 @@
 	}
 	_returned_refit_capacity = capacity;
 
-	cost = 0;
 	if (IsHumanPlayer(v->owner) && new_cid != v->cargo_type) {
 		cost = GetRefitCost(v->engine_type);
 	}
 
 	if (flags & DC_EXEC) {
 		v->cargo_cap = capacity;
-		v->cargo_count = (v->cargo_type == new_cid) ? min(capacity, v->cargo_count) : 0;
+		v->cargo.Truncate((v->cargo_type == new_cid) ? capacity : 0);
 		v->cargo_type = new_cid;
 		v->cargo_subtype = new_subtype;
 		InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
--- a/src/roadveh_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/roadveh_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -80,8 +80,7 @@
 		SetWindowWidgetDisabledState(w, 5, !_patches.servint_roadveh);
 		SetWindowWidgetDisabledState(w, 6, !_patches.servint_roadveh);
 
-		SetDParam(0, v->string_id);
-		SetDParam(1, v->unitnumber);
+		SetDParam(0, v->index);
 		DrawWindowWidgets(w);
 
 		/* Draw running cost */
@@ -118,7 +117,7 @@
 
 		DrawRoadVehImage(v, 3, 57, 0, INVALID_VEHICLE);
 
-		SetDParam(0, GetCustomEngineName(v->engine_type));
+		SetDParam(0, v->engine_type);
 		SetDParam(1, v->build_year);
 		SetDParam(2, v->value);
 		DrawString(34, 57 + y_offset, STR_9011_BUILT_VALUE, 0);
@@ -154,10 +153,10 @@
 
 			for (const Vehicle *u = v; u != NULL; u = u->next) {
 				str = STR_8812_EMPTY;
-				if (u->cargo_count != 0) {
+				if (!u->cargo.Empty()) {
 					SetDParam(0, u->cargo_type);
-					SetDParam(1, u->cargo_count);
-					SetDParam(2, u->cargo_source);
+					SetDParam(1, u->cargo.Count());
+					SetDParam(2, u->cargo.Source());
 					str = STR_8813_FROM;
 				}
 				DrawString(34, 78 + y_offset, str, 0);
@@ -172,17 +171,17 @@
 			DrawString(34, 67 + y_offset, STR_9012_CAPACITY, 0);
 
 			str = STR_8812_EMPTY;
-			if (v->cargo_count != 0) {
+			if (!v->cargo.Empty()) {
 				SetDParam(0, v->cargo_type);
-				SetDParam(1, v->cargo_count);
-				SetDParam(2, v->cargo_source);
+				SetDParam(1, v->cargo.Count());
+				SetDParam(2, v->cargo.Source());
 				str = STR_8813_FROM;
 			}
 			DrawString(34, 78 + y_offset, str, 0);
 		}
 
 		/* Draw Transfer credits text */
-		SetDParam(0, v->cargo_feeder_share);
+		SetDParam(0, v->cargo.FeederShare());
 		DrawString(34, 90 + y_offset, STR_FEEDER_CARGO_VALUE, 0);
 
 		/* Draw service interval text */
@@ -199,8 +198,8 @@
 		switch (e->we.click.widget) {
 		case 2: /* rename */
 			v = GetVehicle(w->window_number);
-			SetDParam(0, v->unitnumber);
-			ShowQueryString(v->string_id, STR_902C_NAME_ROAD_VEHICLE, 31, 150, w, CS_ALPHANUMERAL);
+			SetDParam(0, v->index);
+			ShowQueryString(STR_VEHICLE_NAME, STR_902C_NAME_ROAD_VEHICLE, 31, 150, w, CS_ALPHANUMERAL);
 			break;
 
 		case 5: /* increase int */
@@ -283,8 +282,7 @@
 				_engine_info[v->engine_type].refit_mask == 0);
 
 		/* draw widgets & caption */
-		SetDParam(0, v->string_id);
-		SetDParam(1, v->unitnumber);
+		SetDParam(0, v->index);
 		DrawWindowWidgets(w);
 
 		if (v->u.road.crashed_ctr != 0) {
@@ -376,6 +374,7 @@
 		DeleteWindowById(WC_VEHICLE_REFIT, w->window_number);
 		DeleteWindowById(WC_VEHICLE_ORDERS, w->window_number);
 		DeleteWindowById(WC_VEHICLE_DETAILS, w->window_number);
+		DeleteWindowById(WC_VEHICLE_TIMETABLE, w->window_number);
 		break;
 
 	case WE_MOUSELOOP: {
--- a/src/saveload.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/saveload.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -26,10 +26,12 @@
 #include "saveload.h"
 #include "network/network.h"
 #include "variables.h"
+#include "table/strings.h"
+#include "strings.h"
 #include <setjmp.h>
 #include <list>
 
-extern const uint16 SAVEGAME_VERSION = 64;
+extern const uint16 SAVEGAME_VERSION = 69;
 uint16 _sl_version;       ///< the major savegame version identifier
 byte   _sl_minor_version; ///< the minor savegame version, DO NOT USE!
 
@@ -65,7 +67,8 @@
 	FILE *fh;                            ///< the file from which is read or written to
 
 	void (*excpt_uninit)();              ///< the function to execute on any encountered error
-	const char *excpt_msg;               ///< the error message
+	StringID error_str;                  ///< the translateable error message to show
+	char *extra_msg;                     ///< the error message
 	jmp_buf excpt;                       ///< @todo used to jump to "exception handler";  really ugly
 } _sl;
 
@@ -112,7 +115,7 @@
 }
 
 /** Return the size in bytes of a reference (pointer) */
-static inline size_t SlCalcRefLen() {return 2;}
+static inline size_t SlCalcRefLen() {return CheckSavegameVersion(69) ? 2 : 4;}
 
 /** Flush the output buffer by writing to disk with the given reader.
  * If the buffer pointer has not yet been set up, set it up now. Usually
@@ -136,9 +139,11 @@
 /** Error handler, calls longjmp to simulate an exception.
  * @todo this was used to have a central place to handle errors, but it is
  * pretty ugly, and seriously interferes with any multithreaded approaches */
-static void NORETURN SlError(const char *msg)
+static void NORETURN SlError(StringID string, const char *extra_msg = NULL)
 {
-	_sl.excpt_msg = msg;
+	_sl.error_str = string;
+	free(_sl.extra_msg);
+	_sl.extra_msg = (extra_msg == NULL) ? NULL : strdup(extra_msg);
 	longjmp(_sl.excpt, 0);
 }
 
@@ -224,7 +229,7 @@
 			if (HASBIT(i, 5)) {
 				i &= ~0x20;
 				if (HASBIT(i, 4))
-					SlError("Unsupported gamma");
+					SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Unsupported gamma");
 				i = (i << 8) | SlReadByte();
 			}
 			i = (i << 8) | SlReadByte();
@@ -641,9 +646,10 @@
 {
 	std::list<void *> *l = (std::list<void *> *) list;
 
-	/* Each entry is saved as 2 bytes, plus 2 bytes are used for the length
+	int type_size = CheckSavegameVersion(69) ? 2 : 4;
+	/* Each entry is saved as type_size bytes, plus type_size bytes are used for the length
 	 * of the list */
-	return l->size() * 2 + 2;
+	return l->size() * type_size + type_size;
 }
 
 
@@ -664,19 +670,19 @@
 	std::list<void *> *l = (std::list<void *> *) list;
 
 	if (_sl.save) {
-		SlWriteUint16(l->size());
+		SlWriteUint32(l->size());
 
 		std::list<void *>::iterator iter;
 		for (iter = l->begin(); iter != l->end(); ++iter) {
 			void *ptr = *iter;
-			SlWriteUint16(ReferenceToInt(ptr, conv));
+			SlWriteUint32(ReferenceToInt(ptr, conv));
 		}
 	} else {
-		uint length = SlReadUint16();
+		uint length = CheckSavegameVersion(69) ? SlReadUint16() : SlReadUint32();
 
 		/* Load each reference and push to the end of the list */
 		for (uint i = 0; i < length; i++) {
-			void *ptr = IntToReference(SlReadUint16(), conv);
+			void *ptr = IntToReference(CheckSavegameVersion(69) ? SlReadUint16() : SlReadUint32(), conv);
 			l->push_back(ptr);
 		}
 	}
@@ -768,11 +774,10 @@
 		switch (sld->cmd) {
 		case SL_VAR: SlSaveLoadConv(ptr, conv); break;
 		case SL_REF: // Reference variable, translate
-			/* @todo XXX - another artificial limitof 65K elements of pointers? */
-			if (_sl.save) { // XXX - read/write pointer as uint16? What is with higher indeces?
-				SlWriteUint16(ReferenceToInt(*(void**)ptr, (SLRefType)conv));
+			if (_sl.save) {
+				SlWriteUint32(ReferenceToInt(*(void**)ptr, (SLRefType)conv));
 			} else {
-				*(void**)ptr = IntToReference(SlReadUint16(), (SLRefType)conv);
+				*(void**)ptr = IntToReference(CheckSavegameVersion(69) ? SlReadUint16() : SlReadUint32(), (SLRefType)conv);
 			}
 			break;
 		case SL_ARR: SlArray(ptr, sld->length, conv); break;
@@ -820,7 +825,7 @@
 	}
 
 	for (; sld->cmd != SL_END; sld++) {
-		void *ptr = GetVariableAddress(object, sld);
+		void *ptr = sld->global ? sld->address : GetVariableAddress(object, sld);
 		SlObjectMember(ptr, sld);
 	}
 }
@@ -831,14 +836,7 @@
  */
 void SlGlobList(const SaveLoadGlobVarList *sldg)
 {
-	if (_sl.need_length != NL_NONE) {
-		SlSetLength(SlCalcObjLength(NULL, (const SaveLoad*)sldg));
-		if (_sl.need_length == NL_CALCLENGTH) return;
-	}
-
-	for (; sldg->cmd != SL_END; sldg++) {
-		SlObjectMember(sldg->address, (const SaveLoad*)sldg);
-	}
+	SlObject(NULL, (const SaveLoad*)sldg);
 }
 
 /**
@@ -866,7 +864,7 @@
 	/* And write the stuff */
 	proc(arg);
 
-	assert(offs == SlGetOffs());
+	if (offs != SlGetOffs()) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Invalid chunk size");
 }
 
 /**
@@ -898,9 +896,9 @@
 			_sl.obj_len = len;
 			endoffs = SlGetOffs() + len;
 			ch->load_proc();
-			assert(SlGetOffs() == endoffs);
+			if (SlGetOffs() != endoffs) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Invalid chunk size");
 		} else {
-			SlError("Invalid chunk type");
+			SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Invalid chunk type");
 		}
 		break;
 	}
@@ -1001,7 +999,7 @@
 		DEBUG(sl, 2, "Loading chunk %c%c%c%c", id >> 24, id >> 16, id >> 8, id);
 
 		ch = SlFindChunkHandler(id);
-		if (ch == NULL) SlError("found unknown tag in savegame (sync error)");
+		if (ch == NULL) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Unknown chunk type");
 		SlLoadChunk(ch);
 	}
 }
@@ -1021,7 +1019,7 @@
 	uint len;
 
 	/* Read header*/
-	if (fread(tmp, sizeof(tmp), 1, _sl.fh) != 1) SlError("file read failed");
+	if (fread(tmp, sizeof(tmp), 1, _sl.fh) != 1) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE, "File read failed");
 
 	/* Check if size is bad */
 	((uint32*)out)[0] = size = tmp[1];
@@ -1031,13 +1029,13 @@
 		size = TO_BE32(size);
 	}
 
-	if (size >= sizeof(out)) SlError("inconsistent size");
+	if (size >= sizeof(out)) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Inconsistent size");
 
 	/* Read block */
-	if (fread(out + sizeof(uint32), size, 1, _sl.fh) != 1) SlError("file read failed");
+	if (fread(out + sizeof(uint32), size, 1, _sl.fh) != 1) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE);
 
 	/* Verify checksum */
-	if (tmp[0] != lzo_adler32(0, out, size + sizeof(uint32))) SlError("bad checksum");
+	if (tmp[0] != lzo_adler32(0, out, size + sizeof(uint32))) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Bad checksum");
 
 	/* Decompress */
 	lzo1x_decompress(out + sizeof(uint32)*1, size, _sl.buf, &len, NULL);
@@ -1055,7 +1053,7 @@
 	lzo1x_1_compress(_sl.buf, size, out + sizeof(uint32)*2, &outlen, wrkmem);
 	((uint32*)out)[1] = TO_BE32(outlen);
 	((uint32*)out)[0] = TO_BE32(lzo_adler32(0, out + sizeof(uint32), outlen + sizeof(uint32)));
-	if (fwrite(out, outlen + sizeof(uint32)*2, 1, _sl.fh) != 1) SlError("file write failed");
+	if (fwrite(out, outlen + sizeof(uint32)*2, 1, _sl.fh) != 1) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE);
 }
 
 static bool InitLZO()
@@ -1099,7 +1097,6 @@
  ********** START OF MEMORY CODE (in ram)****
  ********************************************/
 
-#include "table/strings.h"
 #include "table/sprites.h"
 #include "gfx.h"
 #include "gui.h"
@@ -1178,8 +1175,7 @@
 		if (r == Z_STREAM_END)
 			break;
 
-		if (r != Z_OK)
-			SlError("inflate() failed");
+		if (r != Z_OK) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, "inflate() failed");
 	} while (_z.avail_out);
 
 	return 4096 - _z.avail_out;
@@ -1214,11 +1210,11 @@
 		r = deflate(z, mode);
 			/* bytes were emitted? */
 		if ((n=sizeof(buf) - z->avail_out) != 0) {
-			if (fwrite(buf, n, 1, _sl.fh) != 1) SlError("file write error");
+			if (fwrite(buf, n, 1, _sl.fh) != 1) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE);
 		}
 		if (r == Z_STREAM_END)
 			break;
-		if (r != Z_OK) SlError("zlib returned error code");
+		if (r != Z_OK) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, "zlib returned error code");
 	} while (z->avail_in || !z->avail_out);
 }
 
@@ -1258,6 +1254,7 @@
 extern const ChunkHandler _animated_tile_chunk_handlers[];
 extern const ChunkHandler _newgrf_chunk_handlers[];
 extern const ChunkHandler _group_chunk_handlers[];
+extern const ChunkHandler _cargopacket_chunk_handlers[];
 
 static const ChunkHandler * const _chunk_handlers[] = {
 	_misc_chunk_handlers,
@@ -1276,6 +1273,7 @@
 	_animated_tile_chunk_handlers,
 	_newgrf_chunk_handlers,
 	_group_chunk_handlers,
+	_cargopacket_chunk_handlers,
 	NULL,
 };
 
@@ -1307,6 +1305,7 @@
 		case REF_ORDER:     return ((const    Order*)obj)->index + 1;
 		case REF_ROADSTOPS: return ((const RoadStop*)obj)->index + 1;
 		case REF_ENGINE_RENEWS: return ((const EngineRenew*)obj)->index + 1;
+		case REF_CARGO_PACKET:  return ((const CargoPacket*)obj)->index + 1;
 		default: NOT_REACHED();
 	}
 
@@ -1367,6 +1366,11 @@
 				error("EngineRenews: failed loading savegame: too many EngineRenews");
 			return GetEngineRenew(index);
 		}
+		case REF_CARGO_PACKET: {
+			if (!AddBlockIfNeeded(&_CargoPacket_pool, index))
+				error("CargoPackets: failed loading savegame: too many Cargo packets");
+			return GetCargoPacket(index);
+		}
 
 		case REF_VEHICLE_OLD: {
 			/* Old vehicles were saved differently:
@@ -1475,10 +1479,28 @@
 	_ts.saveinprogress = false;
 }
 
+/** Set the error message from outside of the actual loading/saving of the game (AfterLoadGame and friends) */
+void SetSaveLoadError(StringID str)
+{
+	_sl.error_str = str;
+}
+
+/** Get the string representation of the error message */
+const char *GetSaveLoadErrorString()
+{
+	SetDParam(0, _sl.error_str);
+	SetDParamStr(1, _sl.extra_msg);
+
+	static char err_str[512];
+	GetString(err_str, _sl.save ? STR_4007_GAME_SAVE_FAILED : STR_4009_GAME_LOAD_FAILED, lastof(err_str));
+	return err_str;
+}
+
 /** Show a gui message when saving has failed */
 void SaveFileError()
 {
-	ShowErrorMessage(STR_4007_GAME_SAVE_FAILED, STR_NULL, 0, 0);
+	SetDParamStr(0, GetSaveLoadErrorString());
+	ShowErrorMessage(STR_012D, STR_NULL, 0, 0);
 	SaveFileDone();
 }
 
@@ -1492,13 +1514,16 @@
 	const SaveLoadFormat *fmt;
 	uint32 hdr[2];
 
+	_sl.excpt_uninit = NULL;
 	/* XXX - Setup setjmp error handler if an error occurs anywhere deep during
 	 * loading/saving execute a longjmp() and continue execution here */
 	if (setjmp(_sl.excpt)) {
 		AbortSaveLoad();
-		_sl.excpt_uninit();
+		if (_sl.excpt_uninit != NULL) _sl.excpt_uninit();
 
-		fprintf(stderr, "Save game failed: %s.", _sl.excpt_msg);
+		ShowInfo(GetSaveLoadErrorString());
+		fprintf(stderr, GetSaveLoadErrorString());
+
 		if (threaded) {
 			OTTD_SendThreadMessage(MSG_OTTD_SAVETHREAD_ERROR);
 		} else {
@@ -1512,9 +1537,9 @@
 	/* We have written our stuff to memory, now write it to file! */
 	hdr[0] = fmt->tag;
 	hdr[1] = TO_BE32(SAVEGAME_VERSION << 16);
-	if (fwrite(hdr, sizeof(hdr), 1, _sl.fh) != 1) SlError("file write failed");
+	if (fwrite(hdr, sizeof(hdr), 1, _sl.fh) != 1) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE);
 
-	if (!fmt->init_write()) SlError("cannot initialize compressor");
+	if (!fmt->init_write()) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, "cannot initialize compressor");
 
 	{
 		uint i;
@@ -1583,6 +1608,22 @@
 		return SL_OK;
 	}
 
+	/* XXX - Setup setjmp error handler if an error occurs anywhere deep during
+	 * loading/saving execute a longjmp() and continue execution here */
+	_sl.excpt_uninit = NULL;
+	if (setjmp(_sl.excpt)) {
+		AbortSaveLoad();
+
+		/* deinitialize compressor. */
+		if (_sl.excpt_uninit != NULL) _sl.excpt_uninit();
+
+		/* Skip the "color" character */
+		ShowInfoF(GetSaveLoadErrorString() + 3);
+
+		/* A saver/loader exception!! reinitialize all variables to prevent crash! */
+		return (mode == SL_LOAD) ? SL_REINIT : SL_ERROR;
+	}
+
 	_sl.fh = (mode == SL_SAVE) ? FioFOpenFile(filename, "wb", sb) : FioFOpenFile(filename, "rb", sb);
 
 	/* Make it a little easier to load savegames from the console */
@@ -1590,8 +1631,7 @@
 	if (_sl.fh == NULL && mode == SL_LOAD) _sl.fh = FioFOpenFile(filename, "rb", BASE_DIR);
 
 	if (_sl.fh == NULL) {
-		DEBUG(sl, 0, "Cannot open savegame '%s' for saving/loading.", filename);
-		return SL_ERROR;
+		SlError(mode == SL_SAVE ? STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE : STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE);
 	}
 
 	_sl.bufe = _sl.bufp = NULL;
@@ -1600,24 +1640,6 @@
 	_sl.includes = _desc_includes;
 	_sl.chs = _chunk_handlers;
 
-	/* XXX - Setup setjmp error handler if an error occurs anywhere deep during
-	 * loading/saving execute a longjmp() and continue execution here */
-	if (setjmp(_sl.excpt)) {
-		AbortSaveLoad();
-
-		/* deinitialize compressor. */
-		_sl.excpt_uninit();
-
-		/* A saver/loader exception!! reinitialize all variables to prevent crash! */
-		if (mode == SL_LOAD) {
-			ShowInfoF("Load game failed: %s.", _sl.excpt_msg);
-			return SL_REINIT;
-		}
-
-		ShowInfoF("Save game failed: %s.", _sl.excpt_msg);
-		return SL_ERROR;
-	}
-
 	/* General tactic is to first save the game to memory, then use an available writer
 	 * to write it to file, either in threaded mode if possible, or single-threaded */
 	if (mode == SL_SAVE) { /* SAVE game */
@@ -1649,10 +1671,7 @@
 	} else { /* LOAD game */
 		assert(mode == SL_LOAD);
 
-		if (fread(hdr, sizeof(hdr), 1, _sl.fh) != 1) {
-			DEBUG(sl, 0, "Cannot read savegame header, aborting");
-			return AbortSaveLoad();
-		}
+		if (fread(hdr, sizeof(hdr), 1, _sl.fh) != 1) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE);
 
 		/* see if we have any loader for this type. */
 		for (fmt = _saveload_formats; ; fmt++) {
@@ -1684,10 +1703,7 @@
 				DEBUG(sl, 1, "Loading savegame version %d", _sl_version);
 
 				/* Is the version higher than the current? */
-				if (_sl_version > SAVEGAME_VERSION) {
-					DEBUG(sl, 0, "Savegame version invalid");
-					return AbortSaveLoad();
-				}
+				if (_sl_version > SAVEGAME_VERSION) SlError(STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME);
 				break;
 			}
 		}
@@ -1697,13 +1713,15 @@
 
 		/* loader for this savegame type is not implemented? */
 		if (fmt->init_read == NULL) {
-			ShowInfoF("Loader for '%s' is not available.", fmt->name);
-			return AbortSaveLoad();
+			char err_str[64];
+			snprintf(err_str, lengthof(err_str), "Loader for '%s' is not available.", fmt->name);
+			SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, err_str);
 		}
 
 		if (!fmt->init_read()) {
-			DEBUG(sl, 0, "Initializing loader '%s' failed", fmt->name);
-			return AbortSaveLoad();
+			char err_str[64];
+			snprintf(err_str, lengthof(err_str), "Initializing loader '%s' failed", fmt->name);
+			SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, err_str);
 		}
 
 		/* Old maps were hardcoded to 256x256 and thus did not contain
--- a/src/saveload.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/saveload.h	Tue Jun 26 23:40:58 2007 +0000
@@ -28,6 +28,8 @@
 	SL_BMP      =  4,
 };
 
+void SetSaveLoadError(uint16 str);
+const char *GetSaveLoadErrorString();
 SaveOrLoadResult SaveOrLoad(const char *filename, int mode, Subdirectory sb);
 void WaitTillSaved();
 void DoExitSave();
@@ -55,6 +57,7 @@
 	REF_VEHICLE_OLD   = 4,
 	REF_ROADSTOPS     = 5,
 	REF_ENGINE_RENEWS = 6,
+	REF_CARGO_PACKET  = 7,
 };
 
 #define SL_MAX_VERSION 255
@@ -173,6 +176,7 @@
 
 /** SaveLoad type struct. Do NOT use this directly but use the SLE_ macros defined just below! */
 struct SaveLoad {
+	bool global;         ///< should we load a global variable or a non-global one
 	SaveLoadType cmd;    ///< the action to take with the saved/loaded type, All types need different action
 	VarType conv;        ///< type of the variable to be saved, int
 	uint16 length;       ///< (conditional) length of the variable (eg. arrays) (max array size is 65536 elements)
@@ -181,7 +185,7 @@
 	/* NOTE: This element either denotes the address of the variable for a global
 	 * variable, or the offset within a struct which is then bound to a variable
 	 * during runtime. Decision on which one to use is controlled by the function
-	 * that is called to save it. address: SlGlobList, offset: SlObject */
+	 * that is called to save it. address: global=true, offset: global=false */
 	void *address;       ///< address of variable OR offset of variable in the struct (max offset is 65536)
 };
 
@@ -189,7 +193,7 @@
 typedef SaveLoad SaveLoadGlobVarList;
 
 /* Simple variables, references (pointers) and arrays */
-#define SLE_GENERAL(cmd, base, variable, type, length, from, to) {cmd, type, length, from, to, (void*)cpp_offsetof(base, variable)}
+#define SLE_GENERAL(cmd, base, variable, type, length, from, to) {false, cmd, type, length, from, to, (void*)cpp_offsetof(base, variable)}
 #define SLE_CONDVAR(base, variable, type, from, to) SLE_GENERAL(SL_VAR, base, variable, type, 0, from, to)
 #define SLE_CONDREF(base, variable, type, from, to) SLE_GENERAL(SL_REF, base, variable, type, 0, from, to)
 #define SLE_CONDARR(base, variable, type, length, from, to) SLE_GENERAL(SL_ARR, base, variable, type, length, from, to)
@@ -210,7 +214,7 @@
 #define SLE_INCLUDE(base, variable, include_index) SLE_GENERAL(SL_INCLUDE, base, variable, 0, 0, include_index, 0)
 
 /* The same as the ones at the top, only the offset is given directly; used for unions */
-#define SLE_GENERALX(cmd, offset, type, param1, param2) {cmd, type, 0, param1, param2, (void*)(offset)}
+#define SLE_GENERALX(cmd, offset, type, param1, param2) {false, cmd, type, 0, param1, param2, (void*)(offset)}
 #define SLE_CONDVARX(offset, type, from, to) SLE_GENERALX(SL_VAR, offset, type, from, to)
 #define SLE_CONDREFX(offset, type, from, to) SLE_GENERALX(SL_REF, offset, type, from, to)
 
@@ -221,10 +225,10 @@
 #define SLE_INCLUDEX(offset, type) SLE_GENERALX(SL_INCLUDE, offset, type, 0, SL_MAX_VERSION)
 
 /* End marker */
-#define SLE_END() {SL_END, 0, 0, 0, 0, NULL}
+#define SLE_END() {false, SL_END, 0, 0, 0, 0, NULL}
 
 /* Simple variables, references (pointers) and arrays, but for global variables */
-#define SLEG_GENERAL(cmd, variable, type, length, from, to) {cmd, type, length, from, to, (void*)&variable}
+#define SLEG_GENERAL(cmd, variable, type, length, from, to) {true, cmd, type, length, from, to, (void*)&variable}
 
 #define SLEG_CONDVAR(variable, type, from, to) SLEG_GENERAL(SL_VAR, variable, type, 0, from, to)
 #define SLEG_CONDREF(variable, type, from, to) SLEG_GENERAL(SL_REF, variable, type, 0, from, to)
@@ -238,9 +242,9 @@
 #define SLEG_STR(variable, type) SLEG_CONDSTR(variable, type, lengthof(variable), 0, SL_MAX_VERSION)
 #define SLEG_LST(variable, type) SLEG_CONDLST(variable, type, 0, SL_MAX_VERSION)
 
-#define SLEG_CONDNULL(length, from, to) {SL_ARR, SLE_FILE_U8 | SLE_VAR_NULL | SLF_CONFIG_NO, length, from, to, (void*)NULL}
+#define SLEG_CONDNULL(length, from, to) {true, SL_ARR, SLE_FILE_U8 | SLE_VAR_NULL | SLF_CONFIG_NO, length, from, to, (void*)NULL}
 
-#define SLEG_END() {SL_END, 0, 0, 0, 0, NULL}
+#define SLEG_END() {true, SL_END, 0, 0, 0, 0, NULL}
 
 /** Checks if the savegame is below major.minor.
  */
--- a/src/screenshot.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/screenshot.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -485,7 +485,7 @@
 {
 	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
 	void *src = blitter->MoveTo(_screen.dst_ptr, 0, y);
-	blitter->CopyToBuffer(src, buf, _screen.width, n, pitch);
+	blitter->CopyImageToBuffer(src, buf, _screen.width, n, pitch);
 }
 
 /* generate a large piece of the world */
@@ -531,10 +531,8 @@
 	if (_game_mode == GM_EDITOR || _game_mode == GM_MENU || _local_player == PLAYER_SPECTATOR) {
 		ttd_strlcpy(_screenshot_name, "screenshot", lengthof(_screenshot_name));
 	} else {
-		const Player* p = GetPlayer(_local_player);
-		SetDParam(0, p->name_1);
-		SetDParam(1, p->name_2);
-		SetDParam(2, _date);
+		SetDParam(0, _local_player);
+		SetDParam(1, _date);
 		GetString(_screenshot_name, STR_4004, lastof(_screenshot_name));
 	}
 
--- a/src/settings.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/settings.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -1300,7 +1300,8 @@
 	    SDT_VAR(GameOptions, diff_level, SLE_UINT8, 0, 0, 0, 0,  3, 0, STR_NULL, NULL),
 	  SDT_OMANY(GameOptions, currency,  SLE_UINT8, N, 0, 0, CUSTOM_CURRENCY_ID, "GBP|USD|EUR|YEN|ATS|BEF|CHF|CZK|DEM|DKK|ESP|FIM|FRF|GRD|HUF|ISK|ITL|NLG|NOK|PLN|ROL|RUR|SIT|SEK|YTL|SKK|BRR|custom", STR_NULL, NULL, NULL),
 	  SDT_OMANY(GameOptions, units,     SLE_UINT8, N, 0, 1,     2, "imperial|metric|si", STR_NULL, NULL, NULL),
-	  SDT_OMANY(GameOptions, town_name, SLE_UINT8, 0, 0, 0,    20, "english|french|german|american|latin|silly|swedish|dutch|finnish|polish|slovakish|norwegian|hungarian|austrian|romanian|czech|swiss|danish|turkish|italian|catalan", STR_NULL, NULL, NULL),
+	/* There are only 21 predefined town_name values (0-20), but you can have more with newgrf action F so allow these bigger values (21-255). Invalid values will fallback to english on use and (undefined string) in GUI. */
+	  SDT_OMANY(GameOptions, town_name, SLE_UINT8, 0, 0, 0,   255, "english|french|german|american|latin|silly|swedish|dutch|finnish|polish|slovakish|norwegian|hungarian|austrian|romanian|czech|swiss|danish|turkish|italian|catalan", STR_NULL, NULL, NULL),
 	  SDT_OMANY(GameOptions, landscape, SLE_UINT8, 0, 0, 0,     3, "temperate|arctic|tropic|toyland", STR_NULL, NULL, ConvertLandscape),
 	    SDT_VAR(GameOptions, snow_line, SLE_UINT8, 0, 0, 7 * TILE_HEIGHT, 2 * TILE_HEIGHT, 13 * TILE_HEIGHT, 0, STR_NULL, NULL),
 	SDT_CONDOMANY(GameOptions,autosave, SLE_UINT8, 0, 22,             N, 0, 0, 0, "", STR_NULL, NULL, NULL),
@@ -1341,7 +1342,10 @@
 	SDT_VAR(Patches, scrollwheel_scrolling,SLE_UINT8,S,MS, 0,  0,  2, 0, STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLLING, NULL),
 	SDT_VAR(Patches,scrollwheel_multiplier,SLE_UINT8,S, 0, 5,  1, 15, 1, STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER,NULL),
 	SDT_BOOL(Patches, pause_on_newgame,              S, 0, false,        STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME,     NULL),
-	SDT_BOOL(Patches, advanced_vehicle_list,         S, 0, true,        STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS,     NULL),
+	SDT_BOOL(Patches, advanced_vehicle_list,         S, 0, true,         STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS,     NULL),
+	SDT_BOOL(Patches, timetable_in_ticks,            S, 0, false,        STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS,    NULL),
+	SDT_BOOL(Patches, loading_indicators,            S, 0, true,         STR_CONFIG_PATCHES_LOADING_INDICATORS,    RedrawScreen),
+	 SDT_VAR(Patches, default_rail_type,  SLE_UINT8, S,MS,  4, 0,  6, 0, STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE,     NULL),
 
 	/***************************************************************************/
 	/* Construction section of the GUI-configure patches window */
@@ -1387,6 +1391,7 @@
 	SDT_BOOL(Patches, wagon_speed_limits,            0, 0,  true,                    STR_CONFIG_PATCHES_WAGONSPEEDLIMITS,     NULL),
 	SDT_CONDBOOL(Patches, disable_elrails, 38, SL_MAX_VERSION, 0, 0, false,          STR_CONFIG_PATCHES_DISABLE_ELRAILS,      SettingsDisableElrail),
 	SDT_CONDVAR(Patches, freight_trains, SLE_UINT8, 39, SL_MAX_VERSION, 0, 0, 1, 1, 255, 1, STR_CONFIG_PATCHES_FREIGHT_TRAINS, NULL),
+	SDT_CONDBOOL(Patches, timetabling,              67, SL_MAX_VERSION, 0, 0, true,  STR_CONFIG_PATCHES_TIMETABLE_ALLOW,      NULL),
 
 	/***************************************************************************/
 	/* Station section of the GUI-configure patches window */
@@ -1616,7 +1621,7 @@
 
 	for (item = group->item; item != NULL; item = item->next) {
 		GRFConfig *c = CallocT<GRFConfig>(1);
-		c->full_path = strdup(item->name);
+		c->filename = strdup(item->name);
 
 		/* Parse parameters */
 		if (*item->value != '\0') {
@@ -1693,7 +1698,7 @@
 		char params[512];
 		GRFBuildParamList(params, c, lastof(params));
 
-		*item = ini_item_alloc(group, c->full_path, strlen(c->full_path));
+		*item = ini_item_alloc(group, c->filename, strlen(c->filename));
 		(*item)->value = (char*)pool_strdup(&ini->pool, params, strlen(params));
 		item = &(*item)->next;
 	}
@@ -1760,7 +1765,7 @@
  * The new value is properly clamped to its minimum/maximum when setting
  * @see _patch_settings
  */
-int32 CmdChangePatchSetting(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdChangePatchSetting(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	const SettingDesc *sd = GetSettingDescription(p1);
 
@@ -1776,7 +1781,7 @@
 		InvalidateWindow(WC_GAME_OPTIONS, 0);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Top function to save the new value of an element of the Patches struct
--- a/src/settings_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/settings_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -24,6 +24,7 @@
 #include "vehicle.h"
 #include "date.h"
 #include "helpers.hpp"
+#include "newgrf_townname.h"
 
 static uint32 _difficulty_click_a;
 static uint32 _difficulty_click_b;
@@ -66,19 +67,44 @@
 	return buf;
 }
 
-static StringID _town_names[SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 2] = {STR_NULL};
+int _nb_orig_names = SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1;
+static StringID *_town_names = NULL;
+static StringID *_grf_names = NULL;
+static int _nb_grf_names = 0;
 
 void SortTownGeneratorNames()
 {
-	int nb_town_names = SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1;
-	/* Init the strings */
-	if (_town_names[0] == STR_NULL) {
-		for (int i = 0; i < nb_town_names; i++) _town_names[i] = STR_TOWNNAME_ORIGINAL_ENGLISH + i;
-		_town_names[nb_town_names] = INVALID_STRING_ID;
-	}
+	int n = 0;
+
+	/* Get Newgrf generators' names */
+	free(_grf_names);
+	_grf_names = GetGRFTownNameList();
+	_nb_grf_names = 0;
+	for (StringID *s = _grf_names; *s != INVALID_STRING_ID; s++) _nb_grf_names++;
+
+	/* Prepare the list */
+	free(_town_names);
+	_town_names = MallocT<StringID>(_nb_orig_names + _nb_grf_names + 1);
+
+	/* Put the original strings */
+	for (int i = 0; i < _nb_orig_names; i++) _town_names[n++] = STR_TOWNNAME_ORIGINAL_ENGLISH + i;
+
+	/* Put the grf strings */
+	for (int i = 0; i < _nb_grf_names; i++) _town_names[n++] = _grf_names[i];
+
+	/* Put the terminator */
+	_town_names[n] = INVALID_STRING_ID;
 
 	/* Sort the strings */
-	qsort(&_town_names[0], nb_town_names, sizeof(StringID), &StringIDSorter);
+	qsort(&_town_names[0], _nb_orig_names + _nb_grf_names, sizeof(StringID), &StringIDSorter);
+}
+
+static inline StringID TownName(int town_name)
+{
+	if (town_name < _nb_orig_names) return STR_TOWNNAME_ORIGINAL_ENGLISH + town_name;
+	town_name -= _nb_orig_names;
+	if (town_name < _nb_grf_names) return _grf_names[town_name];
+	return STR_UNDEFINED;
 }
 
 static int GetCurRes()
@@ -120,7 +146,7 @@
 		SetDParam(1, _currency_specs[_opt_ptr->currency].name);
 		SetDParam(2, STR_UNITS_IMPERIAL + _opt_ptr->units);
 		SetDParam(3, STR_02E9_DRIVE_ON_LEFT + _opt_ptr->road_side);
-		SetDParam(4, STR_TOWNNAME_ORIGINAL_ENGLISH + _opt_ptr->town_name);
+		SetDParam(4, TownName(_opt_ptr->town_name));
 		SetDParam(5, _autosave_dropdown[_opt_ptr->autosave]);
 		SetDParam(6, SPECSTR_LANGUAGE_START + _dynlang.curr);
 		i = GetCurRes();
@@ -152,8 +178,8 @@
 		} return;
 		case 13: case 14: { /* Setup townname dropdown */
 			uint sel = 0;
-			for (uint i = 0; i < lengthof(_town_names) - 1; i++) {
-				if (_town_names[i] == STR_TOWNNAME_ORIGINAL_ENGLISH + _opt_ptr->town_name) {
+			for (uint i = 0; _town_names[i] != INVALID_STRING_ID; i++) {
+				if (_town_names[i] == TownName(_opt_ptr->town_name)) {
 					sel = i;
 					break;
 				}
@@ -214,7 +240,12 @@
 			break;
 		case 14: /* Town names */
 			if (_game_mode == GM_MENU) {
-				_opt_ptr->town_name = _town_names[e->we.dropdown.index] - STR_TOWNNAME_ORIGINAL_ENGLISH;
+				for (uint i = 0; _town_names[i] != INVALID_STRING_ID; i++) {
+					if (_town_names[e->we.dropdown.index] == TownName(i)) {
+						_opt_ptr->town_name = i;
+						break;
+					}
+				}
 				InvalidateWindow(WC_GAME_OPTIONS, 0);
 			}
 			break;
@@ -251,7 +282,7 @@
  * @param p1 the side of the road; 0 = left side and 1 = right side
  * @param p2 unused
  */
-int32 CmdSetRoadDriveSide(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSetRoadDriveSide(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	/* Check boundaries and you can only change this if NO vehicles have been built yet,
 	 * except in the intro-menu where of course it's always possible to do so. */
@@ -261,7 +292,7 @@
 		_opt_ptr->road_side = p1;
 		InvalidateWindow(WC_GAME_OPTIONS,0);
 	}
-	return 0;
+	return CommandCost();
 }
 
 static const Widget _game_options_widgets[] = {
@@ -621,6 +652,9 @@
 	"scrollwheel_multiplier",
 	"pause_on_newgame",
 	"advanced_vehicle_list",
+	"loading_indicators",
+	"timetable_in_ticks",
+	"default_rail_type",
 };
 
 static const char *_patches_construction[] = {
@@ -703,6 +737,7 @@
 	"wagon_speed_limits",
 	"disable_elrails",
 	"freight_trains",
+	"timetabling",
 };
 
 struct PatchEntry {
@@ -945,7 +980,7 @@
 {   WWT_CLOSEBOX,   RESIZE_NONE,    10,     0,    10,     0,    13, STR_00C5,                        STR_018B_CLOSE_WINDOW},
 {    WWT_CAPTION,   RESIZE_NONE,    10,    11,   369,     0,    13, STR_CONFIG_PATCHES_CAPTION,      STR_018C_WINDOW_TITLE_DRAG_THIS},
 {      WWT_PANEL,   RESIZE_NONE,    10,     0,   369,    14,    41, 0x0,                             STR_NULL},
-{      WWT_PANEL,   RESIZE_NONE,    10,     0,   369,    42,   370, 0x0,                             STR_NULL},
+{      WWT_PANEL,   RESIZE_NONE,    10,     0,   369,    42,   380, 0x0,                             STR_NULL},
 
 {    WWT_TEXTBTN,   RESIZE_NONE,     3,    10,    96,    16,    27, STR_CONFIG_PATCHES_GUI,          STR_NULL},
 {    WWT_TEXTBTN,   RESIZE_NONE,     3,    97,   183,    16,    27, STR_CONFIG_PATCHES_CONSTRUCTION, STR_NULL},
@@ -957,7 +992,7 @@
 };
 
 static const WindowDesc _patches_selection_desc = {
-	WDP_CENTER, WDP_CENTER, 370, 371,
+	WDP_CENTER, WDP_CENTER, 370, 381,
 	WC_GAME_OPTIONS, WC_NONE,
 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
 	_patches_selection_widgets,
--- a/src/ship_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ship_cmd.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -11,6 +11,7 @@
 #include "map.h"
 #include "tile.h"
 #include "vehicle.h"
+#include "timetable.h"
 #include "command.h"
 #include "pathfind.h"
 #include "station_map.h"
@@ -175,7 +176,7 @@
 
 void OnNewDay_Ship(Vehicle *v)
 {
-	int32 cost;
+	CommandCost cost;
 
 	if ((++v->day_counter & 7) == 0)
 		DecreaseVehicleValue(v);
@@ -188,11 +189,11 @@
 
 	if (v->vehstatus & VS_STOPPED) return;
 
-	cost = GetVehicleProperty(v, 0x0F, ShipVehInfo(v->engine_type)->running_cost) * _price.ship_running / 364;
-	v->profit_this_year -= cost >> 8;
+	cost.AddCost(GetVehicleProperty(v, 0x0F, ShipVehInfo(v->engine_type)->running_cost) * _price.ship_running / 364);
+	v->profit_this_year -= cost.GetCost() >> 8;
 
 	SET_EXPENSES_TYPE(EXPENSES_SHIP_RUN);
-	SubtractMoneyFromPlayerFract(v->owner, cost);
+	SubtractMoneyFromPlayerFract(v->owner, CommandCost(cost));
 
 	InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
 	/* we need this for the profit */
@@ -257,6 +258,7 @@
 			if (!(v->current_order.flags & OF_PART_OF_ORDERS)) return;
 			if (v->current_order.flags & OF_SERVICE_IF_NEEDED &&
 					!VehicleNeedsService(v)) {
+				UpdateVehicleTimetable(v, true);
 				v->cur_order_index++;
 			}
 			break;
@@ -403,9 +405,9 @@
 	return (t < v->progress);
 }
 
-static int32 EstimateShipCost(EngineID engine_type)
+static CommandCost EstimateShipCost(EngineID engine_type)
 {
-	return GetEngineProperty(engine_type, 0x0A, ShipVehInfo(engine_type)->base_cost) * (_price.ship_base>>3)>>5;
+	return CommandCost(GetEngineProperty(engine_type, 0x0A, ShipVehInfo(engine_type)->base_cost) * (_price.ship_base >> 3) >> 5);
 }
 
 static void ShipArrivesAt(const Vehicle* v, Station* st)
@@ -648,6 +650,7 @@
 	TrackBits tracks;
 
 	v->tick_counter++;
+	v->current_order_time++;
 
 	if (v->breakdown_ctr != 0) {
 		if (v->breakdown_ctr <= 2) {
@@ -693,6 +696,7 @@
 						DistanceManhattan(v->dest_tile, gp.new_tile) <= 3) {
 					/* We got within 3 tiles of our target buoy, so let's skip to our
 					 * next order */
+					UpdateVehicleTimetable(v, true);
 					v->cur_order_index++;
 					v->current_order.type = OT_DUMMY;
 					InvalidateVehicleOrder(v);
@@ -780,7 +784,7 @@
 static void AgeShipCargo(Vehicle *v)
 {
 	if (_age_cargo_skip_counter != 0) return;
-	if (v->cargo_days != 255) v->cargo_days++;
+	v->cargo.AgeCargo();
 }
 
 void Ship_Tick(Vehicle *v)
@@ -809,9 +813,9 @@
  * @param p1 ship type being built (engine)
  * @param p2 bit 0 when set, the unitnumber will be 0, otherwise it will be a free number
  */
-int32 CmdBuildShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 value;
+	CommandCost value;
 	Vehicle *v;
 	UnitID unit_num;
 	Engine *e;
@@ -857,7 +861,7 @@
 		v->cargo_type = svi->cargo_type;
 		v->cargo_subtype = 0;
 		v->cargo_cap = svi->capacity;
-		v->value = value;
+		v->value = value.GetCost();
 
 		v->last_station_visited = INVALID_STATION;
 		v->max_speed = svi->max_speed;
@@ -904,7 +908,7 @@
  * @param p1 vehicle ID to be sold
  * @param p2 unused
  */
-int32 CmdSellShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSellShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 
@@ -929,7 +933,7 @@
 		DeleteVehicle(v);
 	}
 
-	return -(int32)v->value;
+	return CommandCost(-v->value);
 }
 
 /** Start/Stop a ship.
@@ -938,7 +942,7 @@
  * @param p1 ship ID to start/stop
  * @param p2 unused
  */
-int32 CmdStartStopShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdStartStopShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 	uint16 callback;
@@ -968,7 +972,7 @@
 		InvalidateWindowClasses(WC_SHIPS_LIST);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Send a ship to the depot.
@@ -979,7 +983,7 @@
  * - p2 bit 0-3 - DEPOT_ flags (see vehicle.h)
  * - p2 bit 8-10 - VLW flag (for mass goto depot)
  */
-int32 CmdSendShipToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSendShipToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 	const Depot *dep;
@@ -1010,7 +1014,7 @@
 				TOGGLEBIT(v->current_order.flags, OFB_HALT_IN_DEPOT);
 				InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 			}
-			return 0;
+			return CommandCost();
 		}
 
 		if (p2 & DEPOT_DONT_CANCEL) return CMD_ERROR; // Requested no cancelation of depot orders
@@ -1024,7 +1028,7 @@
 			v->current_order.flags = 0;
 			InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 		}
-		return 0;
+		return CommandCost();
 	}
 
 	dep = FindClosestShipDepot(v);
@@ -1042,7 +1046,7 @@
 		InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -1056,10 +1060,10 @@
  * - p2 = (bit 16) - refit only this vehicle (ignored)
  * @return cost of refit or error
  */
-int32 CmdRefitShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRefitShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
-	int32 cost;
+	CommandCost cost;
 	CargoID new_cid = GB(p2, 0, 8); //gets the cargo number
 	byte new_subtype = GB(p2, 8, 8);
 	uint16 capacity = CALLBACK_FAILED;
@@ -1100,14 +1104,13 @@
 	}
 	_returned_refit_capacity = capacity;
 
-	cost = 0;
 	if (IsHumanPlayer(v->owner) && new_cid != v->cargo_type) {
 		cost = GetRefitCost(v->engine_type);
 	}
 
 	if (flags & DC_EXEC) {
 		v->cargo_cap = capacity;
-		v->cargo_count = (v->cargo_type == new_cid) ? min(v->cargo_cap, v->cargo_count) : 0;
+		v->cargo.Truncate((v->cargo_type == new_cid) ? capacity : 0);
 		v->cargo_type = new_cid;
 		v->cargo_subtype = new_subtype;
 		InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
--- a/src/ship_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ship_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -38,8 +38,7 @@
 		SetWindowWidgetDisabledState(w, 5, !_patches.servint_ships);
 		SetWindowWidgetDisabledState(w, 6, !_patches.servint_ships);
 
-		SetDParam(0, v->string_id);
-		SetDParam(1, v->unitnumber);
+		SetDParam(0, v->index);
 		DrawWindowWidgets(w);
 
 		/* Draw running cost */
@@ -83,8 +82,8 @@
 
 		DrawShipImage(v, 3, 57, INVALID_VEHICLE);
 
+		SetDParam(0, v->engine_type);
 		SetDParam(1, v->build_year);
-		SetDParam(0, GetCustomEngineName(v->engine_type));
 		SetDParam(2, v->value);
 		DrawString(74, 57, STR_9816_BUILT_VALUE, 0);
 
@@ -93,16 +92,16 @@
 		DrawString(74, 67, STR_9817_CAPACITY, 0);
 
 		str = STR_8812_EMPTY;
-		if (v->cargo_count != 0) {
+		if (!v->cargo.Empty()) {
 			SetDParam(0, v->cargo_type);
-			SetDParam(1, v->cargo_count);
-			SetDParam(2, v->cargo_source);
+			SetDParam(1, v->cargo.Count());
+			SetDParam(2, v->cargo.Source());
 			str = STR_8813_FROM;
 		}
 		DrawString(74, 78, str, 0);
 
 		/* Draw Transfer credits text */
-		SetDParam(0, v->cargo_feeder_share);
+		SetDParam(0, v->cargo.FeederShare());
 		DrawString(74, 89, STR_FEEDER_CARGO_VALUE, 0);
 
 	} break;
@@ -113,8 +112,8 @@
 		switch (e->we.click.widget) {
 		case 2: /* rename */
 			v = GetVehicle(w->window_number);
-			SetDParam(0, v->unitnumber);
-			ShowQueryString(v->string_id, STR_9831_NAME_SHIP, 31, 150, w, CS_ALPHANUMERAL);
+			SetDParam(0, v->index);
+			ShowQueryString(STR_VEHICLE_NAME, STR_9831_NAME_SHIP, 31, 150, w, CS_ALPHANUMERAL);
 			break;
 		case 5: /* increase int */
 			mod = _ctrl_pressed? 5 : 10;
@@ -208,8 +207,7 @@
 			SetWindowWidgetDisabledState(w, 11, !is_localplayer);
 
 			/* draw widgets & caption */
-			SetDParam(0, v->string_id);
-			SetDParam(1, v->unitnumber);
+			SetDParam(0, v->index);
 			DrawWindowWidgets(w);
 
 			if (v->breakdown_ctr == 1) {
@@ -297,6 +295,7 @@
 			DeleteWindowById(WC_VEHICLE_ORDERS, w->window_number);
 			DeleteWindowById(WC_VEHICLE_REFIT, w->window_number);
 			DeleteWindowById(WC_VEHICLE_DETAILS, w->window_number);
+			DeleteWindowById(WC_VEHICLE_TIMETABLE, w->window_number);
 			break;
 
 		case WE_MOUSELOOP: {
--- a/src/signs.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/signs.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -40,7 +40,7 @@
 static void UpdateSignVirtCoords(Sign *si)
 {
 	Point pt = RemapCoords(si->x, si->y, si->z);
-	SetDParam(0, si->str);
+	SetDParam(0, si->index);
 	UpdateViewportSignPos(&si->sign, pt.x, pt.y - 6, STR_2806);
 }
 
@@ -123,7 +123,7 @@
  * @param p1 unused
  * @param p2 unused
  */
-int32 CmdPlaceSign(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdPlaceSign(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Sign *si;
 
@@ -149,7 +149,7 @@
 		_total_signs++;
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Rename a sign. If the new name of the sign is empty, we assume
@@ -161,7 +161,7 @@
  * @param p2 unused
  * @return 0 if succesfull, otherwise CMD_ERROR
  */
-int32 CmdRenameSign(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRenameSign(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidSignID(p1)) return CMD_ERROR;
 
@@ -204,7 +204,7 @@
 		}
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /**
--- a/src/signs_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/signs_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -88,7 +88,8 @@
 				if (si->owner != OWNER_NONE)
 					DrawPlayerIcon(si->owner, 4, y + 1);
 
-				DrawString(22, y, si->str, 8);
+				SetDParam(0, si->index);
+				DrawString(22, y, STR_SIGN_NAME, 8);
 				y += 10;
 			}
 		}
--- a/src/squirrel_helper.hpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/squirrel_helper.hpp	Tue Jun 26 23:40:58 2007 +0000
@@ -57,6 +57,7 @@
 	template <> inline int Return<int8>        (HSQUIRRELVM vm, int8 res)        { sq_pushinteger(vm, res); return 1; }
 	template <> inline int Return<int16>       (HSQUIRRELVM vm, int16 res)       { sq_pushinteger(vm, res); return 1; }
 	template <> inline int Return<int32>       (HSQUIRRELVM vm, int32 res)       { sq_pushinteger(vm, res); return 1; }
+	template <> inline int Return<int64>       (HSQUIRRELVM vm, int64 res)       { sq_pushinteger(vm, ClampToI32(res)); return 1; }
 	template <> inline int Return<bool>        (HSQUIRRELVM vm, bool res)        { sq_pushbool   (vm, res); return 1; }
 	template <> inline int Return<char *>      (HSQUIRRELVM vm, char *res)       { if (res == NULL) sq_pushnull(vm); else sq_pushstring (vm, OTTD2FS(res), strlen(res)); free(res); return 1; }
 	template <> inline int Return<const char *>(HSQUIRRELVM vm, const char *res) { if (res == NULL) sq_pushnull(vm); else sq_pushstring (vm, OTTD2FS(res), strlen(res)); return 1; }
--- a/src/station.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/station.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -79,6 +79,10 @@
 
 	free(speclist);
 	xy = 0;
+
+	for (CargoID c = 0; c < NUM_CARGO; c++) {
+		goods[c].cargo.Truncate(0);
+	}
 }
 
 void* Station::operator new(size_t size)
--- a/src/station.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/station.h	Tue Jun 26 23:40:58 2007 +0000
@@ -12,34 +12,26 @@
 #include "tile.h"
 #include "road.h"
 #include "newgrf_station.h"
+#include "cargopacket.h"
 #include <list>
 
-static const StationID INVALID_STATION = 0xFFFF;
 static const byte INITIAL_STATION_RATING = 175;
 
 struct GoodsEntry {
 	GoodsEntry() :
-		waiting_acceptance(0),
-		unload_pending(0),
-		days_since_pickup(0),
+		acceptance(false),
+		days_since_pickup(255),
 		rating(INITIAL_STATION_RATING),
-		enroute_from(INVALID_STATION),
-		enroute_from_xy(INVALID_TILE),
 		last_speed(0),
-		last_age(255),
-		feeder_profit(0)
+		last_age(255)
 	{}
 
-	uint16 waiting_acceptance;
-	uint16 unload_pending;        ///< records how much cargo is awaiting transfer during gradual loading to allow correct fee calc
+	bool acceptance;
 	byte days_since_pickup;
 	byte rating;
-	StationID enroute_from;
-	TileIndex enroute_from_xy;
-	byte enroute_time;
 	byte last_speed;
 	byte last_age;
-	int32 feeder_profit;
+	CargoList cargo; ///< The cargo packets of cargo waiting in this station
 };
 
 /** A Stop for a Road Vehicle */
--- a/src/station_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/station_cmd.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -285,11 +285,7 @@
 	}
 
 	tmp = free_names & ((1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 6) | (1 << 7) | (1 << 12) | (1 << 26) | (1 << 27) | (1 << 28) | (1 << 29) | (1 << 30));
-	if (tmp == 0) {
-		_error_message = STR_3007_TOO_MANY_STATIONS_LOADING;
-		return false;
-	}
-	found = FindFirstBit(tmp);
+	found = (tmp == 0) ? M(STR_SV_STNAME_FALLBACK) : FindFirstBit(tmp);
 
 done:
 	st->string_id = found + STR_SV_STNAME;
@@ -355,7 +351,7 @@
 	uint mask = 0;
 
 	for (CargoID i = 0; i < NUM_CARGO; i++) {
-		if (st->goods[i].waiting_acceptance & 0x8000) mask |= 1 << i;
+		if (st->goods[i].acceptance) mask |= 1 << i;
 	}
 	return mask;
 }
@@ -536,7 +532,7 @@
 				(is_passengers && !(st->facilities & (byte)~FACIL_TRUCK_STOP)))
 			amt = 0;
 
-		SB(st->goods[i].waiting_acceptance, 12, 4, amt);
+		st->goods[i].acceptance = (amt >= 8);
 	}
 
 	// Only show a message in case the acceptance was actually changed.
@@ -612,13 +608,13 @@
 	UpdateStationSignCoord(st);
 }
 
-static int32 ClearTile_Station(TileIndex tile, byte flags);
+static CommandCost ClearTile_Station(TileIndex tile, byte flags);
 
 // Tries to clear the given area. Returns the cost in case of success.
 // Or an error code if it failed.
-int32 CheckFlatLandBelow(TileIndex tile, uint w, uint h, uint flags, uint invalid_dirs, StationID* station, bool check_clear = true)
+CommandCost CheckFlatLandBelow(TileIndex tile, uint w, uint h, uint flags, uint invalid_dirs, StationID* station, bool check_clear = true)
 {
-	int32 cost = 0;
+	CommandCost cost;
 	int allowed_z = -1;
 
 	BEGIN_TILE_LOOP(tile_cur, w, h, tile) {
@@ -653,7 +649,7 @@
 					(invalid_dirs & 8 && !(tileh & SLOPE_NW) && (uint)h_cur == h)) {
 				return_cmd_error(STR_0007_FLAT_LAND_REQUIRED);
 			}
-			cost += _price.terraform;
+			cost.AddCost(_price.terraform);
 			flat_z += TILE_HEIGHT;
 		}
 
@@ -680,9 +676,9 @@
 				}
 			}
 		} else if (check_clear) {
-			int32 ret = DoCommand(tile_cur, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
+			CommandCost ret = DoCommand(tile_cur, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 			if (CmdFailed(ret)) return ret;
-			cost += ret;
+			cost.AddCost(ret);
 		}
 	} END_TILE_LOOP(tile_cur, w, h, tile)
 
@@ -801,10 +797,10 @@
  * - p2 = (bit  8-15) - custom station class
  * - p2 = (bit 16-23) - custom station id
  */
-int32 CmdBuildRailroadStation(TileIndex tile_org, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildRailroadStation(TileIndex tile_org, uint32 flags, uint32 p1, uint32 p2)
 {
 	int w_org, h_org;
-	int32 ret;
+	CommandCost ret;
 
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 
@@ -838,7 +834,7 @@
 	//  for detail info, see: https://sourceforge.net/tracker/index.php?func=detail&aid=1029064&group_id=103924&atid=636365
 	ret = CheckFlatLandBelow(tile_org, w_org, h_org, flags & ~DC_EXEC, 5 << axis, _patches.nonuniform_stations ? &est : NULL);
 	if (CmdFailed(ret)) return ret;
-	int32 cost = ret + (numtracks * _price.train_station_track + _price.train_station_length) * plat_len;
+	CommandCost cost(ret.GetCost() + (numtracks * _price.train_station_track + _price.train_station_length) * plat_len);
 
 	Station *st = NULL;
 	bool check_surrounding = true;
@@ -1054,7 +1050,7 @@
  * @param p1 start_tile
  * @param p2 unused
  */
-int32 CmdRemoveFromRailroadStation(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveFromRailroadStation(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	TileIndex start = p1 == 0 ? tile : p1;
 
@@ -1121,11 +1117,11 @@
 	/* If we've not removed any tiles, give an error */
 	if (quantity == 0) return CMD_ERROR;
 
-	return _price.remove_rail_station * quantity;
+	return CommandCost(_price.remove_rail_station * quantity);
 }
 
 
-static int32 RemoveRailroadStation(Station *st, TileIndex tile, uint32 flags)
+static CommandCost RemoveRailroadStation(Station *st, TileIndex tile, uint32 flags)
 {
 	/* if there is flooding and non-uniform stations are enabled, remove platforms tile by tile */
 	if (_current_player == OWNER_WATER && _patches.nonuniform_stations)
@@ -1142,7 +1138,7 @@
 
 	assert(w != 0 && h != 0);
 
-	int32 cost = 0;
+	CommandCost cost;
 	/* clear all areas of the station */
 	do {
 		int w_bak = w;
@@ -1151,7 +1147,7 @@
 			if (st->TileBelongsToRailStation(tile)) {
 				if (!EnsureNoVehicle(tile))
 					return CMD_ERROR;
-				cost += _price.remove_rail_station;
+				cost.AddCost(_price.remove_rail_station);
 				if (flags & DC_EXEC) {
 					Track track = GetRailStationTrack(tile);
 					DoClearSquare(tile);
@@ -1191,7 +1187,7 @@
  * @return            The cost and state of the operation
  * @retval CMD_ERROR  An error occured during the operation.
  */
-int32 DoConvertStationRail(TileIndex tile, RailType totype, bool exec)
+CommandCost DoConvertStationRail(TileIndex tile, RailType totype, bool exec)
 {
 	const Station* st = GetStationByTile(tile);
 
@@ -1211,7 +1207,7 @@
 		YapfNotifyTrackLayoutChange(tile, GetRailStationTrack(tile));
 	}
 
-	return _price.build_rail / 2;
+	return CommandCost(_price.build_rail / 2);
 }
 
 /**
@@ -1243,7 +1239,7 @@
  *           bit 2..4: the roadtypes
  *           bit 5: allow stations directly adjacent to other stations.
  */
-int32 CmdBuildRoadStop(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildRoadStop(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	bool type = HASBIT(p2, 0);
 	bool is_drive_through = HASBIT(p2, 1);
@@ -1267,7 +1263,7 @@
 
 	if (!(flags & DC_NO_TOWN_RATING) && !CheckIfAuthorityAllows(tile)) return CMD_ERROR;
 
-	int32 cost = 0;
+	CommandCost cost;
 
 	/* Not allowed to build over this road */
 	if (build_over_road) {
@@ -1340,7 +1336,7 @@
 		st->sign.width_1 = 0;
 	}
 
-	cost += (type) ? _price.build_truck_station : _price.build_bus_station;
+	cost.AddCost((type) ? _price.build_truck_station : _price.build_bus_station);
 
 	if (flags & DC_EXEC) {
 		// Insert into linked list of RoadStops
@@ -1371,7 +1367,7 @@
 }
 
 // Remove a bus station
-static int32 RemoveRoadStop(Station *st, uint32 flags, TileIndex tile)
+static CommandCost RemoveRoadStop(Station *st, uint32 flags, TileIndex tile)
 {
 	if (_current_player != OWNER_WATER && !CheckOwnership(st->owner)) {
 		return CMD_ERROR;
@@ -1416,7 +1412,7 @@
 		DeleteStationIfEmpty(st);
 	}
 
-	return (is_truck) ? _price.remove_truck_station : _price.remove_bus_station;
+	return CommandCost((is_truck) ? _price.remove_truck_station : _price.remove_bus_station);
 }
 
 /** Remove a bus or truck stop
@@ -1425,7 +1421,7 @@
  * @param p1 not used
  * @param p2 bit 0: 0 for Bus stops, 1 for truck stops
  */
-int32 CmdRemoveRoadStop(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveRoadStop(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	/* Make sure the specified tile is a road stop of the correct type */
 	if (!IsTileType(tile, MP_STATION) || !IsRoadStop(tile) || (uint32)GetRoadStopType(tile) != p2) return CMD_ERROR;
@@ -1438,10 +1434,10 @@
 			DiagDirToRoadBits(GetRoadStopDir(tile));
 	bool is_towns_road = is_drive_through && GetStopBuiltOnTownRoad(tile);
 
-	int32 ret = RemoveRoadStop(st, flags, tile);
+	CommandCost ret = RemoveRoadStop(st, flags, tile);
 
 	/* If the stop was a drive-through stop replace the road */
-	if ((flags & DC_EXEC) && !CmdFailed(ret) && is_drive_through) {
+	if ((flags & DC_EXEC) && CmdSucceeded(ret) && is_drive_through) {
 		/* Rebuild the drive throuhg road stop. As a road stop can only be
 		 * removed by the owner of the roadstop, _current_player is the
 		 * owner of the road stop. */
@@ -1550,7 +1546,7 @@
  * @param p1 airport type, @see airport.h
  * @param p2 (bit 0) - allow airports directly adjacent to other airports.
  */
-int32 CmdBuildAirport(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildAirport(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	bool airport_upgrade = true;
 
@@ -1582,9 +1578,9 @@
 	int w = afc->size_x;
 	int h = afc->size_y;
 
-	int32 ret = CheckFlatLandBelow(tile, w, h, flags, 0, NULL);
+	CommandCost ret = CheckFlatLandBelow(tile, w, h, flags, 0, NULL);
 	if (CmdFailed(ret)) return ret;
-	int32 cost = ret;
+	CommandCost cost(ret.GetCost());
 
 	Station *st = NULL;
 
@@ -1638,7 +1634,7 @@
 		}
 	}
 
-	cost += _price.build_airport * w * h;
+	cost.AddCost(_price.build_airport * w * h);
 
 	if (flags & DC_EXEC) {
 		st->airport_tile = tile;
@@ -1676,7 +1672,7 @@
 	return cost;
 }
 
-static int32 RemoveAirport(Station *st, uint32 flags)
+static CommandCost RemoveAirport(Station *st, uint32 flags)
 {
 	if (_current_player != OWNER_WATER && !CheckOwnership(st->owner))
 		return CMD_ERROR;
@@ -1687,7 +1683,7 @@
 	int w = afc->size_x;
 	int h = afc->size_y;
 
-	int32 cost = w * h * _price.remove_airport;
+	CommandCost cost(w * h * _price.remove_airport);
 
 	Vehicle *v;
 	FOR_ALL_VEHICLES(v) {
@@ -1730,7 +1726,7 @@
  * @param p1 unused
  * @param p2 unused
  */
-int32 CmdBuildBuoy(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildBuoy(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 
@@ -1769,7 +1765,7 @@
 		st_auto_delete.Release();
 	}
 
-	return _price.build_dock;
+	return CommandCost(_price.build_dock);
 }
 
 /* Checks if any ship is servicing the buoy specified. Returns yes or no */
@@ -1789,7 +1785,7 @@
 	return false;
 }
 
-static int32 RemoveBuoy(Station *st, uint32 flags)
+static CommandCost RemoveBuoy(Station *st, uint32 flags)
 {
 	/* XXX: strange stuff */
 	if (!IsValidPlayer(_current_player))  return_cmd_error(INVALID_STRING_ID);
@@ -1821,7 +1817,7 @@
 		DeleteStationIfEmpty(st);
 	}
 
-	return _price.remove_truck_station;
+	return CommandCost(_price.remove_truck_station);
 }
 
 static const TileIndexDiffC _dock_tileoffs_chkaround[] = {
@@ -1839,9 +1835,9 @@
  * @param p1 (bit 0) - allow docks directly adjacent to other docks.
  * @param p2 unused
  */
-int32 CmdBuildDock(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildDock(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 cost;
+	CommandCost cost;
 
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 
@@ -1935,10 +1931,10 @@
 		/* success, so don't delete the new station */
 		st_auto_delete.Release();
 	}
-	return _price.build_dock;
+	return CommandCost(_price.build_dock);
 }
 
-static int32 RemoveDock(Station *st, uint32 flags)
+static CommandCost RemoveDock(Station *st, uint32 flags)
 {
 	if (!CheckOwnership(st->owner)) return CMD_ERROR;
 
@@ -1964,7 +1960,7 @@
 		DeleteStationIfEmpty(st);
 	}
 
-	return _price.remove_dock;
+	return CommandCost(_price.remove_dock);
 }
 
 #include "table/station_land.h"
@@ -2347,11 +2343,10 @@
 		/* Slowly increase the rating back to his original level in the case we
 		 *  didn't deliver cargo yet to this station. This happens when a bribe
 		 *  failed while you didn't moved that cargo yet to a station. */
-		if (ge->enroute_from == INVALID_STATION && ge->rating < INITIAL_STATION_RATING)
+		if (ge->days_since_pickup == 255 && ge->rating < INITIAL_STATION_RATING)
 			ge->rating++;
 		/* Only change the rating if we are moving this cargo */
-		if (ge->enroute_from != INVALID_STATION) {
-			byte_inc_sat(&ge->enroute_time);
+		if (ge->last_speed != 0) {
 			byte_inc_sat(&ge->days_since_pickup);
 
 			int rating = 0;
@@ -2383,7 +2378,7 @@
 				(rating += 35, true);
 			}
 
-			int waiting = GB(ge->waiting_acceptance, 0, 12);
+			uint waiting = ge->cargo.Count();
 			(rating -= 90, waiting > 1500) ||
 			(rating += 55, waiting > 1000) ||
 			(rating += 35, waiting > 600) ||
@@ -2409,12 +2404,13 @@
 				if (rating <= 127 && waiting != 0) {
 					uint32 r = Random();
 					if (rating <= (int)GB(r, 0, 7)) {
-						waiting = max(waiting - (int)GB(r, 8, 2) - 1, 0);
+						/* Need to have int, otherwise it will just overflow etc. */
+						waiting = max((int)waiting - (int)GB(r, 8, 2) - 1, 0);
 						waiting_changed = true;
 					}
 				}
 
-				if (waiting_changed) SB(ge->waiting_acceptance, 0, 12, waiting);
+				if (waiting_changed) ge->cargo.Truncate(waiting);
 			}
 		}
 	} while (++ge != endof(st->goods));
@@ -2467,7 +2463,7 @@
 			for (CargoID i = 0; i < NUM_CARGO; i++) {
 				GoodsEntry* ge = &st->goods[i];
 
-				if (ge->enroute_from != INVALID_STATION) {
+				if (ge->days_since_pickup != 255) {
 					ge->rating = clamp(ge->rating + amount, 0, 255);
 				}
 			}
@@ -2477,13 +2473,8 @@
 
 static void UpdateStationWaiting(Station *st, CargoID type, uint amount)
 {
-	SB(st->goods[type].waiting_acceptance, 0, 12,
-		min(0xFFF, GB(st->goods[type].waiting_acceptance, 0, 12) + amount)
-	);
-
-	st->goods[type].enroute_time = 0;
-	st->goods[type].enroute_from = st->index;
-	st->goods[type].enroute_from_xy = st->xy;
+	st->goods[type].cargo.Append(new CargoPacket(st->index, amount));
+
 	InvalidateWindow(WC_STATION_VIEW, st->index);
 	st->MarkTilesDirty(true);
 }
@@ -2494,7 +2485,7 @@
  * @param p1 station ID that is to be renamed
  * @param p2 unused
  */
-int32 CmdRenameStation(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRenameStation(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidStationID(p1) || _cmd_text[0] == '\0') return CMD_ERROR;
 	Station *st = GetStation(p1);
@@ -2516,7 +2507,7 @@
 		DeleteName(str);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -2553,7 +2544,7 @@
 			if (around[i] == NULL) {
 				if (!st->IsBuoy() &&
 						(st->town->exclusive_counter == 0 || st->town->exclusivity == st->owner) && // check exclusive transport rights
-						st->goods[type].rating != 0 &&
+						st->goods[type].rating != 0 && st->goods[type].last_speed != 0 && // we actually service the station
 						(!_patches.selectgoods || st->goods[type].last_speed > 0) && // if last_speed is 0, no vehicle has been there.
 						((st->facilities & ~FACIL_BUS_STOP)   != 0 || IsCargoInClass(type, CC_PASSENGERS)) && // if we have other fac. than a bus stop, or the cargo is passengers
 						((st->facilities & ~FACIL_TRUCK_STOP) != 0 || !IsCargoInClass(type, CC_PASSENGERS))) { // if we have other fac. than a cargo bay or the cargo is not passengers
@@ -2683,10 +2674,8 @@
 	st->build_date = _date;
 
 	for (CargoID j = 0; j < NUM_CARGO; j++) {
-		st->goods[j].waiting_acceptance = 0;
-		st->goods[j].days_since_pickup = 0;
-		st->goods[j].enroute_from = INVALID_STATION;
-		st->goods[j].enroute_from_xy = INVALID_TILE;
+		st->goods[j].acceptance = false;
+		st->goods[j].days_since_pickup = 255;
 		st->goods[j].rating = INITIAL_STATION_RATING;
 		st->goods[j].last_speed = 0;
 		st->goods[j].last_age = 255;
@@ -2748,7 +2737,7 @@
 				CheckAllowRemoveRoad(tile, GetAnyRoadBits(tile, ROADTYPE_TRAM), OWNER_TOWN, &edge_road, ROADTYPE_TRAM);
 }
 
-static int32 ClearTile_Station(TileIndex tile, byte flags)
+static CommandCost ClearTile_Station(TileIndex tile, byte flags)
 {
 	if (flags & DC_AUTO) {
 		switch (GetStationType(tile)) {
@@ -2810,6 +2799,8 @@
 
 			st->speclist[i].spec = GetCustomStationSpecByGrf(st->speclist[i].grfid, st->speclist[i].localidx);
 		}
+
+		for (CargoID c = 0; c < NUM_CARGO; c++) st->goods[c].cargo.InvalidateCache();
 	}
 }
 
@@ -2906,18 +2897,27 @@
 	SLE_END()
 };
 
+static uint16 _waiting_acceptance;
+static uint16 _cargo_source;
+static uint32 _cargo_source_xy;
+static uint16 _cargo_days;
+static Money  _cargo_feeder_share;
+
 static const SaveLoad _goods_desc[] = {
-	    SLE_VAR(GoodsEntry, waiting_acceptance, SLE_UINT16),
-	SLE_CONDVAR(GoodsEntry, unload_pending,     SLE_UINT16,                51, SL_MAX_VERSION),
-	    SLE_VAR(GoodsEntry, days_since_pickup,  SLE_UINT8),
-	    SLE_VAR(GoodsEntry, rating,             SLE_UINT8),
-	SLE_CONDVAR(GoodsEntry, enroute_from,       SLE_FILE_U8 | SLE_VAR_U16,  0, 6),
-	SLE_CONDVAR(GoodsEntry, enroute_from,       SLE_UINT16,                 7, SL_MAX_VERSION),
-	SLE_CONDVAR(GoodsEntry, enroute_from_xy,    SLE_UINT32,                44, SL_MAX_VERSION),
-	    SLE_VAR(GoodsEntry, enroute_time,       SLE_UINT8),
-	    SLE_VAR(GoodsEntry, last_speed,         SLE_UINT8),
-	    SLE_VAR(GoodsEntry, last_age,           SLE_UINT8),
-	SLE_CONDVAR(GoodsEntry, feeder_profit,      SLE_INT32,                 14, SL_MAX_VERSION),
+	SLEG_CONDVAR(            _waiting_acceptance, SLE_UINT16,                  0, 67),
+	 SLE_CONDVAR(GoodsEntry, acceptance,          SLE_BOOL,                   68, SL_MAX_VERSION),
+	SLE_CONDNULL(2,                                                           51, 67),
+	     SLE_VAR(GoodsEntry, days_since_pickup,   SLE_UINT8),
+	     SLE_VAR(GoodsEntry, rating,              SLE_UINT8),
+	SLEG_CONDVAR(            _cargo_source,       SLE_FILE_U8 | SLE_VAR_U16,   0, 6),
+	SLEG_CONDVAR(            _cargo_source,       SLE_UINT16,                  7, 67),
+	SLEG_CONDVAR(            _cargo_source_xy,    SLE_UINT32,                 44, 67),
+	SLEG_CONDVAR(            _cargo_days,         SLE_UINT8,                   0, 67),
+	     SLE_VAR(GoodsEntry, last_speed,          SLE_UINT8),
+	     SLE_VAR(GoodsEntry, last_age,            SLE_UINT8),
+	SLEG_CONDVAR(            _cargo_feeder_share, SLE_FILE_U32 | SLE_VAR_I64, 14, 64),
+	SLEG_CONDVAR(            _cargo_feeder_share, SLE_INT64,                  65, 67),
+	 SLE_CONDLST(GoodsEntry, cargo,               REF_CARGO_PACKET,           68, SL_MAX_VERSION),
 
 	SLE_END()
 };
@@ -2934,9 +2934,30 @@
 {
 	SlObject(st, _station_desc);
 
+	_waiting_acceptance = 0;
+
 	uint num_cargo = CheckSavegameVersion(55) ? 12 : NUM_CARGO;
 	for (CargoID i = 0; i < num_cargo; i++) {
-		SlObject(&st->goods[i], _goods_desc);
+		GoodsEntry *ge = &st->goods[i];
+		SlObject(ge, _goods_desc);
+		if (CheckSavegameVersion(68)) {
+			ge->acceptance = HASBIT(_waiting_acceptance, 15);
+			if (GB(_waiting_acceptance, 0, 12) != 0) {
+				/* Don't construct the packet with station here, because that'll fail with old savegames */
+				CargoPacket *cp = new CargoPacket();
+				/* In old versions, enroute_from used 0xFF as INVALID_STATION */
+				cp->source          = (CheckSavegameVersion(7) && _cargo_source == 0xFF) ? INVALID_STATION : _cargo_source;
+				cp->count           = GB(_waiting_acceptance, 0, 12);
+				cp->days_in_transit = _cargo_days;
+				cp->feeder_share    = _cargo_feeder_share;
+				cp->source_xy       = _cargo_source_xy;
+				cp->days_in_transit = _cargo_days;
+				cp->feeder_share    = _cargo_feeder_share;
+				ge->cargo.Append(cp);
+			} else {
+				ge->days_since_pickup = 255;
+			}
+		}
 	}
 
 	if (st->num_specs != 0) {
--- a/src/station_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/station_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -131,14 +131,14 @@
 {
 	const Station* st1 = *(const Station**)a;
 	const Station* st2 = *(const Station**)b;
-	int sum1 = 0, sum2 = 0;
+	Money sum1 = 0, sum2 = 0;
 
 	for (CargoID j = 0; j < NUM_CARGO; j++) {
-		if (st1->goods[j].waiting_acceptance & 0xfff) sum1 += GetTransportedGoodsIncome(st1->goods[j].waiting_acceptance & 0xfff, 20, 50, j);
-		if (st2->goods[j].waiting_acceptance & 0xfff) sum2 += GetTransportedGoodsIncome(st2->goods[j].waiting_acceptance & 0xfff, 20, 50, j);
+		if (!st1->goods[j].cargo.Empty()) sum1 += GetTransportedGoodsIncome(st1->goods[j].cargo.Count(), 20, 50, j);
+		if (!st2->goods[j].cargo.Empty()) sum2 += GetTransportedGoodsIncome(st2->goods[j].cargo.Count(), 20, 50, j);
 	}
 
-	return (_internal_sort_order & 1) ? sum2 - sum1 : sum1 - sum2;
+	return (_internal_sort_order & 1) ? ClampToI32(sum2 - sum1) : ClampToI32(sum1 - sum2);
 }
 
 /**
@@ -157,8 +157,8 @@
 	byte maxr2 = 0;
 
 	for (CargoID j = 0; j < NUM_CARGO; j++) {
-		if (st1->goods[j].enroute_from != INVALID_STATION) maxr1 = max(maxr1, st1->goods[j].rating);
-		if (st2->goods[j].enroute_from != INVALID_STATION) maxr2 = max(maxr2, st2->goods[j].rating);
+		if (st1->goods[j].days_since_pickup != 255) maxr1 = max(maxr1, st1->goods[j].rating);
+		if (st2->goods[j].days_since_pickup != 255) maxr2 = max(maxr2, st2->goods[j].rating);
 	}
 
 	return (_internal_sort_order & 1) ? maxr2 - maxr1 : maxr1 - maxr2;
@@ -225,7 +225,7 @@
 			if (facilities & st->facilities) { //only stations with selected facilities
 				int num_waiting_cargo = 0;
 				for (CargoID j = 0; j < NUM_CARGO; j++) {
-					if (st->goods[j].waiting_acceptance & 0xFFF) {
+					if (!st->goods[j].cargo.Empty()) {
 						num_waiting_cargo++; //count number of waiting cargo
 						if (HASBIT(cargo_filter, j)) {
 							station_sort[n++] = st;
@@ -309,10 +309,8 @@
 			SetVScrollCount(w, sl->list_length);
 
 			/* draw widgets, with player's name in the caption */
-			const Player* p = GetPlayer(owner);
-			SetDParam(0, p->name_1);
-			SetDParam(1, p->name_2);
-			SetDParam(2, w->vscroll.count);
+			SetDParam(0, owner);
+			SetDParam(1, w->vscroll.count);
 			DrawWindowWidgets(w);
 
 			/* draw sorting criteria string */
@@ -368,9 +366,8 @@
 
 				/* show cargo waiting and station ratings */
 				for (CargoID j = 0; j < NUM_CARGO; j++) {
-					uint amount = GB(st->goods[j].waiting_acceptance, 0, 12);
-					if (amount != 0) {
-						StationsWndShowStationRating(x, y, j, amount, st->goods[j].rating);
+					if (!st->goods[j].cargo.Empty()) {
+						StationsWndShowStationRating(x, y, j, st->goods[j].cargo.Count(), st->goods[j].rating);
 						x += 20;
 					}
 				}
@@ -705,9 +702,9 @@
 
 	num = 1;
 	for (CargoID i = 0; i < NUM_CARGO; i++) {
-		if (GB(st->goods[i].waiting_acceptance, 0, 12) != 0) {
+		if (!st->goods[i].cargo.Empty()) {
 			num++;
-			if (st->goods[i].enroute_from != station_id) num++;
+			if (st->goods[i].cargo.Source() != station_id) num++;
 		}
 	}
 	SetVScrollCount(w, num);
@@ -729,7 +726,7 @@
 	if (--pos < 0) {
 		str = STR_00D0_NOTHING;
 		for (CargoID i = 0; i < NUM_CARGO; i++) {
-			if (GB(st->goods[i].waiting_acceptance, 0, 12) != 0) str = STR_EMPTY;
+			if (!st->goods[i].cargo.Empty()) str = STR_EMPTY;
 		}
 		SetDParam(0, str);
 		DrawString(x, y, STR_0008_WAITING, 0);
@@ -737,10 +734,10 @@
 	}
 
 	for (CargoID i = 0; i < NUM_CARGO && pos > -5; i++) {
-		uint waiting = GB(st->goods[i].waiting_acceptance, 0, 12);
+		uint waiting = st->goods[i].cargo.Count();
 		if (waiting == 0) continue;
 
-		if (st->goods[i].enroute_from == station_id) {
+		if (st->goods[i].cargo.Source() == station_id) {
 			if (--pos < 0) {
 				DrawCargoIcons(i, waiting, x, y);
 				SetDParam(1, waiting);
@@ -759,7 +756,7 @@
 			}
 
 			if (pos > -5 && --pos < 0) {
-				SetDParam(0, st->goods[i].enroute_from);
+				SetDParam(0, st->goods[i].cargo.Source());
 				DrawStringRightAligned(x + 234, y, STR_000B, 0);
 				y += 10;
 			}
@@ -774,7 +771,7 @@
 
 		for (CargoID i = 0; i < NUM_CARGO; i++) {
 			if (b >= endof(_userstring) - 5 - 1) break;
-			if (st->goods[i].waiting_acceptance & 0x8000) {
+			if (st->goods[i].acceptance) {
 				if (first) {
 					first = false;
 				} else {
@@ -800,7 +797,7 @@
 			if (!cs->IsValid()) continue;
 
 			const GoodsEntry *ge = &st->goods[i];
-			if (ge->enroute_from == INVALID_STATION) continue;
+			if (ge->days_since_pickup == 255) continue;
 
 			SetDParam(0, cs->name);
 			SetDParam(2, ge->rating * 101 >> 8);
--- a/src/stdafx.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/stdafx.h	Tue Jun 26 23:40:58 2007 +0000
@@ -20,6 +20,7 @@
 # endif
 #else
 # define INT64_MAX 9223372036854775807LL
+# define INT64_MIN -9223372036854775808LL
 #endif
 
 #include <cstdio>
@@ -154,6 +155,7 @@
 #  define _CRT_SECURE_NO_DEPRECATE // all deprecated 'unsafe string functions
 #  define _CRT_NON_CONFORMING_SWPRINTFS // another deprecated stuff
 # else /* _MSC_VER >= 1400  ( <1400 for MSVC2003) */
+#  pragma warning(disable: 4288)   // nonstandard extension used : 'y' : loop control variable declared in the for-loop is used outside the for-loop scope; it conflicts with the declaration in the outer scope
 #  pragma warning(disable: 4292)   // compiler limit : terminating debug information emission for enum 'StringIdEnum' with member 'STR_801D_COAL_CAR'
 # endif /* _MSC_VER >= 1400 */
 
--- a/src/strgen/strgen.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/strgen/strgen.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -457,16 +457,9 @@
 	{"DKBLUE",  EmitSingleChar, SCC_DKBLUE,  0, 0},
 	{"BLACK",   EmitSingleChar, SCC_BLACK,   0, 0},
 
-	{"CURRCOMPACT",   EmitSingleChar, SCC_CURRENCY_COMPACT,    1, 0}, // compact currency (32 bits)
+	{"CURRCOMPACT",   EmitSingleChar, SCC_CURRENCY_COMPACT,    1, 0}, // compact currency
 	{"REV",           EmitSingleChar, SCC_REVISION,            0, 0}, // openttd revision string
 	{"SHORTCARGO",    EmitSingleChar, SCC_CARGO_SHORT,         2, 0}, // short cargo description, only ### tons, or ### litres
-	{"CURRCOMPACT64", EmitSingleChar, SCC_CURRENCY_COMPACT_64, 2, 0}, // compact currency 64 bits
-
-	// These are special versions of {STRING1}
-	// The first string includes the second string.
-	{"COMPANY",    EmitSingleChar, SCC_STRING1, 1, 0},
-	{"PLAYERNAME", EmitSingleChar, SCC_STRING1, 1, 0},
-	{"VEHICLE",    EmitSingleChar, SCC_STRING1, 1, 0},
 
 	{"STRING1", EmitSingleChar, SCC_STRING1, 1, C_CASE}, // included string that consumes ONE argument
 	{"STRING2", EmitSingleChar, SCC_STRING2, 2, C_CASE}, // included string that consumes TWO arguments
@@ -501,12 +494,17 @@
 	{"NUM",   EmitSingleChar, SCC_NUM,   1, 0}, // Signed number
 
 	{"CURRENCY",   EmitSingleChar, SCC_CURRENCY,    1, 0},
-	{"CURRENCY64", EmitSingleChar, SCC_CURRENCY_64, 2, 0},
 
 	{"WAYPOINT", EmitSingleChar, SCC_WAYPOINT_NAME, 1, 0}, // waypoint name
 	{"STATION",  EmitSingleChar, SCC_STATION_NAME,  1, 0},
 	{"TOWN",     EmitSingleChar, SCC_TOWN_NAME,     1, 0},
 	{"GROUP",    EmitSingleChar, SCC_GROUP_NAME,    1, 0},
+	{"SIGN",     EmitSingleChar, SCC_SIGN_NAME,     1, 0},
+	{"ENGINE",   EmitSingleChar, SCC_ENGINE_NAME,   1, 0},
+	{"VEHICLE",  EmitSingleChar, SCC_VEHICLE_NAME,  1, 0},
+	{"COMPANY",  EmitSingleChar, SCC_COMPANY_NAME,  1, 0},
+	{"COMPANYNUM", EmitSingleChar, SCC_COMPANY_NUM, 1, 0},
+	{"PLAYERNAME", EmitSingleChar, SCC_PLAYER_NAME, 1, 0},
 
 	// 0x9D is used for the pseudo command SETCASE
 	// 0x9E is used for case switching
--- a/src/strings.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/strings.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -28,6 +28,10 @@
 #include "cargotype.h"
 #include "group.h"
 #include "debug.h"
+#include "newgrf_townname.h"
+#include "signs.h"
+#include "vehicle.h"
+#include "newgrf_engine.h"
 
 /* for opendir/readdir/closedir */
 # include "fios.h"
@@ -37,9 +41,9 @@
 
 static char *StationGetSpecialString(char *buff, int x, const char* last);
 static char *GetSpecialTownNameString(char *buff, int ind, uint32 seed, const char* last);
-static char *GetSpecialPlayerNameString(char *buff, int ind, const int32 *argv, const char* last);
+static char *GetSpecialPlayerNameString(char *buff, int ind, const int64 *argv, const char* last);
 
-static char *FormatString(char *buff, const char *str, const int32 *argv, uint casei, const char* last);
+static char *FormatString(char *buff, const char *str, const int64 *argv, uint casei, const char* last);
 
 struct LanguagePack {
 	uint32 ident;       // 32-bits identifier
@@ -60,27 +64,22 @@
 
 
 /** Read an int64 from the argv array. */
-static inline int64 GetInt64(const int32 **argv)
-{
-	int64 result;
-
-	assert(argv);
-	result = (uint32)(*argv)[0] + ((uint64)(uint32)(*argv)[1] << 32);
-	(*argv) += 2;
-	return result;
-}
-
-/** Read an int32 from the argv array. */
-static inline int32 GetInt32(const int32 **argv)
+static inline int64 GetInt64(const int64 **argv)
 {
 	assert(argv);
 	return *(*argv)++;
 }
 
+/** Read an int32 from the argv array. */
+static inline int32 GetInt32(const int64 **argv)
+{
+	return (int32)GetInt64(argv);
+}
+
 /** Read an array from the argv array. */
-static inline const int32 *GetArgvPtr(const int32 **argv, int n)
+static inline const int64 *GetArgvPtr(const int64 **argv, int n)
 {
-	const int32 *result;
+	const int64 *result;
 	assert(*argv);
 	result = *argv;
 	(*argv) += n;
@@ -114,7 +113,7 @@
  * @param last
  * @return a formatted string of char
  */
-static char *GetStringWithArgs(char *buffr, uint string, const int32 *argv, const char* last)
+static char *GetStringWithArgs(char *buffr, uint string, const int64 *argv, const char* last)
 {
 	uint index = GB(string,  0, 11);
 	uint tab   = GB(string, 11,  5);
@@ -179,7 +178,7 @@
 
 char *GetString(char *buffr, StringID string, const char* last)
 {
-	return GetStringWithArgs(buffr, string, (int32*)_decode_parameters, last);
+	return GetStringWithArgs(buffr, string, (int64*)_decode_parameters, last);
 }
 
 
@@ -221,7 +220,7 @@
 
 void InjectDParam(int amount)
 {
-	memmove(_decode_parameters + amount, _decode_parameters, sizeof(_decode_parameters) - amount * sizeof(uint32));
+	memmove(_decode_parameters + amount, _decode_parameters, sizeof(_decode_parameters) - amount * sizeof(uint64));
 }
 
 static const uint32 _divisor_table[] = {
@@ -311,7 +310,7 @@
 	YearMonthDay ymd;
 	ConvertDateToYMD(date, &ymd);
 
-	int32 args[3] = { ymd.day + STR_01AC_1ST - 1, STR_0162_JAN + ymd.month, ymd.year };
+	int64 args[3] = { ymd.day + STR_01AC_1ST - 1, STR_0162_JAN + ymd.month, ymd.year };
 	return FormatString(buff, GetStringPtr(STR_DATE_LONG), args, 0, last);
 }
 
@@ -320,7 +319,7 @@
 	YearMonthDay ymd;
 	ConvertDateToYMD(date, &ymd);
 
-	int32 args[2] = { STR_MONTH_JAN + ymd.month, ymd.year };
+	int64 args[2] = { STR_MONTH_JAN + ymd.month, ymd.year };
 	return FormatString(buff, GetStringPtr(STR_DATE_SHORT), args, 0, last);
 }
 
@@ -335,19 +334,21 @@
 	snprintf(day,   lengthof(day),   "%02i", ymd.day);
 	snprintf(month, lengthof(month), "%02i", ymd.month + 1);
 
-	int32 args[3] = { BindCString(day), BindCString(month), ymd.year };
+	int64 args[3] = { BindCString(day), BindCString(month), ymd.year };
 	return FormatString(buff, GetStringPtr(STR_DATE_TINY), args, 0, last);
 }
 
-static char *FormatGenericCurrency(char *buff, const CurrencySpec *spec, int64 number, bool compact, const char* last)
+static char *FormatGenericCurrency(char *buff, const CurrencySpec *spec, Money number, bool compact, const char* last)
 {
 	const char* multiplier = "";
 	char buf[40];
 	char* p;
 	int j;
 
-	/* multiply by exchange rate */
-	number *= spec->rate;
+	/* Multiply by exchange rate, but do it safely. */
+	CommandCost cs(number);
+	cs.MultiplyCost(spec->rate);
+	number = cs.GetCost();
 
 	/* convert from negative */
 	if (number < 0) {
@@ -522,11 +523,11 @@
 	},
 };
 
-static char* FormatString(char* buff, const char* str, const int32* argv, uint casei, const char* last)
+static char* FormatString(char* buff, const char* str, const int64* argv, uint casei, const char* last)
 {
 	extern const char _openttd_revision[];
 	WChar b;
-	const int32 *argv_orig = argv;
+	const int64 *argv_orig = argv;
 	uint modifier = 0;
 
 	while ((b = Utf8Consume(&str)) != '\0') {
@@ -559,7 +560,7 @@
 				break;
 
 			case SCC_VELOCITY: {// {VELOCITY}
-				int32 args[1];
+				int64 args[1];
 				assert(_opt_ptr->units < lengthof(units));
 				args[0] = GetInt32(&argv) * units[_opt_ptr->units].s_m >> units[_opt_ptr->units].s_s;
 				buff = FormatString(buff, GetStringPtr(units[_opt_ptr->units].velocity), args, modifier >> 24, last);
@@ -568,7 +569,7 @@
 			}
 
 			case SCC_CURRENCY_COMPACT: /* {CURRCOMPACT} */
-				buff = FormatGenericCurrency(buff, _currency, GetInt32(&argv), true, last);
+				buff = FormatGenericCurrency(buff, _currency, GetInt64(&argv), true, last);
 				break;
 
 			case SCC_REVISION: /* {REV} */
@@ -582,7 +583,7 @@
 				StringID cargo_str = GetCargo(GetInt32(&argv))->units_volume;
 				switch (cargo_str) {
 					case STR_TONS: {
-						int32 args[1];
+						int64 args[1];
 						assert(_opt_ptr->units < lengthof(units));
 						args[0] = GetInt32(&argv) * units[_opt_ptr->units].w_m >> units[_opt_ptr->units].w_s;
 						buff = FormatString(buff, GetStringPtr(units[_opt_ptr->units].l_weight), args, modifier >> 24, last);
@@ -591,7 +592,7 @@
 					}
 
 					case STR_LITERS: {
-						int32 args[1];
+						int64 args[1];
 						assert(_opt_ptr->units < lengthof(units));
 						args[0] = GetInt32(&argv) * units[_opt_ptr->units].v_m >> units[_opt_ptr->units].v_s;
 						buff = FormatString(buff, GetStringPtr(units[_opt_ptr->units].l_volume), args, modifier >> 24, last);
@@ -613,12 +614,6 @@
 				}
 			} break;
 
-			case SCC_CURRENCY_COMPACT_64: { /* {CURRCOMPACT64} */
-				/* 64 bit compact currency-unit */
-				buff = FormatGenericCurrency(buff, _currency, GetInt64(&argv), true, last);
-				break;
-			}
-
 			case SCC_STRING1: { /* {STRING1} */
 				/* String that consumes ONE argument */
 				uint str = modifier + GetInt32(&argv);
@@ -666,7 +661,7 @@
 
 			case SCC_INDUSTRY_NAME: { /* {INDUSTRY} */
 				const Industry* i = GetIndustry(GetInt32(&argv));
-				int32 args[2];
+				int64 args[2];
 
 				/* industry not valid anymore? */
 				if (!IsValidIndustry(i)) break;
@@ -681,7 +676,7 @@
 			}
 
 			case SCC_VOLUME: { // {VOLUME}
-				int32 args[1];
+				int64 args[1];
 				assert(_opt_ptr->units < lengthof(units));
 				args[0] = GetInt32(&argv) * units[_opt_ptr->units].v_m >> units[_opt_ptr->units].v_s;
 				buff = FormatString(buff, GetStringPtr(units[_opt_ptr->units].l_volume), args, modifier >> 24, last);
@@ -715,7 +710,7 @@
 			}
 
 			case SCC_POWER: { // {POWER}
-				int32 args[1];
+				int64 args[1];
 				assert(_opt_ptr->units < lengthof(units));
 				args[0] = GetInt32(&argv) * units[_opt_ptr->units].p_m >> units[_opt_ptr->units].p_s;
 				buff = FormatString(buff, GetStringPtr(units[_opt_ptr->units].power), args, modifier >> 24, last);
@@ -724,7 +719,7 @@
 			}
 
 			case SCC_VOLUME_SHORT: { // {VOLUME_S}
-				int32 args[1];
+				int64 args[1];
 				assert(_opt_ptr->units < lengthof(units));
 				args[0] = GetInt32(&argv) * units[_opt_ptr->units].v_m >> units[_opt_ptr->units].v_s;
 				buff = FormatString(buff, GetStringPtr(units[_opt_ptr->units].s_volume), args, modifier >> 24, last);
@@ -733,7 +728,7 @@
 			}
 
 			case SCC_WEIGHT: { // {WEIGHT}
-				int32 args[1];
+				int64 args[1];
 				assert(_opt_ptr->units < lengthof(units));
 				args[0] = GetInt32(&argv) * units[_opt_ptr->units].w_m >> units[_opt_ptr->units].w_s;
 				buff = FormatString(buff, GetStringPtr(units[_opt_ptr->units].l_weight), args, modifier >> 24, last);
@@ -742,7 +737,7 @@
 			}
 
 			case SCC_WEIGHT_SHORT: { // {WEIGHT_S}
-				int32 args[1];
+				int64 args[1];
 				assert(_opt_ptr->units < lengthof(units));
 				args[0] = GetInt32(&argv) * units[_opt_ptr->units].w_m >> units[_opt_ptr->units].w_s;
 				buff = FormatString(buff, GetStringPtr(units[_opt_ptr->units].s_weight), args, modifier >> 24, last);
@@ -751,7 +746,7 @@
 			}
 
 			case SCC_FORCE: { // {FORCE}
-				int32 args[1];
+				int64 args[1];
 				assert(_opt_ptr->units < lengthof(units));
 				args[0] = GetInt32(&argv) * units[_opt_ptr->units].f_m >> units[_opt_ptr->units].f_s;
 				buff = FormatString(buff, GetStringPtr(units[_opt_ptr->units].force), args, modifier >> 24, last);
@@ -800,11 +795,11 @@
 				break;
 
 			case SCC_CURRENCY: // {CURRENCY}
-				buff = FormatGenericCurrency(buff, _currency, GetInt32(&argv), false, last);
+				buff = FormatGenericCurrency(buff, _currency, GetInt64(&argv), false, last);
 				break;
 
 			case SCC_WAYPOINT_NAME: { // {WAYPOINT}
-				int32 temp[2];
+				int64 temp[2];
 				Waypoint *wp = GetWaypoint(GetInt32(&argv));
 				StringID str;
 				if (wp->string != STR_NULL) {
@@ -824,9 +819,10 @@
 				if (!st->IsValid()) { // station doesn't exist anymore
 					buff = GetStringWithArgs(buff, STR_UNKNOWN_DESTINATION, NULL, last);
 				} else {
-					int32 temp[2];
-					temp[0] = st->town->townnametype;
-					temp[1] = st->town->townnameparts;
+					int64 temp[3];
+					temp[0] = STR_TOWN;
+					temp[1] = st->town->index;
+					temp[2] = st->index;
 					buff = GetStringWithArgs(buff, st->string_id, temp, last);
 				}
 				break;
@@ -834,29 +830,89 @@
 
 			case SCC_TOWN_NAME: { // {TOWN}
 				const Town* t = GetTown(GetInt32(&argv));
-				int32 temp[1];
+				int64 temp[1];
 
 				assert(IsValidTown(t));
 
 				temp[0] = t->townnameparts;
-				buff = GetStringWithArgs(buff, t->townnametype, temp, last);
+				uint32 grfid = t->townnamegrfid;
+
+				if (grfid == 0) {
+					/* Original town name */
+					buff = GetStringWithArgs(buff, t->townnametype, temp, last);
+				} else {
+					/* Newgrf town name */
+					if (GetGRFTownName(grfid) != NULL) {
+						/* The grf is loaded */
+						buff = GRFTownNameGenerate(buff, t->townnamegrfid, t->townnametype, t->townnameparts, last);
+					} else {
+						/* Fallback to english original */
+						buff = GetStringWithArgs(buff, SPECSTR_TOWNNAME_ENGLISH, temp, last);
+					}
+				}
 				break;
 			}
 
 			case SCC_GROUP_NAME: { // {GROUP}
 				const Group *g = GetGroup(GetInt32(&argv));
-				int32 args[1];
+				int64 args[1];
 
 				assert(IsValidGroup(g));
 
 				args[0] = g->index;
-				buff = GetStringWithArgs(buff, (g->string_id == STR_SV_GROUP_NAME) ? (StringID)STR_GROUP_NAME_FORMAT : g->string_id, args, last);
+				buff = GetStringWithArgs(buff, IsCustomName(g->string_id) ? g->string_id : (StringID)STR_GROUP_NAME_FORMAT, args, last);
 
 				break;
 			}
 
-			case SCC_CURRENCY_64: { // {CURRENCY64}
-				buff = FormatGenericCurrency(buff, _currency, GetInt64(&argv), false, last);
+			case SCC_ENGINE_NAME: { // {ENGINE}
+				EngineID engine = (EngineID)GetInt32(&argv);
+
+				buff = GetString(buff, GetCustomEngineName(engine), last);
+				break;
+			}
+
+			case SCC_VEHICLE_NAME: { // {VEHICLE}
+				const Vehicle *v = GetVehicle(GetInt32(&argv));
+
+				int64 args[1];
+				args[0] = v->unitnumber;
+
+				buff = GetStringWithArgs(buff, v->string_id, args, last);
+				break;
+			}
+
+			case SCC_SIGN_NAME: { // {SIGN}
+				const Sign *si = GetSign(GetInt32(&argv));
+				buff = GetString(buff, si->str, last);
+				break;
+			}
+
+			case SCC_COMPANY_NAME: { // {COMPANY}
+				const Player *p = GetPlayer((PlayerID)GetInt32(&argv));
+				int64 args[1];
+				args[0] = p->name_2;
+				buff = GetStringWithArgs(buff, p->name_1, args, last);
+				break;
+			}
+
+			case SCC_COMPANY_NUM: { // {COMPANYNUM}
+				PlayerID player = (PlayerID)GetInt32(&argv);
+
+				/* Nothing is added for AI or inactive players */
+				if (IsHumanPlayer(player) && IsValidPlayer(player)) {
+					int64 args[1];
+					args[0] = player + 1;
+					buff = GetStringWithArgs(buff, STR_7002_PLAYER, args, last);
+				}
+				break;
+			}
+
+			case SCC_PLAYER_NAME: { // {PLAYERNAME}
+				const Player *p = GetPlayer((PlayerID)GetInt32(&argv));
+				int64 args[1];
+				args[0] = p->president_name_2;
+				buff = GetStringWithArgs(buff, p->president_name_1, args, last);
 				break;
 			}
 
@@ -1029,7 +1085,7 @@
 	return buff;
 }
 
-static char *GetSpecialPlayerNameString(char *buff, int ind, const int32 *argv, const char* last)
+static char *GetSpecialPlayerNameString(char *buff, int ind, const int64 *argv, const char* last)
 {
 	switch (ind) {
 		case 1: // not used
--- a/src/subsidy_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/subsidy_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -122,14 +122,12 @@
 
 	for (s = _subsidies; s != endof(_subsidies); s++) {
 		if (s->cargo_type != CT_INVALID && s->age >= 12) {
-			const Player *p;
 			int xt;
 
 			SetupSubsidyDecodeParam(s, 1);
 
-			p = GetPlayer(GetStation(s->to)->owner);
-			SetDParam(3, p->name_1);
-			SetDParam(4, p->name_2);
+			PlayerID player = GetStation(s->to)->owner;
+			SetDParam(3, player);
 
 			xt = DrawString(x + 2, y, STR_202C_FROM_TO, 0);
 
--- a/src/table/control_codes.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/table/control_codes.h	Tue Jun 26 23:40:58 2007 +0000
@@ -27,11 +27,15 @@
 	SCC_STATION_NAME,
 	SCC_TOWN_NAME,
 	SCC_GROUP_NAME,
+	SCC_VEHICLE_NAME,
+	SCC_SIGN_NAME,
+	SCC_COMPANY_NAME,
+	SCC_COMPANY_NUM,
+	SCC_PLAYER_NAME,
+	SCC_ENGINE_NAME,
 
 	SCC_CURRENCY_COMPACT,
-	SCC_CURRENCY_COMPACT_64,
 	SCC_CURRENCY,
-	SCC_CURRENCY_64,
 
 	SCC_CARGO,
 	SCC_CARGO_SHORT,
--- a/src/texteff.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/texteff.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -19,10 +19,11 @@
 #include "blitter/factory.hpp"
 #include <stdarg.h> /* va_list */
 #include "date.h"
+#include "texteff.hpp"
 
 enum {
 	MAX_TEXTMESSAGE_LENGTH = 200,
-	MAX_TEXT_MESSAGES      =  30,
+	INIT_NUM_TEXT_MESSAGES =  20,
 	MAX_CHAT_MESSAGES      =  10,
 	MAX_ANIMATED_TILES     = 256,
 };
@@ -34,8 +35,9 @@
 	int32 right;
 	int32 bottom;
 	uint16 duration;
-	uint32 params_1;
-	uint32 params_2;
+	uint64 params_1;
+	uint64 params_2;
+	TextEffectMode mode;
 };
 
 
@@ -45,17 +47,18 @@
 	Date end_date;
 };
 
-static TextEffect _text_effect_list[MAX_TEXT_MESSAGES];
+static TextEffect *_text_effect_list = NULL;
 static TextMessage _textmsg_list[MAX_CHAT_MESSAGES];
 TileIndex _animated_tile_list[MAX_ANIMATED_TILES];
 
 static bool _textmessage_dirty = false;
 static bool _textmessage_visible = false;
+static uint16 _num_text_effects = INIT_NUM_TEXT_MESSAGES;
 
 /* The chatbox grows from the bottom so the coordinates are pixels from
  * the left and pixels from the bottom. The height is the maximum height */
 static const Oblong _textmsg_box = {10, 30, 500, 150};
-static uint8 _textmessage_backup[150 * 500 * 4]; // (height * width)
+static uint8 _textmessage_backup[150 * 500 * 6]; // (height * width)
 
 static inline uint GetTextMessageCount()
 {
@@ -163,7 +166,7 @@
 
 		_textmessage_visible = false;
 		/* Put our 'shot' back to the screen */
-		blitter->CopyFromBuffer(blitter->MoveTo(_screen.dst_ptr, x, y), _textmessage_backup, width, height, _textmsg_box.width);
+		blitter->CopyFromBuffer(blitter->MoveTo(_screen.dst_ptr, x, y), _textmessage_backup, width, height);
 		/* And make sure it is updated next time */
 		_video_driver->make_dirty(x, y, width, height);
 
@@ -223,8 +226,10 @@
 	}
 	if (width <= 0 || height <= 0) return;
 
+	assert(blitter->BufferSize(width, height) < (int)sizeof(_textmessage_backup));
+
 	/* Make a copy of the screen as it is before painting (for undraw) */
-	blitter->CopyToBuffer(blitter->MoveTo(_screen.dst_ptr, x, y), _textmessage_backup, width, height, _textmsg_box.width);
+	blitter->CopyToBuffer(blitter->MoveTo(_screen.dst_ptr, x, y), _textmessage_backup, width, height);
 
 	_cur_dpi = &_screen; // switch to _screen painting
 
@@ -259,24 +264,38 @@
 	);
 }
 
-void AddTextEffect(StringID msg, int x, int y, uint16 duration)
+TextEffectID AddTextEffect(StringID msg, int x, int y, uint16 duration, TextEffectMode mode)
 {
 	TextEffect *te;
 	int w;
 	char buffer[100];
+	TextEffectID i;
 
-	if (_game_mode == GM_MENU) return;
+	if (_game_mode == GM_MENU) return INVALID_TE_ID;
 
-	for (te = _text_effect_list; te->string_id != INVALID_STRING_ID; ) {
-		if (++te == endof(_text_effect_list)) return;
+	/* Look for a free spot in the text effect array */
+	for (i = 0; i < _num_text_effects; i++) {
+		if (_text_effect_list[i].string_id == INVALID_STRING_ID) break;
 	}
 
+	/* If there is none found, we grow the array */
+	if (i == _num_text_effects) {
+		_num_text_effects += 25;
+		_text_effect_list = (TextEffect*) realloc(_text_effect_list, _num_text_effects * sizeof(TextEffect));
+		for (; i < _num_text_effects; i++) _text_effect_list[i].string_id = INVALID_STRING_ID;
+		i = _num_text_effects - 1;
+	}
+
+	te = &_text_effect_list[i];
+
+	/* Start defining this object */
 	te->string_id = msg;
 	te->duration = duration;
 	te->y = y - 5;
 	te->bottom = y + 5;
 	te->params_1 = GetDParam(0);
 	te->params_2 = GetDParam(4);
+	te->mode = mode;
 
 	GetString(buffer, msg, lastof(buffer));
 	w = GetStringBoundingBox(buffer).width;
@@ -284,10 +303,38 @@
 	te->x = x - (w >> 1);
 	te->right = x + (w >> 1) - 1;
 	MarkTextEffectAreaDirty(te);
+
+	return i;
+}
+
+void UpdateTextEffect(TextEffectID te_id, StringID msg)
+{
+	assert(te_id < _num_text_effects);
+	TextEffect *te;
+
+	/* Update details */
+	te = &_text_effect_list[te_id];
+	te->string_id = msg;
+	te->params_1 = GetDParam(0);
+	te->params_2 = GetDParam(4);
+
+	MarkTextEffectAreaDirty(te);
+}
+
+void RemoveTextEffect(TextEffectID te_id)
+{
+	assert(te_id < _num_text_effects);
+	TextEffect *te;
+
+	te = &_text_effect_list[te_id];
+	MarkTextEffectAreaDirty(te);
+	te->string_id = INVALID_STRING_ID;
 }
 
 static void MoveTextEffect(TextEffect *te)
 {
+	/* Never expire for duration of 0xFFFF */
+	if (te->duration == 0xFFFF) return;
 	if (te->duration < 8) {
 		te->string_id = INVALID_STRING_ID;
 	} else {
@@ -300,47 +347,48 @@
 
 void MoveAllTextEffects()
 {
-	TextEffect *te;
-
-	for (te = _text_effect_list; te != endof(_text_effect_list); te++) {
-		if (te->string_id != INVALID_STRING_ID) MoveTextEffect(te);
+	for (TextEffectID i = 0; i < _num_text_effects; i++) {
+		TextEffect *te = &_text_effect_list[i];
+		if (te->string_id != INVALID_STRING_ID && te->mode == TE_RISING) MoveTextEffect(te);
 	}
 }
 
 void InitTextEffects()
 {
-	TextEffect *te;
+	if (_text_effect_list == NULL) _text_effect_list = MallocT<TextEffect>(_num_text_effects);
 
-	for (te = _text_effect_list; te != endof(_text_effect_list); te++) {
-		te->string_id = INVALID_STRING_ID;
-	}
+	for (TextEffectID i = 0; i < _num_text_effects; i++) _text_effect_list[i].string_id = INVALID_STRING_ID;
 }
 
 void DrawTextEffects(DrawPixelInfo *dpi)
 {
-	const TextEffect* te;
-
 	switch (dpi->zoom) {
 		case ZOOM_LVL_NORMAL:
-			for (te = _text_effect_list; te != endof(_text_effect_list); te++) {
+			for (TextEffectID i = 0; i < _num_text_effects; i++) {
+				TextEffect *te = &_text_effect_list[i];
 				if (te->string_id != INVALID_STRING_ID &&
 						dpi->left <= te->right &&
 						dpi->top  <= te->bottom &&
 						dpi->left + dpi->width  > te->x &&
 						dpi->top  + dpi->height > te->y) {
-					AddStringToDraw(te->x, te->y, te->string_id, te->params_1, te->params_2);
+					if (te->mode == TE_RISING || (_patches.loading_indicators && !HASBIT(_transparent_opt, TO_LOADING))) {
+						AddStringToDraw(te->x, te->y, te->string_id, te->params_1, te->params_2);
+					}
 				}
 			}
 			break;
 
 		case ZOOM_LVL_OUT_2X:
-			for (te = _text_effect_list; te != endof(_text_effect_list); te++) {
+			for (TextEffectID i = 0; i < _num_text_effects; i++) {
+				TextEffect *te = &_text_effect_list[i];
 				if (te->string_id != INVALID_STRING_ID &&
 						dpi->left <= te->right  * 2 - te->x &&
 						dpi->top  <= te->bottom * 2 - te->y &&
 						dpi->left + dpi->width  > te->x &&
 						dpi->top  + dpi->height > te->y) {
-					AddStringToDraw(te->x, te->y, (StringID)(te->string_id-1), te->params_1, te->params_2);
+					if (te->mode == TE_RISING || (_patches.loading_indicators && !HASBIT(_transparent_opt, TO_LOADING))) {
+						AddStringToDraw(te->x, te->y, (StringID)(te->string_id - 1), te->params_1, te->params_2);
+					}
 				}
 			}
 			break;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/texteff.hpp	Tue Jun 26 23:40:58 2007 +0000
@@ -0,0 +1,35 @@
+/* $Id$ */
+
+#ifndef TEXTEFF_HPP
+#define TEXTEFF_HPP
+
+/**
+ * Text effect modes.
+ */
+enum TextEffectMode {
+	TE_RISING, ///< Make the text effect slowly go upwards
+	TE_STATIC, ///< Keep the text effect static
+
+	INVALID_TE_ID = 0xFFFF,
+};
+
+typedef uint16 TextEffectID;
+
+void MoveAllTextEffects();
+TextEffectID AddTextEffect(StringID msg, int x, int y, uint16 duration, TextEffectMode mode);
+void InitTextEffects();
+void DrawTextEffects(DrawPixelInfo *dpi);
+void UpdateTextEffect(TextEffectID effect_id, StringID msg);
+void RemoveTextEffect(TextEffectID effect_id);
+
+void InitTextMessage();
+void DrawTextMessage();
+void CDECL AddTextMessage(uint16 color, uint8 duration, const char *message, ...);
+void UndrawTextMessage();
+
+/* misc_gui.cpp */
+TextEffectID ShowFillingPercent(int x, int y, int z, uint8 percent, StringID color);
+void UpdateFillingPercent(TextEffectID te_id, uint8 percent, StringID color);
+void HideFillingPercent(TextEffectID te_id);
+
+#endif /* TEXTEFF_HPP */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/timetable.h	Tue Jun 26 23:40:58 2007 +0000
@@ -0,0 +1,11 @@
+/* $Id$ */
+
+/** @file timetable.h */
+
+#ifndef TIMETABLE_H
+#define TIMETABLE_H
+
+void ShowTimetableWindow(const Vehicle *v);
+void UpdateVehicleTimetable(Vehicle *v, bool travelling);
+
+#endif /* TIMETABLE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/timetable_cmd.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -0,0 +1,182 @@
+/* $Id$ */
+
+/** @file timetable_cmd.cpp */
+
+#include "stdafx.h"
+#include "openttd.h"
+#include "functions.h"
+#include "variables.h"
+#include "table/strings.h"
+#include "command.h"
+#include "date.h"
+#include "player.h"
+#include "vehicle.h"
+
+
+static void ChangeTimetable(Vehicle *v, VehicleOrderID order_number, uint16 time, bool is_journey)
+{
+	Order *order = GetVehicleOrder(v, order_number);
+
+	if (is_journey) {
+		order->travel_time = time;
+	} else {
+		order->wait_time = time;
+	}
+
+	if (v->cur_order_index == order_number && HASBIT(v->current_order.flags, OFB_PART_OF_ORDERS)) {
+		if (is_journey) {
+			v->current_order.travel_time = time;
+		} else {
+			v->current_order.wait_time = time;
+		}
+	}
+
+	InvalidateWindow(WC_VEHICLE_TIMETABLE, v->index);
+}
+
+/**
+ * Add or remove waiting times from an order.
+ * @param tile Not used.
+ * @param flags Operation to perform.
+ * @param p1 Various bitstuffed elements
+ * - p1 = (bit  0-15) - Vehicle with the orders to change.
+ * - p1 = (bit 16-23) - Order index to modify.
+ * - p1 = (bit    24) - Whether to change the waiting time or the travelling
+ *                      time.
+ * @param p2 The amount of time to wait.
+ */
+CommandCost CmdChangeTimetable(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+{
+	if (!_patches.timetabling) return CMD_ERROR;
+
+	VehicleID veh = GB(p1, 0, 16);
+	if (!IsValidVehicleID(veh)) return CMD_ERROR;
+
+	Vehicle *v = GetVehicle(veh);
+	if (!CheckOwnership(v->owner)) return CMD_ERROR;
+
+	VehicleOrderID order_number = GB(p1, 16, 8);
+	Order *order = GetVehicleOrder(v, order_number);
+	if (order == NULL) return CMD_ERROR;
+
+	bool is_journey = HASBIT(p1, 24);
+	if (!is_journey) {
+		if (order->type != OT_GOTO_STATION) return_cmd_error(STR_TIMETABLE_ONLY_WAIT_AT_STATIONS);
+		if (_patches.new_nonstop && (order->flags & OF_NON_STOP)) return_cmd_error(STR_TIMETABLE_NOT_STOPPING_HERE);
+	}
+
+	if (flags & DC_EXEC) {
+		ChangeTimetable(v, order_number, p2, is_journey);
+	}
+
+	return CommandCost();
+}
+
+/**
+ * Clear the lateness counter to make the vehicle on time.
+ * @param tile Not used.
+ * @param flags Operation to perform.
+ * @param p1 Various bitstuffed elements
+ * - p1 = (bit  0-15) - Vehicle with the orders to change.
+ */
+CommandCost CmdSetVehicleOnTime(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+{
+	if (!_patches.timetabling) return CMD_ERROR;
+
+	VehicleID veh = GB(p1, 0, 16);
+	if (!IsValidVehicleID(veh)) return CMD_ERROR;
+
+	Vehicle *v = GetVehicle(veh);
+	if (!CheckOwnership(v->owner)) return CMD_ERROR;
+
+	if (flags & DC_EXEC) {
+		v->lateness_counter = 0;
+	}
+
+	return CommandCost();
+}
+
+/**
+ * Start or stop filling the timetable automatically from the time the vehicle
+ * actually takes to complete it. When starting to autofill the current times
+ * are cleared and the timetable will start again from scratch.
+ * @param tile Not used.
+ * @param flags Operation to perform.
+ * @param p1 Vehicle index.
+ * @param p2 Set to 1 to enable, 0 to disable.
+ */
+CommandCost CmdAutofillTimetable(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+{
+	if (!_patches.timetabling) return CMD_ERROR;
+
+	VehicleID veh = GB(p1, 0, 16);
+	if (!IsValidVehicleID(veh)) return CMD_ERROR;
+
+	Vehicle *v = GetVehicle(veh);
+	if (!CheckOwnership(v->owner)) return CMD_ERROR;
+
+	if (flags & DC_EXEC) {
+		if (p2 == 1) {
+			/* Start autofilling the timetable, which clears all the current
+			 * timings and clears the "timetable has started" bit. */
+			SETBIT(v->vehicle_flags, VF_AUTOFILL_TIMETABLE);
+			CLRBIT(v->vehicle_flags, VF_TIMETABLE_STARTED);
+
+			for (Order *order = GetVehicleOrder(v, 0); order != NULL; order = order->next) {
+				order->wait_time = 0;
+				order->travel_time = 0;
+			}
+
+			v->current_order.wait_time = 0;
+			v->current_order.travel_time = 0;
+		} else {
+			CLRBIT(v->vehicle_flags, VF_AUTOFILL_TIMETABLE);
+		}
+	}
+
+	return CommandCost();
+}
+
+void UpdateVehicleTimetable(Vehicle *v, bool travelling)
+{
+	uint timetabled = travelling ? v->current_order.travel_time : v->current_order.wait_time;
+	uint time_taken = v->current_order_time;
+
+	v->current_order_time = 0;
+
+	if (!_patches.timetabling) return;
+
+	/* Make sure the timetable only starts when the vehicle reaches the first
+ 	 * order, not when travelling from the depot to the first station. */
+ 	if (v->cur_order_index == 0 && !HASBIT(v->vehicle_flags, VF_TIMETABLE_STARTED)) {
+ 		SETBIT(v->vehicle_flags, VF_TIMETABLE_STARTED);
+ 		return;
+ 	}
+
+	if (!HASBIT(v->vehicle_flags, VF_TIMETABLE_STARTED)) return;
+
+ 	if (HASBIT(v->vehicle_flags, VF_AUTOFILL_TIMETABLE)) {
+		if (timetabled == 0) {
+			/* Round the time taken up to the nearest day, as this will avoid
+			 * confusion for people who are timetabling in days, and can be
+			 * adjusted later by people who aren't. */
+			time_taken = (((time_taken - 1) / DAY_TICKS) + 1) * DAY_TICKS;
+
+			ChangeTimetable(v, v->cur_order_index, time_taken, travelling);
+			return;
+		} else if (v->cur_order_index == 0) {
+			/* Otherwise if we're at the beginning and it already has a value,
+			 * assume that autofill is finished and turn it off again. */
+			CLRBIT(v->vehicle_flags, VF_AUTOFILL_TIMETABLE);
+		}
+ 	}
+
+	/* Vehicles will wait at stations if they arrive early even if they are not
+	 * timetabled to wait there, so make sure the lateness counter is updated
+	 * when this happens. */
+	if (timetabled == 0 && (travelling || v->lateness_counter >= 0)) return;
+
+	v->lateness_counter -= (timetabled - time_taken);
+
+	InvalidateWindow(WC_VEHICLE_TIMETABLE, v->index);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/timetable_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -0,0 +1,335 @@
+/* $Id$ */
+
+/** @file timetable_gui.cpp */
+
+#include "stdafx.h"
+#include "openttd.h"
+#include "functions.h"
+#include "variables.h"
+#include "table/strings.h"
+#include "command.h"
+#include "date.h"
+#include "engine.h"
+#include "gui.h"
+#include "string.h"
+#include "window.h"
+#include "vehicle.h"
+#include "cargotype.h"
+#include "depot.h"
+
+static int GetOrderFromTimetableWndPt(Window *w, int y, const Vehicle *v)
+{
+	/*
+	 * Calculation description:
+	 * 15 = 14 (w->widget[ORDER_WIDGET_ORDER_LIST].top) + 1 (frame-line)
+	 * 10 = order text hight
+	 */
+	int sel = (y - 15) / 10;
+
+	if ((uint)sel >= w->vscroll.cap) return INVALID_ORDER;
+
+	sel += w->vscroll.pos;
+
+	return (sel <= v->num_orders * 2 && sel >= 0) ? sel : INVALID_ORDER;
+}
+
+static inline void SetTimetableParams(int param1, int param2, uint32 time)
+{
+	if (_patches.timetable_in_ticks) {
+		SetDParam(param1, STR_TIMETABLE_TICKS);
+		SetDParam(param2, time);
+	} else {
+		SetDParam(param1, STR_TIMETABLE_DAYS);
+		SetDParam(param2, time / DAY_TICKS);
+	}
+}
+
+static void DrawTimetableWindow(Window *w)
+{
+	const Vehicle *v = GetVehicle(w->window_number);
+	int selected = WP(w,order_d).sel;
+
+	SetVScrollCount(w, v->num_orders * 2);
+
+	if (v->owner == _local_player) {
+		if (selected == -1) {
+			DisableWindowWidget(w, 6);
+			DisableWindowWidget(w, 7);
+		} else if (selected % 2 == 1) {
+			EnableWindowWidget(w, 6);
+			EnableWindowWidget(w, 7);
+		} else {
+			const Order *order = GetVehicleOrder(v, (selected + 1) / 2);
+			bool disable = order == NULL || order->type != OT_GOTO_STATION || (_patches.new_nonstop && (order->flags & OF_NON_STOP));
+
+			SetWindowWidgetDisabledState(w, 6, disable);
+			SetWindowWidgetDisabledState(w, 7, disable);
+		}
+
+		EnableWindowWidget(w, 8);
+		EnableWindowWidget(w, 9);
+	} else {
+		DisableWindowWidget(w, 6);
+		DisableWindowWidget(w, 7);
+		DisableWindowWidget(w, 8);
+		DisableWindowWidget(w, 9);
+	}
+
+	SetWindowWidgetLoweredState(w, 9, HASBIT(v->vehicle_flags, VF_AUTOFILL_TIMETABLE));
+
+	SetDParam(0, v->index);
+	DrawWindowWidgets(w);
+
+	int y = 15;
+	int i = w->vscroll.pos;
+	VehicleOrderID order_id = (i + 1) / 2;
+	bool final_order = false;
+
+	const Order *order = GetVehicleOrder(v, order_id);
+
+	while (order != NULL) {
+		/* Don't draw anything if it extends past the end of the window. */
+		if (i - w->vscroll.pos >= w->vscroll.cap) break;
+
+		if (i % 2 == 0) {
+			SetDParam(2, STR_EMPTY);
+
+			switch (order->type) {
+				case OT_GOTO_STATION:
+					SetDParam(0, (order->flags & OF_NON_STOP) ? STR_880C_GO_NON_STOP_TO : STR_8806_GO_TO);
+					SetDParam(1, order->dest);
+
+					if (order->wait_time > 0) {
+						SetDParam(2, STR_TIMETABLE_STAY_FOR);
+						SetTimetableParams(3, 4, order->wait_time);
+					}
+
+					break;
+
+				case OT_GOTO_DEPOT: {
+					StringID string = STR_EMPTY;
+
+					if (v->type == VEH_AIRCRAFT) {
+						string = STR_GO_TO_AIRPORT_HANGAR;
+						SetDParam(1, order->dest);
+					} else {
+						SetDParam(1, GetDepot(order->dest)->town_index);
+
+						switch (v->type) {
+							case VEH_TRAIN: string = (order->flags & OF_NON_STOP) ? STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT : STR_GO_TO_TRAIN_DEPOT; break;
+							case VEH_ROAD:  string = STR_9038_GO_TO_ROADVEH_DEPOT; break;
+							case VEH_SHIP:  string = STR_GO_TO_SHIP_DEPOT; break;
+							default: break;
+						}
+					}
+
+					if (order->flags & OF_FULL_LOAD) string++; // Service at orders
+
+					SetDParam(0, string);
+				} break;
+
+				case OT_GOTO_WAYPOINT:
+					SetDParam(0, (order->flags & OF_NON_STOP) ? STR_GO_NON_STOP_TO_WAYPOINT : STR_GO_TO_WAYPOINT);
+					SetDParam(1, order->dest);
+					break;
+
+				default: break;
+			}
+
+			byte colour = (i == selected) ? 0xC : 0x10;
+
+			if (order->type != OT_DUMMY) {
+				DrawString(2, y, STR_TIMETABLE_GO_TO, colour);
+			} else {
+				SetDParam(0, STR_INVALID_ORDER);
+				DrawString(2, y, STR_TIMETABLE_GO_TO, colour);
+			}
+
+			order_id++;
+
+			if (order_id >= v->num_orders) {
+				order = GetVehicleOrder(v, 0);
+				final_order = true;
+			} else {
+				order = order->next;
+			}
+		} else {
+			StringID string;
+
+			if (order->travel_time == 0) {
+				string = STR_TIMETABLE_TRAVEL_NOT_TIMETABLED;
+			} else {
+				SetTimetableParams(0, 1, order->travel_time);
+				string = STR_TIMETABLE_TRAVEL_FOR;
+			}
+
+			byte colour = (i == selected) ? 0xC : 0x10;
+			DrawString(12, y, string, colour);
+
+			if (final_order) break;
+		}
+
+		i++;
+		y += 10;
+	}
+
+	y = w->widget[5].top + 1;
+
+	{
+		uint total_time = 0;
+		bool complete = true;
+
+		for (const Order *order = GetVehicleOrder(v, 0); order != NULL; order = order->next) {
+			total_time += order->travel_time + order->wait_time;
+			if (order->travel_time == 0) complete = false;
+			if (order->wait_time == 0 && order->type == OT_GOTO_STATION && !(_patches.new_nonstop && (order->flags & OF_NON_STOP))) complete = false;
+		}
+
+		if (total_time != 0) {
+			SetTimetableParams(0, 1, total_time);
+			DrawString(2, y, complete ? STR_TIMETABLE_TOTAL_TIME : STR_TIMETABLE_TOTAL_TIME_INCOMPLETE, 0x10);
+		}
+	}
+	y += 10;
+
+	if (v->lateness_counter == 0 || (!_patches.timetable_in_ticks && v->lateness_counter / DAY_TICKS == 0)) {
+		DrawString(2, y, STR_TIMETABLE_STATUS_ON_TIME, 0x10);
+	} else {
+		SetTimetableParams(0, 1, abs(v->lateness_counter));
+		DrawString(2, y, v->lateness_counter < 0 ? STR_TIMETABLE_STATUS_EARLY : STR_TIMETABLE_STATUS_LATE, 0x10);
+	}
+}
+
+static inline uint32 PackTimetableArgs(const Vehicle *v, uint selected)
+{
+	uint order_number = (selected + 1) / 2;
+	uint is_journey   = (selected % 2 == 1) ? 1 : 0;
+
+	if (order_number >= v->num_orders) order_number = 0;
+
+	return v->index | (order_number << 16) | (is_journey << 24);
+}
+
+static void TimetableWndProc(Window *w, WindowEvent *we)
+{
+	switch (we->event) {
+		case WE_PAINT:
+			DrawTimetableWindow(w);
+			break;
+
+		case WE_CLICK: {
+			const Vehicle *v = GetVehicle(w->window_number);
+
+			switch (we->we.click.widget) {
+				case 3: { /* Main panel. */
+					int selected = GetOrderFromTimetableWndPt(w, we->we.click.pt.y, v);
+
+					if (selected == INVALID_ORDER || selected == WP(w,order_d).sel) {
+						/* Deselect clicked order */
+						WP(w,order_d).sel = -1;
+					} else {
+						/* Select clicked order */
+						WP(w,order_d).sel = selected;
+					}
+				} break;
+
+				case 6: { /* "Wait For" button. */
+					int selected = WP(w,order_d).sel;
+					VehicleOrderID real = (selected + 1) / 2;
+
+					if (real >= v->num_orders) real = 0;
+
+					const Order *order = GetVehicleOrder(v, real);
+					StringID current = STR_EMPTY;
+
+					if (order != NULL) {
+						uint time = (selected % 2 == 1) ? order->travel_time : order->wait_time;
+						if (!_patches.timetable_in_ticks) time /= DAY_TICKS;
+
+						if (time != 0) {
+							SetDParam(0, time);
+							current = STR_CONFIG_PATCHES_INT32;
+						}
+					}
+
+					ShowQueryString(current, STR_TIMETABLE_CHANGE_TIME, 31, 150, w, CS_NUMERAL);
+				} break;
+
+				case 7: { /* Clear waiting time button. */
+					uint32 p1 = PackTimetableArgs(v, WP(w,order_d).sel);
+					DoCommandP(0, p1, 0, NULL, CMD_CHANGE_TIMETABLE | CMD_MSG(STR_CAN_T_TIMETABLE_VEHICLE));
+				} break;
+
+				case 8: /* Reset the vehicle's late counter. */
+					DoCommandP(0, v->index, 0, NULL, CMD_SET_VEHICLE_ON_TIME | CMD_MSG(STR_CAN_T_TIMETABLE_VEHICLE));
+					break;
+
+				case 9: /* Autofill the timetable. */
+					DoCommandP(0, v->index, HASBIT(v->vehicle_flags, VF_AUTOFILL_TIMETABLE) ? 0 : 1, NULL, CMD_AUTOFILL_TIMETABLE | CMD_MSG(STR_CAN_T_TIMETABLE_VEHICLE));
+					break;
+			}
+
+			SetWindowDirty(w);
+		} break;
+
+		case WE_ON_EDIT_TEXT: {
+			const Vehicle *v = GetVehicle(w->window_number);
+
+			uint32 p1 = PackTimetableArgs(v, WP(w,order_d).sel);
+
+			uint64 time = StrEmpty(we->we.edittext.str) ? 0 : strtoul(we->we.edittext.str, NULL, 10);
+			if (!_patches.timetable_in_ticks) time *= DAY_TICKS;
+
+			uint32 p2 = minu(time, MAX_UVALUE(uint16));
+
+			DoCommandP(0, p1, p2, NULL, CMD_CHANGE_TIMETABLE | CMD_MSG(STR_CAN_T_TIMETABLE_VEHICLE));
+		} break;
+
+		case WE_RESIZE:
+			/* Update the scroll + matrix */
+			w->vscroll.cap = (w->widget[3].bottom - w->widget[3].top) / 10;
+			break;
+
+	}
+}
+
+static const Widget _timetable_widgets[] = {
+	{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                   STR_018B_CLOSE_WINDOW},
+	{    WWT_CAPTION,   RESIZE_RIGHT,   14,    11,   387,     0,    13, STR_TIMETABLE_TITLE,        STR_018C_WINDOW_TITLE_DRAG_THIS},
+	{  WWT_STICKYBOX,   RESIZE_LR,      14,   388,   399,     0,    13, STR_NULL,                   STR_STICKY_BUTTON},
+
+	{      WWT_PANEL,   RESIZE_RB,      14,     0,   387,    14,    95, STR_NULL,                   STR_TIMETABLE_TOOLTIP},
+	{  WWT_SCROLLBAR,   RESIZE_LRB,     14,   388,   399,    14,    95, STR_NULL,                   STR_0190_SCROLL_BAR_SCROLLS_LIST},
+
+	{      WWT_PANEL,   RESIZE_RTB,     14,     0,   399,    96,   117, STR_NULL,                   STR_NULL},
+
+	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,     0,   109,   118,   129, STR_TIMETABLE_CHANGE_TIME,  STR_TIMETABLE_WAIT_TIME_TOOLTIP},
+	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   110,   219,   118,   129, STR_CLEAR_TIME,             STR_TIMETABLE_CLEAR_TIME_TOOLTIP},
+	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   220,   337,   118,   129, STR_RESET_LATENESS,         STR_TIMETABLE_RESET_LATENESS_TOOLTIP},
+	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   338,   387,   118,   129, STR_TIMETABLE_AUTOFILL,     STR_TIMETABLE_AUTOFILL_TOOLTIP},
+
+	{      WWT_PANEL,   RESIZE_RTB,     14,   388,   387,   118,   129, STR_NULL,                   STR_NULL},
+	{  WWT_RESIZEBOX,   RESIZE_LRTB,    14,   388,   399,   118,   129, STR_NULL,                   STR_RESIZE_BUTTON},
+
+	{    WIDGETS_END }
+};
+
+static const WindowDesc _timetable_desc = {
+	WDP_AUTO, WDP_AUTO, 400, 130,
+	WC_VEHICLE_TIMETABLE, WC_VEHICLE_VIEW,
+	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
+	_timetable_widgets,
+	TimetableWndProc
+};
+
+void ShowTimetableWindow(const Vehicle *v)
+{
+	Window *w = AllocateWindowDescFront(&_timetable_desc, v->index);
+
+	if (w != NULL) {
+		w->caption_color = v->owner;
+		w->vscroll.cap = 8;
+		w->resize.step_height = 10;
+		WP(w,order_d).sel = -1;
+	}
+}
--- a/src/town.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/town.h	Tue Jun 26 23:40:58 2007 +0000
@@ -83,6 +83,7 @@
 	uint32 population;
 
 	/* Town name */
+	uint32 townnamegrfid;
 	uint16 townnametype;
 	uint32 townnameparts;
 
--- a/src/town_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/town_cmd.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -39,6 +39,7 @@
 #include "newgrf_callbacks.h"
 #include "newgrf_house.h"
 #include "newgrf_commons.h"
+#include "newgrf_townname.h"
 
 /**
  * Called if a new block is added to the town-pool
@@ -478,17 +479,17 @@
 	/* not used */
 }
 
-static int32 ClearTile_Town(TileIndex tile, byte flags)
+static CommandCost ClearTile_Town(TileIndex tile, byte flags)
 {
 	int rating;
-	int32 cost;
+	CommandCost cost;
 	Town *t;
 	HouseSpec *hs = GetHouseSpecs(GetHouseType(tile));
 
 	if (flags & DC_AUTO) return_cmd_error(STR_2004_BUILDING_MUST_BE_DEMOLISHED);
 	if (!CanDeleteHouse(tile)) return CMD_ERROR;
 
-	cost = _price.remove_house * hs->removal_cost >> 8;
+	cost.AddCost(_price.remove_house * hs->removal_cost >> 8);
 
 	rating = hs->remove_rating_decrease;
 	_cleared_town_rating += rating;
@@ -667,6 +668,8 @@
 
 static bool IsRoadAllowedHere(TileIndex tile, int dir)
 {
+	if (TileX(tile) < 1 || TileY(tile) < 1 || MapMaxX() <= TileX(tile) || MapMaxY() <= TileY(tile)) return false;
+
 	Slope k;
 	Slope slope;
 
@@ -708,7 +711,7 @@
 			uint32 r = Random();
 
 			if (CHANCE16I(1, 8, r) && !_generating_world) {
-				int32 res;
+				CommandCost res;
 
 				if (CHANCE16I(1, 16, r)) {
 					res = DoCommand(tile, slope, 0, DC_EXEC | DC_AUTO | DC_NO_WATER,
@@ -730,12 +733,12 @@
 
 static bool TerraformTownTile(TileIndex tile, int edges, int dir)
 {
-	int32 r;
+	CommandCost r;
 
 	TILE_ASSERT(tile);
 
 	r = DoCommand(tile, edges, dir, DC_AUTO | DC_NO_WATER, CMD_TERRAFORM_LAND);
-	if (CmdFailed(r) || r >= 126 * 16) return false;
+	if (CmdFailed(r) || r.GetCost() >= 126 * 16) return false;
 	DoCommand(tile, edges, dir, DC_AUTO | DC_NO_WATER | DC_EXEC, CMD_TERRAFORM_LAND);
 	return true;
 }
@@ -1063,7 +1066,7 @@
 
 		default:
 build_road_and_exit:
-			if (!CmdFailed(DoCommand(tile, rcmd, t1->index, DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_BUILD_ROAD))) {
+			if (CmdSucceeded(DoCommand(tile, rcmd, t1->index, DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_BUILD_ROAD))) {
 				_grow_town_result = -1;
 			}
 			return;
@@ -1096,7 +1099,7 @@
 		do {
 			byte bridge_type = RandomRange(MAX_BRIDGES - 1);
 			if (CheckBridge_Stuff(bridge_type, bridge_len)) {
-				if (!CmdFailed(DoCommand(tile, tmptile, bridge_type | ((0x80 | ROADTYPES_ROAD) << 8), DC_EXEC | DC_AUTO, CMD_BUILD_BRIDGE)))
+				if (CmdSucceeded(DoCommand(tile, tmptile, bridge_type | ((0x80 | ROADTYPES_ROAD) << 8), DC_EXEC | DC_AUTO, CMD_BUILD_BRIDGE)))
 					_grow_town_result = -1;
 
 				/* obviously, if building any bridge would fail, there is no need to try other bridge-types */
@@ -1235,7 +1238,7 @@
 	for (ptr = _town_coord_mod; ptr != endof(_town_coord_mod); ++ptr) {
 		/* Only work with plain land that not already has a house */
 		if (!IsTileType(tile, MP_HOUSE) && GetTileSlope(tile, NULL) == SLOPE_FLAT) {
-			if (!CmdFailed(DoCommand(tile, 0, 0, DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR))) {
+			if (CmdSucceeded(DoCommand(tile, 0, 0, DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR))) {
 				DoCommand(tile, GenRandomRoadBits(), t->index, DC_EXEC | DC_AUTO, CMD_BUILD_ROAD);
 				_current_player = old_player;
 				return true;
@@ -1295,6 +1298,7 @@
 
 static bool CreateTownName(uint32 *townnameparts)
 {
+	extern int _nb_orig_names;
 	Town *t2;
 	char buf1[64];
 	char buf2[64];
@@ -1305,7 +1309,9 @@
 	 * the other towns may take considerable amount of time (10000 is
 	 * too much). */
 	int tries = 1000;
-	uint16 townnametype = SPECSTR_TOWNNAME_START + _opt.town_name;
+	bool grf = (_opt.town_name >= _nb_orig_names);
+	uint32 grfid = grf ? GetGRFTownNameId(_opt.town_name - _nb_orig_names) : 0;
+	uint16 townnametype = grf ? GetGRFTownNameType(_opt.town_name - _nb_orig_names) : SPECSTR_TOWNNAME_START + _opt.town_name;
 
 	assert(townnameparts);
 
@@ -1314,7 +1320,11 @@
 		r = Random();
 
 		SetDParam(0, r);
-		GetString(buf1, townnametype, lastof(buf1));
+		if (grf && grfid != 0) {
+			GRFTownNameGenerate(buf1, grfid, townnametype, r, lastof(buf1));
+		} else {
+			GetString(buf1, townnametype, lastof(buf1));
+		}
 
 		/* Check size and width */
 		if (strlen(buf1) >= 31 || GetStringBoundingBox(buf1).width > 130) continue;
@@ -1351,6 +1361,7 @@
  */
 static void DoCreateTown(Town *t, TileIndex tile, uint32 townnameparts, TownSizeMode size_mode, uint size)
 {
+	extern int _nb_orig_names;
 	int x, i;
 
 	/* clear the town struct */
@@ -1392,7 +1403,15 @@
 	t->exclusive_counter = 0;
 	t->statues = 0;
 
-	t->townnametype = SPECSTR_TOWNNAME_START + _opt.town_name;
+	if (_opt.town_name < _nb_orig_names) {
+		/* Original town name */
+		t->townnamegrfid = 0;
+		t->townnametype = SPECSTR_TOWNNAME_START + _opt.town_name;
+	} else {
+		/* Newgrf town name */
+		t->townnamegrfid = GetGRFTownNameId(_opt.town_name  - _nb_orig_names);
+		t->townnametype  = GetGRFTownNameType(_opt.town_name - _nb_orig_names);
+	}
 	t->townnameparts = townnameparts;
 
 	UpdateTownVirtCoord(t);
@@ -1464,7 +1483,7 @@
  * @param p1 size of the town (0 = small, 1 = medium, 2 = large)
  * @param p2 size mode (@see TownSizeMode)
  */
-int32 CmdBuildTown(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildTown(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Town *t;
 	uint32 townnameparts;
@@ -1502,7 +1521,7 @@
 		DoCreateTown(t, tile, townnameparts, (TownSizeMode)p2, p1);
 		_generating_world = false;
 	}
-	return 0;
+	return CommandCost();
 }
 
 Town *CreateRandomTown(uint attempts, TownSizeMode mode, uint size)
@@ -1587,7 +1606,7 @@
 	if (b)
 		return false;
 
-	return !CmdFailed(DoCommand(tile, 0, 0, DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR));
+	return CmdSucceeded(DoCommand(tile, 0, 0, DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR));
 }
 
 
@@ -1770,7 +1789,7 @@
 
 static bool BuildTownHouse(Town *t, TileIndex tile)
 {
-	int32 r;
+	CommandCost r;
 
 	if (IsSteepSlope(GetTileSlope(tile, NULL))) return false;
 	if (MayHaveBridgeAbove(tile) && IsBridgeAbove(tile)) return false;
@@ -1846,7 +1865,7 @@
  * @param p1 town ID to rename
  * @param p2 unused
  */
-int32 CmdRenameTown(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRenameTown(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	StringID str;
 	Town *t;
@@ -1869,7 +1888,7 @@
 	} else {
 		DeleteName(str);
 	}
-	return 0;
+	return CommandCost();
 }
 
 /** Called from GUI */
@@ -1915,15 +1934,10 @@
 
 static void TownActionRoadRebuild(Town* t)
 {
-	const Player* p;
-
 	t->road_build_months = 6;
 
 	SetDParam(0, t->index);
-
-	p = GetPlayer(_current_player);
-	SetDParam(1, p->name_1);
-	SetDParam(2, p->name_2);
+	SetDParam(1, _current_player);
 
 	AddNewsItem(STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING,
 		NEWS_FLAGS(NM_NORMAL, NF_TILE, NT_GENERAL, 0), t->xy, 0);
@@ -1932,7 +1946,7 @@
 static bool DoBuildStatueOfCompany(TileIndex tile, TownID town_id)
 {
 	PlayerID old;
-	int32 r;
+	CommandCost r;
 
 	if (GetTileSlope(tile, NULL) != SLOPE_FLAT) return false;
 
@@ -2050,9 +2064,9 @@
  * @param p1 town to do the action at
  * @param p2 action to perform, @see _town_action_proc for the list of available actions
  */
-int32 CmdDoTownAction(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdDoTownAction(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 cost;
+	CommandCost cost;
 	Town *t;
 
 	if (!IsValidTownID(p1) || p2 > lengthof(_town_action_proc)) return CMD_ERROR;
@@ -2063,7 +2077,7 @@
 
 	SET_EXPENSES_TYPE(EXPENSES_OTHER);
 
-	cost = (_price.build_industry >> 8) * _town_action_costs[p2];
+	cost.AddCost((_price.build_industry >> 8) * _town_action_costs[p2]);
 
 	if (flags & DC_EXEC) {
 		_town_action_proc[p2](t);
@@ -2338,6 +2352,7 @@
 
 
 	    SLE_VAR(Town, num_houses,            SLE_UINT16),
+	SLE_CONDVAR(Town, townnamegrfid,         SLE_UINT32, 66, SL_MAX_VERSION),
 	    SLE_VAR(Town, townnametype,          SLE_UINT16),
 	    SLE_VAR(Town, townnameparts,         SLE_UINT32),
 
--- a/src/town_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/town_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -41,7 +41,7 @@
  */
 uint GetMaskOfTownActions(int *nump, PlayerID pid, const Town *t)
 {
-	int32 avail, ref;
+	Money avail, ref;
 	int num = 0;
 	uint avail_buttons = 0x7F; // by default all buttons except bribe are enabled.
 	uint buttons = 0;
@@ -127,9 +127,8 @@
 				if (p->is_active && (HASBIT(t->have_ratings, p->index) || t->exclusivity == p->index)) {
 					DrawPlayerIcon(p->index, 2, y);
 
-					SetDParam(0, p->name_1);
-					SetDParam(1, p->name_2);
-					SetDParam(2, GetPlayerNameString(p->index, 3));
+					SetDParam(0, p->index);
+					SetDParam(1, p->index);
 
 					r = t->ratings[p->index];
 					(str = STR_3035_APPALLING, r <= RATING_APPALLING) || // Apalling
@@ -141,7 +140,7 @@
 					(str++,                    r <= RATING_EXCELLENT) || // Excellent
 					(str++,                    true);                    // Outstanding
 
-					SetDParam(4, str);
+					SetDParam(2, str);
 					if (t->exclusivity == p->index) { // red icon for player with exclusive rights
 						DrawSprite(SPR_BLOT, PALETTE_TO_RED, 18, y);
 					}
@@ -183,6 +182,7 @@
 
 	} break;
 
+	case WE_DOUBLE_CLICK:
 	case WE_CLICK:
 		switch (e->we.click.widget) {
 		case 3: { /* listbox */
@@ -196,7 +196,8 @@
 				WP(w,def_d).data_1 = y;
 				SetWindowDirty(w);
 			}
-			break;
+			/* Fall through to clicking in case we are double-clicked */
+			if (e->event != WE_DOUBLE_CLICK || y < 0) break;
 		}
 
 		case 6: { /* carry out the action */
--- a/src/train_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/train_cmd.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -15,6 +15,7 @@
 #include "tile.h"
 #include "tunnel_map.h"
 #include "vehicle.h"
+#include "timetable.h"
 #include "articulated_vehicles.h"
 #include "command.h"
 #include "pathfind.h"
@@ -111,7 +112,7 @@
 	uint32 weight = 0;
 
 	for (Vehicle *u = v; u != NULL; u = u->next) {
-		uint32 vweight = GetCargo(u->cargo_type)->weight * u->cargo_count * FreightWagonMult(u->cargo_type) / 16;
+		uint32 vweight = GetCargo(u->cargo_type)->weight * u->cargo.Count() * FreightWagonMult(u->cargo_type) / 16;
 
 		/* Vehicle weight is not added for articulated parts. */
 		if (!IsArticulatedPart(u)) {
@@ -462,7 +463,7 @@
 
 	base = _engine_sprite_base[img] + ((direction + _engine_sprite_add[img]) & _engine_sprite_and[img]);
 
-	if (v->cargo_count >= v->cargo_cap / 2) base += _wagon_full_adder[img];
+	if (v->cargo.Count() >= v->cargo_cap / 2U) base += _wagon_full_adder[img];
 	return base;
 }
 
@@ -502,12 +503,12 @@
 	DrawSprite(image, pal, x, y);
 }
 
-static int32 CmdBuildRailWagon(EngineID engine, TileIndex tile, uint32 flags)
+static CommandCost CmdBuildRailWagon(EngineID engine, TileIndex tile, uint32 flags)
 {
 	SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
 
 	const RailVehicleInfo *rvi = RailVehInfo(engine);
-	int32 value = (GetEngineProperty(engine, 0x17, rvi->base_cost) * _price.build_railwagon) >> 8;
+	CommandCost value((GetEngineProperty(engine, 0x17, rvi->base_cost) * _price.build_railwagon) >> 8);
 
 	uint num_vehicles = 1 + CountArticulatedParts(engine);
 
@@ -565,7 +566,7 @@
 			v->cargo_type = rvi->cargo_type;
 			v->cargo_subtype = 0;
 			v->cargo_cap = rvi->capacity;
-			v->value = value;
+			v->value = value.GetCost();
 //			v->day_counter = 0;
 
 			v->u.rail.railtype = rvi->railtype;
@@ -592,7 +593,7 @@
 		}
 	}
 
-	return value;
+	return CommandCost(value);
 }
 
 /** Move all free vehicles in the depot to the train */
@@ -611,9 +612,9 @@
 	}
 }
 
-static int32 EstimateTrainCost(EngineID engine, const RailVehicleInfo* rvi)
+static CommandCost EstimateTrainCost(EngineID engine, const RailVehicleInfo* rvi)
 {
-	return GetEngineProperty(engine, 0x17, rvi->base_cost) * (_price.build_railvehicle >> 3) >> 5;
+	return CommandCost(GetEngineProperty(engine, 0x17, rvi->base_cost) * (_price.build_railvehicle >> 3) >> 5);
 }
 
 static void AddRearEngineToMultiheadedTrain(Vehicle* v, Vehicle* u, bool building)
@@ -651,7 +652,7 @@
  * @param p2 bit 0 when set, the train will get number 0, otherwise it will get a free number
  *           bit 1 prevents any free cars from being added to the train
  */
-int32 CmdBuildRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	/* Check if the engine-type is valid (for the player) */
 	if (!IsEngineBuildable(p1, VEH_TRAIN, _current_player)) return_cmd_error(STR_RAIL_VEHICLE_NOT_AVAILABLE);
@@ -673,7 +674,7 @@
 
 	if (rvi->railveh_type == RAILVEH_WAGON) return CmdBuildRailWagon(p1, tile, flags);
 
-	int32 value = EstimateTrainCost(p1, rvi);
+	CommandCost value = EstimateTrainCost(p1, rvi);
 
 	uint num_vehicles =
 		(rvi->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1) +
@@ -712,7 +713,7 @@
 			v->cargo_subtype = 0;
 			v->cargo_cap = rvi->capacity;
 			v->max_speed = rvi->max_speed;
-			v->value = value;
+			v->value = value.GetCost();
 			v->last_station_visited = INVALID_STATION;
 			v->dest_tile = 0;
 
@@ -909,7 +910,7 @@
  * - p1 (bit 16 - 31) what wagon to put the source wagon AFTER, XXX - INVALID_VEHICLE to make a new line
  * @param p2 (bit 0) move all vehicles following the source vehicle
  */
-int32 CmdMoveRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdMoveRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	VehicleID s = GB(p1, 0, 16);
 	VehicleID d = GB(p1, 16, 16);
@@ -937,7 +938,7 @@
 	}
 
 	/* don't move the same vehicle.. */
-	if (src == dst) return 0;
+	if (src == dst) return CommandCost();
 
 	/* locate the head of the two chains */
 	Vehicle *src_head = GetFirstVehicleInChain(src);
@@ -954,7 +955,7 @@
 	if (IsMultiheaded(src) && !IsTrainEngine(src)) return_cmd_error(STR_REAR_ENGINE_FOLLOW_FRONT_ERROR);
 
 	/* when moving all wagons, we can't have the same src_head and dst_head */
-	if (HASBIT(p2, 0) && src_head == dst_head) return 0;
+	if (HASBIT(p2, 0) && src_head == dst_head) return CommandCost();
 
 	{
 		int max_len = _patches.mammoth_trains ? 100 : 9;
@@ -1153,7 +1154,7 @@
 		RebuildVehicleLists();
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Start/Stop a train.
@@ -1162,7 +1163,7 @@
  * @param p1 train to start/stop
  * @param p2 unused
  */
-int32 CmdStartStopTrain(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdStartStopTrain(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidVehicleID(p1)) return CMD_ERROR;
 
@@ -1189,7 +1190,7 @@
 		InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 		InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
 	}
-	return 0;
+	return CommandCost();
 }
 
 /** Sell a (single) train wagon/engine.
@@ -1203,7 +1204,7 @@
  * - p2 = 2: when selling attached locos, rearrange all vehicles after it to separate lines;
  *           all wagons of the same type will go on the same line. Used by the AI currently
  */
-int32 CmdSellRailWagon(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSellRailWagon(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	/* Check if we deleted a vehicle window */
 	Window *w = NULL;
@@ -1235,7 +1236,7 @@
 		RebuildVehicleLists();
 	}
 
-	int32 cost = 0;
+	CommandCost cost;
 	switch (p2) {
 		case 0: case 2: { /* Delete given wagon */
 			bool switch_engine = false;    // update second wagon to engine?
@@ -1247,7 +1248,7 @@
 				IsTrainEngine(v)) ? v->u.rail.other_multiheaded_part : NULL;
 
 			if (rear != NULL) {
-				cost -= rear->value;
+				cost.AddCost(-rear->value);
 				if (flags & DC_EXEC) {
 					UnlinkWagon(rear, first);
 					DeleteDepotHighlightOfVehicle(rear);
@@ -1302,7 +1303,7 @@
 			}
 
 			/* 3. Delete the requested wagon */
-			cost -= v->value;
+			cost.AddCost(-v->value);
 			if (flags & DC_EXEC) {
 				first = UnlinkWagon(v, first);
 				DeleteDepotHighlightOfVehicle(v);
@@ -1352,7 +1353,7 @@
 						Vehicle *rear = v->u.rail.other_multiheaded_part;
 
 						if (rear != NULL) {
-							cost -= rear->value;
+							cost.AddCost(-rear->value);
 
 							/* If this is a multiheaded vehicle with nothing
 							 * between the parts, tmp will be pointing to the
@@ -1374,7 +1375,7 @@
 					}
 				}
 
-				cost -= v->value;
+				cost.AddCost(-v->value);
 				if (flags & DC_EXEC) {
 					first = UnlinkWagon(v, first);
 					DeleteDepotHighlightOfVehicle(v);
@@ -1616,7 +1617,7 @@
  * @param p1 train to reverse
  * @param p2 if true, reverse a unit in a train (needs to be in a depot)
  */
-int32 CmdReverseTrainDirection(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdReverseTrainDirection(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidVehicleID(p1)) return CMD_ERROR;
 
@@ -1656,7 +1657,7 @@
 			}
 		}
 	}
-	return 0;
+	return CommandCost();
 }
 
 /** Force a train through a red signal
@@ -1665,7 +1666,7 @@
  * @param p1 train to ignore the red signal
  * @param p2 unused
  */
-int32 CmdForceTrainProceed(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdForceTrainProceed(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (!IsValidVehicleID(p1)) return CMD_ERROR;
 
@@ -1675,7 +1676,7 @@
 
 	if (flags & DC_EXEC) v->u.rail.force_proceed = 0x50;
 
-	return 0;
+	return CommandCost();
 }
 
 /** Refits a train to the specified cargo type.
@@ -1688,7 +1689,7 @@
  * - p2 = (bit 16) - refit only this vehicle
  * @return cost of refit or error
  */
-int32 CmdRefitRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRefitRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	CargoID new_cid = GB(p2, 0, 8);
 	byte new_subtype = GB(p2, 8, 8);
@@ -1706,7 +1707,7 @@
 
 	SET_EXPENSES_TYPE(EXPENSES_TRAIN_RUN);
 
-	int32 cost = 0;
+	CommandCost cost;
 	uint num = 0;
 
 	do {
@@ -1755,12 +1756,12 @@
 
 			if (amount != 0) {
 				if (new_cid != v->cargo_type) {
-					cost += GetRefitCost(v->engine_type);
+					cost.AddCost(GetRefitCost(v->engine_type));
 				}
 
 				num += amount;
 				if (flags & DC_EXEC) {
-					v->cargo_count = (v->cargo_type == new_cid) ? min(amount, v->cargo_count) : 0;
+					v->cargo.Truncate((v->cargo_type == new_cid) ? amount : 0);
 					v->cargo_type = new_cid;
 					v->cargo_cap = amount;
 					v->cargo_subtype = new_subtype;
@@ -1872,7 +1873,7 @@
  * - p2 bit 0-3 - DEPOT_ flags (see vehicle.h)
  * - p2 bit 8-10 - VLW flag (for mass goto depot)
  */
-int32 CmdSendTrainToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSendTrainToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	if (p2 & DEPOT_MASS_SEND) {
 		/* Mass goto depot requested */
@@ -1897,7 +1898,7 @@
 				TOGGLEBIT(v->current_order.flags, OFB_HALT_IN_DEPOT);
 				InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 			}
-			return 0;
+			return CommandCost();
 		}
 
 		if (p2 & DEPOT_DONT_CANCEL) return CMD_ERROR; // Requested no cancelation of depot orders
@@ -1910,7 +1911,7 @@
 			v->current_order.flags = 0;
 			InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 		}
-		return 0;
+		return CommandCost();
 	}
 
 	/* check if at a standstill (not stopped only) in a depot
@@ -1934,7 +1935,7 @@
 		if (tfdd.reverse) DoCommand(v->tile, v->index, 0, DC_EXEC, CMD_REVERSE_TRAIN_DIRECTION);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -2379,6 +2380,7 @@
 			if (!(v->current_order.flags & OF_PART_OF_ORDERS)) return false;
 			if ((v->current_order.flags & OF_SERVICE_IF_NEEDED) &&
 					!VehicleNeedsService(v)) {
+				UpdateVehicleTimetable(v, true);
 				v->cur_order_index++;
 			}
 			break;
@@ -2393,6 +2395,7 @@
 	/* check if we've reached the waypoint? */
 	bool at_waypoint = false;
 	if (v->current_order.type == OT_GOTO_WAYPOINT && v->tile == v->dest_tile) {
+		UpdateVehicleTimetable(v, true);
 		v->cur_order_index++;
 		at_waypoint = true;
 	}
@@ -2402,6 +2405,7 @@
 			v->current_order.flags & OF_NON_STOP &&
 			IsTileType(v->tile, MP_STATION) &&
 			v->current_order.dest == GetStationIndex(v->tile)) {
+		UpdateVehicleTimetable(v, true);
 		v->cur_order_index++;
 	}
 
@@ -2525,22 +2529,28 @@
 
 static byte AfterSetTrainPos(Vehicle *v, bool new_tile)
 {
-	/* need this hint so it returns the right z coordinate on bridges. */
-	byte new_z = GetSlopeZ(v->x_pos, v->y_pos);
-
 	byte old_z = v->z_pos;
-	v->z_pos = new_z;
+	v->z_pos = GetSlopeZ(v->x_pos, v->y_pos);
 
 	if (new_tile) {
 		CLRBIT(v->u.rail.flags, VRF_GOINGUP);
 		CLRBIT(v->u.rail.flags, VRF_GOINGDOWN);
 
-		if (new_z != old_z) {
-			TileIndex tile = TileVirtXY(v->x_pos, v->y_pos);
-
-			/* XXX workaround, whole UP/DOWN detection needs overhaul */
-			if (!IsTunnelTile(tile)) {
-				SETBIT(v->u.rail.flags, (new_z > old_z) ? VRF_GOINGUP : VRF_GOINGDOWN);
+		if (v->u.rail.track == TRACK_BIT_X || v->u.rail.track == TRACK_BIT_Y) {
+			/* Any track that isn't TRACK_BIT_X or TRACK_BIT_Y cannot be sloped.
+			 * To check whether the current tile is sloped, and in which
+			 * direction it is sloped, we get the 'z' at the center of
+			 * the tile (middle_z) and the edge of the tile (old_z),
+			 * which we then can compare. */
+			static const int HALF_TILE_SIZE = TILE_SIZE / 2;
+			static const int INV_TILE_SIZE_MASK = ~(TILE_SIZE - 1);
+
+			byte middle_z = GetSlopeZ((v->x_pos & INV_TILE_SIZE_MASK) | HALF_TILE_SIZE, (v->y_pos & INV_TILE_SIZE_MASK) | HALF_TILE_SIZE);
+
+			/* For some reason tunnel tiles are always given as sloped :(
+			 * But they are not sloped... */
+			if (middle_z != v->z_pos && !IsTunnelTile(TileVirtXY(v->x_pos, v->y_pos))) {
+				SETBIT(v->u.rail.flags, (middle_z > old_z) ? VRF_GOINGUP : VRF_GOINGDOWN);
 			}
 		}
 	}
@@ -2659,28 +2669,6 @@
 }
 
 
-struct TrainCollideChecker {
-	const Vehicle *v;
-	const Vehicle *v_skip;
-};
-
-static void *FindTrainCollideEnum(Vehicle *v, void *data)
-{
-	const TrainCollideChecker* tcc = (TrainCollideChecker*)data;
-
-	if (v != tcc->v &&
-			v != tcc->v_skip &&
-			v->type == VEH_TRAIN &&
-			v->u.rail.track != TRACK_BIT_DEPOT &&
-			myabs(v->z_pos - tcc->v->z_pos) < 6 &&
-			myabs(v->x_pos - tcc->v->x_pos) < 6 &&
-			myabs(v->y_pos - tcc->v->y_pos) < 6) {
-		return v;
-	} else {
-		return NULL;
-	}
-}
-
 static void SetVehicleCrashed(Vehicle *v)
 {
 	if (v->u.rail.crash_anim_pos != 0) return;
@@ -2699,11 +2687,52 @@
 {
 	uint num = 0;
 	BEGIN_ENUM_WAGONS(v)
-		if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) num += v->cargo_count;
+		if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) num += v->cargo.Count();
 	END_ENUM_WAGONS(v)
 	return num;
 }
 
+struct TrainCollideChecker {
+	Vehicle *v;
+	const Vehicle *v_skip;
+	uint num;
+};
+
+static void *FindTrainCollideEnum(Vehicle *v, void *data)
+{
+	TrainCollideChecker* tcc = (TrainCollideChecker*)data;
+
+	if (v != tcc->v &&
+			v != tcc->v_skip &&
+			v->type == VEH_TRAIN &&
+			v->u.rail.track != TRACK_BIT_DEPOT &&
+			myabs(v->z_pos - tcc->v->z_pos) < 6 &&
+			myabs(v->x_pos - tcc->v->x_pos) < 6 &&
+			myabs(v->y_pos - tcc->v->y_pos) < 6 ) {
+
+		Vehicle *coll = GetFirstVehicleInChain(v);
+
+		/* it can't collide with its own wagons */
+		if (tcc->v == coll ||
+			(tcc->v->u.rail.track == TRACK_BIT_WORMHOLE && (tcc->v->direction & 2) != (v->direction & 2)))
+			return NULL;
+
+		/* two drivers + passengers killed in train tcc->v (if it was not crashed already) */
+		if (!(tcc->v->vehstatus & VS_CRASHED)) {
+			tcc->num += 2 + CountPassengersInTrain(tcc->v);
+			SetVehicleCrashed(tcc->v);
+		}
+
+		if (!(coll->vehstatus & VS_CRASHED)) {
+			/* two drivers + passengers killed in train coll (if it was not crashed already) */
+			tcc->num += 2 + CountPassengersInTrain(coll);
+			SetVehicleCrashed(coll);
+		}
+	}
+
+	return NULL;
+}
+
 /**
  * Checks whether the specified train has a collision with another vehicle. If
  * so, destroys this vehicle, and the other vehicle if its subtype has TS_Front.
@@ -2720,28 +2749,15 @@
 	TrainCollideChecker tcc;
 	tcc.v = v;
 	tcc.v_skip = v->next;
-
-	/* find colliding vehicle */
-	Vehicle *realcoll = (Vehicle*)VehicleFromPosXY(v->x_pos, v->y_pos, &tcc, FindTrainCollideEnum);
-	if (realcoll == NULL) return;
-
-	Vehicle *coll = GetFirstVehicleInChain(realcoll);
-
-	/* it can't collide with its own wagons */
-	if (v == coll ||
-			(v->u.rail.track == TRACK_BIT_WORMHOLE && (v->direction & 2) != (realcoll->direction & 2)))
-		return;
-
-	/* two drivers + passengers killed in train v */
-	uint num = 2 + CountPassengersInTrain(v);
-	if (!(coll->vehstatus & VS_CRASHED))
-		/* two drivers + passengers killed in train coll (if it was not crashed already) */
-		num += 2 + CountPassengersInTrain(coll);
-
-	SetVehicleCrashed(v);
-	if (IsFrontEngine(coll)) SetVehicleCrashed(coll);
-
-	SetDParam(0, num);
+	tcc.num = 0;
+
+	/* find colliding vehicles */
+	VehicleFromPosXY(v->x_pos, v->y_pos, &tcc, FindTrainCollideEnum);
+
+	/* any dead -> no crash */
+	if (tcc.num == 0) return;
+
+	SetDParam(0, tcc.num);
 	AddNewsItem(STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL,
 		NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_VEHICLE, NT_ACCIDENT, 0),
 		v->index,
@@ -3284,12 +3300,13 @@
 
 void Train_Tick(Vehicle *v)
 {
-	if (_age_cargo_skip_counter == 0 && v->cargo_days != 0xff)
-		v->cargo_days++;
+	if (_age_cargo_skip_counter == 0) v->cargo.AgeCargo();
 
 	v->tick_counter++;
 
 	if (IsFrontEngine(v)) {
+		v->current_order_time++;
+
 		TrainLocoHandler(v, false);
 
 		/* make sure vehicle wasn't deleted. */
@@ -3353,9 +3370,9 @@
 	InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 }
 
-int32 GetTrainRunningCost(const Vehicle *v)
+Money GetTrainRunningCost(const Vehicle *v)
 {
-	int32 cost = 0;
+	Money cost = 0;
 
 	do {
 		const RailVehicleInfo *rvi = RailVehInfo(v->engine_type);
@@ -3389,9 +3406,9 @@
 
 		if ((v->vehstatus & VS_STOPPED) == 0) {
 			/* running costs */
-			int32 cost = GetTrainRunningCost(v) / 364;
-
-			v->profit_this_year -= cost >> 8;
+			CommandCost cost(GetTrainRunningCost(v) / 364);
+
+			v->profit_this_year -= cost.GetCost() >> 8;
 
 			SET_EXPENSES_TYPE(EXPENSES_TRAIN_RUN);
 			SubtractMoneyFromPlayerFract(v->owner, cost);
@@ -3399,6 +3416,9 @@
 			InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
 			InvalidateWindowClasses(WC_TRAINS_LIST);
 		}
+	} else if (IsTrainEngine(v)) {
+		/* Also age engines that aren't front engines */
+		AgeVehicle(v);
 	}
 }
 
--- a/src/train_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/train_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -169,8 +169,7 @@
 		}
 
 		/* draw widgets & caption */
-		SetDParam(0, v->string_id);
-		SetDParam(1, v->unitnumber);
+		SetDParam(0, v->index);
 		DrawWindowWidgets(w);
 
 		if (v->u.rail.crash_anim_pos != 0) {
@@ -283,6 +282,7 @@
 		DeleteWindowById(WC_VEHICLE_REFIT, w->window_number);
 		DeleteWindowById(WC_VEHICLE_ORDERS, w->window_number);
 		DeleteWindowById(WC_VEHICLE_DETAILS, w->window_number);
+		DeleteWindowById(WC_VEHICLE_TIMETABLE, w->window_number);
 		break;
 
 	case WE_MOUSELOOP: {
@@ -327,13 +327,12 @@
 static void TrainDetailsCargoTab(const Vehicle *v, int x, int y)
 {
 	if (v->cargo_cap != 0) {
-		uint num = v->cargo_count;
 		StringID str = STR_8812_EMPTY;
 
-		if (num != 0) {
+		if (!v->cargo.Empty()) {
 			SetDParam(0, v->cargo_type);
-			SetDParam(1, num);
-			SetDParam(2, v->cargo_source);
+			SetDParam(1, v->cargo.Count());
+			SetDParam(2, v->cargo.Source());
 			SetDParam(3, _patches.freight_trains);
 			str = FreightWagonMult(v->cargo_type) > 1 ? STR_FROM_MULT : STR_8813_FROM;
 		}
@@ -344,11 +343,11 @@
 static void TrainDetailsInfoTab(const Vehicle *v, int x, int y)
 {
 	if (RailVehInfo(v->engine_type)->railveh_type == RAILVEH_WAGON) {
-		SetDParam(0, GetCustomEngineName(v->engine_type));
+		SetDParam(0, v->engine_type);
 		SetDParam(1, v->value);
 		DrawString(x, y, STR_882D_VALUE, 0x10);
 	} else {
-		SetDParam(0, GetCustomEngineName(v->engine_type));
+		SetDParam(0, v->engine_type);
 		SetDParam(1, v->build_year);
 		SetDParam(2, v->value);
 		DrawString(x, y, STR_882C_BUILT_VALUE, 0x10);
@@ -387,7 +386,7 @@
 		}
 
 		do {
-			act_cargo[u->cargo_type] += u->cargo_count;
+			act_cargo[u->cargo_type] += u->cargo.Count();
 			max_cargo[u->cargo_type] += u->cargo_cap;
 		} while ((u = u->next) != NULL);
 
@@ -413,8 +412,7 @@
 	SetWindowWidgetDisabledState(w, 6, !_patches.servint_trains);
 	SetWindowWidgetDisabledState(w, 7, !_patches.servint_trains);
 
-	SetDParam(0, v->string_id);
-	SetDParam(1, v->unitnumber);
+	SetDParam(0, v->index);
 	DrawWindowWidgets(w);
 
 	SetDParam(1, v->age / 366);
@@ -504,7 +502,7 @@
 				DrawString(x, y + 2, FreightWagonMult(i) > 1 ? STR_TOTAL_CAPACITY_MULT : STR_013F_TOTAL_CAPACITY, 0);
 			}
 		}
-		SetDParam(0, v->cargo_feeder_share);
+		SetDParam(0, v->cargo.FeederShare());
 		DrawString(x, y + 15, STR_FEEDER_CARGO_VALUE, 0);
 	}
 }
@@ -521,8 +519,8 @@
 		switch (e->we.click.widget) {
 		case 2: /* name train */
 			v = GetVehicle(w->window_number);
-			SetDParam(0, v->unitnumber);
-			ShowQueryString(v->string_id, STR_8865_NAME_TRAIN, 31, 150, w, CS_ALPHANUMERAL);
+			SetDParam(0, v->index);
+			ShowQueryString(STR_VEHICLE_NAME, STR_8865_NAME_TRAIN, 31, 150, w, CS_ALPHANUMERAL);
 			break;
 		case 6: /* inc serv interval */
 			mod = _ctrl_pressed? 5 : 10;
--- a/src/transparency_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/transparency_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -23,6 +23,7 @@
 	TTW_WIDGET_BUILDINGS,    ///< Make player buildings and structures transparent
 	TTW_WIDGET_BRIDGES,      ///< Make bridges transparent
 	TTW_WIDGET_STRUCTURES,   ///< Make unmovable structures transparent
+	TTW_WIDGET_LOADING,      ///< Make loading indicators transperent
 	TTW_WIDGET_END,          ///< End of toggle buttons
 };
 
@@ -59,11 +60,11 @@
 
 static const Widget _transparency_widgets[] = {
 { WWT_CLOSEBOX,   RESIZE_NONE,  7,   0,  10,   0,  13, STR_00C5,                 STR_018B_CLOSE_WINDOW},
-{  WWT_CAPTION,   RESIZE_NONE,  7,  11, 162,   0,  13, STR_TRANSPARENCY_TOOLB,   STR_018C_WINDOW_TITLE_DRAG_THIS},
-{WWT_STICKYBOX,   RESIZE_NONE,  7, 163, 174,   0,  13, STR_NULL,                 STR_STICKY_BUTTON},
+{  WWT_CAPTION,   RESIZE_NONE,  7,  11, 184,   0,  13, STR_TRANSPARENCY_TOOLB,   STR_018C_WINDOW_TITLE_DRAG_THIS},
+{WWT_STICKYBOX,   RESIZE_NONE,  7, 185, 196,   0,  13, STR_NULL,                 STR_STICKY_BUTTON},
 
 /* transparency widgets:
- * transparent signs, trees, houses, industries, player's buildings, bridges and unmovable structures */
+ * transparent signs, trees, houses, industries, player's buildings, bridges, unmovable structures and loading indicators */
 {   WWT_IMGBTN,   RESIZE_NONE,  7,   0,  21,  14,  35, SPR_IMG_SIGN,         STR_TRANSPARENT_SIGNS_DESC},
 {   WWT_IMGBTN,   RESIZE_NONE,  7,  22,  43,  14,  35, SPR_IMG_PLANTTREES,   STR_TRANSPARENT_TREES_DESC},
 {   WWT_IMGBTN,   RESIZE_NONE,  7,  44,  65,  14,  35, SPR_IMG_TOWN,         STR_TRANSPARENT_HOUSES_DESC},
@@ -71,12 +72,13 @@
 {   WWT_IMGBTN,   RESIZE_NONE,  7,  88, 109,  14,  35, SPR_IMG_COMPANY_LIST, STR_TRANSPARENT_BUILDINGS_DESC},
 {   WWT_IMGBTN,   RESIZE_NONE,  7, 110, 152,  14,  35, SPR_IMG_BRIDGE,       STR_TRANSPARENT_BRIDGES_DESC},
 {   WWT_IMGBTN,   RESIZE_NONE,  7, 153, 174,  14,  35, SPR_IMG_TRANSMITTER,  STR_TRANSPARENT_STRUCTURES_DESC},
+{   WWT_IMGBTN,   RESIZE_NONE,  7, 175, 196,  14,  35, SPR_IMG_TRAINLIST,    STR_TRANSPARENT_LOADING_DESC},
 
 {   WIDGETS_END},
 };
 
 static const WindowDesc _transparency_desc = {
-	WDP_ALIGN_TBR, 58+36, 175, 36,
+	WDP_ALIGN_TBR, 58+36, 197, 36,
 	WC_TRANSPARENCY_TOOLBAR, WC_NONE,
 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
 	_transparency_widgets,
--- a/src/tree_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/tree_cmd.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -213,10 +213,10 @@
  * @param p1 tree type, -1 means random.
  * @param p2 end tile of area-drag
  */
-int32 CmdPlantTree(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdPlantTree(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	StringID msg = INVALID_STRING_ID;
-	int32 cost;
+	CommandCost cost;
 	int ex;
 	int ey;
 	int sx, sy, x, y;
@@ -235,8 +235,6 @@
 	if (ex < sx) Swap(ex, sx);
 	if (ey < sy) Swap(ey, sy);
 
-	cost = 0; // total cost
-
 	for (x = sx; x <= ex; x++) {
 		for (y = sy; y <= ey; y++) {
 			TileIndex tile = TileXY(x, y);
@@ -254,7 +252,7 @@
 						MarkTileDirtyByTile(tile);
 					}
 					/* 2x as expensive to add more trees to an existing tile */
-					cost += _price.build_trees * 2;
+					cost.AddCost(_price.build_trees * 2);
 					break;
 
 				case MP_CLEAR:
@@ -265,8 +263,8 @@
 					}
 
 					switch (GetClearGround(tile)) {
-						case CLEAR_FIELDS: cost += _price.clear_3; break;
-						case CLEAR_ROCKS:  cost += _price.clear_2; break;
+						case CLEAR_FIELDS: cost.AddCost(_price.clear_3); break;
+						case CLEAR_ROCKS:  cost.AddCost(_price.clear_2); break;
 						default: break;
 					}
 
@@ -297,7 +295,7 @@
 						if (_game_mode == GM_EDITOR && IS_INT_INSIDE(treetype, TREE_RAINFOREST, TREE_CACTUS))
 							SetTropicZone(tile, TROPICZONE_RAINFOREST);
 					}
-					cost += _price.build_trees;
+					cost.AddCost(_price.build_trees);
 					break;
 
 				default:
@@ -307,7 +305,7 @@
 		}
 	}
 
-	if (cost == 0) {
+	if (cost.GetCost() == 0) {
 		return_cmd_error(msg);
 	} else {
 		return cost;
@@ -428,7 +426,7 @@
 	return tileh;
 }
 
-static int32 ClearTile_Trees(TileIndex tile, byte flags)
+static CommandCost ClearTile_Trees(TileIndex tile, byte flags)
 {
 	uint num;
 
@@ -443,7 +441,7 @@
 
 	if (flags & DC_EXEC) DoClearSquare(tile);
 
-	return num * _price.remove_trees;
+	return CommandCost(num * _price.remove_trees);
 }
 
 static void GetAcceptedCargo_Trees(TileIndex tile, AcceptedCargo ac)
--- a/src/tunnel_map.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/tunnel_map.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -39,7 +39,7 @@
  * @param dir  the direction to start searching to.
  * @return true if and only if there is a tunnel.
  */
-static bool IsTunnelInWayDir(TileIndex tile, uint z, DiagDirection dir)
+bool IsTunnelInWayDir(TileIndex tile, uint z, DiagDirection dir)
 {
 	TileIndexDiff delta = TileOffsByDiagDir(dir);
 	uint height;
--- a/src/tunnel_map.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/tunnel_map.h	Tue Jun 26 23:40:58 2007 +0000
@@ -87,6 +87,7 @@
 
 TileIndex GetOtherTunnelEnd(TileIndex);
 bool IsTunnelInWay(TileIndex, uint z);
+bool IsTunnelInWayDir(TileIndex tile, uint z, DiagDirection dir);
 
 
 /**
--- a/src/tunnelbridge_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/tunnelbridge_cmd.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -110,32 +110,32 @@
  * - rest is invalid
  */
 #define M(x) (1 << (x))
-static int32 CheckBridgeSlopeNorth(Axis axis, Slope tileh)
+static CommandCost CheckBridgeSlopeNorth(Axis axis, Slope tileh)
 {
 	uint32 valid;
 
 	valid = M(SLOPE_FLAT) | (axis == AXIS_X ? M(SLOPE_NE) : M(SLOPE_NW));
-	if (HASBIT(valid, tileh)) return 0;
+	if (HASBIT(valid, tileh)) return CommandCost();
 
 	valid =
 		BRIDGE_FULL_LEVELED_FOUNDATION | M(SLOPE_N) | M(SLOPE_STEEP_N) |
 		(axis == AXIS_X ? M(SLOPE_E) | M(SLOPE_STEEP_E) : M(SLOPE_W) | M(SLOPE_STEEP_W));
-	if (HASBIT(valid, tileh)) return _price.terraform;
+	if (HASBIT(valid, tileh)) return CommandCost(_price.terraform);
 
 	return CMD_ERROR;
 }
 
-static int32 CheckBridgeSlopeSouth(Axis axis, Slope tileh)
+static CommandCost CheckBridgeSlopeSouth(Axis axis, Slope tileh)
 {
 	uint32 valid;
 
 	valid = M(SLOPE_FLAT) | (axis == AXIS_X ? M(SLOPE_SW) : M(SLOPE_SE));
-	if (HASBIT(valid, tileh)) return 0;
+	if (HASBIT(valid, tileh)) return CommandCost();
 
 	valid =
 		BRIDGE_FULL_LEVELED_FOUNDATION | M(SLOPE_S) | M(SLOPE_STEEP_S) |
 		(axis == AXIS_X ? M(SLOPE_W) | M(SLOPE_STEEP_W) : M(SLOPE_E) | M(SLOPE_STEEP_E));
-	if (HASBIT(valid, tileh)) return _price.terraform;
+	if (HASBIT(valid, tileh)) return CommandCost(_price.terraform);
 
 	return CMD_ERROR;
 }
@@ -175,7 +175,7 @@
  * - p2 = (bit 8-..) - rail type or road types.
  * - p2 = (bit 15  ) - set means road bridge.
  */
-int32 CmdBuildBridge(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildBridge(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	uint bridge_type;
 	RailType railtype;
@@ -194,7 +194,7 @@
 	TileIndexDiff delta;
 	uint bridge_len;
 	Axis direction;
-	int32 cost, terraformcost, ret;
+	CommandCost cost, terraformcost, ret;
 	bool allow_on_slopes;
 	bool replace_bridge = false;
 	uint replaced_bridge_type;
@@ -300,7 +300,7 @@
 			return_cmd_error(STR_1024_AREA_IS_OWNED_BY_ANOTHER);
 		}
 
-		cost = (bridge_len + 1) * _price.clear_bridge; // The cost of clearing the current bridge.
+		cost.AddCost((bridge_len + 1) * _price.clear_bridge); // The cost of clearing the current bridge.
 		replace_bridge = true;
 		replaced_bridge_type = GetBridgeType(tile_start);
 
@@ -315,20 +315,20 @@
 		cost = ret;
 
 		terraformcost = CheckBridgeSlopeNorth(direction, tileh_start);
-		if (CmdFailed(terraformcost) || (terraformcost != 0 && !allow_on_slopes))
+		if (CmdFailed(terraformcost) || (terraformcost.GetCost() != 0 && !allow_on_slopes))
 			return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
-		cost += terraformcost;
+		cost.AddCost(terraformcost);
 
 		/* Try and clear the end landscape */
 		ret = DoCommand(tile_end, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 		if (CmdFailed(ret)) return ret;
-		cost += ret;
+		cost.AddCost(ret);
 
 		/* false - end tile slope check */
 		terraformcost = CheckBridgeSlopeSouth(direction, tileh_end);
-		if (CmdFailed(terraformcost) || (terraformcost != 0 && !allow_on_slopes))
+		if (CmdFailed(terraformcost) || (terraformcost.GetCost() != 0 && !allow_on_slopes))
 			return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
-		cost += terraformcost;
+		cost.AddCost(terraformcost);
 	}
 
 	if (!replace_bridge) {
@@ -411,7 +411,7 @@
 				/* try and clear the middle landscape */
 				ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 				if (CmdFailed(ret)) return ret;
-				cost += ret;
+				cost.AddCost(ret);
 				break;
 		}
 
@@ -439,7 +439,7 @@
 		if (IsValidPlayer(_current_player))
 			bridge_len = CalcBridgeLenCostFactor(bridge_len);
 
-		cost += (int64)bridge_len * _price.build_bridge * b->price >> 8;
+		cost.AddCost((int64)bridge_len * _price.build_bridge * b->price >> 8);
 	}
 
 	return cost;
@@ -452,7 +452,7 @@
  * @param p1 railtype or roadtypes. bit 9 set means road tunnel
  * @param p2 unused
  */
-int32 CmdBuildTunnel(TileIndex start_tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildTunnel(TileIndex start_tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	TileIndexDiff delta;
 	TileIndex end_tile;
@@ -461,8 +461,8 @@
 	Slope end_tileh;
 	uint start_z;
 	uint end_z;
-	int32 cost;
-	int32 ret;
+	CommandCost cost;
+	CommandCost ret;
 
 	_build_tunnel_endtile = 0;
 	if (!HASBIT(p1, 9)) {
@@ -488,8 +488,15 @@
 	 * for the clearing of the entrance of the tunnel. Assigning it to
 	 * cost before the loop will yield different costs depending on start-
 	 * position, because of increased-cost-by-length: 'cost += cost >> 3' */
-	cost = 0;
+
 	delta = TileOffsByDiagDir(direction);
+	DiagDirection tunnel_in_way_dir;
+	if (OtherAxis(DiagDirToAxis(direction)) == AXIS_X) {
+		tunnel_in_way_dir = (TileX(start_tile) < (MapMaxX() / 2)) ? DIAGDIR_SW : DIAGDIR_NE;
+	} else {
+		tunnel_in_way_dir = (TileY(start_tile) < (MapMaxX() / 2)) ? DIAGDIR_SE : DIAGDIR_NW;
+	}
+
 	end_tile = start_tile;
 	for (;;) {
 		end_tile += delta;
@@ -497,30 +504,40 @@
 
 		if (start_z == end_z) break;
 
-		if (!_cheats.crossing_tunnels.value && IsTunnelInWay(end_tile, start_z)) {
+		if (!_cheats.crossing_tunnels.value && IsTunnelInWayDir(end_tile, start_z, tunnel_in_way_dir)) {
 			return_cmd_error(STR_5003_ANOTHER_TUNNEL_IN_THE_WAY);
 		}
 
-		cost += _price.build_tunnel;
-		cost += cost >> 3; // add a multiplier for longer tunnels
-		if (cost >= 400000000) cost = 400000000;
+		cost.AddCost(_price.build_tunnel);
+		cost.AddCost(cost.GetCost() >> 3); // add a multiplier for longer tunnels
 	}
 
 	/* Add the cost of the entrance */
-	cost += _price.build_tunnel + ret;
+	cost.AddCost(_price.build_tunnel);
+	cost.AddCost(ret);
 
 	/* if the command fails from here on we want the end tile to be highlighted */
 	_build_tunnel_endtile = end_tile;
 
 	/* slope of end tile must be complementary to the slope of the start tile */
 	if (end_tileh != ComplementSlope(start_tileh)) {
+		/* Some (rail) track bits might be terraformed into the correct direction,
+		 * but that would still leave tracks on foundation. Therefor excavation will
+		 * always fail for rail tiles. On the other hand, for road tiles it might
+		 * succeed when there is only one road bit on the tile, but then that road
+		 * bit is removed leaving a clear tile.
+		 * This therefor preserves the behaviour that half road tiles are always removable.
+		 */
+		if (IsTileType(end_tile, MP_RAILWAY)) return_cmd_error(STR_1008_MUST_REMOVE_RAILROAD_TRACK);
+
 		ret = DoCommand(end_tile, end_tileh & start_tileh, 0, flags, CMD_TERRAFORM_LAND);
 		if (CmdFailed(ret)) return_cmd_error(STR_5005_UNABLE_TO_EXCAVATE_LAND);
 	} else {
 		ret = DoCommand(end_tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 		if (CmdFailed(ret)) return ret;
 	}
-	cost += _price.build_tunnel + ret;
+	cost.AddCost(_price.build_tunnel);
+	cost.AddCost(ret);
 
 	if (flags & DC_EXEC) {
 		if (GB(p1, 9, 1) == TRANSPORT_RAIL) {
@@ -577,7 +594,7 @@
 	return false;
 }
 
-static int32 DoClearTunnel(TileIndex tile, uint32 flags)
+static CommandCost DoClearTunnel(TileIndex tile, uint32 flags)
 {
 	Town *t = NULL;
 	TileIndex endtile;
@@ -621,7 +638,7 @@
 		YapfNotifyTrackLayoutChange(tile, track);
 		YapfNotifyTrackLayoutChange(endtile, track);
 	}
-	return _price.clear_tunnel * (length + 1);
+	return CommandCost(_price.clear_tunnel * (length + 1));
 }
 
 
@@ -637,7 +654,7 @@
 	return false;
 }
 
-static int32 DoClearBridge(TileIndex tile, uint32 flags)
+static CommandCost DoClearBridge(TileIndex tile, uint32 flags)
 {
 	DiagDirection direction;
 	TileIndexDiff delta;
@@ -694,10 +711,10 @@
 		YapfNotifyTrackLayoutChange(endtile, track);
 	}
 
-	return (DistanceManhattan(tile, endtile) + 1) * _price.clear_bridge;
+	return CommandCost((DistanceManhattan(tile, endtile) + 1) * _price.clear_bridge);
 }
 
-static int32 ClearTile_TunnelBridge(TileIndex tile, byte flags)
+static CommandCost ClearTile_TunnelBridge(TileIndex tile, byte flags)
 {
 	if (IsTunnel(tile)) {
 		if (flags & DC_AUTO) return_cmd_error(STR_5006_MUST_DEMOLISH_TUNNEL_FIRST);
@@ -720,7 +737,7 @@
  * @return            The cost and state of the operation
  * @retval CMD_ERROR  An error occured during the operation.
  */
-int32 DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec)
+CommandCost DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec)
 {
 	TileIndex endtile;
 
@@ -748,7 +765,7 @@
 			YapfNotifyTrackLayoutChange(tile, track);
 			YapfNotifyTrackLayoutChange(endtile, track);
 		}
-		return (length + 1) * (_price.build_rail / 2);
+		return CommandCost((length + 1) * (_price.build_rail / 2));
 	} else if (IsBridge(tile) && GetBridgeTransportType(tile) == TRANSPORT_RAIL) {
 
 		if (!CheckTileOwnership(tile)) return CMD_ERROR;
@@ -783,7 +800,7 @@
 			}
 		}
 
-		return (DistanceManhattan(tile, endtile) + 1) * (_price.build_rail / 2);
+		return CommandCost((DistanceManhattan(tile, endtile) + 1) * (_price.build_rail / 2));
 	} else {
 		return CMD_ERROR;
 	}
@@ -1008,6 +1025,8 @@
 		}
 
 		DrawBridgeMiddle(ti);
+	} else {
+		NOT_REACHED();
 	}
 }
 
--- a/src/unmovable_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/unmovable_cmd.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -31,7 +31,7 @@
  * @param flags docommand flags of calling function
  * @return cost of the operation
  */
-static int32 DestroyCompanyHQ(PlayerID pid, uint32 flags)
+static CommandCost DestroyCompanyHQ(PlayerID pid, uint32 flags)
 {
 	Player* p = GetPlayer(pid);
 
@@ -49,7 +49,7 @@
 	}
 
 	/* cost of relocating company is 1% of company value */
-	return CalculateCompanyValue(p) / 100;
+	return CommandCost(CalculateCompanyValue(p) / 100);
 }
 
 void UpdateCompanyHQ(Player *p, uint score)
@@ -73,7 +73,7 @@
 	MarkTileDirtyByTile(tile + TileDiffXY(1, 1));
 }
 
-extern int32 CheckFlatLandBelow(TileIndex tile, uint w, uint h, uint flags, uint invalid_dirs, StationID* station, bool check_clear = true);
+extern CommandCost CheckFlatLandBelow(TileIndex tile, uint w, uint h, uint flags, uint invalid_dirs, StationID* station, bool check_clear = true);
 
 /** Build or relocate the HQ. This depends if the HQ is already built or not
  * @param tile tile where the HQ will be built or relocated to
@@ -81,20 +81,18 @@
  * @param p1 unused
  * @param p2 unused
  */
-int32 CmdBuildCompanyHQ(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildCompanyHQ(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Player *p = GetPlayer(_current_player);
-	int cost;
-	int32 ret;
+	CommandCost cost;
 
 	SET_EXPENSES_TYPE(EXPENSES_PROPERTY);
 
-	ret = CheckFlatLandBelow(tile, 2, 2, flags, 0, NULL);
-	if (CmdFailed(ret)) return ret;
-	cost = ret;
+	cost = CheckFlatLandBelow(tile, 2, 2, flags, 0, NULL);
+	if (CmdFailed(cost)) return cost;
 
 	if (p->location_of_house != 0) { // Moving HQ
-		cost += DestroyCompanyHQ(_current_player, flags);
+		cost.AddCost(DestroyCompanyHQ(_current_player, flags));
 	}
 
 	if (flags & DC_EXEC) {
@@ -216,7 +214,7 @@
 	return IsOwnedLand(tile) ? tileh : SLOPE_FLAT;
 }
 
-static int32 ClearTile_Unmovable(TileIndex tile, byte flags)
+static CommandCost ClearTile_Unmovable(TileIndex tile, byte flags)
 {
 	if (IsCompanyHQ(tile)) {
 		if (_current_player == OWNER_WATER) {
@@ -244,7 +242,7 @@
 		DoClearSquare(tile);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 static void GetAcceptedCargo_Unmovable(TileIndex tile, AcceptedCargo ac)
--- a/src/variables.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/variables.h	Tue Jun 26 23:40:58 2007 +0000
@@ -18,7 +18,7 @@
 VARDEF Prices _price;
 VARDEF uint16 _price_frac[NUM_PRICES];
 
-VARDEF uint32 _cargo_payment_rates[NUM_CARGO];
+VARDEF Money  _cargo_payment_rates[NUM_CARGO];
 VARDEF uint16 _cargo_payment_rates_frac[NUM_CARGO];
 
 struct GameOptions {
@@ -133,6 +133,8 @@
 	byte liveries;                      // Options for displaying company liveries, 0=none, 1=self, 2=all
 	bool prefer_teamchat;               // Choose the chat message target with <ENTER>, true=all players, false=your team
 	bool advanced_vehicle_list;         // Use the "advanced" vehicle list
+	bool loading_indicators;            // Show loading indicators
+	uint8 default_rail_type;            ///< The default rail type for the rail GUI
 
 	uint8 toolbar_pos;                  // position of toolbars, 0=left, 1=center, 2=right
 	uint8 window_snap_radius;           // Windows snap at each other if closer than this
@@ -234,6 +236,9 @@
 	bool pause_on_newgame;   ///< Whether to start new games paused or not.
 
 	TownLayoutByte town_layout;  ///< Select town layout
+
+	bool timetabling;        ///< Whether to allow timetabling.
+	bool timetable_in_ticks; ///< Whether to show the timetable in ticks rather than days.
 };
 
 VARDEF Patches _patches;
@@ -265,10 +270,11 @@
 VARDEF Cheats _cheats;
 
 /* NOSAVE: Used in palette animations only, not really important. */
-VARDEF int _timer_counter;
+VARDEF int _palette_animation_counter;
 
 
 VARDEF uint32 _frame_counter;
+VARDEF uint32 _realtime_tick;
 
 VARDEF bool _do_autosave;
 VARDEF int _autosave_ctr;
@@ -280,9 +286,9 @@
 VARDEF bool _news_ticker_sound;
 
 VARDEF StringID _error_message;
-VARDEF int32 _additional_cash_required;
+VARDEF Money _additional_cash_required;
 
-VARDEF uint32 _decode_parameters[20];
+VARDEF uint64 _decode_parameters[20];
 
 VARDEF bool _rightclick_emulate;
 
@@ -338,30 +344,23 @@
 VARDEF char *_log_file;
 
 
-static inline void SetDParamX(uint32 *s, uint n, uint32 v)
+static inline void SetDParamX(uint64 *s, uint n, uint64 v)
 {
 	s[n] = v;
 }
 
-static inline uint32 GetDParamX(const uint32 *s, uint n)
+static inline uint64 GetDParamX(const uint64 *s, uint n)
 {
 	return s[n];
 }
 
-static inline void SetDParam(uint n, uint32 v)
+static inline void SetDParam(uint n, uint64 v)
 {
 	assert(n < lengthof(_decode_parameters));
 	_decode_parameters[n] = v;
 }
 
-static inline void SetDParam64(uint n, uint64 v)
-{
-	assert(n + 1 < lengthof(_decode_parameters));
-	_decode_parameters[n + 0] = v & 0xffffffff;
-	_decode_parameters[n + 1] = v >> 32;
-}
-
-static inline uint32 GetDParam(uint n)
+static inline uint64 GetDParam(uint n)
 {
 	assert(n < lengthof(_decode_parameters));
 	return _decode_parameters[n];
@@ -378,8 +377,8 @@
 StringID BindCString(const char *str);
 
 
-#define COPY_IN_DPARAM(offs, src, num) memcpy(_decode_parameters + offs, src, sizeof(uint32) * (num))
-#define COPY_OUT_DPARAM(dst, offs, num) memcpy(dst, _decode_parameters + offs, sizeof(uint32) * (num))
+#define COPY_IN_DPARAM(offs, src, num) memcpy(_decode_parameters + offs, src, sizeof(uint64) * (num))
+#define COPY_OUT_DPARAM(dst, offs, num) memcpy(dst, _decode_parameters + offs, sizeof(uint64) * (num))
 
 
 #define SET_EXPENSES_TYPE(x) _yearly_expenses_type = x;
--- a/src/vehicle.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/vehicle.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -15,6 +15,7 @@
 #include "map.h"
 #include "tile.h"
 #include "vehicle.h"
+#include "timetable.h"
 #include "gfx.h"
 #include "viewport.h"
 #include "news.h"
@@ -228,9 +229,12 @@
 	FOR_ALL_VEHICLES(v) {
 		v->UpdateDeltaXY(v->direction);
 
+		v->fill_percent_te_id = INVALID_TE_ID;
 		v->first = NULL;
 		if (v->type == VEH_TRAIN) v->u.rail.first_engine = INVALID_ENGINE;
 		if (v->type == VEH_ROAD)  v->u.road.first_engine = INVALID_ENGINE;
+
+		v->cargo.InvalidateCache();
 	}
 
 	FOR_ALL_VEHICLES(v) {
@@ -295,6 +299,7 @@
 	v->depot_list  = NULL;
 	v->random_bits = 0;
 	v->group_id = DEFAULT_GROUP;
+	v->fill_percent_te_id = INVALID_TE_ID;
 
 	return v;
 }
@@ -687,6 +692,7 @@
 		InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
 	}
 
+	v->cargo.Truncate(0);
 	UpdateVehiclePosHash(v, INVALID_COORD, 0);
 	v->next_hash = NULL;
 	v->next_new_hash = NULL;
@@ -767,14 +773,6 @@
 
 void CallVehicleTicks()
 {
-#ifdef ENABLE_NETWORK
-	/* hotfix for desync problem:
-	 *  for MP games invalidate the YAPF cache every tick to keep it exactly the same on the server and all clients */
-	if (_networking) {
-		YapfNotifyTrackLayoutChange(INVALID_TILE, INVALID_TRACK);
-	}
-#endif //ENABLE_NETWORK
-
 	_first_veh_in_depot_list = NULL; // now we are sure it's initialized at the start of each tick
 
 	Station *st;
@@ -845,21 +843,21 @@
 * @param engine_type Which engine to refit
 * @return Price for refitting
 */
-int32 GetRefitCost(EngineID engine_type)
+CommandCost GetRefitCost(EngineID engine_type)
 {
-	int32 base_cost = 0;
+	CommandCost base_cost;
 
 	switch (GetEngine(engine_type)->type) {
-		case VEH_SHIP: base_cost = _price.ship_base; break;
-		case VEH_ROAD: base_cost = _price.roadveh_base; break;
-		case VEH_AIRCRAFT: base_cost = _price.aircraft_base; break;
+		case VEH_SHIP: base_cost.AddCost(_price.ship_base); break;
+		case VEH_ROAD: base_cost.AddCost(_price.roadveh_base); break;
+		case VEH_AIRCRAFT: base_cost.AddCost(_price.aircraft_base); break;
 		case VEH_TRAIN:
-			base_cost = 2 * ((RailVehInfo(engine_type)->railveh_type == RAILVEH_WAGON) ?
-							 _price.build_railwagon : _price.build_railvehicle);
+			base_cost.AddCost(2 * ((RailVehInfo(engine_type)->railveh_type == RAILVEH_WAGON) ?
+							 _price.build_railwagon : _price.build_railvehicle));
 			break;
 		default: NOT_REACHED(); break;
 	}
-	return (EngInfo(engine_type)->refit_cost * base_cost) >> 10;
+	return CommandCost((EngInfo(engine_type)->refit_cost * base_cost.GetCost()) >> 10);
 }
 
 static void DoDrawVehicle(const Vehicle *v)
@@ -1679,12 +1677,12 @@
  *   - bit 6 if set, then it's a vehicle list window, not a depot and Tile is ignored in this case
  *   - bit 8-11 Vehicle List Window type (ignored unless bit 1 is set)
  */
-int32 CmdMassStartStopVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdMassStartStopVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle **vl = NULL;
 	uint16 engine_list_length = 0;
 	uint16 engine_count = 0;
-	int32 return_value = CMD_ERROR;
+	CommandCost return_value = CMD_ERROR;
 	uint i;
 	uint stop_command;
 	VehicleType vehicle_type = (VehicleType)GB(p2, 0, 5);
@@ -1711,7 +1709,7 @@
 
 	for (i = 0; i < engine_count; i++) {
 		const Vehicle *v = vl[i];
-		int32 ret;
+		CommandCost ret;
 
 		if (!!(v->vehstatus & VS_STOPPED) != start_stop) continue;
 
@@ -1725,8 +1723,8 @@
 
 		ret = DoCommand(tile, v->index, 0, flags, stop_command);
 
-		if (!CmdFailed(ret)) {
-			return_value = 0;
+		if (CmdSucceeded(ret)) {
+			return_value = CommandCost();
 			/* We know that the command is valid for at least one vehicle.
 			 * If we haven't set DC_EXEC, then there is no point in continueing because it will be valid */
 			if (!(flags & DC_EXEC)) break;
@@ -1743,7 +1741,7 @@
  * @param p1 Vehicle type
  * @param p2 unused
  */
-int32 CmdDepotSellAllVehicles(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdDepotSellAllVehicles(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle **engines = NULL;
 	Vehicle **wagons = NULL;
@@ -1752,7 +1750,7 @@
 	uint16 wagon_list_length = 0;
 	uint16 wagon_count = 0;
 
-	int32 cost = 0;
+	CommandCost cost;
 	uint i, sell_command, total_number_vehicles;
 	VehicleType vehicle_type = (VehicleType)GB(p1, 0, 8);
 
@@ -1771,7 +1769,7 @@
 	total_number_vehicles = engine_count + wagon_count;
 	for (i = 0; i < total_number_vehicles; i++) {
 		const Vehicle *v;
-		int32 ret;
+		CommandCost ret;
 
 		if (i < engine_count) {
 			v = engines[i];
@@ -1781,12 +1779,12 @@
 
 		ret = DoCommand(tile, v->index, 1, flags, sell_command);
 
-		if (!CmdFailed(ret)) cost += ret;
+		if (CmdSucceeded(ret)) cost.AddCost(ret);
 	}
 
 	free(engines);
 	free(wagons);
-	if (cost == 0) return CMD_ERROR; // no vehicles to sell
+	if (cost.GetCost() == 0) return CMD_ERROR; // no vehicles to sell
 	return cost;
 }
 
@@ -1796,13 +1794,13 @@
  * @param p1 Type of vehicle
  * @param p2 Unused
  */
-int32 CmdDepotMassAutoReplace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdDepotMassAutoReplace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle **vl = NULL;
 	uint16 engine_list_length = 0;
 	uint16 engine_count = 0;
 	uint i, x = 0, y = 0, z = 0;
-	int32 cost = 0;
+	CommandCost cost;
 	VehicleType vehicle_type = (VehicleType)GB(p1, 0, 8);
 
 	if (!IsTileOwner(tile, _current_player)) return CMD_ERROR;
@@ -1814,7 +1812,7 @@
 	for (i = 0; i < engine_count; i++) {
 		Vehicle *v = vl[i];
 		bool stopped = !(v->vehstatus & VS_STOPPED);
-		int32 ret;
+		CommandCost ret;
 
 		/* Ensure that the vehicle completely in the depot */
 		if (!IsVehicleInDepot(v)) continue;
@@ -1829,8 +1827,8 @@
 		}
 		ret = MaybeReplaceVehicle(v, !(flags & DC_EXEC), false);
 
-		if (!CmdFailed(ret)) {
-			cost += ret;
+		if (CmdSucceeded(ret)) {
+			cost.AddCost(ret);
 			if (!(flags & DC_EXEC)) break;
 			/* There is a problem with autoreplace and newgrf
 			 * It's impossible to tell the length of a train after it's being replaced before it's actually done
@@ -1842,14 +1840,14 @@
 		}
 	}
 
-	if (cost == 0) {
+	if (cost.GetCost() == 0) {
 		cost = CMD_ERROR;
 	} else {
 		if (flags & DC_EXEC) {
 			/* Display the cost animation now that DoCommandP() can't do it for us (see previous comments) */
-			if (IsLocalPlayer()) ShowCostOrIncomeAnimation(x, y, z, cost);
+			if (IsLocalPlayer()) ShowCostOrIncomeAnimation(x, y, z, cost.GetCost());
 		}
-		cost = 0;
+		cost = CommandCost();
 	}
 
 	free(vl);
@@ -1862,11 +1860,11 @@
  * @param p1 the original vehicle's index
  * @param p2 1 = shared orders, else copied orders
  */
-int32 CmdCloneVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdCloneVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v_front, *v;
 	Vehicle *w_front, *w, *w_rear;
-	int32 cost, total_cost = 0;
+	CommandCost cost, total_cost;
 	uint32 build_argument = 2;
 
 	if (!IsValidVehicleID(p1)) return CMD_ERROR;
@@ -1914,7 +1912,7 @@
 
 		if (CmdFailed(cost)) return cost;
 
-		total_cost += cost;
+		total_cost.AddCost(cost);
 
 		if (flags & DC_EXEC) {
 			w = GetVehicle(_new_vehicle_id);
@@ -1926,7 +1924,7 @@
 			if (v->type == VEH_TRAIN && !IsFrontEngine(v)) {
 				/* this s a train car
 				 * add this unit to the end of the train */
-				int32 result = DoCommand(0, (w_rear->index << 16) | w->index, 1, flags, CMD_MOVE_RAIL_VEHICLE);
+				CommandCost result = DoCommand(0, (w_rear->index << 16) | w->index, 1, flags, CMD_MOVE_RAIL_VEHICLE);
 				if (CmdFailed(result)) {
 					/* The train can't be joined to make the same consist as the original.
 					 * Sell what we already made (clean up) and return an error.           */
@@ -1972,7 +1970,7 @@
 
 				if (w->cargo_type != v->cargo_type || w->cargo_subtype != v->cargo_type) {
 					cost = DoCommand(0, w->index, v->cargo_type | (v->cargo_subtype << 8) | 1U << 16 , flags, GetCmdRefitVeh(v));
-					if (!CmdFailed(cost)) total_cost += cost;
+					if (CmdSucceeded(cost)) total_cost.AddCost(cost);
 				}
 
 				if (w->type == VEH_TRAIN && EngineHasArticPart(w)) {
@@ -1986,7 +1984,7 @@
 				CargoID initial_cargo = GetEngineCargoType(v->engine_type);
 
 				if (v->cargo_type != initial_cargo && initial_cargo != CT_INVALID) {
-					total_cost += GetRefitCost(v->engine_type);
+					total_cost.AddCost(GetRefitCost(v->engine_type));
 				}
 			}
 
@@ -2223,7 +2221,7 @@
  * @param vlw_flag tells what kind of list requested the goto depot
  * @return 0 for success and CMD_ERROR if no vehicle is able to go to depot
  */
-int32 SendAllVehiclesToDepot(VehicleType type, uint32 flags, bool service, PlayerID owner, uint16 vlw_flag, uint32 id)
+CommandCost SendAllVehiclesToDepot(VehicleType type, uint32 flags, bool service, PlayerID owner, uint16 vlw_flag, uint32 id)
 {
 	const Vehicle **sort_list = NULL;
 	uint n, i;
@@ -2234,20 +2232,20 @@
 	/* Send all the vehicles to a depot */
 	for (i = 0; i < n; i++) {
 		const Vehicle *v = sort_list[i];
-		int32 ret = DoCommand(v->tile, v->index, (service ? 1 : 0) | DEPOT_DONT_CANCEL, flags, GetCmdSendToDepot(type));
+		CommandCost ret = DoCommand(v->tile, v->index, (service ? 1 : 0) | DEPOT_DONT_CANCEL, flags, GetCmdSendToDepot(type));
 
 		/* Return 0 if DC_EXEC is not set this is a valid goto depot command)
 			* In this case we know that at least one vehicle can be sent to a depot
 			* and we will issue the command. We can now safely quit the loop, knowing
 			* it will succeed at least once. With DC_EXEC we really need to send them to the depot */
-		if (!CmdFailed(ret) && !(flags & DC_EXEC)) {
+		if (CmdSucceeded(ret) && !(flags & DC_EXEC)) {
 			free((void*)sort_list);
-			return 0;
+			return CommandCost();
 		}
 	}
 
 	free((void*)sort_list);
-	return (flags & DC_EXEC) ? 0 : CMD_ERROR;
+	return (flags & DC_EXEC) ? CommandCost() : CMD_ERROR;
 }
 
 bool IsVehicleInDepot(const Vehicle *v)
@@ -2262,6 +2260,42 @@
 	return false;
 }
 
+/**
+ * Calculates how full a vehicle is.
+ * @param v The Vehicle to check. For trains, use the first engine.
+ * @param color The string to show depending on if we are unloading or loading
+ * @return A percentage of how full the Vehicle is.
+ */
+uint8 CalcPercentVehicleFilled(Vehicle *v, StringID *color)
+{
+	int count = 0;
+	int max = 0;
+	int cars = 0;
+	int unloading = 0;
+
+	assert(color != NULL);
+
+	/* Count up max and used */
+	for (; v != NULL; v = v->next) {
+		count += v->cargo.Count();
+		max += v->cargo_cap;
+		if (v->cargo_cap != 0) {
+			unloading += HASBIT(v->vehicle_flags, VF_CARGO_UNLOADING) ? 1 : 0;
+			cars++;
+		}
+	}
+
+	if (unloading == 0)         *color = STR_PERCENT_UP;
+	else if (cars == unloading) *color = STR_PERCENT_DOWN;
+	else                        *color = STR_PERCENT_UP_DOWN;
+
+	/* Train without capacity */
+	if (max == 0) return 100;
+
+	/* Return the percentage */
+	return (count * 100) / max;
+}
+
 void VehicleEnterDepot(Vehicle *v)
 {
 	switch (v->type) {
@@ -2314,7 +2348,7 @@
 		v->current_order.flags = 0;
 
 		if (t.refit_cargo < NUM_CARGO) {
-			int32 cost;
+			CommandCost cost;
 
 			_current_player = v->owner;
 			cost = DoCommand(v->tile, v->index, t.refit_cargo | t.refit_subtype << 8, DC_EXEC, GetCmdRefitVeh(v));
@@ -2327,13 +2361,14 @@
 					SetDParam(1, v->unitnumber);
 					AddNewsItem(STR_ORDER_REFIT_FAILED, NEWS_FLAGS(NM_SMALL, NF_VIEWPORT|NF_VEHICLE, NT_ADVICE, 0), v->index, 0);
 				}
-			} else if (v->owner == _local_player && cost != 0) {
-				ShowCostOrIncomeAnimation(v->x_pos, v->y_pos, v->z_pos, cost);
+			} else if (v->owner == _local_player && cost.GetCost() != 0) {
+				ShowCostOrIncomeAnimation(v->x_pos, v->y_pos, v->z_pos, cost.GetCost());
 			}
 		}
 
 		if (HASBIT(t.flags, OFB_PART_OF_ORDERS)) {
 			/* Part of orders */
+			UpdateVehicleTimetable(v, true);
 			v->cur_order_index++;
 		} else if (HASBIT(t.flags, OFB_HALT_IN_DEPOT)) {
 			/* Force depot visit */
@@ -2362,7 +2397,7 @@
  * @param p1 vehicle ID to name
  * @param p2 unused
  */
-int32 CmdNameVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdNameVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 	StringID str;
@@ -2386,7 +2421,7 @@
 		DeleteName(str);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -2396,7 +2431,7 @@
  * @param p1 vehicle ID that is being service-interval-changed
  * @param p2 new service interval
  */
-int32 CmdChangeServiceInt(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdChangeServiceInt(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle* v;
 	uint16 serv_int = GetServiceIntervalClamped(p2); /* Double check the service interval from the user-input */
@@ -2412,7 +2447,7 @@
 		InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -2721,6 +2756,14 @@
 	return GetEngineColourMap(v->engine_type, v->owner, INVALID_ENGINE, v);
 }
 
+static uint8  _cargo_days;
+static uint16 _cargo_source;
+static uint32 _cargo_source_xy;
+static uint16 _cargo_count;
+static uint16 _cargo_paid_for;
+static Money  _cargo_feeder_share;
+static uint32 _cargo_loaded_at_xy;
+
 /** Save and load of vehicles */
 extern const SaveLoad _common_veh_desc[] = {
 	    SLE_VAR(Vehicle, subtype,              SLE_UINT8),
@@ -2757,14 +2800,15 @@
 	SLE_CONDVAR(Vehicle, last_station_visited, SLE_FILE_U8  | SLE_VAR_U16,  0, 4),
 	SLE_CONDVAR(Vehicle, last_station_visited, SLE_UINT16,                  5, SL_MAX_VERSION),
 
-	    SLE_VAR(Vehicle, cargo_type,           SLE_UINT8),
-	SLE_CONDVAR(Vehicle, cargo_subtype,        SLE_UINT8,                  35, SL_MAX_VERSION),
-	    SLE_VAR(Vehicle, cargo_days,           SLE_UINT8),
-	SLE_CONDVAR(Vehicle, cargo_source,         SLE_FILE_U8  | SLE_VAR_U16,  0, 6),
-	SLE_CONDVAR(Vehicle, cargo_source,         SLE_UINT16,                  7, SL_MAX_VERSION),
-	SLE_CONDVAR(Vehicle, cargo_source_xy,      SLE_UINT32,                 44, SL_MAX_VERSION),
-	    SLE_VAR(Vehicle, cargo_cap,            SLE_UINT16),
-	    SLE_VAR(Vehicle, cargo_count,          SLE_UINT16),
+	     SLE_VAR(Vehicle, cargo_type,           SLE_UINT8),
+	 SLE_CONDVAR(Vehicle, cargo_subtype,        SLE_UINT8,                  35, SL_MAX_VERSION),
+	SLEG_CONDVAR(         _cargo_days,          SLE_UINT8,                   0, 67),
+	SLEG_CONDVAR(         _cargo_source,        SLE_FILE_U8  | SLE_VAR_U16,  0, 6),
+	SLEG_CONDVAR(         _cargo_source,        SLE_UINT16,                  7, 67),
+	SLEG_CONDVAR(         _cargo_source_xy,     SLE_UINT32,                 44, 67),
+	     SLE_VAR(Vehicle, cargo_cap,            SLE_UINT16),
+	SLEG_CONDVAR(         _cargo_count,         SLE_UINT16,                  0, 67),
+	 SLE_CONDLST(Vehicle, cargo,                REF_CARGO_PACKET,           68, SL_MAX_VERSION),
 
 	    SLE_VAR(Vehicle, day_counter,          SLE_UINT8),
 	    SLE_VAR(Vehicle, tick_counter,         SLE_UINT8),
@@ -2787,6 +2831,10 @@
 	SLE_CONDVARX(cpp_offsetof(Vehicle, current_order) + cpp_offsetof(Order, refit_cargo),    SLE_UINT8, 36, SL_MAX_VERSION),
 	SLE_CONDVARX(cpp_offsetof(Vehicle, current_order) + cpp_offsetof(Order, refit_subtype),  SLE_UINT8, 36, SL_MAX_VERSION),
 
+	/* Timetable in current order */
+	SLE_CONDVARX(cpp_offsetof(Vehicle, current_order) + cpp_offsetof(Order, wait_time),      SLE_UINT16, 67, SL_MAX_VERSION),
+	SLE_CONDVARX(cpp_offsetof(Vehicle, current_order) + cpp_offsetof(Order, travel_time),    SLE_UINT16, 67, SL_MAX_VERSION),
+
 	    SLE_REF(Vehicle, orders,               REF_ORDER),
 
 	SLE_CONDVAR(Vehicle, age,                  SLE_FILE_U16 | SLE_VAR_I32,  0, 30),
@@ -2806,15 +2854,19 @@
 	SLE_CONDVAR(Vehicle, build_year,           SLE_FILE_U8 | SLE_VAR_I32,  0, 30),
 	SLE_CONDVAR(Vehicle, build_year,           SLE_INT32,                 31, SL_MAX_VERSION),
 
-	    SLE_VAR(Vehicle, load_unload_time_rem, SLE_UINT16),
-	SLE_CONDVAR(Vehicle, cargo_paid_for,       SLE_UINT16,                45, SL_MAX_VERSION),
-	SLE_CONDVAR(Vehicle, vehicle_flags,        SLE_UINT8,                 40, SL_MAX_VERSION),
-
-	    SLE_VAR(Vehicle, profit_this_year,     SLE_INT32),
-	    SLE_VAR(Vehicle, profit_last_year,     SLE_INT32),
-	SLE_CONDVAR(Vehicle, cargo_feeder_share,   SLE_INT32,                 51, SL_MAX_VERSION),
-	SLE_CONDVAR(Vehicle, cargo_loaded_at_xy,   SLE_UINT32,                51, SL_MAX_VERSION),
-	    SLE_VAR(Vehicle, value,                SLE_UINT32),
+	     SLE_VAR(Vehicle, load_unload_time_rem, SLE_UINT16),
+	SLEG_CONDVAR(         _cargo_paid_for,      SLE_UINT16,                45, SL_MAX_VERSION),
+	 SLE_CONDVAR(Vehicle, vehicle_flags,        SLE_UINT8,                 40, SL_MAX_VERSION),
+
+	 SLE_CONDVAR(Vehicle, profit_this_year,     SLE_FILE_I32 | SLE_VAR_I64, 0, 64),
+	 SLE_CONDVAR(Vehicle, profit_this_year,     SLE_INT64,                 65, SL_MAX_VERSION),
+	 SLE_CONDVAR(Vehicle, profit_last_year,     SLE_FILE_I32 | SLE_VAR_I64, 0, 64),
+	 SLE_CONDVAR(Vehicle, profit_last_year,     SLE_INT64,                 65, SL_MAX_VERSION),
+	SLEG_CONDVAR(         _cargo_feeder_share,  SLE_FILE_I32 | SLE_VAR_I64,51, 64),
+	SLEG_CONDVAR(         _cargo_feeder_share,  SLE_INT64,                 65, 67),
+	SLEG_CONDVAR(         _cargo_loaded_at_xy,  SLE_UINT32,                51, 67),
+	 SLE_CONDVAR(Vehicle, value,                SLE_FILE_I32 | SLE_VAR_I64, 0, 64),
+	 SLE_CONDVAR(Vehicle, value,                SLE_INT64,                 65, SL_MAX_VERSION),
 
 	    SLE_VAR(Vehicle, random_bits,          SLE_UINT8),
 	    SLE_VAR(Vehicle, waiting_triggers,     SLE_UINT8),
@@ -2824,6 +2876,9 @@
 
 	SLE_CONDVAR(Vehicle, group_id,             SLE_UINT16,                60, SL_MAX_VERSION),
 
+	SLE_CONDVAR(Vehicle, current_order_time,   SLE_UINT32,                67, SL_MAX_VERSION),
+	SLE_CONDVAR(Vehicle, lateness_counter,     SLE_INT32,                 67, SL_MAX_VERSION),
+
 	/* reserve extra space in savegame here. (currently 10 bytes) */
 	SLE_CONDNULL(10,                                                       2, SL_MAX_VERSION),
 
@@ -2992,6 +3047,8 @@
 	int index;
 	Vehicle *v;
 
+	_cargo_count = 0;
+
 	while ((index = SlIterateArray()) != -1) {
 		Vehicle *v;
 
@@ -3000,9 +3057,8 @@
 
 		v = GetVehicle(index);
 		VehicleType vtype = (VehicleType)SlReadByte();
-		SlObject(v, (SaveLoad*)_veh_descs[vtype]);
-
-		switch (v->type) {
+
+		switch (vtype) {
 			case VEH_TRAIN:    v = new (v) Train();           break;
 			case VEH_ROAD:     v = new (v) RoadVehicle();     break;
 			case VEH_SHIP:     v = new (v) Ship();            break;
@@ -3013,6 +3069,20 @@
 			default: NOT_REACHED();
 		}
 
+		SlObject(v, (SaveLoad*)_veh_descs[vtype]);
+
+		if (_cargo_count != 0 && IsPlayerBuildableVehicleType(v)) {
+			/* Don't construct the packet with station here, because that'll fail with old savegames */
+			CargoPacket *cp = new CargoPacket();
+			cp->source          = _cargo_source;
+			cp->source_xy       = _cargo_source_xy;
+			cp->count           = _cargo_count;
+			cp->days_in_transit = _cargo_days;
+			cp->feeder_share    = _cargo_feeder_share;
+			cp->loaded_at_xy    = _cargo_loaded_at_xy;
+			v->cargo.Append(cp);
+		}
+
 		/* Old savegames used 'last_station_visited = 0xFF' */
 		if (CheckSavegameVersion(5) && v->last_station_visited == 0xFF)
 			v->last_station_visited = INVALID_STATION;
@@ -3066,6 +3136,7 @@
 		 * whether the train is lost or not; not marking a train lost
 		 * that arrives at random stations is bad. */
 		this->current_order.flags |= OF_NON_STOP;
+		UpdateVehicleTimetable(this, true);
 	} else {
 		/* This is just an unordered intermediate stop */
 		this->current_order.flags = 0;
@@ -3089,9 +3160,16 @@
 void Vehicle::LeaveStation()
 {
 	assert(current_order.type == OT_LOADING);
+
+	/* Only update the timetable if the vehicle was supposed to stop here. */
+	if (current_order.flags & OF_NON_STOP) UpdateVehicleTimetable(this, false);
+
 	current_order.type = OT_LEAVESTATION;
 	current_order.flags = 0;
 	GetStation(this->last_station_visited)->loading_vehicles.remove(this);
+
+	HideFillingPercent(this->fill_percent_te_id);
+	this->fill_percent_te_id = INVALID_TE_ID;
 }
 
 
@@ -3099,8 +3177,11 @@
 {
 	switch (this->current_order.type) {
 		case OT_LOADING: {
+			uint wait_time = max(this->current_order.wait_time - this->lateness_counter, 0);
+
 			/* Not the first call for this tick, or still loading */
-			if (mode || !HASBIT(this->vehicle_flags, VF_LOADING_FINISHED)) return;
+			if (mode || !HASBIT(this->vehicle_flags, VF_LOADING_FINISHED) ||
+					(_patches.timetabling && this->current_order_time < wait_time)) return;
 
 			this->PlayLeaveStationSound();
 
--- a/src/vehicle.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/vehicle.h	Tue Jun 26 23:40:58 2007 +0000
@@ -9,6 +9,8 @@
 #include "order.h"
 #include "rail.h"
 #include "road.h"
+#include "cargopacket.h"
+#include "texteff.hpp"
 
 /** The returned bits of VehicleEnterTile. */
 enum VehicleEnterTileStatus {
@@ -93,6 +95,8 @@
 	VF_LOADING_FINISHED,
 	VF_CARGO_UNLOADING,
 	VF_BUILT_AS_PROTOTYPE,
+	VF_TIMETABLE_STARTED,  ///< Whether the vehicle has started running on the timetable yet.
+	VF_AUTOFILL_TIMETABLE, ///< Whether the vehicle should fill in the timetable automatically.
 };
 
 /* Effect vehicle types */
@@ -245,6 +249,8 @@
 	int8 y_offs;             // y offset for vehicle sprite
 	EngineID engine_type;
 
+	TextEffectID fill_percent_te_id; // a text-effect id to a loading indicator object
+
 	/* for randomized variational spritegroups
 	 * bitmask used to resolve them; parts of it get reseeded when triggers
 	 * of corresponding spritegroups get matched */
@@ -262,12 +268,10 @@
 	StationID last_station_visited;
 
 	CargoID cargo_type;      // type of cargo this vehicle is carrying
-	byte cargo_days;         // how many days have the pieces been in transit
-	StationID cargo_source;  // source of cargo
-	TileIndex cargo_source_xy; //< stores the Tile where the source station is located, in case it is removed
 	uint16 cargo_cap;        // total capacity
-	uint16 cargo_count;      // how many pieces are used
 	byte cargo_subtype;      ///< Used for livery refits (NewGRF variations)
+	CargoList cargo;         ///< The cargo this vehicle is carrying
+
 
 	byte day_counter;        // increased by one for each day
 	byte tick_counter;       // increased by one for each tick
@@ -309,17 +313,18 @@
 	bool leave_depot_instantly; // NOSAVE: stores if the vehicle needs to leave the depot it just entered. Used by autoreplace
 
 	uint16 load_unload_time_rem;
-	uint16 cargo_paid_for;      // How much of the cargo currently on board has been paid for.
 	byte vehicle_flags;         // Used for gradual loading and other miscellaneous things (@see VehicleFlags enum)
 
-	int32 profit_this_year;
-	int32 profit_last_year;
-	int32 cargo_feeder_share;      ///< value of feeder pickup to be paid for on delivery of cargo
-	TileIndex cargo_loaded_at_xy;  ///< tile index where feeder cargo was loaded
-	uint32 value;
+	Money profit_this_year;
+	Money profit_last_year;
+	Money value;
 
 	GroupID group_id;              ///< Index of group Pool array
 
+	/* Used for timetabling. */
+	uint32 current_order_time;     ///< How many ticks have passed since this order started.
+	int32 lateness_counter;        ///< How many ticks late (or early if negative) this vehicle is.
+
 	union {
 		VehicleRail rail;
 		VehicleAir air;
@@ -502,6 +507,7 @@
 void *VehicleFromPosXY(int x, int y, void *data, VehicleFromPosProc *proc);
 void CallVehicleTicks();
 Vehicle *FindVehicleOnTileZ(TileIndex tile, byte z);
+uint8 CalcPercentVehicleFilled(Vehicle *v, StringID *color);
 
 void InitializeTrains();
 byte VehicleRandomBits();
@@ -509,7 +515,7 @@
 
 bool CanRefitTo(EngineID engine_type, CargoID cid_to);
 CargoID FindFirstRefittableCargo(EngineID engine_type);
-int32 GetRefitCost(EngineID engine_type);
+CommandCost GetRefitCost(EngineID engine_type);
 
 void ViewportAddVehicles(DrawPixelInfo *dpi);
 
@@ -548,7 +554,7 @@
 
 void TrainConsistChanged(Vehicle *v);
 void TrainPowerChanged(Vehicle *v);
-int32 GetTrainRunningCost(const Vehicle *v);
+Money GetTrainRunningCost(const Vehicle *v);
 
 int CheckTrainStoppedInDepot(const Vehicle *v);
 
@@ -556,13 +562,13 @@
 
 uint GenerateVehicleSortList(const Vehicle*** sort_list, uint16 *length_of_array, VehicleType type, PlayerID owner, uint32 index, uint16 window_type);
 void BuildDepotVehicleList(VehicleType type, TileIndex tile, Vehicle ***engine_list, uint16 *engine_list_length, uint16 *engine_count, Vehicle ***wagon_list, uint16 *wagon_list_length, uint16 *wagon_count);
-int32 SendAllVehiclesToDepot(VehicleType type, uint32 flags, bool service, PlayerID owner, uint16 vlw_flag, uint32 id);
+CommandCost SendAllVehiclesToDepot(VehicleType type, uint32 flags, bool service, PlayerID owner, uint16 vlw_flag, uint32 id);
 bool IsVehicleInDepot(const Vehicle *v);
 void VehicleEnterDepot(Vehicle *v);
 
 void InvalidateAutoreplaceWindow(EngineID e);
 
-int32 MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs);
+CommandCost MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs);
 
 /* Flags to add to p2 for goto depot commands */
 /* Note: bits 8-10 are used for VLW flags */
--- a/src/vehicle_gui.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/vehicle_gui.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -331,22 +331,21 @@
 
 			SetVScrollCount(w, WP(w, refit_d).list->num_lines);
 
-			SetDParam(0, v->string_id);
-			SetDParam(1, v->unitnumber);
+			SetDParam(0, v->index);
 			DrawWindowWidgets(w);
 
 			WP(w, refit_d).cargo = DrawVehicleRefitWindow(WP(w, refit_d).list, WP(w, refit_d).sel, w->vscroll.pos, w->vscroll.cap, w->resize.step_height);
 
 			if (WP(w, refit_d).cargo != NULL) {
-				int32 cost;
+				CommandCost cost;
 
 				cost = DoCommand(v->tile, v->index, WP(w, refit_d).cargo->cargo | WP(w, refit_d).cargo->subtype << 8,
 								 DC_QUERY_COST, GetCmdRefitVeh(GetVehicle(w->window_number)->type));
 
-				if (!CmdFailed(cost)) {
+				if (CmdSucceeded(cost)) {
 					SetDParam(0, WP(w, refit_d).cargo->cargo);
 					SetDParam(1, _returned_refit_capacity);
-					SetDParam(2, cost);
+					SetDParam(2, cost.GetCost());
 					DrawString(2, w->widget[5].top + 1, STR_9840_NEW_CAPACITY_COST_OF_REFIT, 0);
 				}
 			}
@@ -589,7 +588,7 @@
 {
 	const Vehicle* va = *(const Vehicle**)a;
 	const Vehicle* vb = *(const Vehicle**)b;
-	int r = va->profit_this_year - vb->profit_this_year;
+	int r = ClampToI32(va->profit_this_year - vb->profit_this_year);
 
 	VEHICLEUNITNUMBERSORTER(r, va, vb);
 
@@ -600,7 +599,7 @@
 {
 	const Vehicle* va = *(const Vehicle**)a;
 	const Vehicle* vb = *(const Vehicle**)b;
-	int r = va->profit_last_year - vb->profit_last_year;
+	int r = ClampToI32(va->profit_last_year - vb->profit_last_year);
 
 	VEHICLEUNITNUMBERSORTER(r, va, vb);
 
@@ -687,13 +686,12 @@
 	const Vehicle* va = *(const Vehicle**)a;
 	const Vehicle* vb = *(const Vehicle**)b;
 	const Vehicle *u;
-	int valuea = 0, valueb = 0;
-	int r;
+	Money valuea = 0, valueb = 0;
 
 	for (u = va; u != NULL; u = u->next) valuea += u->value;
 	for (u = vb; u != NULL; u = u->next) valueb += u->value;
 
-	r = valuea - valueb;
+	int r = ClampToI32(valuea - valueb);
 
 	VEHICLEUNITNUMBERSORTER(r, va, vb);
 
@@ -959,9 +957,8 @@
 			break;
 
 		case VLW_STANDARD: /* Company Name */
-			SetDParam(0, p->name_1);
-			SetDParam(1, p->name_2);
-			SetDParam(2, w->vscroll.count);
+			SetDParam(0, p->index);
+			SetDParam(1, w->vscroll.count);
 			break;
 
 		case VLW_STATION_LIST: /* Station Name */
@@ -1018,7 +1015,7 @@
 			(v->type == VEH_AIRCRAFT && v->string_id != STR_SV_AIRCRAFT_NAME)) {
 
 			/* The vehicle got a name so we will print it */
-			SetDParam(0, v->string_id);
+			SetDParam(0, v->index);
 			DrawString(x + 19, y, STR_01AB, 0);
 		}
 
@@ -1114,7 +1111,7 @@
 
 					/* XXX - Substite string since the dropdown cannot handle dynamic strings */
 					action_str[2] = depot_name[vl->vehicle_type];
-					ShowDropDownMenu(w, action_str, 0, VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN, 0, 0);
+					ShowDropDownMenu(w, action_str, 0, VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN, 0, (w->window_number & VLW_MASK) == VLW_STANDARD ? 0 : 1);
 					break;
 				}
 
--- a/src/video/cocoa_v.mm	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/video/cocoa_v.mm	Tue Jun 26 23:40:58 2007 +0000
@@ -77,10 +77,6 @@
 #undef Point
 #undef Rect
 
-/* Taken from ../gfx.h */
-extern bool _dbg_screen_rect;
-
-
 /* Subclass of NSWindow to fix genie effect and support resize events  */
 @interface OTTD_QuartzWindow : NSWindow
 - (void)miniaturize:(id)sender;
@@ -205,9 +201,25 @@
 
 static void QZ_CheckPaletteAnim()
 {
-	if (_pal_last_dirty != -1) {
-		QZ_UpdatePalette(_pal_first_dirty, _pal_last_dirty - _pal_first_dirty + 1);
-		_pal_last_dirty = -1;
+	if (_pal_count_dirty != 0) {
+		Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
+
+		switch (blitter->UsePaletteAnimation()) {
+			case Blitter::PALETTE_ANIMATION_VIDEO_BACKEND:
+				QZ_UpdatePalette(_pal_first_dirty, _pal_count_dirty);
+				break;
+
+			case Blitter::PALETTE_ANIMATION_BLITTER:
+				blitter->PaletteAnimate(_pal_first_dirty, _pal_count_dirty);
+				break;
+
+			case Blitter::PALETTE_ANIMATION_NONE:
+				break;
+
+			default:
+				NOT_REACHED();
+		}
+		_pal_count_dirty = 0;
 	}
 }
 
@@ -673,6 +685,7 @@
 static void QZ_GameLoop()
 {
 	uint32 cur_ticks = GetTick();
+	uint32 last_cur_ticks = cur_ticks;
 	uint32 next_tick = cur_ticks + 30;
 	uint32 pal_tick = 0;
 #ifdef _DEBUG
@@ -720,13 +733,12 @@
 
 		cur_ticks = GetTick();
 		if (cur_ticks >= next_tick || (_fast_forward && !_pause_game) || cur_ticks < prev_cur_ticks) {
+			_realtime_tick += cur_ticks - last_cur_ticks;
+			last_cur_ticks = cur_ticks;
 			next_tick = cur_ticks + 30;
 
 			_ctrl_pressed = !!(_cocoa_video_data.current_mods & NSControlKeyMask);
 			_shift_pressed = !!(_cocoa_video_data.current_mods & NSShiftKeyMask);
-#ifdef _DEBUG
-			_dbg_screen_rect = !!(_cocoa_video_data.current_mods & NSAlphaShiftKeyMask);
-#endif
 
 			GameLoop();
 
@@ -952,10 +964,6 @@
 
 static void QZ_UpdateWindowPalette(uint start, uint count)
 {
-	/* We can only update the palette in 8bpp for now */
-	/* TODO -- We need support for other bpps too! */
-	if (BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() != 8) return;
-
 	uint i;
 
 	switch (_cocoa_video_data.device_bpp) {
--- a/src/video/sdl_v.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/video/sdl_v.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -37,10 +37,6 @@
 
 static void UpdatePalette(uint start, uint count)
 {
-	/* We can only update the palette in 8bpp for now */
-	/* TODO -- We need support for other bpps too! */
-	if (BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() != 8) return;
-
 	SDL_Color pal[256];
 	uint i;
 
@@ -61,9 +57,25 @@
 
 static void CheckPaletteAnim()
 {
-	if (_pal_last_dirty != -1) {
-		UpdatePalette(_pal_first_dirty, _pal_last_dirty - _pal_first_dirty + 1);
-		_pal_last_dirty = -1;
+	if (_pal_count_dirty != 0) {
+		Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
+
+		switch (blitter->UsePaletteAnimation()) {
+			case Blitter::PALETTE_ANIMATION_VIDEO_BACKEND:
+				UpdatePalette(_pal_first_dirty, _pal_count_dirty);
+				break;
+
+			case Blitter::PALETTE_ANIMATION_BLITTER:
+				blitter->PaletteAnimate(_pal_first_dirty, _pal_count_dirty);
+				break;
+
+			case Blitter::PALETTE_ANIMATION_NONE:
+				break;
+
+			default:
+				NOT_REACHED();
+		}
+		_pal_count_dirty = 0;
 	}
 }
 
@@ -430,6 +442,7 @@
 static void SdlVideoMainLoop()
 {
 	uint32 cur_ticks = SDL_CALL SDL_GetTicks();
+	uint32 last_cur_ticks = cur_ticks;
 	uint32 next_tick = cur_ticks + 30;
 	uint32 pal_tick = 0;
 	uint32 mod;
@@ -460,13 +473,12 @@
 
 		cur_ticks = SDL_CALL SDL_GetTicks();
 		if (cur_ticks >= next_tick || (_fast_forward && !_pause_game) || cur_ticks < prev_cur_ticks) {
+			_realtime_tick += cur_ticks - last_cur_ticks;
+			last_cur_ticks = cur_ticks;
 			next_tick = cur_ticks + 30;
 
 			_ctrl_pressed  = !!(mod & KMOD_CTRL);
 			_shift_pressed = !!(mod & KMOD_SHIFT);
-#ifdef _DEBUG
-			_dbg_screen_rect = !!(mod & KMOD_CAPS);
-#endif
 
 			// determine which directional keys are down
 			_dirkeys =
--- a/src/video/win32_v.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/video/win32_v.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -34,9 +34,6 @@
 uint _display_hz;
 uint _fullscreen_bpp;
 static uint16 _bck_resolution[2];
-#if !defined(WINCE)
-static DEVMODE _fullscreen_dm;
-#endif
 #if !defined(UNICODE)
 uint _codepage;
 #endif
@@ -64,10 +61,6 @@
 
 static void UpdatePalette(HDC dc, uint start, uint count)
 {
-	/* We can only update the palette in 8bpp for now */
-	/* TODO -- We need support for other bpps too! */
-	if (BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() != 8) return;
-
 	RGBQUAD rgb[256];
 	uint i;
 
@@ -145,7 +138,7 @@
 	if (AllocateDibSection(w, h)) {
 		// mark all palette colors dirty
 		_pal_first_dirty = 0;
-		_pal_last_dirty = 255;
+		_pal_count_dirty = 255;
 		GameSizeChanged();
 
 		// redraw screen
@@ -209,6 +202,89 @@
 	}
 }
 
+static void MakeWindow(bool full_screen)
+{
+	_fullscreen = full_screen;
+
+	// recreate window?
+	if ((full_screen || _wnd.fullscreen) && _wnd.main_wnd) {
+		DestroyWindow(_wnd.main_wnd);
+		_wnd.main_wnd = 0;
+	}
+
+#if defined(WINCE)
+	/* WinCE is always fullscreen */
+#else
+	if (full_screen) {
+		DEVMODE settings;
+
+		/* Make sure we are always at least the screen-depth of the blitter */
+		if (_fullscreen_bpp < BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth()) _fullscreen_bpp = BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth();
+
+		memset(&settings, 0, sizeof(settings));
+		settings.dmSize = sizeof(settings);
+		settings.dmFields =
+			(_fullscreen_bpp != 0 ? DM_BITSPERPEL : 0) |
+			DM_PELSWIDTH |
+			DM_PELSHEIGHT |
+			(_display_hz != 0 ? DM_DISPLAYFREQUENCY : 0);
+		settings.dmBitsPerPel = _fullscreen_bpp;
+		settings.dmPelsWidth  = _wnd.width_org;
+		settings.dmPelsHeight = _wnd.height_org;
+		settings.dmDisplayFrequency = _display_hz;
+
+		if (ChangeDisplaySettings(&settings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) {
+			MakeWindow(false);
+			return;
+		}
+	} else if (_wnd.fullscreen) {
+		// restore display?
+		ChangeDisplaySettings(NULL, 0);
+	}
+#endif
+
+	{
+		RECT r;
+		DWORD style, showstyle;
+		int x, y, w, h;
+
+		showstyle = SW_SHOWNORMAL;
+		_wnd.fullscreen = full_screen;
+		if (_wnd.fullscreen) {
+			style = WS_POPUP;
+			SetRect(&r, 0, 0, _wnd.width_org, _wnd.height_org);
+		} else {
+			style = WS_OVERLAPPEDWINDOW;
+			/* On window creation, check if we were in maximize mode before */
+			if (_window_maximize) showstyle = SW_SHOWMAXIMIZED;
+			SetRect(&r, 0, 0, _wnd.width, _wnd.height);
+		}
+
+#if !defined(WINCE)
+		AdjustWindowRect(&r, style, FALSE);
+#endif
+		w = r.right - r.left;
+		h = r.bottom - r.top;
+		x = (GetSystemMetrics(SM_CXSCREEN) - w) / 2;
+		y = (GetSystemMetrics(SM_CYSCREEN) - h) / 2;
+
+		if (_wnd.main_wnd) {
+			ShowWindow(_wnd.main_wnd, SW_SHOWNORMAL); // remove maximize-flag
+			SetWindowPos(_wnd.main_wnd, 0, x, y, w, h, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOZORDER);
+		} else {
+			extern const char _openttd_revision[];
+			TCHAR Windowtitle[50];
+
+			_sntprintf(Windowtitle, sizeof(Windowtitle), _T("OpenTTD %s"), MB_TO_WIDE(_openttd_revision));
+
+			_wnd.main_wnd = CreateWindow(_T("OTTD"), Windowtitle, style, x, y, w, h, 0, 0, GetModuleHandle(NULL), 0);
+			if (_wnd.main_wnd == NULL) error("CreateWindow failed");
+			ShowWindow(_wnd.main_wnd, showstyle);
+		}
+	}
+	GameSizeChanged(); // invalidate all windows, force redraw
+}
+
 static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
 	static uint32 keycode = 0;
@@ -231,9 +307,25 @@
 			old_bmp = (HBITMAP)SelectObject(dc2, _wnd.dib_sect);
 			old_palette = SelectPalette(dc, _wnd.gdi_palette, FALSE);
 
-			if (_pal_last_dirty != -1) {
-				UpdatePalette(dc2, _pal_first_dirty, _pal_last_dirty - _pal_first_dirty + 1);
-				_pal_last_dirty = -1;
+			if (_pal_count_dirty != 0) {
+				Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
+
+				switch (blitter->UsePaletteAnimation()) {
+					case Blitter::PALETTE_ANIMATION_VIDEO_BACKEND:
+						UpdatePalette(dc2, _pal_first_dirty, _pal_count_dirty);
+						break;
+
+					case Blitter::PALETTE_ANIMATION_BLITTER:
+						blitter->PaletteAnimate(_pal_first_dirty, _pal_count_dirty);
+						break;
+
+					case Blitter::PALETTE_ANIMATION_NONE:
+						break;
+
+					default:
+						NOT_REACHED();
+				}
+				_pal_count_dirty = 0;
 			}
 
 			BitBlt(dc, 0, 0, _wnd.width, _wnd.height, dc2, 0, 0, SRCCOPY);
@@ -516,9 +608,7 @@
 				if (_wnd.has_focus && _wnd.minimized) {
 					/* Restore the game window */
 					ShowWindow(hwnd, SW_RESTORE);
-					ChangeDisplaySettings(&_fullscreen_dm, CDS_FULLSCREEN);
-					/* Force palette update */
-					SendMessage(hwnd, WM_QUERYNEWPALETTE, 0, 0);
+					MakeWindow(true);
 				} else if (!_wnd.has_focus && !_wnd.minimized) {
 					/* Minimise the window and restore desktop */
 					ShowWindow(hwnd, SW_MINIMIZE);
@@ -555,87 +645,6 @@
 	}
 }
 
-static void MakeWindow(bool full_screen)
-{
-	_fullscreen = full_screen;
-
-	// recreate window?
-	if ((full_screen || _wnd.fullscreen) && _wnd.main_wnd) {
-		DestroyWindow(_wnd.main_wnd);
-		_wnd.main_wnd = 0;
-	}
-
-#if defined(WINCE)
-	/* WinCE is always fullscreen */
-#else
-	if (full_screen) {
-		/* Make sure we are always at least the screen-depth of the blitter */
-		if (_fullscreen_bpp < BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth()) _fullscreen_bpp = BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth();
-
-		memset(&_fullscreen_dm, 0, sizeof(_fullscreen_dm));
-		_fullscreen_dm.dmSize = sizeof(_fullscreen_dm);
-		_fullscreen_dm.dmFields =
-			(_fullscreen_bpp != 0 ? DM_BITSPERPEL : 0) |
-			DM_PELSWIDTH |
-			DM_PELSHEIGHT |
-			(_display_hz != 0 ? DM_DISPLAYFREQUENCY : 0);
-		_fullscreen_dm.dmBitsPerPel = _fullscreen_bpp;
-		_fullscreen_dm.dmPelsWidth  = _wnd.width_org;
-		_fullscreen_dm.dmPelsHeight = _wnd.height_org;
-		_fullscreen_dm.dmDisplayFrequency = _display_hz;
-
-		if (ChangeDisplaySettings(&_fullscreen_dm, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) {
-			MakeWindow(false);
-			return;
-		}
-	} else if (_wnd.fullscreen) {
-		// restore display?
-		ChangeDisplaySettings(NULL, 0);
-	}
-#endif
-
-	{
-		RECT r;
-		DWORD style, showstyle;
-		int x, y, w, h;
-
-		showstyle = SW_SHOWNORMAL;
-		_wnd.fullscreen = full_screen;
-		if (_wnd.fullscreen) {
-			style = WS_POPUP;
-			SetRect(&r, 0, 0, _wnd.width_org, _wnd.height_org);
-		} else {
-			style = WS_OVERLAPPEDWINDOW;
-			/* On window creation, check if we were in maximize mode before */
-			if (_window_maximize) showstyle = SW_SHOWMAXIMIZED;
-			SetRect(&r, 0, 0, _wnd.width, _wnd.height);
-		}
-
-#if !defined(WINCE)
-		AdjustWindowRect(&r, style, FALSE);
-#endif
-		w = r.right - r.left;
-		h = r.bottom - r.top;
-		x = (GetSystemMetrics(SM_CXSCREEN) - w) / 2;
-		y = (GetSystemMetrics(SM_CYSCREEN) - h) / 2;
-
-		if (_wnd.main_wnd) {
-			ShowWindow(_wnd.main_wnd, SW_SHOWNORMAL); // remove maximize-flag
-			SetWindowPos(_wnd.main_wnd, 0, x, y, w, h, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOZORDER);
-		} else {
-			extern const char _openttd_revision[];
-			TCHAR Windowtitle[50];
-
-			_sntprintf(Windowtitle, sizeof(Windowtitle), _T("OpenTTD %s"), MB_TO_WIDE(_openttd_revision));
-
-			_wnd.main_wnd = CreateWindow(_T("OTTD"), Windowtitle, style, x, y, w, h, 0, 0, GetModuleHandle(NULL), 0);
-			if (_wnd.main_wnd == NULL) error("CreateWindow failed");
-			ShowWindow(_wnd.main_wnd, showstyle);
-		}
-	}
-	GameSizeChanged(); // invalidate all windows, force redraw
-}
-
 static bool AllocateDibSection(int w, int h)
 {
 	BITMAPINFO *bi;
@@ -651,7 +660,7 @@
 		return false;
 
 	_screen.width = w;
-	_screen.pitch = ALIGN(w, 4);
+	_screen.pitch = (bpp == 8) ? ALIGN(w, 4) : w;
 	_screen.height = h;
 	bi = (BITMAPINFO*)alloca(sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256);
 	memset(bi, 0, sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256);
@@ -777,7 +786,7 @@
 
 static void CheckPaletteAnim()
 {
-	if (_pal_last_dirty == -1)
+	if (_pal_count_dirty == 0)
 		return;
 	InvalidateRect(_wnd.main_wnd, NULL, FALSE);
 }
@@ -786,6 +795,7 @@
 {
 	MSG mesg;
 	uint32 cur_ticks = GetTickCount();
+	uint32 last_cur_ticks = cur_ticks;
 	uint32 next_tick = cur_ticks + 30;
 
 	_wnd.running = true;
@@ -814,12 +824,11 @@
 
 		cur_ticks = GetTickCount();
 		if (cur_ticks >= next_tick || (_fast_forward && !_pause_game) || cur_ticks < prev_cur_ticks) {
+			_realtime_tick += cur_ticks - last_cur_ticks;
+			last_cur_ticks = cur_ticks;
 			next_tick = cur_ticks + 30;
 			_ctrl_pressed = _wnd.has_focus && GetAsyncKeyState(VK_CONTROL)<0;
 			_shift_pressed = _wnd.has_focus && GetAsyncKeyState(VK_SHIFT)<0;
-#ifdef _DEBUG
-			_dbg_screen_rect = _wnd.has_focus && GetAsyncKeyState(VK_CAPITAL)<0;
-#endif
 
 			// determine which directional keys are down
 			if (_wnd.has_focus) {
--- a/src/viewport.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/viewport.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -58,7 +58,7 @@
 	StringSpriteToDraw *next;
 	int32 x;
 	int32 y;
-	uint32 params[2];
+	uint64 params[2];
 	uint16 width;
 };
 
@@ -580,7 +580,7 @@
 }
 
 /* Returns a StringSpriteToDraw */
-void *AddStringToDraw(int x, int y, StringID string, uint32 params_1, uint32 params_2)
+void *AddStringToDraw(int x, int y, StringID string, uint64 params_1, uint64 params_2)
 {
 	ViewportDrawer *vd = _cur_vd;
 	StringSpriteToDraw *ss;
@@ -649,6 +649,10 @@
 
 #include "table/autorail.h"
 
+/**
+ * Checks if the specified tile is selected and if so draws selection using correct selectionstyle.
+ * @param *ti TileInfo Tile that is being drawn
+ */
 static void DrawTileSelection(const TileInfo *ti)
 {
 	SpriteID image;
@@ -939,7 +943,7 @@
 {
 	StringSpriteToDraw *sstd;
 
-	sstd = (StringSpriteToDraw*)AddStringToDraw(si->sign.left + 1, si->sign.top + 1, str, si->str, 0);
+	sstd = (StringSpriteToDraw*)AddStringToDraw(si->sign.left + 1, si->sign.top + 1, str, si->index, 0);
 	if (sstd != NULL) {
 		sstd->color = (si->owner == OWNER_NONE) ? 14 : _player_colors[si->owner];
 		sstd->width = width;
@@ -1361,6 +1365,30 @@
 	dpi->top -= w->top;
 }
 
+static inline void ClampViewportToMap(const ViewPort *vp, int &x, int &y)
+{
+	/* Centre of the viewport is hot spot */
+	x += vp->virtual_width / 2;
+	y += vp->virtual_height / 2;
+
+	/* Convert viewport coordinates to map coordinates
+	 * Calculation is scaled by 4 to avoid rounding errors */
+	int vx = -x + y * 2;
+	int vy =  x + y * 2;
+
+	/* clamp to size of map */
+	vx = clamp(vx, 0, MapMaxX() * TILE_SIZE * 4);
+	vy = clamp(vy, 0, MapMaxY() * TILE_SIZE * 4);
+
+	/* Convert map coordinates to viewport coordinates */
+	x = (-vx + vy) / 2;
+	y = ( vx + vy) / 4;
+
+	/* Remove centreing */
+	x -= vp->virtual_width / 2;
+	y -= vp->virtual_height / 2;
+}
+
 void UpdateViewportPosition(Window *w)
 {
 	const ViewPort *vp = w->viewport;
@@ -1371,47 +1399,25 @@
 
 		SetViewportPosition(w, pt.x, pt.y);
 	} else {
-		int x;
-		int y;
-		int vx;
-		int vy;
-
-		/* Center of the viewport is hot spot */
-		x = WP(w,vp_d).scrollpos_x + vp->virtual_width / 2;
-		y = WP(w,vp_d).scrollpos_y + vp->virtual_height / 2;
-
-		int dest_x = WP(w,vp_d).dest_scrollpos_x + vp->virtual_width / 2;
-		int dest_y = WP(w,vp_d).dest_scrollpos_y + vp->virtual_height / 2;
-
-		int delta_x = dest_x - x;
-		int delta_y = dest_y - y;
+		/* Ensure the destination location is within the map */
+		ClampViewportToMap(vp, WP(w, vp_d).dest_scrollpos_x, WP(w, vp_d).dest_scrollpos_y);
+
+		int delta_x = WP(w, vp_d).dest_scrollpos_x - WP(w, vp_d).scrollpos_x;
+		int delta_y = WP(w, vp_d).dest_scrollpos_y - WP(w, vp_d).scrollpos_y;
 
 		if (delta_x != 0 || delta_y != 0) {
 			if (_patches.smooth_scroll) {
 				int max_scroll = ScaleByMapSize1D(512);
 				/* Not at our desired positon yet... */
-				x += clamp(delta_x / 8, -max_scroll, max_scroll);
-				y += clamp(delta_y / 8, -max_scroll, max_scroll);
+				WP(w, vp_d).scrollpos_x += clamp(delta_x / 4, -max_scroll, max_scroll);
+				WP(w, vp_d).scrollpos_y += clamp(delta_y / 4, -max_scroll, max_scroll);
 			} else {
-				x = dest_x;
-				y = dest_y;
+				WP(w, vp_d).scrollpos_x = WP(w, vp_d).dest_scrollpos_x;
+				WP(w, vp_d).scrollpos_y = WP(w, vp_d).dest_scrollpos_y;
 			}
 		}
 
-		/* Convert viewport coordinates to map coordinates
-		 * Calculation is scaled by 4 to avoid rounding errors */
-		vx = -x + y * 2;
-		vy =  x + y * 2;
-		/* clamp to size of map */
-		vx = clamp(vx, 0 * 4, MapMaxX() * TILE_SIZE * 4);
-		vy = clamp(vy, 0 * 4, MapMaxY() * TILE_SIZE * 4);
-		/* Convert map coordinates to viewport coordinates */
-		x = (-vx + vy) / 2;
-		y = ( vx + vy) / 4;
-		/* Set position */
-		WP(w, vp_d).scrollpos_x = x - vp->virtual_width / 2;
-		WP(w, vp_d).scrollpos_y = y - vp->virtual_height / 2;
-
+		ClampViewportToMap(vp, WP(w, vp_d).scrollpos_x, WP(w, vp_d).scrollpos_y);
 		SetViewportPosition(w, WP(w, vp_d).scrollpos_x, WP(w, vp_d).scrollpos_y);
 	}
 }
@@ -1928,7 +1934,14 @@
 	return HT_RAIL | _AutorailPiece[x & 0xF][y & 0xF];
 }
 
-/** called regular to update tile highlighting in all cases */
+/**
+ * Updates tile highlighting for all cases.
+ * Uses _thd.selstart and _thd.selend and _thd.place_mode (set elsewhere) to determine _thd.pos and _thd.size
+ * Also drawstyle is determined. Uses _thd.new.* as a buffer and calls SetSelectionTilesDirty() twice,
+ * Once for the old and once for the new selection.
+ * _thd is TileHighlightData, found in viewport.h
+ * Called by MouseLoop() in windows.cpp
+ */
 void UpdateTileSelection()
 {
 	int x1;
@@ -1979,8 +1992,8 @@
 	if (_thd.drawstyle != _thd.new_drawstyle ||
 			_thd.pos.x != _thd.new_pos.x || _thd.pos.y != _thd.new_pos.y ||
 			_thd.size.x != _thd.new_size.x || _thd.size.y != _thd.new_size.y ||
-	    _thd.outersize.x != _thd.new_outersize.x ||
-	    _thd.outersize.y != _thd.new_outersize.y) {
+			_thd.outersize.x != _thd.new_outersize.x ||
+			_thd.outersize.y != _thd.new_outersize.y) {
 		/* clear the old selection? */
 		if (_thd.drawstyle) SetSelectionTilesDirty();
 
@@ -2028,7 +2041,7 @@
 * @param to TileIndex of the last tile to highlight */
 void VpSetPresizeRange(TileIndex from, TileIndex to)
 {
-	uint distance = DistanceManhattan(from, to) + 1;
+	uint64 distance = DistanceManhattan(from, to) + 1;
 
 	_thd.selend.x = TileX(to) * TILE_SIZE;
 	_thd.selend.y = TileY(to) * TILE_SIZE;
@@ -2304,7 +2317,7 @@
 		TileIndex t1 = TileVirtXY(x, y);
 		uint distance = DistanceManhattan(t0, t1) + 1;
 		byte index = 0;
-		uint params[2];
+		uint64 params[2];
 
 		if (distance != 1) {
 			int heightdiff = CalcHeightdiff(b, distance, t0, t1);
@@ -2383,7 +2396,7 @@
 				TileIndex t1 = TileVirtXY(x, y);
 				uint distance = DistanceManhattan(t0, t1) + 1;
 				byte index = 0;
-				uint params[2];
+				uint64 params[2];
 
 				if (distance != 1) {
 					/* With current code passing a HT_LINE style to calculate the height
@@ -2416,7 +2429,7 @@
 				uint dx = delta(TileX(t0), TileX(t1)) + 1;
 				uint dy = delta(TileY(t0), TileY(t1)) + 1;
 				byte index = 0;
-				uint params[3];
+				uint64 params[3];
 
 				/* If dragging an area (eg dynamite tool) and it is actually a single
 				 * row/column, change the type to 'line' to get proper calculation for height */
--- a/src/viewport.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/viewport.h	Tue Jun 26 23:40:58 2007 +0000
@@ -49,7 +49,7 @@
 void DrawGroundSprite(SpriteID image, SpriteID pal);
 void DrawGroundSpriteAt(SpriteID image, SpriteID pal, int32 x, int32 y, byte z);
 void AddSortableSpriteToDraw(SpriteID image, SpriteID pal, int x, int y, int w, int h, byte dz, byte z);
-void *AddStringToDraw(int x, int y, StringID string, uint32 params_1, uint32 params_2);
+void *AddStringToDraw(int x, int y, StringID string, uint64 params_1, uint64 params_2);
 void AddChildSpriteScreen(SpriteID image, SpriteID pal, int x, int y);
 
 
--- a/src/water_cmd.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/water_cmd.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -56,11 +56,11 @@
  * @param p1 bit 0 depot orientation (Axis)
  * @param p2 unused
  */
-int32 CmdBuildShipDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildShipDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	TileIndex tile2;
 
-	int32 cost, ret;
+	CommandCost cost, ret;
 	Depot *depot;
 
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
@@ -82,9 +82,6 @@
 	ret = DoCommand(tile2, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 	if (CmdFailed(ret)) return CMD_ERROR;
 
-	/* pretend that we're not making land from the water even though we actually are. */
-	cost = 0;
-
 	depot = AllocateDepot();
 	if (depot == NULL) return CMD_ERROR;
 
@@ -98,10 +95,10 @@
 		MarkTileDirtyByTile(tile2);
 	}
 
-	return cost + _price.build_ship_depot;
+	return cost.AddCost(_price.build_ship_depot);
 }
 
-static int32 RemoveShipDepot(TileIndex tile, uint32 flags)
+static CommandCost RemoveShipDepot(TileIndex tile, uint32 flags)
 {
 	TileIndex tile2;
 
@@ -123,13 +120,13 @@
 		MarkTileDirtyByTile(tile2);
 	}
 
-	return _price.remove_ship_depot;
+	return CommandCost(_price.remove_ship_depot);
 }
 
 /** build a shiplift */
-static int32 DoBuildShiplift(TileIndex tile, DiagDirection dir, uint32 flags)
+static CommandCost DoBuildShiplift(TileIndex tile, DiagDirection dir, uint32 flags)
 {
-	int32 ret;
+	CommandCost ret;
 	int delta;
 
 	/* middle tile */
@@ -164,10 +161,10 @@
 		MarkTileDirtyByTile(tile + delta);
 	}
 
-	return _price.clear_water * 22 >> 3;
+	return CommandCost(_price.clear_water * 22 >> 3);
 }
 
-static int32 RemoveShiplift(TileIndex tile, uint32 flags)
+static CommandCost RemoveShiplift(TileIndex tile, uint32 flags)
 {
 	TileIndexDiff delta = TileOffsByDiagDir(GetLockDirection(tile));
 
@@ -183,7 +180,7 @@
 		DoClearSquare(tile - delta);
 	}
 
-	return _price.clear_water * 2;
+	return CommandCost(_price.clear_water * 2);
 }
 
 static void MarkTilesAroundDirty(TileIndex tile)
@@ -200,7 +197,7 @@
  * @param p1 unused
  * @param p2 unused
  */
-int32 CmdBuildLock(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildLock(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	DiagDirection dir;
 
@@ -222,9 +219,9 @@
  * @param p1 start tile of stretch-dragging
  * @param p2 ctrl pressed - toggles ocean / canals at sealevel (ocean only allowed in the scenario editor)
  */
-int32 CmdBuildCanal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildCanal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	int32 cost;
+	CommandCost cost;
 	int size_x, size_y;
 	int x;
 	int y;
@@ -249,9 +246,8 @@
 	/* Outside the editor you can only drag canals, and not areas */
 	if (_game_mode != GM_EDITOR && (sx != x && sy != y)) return CMD_ERROR;
 
-	cost = 0;
 	BEGIN_TILE_LOOP(tile, size_x, size_y, TileXY(sx, sy)) {
-		int32 ret;
+		CommandCost ret;
 
 		if (GetTileSlope(tile, NULL) != SLOPE_FLAT) {
 			return_cmd_error(STR_0007_FLAT_LAND_REQUIRED);
@@ -262,7 +258,7 @@
 
 		ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 		if (CmdFailed(ret)) return ret;
-		cost += ret;
+		cost.AddCost(ret);
 
 		if (flags & DC_EXEC) {
 			if (TileHeight(tile) == 0 && HASBIT(p2, 0)) {
@@ -274,17 +270,17 @@
 			MarkTilesAroundDirty(tile);
 		}
 
-		cost += _price.clear_water;
+		cost.AddCost(_price.clear_water);
 	} END_TILE_LOOP(tile, size_x, size_y, 0);
 
-	if (cost == 0) {
+	if (cost.GetCost() == 0) {
 		return_cmd_error(STR_1007_ALREADY_BUILT);
 	} else {
 		return cost;
 	}
 }
 
-static int32 ClearTile_Water(TileIndex tile, byte flags)
+static CommandCost ClearTile_Water(TileIndex tile, byte flags)
 {
 	switch (GetWaterTileType(tile)) {
 		case WATER_TILE_CLEAR:
@@ -302,7 +298,7 @@
 			if (GetTileOwner(tile) != OWNER_WATER && !CheckTileOwnership(tile)) return CMD_ERROR;
 
 			if (flags & DC_EXEC) DoClearSquare(tile);
-			return _price.clear_water;
+			return CommandCost(_price.clear_water);
 
 		case WATER_TILE_COAST: {
 			Slope slope = GetTileSlope(tile, NULL);
@@ -318,9 +314,9 @@
 
 			if (flags & DC_EXEC) DoClearSquare(tile);
 			if (slope == SLOPE_N || slope == SLOPE_E || slope == SLOPE_S || slope == SLOPE_W) {
-				return _price.clear_water;
+				return CommandCost(_price.clear_water);
 			} else {
-				return _price.purchase_land;
+				return CommandCost(_price.purchase_land);
 			}
 		}
 
@@ -343,7 +339,6 @@
 
 		default:
 			NOT_REACHED();
-			return 0;
 	}
 }
 
@@ -588,7 +583,7 @@
 			case MP_CLEAR:
 			case MP_TREES:
 				_current_player = OWNER_WATER;
-				if (!CmdFailed(DoCommand(target, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR))) {
+				if (CmdSucceeded(DoCommand(target, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR))) {
 					MakeShore(target);
 					MarkTileDirtyByTile(target);
 				}
@@ -603,7 +598,7 @@
 		Vehicle *v = FindFloodableVehicleOnTile(target);
 		if (v != NULL) FloodVehicle(v);
 
-		if (!CmdFailed(DoCommand(target, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR))) {
+		if (CmdSucceeded(DoCommand(target, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR))) {
 			MakeWater(target);
 			MarkTileDirtyByTile(target);
 		}
@@ -675,7 +670,7 @@
 
 			/* crash all wagons, and count passengers */
 			BEGIN_ENUM_WAGONS(v)
-				if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) pass += v->cargo_count;
+				if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) pass += v->cargo.Count();
 				v->vehstatus |= VS_CRASHED;
 				MarkAllViewportsDirty(v->left_coord, v->top_coord, v->right_coord + 1, v->bottom_coord + 1);
 			END_ENUM_WAGONS(v)
--- a/src/water_map.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/water_map.h	Tue Jun 26 23:40:58 2007 +0000
@@ -45,6 +45,11 @@
 	return GetWaterTileType(t) == WATER_TILE_COAST;
 }
 
+static inline bool IsCanal(TileIndex t)
+{
+	return GetWaterTileType(t) == WATER_TILE_CLEAR && GetTileOwner(t) != OWNER_WATER;
+}
+
 static inline bool IsClearWaterTile(TileIndex t)
 {
 	return IsTileType(t, MP_WATER) && IsWater(t) && GetTileSlope(t, NULL) == SLOPE_FLAT;
--- a/src/waypoint.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/waypoint.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -201,7 +201,7 @@
  * @todo When checking for the tile slope,
  * distingush between "Flat land required" and "land sloped in wrong direction"
  */
-int32 CmdBuildTrainWaypoint(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildTrainWaypoint(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Waypoint *wp;
 	Slope tileh;
@@ -272,7 +272,7 @@
 		YapfNotifyTrackLayoutChange(tile, AxisToTrack(axis));
 	}
 
-	return _price.build_train_depot;
+	return CommandCost(_price.build_train_depot);
 }
 
 /**
@@ -295,7 +295,7 @@
  * @param justremove will indicate if it is removed from rail or if rails are removed too
  * @return cost of operation or error
  */
-int32 RemoveTrainWaypoint(TileIndex tile, uint32 flags, bool justremove)
+CommandCost RemoveTrainWaypoint(TileIndex tile, uint32 flags, bool justremove)
 {
 	Waypoint *wp;
 
@@ -324,7 +324,7 @@
 		YapfNotifyTrackLayoutChange(tile, track);
 	}
 
-	return _price.remove_train_depot;
+	return CommandCost(_price.remove_train_depot);
 }
 
 /**
@@ -335,7 +335,7 @@
  * @param p2 unused
  * @return cost of operation or error
  */
-int32 CmdRemoveTrainWaypoint(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveTrainWaypoint(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 	return RemoveTrainWaypoint(tile, flags, true);
@@ -349,7 +349,7 @@
  * @param p2 unused
  * @return cost of operation or error
  */
-int32 CmdRenameWaypoint(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRenameWaypoint(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Waypoint *wp;
 
@@ -382,7 +382,7 @@
 			MarkWholeScreenDirty();
 		}
 	}
-	return 0;
+	return CommandCost();
 }
 
 /**
--- a/src/waypoint.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/waypoint.h	Tue Jun 26 23:40:58 2007 +0000
@@ -66,7 +66,7 @@
 	return GetWaypoint(GetWaypointIndex(tile));
 }
 
-int32 RemoveTrainWaypoint(TileIndex tile, uint32 flags, bool justremove);
+CommandCost RemoveTrainWaypoint(TileIndex tile, uint32 flags, bool justremove);
 Station *ComposeWaypointStation(TileIndex tile);
 void ShowRenameWaypointWindow(const Waypoint *cp);
 void DrawWaypointSprite(int x, int y, int image, RailType railtype);
--- a/src/window.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/window.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -91,14 +91,14 @@
 static void StartWindowDrag(Window *w);
 static void StartWindowSizing(Window *w);
 
-static void DispatchLeftClickEvent(Window *w, int x, int y)
+static void DispatchLeftClickEvent(Window *w, int x, int y, bool double_click)
 {
 	WindowEvent e;
 	const Widget *wi;
 
 	e.we.click.pt.x = x;
 	e.we.click.pt.y = y;
-	e.event = WE_CLICK;
+	e.event = double_click ? WE_DOUBLE_CLICK : WE_CLICK;
 
 	if (w->desc_flags & WDF_DEF_WIDGET) {
 		e.we.click.widget = GetWidgetFromPos(w, x, y);
@@ -638,7 +638,7 @@
 		 * XXX - Yes, ugly, probably needs something like w->always_on_top flag
 		 * to implement correctly, but even then you need some kind of distinction
 		 * between on-top of chat/news and status windows, because these conflict */
-		if (wz != _z_windows && w->window_class != WC_SEND_NETWORK_MSG) {
+		if (wz != _z_windows && w->window_class != WC_SEND_NETWORK_MSG && w->window_class != WC_HIGHSCORE && w->window_class != WC_ENDSCREEN) {
 			if (FindWindowById(WC_MAIN_TOOLBAR, 0)     != NULL) wz--;
 			if (FindWindowById(WC_STATUS_BAR, 0)       != NULL) wz--;
 			if (FindWindowById(WC_NEWS_WINDOW, 0)      != NULL) wz--;
@@ -1633,7 +1633,17 @@
 	}
 }
 
-void MouseLoop(int click, int mousewheel)
+enum MouseClick {
+	MC_NONE = 0,
+	MC_LEFT,
+	MC_RIGHT,
+	MC_DOUBLE_LEFT,
+
+	MAX_OFFSET_DOUBLE_CLICK = 5,     ///< How much the mouse is allowed to move to call it a double click
+	TIME_BETWEEN_DOUBLE_CLICK = 500, ///< Time between 2 left clicks before it becoming a double click, in ms
+};
+
+void MouseLoop(MouseClick click, int mousewheel)
 {
 	int x,y;
 	Window *w;
@@ -1654,7 +1664,7 @@
 	x = _cursor.pos.x;
 	y = _cursor.pos.y;
 
-	if (click == 0 && mousewheel == 0 && !scrollwheel_scrolling) return;
+	if (click == MC_NONE && mousewheel == 0 && !scrollwheel_scrolling) return;
 
 	w = FindWindowFromPt(x, y);
 	if (w == NULL) return;
@@ -1680,9 +1690,10 @@
 	}
 
 	if (vp != NULL) {
-		if (scrollwheel_scrolling) click = 2; // we are using the scrollwheel in a viewport, so we emulate right mouse button
+		if (scrollwheel_scrolling) click = MC_RIGHT; // we are using the scrollwheel in a viewport, so we emulate right mouse button
 		switch (click) {
-			case 1:
+			case MC_DOUBLE_LEFT:
+			case MC_LEFT:
 				DEBUG(misc, 2, "Cursor: 0x%X (%d)", _cursor.sprite, _cursor.sprite);
 				if (_thd.place_mode != 0 &&
 						/* query button and place sign button work in pause mode */
@@ -1700,29 +1711,37 @@
 				}
 				break;
 
-			case 2:
+			case MC_RIGHT:
 				if (!(w->flags4 & WF_DISABLE_VP_SCROLL)) {
 					_scrolling_viewport = true;
 					_cursor.fix_at = true;
 				}
 				break;
+
+			default:
+				break;
 		}
 	} else {
 		switch (click) {
-			case 1: DispatchLeftClickEvent(w, x - w->left, y - w->top);  break;
+			case MC_DOUBLE_LEFT: DispatchLeftClickEvent(w, x - w->left, y - w->top, true);
+				/* fallthough, and also give a single-click for backwards compatible */
+			case MC_LEFT: DispatchLeftClickEvent(w, x - w->left, y - w->top, false); break;
 			default:
 				if (!scrollwheel_scrolling || w == NULL || w->window_class != WC_SMALLMAP) break;
 				/* We try to use the scrollwheel to scroll since we didn't touch any of the buttons.
 				* Simulate a right button click so we can get started. */
 				/* fallthough */
-			case 2: DispatchRightClickEvent(w, x - w->left, y - w->top); break;
+			case MC_RIGHT: DispatchRightClickEvent(w, x - w->left, y - w->top); break;
 		}
 	}
 }
 
 void HandleMouseEvents()
 {
-	int click;
+	static int double_click_time = 0;
+	static int double_click_x = 0;
+	static int double_click_y = 0;
+	MouseClick click;
 	int mousewheel;
 
 	/*
@@ -1737,14 +1756,22 @@
 	if (!IsGeneratingWorld()) _current_player = _local_player;
 
 	/* Mouse event? */
-	click = 0;
+	click = MC_NONE;
 	if (_left_button_down && !_left_button_clicked) {
+		click = MC_LEFT;
+		if (double_click_time != 0 && _realtime_tick - double_click_time   < TIME_BETWEEN_DOUBLE_CLICK &&
+			  double_click_x != 0    && abs(_cursor.pos.x - double_click_x) < MAX_OFFSET_DOUBLE_CLICK  &&
+			  double_click_y != 0    && abs(_cursor.pos.y - double_click_y) < MAX_OFFSET_DOUBLE_CLICK) {
+			click = MC_DOUBLE_LEFT;
+		}
+		double_click_time = _realtime_tick;
+		double_click_x = _cursor.pos.x;
+		double_click_y = _cursor.pos.y;
 		_left_button_clicked = true;
-		click = 1;
 		_input_events_this_tick++;
 	} else if (_right_button_clicked) {
 		_right_button_clicked = false;
-		click = 2;
+		click = MC_RIGHT;
 		_input_events_this_tick++;
 	}
 
--- a/src/window.h	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/window.h	Tue Jun 26 23:40:58 2007 +0000
@@ -99,6 +99,7 @@
 	WE_PAINT,
 	WE_KEYPRESS,
 	WE_CLICK,
+	WE_DOUBLE_CLICK,
 	WE_RCLICK,
 	WE_MOUSEOVER,
 	WE_MOUSELOOP,
@@ -321,7 +322,7 @@
 struct tooltips_d {
 	StringID string_id;
 	byte paramcount;
-	uint32 params[5];
+	uint64 params[5];
 };
 assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(tooltips_d));
 
@@ -764,7 +765,7 @@
 void CDECL SetWindowWidgetsLoweredState(Window *w, bool lowered_stat, int widgets, ...);
 
 /* misc_gui.cpp */
-void GuiShowTooltipsWithArgs(StringID str, uint paramcount, const uint params[]);
+void GuiShowTooltipsWithArgs(StringID str, uint paramcount, const uint64 params[]);
 static inline void GuiShowTooltips(StringID str)
 {
 	GuiShowTooltipsWithArgs(str, 0, NULL);
--- a/src/yapf/follow_track.hpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/yapf/follow_track.hpp	Tue Jun 26 23:40:58 2007 +0000
@@ -252,7 +252,7 @@
 
 public:
 	/** Helper for pathfinders - get min/max speed on the m_old_tile/m_old_td */
-	int GetSpeedLimit(int *pmin_speed = NULL)
+	int GetSpeedLimit(int *pmin_speed = NULL) const
 	{
 		int min_speed = 0;
 		int max_speed = INT_MAX; // no limit
--- a/src/yapf/yapf_base.hpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/yapf/yapf_base.hpp	Tue Jun 26 23:40:58 2007 +0000
@@ -213,7 +213,7 @@
 			m_stats_cache_hits++;
 		}
 
-		bool bValid = Yapf().PfCalcCost(n, tf);
+		bool bValid = Yapf().PfCalcCost(n, &tf);
 
 		if (bCached) {
 			Yapf().PfNodeCacheFlush(n);
--- a/src/yapf/yapf_costrail.hpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/yapf/yapf_costrail.hpp	Tue Jun 26 23:40:58 2007 +0000
@@ -19,8 +19,43 @@
 	typedef typename Node::CachedData CachedData;
 
 protected:
+
+	/* Structure used inside PfCalcCost() to keep basic tile information. */
+	struct TILE {
+		TileIndex   tile;
+		Trackdir    td;
+		TileType    tile_type;
+		RailType    rail_type;
+
+		TILE()
+		{
+			tile = INVALID_TILE;
+			td = INVALID_TRACKDIR;
+			tile_type = MP_VOID;
+			rail_type = INVALID_RAILTYPE;
+		}
+
+		TILE(TileIndex tile, Trackdir td)
+		{
+			this->tile = tile;
+			this->td = td;
+			this->tile_type = GetTileType(tile);
+			this->rail_type = GetTileRailType(tile);
+		}
+
+		TILE(const TILE &src)
+		{
+			tile = src.tile;
+			td = src.td;
+			tile_type = src.tile_type;
+			rail_type = src.rail_type;
+		}
+	};
+
+protected:
 	int           m_max_cost;
 	CBlobT<int>   m_sig_look_ahead_costs;
+
 public:
 	bool          m_stopped_on_first_two_way_signal;
 protected:
@@ -65,8 +100,8 @@
 		return cost;
 	}
 
-	/** return one tile cost. If tile is a tunnel entry, it is moved to the end of tunnel */
-	FORCEINLINE int OneTileCost(TileIndex prev_tile, TileIndex& tile, Trackdir trackdir)
+	/** Return one tile cost (base cost + level crossing penalty). */
+	FORCEINLINE int OneTileCost(TileIndex& tile, Trackdir trackdir)
 	{
 		int cost = 0;
 		// set base cost
@@ -99,7 +134,7 @@
 			bool has_signal_along = HasSignalOnTrackdir(tile, trackdir);
 			if (has_signal_against && !has_signal_along) {
 				// one-way signal in opposite direction
-				n.m_segment->flags_u.flags_s.m_end_of_line = true;
+				n.m_segment->m_end_segment_reason |= ESRB_DEAD_END;
 			} else if (has_signal_along) {
 				SignalState sig_state = GetSignalStateByTrackdir(tile, trackdir);
 				// cache the look-ahead polynomial constant only if we didn't pass more signals than the look-ahead limit is
@@ -117,7 +152,7 @@
 					// was it first signal which is two-way?
 					if (Yapf().TreatFirstRedTwoWaySignalAsEOL() && n.flags_u.flags_s.m_choice_seen && has_signal_against && n.m_num_signals_passed == 0) {
 						// yes, the first signal is two-way red signal => DEAD END
-						n.m_segment->flags_u.flags_s.m_end_of_line = true;
+						n.m_segment->m_end_segment_reason |= ESRB_DEAD_END;
 						Yapf().m_stopped_on_first_two_way_signal = true;
 						return -1;
 					}
@@ -170,180 +205,239 @@
 public:
 	FORCEINLINE void SetMaxCost(int max_cost) {m_max_cost = max_cost;}
 
+
+
 	/** Called by YAPF to calculate the cost from the origin to the given node.
 	 *  Calculates only the cost of given node, adds it to the parent node cost
 	 *  and stores the result into Node::m_cost member */
-	FORCEINLINE bool PfCalcCost(Node &n, const TrackFollower &tf)
+	FORCEINLINE bool PfCalcCost(Node &n, const TrackFollower *tf)
 	{
 		assert(!n.flags_u.flags_s.m_targed_seen);
+		assert(tf->m_new_tile == n.m_key.m_tile);
+		assert((TrackdirToTrackdirBits(n.m_key.m_td) & tf->m_new_td_bits) != TRACKDIR_BIT_NONE);
+
 		CPerfStart perf_cost(Yapf().m_perf_cost);
-		int parent_cost = (n.m_parent != NULL) ? n.m_parent->m_cost : 0;
-		int first_tile_cost = 0;
+
+		/* Does the node have some parent node? */
+		bool has_parent = (n.m_parent != NULL);
+
+		/* Do we already have a cached segment? */
+		CachedData &segment = *n.m_segment;
+		bool is_cached_segment = (segment.m_cost >= 0);
+
+		int parent_cost = has_parent ? n.m_parent->m_cost : 0;
+
+		/* Each node cost contains 2 or 3 main components:
+		 *  1. Transition cost - cost of the move from previous node (tile):
+		 *    - curve cost (or zero for straight move)
+		 *  2. Tile cost:
+		 *    - base tile cost
+		 *      - YAPF_TILE_LENGTH for diagonal tiles
+		 *      - YAPF_TILE_CORNER_LENGTH for non-diagonal tiles
+		 *    - tile penalties
+		 *      - tile slope penalty (upward slopes)
+		 *      - red signal penalty
+		 *      - level crossing penalty
+		 *      - speed-limit penalty (bridges)
+		 *      - station platform penalty
+		 *      - penalty for reversing in the depot
+		 *      - etc.
+		 *  3. Extra cost (applies to the last node only)
+		 *    - last red signal penalty
+		 *    - penalty for too long or too short platform on the destination station
+		 */
+		int transition_cost = 0;
+		int extra_cost = 0;
+
+		/* Segment: one or more tiles connected by contiguous tracks of the same type.
+		 * Each segment cost includes 'Tile cost' for all its tiles (including the first
+		 * and last), and the 'Transition cost' between its tiles. The first transition
+		 * cost of segment entry (move from the 'parent' node) is not included!
+		 */
+		int segment_entry_cost = 0;
 		int segment_cost = 0;
-		int extra_cost = 0;
+
 		const Vehicle* v = Yapf().GetVehicle();
 
 		// start at n.m_key.m_tile / n.m_key.m_td and walk to the end of segment
-		TileIndex prev_tile      = (n.m_parent != NULL) ? n.m_parent->GetLastTile() : INVALID_TILE;
-		Trackdir  prev_trackdir  = (n.m_parent != NULL) ? n.m_parent->GetLastTrackdir() : INVALID_TRACKDIR;
-		TileType  prev_tile_type = (n.m_parent != NULL) ? GetTileType(n.m_parent->GetLastTile()) : MP_VOID;
+		TILE cur(n.m_key.m_tile, n.m_key.m_td);
 
-		TileIndex tile = n.m_key.m_tile;
-		Trackdir trackdir = n.m_key.m_td;
-		TileType tile_type = GetTileType(tile);
+		// the previous tile will be needed for transition cost calculations
+		TILE prev = has_parent ? TILE() : TILE(n.m_parent->GetLastTile(), n.m_parent->GetLastTrackdir());
 
-		RailType rail_type = GetTileRailType(tile);
+		EndSegmentReasonBits end_segment_reason = ESRB_NONE;
 
-		bool target_seen = Yapf().PfDetectDestination(tile, trackdir);
+		TrackFollower tf_local(v, &Yapf().m_perf_ts_cost);
 
-		if (tf.m_is_station) {
-			// station tiles have an extra penalty
-			segment_cost += Yapf().PfGetSettings().rail_station_penalty * (tf.m_tiles_skipped + 1);
+		if (!has_parent) {
+			/* We will jump to the middle of the cost calculator assuming that segment cache is not used. */
+			assert(!is_cached_segment);
+			/* Skip the first transition cost calculation. */
+			goto no_entry_cost;
 		}
 
-		while (true) {
-			segment_cost += Yapf().OneTileCost(prev_tile, tile, trackdir);
-			segment_cost += Yapf().CurveCost(prev_trackdir, trackdir);
-			segment_cost += Yapf().SlopeCost(tile, trackdir);
-			segment_cost += Yapf().SignalCost(n, tile, trackdir);
-			if (n.m_segment->flags_u.flags_s.m_end_of_line) {
-				break;
+		for (;;) {
+			/* Transition cost (cost of the move from previous tile) */
+			transition_cost = Yapf().CurveCost(prev.td, cur.td);
+
+			/* First transition cost counts against segment entry cost, other transitions
+			 * inside segment will come to segment cost (and will be cached) */
+			if (segment_cost == 0) {
+				/* We just entered the loop. First transition cost goes to segment entry cost)*/
+				segment_entry_cost = transition_cost;
+				transition_cost = 0;
+
+				/* It is the right time now to look if we can reuse the cached segment cost. */
+				if (is_cached_segment) {
+					/* Yes, we already know the segment cost. */
+					segment_cost = segment.m_cost;
+					/* We know also the reason why the segment ends. */
+					end_segment_reason = segment.m_end_segment_reason;
+					/* No further calculation needed. */
+					cur = TILE(n.GetLastTile(), n.GetLastTrackdir());
+					break;
+				}
+			} else {
+				/* Other than first transition cost count as the regular segment cost. */
+				segment_cost += transition_cost;
 			}
 
-			// finish if we have reached the destination
-			if (target_seen) {
-				break;
-			}
+no_entry_cost: // jump here at the beginning if the node has no parent (it is the first node)
 
-			// finish on first station tile - segment should end here to avoid target skipping
-			// when cached segments are used
-			if (tile_type == MP_STATION && prev_tile_type != MP_STATION) {
-				break;
+			/* All other tile costs will be calculated here. */
+			segment_cost += Yapf().OneTileCost(cur.tile, cur.td);
+
+			/* If we skipped some tunnel/bridge/station tiles, add their base cost */
+			segment_cost += YAPF_TILE_LENGTH * tf->m_tiles_skipped;
+
+			/* Slope cost. */
+			segment_cost += Yapf().SlopeCost(cur.tile, cur.td);
+
+			/* Signal cost (routine can modify segment data). */
+			segment_cost += Yapf().SignalCost(n, cur.tile, cur.td);
+			end_segment_reason = segment.m_end_segment_reason;
+
+			/* Tests for 'potential target' reasons to close the segment. */
+			if (cur.tile == prev.tile) {
+				/* Penalty for reversing in a depot. */
+				assert(IsRailDepot(cur.tile));
+				segment_cost += Yapf().PfGetSettings().rail_depot_reverse_penalty;
+				/* We will end in this pass (depot is possible target) */
+				end_segment_reason |= ESRB_DEPOT;
+
+			} else if (tf->m_is_station) {
+				/* Station penalties. */
+				uint platform_length = tf->m_tiles_skipped + 1;
+				/* We don't know yet if the station is our target or not. Act like
+				 * if it is pass-through station (not our destination). */
+				segment_cost += Yapf().PfGetSettings().rail_station_penalty * platform_length;
+				/* We will end in this pass (station is possible target) */
+				end_segment_reason |= ESRB_STATION;
+
+			} else if (cur.tile_type == MP_RAILWAY && IsRailWaypoint(cur.tile)) {
+				/* Waypoint is also a good reason to finish. */
+				end_segment_reason |= ESRB_WAYPOINT;
 			}
 
-			// finish also on waypoint - same workaround as for first station tile
-			if (tile_type == MP_RAILWAY && IsRailWaypoint(tile)) {
-				break;
+			/* Apply min/max speed penalties only when inside the look-ahead radius. Otherwise
+			 * it would cause desync in MP. */
+			if (n.m_num_signals_passed < m_sig_look_ahead_costs.Size())
+			{
+				int min_speed = 0;
+				int max_speed = tf->GetSpeedLimit(&min_speed);
+				if (max_speed < v->max_speed)
+					extra_cost += YAPF_TILE_LENGTH * (v->max_speed - max_speed) * (4 + tf->m_tiles_skipped) / v->max_speed;
+				if (min_speed > v->max_speed)
+					extra_cost += YAPF_TILE_LENGTH * (min_speed - v->max_speed);
 			}
 
-			// if there are no reachable trackdirs on the next tile, we have end of road
-			TrackFollower F(v, &Yapf().m_perf_ts_cost);
-			if (!F.Follow(tile, trackdir)) {
-				// we can't continue?
-				// n.m_segment->flags_u.flags_s.m_end_of_line = true;
-				break;
+			/* Finish if we already exceeded the maximum path cost (i.e. when
+			 * searching for the nearest depot). */
+			if (m_max_cost > 0 && (parent_cost + segment_entry_cost + segment_cost) > m_max_cost) {
+				end_segment_reason |= ESRB_PATH_TOO_LONG;
 			}
 
-			// if there are more trackdirs available & reachable, we are at the end of segment
-			if (KillFirstBit2x64(F.m_new_td_bits) != 0) {
+			/* Move to the next tile/trackdir. */
+			tf = &tf_local;
+			tf_local.Init(v, &Yapf().m_perf_ts_cost);
+
+			if (!tf_local.Follow(cur.tile, cur.td)) {
+				/* Can't move to the next tile (EOL?). */
+				end_segment_reason |= ESRB_DEAD_END;
 				break;
 			}
 
-			Trackdir new_td = (Trackdir)FindFirstBit2x64(F.m_new_td_bits);
-
-			{
-				// end segment if train is about to enter simple loop with no junctions
-				// so next time it should stop on the next if
-				if (segment_cost > s_max_segment_cost && IsTileType(F.m_new_tile, MP_RAILWAY))
-					break;
-
-				// stop if train is on simple loop with no junctions
-				if (F.m_new_tile == n.m_key.m_tile && new_td == n.m_key.m_td)
-					return false;
-			}
-
-			// if tail type changes, finish segment (cached segment can't contain more rail types)
-			{
-				RailType new_rail_type = GetTileRailType(F.m_new_tile);
-				if (new_rail_type != rail_type) {
-					break;
-				}
-				rail_type = new_rail_type;
-			}
-
-			// move to the next tile
-			prev_tile = tile;
-			prev_trackdir = trackdir;
-			prev_tile_type = tile_type;
-
-			tile = F.m_new_tile;
-			trackdir = new_td;
-			tile_type = GetTileType(tile);
-
-			target_seen = Yapf().PfDetectDestination(tile, trackdir);
-
-			// reversing in depot penalty
-			if (tile == prev_tile) {
-				segment_cost += Yapf().PfGetSettings().rail_depot_reverse_penalty;
+			/* Check if the next tile is not a choice. */
+			if (KillFirstBit2x64(tf_local.m_new_td_bits) != 0) {
+				/* More than one segment will follow. Close this one. */
+				end_segment_reason |= ESRB_CHOICE_FOLLOWS;
 				break;
 			}
 
-			// if we skipped some tunnel tiles, add their cost
-			segment_cost += YAPF_TILE_LENGTH * F.m_tiles_skipped;
+			/* Gather the next tile/trackdir/tile_type/rail_type. */
+			TILE next(tf_local.m_new_tile, (Trackdir)FindFirstBit2x64(tf_local.m_new_td_bits));
 
-			// add penalty for skipped station tiles
-			if (F.m_is_station)
-			{
-				uint platform_length = F.m_tiles_skipped + 1;
-				if (target_seen) {
-					// it is our destination station
-					segment_cost += PlatformLengthPenalty(platform_length);
-				} else {
-					// station is not our destination station, apply penalty for skipped platform tiles
-					segment_cost += Yapf().PfGetSettings().rail_station_penalty * platform_length;
+			/* Check the next tile for the rail type. */
+			if (next.rail_type != cur.rail_type) {
+				/* Segment must consist from the same rail_type tiles. */
+				end_segment_reason |= ESRB_RAIL_TYPE;
+				break;
+			}
+
+			/* Avoid infinite looping. */
+			if (next.tile == n.m_key.m_tile && next.td == n.m_key.m_td) {
+				end_segment_reason |= ESRB_INFINITE_LOOP;
+				break;
+			}
+
+			if (segment_cost > s_max_segment_cost) {
+				/* Potentially in the infinite loop (or only very long segment?). We should
+				 * not force it to finish prematurely unless we are on a regular tile. */
+				if (IsTileType(tf->m_new_tile, MP_RAILWAY)) {
+					end_segment_reason |= ESRB_SEGMENT_TOO_LONG;
+					break;
 				}
 			}
 
-			// add min/max speed penalties
-			int min_speed = 0;
-			int max_speed = F.GetSpeedLimit(&min_speed);
-			if (max_speed < v->max_speed)
-				segment_cost += YAPF_TILE_LENGTH * (v->max_speed - max_speed) / v->max_speed;
-			if (min_speed > v->max_speed)
-				segment_cost += YAPF_TILE_LENGTH * (min_speed - v->max_speed);
-
-			// finish if we already exceeded the maximum cost
-			if (m_max_cost > 0 && (parent_cost + first_tile_cost + segment_cost) > m_max_cost) {
-				return false;
+			/* Any other reason bit set? */
+			if (end_segment_reason != ESRB_NONE) {
+				break;
 			}
 
-			if (first_tile_cost == 0) {
-				// we just have done first tile
-				first_tile_cost = segment_cost;
-				segment_cost = 0;
+			/* For the next loop set new prev and cur tile info. */
+			prev = cur;
+			cur = next;
 
-				// look if we can reuse existing (cached) segment cost
-				if (n.m_segment->m_cost >= 0) {
-					// reuse the cached segment cost
-					break;
-				}
+		} // for (;;)
+
+		bool target_seen = false;
+		if ((end_segment_reason & ESRB_POSSIBLE_TARGET) != ESRB_NONE) {
+			/* Depot, station or waypoint. */
+			if (Yapf().PfDetectDestination(cur.tile, cur.td)) {
+				/* Destination found. */
+				target_seen = true;
 			}
-			// segment cost was not filled yes, we have not cached it yet
-			n.SetLastTileTrackdir(tile, trackdir);
-
-		} // while (true)
-
-		if (first_tile_cost == 0) {
-			// we have just finished first tile
-			first_tile_cost = segment_cost;
-			segment_cost = 0;
 		}
 
-		// do we have cached segment cost?
-		if (n.m_segment->m_cost >= 0) {
-			// reuse the cached segment cost
-			segment_cost = n.m_segment->m_cost;
-		} else {
-			// save segment cost
-			n.m_segment->m_cost = segment_cost;
-
-			// save end of segment back to the node
-			n.SetLastTileTrackdir(tile, trackdir);
+		/* Update the segment if needed. */
+		if (!is_cached_segment) {
+			/* Write back the segment information so it can be reused the next time. */
+			segment.m_cost = segment_cost;
+			segment.m_end_segment_reason = end_segment_reason & ESRB_CACHED_MASK;
+			/* Save end of segment back to the node. */
+			n.SetLastTileTrackdir(cur.tile, cur.td);
 		}
 
-		// special costs for the case we have reached our target
+		/* Do we have an excuse why not to continue pathfinding in this direction? */
+		if (!target_seen && (end_segment_reason & ESRB_ABORT_PF_MASK) != ESRB_NONE) {
+			/* Reason to not continue. Stop this PF branch. */
+			return false;
+		}
+
+		/* Special costs for the case we have reached our target. */
 		if (target_seen) {
 			n.flags_u.flags_s.m_targed_seen = true;
+			/* Last-red and last-red-exit penalties. */
 			if (n.flags_u.flags_s.m_last_signal_was_red) {
 				if (n.m_last_red_signal_type == SIGTYPE_EXIT) {
 					// last signal was red pre-signal-exit
@@ -353,12 +447,23 @@
 					extra_cost += Yapf().PfGetSettings().rail_lastred_penalty;
 				}
 			}
+
+			/* Station platform-length penalty. */
+			if ((end_segment_reason & ESRB_STATION) != ESRB_NONE) {
+				Station *st = GetStationByTile(n.GetLastTile());
+				assert(st != NULL);
+				uint platform_length = st->GetPlatformLength(n.GetLastTile(), ReverseDiagDir(TrackdirToExitdir(n.GetLastTrackdir())));
+				/* Reduce the extra cost caused by passing-station penalty (each station receives it in the segment cost). */
+				extra_cost -= Yapf().PfGetSettings().rail_station_penalty * platform_length;
+				/* Add penalty for the inappropriate platform length. */
+				extra_cost += PlatformLengthPenalty(platform_length);
+			}
 		}
 
 		// total node cost
-		n.m_cost = parent_cost + first_tile_cost + segment_cost + extra_cost;
+		n.m_cost = parent_cost + segment_entry_cost + segment_cost + extra_cost;
 
-		return !n.m_segment->flags_u.flags_s.m_end_of_line;
+		return true;
 	}
 
 	FORCEINLINE bool CanUseGlobalCache(Node& n) const
--- a/src/yapf/yapf_node_rail.hpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/yapf/yapf_node_rail.hpp	Tue Jun 26 23:40:58 2007 +0000
@@ -11,17 +11,70 @@
 	uint32    m_value;
 
 	FORCEINLINE CYapfRailSegmentKey(const CYapfRailSegmentKey& src) : m_value(src.m_value) {}
-	FORCEINLINE CYapfRailSegmentKey(const CYapfNodeKeyExitDir& node_key) {Set(node_key);}
+	FORCEINLINE CYapfRailSegmentKey(const CYapfNodeKeyTrackDir& node_key) {Set(node_key);}
 
 	FORCEINLINE void Set(const CYapfRailSegmentKey& src) {m_value = src.m_value;}
-	FORCEINLINE void Set(const CYapfNodeKeyExitDir& node_key) {m_value = (((int)node_key.m_tile) << 2) | node_key.m_exitdir;}
+	FORCEINLINE void Set(const CYapfNodeKeyTrackDir& node_key) {m_value = (((int)node_key.m_tile) << 3) | node_key.m_td;}
 
 	FORCEINLINE int32 CalcHash() const {return m_value;}
-	FORCEINLINE TileIndex GetTile() const {return (TileIndex)(m_value >> 2);}
-	FORCEINLINE DiagDirection GetExitDir() const {return (DiagDirection)(m_value & 3);}
+	FORCEINLINE TileIndex GetTile() const {return (TileIndex)(m_value >> 3);}
 	FORCEINLINE bool operator == (const CYapfRailSegmentKey& other) const {return m_value == other.m_value;}
 };
 
+/* Enum used in PfCalcCost() to see why was the segment closed. */
+enum EndSegmentReason {
+	/* The following reasons can be saved into cached segment */
+	ESR_DEAD_END = 0,      ///< track ends here
+	ESR_RAIL_TYPE,         ///< the next tile has a different rail type than our tiles
+	ESR_INFINITE_LOOP,     ///< infinite loop detected
+	ESR_SEGMENT_TOO_LONG,  ///< the segment is too long (possible infinite loop)
+	ESR_CHOICE_FOLLOWS,    ///< the next tile contains a choice (the track splits to more than one segments)
+	ESR_DEPOT,             ///< stop in the depot (could be a target next time)
+	ESR_WAYPOINT,          ///< waypoint encountered (could be a target next time)
+	ESR_STATION,           ///< station encountered (could be a target next time)
+
+	/* The following reasons are used only internally by PfCalcCost().
+	*   They should not be found in the cached segment. */
+	ESR_PATH_TOO_LONG,     ///< the path is too long (searching for the nearest depot in the given radius)
+	ESR_FIRST_TWO_WAY_RED, ///< first signal was 2-way and it was red
+	ESR_LOOK_AHEAD_END,    ///< we have just passed the last look-ahead signal
+	ESR_TARGET_REACHED,    ///< we have just reached the destination
+
+	/* Special values */
+	ESR_NONE = 0xFF,          ///< no reason to end the segment here
+};
+
+enum EndSegmentReasonBits {
+	ESRB_NONE = 0,
+
+	ESRB_DEAD_END          = 1 << ESR_DEAD_END,
+	ESRB_RAIL_TYPE         = 1 << ESR_RAIL_TYPE,
+	ESRB_INFINITE_LOOP     = 1 << ESR_INFINITE_LOOP,
+	ESRB_SEGMENT_TOO_LONG  = 1 << ESR_SEGMENT_TOO_LONG,
+	ESRB_CHOICE_FOLLOWS    = 1 << ESR_CHOICE_FOLLOWS,
+	ESRB_DEPOT             = 1 << ESR_DEPOT,
+	ESRB_WAYPOINT          = 1 << ESR_WAYPOINT,
+	ESRB_STATION           = 1 << ESR_STATION,
+
+	ESRB_PATH_TOO_LONG     = 1 << ESR_PATH_TOO_LONG,
+	ESRB_FIRST_TWO_WAY_RED = 1 << ESR_FIRST_TWO_WAY_RED,
+	ESRB_LOOK_AHEAD_END    = 1 << ESR_LOOK_AHEAD_END,
+	ESRB_TARGET_REACHED    = 1 << ESR_TARGET_REACHED,
+
+	/* Additional (composite) values. */
+
+	/* What reasons mean that the target can be fond and needs to be detected. */
+	ESRB_POSSIBLE_TARGET = ESRB_DEPOT | ESRB_WAYPOINT | ESRB_STATION,
+
+	/* What reasons can be stored back into cached segment. */
+	ESRB_CACHED_MASK = ESRB_DEAD_END | ESRB_RAIL_TYPE | ESRB_INFINITE_LOOP | ESRB_SEGMENT_TOO_LONG | ESRB_CHOICE_FOLLOWS | ESRB_DEPOT | ESRB_WAYPOINT | ESRB_STATION,
+
+	/* Reasons to abort pathfinding in this direction. */
+	ESRB_ABORT_PF_MASK = ESRB_DEAD_END | ESRB_PATH_TOO_LONG | ESRB_INFINITE_LOOP | ESRB_FIRST_TWO_WAY_RED,
+};
+
+DECLARE_ENUM_AS_BIT_SET(EndSegmentReasonBits);
+
 /** cached segment cost for rail YAPF */
 struct CYapfRailSegment
 {
@@ -33,14 +86,8 @@
 	int                    m_cost;
 	TileIndex              m_last_signal_tile;
 	Trackdir               m_last_signal_td;
+	EndSegmentReasonBits   m_end_segment_reason;
 	CYapfRailSegment*      m_hash_next;
-	union {
-		byte                 m_flags;
-		struct {
-			bool                   m_end_of_line : 1;
-		} flags_s;
-	} flags_u;
-	byte m_reserve[3];
 
 	FORCEINLINE CYapfRailSegment(const CYapfRailSegmentKey& key)
 		: m_key(key)
@@ -49,14 +96,12 @@
 		, m_cost(-1)
 		, m_last_signal_tile(INVALID_TILE)
 		, m_last_signal_td(INVALID_TRACKDIR)
+		, m_end_segment_reason(ESRB_NONE)
 		, m_hash_next(NULL)
-	{
-		flags_u.m_flags = 0;
-	}
+	{}
 
 	FORCEINLINE const Key& GetKey() const {return m_key;}
 	FORCEINLINE TileIndex GetTile() const {return m_key.GetTile();}
-	FORCEINLINE DiagDirection GetExitDir() const {return m_key.GetExitDir();}
 	FORCEINLINE CYapfRailSegment* GetHashNext() {return m_hash_next;}
 	FORCEINLINE void SetHashNext(CYapfRailSegment* next) {m_hash_next = next;}
 };
--- a/src/yapf/yapf_rail.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/yapf/yapf_rail.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -194,25 +194,22 @@
 };
 
 struct CYapfRail1         : CYapfT<CYapfRail_TypesT<CYapfRail1        , CFollowTrackRail    , CRailNodeListTrackDir, CYapfDestinationTileOrStationRailT, CYapfFollowRailT> > {};
-struct CYapfRail2         : CYapfT<CYapfRail_TypesT<CYapfRail2        , CFollowTrackRail    , CRailNodeListExitDir , CYapfDestinationTileOrStationRailT, CYapfFollowRailT> > {};
-struct CYapfRail3         : CYapfT<CYapfRail_TypesT<CYapfRail3        , CFollowTrackRailNo90, CRailNodeListTrackDir, CYapfDestinationTileOrStationRailT, CYapfFollowRailT> > {};
+struct CYapfRail2         : CYapfT<CYapfRail_TypesT<CYapfRail2        , CFollowTrackRailNo90, CRailNodeListTrackDir, CYapfDestinationTileOrStationRailT, CYapfFollowRailT> > {};
 
 struct CYapfAnyDepotRail1 : CYapfT<CYapfRail_TypesT<CYapfAnyDepotRail1, CFollowTrackRail    , CRailNodeListTrackDir, CYapfDestinationAnyDepotRailT     , CYapfFollowAnyDepotRailT> > {};
-struct CYapfAnyDepotRail2 : CYapfT<CYapfRail_TypesT<CYapfAnyDepotRail2, CFollowTrackRail    , CRailNodeListExitDir , CYapfDestinationAnyDepotRailT     , CYapfFollowAnyDepotRailT> > {};
-struct CYapfAnyDepotRail3 : CYapfT<CYapfRail_TypesT<CYapfAnyDepotRail3, CFollowTrackRailNo90, CRailNodeListTrackDir, CYapfDestinationAnyDepotRailT     , CYapfFollowAnyDepotRailT> > {};
+struct CYapfAnyDepotRail2 : CYapfT<CYapfRail_TypesT<CYapfAnyDepotRail2, CFollowTrackRailNo90, CRailNodeListTrackDir, CYapfDestinationAnyDepotRailT     , CYapfFollowAnyDepotRailT> > {};
 
 
 Trackdir YapfChooseRailTrack(Vehicle *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool *path_not_found)
 {
 	// default is YAPF type 2
 	typedef Trackdir (*PfnChooseRailTrack)(Vehicle*, TileIndex, DiagDirection, TrackBits, bool*);
-	PfnChooseRailTrack pfnChooseRailTrack = &CYapfRail2::stChooseRailTrack;
+	PfnChooseRailTrack pfnChooseRailTrack = &CYapfRail1::stChooseRailTrack;
 
 	// check if non-default YAPF type needed
-	if (_patches.forbid_90_deg)
-		pfnChooseRailTrack = &CYapfRail3::stChooseRailTrack; // Trackdir, forbid 90-deg
-	else if (_patches.yapf.disable_node_optimization)
-		pfnChooseRailTrack = &CYapfRail1::stChooseRailTrack; // Trackdir, allow 90-deg
+	if (_patches.forbid_90_deg) {
+		pfnChooseRailTrack = &CYapfRail2::stChooseRailTrack; // Trackdir, forbid 90-deg
+	}
 
 	Trackdir td_ret = pfnChooseRailTrack(v, tile, enterdir, tracks, path_not_found);
 
@@ -233,13 +230,12 @@
 
 
 	typedef bool (*PfnCheckReverseTrain)(Vehicle*, TileIndex, Trackdir, TileIndex, Trackdir);
-	PfnCheckReverseTrain pfnCheckReverseTrain = CYapfRail2::stCheckReverseTrain;
+	PfnCheckReverseTrain pfnCheckReverseTrain = CYapfRail1::stCheckReverseTrain;
 
 	// check if non-default YAPF type needed
-	if (_patches.forbid_90_deg)
-		pfnCheckReverseTrain = &CYapfRail3::stCheckReverseTrain; // Trackdir, forbid 90-deg
-	else if (_patches.yapf.disable_node_optimization)
-		pfnCheckReverseTrain = &CYapfRail1::stCheckReverseTrain; // Trackdir, allow 90-deg
+	if (_patches.forbid_90_deg) {
+		pfnCheckReverseTrain = &CYapfRail2::stCheckReverseTrain; // Trackdir, forbid 90-deg
+	}
 
 	bool reverse = pfnCheckReverseTrain(v, tile, td, last_veh->tile, td_rev);
 
@@ -261,13 +257,12 @@
 	Trackdir td_rev = ReverseTrackdir(GetVehicleTrackdir(last_veh));
 
 	typedef bool (*PfnFindNearestDepotTwoWay)(Vehicle*, TileIndex, Trackdir, TileIndex, Trackdir, int, int, TileIndex*, bool*);
-	PfnFindNearestDepotTwoWay pfnFindNearestDepotTwoWay = &CYapfAnyDepotRail2::stFindNearestDepotTwoWay;
+	PfnFindNearestDepotTwoWay pfnFindNearestDepotTwoWay = &CYapfAnyDepotRail1::stFindNearestDepotTwoWay;
 
 	// check if non-default YAPF type needed
-	if (_patches.forbid_90_deg)
-		pfnFindNearestDepotTwoWay = &CYapfAnyDepotRail3::stFindNearestDepotTwoWay; // Trackdir, forbid 90-deg
-	else if (_patches.yapf.disable_node_optimization)
-		pfnFindNearestDepotTwoWay = &CYapfAnyDepotRail1::stFindNearestDepotTwoWay; // Trackdir, allow 90-deg
+	if (_patches.forbid_90_deg) {
+		pfnFindNearestDepotTwoWay = &CYapfAnyDepotRail2::stFindNearestDepotTwoWay; // Trackdir, forbid 90-deg
+	}
 
 	bool ret = pfnFindNearestDepotTwoWay(v, tile, td, last_tile, td_rev, max_distance, reverse_penalty, depot_tile, reversed);
 	return ret;
--- a/src/yapf/yapf_road.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/yapf/yapf_road.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -72,7 +72,7 @@
 	/** Called by YAPF to calculate the cost from the origin to the given node.
 	 *  Calculates only the cost of given node, adds it to the parent node cost
 	 *  and stores the result into Node::m_cost member */
-	FORCEINLINE bool PfCalcCost(Node& n, const TrackFollower &tf)
+	FORCEINLINE bool PfCalcCost(Node& n, const TrackFollower *tf)
 	{
 		int segment_cost = 0;
 		// start at n.m_key.m_tile / n.m_key.m_td and walk to the end of segment
--- a/src/yapf/yapf_ship.cpp	Sun Jun 17 21:31:00 2007 +0000
+++ b/src/yapf/yapf_ship.cpp	Tue Jun 26 23:40:58 2007 +0000
@@ -100,7 +100,7 @@
 	/** Called by YAPF to calculate the cost from the origin to the given node.
 	 *  Calculates only the cost of given node, adds it to the parent node cost
 	 *  and stores the result into Node::m_cost member */
-	FORCEINLINE bool PfCalcCost(Node& n, const TrackFollower &tf)
+	FORCEINLINE bool PfCalcCost(Node& n, const TrackFollower *tf)
 	{
 		// base tile cost depending on distance
 		int c = IsDiagonalTrackdir(n.GetTrackdir()) ? 10 : 7;