(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559 NewGRF_ports
authorrichk
Sat, 14 Jul 2007 19:42:58 +0000
branchNewGRF_ports
changeset 6720 35756db7e577
parent 6719 4cc327ad39d5
child 6721 b3b72a7f4c50
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
Makefile.in
Makefile.lang.in
Makefile.src.in
bin/data/roadstops.grf
changelog.txt
config.lib
configure
docs/32bpp.txt
docs/Readme_OS2.txt
docs/openttd.6
known-bugs.txt
os/debian/changelog
os/win32/installer/install.nsi
projects/generate
projects/langs.vcproj
projects/langs_vs80.vcproj
projects/openttd.vcproj
projects/openttd.vcproj.in
projects/openttd_vs80.vcproj
projects/openttd_vs80.vcproj.in
readme.txt
source.list
src/ai/ai.cpp
src/ai/ai.h
src/ai/default/default.cpp
src/ai/trolly/build.cpp
src/ai/trolly/pathfinder.cpp
src/ai/trolly/trolly.cpp
src/ai/trolly/trolly.h
src/aircraft.h
src/aircraft_cmd.cpp
src/aircraft_gui.cpp
src/airport_gui.cpp
src/airport_movement.h
src/articulated_vehicles.cpp
src/articulated_vehicles.h
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.cpp
src/blitter/8bpp_debug.hpp
src/blitter/8bpp_optimized.cpp
src/blitter/8bpp_optimized.hpp
src/blitter/8bpp_simple.cpp
src/blitter/8bpp_simple.hpp
src/blitter/base.hpp
src/blitter/factory.hpp
src/blitter/null.cpp
src/blitter/null.hpp
src/bridge_gui.cpp
src/build_vehicle_gui.cpp
src/callback_table.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/date.cpp
src/debug.h
src/depot_gui.cpp
src/disaster_cmd.cpp
src/dock_gui.cpp
src/driver.cpp
src/driver.h
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/fios.cpp
src/fontcache.cpp
src/fontcache.h
src/functions.h
src/genworld_gui.cpp
src/gfx.cpp
src/gfx.h
src/gfxinit.cpp
src/graph_gui.cpp
src/group.h
src/group_cmd.cpp
src/group_gui.cpp
src/gui.h
src/hal.h
src/industry.h
src/industry_cmd.cpp
src/industry_gui.cpp
src/industry_map.h
src/intro_gui.cpp
src/landscape.cpp
src/lang/american.txt
src/lang/brazilian_portuguese.txt
src/lang/bulgarian.txt
src/lang/catalan.txt
src/lang/croatian.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/array.hpp
src/misc/blob.hpp
src/misc/dbg_helpers.cpp
src/misc/dbg_helpers.h
src/misc/str.hpp
src/misc/strapi.hpp
src/misc_cmd.cpp
src/misc_gui.cpp
src/music/bemidi.cpp
src/music/bemidi.h
src/music/dmusic.cpp
src/music/dmusic.h
src/music/extmidi.cpp
src/music/extmidi.h
src/music/libtimidity.cpp
src/music/libtimidity.h
src/music/music_driver.hpp
src/music/null_m.cpp
src/music/null_m.h
src/music/os2_m.cpp
src/music/os2_m.h
src/music/qtmidi.cpp
src/music/qtmidi.h
src/music/win32_m.cpp
src/music/win32_m.h
src/music_gui.cpp
src/network/core/tcp.h
src/network/network.cpp
src/network/network.h
src/network/network_client.cpp
src/network/network_data.cpp
src/network/network_data.h
src/network/network_gui.cpp
src/network/network_server.cpp
src/network/network_udp.cpp
src/newgrf.cpp
src/newgrf.h
src/newgrf_callbacks.h
src/newgrf_canal.cpp
src/newgrf_cargo.cpp
src/newgrf_cargo.h
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_house.cpp
src/newgrf_house.h
src/newgrf_industries.cpp
src/newgrf_industries.h
src/newgrf_industrytiles.cpp
src/newgrf_industrytiles.h
src/newgrf_spritegroup.cpp
src/newgrf_spritegroup.h
src/newgrf_station.cpp
src/newgrf_text.cpp
src/newgrf_text.h
src/newgrf_town.cpp
src/newgrf_townname.cpp
src/newgrf_townname.h
src/news.h
src/npf.cpp
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/ottdres.rc
src/pathfind.cpp
src/player.h
src/player_gui.cpp
src/players.cpp
src/rail.h
src/rail_cmd.cpp
src/rail_gui.cpp
src/road_cmd.cpp
src/road_gui.cpp
src/roadveh.h
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.h
src/ship_cmd.cpp
src/ship_gui.cpp
src/signs.cpp
src/signs.h
src/signs_gui.cpp
src/smallmap_gui.cpp
src/sound.cpp
src/sound/cocoa_s.cpp
src/sound/cocoa_s.h
src/sound/null_s.cpp
src/sound/null_s.h
src/sound/sdl_s.cpp
src/sound/sdl_s.h
src/sound/sound_driver.hpp
src/sound/win32_s.cpp
src/sound/win32_s.h
src/spritecache.cpp
src/spritecache.h
src/spriteloader/grf.cpp
src/spriteloader/grf.hpp
src/spriteloader/png.cpp
src/spriteloader/png.hpp
src/spriteloader/spriteloader.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/strings.h
src/subsidy_gui.cpp
src/table/ai_rail.h
src/table/build_industry.h
src/table/control_codes.h
src/table/files.h
src/table/road_land.h
src/table/station_land.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.h
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/vehicle_gui.h
src/video/cocoa_v.h
src/video/cocoa_v.mm
src/video/dedicated_v.cpp
src/video/dedicated_v.h
src/video/null_v.cpp
src/video/null_v.h
src/video/sdl_v.cpp
src/video/sdl_v.h
src/video/video_driver.hpp
src/video/win32_v.cpp
src/video/win32_v.h
src/viewport.cpp
src/viewport.h
src/water_cmd.cpp
src/water_map.h
src/waypoint.cpp
src/waypoint.h
src/win32.cpp
src/window.cpp
src/window.h
src/yapf/follow_track.hpp
src/yapf/nodelist.hpp
src/yapf/yapf.h
src/yapf/yapf.hpp
src/yapf/yapf_base.hpp
src/yapf/yapf_costrail.hpp
src/yapf/yapf_node.hpp
src/yapf/yapf_node_rail.hpp
src/yapf/yapf_rail.cpp
src/yapf/yapf_road.cpp
src/yapf/yapf_ship.cpp
src/zoom.hpp
--- a/Makefile.in	Sat Jun 02 19:59:29 2007 +0000
+++ b/Makefile.in	Sat Jul 14 19:42:58 2007 +0000
@@ -31,10 +31,14 @@
 OSXAPP = !!OSXAPP!!
 REVISION = !!REVISION!!
 AWK = !!AWK!!
+DISTCC = !!DISTCC!!
 
 RES := $(shell if ! [ -f $(CONFIG_CACHE_SOURCE_LIST) ] || [ -n "`cmp $(CONFIG_CACHE_SOURCE_LIST) $(SOURCE_LIST)`" ]; then cp $(SOURCE_LIST) $(CONFIG_CACHE_SOURCE_LIST); fi )
 
 all: config.cache
+ifdef DISTCC
+	@if [ -z "`echo '$(MFLAGS)' | grep '\-j'`" ]; then echo; echo "WARNING: you enabled distcc support, but you don't seem to be using the -jN paramter"; echo; fi
+endif
 	@for dir in $(DIRS); do \
 		$(MAKE) -C $$dir all; \
 	done
@@ -48,6 +52,28 @@
 	$(Q)$(LIPO) -create -output $(BIN_DIR)/$(TTD) $(TTDS)
 endif
 
+help:
+	@echo "Available make commands:"
+	@echo ""
+	@echo "Compilation:"
+	@echo "  all           compile the executable and the lang files"
+	@echo "  lang          compile the lang files only"
+	@echo "Clean up:"
+	@echo "  clean         remove the files generated during compilation"
+	@echo "  mrproper      remove the files generated during configuration and compilation"
+	@echo "Run after compilation:"
+	@echo "  run           execute openttd after the compilation"
+	@echo "  run-gdb       execute openttd in debug mode after the compilation"
+	@echo "  run-prof      execute openttd in profiling mode after the compilation"
+	@echo "Installation:"
+	@echo "  install       install the compiled files and the data-files after the compilation"
+	@echo "  bundle        create the base for an installation bundle"
+	@echo "  bundle_zip    create the zip installation bundle"
+	@echo "  bundle_gzip   create the gzip installation bundle"
+	@echo "  bundle_bzip2  create the bzip2 installation bundle"
+	@echo "  bundle_lha    create the lha installation bundle"
+	@echo "  bundle_dmg    create the dmg installation bundle"
+
 config.cache: $(CONFIG_CACHE_SOURCE_LIST) $(CONFIGURE_FILES)
 ifeq ($(shell if test -f config.cache; then echo 1; fi), 1)
 	@echo "----------------"
@@ -99,6 +125,9 @@
 run-gdb: all
 	$(Q)cd !!BIN_DIR!! && gdb --ex run --args ./!!TTD!! $(OPENTTD_ARGS)
 
+run-prof: all
+	$(Q)cd !!BIN_DIR!! && ./!!TTD!! $(OPENTTD_ARGS) && gprof !!TTD!! | less
+
 %.o:
 	@for dir in $(SRC_DIRS); do \
 		$(MAKE) -C $$dir $(@:src/%=%); \
@@ -172,6 +201,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/"
@@ -221,11 +251,6 @@
 	$(Q)mkdir -p "$(BUNDLES_DIR)"
 	$(Q)hdiutil create -ov -format UDZO -srcfolder "$(BUNDLE_DIR)" "$(BUNDLES_DIR)/$(BUNDLE_NAME).dmg"
 
-# TODO: ENABLE_INSTALL should be removed when the search path patch has been applied
-ifeq ($(ENABLE_INSTALL), 0)
-install:
-	@echo '[INSTALL] Cannot install. Not compiled with installation paths'
-else
 ifdef OSXAPP
 install:
 	@echo '[INSTALL] Cannot install the OSX Application Bundle'
@@ -250,4 +275,3 @@
 	$(Q)cp -R "$(BUNDLE_DIR)/scenario" "$(INSTALL_DATA_DIR)"
 endif # INSTALL_PERSONAL_DIR
 endif # OSXAPP
-endif # ENABLE_INSTALL
--- a/Makefile.lang.in	Sat Jun 02 19:59:29 2007 +0000
+++ b/Makefile.lang.in	Sat Jul 14 19:42:58 2007 +0000
@@ -75,7 +75,7 @@
 
 clean:
 	$(E) '$(STAGE) Cleaning up language files'
-	$(Q)rm -f strgen.o table/strings.h $(STRGEN) $(LANGS) $(LANGS:%=$(BIN_DIR)/lang/%) lang/english.* $(ENDIAN_TARGETS)
+	$(Q)rm -f strgen.o string.o table/strings.h $(STRGEN) $(LANGS) $(LANGS:%=$(BIN_DIR)/lang/%) lang/english.* $(ENDIAN_TARGETS)
 
 mrproper: clean
 
--- a/Makefile.src.in	Sat Jun 02 19:59:29 2007 +0000
+++ b/Makefile.src.in	Sat Jul 14 19:42:58 2007 +0000
@@ -96,8 +96,15 @@
 REV_MODIFIED := $(shell svnversion $(SRC_DIR) | sed -n 's/.*\(M\).*/\1/p' )
 # Find the revision like: rXXXX-branch
 REV := $(shell LC_ALL=C svn info $(SRC_DIR) | $(AWK) '/^URL:.*branch/ { split($$2, a, "/"); BRANCH="-"a[5] } /^Last Changed Rev:/ { REV="r"$$4"$(REV_MODIFIED)" } END { print REV BRANCH }')
+else
+# Are we a git dir?
+ifeq ($(shell if test -d $(SRC_DIR)/../.git; then echo 1; fi), 1)
+# Find the revision like: rXXXXM
+REV := g$(shell if head=`git rev-parse --verify HEAD 2>/dev/null`; then echo "$$head" | cut -c1-8; fi)$(shell if git diff-index HEAD | read dummy; then echo M; fi)$(shell git branch|grep '[*]'|sed 's/\* /-/;s/^-master$$//')
 endif
 endif
+endif
+
 # Make sure we have something in REV
 ifeq ($(REV),)
 REV := norev000
@@ -285,7 +292,7 @@
 
 clean:
 	$(E) '$(STAGE) Cleaning up object files'
-	$(Q)rm -f $(DEPS) $(OBJS) $(TTD) $(TTD:%=$(BIN_DIR)/%) $(CONFIG_CACHE_COMPILER) $(CONFIG_CACHE_LINKER) $(CONFIG_CACHE_ENDIAN) $(CONFIG_CACHE_SOURCE) $(ENDIAN_TARGETS) rev.o
+	$(Q)rm -f $(DEPS) $(OBJS) $(TTD) $(TTD:%=$(BIN_DIR)/%) $(CONFIG_CACHE_COMPILER) $(CONFIG_CACHE_LINKER) $(CONFIG_CACHE_ENDIAN) $(CONFIG_CACHE_SOURCE) $(ENDIAN_TARGETS) rev.o rev.cpp
 
 mrproper: clean
 	$(Q)rm -f rev.cpp
Binary file bin/data/roadstops.grf has changed
--- a/changelog.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/changelog.txt	Sat Jul 14 19:42:58 2007 +0000
@@ -1,3 +1,49 @@
+0.5.3-RC1 (2007-06-28)
+------------------------------------------------------------------------
+- Feature: Make the client list window (for network games) stickyable (r10293)
+- Feature: console command to get the current game date (r10137)
+- Fix: Waypoints could be renamed when you are not the owner (r10368)
+- Fix: Smooth economy did not close primary industries and it allowed increasing of production of industries that should not have rising productions (r10348, r10347, r10290)
+- Fix: Acceleration for trains on slopes is not calculated properly [FS#786] (r10344, r10317)
+- Fix: The 'old' pathfinders (OPF and NPF) for road vehicles could not find a path when in a tunnel [FS#290] (r10345)
+- Fix: Only add the autoreplace menu when autoreplace actually knows about the group [FS#880] (r10337)
+- Fix: Signal state sometimes not properly set when the signal "pathfinder" reached the end of a line [FS#910] (r10336)
+- Fix: News messages were shown over the endgame/highscore windows [FS#943] (r10333)
+- Fix: Rail could be destroyed when building tunnels (r10306)
+- Fix: Flush the output of the dedicated server console (r10295)
+- Fix: The "pause" key did not work in the scenario editor (r10294)
+- Fix: Age non-front engines too (so when you move engines around in the depot they do not get age 0 when they are much older [FS#202] (r10288)
+- Fix: Do not make everyone spectator if 1 joining client failed to create new company (r10284)
+- Fix: Remove invalid characters (for the file system) from savegame names [FS#916, FS#850] (r10272, r10116)
+- Fix: Some old savegames could have the wrong bits unset (r10268, r10147)
+- Fix: Do not look in every direction for tunnels when building one, one direction is enough (r10258)
+- Fix: [Windows] Do not mess desktop when using ALT-TAB [FS#876] (r10251, r10186)
+- Fix: Take the age of the front vehicle for station rating (r10246)
+- Fix: Terraforming wipes out canals. Now you always have to remove the canal before terraforming, instead of "just" removing the canal [FS#594] (r10240)
+- Fix: Only 2 trains could crash at one time as collision checking stopped on the first hit. This could technically cause desyncs in network games as the collision hash order is not guaranteed [FS#892] (r10222)
+- Fix: Land under foundations was terraform when it shouldn't be terraformed [FS#882, FS#890] (r10219)
+- Fix: Do not make a 270 degree turn on the international airport when a 90 degree turn is enough (r10187)
+- Fix: Crash when trying to get the aircraft movement state of an aircraft going to a just deleted airport [FS#874] (r10165)
+- Fix: Airports did not flood when there are aircraft on the airport [FS#601] (r10155)
+- Fix: Some vehicles were not drawn when having a high resolution and a high zoom-out level [FS#870] (r10154)
+- Fix: Vehicles disappear when crossing certain tiles [FS#869] (r10153)
+- Fix: Train disconnects in some old TTD savegames [FS#862] (10151)
+- Fix: OpenTTD assumes that the resolution is at least 1 by 1, so force the resolution to be always at least 1 by 1 (r10139)
+- Fix: When you got a sufficiently small resolution, there is a possibility for a division by zero when a sound is played (r10138)
+- Fix: When removing a dock, a ship will always try to reach the old location of the dock even when it cannot anymore because it the old location of the dock is now land instead of water [FS#810] (r10131)
+- Fix: SetCurrentGrfLangID returned the wrong language ids for most languages (r10130)
+- Fix: Some NewGRFs use the same (unused in the "current" climate) sprite IDs. Normally this gives some artefacts, but when one NewGRF expects it to be a sprite and another NewGRF overwrites it with a non-sprite nasty things happen (drawing a non-sprite crashes OTTD) [FS#838] (r10109)
+- Fix: Multiple subsequent "give money" actions could result in duplicate messages that money has been transfered when it only happened once, or tell you paid money when you did not [FS#834, FS#839] (r10087, r10085)
+- Fix: "Deactivate Electrified Railways" did not work [FS#836] (10083)
+- Fix: Memory leaks in the networking code [FS#846, FS#844] (r10082, r10075)
+- Fix: Coverage area highlight was still show when it was turned off for docks [FS#835] (r10068)
+- Fix: Do not use override engine type for articulated wagon parts (r10048)
+- Fix: Sprite resulting from '?' substitution was reloaded into the cache entry for SPR_IMG_QUERY instead of the original sprite cache entry. This resulted in unaccounted missing sprite cache memory, and was exacerbated because the original missing sprite was not cached, so it did it again and again and again. Slowdowns and boom (r10038)
+- Fix: One could build on (some) slopes when building on slopes was disabled [FS#823] (r10030)
+- Fix: When deleting the first engine of a train with multiple engines, only reopen the train window if the player had the original train window open. This fixes 'random' windows opening for multiple players of the same company (r10028)
+- Fix: When selling trains, if there were no wagons between multiheaded engines the rear part could be checked despite having already been deleted (10023)
+
+
 0.5.2 (2007-05-29)
 ------------------------------------------------------------------------
 - Feature: Add threading support for MorphOS (r9759)
--- a/config.lib	Sat Jun 02 19:59:29 2007 +0000
+++ b/config.lib	Sat Jul 14 19:42:58 2007 +0000
@@ -5,6 +5,8 @@
 }
 
 set_default() {
+	released_version=""
+
 	ignore_extra_parameters="0"
 	# We set all kinds of defaults for params. Later on the user can override
 	# most of them; but if they don't, this default is used.
@@ -20,17 +22,15 @@
 	awk="awk"
 	os="DETECT"
 	endian="AUTO"
+	cpu_type="DETECT"
 	revision=""
 	config_log="config.log"
 	prefix_dir="/usr/local"
 	binary_dir="games"
 	data_dir="share/games/openttd"
 	icon_dir="share/pixmaps"
-	personal_dir=""
-	custom_lang_dir=""
-	second_data_dir=""
+	personal_dir="1"
 	install_dir="/"
-	enable_install="0"
 	enable_debug="0"
 	enable_profiling="0"
 	enable_dedicated="0"
@@ -42,6 +42,8 @@
 	enable_universal="1"
 	enable_osx_g5="0"
 	enable_unicode="1"
+	with_distcc="1"
+	with_ccache="1"
 	with_osx_sysroot="1"
 	with_application_bundle="1"
 	with_sdl="1"
@@ -59,7 +61,7 @@
 	with_fontconfig="1"
 	with_psp_config="1"
 
-	save_params_array="build host cc_build cc_host cxx_build cxx_host windres strip awk lipo os revision endian config_log prefix_dir binary_dir data_dir icon_dir personal_dir install_dir custom_lang_dir second_data_dir enable_install enable_debug enable_profiling enable_dedicated enable_network enable_static enable_translator enable_assert enable_strip with_osx_sysroot enable_universal enable_osx_g5 enable_unicode with_application_bundle with_sdl with_cocoa with_zlib with_png with_makedepend with_direct_music with_sort with_iconv with_midi with_midi_arg with_libtimidity with_freetype with_fontconfig with_psp_config CC CXX CFLAGS LDFLAGS"
+	save_params_array="build host cc_build cc_host cxx_build cxx_host windres strip awk lipo os cpu_type revision endian config_log prefix_dir binary_dir data_dir icon_dir personal_dir install_dir enable_debug enable_profiling enable_dedicated enable_network enable_static enable_translator enable_assert enable_strip with_distcc with_ccache with_osx_sysroot enable_universal enable_osx_g5 enable_unicode with_application_bundle with_sdl with_cocoa with_zlib with_png with_makedepend with_direct_music with_sort with_iconv with_midi with_midi_arg with_libtimidity with_freetype with_fontconfig with_psp_config CC CXX CFLAGS LDFLAGS"
 }
 
 detect_params() {
@@ -89,6 +91,9 @@
 			--os)                         prev_p="os";;
 			--os=*)                       os="$optarg";;
 
+			--cpu-type)                   prev_p="cpu_type";;
+			--cpu-type=*)                 cpu_type="$optarg";;
+
 			--revision=*)                 revision="$optarg";;
 
 			--cc-build)                   prevp_p="cc_build";;
@@ -127,20 +132,11 @@
 
 			--personal-dir)               prevp_p="personal-dir";;
 			--personal-dir=*)             personal_dir="$optarg";;
+			--without-personal-dir)       personal_dir="";;
 
 			--install-dir)                prevp_p="install-dir";;
 			--install-dir=*)              install_dir="$optarg";;
 
-# TODO: The next few cases will be removed when the search path patch is applied
-			--custom-lang-dir)            prevp_p="custom-lang-dir";;
-			--custom-lang-dir=*)          custom_lang_dir="$optarg";;
-
-			--second-data-dir)            prevp_p="second-data-dir";;
-			--second-data-dir=*)          second_data_dir="$optarg";;
-
-			--enable-install)             enable_install="1";;
-			--enable-install=*)           enable_install="$optarg";;
-# TODO: End of to be removed cases
 
 
 			--enable-debug)               enable_debug="1";;
@@ -233,6 +229,14 @@
 			--with-midi=*)                with_midi="$optarg";;
 			--with-midi-arg=*)            with_midi_arg="$optarg";;
 
+			--without-distcc)             with_distcc="0";;
+			--with-distcc)                with_distcc="2";;
+			--with-distcc=*)              with_distcc="$optarg";;
+
+			--without-ccache)             with_ccache="0";;
+			--with-ccache)                with_ccache="2";;
+			--with-ccache=*)              with_ccache="$optarg";;
+
 			--without-osx-sysroot)        with_osx_sysroot="0";;
 			--with-osx-sysroot)           with_osx_sysroot="2";;
 			--with-osx-sysroot=*)         with_osx_sysroot="$optarg";;
@@ -294,6 +298,7 @@
 
 	endian=`echo $endian | tr '[a-z]' '[A-Z]'`
 	os=`echo $os | tr '[a-z]' '[A-Z]'`
+	cpu_type=`echo $cpu_type | tr '[a-z]' '[A-Z]'`
 
 	# Check if all params have valid values
 
@@ -309,8 +314,14 @@
 		echo " Available options are: --os=[DETECT|UNIX|OSX|FREEBSD|OPENBSD|MORPHOS|BEOS|SUNOS|CYGWIN|MINGW|OS2|WINCE|PSP]"
 		exit 1
 	fi
+	# cpu_type can be either 32 or 64
+	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
@@ -352,6 +363,7 @@
 	fi
 	check_lipo
 	check_makedepend
+	detect_cputype
 
 	if [ "$enable_static" = "1" ]; then
 		if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "MORPHOS" ] || [ "$os" = "OSX" ]; then
@@ -510,6 +522,64 @@
 		log 1 "checking stripping... skipped"
 	fi
 
+	if [ "$with_distcc" = "0" ]; then
+		log 1 "checking distcc... no"
+	elif [ "$with_distcc" = "1" ]; then
+		with_distcc="0"
+
+		log 1 "checking distcc... no (only used when forced)"
+	elif [ "$with_distcc" = "2" ]; then
+		distcc="distcc"
+	else
+		distcc="$with_distcc"
+	fi
+	if [ "$with_distcc" != "0" ]; then
+		res="`$distcc --version 2>/dev/null | head -n 1 | cut -b 0-6`"
+		if [ "$res" != "distcc" ]; then
+			distcc=""
+			log 1 "checking distcc... no"
+			if [ "$with_distcc" = "2" ]; then
+				log 1 "configure: error: no distcc detected, but was forced to be used"
+				exit 1
+			fi
+			if [ "$with_distcc" != "1" ]; then
+				log 1 "configure: error: '$with_distcc' doesn't seem a distcc to me"
+				exit 1
+			fi
+		fi
+
+		log 1 "checking distcc... $distcc"
+	fi
+
+	if [ "$with_ccache" = "0" ]; then
+		log 1 "checking ccache... no"
+	elif [ "$with_ccache" = "1" ]; then
+		with_ccache="0"
+
+		log 1 "checking ccache... no (only used when forced)"
+	elif [ "$with_ccache" = "2" ]; then
+		ccache="ccache"
+	else
+		ccache="$with_ccache"
+	fi
+	if [ "$with_ccache" != "0" ]; then
+		res="`$ccache --version 2>/dev/null | head -n 1 | cut -b 0-6`"
+		if [ "$res" != "ccache" ]; then
+			ccache=""
+			log 1 "checking ccache... no"
+			if [ "$with_ccache" = "2" ]; then
+				log 1 "configure: error: no ccache detected, but was forced to be used"
+				exit 1
+			fi
+			if [ "$with_ccache" != "1" ]; then
+				log 1 "configure: error: '$with_ccache' doesn't seem a ccache to me"
+				exit 1
+			fi
+		fi
+
+		log 1 "checking ccache... $ccache"
+	fi
+
 	if [ "$os" != "OSX" ] && [ "$with_osx_sysroot" != "0" ]; then
 		if [ "$with_osx_sysroot" = "1" ]; then
 			with_osx_sysroot="0"
@@ -553,21 +623,6 @@
 
 	if [ "$os" = "OSX" ] && [ "$with_application_bundle" = "1" ]; then
 		OSXAPP="OpenTTD.app"
-
-# TODO: remove next few lines of code when the search path patch has been applied
-		if [ -n "$custom_lang_dir" ] && [ "$custom_lang_dir" != "${OSXAPP}/Contents/Resources/lang/" ]; then
-			log 1 "configure: error: --custom-lang-dir and --with-application-bundle are not compatible
-			exit 1
-		fi
-
-		if [ -n "$custom_lang_dir" ] && [ "$second_data_dir" != "${OSXAPP}/Contents/Resources/data/" ]; then
-			log 1 "configure: error: --second-data-dir and --with-application-bundle are not compatible
-			exit 1
-		fi
-
-		custom_lang_dir="${OSXAPP}/Contents/Resources/lang/"
-		second_data_dir="${OSXAPP}/Contents/Resources/data/"
-# TODO: remove till here
 	else
 		OSXAPP=""
 	fi
@@ -609,6 +664,71 @@
 			exit 1
 		fi
 	fi
+
+	if [ -n "$released_version" ]; then
+		log 1 "checking revision... release ($released_version)"
+		if [ -n "$revision" ] && [ "$revision" != "$released_version" ]; then
+			log 1 "WARNING: overriding of the revision is NOT possible for releases"
+			log 1 "WARNING: the given revision is IGNORED"
+
+			sleep 5
+		fi
+		revision=$released_version
+	else
+		if [ -n "$revision" ]; then
+			log 1 "checking revision... $revision"
+			log 1 "WARNING: we do not advise you to use this setting"
+			log 1 "WARNING: in most cases it is not safe for network use"
+			log 1 "WARNING: USE WITH CAUTION!"
+
+			sleep 5
+		elif [ -f "$ROOT_DIR/version" ]; then
+			revision="`cat $ROOT_DIR/version`"
+
+			log 1 "checking revision... $revision"
+		elif [ -d "$ROOT_DIR/.svn" ] && [ -n "`svn help`" ]; then
+			revision=""
+			log 1 "checking revision... svn detection"
+		elif [ -d "$ROOT_DIR/.git" ] && [ -n "`git help`" ]; then
+			revision=""
+			log 1 "checking revision... git detection"
+		else
+			revision=""
+			log 1 "checking revision... no detection"
+			log 1 "WARNING: there is no means to determine the version."
+			log 1 "WARNING: please use a subversion or git checkout of OpenTTD."
+			log 1 "WARNING: this version is only allowed by game servers that"
+			log 1 "WARNING: have been compiled without version detection."
+			log 1 "WARNING: there is a great chance you desync."
+			log 1 "WARNING: USE WITH CAUTION!"
+
+			sleep 5
+		fi
+	fi
+
+	if [ "$personal_dir" = "1" ]; then
+		if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ]; then
+			personal_dir="OpenTTD"
+		elif [ "$os" = "OSX" ]; then
+			personal_dir="Documents/OpenTTD"
+		else
+			personal_dir=".openttd"
+		fi
+	fi
+
+	if [ -n "$personal_dir" ]
+	then
+		log 1 "personal home directory... $personal_dir"
+	else
+		log 1 "personal home directory... none"
+	fi
+
+	if [ -n "$install_dir" ]
+	then
+		log 1 "installation directory... $install_dir"
+	else
+		log 1 "installation directory... none"
+	fi
 }
 
 make_cflags_and_ldflags() {
@@ -628,15 +748,14 @@
 		OBJS_SUBDIR="release"
 		if [ "$os" = "OSX" ]; then
 			# these compilerflags makes the app run as fast as possible without making the app unstable. It works on G3 or newer
-			CFLAGS="$CFLAGS -O3 -funroll-loops -fsched-interblock -falign-loops=16 -falign-jumps=16 -falign-functions=16 -falign-jumps-max-skip=15 -falign-loops-max-skip=15 -mdynamic-no-pic"
+			CFLAGS="-O3 -funroll-loops -fsched-interblock -falign-loops=16 -falign-jumps=16 -falign-functions=16 -falign-jumps-max-skip=15 -falign-loops-max-skip=15 -mdynamic-no-pic $CFLAGS"
 		else
 			if [ "$os" = "MORPHOS" ]; then
-				CFLAGS="$CFLAGS -I/gg/os-include -noixemul -fstrict-aliasing -fexpensive-optimizations"
-				CFLAGS="$CFLAGS -mcpu=604 -fno-inline -mstring -mmultiple"
+				CFLAGS="-I/gg/os-include -noixemul -fstrict-aliasing -fexpensive-optimizations -mcpu=604 -fno-inline -mstring -mmultiple $CFLAGS"
 				LDFLAGS="$LDFLAGS -noixemul"
 			fi
 
-			CFLAGS="$CFLAGS -O2 -fomit-frame-pointer"
+			CFLAGS="-O2 -fomit-frame-pointer $CFLAGS"
 		fi
 	else
 		OBJS_SUBDIR="debug"
@@ -709,7 +828,7 @@
 		fi
 	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
@@ -907,46 +1026,11 @@
 		LDFLAGS="$LDFLAGS -Wl,-syslibroot,/Developer/SDKs/MacOSX$with_osx_sysroot.sdk"
 	fi
 
-# TODO: remove next few lines of code when the search path patch has been applied
-	if [ -n "$second_data_dir" ]; then
-		CFLAGS="$CFLAGS -DSECOND_DATA_DIR=\\\\\"$second_data_dir\\\\\""
+	if [ -n "$personal_dir" ]; then
+		CFLAGS="$CFLAGS -DWITH_PERSONAL_DIR -DPERSONAL_DIR=\\\\\"$personal_dir\\\\\""
 	fi
 
-	if [ -n "$custom_lang_dir" ]; then
-		CFLAGS="$CFLAGS -DCUSTOM_LANG_DIR=\\\\\"$custom_lang_dir\\\\\""
-	fi
-# TODO: remove till here
-
-	if [ "$enable_install" = "1" ]; then
-		if [ -n "$personal_dir" ]; then
-			CFLAGS="$CFLAGS -DUSE_HOMEDIR=1 -DPERSONAL_DIR=\\\\\"$personal_dir/\\\\\""
-		fi
-
-		if [ -n "$data_dir" ]; then
-			CFLAGS="$CFLAGS -DGAME_DATA_DIR=\\\\\"$prefix_dir/$data_dir/\\\\\""
-		fi
-
-		if [ -n "$icon_dir" ]; then
-			CFLAGS="$CFLAGS -DICON_DIR=\\\\\"$prefix_dir/$icon_dir/\\\\\""
-		fi
-	fi
-
-	if [ -n "$revision" ]; then
-		log 1 "checking revision... $revision"
-		log 1 "WARNING: we do not advise you to use this setting"
-		log 1 "WARNING: in most cases it is not safe for network use"
-		log 1 "WARNING: USE WITH CAUTION!"
-
-		sleep 5
-	elif [ -f "$ROOT_DIR/version" ]; then
-		revision="`cat $ROOT_DIR/version`"
-
-		log 1 "checking revision... $revision"
-	else
-		revision=""
-
-		log 1 "checking revision... svn detection"
-	fi
+	CFLAGS="$CFLAGS -DGLOBAL_DATA_DIR=\\\\\"$prefix_dir/$data_dir\\\\\""
 
 	log 1 "using CFLAGS... $CFLAGS $CC_CFLAGS"
 	log 1 "using LDFLAGS... $LIBS $LDFLAGS"
@@ -962,6 +1046,19 @@
 	else
 		makedepend=""
 	fi
+
+	if [ "$with_distcc" != "0" ]; then
+		cc_host="$distcc $cc_host"
+		cxx_host="$distcc $cxx_host"
+		log 1 ""
+		log 1 " NOTICE: remind yourself to use 'make -jN' to make use of distcc"
+		log 1 ""
+	fi
+
+	if [ "$with_ccache" != "0" ]; then
+		cc_host="$ccache $cc_host"
+		cxx_host="$ccache $cxx_host"
+	fi
 }
 
 check_compiler() {
@@ -1399,6 +1496,9 @@
 	# $2 - library name ('zlib', sets $zlib)
 	# $3 - static library name (libz.a)
 	# $4 - header name (zlib.h)
+	# $5 - force static (if non-empty)
+
+	if [ -n "$5" ]; then force_static="1"; fi
 
 	# 0 means no, 1 is auto-detect, 2 is force
 	if [ "$1" = "0" ]; then
@@ -1411,11 +1511,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
@@ -1423,20 +1523,20 @@
 		fi
 
 		eval "res=\$$2"
-		if [ -n "$res" ] && [ "$enable_static" != "0" ] && [ "$os" != "OSX" ]; then
+		if [ -n "$res" ] && ( [ -n "$force_static" ] || ( [ "$enable_static" != "0" ] && [ "$os" != "OSX" ] ) ); then
 			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
@@ -1786,6 +1886,25 @@
 	fi
 }
 
+detect_cputype() {
+	if [ -n "$cpu_type" ] && [ "$cpu_type" != "DETECT" ]; then
+		log 1 "forcing cpu-type... $cpu_type bits"
+		return;
+	fi
+	echo "#include \"src/stdafx.h\"" > tmp.64bit.cpp
+	echo "assert_compile(sizeof(size_t) == 8);" >> tmp.64bit.cpp
+	echo "int main() { return 0; }" >> tmp.64bit.cpp
+	execute="$cxx_host $CFLAGS tmp.64bit.cpp -o tmp.64bit -DTESTING 2>&1"
+	cpu_type="`eval $execute 2>/dev/null`"
+	ret=$?
+	log 2 "executing $execute"
+	log 2 "  returned $cpu_type"
+	log 2 "  exit code $ret"
+	if [ "$ret" = "0" ]; then cpu_type="64"; else cpu_type="32"; fi
+	log 1 "detecting cpu-type... $cpu_type bits"
+	rm -f tmp.64bit tmp.64bit.cpp
+}
+
 make_sed() {
 	# We check here if we are PPC, because then we need to enable FOUR_BYTE_BOOL
 	#  We do this here, and not sooner, so universal builds also have this
@@ -1793,7 +1912,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
@@ -1867,7 +1986,7 @@
 		s#!!REVISION!!#$revision#g;
 		s#!!AWK!!#$awk#g;
 		s#!!GCC295!!#$gcc295#g;
-		s#!!ENABLE_INSTALL!!#$enable_install#g;
+		s#!!DISTCC!!#$distcc#g;
 	"
 }
 
@@ -1982,18 +2101,10 @@
 	echo "                                 [share/games/openttd]"
 	echo "  --icon-dir=dir                 location of icons. Will be prefixed"
 	echo "                                 with the prefix-dir [share/pixmaps]"
-	echo "  --personal-dir=dir             location of the personal directory []"
+	echo "  --personal-dir=dir             location of the personal directory [.openttd]"
 	echo "  --install-dir=dir              specifies the root to install to."
 	echo "                                 Useful to install into jails [/]"
 	echo ""
-# TODO: The Following 3 tags will be removed when the 'search path patch' is applied
-	echo "  --second-data-dir=dir          specifies a second directory for the"
-	echo "                                 data files"
-	echo "  --custom-lang-dir=dir          specifies a custom directory for the"
-	echo "                                 language files"
-	echo "  --enable-install               make a binary that uses the specified"
-	echo "                                 data-dir and icon-dir"
-	echo ""
 	echo "Features and packages:"
 	echo "  --enable-debug[=LVL]           enable debug-mode (LVL=[0123], 0 is release)"
 	echo "  --enable-profiling             enables profiling"
--- a/configure	Sat Jun 02 19:59:29 2007 +0000
+++ b/configure	Sat Jul 14 19:42:58 2007 +0000
@@ -45,8 +45,8 @@
 
 set_default
 detect_params "$@"
+check_params
 save_params
-check_params
 make_cflags_and_ldflags
 
 EXE=""
@@ -83,6 +83,7 @@
 		deep += 1;
 
 		if ($0 == "SDL"         && "'$sdl_config'" == "")          { next; }
+		if ($0 == "PNG"         && "'$png_config'" == "")          { next; }
 		if ($0 == "OSX"         && "'$os'" != "OSX")               { next; }
 		if ($0 == "OS2"         && "'$os'" != "OS2")               { next; }
 		if ($0 == "PSP"         && "'$os'" != "PSP")               { next; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/32bpp.txt	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,36 @@
+32bpp and OpenTTD
+=================
+
+OpenTTD has 32bpp support. This means: OpenTTD still is 8bpp, but it has the
+posibility to override the graphics with 32bpp. This means that it isn't a
+replacement of grf or newgrf, but simply an addition. If you want to use 32bpp
+graphics of a newgrf, you do need the newgrf itself too (with 8bpp graphics).
+
+
+The Format
+----------
+
+32bpp images are stored in PNG. They should go in:
+  data/sprites/<grfname>/<SpriteID>.png
+
+For example, a grfname would be 'openttd' (without .grf, lowercase), and the
+SpriteID 3, to override the 3rd sprite in openttd.grf with a 32bpp version.
+
+The format of this PNG can be almost anything, but we advise to use RGBA
+format. Alpha-channel is fully supported.
+
+As the core of OpenTTD is 8bpp, and because you of course want company colours
+in your images, you will need to add a mask for every sprite that needs colour
+remapping. The name is simular as above, only you have to put a 'm' behind the
+SpriteID. This image should be a 8bpp palette image, where the palette is the
+OpenTTD palette. Upon load of the PNG, the mask is loaded too, and overrides
+the RGB (not the Alpha) of the original PNG image, and replacing it with a
+8bpp color remapped and converted to 32bpp.
+
+An other thing that OpenTTD needs in your png, is 2 tEXt chunks: x_offs and
+y_offs. This to define the x- and y-offset, of course. Use the tool we supply
+to add this information. Sadly enough most graphical editors trashes those
+chunks upon save, so you have to readd it every time you save your image.
+
+Your images should be the same as the grf, in size.
+
--- a/docs/Readme_OS2.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/docs/Readme_OS2.txt	Sat Jul 14 19:42: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/docs/openttd.6	Sat Jun 02 19:59:29 2007 +0000
+++ b/docs/openttd.6	Sat Jul 14 19:42:58 2007 +0000
@@ -1,6 +1,6 @@
 .\"                                      Hey, EMACS: -*- nroff -*-
 .\" Please adjust this date whenever revising the manpage.
-.Dd May 29, 2007
+.Dd Jun 28, 2007
 .Dt OPENTTD 6
 .Sh NAME
 .Nm openttd
--- a/known-bugs.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/known-bugs.txt	Sat Jul 14 19:42:58 2007 +0000
@@ -4,43 +4,33 @@
 that are the same as these. If you do, don't act surprised, because
 we WILL flame you!!
 
-There is an experimental AI included in the game which you can enable
-from the "Configure Patches" window. All bugs related to this AI should
-go to: http://www.tt-forums.net/viewtopic.php?t=9576
-
 Of course if you have more knowledge about any of these bugs, have more
 specifics, we welcome you to report them. React to the given bug indicated
-by the number below on http://sourceforge.net/tracker/?group_id=103924&atid=636365
-or http://bugs.openttd.org.
+by the number below on http://bugs.openttd.org.
 If the bug report is closed, it has been fixed, which then can be verified
 in the latest SVN version.
 
-Bugs for 0.5.2
+Bugs for 0.5.3
 ------------------------------------------------------------------------
 URL: http://bugs.openttd.org
 
--735	Plural rule not expanded correctly when non-numeric placeholder uses
+-917	Load scenario with no towns failed without proper warning
+-873	Assertion window fails to open on OSX
+-820	Pillar drawing order glich, with newbridges
 -716	Train Crash in Depot
 -674	Map signs allow less nonenglish characters than english ones
 -669	Docks/Airports/RV Stations can be built without available vehicles
 -646	AI builds useless stations
--601	Airports can't get flooded when they have planes in them
 -599	Reloaded game lost company passwords
--594	Terraforming wipes out canals
 -591	Autorenew fails under certain conditions
--559	Front-/Rear-facing engines don't line up with each other
 -553	Autorenew doesn't warn when replacement isn't available
 -546	Overflows due to inflation
--540	Planes vanished when offered exclusive
--539	Trains can cash the same cargo multiple times
 -522	Overflow on vehicle costs
--508	Destroying trees and replanting => raised rating
 -502	OSX can incorrectly print "dbg: [sl] Cannot open savegame 'data/opntitle.dat' for saving/loading."
 -501	Mouse pointer gets hidden, when draging out of window and back again. Only affects Wacom etc.
 -494	Get free money abusing a stock bug
 -474	Overtaking car doesn't hit the against-riding car.
 -458	Crash when changing Resolution on Mac OS X (x86)
--442	Alt-tab behaviour flawed whilst full screen (win32)
 -435	Assertion window doesn't show when in fullscreen on Mac OS X
 -423	Improved loading causes high CPU use with long trains
 -410	Openttd in dedicated mode don't run without data files
@@ -50,49 +40,10 @@
 -354	Maglev Trains faster than All Planes
 -339	Crash in Quicktime when exiting game
 -299	Disable 90 deg turns patch - AI builds 90 deg turns
--290	NPF - no path to depot from tunnel
 -282	AI Players do not clear loans as soon as they could
--274	Autoclean ignores any share holdings
--265	Subsidy awarded detection bug
 -259	AIs start unnamed companies that do nothing
--216	AI build train vans one van less
 -202	2 Locomotives in 1 Train - Selling one results in Age of the other one Being 0
 -193	Inconsistent directory usage on Mac OS X
--165	Vehicle length not taken into account
 -153	Language crash with app renaming OSX
 -119	Clipping problems with vehicles on slopes
-- 89	Able to build railways/stations before engines become available
-- 65	Short wagons bug
 - 51	Windows doesn't support CUSTOM_LANG_DIR
-- 47	Low rating calculation and cargo loading priority
-
-------------------------------------------------------------------------
-URL: http://sourceforge.net/tracker/?atid=636365&group_id=103924&func=browse
-
--1573339	0.4.8.dmg Crash with intel 64bit
--1460218	0.4.7 normal industry bug (non_smooth)
--1459262	Towns building too many roads way too long now
--1458995	Another bug with smooth_economy
--1393415	NPF & one-way sigs
--1212267	Station visited twice when servicing
--1208170	Duplicate station names can be created
--1116638	"More, but smaller changes" deficiency
--1106356	Re-offered prototypes
-
-------------------------------------------------------------------------
-URL: http://sourceforge.net/tracker/?atid=669662&group_id=103924&func=browse
-
--1461629	[r4180]Subsidy calculated wrong
--1412031	Fast forward scrolling is also fast forward :)
--1382782	Loan interest calculated 'wrong'
--1201284	Permanent hilight in a depot
--1185852	Scrollbars get arbitrarily small
--1160732	Little bug with transparency
--1108046	Game freezes
--1102174	Bug if 3 people buy 25% shares in one company
--1084620	Minor bug considering buses/trucks
--1034310	Color mauve in diagrams
--1030661	It's possible to build a tunnel under oil wells
-- 987883	Aircraft landing/taking off
-- 987880	Company league table updating
-- 985924	Aircraft taxi speed
--- a/os/debian/changelog	Sat Jun 02 19:59:29 2007 +0000
+++ b/os/debian/changelog	Sat Jul 14 19:42:58 2007 +0000
@@ -4,6 +4,12 @@
 
  -- Matthijs Kooijman <m.kooijman@student.utwente.nl>  Mon, 26 Feb 2007 21:07:05 +0100
 
+openttd (0.5.3~rc1-1) unstable; urgency=low
+
+  * New upstream release.
+
+ -- Matthijs Kooijman <m.kooijman@student.utwente.nl>  Thu, 28 Jun 2007 18:00:00 +0100
+
 openttd (0.5.2-1) unstable; urgency=low
 
   * New upstream release.
--- a/os/win32/installer/install.nsi	Sat Jun 02 19:59:29 2007 +0000
+++ b/os/win32/installer/install.nsi	Sat Jul 14 19:42:58 2007 +0000
@@ -1,6 +1,6 @@
 !define APPNAME "OpenTTD"   ; Define application name
-!define APPVERSION "0.5.2"  ; Define application version
-!define INSTALLERVERSION 34 ; NEED TO UPDATE THIS FOR EVERY RELEASE!!!
+!define APPVERSION "0.5.3"  ; Define application version
+!define INSTALLERVERSION 35 ; NEED TO UPDATE THIS FOR EVERY RELEASE!!!
 
 !define APPURLLINK "http://www.openttd.org"
 !define APPNAMEANDVERSION "${APPNAME} ${APPVERSION}"
--- a/projects/generate	Sat Jun 02 19:59:29 2007 +0000
+++ b/projects/generate	Sat Jul 14 19:42:58 2007 +0000
@@ -31,12 +31,31 @@
 
 # First, collect the list of Windows files
 sdl_config="1"
+png_config="1"
 os="MSVC"
 enable_dedicated="0"
 with_cocoa="0"
 enable_directmusic="1"
 file_prefix="..\\\\src\\\\"
 
+safety_check() {
+	li=""
+	for i in `cat $1 | grep -v "#\|ottdres.rc\|win32.cpp\|win32_v.cpp" | xargs -n 1 basename | sort`; do
+		if [ "$li" = "$i" ]; then
+			echo " !! ERROR !!"
+			echo ""
+			echo "The filename '$i' is already used in this project."
+			echo "Because MSVC uses one single directory for all object files, it"
+			echo "cannot handle filenames with the same name inside the same project."
+			echo "Please rename either one of the file and try generating again."
+			echo ""
+			echo " !! ERROR !!"
+			exit 1
+		fi
+		li="$i"
+	done
+}
+
 load_main_data() {
 	# Read the source.list and process it
 	RES="`cat $1 | tr '\r' '\n' | awk '
@@ -52,6 +71,7 @@
 			deep += 1;
 
 			if ($0 == "SDL"         && "'$sdl_config'" == "")          { next; }
+			if ($0 == "PNG"         && "'$png_config'" == "")          { next; }
 			if ($0 == "OSX"         && "'$os'" != "OSX")               { next; }
 			if ($0 == "OS2"         && "'$os'" != "OS2")               { next; }
 			if ($0 == "PSP"         && "'$os'" != "PSP")               { next; }
@@ -167,6 +187,8 @@
 	' >> "$ROOT_DIR/projects/$2"
 }
 
+safety_check "$ROOT_DIR/source.list"
+
 load_main_data "$ROOT_DIR/source.list" openttd
 load_lang_data "$ROOT_DIR/src/lang/*.txt" lang
 
--- a/projects/langs.vcproj	Sat Jun 02 19:59:29 2007 +0000
+++ b/projects/langs.vcproj	Sat Jul 14 19:42:58 2007 +0000
@@ -91,6 +91,19 @@
 			</FileConfiguration>
 		</File>
 		<File
+			RelativePath="..\src\lang\croatian.txt">
+			<FileConfiguration
+				Name="Debug|Win32">
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating croatian language file"
+					CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
+"
+					AdditionalDependencies=""
+					Outputs="..\bin\lang\croatian.lng"/>
+			</FileConfiguration>
+		</File>
+		<File
 			RelativePath="..\src\lang\czech.txt">
 			<FileConfiguration
 				Name="Debug|Win32">
@@ -338,6 +351,19 @@
 			</FileConfiguration>
 		</File>
 		<File
+			RelativePath="..\src\lang\piglatin.txt">
+			<FileConfiguration
+				Name="Debug|Win32">
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating piglatin language file"
+					CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
+"
+					AdditionalDependencies=""
+					Outputs="..\bin\lang\piglatin.lng"/>
+			</FileConfiguration>
+		</File>
+		<File
 			RelativePath="..\src\lang\polish.txt">
 			<FileConfiguration
 				Name="Debug|Win32">
--- a/projects/langs_vs80.vcproj	Sat Jun 02 19:59:29 2007 +0000
+++ b/projects/langs_vs80.vcproj	Sat Jul 14 19:42:58 2007 +0000
@@ -107,6 +107,21 @@
 			</FileConfiguration>
 		</File>
 		<File
+			RelativePath="..\src\lang\croatian.txt"
+			>
+			<FileConfiguration
+				Name="Debug|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating croatian language file"
+					CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+					AdditionalDependencies=""
+					Outputs="..\bin\lang\croatian.lng"
+				/>
+			</FileConfiguration>
+		</File>
+		<File
 			RelativePath="..\src\lang\czech.txt"
 			>
 			<FileConfiguration
@@ -392,6 +407,21 @@
 			</FileConfiguration>
 		</File>
 		<File
+			RelativePath="..\src\lang\piglatin.txt"
+			>
+			<FileConfiguration
+				Name="Debug|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					Description="Generating piglatin language file"
+					CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+					AdditionalDependencies=""
+					Outputs="..\bin\lang\piglatin.lng"
+				/>
+			</FileConfiguration>
+		</File>
+		<File
 			RelativePath="..\src\lang\polish.txt"
 			>
 			<FileConfiguration
--- a/projects/openttd.vcproj	Sat Jun 02 19:59:29 2007 +0000
+++ b/projects/openttd.vcproj	Sat Jul 14 19:42:58 2007 +0000
@@ -30,7 +30,7 @@
 				OmitFramePointers="TRUE"
 				OptimizeForProcessor="1"
 				AdditionalIncludeDirectories="..\objs\langs"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				StringPooling="TRUE"
 				ExceptionHandling="TRUE"
 				RuntimeLibrary="0"
@@ -103,7 +103,7 @@
 				Name="VCCLCompilerTool"
 				Optimization="0"
 				AdditionalIncludeDirectories="..\objs\langs"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="1"
 				UsePrecompiledHeader="0"
@@ -182,6 +182,9 @@
 				RelativePath=".\..\src\cargotype.cpp">
 			</File>
 			<File
+				RelativePath=".\..\src\cargopacket.cpp">
+			</File>
+			<File
 				RelativePath=".\..\src\command.cpp">
 			</File>
 			<File
@@ -393,9 +396,6 @@
 				RelativePath=".\..\src\articulated_vehicles.h">
 			</File>
 			<File
-				RelativePath=".\..\src\autoreplace_cmd.h">
-			</File>
-			<File
 				RelativePath=".\..\src\airport_states.h">
 			</File>
 			<File
@@ -408,6 +408,9 @@
 				RelativePath=".\..\src\cargotype.h">
 			</File>
 			<File
+				RelativePath=".\..\src\cargopacket.h">
+			</File>
+			<File
 				RelativePath=".\..\src\command.h">
 			</File>
 			<File
@@ -471,9 +474,6 @@
 				RelativePath=".\..\src\gui.h">
 			</File>
 			<File
-				RelativePath=".\..\src\hal.h">
-			</File>
-			<File
 				RelativePath=".\..\src\heightmap.h">
 			</File>
 			<File
@@ -483,6 +483,9 @@
 				RelativePath=".\..\src\industry.h">
 			</File>
 			<File
+				RelativePath=".\..\src\landscape.h">
+			</File>
+			<File
 				RelativePath=".\..\src\livery.h">
 			</File>
 			<File
@@ -546,6 +549,12 @@
 				RelativePath=".\..\src\newgrf_house.h">
 			</File>
 			<File
+				RelativePath=".\..\src\newgrf_industries.h">
+			</File>
+			<File
+				RelativePath=".\..\src\newgrf_industrytiles.h">
+			</File>
+			<File
 				RelativePath=".\..\src\newgrf_sound.h">
 			</File>
 			<File
@@ -561,6 +570,9 @@
 				RelativePath=".\..\src\newgrf_town.h">
 			</File>
 			<File
+				RelativePath=".\..\src\newgrf_townname.h">
+			</File>
+			<File
 				RelativePath=".\..\src\news.h">
 			</File>
 			<File
@@ -627,6 +639,9 @@
 				RelativePath=".\..\src\sprite.h">
 			</File>
 			<File
+				RelativePath=".\..\src\spritecache.h">
+			</File>
+			<File
 				RelativePath=".\..\src\station.h">
 			</File>
 			<File
@@ -636,6 +651,9 @@
 				RelativePath=".\..\src\string.h">
 			</File>
 			<File
+				RelativePath=".\..\src\texteff.hpp">
+			</File>
+			<File
 				RelativePath=".\..\src\tgp.h">
 			</File>
 			<File
@@ -645,6 +663,9 @@
 				RelativePath=".\..\src\tile.h">
 			</File>
 			<File
+				RelativePath=".\..\src\timetable.h">
+			</File>
+			<File
 				RelativePath=".\..\src\town.h">
 			</File>
 			<File
@@ -781,6 +802,9 @@
 				RelativePath=".\..\src\terraform_gui.cpp">
 			</File>
 			<File
+				RelativePath=".\..\src\timetable_gui.cpp">
+			</File>
+			<File
 				RelativePath=".\..\src\town_gui.cpp">
 			</File>
 			<File
@@ -836,6 +860,9 @@
 				RelativePath=".\..\src\station_cmd.cpp">
 			</File>
 			<File
+				RelativePath=".\..\src\timetable_cmd.cpp">
+			</File>
+			<File
 				RelativePath=".\..\src\town_cmd.cpp">
 			</File>
 			<File
@@ -861,9 +888,6 @@
 				RelativePath=".\..\src\table\ai_rail.h">
 			</File>
 			<File
-				RelativePath=".\..\src\table\allstrings.h">
-			</File>
-			<File
 				RelativePath=".\..\src\table\animcursors.h">
 			</File>
 			<File
@@ -915,7 +939,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">
@@ -930,9 +954,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
@@ -962,6 +983,96 @@
 			</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
+				RelativePath=".\..\src\blitter\32bpp_base.hpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\32bpp_simple.cpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\32bpp_simple.hpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\8bpp_base.cpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\8bpp_base.hpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\8bpp_debug.cpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\8bpp_debug.hpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\8bpp_optimized.cpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\8bpp_optimized.hpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\8bpp_simple.cpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\8bpp_simple.hpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\base.hpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\factory.hpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\null.cpp">
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\null.hpp">
+			</File>
+		</Filter>
+		<Filter
+			Name="Drivers"
+			Filter="">
+			<File
+				RelativePath=".\..\src\music\music_driver.hpp">
+			</File>
+			<File
+				RelativePath=".\..\src\sound\sound_driver.hpp">
+			</File>
+			<File
+				RelativePath=".\..\src\video\video_driver.hpp">
+			</File>
+		</Filter>
+		<Filter
+			Name="Sprite loaders"
+			Filter="">
+			<File
+				RelativePath=".\..\src\spriteloader\grf.cpp">
+			</File>
+			<File
+				RelativePath=".\..\src\spriteloader\grf.hpp">
+			</File>
+			<File
+				RelativePath=".\..\src\spriteloader\png.cpp">
+			</File>
+			<File
+				RelativePath=".\..\src\spriteloader\png.hpp">
+			</File>
+			<File
+				RelativePath=".\..\src\spriteloader\spriteloader.hpp">
+			</File>
+		</Filter>
+		<Filter
 			Name="NewGRF"
 			Filter="">
 			<File
@@ -986,6 +1097,12 @@
 				RelativePath=".\..\src\newgrf_house.cpp">
 			</File>
 			<File
+				RelativePath=".\..\src\newgrf_industries.cpp">
+			</File>
+			<File
+				RelativePath=".\..\src\newgrf_industrytiles.cpp">
+			</File>
+			<File
 				RelativePath=".\..\src\newgrf_sound.cpp">
 			</File>
 			<File
@@ -1000,6 +1117,9 @@
 			<File
 				RelativePath=".\..\src\newgrf_town.cpp">
 			</File>
+			<File
+				RelativePath=".\..\src\newgrf_townname.cpp">
+			</File>
 		</Filter>
 		<Filter
 			Name="Map Accessors"
@@ -1078,11 +1198,23 @@
 				RelativePath=".\..\src\misc\crc32.hpp">
 			</File>
 			<File
+				RelativePath=".\..\src\misc\dbg_helpers.cpp">
+			</File>
+			<File
+				RelativePath=".\..\src\misc\dbg_helpers.h">
+			</File>
+			<File
 				RelativePath=".\..\src\misc\fixedsizearray.hpp">
 			</File>
 			<File
 				RelativePath=".\..\src\misc\hashtable.hpp">
 			</File>
+			<File
+				RelativePath=".\..\src\misc\str.hpp">
+			</File>
+			<File
+				RelativePath=".\..\src\misc\strapi.hpp">
+			</File>
 		</Filter>
 		<Filter
 			Name="Network Core"
--- a/projects/openttd.vcproj.in	Sat Jun 02 19:59:29 2007 +0000
+++ b/projects/openttd.vcproj.in	Sat Jul 14 19:42:58 2007 +0000
@@ -30,7 +30,7 @@
 				OmitFramePointers="TRUE"
 				OptimizeForProcessor="1"
 				AdditionalIncludeDirectories="..\objs\langs"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				StringPooling="TRUE"
 				ExceptionHandling="TRUE"
 				RuntimeLibrary="0"
@@ -103,7 +103,7 @@
 				Name="VCCLCompilerTool"
 				Optimization="0"
 				AdditionalIncludeDirectories="..\objs\langs"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="1"
 				UsePrecompiledHeader="0"
--- a/projects/openttd_vs80.vcproj	Sat Jun 02 19:59:29 2007 +0000
+++ b/projects/openttd_vs80.vcproj	Sat Jul 14 19:42:58 2007 +0000
@@ -59,7 +59,7 @@
 				FavorSizeOrSpeed="2"
 				OmitFramePointers="true"
 				AdditionalIncludeDirectories="..\objs\langs"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				StringPooling="true"
 				ExceptionHandling="1"
 				RuntimeLibrary="0"
@@ -77,7 +77,7 @@
 				BrowseInformation="1"
 				BrowseInformationFile="$(IntDir)/"
 				WarningLevel="3"
-				WarnAsError="true"
+				WarnAsError="false"
 				SuppressStartupBanner="true"
 				DebugInformationFormat="3"
 				CallingConvention="1"
@@ -171,7 +171,7 @@
 				FavorSizeOrSpeed="2"
 				OmitFramePointers="true"
 				AdditionalIncludeDirectories="..\objs\langs"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				StringPooling="true"
 				ExceptionHandling="1"
 				RuntimeLibrary="0"
@@ -277,7 +277,7 @@
 				Name="VCCLCompilerTool"
 				Optimization="0"
 				AdditionalIncludeDirectories="..\objs\langs"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="1"
 				UsePrecompiledHeader="0"
@@ -285,7 +285,7 @@
 				ObjectFile="$(IntDir)/"
 				ProgramDataBaseFileName="$(IntDir)/$(TargetName).pdb"
 				WarningLevel="3"
-				WarnAsError="true"
+				WarnAsError="false"
 				SuppressStartupBanner="true"
 				Detect64BitPortabilityProblems="false"
 				DebugInformationFormat="4"
@@ -373,7 +373,7 @@
 				Name="VCCLCompilerTool"
 				Optimization="0"
 				AdditionalIncludeDirectories="..\objs\langs"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="1"
 				UsePrecompiledHeader="0"
@@ -472,6 +472,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\cargopacket.cpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\command.cpp"
 				>
 			</File>
@@ -752,10 +756,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\autoreplace_cmd.h"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\airport_states.h"
 				>
 			</File>
@@ -772,6 +772,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\cargopacket.h"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\command.h"
 				>
 			</File>
@@ -856,10 +860,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\hal.h"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\heightmap.h"
 				>
 			</File>
@@ -872,6 +872,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\landscape.h"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\livery.h"
 				>
 			</File>
@@ -956,6 +960,14 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\newgrf_industries.h"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\newgrf_industrytiles.h"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\newgrf_sound.h"
 				>
 			</File>
@@ -976,6 +988,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\newgrf_townname.h"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\news.h"
 				>
 			</File>
@@ -1064,6 +1080,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\spritecache.h"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\station.h"
 				>
 			</File>
@@ -1076,6 +1096,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\texteff.hpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\tgp.h"
 				>
 			</File>
@@ -1088,6 +1112,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\timetable.h"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\town.h"
 				>
 			</File>
@@ -1268,6 +1296,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\timetable_gui.cpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\town_gui.cpp"
 				>
 			</File>
@@ -1340,6 +1372,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\timetable_cmd.cpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\town_cmd.cpp"
 				>
 			</File>
@@ -1372,10 +1408,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\table\allstrings.h"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\table\animcursors.h"
 				>
 			</File>
@@ -1444,7 +1476,7 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\table\strings.h"
+				RelativePath=".\..\src\..\objs\langs\table\strings.h"
 				>
 			</File>
 			<File
@@ -1464,10 +1496,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\table\tunnel_land.h"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\table\unmovable_land.h"
 				>
 			</File>
@@ -1505,6 +1533,122 @@
 			</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>
+			<File
+				RelativePath=".\..\src\blitter\32bpp_base.hpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\32bpp_simple.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\32bpp_simple.hpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\8bpp_base.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\8bpp_base.hpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\8bpp_debug.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\8bpp_debug.hpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\8bpp_optimized.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\8bpp_optimized.hpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\8bpp_simple.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\8bpp_simple.hpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\base.hpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\factory.hpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\null.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\blitter\null.hpp"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Drivers"
+			>
+			<File
+				RelativePath=".\..\src\music\music_driver.hpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\sound\sound_driver.hpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\video\video_driver.hpp"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Sprite loaders"
+			>
+			<File
+				RelativePath=".\..\src\spriteloader\grf.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\spriteloader\grf.hpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\spriteloader\png.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\spriteloader\png.hpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\spriteloader\spriteloader.hpp"
+				>
+			</File>
+		</Filter>
+		<Filter
 			Name="NewGRF"
 			>
 			<File
@@ -1536,6 +1680,14 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\newgrf_industries.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\newgrf_industrytiles.cpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\newgrf_sound.cpp"
 				>
 			</File>
@@ -1555,6 +1707,10 @@
 				RelativePath=".\..\src\newgrf_town.cpp"
 				>
 			</File>
+			<File
+				RelativePath=".\..\src\newgrf_townname.cpp"
+				>
+			</File>
 		</Filter>
 		<Filter
 			Name="Map Accessors"
@@ -1656,6 +1812,14 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\misc\dbg_helpers.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\misc\dbg_helpers.h"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\misc\fixedsizearray.hpp"
 				>
 			</File>
@@ -1663,6 +1827,14 @@
 				RelativePath=".\..\src\misc\hashtable.hpp"
 				>
 			</File>
+			<File
+				RelativePath=".\..\src\misc\str.hpp"
+				>
+			</File>
+			<File
+				RelativePath=".\..\src\misc\strapi.hpp"
+				>
+			</File>
 		</Filter>
 		<Filter
 			Name="Network Core"
--- a/projects/openttd_vs80.vcproj.in	Sat Jun 02 19:59:29 2007 +0000
+++ b/projects/openttd_vs80.vcproj.in	Sat Jul 14 19:42:58 2007 +0000
@@ -59,7 +59,7 @@
 				FavorSizeOrSpeed="2"
 				OmitFramePointers="true"
 				AdditionalIncludeDirectories="..\objs\langs"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				StringPooling="true"
 				ExceptionHandling="1"
 				RuntimeLibrary="0"
@@ -77,7 +77,7 @@
 				BrowseInformation="1"
 				BrowseInformationFile="$(IntDir)/"
 				WarningLevel="3"
-				WarnAsError="true"
+				WarnAsError="false"
 				SuppressStartupBanner="true"
 				DebugInformationFormat="3"
 				CallingConvention="1"
@@ -171,7 +171,7 @@
 				FavorSizeOrSpeed="2"
 				OmitFramePointers="true"
 				AdditionalIncludeDirectories="..\objs\langs"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				StringPooling="true"
 				ExceptionHandling="1"
 				RuntimeLibrary="0"
@@ -277,7 +277,7 @@
 				Name="VCCLCompilerTool"
 				Optimization="0"
 				AdditionalIncludeDirectories="..\objs\langs"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="1"
 				UsePrecompiledHeader="0"
@@ -285,7 +285,7 @@
 				ObjectFile="$(IntDir)/"
 				ProgramDataBaseFileName="$(IntDir)/$(TargetName).pdb"
 				WarningLevel="3"
-				WarnAsError="true"
+				WarnAsError="false"
 				SuppressStartupBanner="true"
 				Detect64BitPortabilityProblems="false"
 				DebugInformationFormat="4"
@@ -373,7 +373,7 @@
 				Name="VCCLCompilerTool"
 				Optimization="0"
 				AdditionalIncludeDirectories="..\objs\langs"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="1"
 				UsePrecompiledHeader="0"
--- a/readme.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/readme.txt	Sat Jul 14 19:42:58 2007 +0000
@@ -1,6 +1,6 @@
 OpenTTD README
-Last updated:    2007-05-29
-Release version: 0.5.2
+Last updated:    2007-06-28
+Release version: 0.5.3-RC1
 ------------------------------------------------------------------------
 
 
@@ -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	Sat Jun 02 19:59:29 2007 +0000
+++ b/source.list	Sat Jul 14 19:42:58 2007 +0000
@@ -6,6 +6,7 @@
 bmp.cpp
 callback_table.cpp
 cargotype.cpp
+cargopacket.cpp
 command.cpp
 console.cpp
 console_cmds.cpp
@@ -99,10 +100,10 @@
 airport_movement.h
 airport_states.h
 articulated_vehicles.h
-autoreplace_cmd.h
 aystar.h
 bmp.h
 cargotype.h
+cargopacket.h
 command.h
 console.h
 currency.h
@@ -124,10 +125,10 @@
 gfxinit.h
 group.h
 gui.h
-hal.h
 heightmap.h
 helpers.hpp
 industry.h
+landscape.h
 livery.h
 macros.h
 map.h
@@ -149,11 +150,14 @@
 newgrf_config.h
 newgrf_engine.h
 newgrf_house.h
+newgrf_industries.h
+newgrf_industrytiles.h
 newgrf_sound.h
 newgrf_spritegroup.h
 newgrf_station.h
 newgrf_text.h
 newgrf_town.h
+newgrf_townname.h
 news.h
 npf.h
 music/null_m.h
@@ -176,12 +180,15 @@
 slope.h
 sound.h
 sprite.h
+spritecache.h
 station.h
 stdafx.h
 string.h
+texteff.hpp
 tgp.h
 thread.h
 tile.h
+timetable.h
 town.h
 train.h
 transparency_gui.h
@@ -228,6 +235,7 @@
 station_gui.cpp
 subsidy_gui.cpp
 terraform_gui.cpp
+timetable_gui.cpp
 town_gui.cpp
 train_gui.cpp
 transparency_gui.cpp
@@ -247,6 +255,7 @@
 roadveh_cmd.cpp
 ship_cmd.cpp
 station_cmd.cpp
+timetable_cmd.cpp
 town_cmd.cpp
 train_cmd.cpp
 tree_cmd.cpp
@@ -256,7 +265,6 @@
 
 # Tables
 table/ai_rail.h
-table/allstrings.h
 table/animcursors.h
 table/autorail.h
 table/build_industry.h
@@ -274,12 +282,11 @@
 table/sprites.h
 table/station_air.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
 
@@ -291,6 +298,40 @@
 ai/trolly/shared.cpp
 ai/trolly/trolly.cpp
 
+# Blitters
+blitter/32bpp_anim.cpp
+blitter/32bpp_anim.hpp
+blitter/32bpp_base.cpp
+blitter/32bpp_base.hpp
+blitter/32bpp_simple.cpp
+blitter/32bpp_simple.hpp
+blitter/8bpp_base.cpp
+blitter/8bpp_base.hpp
+blitter/8bpp_debug.cpp
+blitter/8bpp_debug.hpp
+blitter/8bpp_optimized.cpp
+blitter/8bpp_optimized.hpp
+blitter/8bpp_simple.cpp
+blitter/8bpp_simple.hpp
+blitter/base.hpp
+blitter/factory.hpp
+blitter/null.cpp
+blitter/null.hpp
+
+# Drivers
+music/music_driver.hpp
+sound/sound_driver.hpp
+video/video_driver.hpp
+
+# Sprite loaders
+spriteloader/grf.cpp
+spriteloader/grf.hpp
+#if PNG
+spriteloader/png.cpp
+spriteloader/png.hpp
+#end
+spriteloader/spriteloader.hpp
+
 # NewGRF
 newgrf.cpp
 newgrf_canal.cpp
@@ -299,11 +340,14 @@
 newgrf_config.cpp
 newgrf_engine.cpp
 newgrf_house.cpp
+newgrf_industries.cpp
+newgrf_industrytiles.cpp
 newgrf_sound.cpp
 newgrf_spritegroup.cpp
 newgrf_station.cpp
 newgrf_text.cpp
 newgrf_town.cpp
+newgrf_townname.cpp
 
 # Map Accessors
 bridge_map.cpp
@@ -331,8 +375,12 @@
 misc/blob.hpp
 misc/countedptr.hpp
 misc/crc32.hpp
+misc/dbg_helpers.cpp
+misc/dbg_helpers.h
 misc/fixedsizearray.hpp
 misc/hashtable.hpp
+misc/str.hpp
+misc/strapi.hpp
 
 # Network Core
 network/core/config.h
--- a/src/ai/ai.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/ai/ai.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -81,10 +81,10 @@
 /**
  * Executes a raw DoCommand for the AI.
  */
-int32 AI_DoCommandCc(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc, CommandCallback* callback)
+CommandCost AI_DoCommandCc(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc, CommandCallback* callback)
 {
 	PlayerID old_lp;
-	int32 res = 0;
+	CommandCost res;
 	const char* tmp_cmdtext;
 
 	/* If you enable DC_EXEC with DC_QUERY_COST you are a really strange
@@ -135,7 +135,7 @@
 }
 
 
-int32 AI_DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc)
+CommandCost AI_DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc)
 {
 	return AI_DoCommandCc(tile, p1, p2, flags, procc, NULL);
 }
--- a/src/ai/ai.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/ai/ai.h	Sat Jul 14 19:42:58 2007 +0000
@@ -43,8 +43,8 @@
 void AI_RunGameLoop();
 void AI_Initialize();
 void AI_Uninitialize();
-int32 AI_DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc);
-int32 AI_DoCommandCc(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc, CommandCallback* callback);
+CommandCost AI_DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc);
+CommandCost AI_DoCommandCc(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc, CommandCallback* callback);
 
 /** Is it allowed to start a new AI.
  * This function checks some boundries to see if we should launch a new AI.
--- a/src/ai/default/default.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/ai/default/default.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -132,11 +132,11 @@
 	p->ai.state_counter = 0;
 }
 
-static EngineID AiChooseTrainToBuild(RailType railtype, int32 money, byte flag, TileIndex tile)
+static EngineID AiChooseTrainToBuild(RailType railtype, Money money, byte flag, TileIndex tile)
 {
 	EngineID best_veh_index = INVALID_ENGINE;
 	byte best_veh_score = 0;
-	int32 ret;
+	CommandCost ret;
 	EngineID i;
 
 	for (i = 0; i < NUM_TRAIN_ENGINES; i++) {
@@ -152,7 +152,7 @@
 		}
 
 		ret = DoCommand(tile, i, 0, 0, CMD_BUILD_RAIL_VEHICLE);
-		if (!CmdFailed(ret) && ret <= money && rvi->ai_rank >= best_veh_score) {
+		if (CmdSucceeded(ret) && ret.GetCost() <= money && rvi->ai_rank >= best_veh_score) {
 			best_veh_score = rvi->ai_rank;
 			best_veh_index = i;
 		}
@@ -161,7 +161,7 @@
 	return best_veh_index;
 }
 
-static EngineID AiChooseRoadVehToBuild(CargoID cargo, int32 money, TileIndex tile)
+static EngineID AiChooseRoadVehToBuild(CargoID cargo, Money money, TileIndex tile)
 {
 	EngineID best_veh_index = INVALID_ENGINE;
 	int32 best_veh_rating = 0;
@@ -172,7 +172,7 @@
 		const RoadVehicleInfo *rvi = RoadVehInfo(i);
 		const Engine* e = GetEngine(i);
 		int32 rating;
-		int32 ret;
+		CommandCost ret;
 
 		if (!HASBIT(e->player_avail, _current_player) || e->reliability < 0x8A3D) {
 			continue;
@@ -189,8 +189,8 @@
 		if (CmdFailed(ret)) continue;
 
 		/* Add the cost of refitting */
-		if (rvi->cargo_type != cargo) ret += GetRefitCost(i);
-		if (ret > money) continue;
+		if (rvi->cargo_type != cargo) ret.AddCost(GetRefitCost(i));
+		if (ret.GetCost() > money) continue;
 
 		best_veh_rating = rating;
 		best_veh_index = i;
@@ -199,15 +199,15 @@
 	return best_veh_index;
 }
 
-static EngineID AiChooseAircraftToBuild(int32 money, byte flag)
+static EngineID AiChooseAircraftToBuild(Money money, byte flag)
 {
 	EngineID best_veh_index = INVALID_ENGINE;
-	int32 best_veh_cost = 0;
+	Money best_veh_cost = 0;
 	EngineID i;
 
 	for (i = AIRCRAFT_ENGINES_INDEX; i != AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES; i++) {
 		const Engine* e = GetEngine(i);
-		int32 ret;
+		CommandCost ret;
 
 		if (!HASBIT(e->player_avail, _current_player) || e->reliability < 0x8A3D) {
 			continue;
@@ -216,8 +216,8 @@
 		if ((AircraftVehInfo(i)->subtype & AIR_CTOL) != flag) continue;
 
 		ret = DoCommand(0, i, 0, DC_QUERY_COST, CMD_BUILD_AIRCRAFT);
-		if (!CmdFailed(ret) && ret <= money && ret >= best_veh_cost) {
-			best_veh_cost = ret;
+		if (CmdSucceeded(ret) && ret.GetCost() <= money && ret.GetCost() >= best_veh_cost) {
+			best_veh_cost = ret.GetCost();
 			best_veh_index = i;
 		}
 	}
@@ -225,9 +225,9 @@
 	return best_veh_index;
 }
 
-static int32 AiGetBasePrice(const Player* p)
+static Money AiGetBasePrice(const Player* p)
 {
-	int32 base = _price.station_value;
+	Money base = _price.station_value;
 
 	// adjust base price when more expensive vehicles are available
 	switch (p->ai.railtype_to_use) {
@@ -242,7 +242,7 @@
 }
 
 #if 0
-static EngineID AiChooseShipToBuild(byte cargo, int32 money)
+static EngineID AiChooseShipToBuild(byte cargo, Money money)
 {
 	// XXX: not done
 	return INVALID_ENGINE;
@@ -251,13 +251,13 @@
 
 static EngineID AiChooseRoadVehToReplaceWith(const Player* p, const Vehicle* v)
 {
-	int32 avail_money = p->player_money + v->value;
+	Money avail_money = p->player_money + v->value;
 	return AiChooseRoadVehToBuild(v->cargo_type, avail_money, v->tile);
 }
 
 static EngineID AiChooseAircraftToReplaceWith(const Player* p, const Vehicle* v)
 {
-	int32 avail_money = p->player_money + v->value;
+	Money avail_money = p->player_money + v->value;
 	return AiChooseAircraftToBuild(
 		avail_money, AircraftVehInfo(v->engine_type)->subtype & AIR_CTOL
 	);
@@ -265,7 +265,7 @@
 
 static EngineID AiChooseTrainToReplaceWith(const Player* p, const Vehicle* v)
 {
-	int32 avail_money = p->player_money + v->value;
+	Money avail_money = p->player_money + v->value;
 	const Vehicle* u = v;
 	int num = 0;
 
@@ -331,8 +331,8 @@
 		BackupVehicleOrders(v, orderbak);
 		tile = v->tile;
 
-		if (!CmdFailed(DoCommand(0, v->index, 2, DC_EXEC, CMD_SELL_RAIL_WAGON)) &&
-				!CmdFailed(DoCommand(tile, veh, 0, DC_EXEC, CMD_BUILD_RAIL_VEHICLE))) {
+		if (CmdSucceeded(DoCommand(0, v->index, 2, DC_EXEC, CMD_SELL_RAIL_WAGON)) &&
+				CmdSucceeded(DoCommand(tile, veh, 0, DC_EXEC, CMD_BUILD_RAIL_VEHICLE))) {
 			VehicleID veh = _new_vehicle_id;
 			AiRestoreVehicleOrders(GetVehicle(veh), orderbak);
 			DoCommand(0, veh, 0, DC_EXEC, CMD_START_STOP_TRAIN);
@@ -360,8 +360,8 @@
 		BackupVehicleOrders(v, orderbak);
 		tile = v->tile;
 
-		if (!CmdFailed(DoCommand(0, v->index, 0, DC_EXEC, CMD_SELL_ROAD_VEH)) &&
-				!CmdFailed(DoCommand(tile, veh, 0, DC_EXEC, CMD_BUILD_ROAD_VEH))) {
+		if (CmdSucceeded(DoCommand(0, v->index, 0, DC_EXEC, CMD_SELL_ROAD_VEH)) &&
+				CmdSucceeded(DoCommand(tile, veh, 0, DC_EXEC, CMD_BUILD_ROAD_VEH))) {
 			VehicleID veh = _new_vehicle_id;
 
 			AiRestoreVehicleOrders(GetVehicle(veh), orderbak);
@@ -389,8 +389,8 @@
 		BackupVehicleOrders(v, orderbak);
 		tile = v->tile;
 
-		if (!CmdFailed(DoCommand(0, v->index, 0, DC_EXEC, CMD_SELL_AIRCRAFT)) &&
-				!CmdFailed(DoCommand(tile, veh, 0, DC_EXEC, CMD_BUILD_AIRCRAFT))) {
+		if (CmdSucceeded(DoCommand(0, v->index, 0, DC_EXEC, CMD_SELL_AIRCRAFT)) &&
+				CmdSucceeded(DoCommand(tile, veh, 0, DC_EXEC, CMD_BUILD_AIRCRAFT))) {
 			VehicleID veh = _new_vehicle_id;
 			AiRestoreVehicleOrders(GetVehicle(veh), orderbak);
 			DoCommand(0, veh, 0, DC_EXEC, CMD_START_STOP_AIRCRAFT);
@@ -622,7 +622,6 @@
 	int dist;
 	uint same_station = 0;
 
-	// Make sure distance to closest station is < 37 pixels.
 	from_tile = GET_TOWN_OR_INDUSTRY_TILE(fr->from);
 	to_tile = GET_TOWN_OR_INDUSTRY_TILE(fr->to);
 
@@ -646,7 +645,19 @@
 		return false;
 	}
 
-	if (dist != 0xFFFF && dist > 37) return false;
+	/* Requiring distance to nearest station to be always under 37 tiles may be suboptimal,
+	 * Especially for longer aircraft routes that start and end pretty at any arbitrary place on map
+	 * While it may be nice for AI to cluster their creations together, hardcoded limit is not ideal.
+	 * If AI will randomly start on some isolated spot, it will never get out of there.
+	 * AI will have chance of randomly rejecting routes further than 37 tiles from their network,
+	 * so there will be some attempt to cluster the network together */
+
+	/* Random value between 37 and 292. Low values are exponentially more likely
+	 * With 50% chance the value will be under 52 tiles */
+	int min_distance = 36 + (1 << (Random() % 9)); // 0..8
+
+	/* Make sure distance to closest station is < min_distance tiles. */
+	if (dist != 0xFFFF && dist > min_distance) return false;
 
 	if (p->ai.route_type_mask != 0 &&
 			!(p->ai.route_type_mask & bitmask) &&
@@ -672,8 +683,8 @@
 		const Industry* i = (const Industry*)fr->from;
 		const IndustrySpec *indsp = GetIndustrySpec(i->type);
 
-		if (i->pct_transported[fr->cargo != indsp->produced_cargo[0]] > 0x99 ||
-				i->total_production[fr->cargo != indsp->produced_cargo[0]] == 0) {
+		if (i->last_month_pct_transported[fr->cargo != indsp->produced_cargo[0]] > 0x99 ||
+				i->last_month_production[fr->cargo != indsp->produced_cargo[0]] == 0) {
 			return false;
 		}
 	}
@@ -1371,15 +1382,55 @@
 	FoundRoute fr;
 	int i;
 
+	/* Get aircraft that would be bought for this route
+	 * (probably, as conditions may change before the route is fully built,
+	 * like running out of money and having to select different aircraft, etc ...) */
+	EngineID veh = AiChooseAircraftToBuild(p->player_money, p->ai.build_kind != 0 ? 0 : AIR_CTOL);
+
+	/* No aircraft buildable mean no aircraft route */
+	if (veh == INVALID_ENGINE) return;
+
+	const AircraftVehicleInfo *avi = AircraftVehInfo(veh);
+
+	/* For passengers, "optimal" number of days in transit is about 80 to 100
+	 * Calculate "maximum optimal number of squares" from speed for 80 days
+	 * 20 days should be enough for takeoff, land, taxi, etc ...
+	 *
+	 * "A vehicle traveling at 100kph will cross 5.6 tiles per day" ->
+	 * Since in table aircraft speeds are in "real km/h", this should be accurate
+	 * We get max_squares = avi->max_speed * 5.6 / 100.0 * 80 */
+	int max_squares = avi->max_speed * 448 / 100;
+
+	/* For example this will be 10456 tiles for 2334 km/h aircrafts with realistic aircraft speeds
+	 * and 836 with "unrealistic" speeds, much more than the original 95 squares limit
+	 *
+	 * Size of the map, if not rectangular, it is the larger dimension of it
+	 */
+	int map_size = max(MapSizeX(), MapSizeY());
+
+	/* Minimum distance between airports is half of map size, clamped between 1% and 20% of optimum.
+	 * May prevent building plane routes at all on small maps, but they will be ineffective there, so
+	 * it is feature, not a bug.
+	 * On smaller distances, buses or trains are usually more effective approach anyway.
+	 * Additional safeguard is needing at least 20 squares,
+	 * which may trigger in highly unusual configurations */
+	int min_squares = max(20, max(max_squares / 100, min(max_squares / 5, map_size / 2)));
+
+	/* Should not happen, unless aircraft with real speed under approx. 5 km/h is selected.
+	 * No such exist, unless using some NewGRF with ballons, zeppelins or similar
+	 * slow-moving stuff. In that case, bail out, it is faster to walk by foot anyway :). */
+	if (max_squares < min_squares) return;
+
 	i = 60;
 	for (;;) {
+
 		// look for one from the subsidy list
 		AiFindSubsidyPassengerRoute(&fr);
-		if (IS_INT_INSIDE(fr.distance, 0, 95 + 1)) break;
+		if (IS_INT_INSIDE(fr.distance, min_squares, max_squares + 1)) break;
 
 		// try a random one
 		AiFindRandomPassengerRoute(&fr);
-		if (IS_INT_INSIDE(fr.distance, 0, 95 + 1)) break;
+		if (IS_INT_INSIDE(fr.distance, min_squares, max_squares + 1)) break;
 
 		// only test 60 times
 		if (--i == 0) return;
@@ -1408,7 +1459,19 @@
 	p->ai.build_kind = 0;
 	p->ai.num_build_rec = 2;
 	p->ai.num_loco_to_build = 1;
-	p->ai.num_want_fullload = 1;
+	/* Using full load always may not be the best.
+	 * Pick random value and rely on selling the vehicle & route
+	 * afterwards if the choice was utterly wrong (or maybe altering the value if AI is improved)
+	 * When traffic is very low or very assymetric, is is better not to full load
+	 * When traffic is high, full/non-full make no difference
+	 * It should be better to run with aircraft only one way full 6 times per year,
+	 * rather than two way full 1 times.
+	 * Practical experiments with AI show that the non-full-load aircrafts are usually
+	 * those that survive
+	 * Also, non-full load is more resistant against starving (by building better stations
+	 * or using exclusive rights)
+	 */
+	p->ai.num_want_fullload = CHANCE16(1, 5); // 20% chance
 //	p->ai.loco_id = INVALID_VEHICLE;
 	p->ai.order_list_blocks[0] = 0;
 	p->ai.order_list_blocks[1] = 1;
@@ -1575,10 +1638,10 @@
 	return true;
 }
 
-static int32 AiDoBuildDefaultRailTrack(TileIndex tile, const AiDefaultBlockData* p, RailType railtype, byte flag)
+static CommandCost AiDoBuildDefaultRailTrack(TileIndex tile, const AiDefaultBlockData* p, RailType railtype, byte flag)
 {
-	int32 ret;
-	int32 total_cost = 0;
+	CommandCost ret;
+	CommandCost total_cost;
 	Town *t = NULL;
 	int rating = 0;
 	int i, j, k;
@@ -1599,7 +1662,7 @@
 			}
 
 			if (CmdFailed(ret)) return CMD_ERROR;
-			total_cost += ret;
+			total_cost.AddCost(ret);
 
 clear_town_stuff:;
 			if (_cleared_town != NULL) {
@@ -1621,7 +1684,7 @@
 					k = i;
 					ret = DoCommand(c, railtype, i, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_SINGLE_RAIL);
 					if (CmdFailed(ret)) return CMD_ERROR;
-					total_cost += ret;
+					total_cost.AddCost(ret);
 				}
 			}
 
@@ -1636,17 +1699,18 @@
 						ret = DoCommand(c, k, 0, flag, CMD_BUILD_SIGNALS);
 					} while (--j);
 				} else {
-					ret = _price.build_signals;
+					ret.AddCost(_price.build_signals);
 				}
 				if (CmdFailed(ret)) return CMD_ERROR;
-				total_cost += ret;
+				total_cost.AddCost(ret);
 			}
 		} else if (p->mode == 3) {
 			//Clear stuff and then build single rail.
 			if (GetTileSlope(c, NULL) != SLOPE_FLAT) return CMD_ERROR;
 			ret = DoCommand(c, 0, 0, flag | DC_AUTO | DC_NO_WATER | DC_AI_BUILDING, CMD_LANDSCAPE_CLEAR);
 			if (CmdFailed(ret)) return CMD_ERROR;
-			total_cost += ret + _price.build_rail;
+			total_cost.AddCost(ret);
+			total_cost.AddCost(_price.build_rail);
 
 			if (flag & DC_EXEC) {
 				DoCommand(c, railtype, p->attr & 1, flag | DC_AUTO | DC_NO_WATER | DC_AI_BUILDING, CMD_BUILD_SINGLE_RAIL);
@@ -1671,7 +1735,7 @@
 }
 
 // Returns rule and cost
-static int AiBuildDefaultRailTrack(TileIndex tile, byte p0, byte p1, byte p2, byte p3, byte dir, byte cargo, RailType railtype, int32* cost)
+static int AiBuildDefaultRailTrack(TileIndex tile, byte p0, byte p1, byte p2, byte p3, byte dir, byte cargo, RailType railtype, CommandCost* cost)
 {
 	int i;
 	const AiDefaultRailBlock *p;
@@ -1680,7 +1744,7 @@
 		if (p->p0 == p0 && p->p1 == p1 && p->p2 == p2 && p->p3 == p3 &&
 				(p->dir == 0xFF || p->dir == dir || ((p->dir - 1) & 3) == dir)) {
 			*cost = AiDoBuildDefaultRailTrack(tile, p->data, railtype, DC_NO_TOWN_RATING);
-			if (!CmdFailed(*cost) && AiCheckTrackResources(tile, p->data, cargo))
+			if (CmdSucceeded(*cost) && AiCheckTrackResources(tile, p->data, cargo))
 				return i;
 		}
 	}
@@ -1758,7 +1822,7 @@
 	int j;
 	AiBuildRec *aib;
 	int rule;
-	int32 cost;
+	CommandCost cost;
 
 	// time out?
 	if (++p->ai.timeout_counter == 1388) {
@@ -2004,9 +2068,9 @@
 	uint z;
 
 	if (GetTileSlope(tile, &z) == _dir_table_2[p[0] & 3] && z != 0) {
-		int32 cost = DoCommand(tile, arf->player->ai.railtype_to_use, 0, DC_AUTO, CMD_BUILD_TUNNEL);
-
-		if (!CmdFailed(cost) && cost <= (arf->player->player_money >> 4)) {
+		CommandCost cost = DoCommand(tile, arf->player->ai.railtype_to_use, 0, DC_AUTO, CMD_BUILD_TUNNEL);
+
+		if (CmdSucceeded(cost) && cost.GetCost() <= (arf->player->player_money >> 4)) {
 			AiBuildRailRecursive(arf, _build_tunnel_endtile, p[0] & 3);
 			if (arf->depth == 1) AiCheckRailPathBetter(arf, p);
 		}
@@ -2060,7 +2124,7 @@
 		do {
 			// Make sure the tile is not in the list of banned tiles and that a rail can be built here.
 			if (!AiIsTileBanned(arf->player, tile, p[0]) &&
-					!CmdFailed(DoCommand(tile, arf->player->ai.railtype_to_use, p[0], DC_AUTO | DC_NO_WATER | DC_NO_RAIL_OVERLAP, CMD_BUILD_SINGLE_RAIL))) {
+					CmdSucceeded(DoCommand(tile, arf->player->ai.railtype_to_use, p[0], DC_AUTO | DC_NO_WATER | DC_NO_RAIL_OVERLAP, CMD_BUILD_SINGLE_RAIL))) {
 				AiBuildRailRecursive(arf, tile, p[1]);
 			}
 
@@ -2147,8 +2211,8 @@
 		 */
 		for (i = MAX_BRIDGES - 1; i != 0; i--) {
 			if (CheckBridge_Stuff(i, bridge_len)) {
-				int32 cost = DoCommand(arf.bridge_end_tile, p->ai.cur_tile_a, i | (p->ai.railtype_to_use << 8), DC_AUTO, CMD_BUILD_BRIDGE);
-				if (!CmdFailed(cost) && cost < (p->player_money >> 5)) break;
+				CommandCost cost = DoCommand(arf.bridge_end_tile, p->ai.cur_tile_a, i | (p->ai.railtype_to_use << 8), DC_AUTO, CMD_BUILD_BRIDGE);
+				if (CmdSucceeded(cost) && cost.GetCost() < (p->player_money >> 5)) break;
 			}
 		}
 
@@ -2402,7 +2466,7 @@
 	EngineID veh;
 	int i;
 	CargoID cargo;
-	int32 cost;
+	CommandCost cost;
 	Vehicle *v;
 	VehicleID loco_id;
 
@@ -2437,7 +2501,7 @@
 		if (++p->ai.state_counter == 1000) {
 			for (i = 0; p->ai.wagon_list[i] != INVALID_VEHICLE; i++) {
 				cost = DoCommand(tile, p->ai.wagon_list[i], 0, DC_EXEC, CMD_SELL_RAIL_WAGON);
-				assert(!CmdFailed(cost));
+				assert(CmdSucceeded(cost));
 			}
 			p->ai.state = AIS_0;
 		}
@@ -2446,7 +2510,7 @@
 
 	// Try to build the locomotive
 	cost = DoCommand(tile, veh, 0, DC_EXEC, CMD_BUILD_RAIL_VEHICLE);
-	assert(!CmdFailed(cost));
+	assert(CmdSucceeded(cost));
 	loco_id = _new_vehicle_id;
 
 	// Sell a vehicle if the train is double headed.
@@ -2542,10 +2606,10 @@
 }
 
 static bool _want_road_truck_station;
-static int32 AiDoBuildDefaultRoadBlock(TileIndex tile, const AiDefaultBlockData *p, byte flag);
+static CommandCost AiDoBuildDefaultRoadBlock(TileIndex tile, const AiDefaultBlockData *p, byte flag);
 
 // Returns rule and cost
-static int AiFindBestDefaultRoadBlock(TileIndex tile, byte direction, byte cargo, int32 *cost)
+static int AiFindBestDefaultRoadBlock(TileIndex tile, byte direction, byte cargo, CommandCost *cost)
 {
 	int i;
 	const AiDefaultRoadBlock *p;
@@ -2555,7 +2619,7 @@
 	for (i = 0; (p = _road_default_block_data[i]) != NULL; i++) {
 		if (p->dir == direction) {
 			*cost = AiDoBuildDefaultRoadBlock(tile, p->data, 0);
-			if (!CmdFailed(*cost) && AiCheckRoadResources(tile, p->data, cargo))
+			if (CmdSucceeded(*cost) && AiCheckRoadResources(tile, p->data, cargo))
 				return i;
 		}
 	}
@@ -2563,10 +2627,10 @@
 	return -1;
 }
 
-static int32 AiDoBuildDefaultRoadBlock(TileIndex tile, const AiDefaultBlockData *p, byte flag)
+static CommandCost AiDoBuildDefaultRoadBlock(TileIndex tile, const AiDefaultBlockData *p, byte flag)
 {
-	int32 ret;
-	int32 total_cost = 0;
+	CommandCost ret;
+	CommandCost total_cost;
 	Town *t = NULL;
 	int rating = 0;
 	int roadflag = 0;
@@ -2588,7 +2652,7 @@
 
 			ret = DoCommand(c, p->attr, 0, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_ROAD);
 			if (CmdFailed(ret)) return CMD_ERROR;
-			total_cost += ret;
+			total_cost.AddCost(ret);
 
 			continue;
 		}
@@ -2608,7 +2672,7 @@
 clear_town_stuff:;
 
 			if (CmdFailed(ret)) return CMD_ERROR;
-			total_cost += ret;
+			total_cost.AddCost(ret);
 
 			if (_cleared_town != NULL) {
 				if (t != NULL && t != _cleared_town) return CMD_ERROR;
@@ -2658,7 +2722,7 @@
 	int j;
 	AiBuildRec *aib;
 	int rule;
-	int32 cost;
+	CommandCost cost;
 
 	// time out?
 	if (++p->ai.timeout_counter == 1388) {
@@ -2695,7 +2759,7 @@
 					p->ai.state_mode = -p->ai.state_mode;
 				}
 			} else if (CheckPlayerHasMoney(cost) && AiCheckBlockDistances(p, aib->use_tile)) {
-				int32 r;
+				CommandCost r;
 
 				// player has money, build it.
 				aib->cur_building_rule = rule;
@@ -2705,7 +2769,7 @@
 					_road_default_block_data[rule]->data,
 					DC_EXEC | DC_NO_TOWN_RATING
 				);
-				assert(!CmdFailed(r));
+				assert(CmdSucceeded(r));
 			}
 		} while (++aib, --j);
 	}
@@ -2853,7 +2917,7 @@
 		ROAD_NW | ROAD_SW,
 		ROAD_SE | ROAD_NE
 	};
-	return !CmdFailed(DoCommand(tile, _road_bits[type], 0, flags, CMD_BUILD_ROAD));
+	return CmdSucceeded(DoCommand(tile, _road_bits[type], 0, flags, CMD_BUILD_ROAD));
 }
 
 static inline void AiCheckBuildRoadBridgeHere(AiRoadFinder *arf, TileIndex tile, const byte *p)
@@ -2888,7 +2952,7 @@
 		}
 
 		// Is building a (rail)bridge possible at this place (type doesn't matter)?
-		if (CmdFailed(DoCommand(tile_new, tile, 0x8000, DC_AUTO, CMD_BUILD_BRIDGE)))
+		if (CmdFailed(DoCommand(tile_new, tile, ((0x80 | ROADTYPES_ROAD) << 8), DC_AUTO, CMD_BUILD_BRIDGE)))
 			return;
 		AiBuildRoadRecursive(arf, tile_new, dir2);
 
@@ -2904,9 +2968,9 @@
 	uint z;
 
 	if (GetTileSlope(tile, &z) == _dir_table_2[p[0] & 3] && z != 0) {
-		int32 cost = DoCommand(tile, 0x200, 0, DC_AUTO, CMD_BUILD_TUNNEL);
-
-		if (!CmdFailed(cost) && cost <= (arf->player->player_money >> 4)) {
+		CommandCost cost = DoCommand(tile, 0x200, 0, DC_AUTO, CMD_BUILD_TUNNEL);
+
+		if (CmdSucceeded(cost) && cost.GetCost() <= (arf->player->player_money >> 4)) {
 			AiBuildRoadRecursive(arf, _build_tunnel_endtile, p[0] & 3);
 			if (arf->depth == 1)  AiCheckRoadPathBetter(arf, p);
 		}
@@ -3038,13 +3102,13 @@
 		 */
 		for (i = 10; i != 0; i--) {
 			if (CheckBridge_Stuff(i, bridge_len)) {
-				int32 cost = DoCommand(tile, p->ai.cur_tile_a, i + (0x80 << 8), DC_AUTO, CMD_BUILD_BRIDGE);
-				if (!CmdFailed(cost) && cost < (p->player_money >> 5)) break;
+				CommandCost cost = DoCommand(tile, p->ai.cur_tile_a, i + ((0x80 | ROADTYPES_ROAD) << 8), DC_AUTO, CMD_BUILD_BRIDGE);
+				if (CmdSucceeded(cost) && cost.GetCost() < (p->player_money >> 5)) break;
 			}
 		}
 
 		// Build it
-		DoCommand(tile, p->ai.cur_tile_a, i + (0x80 << 8), DC_AUTO | DC_EXEC, CMD_BUILD_BRIDGE);
+		DoCommand(tile, p->ai.cur_tile_a, i + ((0x80 | ROADTYPES_ROAD) << 8), DC_AUTO | DC_EXEC, CMD_BUILD_BRIDGE);
 
 		p->ai.state_counter = 0;
 	} else if (arf.best_ptr[0] & 0x40) {
@@ -3324,16 +3388,16 @@
 	p->ai.state_counter = 0;
 }
 
-static int32 AiDoBuildDefaultAirportBlock(TileIndex tile, const AiDefaultBlockData *p, byte flag)
+static CommandCost AiDoBuildDefaultAirportBlock(TileIndex tile, const AiDefaultBlockData *p, byte flag)
 {
 	uint32 avail_airports = GetValidAirports();
-	int32 total_cost = 0, ret;
+	CommandCost total_cost, ret;
 
 	for (; p->mode == 0; p++) {
 		if (!HASBIT(avail_airports, p->attr)) return CMD_ERROR;
 		ret = DoCommand(TILE_MASK(tile + ToTileIndexDiff(p->tileoffs)), p->attr, 0, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_AIRPORT);
 		if (CmdFailed(ret)) return CMD_ERROR;
-		total_cost += ret;
+		total_cost.AddCost(ret);
 	}
 
 	return total_cost;
@@ -3361,7 +3425,7 @@
 	return true;
 }
 
-static int AiFindBestDefaultAirportBlock(TileIndex tile, byte cargo, byte heli, int32 *cost)
+static int AiFindBestDefaultAirportBlock(TileIndex tile, byte cargo, byte heli, CommandCost *cost)
 {
 	const AiDefaultBlockData *p;
 	uint i;
@@ -3372,7 +3436,7 @@
 		if (heli && !(GetAirport(p->attr)->flags & AirportFTAClass::HELICOPTERS)) continue;
 
 		*cost = AiDoBuildDefaultAirportBlock(tile, p, 0);
-		if (!CmdFailed(*cost) && AiCheckAirportResources(tile, p, cargo))
+		if (CmdSucceeded(*cost) && AiCheckAirportResources(tile, p, cargo))
 			return i;
 	}
 	return -1;
@@ -3383,7 +3447,7 @@
 	int i, j;
 	AiBuildRec *aib;
 	int rule;
-	int32 cost;
+	CommandCost cost;
 
 	// time out?
 	if (++p->ai.timeout_counter == 1388) {
@@ -3422,7 +3486,7 @@
 				}
 			} else if (CheckPlayerHasMoney(cost) && AiCheckBlockDistances(p, aib->use_tile)) {
 				// player has money, build it.
-				int32 r;
+				CommandCost r;
 
 				aib->cur_building_rule = rule;
 
@@ -3431,7 +3495,7 @@
 					_airport_default_block_data[rule],
 					DC_EXEC | DC_NO_TOWN_RATING
 				);
-				assert(!CmdFailed(r));
+				assert(CmdSucceeded(r));
 			}
 		} while (++aib, --j);
 	} while (--i);
@@ -3837,7 +3901,7 @@
 
 static void AiAdjustLoan(const Player* p)
 {
-	int32 base = AiGetBasePrice(p);
+	Money base = AiGetBasePrice(p);
 
 	if (p->player_money > base * 1400) {
 		// Decrease loan
--- a/src/ai/trolly/build.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/ai/trolly/build.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -36,7 +36,7 @@
 //    numtracks : in case of AI_TRAIN: tracks of station
 //    direction : the direction of the station
 //    flag : flag passed to DoCommand (normally 0 to get the cost or DC_EXEC to build it)
-int AiNew_Build_Station(Player *p, byte type, TileIndex tile, byte length, byte numtracks, byte direction, byte flag)
+CommandCost AiNew_Build_Station(Player *p, byte type, TileIndex tile, byte length, byte numtracks, byte direction, byte flag)
 {
 	if (type == AI_TRAIN)
 		return AI_DoCommand(tile, direction + (numtracks << 8) + (length << 16), 0, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_RAILROAD_STATION);
@@ -53,7 +53,7 @@
 //   tile_a : starting point
 //   tile_b : end point
 //   flag : flag passed to DoCommand
-int AiNew_Build_Bridge(Player *p, TileIndex tile_a, TileIndex tile_b, byte flag)
+CommandCost AiNew_Build_Bridge(Player *p, TileIndex tile_a, TileIndex tile_b, byte flag)
 {
 	int bridge_type, bridge_len, type, type2;
 
@@ -90,45 +90,45 @@
 //   part : Which part we need to build
 //
 // TODO: skip already builded road-pieces (e.g.: cityroad)
-int AiNew_Build_RoutePart(Player *p, Ai_PathFinderInfo *PathFinderInfo, byte flag)
+CommandCost AiNew_Build_RoutePart(Player *p, Ai_PathFinderInfo *PathFinderInfo, byte flag)
 {
 	int part = PathFinderInfo->position;
 	byte *route_extra = PathFinderInfo->route_extra;
 	TileIndex *route = PathFinderInfo->route;
 	int dir;
 	int old_dir = -1;
-	int cost = 0;
-	int res;
+	CommandCost cost;
+	CommandCost res;
 	// We need to calculate the direction with the parent of the parent.. so we skip
 	//  the first pieces and the last piece
 	if (part < 1) part = 1;
 	// When we are done, stop it
 	if (part >= PathFinderInfo->route_length - 1) {
 		PathFinderInfo->position = -2;
-		return 0;
+		return CommandCost();
 	}
 
 
 	if (PathFinderInfo->rail_or_road) {
 		// Tunnel code
 		if ((AI_PATHFINDER_FLAG_TUNNEL & route_extra[part]) != 0) {
-			cost += AI_DoCommand(route[part], 0, 0, flag, CMD_BUILD_TUNNEL);
+			cost.AddCost(AI_DoCommand(route[part], 0, 0, flag, CMD_BUILD_TUNNEL));
 			PathFinderInfo->position++;
 			// TODO: problems!
 			if (CmdFailed(cost)) {
 				DEBUG(ai, 0, "[BuildPath] tunnel could not be built (0x%X)", route[part]);
-				return 0;
+				return CommandCost();
 			}
 			return cost;
 		}
 		// Bridge code
 		if ((AI_PATHFINDER_FLAG_BRIDGE & route_extra[part]) != 0) {
-			cost += AiNew_Build_Bridge(p, route[part], route[part - 1], flag);
+			cost.AddCost(AiNew_Build_Bridge(p, route[part], route[part - 1], flag));
 			PathFinderInfo->position++;
 			// TODO: problems!
 			if (CmdFailed(cost)) {
 				DEBUG(ai, 0, "[BuildPath] bridge could not be built (0x%X, 0x%X)", route[part], route[part - 1]);
-				return 0;
+				return CommandCost();
 			}
 			return cost;
 		}
@@ -147,9 +147,9 @@
 				if (CmdFailed(res)) {
 					// Problem.. let's just abort it all!
 					p->ainew.state = AI_STATE_NOTHING;
-					return 0;
+					return CommandCost();
 				}
-				cost += res;
+				cost.AddCost(res);
 				// Go to the next tile
 				part++;
 				// Check if it is still in range..
@@ -162,23 +162,23 @@
 	} else {
 		// Tunnel code
 		if ((AI_PATHFINDER_FLAG_TUNNEL & route_extra[part]) != 0) {
-			cost += AI_DoCommand(route[part], 0x200 | ROADTYPES_ROAD, 0, flag, CMD_BUILD_TUNNEL);
+			cost.AddCost(AI_DoCommand(route[part], 0x200 | ROADTYPES_ROAD, 0, flag, CMD_BUILD_TUNNEL));
 			PathFinderInfo->position++;
 			// TODO: problems!
 			if (CmdFailed(cost)) {
 				DEBUG(ai, 0, "[BuildPath] tunnel could not be built (0x%X)", route[part]);
-				return 0;
+				return CommandCost();
 			}
 			return cost;
 		}
 		// Bridge code
 		if ((AI_PATHFINDER_FLAG_BRIDGE & route_extra[part]) != 0) {
-			cost += AiNew_Build_Bridge(p, route[part], route[part + 1], flag);
+			cost.AddCost(AiNew_Build_Bridge(p, route[part], route[part + 1], flag));
 			PathFinderInfo->position++;
 			// TODO: problems!
 			if (CmdFailed(cost)) {
 				DEBUG(ai, 0, "[BuildPath] bridge could not be built (0x%X, 0x%X)", route[part], route[part + 1]);
-				return 0;
+				return CommandCost();
 			}
 			return cost;
 		}
@@ -203,10 +203,10 @@
 						// Problem.. let's just abort it all!
 						DEBUG(ai, 0, "[BuidPath] route building failed at tile 0x%X, aborting", route[part]);
 						p->ainew.state = AI_STATE_NOTHING;
-						return 0;
+						return CommandCost();
 					}
 
-					if (!CmdFailed(res)) cost += res;
+					if (CmdSucceeded(res)) cost.AddCost(res);
 				}
 				// Go to the next tile
 				part++;
@@ -243,7 +243,7 @@
 			const RoadVehicleInfo *rvi = RoadVehInfo(i);
 			const Engine* e = GetEngine(i);
 			int32 rating;
-			int32 ret;
+			CommandCost ret;
 
 			/* Skip vehicles which can't take our cargo type */
 			if (rvi->cargo_type != p->ainew.cargo && !CanRefitTo(i, p->ainew.cargo)) continue;
@@ -293,7 +293,7 @@
 
 
 // Builds the best vehicle possible
-int AiNew_Build_Vehicle(Player *p, TileIndex tile, byte flag)
+CommandCost AiNew_Build_Vehicle(Player *p, TileIndex tile, byte flag)
 {
 	EngineID i = AiNew_PickVehicle(p);
 
@@ -307,18 +307,19 @@
 	}
 }
 
-int AiNew_Build_Depot(Player* p, TileIndex tile, DiagDirection direction, byte flag)
+CommandCost AiNew_Build_Depot(Player* p, TileIndex tile, DiagDirection direction, byte flag)
 {
-	int ret, ret2;
+	CommandCost ret, ret2;
 	if (p->ainew.tbt == AI_TRAIN) {
 		return AI_DoCommand(tile, 0, direction, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_TRAIN_DEPOT);
 	} else {
 		ret = AI_DoCommand(tile, direction, 0, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_ROAD_DEPOT);
-		if (CmdFailed(ret)) return ret;
+		if (CmdFailed(ret2)) return ret;
 		// Try to build the road from the depot
 		ret2 = AI_DoCommand(tile + TileOffsByDiagDir(direction), DiagDirToRoadBits(ReverseDiagDir(direction)), 0, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_ROAD);
 		// If it fails, ignore it..
 		if (CmdFailed(ret2)) return ret;
-		return ret + ret2;
+		ret.AddCost(ret2);
+		return ret;
 	}
 }
--- a/src/ai/trolly/pathfinder.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/ai/trolly/pathfinder.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -23,18 +23,18 @@
 	Player *p = GetPlayer(_current_player);
 
 	if (dir == TEST_STATION_NO_DIR) {
-		int32 ret;
+		CommandCost ret;
 		// TODO: currently we only allow spots that can be access from al 4 directions...
 		//  should be fixed!!!
 		for (dir = 0; dir < 4; dir++) {
 			ret = AiNew_Build_Station(p, p->ainew.tbt, tile, 1, 1, dir, DC_QUERY_COST);
-			if (!CmdFailed(ret)) return true;
+			if (CmdSucceeded(ret)) return true;
 		}
 		return false;
 	}
 
 	// return true if command succeeded, so the inverse of CmdFailed()
-	return !CmdFailed(AiNew_Build_Station(p, p->ainew.tbt, tile, 1, 1, dir, DC_QUERY_COST));
+	return CmdSucceeded(AiNew_Build_Station(p, p->ainew.tbt, tile, 1, 1, dir, DC_QUERY_COST));
 }
 
 
@@ -214,7 +214,7 @@
 // What tiles are around us.
 static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *current)
 {
-	int ret;
+	CommandCost ret;
 	int dir;
 
 	Ai_PathFinderInfo *PathFinderInfo = (Ai_PathFinderInfo*)aystar->user_target;
@@ -352,7 +352,7 @@
 			// Now simply check if a tunnel can be build
 			ret = AI_DoCommand(tile, (PathFinderInfo->rail_or_road?0:0x200), 0, DC_AUTO, CMD_BUILD_TUNNEL);
 			tileh = GetTileSlope(_build_tunnel_endtile, NULL);
-			if (!CmdFailed(ret) && (tileh == SLOPE_SW || tileh == SLOPE_SE || tileh == SLOPE_NW || tileh == SLOPE_NE)) {
+			if (CmdSucceeded(ret) && (tileh == SLOPE_SW || tileh == SLOPE_SE || tileh == SLOPE_NW || tileh == SLOPE_NE)) {
 				aystar->neighbours[aystar->num_neighbours].tile = _build_tunnel_endtile;
 				aystar->neighbours[aystar->num_neighbours].user_data[0] = AI_PATHFINDER_FLAG_TUNNEL + (dir << 8);
 				aystar->neighbours[aystar->num_neighbours++].direction = 0;
--- a/src/ai/trolly/trolly.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/ai/trolly/trolly.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -97,7 +97,6 @@
 //    - Build HQ
 static void AiNew_State_WakeUp(Player *p)
 {
-	int32 money;
 	int c;
 	assert(p->ainew.state == AI_STATE_WAKE_UP);
 	// First, check if we have a HQ
@@ -111,7 +110,7 @@
 		return;
 	}
 
-	money = p->player_money - AI_MINIMUM_MONEY;
+	Money money = p->player_money - AI_MINIMUM_MONEY;
 
 	// Let's pick an action!
 	if (p->ainew.action == AI_ACTION_NONE) {
@@ -280,9 +279,9 @@
 
 		// No limits on delevering stations!
 		//  Or for industry that does not give anything yet
-		if (indsp->produced_cargo[0] == CT_INVALID || i->total_production[0] == 0) return true;
+		if (indsp->produced_cargo[0] == CT_INVALID || i->last_month_production[0] == 0) return true;
 
-		if (i->total_production[0] - i->total_transported[0] < AI_CHECKCITY_NEEDED_CARGO) return false;
+		if (i->last_month_production[0] - i->last_month_transported[0] < AI_CHECKCITY_NEEDED_CARGO) return false;
 
 		// Check if we have build a station in this town the last 6 months
 		//  else we don't do it. This is done, because stat updates can be slow
@@ -322,7 +321,7 @@
 		// We are about to add one...
 		count++;
 		// Check if we the city can provide enough cargo for this amount of stations..
-		if (count * AI_CHECKCITY_CARGO_PER_STATION > i->total_production[0]) return false;
+		if (count * AI_CHECKCITY_CARGO_PER_STATION > i->last_month_production[0]) return false;
 
 		// All check are okay, so we can build here!
 		return true;
@@ -468,12 +467,12 @@
 
 			// TODO: in max_cargo, also check other cargo (beside [0])
 			// First we check if the from_ic produces cargo that this ic accepts
-			if (indsp_from->produced_cargo[0] != CT_INVALID && ind_from->total_production[0] != 0) {
+			if (indsp_from->produced_cargo[0] != CT_INVALID && ind_from->last_month_production[0] != 0) {
 				for (i = 0; i < lengthof(indsp_temp->accepts_cargo); i++) {
 					if (indsp_temp->accepts_cargo[i] == CT_INVALID) break;
 					if (indsp_from->produced_cargo[0] == indsp_temp->accepts_cargo[i]) {
 						// Found a compatible industry
-						max_cargo = ind_from->total_production[0] - ind_from->total_transported[0];
+						max_cargo = ind_from->last_month_production[0] - ind_from->last_month_transported[0];
 						found = true;
 						p->ainew.from_deliver = true;
 						p->ainew.to_deliver = false;
@@ -481,14 +480,14 @@
 					}
 				}
 			}
-			if (!found && indsp_temp->produced_cargo[0] != CT_INVALID && ind_temp->total_production[0] != 0) {
+			if (!found && indsp_temp->produced_cargo[0] != CT_INVALID && ind_temp->last_month_production[0] != 0) {
 				// If not check if the current ic produces cargo that the from_ic accepts
 				for (i = 0; i < lengthof(indsp_from->accepts_cargo); i++) {
 					if (indsp_from->accepts_cargo[i] == CT_INVALID) break;
 					if (indsp_from->produced_cargo[0] == indsp_from->accepts_cargo[i]) {
 						// Found a compatbiel industry
 						found = true;
-						max_cargo = ind_temp->total_production[0] - ind_temp->total_transported[0];
+						max_cargo = ind_temp->last_month_production[0] - ind_temp->last_month_transported[0];
 						p->ainew.from_deliver = false;
 						p->ainew.to_deliver = true;
 						break;
@@ -618,7 +617,7 @@
 			if (p->ainew.tbt == AI_BUS && (FACIL_BUS_STOP & st->facilities) == FACIL_BUS_STOP) {
 				if (st->town == town) {
 					// Check how much cargo there is left in the station
-					if ((st->goods[p->ainew.cargo].waiting_acceptance & 0xFFF) > RoadVehInfo(i)->capacity * AI_STATION_REUSE_MULTIPLER) {
+					if ((int)st->goods[p->ainew.cargo].cargo.Count() > RoadVehInfo(i)->capacity * AI_STATION_REUSE_MULTIPLER) {
 						if (AiNew_CheckVehicleStation(p, st)) {
 							// We did found a station that was good enough!
 							new_tile = st->xy;
@@ -642,7 +641,7 @@
 
 	if (new_tile == 0 && p->ainew.tbt == AI_BUS) {
 		uint x, y, i = 0;
-		int r;
+		CommandCost r;
 		uint best;
 		uint accepts[NUM_CARGO];
 		TileIndex found_spot[AI_FINDSTATION_TILE_RANGE*AI_FINDSTATION_TILE_RANGE * 4];
@@ -650,7 +649,7 @@
 		// To find a good spot we scan a range from the center, a get the point
 		//  where we get the most cargo and where it is buildable.
 		// TODO: also check for station of myself and make sure we are not
-		//   taking eachothers passangers away (bad result when it does not)
+		//   taking eachothers passengers away (bad result when it does not)
 		for (x = TileX(tile) - AI_FINDSTATION_TILE_RANGE; x <= TileX(tile) + AI_FINDSTATION_TILE_RANGE; x++) {
 			for (y = TileY(tile) - AI_FINDSTATION_TILE_RANGE; y <= TileY(tile) + AI_FINDSTATION_TILE_RANGE; y++) {
 				new_tile = TileXY(x, y);
@@ -691,7 +690,7 @@
 
 		// See how much it is going to cost us...
 		r = AiNew_Build_Station(p, p->ainew.tbt, new_tile, 0, 0, 0, DC_QUERY_COST);
-		p->ainew.new_cost += r;
+		p->ainew.new_cost += r.GetCost();
 
 		direction = AI_PATHFINDER_NO_DIRECTION;
 	} else if (new_tile == 0 && p->ainew.tbt == AI_TRUCK) {
@@ -788,7 +787,8 @@
 	// To make the depot stand in the middle of the route, we start from the center..
 	// But first we walk through the route see if we can find a depot that is ours
 	//  this keeps things nice ;)
-	int g, i, r;
+	int g, i;
+	CommandCost r;
 	DiagDirection j;
 	TileIndex tile;
 	assert(p->ainew.state == AI_STATE_FIND_DEPOT);
@@ -849,7 +849,7 @@
 				r = AiNew_Build_Depot(p, t, ReverseDiagDir(j), 0);
 				if (CmdFailed(r)) continue;
 				// Found a spot!
-				p->ainew.new_cost += r;
+				p->ainew.new_cost += r.GetCost();
 				p->ainew.depot_tile = t;
 				p->ainew.depot_direction = ReverseDiagDir(j); // Reverse direction
 				p->ainew.state = AI_STATE_VERIFY_ROUTE;
@@ -898,9 +898,9 @@
 		// Calculating tiles a day a vehicle moves is not easy.. this is how it must be done!
 		tiles_a_day = RoadVehInfo(i)->max_speed * DAY_TICKS / 256 / 16;
 		if (p->ainew.from_deliver) {
-			max_cargo = GetIndustry(p->ainew.from_ic)->total_production[0];
+			max_cargo = GetIndustry(p->ainew.from_ic)->last_month_production[0];
 		} else {
-			max_cargo = GetIndustry(p->ainew.to_ic)->total_production[0];
+			max_cargo = GetIndustry(p->ainew.to_ic)->last_month_production[0];
 		}
 
 		// This is because moving 60% is more than we can dream of!
@@ -934,7 +934,7 @@
 
 	do {
 		p->ainew.path_info.position++;
-		p->ainew.new_cost += AiNew_Build_RoutePart(p, &p->ainew.path_info, DC_QUERY_COST);
+		p->ainew.new_cost += AiNew_Build_RoutePart(p, &p->ainew.path_info, DC_QUERY_COST).GetCost();
 	} while (p->ainew.path_info.position != -2);
 
 	// Now we know the price of build station + path. Now check how many vehicles
@@ -950,7 +950,7 @@
 
 	// Check how much it it going to cost us..
 	for (i=0;i<res;i++) {
-		p->ainew.new_cost += AiNew_Build_Vehicle(p, 0, DC_QUERY_COST);
+		p->ainew.new_cost += AiNew_Build_Vehicle(p, 0, DC_QUERY_COST).GetCost();
 	}
 
 	// Now we know how much the route is going to cost us
@@ -984,7 +984,7 @@
 // Build the stations
 static void AiNew_State_BuildStation(Player *p)
 {
-	int res = 0;
+	CommandCost res;
 	assert(p->ainew.state == AI_STATE_BUILD_STATION);
 	if (p->ainew.temp == 0) {
 		if (!IsTileType(p->ainew.from_tile, MP_STATION))
@@ -1037,8 +1037,8 @@
 			// We don't want that, so try building some road left or right of the station
 			int dir1, dir2, dir3;
 			TileIndex tile;
-			int i, ret;
-			for (i=0;i<2;i++) {
+			CommandCost ret;
+			for (int i = 0; i < 2; i++) {
 				if (i == 0) {
 					tile = p->ainew.from_tile + TileOffsByDiagDir(p->ainew.from_direction);
 					dir1 = p->ainew.from_direction - 1;
@@ -1056,11 +1056,11 @@
 				}
 
 				ret = AI_DoCommand(tile, DiagDirToRoadBits(ReverseDiagDir((DiagDirection)dir1)), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
-				if (!CmdFailed(ret)) {
+				if (CmdSucceeded(ret)) {
 					dir1 = TileOffsByDiagDir(dir1);
 					if (IsTileType(tile + dir1, MP_CLEAR) || IsTileType(tile + dir1, MP_TREES)) {
 						ret = AI_DoCommand(tile+dir1, AiNew_GetRoadDirection(tile, tile+dir1, tile+dir1+dir1), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
-						if (!CmdFailed(ret)) {
+						if (CmdSucceeded(ret)) {
 							if (IsTileType(tile + dir1 + dir1, MP_CLEAR) || IsTileType(tile + dir1 + dir1, MP_TREES))
 								AI_DoCommand(tile+dir1+dir1, AiNew_GetRoadDirection(tile+dir1, tile+dir1+dir1, tile+dir1+dir1+dir1), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
 						}
@@ -1068,11 +1068,11 @@
 				}
 
 				ret = AI_DoCommand(tile, DiagDirToRoadBits(ReverseDiagDir((DiagDirection)dir2)), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
-				if (!CmdFailed(ret)) {
+				if (CmdSucceeded(ret)) {
 					dir2 = TileOffsByDiagDir(dir2);
 					if (IsTileType(tile + dir2, MP_CLEAR) || IsTileType(tile + dir2, MP_TREES)) {
 						ret = AI_DoCommand(tile+dir2, AiNew_GetRoadDirection(tile, tile+dir2, tile+dir2+dir2), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
-						if (!CmdFailed(ret)) {
+						if (CmdSucceeded(ret)) {
 							if (IsTileType(tile + dir2 + dir2, MP_CLEAR) || IsTileType(tile + dir2 + dir2, MP_TREES))
 								AI_DoCommand(tile+dir2+dir2, AiNew_GetRoadDirection(tile+dir2, tile+dir2+dir2, tile+dir2+dir2+dir2), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
 						}
@@ -1080,11 +1080,11 @@
 				}
 
 				ret = AI_DoCommand(tile, DiagDirToRoadBits((DiagDirection)dir3), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
-				if (!CmdFailed(ret)) {
+				if (CmdSucceeded(ret)) {
 					dir3 = TileOffsByDiagDir(dir3);
 					if (IsTileType(tile + dir3, MP_CLEAR) || IsTileType(tile + dir3, MP_TREES)) {
 						ret = AI_DoCommand(tile+dir3, AiNew_GetRoadDirection(tile, tile+dir3, tile+dir3+dir3), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
-						if (!CmdFailed(ret)) {
+						if (CmdSucceeded(ret)) {
 							if (IsTileType(tile + dir3 + dir3, MP_CLEAR) || IsTileType(tile + dir3 + dir3, MP_TREES))
 								AI_DoCommand(tile+dir3+dir3, AiNew_GetRoadDirection(tile+dir3, tile+dir3+dir3, tile+dir3+dir3+dir3), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
 						}
@@ -1102,7 +1102,7 @@
 // Builds the depot
 static void AiNew_State_BuildDepot(Player *p)
 {
-	int res = 0;
+	CommandCost res;
 	assert(p->ainew.state == AI_STATE_BUILD_DEPOT);
 
 	if (IsTileType(p->ainew.depot_tile, MP_STREET) && GetRoadTileType(p->ainew.depot_tile) == ROAD_TILE_DEPOT) {
@@ -1137,7 +1137,7 @@
 // Build vehicles
 static void AiNew_State_BuildVehicle(Player *p)
 {
-	int res;
+	CommandCost res;
 	assert(p->ainew.state == AI_STATE_BUILD_VEHICLE);
 
 	// Check if we need to build a vehicle
@@ -1224,7 +1224,7 @@
 	// Skip the first order if it is a second vehicle
 	//  This to make vehicles go different ways..
 	if (p->ainew.cur_veh & 1)
-		AI_DoCommand(0, p->ainew.veh_id, 0, DC_EXEC, CMD_SKIP_ORDER);
+		AI_DoCommand(0, p->ainew.veh_id, 1, DC_EXEC, CMD_SKIP_TO_ORDER);
 
 	// 3, 2, 1... go! (give START_STOP command ;))
 	AI_DoCommand(0, p->ainew.veh_id, 0, DC_EXEC, CMD_START_STOP_ROADVEH);
@@ -1258,7 +1258,7 @@
 		if (v->profit_last_year + v->profit_this_year < AI_MINIMUM_ROUTE_PROFIT ||
 				(v->reliability * 100 >> 16) < 40) {
 			// There is a possibility that the route is fucked up...
-			if (v->cargo_days > AI_VEHICLE_LOST_DAYS) {
+			if (v->cargo.DaysInTransit() > AI_VEHICLE_LOST_DAYS) {
 				// The vehicle is lost.. check the route, or else, get the vehicle
 				//  back to a depot
 				// TODO: make this piece of code
@@ -1277,7 +1277,7 @@
 
 			if (!AiNew_SetSpecialVehicleFlag(p, v, AI_VEHICLEFLAG_SELL)) return;
 			{
-				int ret = 0;
+				CommandCost ret;
 				if (v->type == VEH_ROAD)
 					ret = AI_DoCommand(0, v->index, 0, DC_EXEC, CMD_SEND_ROADVEH_TO_DEPOT);
 				// This means we can not find a depot :s
--- a/src/ai/trolly/trolly.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/ai/trolly/trolly.h	Sat Jul 14 19:42:58 2007 +0000
@@ -252,11 +252,11 @@
 
 // ai_build.c
 bool AiNew_Build_CompanyHQ(Player *p, TileIndex tile);
-int AiNew_Build_Station(Player *p, byte type, TileIndex tile, byte length, byte numtracks, byte direction, byte flag);
-int AiNew_Build_Bridge(Player *p, TileIndex tile_a, TileIndex tile_b, byte flag);
-int AiNew_Build_RoutePart(Player *p, Ai_PathFinderInfo *PathFinderInfo, byte flag);
+CommandCost AiNew_Build_Station(Player *p, byte type, TileIndex tile, byte length, byte numtracks, byte direction, byte flag);
+CommandCost AiNew_Build_Bridge(Player *p, TileIndex tile_a, TileIndex tile_b, byte flag);
+CommandCost AiNew_Build_RoutePart(Player *p, Ai_PathFinderInfo *PathFinderInfo, byte flag);
 EngineID AiNew_PickVehicle(Player *p);
-int AiNew_Build_Vehicle(Player *p, TileIndex tile, byte flag);
-int AiNew_Build_Depot(Player* p, TileIndex tile, DiagDirection direction, byte flag);
+CommandCost AiNew_Build_Vehicle(Player *p, TileIndex tile, byte flag);
+CommandCost AiNew_Build_Depot(Player* p, TileIndex tile, DiagDirection direction, byte flag);
 
 #endif /* AI_TROLLY_H */
--- a/src/aircraft.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/aircraft.h	Sat Jul 14 19:42:58 2007 +0000
@@ -136,6 +136,8 @@
 	ExpensesType GetExpenseType(bool income) const { return income ? EXPENSES_AIRCRAFT_INC : EXPENSES_AIRCRAFT_RUN; }
 	WindowClass GetVehicleListWindowClass() const { return WC_AIRCRAFT_LIST; }
 	bool IsPrimaryVehicle() const { return IsNormalAircraft(this); }
+	int GetImage(Direction direction) const;
+	void Tick();
 };
 
 #endif /* AIRCRAFT_H */
--- a/src/aircraft_cmd.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/aircraft_cmd.cpp	Sat Jul 14 19:42: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"
@@ -147,15 +148,15 @@
 }
 #endif
 
-int GetAircraftImage(const Vehicle* v, Direction direction)
+int Aircraft::GetImage(Direction direction) const
 {
-	int spritenum = v->spritenum;
+	int spritenum = this->spritenum;
 
 	if (is_custom_sprite(spritenum)) {
-		int sprite = GetCustomVehicleSprite(v, direction);
+		int sprite = GetCustomVehicleSprite(this, direction);
 
 		if (sprite != 0) return sprite;
-		spritenum = orig_aircraft_vehicle_info[v->engine_type - AIRCRAFT_ENGINES_INDEX].image_index;
+		spritenum = orig_aircraft_vehicle_info[this->engine_type - AIRCRAFT_ENGINES_INDEX].image_index;
 	}
 	return direction + _aircraft_sprite[spritenum];
 }
@@ -222,9 +223,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);
 }
 
 
@@ -260,12 +261,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;
@@ -341,7 +342,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);
@@ -445,7 +446,7 @@
 		RebuildVehicleLists();
 		InvalidateWindow(WC_COMPANY, v->owner);
 		if (IsLocalPlayer())
-			InvalidateAutoreplaceWindow(VEH_AIRCRAFT); //updates the replace Aircraft window
+			InvalidateAutoreplaceWindow(VEH_AIRCRAFT, v->group_id); //updates the replace Aircraft window
 
 		GetPlayer(_current_player)->num_engines[p1]++;
 	}
@@ -471,7 +472,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;
 
@@ -488,7 +489,7 @@
 		DoDeleteAircraft(v);
 	}
 
-	return -(int32)v->value;
+	return CommandCost(-v->value);
 }
 
 /** Start/Stop an aircraft.
@@ -498,7 +499,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;
 
@@ -529,7 +530,7 @@
 		InvalidateWindowClasses(WC_AIRCRAFT_LIST);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Send an aircraft to the hangar.
@@ -541,7 +542,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 */
@@ -564,7 +565,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
@@ -604,7 +605,7 @@
 		}
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -618,7 +619,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);
 
@@ -663,7 +664,7 @@
 	}
 	_returned_refit_capacity = pass;
 
-	int32 cost = 0;
+	CommandCost cost;
 	if (IsHumanPlayer(v->owner) && new_cid != v->cargo_type) {
 		cost = GetRefitCost(v->engine_type);
 	}
@@ -674,13 +675,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);
@@ -739,9 +735,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);
@@ -768,7 +764,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);
 }
@@ -826,7 +822,7 @@
 	v->y_pos = y;
 	v->z_pos = z;
 
-	v->cur_image = GetAircraftImage(v, v->direction);
+	v->cur_image = v->GetImage(v->direction);
 	if (v->subtype == AIR_HELICOPTER) v->next->next->cur_image = GetRotorImage(v);
 
 	BeginVehicleMove(v);
@@ -1343,6 +1339,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;
@@ -1374,7 +1371,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;
@@ -1407,7 +1404,7 @@
 
 void Aircraft::MarkDirty()
 {
-		this->cur_image = GetAircraftImage(this, this->direction);
+		this->cur_image = this->GetImage(this->direction);
 		if (this->subtype == AIR_HELICOPTER) this->next->next->cur_image = GetRotorImage(this);
 		MarkAllViewportsDirty(this->left_coord, this->top_coord, this->right_coord + 1, this->bottom_coord + 1);
 }
@@ -1422,11 +1419,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) {
@@ -1462,7 +1459,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);
@@ -2080,6 +2077,7 @@
 static void AircraftEventHandler(Vehicle *v, int loop)
 {
 	v->tick_counter++;
+	v->current_order_time++;
 
 	if (v->vehstatus & VS_CRASHED) {
 		HandleCrashedAircraft(v);
@@ -2106,17 +2104,17 @@
 	AirportGoToNextPosition(v);
 }
 
-void Aircraft_Tick(Vehicle *v)
+void Aircraft::Tick()
 {
-	if (!IsNormalAircraft(v)) return;
+	if (!IsNormalAircraft(this)) return;
 
-	if (v->subtype == AIR_HELICOPTER) HelicopterTickHandler(v);
+	if (this->subtype == AIR_HELICOPTER) HelicopterTickHandler(this);
 
-	AgeAircraftCargo(v);
+	AgeAircraftCargo(this);
 
 	for (uint i = 0; i != 2; i++) {
-		AircraftEventHandler(v, i);
-		if (v->type != VEH_AIRCRAFT) // In case it was deleted
+		AircraftEventHandler(this, i);
+		if (this->type != VEH_AIRCRAFT) // In case it was deleted
 			break;
 	}
 }
--- a/src/aircraft_gui.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/aircraft_gui.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -25,7 +25,7 @@
 void DrawAircraftImage(const Vehicle *v, int x, int y, VehicleID selection)
 {
 	SpriteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v);
-	DrawSprite(GetAircraftImage(v, DIR_W), pal, x + 25, y + 10);
+	DrawSprite(v->GetImage(DIR_W), pal, x + 25, y + 10);
 	if (v->subtype == AIR_HELICOPTER) {
 		SpriteID rotor_sprite = GetCustomRotorSprite(v, true);
 		if (rotor_sprite == 0) rotor_sprite = SPR_ROTOR_STOPPED;
@@ -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/airport_gui.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/airport_gui.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -185,7 +185,7 @@
 		DrawWindowWidgets(w);
 		// strings such as 'Size' and 'Coverage Area'
 		// 'Coverage Area'
-		DrawStationCoverageAreaText(2, 206, (uint)-1, rad);
+		DrawStationCoverageAreaText(2, 206, SCT_ALL, rad);
 		break;
 	}
 
--- a/src/airport_movement.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/airport_movement.h	Sat Jul 14 19:42:58 2007 +0000
@@ -196,7 +196,7 @@
 	{  193,  104, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 32 Fly to landing position in air
 	{  105,  104, AMED_NOSPDCLAMP | AMED_LAND,     {DIR_N} }, // 33 Going down for land
 	{    3,  104, AMED_NOSPDCLAMP | AMED_BRAKE,    {DIR_N} }, // 34 Just landed, brake until end of runway
-	{   12,  104, 0,                               {DIR_N} }, // 35 Just landed, turn around and taxi 1 square
+	{   12,  104, AMED_SLOWTURN,                   {DIR_N} }, // 35 Just landed, turn around and taxi 1 square
 	{    7,   84, 0,                               {DIR_N} }, // 36 Taxi from runway to crossing
 	{  -31,  209, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 37 Fly around waiting for a landing spot (north-east)
 	{    1,    6, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 38 Fly around waiting for a landing spot (north-west)
--- a/src/articulated_vehicles.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/articulated_vehicles.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -4,30 +4,31 @@
 
 #include "stdafx.h"
 #include "openttd.h"
-#include "debug.h"
 #include "functions.h"
 #include "command.h"
 #include "vehicle.h"
 #include "articulated_vehicles.h"
 #include "engine.h"
 #include "train.h"
+#include "roadveh.h"
 #include "newgrf_callbacks.h"
 #include "newgrf_engine.h"
 
+
 uint CountArticulatedParts(EngineID engine_type)
 {
 	if (!HASBIT(EngInfo(engine_type)->callbackmask, CBM_ARTIC_ENGINE)) return 0;
 
 	uint i;
 	for (i = 1; i < 10; i++) {
-		uint16 callback = GetVehicleCallback(CBID_TRAIN_ARTIC_ENGINE, i, 0, engine_type, NULL);
+		uint16 callback = GetVehicleCallback(CBID_VEHICLE_ARTIC_ENGINE, i, 0, engine_type, NULL);
 		if (callback == CALLBACK_FAILED || callback == 0xFF) break;
 	}
 
 	return i - 1;
 }
 
-void AddArticulatedParts(Vehicle **vl)
+void AddArticulatedParts(Vehicle **vl, VehicleType type)
 {
 	const Vehicle *v = vl[0];
 	Vehicle *u = vl[0];
@@ -35,7 +36,7 @@
 	if (!HASBIT(EngInfo(v->engine_type)->callbackmask, CBM_ARTIC_ENGINE)) return;
 
 	for (uint i = 1; i < 10; i++) {
-		uint16 callback = GetVehicleCallback(CBID_TRAIN_ARTIC_ENGINE, i, 0, v->engine_type, v);
+		uint16 callback = GetVehicleCallback(CBID_VEHICLE_ARTIC_ENGINE, i, 0, v->engine_type, v);
 		if (callback == CALLBACK_FAILED || callback == 0xFF) return;
 
 		/* Attempt to use pre-allocated vehicles until they run out. This can happen
@@ -46,9 +47,8 @@
 
 		u = u->next;
 
-		EngineID engine_type = GB(callback, 0, 7);
+		EngineID engine_type = GetFirstEngineOfType(type) + GB(callback, 0, 7);
 		bool flip_image = HASBIT(callback, 7);
-		const RailVehicleInfo *rvi_artic = RailVehInfo(engine_type);
 
 		/* get common values from first engine */
 		u->direction = v->direction;
@@ -57,28 +57,57 @@
 		u->x_pos = v->x_pos;
 		u->y_pos = v->y_pos;
 		u->z_pos = v->z_pos;
-		u->u.rail.track = v->u.rail.track;
-		u->u.rail.railtype = v->u.rail.railtype;
 		u->build_year = v->build_year;
 		u->vehstatus = v->vehstatus & ~VS_STOPPED;
-		u->u.rail.first_engine = v->engine_type;
 
-		/* get more settings from rail vehicle info */
-		u->spritenum = rvi_artic->image_index;
-		if (flip_image) u->spritenum++;
-		u->cargo_type = rvi_artic->cargo_type;
 		u->cargo_subtype = 0;
-		u->cargo_cap = rvi_artic->capacity;
 		u->max_speed = 0;
 		u->max_age = 0;
 		u->engine_type = engine_type;
 		u->value = 0;
-		u = new (u) Train();
 		u->subtype = 0;
-		SetArticulatedPart(u);
 		u->cur_image = 0xAC2;
 		u->random_bits = VehicleRandomBits();
 
+		switch (type) {
+			default: NOT_REACHED();
+
+			case VEH_TRAIN: {
+				const RailVehicleInfo *rvi_artic = RailVehInfo(engine_type);
+
+				u = new (u) Train();
+				u->u.rail.track = v->u.rail.track;
+				u->u.rail.railtype = v->u.rail.railtype;
+				u->u.rail.first_engine = v->engine_type;
+
+				u->spritenum = rvi_artic->image_index;
+				u->cargo_type = rvi_artic->cargo_type;
+				u->cargo_cap = rvi_artic->capacity;
+
+				SetArticulatedPart(u);
+			} break;
+
+			case VEH_ROAD: {
+				const RoadVehicleInfo *rvi_artic = RoadVehInfo(engine_type);
+
+				u = new (u) RoadVehicle();
+				u->u.road.first_engine = v->engine_type;
+				u->u.road.cached_veh_length = GetRoadVehLength(u);
+				u->u.road.state = RVSB_IN_DEPOT;
+
+				u->u.road.roadtype = v->u.road.roadtype;
+				u->u.road.compatible_roadtypes = v->u.road.compatible_roadtypes;
+
+				u->spritenum = rvi_artic->image_index;
+				u->cargo_type = rvi_artic->cargo_type;
+				u->cargo_cap = rvi_artic->capacity;
+
+				SetRoadVehArticPart(u);
+			} break;
+		}
+
+		if (flip_image) u->spritenum++;
+
 		VehiclePositionChanged(u);
 	}
 }
--- a/src/articulated_vehicles.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/articulated_vehicles.h	Sat Jul 14 19:42:58 2007 +0000
@@ -6,6 +6,6 @@
 #define ARTICULATED_VEHICLES_H
 
 uint CountArticulatedParts(EngineID engine_type);
-void AddArticulatedParts(Vehicle **vl);
+void AddArticulatedParts(Vehicle **vl, VehicleType type);
 
 #endif /* ARTICULATED_VEHICLES_H */
--- a/src/autoreplace_cmd.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/autoreplace_cmd.cpp	Sat Jul 14 19:42: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,14 +242,27 @@
 		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
+		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. */
+			DoCommand(old_v->tile, new_engine_type, 3, DC_EXEC, GetCmdBuildVeh(old_v));
+			Vehicle *temp = GetVehicle(_new_vehicle_id);
+			tmp_move = DoCommand(0, (temp->index << 16) | old_v->next->index, 1, 0, CMD_MOVE_RAIL_VEHICLE);
+			DoCommand(0, temp->index, 0, DC_EXEC, GetCmdSellVeh(old_v));
+		}
+
 		/* 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 (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;
 		}
 	}
@@ -258,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 */
@@ -285,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
@@ -316,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)) {
@@ -342,7 +355,9 @@
 			}
 
 			/* 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
 
 			if (flags & DC_EXEC &&
 					(w->type != VEH_TRAIN || w->u.rail.first_engine == INVALID_ENGINE)) {
@@ -352,14 +367,11 @@
 				 */
 				v = w;
 			}
-
-			if (!CmdFailed(temp_cost)) {
-				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) {
@@ -409,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/autoreplace_gui.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -38,17 +38,19 @@
 
 /** Rebuild the left autoreplace list if an engine is removed or added
  * @param e Engine to check if it is removed or added
+ * @param id_g The group the engine belongs to
  *  Note: this function only works if it is called either
  *   - when a new vehicle is build, but before it's counted in num_engines
  *   - when a vehicle is deleted and after it's substracted from num_engines
  *   - when not changing the count (used when changing replace orders)
  */
-void InvalidateAutoreplaceWindow(EngineID e)
+void InvalidateAutoreplaceWindow(EngineID e, GroupID id_g)
 {
 	Player *p = GetPlayer(_local_player);
 	byte type = GetEngine(e)->type;
+	uint num_engines = IsDefaultGroupID(id_g) ? p->num_engines[e] : GetGroup(id_g)->num_engines[e];
 
-	if (p->num_engines[e] == 0) {
+	if (num_engines == 0 || p->num_engines[e] == 0) {
 		/* We don't have any of this engine type.
 		 * Either we just sold the last one, we build a new one or we stopped replacing it.
 		 * In all cases, we need to update the left list */
@@ -288,7 +290,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	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,278 @@
+#include "../stdafx.h"
+#include "../zoom.hpp"
+#include "../gfx.h"
+#include "../debug.h"
+#include "../table/sprites.h"
+#include "../video/video_driver.hpp"
+#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->MakeDirty(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	Sat Jul 14 19:42: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 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/32bpp_base.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,193 @@
+#include "../stdafx.h"
+#include "../gfx.h"
+#include "32bpp_base.hpp"
+
+void *Blitter_32bppBase::MoveTo(const void *video, int x, int y)
+{
+	return (uint32 *)video + x + y * _screen.pitch;
+}
+
+void Blitter_32bppBase::SetPixel(void *video, int x, int y, uint8 color)
+{
+	*((uint32 *)video + x + y * _screen.pitch) = LookupColourInPalette(color);
+}
+
+void Blitter_32bppBase::SetPixelIfEmpty(void *video, int x, int y, uint8 color)
+{
+	uint32 *dst = (uint32 *)video + x + y * _screen.pitch;
+	if (*dst == 0) *dst = LookupColourInPalette(color);
+}
+
+void Blitter_32bppBase::DrawRect(void *video, int width, int height, uint8 color)
+{
+	uint32 color32 = LookupColourInPalette(color);
+
+	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)
+{
+	uint32 *dst = (uint32 *)video;
+	uint32 *usrc = (uint32 *)src;
+
+	for (; height > 0; height--) {
+		memcpy(dst, usrc, width * sizeof(uint32));
+		usrc += width;
+		dst += _screen.pitch;
+	}
+}
+
+void Blitter_32bppBase::CopyToBuffer(const void *video, void *dst, int width, int height)
+{
+	uint32 *udst = (uint32 *)dst;
+	uint32 *src = (uint32 *)video;
+
+	for (; height > 0; height--) {
+		memcpy(udst, src, width * sizeof(uint32));
+		src += _screen.pitch;
+		udst += width;
+	}
+}
+
+void Blitter_32bppBase::CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch)
+{
+	uint32 *udst = (uint32 *)dst;
+	uint32 *src = (uint32 *)video;
+
+	for (; height > 0; height--) {
+		memcpy(udst, src, width * sizeof(uint32));
+		src += _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;
+		}
+	}
+}
+
+int Blitter_32bppBase::BufferSize(int width, int height)
+{
+	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;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/32bpp_base.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,118 @@
+/* $Id$ */
+
+/** @file 32bpp_base.hpp */
+
+#ifndef BLITTER_32BPP_BASE_HPP
+#define BLITTER_32BPP_BASE_HPP
+
+#include "base.hpp"
+
+class Blitter_32bppBase : public Blitter {
+public:
+	/* virtual */ uint8 GetScreenDepth() { return 32; }
+//	/* 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 */ 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 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();
+
+	/**
+	 * 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);
+	}
+};
+
+#endif /* BLITTER_32BPP_BASE_HPP */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/32bpp_simple.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,109 @@
+#include "../stdafx.h"
+#include "../zoom.hpp"
+#include "../gfx.h"
+#include "../debug.h"
+#include "../table/sprites.h"
+#include "32bpp_simple.hpp"
+
+static FBlitter_32bppSimple iFBlitter_32bppSimple;
+
+void Blitter_32bppSimple::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
+{
+	const SpriteLoader::CommonPixel *src, *src_line;
+	uint32 *dst, *dst_line;
+
+	/* 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;
+
+	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);
+
+		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);
+					} else {
+						if (bp->remap[src->m] != 0) *dst = ComposeColourPA(this->LookupColourInPalette(bp->remap[src->m]), src->a, *dst);
+					}
+					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);
+					break;
+
+				default:
+					if (src->a != 0) *dst = ComposeColourRGBA(src->r, src->g, src->b, src->a, *dst);
+					break;
+			}
+			dst++;
+			src += ScaleByZoom(1, zoom);
+		}
+	}
+}
+
+void Blitter_32bppSimple::DrawColorMappingRect(void *dst, int width, int height, int pal)
+{
+	uint32 *udst = (uint32 *)dst;
+
+	if (pal == PALETTE_TO_TRANSPARENT) {
+		do {
+			for (int i = 0; i != width; i++) {
+				*udst = MakeTransparent(*udst, 60);
+				udst++;
+			}
+			udst = udst - width + _screen.pitch;
+		} while (--height);
+		return;
+	}
+	if (pal == PALETTE_TO_STRUCT_GREY) {
+		do {
+			for (int i = 0; i != width; i++) {
+				*udst = MakeGrey(*udst);
+				udst++;
+			}
+			udst = udst - width + _screen.pitch;
+		} while (--height);
+		return;
+	}
+
+	DEBUG(misc, 0, "32bpp blitter doesn't know how to draw this color table ('%d')", pal);
+}
+
+Sprite *Blitter_32bppSimple::Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator)
+{
+	Sprite *dest_sprite;
+	SpriteLoader::CommonPixel *dst;
+	dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + sprite->height * sprite->width * sizeof(SpriteLoader::CommonPixel));
+
+	dest_sprite->height = sprite->height;
+	dest_sprite->width  = sprite->width;
+	dest_sprite->x_offs = sprite->x_offs;
+	dest_sprite->y_offs = sprite->y_offs;
+
+	dst = (SpriteLoader::CommonPixel *)dest_sprite->data;
+
+	memcpy(dst, sprite->data, sprite->height * sprite->width * sizeof(SpriteLoader::CommonPixel));
+	for (int i = 0; i < sprite->height * sprite->width; i++) {
+		if (dst[i].m != 0) {
+			/* Pre-convert the mapping channel to a RGB value */
+			uint color = this->LookupColourInPalette(dst[i].m);
+			dst[i].r = GB(color, 16, 8);
+			dst[i].g = GB(color, 8,  8);
+			dst[i].b = GB(color, 0,  8);
+		}
+	}
+
+	return dest_sprite;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/32bpp_simple.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,27 @@
+/* $Id$ */
+
+/** @file 32bpp_simple.hpp */
+
+#ifndef BLITTER_32BPP_SIMPLE_HPP
+#define BLITTER_32BPP_SIMPLE_HPP
+
+#include "32bpp_base.hpp"
+#include "factory.hpp"
+
+class Blitter_32bppSimple : public Blitter_32bppBase {
+public:
+	/* 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> {
+public:
+	/* virtual */ const char *GetName() { return "32bpp-simple"; }
+	/* virtual */ const char *GetDescription() { return "32bpp Simple Blitter (no palette animation)"; }
+	/* virtual */ Blitter *CreateInstance() { return new Blitter_32bppSimple(); }
+};
+
+#endif /* BLITTER_32BPP_SIMPLE_HPP */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/8bpp_base.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,197 @@
+#include "../stdafx.h"
+#include "../gfx.h"
+#include "8bpp_base.hpp"
+
+void Blitter_8bppBase::DrawColorMappingRect(void *dst, int width, int height, int pal)
+{
+	const uint8 *ctab = GetNonSprite(pal) + 1;
+
+	do {
+		for (int i = 0; i != width; i++) *((uint8 *)dst + i) = ctab[((uint8 *)dst)[i]];
+		dst = (uint8 *)dst + _screen.pitch;
+	} while (--height);
+}
+
+void *Blitter_8bppBase::MoveTo(const void *video, int x, int y)
+{
+	return (uint8 *)video + x + y * _screen.pitch;
+}
+
+void Blitter_8bppBase::SetPixel(void *video, int x, int y, uint8 color)
+{
+	*((uint8 *)video + x + y * _screen.pitch) = color;
+}
+
+void Blitter_8bppBase::SetPixelIfEmpty(void *video, int x, int y, uint8 color)
+{
+	uint8 *dst = (uint8 *)video + x + y * _screen.pitch;
+	if (*dst == 0) *dst = color;
+}
+
+void Blitter_8bppBase::DrawRect(void *video, int width, int height, uint8 color)
+{
+	do {
+		memset(video, color, width);
+		video = (uint8 *)video + _screen.pitch;
+	} while (--height);
+}
+
+void Blitter_8bppBase::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_8bppBase::CopyFromBuffer(void *video, const void *src, int width, int height)
+{
+	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;
+
+	for (; height > 0; height--) {
+		memcpy(udst, src, width * sizeof(uint8));
+		src += _screen.pitch;
+		udst += width;
+	}
+}
+
+void Blitter_8bppBase::CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch)
+{
+	uint8 *udst = (uint8 *)dst;
+	uint8 *src = (uint8 *)video;
+
+	for (; height > 0; height--) {
+		memcpy(udst, src, width * sizeof(uint8));
+		src += _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;
+		}
+	}
+}
+
+int Blitter_8bppBase::BufferSize(int width, int height)
+{
+	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;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/8bpp_base.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,30 @@
+/* $Id$ */
+
+/** @file 8bpp_base.hpp */
+
+#ifndef BLITTER_8BPP_BASE_HPP
+#define BLITTER_8BPP_BASE_HPP
+
+#include "base.hpp"
+
+class Blitter_8bppBase : public Blitter {
+public:
+	/* virtual */ uint8 GetScreenDepth() { return 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 */ 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 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 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/8bpp_debug.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,55 @@
+/* $Id$ */
+
+/** @file 8bpp_debug.cpp */
+
+#include "../stdafx.h"
+#include "../zoom.hpp"
+#include "../gfx.h"
+#include "../functions.h"
+#include "8bpp_debug.hpp"
+
+static FBlitter_8bppDebug iFBlitter_8bppDebug;
+
+void Blitter_8bppDebug::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
+{
+	const uint8 *src, *src_line;
+	uint8 *dst, *dst_line;
+
+	/* Find where to start reading in the source sprite */
+	src_line = (const uint8 *)bp->sprite + (bp->skip_top * bp->sprite_width + bp->skip_left) * ScaleByZoom(1, zoom);
+	dst_line = (uint8 *)bp->dst + bp->top * bp->pitch + 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);
+
+		for (int x = 0; x < bp->width; x++) {
+			if (*src != 0) *dst = *src;
+			dst++;
+			src += ScaleByZoom(1, zoom);
+		}
+		assert(src <= src_line);
+	}
+}
+
+Sprite *Blitter_8bppDebug::Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator)
+{
+	Sprite *dest_sprite;
+	dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + sprite->height * sprite->width);
+
+	dest_sprite->height = sprite->height;
+	dest_sprite->width  = sprite->width;
+	dest_sprite->x_offs = sprite->x_offs;
+	dest_sprite->y_offs = sprite->y_offs;
+
+	/* Write a random color as sprite; this makes debugging really easy */
+	uint color = InteractiveRandom() % 150 + 2;
+	for (int i = 0; i < sprite->height * sprite->width; i++) {
+		dest_sprite->data[i] = (sprite->data[i].m == 0) ? 0 : color;
+	}
+
+	return dest_sprite;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/8bpp_debug.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,26 @@
+/* $Id$ */
+
+/** @file 8bpp_debug.hpp */
+
+#ifndef BLITTER_8BPP_DEBUG_HPP
+#define BLITTER_8BPP_DEBUG_HPP
+
+#include "8bpp_base.hpp"
+#include "factory.hpp"
+
+class Blitter_8bppDebug : public Blitter_8bppBase {
+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> {
+public:
+	/* virtual */ const char *GetName() { return "8bpp-debug"; }
+	/* virtual */ const char *GetDescription() { return "8bpp Debug Blitter (testing only)"; }
+	/* virtual */ Blitter *CreateInstance() { return new Blitter_8bppDebug(); }
+};
+
+#endif /* BLITTER_8BPP_DEBUG_HPP */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/8bpp_optimized.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,203 @@
+/* $Id$ */
+
+/** @file 8bpp_optimized.cpp */
+
+#include "../stdafx.h"
+#include "../zoom.hpp"
+#include "../gfx.h"
+#include "../debug.h"
+#include "8bpp_optimized.hpp"
+
+static FBlitter_8bppOptimized iFBlitter_8bppOptimized;
+
+void Blitter_8bppOptimized::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
+{
+	const uint8 *src, *src_next;
+	uint8 *dst, *dst_line;
+	uint offset = 0;
+
+	/* Find the offset of this zoom-level */
+	offset = ((const uint8 *)bp->sprite)[(int)zoom * 2] | ((const byte *)bp->sprite)[(int)zoom * 2 + 1] << 8;
+
+	/* Find where to start reading in the source sprite */
+	src = (const uint8 *)bp->sprite + offset;
+	dst_line = (uint8 *)bp->dst + bp->top * bp->pitch + bp->left;
+
+	/* Skip over the top lines in the source image */
+	for (int y = 0; y < bp->skip_top; y++) {
+		uint trans, pixels;
+		for (;;) {
+			trans = *src++;
+			pixels = *src++;
+			if (trans == 0 && pixels == 0) break;
+			src += pixels;
+		}
+	}
+
+	src_next = src;
+
+	for (int y = 0; y < bp->height; y++) {
+		dst = dst_line;
+		dst_line += bp->pitch;
+
+		uint skip_left = bp->skip_left;
+		int width = bp->width;
+
+		for (;;) {
+			src = src_next;
+			uint8 trans = *src++;
+			uint8 pixels = *src++;
+			src_next = src + pixels;
+			if (trans == 0 && pixels == 0) break;
+			if (width <= 0) continue;
+
+			if (skip_left != 0) {
+				if (skip_left < trans) {
+					trans -= skip_left;
+					skip_left = 0;
+				} else {
+					skip_left -= trans;
+					trans = 0;
+				}
+				if (skip_left < pixels) {
+					src += skip_left;
+					pixels -= skip_left;
+					skip_left = 0;
+				} else {
+					src += pixels;
+					skip_left -= pixels;
+					pixels = 0;
+				}
+			}
+			if (skip_left != 0) continue;
+
+			/* Skip transparent pixels */
+			dst += trans;
+			width -= trans;
+			if (width <= 0) continue;
+			if (pixels > width) pixels = width;
+			width -= pixels;
+
+			switch (mode) {
+				case BM_COLOUR_REMAP:
+					for (uint x = 0; x < pixels; x++) {
+						if (bp->remap[*src] != 0) *dst = bp->remap[*src];
+						dst++; src++;
+					}
+					break;
+
+				case BM_TRANSPARENT:
+					for (uint x = 0; x < pixels; x++) {
+						*dst = bp->remap[*dst];
+						dst++; src++;
+					}
+					break;
+
+				default:
+					memcpy(dst, src, pixels);
+					dst += pixels; src += pixels;
+					break;
+			}
+		}
+	}
+}
+
+Sprite *Blitter_8bppOptimized::Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator)
+{
+	Sprite *dest_sprite;
+	byte *temp_dst;
+	uint memory = 0;
+	uint index = 0;
+
+	/* Make memory for all zoom-levels */
+	memory += (int)ZOOM_LVL_END * sizeof(uint16);
+	for (int i = 0; i < (int)ZOOM_LVL_END; i++) {
+		memory += UnScaleByZoom(sprite->height, (ZoomLevel)i) * UnScaleByZoom(sprite->width, (ZoomLevel)i);
+		index += 2;
+	}
+
+	/* We have no idea how much memory we really need, so just guess something */
+	memory *= 5;
+	temp_dst = MallocT<byte>(memory);
+
+	/* Make the sprites per zoom-level */
+	for (int i = 0; i < (int)ZOOM_LVL_END; i++) {
+		/* Store the scaled image */
+		const SpriteLoader::CommonPixel *src;
+
+		/* Store the index table */
+		temp_dst[i * 2] = index & 0xFF;
+		temp_dst[i * 2 + 1] = (index >> 8) & 0xFF;
+
+		byte *dst = &temp_dst[index];
+
+		for (int y = 0; y < UnScaleByZoom(sprite->height, (ZoomLevel)i); y++) {
+			uint trans = 0;
+			uint pixels = 0;
+			uint last_color = 0;
+			uint count_index = 0;
+			uint rx = 0;
+			src = &sprite->data[ScaleByZoom(y, (ZoomLevel)i) * sprite->width];
+
+			for (int x = 0; x < UnScaleByZoom(sprite->width, (ZoomLevel)i); x++) {
+				uint color = 0;
+
+				/* Get the color keeping in mind the zoom-level */
+				for (int j = 0; j < ScaleByZoom(1, (ZoomLevel)i); j++) {
+					if (src->m != 0) color = src->m;
+					src++;
+					rx++;
+					/* Because of the scaling it might happen we read outside the buffer. Avoid that. */
+					if (rx == sprite->width) break;
+				}
+
+				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;
+						pixels = 0;
+						count_index = 0;
+					}
+					/* As long as we find transparency bytes, keep counting */
+					if (color == 0) {
+						last_color = 0;
+						trans++;
+						continue;
+					}
+					/* No longer transparency, so write the amount of transparent bytes */
+					*dst = trans;
+					dst++; index++;
+					trans = 0;
+					/* Reserve a byte for the pixel counter */
+					count_index = index;
+					dst++; index++;
+				}
+				last_color = color;
+				pixels++;
+				*dst = color;
+				dst++; index++;
+			}
+
+			if (count_index != 0) temp_dst[count_index] = pixels;
+
+			/* Write line-ending */
+			*dst = 0; dst++; index++;
+			*dst = 0; dst++; index++;
+		}
+	}
+
+	/* Safety check, to make sure we guessed the size correctly */
+	assert(index < memory);
+
+	/* Allocate the exact amount of memory we need */
+	dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + index);
+
+	dest_sprite->height = sprite->height;
+	dest_sprite->width  = sprite->width;
+	dest_sprite->x_offs = sprite->x_offs;
+	dest_sprite->y_offs = sprite->y_offs;
+	memcpy(dest_sprite->data, temp_dst, index);
+	free(temp_dst);
+
+	return dest_sprite;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/8bpp_optimized.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,26 @@
+/* $Id$ */
+
+/** @file 8bpp_optimized.hpp */
+
+#ifndef BLITTER_8BPP_OPTIMIZED_HPP
+#define BLITTER_8BPP_OPTIMIZED_HPP
+
+#include "8bpp_base.hpp"
+#include "factory.hpp"
+
+class Blitter_8bppOptimized : public Blitter_8bppBase {
+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> {
+public:
+	/* virtual */ const char *GetName() { return "8bpp-optimized"; }
+	/* virtual */ const char *GetDescription() { return "8bpp Optimized Blitter (compression + all-ZoomLevel cache)"; }
+	/* virtual */ Blitter *CreateInstance() { return new Blitter_8bppOptimized(); }
+};
+
+#endif /* BLITTER_8BPP_OPTIMIZED_HPP */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/8bpp_simple.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,67 @@
+/* $Id$ */
+
+/** @file 8bpp_simple.cpp */
+
+#include "../stdafx.h"
+#include "../zoom.hpp"
+#include "../gfx.h"
+#include "8bpp_simple.hpp"
+
+static FBlitter_8bppSimple iFBlitter_8bppSimple;
+
+void Blitter_8bppSimple::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
+{
+	const uint8 *src, *src_line;
+	uint8 *dst, *dst_line;
+
+	/* Find where to start reading in the source sprite */
+	src_line = (const uint8 *)bp->sprite + (bp->skip_top * bp->sprite_width + bp->skip_left) * ScaleByZoom(1, zoom);
+	dst_line = (uint8 *)bp->dst + bp->top * bp->pitch + 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);
+
+		for (int x = 0; x < bp->width; x++) {
+			uint color = 0;
+
+			switch (mode) {
+				case BM_COLOUR_REMAP:
+					color = bp->remap[*src];
+					break;
+
+				case BM_TRANSPARENT:
+					if (*src != 0) color = bp->remap[*dst];
+					break;
+
+				default:
+					color = *src;
+					break;
+			}
+			if (color != 0) *dst = color;
+			dst++;
+			src += ScaleByZoom(1, zoom);
+		}
+	}
+}
+
+Sprite *Blitter_8bppSimple::Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator)
+{
+	Sprite *dest_sprite;
+	dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + sprite->height * sprite->width);;
+
+	dest_sprite->height = sprite->height;
+	dest_sprite->width  = sprite->width;
+	dest_sprite->x_offs = sprite->x_offs;
+	dest_sprite->y_offs = sprite->y_offs;
+
+	/* Copy over only the 'remap' channel, as that is what we care about in 8bpp */
+	for (int i = 0; i < sprite->height * sprite->width; i++) {
+		dest_sprite->data[i] = sprite->data[i].m;
+	}
+
+	return dest_sprite;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/8bpp_simple.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,26 @@
+/* $Id$ */
+
+/** @file 8bpp_simple.hpp */
+
+#ifndef BLITTER_8BPP_SIMPLE_HPP
+#define BLITTER_8BPP_SIMPLE_HPP
+
+#include "8bpp_base.hpp"
+#include "factory.hpp"
+
+class Blitter_8bppSimple : public Blitter_8bppBase {
+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> {
+public:
+	/* virtual */ const char *GetName() { return "8bpp-simple"; }
+	/* virtual */ const char *GetDescription() { return "8bpp Simple Blitter (relative slow, but never wrong)"; }
+	/* virtual */ Blitter *CreateInstance() { return new Blitter_8bppSimple(); }
+};
+
+#endif /* BLITTER_8BPP_SIMPLE_HPP */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/base.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,190 @@
+/* $Id$ */
+
+#ifndef BLITTER_BASE_HPP
+#define BLITTER_BASE_HPP
+
+#include "../spritecache.h"
+#include "../spriteloader/spriteloader.hpp"
+
+enum BlitterMode {
+	BM_NORMAL,
+	BM_COLOUR_REMAP,
+	BM_TRANSPARENT,
+};
+
+/**
+ * How all blitters should look like. Extend this class to make your own.
+ */
+class Blitter {
+public:
+	struct BlitterParams {
+		const void *sprite;      ///< Pointer to the sprite how ever the encoder stored it
+		const byte *remap;       ///< XXX -- Temporary storage for remap array
+
+		int skip_left, skip_top; ///< How much pixels of the source to skip on the left and top (based on zoom of dst)
+		int width, height;       ///< The width and height in pixels that needs to be drawn to dst
+		int sprite_width;        ///< Real width of the sprite
+		int sprite_height;       ///< Real height of the sprite
+		int left, top;           ///< The offset in the 'dst' in pixels to start drawing
+
+		void *dst;               ///< Destination buffer
+		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);
+
+	/**
+	 * Get the screen depth this blitter works for.
+	 *  This is either: 8, 16, 24 or 32.
+	 */
+	virtual uint8 GetScreenDepth() = 0;
+
+	/**
+	 * Draw an image to the screen, given an amount of params defined above.
+	 */
+	virtual void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) = 0;
+
+	/**
+	 * Draw a colortable to the screen. This is: the color of the screen is read
+	 *  and is looked-up in the palette to match a new color, which then is put
+	 *  on the screen again.
+	 * @param dst the destination pointer (video-buffer).
+	 * @param width the width of the buffer.
+	 * @param height the height of the buffer.
+	 * @param pal the palette to use.
+	 */
+	virtual void DrawColorMappingRect(void *dst, int width, int height, int pal) = 0;
+
+	/**
+	 * Convert a sprite from the loader to our own format.
+	 */
+	virtual Sprite *Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator) = 0;
+
+	/**
+	 * Move the destination pointer the requested amount x and y, keeping in mind
+	 *  any pitch and bpp of the renderer.
+	 * @param video The destination pointer (video-buffer) to scroll.
+	 * @param x How much you want to scroll to the right.
+	 * @param y How much you want to scroll to the bottom.
+	 * @return A new destination pointer moved the the requested place.
+	 */
+	virtual void *MoveTo(const void *video, int x, int y) = 0;
+
+	/**
+	 * Draw a pixel with a given color on the video-buffer.
+	 * @param video The destination pointer (video-buffer).
+	 * @param x The x position within video-buffer.
+	 * @param y The y position within video-buffer.
+	 * @param color A 8bpp mapping color.
+	 */
+	virtual void SetPixel(void *video, int x, int y, uint8 color) = 0;
+
+	/**
+	 * Draw a pixel with a given color on the video-buffer if there is currently a black pixel.
+	 * @param video The destination pointer (video-buffer).
+	 * @param x The x position within video-buffer.
+	 * @param y The y position within video-buffer.
+	 * @param color A 8bpp mapping color.
+	 */
+	virtual void SetPixelIfEmpty(void *video, int x, int y, uint8 color) = 0;
+
+	/**
+	 * Make a single horizontal line in a single color on the video-buffer.
+	 * @param video The destination pointer (video-buffer).
+	 * @param width The lenght of the line.
+	 * @param color A 8bpp mapping color.
+	 */
+	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.
+	 * @param video The destionation pointer (video-buffer).
+	 * @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.
+	 * @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) = 0;
+
+	/**
+	 * Copy from the screen to a buffer.
+	 * @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.
+	 * @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) = 0;
+
+	/**
+	 * 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 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.
+	 * @param width The width of the buffer-to-be.
+	 * @param height The height of the buffer-to-be.
+	 * @return The size needed for the buffer.
+	 */
+	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() { }
+};
+
+#endif /* BLITTER_BASE_HPP */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/factory.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,122 @@
+/* $Id$ */
+
+#ifndef BLITTER_FACTORY_HPP
+#define BLITTER_FACTORY_HPP
+
+#include "base.hpp"
+#include <string>
+#include <map>
+
+/**
+ * The base factory, keeping track of all blitters.
+ */
+class BlitterFactoryBase {
+private:
+	char *name;
+	typedef std::map<std::string, BlitterFactoryBase *> Blitters;
+
+	static Blitters &GetBlitters()
+	{
+		static Blitters &s_blitters = *new Blitters();
+		return s_blitters;
+	}
+
+	static Blitter **GetActiveBlitter()
+	{
+		static Blitter *s_blitter = NULL;
+		return &s_blitter;
+	}
+
+protected:
+	/**
+	 * Register a blitter internally, based on his name.
+	 * @param name the name of the blitter.
+	 * @note an assert() will be trigger if 2 blitters with the same name try to register.
+	 */
+	void RegisterBlitter(const char *name)
+	{
+		/* Don't register nameless Blitters */
+		if (name == NULL) return;
+
+		this->name = strdup(name);
+		std::pair<Blitters::iterator, bool> P = GetBlitters().insert(Blitters::value_type(name, this));
+		assert(P.second);
+	}
+
+public:
+	BlitterFactoryBase() :
+		name(NULL)
+	{}
+
+	virtual ~BlitterFactoryBase() { if (this->name != NULL) GetBlitters().erase(this->name); free(this->name); }
+
+	/**
+	 * Find the requested blitter and return his class.
+	 * @param name the blitter to select.
+	 * @post Sets the blitter so GetCurrentBlitter() returns it too.
+	 */
+	static Blitter *SelectBlitter(const char *name)
+	{
+		if (GetBlitters().size() == 0) return NULL;
+
+		Blitters::iterator it = GetBlitters().begin();
+		for (; it != GetBlitters().end(); it++) {
+			BlitterFactoryBase *b = (*it).second;
+			if (strcasecmp(name, b->name) == 0) {
+				Blitter *newb = b->CreateInstance();
+				delete *GetActiveBlitter();
+				*GetActiveBlitter() = newb;
+				return newb;
+			}
+		}
+		return NULL;
+	}
+
+	/**
+	 * Get the current active blitter (always set by calling SelectBlitter).
+	 */
+	static Blitter *GetCurrentBlitter()
+	{
+		return *GetActiveBlitter();
+	}
+
+
+	static char *GetBlittersInfo(char *p, const char *last)
+	{
+		p += snprintf(p, last - p, "List of blitters:\n");
+		Blitters::iterator it = GetBlitters().begin();
+		for (; it != GetBlitters().end(); it++) {
+			BlitterFactoryBase *b = (*it).second;
+			p += snprintf(p, last - p, "%18s: %s\n", b->name, b->GetDescription());
+		}
+		p += snprintf(p, last - p, "\n");
+
+		return p;
+	}
+
+	/**
+	 * Get a nice description of the blitter-class.
+	 */
+	virtual const char *GetDescription() = 0;
+
+	/**
+	 * Create an instance of this Blitter-class.
+	 */
+	virtual Blitter *CreateInstance() = 0;
+};
+
+/**
+ * A template factory, so ->GetName() works correctly. This because else some compiler will complain.
+ */
+template <class T>
+class BlitterFactory: public BlitterFactoryBase {
+public:
+	BlitterFactory() { this->RegisterBlitter(((T *)this)->GetName()); }
+
+	/**
+	 * Get the long, human readable, name for the Blitter-class.
+	 */
+	const char *GetName();
+};
+
+#endif /* BLITTER_FACTORY_HPP */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/null.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,18 @@
+#include "../stdafx.h"
+#include "../variables.h"
+#include "null.hpp"
+
+static FBlitter_Null iFBlitter_Null;
+
+Sprite *Blitter_Null::Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator)
+{
+	Sprite *dest_sprite;
+	dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite));
+
+	dest_sprite->height = sprite->height;
+	dest_sprite->width  = sprite->width;
+	dest_sprite->x_offs = sprite->x_offs;
+	dest_sprite->y_offs = sprite->y_offs;
+
+	return dest_sprite;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/null.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,40 @@
+/* $Id$ */
+
+/** @file null.hpp */
+
+#ifndef BLITTER_NULL_HPP
+#define BLITTER_NULL_HPP
+
+#include "base.hpp"
+#include "factory.hpp"
+
+class Blitter_Null : public Blitter {
+public:
+	/* virtual */ uint8 GetScreenDepth() { return 0; }
+	/* 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 */ 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 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> {
+public:
+	/* virtual */ const char *GetName() { return "null"; }
+	/* virtual */ const char *GetDescription() { return "Null Blitter (does nothing)"; }
+	/* virtual */ Blitter *CreateInstance() { return new Blitter_Null(); }
+};
+
+#endif /* BLITTER_NULL_HPP */
--- a/src/bridge_gui.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/bridge_gui.cpp	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/build_vehicle_gui.cpp	Sat Jul 14 19:42: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;
 }
@@ -670,7 +672,7 @@
 	int num_wagons  = 0;
 	buildvehicle_d *bv = &WP(w, buildvehicle_d);
 
-	bv->filter.railtype = (w->window_number == 0) ? RAILTYPE_END : GetRailType(w->window_number);
+	bv->filter.railtype = (w->window_number <= VEH_END) ? RAILTYPE_END : GetRailType(w->window_number);
 
 	EngList_RemoveAll(&bv->eng_list);
 
@@ -762,7 +764,8 @@
 	sel_id = INVALID_ENGINE;
 	for (eid = AIRCRAFT_ENGINES_INDEX; eid < AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES; eid++) {
 		if (!IsEngineBuildable(eid, VEH_AIRCRAFT, _local_player)) continue;
-		if (w->window_number != 0 && !IsAircraftBuildableAtStation(eid, w->window_number)) continue;
+		/* First VEH_END window_numbers are fake to allow a window open for all different types at once */
+		if (w->window_number > VEH_END && !IsAircraftBuildableAtStation(eid, w->window_number)) continue;
 
 		EngList_Add(&bv->eng_list, eid);
 		if (eid == bv->sel_engine) sel_id = eid;
@@ -853,7 +856,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);
@@ -884,7 +888,7 @@
 	const buildvehicle_d *bv = &WP(w, buildvehicle_d);
 	uint max = min(w->vscroll.pos + w->vscroll.cap, EngList_Count(&bv->eng_list));
 
-	SetWindowWidgetDisabledState(w, BUILD_VEHICLE_WIDGET_BUILD, w->window_number == 0);
+	SetWindowWidgetDisabledState(w, BUILD_VEHICLE_WIDGET_BUILD, w->window_number <= VEH_END);
 
 	SetVScrollCount(w, EngList_Count(&bv->eng_list));
 	SetDParam(0, bv->filter.railtype + STR_881C_NEW_RAIL_VEHICLES); // This should only affect rail vehicles
@@ -963,7 +967,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 +1001,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;
@@ -1043,12 +1056,17 @@
 {
 	buildvehicle_d *bv;
 	Window *w;
+	/* We want to be able to open both Available Train as Available Ships,
+	 *  so if tile == 0 (Available XXX Window), use 'type' as unique number.
+	 *  As it always is a low value, it won't collide with any real tile
+	 *  number. */
+	uint num = (tile == 0) ? (int)type : tile;
 
 	assert(IsPlayerBuildableVehicleType(type));
 
-	DeleteWindowById(WC_BUILD_VEHICLE, tile);
+	DeleteWindowById(WC_BUILD_VEHICLE, num);
 
-	w = AllocateWindowDescFront(&_build_vehicle_desc, tile);
+	w = AllocateWindowDescFront(&_build_vehicle_desc, num);
 
 	if (w == NULL) return;
 
--- a/src/callback_table.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/callback_table.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -33,6 +33,7 @@
 CommandCallback CcPlaceSign;
 CommandCallback CcTerraform;
 CommandCallback CcBuildTown;
+CommandCallback CcGiveMoney;
 
 /* rail_gui.cpp */
 CommandCallback CcPlaySound1E;
@@ -87,7 +88,8 @@
 	/* 0x17 */ CcCloneShip,
 	/* 0x18 */ CcCloneTrain,
 	/* 0x19 */ CcAI,
-	/* 0x1A */ CcCloneVehicle
+	/* 0x1A */ CcCloneVehicle,
+	/* 0x1B */ CcGiveMoney,
 };
 
 const int _callback_table_count = lengthof(_callback_table);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cargopacket.cpp	Sat Jul 14 19:42: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 <= 65535) {
+			(*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	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,219 @@
+/* $Id$ */
+
+/** @file cargotype.h */
+
+#ifndef CARGOPACKET_H
+#define CARGOPACKET_H
+
+#include <list>
+
+/**
+ * Container for cargo from the same location and time
+ */
+struct CargoPacket {
+	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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/clear_cmd.cpp	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/command.cpp	Sat Jul 14 19:42: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);
@@ -79,7 +79,7 @@
 DEF_COMMAND(CmdReverseTrainDirection);
 
 DEF_COMMAND(CmdModifyOrder);
-DEF_COMMAND(CmdSkipOrder);
+DEF_COMMAND(CmdSkipToOrder);
 DEF_COMMAND(CmdDeleteOrder);
 DEF_COMMAND(CmdInsertOrder);
 DEF_COMMAND(CmdChangeServiceInt);
@@ -176,6 +176,11 @@
 DEF_COMMAND(CmdRemoveAllVehiclesGroup);
 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[] = {
 	{CmdBuildRailroadTrack,                  0}, /*   0 */
@@ -222,7 +227,7 @@
 	{CmdReverseTrainDirection,               0}, /*  41 */
 
 	{CmdModifyOrder,                         0}, /*  42 */
-	{CmdSkipOrder,                           0}, /*  43 */
+	{CmdSkipToOrder,                         0}, /*  43 */
 	{CmdDeleteOrder,                         0}, /*  44 */
 	{CmdInsertOrder,                         0}, /*  45 */
 
@@ -328,6 +333,10 @@
 	{CmdAddSharedVehicleGroup,               0}, /* 124 */
 	{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 */
@@ -348,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 */
@@ -369,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;
 		}
@@ -391,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;
@@ -411,18 +420,18 @@
 	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;
 }
 
 /* toplevel network safe docommand function for the current player. must not be called recursively.
  * the callback is called when the command succeeded or failed. */
-bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback, uint32 cmd)
+bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback, uint32 cmd, bool my_cmd)
 {
-	int32 res = 0, res2;
+	CommandCost res, res2;
 	CommandProc *proc;
 	uint32 flags;
 	bool notest;
@@ -446,7 +455,7 @@
 	/** Spectator has no rights except for the (dedicated) server which
 	 * is/can be a spectator but as the server it can do anything */
 	if (_current_player == PLAYER_SPECTATOR && !_network_server) {
-		ShowErrorMessage(_error_message, error_part1, x, y);
+		if (my_cmd) ShowErrorMessage(_error_message, error_part1, x, y);
 		_cmd_text = NULL;
 		return false;
 	}
@@ -494,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;
@@ -510,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
@@ -549,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;
 		}
 	}
@@ -560,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 (my_cmd) ShowErrorMessage(STR_0003_NOT_ENOUGH_CASH_REQUIRES, error_part1, x, y);
+			if (res2.GetCost() == 0) goto callb_err;
 		}
 	}
 
@@ -576,7 +585,7 @@
 
 show_error:
 	/* show error message if the command fails? */
-	if (IsLocalPlayer() && error_part1 != 0) {
+	if (IsLocalPlayer() && error_part1 != 0 && my_cmd) {
 		ShowErrorMessage(_error_message, error_part1, x, y);
 	}
 
@@ -587,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/command.h	Sat Jul 14 19:42:58 2007 +0000
@@ -57,7 +57,7 @@
 	CMD_REVERSE_TRAIN_DIRECTION      =  41,
 
 	CMD_MODIFY_ORDER                 =  42,
-	CMD_SKIP_ORDER                   =  43,
+	CMD_SKIP_TO_ORDER                =  43,
 	CMD_DELETE_ORDER                 =  44,
 	CMD_INSERT_ORDER                 =  45,
 
@@ -143,6 +143,7 @@
 	CMD_MASS_START_STOP              = 117,
 	CMD_DEPOT_SELL_ALL_VEHICLES      = 118,
 	CMD_DEPOT_MASS_AUTOREPLACE       = 119,
+
 	CMD_CREATE_GROUP                 = 120,
 	CMD_DELETE_GROUP                 = 121,
 	CMD_RENAME_GROUP                 = 122,
@@ -150,6 +151,11 @@
 	CMD_ADD_SHARED_VEHICLE_GROUP     = 124,
 	CMD_REMOVE_ALL_VEHICLES_GROUP    = 125,
 	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 {
@@ -161,8 +167,6 @@
 	DC_AI_BUILDING     = 0x20, ///< special building rules for AI
 	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)
@@ -181,31 +185,24 @@
 	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);
-bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback, uint32 cmd);
+CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc);
+bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback, uint32 cmd, bool my_cmd = true);
 
 #ifdef ENABLE_NETWORK
 
@@ -216,6 +213,6 @@
 
 bool IsValidCommand(uint cmd);
 byte GetCommandFlags(uint cmd);
-int32 GetAvailableMoneyForCommand();
+Money GetAvailableMoneyForCommand();
 
 #endif /* COMMAND_H */
--- a/src/console.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/console.cpp	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/console_cmds.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -19,6 +19,7 @@
 #include "command.h"
 #include "settings.h"
 #include "fios.h"
+#include "fileio.h"
 #include "vehicle.h"
 #include "station.h"
 #include "strings.h"
@@ -173,7 +174,6 @@
 	return false;
 }
 
-extern bool SafeSaveOrLoad(const char *filename, int mode, int newgm);
 extern void BuildFileList();
 extern void SetFiosType(const byte fiostype);
 
@@ -186,16 +186,15 @@
 	}
 
 	if (argc == 2) {
-		char buf[200];
-
-		snprintf(buf, lengthof(buf), "%s%s%s.sav", _paths.save_dir, PATHSEP, argv[1]);
+		char *filename = str_fmt("%s.sav", argv[1]);
 		IConsolePrint(_icolour_def, "Saving map...");
 
-		if (SaveOrLoad(buf, SL_SAVE) != SL_OK) {
-			IConsolePrint(_icolour_err, "SaveMap failed");
+		if (SaveOrLoad(filename, SL_SAVE, SAVE_DIR) != SL_OK) {
+			IConsolePrint(_icolour_err, "Saving map failed");
 		} else {
-			IConsolePrintF(_icolour_def, "Map sucessfully saved to %s", buf);
+			IConsolePrintF(_icolour_def, "Map sucessfully saved to %s", filename);
 		}
+		free(filename);
 		return true;
 	}
 
@@ -941,6 +940,20 @@
 	return true;
 }
 
+DEF_CONSOLE_CMD(ConGetDate)
+{
+	if (argc == 0) {
+		IConsoleHelp("Returns the current date (day-month-year) of the game. Usage: 'getdate'");
+		return true;
+	}
+
+	YearMonthDay ymd;
+	ConvertDateToYMD(_date, &ymd);
+	IConsolePrintF(_icolour_def, "Date: %d-%d-%d", ymd.day, ymd.month + 1, ymd.year);
+	return true;
+}
+
+
 DEF_CONSOLE_CMD(ConAlias)
 {
 	IConsoleAlias *alias;
@@ -1235,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],
@@ -1496,6 +1509,7 @@
 	IConsoleCmdRegister("newgame",      ConNewGame);
 	IConsoleCmdRegister("restart",      ConRestart);
 	IConsoleCmdRegister("getseed",      ConGetSeed);
+	IConsoleCmdRegister("getdate",      ConGetDate);
 	IConsoleCmdRegister("quit",         ConExit);
 	IConsoleCmdRegister("resetengines", ConResetEngines);
 	IConsoleCmdRegister("return",       ConReturn);
--- a/src/date.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/date.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -13,6 +13,9 @@
 #include "network/network_server.h"
 #include "functions.h"
 #include "currency.h"
+#ifdef DEBUG_DUMP_COMMANDS
+#include "saveload.h"
+#endif
 
 Year      _cur_year;
 Month     _cur_month;
@@ -259,11 +262,18 @@
 
 	/* yes, call various monthly loops */
 	if (_game_mode != GM_MENU) {
+#ifdef DEBUG_DUMP_COMMANDS
+		char name[MAX_PATH];
+		snprintf(name, lengthof(name), "dmp_cmds_%d.sav", _date);
+		SaveOrLoad(name, SL_SAVE, AUTOSAVE_DIR);
+		debug_dump_commands("ddc:save:%s\n", name);
+#endif /* DUMP_COMMANDS */
 		if (_opt.autosave != 0 && (_cur_month % _autosave_months[_opt.autosave]) == 0) {
 			_do_autosave = true;
 			RedrawAutosave();
 		}
 
+		InvalidateWindowClasses(WC_CHEATS);
 		PlayersMonthlyLoop();
 		EnginesMonthlyLoop();
 		TownsMonthlyLoop();
--- a/src/debug.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/debug.h	Sat Jul 14 19:42:58 2007 +0000
@@ -93,7 +93,27 @@
 	#define OTTD_PRINTF64 "ll"
 #endif
 
-/* Used for profiling */
+/* Used for profiling
+ *
+ * Usage:
+ * TIC();
+ *   --Do your code--
+ * TOC("A name", 1);
+ *
+ * When you run the TIC() / TOC() multiple times, you can increase the '1'
+ *  to only display average stats every N values. Some things to know:
+ *
+ * for (int i = 0; i < 5; i++) {
+ *   TIC();
+ *     --Do yuor code--
+ *   TOC("A name", 5);
+ * }
+ *
+ * Is the correct usage for multiple TIC() / TOC() calls.
+ *
+ * TIC() / TOC() creates it's own block, so make sure not the mangle
+ *  it with an other block.
+ **/
 #define TIC() {\
 	extern uint64 _rdtsc();\
 	uint64 _xxx_ = _rdtsc();\
--- a/src/depot_gui.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/depot_gui.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -184,10 +184,10 @@
 			DrawStringRightAligned(w->widget[DEPOT_WIDGET_MATRIX].right - 1, y + 4, STR_TINY_BLACK, 0); // Draw the counter
 			break;
 
-		case VEH_ROAD:     DrawRoadVehImage( v, x + 24, sprite_y, WP(w, depot_d).sel); break;
+		case VEH_ROAD:     DrawRoadVehImage( v, x + 24, sprite_y, 1, WP(w, depot_d).sel); break;
 		case VEH_SHIP:     DrawShipImage(    v, x + 19, sprite_y - 1, WP(w, depot_d).sel); break;
 		case VEH_AIRCRAFT: {
-			const Sprite *spr = GetSprite(GetAircraftImage(v, DIR_W));
+			const Sprite *spr = GetSprite(v->GetImage(DIR_W));
 			DrawAircraftImage(v, x + 12,
 							  y + max(spr->height + spr->y_offs - 14, 0), // tall sprites needs an y offset
 							  WP(w, depot_d).sel);
@@ -438,15 +438,7 @@
 				WP(w,depot_d).sel = INVALID_VEHICLE;
 				TrainDepotMoveVehicle(v, sel, gdvp.head);
 			} else if (v != NULL) {
-				int image;
-
-				switch (WP(w, depot_d).type) {
-					case VEH_TRAIN:    image = GetTrainImage(v, DIR_W);    break;
-					case VEH_ROAD:     image = GetRoadVehImage(v, DIR_W);  break;
-					case VEH_SHIP:     image = GetShipImage(v, DIR_W);     break;
-					case VEH_AIRCRAFT: image = GetAircraftImage(v, DIR_W); break;
-					default: NOT_REACHED(); image = 0;
-				}
+				int image = v->GetImage(DIR_W);
 
 				WP(w, depot_d).sel = v->index;
 				SetWindowDirty(w);
--- a/src/disaster_cmd.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/disaster_cmd.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -742,9 +742,9 @@
 };
 
 
-void DisasterVehicle_Tick(Vehicle *v)
+void DisasterVehicle::Tick()
 {
-	_disastervehicle_tick_procs[v->subtype](v);
+	_disastervehicle_tick_procs[this->subtype](this);
 }
 
 
--- a/src/dock_gui.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/dock_gui.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -94,16 +94,19 @@
 
 static void BuildDocksClick_Depot(Window *w)
 {
+	if (!CanBuildVehicleInfrastructure(VEH_SHIP)) return;
 	if (HandlePlacePushButton(w, DTW_DEPOT, SPR_CURSOR_SHIP_DEPOT, 1, PlaceDocks_Depot)) ShowBuildDocksDepotPicker();
 }
 
 static void BuildDocksClick_Dock(Window *w)
 {
+	if (!CanBuildVehicleInfrastructure(VEH_SHIP)) return;
 	if (HandlePlacePushButton(w, DTW_STATION, SPR_CURSOR_DOCK, 3, PlaceDocks_Dock)) ShowBuildDockStationPicker();
 }
 
 static void BuildDocksClick_Buoy(Window *w)
 {
+	if (!CanBuildVehicleInfrastructure(VEH_SHIP)) return;
 	HandlePlacePushButton(w, DTW_BUOY, SPR_CURSOR_BOUY, 1, PlaceDocks_Buoy);
 }
 
@@ -124,6 +127,7 @@
 	switch (e->event) {
 	case WE_PAINT:
 		DrawWindowWidgets(w);
+		SetWindowWidgetsDisabledState(w, !CanBuildVehicleInfrastructure(VEH_SHIP), 7, 8, 9, WIDGET_LIST_END);
 		break;
 
 	case WE_CLICK:
@@ -235,18 +239,22 @@
 	case WE_CREATE: LowerWindowWidget(w, _station_show_coverage + 3); break;
 
 	case WE_PAINT: {
-		int rad;
+		int rad = (_patches.modified_catchment) ? CA_DOCK : 4;
 
 		if (WP(w, def_d).close) return;
 		DrawWindowWidgets(w);
 
-		rad = (_patches.modified_catchment) ? CA_DOCK : 4;
+		if (_station_show_coverage) {
+			SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad);
+		} else {
+			SetTileSelectSize(1, 1);
+		}
 
 		_thd.airport_template = false;  // ensure irregular airport support disabled
 
 		if (_station_show_coverage) SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad);
 
-		DrawStationCoverageAreaText(4, 50, (uint)-1, rad);
+		DrawStationCoverageAreaText(4, 50, SCT_ALL, rad);
 		break;
 	}
 
--- a/src/driver.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/driver.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -7,177 +7,15 @@
 #include "debug.h"
 #include "driver.h"
 #include "functions.h"
-#include "hal.h"
 #include "string.h"
 
-#include "music/bemidi.h"
-#include "music/dmusic.h"
-#include "music/extmidi.h"
-#include "music/null_m.h"
-#include "music/os2_m.h"
-#include "music/win32_m.h"
-#include "music/qtmidi.h"
-#include "music/libtimidity.h"
-
-#include "sound/null_s.h"
-#include "sound/sdl_s.h"
-#include "sound/cocoa_s.h"
-#include "sound/win32_s.h"
-
-#include "video/dedicated_v.h"
-#include "video/null_v.h"
-#include "video/sdl_v.h"
-#include "video/cocoa_v.h"
-#include "video/win32_v.h"
-
-struct DriverDesc {
-	const char* name;
-	const char* longname;
-	const HalCommonDriver* drv;
-};
-
-struct DriverClass {
-	const DriverDesc *descs;
-	const char *name;
-	const HalCommonDriver** drv;
-};
-
-
-#define M(x, y, z) { x, y, (const HalCommonDriver *)(void *)z }
-static const DriverDesc _music_driver_descs[] = {
-#ifdef __BEOS__
-	M("bemidi",  "BeOS MIDI Driver",        &_bemidi_music_driver),
-#endif
-#if defined(__OS2__) && !defined(__INNOTEK_LIBC__)
-	M("os2",     "OS/2 Music Driver",       &_os2_music_driver),
-#endif
-#ifdef WIN32_ENABLE_DIRECTMUSIC_SUPPORT
-	M("dmusic",  "DirectMusic MIDI Driver", &_dmusic_midi_driver),
-#endif
-#if defined(WIN32) && !defined(WINCE)
-	M("win32",   "Win32 MIDI Driver",       &_win32_music_driver),
-#endif
-#if defined(__APPLE__) && !defined(DEDICATED)
-	M("qt",      "QuickTime MIDI Driver",   &_qtime_music_driver),
-#endif
-#ifdef UNIX
-#if defined(LIBTIMIDITY)
-	M("libtimidity", "LibTimidity MIDI Driver", &_libtimidity_music_driver),
-#endif /* LIBTIMIDITY */
-#if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(PSP)
-	M("extmidi", "External MIDI Driver",    &_extmidi_music_driver),
-#endif
-#endif
-	M("null",    "Null Music Driver",       &_null_music_driver),
-	M(NULL, NULL, NULL)
-};
-
-static const DriverDesc _sound_driver_descs[] = {
-#if defined(WIN32) && !defined(WINCE)
-	M("win32", "Win32 WaveOut Driver", &_win32_sound_driver),
-#endif
-#ifdef WITH_SDL
-	M("sdl",   "SDL Sound Driver",     &_sdl_sound_driver),
-#endif
-#ifdef WITH_COCOA
-	M("cocoa", "Cocoa Sound Driver",   &_cocoa_sound_driver),
-#endif
-	M("null",  "Null Sound Driver",    &_null_sound_driver),
-	M(NULL, NULL, NULL)
-};
+#include "sound/sound_driver.hpp"
+#include "music/music_driver.hpp"
+#include "video/video_driver.hpp"
 
-static const DriverDesc _video_driver_descs[] = {
-#ifdef WIN32
-	M("win32",      "Win32 GDI Video Driver", &_win32_video_driver),
-#endif
-#ifdef WITH_SDL
-	M("sdl",        "SDL Video Driver",       &_sdl_video_driver),
-#endif
-#ifdef WITH_COCOA
-	M("cocoa",      "Cocoa Video Driver",       &_cocoa_video_driver),
-#endif
-	M("null",       "Null Video Driver",      &_null_video_driver),
-#ifdef ENABLE_NETWORK
-	M("dedicated",  "Dedicated Video Driver", &_dedicated_video_driver),
-#endif
-	M(NULL, NULL, NULL)
-};
-#undef M
-
-
-#define M(x, y, z) { x, y, (const HalCommonDriver **)(void *)z }
-static const DriverClass _driver_classes[] = {
-	M(_video_driver_descs, "video", &_video_driver),
-	M(_sound_driver_descs, "sound", &_sound_driver),
-	M(_music_driver_descs, "music", &_music_driver)
-};
-#undef M
-
-static const DriverDesc* GetDriverByName(const DriverDesc* dd, const char* name)
-{
-	for (; dd->name != NULL; dd++) {
-		if (strcmp(dd->name, name) == 0) return dd;
-	}
-	return NULL;
-}
-
-void LoadDriver(int driver, const char *name)
-{
-	const DriverClass *dc = &_driver_classes[driver];
-	const DriverDesc *dd;
-	const char *err;
-
-	if (*name == '\0') {
-		for (dd = dc->descs; dd->name != NULL; dd++) {
-			err = dd->drv->start(NULL);
-			if (err == NULL) break;
-			DEBUG(driver, 1, "Probing %s driver '%s' failed with error: %s",
-				dc->name, dd->name, err
-			);
-		}
-		if (dd->name == NULL) error("Couldn't find any suitable %s driver", dc->name);
-
-		DEBUG(driver, 1, "Successfully probed %s driver '%s'", dc->name, dd->name);
-
-		*dc->drv = dd->drv;
-	} else {
-		char* parm;
-		char buffer[256];
-		const char* parms[32];
-
-		/* Extract the driver name and put parameter list in parm */
-		ttd_strlcpy(buffer, name, sizeof(buffer));
-		parm = strchr(buffer, ':');
-		parms[0] = NULL;
-		if (parm != NULL) {
-			uint np = 0;
-			/* Tokenize the parm. */
-			do {
-				*parm++ = '\0';
-				if (np < lengthof(parms) - 1)
-					parms[np++] = parm;
-				while (*parm != '\0' && *parm != ',')
-					parm++;
-			} while (*parm == ',');
-			parms[np] = NULL;
-		}
-		dd = GetDriverByName(dc->descs, buffer);
-		if (dd == NULL)
-			error("No such %s driver: %s\n", dc->name, buffer);
-
-		if (*dc->drv != NULL) (*dc->drv)->stop();
-		*dc->drv = NULL;
-
-		err = dd->drv->start(parms);
-		if (err != NULL) {
-			error("Unable to load driver %s(%s). The error was: %s\n",
-				dd->name, dd->longname, err
-			);
-		}
-		*dc->drv = dd->drv;
-	}
-}
-
+SoundDriver *_sound_driver;
+MusicDriver *_music_driver;
+VideoDriver *_video_driver;
 
 static const char* GetDriverParam(const char* const* parm, const char* name)
 {
@@ -207,21 +45,3 @@
 	const char* p = GetDriverParam(parm, name);
 	return p != NULL ? atoi(p) : def;
 }
-
-
-char *GetDriverList(char* p, const char *last)
-{
-	const DriverClass* dc;
-
-	for (dc = _driver_classes; dc != endof(_driver_classes); dc++) {
-		const DriverDesc* dd;
-
-		p += snprintf(p, last - p, "List of %s drivers:\n", dc->name);
-		for (dd = dc->descs; dd->name != NULL; dd++) {
-			p += snprintf(p, last - p, "%10s: %s\n", dd->name, dd->longname);
-		}
-		p = strecpy(p, "\n", last);
-	}
-
-	return p;
-}
--- a/src/driver.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/driver.h	Sat Jul 14 19:42:58 2007 +0000
@@ -5,11 +5,209 @@
 #ifndef DRIVER_H
 #define DRIVER_H
 
-void LoadDriver(int driver, const char *name);
+#include "debug.h"
+#include "helpers.hpp"
+#include "string.h"
+#include <string>
+#include <map>
 
 bool GetDriverParamBool(const char* const* parm, const char* name);
 int GetDriverParamInt(const char* const* parm, const char* name, int def);
 
-char *GetDriverList(char *p, const char *last);
+class Driver {
+public:
+	virtual const char *Start(const char * const *parm) = 0;
+
+	virtual void Stop() = 0;
+
+	virtual ~Driver() { }
+
+	enum Type {
+		DT_BEGIN = 0,
+		DT_SOUND = 0,
+		DT_MUSIC,
+		DT_VIDEO,
+		DT_END,
+	};
+};
+
+DECLARE_POSTFIX_INCREMENT(Driver::Type);
+
+
+class DriverFactoryBase {
+private:
+	Driver::Type type;
+	char *name;
+	int priority;
+	typedef std::map<std::string, DriverFactoryBase *> Drivers;
+
+	static Drivers &GetDrivers()
+	{
+		static Drivers &s_drivers = *new Drivers();
+		return s_drivers;
+	}
+
+	static Driver **GetActiveDriver(Driver::Type type)
+	{
+		static Driver *s_driver[3] = { NULL, NULL, NULL };
+		return &s_driver[type];
+	}
+
+	static const char *GetDriverTypeName(Driver::Type type)
+	{
+		static const char *driver_type_name[] = { "sound", "music", "video" };
+		return driver_type_name[type];
+	}
+
+protected:
+	/**
+	 * Register a driver internally, based on its name.
+	 * @param name the name of the driver.
+	 * @note an assert() will be trigger if 2 driver with the same name try to register.
+	 */
+	void RegisterDriver(const char *name, Driver::Type type, int priority)
+	{
+		/* Don't register nameless Drivers */
+		if (name == NULL) return;
+
+		this->name = strdup(name);
+		this->type = type;
+		this->priority = priority;
+
+		/* Prefix the name with driver type to make it unique */
+		char buf[32];
+		strecpy(buf, GetDriverTypeName(type), lastof(buf));
+		strecpy(buf + 5, name, lastof(buf));
+
+		std::pair<Drivers::iterator, bool> P = GetDrivers().insert(Drivers::value_type(buf, this));
+		assert(P.second);
+	}
+
+public:
+	DriverFactoryBase() :
+		name(NULL)
+	{}
+
+	virtual ~DriverFactoryBase() { if (this->name != NULL) GetDrivers().erase(this->name); free(this->name); }
+
+	/**
+	 * Find the requested driver and return its class.
+	 * @param name the driver to select.
+	 * @post Sets the driver so GetCurrentDriver() returns it too.
+	 */
+	static Driver *SelectDriver(const char *name, Driver::Type type)
+	{
+		if (GetDrivers().size() == 0) return NULL;
+
+		if (*name == '\0') {
+			/* Probe for this driver */
+			for (int priority = 10; priority >= 0; priority--) {
+				Drivers::iterator it = GetDrivers().begin();
+				for (; it != GetDrivers().end(); ++it) {
+					DriverFactoryBase *d = (*it).second;
+
+					/* Check driver type */
+					if (d->type != type) continue;
+					if (d->priority != priority) continue;
+
+					Driver *newd = d->CreateInstance();
+					const char *err = newd->Start(NULL);
+					if (err == NULL) {
+						DEBUG(driver, 1, "Successfully probed %s driver '%s'", GetDriverTypeName(type), d->name);
+						delete *GetActiveDriver(type);
+						*GetActiveDriver(type) = newd;
+						return newd;
+					}
+
+					DEBUG(driver, 1, "Probing %s driver '%s' failed with error: %s", GetDriverTypeName(type), d->name, err);
+					delete newd;
+				}
+			}
+			error("Couldn't find any suitable %s driver", GetDriverTypeName(type));
+		} else {
+			char *parm;
+			char buffer[256];
+			const char *parms[32];
+
+			/* Extract the driver name and put parameter list in parm */
+			strecpy(buffer, name, lastof(buffer));
+			parm = strchr(buffer, ':');
+			parms[0] = NULL;
+			if (parm != NULL) {
+				uint np = 0;
+				/* Tokenize the parm. */
+				do {
+					*parm++ = '\0';
+					if (np < lengthof(parms) - 1)
+						parms[np++] = parm;
+					while (*parm != '\0' && *parm != ',')
+						parm++;
+				} while (*parm == ',');
+				parms[np] = NULL;
+			}
+
+			/* Find this driver */
+			Drivers::iterator it = GetDrivers().begin();
+			for (; it != GetDrivers().end(); ++it) {
+				DriverFactoryBase *d = (*it).second;
+
+				/* Check driver type */
+				if (d->type != type) continue;
+
+				/* Check driver name */
+				if (strcasecmp(buffer, d->name) != 0) continue;
+
+				/* Found our driver, let's try it */
+				Driver *newd = d->CreateInstance();
+
+				const char *err = newd->Start(parms);
+				if (err != NULL) {
+					delete newd;
+					error("Unable to load driver '%s'. The error was: %s", d->name, err);
+				}
+
+				DEBUG(driver, 1, "Successfully loaded %s driver '%s'", GetDriverTypeName(type), d->name);
+				delete *GetActiveDriver(type);
+				*GetActiveDriver(type) = newd;
+				return newd;
+			}
+			error("No such %s driver: %s\n", GetDriverTypeName(type), buffer);
+		}
+	}
+
+	/**
+	 * Build a human readable list of available drivers, grouped by type.
+	 */
+	static char *GetDriversInfo(char *p, const char *last)
+	{
+		for (Driver::Type type = Driver::DT_BEGIN; type != Driver::DT_END; type++) {
+			p += snprintf(p, last - p, "List of %s drivers:\n", GetDriverTypeName(type));
+
+			for (int priority = 10; priority >= 0; priority--) {
+				Drivers::iterator it = GetDrivers().begin();
+				for (; it != GetDrivers().end(); it++) {
+					DriverFactoryBase *d = (*it).second;
+					if (d->type != type) continue;
+					if (d->priority != priority) continue;
+					p += snprintf(p, last - p, "%18s: %s\n", d->name, d->GetDescription());
+				}
+			}
+
+			p += snprintf(p, last - p, "\n");
+		}
+
+		return p;
+	}
+
+	/**
+	 * Get a nice description of the driver-class.
+	 */
+	virtual const char *GetDescription() = 0;
+
+	/**
+	 * Create an instance of this driver-class.
+	 */
+	virtual Driver *CreateInstance() = 0;
+};
 
 #endif /* DRIVER_H */
--- a/src/dummy_land.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/dummy_land.cpp	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/economy.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -30,10 +30,13 @@
 #include "vehicle_gui.h"
 #include "ai/ai.h"
 #include "train.h"
+#include "roadveh.h"
 #include "aircraft.h"
 #include "newgrf_engine.h"
 #include "newgrf_sound.h"
 #include "newgrf_callbacks.h"
+#include "newgrf_industries.h"
+#include "newgrf_industrytiles.h"
 #include "unmovable.h"
 #include "date.h"
 #include "cargotype.h"
@@ -56,23 +59,21 @@
 
 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;
 		uint num = 0;
 
 		FOR_ALL_STATIONS(st) {
-			if (st->owner == owner) {
-				uint facil = st->facilities;
-				do num += (facil&1); while (facil >>= 1);
-			}
+			if (st->owner == owner) num += CountBitsSet(st->facilities);
 		}
 
-		value = num * _price.station_value * 25;
+		value.AddCost(num * _price.station_value * 25);
 	}
 
 	{
@@ -85,14 +86,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
@@ -111,7 +114,7 @@
 /* Count vehicles */
 	{
 		Vehicle *v;
-		int32 min_profit = 0;
+		Money min_profit = 0;
 		bool min_profit_first = true;
 		uint num = 0;
 
@@ -134,7 +137,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 */
@@ -143,35 +146,28 @@
 		const Station* st;
 
 		FOR_ALL_STATIONS(st) {
-			if (st->owner == owner) {
-				int facil = st->facilities;
-				do num += facil&1; while (facil>>=1);
-			}
+			if (st->owner == owner) num += CountBitsSet(st->facilities);
 		}
 		_score_part[owner][SCORE_STATIONS] = num;
 	}
 
 /* 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);
 		}
 	}
 
@@ -195,24 +191,21 @@
 
 /* Generate score for variety of cargo */
 	{
-		uint cargo = p->cargo_types;
-		uint num = 0;
-		do num += cargo&1; while (cargo>>=1);
+		uint num = CountBitsSet(p->cargo_types);
 		_score_part[owner][SCORE_CARGO] = num;
 		if (update) p->cargo_types = 0;
 	}
 
 /* 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.. */
@@ -266,7 +259,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);
@@ -280,7 +273,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);
@@ -294,8 +287,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) {
@@ -340,7 +332,7 @@
 			if (v->owner == new_player) {
 				switch (v->type) {
 					case VEH_TRAIN:    if (IsFrontEngine(v)) num_train++; break;
-					case VEH_ROAD:     num_road++; break;
+					case VEH_ROAD:     if (IsRoadVehFront(v)) num_road++; break;
 					case VEH_SHIP:     num_ship++; break;
 					case VEH_AIRCRAFT: if (IsNormalAircraft(v)) num_aircraft++; break;
 					default: break;
@@ -354,14 +346,37 @@
 					DeleteWindowById(WC_VEHICLE_VIEW, v->index);
 					DeleteWindowById(WC_VEHICLE_DETAILS, v->index);
 					DeleteWindowById(WC_VEHICLE_ORDERS, v->index);
-					DeleteVehicle(v);
+
+					if (v->IsPrimaryVehicle() || (v->type == VEH_TRAIN && IsFreeWagon(v))) {
+						switch (v->type) {
+							default: NOT_REACHED();
+
+							case VEH_TRAIN: {
+								Vehicle *u = v;
+								do {
+									Vehicle *next = GetNextVehicle(u);
+									DeleteVehicle(u);
+									u = next;
+								} while (u != NULL);
+							} break;
+
+							case VEH_ROAD:
+							case VEH_SHIP:
+								DeleteVehicle(v);
+								break;
+
+							case VEH_AIRCRAFT:
+								DeleteVehicleChain(v);
+								break;
+						}
+					}
 				} else {
 					v->owner = new_player;
 					v->group_id = DEFAULT_GROUP;
 					if (IsEngineCountable(v)) GetPlayer(new_player)->num_engines[v->engine_type]++;
 					switch (v->type) {
 						case VEH_TRAIN:    if (IsFrontEngine(v)) v->unitnumber = ++num_train; break;
-						case VEH_ROAD:     v->unitnumber = ++num_road; break;
+						case VEH_ROAD:     if (IsRoadVehFront(v)) v->unitnumber = ++num_road; break;
 						case VEH_SHIP:     v->unitnumber = ++num_ship; break;
 						case VEH_AIRCRAFT: if (IsNormalAircraft(v)) v->unitnumber = ++num_aircraft; break;
 						default: NOT_REACHED();
@@ -424,7 +439,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) {
@@ -452,7 +466,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
@@ -466,8 +480,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)) {
@@ -504,8 +517,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);
 
@@ -513,8 +525,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,
@@ -528,10 +539,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,
@@ -552,9 +562,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,
@@ -575,16 +584,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);
@@ -594,9 +601,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();
@@ -643,35 +649,57 @@
 	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()
 {
+	/* The cargo payment inflation differs from the normal inflation, so the
+	 * relative amount of money you make with a transport decreases slowly over
+	 * the 170 years. After a few hundred years we reach a level in which the
+	 * games will become unplayable as the maximum income will be less than
+	 * the minimum running cost.
+	 *
+	 * Furthermore there are a lot of inflation related overflows all over the
+	 * place. Solving them is hardly possible because inflation will always
+	 * reach the overflow threshold some day. So we'll just perform the
+	 * inflation mechanism during the first 170 years (the amount of years that
+	 * one had in the original TTD) and stop doing the inflation after that
+	 * because it only causes problems that can't be solved nicely and the
+	 * inflation doesn't add anything after that either; it even makes playing
+	 * it impossible due to the diverging cost and income rates.
+	 */
+	if ((_cur_year - _patches.starting_year) >= (ORIGINAL_MAX_YEAR - ORIGINAL_BASE_YEAR)) return;
+
 	/* Approximation for (100 + infl_amount)% ** (1 / 12) - 100%
 	 * scaled by 65536
 	 * 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);
+	AddSingleInflation(&_economy.max_loan_unround, &_economy.max_loan_unround_fract, inf);
 
-	if (_economy.max_loan + 50000 <= _economy.max_loan_unround)
-		_economy.max_loan += 50000;
+	if (_economy.max_loan + 50000 <= _economy.max_loan_unround) _economy.max_loan += 50000;
 
 	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
 		);
@@ -694,7 +722,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);
@@ -724,7 +752,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
@@ -807,10 +835,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) {
@@ -824,7 +852,7 @@
 		} else {
 			price >>= 8 - price_base_multiplier[i];
 		}
-		((int32*)&_price)[i] = price;
+		((Money*)&_price)[i] = price;
 		_price_frac[i] = 0;
 	}
 
@@ -969,12 +997,12 @@
 	/* Randomize cargo type */
 	if (HASBIT(Random(), 0) && ind->produced_cargo[1] != CT_INVALID) {
 		cargo = ind->produced_cargo[1];
-		trans = i->pct_transported[1];
-		total = i->total_production[1];
+		trans = i->last_month_pct_transported[1];
+		total = i->last_month_production[1];
 	} else {
 		cargo = ind->produced_cargo[0];
-		trans = i->pct_transported[0];
-		total = i->total_production[0];
+		trans = i->last_month_pct_transported[0];
+		total = i->last_month_production[0];
 	}
 
 	/* Quit if no production in this industry
@@ -1137,7 +1165,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;
@@ -1200,18 +1228,18 @@
 		indspec = GetIndustrySpec(ind->type);
 		uint i;
 
-		if (indspec->produced_cargo[0] == CT_INVALID) continue;
-
 		for (i = 0; i < lengthof(indspec->accepts_cargo); i++) {
-			if (cargo_type == indspec->accepts_cargo[i] &&
-					(indspec->input_cargo_multiplier[i][0] != 0 || indspec->input_cargo_multiplier[i][1] != 0)) {
-				break;
-			}
+			if (cargo_type == indspec->accepts_cargo[i]) break;
 		}
 
 		/* Check if matching cargo has been found */
 		if (i == lengthof(indspec->accepts_cargo)) continue;
 
+		if (HASBIT(indspec->callback_flags, CBM_IND_REFUSE_CARGO)) {
+			uint16 res = GetIndustryCallback(CBID_INDUSTRY_REFUSE_CARGO, 0, GetReverseCargoTranslation(cargo_type, indspec->grf_prop.grffile), ind, ind->type, ind->xy);
+			if (res == 0) continue;
+		}
+
 		uint dist = DistanceManhattan(ind->xy, xy);
 
 		if (dist < best_dist) {
@@ -1224,9 +1252,24 @@
 	/* Found one? */
 	if (best != NULL) {
 		indspec = GetIndustrySpec(best->type);
+		uint16 callback = indspec->callback_flags;
+
 		best->was_cargo_delivered = true;
-		best->cargo_waiting[0] = min(best->cargo_waiting[0] + (num_pieces * indspec->input_cargo_multiplier[accepted_cargo_index][0] / 256), 0xFFFF);
-		best->cargo_waiting[1] = min(best->cargo_waiting[1] + (num_pieces * indspec->input_cargo_multiplier[accepted_cargo_index][1] / 256), 0xFFFF);
+		best->last_cargo_accepted_at = _date;
+
+		if (HASBIT(callback, CBM_IND_PRODUCTION_CARGO_ARRIVAL) || HASBIT(callback, CBM_IND_PRODUCTION_256_TICKS)) {
+			best->incoming_cargo_waiting[accepted_cargo_index] = min(num_pieces + best->incoming_cargo_waiting[accepted_cargo_index], 0xFFFF);
+			if (HASBIT(callback, CBM_IND_PRODUCTION_CARGO_ARRIVAL)) {
+				IndustryProductionCallback(best, 0);
+			} else {
+				InvalidateWindow(WC_INDUSTRY_VIEW, best->index);
+			}
+		} else {
+			best->produced_cargo_waiting[0] = min(best->produced_cargo_waiting[0] + (num_pieces * indspec->input_cargo_multiplier[accepted_cargo_index][0] / 256), 0xFFFF);
+			best->produced_cargo_waiting[1] = min(best->produced_cargo_waiting[1] + (num_pieces * indspec->input_cargo_multiplier[accepted_cargo_index][1] / 256), 0xFFFF);
+		}
+
+		StartStopIndustryTileAnimation(best, IAT_INDUSTRY_RECEIVED_CARGO);
 	}
 }
 
@@ -1235,7 +1278,6 @@
 	Subsidy *s;
 	TileIndex xy;
 	Pair pair;
-	Player *p;
 
 	/* check if there is an already existing subsidy that applies to us */
 	for (s = _subsidies; s != endof(_subsidies); s++) {
@@ -1281,11 +1323,9 @@
 
 			/* Add a news item */
 			pair = SetupSubsidyDecodeParam(s, 0);
-			InjectDParam(2);
+			InjectDParam(1);
 
-			p = GetPlayer(_current_player);
-			SetDParam(0, p->name_1);
-			SetDParam(1, p->name_2);
+			SetDParam(0, _current_player);
 			AddNewsItem(
 				STR_2031_SERVICE_SUBSIDY_AWARDED + _opt.diff.subsidy_multiplier,
 				NEWS_FLAGS(NM_NORMAL, NF_TILE, NT_SUBSIDIES, 0),
@@ -1299,11 +1339,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);
 
@@ -1353,14 +1393,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);
@@ -1377,69 +1412,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;
 
-		SETBIT(v->vehicle_flags, VF_CARGO_UNLOADING);
 		/* All cargo has already been paid for, no need to pay again */
-		if (v->cargo_count == v->cargo_paid_for) continue;
+		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
+		const CargoList::List *cargos = v->cargo.Packets();
 
-			v->cargo_feeder_share = 0;   // clear transfer cost per vehicle
-			result |= 1;
-		} 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;
 		}
+		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;
@@ -1462,23 +1498,29 @@
 		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;
 	}
 
+	if (v->type == VEH_TRAIN && !IsTileType(v->tile, MP_STATION)) {
+		/* The train reversed in the station. Take the "easy" way
+		 * out and let the train just leave as it always did. */
+		SETBIT(v->vehicle_flags, VF_LOADING_FINISHED);
+		return;
+	}
+
 	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;
 
@@ -1495,36 +1537,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 {
@@ -1539,11 +1564,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) */
@@ -1553,9 +1575,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;
 
@@ -1568,14 +1587,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 */
@@ -1588,11 +1607,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
@@ -1604,32 +1623,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);
@@ -1643,14 +1647,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
@@ -1665,7 +1667,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;
 				}
@@ -1687,6 +1689,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) {
@@ -1697,7 +1710,7 @@
 		InvalidateWindow(v->GetVehicleListWindowClass(), v->owner);
 		InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
 
-		st->MarkTilesDirty();
+		st->MarkTilesDirty(true);
 		v->MarkDirty();
 
 		if (result & 2) InvalidateWindow(WC_STATION_VIEW, last_visited);
@@ -1713,7 +1726,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) {
@@ -1738,11 +1751,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 */
@@ -1756,14 +1768,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;
 
@@ -1779,10 +1792,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;
@@ -1794,12 +1807,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;
@@ -1825,10 +1838,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;
@@ -1837,7 +1850,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;
@@ -1849,7 +1862,7 @@
 		*b = PLAYER_SPECTATOR;
 		InvalidateWindow(WC_COMPANY, p1);
 	}
-	return cost;
+	return CommandCost(cost);
 }
 
 /** Buy up another company.
@@ -1861,7 +1874,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;
@@ -1880,13 +1893,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);
 }
 
@@ -1894,18 +1908,22 @@
 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_CONDVAR(Economy, max_loan_unround_fract, SLE_UINT16,           70, 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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/economy.h	Sat Jul 14 19:42:58 2007 +0000
@@ -9,8 +9,9 @@
 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
+	uint16 max_loan_unround_fract; ///< Fraction of the unrounded max loan
 	int fluct;
 	byte interest_rate;     ///< Interest
 	byte infl_amount;       ///< inflation amount
@@ -65,7 +66,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/elrail.cpp	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/engine.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -21,6 +21,8 @@
 #include "date.h"
 #include "table/engines.h"
 #include "group.h"
+#include "string.h"
+#include "strings.h"
 
 EngineInfo _engine_info[TOTAL_NUM_ENGINES];
 RailVehicleInfo _rail_vehicle_info[NUM_TRAIN_ENGINES];
@@ -266,7 +268,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 +278,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) */
@@ -368,19 +370,34 @@
 	}
 }
 
+static bool IsUniqueEngineName(const char *name)
+{
+	char buf[512];
+
+	for (EngineID i = 0; i < TOTAL_NUM_ENGINES; i++) {
+		SetDParam(0, i);
+		GetString(buf, STR_ENGINE_NAME, lastof(buf));
+		if (strcmp(buf, name) == 0) return false;
+	}
+
+	return true;
+}
+
 /** Rename an engine.
  * @param tile unused
  * @param flags operation to perfom
  * @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;
 
-	if (!IsEngineIndex(p1) || _cmd_text[0] == '\0') return CMD_ERROR;
+	if (!IsEngineIndex(p1) || StrEmpty(_cmd_text)) return CMD_ERROR;
 
-	str = AllocateNameUnique(_cmd_text, 0);
+	if (!IsUniqueEngineName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+
+	str = AllocateName(_cmd_text, 0);
 	if (str == 0) return CMD_ERROR;
 
 	if (flags & DC_EXEC) {
@@ -393,7 +410,7 @@
 		DeleteName(str);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -533,7 +550,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 +558,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 +574,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 +595,7 @@
 				}
 				DeleteEngineRenew(er);
 			}
-			return 0;
+			return CommandCost();
 		}
 		prev = er;
 		er = er->next;
--- a/src/engine.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/engine.h	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/engine_gui.cpp	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/fileio.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -11,7 +11,9 @@
 #include "variables.h"
 #include "debug.h"
 #include "fios.h"
-#ifndef WIN32
+#ifdef WIN32
+#include <windows.h>
+#else
 #include <pwd.h>
 #include <unistd.h>
 #include <sys/stat.h>
@@ -28,11 +30,12 @@
 	byte *buffer, *buffer_end;          ///< position pointer in local buffer and last valid byte of buffer
 	uint32 pos;                         ///< current (system) position in file
 	FILE *cur_fh;                       ///< current file handle
+	const char *filename;               ///< current filename
 	FILE *handles[MAX_HANDLES];         ///< array of file handles we can have open
 	byte buffer_start[FIO_BUFFER_SIZE]; ///< local buffer when read from file
+	const char *filenames[MAX_HANDLES]; ///< array of filenames we (should) have open
 #if defined(LIMITED_FDS)
 	uint open_handles;                  ///< current amount of open handles
-	const char *filename[MAX_HANDLES];  ///< array of filenames we (should) have open
 	uint usage_count[MAX_HANDLES];      ///< count how many times this file has been opened
 #endif /* LIMITED_FDS */
 };
@@ -45,6 +48,11 @@
 	return _fio.pos + (_fio.buffer - _fio.buffer_start) - FIO_BUFFER_SIZE;
 }
 
+const char *FioGetFilename()
+{
+	return _fio.filename;
+}
+
 void FioSeekTo(uint32 pos, int mode)
 {
 	if (mode == SEEK_CUR) pos += FioGetPos();
@@ -76,6 +84,7 @@
 	f = _fio.handles[pos >> 24];
 	assert(f != NULL);
 	_fio.cur_fh = f;
+	_fio.filename = _fio.filenames[pos >> 24];
 	FioSeekTo(GB(pos, 0, 24), SEEK_SET);
 }
 
@@ -174,60 +183,130 @@
 
 	FioCloseFile(slot); // if file was opened before, close it
 	_fio.handles[slot] = f;
+	_fio.filenames[slot] = filename;
 #if defined(LIMITED_FDS)
-	_fio.filename[slot] = filename;
 	_fio.usage_count[slot] = 0;
 	_fio.open_handles++;
 #endif /* LIMITED_FDS */
 	FioSeekToFile(slot << 24);
 }
 
+const char *_subdirs[NUM_SUBDIRS] = {
+	"",
+	"save" PATHSEP,
+	"save" PATHSEP "autosave" PATHSEP,
+	"scenario" PATHSEP,
+	"scenario" PATHSEP "heightmap" PATHSEP,
+	"gm" PATHSEP,
+	"data" PATHSEP,
+	"lang" PATHSEP
+};
+
+const char *_searchpaths[NUM_SEARCHPATHS];
+
 /**
  * Check whether the given file exists
  * @param filename the file to try for existance
+ * @param subdir the subdirectory to look in
  * @return true if and only if the file can be opened
  */
-bool FioCheckFileExists(const char *filename)
+bool FioCheckFileExists(const char *filename, Subdirectory subdir)
 {
-	FILE *f = FioFOpenFile(filename);
+	FILE *f = FioFOpenFile(filename, "rb", subdir);
 	if (f == NULL) return false;
 
 	fclose(f);
 	return true;
 }
 
-/**
- * Opens the file with the given name
- * @param filename the file to open (in either data_dir or second_data_dir)
- * @return the opened file or NULL when it failed.
- */
-FILE *FioFOpenFile(const char *filename)
+char *FioGetFullPath(char *buf, size_t buflen, Searchpath sp, Subdirectory subdir, const char *filename)
 {
-	FILE *f;
-	char buf[MAX_PATH];
+	assert(subdir < NUM_SUBDIRS);
+	assert(sp < NUM_SEARCHPATHS);
 
-	if (strrchr(filename, PATHSEPCHAR) == NULL) {
-		snprintf(buf, lengthof(buf), "%s%s", _paths.data_dir, filename);
-	} else {
-		ttd_strlcpy(buf, filename, lengthof(buf));
+	snprintf(buf, buflen, "%s%s%s", _searchpaths[sp], _subdirs[subdir], filename);
+	return buf;
+}
+
+char *FioFindFullPath(char *buf, size_t buflen, Subdirectory subdir, const char *filename)
+{
+	Searchpath sp;
+	assert(subdir < NUM_SUBDIRS);
+
+	FOR_ALL_SEARCHPATHS(sp) {
+		FioGetFullPath(buf, buflen, sp, subdir, filename);
+		if (FileExists(buf)) break;
 	}
 
-	f = fopen(buf, "rb");
+	return buf;
+}
+
+char *FioAppendDirectory(char *buf, size_t buflen, Searchpath sp, Subdirectory subdir)
+{
+	assert(subdir < NUM_SUBDIRS);
+	assert(sp < NUM_SEARCHPATHS);
+
+	snprintf(buf, buflen, "%s%s", _searchpaths[sp], _subdirs[subdir]);
+	return buf;
+}
+
+char *FioGetDirectory(char *buf, size_t buflen, Subdirectory subdir)
+{
+	Searchpath sp;
+
+	/* Find and return the first valid directory */
+	FOR_ALL_SEARCHPATHS(sp) {
+		char *ret = FioAppendDirectory(buf, buflen, sp, subdir);
+		if (FileExists(buf)) return ret;
+	}
+
+	/* Could not find the directory, fall back to a base path */
+	ttd_strlcpy(buf, _personal_dir, buflen);
+
+	return buf;
+}
+
+FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath sp, Subdirectory subdir)
+{
+#if defined(WIN32) && defined(UNICODE)
+	/* fopen is implemented as a define with ellipses for
+	 * Unicode support (prepend an L). As we are not sending
+	 * a string, but a variable, it 'renames' the variable,
+	 * so make that variable to makes it compile happily */
+	wchar_t Lmode[5];
+	MultiByteToWideChar(CP_ACP, 0, mode, -1, Lmode, lengthof(Lmode));
+#endif
+	FILE *f = NULL;
+	char buf[MAX_PATH];
+
+	if (subdir == NO_DIRECTORY) {
+		ttd_strlcpy(buf, filename, lengthof(buf));
+	} else {
+		snprintf(buf, lengthof(buf), "%s%s%s", _searchpaths[sp], _subdirs[subdir], filename);
+	}
+
+	f = fopen(buf, mode);
 #if !defined(WIN32)
 	if (f == NULL) {
-		strtolower(strrchr(buf, PATHSEPCHAR));
-		f = fopen(buf, "rb");
-
-#if defined SECOND_DATA_DIR
-		/* tries in the 2nd data directory */
-		if (f == NULL) {
-			snprintf(buf, lengthof(buf), "%s%s", _paths.second_data_dir, filename);
-			strtolower(buf + strlen(_paths.second_data_dir) - 1);
-			f = fopen(buf, "rb");
-		}
-#endif
+		strtolower(buf + strlen(_searchpaths[sp]) - 1);
+		f = fopen(buf, mode);
 	}
 #endif
+	return f;
+}
+
+/** Opens OpenTTD files somewhere in a personal or global directory */
+FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir)
+{
+	FILE *f = NULL;
+	Searchpath sp;
+
+	assert(subdir < NUM_SUBDIRS || subdir == NO_DIRECTORY);
+
+	FOR_ALL_SEARCHPATHS(sp) {
+		f = FioFOpenFileSp(filename, mode, sp, subdir);
+		if (f != NULL || subdir == NO_DIRECTORY) break;
+	}
 
 	return f;
 }
@@ -264,10 +343,36 @@
 	}
 }
 
+/**
+ * Allocates and files a variable with the full path
+ * based on the given directory.
+ * @param dir the directory to base the path on
+ * @return the malloced full path
+ */
+char *BuildWithFullPath(const char *dir)
+{
+	char *dest = MallocT<char>(MAX_PATH);
+	ttd_strlcpy(dest, dir, MAX_PATH);
+
+	/* Check if absolute or relative path */
+	const char *s = strchr(dest, PATHSEPCHAR);
+
+	/* Add absolute path */
+	if (s == NULL || dest != s) {
+		getcwd(dest, MAX_PATH);
+		AppendPathSeparator(dest, MAX_PATH);
+		ttd_strlcat(dest, dir, MAX_PATH);
+	}
+	AppendPathSeparator(dest, MAX_PATH);
+
+	return dest;
+}
+
 #if defined(WIN32) || defined(WINCE)
 /**
  * Determine the base (personal dir and game data dir) paths
- * @param exe the path to the executable
+ * @param exe the path from the current path to the executable
+ * @note defined in the OS related files (os2.cpp, win32.cpp, unix.cpp etc)
  */
 extern void DetermineBasePaths(const char *exe);
 #else /* defined(WIN32) || defined(WINCE) */
@@ -304,86 +409,132 @@
  */
 void DetermineBasePaths(const char *exe)
 {
-	/* Change the working directory to enable doubleclicking in UIs */
-	ChangeWorkingDirectory(exe);
-
-	_paths.game_data_dir = MallocT<char>(MAX_PATH);
-	ttd_strlcpy(_paths.game_data_dir, GAME_DATA_DIR, MAX_PATH);
-#if defined(SECOND_DATA_DIR)
-	_paths.second_data_dir = MallocT<char>(MAX_PATH);
-	ttd_strlcpy(_paths.second_data_dir, SECOND_DATA_DIR, MAX_PATH);
+	char tmp[MAX_PATH];
+#if defined(__MORPHOS__) || defined(__AMIGA__) || !defined(WITH_PERSONAL_DIR)
+	_searchpaths[SP_PERSONAL_DIR] = NULL;
 #else
-	_paths.second_data_dir = NULL;
-#endif
-
-#if defined(USE_HOMEDIR)
 	const char *homedir = getenv("HOME");
 
 	if (homedir == NULL) {
 		const struct passwd *pw = getpwuid(getuid());
-		if (pw != NULL) homedir = pw->pw_dir;
+		homedir = (pw == NULL) ? "" : pw->pw_dir;
 	}
 
-	_paths.personal_dir = str_fmt("%s" PATHSEP "%s", homedir, PERSONAL_DIR);
-#else /* not defined(USE_HOMEDIR) */
-	_paths.personal_dir = MallocT<char>(MAX_PATH);
-	ttd_strlcpy(_paths.personal_dir, PERSONAL_DIR, MAX_PATH);
-
-	/* check if absolute or relative path */
-	const char *s = strchr(_paths.personal_dir, PATHSEPCHAR);
+	snprintf(tmp, MAX_PATH, "%s" PATHSEP "%s", homedir, PERSONAL_DIR);
+	AppendPathSeparator(tmp, MAX_PATH);
 
-	/* add absolute path */
-	if (s == NULL || _paths.personal_dir != s) {
-		getcwd(_paths.personal_dir, MAX_PATH);
-		AppendPathSeparator(_paths.personal_dir, MAX_PATH);
-		ttd_strlcat(_paths.personal_dir, PERSONAL_DIR, MAX_PATH);
-	}
-#endif /* defined(USE_HOMEDIR) */
+	_searchpaths[SP_PERSONAL_DIR] = strdup(tmp);
+#endif
+	_searchpaths[SP_SHARED_DIR] = NULL;
 
-	AppendPathSeparator(_paths.personal_dir,  MAX_PATH);
-	AppendPathSeparator(_paths.game_data_dir, MAX_PATH);
+#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);
+	getcwd(tmp, MAX_PATH);
+	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();
+#else
+	_searchpaths[SP_APPLICATION_BUNDLE_DIR] = NULL;
+#endif
 }
 #endif /* defined(WIN32) || defined(WINCE) */
 
+char *_personal_dir;
+
 /**
  * Acquire the base paths (personal dir and game data dir),
  * fill all other paths (save dir, autosave dir etc) and
  * make the save and scenario directories.
- * @param exe the path to the executable
- * @todo for save_dir, autosave_dir, scenario_dir and heightmap_dir the
- *       assumption is that there is no path separator, however for gm_dir
- *       lang_dir and data_dir that assumption is made.
- *       This inconsistency should be resolved.
+ * @param exe the path from the current path to the executable
  */
 void DeterminePaths(const char *exe)
 {
 	DetermineBasePaths(exe);
 
-	_paths.save_dir      = str_fmt("%ssave" PATHSEP, _paths.personal_dir);
-	_paths.autosave_dir  = str_fmt("%s" PATHSEP "autosave" PATHSEP, _paths.save_dir);
-	_paths.scenario_dir  = str_fmt("%sscenario" PATHSEP, _paths.personal_dir);
-	_paths.heightmap_dir = str_fmt("%s" PATHSEP "heightmap" PATHSEP, _paths.scenario_dir);
-	_paths.gm_dir        = str_fmt("%sgm" PATHSEP, _paths.game_data_dir);
-	_paths.data_dir      = str_fmt("%sdata" PATHSEP, _paths.game_data_dir);
-#if defined(CUSTOM_LANG_DIR)
-	/* Sets the search path for lng files to the custom one */
-	_paths.lang_dir = MallocT<char>(MAX_PATH);
-	ttd_strlcpy(_paths.lang_dir, CUSTOM_LANG_DIR, MAX_PATH);
-	AppendPathSeparator(_paths.lang_dir, MAX_PATH);
-#else
-	_paths.lang_dir = str_fmt("%slang" PATHSEP, _paths.game_data_dir);
-#endif
+	Searchpath sp;
+	FOR_ALL_SEARCHPATHS(sp) DEBUG(misc, 4, "%s added as search path", _searchpaths[sp]);
 
-	if (_config_file == NULL) {
-		_config_file = str_fmt("%sopenttd.cfg", _paths.personal_dir);
+	if (_config_file != NULL) {
+		_personal_dir = strdup(_config_file);
+		char *end = strrchr(_personal_dir , PATHSEPCHAR);
+		if (end == NULL) {
+			_personal_dir[0] = '\0';
+		} else {
+			end[1] = '\0';
+		}
+	} else {
+		char personal_dir[MAX_PATH];
+		FioFindFullPath(personal_dir, lengthof(personal_dir), BASE_DIR, "openttd.cfg");
+
+		if (FileExists(personal_dir)) {
+			char *end = strrchr(personal_dir, PATHSEPCHAR);
+			if (end != NULL) end[1] = '\0';
+			_personal_dir = strdup(personal_dir);
+			_config_file = str_fmt("%sopenttd.cfg", _personal_dir);
+		} else {
+			static const Searchpath new_openttd_cfg_order[] = {
+					SP_PERSONAL_DIR, SP_BINARY_DIR, SP_WORKING_DIR, SP_SHARED_DIR, SP_INSTALLATION_DIR
+				};
+
+			for (uint i = 0; i < lengthof(new_openttd_cfg_order); i++) {
+				if (IsValidSearchPath(new_openttd_cfg_order[i])) {
+					_personal_dir = strdup(_searchpaths[new_openttd_cfg_order[i]]);
+					_config_file = str_fmt("%sopenttd.cfg", _personal_dir);
+					break;
+				}
+			}
+		}
 	}
 
-	_highscore_file = str_fmt("%shs.dat", _paths.personal_dir);
-	_log_file = str_fmt("%sopenttd.log",  _paths.personal_dir);
+	DEBUG(misc, 3, "%s found as personal directory", _personal_dir);
 
-	/* Make (auto)save and scenario folder */
-	FioCreateDirectory(_paths.save_dir);
-	FioCreateDirectory(_paths.autosave_dir);
-	FioCreateDirectory(_paths.scenario_dir);
-	FioCreateDirectory(_paths.heightmap_dir);
+	_highscore_file = str_fmt("%shs.dat", _personal_dir);
+	_log_file = str_fmt("%sopenttd.log",  _personal_dir);
+
+	char *save_dir     = str_fmt("%s%s", _personal_dir, FioGetSubdirectory(SAVE_DIR));
+	char *autosave_dir = str_fmt("%s%s", _personal_dir, FioGetSubdirectory(AUTOSAVE_DIR));
+
+	/* Make the necessary folders */
+	FioCreateDirectory(_personal_dir);
+	FioCreateDirectory(save_dir);
+	FioCreateDirectory(autosave_dir);
+
+	free(save_dir);
+	free(autosave_dir);
 }
+
+/**
+ * Sanitizes a filename, i.e. removes all illegal characters from it.
+ * @param filename the "\0" terminated filename
+ */
+void SanitizeFilename(char *filename)
+{
+	for (; *filename != '\0'; filename++) {
+		switch (*filename) {
+			/* 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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/fileio.h	Sat Jul 14 19:42:58 2007 +0000
@@ -5,9 +5,12 @@
 #ifndef FILEIO_H
 #define FILEIO_H
 
+#include "helpers.hpp"
+
 void FioSeekTo(uint32 pos, int mode);
 void FioSeekToFile(uint32 pos);
 uint32 FioGetPos();
+const char *FioGetFilename();
 byte FioReadByte();
 uint16 FioReadWord();
 uint32 FioReadDword();
@@ -15,12 +18,79 @@
 void FioOpenFile(int slot, const char *filename);
 void FioReadBlock(void *ptr, uint size);
 void FioSkipBytes(int n);
-
-FILE *FioFOpenFile(const char *filename);
-bool FioCheckFileExists(const char *filename);
 void FioCreateDirectory(const char *filename);
 
+/**
+ * The different kinds of subdirectories OpenTTD uses
+ */
+enum Subdirectory {
+	BASE_DIR,      ///< Base directory for all subdirectories
+	SAVE_DIR,      ///< Base directory for all savegames
+	AUTOSAVE_DIR,  ///< Subdirectory of save for autosaves
+	SCENARIO_DIR,  ///< Base directory for all scenarios
+	HEIGHTMAP_DIR, ///< Subdirectory of scenario for heightmaps
+	GM_DIR,        ///< Subdirectory for all music
+	DATA_DIR,      ///< Subdirectory for all data (GRFs, sample.cat, intro game)
+	LANG_DIR,      ///< Subdirectory for all translation files
+	NUM_SUBDIRS,   ///< Number of subdirectories
+	NO_DIRECTORY,  ///< A path without any base directory
+};
+
+/**
+ * Types of searchpaths OpenTTD might use
+ */
+enum Searchpath {
+	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
+};
+
+DECLARE_POSTFIX_INCREMENT(Searchpath);
+
+/**
+ * The searchpaths OpenTTD could search through.
+ * At least one of the slots has to be filled with a path.
+ * NULL paths tell that there is no such path for the
+ * current operating system.
+ */
+extern const char *_searchpaths[NUM_SEARCHPATHS];
+
+/**
+ * Checks whether the given search path is a valid search path
+ * @param sp the search path to check
+ * @return true if the search path is valid
+ */
+static inline bool IsValidSearchPath(Searchpath sp)
+{
+	return sp < NUM_SEARCHPATHS && _searchpaths[sp] != NULL;
+}
+
+/** Iterator for all the search paths */
+#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);
+char *FioGetFullPath(char *buf, size_t buflen, Searchpath sp, Subdirectory subdir, const char *filename);
+char *FioFindFullPath(char *buf, size_t buflen, Subdirectory subdir, const char *filename);
+char *FioAppendDirectory(char *buf, size_t buflen, Searchpath sp, Subdirectory subdir);
+char *FioGetDirectory(char *buf, size_t buflen, Subdirectory subdir);
+
+static inline const char *FioGetSubdirectory(Subdirectory subdir)
+{
+	extern const char *_subdirs[NUM_SUBDIRS];
+	assert(subdir < NUM_SUBDIRS);
+	return _subdirs[subdir];
+}
+
+void SanitizeFilename(char *filename);
 void AppendPathSeparator(char *buf, size_t buflen);
 void DeterminePaths(const char *exe);
 
+extern char *_personal_dir; ///< custom directory for personal settings, saves, newgrf, etc.
+
 #endif /* FILEIO_H */
--- a/src/fios.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/fios.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -6,7 +6,6 @@
 
 #include "stdafx.h"
 #include "openttd.h"
-#include "hal.h"
 #include "string.h"
 #include "variables.h"
 #include "functions.h"
@@ -14,6 +13,7 @@
 #include "helpers.hpp"
 #include "table/strings.h"
 #include "fios.h"
+#include "fileio.h"
 #include <sys/types.h>
 #include <sys/stat.h>
 
@@ -334,7 +334,7 @@
 
 	if (_fios_save_path == NULL) {
 		_fios_save_path = MallocT<char>(MAX_PATH);
-		ttd_strlcpy(_fios_save_path, _paths.save_dir, MAX_PATH);
+		FioGetDirectory(_fios_save_path, MAX_PATH, SAVE_DIR);
 	}
 
 	_fios_path = _fios_save_path;
@@ -380,9 +380,10 @@
 {
 	static char *_fios_scn_path = NULL;
 
+	/* Copy the default path on first run or on 'New Game' */
 	if (_fios_scn_path == NULL) {
 		_fios_scn_path = MallocT<char>(MAX_PATH);
-		ttd_strlcpy(_fios_scn_path, _paths.scenario_dir, MAX_PATH);
+		FioGetDirectory(_fios_scn_path, MAX_PATH, SCENARIO_DIR);
 	}
 
 	_fios_path = _fios_scn_path;
@@ -413,7 +414,7 @@
 
 	if (_fios_hmap_path == NULL) {
 		_fios_hmap_path = MallocT<char>(MAX_PATH);
-		strcpy(_fios_hmap_path, _paths.heightmap_dir);
+		FioGetDirectory(_fios_hmap_path, MAX_PATH, HEIGHTMAP_DIR);
 	}
 
 	_fios_path = _fios_hmap_path;
--- a/src/fontcache.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/fontcache.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -14,6 +14,8 @@
 #include "string.h"
 #include "fontcache.h"
 #include "helpers.hpp"
+#include "spriteloader/spriteloader.hpp"
+#include "blitter/factory.hpp"
 
 #ifdef WITH_FREETYPE
 
@@ -361,6 +363,26 @@
 	_glyph_ptr[size][GB(key, 8, 8)][GB(key, 0, 8)].width  = glyph->width;
 }
 
+void *AllocateFont(size_t size)
+{
+	return malloc(size);
+}
+
+
+/* Check if a glyph should be rendered with antialiasing */
+static bool GetFontAAState(FontSize size)
+{
+	/* AA is only supported for 32 bpp */
+	if (BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() != 32) return false;
+
+	switch (size) {
+		default: NOT_REACHED();
+		case FS_NORMAL: return _freetype.medium_aa;
+		case FS_SMALL:  return _freetype.small_aa;
+		case FS_LARGE:  return _freetype.large_aa;
+	}
+}
+
 
 const Sprite *GetGlyph(FontSize size, WChar key)
 {
@@ -368,7 +390,7 @@
 	FT_GlyphSlot slot;
 	GlyphEntry new_glyph;
 	GlyphEntry *glyph;
-	Sprite *sprite;
+	SpriteLoader::Sprite sprite;
 	int width;
 	int height;
 	int x;
@@ -390,29 +412,31 @@
 
 	slot = face->glyph;
 
+	bool aa = GetFontAAState(size);
+
 	FT_Load_Char(face, key, FT_LOAD_DEFAULT);
-	FT_Render_Glyph(face->glyph, FT_RENDER_MODE_MONO);
+	FT_Render_Glyph(face->glyph, aa ? FT_RENDER_MODE_NORMAL : FT_RENDER_MODE_MONO);
 
 	/* Add 1 pixel for the shadow on the medium font. Our sprite must be at least 1x1 pixel */
 	width  = max(1, slot->bitmap.width + (size == FS_NORMAL));
 	height = max(1, slot->bitmap.rows  + (size == FS_NORMAL));
 
 	/* FreeType has rendered the glyph, now we allocate a sprite and copy the image into it */
-	sprite = (Sprite*)calloc(width * height + 8, 1);
-	sprite->info   = 1;
-	sprite->width  = width;
-	sprite->height = height;
-	sprite->x_offs = slot->bitmap_left;
+	sprite.data = CallocT<SpriteLoader::CommonPixel>(width * height);
+	sprite.width = width;
+	sprite.height = height;
+	sprite.x_offs = slot->bitmap_left;
 	// XXX 2 should be determined somehow... it's right for the normal face
 	y_adj = (size == FS_NORMAL) ? 2 : 0;
-	sprite->y_offs = GetCharacterHeight(size) - slot->bitmap_top - y_adj;
+	sprite.y_offs = GetCharacterHeight(size) - slot->bitmap_top - y_adj;
 
 	/* Draw shadow for medium size */
 	if (size == FS_NORMAL) {
 		for (y = 0; y < slot->bitmap.rows; y++) {
 			for (x = 0; x < slot->bitmap.width; x++) {
-				if (HASBIT(slot->bitmap.buffer[(x / 8) + y * slot->bitmap.pitch], 7 - (x % 8))) {
-					sprite->data[1 + x + (1 + y) * sprite->width] = SHADOW_COLOUR;
+				if (aa ? (slot->bitmap.buffer[x + y * slot->bitmap.pitch] > 0) : HASBIT(slot->bitmap.buffer[(x / 8) + y * slot->bitmap.pitch], 7 - (x % 8))) {
+					sprite.data[1 + x + (1 + y) * sprite.width].m = SHADOW_COLOUR;
+					sprite.data[1 + x + (1 + y) * sprite.width].a = aa ? slot->bitmap.buffer[x + y * slot->bitmap.pitch] : 0xFF;
 				}
 			}
 		}
@@ -420,18 +444,20 @@
 
 	for (y = 0; y < slot->bitmap.rows; y++) {
 		for (x = 0; x < slot->bitmap.width; x++) {
-			if (HASBIT(slot->bitmap.buffer[(x / 8) + y * slot->bitmap.pitch], 7 - (x % 8))) {
-				sprite->data[x + y * sprite->width] = FACE_COLOUR;
+			if (aa ? (slot->bitmap.buffer[x + y * slot->bitmap.pitch] > 0) : HASBIT(slot->bitmap.buffer[(x / 8) + y * slot->bitmap.pitch], 7 - (x % 8))) {
+				sprite.data[x + y * sprite.width].m = FACE_COLOUR;
+				sprite.data[x + y * sprite.width].a = aa ? slot->bitmap.buffer[x + y * slot->bitmap.pitch] : 0xFF;
 			}
 		}
 	}
 
-	new_glyph.sprite = sprite;
+	new_glyph.sprite = BlitterFactoryBase::GetCurrentBlitter()->Encode(&sprite, AllocateFont);
+	free(sprite.data);
 	new_glyph.width  = (slot->advance.x >> 6) + (size != FS_NORMAL);
 
 	SetGlyphPtr(size, key, &new_glyph);
 
-	return sprite;
+	return new_glyph.sprite;
 }
 
 
--- a/src/fontcache.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/fontcache.h	Sat Jul 14 19:42:58 2007 +0000
@@ -21,6 +21,9 @@
 	uint small_size;
 	uint medium_size;
 	uint large_size;
+	bool small_aa;
+	bool medium_aa;
+	bool large_aa;
 };
 
 extern FreeTypeSettings _freetype;
--- a/src/functions.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/functions.h	Sat Jul 14 19:42: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();
@@ -109,9 +98,6 @@
 void DeleteName(StringID id);
 char *GetName(char *buff, StringID id, const char* last);
 
-/* AllocateNameUnique also tests if the name used is not used anywere else
- * and if it is used, it returns an error. */
-#define AllocateNameUnique(name, skip) RealAllocateName(name, skip, true)
 #define AllocateName(name, skip) RealAllocateName(name, skip, false)
 StringID RealAllocateName(const char *name, byte skip, bool check_double);
 void ConvertNameArray();
@@ -139,16 +125,18 @@
 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);
 void ChangeTownRating(Town *t, int add, int max);
 
 uint GetTownRadiusGroup(const Town* t, TileIndex tile);
+void ShowHighscoreTable(int difficulty, int8 rank);
+
 int FindFirstBit(uint32 x);
-void ShowHighscoreTable(int difficulty, int8 rank);
+int CountBitsSet(uint32 value);
 
 void AfterLoadTown();
 void UpdatePatches();
--- a/src/genworld_gui.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/genworld_gui.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -36,9 +36,12 @@
 	GLWP_END
 };
 
-static uint _heightmap_x = 0;
-static uint _heightmap_y = 0;
-static StringID _heightmap_str = STR_NULL;
+struct generate_d {
+	uint widget_id;
+	uint x;
+	uint y;
+	char name[64];
+};
 
 extern void SwitchMode(int new_mode);
 
@@ -307,17 +310,17 @@
 			char buffer[512];
 
 			if (_patches_newgame.heightmap_rotation == HM_CLOCKWISE) {
-				SetDParam(0, _heightmap_y);
-				SetDParam(1, _heightmap_x);
+				SetDParam(0, WP(w, generate_d).y);
+				SetDParam(1, WP(w, generate_d).x);
 			} else {
-				SetDParam(0, _heightmap_x);
-				SetDParam(1, _heightmap_y);
+				SetDParam(0, WP(w, generate_d).x);
+				SetDParam(1, WP(w, generate_d).y);
 			}
 			GetString(buffer, STR_HEIGHTMAP_SIZE, lastof(buffer));
 			DrawStringRightAligned(326, 91, STR_HEIGHTMAP_SIZE, 0x10);
 
 			DrawString( 12,  91, STR_HEIGHTMAP_NAME, 0x10);
-			SetDParam(0, _heightmap_str);
+			SetDParamStr(0, WP(w, generate_d).name);
 			DrawStringTruncated(114,  91, STR_ORANGE, 0x10, 326 - 114 - GetStringBoundingBox(buffer).width - 5);
 
 			DrawString( 12, 197, STR_TREE_PLACER, 0);
@@ -364,10 +367,10 @@
 					w,
 					LandscapeGenerationCallback);
 			} else if (mode == GLWP_HEIGHTMAP &&
-					(_heightmap_x * 2 < (1U << _patches_newgame.map_x) ||
-					_heightmap_x / 2 > (1U << _patches_newgame.map_x) ||
-					_heightmap_y * 2 < (1U << _patches_newgame.map_y) ||
-					_heightmap_y / 2 > (1U << _patches_newgame.map_y))) {
+					(WP(w, generate_d).x * 2 < (1U << _patches_newgame.map_x) ||
+					WP(w, generate_d).x / 2 > (1U << _patches_newgame.map_x) ||
+					WP(w, generate_d).y * 2 < (1U << _patches_newgame.map_y) ||
+					WP(w, generate_d).y / 2 > (1U << _patches_newgame.map_y))) {
 				ShowQuery(
 					STR_HEIGHTMAP_SCALE_WARNING_CAPTION,
 					STR_HEIGHTMAP_SCALE_WARNING_MESSAGE,
@@ -389,7 +392,7 @@
 			_left_button_clicked = false;
 			break;
 		case GLAND_START_DATE_TEXT: // Year text
-			WP(w, def_d).data_3 = GLAND_START_DATE_TEXT;
+			WP(w, generate_d).widget_id = GLAND_START_DATE_TEXT;
 			SetDParam(0, _patches_newgame.starting_year);
 			ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_START_DATE_QUERY_CAPT, 8, 100, w, CS_NUMERAL);
 			break;
@@ -404,7 +407,7 @@
 			_left_button_clicked = false;
 			break;
 		case GLAND_SNOW_LEVEL_TEXT: // Snow line text
-			WP(w, def_d).data_3 = GLAND_SNOW_LEVEL_TEXT;
+			WP(w, generate_d).widget_id = GLAND_SNOW_LEVEL_TEXT;
 			SetDParam(0, _patches_newgame.snow_line_height);
 			ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_SNOW_LINE_QUERY_CAPT, 3, 100, w, CS_NUMERAL);
 			break;
@@ -488,7 +491,7 @@
 		if (e->we.edittext.str != NULL) {
 			int32 value = atoi(e->we.edittext.str);
 
-			switch (WP(w, def_d).data_3) {
+			switch (WP(w, generate_d).widget_id) {
 			case GLAND_START_DATE_TEXT:
 				InvalidateWidget(w, GLAND_START_DATE_TEXT);
 				_patches_newgame.starting_year = clamp(value, MIN_YEAR, MAX_YEAR);
@@ -524,25 +527,30 @@
 
 static void _ShowGenerateLandscape(glwp_modes mode)
 {
+	uint x = 0;
+	uint y = 0;
+
 	DeleteWindowByClass(WC_GENERATE_LANDSCAPE);
 
 	/* Always give a new seed if not editor */
 	if (_game_mode != GM_EDITOR) _patches_newgame.generation_seed = InteractiveRandom();
 
 	if (mode == GLWP_HEIGHTMAP) {
-		if (_heightmap_str != STR_NULL) DeleteName(_heightmap_str);
-
-		_heightmap_x = 0;
-		_heightmap_y = 0;
-		_heightmap_str = AllocateName(_file_to_saveload.title, 0);
 		/* If the function returns negative, it means there was a problem loading the heightmap */
-		if (!GetHeightmapDimensions(_file_to_saveload.name, &_heightmap_x, &_heightmap_y))
-			return;
+		if (!GetHeightmapDimensions(_file_to_saveload.name, &x, &y)) return;
 	}
 
 	Window *w = AllocateWindowDescFront((mode == GLWP_HEIGHTMAP) ? &_heightmap_load_desc : &_generate_landscape_desc, mode);
 
-	if (w != NULL) InvalidateWindow(WC_GENERATE_LANDSCAPE, mode);
+	if (w == NULL) return;
+
+	if (mode == GLWP_HEIGHTMAP) {
+		WP(w, generate_d).x = x;
+		WP(w, generate_d).y = y;
+		strecpy(WP(w, generate_d).name, _file_to_saveload.title, lastof(WP(w, generate_d).name));
+	}
+
+	InvalidateWindow(WC_GENERATE_LANDSCAPE, mode);
 }
 
 void ShowGenerateLandscape()
@@ -654,7 +662,7 @@
 			_left_button_clicked = false;
 			break;
 		case CSCEN_START_DATE_TEXT: // Year text
-			WP(w, def_d).data_3 = CSCEN_START_DATE_TEXT;
+			WP(w, generate_d).widget_id = CSCEN_START_DATE_TEXT;
 			SetDParam(0, _patches_newgame.starting_year);
 			ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_START_DATE_QUERY_CAPT, 8, 100, w, CS_NUMERAL);
 			break;
@@ -669,7 +677,7 @@
 			_left_button_clicked = false;
 			break;
 		case CSCEN_FLAT_LAND_HEIGHT_TEXT: // Height level text
-			WP(w, def_d).data_3 = CSCEN_FLAT_LAND_HEIGHT_TEXT;
+			WP(w, generate_d).widget_id = CSCEN_FLAT_LAND_HEIGHT_TEXT;
 			SetDParam(0, _patches_newgame.se_flat_world_height);
 			ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_FLAT_WORLD_HEIGHT_QUERY_CAPT, 3, 100, w, CS_NUMERAL);
 			break;
@@ -688,7 +696,7 @@
 		if (e->we.edittext.str != NULL) {
 			int32 value = atoi(e->we.edittext.str);
 
-			switch (WP(w, def_d).data_3) {
+			switch (WP(w, generate_d).widget_id) {
 			case CSCEN_START_DATE_TEXT:
 				InvalidateWidget(w, CSCEN_START_DATE_TEXT);
 				_patches_newgame.starting_year = clamp(value, MIN_YEAR, MAX_YEAR);
@@ -875,14 +883,11 @@
 		_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;
 
 	if (_network_dedicated) {
 		static uint last_percent = 0;
@@ -911,6 +916,8 @@
 	 *  on the same tile at the same moment. Nasty hack, but that happens
 	 *  if you implement threading afterwards */
 	while (IsGeneratingWorldReadyForPaint()) { CSleep(10); }
+
+	_tp.timer = _realtime_tick;
 }
 
 /**
--- a/src/gfx.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/gfx.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -12,17 +12,15 @@
 #include "gfx.h"
 #include "table/palettes.h"
 #include "table/sprites.h"
-#include "hal.h"
 #include "variables.h"
 #include "table/control_codes.h"
 #include "fontcache.h"
 #include "genworld.h"
 #include "debug.h"
 #include "zoom.hpp"
-
-#ifdef _DEBUG
-bool _dbg_screen_rect;
-#endif
+#include "texteff.hpp"
+#include "blitter/factory.hpp"
+#include "video/video_driver.hpp"
 
 byte _dirkeys;        ///< 1 = left, 2 = up, 4 = right, 8 = down
 bool _fullscreen;
@@ -40,22 +38,16 @@
 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];
 
-enum BlitterMode {
-	BM_NORMAL,
-	BM_COLOUR_REMAP,
-	BM_TRANSPARENT,
-};
-
 static void GfxMainBlitter(const Sprite *sprite, int x, int y, BlitterMode mode);
 
 FontSize _cur_fontsize;
 static FontSize _last_fontsize;
-static Pixel _cursor_backup[64 * 64];
+static uint8 _cursor_backup[64 * 64 * 4];
 static Rect _invalid_rect;
 static const byte *_color_remap_ptr;
 static byte _string_colorremap[3];
@@ -63,94 +55,26 @@
 #define DIRTY_BYTES_PER_LINE (MAX_SCREEN_WIDTH / 64)
 static byte _dirty_blocks[DIRTY_BYTES_PER_LINE * MAX_SCREEN_HEIGHT / 8];
 
-void memcpy_pitch(void *dst, void *src, int w, int h, int srcpitch, int dstpitch)
-{
-	Pixel *dstp = (Pixel *)dst;
-	Pixel *srcp = (Pixel *)src;
-
-	assert(h >= 0);
-	for (; h != 0; --h) {
-		memcpy(dstp, srcp, w * sizeof(Pixel));
-		dstp += dstpitch;
-		srcp += srcpitch;
-	}
-}
-
 void GfxScroll(int left, int top, int width, int height, int xo, int yo)
 {
-	const Pixel *src;
-	Pixel *dst;
-	int p;
-	int ht;
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
 
 	if (xo == 0 && yo == 0) return;
 
 	if (_cursor.visible) UndrawMouseCursor();
 	UndrawTextMessage();
 
-	p = _screen.pitch;
-
-	if (yo > 0) {
-		/*Calculate pointers */
-		dst = _screen.dst_ptr + (top + height - 1) * p + left;
-		src = dst - yo * p;
-
-		/* Decrease height and increase top */
-		top += yo;
-		height -= yo;
-		assert(height > 0);
-
-		/* Adjust left & width */
-		if (xo >= 0) {
-			dst += xo;
-			left += xo;
-			width -= xo;
-		} else {
-			src -= xo;
-			width += xo;
-		}
-
-		for (ht = height; ht > 0; --ht) {
-			memcpy(dst, src, width * sizeof(Pixel));
-			src -= p;
-			dst -= p;
-		}
-	} else {
-		/* Calculate pointers */
-		dst = _screen.dst_ptr + top * p + left;
-		src = dst - yo * p;
-
-		/* Decrese height. (yo is <=0). */
-		height += yo;
-		assert(height > 0);
-
-		/* Adjust left & width */
-		if (xo >= 0) {
-			dst += xo;
-			left += xo;
-			width -= xo;
-		} else {
-			src -= xo;
-			width += xo;
-		}
-
-		/* the y-displacement may be 0 therefore we have to use memmove,
-		 * because source and destination may overlap */
-		for (ht = height; ht > 0; --ht) {
-			memmove(dst, src, width * sizeof(Pixel));
-			src += p;
-			dst += p;
-		}
-	}
+	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);
+	_video_driver->MakeDirty(left, top, width, height);
 }
 
 
 void GfxFillRect(int left, int top, int right, int bottom, int color)
 {
-	const DrawPixelInfo* dpi = _cur_dpi;
-	Pixel *dst;
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
+	const DrawPixelInfo *dpi = _cur_dpi;
+	void *dst;
 	const int otop = top;
 	const int oleft = left;
 
@@ -171,106 +95,40 @@
 	bottom -= top;
 	assert(bottom > 0);
 
-	dst = dpi->dst_ptr + top * dpi->pitch + left;
+	dst = blitter->MoveTo(dpi->dst_ptr, left, top);
 
 	if (!HASBIT(color, PALETTE_MODIFIER_GREYOUT)) {
 		if (!HASBIT(color, USE_COLORTABLE)) {
-			do {
-				memset(dst, color, right * sizeof(Pixel));
-				dst += dpi->pitch;
-			} while (--bottom);
+			blitter->DrawRect(dst, right, bottom, (uint8)color);
 		} else {
-			/* use colortable mode */
-			const byte* ctab = GetNonSprite(GB(color, 0, PALETTE_WIDTH)) + 1;
-
-			do {
-				int i;
-				for (i = 0; i != right; i++) dst[i] = ctab[dst[i]];
-				dst += dpi->pitch;
-			} while (--bottom);
+			blitter->DrawColorMappingRect(dst, right, bottom, GB(color, 0, PALETTE_WIDTH));
 		}
 	} else {
 		byte bo = (oleft - left + dpi->left + otop - top + dpi->top) & 1;
 		do {
-			int i;
-			for (i = (bo ^= 1); i < right; i += 2) dst[i] = (byte)color;
-			dst += dpi->pitch;
+			for (int i = (bo ^= 1); i < right; i += 2) blitter->SetPixel(dst, i, 0, (uint8)color);
+			dst = blitter->MoveTo(dst, 0, 1);
 		} while (--bottom > 0);
 	}
 }
 
-static void GfxSetPixel(int x, int y, int color)
-{
-	const DrawPixelInfo* dpi = _cur_dpi;
-	if ((x -= dpi->left) < 0 || x >= dpi->width || (y -= dpi->top)<0 || y >= dpi->height)
-		return;
-	dpi->dst_ptr[y * dpi->pitch + x] = 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);
 }
 
 
@@ -728,278 +586,72 @@
 	}
 }
 
-struct BlitterParams {
-	int start_x, start_y;
-	const byte *sprite;
-	Pixel *dst;
-	BlitterMode mode;
-	int width, height;
-	int width_org;
-	int pitch;
-};
-
-static void GfxBlitZoomUncomp(BlitterParams *bp, ZoomLevel zoom)
-{
-	const byte *src = bp->sprite;
-	Pixel *dst = bp->dst;
-	int height = bp->height;
-	int width = bp->width;
-	int i;
-
-	assert(height > 0);
-	assert(width > 0);
-
-	height = UnScaleByZoom(height, zoom);
-
-	switch (bp->mode) {
-		case BM_COLOUR_REMAP: {
-			const byte *ctab = _color_remap_ptr;
-
-			for (; height != 0; height--) {
-				for (i = 0; i != UnScaleByZoom(width, zoom); i++) {
-					byte b = ctab[src[ScaleByZoom(i, zoom)]];
-
-					if (b != 0) dst[i] = b;
-				}
-				src += ScaleByZoom(bp->width_org, zoom);
-				dst += bp->pitch;
-			}
-			break;
-		}
-
-		case BM_TRANSPARENT: {
-			const byte *ctab = _color_remap_ptr;
-
-			for (; height != 0; height--) {
-				for (i = 0; i != UnScaleByZoom(width, zoom); i++)
-					if (src[ScaleByZoom(i, zoom)] != 0) dst[i] = ctab[dst[i]];
-				src += ScaleByZoom(bp->width_org, zoom);
-				dst += bp->pitch;
-			}
-			break;
-		}
-
-		default:
-			for (; height != 0; height--) {
-				for (i = 0; i != UnScaleByZoom(width, zoom); i++)
-					if (src[ScaleByZoom(i, zoom)] != 0) dst[i] = src[ScaleByZoom(i, zoom)];
-				src += ScaleByZoom(bp->width_org, zoom);
-				dst += bp->pitch;
-			}
-			break;
-	}
-}
-
-static void GfxBlitTileZoom(BlitterParams *bp, ZoomLevel zoom)
-{
-	const byte *src_o = bp->sprite;
-	const byte *src;
-	int num, skip;
-	byte done;
-	Pixel *dst;
-	const byte *ctab;
-
-	src_o += ReadLE16Aligned(src_o + bp->start_y * 2);
-
-	for (;;) {
-		do {
-			done = src_o[0];
-			num = done & 0x7F;
-			skip = src_o[1];
-			src = src_o + 2;
-			src_o += num + 2;
-
-			dst = bp->dst;
-
-			if (zoom >= ZOOM_LVL_OUT_2X && (skip & 1)) {
-				skip += 1;
-				src += 1;
-				num -= 1;
-				if (num <= 0) continue;
-			}
-
-			if (zoom >= ZOOM_LVL_OUT_4X && (skip & 2)) {
-				skip += 2;
-				src += 2;
-				num -= 2;
-				if (num <= 0) continue;
-			}
-
-			if (zoom >= ZOOM_LVL_OUT_8X && (skip & 4)) {
-				skip += 4;
-				src += 4;
-				num -= 4;
-				if (num <= 0) continue;
-			}
-
-			if (zoom >= ZOOM_LVL_OUT_16X && (skip & 8)) {
-				skip += 8;
-				src += 8;
-				num -= 8;
-				if (num <= 0) continue;
-			}
-
-			if ( (skip -= bp->start_x) > 0) {
-				dst += UnScaleByZoom(skip, zoom);
-			} else {
-				src -= skip;
-				num += skip;
-				if (num <= 0) continue;
-				skip = 0;
-			}
-
-			skip = skip + num - bp->width;
-			if (skip > 0) {
-				num -= skip;
-				if (num <= 0) continue;
-			}
-
-			num = UnScaleByZoom(num + ScaleByZoom(1, zoom) - 1, zoom);
-
-			switch (bp->mode) {
-				case BM_COLOUR_REMAP:
-					ctab = _color_remap_ptr;
-					for (; num != 0; num--) {
-							*dst = ctab[*src];
-							dst++;
-							src += ScaleByZoom(1, zoom);
-					}
-					break;
-
-				case BM_TRANSPARENT:
-					ctab = _color_remap_ptr;
-					for (; num != 0; num--) {
-							*dst = ctab[*dst];
-							dst++;
-					}
-					break;
-
-				default:
-					for (; num != 0; num--) {
-							*dst = *src;
-							dst++;
-							src += ScaleByZoom(1, zoom);
-					}
-					break;
-			}
-
-
-		} while (!(done & 0x80));
-
-		bp->dst += bp->pitch;
-		if (--bp->height == 0) return;
-
-		for (int i = 0; i < ScaleByZoom(1, zoom) - 1; i++) {
-			do {
-				done = src_o[0];
-				src_o += (done & 0x7F) + 2;
-			} while (!(done & 0x80));
-			if (--bp->height == 0) return;
-		}
-	}
-}
-
-static void GfxMainBlitter(const Sprite *sprite, int x, int y, BlitterMode mode)
+static inline void GfxMainBlitter(const Sprite *sprite, int x, int y, BlitterMode mode)
 {
 	const DrawPixelInfo *dpi = _cur_dpi;
-	int start_x, start_y;
-	BlitterParams bp;
-	int zoom_mask = ~(ScaleByZoom(1, dpi->zoom) - 1);
+	Blitter::BlitterParams bp;
 
-	/* decode sprite header */
+	/* Move to the correct offset */
 	x += sprite->x_offs;
 	y += sprite->y_offs;
-	bp.width_org = bp.width = sprite->width;
-	bp.height = sprite->height;
-	bp.sprite = sprite->data;
-	bp.dst = dpi->dst_ptr;
-	bp.mode = mode;
-	bp.pitch = dpi->pitch;
-
-	assert(bp.height > 0);
-	assert(bp.width > 0);
-
-	if (sprite->info & 8) {
-		/* tile blit */
-		start_y = 0;
-
-		if (dpi->zoom > ZOOM_LVL_NORMAL) {
-			start_y += bp.height & ~zoom_mask;
-			bp.height &= zoom_mask;
-			if (bp.height == 0) return;
-			y &= zoom_mask;
-		}
-
-		if ( (y -= dpi->top) < 0) {
-			bp.height += y;
-			if (bp.height <= 0) return;
-			start_y -= y;
-			y = 0;
-		} else {
-			bp.dst += bp.pitch * UnScaleByZoom(y, dpi->zoom);
-		}
-		bp.start_y = start_y;
-
-		if ( (y = y + bp.height - dpi->height) > 0) {
-			bp.height -= y;
-			if (bp.height <= 0) return;
-		}
 
-		start_x = 0;
-		x &= zoom_mask;
-		if ( (x -= dpi->left) < 0) {
-			bp.width += x;
-			if (bp.width <= 0) return;
-			start_x -= x;
-			x = 0;
-		}
-		bp.start_x = start_x;
-		bp.dst += UnScaleByZoom(x, dpi->zoom);
-
-		if ( (x = x + bp.width - dpi->width) > 0) {
-			bp.width -= x;
-			if (bp.width <= 0) return;
-		}
-
-		GfxBlitTileZoom(&bp, dpi->zoom);
-	} else {
-		bp.sprite += bp.width * (bp.height & ~zoom_mask);
-		bp.height &= zoom_mask;
-		if (bp.height == 0) return;
-
-		y &= zoom_mask;
+	/* Copy the main data directly from the sprite */
+	bp.sprite = sprite->data;
+	bp.sprite_width = sprite->width;
+	bp.sprite_height = sprite->height;
+	bp.width = UnScaleByZoom(sprite->width, dpi->zoom);
+	bp.height = UnScaleByZoom(sprite->height, dpi->zoom);
+	bp.top = 0;
+	bp.left = 0;
+	bp.skip_left = 0;
+	bp.skip_top = 0;
+	bp.dst = dpi->dst_ptr;
+	bp.pitch = dpi->pitch;
+	bp.remap = _color_remap_ptr;
 
-		if ( (y -= dpi->top) < 0) {
-			bp.height += y;
-			if (bp.height <= 0) return;
-			bp.sprite -= bp.width * y;
-			y = 0;
-		} else {
-			bp.dst += bp.pitch * UnScaleByZoom(y, dpi->zoom);
-		}
-
-		if (bp.height > dpi->height - y) {
-			bp.height = dpi->height - y;
-			if (bp.height <= 0) return;
-		}
+	assert(sprite->width > 0);
+	assert(sprite->height > 0);
 
-		x &= zoom_mask;
+	if (bp.width <= 0) return;
+	if (bp.height <= 0) return;
 
-		if ( (x -= dpi->left) < 0) {
-			bp.width += x;
-			if (bp.width <= 0) return;
-			bp.sprite -= x;
-			x = 0;
-		}
-		bp.dst += UnScaleByZoom(x, dpi->zoom);
+	y -= dpi->top;
+	/* Check for top overflow */
+	if (y < 0) {
+		bp.height -= -UnScaleByZoom(y, dpi->zoom);
+		if (bp.height <= 0) return;
+		bp.skip_top += -UnScaleByZoom(y, dpi->zoom);
+		y = 0;
+	} else {
+		bp.top = UnScaleByZoom(y, dpi->zoom);
+	}
 
-		if (bp.width > dpi->width - x) {
-			bp.width = dpi->width - x;
-			if (bp.width <= 0) return;
-		}
+	/* Check for bottom overflow */
+	y += ScaleByZoom(bp.height, dpi->zoom) - dpi->height;
+	if (y > 0) {
+		bp.height -= UnScaleByZoom(y, dpi->zoom);
+		if (bp.height <= 0) return;
+	}
 
-		GfxBlitZoomUncomp(&bp, dpi->zoom);
+	x -= dpi->left;
+	/* Check for left overflow */
+	if (x < 0) {
+		bp.width -= -UnScaleByZoom(x, dpi->zoom);
+		if (bp.width <= 0) return;
+		bp.skip_left += -UnScaleByZoom(x, dpi->zoom);
+		x = 0;
+	} else {
+		bp.left = UnScaleByZoom(x, dpi->zoom);
 	}
+
+	/* Check for right overflow */
+	x += ScaleByZoom(bp.width, dpi->zoom) - dpi->width;
+	if (x > 0) {
+		bp.width -= UnScaleByZoom(x, dpi->zoom);
+		if (bp.width <= 0) return;
+	}
+
+	BlitterFactoryBase::GetCurrentBlitter()->Draw(&bp, mode, dpi->zoom);
 }
 
 void DoPaletteAnimations();
@@ -1008,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.
@@ -1025,9 +678,14 @@
 	 * 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;
+	uint old_tc = _palette_animation_counter;
+
+	if (blitter != NULL && blitter->UsePaletteAnimation() == Blitter::PALETTE_ANIMATION_NONE) {
+		_palette_animation_counter = 0;
+	}
 
 	d = &_cur_palette[217];
 	memcpy(old_val, d, c * sizeof(*old_val));
@@ -1069,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) ||
@@ -1120,9 +778,13 @@
 		}
 	}
 
-	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;
+		}
 	}
 }
 
@@ -1169,18 +831,16 @@
 void UndrawMouseCursor()
 {
 	if (_cursor.visible) {
+		Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
 		_cursor.visible = false;
-		memcpy_pitch(
-			_screen.dst_ptr + _cursor.draw_pos.x + _cursor.draw_pos.y * _screen.pitch,
-			_cursor_backup,
-			_cursor.draw_size.x, _cursor.draw_size.y, _cursor.draw_size.x, _screen.pitch);
-
-		_video_driver->make_dirty(_cursor.draw_pos.x, _cursor.draw_pos.y, _cursor.draw_size.x, _cursor.draw_size.y);
+		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->MakeDirty(_cursor.draw_pos.x, _cursor.draw_pos.y, _cursor.draw_size.x, _cursor.draw_size.y);
 	}
 }
 
 void DrawMouseCursor()
 {
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
 	int x;
 	int y;
 	int w;
@@ -1217,38 +877,21 @@
 	_cursor.draw_pos.y = y;
 	_cursor.draw_size.y = h;
 
-	assert(w * h < (int)sizeof(_cursor_backup));
+	assert(blitter->BufferSize(w, h) < (int)sizeof(_cursor_backup));
 
 	/* Make backup of stuff below cursor */
-	memcpy_pitch(
-		_cursor_backup,
-		_screen.dst_ptr + _cursor.draw_pos.x + _cursor.draw_pos.y * _screen.pitch,
-		_cursor.draw_size.x, _cursor.draw_size.y, _screen.pitch, _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;
 	DrawSprite(_cursor.sprite, _cursor.pal, _cursor.pos.x, _cursor.pos.y);
 
-	_video_driver->make_dirty(_cursor.draw_pos.x, _cursor.draw_pos.y, _cursor.draw_size.x, _cursor.draw_size.y);
+	_video_driver->MakeDirty(_cursor.draw_pos.x, _cursor.draw_pos.y, _cursor.draw_size.x, _cursor.draw_size.y);
 
 	_cursor.visible = true;
 	_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);
@@ -1262,14 +905,9 @@
 	}
 	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);
+	_video_driver->MakeDirty(left, top, right - left, bottom - top);
 }
 
 void DrawDirtyBlocks()
@@ -1413,6 +1051,7 @@
  * get some nasty results */
 bool FillDrawPixelInfo(DrawPixelInfo *n, int left, int top, int width, int height)
 {
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
 	const DrawPixelInfo *o = _cur_dpi;
 
 	n->zoom = ZOOM_LVL_NORMAL;
@@ -1444,7 +1083,8 @@
 		n->top = 0;
 	}
 
-	n->dst_ptr = o->dst_ptr + left + top * (n->pitch = o->pitch);
+	n->dst_ptr = blitter->MoveTo(o->dst_ptr, left, top);
+	n->pitch = o->pitch;
 
 	if (height > o->height - top) {
 		height = o->height - top;
@@ -1511,12 +1151,12 @@
 {
 	return
 		(_screen.width == w && _screen.height == h) ||
-		_video_driver->change_resolution(w, h);
+		_video_driver->ChangeResolution(w, h);
 }
 
 void ToggleFullScreen(bool fs)
 {
-	_video_driver->toggle_fullscreen(fs);
+	_video_driver->ToggleFullscreen(fs);
 	if (_fullscreen != fs && _num_resolutions == 0) {
 		DEBUG(driver, 0, "Could not find a suitable fullscreen resolution");
 	}
--- a/src/gfx.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/gfx.h	Sat Jul 14 19:42:58 2007 +0000
@@ -93,7 +93,6 @@
 void CreateConsole();
 
 typedef int32 CursorID;
-typedef byte Pixel;
 
 struct Point {
 	int x,y;
@@ -134,7 +133,7 @@
 };
 
 struct DrawPixelInfo {
-	Pixel *dst_ptr;
+	void *dst_ptr;
 	int left, top, width, height;
 	int pitch;
 	ZoomLevel zoom;
@@ -167,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];
@@ -303,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/gfxinit.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/gfxinit.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -53,13 +53,15 @@
 static uint LoadGrfFile(const char* filename, uint load_index, int file_index)
 {
 	uint load_index_org = load_index;
+	uint sprite_id = 0;
 
 	FioOpenFile(file_index, filename);
 
 	DEBUG(sprite, 2, "Reading grf-file '%s'", filename);
 
-	while (LoadNextSprite(load_index, file_index)) {
+	while (LoadNextSprite(load_index, file_index, sprite_id)) {
 		load_index++;
+		sprite_id++;
 		if (load_index >= MAX_SPRITES) {
 			error("Too many sprites. Recompile with higher MAX_SPRITES value or remove some custom GRF files.");
 		}
@@ -73,6 +75,7 @@
 static void LoadGrfIndexed(const char* filename, const SpriteID* index_tbl, int file_index)
 {
 	uint start;
+	uint sprite_id = 0;
 
 	FioOpenFile(file_index, filename);
 
@@ -83,14 +86,16 @@
 
 		if (start == SKIP) { // skip sprites (amount in second var)
 			SkipSprites(end);
+			sprite_id += end;
 		} else { // load sprites and use indexes from start to end
 			do {
 			#ifdef NDEBUG
-				LoadNextSprite(start, file_index);
+				LoadNextSprite(start, file_index, sprite_id);
 			#else
-				bool b = LoadNextSprite(start, file_index);
+				bool b = LoadNextSprite(start, file_index, sprite_id);
 				assert(b);
 			#endif
+				sprite_id++;
 			} while (++start <= end);
 		}
 	}
@@ -109,33 +114,7 @@
  * returns true if the checksum is correct */
 static bool FileMD5(const MD5File file, bool warn)
 {
-	FILE *f;
-	char buf[MAX_PATH];
-
-	/* open file */
-	snprintf(buf, lengthof(buf), "%s%s", _paths.data_dir, file.filename);
-	f = fopen(buf, "rb");
-
-#if !defined(WIN32)
-	if (f == NULL) {
-		strtolower(buf + strlen(_paths.data_dir) - 1);
-		f = fopen(buf, "rb");
-	}
-#endif
-
-#if defined SECOND_DATA_DIR
-	/* If we failed to find the file in the first data directory, we will try the other one */
-
-	if (f == NULL) {
-		snprintf(buf, lengthof(buf), "%s%s", _paths.second_data_dir, file.filename);
-		f = fopen(buf, "rb");
-
-		if (f == NULL) {
-			strtolower(buf + strlen(_paths.second_data_dir) - 1);
-			f = fopen(buf, "rb");
-		}
-	}
-#endif
+	FILE *f = FioFOpenFile(file.filename);
 
 	if (f != NULL) {
 		md5_state_t filemd5state;
@@ -147,7 +126,7 @@
 		while ((len = fread(buffer, 1, sizeof(buffer), f)) != 0)
 			md5_append(&filemd5state, buffer, len);
 
-		if (ferror(f) && warn) ShowInfoF("Error Reading from %s \n", buf);
+		if (ferror(f) && warn) ShowInfoF("Error Reading from %s \n", file.filename);
 		fclose(f);
 
 		md5_finish(&filemd5state, digest);
--- a/src/graph_gui.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/graph_gui.cpp	Sat Jul 14 19:42: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.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/group.h	Sat Jul 14 19:42:58 2007 +0000
@@ -53,14 +53,6 @@
 	return (index == DEFAULT_GROUP);
 }
 
-static inline StringID GetGroupName(GroupID index)
-{
-	if (!IsValidGroupID(index)) return STR_NULL;
-
-	return GetGroup(index)->string_id;
-}
-
-
 #define FOR_ALL_GROUPS_FROM(g, start) for (g = GetGroup(start); g != NULL; g = (g->index + 1U < GetGroupPoolSize()) ? GetGroup(g->index + 1) : NULL) if (IsValidGroup(g))
 #define FOR_ALL_GROUPS(g) FOR_ALL_GROUPS_FROM(g, 0)
 
--- a/src/group_cmd.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/group_cmd.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -4,6 +4,7 @@
 
 #include "stdafx.h"
 #include "openttd.h"
+#include "variables.h"
 #include "functions.h"
 #include "player.h"
 #include "table/strings.h"
@@ -17,6 +18,7 @@
 #include "string.h"
 #include "window.h"
 #include "vehicle_gui.h"
+#include "strings.h"
 
 /**
  * Update the num engines of a groupID. Decrease the old one and increase the new one
@@ -88,12 +90,12 @@
 
 
 /**
- * Add a vehicle to a group
+ * Create a new vehicle group.
  * @param tile unused
  * @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,25 +105,25 @@
 
 	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();
 }
 
 
 /**
- * Add a vehicle to a group
+ * Add all vehicles in the given group to the default group and then deletes the group.
  * @param tile unused
  * @param p1   index of array group
  *      - 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,9 +158,22 @@
 		InvalidateWindowData(GetWCForVT(vt), (vt << 11) | VLW_GROUP_LIST | _current_player);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
+static bool IsUniqueGroupName(const char *name)
+{
+	const Group *g;
+	char buf[512];
+
+	FOR_ALL_GROUPS(g) {
+		SetDParam(0, g->index);
+		GetString(buf, STR_GROUP_NAME, lastof(buf));
+		if (strcmp(buf, name) == 0) return false;
+	}
+
+	return true;
+}
 
 /**
  * Rename a group
@@ -167,13 +182,15 @@
  *   - 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;
 
 	Group *g = GetGroup(p1);
 	if (g->owner != _current_player) return CMD_ERROR;
 
+	if (!IsUniqueGroupName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+
 	/* Create the name */
 	StringID str = AllocateName(_cmd_text, 0);
 	if (str == STR_NULL) return CMD_ERROR;
@@ -187,7 +204,7 @@
 		InvalidateWindowData(GetWCForVT(g->vehicle_type), (g->vehicle_type << 11) | VLW_GROUP_LIST | _current_player);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -199,7 +216,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 +252,7 @@
 		InvalidateWindowData(GetWCForVT(v->type), (v->type << 11) | VLW_GROUP_LIST | _current_player);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /**
@@ -245,7 +262,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 +288,7 @@
 		InvalidateWindowData(GetWCForVT(type), (type << 11) | VLW_GROUP_LIST | _current_player);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -282,7 +299,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 +324,7 @@
 		InvalidateWindowData(GetWCForVT(type), (type << 11) | VLW_GROUP_LIST | _current_player);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -319,7 +336,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 +349,7 @@
 		InvalidateWindowData(GetWCForVT(g->vehicle_type), (g->vehicle_type << 11) | VLW_GROUP_LIST | _current_player);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /**
--- a/src/group_gui.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/group_gui.cpp	Sat Jul 14 19:42: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);
@@ -532,17 +531,7 @@
 					gv->vehicle_sel = v->index;
 
 					if (IsValidVehicle(v)) {
-						CursorID image;
-
-						switch (gv->vehicle_type) {
-							case VEH_TRAIN:    image = GetTrainImage(v, DIR_W);    break;
-							case VEH_ROAD:     image = GetRoadVehImage(v, DIR_W);  break;
-							case VEH_SHIP:     image = GetShipImage(v, DIR_W);     break;
-							case VEH_AIRCRAFT: image = GetAircraftImage(v, DIR_W); break;
-							default: NOT_REACHED(); break;
-						}
-
-						SetObjectToPlaceWnd(image, GetVehiclePalette(v), 4, w);
+						SetObjectToPlaceWnd(v->GetImage(DIR_W), GetVehiclePalette(v), 4, w);
 					}
 
 					SetWindowDirty(w);
@@ -567,7 +556,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/gui.h	Sat Jul 14 19:42:58 2007 +0000
@@ -105,10 +105,16 @@
 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);
+enum StationCoverageType {
+	SCT_PASSENGERS_ONLY,
+	SCT_NON_PASSENGERS_ONLY,
+	SCT_ALL
+};
+
+void DrawStationCoverageAreaText(int sx, int sy, StationCoverageType sct, int rad);
 void CheckRedrawStationCoverage(const Window *w);
 
 void ShowSmallMap();
--- a/src/hal.h	Sat Jun 02 19:59:29 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-/* $Id$ */
-
-/** @file hal.h Hardware Abstraction Layer declarations */
-
-#ifndef HAL_H
-#define HAL_H
-
-struct HalCommonDriver {
-	const char *(*start)(const char * const *parm);
-	void (*stop)();
-};
-
-struct HalVideoDriver {
-	const char *(*start)(const char * const *parm);
-	void (*stop)();
-	void (*make_dirty)(int left, int top, int width, int height);
-	void (*main_loop)();
-	bool (*change_resolution)(int w, int h);
-	void (*toggle_fullscreen)(bool fullscreen);
-};
-
-struct HalSoundDriver {
-	const char *(*start)(const char * const *parm);
-	void (*stop)();
-};
-
-struct HalMusicDriver {
-	const char *(*start)(const char * const *parm);
-	void (*stop)();
-
-	void (*play_song)(const char *filename);
-	void (*stop_song)();
-	bool (*is_song_playing)();
-	void (*set_volume)(byte vol);
-};
-
-extern HalMusicDriver *_music_driver;
-extern HalSoundDriver *_sound_driver;
-extern HalVideoDriver *_video_driver;
-
-enum DriverType {
-	VIDEO_DRIVER = 0,
-	SOUND_DRIVER = 1,
-	MUSIC_DRIVER = 2,
-};
-
-#endif /* HAL_H */
--- a/src/industry.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/industry.h	Sat Jul 14 19:42:58 2007 +0000
@@ -28,26 +28,34 @@
 };
 
 enum IndustryLifeType {
-	INDUSTRYLIFE_NOT_CLOSABLE,     ///< Industry can never close
-	INDUSTRYLIFE_PRODUCTION,       ///< Industry can close and change of production
-	INDUSTRYLIFE_CLOSABLE,         ///< Industry can only close (no production change)
+	INDUSTRYLIFE_BLACK_HOLE =      0, ///< Like power plants and banks
+	INDUSTRYLIFE_EXTRACTIVE = 1 << 0, ///< Like mines
+	INDUSTRYLIFE_ORGANIC    = 1 << 1, ///< Like forests
+	INDUSTRYLIFE_PROCESSING = 1 << 2, ///< Like factories
 };
 
 /* Procedures that can be run to check whether an industry may
  * build at location the given to the procedure */
 enum CheckProc {
-	CHECK_NOTHING    = 0,
-	CHECK_FOREST     = 1,
-	CHECK_REFINERY   = 2,
-	CHECK_FARM       = 3,
-	CHECK_PLANTATION = 4,
-	CHECK_WATER      = 5,
-	CHECK_LUMBERMILL = 6,
-	CHECK_BUBBLEGEN  = 7,
-	CHECK_OIL_RIG    = 8,
+	CHECK_NOTHING,
+	CHECK_FOREST,
+	CHECK_REFINERY,
+	CHECK_FARM,
+	CHECK_PLANTATION,
+	CHECK_WATER,
+	CHECK_LUMBERMILL,
+	CHECK_BUBBLEGEN,
+	CHECK_OIL_RIG,
 	CHECK_END,
 };
 
+enum IndustryConstructionType {
+	ICT_UNKNOWN,
+	ICT_NORMAL_GAMEPLAY,
+	ICT_MAP_GENERATION,
+	ICT_SCENARIO_EDITOR
+};
+
 enum IndustyBehaviour {
 	INDUSTRYBEH_NONE                  =      0,
 	INDUSTRYBEH_PLANT_FIELDS          = 1 << 0,  ///< periodically plants fileds around itself (temp and artic farms)
@@ -57,7 +65,7 @@
 	INDUSTRYBEH_ONLY_INTOWN           = 1 << 4,  ///< can only be built in towns (arctic/tropic banks, water tower)
 	INDUSTRYBEH_ONLY_NEARTOWN         = 1 << 5,  ///< is always built near towns (toy shop)
 	INDUSTRYBEH_PLANT_ON_BUILT        = 1 << 6,  ///< Fields are planted around when built (all farms)
-	INDUSTRYBEH_DONT_INCR_PROD        = 1 << 7,  ///< do not increase production (oil wells)
+	INDUSTRYBEH_DONT_INCR_PROD        = 1 << 7,  ///< do not increase production (oil wells) in the temperate climate
 	INDUSTRYBEH_BEFORE_1950           = 1 << 8,  ///< can only be built before 1950 (oil wells)
 	INDUSTRYBEH_AFTER_1960            = 1 << 9,  ///< can only be built after 1960 (oil rigs)
 	INDUSTRYBEH_AI_AIRSHIP_ROUTES     = 1 << 10, ///< ai will attempt to establish air/ship routes to this industry (oil rig)
@@ -73,27 +81,33 @@
  * Defines the internal data of a functionnal industry
  */
 struct Industry {
-	TileIndex xy;                   ///< coordinates of the primary tile the industry is built one
+	TileIndex xy;                       ///< coordinates of the primary tile the industry is built one
 	byte width;
 	byte height;
-	const Town* town;               ///< Nearest town
-	uint16 cargo_waiting[2];        ///< amount of cargo produced per cargo
-	byte production_rate[2];        ///< production rate for each cargo
-	byte prod_level;                ///< general production level
-	uint16 last_mo_production[2];   ///< stats of last month production per cargo
-	uint16 last_mo_transported[2];  ///< stats of last month transport per cargo
-	byte pct_transported[2];        ///< percentage transported per cargo
-	uint16 total_production[2];     ///< total units produced per cargo
-	uint16 total_transported[2];    ///< total units transported per cargo
-	uint16 counter;                 ///< used for animation and/or production (if available cargo)
+	const Town *town;                   ///< Nearest town
+	uint16 produced_cargo_waiting[2];   ///< amount of cargo produced per cargo
+	uint16 incoming_cargo_waiting[3];   ///< incoming cargo waiting to be processed
+	byte production_rate[2];            ///< production rate for each cargo
+	byte prod_level;                    ///< general production level
+	uint16 this_month_production[2];    ///< stats of this month's production per cargo
+	uint16 this_month_transported[2];   ///< stats of this month's transport per cargo
+	byte last_month_pct_transported[2]; ///< percentage transported per cargo in the last full month
+	uint16 last_month_production[2];    ///< total units produced per cargo in the last full month
+	uint16 last_month_transported[2];   ///< total units transported per cargo in the last full month
+	uint16 counter;                     ///< used for animation and/or production (if available cargo)
 
-	IndustryType type;              ///< type of industry. see IT_COAL_MINE and others
-	OwnerByte owner;                ///< owner of the industry.  Which SHOULD always be (imho) OWNER_NONE
-	byte random_color;              ///< randomized colour of the industry, for display purpose
-	Year last_prod_year;            ///< last year of production
-	byte was_cargo_delivered;       ///< flag that indicate this has been the closest industry chosen for cargo delivery by a station. see DeliverGoodsToIndustry
+	IndustryType type;                  ///< type of industry. see IT_COAL_MINE and others
+	OwnerByte owner;                    ///< owner of the industry.  Which SHOULD always be (imho) OWNER_NONE
+	byte random_color;                  ///< randomized colour of the industry, for display purpose
+	Year last_prod_year;                ///< last year of production
+	byte was_cargo_delivered;           ///< flag that indicate this has been the closest industry chosen for cargo delivery by a station. see DeliverGoodsToIndustry
 
-	IndustryID index;               ///< index of the industry in the pool of industries
+	IndustryID index;                   ///< index of the industry in the pool of industries
+
+	OwnerByte founder;                  ///< Founder of the industry
+	Date construction_date;             ///< Date of the construction of the industry
+	uint8 construction_type;            ///< Way the industry was constructed (@see IndustryConstructionType)
+	Date last_cargo_accepted_at;        ///< Last day cargo was accepted by this industry
 };
 
 struct IndustryTileTable {
@@ -106,8 +120,8 @@
 	uint8 subst_id;
 	uint16 local_id;                      ///< id defined by the grf file for this industry
 	struct SpriteGroup *spritegroup;      ///< pointer to the different sprites of the industry
-	const struct GRFFile *grffile;        ///< grf file that introduced this house
-	uint8 override;                       ///< id of the entity been replaced by
+	const struct GRFFile *grffile;        ///< grf file that introduced this industry
+	uint16 override;                      ///< id of the entity been replaced by
 };
 
 /**
@@ -116,7 +130,9 @@
 struct IndustrySpec {
 	const IndustryTileTable *const *table;///< List of the tiles composing the industry
 	byte num_table;                       ///< Number of elements in the table
-	byte cost_multiplier;                 ///< Base cost multiplier. Watch out for this one, << 5  VS << 8
+	uint8 cost_multiplier;                ///< Base cost multiplier.
+	uint16 raw_industry_cost_multiplier;  ///< Multiplier for the raw industries cost
+	uint32 prospecting_chance;            ///< Chance prospecting succeeds
 	IndustryType conflicting[3];          ///< Industries this industry cannot be close to
 	byte check_proc;                      ///< Index to a procedure to check for conflicting circumstances
 	CargoID produced_cargo[2];
@@ -143,6 +159,18 @@
 	uint8 cleanup_flag;                   ///< flags indicating which data should be freed upon cleaning up
 	bool enabled;                         ///< entity still avaible (by default true).newgrf can disable it, though
 	struct GRFFileProps grf_prop;         ///< properties related the the grf file
+
+	/**
+	 * Is an industry with the spec a raw industry?
+	 * @return true if it should be handled as a raw industry
+	 */
+	bool IsRawIndustry() const;
+
+	/**
+	 * Get the cost for constructing this industry
+	 * @return the cost (inflation corrected etc)
+	 */
+	Money GetConstructionCost() const;
 };
 
 /**
@@ -158,6 +186,10 @@
 	                                      ///< state instead of the construction state
 	/* Newgrf data */
 	uint8 callback_flags;                 ///< Flags telling which grf callback is set
+	uint16 animation_info;                ///< Information about the animation (is it looping, how many loops etc)
+	uint8 animation_speed;                ///< The speed of the animation
+	uint8 animation_triggers;             ///< When to start the animation
+	uint8 animation_special_flags;        ///< Extra flags to influence the animation
 	bool enabled;                         ///< entity still avaible (by default true).newgrf can disable it, though
 	struct GRFFileProps grf_prop;
 };
@@ -197,7 +229,6 @@
 	return index < GetIndustryPoolSize() && IsValidIndustry(GetIndustry(index));
 }
 
-VARDEF int _total_industries; //general counter
 
 static inline IndustryID GetMaxIndustryIndex()
 {
@@ -209,11 +240,51 @@
 	return GetIndustryPoolSize() - 1;
 }
 
+extern int _total_industries;  // general counter
+extern uint16 _industry_counts[NUM_INDUSTRYTYPES]; // Number of industries per type ingame
+
 static inline uint GetNumIndustries()
 {
 	return _total_industries;
 }
 
+/** Increment the count of industries for this type
+ * @param type IndustryType to increment
+ * @pre type < INVALID_INDUSTRYTYPE */
+static inline void IncIndustryTypeCount(IndustryType type)
+{
+	assert(type < INVALID_INDUSTRYTYPE);
+	_industry_counts[type]++;
+	_total_industries++;
+}
+
+/** Decrement the count of industries for this type
+ * @param type IndustryType to decrement
+ * @pre type < INVALID_INDUSTRYTYPE */
+static inline void DecIndustryTypeCount(IndustryType type)
+{
+	assert(type < INVALID_INDUSTRYTYPE);
+	_industry_counts[type]--;
+	_total_industries--;
+}
+
+/** get the count of industries for this type
+ * @param type IndustryType to query
+ * @pre type < INVALID_INDUSTRYTYPE */
+static inline uint8 GetIndustryTypeCount(IndustryType type)
+{
+	assert(type < INVALID_INDUSTRYTYPE);
+	return min(_industry_counts[type], 0xFF); // callback expects only a byte, so cut it
+}
+
+/** Resets both the total_industries and the _industry_counts
+ * This way, we centralize all counts activities */
+static inline void ResetIndustryCounts()
+{
+	_total_industries = 0;
+	memset(&_industry_counts, 0, sizeof(_industry_counts));
+}
+
 /**
  * Return a random valid industry.
  */
@@ -249,8 +320,8 @@
 #define FOR_ALL_INDUSTRIES_FROM(i, start) for (i = GetIndustry(start); i != NULL; i = (i->index + 1U < GetIndustryPoolSize()) ? GetIndustry(i->index + 1U) : NULL) if (IsValidIndustry(i))
 #define FOR_ALL_INDUSTRIES(i) FOR_ALL_INDUSTRIES_FROM(i, 0)
 
-VARDEF const Industry** _industry_sort;
-VARDEF bool _industry_sort_dirty;
+extern const Industry **_industry_sort;
+extern bool _industry_sort_dirty;
 
 enum {
 	IT_COAL_MINE           =   0,
--- a/src/industry_cmd.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/industry_cmd.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -30,6 +30,9 @@
 #include "water_map.h"
 #include "tree_map.h"
 #include "cargotype.h"
+#include "newgrf_industries.h"
+#include "newgrf_industrytiles.h"
+#include "newgrf_callbacks.h"
 
 void ShowIndustryViewWindow(int industry);
 void BuildOilRig(TileIndex tile);
@@ -37,6 +40,12 @@
 static byte _industry_sound_ctr;
 static TileIndex _industry_sound_tile;
 
+int _total_industries;                      //general counter
+uint16 _industry_counts[NUM_INDUSTRYTYPES]; // Number of industries per type ingame
+
+const Industry **_industry_sort;
+bool _industry_sort_dirty;
+
 IndustrySpec _industry_specs[NUM_INDUSTRYTYPES];
 IndustryTileSpec _industry_tile_specs[NUM_INDUSTRYTILES];
 
@@ -141,7 +150,8 @@
 	}
 
 	_industry_sort_dirty = true;
-	_total_industries--;
+	DecIndustryTypeCount(i->type);
+
 	DeleteSubsidyWithIndustry(i->index);
 	DeleteWindowById(WC_INDUSTRY_VIEW, i->index);
 	InvalidateWindow(WC_INDUSTRY_DIRECTORY, 0);
@@ -234,18 +244,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))];
 
@@ -259,20 +283,20 @@
 	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) {
 		if (HASBIT(_transparent_opt, TO_INDUSTRIES)) {
 			SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
 			pal = PALETTE_TO_TRANSPARENT;
+		} else if (HASBIT(image, PALETTE_MODIFIER_COLOR) && dits->building.pal == PAL_NONE) {
+			pal = GENERAL_SPRITE_COLOR(ind->random_color);
 		} else {
 			pal = dits->building.pal;
 		}
@@ -306,12 +330,36 @@
 
 static void GetAcceptedCargo_Industry(TileIndex tile, AcceptedCargo ac)
 {
-	const IndustryTileSpec *itspec = GetIndustryTileSpec(GetIndustryGfx(tile));
-	CargoID a;
+	IndustryGfx gfx = GetIndustryGfx(tile);
+	const IndustryTileSpec *itspec = GetIndustryTileSpec(gfx);
+
+	/* When we have to use a callback, we put our data in the next two variables */
+	CargoID raw_accepts_cargo[lengthof(itspec->accepts_cargo)];
+	uint8 raw_acceptance[lengthof(itspec->acceptance)];
+
+	/* And then these will always point to a same sized array with the required data */
+	const CargoID *accepts_cargo = itspec->accepts_cargo;
+	const uint8 *acceptance = itspec->acceptance;
+
+	if (HASBIT(itspec->callback_flags, CBM_INDT_ACCEPT_CARGO)) {
+		uint16 res = GetIndustryTileCallback(CBID_INDTILE_ACCEPT_CARGO, 0, 0, gfx, GetIndustryByTile(tile), tile);
+		if (res != CALLBACK_FAILED) {
+			accepts_cargo = raw_accepts_cargo;
+			for (uint i = 0; i < lengthof(itspec->accepts_cargo); i++) raw_accepts_cargo[i] = GetCargoTranslation(GB(res, i * 5, 5), itspec->grf_prop.grffile);
+		}
+	}
+
+	if (HASBIT(itspec->callback_flags, CBM_INDT_CARGO_ACCEPTANCE)) {
+		uint16 res = GetIndustryTileCallback(CBID_INDTILE_CARGO_ACCEPTANCE, 0, 0, gfx, GetIndustryByTile(tile), tile);
+		if (res != CALLBACK_FAILED) {
+			acceptance = raw_acceptance;
+			for (uint i = 0; i < lengthof(itspec->accepts_cargo); i++) raw_acceptance[i] = GB(res, i * 4, 4);
+		}
+	}
 
 	for (byte i = 0; i < lengthof(itspec->accepts_cargo); i++) {
-		a = itspec->accepts_cargo[i];
-		if (a != CT_INVALID) ac[a] = itspec->acceptance[i];
+		CargoID a = accepts_cargo[i];
+		if (a != CT_INVALID) ac[a] = acceptance[i];
 	}
 }
 
@@ -327,7 +375,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);
@@ -345,7 +393,7 @@
 	}
 
 	if (flags & DC_EXEC) DeleteIndustry(i);
-	return 0;
+	return CommandCost();
 }
 
 static void TransportIndustryGoods(TileIndex tile)
@@ -354,18 +402,18 @@
 	const IndustrySpec *indspec = GetIndustrySpec(i->type);
 	uint cw, am;
 
-	cw = min(i->cargo_waiting[0], 255);
+	cw = min(i->produced_cargo_waiting[0], 255);
 	if (cw > indspec->minimal_cargo/* && i->produced_cargo[0] != 0xFF*/) {
-		i->cargo_waiting[0] -= cw;
+		i->produced_cargo_waiting[0] -= cw;
 
 		/* fluctuating economy? */
 		if (_economy.fluct <= 0) cw = (cw + 1) / 2;
 
-		i->last_mo_production[0] += cw;
+		i->this_month_production[0] += cw;
 
 		am = MoveGoodsToStation(i->xy, i->width, i->height, indspec->produced_cargo[0], cw);
-		i->last_mo_transported[0] += am;
-		if (am != 0) {
+		i->this_month_transported[0] += am;
+		if (am != 0 && !StartStopIndustryTileAnimation(i, IAT_INDUSTRY_DISTRIBUTES_CARGO)) {
 			uint newgfx = GetIndustryTileSpec(GetIndustryGfx(tile))->anim_production;
 
 			if (newgfx != INDUSTRYTILE_NOANIM) {
@@ -377,16 +425,16 @@
 		}
 	}
 
-	cw = min(i->cargo_waiting[1], 255);
+	cw = min(i->produced_cargo_waiting[1], 255);
 	if (cw > indspec->minimal_cargo) {
-		i->cargo_waiting[1] -= cw;
+		i->produced_cargo_waiting[1] -= cw;
 
 		if (_economy.fluct <= 0) cw = (cw + 1) / 2;
 
-		i->last_mo_production[1] += cw;
+		i->this_month_production[1] += cw;
 
 		am = MoveGoodsToStation(i->xy, i->width, i->height, indspec->produced_cargo[1], cw);
-		i->last_mo_transported[1] += am;
+		i->this_month_transported[1] += am;
 	}
 }
 
@@ -394,8 +442,14 @@
 static void AnimateTile_Industry(TileIndex tile)
 {
 	byte m;
+	IndustryGfx gfx = GetIndustryGfx(tile);
 
-	switch (GetIndustryGfx(tile)) {
+	if (GetIndustryTileSpec(gfx)->animation_info != 0xFFFF) {
+		AnimateNewIndustryTile(tile);
+		return;
+	}
+
+	switch (gfx) {
 	case GFX_SUGAR_MINE_SIEVE:
 		if ((_tick_counter & 1) == 0) {
 			m = GetIndustryAnimationState(tile) + 1;
@@ -581,6 +635,7 @@
 	stage = GetIndustryConstructionStage(tile) + 1;
 	SetIndustryConstructionCounter(tile, 0);
 	SetIndustryConstructionStage(tile, stage);
+	StartStopIndustryTileAnimation(tile, IAT_CONSTRUCTION_STATE_CHANGE);
 	if (stage == 3) {
 		SetIndustryCompleted(tile, true);
 	}
@@ -589,7 +644,15 @@
 
 	if (!IsIndustryCompleted(tile)) return;
 
-	switch (GetIndustryGfx(tile)) {
+	IndustryGfx gfx = GetIndustryGfx(tile);
+	if (gfx >= NEW_INDUSTRYTILEOFFSET) {
+		/* New industry */
+		const IndustryTileSpec *its = GetIndustryTileSpec(gfx);
+		if (its->animation_info != 0xFFFF) AddAnimatedTile(tile);
+		return;
+	}
+
+	switch (gfx) {
 	case GFX_POWERPLANT_CHIMNEY:
 		CreateIndustryEffectSmoke(tile);
 		break;
@@ -653,6 +716,8 @@
 
 	TransportIndustryGoods(tile);
 
+	if (StartStopIndustryTileAnimation(tile, IAT_TILELOOP)) return;
+
 	newgfx = GetIndustryTileSpec(GetIndustryGfx(tile))->anim_next;
 	if (newgfx != INDUSTRYTILE_NOANIM) {
 		ResetIndustryConstructionStage(tile);
@@ -768,7 +833,9 @@
 
 static void ChangeTileOwner_Industry(TileIndex tile, PlayerID old_player, PlayerID new_player)
 {
-	/* not used */
+	/* If the founder merges, the industry was created by the merged company */
+	Industry *i = GetIndustryByTile(tile);
+	if (i->founder == old_player) i->founder = (new_player == PLAYER_SPECTATOR) ? OWNER_NONE : new_player;
 }
 
 static const byte _plantfarmfield_type[] = {1, 1, 1, 1, 1, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6};
@@ -879,11 +946,6 @@
 	if (tile != INVALID_TILE) PlantFarmField(tile, i->index);
 }
 
-static void MaybePlantFarmField(const Industry *i)
-{
-	if (CHANCE16(1, 8)) PlantRandomFarmField(i);
-}
-
 /**
  * Search callback function for ChopLumberMillTrees
  * @param tile to test
@@ -920,7 +982,7 @@
 	if (!IsIndustryCompleted(tile)) return;  ///< Can't proceed if not completed
 
 	if (CircularTileSearch(tile, 40, SearchLumberMillTrees, 0)) ///< 40x40 tiles  to search
-		i->cargo_waiting[0] = min(0xffff, i->cargo_waiting[0] + 45); ///< Found a tree, add according value to waiting cargo
+		i->produced_cargo_waiting[0] = min(0xffff, i->produced_cargo_waiting[0] + 45); ///< Found a tree, add according value to waiting cargo
 }
 
 static void ProduceIndustryGoods(Industry *i)
@@ -942,14 +1004,29 @@
 
 	/* produce some cargo */
 	if ((i->counter & 0xFF) == 0) {
-		IndustyBehaviour indbehav = indsp->behaviour;
-		i->cargo_waiting[0] = min(0xffff, i->cargo_waiting[0] + i->production_rate[0]);
-		i->cargo_waiting[1] = min(0xffff, i->cargo_waiting[1] + i->production_rate[1]);
+		if (HASBIT(indsp->callback_flags, CBM_IND_PRODUCTION_256_TICKS)) IndustryProductionCallback(i, 1);
 
-		if (indbehav & INDUSTRYBEH_PLANT_FIELDS) {
-			MaybePlantFarmField(i);
-		} else if ((indbehav & INDUSTRYBEH_CUT_TREES) && (i->counter & 0x1FF) == 0) {
-			ChopLumberMillTrees(i);
+		IndustyBehaviour indbehav = indsp->behaviour;
+		i->produced_cargo_waiting[0] = min(0xffff, i->produced_cargo_waiting[0] + i->production_rate[0]);
+		i->produced_cargo_waiting[1] = min(0xffff, i->produced_cargo_waiting[1] + i->production_rate[1]);
+
+		if ((indbehav & INDUSTRYBEH_PLANT_FIELDS) != 0) {
+			bool plant;
+			if (HASBIT(indsp->callback_flags, CBM_IND_SPECIAL_EFFECT)) {
+				plant = (GetIndustryCallback(CBID_INDUSTRY_SPECIAL_EFFECT, Random(), 0, i, i->type, i->xy) != 0);
+			} else {
+				plant = CHANCE16(1, 8);
+			}
+
+			if (plant) PlantRandomFarmField(i);
+		}
+		if ((indbehav & INDUSTRYBEH_CUT_TREES) != 0) {
+			bool cut = ((i->counter & 0x1FF) == 0);
+			if (HASBIT(indsp->callback_flags, CBM_IND_SPECIAL_EFFECT)) {
+				cut = (GetIndustryCallback(CBID_INDUSTRY_SPECIAL_EFFECT, 0, 1, i, i->type, i->xy) != 0);
+			}
+
+			if (cut) ChopLumberMillTrees(i);
 		}
 	}
 }
@@ -972,6 +1049,7 @@
 	if (_game_mode == GM_EDITOR) return;
 
 	FOR_ALL_INDUSTRIES(i) {
+		StartStopIndustryTileAnimation(i, IAT_INDUSTRY_TICK);
 		ProduceIndustryGoods(i);
 	}
 }
@@ -1105,7 +1183,7 @@
 	return t;
 }
 
-static bool CheckIfIndustryTilesAreFree(TileIndex tile, const IndustryTileTable *it, int type)
+static bool CheckIfIndustryTilesAreFree(TileIndex tile, const IndustryTileTable *it, int type, bool *custom_shape_check = NULL)
 {
 	_error_message = STR_0239_SITE_UNSUITABLE;
 
@@ -1124,54 +1202,57 @@
 			}
 		} else {
 			if (!EnsureNoVehicle(cur_tile)) return false;
+			if (MayHaveBridgeAbove(cur_tile) && IsBridgeAbove(cur_tile)) return false;
+
+			const IndustryTileSpec *its = GetIndustryTileSpec(it->gfx);
 			IndustyBehaviour ind_behav = GetIndustrySpec(type)->behaviour;
 
-			if (ind_behav & INDUSTRYBEH_BUILT_ONWATER) {
-				/* As soon as the tile is not water, bail out.
-				 * But that does not mean the search is over.  You have
-				 * to make sure every tile of the industry will be only water*/
-				if (!IsClearWaterTile(cur_tile)) return false;
+			if (HASBIT(its->callback_flags, CBM_INDT_SHAPE_CHECK)) {
+				if (custom_shape_check != NULL) *custom_shape_check = true;
+				if (!PerformIndustryTileSlopeCheck(cur_tile, its, type, it->gfx)) return false;
 			} else {
-				Slope tileh;
-
-				if (IsClearWaterTile(cur_tile)) return false;
-
-				tileh = GetTileSlope(cur_tile, NULL);
-				if (IsSteepSlope(tileh)) return false;
+				if (ind_behav & INDUSTRYBEH_BUILT_ONWATER) {
+					/* As soon as the tile is not water, bail out.
+					* But that does not mean the search is over.  You have
+					* to make sure every tile of the industry will be only water*/
+					if (!IsClearWaterTile(cur_tile)) return false;
+				} else {
+					Slope tileh;
 
-				if (_patches.land_generator != LG_TERRAGENESIS || !_generating_world) {
-					/* It is almost impossible to have a fully flat land in TG, so what we
-					 *  do is that we check if we can make the land flat later on. See
-					 *  CheckIfCanLevelIndustryPlatform(). */
-					if (tileh != SLOPE_FLAT) {
-						Slope t;
-						byte bits = GetIndustryTileSpec(it->gfx)->slopes_refused;
+					if (IsClearWaterTile(cur_tile)) return false;
 
-						if (bits & 0x10) return false;
-
-						t = ComplementSlope(tileh);
+					tileh = GetTileSlope(cur_tile, NULL);
+					if (IsSteepSlope(tileh)) return false;
 
-						if (bits & 1 && (t & SLOPE_NW)) return false;
-						if (bits & 2 && (t & SLOPE_NE)) return false;
-						if (bits & 4 && (t & SLOPE_SW)) return false;
-						if (bits & 8 && (t & SLOPE_SE)) return false;
+					if (_patches.land_generator != LG_TERRAGENESIS || !_generating_world) {
+						/* It is almost impossible to have a fully flat land in TG, so what we
+						*  do is that we check if we can make the land flat later on. See
+						*  CheckIfCanLevelIndustryPlatform(). */
+						if (tileh != SLOPE_FLAT) {
+							Slope t;
+							byte bits = its->slopes_refused;
+
+							if (bits & 0x10) return false;
+
+							t = ComplementSlope(tileh);
+
+							if (bits & 1 && (t & SLOPE_NW)) return false;
+							if (bits & 2 && (t & SLOPE_NE)) return false;
+							if (bits & 4 && (t & SLOPE_SW)) return false;
+							if (bits & 8 && (t & SLOPE_SE)) return false;
+						}
 					}
 				}
+			}
 
-				if (ind_behav & INDUSTRYBEH_ONLY_INTOWN) {
-					if (!IsTileType(cur_tile, MP_HOUSE)) {
-						_error_message = STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS;
-						return false;
-					}
-				} else {
-					if (ind_behav & INDUSTRYBEH_ONLY_NEARTOWN) {
-						if (!IsTileType(cur_tile, MP_HOUSE)) goto do_clear;
-					} else {
-do_clear:
-						if (CmdFailed(DoCommand(cur_tile, 0, 0, DC_AUTO, CMD_LANDSCAPE_CLEAR)))
-							return false;
-					}
+			if (ind_behav & INDUSTRYBEH_ONLY_INTOWN) {
+				if (!IsTileType(cur_tile, MP_HOUSE)) {
+					_error_message = STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS;
+					return false;
 				}
+				if (CmdFailed(DoCommand(cur_tile, 0, 0, 0, CMD_LANDSCAPE_CLEAR))) return false;
+			} else if ((ind_behav & INDUSTRYBEH_ONLY_NEARTOWN) == 0 || !IsTileType(cur_tile, MP_HOUSE)) {
+				if (CmdFailed(DoCommand(cur_tile, 0, 0, DC_AUTO, CMD_LANDSCAPE_CLEAR))) return false;
 			}
 		}
 	} while ((++it)->ti.x != -0x80);
@@ -1301,7 +1382,7 @@
 		/* check if an industry that accepts the same goods is nearby */
 		if (DistanceMax(tile, i->xy) <= 14 &&
 				indspec->accepts_cargo[0] != CT_INVALID &&
-				indspec->accepts_cargo[0] == indspec->accepts_cargo[0] && (
+				indspec->accepts_cargo[0] == GetIndustrySpec(i->type)->accepts_cargo[0] && (
 					_game_mode != GM_EDITOR ||
 					!_patches.same_industry_close ||
 					!_patches.multiple_industry_per_town
@@ -1347,10 +1428,10 @@
 	uint32 r;
 	int j;
 
-	_total_industries++;
 	i->xy = tile;
 	i->width = i->height = 0;
 	i->type = type;
+	IncIndustryTypeCount(type);
 
 	i->production_rate[0] = indspec->production_rate[0];
 	i->production_rate[1] = indspec->production_rate[1];
@@ -1366,22 +1447,29 @@
 	r = Random();
 	i->random_color = GB(r, 8, 4);
 	i->counter = GB(r, 0, 12);
-	i->cargo_waiting[0] = 0;
-	i->cargo_waiting[1] = 0;
-	i->last_mo_production[0] = 0;
-	i->last_mo_production[1] = 0;
-	i->last_mo_transported[0] = 0;
-	i->last_mo_transported[1] = 0;
-	i->pct_transported[0] = 0;
-	i->pct_transported[1] = 0;
-	i->total_transported[0] = 0;
-	i->total_transported[1] = 0;
+	i->produced_cargo_waiting[0] = 0;
+	i->produced_cargo_waiting[1] = 0;
+	i->incoming_cargo_waiting[0] = 0;
+	i->incoming_cargo_waiting[1] = 0;
+	i->incoming_cargo_waiting[2] = 0;
+	i->this_month_production[0] = 0;
+	i->this_month_production[1] = 0;
+	i->this_month_transported[0] = 0;
+	i->this_month_transported[1] = 0;
+	i->last_month_pct_transported[0] = 0;
+	i->last_month_pct_transported[1] = 0;
+	i->last_month_transported[0] = 0;
+	i->last_month_transported[1] = 0;
 	i->was_cargo_delivered = false;
 	i->last_prod_year = _cur_year;
-	i->total_production[0] = i->production_rate[0] * 8;
-	i->total_production[1] = i->production_rate[1] * 8;
+	i->last_month_production[0] = i->production_rate[0] * 8;
+	i->last_month_production[1] = i->production_rate[1] * 8;
+	i->founder = _current_player;
+	i->construction_date = _date;
+	i->construction_type = (_game_mode == GM_EDITOR) ? ICT_SCENARIO_EDITOR :
+			(_generating_world ? ICT_MAP_GENERATION : ICT_NORMAL_GAMEPLAY);
 
-	if (!_generating_world) i->total_production[0] = i->total_production[1] = 0;
+	if (!_generating_world) i->last_month_production[0] = i->last_month_production[1] = 0;
 
 	i->prod_level = 0x10;
 
@@ -1421,30 +1509,36 @@
  * @param type of industry to build
  * @param flags of operations to conduct
  * @param indspec pointer to industry specifications
- * @param it pointer to list of tile type to build
+ * @param itspec_index the index of the itsepc to build/fund
  * @return the pointer of the newly created industry, or NULL if it failed
  */
-static Industry *CreateNewIndustryHelper(TileIndex tile, IndustryType type, uint32 flags, const IndustrySpec *indspec, const IndustryTileTable *it)
+static Industry *CreateNewIndustryHelper(TileIndex tile, IndustryType type, uint32 flags, const IndustrySpec *indspec, uint itspec_index)
 {
-	const Town *t;
-	Industry *i;
+	const IndustryTileTable *it = indspec->table[itspec_index];
+	bool custom_shape_check = false;
 
-	if (!CheckIfIndustryTilesAreFree(tile, it, type)) return NULL;
-	if (_patches.land_generator == LG_TERRAGENESIS && _generating_world && !CheckIfCanLevelIndustryPlatform(tile, 0, it, type)) return NULL;
-	if (!_check_new_industry_procs[indspec->check_proc](tile)) return NULL;
+	if (!CheckIfIndustryTilesAreFree(tile, it, type, &custom_shape_check)) return NULL;
+
+	if (HASBIT(GetIndustrySpec(type)->callback_flags, CBM_IND_LOCATION)) {
+		if (!CheckIfCallBackAllowsCreation(tile, type, itspec_index)) return NULL;
+	} else {
+		if (!_check_new_industry_procs[indspec->check_proc](tile)) return NULL;
+	}
+
+	if (!custom_shape_check && _patches.land_generator == LG_TERRAGENESIS && _generating_world && !CheckIfCanLevelIndustryPlatform(tile, 0, it, type)) return NULL;
 	if (!CheckIfTooCloseToIndustry(tile, type)) return NULL;
 
-	t = CheckMultipleIndustryInTown(tile, type);
+	const Town *t = CheckMultipleIndustryInTown(tile, type);
 	if (t == NULL) return NULL;
 
 	if (!CheckIfIndustryIsAllowed(tile, type, t)) return NULL;
 	if (!CheckSuitableIndustryPos(tile)) return NULL;
 
-	i = AllocateIndustry();
+	Industry *i = AllocateIndustry();
 	if (i == NULL) return NULL;
 
 	if (flags & DC_EXEC) {
-		CheckIfCanLevelIndustryPlatform(tile, DC_EXEC, it, type);
+		if (!custom_shape_check) CheckIfCanLevelIndustryPlatform(tile, DC_EXEC, it, type);
 		DoCreateNewIndustry(i, tile, type, it, t, OWNER_NONE);
 	}
 
@@ -1458,7 +1552,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;
@@ -1475,38 +1569,54 @@
 	}
 
 	/* If the patch for raw-material industries is not on, you cannot build raw-material industries.
-	 * Raw material industries are industries that do not accept cargo (at least for now)
-	 * Exclude the lumber mill (only "raw" industry that can be built) */
-	if (!_patches.build_rawmaterial_ind &&
-			indspec->accepts_cargo[0] == CT_INVALID &&
-			indspec->accepts_cargo[1] == CT_INVALID &&
-			indspec->accepts_cargo[2] == CT_INVALID &&
-			!(indspec->behaviour & INDUSTRYBEH_CUT_TREES)) {
+	 * Raw material industries are industries that do not accept cargo (at least for now) */
+	if (_game_mode != GM_EDITOR && _patches.raw_industry_construction == 0 && indspec->IsRawIndustry()) {
 		return CMD_ERROR;
 	}
 
-	num = indspec->num_table;
-	itt = indspec->table;
+	if (_game_mode != GM_EDITOR && _patches.raw_industry_construction == 2 && indspec->IsRawIndustry()) {
+		if (flags & DC_EXEC) {
+			/* Prospecting has a chance to fail, however we cannot guarantee that something can
+			 * be built on the map, so the chance gets lower when the map is fuller, but there
+			 * is nothing we can really do about that. */
+			if (Random() <= indspec->prospecting_chance) {
+				for (int i = 0; i < 5000; i++) {
+					uint tilespec_index = RandomRange(indspec->num_table);
+					const Industry *ind = CreateNewIndustryHelper(RandomTile(), p1, flags, indspec, tilespec_index);
+					if (ind != NULL) {
+						SetDParam(0, indspec->name);
+						SetDParam(1, ind->town->index);
+						AddNewsItem(indspec->new_industry_text,
+								NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, NT_OPENCLOSE, 0), ind->xy, 0);
+						break;
+					}
+				}
+			}
+		}
+	} else {
+		num = indspec->num_table;
+		itt = indspec->table;
 
-	do {
-		if (--num < 0) return_cmd_error(STR_0239_SITE_UNSUITABLE);
-	} while (!CheckIfIndustryTilesAreFree(tile, it = itt[num], p1));
 
-	if (CreateNewIndustryHelper(tile, p1, flags, indspec, it) == NULL) return CMD_ERROR;
+		do {
+			if (--num < 0) return_cmd_error(STR_0239_SITE_UNSUITABLE);
+		} while (!CheckIfIndustryTilesAreFree(tile, it = itt[num], p1));
 
-	return (_price.build_industry >> 5) * indspec->cost_multiplier;
+		if (CreateNewIndustryHelper(tile, p1, flags, indspec, num) == NULL) return CMD_ERROR;
+	}
+
+	return CommandCost(indspec->GetConstructionCost());
 }
 
 
 Industry *CreateNewIndustry(TileIndex tile, IndustryType type)
 {
 	const IndustrySpec *indspec = GetIndustrySpec(type);
-	const IndustryTileTable *it = indspec->table[RandomRange(indspec->num_table)];
 
-	return CreateNewIndustryHelper(tile, type, DC_EXEC, indspec, it);
+	return CreateNewIndustryHelper(tile, type, DC_EXEC, indspec, RandomRange(indspec->num_table));
 }
 
-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
@@ -1597,52 +1707,52 @@
 	int j;
 	const IndustrySpec *indspec = GetIndustrySpec(i->type);
 
-	switch (indspec->life_type) {
-		case INDUSTRYLIFE_NOT_CLOSABLE:
-			return;
-
-		case INDUSTRYLIFE_CLOSABLE:
-			if ((byte)(_cur_year - i->last_prod_year) < 5 || !CHANCE16(1, 180))
-				closeit = false;
-			break;
-
-		default: /* INDUSTRY_PRODUCTION */
-			for (j = 0; j < 2 && indspec->produced_cargo[j] != CT_INVALID; j++){
-				uint32 r = Random();
-				int old_prod, new_prod, percent;
-				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->pct_transported[j] * 20 >> 8), 1024, r >> 16))
-					new_prod += ((RandomRange(50) + 10) * old_prod) >> 8;
+	if (indspec->life_type == INDUSTRYLIFE_BLACK_HOLE) return;
 
-				new_prod = clamp(new_prod, 0, 255);
-				if (new_prod == old_prod) {
-					closeit = false;
-					continue;
-				}
-
-				percent = new_prod * 100 / old_prod - 100;
-				i->production_rate[j] = new_prod;
-
-				if (new_prod >= indspec->production_rate[j] / 4)
-					closeit = false;
+	if ((indspec->life_type & (INDUSTRYLIFE_ORGANIC | INDUSTRYLIFE_EXTRACTIVE)) != 0) {
+		for (j = 0; j < 2 && indspec->produced_cargo[j] != CT_INVALID; j++){
+			uint32 r = Random();
+			int old_prod, new_prod, percent;
+			int mag;
 
-				mag = abs(percent);
-				if (mag >= 10) {
-					SetDParam(2, mag);
-					SetDParam(0, GetCargo(indspec->produced_cargo[j])->name);
-					SetDParam(1, i->index);
-					AddNewsItem(
-						percent >= 0 ? STR_INDUSTRY_PROD_GOUP : STR_INDUSTRY_PROD_GODOWN,
-						NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, NT_ECONOMY, 0),
-						i->xy + TileDiffXY(1, 1), 0
-					);
-				}
+			new_prod = old_prod = i->production_rate[j];
+
+			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 || _opt.landscape != LT_TEMPERATE)) {
+				new_prod += max(((RandomRange(50) + 10) * old_prod) >> 8, 1U);
 			}
-			break;
+
+			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;
+			}
+
+			percent = (old_prod == 0) ? 100 : (new_prod * 100 / old_prod - 100);
+			i->production_rate[j] = new_prod;
+
+			/* Close the industry when it has the lowest possible production rate */
+			if (new_prod > 1) closeit = false;
+
+			mag = abs(percent);
+			if (mag >= 10) {
+				SetDParam(2, mag);
+				SetDParam(0, GetCargo(indspec->produced_cargo[j])->name);
+				SetDParam(1, i->index);
+				AddNewsItem(
+					percent >= 0 ? STR_INDUSTRY_PROD_GOUP : STR_INDUSTRY_PROD_GODOWN,
+					NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, NT_ECONOMY, 0),
+					i->xy + TileDiffXY(1, 1), 0
+				);
+			}
+		}
+	}
+
+	if ((indspec->life_type & INDUSTRYLIFE_PROCESSING) != 0) {
+		if ((byte)(_cur_year - i->last_prod_year) < 5 || !CHANCE16(1, 180)) closeit = false;
 	}
 
 	/* If industry will be closed down, show this */
@@ -1667,17 +1777,17 @@
 	for (byte j = 0; j < lengthof(indsp->produced_cargo); j++) {
 		if (indsp->produced_cargo[j] != CT_INVALID) {
 			pct = 0;
-			if (i->last_mo_production[j] != 0) {
+			if (i->this_month_production[j] != 0) {
 				i->last_prod_year = _cur_year;
-				pct = min(i->last_mo_transported[j] * 256 / i->last_mo_production[j], 255);
+				pct = min(i->this_month_transported[j] * 256 / i->this_month_production[j], 255);
 			}
-			i->pct_transported[j] = pct;
+			i->last_month_pct_transported[j] = pct;
 
-			i->total_production[j] = i->last_mo_production[j];
-			i->last_mo_production[j] = 0;
+			i->last_month_production[j] = i->this_month_production[j];
+			i->this_month_production[j] = 0;
 
-			i->total_transported[j] = i->last_mo_transported[j];
-			i->last_mo_transported[j] = 0;
+			i->last_month_transported[j] = i->this_month_transported[j];
+			i->this_month_transported[j] = 0;
 			refresh = true;
 		}
 	}
@@ -1751,64 +1861,61 @@
 
 static void ChangeIndustryProduction(Industry *i)
 {
-	bool only_decrease = false;
 	StringID str = STR_NULL;
 	int type = i->type;
 	const IndustrySpec *indspec = GetIndustrySpec(type);
 
-	switch (indspec->life_type) {
-		case INDUSTRYLIFE_NOT_CLOSABLE:
-			return;
-
-		case INDUSTRYLIFE_PRODUCTION:
-			/* decrease or increase */
-			if ((indspec->behaviour & INDUSTRYBEH_DONT_INCR_PROD) && _opt.landscape == LT_TEMPERATE)
-				only_decrease = true;
-
-			if (only_decrease || CHANCE16(1, 3)) {
-				/* If you transport > 60%, 66% chance we increase, else 33% chance we increase */
-				if (!only_decrease && (i->pct_transported[0] > 153) != CHANCE16(1, 3)) {
-					/* Increase production */
-					if (i->prod_level != 0x80) {
-						byte b;
-
-						i->prod_level <<= 1;
+	if (indspec->life_type == INDUSTRYLIFE_BLACK_HOLE) return;
 
-						b = i->production_rate[0] * 2;
-						if (i->production_rate[0] >= 128)
-							b = 0xFF;
-						i->production_rate[0] = b;
-
-						b = i->production_rate[1] * 2;
-						if (i->production_rate[1] >= 128)
-							b = 0xFF;
-						i->production_rate[1] = b;
+	if ((indspec->life_type & (INDUSTRYLIFE_ORGANIC | INDUSTRYLIFE_EXTRACTIVE)) != 0) {
+		bool only_decrease = false;
 
-						str = indspec->production_up_text;
-					}
+		/* decrease or increase */
+		if ((indspec->behaviour & INDUSTRYBEH_DONT_INCR_PROD) && _opt.landscape == LT_TEMPERATE)
+			only_decrease = true;
+
+		if (only_decrease || CHANCE16(1, 3)) {
+			/* If you transport > 60%, 66% chance we increase, else 33% chance we increase */
+			if (!only_decrease && (i->last_month_pct_transported[0] > 153) != CHANCE16(1, 3)) {
+				/* Increase production */
+				if (i->prod_level != 0x80) {
+					byte b;
+
+					i->prod_level <<= 1;
+
+					b = i->production_rate[0] * 2;
+					if (i->production_rate[0] >= 128)
+						b = 0xFF;
+					i->production_rate[0] = b;
+
+					b = i->production_rate[1] * 2;
+					if (i->production_rate[1] >= 128)
+						b = 0xFF;
+					i->production_rate[1] = b;
+
+					str = indspec->production_up_text;
+				}
+			} else {
+				/* Decrease production */
+				if (i->prod_level == 4) {
+					i->prod_level = 0;
+					str = indspec->closure_text;
 				} else {
-					/* Decrease production */
-					if (i->prod_level == 4) {
-						i->prod_level = 0;
-						str = indspec->closure_text;
-					} else {
-						i->prod_level >>= 1;
-						i->production_rate[0] = (i->production_rate[0] + 1) >> 1;
-						i->production_rate[1] = (i->production_rate[1] + 1) >> 1;
+					i->prod_level >>= 1;
+					i->production_rate[0] = (i->production_rate[0] + 1) >> 1;
+					i->production_rate[1] = (i->production_rate[1] + 1) >> 1;
 
-						str = indspec->production_down_text;
-					}
+					str = indspec->production_down_text;
 				}
 			}
-			break;
-
-		case INDUSTRYLIFE_CLOSABLE:
-			/* maybe close */
-			if ( (byte)(_cur_year - i->last_prod_year) >= 5 && CHANCE16(1, 2)) {
-				i->prod_level = 0;
-				str = indspec->closure_text;
-			}
-			break;
+		}
+	}
+	if (indspec->life_type & INDUSTRYLIFE_PROCESSING) {
+		/* maybe close */
+		if ( (byte)(_cur_year - i->last_prod_year) >= 5 && CHANCE16(1, 2)) {
+			i->prod_level = 0;
+			str = indspec->closure_text;
+		}
 	}
 
 	if (str != STR_NULL) {
@@ -1848,11 +1955,28 @@
 	CleanPool(&_Industry_pool);
 	AddBlockToPool(&_Industry_pool);
 
-	_total_industries = 0;
+	ResetIndustryCounts();
 	_industry_sort_dirty = true;
 	_industry_sound_tile = 0;
 }
 
+bool IndustrySpec::IsRawIndustry() const
+{
+	/* Lumber mills are extractive/organic, but can always be built like a non-raw industry */
+	return (this->life_type & (INDUSTRYLIFE_EXTRACTIVE | INDUSTRYLIFE_ORGANIC)) != 0 &&
+			(this->behaviour & INDUSTRYBEH_CUT_TREES) == 0;
+}
+
+Money IndustrySpec::GetConstructionCost() const
+{
+	return (_price.build_industry *
+			(_patches.raw_industry_construction == 1 && this->IsRawIndustry() ?
+					this->raw_industry_cost_multiplier :
+					this->cost_multiplier
+			)) >> 8;
+}
+
+
 extern const TileTypeProcs _tile_type_industry_procs = {
 	DrawTile_Industry,           /* draw_tile_proc */
 	GetSlopeZ_Industry,          /* get_slope_z_proc */
@@ -1870,30 +1994,36 @@
 };
 
 static const SaveLoad _industry_desc[] = {
-	SLE_CONDVAR(Industry, xy,                  SLE_FILE_U16 | SLE_VAR_U32,  0, 5),
-	SLE_CONDVAR(Industry, xy,                  SLE_UINT32,                  6, SL_MAX_VERSION),
-	    SLE_VAR(Industry, width,               SLE_UINT8),
-	    SLE_VAR(Industry, height,              SLE_UINT8),
-	    SLE_REF(Industry, town,                REF_TOWN),
+	SLE_CONDVAR(Industry, xy,                         SLE_FILE_U16 | SLE_VAR_U32,  0, 5),
+	SLE_CONDVAR(Industry, xy,                         SLE_UINT32,                  6, SL_MAX_VERSION),
+	    SLE_VAR(Industry, width,                      SLE_UINT8),
+	    SLE_VAR(Industry, height,                     SLE_UINT8),
+	    SLE_REF(Industry, town,                       REF_TOWN),
 	SLE_CONDNULL( 2, 2, 60),       ///< used to be industry's produced_cargo
-	    SLE_ARR(Industry, cargo_waiting,       SLE_UINT16, 2),
-	    SLE_ARR(Industry, production_rate,     SLE_UINT8,  2),
+	SLE_CONDARR(Industry, incoming_cargo_waiting,     SLE_UINT16, 3,              70, SL_MAX_VERSION),
+	    SLE_ARR(Industry, produced_cargo_waiting,     SLE_UINT16, 2),
+	    SLE_ARR(Industry, production_rate,            SLE_UINT8,  2),
 	SLE_CONDNULL( 3, 2, 60),       ///< used to be industry's accepts_cargo
-	    SLE_VAR(Industry, prod_level,          SLE_UINT8),
-	    SLE_ARR(Industry, last_mo_production,  SLE_UINT16, 2),
-	    SLE_ARR(Industry, last_mo_transported, SLE_UINT16, 2),
-	    SLE_ARR(Industry, pct_transported,     SLE_UINT8,  2),
-	    SLE_ARR(Industry, total_production,    SLE_UINT16, 2),
-	    SLE_ARR(Industry, total_transported,   SLE_UINT16, 2),
+	    SLE_VAR(Industry, prod_level,                 SLE_UINT8),
+	    SLE_ARR(Industry, this_month_production,      SLE_UINT16, 2),
+	    SLE_ARR(Industry, this_month_transported,     SLE_UINT16, 2),
+	    SLE_ARR(Industry, last_month_pct_transported, SLE_UINT8,  2),
+	    SLE_ARR(Industry, last_month_production,      SLE_UINT16, 2),
+	    SLE_ARR(Industry, last_month_transported,     SLE_UINT16, 2),
 
-	    SLE_VAR(Industry, counter,             SLE_UINT16),
+	    SLE_VAR(Industry, counter,                    SLE_UINT16),
 
-	    SLE_VAR(Industry, type,                SLE_UINT8),
-	    SLE_VAR(Industry, owner,               SLE_UINT8),
-	    SLE_VAR(Industry, random_color,        SLE_UINT8),
-	SLE_CONDVAR(Industry, last_prod_year,      SLE_FILE_U8 | SLE_VAR_I32,  0, 30),
-	SLE_CONDVAR(Industry, last_prod_year,      SLE_INT32,                 31, SL_MAX_VERSION),
-	    SLE_VAR(Industry, was_cargo_delivered, SLE_UINT8),
+	    SLE_VAR(Industry, type,                       SLE_UINT8),
+	    SLE_VAR(Industry, owner,                      SLE_UINT8),
+	    SLE_VAR(Industry, random_color,               SLE_UINT8),
+	SLE_CONDVAR(Industry, last_prod_year,             SLE_FILE_U8 | SLE_VAR_I32,  0, 30),
+	SLE_CONDVAR(Industry, last_prod_year,             SLE_INT32,                 31, SL_MAX_VERSION),
+	    SLE_VAR(Industry, was_cargo_delivered,        SLE_UINT8),
+
+	SLE_CONDVAR(Industry, owner,                      SLE_UINT8,                 70, SL_MAX_VERSION),
+	SLE_CONDVAR(Industry, construction_date,          SLE_INT32,                 70, SL_MAX_VERSION),
+	SLE_CONDVAR(Industry, construction_type,          SLE_UINT8,                 70, SL_MAX_VERSION),
+	SLE_CONDVAR(Industry, last_cargo_accepted_at,     SLE_INT32,                 70, SL_MAX_VERSION),
 
 	/* reserve extra space in savegame here. (currently 32 bytes) */
 	SLE_CONDNULL(32, 2, SL_MAX_VERSION),
@@ -1916,7 +2046,7 @@
 {
 	int index;
 
-	_total_industries = 0;
+	ResetIndustryCounts();
 
 	while ((index = SlIterateArray()) != -1) {
 		Industry *i;
@@ -1926,8 +2056,7 @@
 
 		i = GetIndustry(index);
 		SlObject(i, _industry_desc);
-
-		_total_industries++;
+		IncIndustryTypeCount(i->type);
 	}
 }
 
--- a/src/industry_gui.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/industry_gui.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -20,263 +20,327 @@
 #include "variables.h"
 #include "helpers.hpp"
 #include "cargotype.h"
+#include "newgrf.h"
+#include "newgrf_callbacks.h"
+#include "newgrf_industries.h"
+#include "newgrf_text.h"
 
-/* industries per climate, according to the different construction windows */
-const byte _build_industry_types[4][12] = {
-	{  1,  2,  4,  6,  8,  0,  3,  5,  9, 11, 18 },
-	{  1, 14,  4, 13,  7,  0,  3,  9, 11, 15 },
-	{ 25, 13,  4, 23, 22, 11, 17, 10, 24, 19, 20, 21 },
-	{ 27, 30, 31, 33, 26, 28, 29, 32, 34, 35, 36 },
+extern Industry *CreateNewIndustry(TileIndex tile, IndustryType type);
+
+/**
+ * Search callback function for TryBuildIndustry
+ * @param tile to test
+ * @param data that is passed by the caller.  In this case, the type of industry been tested
+ * @return the success (or not) of the operation
+ */
+static bool SearchTileForIndustry(TileIndex tile, uint32 data)
+{
+	return CreateNewIndustry(tile, data) != NULL;
+}
+
+/**
+ * Perform a 9*9 tiles circular search around a tile
+ * in order to find a suitable zone to create the desired industry
+ * @param tile to start search for
+ * @param type of the desired industry
+ * @return the success (or not) of the operation
+ */
+static bool TryBuildIndustry(TileIndex tile, int type)
+{
+	return CircularTileSearch(tile, 9, SearchTileForIndustry, type);
+}
+bool _ignore_restrictions;
+
+enum {
+	DYNA_INDU_MATRIX_WIDGET = 2,
+	DYNA_INDU_INFOPANEL = 4,
+	DYNA_INDU_FUND_WIDGET,
+	DYNA_INDU_RESIZE_WIDGET,
 };
 
-static void UpdateIndustryProduction(Industry *i);
+static struct IndustryData {
+	uint16 count;
+	IndustryType select;
+	byte index[NUM_INDUSTRYTYPES + 1];
+	StringID additional_text[NUM_INDUSTRYTYPES + 1];
+} _industrydata;
 
-static void BuildIndustryWndProc(Window *w, WindowEvent *e)
+static void BuildDynamicIndustryWndProc(Window *w, WindowEvent *e)
 {
 	switch (e->event) {
-	case WE_PAINT:
-		DrawWindowWidgets(w);
-		if (_thd.place_mode == 1 && _thd.window_class == WC_BUILD_INDUSTRY) {
-			int ind_type = _build_industry_types[_opt_ptr->landscape][WP(w, def_d).data_1];
+		case WE_CREATE: {
+			IndustryType ind;
+			const IndustrySpec *indsp;
 
-			SetDParam(0, (_price.build_industry >> 5) * GetIndustrySpec(ind_type)->cost_multiplier);
-			DrawStringCentered(85, w->height - 21, STR_482F_COST, 0);
-		}
-		break;
+			/* Shorten the window to the equivalant of the additionnal purchase
+			 * info coming from the callback.  SO it will only be available to tis full
+			 * height when newindistries are loaded */
+			if (!_loaded_newgrf_features.has_newindustries) {
+				w->widget[DYNA_INDU_INFOPANEL].bottom -= 44;
+				w->widget[DYNA_INDU_FUND_WIDGET].bottom -= 44;
+				w->widget[DYNA_INDU_FUND_WIDGET].top -= 44;
+				w->widget[DYNA_INDU_RESIZE_WIDGET].bottom -= 44;
+				w->widget[DYNA_INDU_RESIZE_WIDGET].top -= 44;
+				w->resize.height = w->height -= 44;
+			}
 
-	case WE_CLICK: {
-		int wid = e->we.click.widget;
-		if (wid >= 3) {
-			if (HandlePlacePushButton(w, wid, SPR_CURSOR_INDUSTRY, 1, NULL))
-				WP(w, def_d).data_1 = wid - 3;
+			/* Initilialize structures */
+			memset(&_industrydata.index, 0xFF, NUM_INDUSTRYTYPES);
+			memset(&_industrydata.additional_text, STR_NULL, NUM_INDUSTRYTYPES);
+			_industrydata.count = 0;
+
+			/* first indutry type is selected.
+			 * I'll be damned if there are none available ;) */
+			_industrydata.select = 0;
+			w->vscroll.cap = 8; // rows in grid, same in scroller
+			w->resize.step_height = 13;
+
+			if (_game_mode == GM_EDITOR) { // give room for the Many Random "button"
+				_industrydata.index[_industrydata.count] = INVALID_INDUSTRYTYPE;
+				_industrydata.count++;
+			}
+
+			/* We'll perform two distinct loops, one for secondary industries, and the other one for
+			 * primary ones. Each loop will fill the _industrydata structure. */
+			for (ind = IT_COAL_MINE; ind < NUM_INDUSTRYTYPES; ind++) {
+				indsp = GetIndustrySpec(ind);
+				if (indsp->enabled && (!indsp->IsRawIndustry() || _game_mode == GM_EDITOR)) {
+					_industrydata.index[_industrydata.count] = ind;
+					_industrydata.count++;
+				}
+			}
+
+			if (_patches.raw_industry_construction != 0 && _game_mode != GM_EDITOR) {
+				for (ind = IT_COAL_MINE; ind < NUM_INDUSTRYTYPES; ind++) {
+					indsp = GetIndustrySpec(ind);
+					if (indsp->enabled && indsp->IsRawIndustry()) {
+						_industrydata.index[_industrydata.count] = ind;
+						_industrydata.count++;
+					}
+				}
+			}
+		} break;
+
+		case WE_PAINT: {
+			const IndustrySpec *indsp = (_industrydata.index[_industrydata.select] == INVALID_INDUSTRYTYPE) ? NULL : GetIndustrySpec(_industrydata.index[_industrydata.select]);
+			StringID str = STR_4827_REQUIRES;
+			int x_str = w->widget[DYNA_INDU_INFOPANEL].left + 3;
+			int y_str = w->widget[DYNA_INDU_INFOPANEL].top + 3;
+			const Widget *wi = &w->widget[DYNA_INDU_INFOPANEL];
+			int max_width = wi->right - wi->left - 4;
+
+			/* Raw industries might be prospected. Show this fact by changing the string */
+			if (_game_mode == GM_EDITOR) {
+				w->widget[DYNA_INDU_FUND_WIDGET].data = STR_BUILD_NEW_INDUSTRY;
+			} else {
+				w->widget[DYNA_INDU_FUND_WIDGET].data = (_patches.raw_industry_construction == 2 && indsp->IsRawIndustry()) ? STR_PROSPECT_NEW_INDUSTRY : STR_FUND_NEW_INDUSTRY;
+			}
+
+			SetVScrollCount(w, _industrydata.count);
+
+			DrawWindowWidgets(w);
+
+			/* and now with the matrix painting */
+			for (byte i = 0; i < w->vscroll.cap && ((i + w->vscroll.pos) < _industrydata.count); i++) {
+				int offset = i * 13;
+				int x = 3;
+				int y = 16;
+				bool selected = _industrydata.select == i + w->vscroll.pos;
+
+				if (_industrydata.index[i + w->vscroll.pos] == INVALID_INDUSTRYTYPE) {
+					DrawString(21, y + offset, STR_MANY_RANDOM_INDUSTRIES, selected ? 12 : 6);
+					continue;
+				}
+				const IndustrySpec *indsp = GetIndustrySpec(_industrydata.index[i + w->vscroll.pos]);
+
+				/* Draw the name of the industry in white is selected, otherwise, in orange */
+				DrawString(20,     y + offset, indsp->name, selected ? 12 : 6);
+				GfxFillRect(x,     y + 1 + offset,  x + 10, y + 7 + offset, selected ? 15 : 0);
+				GfxFillRect(x + 1, y + 2 + offset,  x +  9, y + 6 + offset, indsp->map_colour);
+			}
+
+			if (_industrydata.index[_industrydata.select] == INVALID_INDUSTRYTYPE) {
+				DrawStringMultiLine(x_str, y_str, STR_RANDOM_INDUSTRIES_TIP, max_width, wi->bottom - wi->top - 40);
+				break;
+			}
+
+			if (_game_mode != GM_EDITOR) {
+				SetDParam(0, indsp->GetConstructionCost());
+				DrawStringTruncated(x_str, y_str, STR_482F_COST, 0, max_width);
+				y_str += 11;
+			}
+
+			/* Draw the accepted cargos, if any. Otherwhise, will print "Nothing" */
+			if (indsp->accepts_cargo[0] != CT_INVALID) {
+				SetDParam(0, GetCargo(indsp->accepts_cargo[0])->name);
+				if (indsp->accepts_cargo[1] != CT_INVALID) {
+					SetDParam(1, GetCargo(indsp->accepts_cargo[1])->name);
+					str = STR_4828_REQUIRES;
+					if (indsp->accepts_cargo[2] != CT_INVALID) {
+						SetDParam(2, GetCargo(indsp->accepts_cargo[2])->name);
+						str = STR_4829_REQUIRES;
+					}
+				}
+			} else {
+				SetDParam(0, STR_00D0_NOTHING);
+			}
+			DrawStringTruncated(x_str, y_str, str, 0, max_width);
+
+			y_str += 11;
+			/* Draw the produced cargos, if any. Otherwhise, will print "Nothing" */
+			str = STR_4827_PRODUCES;
+			if (indsp->produced_cargo[0] != CT_INVALID) {
+				SetDParam(0, GetCargo(indsp->produced_cargo[0])->name);
+				if (indsp->produced_cargo[1] != CT_INVALID) {
+					SetDParam(1, GetCargo(indsp->produced_cargo[1])->name);
+					str = STR_4828_PRODUCES;
+				}
+			} else {
+				SetDParam(0, STR_00D0_NOTHING);
+			}
+			DrawStringTruncated(x_str, y_str, str, 0, max_width);
+
+			/* Get the additional purchase info text, if it has not already been */
+			if (_industrydata.additional_text[_industrydata.select] == STR_NULL) {   // Have i been called already?
+				if (HASBIT(indsp->callback_flags, CBM_IND_FUND_MORE_TEXT)) {          // No. Can it be called?
+					uint16 callback_res = GetIndustryCallback(CBID_INDUSTRY_FUND_MORE_TEXT, 0, 0, NULL, _industrydata.index[_industrydata.select], INVALID_TILE);
+					if (callback_res != CALLBACK_FAILED) {  // Did it failed?
+						StringID newtxt = GetGRFStringID(indsp->grf_prop.grffile->grfid, 0xD000 + callback_res);  // No. here's the new string
+						_industrydata.additional_text[_industrydata.select] = newtxt;   // Store it for further usage
+					}
+				}
+			}
+
+			y_str += 11;
+			/* Draw the Additional purchase text, provided by newgrf callback, if any.
+			 * Otherwhise, will print Nothing */
+			if (_industrydata.additional_text[_industrydata.select] != STR_NULL &&
+					_industrydata.additional_text[_industrydata.select] != STR_UNDEFINED) {
+
+				SetDParam(0, _industrydata.additional_text[_industrydata.select]);
+				DrawStringMultiLine(x_str, y_str, STR_JUST_STRING, max_width, wi->bottom - wi->top - 40);  // text is white, for now
+			}
+		} break;
+
+		case WE_CLICK:
+			switch (e->we.click.widget) {
+				case DYNA_INDU_MATRIX_WIDGET: {
+					IndustryType type;
+					int y = (e->we.click.pt.y - w->widget[DYNA_INDU_MATRIX_WIDGET].top) / 13 + w->vscroll.pos ;
+
+					if (y >= 0 && y < _industrydata.count) { //Isit within the boundaries of available data?
+						_industrydata.select = y;
+						type = _industrydata.index[_industrydata.select];
+
+						SetWindowDirty(w);
+						if ((_game_mode != GM_EDITOR && _patches.raw_industry_construction == 2 &&	GetIndustrySpec(type)->IsRawIndustry()) ||
+								type == INVALID_INDUSTRYTYPE) {
+							/* Reset the button state if going to prospecting or "build many industries" */
+							RaiseWindowButtons(w);
+							ResetObjectToPlace();
+						}
+					}
+				} break;
+
+				case DYNA_INDU_FUND_WIDGET: {
+					IndustryType type = _industrydata.index[_industrydata.select];
+
+					if (type == INVALID_INDUSTRYTYPE) {
+						HandleButtonClick(w, DYNA_INDU_FUND_WIDGET);
+						WP(w, def_d).data_1 = -1;
+
+						if (GetNumTowns() == 0) {
+							ShowErrorMessage(STR_0286_MUST_BUILD_TOWN_FIRST, STR_CAN_T_GENERATE_INDUSTRIES, 0, 0);
+						} else {
+							extern void GenerateIndustries();
+							_generating_world = true;
+							GenerateIndustries();
+							_generating_world = false;
+						}
+					} else if (_game_mode != GM_EDITOR && _patches.raw_industry_construction == 2 && GetIndustrySpec(type)->IsRawIndustry()) {
+						DoCommandP(0, type, 0, NULL, CMD_BUILD_INDUSTRY | CMD_MSG(STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY));
+						HandleButtonClick(w, DYNA_INDU_FUND_WIDGET);
+						WP(w, def_d).data_1 = -1;
+					} else if (HandlePlacePushButton(w, DYNA_INDU_FUND_WIDGET, SPR_CURSOR_INDUSTRY, 1, NULL)) {
+							WP(w, def_d).data_1 = _industrydata.select;
+					}
+				}
+				break;
+	} break;
+
+	case WE_RESIZE: {
+		w->vscroll.cap  += e->we.sizing.diff.y / (int)w->resize.step_height;
+		w->widget[DYNA_INDU_MATRIX_WIDGET].data = (w->vscroll.cap << 8) + 1;
+	} break;
+
+	case WE_PLACE_OBJ: {
+		IndustryType type = _industrydata.index[_industrydata.select];
+
+		if (WP(w, def_d).data_1 == -1) break;
+		if (_game_mode == GM_EDITOR) {
+			/* Show error if no town exists at all */
+			if (GetNumTowns() == 0) {
+				SetDParam(0, GetIndustrySpec(type)->name);
+				ShowErrorMessage(STR_0286_MUST_BUILD_TOWN_FIRST, STR_0285_CAN_T_BUILD_HERE, e->we.place.pt.x, e->we.place.pt.y);
+				return;
+			}
+
+			_current_player = OWNER_NONE;
+			_generating_world = true;
+			_ignore_restrictions = true;
+			if (!TryBuildIndustry(e->we.place.tile, type)) {
+				SetDParam(0, GetIndustrySpec(type)->name);
+				ShowErrorMessage(_error_message, STR_0285_CAN_T_BUILD_HERE, e->we.place.pt.x, e->we.place.pt.y);
+			} else {
+				ResetObjectToPlace();
+			}
+			_ignore_restrictions = false;
+			_generating_world = false;
+		} else if (DoCommandP(e->we.place.tile, type, 0, NULL, CMD_BUILD_INDUSTRY | CMD_MSG(STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY))) {
+			ResetObjectToPlace();
 		}
 	} break;
 
-	case WE_PLACE_OBJ:
-		if (DoCommandP(e->we.place.tile, _build_industry_types[_opt_ptr->landscape][WP(w, def_d).data_1], 0, NULL, CMD_BUILD_INDUSTRY | CMD_MSG(STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY)))
-			ResetObjectToPlace();
+	case WE_ABORT_PLACE_OBJ:
+		RaiseWindowButtons(w);
 		break;
 
-	case WE_ABORT_PLACE_OBJ:
-		RaiseWindowButtons(w);
+	case WE_TIMEOUT:
+		if (WP(w, def_d).data_1 == -1) {
+			RaiseWindowButtons(w);
+			WP(w, def_d).data_1 = 0;
+		}
 		break;
 	}
 }
 
-static const Widget _build_industry_land0_widgets[] = {
-{   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                       STR_018B_CLOSE_WINDOW},
-{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   169,     0,    13, STR_0314_FUND_NEW_INDUSTRY,     STR_018C_WINDOW_TITLE_DRAG_THIS},
-{      WWT_PANEL,   RESIZE_NONE,     7,     0,   169,    14,   115, 0x0,                            STR_NULL},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    16,    27, STR_0241_POWER_STATION,         STR_0263_CONSTRUCT_POWER_STATION},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    29,    40, STR_0242_SAWMILL,               STR_0264_CONSTRUCT_SAWMILL},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    42,    53, STR_0244_OIL_REFINERY,          STR_0266_CONSTRUCT_OIL_REFINERY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    55,    66, STR_0246_FACTORY,               STR_0268_CONSTRUCT_FACTORY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    68,    79, STR_0247_STEEL_MILL,            STR_0269_CONSTRUCT_STEEL_MILL},
-{   WIDGETS_END},
-};
-
-static const Widget _build_industry_land1_widgets[] = {
-{   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                       STR_018B_CLOSE_WINDOW},
-{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   169,     0,    13, STR_0314_FUND_NEW_INDUSTRY,     STR_018C_WINDOW_TITLE_DRAG_THIS},
-{      WWT_PANEL,   RESIZE_NONE,     7,     0,   169,    14,   115, 0x0,                            STR_NULL},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    16,    27, STR_0241_POWER_STATION,         STR_0263_CONSTRUCT_POWER_STATION},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    29,    40, STR_024C_PAPER_MILL,            STR_026E_CONSTRUCT_PAPER_MILL},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    42,    53, STR_0244_OIL_REFINERY,          STR_0266_CONSTRUCT_OIL_REFINERY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    55,    66, STR_024D_FOOD_PROCESSING_PLANT, STR_026F_CONSTRUCT_FOOD_PROCESSING},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    68,    79, STR_024E_PRINTING_WORKS,        STR_0270_CONSTRUCT_PRINTING_WORKS},
-{   WIDGETS_END},
-};
-
-static const Widget _build_industry_land2_widgets[] = {
-{   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                       STR_018B_CLOSE_WINDOW},
-{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   169,     0,    13, STR_0314_FUND_NEW_INDUSTRY,     STR_018C_WINDOW_TITLE_DRAG_THIS},
-{      WWT_PANEL,   RESIZE_NONE,     7,     0,   169,    14,   115, 0x0,                            STR_NULL},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    16,    27, STR_0250_LUMBER_MILL,           STR_0273_CONSTRUCT_LUMBER_MILL_TO},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    29,    40, STR_024D_FOOD_PROCESSING_PLANT, STR_026F_CONSTRUCT_FOOD_PROCESSING},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    42,    53, STR_0244_OIL_REFINERY,          STR_0266_CONSTRUCT_OIL_REFINERY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    55,    66, STR_0246_FACTORY,               STR_0268_CONSTRUCT_FACTORY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    68,    79, STR_0254_WATER_TOWER,           STR_0277_CONSTRUCT_WATER_TOWER_CAN},
-{   WIDGETS_END},
-};
-
-static const Widget _build_industry_land3_widgets[] = {
-{   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                       STR_018B_CLOSE_WINDOW},
-{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   169,     0,    13, STR_0314_FUND_NEW_INDUSTRY,     STR_018C_WINDOW_TITLE_DRAG_THIS},
-{      WWT_PANEL,   RESIZE_NONE,     7,     0,   169,    14,   115, 0x0,                            STR_NULL},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    16,    27, STR_0258_CANDY_FACTORY,         STR_027B_CONSTRUCT_CANDY_FACTORY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    29,    40, STR_025B_TOY_SHOP,              STR_027E_CONSTRUCT_TOY_SHOP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    42,    53, STR_025C_TOY_FACTORY,           STR_027F_CONSTRUCT_TOY_FACTORY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    55,    66, STR_025E_FIZZY_DRINK_FACTORY,   STR_0281_CONSTRUCT_FIZZY_DRINK_FACTORY},
-{   WIDGETS_END},
-};
-
-static const Widget _build_industry_land0_widgets_extra[] = {
-{   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                       STR_018B_CLOSE_WINDOW},
-{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   169,     0,    13, STR_0314_FUND_NEW_INDUSTRY,     STR_018C_WINDOW_TITLE_DRAG_THIS},
-{      WWT_PANEL,   RESIZE_NONE,     7,     0,   169,    14,   187, 0x0,                            STR_NULL},
-
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    16,    27, STR_0241_POWER_STATION,         STR_0263_CONSTRUCT_POWER_STATION},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    29,    40, STR_0242_SAWMILL,               STR_0264_CONSTRUCT_SAWMILL},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    42,    53, STR_0244_OIL_REFINERY,          STR_0266_CONSTRUCT_OIL_REFINERY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    55,    66, STR_0246_FACTORY,               STR_0268_CONSTRUCT_FACTORY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    68,    79, STR_0247_STEEL_MILL,            STR_0269_CONSTRUCT_STEEL_MILL},
-
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    84,    95, STR_0240_COAL_MINE,             STR_CONSTRUCT_COAL_MINE_TIP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    97,   108, STR_0243_FOREST,                STR_CONSTRUCT_FOREST_TIP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   110,   121, STR_0245_OIL_RIG,               STR_CONSTRUCT_OIL_RIG_TIP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   123,   134, STR_0248_FARM,                  STR_CONSTRUCT_FARM_TIP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   136,   147, STR_024A_OIL_WELLS,             STR_CONSTRUCT_OIL_WELLS_TIP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   149,   160, STR_0249_IRON_ORE_MINE,         STR_CONSTRUCT_IRON_ORE_MINE_TIP},
-
-{   WIDGETS_END},
-};
-
-static const Widget _build_industry_land1_widgets_extra[] = {
-{   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                       STR_018B_CLOSE_WINDOW},
-{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   169,     0,    13, STR_0314_FUND_NEW_INDUSTRY,     STR_018C_WINDOW_TITLE_DRAG_THIS},
-{      WWT_PANEL,   RESIZE_NONE,     7,     0,   169,    14,   174, 0x0,                            STR_NULL},
-
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    16,    27, STR_0241_POWER_STATION,         STR_0263_CONSTRUCT_POWER_STATION},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    29,    40, STR_024C_PAPER_MILL,            STR_026E_CONSTRUCT_PAPER_MILL},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    42,    53, STR_0244_OIL_REFINERY,          STR_0266_CONSTRUCT_OIL_REFINERY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    55,    66, STR_024D_FOOD_PROCESSING_PLANT, STR_026F_CONSTRUCT_FOOD_PROCESSING},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    68,    79, STR_024E_PRINTING_WORKS,        STR_0270_CONSTRUCT_PRINTING_WORKS},
-
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    84,    95, STR_0240_COAL_MINE,             STR_CONSTRUCT_COAL_MINE_TIP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    97,   108, STR_0243_FOREST,                STR_CONSTRUCT_FOREST_TIP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   110,   121, STR_0248_FARM,                  STR_CONSTRUCT_FARM_TIP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   123,   134, STR_024A_OIL_WELLS,             STR_CONSTRUCT_OIL_WELLS_TIP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   136,   147, STR_024F_GOLD_MINE,             STR_CONSTRUCT_GOLD_MINE_TIP},
+static const Widget _build_dynamic_industry_widgets[] = {
+{   WWT_CLOSEBOX,    RESIZE_NONE,    7,     0,    10,     0,    13, STR_00C5,                       STR_018B_CLOSE_WINDOW},
+{    WWT_CAPTION,   RESIZE_RIGHT,    7,    11,   169,     0,    13, STR_0314_FUND_NEW_INDUSTRY,     STR_018C_WINDOW_TITLE_DRAG_THIS},
+{     WWT_MATRIX,      RESIZE_RB,    7,     0,   157,    14,   118, 0x801,                          STR_INDUSTRY_SELECTION_HINT},
+{  WWT_SCROLLBAR,     RESIZE_LRB,    7,   158,   169,    14,   118, 0x0,                            STR_0190_SCROLL_BAR_SCROLLS_LIST},
+{      WWT_PANEL,     RESIZE_RTB,    7,     0,   169,   119,   199, 0x0,                            STR_NULL},
+{    WWT_TEXTBTN,     RESIZE_RTB,    7,     0,   157,   200,   211, STR_FUND_NEW_INDUSTRY,          STR_NULL},
+{  WWT_RESIZEBOX,    RESIZE_LRTB,    7,   158,   169,   200,   211, 0x0,                            STR_RESIZE_BUTTON},
 {   WIDGETS_END},
 };
 
-static const Widget _build_industry_land2_widgets_extra[] = {
-{   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                       STR_018B_CLOSE_WINDOW},
-{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   169,     0,    13, STR_0314_FUND_NEW_INDUSTRY,     STR_018C_WINDOW_TITLE_DRAG_THIS},
-{      WWT_PANEL,   RESIZE_NONE,     7,     0,   169,    14,   200, 0x0,                            STR_NULL},
-
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    16,    27, STR_0250_LUMBER_MILL,           STR_0273_CONSTRUCT_LUMBER_MILL_TO},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    29,    40, STR_024D_FOOD_PROCESSING_PLANT, STR_026F_CONSTRUCT_FOOD_PROCESSING},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    42,    53, STR_0244_OIL_REFINERY,          STR_0266_CONSTRUCT_OIL_REFINERY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    55,    66, STR_0246_FACTORY,               STR_0268_CONSTRUCT_FACTORY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    68,    79, STR_0254_WATER_TOWER,           STR_0277_CONSTRUCT_WATER_TOWER_CAN},
-
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    84,    95, STR_024A_OIL_WELLS,             STR_CONSTRUCT_OIL_WELLS_TIP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    97,   108, STR_0255_DIAMOND_MINE,          STR_CONSTRUCT_DIAMOND_MINE_TIP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   110,   121, STR_0256_COPPER_ORE_MINE,       STR_CONSTRUCT_COPPER_ORE_MINE_TIP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   123,   134, STR_0248_FARM,                  STR_CONSTRUCT_FARM_TIP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   136,   147, STR_0251_FRUIT_PLANTATION,      STR_CONSTRUCT_FRUIT_PLANTATION_TIP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   149,   160, STR_0252_RUBBER_PLANTATION,     STR_CONSTRUCT_RUBBER_PLANTATION_TIP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   162,   173, STR_0253_WATER_SUPPLY,          STR_CONSTRUCT_WATER_SUPPLY_TIP},
-{   WIDGETS_END},
-};
-
-static const Widget _build_industry_land3_widgets_extra[] = {
-{   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                       STR_018B_CLOSE_WINDOW},
-{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   169,     0,    13, STR_0314_FUND_NEW_INDUSTRY,     STR_018C_WINDOW_TITLE_DRAG_THIS},
-{      WWT_PANEL,   RESIZE_NONE,     7,     0,   169,    14,   187, 0x0,                            STR_NULL},
-
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    16,    27, STR_0258_CANDY_FACTORY,         STR_027B_CONSTRUCT_CANDY_FACTORY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    29,    40, STR_025B_TOY_SHOP,              STR_027E_CONSTRUCT_TOY_SHOP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    42,    53, STR_025C_TOY_FACTORY,           STR_027F_CONSTRUCT_TOY_FACTORY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    55,    66, STR_025E_FIZZY_DRINK_FACTORY,   STR_0281_CONSTRUCT_FIZZY_DRINK_FACTORY},
-
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    71,    82, STR_0257_COTTON_CANDY_FOREST,   STR_CONSTRUCT_COTTON_CANDY_TIP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    84,    95, STR_0259_BATTERY_FARM,          STR_CONSTRUCT_BATTERY_FARM_TIP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    97,   108, STR_025A_COLA_WELLS,            STR_CONSTRUCT_COLA_WELLS_TIP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   110,   121, STR_025D_PLASTIC_FOUNTAINS,     STR_CONSTRUCT_PLASTIC_FOUNTAINS_TIP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   123,   134, STR_025F_BUBBLE_GENERATOR,      STR_CONSTRUCT_BUBBLE_GENERATOR_TIP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   136,   147, STR_0260_TOFFEE_QUARRY,         STR_CONSTRUCT_TOFFEE_QUARRY_TIP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   149,   160, STR_0261_SUGAR_MINE,            STR_CONSTRUCT_SUGAR_MINE_TIP},
-{   WIDGETS_END},
-};
-
-
-static const WindowDesc _build_industry_land0_desc = {
-	WDP_AUTO, WDP_AUTO, 170, 116,
-	WC_BUILD_INDUSTRY, WC_NONE,
-	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
-	_build_industry_land0_widgets,
-	BuildIndustryWndProc
-};
-
-static const WindowDesc _build_industry_land1_desc = {
-	WDP_AUTO, WDP_AUTO, 170, 116,
+static const WindowDesc _build_industry_dynamic_desc = {
+	WDP_AUTO, WDP_AUTO, 170, 212,
 	WC_BUILD_INDUSTRY, WC_NONE,
-	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
-	_build_industry_land1_widgets,
-	BuildIndustryWndProc
-};
-
-static const WindowDesc _build_industry_land2_desc = {
-	WDP_AUTO, WDP_AUTO, 170, 116,
-	WC_BUILD_INDUSTRY, WC_NONE,
-	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
-	_build_industry_land2_widgets,
-	BuildIndustryWndProc
-};
-
-static const WindowDesc _build_industry_land3_desc = {
-	WDP_AUTO, WDP_AUTO, 170, 116,
-	WC_BUILD_INDUSTRY, WC_NONE,
-	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
-	_build_industry_land3_widgets,
-	BuildIndustryWndProc
-};
-
-static const WindowDesc _build_industry_land0_desc_extra = {
-	WDP_AUTO, WDP_AUTO, 170, 188,
-	WC_BUILD_INDUSTRY, WC_NONE,
-	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
-	_build_industry_land0_widgets_extra,
-	BuildIndustryWndProc
-};
-
-static const WindowDesc _build_industry_land1_desc_extra = {
-	WDP_AUTO, WDP_AUTO, 170, 175,
-	WC_BUILD_INDUSTRY, WC_NONE,
-	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
-	_build_industry_land1_widgets_extra,
-	BuildIndustryWndProc
-};
-
-static const WindowDesc _build_industry_land2_desc_extra = {
-	WDP_AUTO, WDP_AUTO, 170, 201,
-	WC_BUILD_INDUSTRY, WC_NONE,
-	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
-	_build_industry_land2_widgets_extra,
-	BuildIndustryWndProc
-};
-
-static const WindowDesc _build_industry_land3_desc_extra = {
-	WDP_AUTO, WDP_AUTO, 170, 188,
-	WC_BUILD_INDUSTRY, WC_NONE,
-	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
-	_build_industry_land3_widgets_extra,
-	BuildIndustryWndProc
-};
-
-static const WindowDesc * const _industry_window_desc[2][4] = {
-	{
-	&_build_industry_land0_desc,
-	&_build_industry_land1_desc,
-	&_build_industry_land2_desc,
-	&_build_industry_land3_desc,
-	},
-	{
-	&_build_industry_land0_desc_extra,
-	&_build_industry_land1_desc_extra,
-	&_build_industry_land2_desc_extra,
-	&_build_industry_land3_desc_extra,
-	},
+	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_RESIZABLE,
+	_build_dynamic_industry_widgets,
+	BuildDynamicIndustryWndProc,
 };
 
 void ShowBuildIndustryWindow()
 {
-	if (!IsValidPlayer(_current_player)) return;
-	AllocateWindowDescFront(_industry_window_desc[_patches.build_rawmaterial_ind][_opt_ptr->landscape], 0);
+	if (_game_mode != GM_EDITOR && !IsValidPlayer(_current_player)) return;
+	AllocateWindowDescFront(&_build_industry_dynamic_desc, 0);
 }
 
+static void UpdateIndustryProduction(Industry *i);
+
 static inline bool isProductionMinimum(const Industry *i, int pt) {
 	return i->production_rate[pt] == 1;
 }
@@ -299,14 +363,57 @@
 	 * WP(w,vp2_d).data_3 is for the click pos (left or right) */
 
 	switch (e->event) {
+	case WE_CREATE: {
+		/* Count the number of lines that we need to resize the GUI with */
+		const IndustrySpec *ind = GetIndustrySpec(GetIndustry(w->window_number)->type);
+		int lines = -3;
+
+		if (HASBIT(ind->callback_flags, CBM_IND_PRODUCTION_CARGO_ARRIVAL) || HASBIT(ind->callback_flags, CBM_IND_PRODUCTION_256_TICKS)) {
+			for (uint j = 0; j < 3 && ind->accepts_cargo[j] != CT_INVALID; j++) {
+				if (j == 0) lines++;
+				lines++;
+			}
+		} else if (ind->accepts_cargo[0] != CT_INVALID) {
+			lines++;
+		}
+
+		for (uint j = 0; j < 2 && ind->produced_cargo[j] != CT_INVALID; j++) {
+			if (j == 0) {
+				if (ind->accepts_cargo[0] != CT_INVALID) lines++;
+				lines++;
+			}
+			lines++;
+		}
+
+		if (HASBIT(ind->callback_flags, CBM_IND_WINDOW_MORE_TEXT)) lines += 2;
+
+		for (uint j = 5; j <= 7; j++) {
+			if (j != 5) w->widget[j].top += lines * 10;
+			w->widget[j].bottom += lines * 10;
+		}
+		w->height += lines * 10;
+	} break;
+
 	case WE_PAINT: {
-		const Industry *i = GetIndustry(w->window_number);
+		Industry *i = GetIndustry(w->window_number);
 		const IndustrySpec *ind = GetIndustrySpec(i->type);
+		int y = 111;
 
 		SetDParam(0, w->window_number);
 		DrawWindowWidgets(w);
 
-		if (ind->accepts_cargo[0] != CT_INVALID) {
+		if (HASBIT(ind->callback_flags, CBM_IND_PRODUCTION_CARGO_ARRIVAL) || HASBIT(ind->callback_flags, CBM_IND_PRODUCTION_256_TICKS)) {
+			for (uint j = 0; j < 3 && ind->accepts_cargo[j] != CT_INVALID; j++) {
+				if (j == 0) {
+					DrawString(2, y, STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING, 0);
+					y += 10;
+				}
+				SetDParam(0, ind->accepts_cargo[j]);
+				SetDParam(1, i->incoming_cargo_waiting[j]);
+				DrawString(4, y, STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO, 0);
+				y += 10;
+			}
+		} else if (ind->accepts_cargo[0] != CT_INVALID) {
 			StringID str;
 
 			SetDParam(0, GetCargo(ind->accepts_cargo[0])->name);
@@ -319,39 +426,44 @@
 					str = STR_4829_REQUIRES;
 				}
 			}
-			DrawString(2, 107, str, 0);
+			DrawString(2, y, str, 0);
+			y += 10;
 		}
 
-		if (ind->produced_cargo[0] != CT_INVALID) {
-			DrawString(2, 117, STR_482A_PRODUCTION_LAST_MONTH, 0);
+		for (uint j = 0; j < 2 && ind->produced_cargo[j] != CT_INVALID; j++) {
+			if (j == 0) {
+				if (ind->accepts_cargo[0] != CT_INVALID) y += 10;
+				DrawString(2, y, STR_482A_PRODUCTION_LAST_MONTH, 0);
+				y += 10;
+			}
 
-			SetDParam(0, ind->produced_cargo[0]);
-			SetDParam(1, i->total_production[0]);
+			SetDParam(0, ind->produced_cargo[j]);
+			SetDParam(1, i->last_month_production[j]);
 
-			SetDParam(2, i->pct_transported[0] * 100 >> 8);
-			DrawString(4 + (IsProductionAlterable(i) ? 30 : 0), 127, STR_482B_TRANSPORTED, 0);
+			SetDParam(2, i->last_month_pct_transported[j] * 100 >> 8);
+			DrawString(4 + (IsProductionAlterable(i) ? 30 : 0), y, STR_482B_TRANSPORTED, 0);
 			/* Let's put out those buttons.. */
 			if (IsProductionAlterable(i)) {
-				DrawArrowButtons(5, 127, 3, (WP(w, vp2_d).data_2 == 1) ? WP(w, vp2_d).data_3 : 0,
-						!isProductionMinimum(i, 0), !isProductionMaximum(i, 0));
+				DrawArrowButtons(5, y, 3, (WP(w, vp2_d).data_2 == j + 1) ? WP(w, vp2_d).data_3 : 0,
+						!isProductionMinimum(i, j), !isProductionMaximum(i, j));
 			}
+			y += 10;
+		}
 
-			if (ind->produced_cargo[1] != CT_INVALID) {
-				SetDParam(0, ind->produced_cargo[1]);
-				SetDParam(1, i->total_production[1]);
-				SetDParam(2, i->pct_transported[1] * 100 >> 8);
-				DrawString(4 + (IsProductionAlterable(i) ? 30 : 0), 137, STR_482B_TRANSPORTED, 0);
-				/* Let's put out those buttons.. */
-				if (IsProductionAlterable(i)) {
-					DrawArrowButtons(5, 137, 3, (WP(w, vp2_d).data_2 == 2) ? WP(w, vp2_d).data_3 : 0,
-						!isProductionMinimum(i, 1), !isProductionMaximum(i, 1));
+		/* Get the extra message for the GUI */
+		if (HASBIT(ind->callback_flags, CBM_IND_WINDOW_MORE_TEXT)) {
+			uint16 callback_res = GetIndustryCallback(CBID_INDUSTRY_WINDOW_MORE_TEXT, 0, 0, i, i->type, i->xy);
+			if (callback_res != CALLBACK_FAILED) {
+				StringID message = GetGRFStringID(ind->grf_prop.grffile->grfid, 0xD000 + callback_res);
+				if (message != STR_NULL && message != STR_UNDEFINED) {
+					y += 10;
+					DrawString(2, y, message, 0);
 				}
 			}
 		}
 
 		DrawWindowViewport(w);
-		}
-		break;
+	} break;
 
 	case WE_CLICK: {
 		Industry *i;
@@ -366,8 +478,8 @@
 			if (!IsProductionAlterable(i)) return;
 
 			x = e->we.click.pt.x;
-			line = (e->we.click.pt.y - 127) / 10;
-			if (e->we.click.pt.y >= 127 && IS_INT_INSIDE(line, 0, 2) &&
+			line = (e->we.click.pt.y - 121) / 10;
+			if (e->we.click.pt.y >= 121 && IS_INT_INSIDE(line, 0, 2) &&
 					GetIndustrySpec(i->type)->produced_cargo[line] != CT_INVALID) {
 				if (IS_INT_INSIDE(x, 5, 25) ) {
 					/* Clicked buttons, decrease or increase production */
@@ -423,7 +535,7 @@
 
 	for (byte j = 0; j < lengthof(ind->produced_cargo); j++) {
 		if (ind->produced_cargo[j] != CT_INVALID) {
-			i->total_production[j] = 8 * i->production_rate[j];
+			i->last_month_production[j] = 8 * i->production_rate[j];
 		}
 	}
 }
@@ -509,8 +621,8 @@
 					r = 1;
 				} else {
 					r =
-						(i->total_production[0] + i->total_production[1]) -
-						(j->total_production[0] + j->total_production[1]);
+						(i->last_month_production[0] + i->last_month_production[1]) -
+						(j->last_month_production[0] + j->last_month_production[1]);
 				}
 			}
 			break;
@@ -525,15 +637,15 @@
 					int pi;
 					int pj;
 
-					pi = i->pct_transported[0] * 100 >> 8;
+					pi = i->last_month_pct_transported[0] * 100 >> 8;
 					if (ind_i->produced_cargo[1] != CT_INVALID) {
-						int p = i->pct_transported[1] * 100 >> 8;
+						int p = i->last_month_pct_transported[1] * 100 >> 8;
 						if (p < pi) pi = p;
 					}
 
-					pj = j->pct_transported[0] * 100 >> 8;
+					pj = j->last_month_pct_transported[0] * 100 >> 8;
 					if (ind_j->produced_cargo[1] != CT_INVALID) {
-						int p = j->pct_transported[1] * 100 >> 8;
+						int p = j->last_month_pct_transported[1] * 100 >> 8;
 						if (p < pj) pj = p;
 					}
 
@@ -618,16 +730,16 @@
 			SetDParam(0, i->index);
 			if (ind->produced_cargo[0] != CT_INVALID) {
 				SetDParam(1, ind->produced_cargo[0]);
-				SetDParam(2, i->total_production[0]);
+				SetDParam(2, i->last_month_production[0]);
 
 				if (ind->produced_cargo[1] != CT_INVALID) {
 					SetDParam(3, ind->produced_cargo[1]);
-					SetDParam(4, i->total_production[1]);
-					SetDParam(5, i->pct_transported[0] * 100 >> 8);
-					SetDParam(6, i->pct_transported[1] * 100 >> 8);
+					SetDParam(4, i->last_month_production[1]);
+					SetDParam(5, i->last_month_pct_transported[0] * 100 >> 8);
+					SetDParam(6, i->last_month_pct_transported[1] * 100 >> 8);
 					DrawString(4, 28 + n * 10, STR_INDUSTRYDIR_ITEM_TWO, 0);
 				} else {
-					SetDParam(3, i->pct_transported[0] * 100 >> 8);
+					SetDParam(3, i->last_month_pct_transported[0] * 100 >> 8);
 					DrawString(4, 28 + n * 10, STR_INDUSTRYDIR_ITEM, 0);
 				}
 			} else {
--- a/src/industry_map.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/industry_map.h	Sat Jul 14 19:42:58 2007 +0000
@@ -160,7 +160,7 @@
 	_m[t].m2 = index;
 	_m[t].m3 = 0;
 	_m[t].m4 = 0;
-	_m[t].m5 = gfx;
+	SetIndustryGfx(t, gfx);
 }
 
 /**
@@ -246,4 +246,45 @@
 	_m[tile].m3 = state;
 }
 
+/**
+ * Get the random bits for this tile.
+ * Used for grf callbacks
+ * @param tile TileIndex of the tile to query
+ * @pre IsTileType(tile, MP_INDUSTRY)
+ * @return requested bits
+ * @todo implement the storage in map array
+ */
+static inline byte GetIndustryRandomBits(TileIndex tile)
+{
+	assert(IsTileType(tile, MP_INDUSTRY));
+	return 0;
+}
+
+/**
+ * Get the activated triggers bits for this industry tile
+ * Used for grf callbacks
+ * @param tile TileIndex of the tile to query
+ * @pre IsTileType(tile, MP_INDUSTRY)
+ * @return requested triggers
+ * @todo implement the storage in map array
+ */
+static inline byte GetIndustryTriggers(TileIndex tile)
+{
+	assert(IsTileType(tile, MP_INDUSTRY));
+	return 0;
+}
+
+
+/**
+ * Set the activated triggers bits for this industry tile
+ * Used for grf callbacks
+ * @param tile TileIndex of the tile to query
+ * @pre IsTileType(tile, MP_INDUSTRY)
+ * @todo implement the storage in map array
+ */
+static inline void SetIndustryTriggers(TileIndex tile, byte triggers)
+{
+	assert(IsTileType(tile, MP_INDUSTRY));
+}
+
 #endif /* INDUSTRY_MAP_H */
--- a/src/intro_gui.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/intro_gui.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -64,9 +64,11 @@
 		break;
 
 	case WE_CLICK:
+#ifdef ENABLE_NETWORK
 		/* Do not create a network server when you (just) have closed one of the game
 		 * creation/load windows for the network server. */
 		if (2 <= e->we.click.widget && e->we.click.widget <= 6) _is_network_server = false;
+#endif /* ENABLE_NETWORK */
 
 		switch (e->we.click.widget) {
 		case 2: ShowGenerateLandscape(); break;
--- a/src/landscape.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/landscape.cpp	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/american.txt	Sat Jul 14 19:42: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}
@@ -1034,7 +1034,10 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Deliver cargo to a station only when there is a demand: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Allow building very long bridges: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Allow goto depot orders: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Allow constructing raw material producing industries: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}Manual primary industry construction method: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :none
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :as other industries
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :prospecting
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Allow multiple similar industries per town: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Industries of the same type can be built close to each other: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Always show long date in the status bar: {ORANGE}{STRING}
@@ -1103,7 +1106,19 @@
 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_DEFAULT_RAIL_TYPE                            :{LTBLUE}Default rail type (after new game/game load): {ORANGE}{STRING}
+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_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Show building tools when no suitable vehicles are available: {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}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Max aircraft per player: {ORANGE}{STRING}
@@ -1186,7 +1201,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}
@@ -1226,7 +1241,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Are you sure you want to create a random landscape?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Many random towns
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Cover the map with randomly placed towns
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Many random industries
+STR_MANY_RANDOM_INDUSTRIES                                      :Many random industries
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Cover the map with randomly placed industries
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Can't generate industries...
 
@@ -1397,6 +1412,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 +1456,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 +1693,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 +1726,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 +1797,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 +1906,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 +1916,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
@@ -1934,6 +1980,13 @@
 STR_4829_REQUIRES                                               :{BLACK}Requires: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}Cargo waiting to be processed:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES                                               :{BLACK}Produces: {YELLOW}{STRING}
+STR_4828_PRODUCES                                               :{BLACK}Produces: {YELLOW}{STRING}, {STRING}
+############ range for produces ends
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Production last month:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% transported)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Center the main view on industry location
@@ -2048,8 +2101,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 +2181,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 +2193,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 +2209,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 +2261,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 +2300,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 +2612,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 +2633,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 +2681,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 +2699,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,12 +2733,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
+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
@@ -2696,6 +2764,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}
@@ -2704,8 +2774,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 {STRING} late
+STR_TIMETABLE_STATUS_EARLY                                      :This vehicle is currently running {STRING} early
+STR_TIMETABLE_TOTAL_TIME                                        :This timetable will take {STRING} to complete
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :This timetable will take at least {STRING} 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
@@ -2721,7 +2803,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...
@@ -2748,6 +2830,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...
@@ -2795,7 +2879,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...
@@ -2863,7 +2947,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}
@@ -2916,6 +3000,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!
@@ -3231,6 +3317,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}
@@ -3268,4 +3362,22 @@
 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}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}Name must be unique
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Go to next sign
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Go to previous sign
+
 ########
+
+STR_FUND_NEW_INDUSTRY                                           :{BLACK}Fund
+STR_PROSPECT_NEW_INDUSTRY                                       :{BLACK}Prospect
+STR_BUILD_NEW_INDUSTRY                                          :{BLACK}Build
+STR_INDUSTRY_SELECTION_HINT                                     :{BLACK}Choose the appropriate industry from this list
--- a/src/lang/brazilian_portuguese.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/brazilian_portuguese.txt	Sat Jul 14 19:42: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}
@@ -1036,7 +1036,10 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Somente entregar carga a uma estação quando houver procura: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Permitir a construção de pontes muito longas: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Permitir ordens de ir para o depósito: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Permitir construção de indústrias de matérias-primas: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}Método manual de constução de indústria primária: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :nenhum
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :como as outras indústrias
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :em prospecção
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Permitir várias indústrias semelhantes por cidade: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Indústrias do mesmo tipo podem ser construídas próximas: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Sempre exibir a data completa na barra de estado: {ORANGE}{STRING}
@@ -1091,6 +1094,7 @@
 STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Manutenção automática de helicópteros em heliportos: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Ligar ferramentas de terreno às ferramentas de transportes: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Rolar a tela no sentido oposto ao movimento do mouse: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING                             :{LTBLUE}Melhorar deslocamento do vizualizador extra: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Exibir distâncias quando usar ferramentas de construção: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Exibir cores das empresas: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES_NONE                                :Nenhum
@@ -1104,7 +1108,19 @@
 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_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Exibe ferramentas de construção na falta de veículos adequados: {ORANGE}{STRING}
 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}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Máximo de aeronaves por jogador: {ORANGE}{STRING}
@@ -1187,7 +1203,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}
@@ -1227,7 +1243,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Tem certeza que deseja criar um terreno aleatório?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Várias cidades aleatórias
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Cobrir o mapa com cidades colocadas aleatoriamente
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Várias indústrias aleatórias
+STR_MANY_RANDOM_INDUSTRIES                                      :Várias indústrias aleatórias
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Cobrir o mapa com indústrias colocadas aleatoriamente
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Impossível gerar indústrias...
 
@@ -1398,6 +1414,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :Inglês
 STR_NETWORK_LANG_GERMAN                                         :Alemão
 STR_NETWORK_LANG_FRENCH                                         :Francês
+STR_NETWORK_LANG_BRAZILIAN                                      :Brasileiro
+STR_NETWORK_LANG_BULGARIAN                                      :Búlgaro
+STR_NETWORK_LANG_CHINESE                                        :Chinês
+STR_NETWORK_LANG_CZECH                                          :Checo
+STR_NETWORK_LANG_DANISH                                         :Dinamarquês
+STR_NETWORK_LANG_DUTCH                                          :Holandês
+STR_NETWORK_LANG_ESPERANTO                                      :Esperanto
+STR_NETWORK_LANG_FINNISH                                        :Finlandês
+STR_NETWORK_LANG_HUNGARIAN                                      :Húngaro
+STR_NETWORK_LANG_ICELANDIC                                      :Islandês
+STR_NETWORK_LANG_ITALIAN                                        :Italiano
+STR_NETWORK_LANG_JAPANESE                                       :Japonês
+STR_NETWORK_LANG_KOREAN                                         :Coreano
+STR_NETWORK_LANG_LITHUANIAN                                     :Lituano
+STR_NETWORK_LANG_NORWEGIAN                                      :Norueguês
+STR_NETWORK_LANG_POLISH                                         :Polandês
+STR_NETWORK_LANG_PORTUGUESE                                     :Português
+STR_NETWORK_LANG_ROMANIAN                                       :Romeno
+STR_NETWORK_LANG_RUSSIAN                                        :Russo
+STR_NETWORK_LANG_SLOVAK                                         :Eslovaco
+STR_NETWORK_LANG_SLOVENIAN                                      :Esloveno
+STR_NETWORK_LANG_SPANISH                                        :Espanhol
+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 espera do jogo
@@ -1417,9 +1458,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}
@@ -1591,6 +1632,12 @@
 STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Ferrovia com pré-sinais
 STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Ferrovia com sinais de saída
 STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Ferrovia com sinais combinados
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Linha de trem com sinais normais e pré-sinais
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Linha de trem com sinais normais e de saída
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Linha de trem com sinais normais e sinais combo
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Linha de trem com pré-sinais e de saída
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Linha de trem com pré-sinais e sinais combo
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Linha de trem com sinais de saída e sinais combo
 STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Remova a estação de trem antes
 
 
@@ -1601,6 +1648,7 @@
 STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Construir rodovias
 STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Construção de Bonde
 STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Selecionar Ponte Rodoviária
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}... vias de mão única não podem ter junções
 STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Impossível construir rodovia aqui...
 STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}Impossível construir bonde aqui...
 STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Impossível remover rodovia daqui...
@@ -1647,7 +1695,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}
@@ -1680,7 +1728,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}
@@ -1753,7 +1801,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
@@ -1862,6 +1910,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
@@ -1871,9 +1920,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
@@ -1930,6 +1984,13 @@
 STR_4829_REQUIRES                                               :{BLACK}Necessário: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}Carga aguardando processamento
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES                                               :{BLACK}Produz: {YELLOW}{STRING}
+STR_4828_PRODUCES                                               :{BLACK}Produz: {YELLOW}{STRING}, {STRING}
+############ range for produces ends
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Produção no mês passado:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% transportado)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Centralizar visualização na localização da indústria
@@ -2044,8 +2105,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!
 
@@ -2125,7 +2185,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
@@ -2137,7 +2197,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
@@ -2153,20 +2213,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
@@ -2205,8 +2265,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)
@@ -2244,7 +2304,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
@@ -2556,7 +2616,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}
@@ -2577,6 +2637,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}
@@ -2618,13 +2685,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
@@ -2634,6 +2703,9 @@
 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...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}A locomotiva traseira sempre deve seguir sua complementar frontal
 STR_8838_N_A                                                    :N/D{SKIP}
@@ -2665,12 +2737,16 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Exibir capacidades de cada veículo
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Exibir capacidade total do trem, dividir por tipo de carga
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Lista de ordens - clique numa ordem para a selecionar
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Saltar a ordem atual, e iniciar a próxima
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Pula a ordem atual e executa a próxima. CTRL + clique pula a ordem selecionada
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Remover a ordem selecionada
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}A ordem selecionada fará com que o veículo não pare nas estações
 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
@@ -2692,6 +2768,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}
@@ -2700,8 +2778,20 @@
 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_TOTAL_TIME                                        :Esse horário será completo em {STRING}
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :Esse horário será completo em no mínimo {STRING} (nem todos agendados)
+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
@@ -2717,7 +2807,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...
@@ -2744,6 +2834,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...
@@ -2791,7 +2883,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...
@@ -2859,7 +2951,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}
@@ -2912,6 +3004,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!
@@ -3227,6 +3321,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}
@@ -3264,4 +3366,22 @@
 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}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}Nome deve ser único
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Próxima Placa
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Placa anterior
+
 ########
+
+STR_FUND_NEW_INDUSTRY                                           :{BLACK}Fundar
+STR_PROSPECT_NEW_INDUSTRY                                       :{BLACK}Prosperir
+STR_BUILD_NEW_INDUSTRY                                          :{BLACK}Construir
+STR_INDUSTRY_SELECTION_HINT                                     :{BLACK}Escolha a indústria apropriada
--- a/src/lang/bulgarian.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/bulgarian.txt	Sat Jul 14 19:42: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}
@@ -1036,7 +1036,9 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Доставяне на стока до станция само ако има търсене: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Строене на много дълги мостове: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Сервиз в маршрута: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Позволяване израждане на промишленост добиваща суровини: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :нищо
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :като други промишлености
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :предстоящ
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Няколко еднакви индустрии на град: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Индустрии от еднакъв тип могат да бъдат строени близо една до друга: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Показване на дълга дата в статус бара: {ORANGE}{STRING}
@@ -1050,6 +1052,7 @@
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Нов глобален навигатор (NPF, отменя NTP): {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 +1093,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 +1107,17 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Scrollwheel скорост на картата: {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 +1201,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}
@@ -1226,7 +1241,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Потвърдете създаването на случаен терен?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Много случайни градове
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Покриване на картата със случайно поставени градове
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Много случайни индустрии
+STR_MANY_RANDOM_INDUSTRIES                                      :Много случайни индустрии
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Покриване на картата със случайно поставени индустрии
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Не може да се генерира промишленост...
 
@@ -1397,6 +1412,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                                      :Eсперанто
+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 +1456,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}
@@ -1590,6 +1630,10 @@
 STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :ЖП линия с пре-сигнали
 STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :ЖП линия с изходни сигнали
 STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :ЖП линия с комбинирани сигнали
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Железопътна линиа с нормални и изходни сигнали
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Железопътна линиа с нормални и съединени сигнали
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Железопътна линиа с изходни и съединени сигнали
+STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Железопътната гара трябва да бъде премахната първо
 
 
 
@@ -1597,22 +1641,37 @@
 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_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_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 +1679,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 +1688,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 +1721,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}
@@ -1731,7 +1792,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 +1845,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 я и}
 STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
 STR_304A_NONE                                                   :{YELLOW}- Николко -
@@ -1797,6 +1862,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 +1901,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 +1911,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}Изтрий избраната запазената игра
@@ -1902,6 +1975,13 @@
 STR_4829_REQUIRES                                               :{BLACK}Нуждае се от: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}Товар чакащ до бъде преработен:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES                                               :{BLACK}Произвежда: {YELLOW}{STRING}
+STR_4828_PRODUCES                                               :{BLACK}Произвежда: {YELLOW}{STRING}, {STRING}
+############ range for produces ends
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Произведено миналия месец:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% превозено)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Центриране главния прозорец върху индустрията
@@ -2016,8 +2096,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!
 
@@ -2097,7 +2176,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}Цветове
@@ -2109,7 +2188,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}Строеж
@@ -2125,20 +2204,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}...няма заем за изплащане
@@ -2177,8 +2256,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)
@@ -2216,7 +2295,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% от акциите на тази компания
@@ -2247,6 +2326,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}Показване цветовите схеми на влаковете
@@ -2526,7 +2607,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}
@@ -2547,6 +2628,11 @@
 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_FOR                                        :Патувай за {STRING}
+STR_TIMETABLE_STAY_FOR                                          :и остани за {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} ден{P "" s}
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Отиващ към Влаковото депо на {TOWN}
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Отиващ към Влаковото депо на {TOWN}, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}На ремонт във Влаковото депо на {TOWN}
@@ -2588,13 +2674,14 @@
 STR_REFIT                                                       :{BLACK}Преустройство
 STR_REFIT_TIP                                                   :{BLACK}Избор какво преустройсто да се направи. Щракване със задържан контрол премахва инструкцията
 STR_REFIT_ORDER                                                 :(Преустройство към {STRING})
+STR_TIMETABLE_VIEW                                              :{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}Влакът трябва да бъде спрян в депото
@@ -2635,7 +2722,6 @@
 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}Прескачане на текущото назначение и насочване към следващото
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Изтриване на избраното назначение
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Преминавай през избраното назначение без спиране
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Добавяне на назначение преди избраната или в края на списъка
@@ -2662,6 +2748,7 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Не може да се преименува влак...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Изхвърляне на товара при достигане на избраното назначение
 STR_886F_TRANSFER                                               :{BLACK}Транфер
+STR_CLEAR_TIME                                                  :{BLACK}Изчисти времето
 
 STR_TRAIN_STOPPING                                              :{RED}Спира
 STR_TRAIN_STOPPING_VEL                                          :{RED}Спира, {VELOCITY}
@@ -2670,8 +2757,11 @@
 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}
+
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Промени времето
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Афтонапълване
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Кола на пътя
@@ -2687,7 +2777,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}Не може да продаде колата...
@@ -2714,6 +2804,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}Не може да преименуваш МПС-то...
@@ -2759,7 +2851,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}Не може да пратиш кораба в депото...
@@ -2827,7 +2919,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}
@@ -2880,6 +2972,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}МПС бе унищожено при сблъсък с НЛО!
@@ -3004,6 +3098,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}Продажба всички автомобили в гаража
@@ -3195,6 +3290,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}
@@ -3231,4 +3333,21 @@
 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}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}Името трябва да е уникално
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Отиди до следващиат знак
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Отиди до предишниат знак
+
 ########
+
+STR_FUND_NEW_INDUSTRY                                           :{BLACK}Фонд
+STR_PROSPECT_NEW_INDUSTRY                                       :{BLACK}Перспектива
+STR_BUILD_NEW_INDUSTRY                                          :{BLACK}Построи
--- a/src/lang/catalan.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/catalan.txt	Sat Jul 14 19:42: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}?
@@ -215,7 +215,7 @@
 STR_00F5_TRAINS                                                 :{BLACK}{TINYFONT}Trens
 STR_00F6_ROAD_VEHICLES                                          :{BLACK}{TINYFONT}Vehicles de carretera
 STR_00F7_SHIPS                                                  :{BLACK}{TINYFONT}Vaixells
-STR_00F8_AIRCRAFT                                               :{BLACK}{TINYFONT}Aeronaus
+STR_00F8_AIRCRAFT                                               :{BLACK}{TINYFONT}Avions
 STR_00F9_TRANSPORT_ROUTES                                       :{BLACK}{TINYFONT}Rutes de Transport
 STR_00FA_COAL_MINE                                              :{BLACK}{TINYFONT}Mina de Carbó
 STR_00FB_POWER_STATION                                          :{BLACK}{TINYFONT}Central Tèrmica
@@ -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)
@@ -443,7 +443,7 @@
 STR_017B_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Mostra la llista de trens de l'empresa
 STR_017C_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Mostra la llista de vehicles de l'empresa
 STR_017D_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Mostra la llista de vaixells de l'empresa
-STR_017E_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Mostra la llista d'aeronaus de l'empresa
+STR_017E_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Mostra la llista d'avions de l'empresa
 STR_017F_ZOOM_THE_VIEW_IN                                       :{BLACK}Apropar-se
 STR_0180_ZOOM_THE_VIEW_OUT                                      :{BLACK}Allunyar-se
 STR_0181_BUILD_RAILROAD_TRACK                                   :{BLACK}Construeix vies
@@ -461,7 +461,7 @@
 STR_STICKY_BUTTON                                               :{BLACK}Marca aquesta finestra com a no eliminable pel 'Tanca totes les Finestres'
 STR_RESIZE_BUTTON                                               :{BLACK}Prem i arrossega per canviar el tamany de la finestra
 STR_SAVELOAD_HOME_BUTTON                                        :{BLACK}Prem aquí per anar a la carpeta per defecte actual de desa/carrega
-STR_018D_DEMOLISH_BUILDINGS_ETC                                 :{BLACK}Demolició d'edificis etc. en un quadre de terreny
+STR_018D_DEMOLISH_BUILDINGS_ETC                                 :{BLACK}Enderroca edificis, etc. en un quadre de terreny
 STR_018E_LOWER_A_CORNER_OF_LAND                                 :{BLACK}Rebaixa una cantonada del terreny
 STR_018F_RAISE_A_CORNER_OF_LAND                                 :{BLACK}Eleva una cantonada del terreny
 STR_0190_SCROLL_BAR_SCROLLS_LIST                                :{BLACK}Barra de desplaçament - desplaça la llista amunt/avall
@@ -481,7 +481,7 @@
 ############ range for service numbers ends
 
 STR_019C_ROAD_VEHICLE                                           :Vehicle
-STR_019D_AIRCRAFT                                               :Aeronau
+STR_019D_AIRCRAFT                                               :Avió
 STR_019E_SHIP                                                   :Vaixell
 STR_019F_TRAIN                                                  :Tren
 STR_01A0_IS_GETTING_OLD                                         :{WHITE}{STRING} {COMMA} s'està envellint
@@ -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
@@ -777,7 +777,8 @@
 STR_02C3_GAME_OPTIONS                                           :Opcions del Joc
 STR_02C5_DIFFICULTY_SETTINGS                                    :Paràmetres de dificultat
 STR_02C7_CONFIG_PATCHES                                         :Configura pedaços
-STR_NEWGRF_SETTINGS                                             :Configuracions de Newgrf
+STR_NEWGRF_SETTINGS                                             :Extensions 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,22 +844,22 @@
 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'
 STR_030F_SELECT_SUB_ARCTIC_LANDSCAPE                            :{BLACK}Selecciona l'estil de paisatge 'subàrtic'
 STR_0310_SELECT_SUB_TROPICAL_LANDSCAPE                          :{BLACK}Selecciona l'estil de paisatge 'subtropical'
 STR_0311_SELECT_TOYLAND_LANDSCAPE                               :{BLACK}Selecciona l'estil de paisatge 'toyland'
-STR_0312_FUND_CONSTRUCTION_OF_NEW                               :{BLACK}Patrocina la construcció d'una nova indústria
+STR_0312_FUND_CONSTRUCTION_OF_NEW                               :{BLACK}Financia la construcció d'una nova indústria
 
 ############ range for menu starts
 STR_INDUSTRY_DIR                                                :Directori d'indústries
-STR_0313_FUND_NEW_INDUSTRY                                      :Patrocina una nova indústria
+STR_0313_FUND_NEW_INDUSTRY                                      :Financia una nova indústria
 ############ range ends here
 
-STR_0314_FUND_NEW_INDUSTRY                                      :{WHITE}Patrocina una nova indústria
+STR_0314_FUND_NEW_INDUSTRY                                      :{WHITE}Financia una nova indústria
 STR_JUST_STRING                                                 :{STRING}
 STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...només es pot construir en poblacions
 STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST                        :{WHITE}...només es pot construir en àrees de selva tropical
@@ -904,7 +904,7 @@
 
 STR_CURR_GBP                                                    :Lliures (£)
 STR_CURR_USD                                                    :Dòlars ($)
-STR_CURR_EUR                                                    :Euros (€)
+STR_CURR_EUR                                                    :Euro (€)
 STR_CURR_YEN                                                    :Iens (¥)
 STR_CURR_ATS                                                    :Shillings Austríacs (ATS)
 STR_CURR_BEF                                                    :Francs Belgues (BEF)
@@ -912,7 +912,7 @@
 STR_CURR_CZK                                                    :Corones Txeques (CZK)
 STR_CURR_DEM                                                    :Marcs Alemanys (DEM)
 STR_CURR_DKK                                                    :Corones Daneses (DKK)
-STR_CURR_ESP                                                    :Peseta (ESP)
+STR_CURR_ESP                                                    :Pesseta (ESP)
 STR_CURR_FIM                                                    :Marcs Finesos (FIM)
 STR_CURR_FRF                                                    :Franc (FRF)
 STR_CURR_GRD                                                    :Dracmes Gregues (GRD)
@@ -922,7 +922,7 @@
 STR_CURR_NLG                                                    :Florins Holandesos (NLG)
 STR_CURR_NOK                                                    :Corones Noruegues (NOK)
 STR_CURR_PLN                                                    :Zloty Polac (PLN)
-STR_CURR_ROL                                                    :Leu RomanÚs (ROL)
+STR_CURR_ROL                                                    :Leu Romanès (ROL)
 STR_CURR_RUR                                                    :Rubles Russos (RUR)
 STR_CURR_SIT                                                    :Eslovè Tolar (SIT)
 STR_CURR_SEK                                                    :Corones Sueques (SEK)
@@ -1001,16 +1001,16 @@
 STR_SHIP_HAS_VOID_ORDER                                         :{WHITE}Vaixell {COMMA} té una ordre buida
 STR_SHIP_HAS_DUPLICATE_ENTRY                                    :{WHITE}Vaixell {COMMA} té ordres duplicades
 STR_SHIP_HAS_INVALID_ENTRY                                      :{WHITE}Vaixell {COMMA} té una estació incorrecta en les ordres
-STR_AIRCRAFT_HAS_TOO_FEW_ORDERS                                 :{WHITE}Aeronau {COMMA} té massa poques ordres a la planificació
-STR_AIRCRAFT_HAS_VOID_ORDER                                     :{WHITE}Aeronau {COMMA} té una ordre buida
-STR_AIRCRAFT_HAS_DUPLICATE_ENTRY                                :{WHITE}Aeronau {COMMA} has duplicate orders
-STR_AIRCRAFT_HAS_INVALID_ENTRY                                  :{WHITE}Aeronau {COMMA} té una estació incorrecta en les ordres
+STR_AIRCRAFT_HAS_TOO_FEW_ORDERS                                 :{WHITE}L'avió {COMMA} té massa poques ordres a la planificació
+STR_AIRCRAFT_HAS_VOID_ORDER                                     :{WHITE}L'avió {COMMA} té una ordre buida
+STR_AIRCRAFT_HAS_DUPLICATE_ENTRY                                :{WHITE}L'avió {COMMA} té ordres duplicades
+STR_AIRCRAFT_HAS_INVALID_ENTRY                                  :{WHITE}L'avió {COMMA} té una estació incorrecta a les ordres
 # end of order system
 
 STR_TRAIN_AUTORENEW_FAILED                                      :{WHITE}Autorenovació ha fallat al tren {COMMA} (límit de diners)
 STR_ROADVEHICLE_AUTORENEW_FAILED                                :{WHITE}Autorenovació ha fallat a l'automòbil {COMMA} (límit de diners)
 STR_SHIP_AUTORENEW_FAILED                                       :{WHITE}Autorenovació ha fallat al vaixell {COMMA} (límit de diners)
-STR_AIRCRAFT_AUTORENEW_FAILED                                   :{WHITE}Autorenovació ha fallat a l'aeronau {COMMA} (límit de diners)
+STR_AIRCRAFT_AUTORENEW_FAILED                                   :{WHITE}L'autorenovació ha fallat en l'avió {COMMA} (límit de diners)
 STR_TRAIN_TOO_LONG_AFTER_REPLACEMENT                            :{WHITE}El tren {COMMA} és massa llarg després del canvi
 
 STR_CONFIG_PATCHES                                              :{BLACK}Configura Pedaços
@@ -1034,7 +1034,10 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Entrega càrreges en una estació només quan ho demana: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Permet construir ponts molt llargs: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Permet ordres anar a cotxeres: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Permet fabricar material no processat en indústries: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}Mètode de construcció de la indústria primària manual: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :cap
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :com les altres indústries
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :prospeccionant
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Permet vàries indústries similars per població: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Permet construir a prop indústries del mateix tipus: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Mostra sempre la data llarga a la barra d'estat: {ORANGE}{STRING}
@@ -1048,7 +1051,7 @@
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Nova cerca de rutes global (NPF, anul·la NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Multiplicador de pes per contenidor per simular trens pesats: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Permet situar parades en carreteres que són propietat del poble: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ADJACENT_STATIONS                            :{LTBLUE}Permetre construir estacions annexes: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADJACENT_STATIONS                            :{LTBLUE}Permet construir estacions annexes: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Permet sempre aeroports petits: {ORANGE}{STRING}
 
@@ -1098,20 +1101,32 @@
 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_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Mostra les eines de construcció quan no hi hagi disponibles vehicles adequats: {ORANGE}{STRING}
 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}
-STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Max aeronaus per jugador: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Max avions per jugador: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_SHIPS                                    :{LTBLUE}Max vaixells per jugador: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_AI_BUILDS_TRAINS                             :{LTBLUE}Desactiva trens per l'ordinador: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH                            :{LTBLUE}Desactiva automòbils per a l'ordinador: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT                           :{LTBLUE}Desactiva aeronaus per l'ordinador: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT                           :{LTBLUE}Desactiva els avions per l'ordinador: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_AI_BUILDS_SHIPS                              :{LTBLUE}Desactiva vaixells per l'ordinador: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_AINEW_ACTIVE                                 :{LTBLUE}Activa nova IA (alfa): {ORANGE}{STRING}
@@ -1121,8 +1136,8 @@
 STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED                      :{LTBLUE}Interval de manteniment per defecte dels trens: {ORANGE}desactivat
 STR_CONFIG_PATCHES_SERVINT_ROADVEH                              :{LTBLUE}Interval de manteniment per defecte dels automòbils: {ORANGE}{STRING} dies/%
 STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED                     :{LTBLUE}Interval de manteniment per defecte dels automòbils: {ORANGE}desactivat
-STR_CONFIG_PATCHES_SERVINT_AIRCRAFT                             :{LTBLUE}Interval de manteniment per defecte de les aeronaus: {ORANGE}{STRING} dies/%
-STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED                    :{LTBLUE}Interval de manteniment per defecte de les aeronaus: {ORANGE}desactivat
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT                             :{LTBLUE}Interval de manteniment per defecte dels avions: {ORANGE}{STRING} dies/%
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED                    :{LTBLUE}Interval de manteniment per defecte dels avions: {ORANGE}desactivat
 STR_CONFIG_PATCHES_SERVINT_SHIPS                                :{LTBLUE}Interval de manteniment per defecte dels vaixells: {ORANGE}{STRING} dies/%
 STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED                       :{LTBLUE}Interval de manteniment per defecte dels vaixells: {ORANGE}desactivat
 STR_CONFIG_PATCHES_NOSERVICE                                    :{LTBLUE}Desactiva manteniment quan les avaries s'estableixen a cap: {ORANGE}{STRING}
@@ -1186,7 +1201,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}
@@ -1226,13 +1241,13 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Estàs segur que vols crear un paisatge aleatori?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Moltes poblacions aleatòries
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Omple el mapa amb poblacions situades aleatòriament
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Moltes indústries aleatòries
+STR_MANY_RANDOM_INDUSTRIES                                      :Moltes indústries aleatòries
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Omple el mapa amb indústries situades aleatòriament
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}No es poden generar indústries...
 
 STR_LANDSCAPING_TOOLBAR_TIP                                     :{BLACK}Obre la barra d'eines del terreny per elevar/rebaixar nivell, plantar arbres, etc.
-STR_LANDSCAPING_TOOLBAR                                         :{WHITE}Creant paisatge
-STR_LEVEL_LAND_TOOLTIP                                          :{BLACK}Nivell de terreny
+STR_LANDSCAPING_TOOLBAR                                         :{WHITE}Creació de paisatge
+STR_LEVEL_LAND_TOOLTIP                                          :{BLACK}Nivella el terreny
 
 
 STR_TREES_RANDOM_TYPE                                           :{BLACK}Arbres de tipus aleatori
@@ -1270,21 +1285,21 @@
 STR_CONSTRUCT_COAL_MINE_TIP                                     :{BLACK}Construeix Mina de Carbó
 STR_CONSTRUCT_FOREST_TIP                                        :{BLACK}Planta un Bosc
 STR_CONSTRUCT_OIL_RIG_TIP                                       :{BLACK}Construeix una Plataforma Petrolífera
-STR_CONSTRUCT_FARM_TIP                                          :{BLACK}Funda Granja
+STR_CONSTRUCT_FARM_TIP                                          :{BLACK}Financia Granja
 STR_CONSTRUCT_COPPER_ORE_MINE_TIP                               :{BLACK}Construeix una Mina de Coure
 STR_CONSTRUCT_OIL_WELLS_TIP                                     :{BLACK}Perfora per buscar Petroli
 STR_CONSTRUCT_GOLD_MINE_TIP                                     :{BLACK}Construeix una Mina d'Or
 STR_CONSTRUCT_DIAMOND_MINE_TIP                                  :{BLACK}Construeix una Mina de Diamants
 STR_CONSTRUCT_IRON_ORE_MINE_TIP                                 :{BLACK}Construeix una Mina de Ferro
-STR_CONSTRUCT_FRUIT_PLANTATION_TIP                              :{BLACK}Funda Plantació de Fruita
-STR_CONSTRUCT_RUBBER_PLANTATION_TIP                             :{BLACK}Funda Plantació de Cautxú
-STR_CONSTRUCT_WATER_SUPPLY_TIP                                  :{BLACK}Funda Surtidor d'Aigua
+STR_CONSTRUCT_FRUIT_PLANTATION_TIP                              :{BLACK}Financia Plantació de Fruita
+STR_CONSTRUCT_RUBBER_PLANTATION_TIP                             :{BLACK}Financia Plantació de Cautxú
+STR_CONSTRUCT_WATER_SUPPLY_TIP                                  :{BLACK}Financia Surtidor d'Aigua
 STR_CONSTRUCT_COTTON_CANDY_TIP                                  :{BLACK}Planta un Bosc de Cotó de Sucre
-STR_CONSTRUCT_BATTERY_FARM_TIP                                  :{BLACK}Funda Granja de Piles
+STR_CONSTRUCT_BATTERY_FARM_TIP                                  :{BLACK}Financia Granja de Piles
 STR_CONSTRUCT_COLA_WELLS_TIP                                    :{BLACK}Perfora per buscar Cola
-STR_CONSTRUCT_PLASTIC_FOUNTAINS_TIP                             :{BLACK}Funda Fonts de Plàstic
+STR_CONSTRUCT_PLASTIC_FOUNTAINS_TIP                             :{BLACK}Financia Fonts de Plàstic
 STR_CONSTRUCT_BUBBLE_GENERATOR_TIP                              :{BLACK}Construeix un Generador de Bombolles
-STR_CONSTRUCT_TOFFEE_QUARRY_TIP                                 :{BLACK}Funda Cantera de Caramel
+STR_CONSTRUCT_TOFFEE_QUARRY_TIP                                 :{BLACK}Financia Cantera de Caramel
 STR_CONSTRUCT_SUGAR_MINE_TIP                                    :{BLACK}Construeix una Mina de Sucre
 
 STR_INDUSTRYDIR_CAPTION                                         :{WHITE}Indústries
@@ -1397,6 +1412,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :Anglès
 STR_NETWORK_LANG_GERMAN                                         :Alemany
 STR_NETWORK_LANG_FRENCH                                         :Francès
+STR_NETWORK_LANG_BRAZILIAN                                      :Brasiler
+STR_NETWORK_LANG_BULGARIAN                                      :Búlgar
+STR_NETWORK_LANG_CHINESE                                        :Xinès
+STR_NETWORK_LANG_CZECH                                          :Txec
+STR_NETWORK_LANG_DANISH                                         :Danès
+STR_NETWORK_LANG_DUTCH                                          :Holandès
+STR_NETWORK_LANG_ESPERANTO                                      :Esperanto
+STR_NETWORK_LANG_FINNISH                                        :Finès
+STR_NETWORK_LANG_HUNGARIAN                                      :Hongarès
+STR_NETWORK_LANG_ICELANDIC                                      :Islandès
+STR_NETWORK_LANG_ITALIAN                                        :Italià
+STR_NETWORK_LANG_JAPANESE                                       :Japonès
+STR_NETWORK_LANG_KOREAN                                         :Koreà
+STR_NETWORK_LANG_LITHUANIAN                                     :Lituà
+STR_NETWORK_LANG_NORWEGIAN                                      :Noruec
+STR_NETWORK_LANG_POLISH                                         :Polonès
+STR_NETWORK_LANG_PORTUGUESE                                     :Portuguès
+STR_NETWORK_LANG_ROMANIAN                                       :Romanès
+STR_NETWORK_LANG_RUSSIAN                                        :Rus
+STR_NETWORK_LANG_SLOVAK                                         :Eslovac
+STR_NETWORK_LANG_SLOVENIAN                                      :Eslovè
+STR_NETWORK_LANG_SPANISH                                        :Espanyol
+STR_NETWORK_LANG_SWEDISH                                        :Suec
+STR_NETWORK_LANG_TURKISH                                        :Turc
+STR_NETWORK_LANG_UKRAINIAN                                      :Ucraïnès
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Lobby de partida multijugador
@@ -1416,9 +1456,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}
@@ -1559,7 +1599,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
@@ -1571,7 +1611,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
@@ -1590,6 +1630,12 @@
 STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Via de tren amb pre-senyals
 STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Via de tren amb senyals de sortida
 STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Via de tren amb senyals combinades
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Via de tren amb senyals normals i pre-senyals
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Via de tren amb senyals normals i senyals de sortida
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Via de tren amb senyals normals i senyals combinades
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Via de tren amb pre-senyals i senyals de sortida
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Via de tren amb pre-senyals i senyals combinades
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Via de tren amb senyals de sortida i senyals combinades
 STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Primer has de treure la via de l'estació
 
 
@@ -1598,7 +1644,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...
@@ -1614,9 +1660,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
@@ -1647,7 +1693,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}
@@ -1680,7 +1726,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}
@@ -1716,19 +1762,19 @@
 STR_2046_SMALL_ADVERTISING_CAMPAIGN                             :Petita campanya de publicitat
 STR_2047_MEDIUM_ADVERTISING_CAMPAIGN                            :Mitjana campanya de publicitat
 STR_2048_LARGE_ADVERTISING_CAMPAIGN                             :Gran campanya de publicitat
-STR_2049_FUND_LOCAL_ROAD_RECONSTRUCTION                         :Patrocina la reconstrucció dels carrers de la població
+STR_2049_FUND_LOCAL_ROAD_RECONSTRUCTION                         :Financia la reconstrucció dels carrers de la població
 STR_204A_BUILD_STATUE_OF_COMPANY                                :Construeix una estàtua del propietari de l'empresa
-STR_204B_FUND_NEW_BUILDINGS                                     :Patrocina nous edificis
+STR_204B_FUND_NEW_BUILDINGS                                     :Financia 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}
-STR_2050_FUND_THE_RECONSTRUCTION                                :{WHITE}{STRING}{}{YELLOW} Patrocina la reconstrucció de la xarxa local de carrers. Causa una notable distorsió del trànsit durant 6 mesos.{}  Cost: {CURRENCY}
+STR_2050_FUND_THE_RECONSTRUCTION                                :{WHITE}{STRING}{}{YELLOW} Financia la reconstrucció de la xarxa local de carrers. Dificulta notablement el trànsit durant 6 mesos.{}  Cost: {CURRENCY}
 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_2052_FUND_THE_CONSTRUCTION_OF                               :{WHITE}{STRING}{}{YELLOW} Financia la construcció de nous edificis comercials a 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})
@@ -1751,7 +1797,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
@@ -1832,7 +1878,7 @@
 STR_305C_0                                                      :{STATION} {STATIONFEATURES}
 STR_STATION_SIGN_TINY                                           :{TINYFONT}{STATION}
 STR_305E_RAILROAD_STATION                                       :Estació de Ferrocarril
-STR_305F_AIRCRAFT_HANGAR                                        :Hangar d'Aeronaus
+STR_305F_AIRCRAFT_HANGAR                                        :Hangar d'Avions
 STR_3060_AIRPORT                                                :Aeroport
 STR_3061_TRUCK_LOADING_AREA                                     :Àrea de càrrega de camions
 STR_3062_BUS_STATION                                            :Parada d'autobús
@@ -1860,6 +1906,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
@@ -1869,9 +1916,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
@@ -1928,6 +1980,13 @@
 STR_4829_REQUIRES                                               :{BLACK}Necessita: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}Càrrega en espera de ser processada:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES                                               :{BLACK}Produeix: {YELLOW}{STRING}
+STR_4828_PRODUCES                                               :{BLACK}Produeix: {YELLOW}{STRING}, {STRING}
+############ range for produces ends
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Producció del darrer mes:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% transportat)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Centra la pantalla principal al lloc de l'indústria
@@ -2007,7 +2066,7 @@
 STR_SV_TRAIN_NAME                                               :Tren {COMMA}
 STR_SV_ROADVEH_NAME                                             :Vehicle {COMMA}
 STR_SV_SHIP_NAME                                                :Vaixell {COMMA}
-STR_SV_AIRCRAFT_NAME                                            :Aeronau {COMMA}
+STR_SV_AIRCRAFT_NAME                                            :Avió {COMMA}
 
 STR_SV_STNAME                                                   :{STRING}
 STR_SV_STNAME_NORTH                                             :{STRING} Nort
@@ -2042,8 +2101,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!
 
@@ -2123,7 +2181,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
@@ -2135,36 +2193,36 @@
 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ó
 STR_7012_NEW_VEHICLES                                           :{GOLD}Nous Vehicles
 STR_7013_TRAIN_RUNNING_COSTS                                    :{GOLD}Desp. de Circ. de Trens
 STR_7014_ROAD_VEH_RUNNING_COSTS                                 :{GOLD}Desp. de Circ. de Vehicles
-STR_7015_AIRCRAFT_RUNNING_COSTS                                 :{GOLD}Desp. de Circ. d'Aeronaus
+STR_7015_AIRCRAFT_RUNNING_COSTS                                 :{GOLD}Desp. de Circ. d'Avions
 STR_7016_SHIP_RUNNING_COSTS                                     :{GOLD}Desp. de Circ. de Vaixells
 STR_7017_PROPERTY_MAINTENANCE                                   :{GOLD}Manteniment de Propietats
 STR_7018_TRAIN_INCOME                                           :{GOLD}Ingressos de Tren
 STR_7019_ROAD_VEHICLES_INCOME                                   :{GOLD}Ingressos de Vehicles
-STR_701A_AIRCRAFT_INCOME                                        :{GOLD}Ingressos d'Aeronaus
+STR_701A_AIRCRAFT_INCOME                                        :{GOLD}Ingressos d'Avions
 STR_701B_SHIP_INCOME                                            :{GOLD}Ingressos de Vaixells
-STR_701C_LOAN_INTEREST                                          :{GOLD}Interessos del Prèstec
+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}Préstec Màxim:  {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
@@ -2183,7 +2241,7 @@
 STR_7039_VEHICLES                                               :{GOLD}Vehicles:
 STR_TRAINS                                                      :{WHITE}{COMMA} tren{P "" s}
 STR_ROAD_VEHICLES                                               :{WHITE}{COMMA} automòbil{P "" s}
-STR_AIRCRAFT                                                    :{WHITE}{COMMA} aeronau{P "" s}
+STR_AIRCRAFT                                                    :{WHITE}{COMMA} avió{P "" ns}
 STR_SHIPS                                                       :{WHITE}{COMMA} vaixell{P "" s}
 STR_7042_NONE                                                   :{WHITE}Cap
 STR_7043_FACE_SELECTION                                         :{WHITE}Selecció de cares
@@ -2203,8 +2261,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)
@@ -2242,7 +2300,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
@@ -2546,7 +2604,7 @@
 STR_8101_WE_HAVE_JUST_DESIGNED_A                                :{GOLD}Acabem de dissenyar el nou {STRING} - estàs interessat en fer ús exclusiu d'aquest vehicle durant un any, per veure com va, abans del seu llançament mundial ?
 STR_8102_RAILROAD_LOCOMOTIVE                                    :locomotora de tren
 STR_8103_ROAD_VEHICLE                                           :automòbil
-STR_8104_AIRCRAFT                                               :aeronau
+STR_8104_AIRCRAFT                                               :avió
 STR_8105_SHIP                                                   :vaixell
 STR_8106_MONORAIL_LOCOMOTIVE                                    :locomotora de monorail
 STR_8107_MAGLEV_LOCOMOTIVE                                      :locomotora de maglev
@@ -2554,7 +2612,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}
@@ -2575,6 +2633,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}
@@ -2593,8 +2658,8 @@
 STR_881A_TRAINS_CAN_ONLY_BE_ALTERED                             :{WHITE}Els trens només es poden modificar quan estan parats dins d'una cotxera
 STR_881B_TRAINS                                                 :{WHITE}{COMPANY} - {COMMA} Trens
 
-STR_881C_NEW_RAIL_VEHICLES                                      :{WHITE}Nous Vehicles
-STR_NEW_ELRAIL_VEHICLES                                         :{WHITE}Nous vehicles de Via Electrificada
+STR_881C_NEW_RAIL_VEHICLES                                      :{WHITE}Nous Trens
+STR_NEW_ELRAIL_VEHICLES                                         :{WHITE}Nous Trens de Via Electrificada
 STR_881D_NEW_MONORAIL_VEHICLES                                  :{WHITE}Nous Trens Monorail
 STR_881E_NEW_MAGLEV_VEHICLES                                    :{WHITE}Nous Trens Maglev
 STR_ALL_AVAIL_RAIL_VEHICLES                                     :{WHITE}Vehicles amb Vies
@@ -2609,20 +2674,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
@@ -2632,6 +2699,9 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}No es pot afegir una nova ordre...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}No es pot esborrar aquesta ordre...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}No es pot modificar aquesta ordre...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Impossible moure aquesta ordre...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Impossible saltar l'ordre actual...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Impossible saltar l'ordre seleccionada...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}No es pot moure el vehicle...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}La màquina posterior sempre ha de seguir la seva parella davantera
 STR_8838_N_A                                                    :N/A{SKIP}
@@ -2663,12 +2733,16 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Mostra les capacitats de cada element
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Mostra la capacitat total del tren, separat per tipus de càrrega
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Llista d'ordres - clica en una per seleccionar-la
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Salta l'ordre actual i comença la següent
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Salta l'ordre actual, i comença la següent. CTRL + clic salta l'ordre seleccionada
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Esborra l'ordre seleccionada
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Fer sense parades l'ordre seleccionada
 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
@@ -2689,7 +2763,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}Reset. control de retràs
 
 STR_TRAIN_STOPPING                                              :{RED}Parant
 STR_TRAIN_STOPPING_VEL                                          :{RED}Parant, a {VELOCITY}
@@ -2698,8 +2774,20 @@
 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 {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_TOTAL_TIME                                        :L'horari tardarà {STRING} a complir-se
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :L'horari tardarà almenys {STRING} a complir-se (no tot està planificat)
+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í
@@ -2715,7 +2803,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...
@@ -2742,6 +2830,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Llista de selecció de Vehicles - clica en un vehicle per informació
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Construeix l'automòbil seleccionat
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Cost: {CURRENCY}{}Velocitat: {VELOCITY}{}Cost de circulació: {CURRENCY}/any{}Capacitat: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Capacitat: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Anomena automòbil
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}No es pot anomenar l'automòbil...
@@ -2775,7 +2865,7 @@
 STR_9804_NEW_SHIPS                                              :{BLACK}Nous Vaixells
 STR_9805_SHIPS                                                  :{WHITE}{COMPANY} - {COMMA} Vaixells
 STR_9808_NEW_SHIPS                                              :{WHITE}Nous Vaixells
-STR_9809_BUILD_SHIP                                             :{BLACK}Construeix un Vaixell
+STR_9809_BUILD_SHIP                                             :{BLACK}Construeix Vaixell
 STR_CLONE_SHIP                                                  :{BLACK}Clona Vaixell
 STR_CLONE_SHIP_INFO                                             :{BLACK}Fa una còpia del vaixell. Control-Clic compartirà les ordres
 STR_CLONE_SHIP_DEPOT_INFO                                       :{BLACK}Fa una còpia del vaixell. Prem aquest botó i després en un vaixell dins o fora les drassanes. Control-Clic compartirà les ordres
@@ -2789,7 +2879,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...
@@ -2841,15 +2931,15 @@
 ##id 0xA000
 STR_A000_AIRPORTS                                               :{WHITE}Aeroports
 STR_A001_CAN_T_BUILD_AIRPORT_HERE                               :{WHITE}Aquí no es pot construir un aeroport...
-STR_A002_AIRCRAFT_HANGAR                                        :{WHITE}{STATION} Hangar d'Aeronaus
-STR_A003_NEW_AIRCRAFT                                           :{BLACK}Nova Aeronau
-STR_CLONE_AIRCRAFT                                              :{BLACK}Clona Aeronau
-STR_CLONE_AIRCRAFT_INFO                                         :{BLACK}Fa una còpia de l'aeronau. Control-Clic compartirà les ordres
-STR_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW                           :{BLACK}Fa una còpia de l'aeronau. Prem aquest botó i després en una aeronau dins o fora l'hangar. Control-Clic compartirà les ordres
-STR_A005_NEW_AIRCRAFT                                           :{WHITE}Nova Aeronau
-STR_A006_BUILD_AIRCRAFT                                         :{BLACK}Construeix una Aeronau
-STR_A008_CAN_T_BUILD_AIRCRAFT                                   :{WHITE}No es pot construir l'aeronau...
-STR_A009_AIRCRAFT                                               :{WHITE}{COMPANY} - {COMMA} Aeronaus
+STR_A002_AIRCRAFT_HANGAR                                        :{WHITE}{STATION} Hangar d'Avions
+STR_A003_NEW_AIRCRAFT                                           :{BLACK}Nou Avió
+STR_CLONE_AIRCRAFT                                              :{BLACK}Clona Avió
+STR_CLONE_AIRCRAFT_INFO                                         :{BLACK}Fa una còpia de l'avió. Control-Clic compartirà les ordres
+STR_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW                           :{BLACK}Fa una còpia de l'avió. Prem aquest botó i després en un avió dins o fora l'hangar. Control-Clic compartirà les ordres
+STR_A005_NEW_AIRCRAFT                                           :{WHITE}Nou Avió
+STR_A006_BUILD_AIRCRAFT                                         :{BLACK}Construeix Avió
+STR_A008_CAN_T_BUILD_AIRCRAFT                                   :{WHITE}No es pot construir l'avió...
+STR_A009_AIRCRAFT                                               :{WHITE}{COMPANY} - {COMMA} Avions
 STR_A00A                                                        :{WHITE}{VEHICLE}
 STR_A00B_ORDERS                                                 :{WHITE}{VEHICLE} (Ordres)
 STR_A00C_DETAILS                                                :{WHITE}{VEHICLE} (Detalls)
@@ -2857,59 +2947,61 @@
 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_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}No es pot enviar l'aeronau a l'hangar...
+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'avió 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}
 STR_HEADING_FOR_HANGAR_SERVICE                                  :{LTBLUE}Revisió a l'hangar de {STATION}
 STR_HEADING_FOR_HANGAR_SERVICE_VEL                              :{LTBLUE}Revisió a l'hangar de {STATION}, {VELOCITY}
-STR_A014_AIRCRAFT_IS_WAITING_IN                                 :{WHITE}L' aeronau {COMMA} esperant a l'hangar
-STR_A015_AIRCRAFT_IN_THE_WAY                                    :{WHITE}Aeronau en el camí
-STR_A016_CAN_T_STOP_START_AIRCRAFT                              :{WHITE}No es pot parar/arrencar l'aeronau...
-STR_A017_AIRCRAFT_IS_IN_FLIGHT                                  :{WHITE}Aeronau en vol
+STR_A014_AIRCRAFT_IS_WAITING_IN                                 :{WHITE}L'avió {COMMA} està esperant a l'hangar
+STR_A015_AIRCRAFT_IN_THE_WAY                                    :{WHITE}Avió al camí
+STR_A016_CAN_T_STOP_START_AIRCRAFT                              :{WHITE}No es pot parar/arrencar l'avió...
+STR_A017_AIRCRAFT_IS_IN_FLIGHT                                  :{WHITE}L'avió està volant
 STR_A019_CAPACITY                                               :{BLACK}Capacitat: {LTBLUE}{CARGO}, {CARGO}
 STR_A01A_CAPACITY                                               :{BLACK}Capacitat: {LTBLUE}{CARGO}
-STR_A01B_AIRCRAFT_MUST_BE_STOPPED                               :{WHITE}L' aeronau s'ha de parar a l'hangar
-STR_A01C_CAN_T_SELL_AIRCRAFT                                    :{WHITE}No es pot vendre l' aeronau...
+STR_A01B_AIRCRAFT_MUST_BE_STOPPED                               :{WHITE}L'avió s'ha de parar a l'hangar
+STR_A01C_CAN_T_SELL_AIRCRAFT                                    :{WHITE}No es pot vendre l'avió...
 STR_A01D_AIRPORT_CONSTRUCTION                                   :Construcció d'Aeroport
 STR_A01E_BUILD_AIRPORT                                          :{BLACK}Construeix un aeroport
-STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT                             :{BLACK}Aeronau - clica en l'aeronau per informació
-STR_A020_BUILD_NEW_AIRCRAFT_REQUIRES                            :{BLACK}Construeix noves aeronaus (necessites un aeroport amb hangar)
-STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT                             :{BLACK}Aeronau - clica en l' aeronau per informació
-STR_A022_BUILD_NEW_AIRCRAFT                                     :{BLACK}Construeix noves aeronaus
-STR_A023_DRAG_AIRCRAFT_TO_HERE_TO                               :{BLACK}Arrossega l'aeronau fins aquí per vendre-la
+STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT                             :{BLACK}Avió - clica sobre l'avió per informació
+STR_A020_BUILD_NEW_AIRCRAFT_REQUIRES                            :{BLACK}Construeix nous avions (necessites un aeroport amb hangar)
+STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT                             :{BLACK}Avió - clica sobre l'avió per informació
+STR_A022_BUILD_NEW_AIRCRAFT                                     :{BLACK}Construeix nous avions
+STR_A023_DRAG_AIRCRAFT_TO_HERE_TO                               :{BLACK}Arrossega l'avió fins aquí per vendre'l
 STR_A024_CENTER_MAIN_VIEW_ON_HANGAR                             :{BLACK}Centra la pantalla principal en la situació de l'hangar
-STR_A025_AIRCRAFT_SELECTION_LIST                                :{BLACK}Llista de selecció d'Aeronaus - clica en una aeronau per informació
-STR_A026_BUILD_THE_HIGHLIGHTED_AIRCRAFT                         :{BLACK}Construeix l'aeronau seleccionada
-STR_A027_CURRENT_AIRCRAFT_ACTION                                :{BLACK}Accions sobre l'aeronau actual - clica aquí per parar/arrencar l'aeronau
-STR_A028_SHOW_AIRCRAFT_S_ORDERS                                 :{BLACK}Mostra les ordres de l'aeronau
-STR_A029_CENTER_MAIN_VIEW_ON_AIRCRAFT                           :{BLACK}Centra la pantalla principal a la situació de l'aeronau
-STR_A02A_SEND_AIRCRAFT_TO_HANGAR                                :{BLACK}Envia aeronau a l'hangar
-STR_A02B_SHOW_AIRCRAFT_DETAILS                                  :{BLACK}Mostra els detalls de l'aeronau
+STR_A025_AIRCRAFT_SELECTION_LIST                                :{BLACK}Llista de selecció d'Avions - clica sobre l'avió per informació
+STR_A026_BUILD_THE_HIGHLIGHTED_AIRCRAFT                         :{BLACK}Construeix l'avió seleccionat
+STR_A027_CURRENT_AIRCRAFT_ACTION                                :{BLACK}Accions sobre l'avió actual - clica aquí per parar/arrencar l'avió
+STR_A028_SHOW_AIRCRAFT_S_ORDERS                                 :{BLACK}Mostra les ordres de l'avió
+STR_A029_CENTER_MAIN_VIEW_ON_AIRCRAFT                           :{BLACK}Centra la pantalla principal a la situació de l'avió
+STR_A02A_SEND_AIRCRAFT_TO_HANGAR                                :{BLACK}Envia avió a l'hangar
+STR_A02B_SHOW_AIRCRAFT_DETAILS                                  :{BLACK}Mostra els detalls de l'avió
 STR_A02E_COST_MAX_SPEED_CAPACITY                                :{BLACK}Cost: {CURRENCY} Max. Velocitat: {VELOCITY}{}Capacitat: {COMMA} passatgers, {COMMA} sacs de correu{}Cost de Circulació: {CURRENCY}/any
 
-STR_A030_NAME_AIRCRAFT                                          :{WHITE}Anomena aeronau
-STR_A031_CAN_T_NAME_AIRCRAFT                                    :{WHITE}No es pot anomenar aeronaus...
-STR_A032_NAME_AIRCRAFT                                          :{BLACK}Anomena aeronau
-STR_A033_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Celebració popular . . .{}La primera aeronau arriba a {STATION}!
+STR_A030_NAME_AIRCRAFT                                          :{WHITE}Anomena avió
+STR_A031_CAN_T_NAME_AIRCRAFT                                    :{WHITE}No es pot anomenar l'avió...
+STR_A032_NAME_AIRCRAFT                                          :{BLACK}Anomena avió
+STR_A033_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Celebració popular . . .{}El primer avió arriba a {STATION}!
 STR_A034_PLANE_CRASH_DIE_IN_FIREBALL                            :{BLACK}{BIGFONT}Accident d'avió!{}{COMMA} moren en una bola de foc a {STATION}
-STR_PLANE_CRASH_OUT_OF_FUEL                                     :{BLACK}{BIGFONT}Accident d'aviació!{}Aeronau sense combustible, {COMMA} morts en una bola de foc!
+STR_PLANE_CRASH_OUT_OF_FUEL                                     :{BLACK}{BIGFONT}Accident d'aviació!{}L'avió s'ha quedat sense combustible, {COMMA} morts en l'accident!
 STR_A036                                                        :{TINYFONT}{BLACK}{STATION}
 STR_A037_RENAME                                                 :{BLACK}Reanomena
-STR_A038_RENAME_AIRCRAFT_TYPE                                   :{BLACK}Reanomena tipus d'aeronau
-STR_A039_RENAME_AIRCRAFT_TYPE                                   :{WHITE}Reanomena tipus d'aeronau
-STR_A03A_CAN_T_RENAME_AIRCRAFT_TYPE                             :{WHITE}No es pot reanomenar tipus d'aeronau...
-STR_A03B_REFIT_AIRCRAFT_TO_CARRY                                :{BLACK}Remodela aeronaus per transportar diferent tipus de càrrega
+STR_A038_RENAME_AIRCRAFT_TYPE                                   :{BLACK}Reanomena tipus d'avió
+STR_A039_RENAME_AIRCRAFT_TYPE                                   :{WHITE}Reanomena tipus d'avió
+STR_A03A_CAN_T_RENAME_AIRCRAFT_TYPE                             :{WHITE}No es pot reanomenar el tipus d'avió...
+STR_A03B_REFIT_AIRCRAFT_TO_CARRY                                :{BLACK}Remodela avions per poder transportar diferents tipus de càrrega
 STR_A03C_REFIT                                                  :{WHITE}{VEHICLE} (Remodela)
-STR_A03D_REFIT_AIRCRAFT                                         :{BLACK}Remodela aeronau
+STR_A03D_REFIT_AIRCRAFT                                         :{BLACK}Remodela avió
 STR_A03E_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Selecciona tipus de càrrega a transportar
-STR_A03F_REFIT_AIRCRAFT_TO_CARRY                                :{BLACK}Remodela aeronau per transportar el tipus de càrrega seleccionat
+STR_A03F_REFIT_AIRCRAFT_TO_CARRY                                :{BLACK}Remodela l'avió per poder transportar el tipus de càrrega seleccionat
 STR_A040_SELECT_CARGO_TYPE_TO_CARRY                             :{GOLD}Selecciona el tipus de càrrega a transportar:
 STR_A041_NEW_CAPACITY_COST_OF_REFIT                             :{BLACK}Nova capacitat: {GOLD}{STRING}{}{BLACK}Cost de la remodelació: {GOLD}{CURRENCY}
-STR_A042_CAN_T_REFIT_AIRCRAFT                                   :{WHITE}No es pot remodelar l'aeronau...
+STR_A042_CAN_T_REFIT_AIRCRAFT                                   :{WHITE}No es pot remodelar l'avió...
 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'!
@@ -2938,10 +3030,10 @@
 STR_PERFORMANCE_DETAIL_DELIVERED                                :{BLACK}Entregat:
 STR_PERFORMANCE_DETAIL_CARGO                                    :{BLACK}Càrrega:
 STR_PERFORMANCE_DETAIL_MONEY                                    :{BLACK}Diner:
-STR_PERFORMANCE_DETAIL_LOAN                                     :{BLACK}Prèstec:
+STR_PERFORMANCE_DETAIL_LOAN                                     :{BLACK}Préstec:
 STR_PERFORMANCE_DETAIL_TOTAL                                    :{BLACK}Total:
 ############ End of order list
-STR_PERFORMANCE_DETAIL_VEHICLES_TIP                             :{BLACK}Quantitat de vehicles. Inclou els automòbils, trens, vaixells i aeronaus.
+STR_PERFORMANCE_DETAIL_VEHICLES_TIP                             :{BLACK}Quantitat de vehicles. Inclou els automòbils, trens, vaixells i avions.
 STR_PERFORMANCE_DETAIL_STATIONS_TIP                             :{BLACK}Quantitat de parts d'estacions. Cada part d'una estació es compta (ex. estació de tren, parada d'autobus, aeroport), encara que estigui connectada a una altra estació.
 STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP                           :{BLACK}El benefici del vehicle amb els menors ingressos (de tots els vehicles més antics de 2 anys)
 STR_PERFORMANCE_DETAIL_MIN_INCOME_TIP                           :{BLACK}Quantitat de diners fets durant el mes amb el mínim benefici dels darrers 12 trimestres
@@ -2952,12 +3044,12 @@
 STR_PERFORMANCE_DETAIL_LOAN_TIP                                 :{BLACK}Tens un prèstec elevat?
 STR_PERFORMANCE_DETAIL_TOTAL_TIP                                :{BLACK}Total de punts sobre els punts possibles
 
-STR_NEWGRF_SETTINGS_BUTTON                                      :{BLACK}Paràmetres NewGRF
-STR_NEWGRF_SETTINGS_CAPTION                                     :{WHITE}Configuracions de Newgrf
+STR_NEWGRF_SETTINGS_BUTTON                                      :{BLACK}Extensions NewGRF
+STR_NEWGRF_SETTINGS_CAPTION                                     :{WHITE}Extensions NewGRF
 STR_NEWGRF_APPLY_CHANGES                                        :{BLACK}Aplica els canvis
 STR_NEWGRF_SET_PARAMETERS                                       :{BLACK}Estableix els paràmetres
-STR_NEWGRF_TIP                                                  :{BLACK}Llista de totes les opcions de Newgrf que has instal·lat. Prem en un grup d'opcions per canviar els seus atributs.
-STR_NEWGRF_NO_FILES_INSTALLED                                   :{BLACK}Ara no hi ha arxius de Newgrf instal·lats! Consulta el manual per a les instruccions d'instal·lació de nous gràfics.
+STR_NEWGRF_TIP                                                  :{BLACK}Llista de totes les opcions de NewGRF que has instal·lat. Prem en un grup d'opcions per canviar els seus atributs.
+STR_NEWGRF_NO_FILES_INSTALLED                                   :{BLACK}Ara no hi ha arxius de NewGRF instal·lats! Consulta el manual per a les instruccions d'instal·lació de nous gràfics.
 STR_NEWGRF_FILENAME                                             :{BLACK}Nom d'arxiu: {SILVER}{STRING}
 STR_NEWGRF_GRF_ID                                               :{BLACK}Id de GRF: {SILVER}{STRING}
 STR_NEWGRF_MD5SUM                                               :{BLACK}MD5sum: {SILVER}{STRING}
@@ -2979,11 +3071,11 @@
 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_FILE_TIP                                             :{BLACK}Una llista d'arxius NewGRF que han estat instal·lats. Clica un arxiu per canviar els seus paràmetres
 STR_NEWGRF_PARAMETER                                            :{BLACK}Paràmetres: {SILVER}{STRING}
 STR_NEWGRF_PARAMETER_QUERY                                      :{BLACK}Introdueix els paràmetres NewGRF
 STR_NEWGRF_NO_INFO                                              :{BLACK}No hi ha informació disponible
@@ -3021,13 +3113,13 @@
 
 STR_SCHEDULED_TRAINS                                            :{WHITE}{STATION} - {COMMA} Trens
 STR_SCHEDULED_ROAD_VEHICLES                                     :{WHITE}{STATION} - {COMMA} Vehicles
-STR_SCHEDULED_AIRCRAFT                                          :{WHITE}{STATION} - {COMMA} Aeronaus
+STR_SCHEDULED_AIRCRAFT                                          :{WHITE}{STATION} - {COMMA} Avions
 STR_SCHEDULED_SHIPS                                             :{WHITE}{STATION} - {COMMA} Vaixells
 
-STR_SCHEDULED_TRAINS_TIP                                        :{BLACK}Mostra tots els trens que tinguin aquesta estació al seu itinerari
-STR_SCHEDULED_ROAD_VEHICLES_TIP                                 :{BLACK}Mostra tots els vehicles que tinguin aquesta estació al seu itinerari
-STR_SCHEDULED_AIRCRAFT_TIP                                      :{BLACK}Mostra totes les aeronaus que tinguin aquest aeroport al seu itinerari
-STR_SCHEDULED_SHIPS_TIP                                         :{BLACK}Mostra tots els vaixells que tinguin aquest port al seu itinerari
+STR_SCHEDULED_TRAINS_TIP                                        :{BLACK}Mostra tots els trens que tinguin aquesta estació en el seu itinerari
+STR_SCHEDULED_ROAD_VEHICLES_TIP                                 :{BLACK}Mostra tots els vehicles que tinguin aquesta estació en el seu itinerari
+STR_SCHEDULED_AIRCRAFT_TIP                                      :{BLACK}Mostra tots els avions que tinguin aquest aeroport en el seu itinerari
+STR_SCHEDULED_SHIPS_TIP                                         :{BLACK}Mostra tots els vaixells que tinguin aquest port en el seu itinerari
 
 STR_VEH_WITH_SHARED_ORDERS_LIST                                 :{WHITE}Ordres compartides de {COMMA} Vehicle{P "" s}
 STR_VEH_WITH_SHARED_ORDERS_LIST_TIP                             :{BLACK}Mostra tots els vehicles que tenen les mateixes ordres
@@ -3044,7 +3136,7 @@
 STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TIP                          :{BLACK}Treure una llista de tots els trens amb aquesta cotxera en les seves ordres
 STR_DEPOT_VEHICLE_ORDER_LIST_ROADVEH_TIP                        :{BLACK}Treure una llista de tots els vehicles amb aquesta cotxera en les seves ordres
 STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TIP                           :{BLACK}Treure una llista de tots els vaixells amb aquesta drassana en les seves ordres
-STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TIP                       :{BLACK}Treu una llista de tots les aeronaus amb algun hangar en aquest aeroport en les seves ordres
+STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TIP                       :{BLACK}Treu una llista de tots els avions amb algun hangar d'aquest aeroport en les seves ordres
 
 STR_DEPOT_AUTOREPLACE_TRAIN_TIP                                 :{BLACK}Autosubstitueix tots els trens de la cotxera
 STR_DEPOT_AUTOREPLACE_ROADVEH_TIP                               :{BLACK}Autosubstitueix tots els vehicles de la cotxera
@@ -3145,8 +3237,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
@@ -3175,8 +3267,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}
@@ -3185,10 +3277,10 @@
 
 ########### String for new airports
 STR_SMALL_AIRPORT                                               :{BLACK}Petit
-STR_CITY_AIRPORT                                                :{BLACK}Ciutadà
+STR_CITY_AIRPORT                                                :{BLACK}de Ciutat
 STR_METRO_AIRPORT                                               :{BLACK}Metropolità
 STR_INTERNATIONAL_AIRPORT                                       :{BLACK}Internacional
-STR_COMMUTER_AIRPORT                                            :{BLACK}Viatjer
+STR_COMMUTER_AIRPORT                                            :{BLACK}Regional
 STR_INTERCONTINENTAL_AIRPORT                                    :{BLACK}Intercontinental
 STR_HELIPORT                                                    :{BLACK}Heliport
 STR_HELIDEPOT                                                   :{BLACK}Helihangar
@@ -3225,6 +3317,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}
@@ -3232,7 +3332,7 @@
 STR_GROUP_ALL_TRAINS                                            :Tots els trens
 STR_GROUP_ALL_ROADS                                             :Tots els vehicles
 STR_GROUP_ALL_SHIPS                                             :Tots els vaixells
-STR_GROUP_ALL_AIRCRAFTS                                         :Totes les aeronaus
+STR_GROUP_ALL_AIRCRAFTS                                         :Tots els avions
 STR_GROUP_TINY_NUM                                              :{TINYFONT}{COMMA}
 STR_GROUP_ADD_SHARED_VEHICLE                                    :Afegeix vehicles compartits
 STR_GROUP_REMOVE_ALL_VEHICLES                                   :Treu tots els vehicles
@@ -3240,7 +3340,7 @@
 STR_GROUP_TRAINS_CAPTION                                        :{WHITE}{GROUP} - {COMMA} Tren{P "" s}
 STR_GROUP_ROADVEH_CAPTION                                       :{WHITE}{GROUP} - {COMMA} Vehicle{P "" s}
 STR_GROUP_SHIPS_CAPTION                                         :{WHITE}{GROUP} - {COMMA} Vaixell{P "" s}
-STR_GROUP_AIRCRAFTS_CAPTION                                     :{WHITE}{GROUP} - {COMMA} Aeronau
+STR_GROUP_AIRCRAFTS_CAPTION                                     :{WHITE}{GROUP} - {COMMA} Avió
 STR_GROUP_RENAME_CAPTION                                        :{BLACK}Canvia de nom el grup
 STR_GROUP_REPLACE_CAPTION                                       :{WHITE}Substitueix els Vehicles de "{GROUP}"
 
@@ -3262,4 +3362,22 @@
 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}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}El nom ha de ser únic
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Ves a la propera senyal
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Ves a la senyal anterior
+
 ########
+
+STR_FUND_NEW_INDUSTRY                                           :{BLACK}Financia
+STR_PROSPECT_NEW_INDUSTRY                                       :{BLACK}Prospecciona
+STR_BUILD_NEW_INDUSTRY                                          :{BLACK}Construeix
+STR_INDUSTRY_SELECTION_HINT                                     :{BLACK}Escolleix el tipus d'indústria adequada d'aquesta llista
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/lang/croatian.txt	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,3247 @@
+##name Croatian
+##ownname Hrvatski
+##isocode hr_HR
+##plural 6
+##gender male female middle
+
+#
+
+##id 0x0000
+STR_NULL                                                        :
+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}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
+STR_EMPTY                                                       :
+STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Potrebna ravna površina
+STR_0008_WAITING                                                :{BLACK}Čekanje: {WHITE}{STRING}
+STR_0009                                                        :{WHITE}{CARGO}
+STR_000A_EN_ROUTE_FROM                                          :{WHITE}{CARGO}{YELLOW}  (na putu od
+STR_000B                                                        :{YELLOW}{STATION})
+STR_000C_ACCEPTS                                                :{BLACK}Prihvaća: {WHITE}
+STR_000D_ACCEPTS                                                :{BLACK}Prihvaća: {GOLD}
+STR_000E                                                        :
+STR_000F_PASSENGERS                                             :Putnici
+STR_0010_COAL                                                   :Ugljen
+STR_0011_MAIL                                                   :Pošta
+STR_0012_OIL                                                    :Nafta
+STR_0013_LIVESTOCK                                              :Domaće životinje
+STR_0014_GOODS                                                  :Robe
+STR_0015_GRAIN                                                  :Žito
+STR_0016_WOOD                                                   :Drvo
+STR_0017_IRON_ORE                                               :Željezo
+STR_0018_STEEL                                                  :Čelik
+STR_0019_VALUABLES                                              :Dragocjenosti
+STR_001A_COPPER_ORE                                             :Bakar
+STR_001B_MAIZE                                                  :Kukuruz
+STR_001C_FRUIT                                                  :Voće
+STR_001D_DIAMONDS                                               :Dijamanti
+STR_001E_FOOD                                                   :Hrana
+STR_001F_PAPER                                                  :Papir
+STR_0020_GOLD                                                   :Zlato
+STR_0021_WATER                                                  :Voda
+STR_0022_WHEAT                                                  :Pšenica
+STR_0023_RUBBER                                                 :Guma
+STR_0024_SUGAR                                                  :Šećer
+STR_0025_TOYS                                                   :Igračke
+STR_0026_CANDY                                                  :Slatkiši
+STR_0027_COLA                                                   :Cola
+STR_0028_COTTON_CANDY                                           :Šećerna vuna
+STR_0029_BUBBLES                                                :Baloni
+STR_002A_TOFFEE                                                 :Mliječne karamele
+STR_002B_BATTERIES                                              :Baterije
+STR_002C_PLASTIC                                                :Plastika
+STR_002D_FIZZY_DRINKS                                           :Gazirana pića
+STR_002E                                                        :
+STR_002F_PASSENGER                                              :Putnik
+STR_0030_COAL                                                   :Ugljen
+STR_0031_MAIL                                                   :Pošta
+STR_0032_OIL                                                    :Nafta
+STR_0033_LIVESTOCK                                              :Domaće životinje
+STR_0034_GOODS                                                  :Robe
+STR_0035_GRAIN                                                  :Žito
+STR_0036_WOOD                                                   :Drvo
+STR_0037_IRON_ORE                                               :Željezo
+STR_0038_STEEL                                                  :Čelik
+STR_0039_VALUABLES                                              :Dragocjenosti
+STR_003A_COPPER_ORE                                             :Bakar
+STR_003B_MAIZE                                                  :Kukuruz
+STR_003C_FRUIT                                                  :Voće
+STR_003D_DIAMOND                                                :Dijamant
+STR_003E_FOOD                                                   :Hrana
+STR_003F_PAPER                                                  :Papir
+STR_0040_GOLD                                                   :Zlato
+STR_0041_WATER                                                  :Voda
+STR_0042_WHEAT                                                  :Pšenica
+STR_0043_RUBBER                                                 :Guma
+STR_0044_SUGAR                                                  :Šećer
+STR_0045_TOY                                                    :Igračka
+STR_0046_CANDY                                                  :Slatkiš
+STR_0047_COLA                                                   :Cola
+STR_0048_COTTON_CANDY                                           :Šećerna vuna
+STR_0049_BUBBLE                                                 :Balon
+STR_004A_TOFFEE                                                 :Mliječna karamela
+STR_004B_BATTERY                                                :Baterija
+STR_004C_PLASTIC                                                :Plastika
+STR_004D_FIZZY_DRINK                                            :Gazirano piće
+STR_QUANTITY_NOTHING                                            :
+STR_QUANTITY_PASSENGERS                                         :{COMMA} putni{P k ka ka}
+STR_QUANTITY_COAL                                               :{WEIGHT} ugljena
+STR_QUANTITY_MAIL                                               :{COMMA} poštansk{P a e ih} vreć{P a e a}
+STR_QUANTITY_OIL                                                :{VOLUME} nafte
+STR_QUANTITY_LIVESTOCK                                          :{COMMA} grla {P o a a} stoke
+STR_QUANTITY_GOODS                                              :{COMMA} sanduk{P "" a a} robe
+STR_QUANTITY_GRAIN                                              :{WEIGHT} žita
+STR_QUANTITY_WOOD                                               :{WEIGHT} drveta
+STR_QUANTITY_IRON_ORE                                           :{WEIGHT} željeza
+STR_QUANTITY_STEEL                                              :{WEIGHT} čelika
+STR_QUANTITY_VALUABLES                                          :{COMMA} vreć{P a e a} s vrijednostima
+STR_QUANTITY_COPPER_ORE                                         :{WEIGHT} bakra
+STR_QUANTITY_MAIZE                                              :{WEIGHT} kukuruza
+STR_QUANTITY_FRUIT                                              :{WEIGHT} voća
+STR_QUANTITY_DIAMONDS                                           :{COMMA} vreć{P a e a} dijamanata
+STR_QUANTITY_FOOD                                               :{WEIGHT} hrane
+STR_QUANTITY_PAPER                                              :{WEIGHT} papira
+STR_QUANTITY_GOLD                                               :{COMMA} vreć{P a e a} zlata
+STR_QUANTITY_WATER                                              :{VOLUME} vode
+STR_QUANTITY_WHEAT                                              :{WEIGHT} pšenice
+STR_QUANTITY_RUBBER                                             :{VOLUME} gume
+STR_QUANTITY_SUGAR                                              :{WEIGHT} šećera
+STR_QUANTITY_TOYS                                               :{COMMA} igrač{P ka ke aka}
+STR_QUANTITY_SWEETS                                             :{COMMA} vreć{P a e a} slatkiša
+STR_QUANTITY_COLA                                               :{VOLUME} cole
+STR_QUANTITY_CANDYFLOSS                                         :{WEIGHT} šećerne vune
+STR_QUANTITY_BUBBLES                                            :{COMMA} balon{P "" a a}
+STR_QUANTITY_TOFFEE                                             :{WEIGHT} mliječne karamele
+STR_QUANTITY_BATTERIES                                          :{COMMA} baterij{P a e a}
+STR_QUANTITY_PLASTIC                                            :{VOLUME} plastike
+STR_QUANTITY_FIZZY_DRINKS                                       :{COMMA} Gaziran{P o a a} pić{P e a a}
+STR_ABBREV_NOTHING                                              :
+STR_ABBREV_PASSENGERS                                           :{TINYFONT}PU
+STR_ABBREV_COAL                                                 :{TINYFONT}UG
+STR_ABBREV_MAIL                                                 :{TINYFONT}PT
+STR_ABBREV_OIL                                                  :{TINYFONT}NF
+STR_ABBREV_LIVESTOCK                                            :{TINYFONT}DŽ
+STR_ABBREV_GOODS                                                :{TINYFONT}AU
+STR_ABBREV_GRAIN                                                :{TINYFONT}ŽT
+STR_ABBREV_WOOD                                                 :{TINYFONT}DV
+STR_ABBREV_IRON_ORE                                             :{TINYFONT}FE
+STR_ABBREV_STEEL                                                :{TINYFONT}ČL
+STR_ABBREV_VALUABLES                                            :{TINYFONT}VR
+STR_ABBREV_COPPER_ORE                                           :{TINYFONT}CU
+STR_ABBREV_MAIZE                                                :{TINYFONT}KK
+STR_ABBREV_FRUIT                                                :{TINYFONT}VO
+STR_ABBREV_DIAMONDS                                             :{TINYFONT}DM
+STR_ABBREV_FOOD                                                 :{TINYFONT}HN
+STR_ABBREV_PAPER                                                :{TINYFONT}PR
+STR_ABBREV_GOLD                                                 :{TINYFONT}AU
+STR_ABBREV_WATER                                                :{TINYFONT}VO
+STR_ABBREV_WHEAT                                                :{TINYFONT}ŽT
+STR_ABBREV_RUBBER                                               :{TINYFONT}GM
+STR_ABBREV_SUGAR                                                :{TINYFONT}ŠĆ
+STR_ABBREV_TOYS                                                 :{TINYFONT}IG
+STR_ABBREV_SWEETS                                               :{TINYFONT}SL
+STR_ABBREV_COLA                                                 :{TINYFONT}CL
+STR_ABBREV_CANDYFLOSS                                           :{TINYFONT}ŠV
+STR_ABBREV_BUBBLES                                              :{TINYFONT}BL
+STR_ABBREV_TOFFEE                                               :{TINYFONT}MČ
+STR_ABBREV_BATTERIES                                            :{TINYFONT}BA
+STR_ABBREV_PLASTIC                                              :{TINYFONT}PL
+STR_ABBREV_FIZZY_DRINKS                                         :{TINYFONT}GP
+STR_ABBREV_NONE                                                 :{TINYFONT}NI
+STR_ABBREV_ALL                                                  :{TINYFONT}SVE
+STR_00AE                                                        :{WHITE}{DATE_SHORT}
+STR_00AF                                                        :{WHITE}{DATE_LONG}
+STR_00B0_MAP                                                    :{WHITE}Karta - {STRING}
+STR_00B1_GAME_OPTIONS                                           :{WHITE}Opcije za igru
+STR_00B2_MESSAGE                                                :{YELLOW}Poruka
+STR_00B3_MESSAGE_FROM                                           :{YELLOW}Poruka od {STRING}
+STR_POPUP_CAUTION_CAPTION                                       :{WHITE}Oprez!
+STR_00B4_CAN_T_DO_THIS                                          :{WHITE}To nije moguće napraviti....
+STR_00B5_CAN_T_CLEAR_THIS_AREA                                  :{WHITE}Nije moguće očistiti ovo područje....
+STR_00B6_ORIGINAL_COPYRIGHT                                     :{BLACK}Izvorno autorsko pravo {COPYRIGHT} 1995 Chris Sawyer, sva prava pridržana
+STR_00B7_VERSION                                                :{BLACK}OpenTTD verzija {REV}
+STR_00BA_COPYRIGHT_OPENTTD                                      :{BLACK}OpenTTD {COPYRIGHT}2002-2006 tim OpenTTD
+STR_TRANSLATED_BY                                               :{BLACK}  Prevoditelj(i) -
+
+STR_00C5                                                        :{BLACK}{CROSS}
+STR_00C6                                                        :{SILVER}{CROSS}
+STR_00C7_QUIT                                                   :{WHITE}Prekid
+STR_00C8_YES                                                    :{BLACK}Da
+STR_00C9_NO                                                     :{BLACK}Ne
+STR_00CA_ARE_YOU_SURE_YOU_WANT_TO                               :{YELLOW}Jesi li siguran da želiš napustiti ovu igru i vratiti se na {STRING}?
+STR_00CB_1                                                      :{BLACK}1
+STR_00CC_2                                                      :{BLACK}2
+STR_00CD_3                                                      :{BLACK}3
+STR_00CE_4                                                      :{BLACK}4
+STR_00CF_5                                                      :{BLACK}5
+STR_00D0_NOTHING                                                :Ništa
+STR_00D1_DARK_BLUE                                              :Tamnoplava
+STR_00D2_PALE_GREEN                                             :Blijedozelena
+STR_00D3_PINK                                                   :Ružičasta
+STR_00D4_YELLOW                                                 :Žuta
+STR_00D5_RED                                                    :Crvena
+STR_00D6_LIGHT_BLUE                                             :Svijetloplava
+STR_00D7_GREEN                                                  :Zelena
+STR_00D8_DARK_GREEN                                             :Tamnozelena
+STR_00D9_BLUE                                                   :Plava
+STR_00DA_CREAM                                                  :Kremasta
+STR_00DB_MAUVE                                                  :Svijetloljubičasta
+STR_00DC_PURPLE                                                 :Ljubičasta
+STR_00DD_ORANGE                                                 :Narančasta
+STR_00DE_BROWN                                                  :Smeđa
+STR_00DF_GREY                                                   :Siva
+STR_00E0_WHITE                                                  :Bijela
+STR_00E1_TOO_MANY_VEHICLES_IN_GAME                              :{WHITE}Previše vozila u igri
+STR_00E2                                                        :{BLACK}{COMMA}
+STR_00E3                                                        :{RED}{COMMA}
+STR_00E4_LOCATION                                               :{BLACK}Lokacija
+STR_00E5_CONTOURS                                               :Obrisi
+STR_00E6_VEHICLES                                               :Vozila
+STR_00E7_INDUSTRIES                                             :Industrije
+STR_00E8_ROUTES                                                 :Trase
+STR_00E9_VEGETATION                                             :Vegetacija
+STR_00EA_OWNERS                                                 :Vlasnici
+STR_00EB_ROADS                                                  :{BLACK}{TINYFONT}Ceste
+STR_00EC_RAILROADS                                              :{BLACK}{TINYFONT}Željeznice
+STR_00ED_STATIONS_AIRPORTS_DOCKS                                :{BLACK}{TINYFONT}Stanice/Zračne luke/Pristaništa
+STR_00EE_BUILDINGS_INDUSTRIES                                   :{BLACK}{TINYFONT}Građevine/Industrije
+STR_00EF_VEHICLES                                               :{BLACK}{TINYFONT}Vozila
+STR_00F0_100M                                                   :{BLACK}{TINYFONT}100m
+STR_00F1_200M                                                   :{BLACK}{TINYFONT}200m
+STR_00F2_300M                                                   :{BLACK}{TINYFONT}300m
+STR_00F3_400M                                                   :{BLACK}{TINYFONT}400m
+STR_00F4_500M                                                   :{BLACK}{TINYFONT}500m
+STR_00F5_TRAINS                                                 :{BLACK}{TINYFONT}Vlakovi
+STR_00F6_ROAD_VEHICLES                                          :{BLACK}{TINYFONT}Cestovna vozila
+STR_00F7_SHIPS                                                  :{BLACK}{TINYFONT}Brodovi
+STR_00F8_AIRCRAFT                                               :{BLACK}{TINYFONT}Zrakoplov
+STR_00F9_TRANSPORT_ROUTES                                       :{BLACK}{TINYFONT}Prijevozne trase
+STR_00FA_COAL_MINE                                              :{BLACK}{TINYFONT}Rudnik ugljena
+STR_00FB_POWER_STATION                                          :{BLACK}{TINYFONT}Elektrana
+STR_00FC_FOREST                                                 :{BLACK}{TINYFONT}Šuma
+STR_00FD_SAWMILL                                                :{BLACK}{TINYFONT}Pilana
+STR_00FE_OIL_REFINERY                                           :{BLACK}{TINYFONT}Naftna rafinerija
+STR_00FF_FARM                                                   :{BLACK}{TINYFONT}Farma
+STR_0100_FACTORY                                                :{BLACK}{TINYFONT}Tvornica
+STR_0101_PRINTING_WORKS                                         :{BLACK}{TINYFONT}Tiskara
+STR_0102_OIL_WELLS                                              :{BLACK}{TINYFONT}Naftna polja
+STR_0103_IRON_ORE_MINE                                          :{BLACK}{TINYFONT}Rudnik željeza
+STR_0104_STEEL_MILL                                             :{BLACK}{TINYFONT}Čeličana
+STR_0105_BANK                                                   :{BLACK}{TINYFONT}Banka
+STR_0106_PAPER_MILL                                             :{BLACK}{TINYFONT}Tvornica papira
+STR_0107_GOLD_MINE                                              :{BLACK}{TINYFONT}Rudnik zlata
+STR_0108_FOOD_PROCESSING_PLANT                                  :{BLACK}{TINYFONT}Tvornica hrane
+STR_0109_DIAMOND_MINE                                           :{BLACK}{TINYFONT}Rudnik dijamanata
+STR_010A_COPPER_ORE_MINE                                        :{BLACK}{TINYFONT}Rudnik bakra
+STR_010B_FRUIT_PLANTATION                                       :{BLACK}{TINYFONT}Plantaža voća
+STR_010C_RUBBER_PLANTATION                                      :{BLACK}{TINYFONT}Plantaža gume
+STR_010D_WATER_SUPPLY                                           :{BLACK}{TINYFONT}Izvor vode
+STR_010E_WATER_TOWER                                            :{BLACK}{TINYFONT}Vodotoranj
+STR_010F_LUMBER_MILL                                            :{BLACK}{TINYFONT}Pilana
+STR_0110_COTTON_CANDY_FOREST                                    :{BLACK}{TINYFONT}Šuma šećerne vune
+STR_0111_CANDY_FACTORY                                          :{BLACK}{TINYFONT}Tvornica slatkiša
+STR_0112_BATTERY_FARM                                           :{BLACK}{TINYFONT}Tvornica baterija
+STR_0113_COLA_WELLS                                             :{BLACK}{TINYFONT}Izvori Cole
+STR_0114_TOY_SHOP                                               :{BLACK}{TINYFONT}Trgovina igračkama
+STR_0115_TOY_FACTORY                                            :{BLACK}{TINYFONT}Tvornica igračaka
+STR_0116_PLASTIC_FOUNTAINS                                      :{BLACK}{TINYFONT}Izvori plastike
+STR_0117_FIZZY_DRINK_FACTORY                                    :{BLACK}{TINYFONT}Tvornica gaziranih pića
+STR_0118_BUBBLE_GENERATOR                                       :{BLACK}{TINYFONT}Generator balona
+STR_0119_TOFFEE_QUARRY                                          :{BLACK}{TINYFONT}Iskop mliječne karamele
+STR_011A_SUGAR_MINE                                             :{BLACK}{TINYFONT}Šećerana
+STR_011B_RAILROAD_STATION                                       :{BLACK}{TINYFONT}Željeznička stanica
+STR_011C_TRUCK_LOADING_BAY                                      :{BLACK}{TINYFONT}Kamionski terminal
+STR_011D_BUS_STATION                                            :{BLACK}{TINYFONT}Autobusn stanica
+STR_011E_AIRPORT_HELIPORT                                       :{BLACK}{TINYFONT}Aerodrom/Heliodrom
+STR_011F_DOCK                                                   :{BLACK}{TINYFONT}Pristanište
+STR_0120_ROUGH_LAND                                             :{BLACK}{TINYFONT}Surova zemlja
+STR_0121_GRASS_LAND                                             :{BLACK}{TINYFONT}Travnjak
+STR_0122_BARE_LAND                                              :{BLACK}{TINYFONT}Ogoljena zemlja
+STR_0123_FIELDS                                                 :{BLACK}{TINYFONT}Polja
+STR_0124_TREES                                                  :{BLACK}{TINYFONT}Stabla
+STR_0125_ROCKS                                                  :{BLACK}{TINYFONT}Stijenje
+STR_0126_WATER                                                  :{BLACK}{TINYFONT}Voda
+STR_0127_NO_OWNER                                               :{BLACK}{TINYFONT}Bez vlasnika
+STR_0128_TOWNS                                                  :{BLACK}{TINYFONT}Gradovi
+STR_0129_INDUSTRIES                                             :{BLACK}{TINYFONT}Industrije
+STR_012A_DESERT                                                 :{BLACK}{TINYFONT}Pustinja
+STR_012B_SNOW                                                   :{BLACK}{TINYFONT}Snijeg
+STR_012C_MESSAGE                                                :{WHITE}Poruka
+STR_012D                                                        :{WHITE}{STRING}
+STR_012E_CANCEL                                                 :{BLACK}Odustani
+STR_012F_OK                                                     :{BLACK}OK
+STR_0130_RENAME                                                 :{BLACK}Preimenuj
+STR_0131_TOO_MANY_NAMES_DEFINED                                 :{WHITE}Previše definiranih imena
+STR_0132_CHOSEN_NAME_IN_USE_ALREADY                             :{WHITE}Odabrano ime već se koristi
+
+STR_0133_WINDOWS                                                :Windows
+STR_0134_UNIX                                                   :Unix
+STR_0135_OSX                                                    :OS X
+STR_OSNAME_BEOS                                                 :BeOS
+STR_OSNAME_MORPHOS                                              :MorphOS
+STR_OSNAME_AMIGAOS                                              :AmigaOS
+STR_OSNAME_OS2                                                  :OS/2
+STR_OSNAME_SUNOS                                                :SunOS
+
+STR_013B_OWNED_BY                                               :{WHITE}...u vlasništvu {STRING}
+STR_013C_CARGO                                                  :{BLACK}Teret
+STR_013D_INFORMATION                                            :{BLACK}Informacije
+STR_013E_CAPACITIES                                             :{BLACK}Nosivosti
+STR_013E_TOTAL_CARGO                                            :{BLACK}Ukupni teret
+STR_013F_CAPACITY                                               :{BLACK}Nosivost: {LTBLUE}{CARGO}
+STR_CAPACITY_MULT                                               :{BLACK}Nosivost: {LTBLUE}{CARGO} (x{NUM})
+STR_013F_TOTAL_CAPACITY_TEXT                                    :{BLACK}Ukupna nosivost ovoga vlaka:
+STR_013F_TOTAL_CAPACITY                                         :{LTBLUE}- {CARGO} ({SHORTCARGO})
+STR_TOTAL_CAPACITY_MULT                                         :{LTBLUE}- {CARGO} ({SHORTCARGO}) (x{NUM})
+STR_0140_NEW_GAME                                               :{BLACK}Nova igra
+STR_0141_LOAD_GAME                                              :{BLACK}Učitaj igru
+STR_SINGLE_PLAYER                                               :{BLACK}Jedan igrač
+STR_MULTIPLAYER                                                 :{BLACK}Više igrača
+STR_SCENARIO_EDITOR                                             :{BLACK}Editor scenarija
+
+STR_64                                                          :64
+STR_128                                                         :128
+STR_256                                                         :256
+STR_512                                                         :512
+STR_1024                                                        :1024
+STR_2048                                                        :2048
+STR_MAPSIZE                                                     :{BLACK}Veličina karte:
+STR_BY                                                          :{BLACK}*
+STR_0148_GAME_OPTIONS                                           :{BLACK}Postavke igre
+
+STR_0150_SOMEONE                                                :netko{SKIP}{SKIP}
+STR_0151_MAP_OF_WORLD                                           :Karta svijeta
+STR_0152_TOWN_DIRECTORY                                         :Popis gradova
+STR_0153_SUBSIDIES                                              :Subvencije
+
+STR_UNITS_IMPERIAL                                              :Imperijalni
+STR_UNITS_METRIC                                                :Metrički
+STR_UNITS_SI                                                    :SI
+
+STR_UNITS_VELOCITY_IMPERIAL                                     :{COMMA} mph
+STR_UNITS_VELOCITY_METRIC                                       :{COMMA} km/h
+STR_UNITS_VELOCITY_SI                                           :{COMMA} m/s
+
+STR_UNITS_POWER_IMPERIAL                                        :{COMMA}KS
+STR_UNITS_POWER_METRIC                                          :{COMMA}KS
+STR_UNITS_POWER_SI                                              :{COMMA}kW
+
+STR_UNITS_WEIGHT_SHORT_IMPERIAL                                 :{COMMA}t
+STR_UNITS_WEIGHT_SHORT_METRIC                                   :{COMMA}t
+STR_UNITS_WEIGHT_SHORT_SI                                       :{COMMA}kg
+
+STR_UNITS_WEIGHT_LONG_IMPERIAL                                  :{COMMA} britansk{P a e ih} ton{P a e a}
+STR_UNITS_WEIGHT_LONG_METRIC                                    :{COMMA} ton{P a e a}
+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} galon{P "" a a}
+STR_UNITS_VOLUME_LONG_METRIC                                    :{COMMA} lit{P ra re ara}
+STR_UNITS_VOLUME_LONG_SI                                        :{COMMA} m³
+
+STR_UNITS_FORCE_IMPERIAL                                        :{COMMA}x10³ lbf
+STR_UNITS_FORCE_METRIC                                          :{COMMA} sila britanske tone
+STR_UNITS_FORCE_SI                                              :{COMMA} kN
+
+############ range for menu starts
+STR_0154_OPERATING_PROFIT_GRAPH                                 :Graf dobiti od poslovanja
+STR_0155_INCOME_GRAPH                                           :Graf prihoda
+STR_0156_DELIVERED_CARGO_GRAPH                                  :Graf isporučenog tereta
+STR_0157_PERFORMANCE_HISTORY_GRAPH                              :Graf povijesti učinka
+STR_0158_COMPANY_VALUE_GRAPH                                    :Graf vrijednosti tvrtke
+STR_0159_CARGO_PAYMENT_RATES                                    :Iznosi plaćanja tereta
+STR_015A_COMPANY_LEAGUE_TABLE                                   :Tablica lige tvrtki
+STR_PERFORMANCE_DETAIL_MENU                                     :Detaljna ocjena učinka
+############ range for menu ends
+
+STR_015B_OPENTTD                                                :{WHITE}O OpenTTD-u
+STR_015C_SAVE_GAME                                              :Spremi igru
+STR_015D_LOAD_GAME                                              :Učitaj igru
+STR_015E_QUIT_GAME                                              :Napusti igru
+STR_015F_QUIT                                                   :Izlaz
+STR_ABANDON_GAME_QUERY                                          :{YELLOW}Jeste li sigurni da želite napustiti ovu igru?
+STR_0161_QUIT_GAME                                              :{WHITE}Napusti igru
+STR_SORT_ORDER_TIP                                              :{BLACK}Izaberi način sortiranja (silazno/uzlazno)
+STR_SORT_CRITERIA_TIP                                           :{BLACK}Izaberi kriterij za sortiranje
+STR_SORT_BY                                                     :{BLACK}Sortiraj prema
+
+STR_SORT_BY_POPULATION                                          :{BLACK}Stanovnici
+STR_SORT_BY_PRODUCTION                                          :{BLACK}Produkcija
+STR_SORT_BY_TYPE                                                :{BLACK}Vrsta
+STR_SORT_BY_TRANSPORTED                                         :{BLACK}Prevezeno
+STR_SORT_BY_NAME                                                :{BLACK}Ime
+STR_SORT_BY_DROPDOWN_NAME                                       :Ime
+STR_SORT_BY_DATE                                                :{BLACK}Datum
+STR_SORT_BY_NUMBER                                              :Broj
+STR_SORT_BY_PROFIT_LAST_YEAR                                    :Zarada prošle godine
+STR_SORT_BY_PROFIT_THIS_YEAR                                    :Zarada ove godine
+STR_SORT_BY_AGE                                                 :Godine
+STR_SORT_BY_RELIABILITY                                         :Pouzdanost
+STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE                        :Totalna nosivost po vrsti tereta
+STR_SORT_BY_MAX_SPEED                                           :Maksimalna brzina
+STR_SORT_BY_MODEL                                               :Model
+STR_SORT_BY_VALUE                                               :Vrijednost
+STR_SORT_BY_FACILITY                                            :Vrsta stanice
+STR_SORT_BY_WAITING                                             :Vrijednost tereta koji čeka
+STR_SORT_BY_RATING_MAX                                          :Ocjena tereta
+STR_ENGINE_SORT_ENGINE_ID                                       :MotorID(standardno sortiranje)
+STR_ENGINE_SORT_COST                                            :Trošak
+STR_ENGINE_SORT_POWER                                           :Snaga
+STR_ENGINE_SORT_INTRO_DATE                                      :Datum početka
+STR_ENGINE_SORT_RUNNING_COST                                    :Trošak uporabe
+STR_ENGINE_SORT_POWER_VS_RUNNING_COST                           :Trošak snage/uporabe
+STR_ENGINE_SORT_CARGO_CAPACITY                                  :Nosivost tereta
+STR_NO_WAITING_CARGO                                            :{BLACK}Nijedna vrsta tereta ne čeka
+STR_SELECT_ALL_FACILITIES                                       :{BLACK}Izaberi sva sredstva
+STR_SELECT_ALL_TYPES                                            :{BLACK}Izaberi sve vrste tereta (uključujući i teret koji ne čeka)
+STR_AVAILABLE_TRAINS                                            :{BLACK}Dostupni vlakovi
+STR_AVAILABLE_ROAD_VEHICLES                                     :{BLACK}Dostupna vozila
+STR_AVAILABLE_SHIPS                                             :{BLACK}Dostupni brodovi
+STR_AVAILABLE_AIRCRAFT                                          :{BLACK}Dostupni zrakoplovi
+STR_AVAILABLE_ENGINES_TIP                                       :{BLACK}Pogledaj popis dostupnih dizajna motora za ovu vrstu vozila.
+STR_MANAGE_LIST                                                 :{BLACK}Uredi popis
+STR_MANAGE_LIST_TIP                                             :{BLACK}Pošalji upute svim vozilima na ovoj listi
+STR_REPLACE_VEHICLES                                            :Zamjeni vozila
+STR_SEND_TRAIN_TO_DEPOT                                         :Pošalji u spremište
+STR_SEND_ROAD_VEHICLE_TO_DEPOT                                  :
+STR_SEND_SHIP_TO_DEPOT                                          :
+STR_SEND_AIRCRAFT_TO_HANGAR                                     :Pošalji u hangar
+STR_SEND_FOR_SERVICING                                          :Pošalji na servis
+
+############ range for months starts
+STR_0162_JAN                                                    :Sij
+STR_0163_FEB                                                    :Velj
+STR_0164_MAR                                                    :Ožu
+STR_0165_APR                                                    :Tra
+STR_0166_MAY                                                    :Svi
+STR_0167_JUN                                                    :Lip
+STR_0168_JUL                                                    :Srp
+STR_0169_AUG                                                    :Kol
+STR_016A_SEP                                                    :Ruj
+STR_016B_OCT                                                    :Lis
+STR_016C_NOV                                                    :Stu
+STR_016D_DEC                                                    :Pro
+############ range for months ends
+
+STR_016E                                                        :{TINYFONT}{STRING}{} {STRING}
+STR_016F                                                        :{TINYFONT}{STRING}{} {STRING}{}{NUM}
+STR_0170                                                        :{TINYFONT}{STRING}-
+STR_0171_PAUSE_GAME                                             :{BLACK}Zaustavi igru
+STR_0172_SAVE_GAME_ABANDON_GAME                                 :{BLACK}Spremi igru, napusti igru, prekini igru
+STR_0173_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Prikaži popis stanica u vlasništvu tvrke
+STR_0174_DISPLAY_MAP                                            :{BLACK}Prikaži kartu
+STR_0175_DISPLAY_MAP_TOWN_DIRECTORY                             :{BLACK}Prikaži kartu, popis gradova
+STR_0176_DISPLAY_TOWN_DIRECTORY                                 :{BLACK}Prikaži popis gradova
+STR_0177_DISPLAY_COMPANY_FINANCES                               :{BLACK}Prikaži financijske podatke tvrke
+STR_0178_DISPLAY_COMPANY_GENERAL                                :{BLACK}Prikaži opće podatke tvrtke
+STR_0179_DISPLAY_GRAPHS                                         :{BLACK}Prikaži grafove
+STR_017A_DISPLAY_COMPANY_LEAGUE                                 :{BLACK}Prikaži tablicu lige tvrtki
+STR_017B_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Prikaži popis vlakova u posjedu tvrtke
+STR_017C_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Prikaži popis cestovnih vozila u posjedu tvrke
+STR_017D_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Prikaž popis brodova u posjedu tvrke
+STR_017E_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Prikaži popis zrakoplova u posjedu tvrtke
+STR_017F_ZOOM_THE_VIEW_IN                                       :{BLACK}Približi pogled
+STR_0180_ZOOM_THE_VIEW_OUT                                      :{BLACK}Udalji pogled
+STR_0181_BUILD_RAILROAD_TRACK                                   :{BLACK}Izgradi željezničku prugu
+STR_0182_BUILD_ROADS                                            :{BLACK}Izgradi ceste
+STR_0183_BUILD_SHIP_DOCKS                                       :{BLACK}Izgradi pristaništa za brodove
+STR_0184_BUILD_AIRPORTS                                         :{BLACK}Izgradi zračne luke
+STR_0185_PLANT_TREES_PLACE_SIGNS                                :{BLACK}Posadi drveće, postavi znakove itd.
+STR_0186_LAND_BLOCK_INFORMATION                                 :{BLACK}Podaci o zemlji
+STR_0187_OPTIONS                                                :{BLACK}Postavke
+STR_0188                                                        :{BLACK}{SMALLUPARROW}
+STR_0189                                                        :{BLACK}{SMALLDOWNARROW}
+STR_018A_CAN_T_CHANGE_SERVICING                                 :{WHITE}Nije moguće promijeniti servisni interval...
+STR_018B_CLOSE_WINDOW                                           :{BLACK}Zatvori prozor
+STR_018C_WINDOW_TITLE_DRAG_THIS                                 :{BLACK}Naslov prozora - povuci ovo za micanje prozora
+STR_STICKY_BUTTON                                               :{BLACK}Označi ovaj prozor kao nezatvoriv kad se rabi tipka 'Zatvori sve prozore'
+STR_RESIZE_BUTTON                                               :{BLACK}Pritisni i povuci za promjenu veličine prozora
+STR_SAVELOAD_HOME_BUTTON                                        :{BLACK}Pritisni ovdje za prelazak u trenutnu pretpostavljenu mapu za snimanje/učitavanje
+STR_018D_DEMOLISH_BUILDINGS_ETC                                 :{BLACK}Uništi građevine itd. na kvadratu zemlje
+STR_018E_LOWER_A_CORNER_OF_LAND                                 :{BLACK}Snizi vrh kvadrata zemlje
+STR_018F_RAISE_A_CORNER_OF_LAND                                 :{BLACK}Povisi vrh kvadrata zemlje
+STR_0190_SCROLL_BAR_SCROLLS_LIST                                :{BLACK}Pomična traka - lista gore/dolje
+STR_HSCROLL_BAR_SCROLLS_LIST                                    :{BLACK}Klizač - pomiči listu lijevo/desno
+STR_0191_SHOW_LAND_CONTOURS_ON_MAP                              :{BLACK}Prikaži obrise zemlje na karti
+STR_0192_SHOW_VEHICLES_ON_MAP                                   :{BLACK}Prikaži vozila na karti
+STR_0193_SHOW_INDUSTRIES_ON_MAP                                 :{BLACK}Prikaži industrije na karti
+STR_0194_SHOW_TRANSPORT_ROUTES_ON                               :{BLACK}Prikaži prijevozne trase na karti
+STR_0195_SHOW_VEGETATION_ON_MAP                                 :{BLACK}Prikaži vegetaciju na karti
+STR_0196_SHOW_LAND_OWNERS_ON_MAP                                :{BLACK}Prikaži vlasnike zemlje na karti
+STR_0197_TOGGLE_TOWN_NAMES_ON_OFF                               :{BLACK}Prikaži/sakrij imena grada na karti
+STR_0198_PROFIT_THIS_YEAR_LAST_YEAR                             :{TINYFONT}{BLACK}Ovogodišnja zarada: {CURRENCY} (prošlogodišnja: {CURRENCY})
+
+############ range for service numbers starts
+STR_AGE                                                         :{COMMA} godin{P a e a} ({COMMA})
+STR_AGE_RED                                                     :{RED}{COMMA} godin{P a e a} ({COMMA})
+############ range for service numbers ends
+
+STR_019C_ROAD_VEHICLE                                           :Cestovno vozilo
+STR_019D_AIRCRAFT                                               :Zrakoplov
+STR_019E_SHIP                                                   :Brod
+STR_019F_TRAIN                                                  :Vlak
+STR_01A0_IS_GETTING_OLD                                         :{WHITE}{STRING} {COMMA} postaje star
+STR_01A1_IS_GETTING_VERY_OLD                                    :{WHITE}{STRING} {COMMA} postaje vrlo star
+STR_01A2_IS_GETTING_VERY_OLD_AND                                :{WHITE}{STRING} {COMMA} postaje vrlo star i hitno treba zamjenu
+STR_01A3_LAND_AREA_INFORMATION                                  :{WHITE}Podaci o zemlji
+STR_01A4_COST_TO_CLEAR_N_A                                      :{BLACK}Troškovi čišćenja: {LTBLUE}NIJE DOSTUPNO
+STR_01A5_COST_TO_CLEAR                                          :{BLACK}Troškovi čišćenja: {LTBLUE}{CURRENCY}
+STR_01A6_N_A                                                    :NIJE DOSTUPNO
+STR_01A7_OWNER                                                  :{BLACK}Vlasnik: {LTBLUE}{STRING}
+STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Područna nadležnost: {LTBLUE}{STRING}
+STR_01A9_NONE                                                   :Nijedan/Nitko/Ništa
+STR_01AA_NAME                                                   :{BLACK}Ime
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
+
+############ range for days starts
+STR_01AC_1ST                                                    :1.
+STR_01AD_2ND                                                    :2.
+STR_01AE_3RD                                                    :3.
+STR_01AF_4TH                                                    :4.
+STR_01B0_5TH                                                    :5.
+STR_01B1_6TH                                                    :6.
+STR_01B2_7TH                                                    :7.
+STR_01B3_8TH                                                    :8.
+STR_01B4_9TH                                                    :9.
+STR_01B5_10TH                                                   :10.
+STR_01B6_11TH                                                   :11.
+STR_01B7_12TH                                                   :12.
+STR_01B8_13TH                                                   :13.
+STR_01B9_14TH                                                   :14.
+STR_01BA_15TH                                                   :15.
+STR_01BB_16TH                                                   :16.
+STR_01BC_17TH                                                   :17.
+STR_01BD_18TH                                                   :18.
+STR_01BE_19TH                                                   :19.
+STR_01BF_20TH                                                   :20.
+STR_01C0_21ST                                                   :21.
+STR_01C1_22ND                                                   :22.
+STR_01C2_23RD                                                   :23.
+STR_01C3_24TH                                                   :24.
+STR_01C4_25TH                                                   :25.
+STR_01C5_26TH                                                   :26.
+STR_01C6_27TH                                                   :27.
+STR_01C7_28TH                                                   :28.
+STR_01C8_29TH                                                   :29.
+STR_01C9_30TH                                                   :30.
+STR_01CA_31ST                                                   :31.
+############ range for days ends
+
+STR_01CB                                                        :{TINYFONT}{COMMA}
+
+STR_01CE_CARGO_ACCEPTED                                         :{BLACK}Prihvaćeni teret: {LTBLUE}
+
+STR_01D1_8                                                      :({COMMA}/8 {STRING})
+STR_01D2_JAZZ_JUKEBOX                                           :{WHITE}Jazz Jukebox
+STR_01D3_SOUND_MUSIC                                            :Zvuk/glazba
+STR_01D4_SHOW_SOUND_MUSIC_WINDOW                                :{BLACK}Prikaži prozor zvuk/glazba
+STR_01D5_ALL                                                    :{TINYFONT}Sve
+STR_01D6_OLD_STYLE                                              :{TINYFONT}Staromodno
+STR_01D7_NEW_STYLE                                              :{TINYFONT}Moderno
+STR_01D8_EZY_STREET                                             :{TINYFONT}Laganica
+STR_01D9_CUSTOM_1                                               :{TINYFONT}Proizvoljno 1
+STR_01DA_CUSTOM_2                                               :{TINYFONT}Proizvoljno 2
+STR_01DB_MUSIC_VOLUME                                           :{BLACK}{TINYFONT}Glasnoća glazbe
+STR_01DC_EFFECTS_VOLUME                                         :{BLACK}{TINYFONT}Glasnoća zvukova
+STR_01DD_MIN_MAX                                                :{BLACK}{TINYFONT}MIN  '  '  ' '  '  '  MAX
+STR_01DE_SKIP_TO_PREVIOUS_TRACK                                 :{BLACK}Prethodna traka
+STR_01DF_SKIP_TO_NEXT_TRACK_IN_SELECTION                        :{BLACK}Sljedeća traka
+STR_01E0_STOP_PLAYING_MUSIC                                     :{BLACK}Zaustavi glazbu
+STR_01E1_START_PLAYING_MUSIC                                    :{BLACK}Pokreni glazbu
+STR_01E2_DRAG_SLIDERS_TO_SET_MUSIC                              :{BLACK}Povuci klizače za namještanje glasnoće glazbe i zvukova
+STR_01E3                                                        :{DKGREEN}{TINYFONT}--
+STR_01E4_0                                                      :{DKGREEN}{TINYFONT}0{COMMA}
+STR_01E5                                                        :{DKGREEN}{TINYFONT}{COMMA}
+STR_01E6                                                        :{DKGREEN}{TINYFONT}------
+STR_01E7                                                        :{DKGREEN}{TINYFONT}"{STRING}"
+STR_01E8_TRACK_XTITLE                                           :{BLACK}{TINYFONT}Traka{SETX 88}Naslov
+STR_01E9_SHUFFLE                                                :{TINYFONT}Miješaj
+STR_01EA_PROGRAM                                                :{TINYFONT}{BLACK}Program
+STR_01EB_MUSIC_PROGRAM_SELECTION                                :{WHITE}Izbor glazbenog programa
+STR_01EC_0                                                      :{TINYFONT}{LTBLUE}0{COMMA} "{STRING}"
+STR_01ED                                                        :{TINYFONT}{LTBLUE}{COMMA} "{STRING}"
+STR_01EE_TRACK_INDEX                                            :{TINYFONT}{BLACK}Popis traka
+STR_01EF_PROGRAM                                                :{TINYFONT}{BLACK}Program- '{STRING}'
+STR_01F0_CLEAR                                                  :{TINYFONT}{BLACK}Obriši
+STR_01F1_SAVE                                                   :{TINYFONT}{BLACK}Spremi
+STR_01F2_CURRENT_PROGRAM_OF_MUSIC                               :{BLACK}Aktivni glazbeni program
+STR_01F3_SELECT_ALL_TRACKS_PROGRAM                              :{BLACK}Odaberi program 'sve trake'
+STR_01F4_SELECT_OLD_STYLE_MUSIC                                 :{BLACK}Odaberi program 'staromodna glazba'
+STR_01F5_SELECT_NEW_STYLE_MUSIC                                 :{BLACK}Odaberi program 'moderna glazba'
+STR_01F6_SELECT_CUSTOM_1_USER_DEFINED                           :{BLACK}Odaberi program 'Proizvoljna glazba 1'
+STR_01F7_SELECT_CUSTOM_2_USER_DEFINED                           :{BLACK}Odaberi program 'Proizvoljna glazba 2'
+STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1                          :{BLACK}Obriši aktivni program (samo Proizvoljno 1 ili Proizvoljno 2)
+STR_01F9_SAVE_MUSIC_SETTINGS                                    :{BLACK}Spremi glazbene postavke
+STR_01FA_CLICK_ON_MUSIC_TRACK_TO                                :{BLACK}Klikni na glazbenu traku za dodavanje u aktivni program (samo Proizvoljno 1 ili Proizvoljno 2)
+STR_CLICK_ON_TRACK_TO_REMOVE                                    :{BLACK}Klikni na glazbenu traku da ju makneš iz trenutnog programa (samo Proizvoljno1 ili Proizvoljno2)
+STR_01FB_TOGGLE_PROGRAM_SHUFFLE                                 :{BLACK}Ukluči/isključi miješanje programa
+STR_01FC_SHOW_MUSIC_TRACK_SELECTION                             :{BLACK}Prikaži prozor za izbor glazbenih traka
+STR_01FD_CLICK_ON_SERVICE_TO_CENTER                             :{BLACK}Pritisni na uslugu za centriranje pogleda na industriju/grad
+STR_01FE_DIFFICULTY                                             :{BLACK}Težina ({STRING})
+STR_01FF                                                        :{TINYFONT}{BLACK}{DATE_LONG}
+STR_0200_LAST_MESSAGE_NEWS_REPORT                               :Poslijednja poruka/vijest
+STR_0201_MESSAGE_SETTINGS                                       :Postavke poruka
+STR_MESSAGE_HISTORY_MENU                                        :Povijest poruka
+STR_0203_SHOW_LAST_MESSAGE_NEWS                                 :{BLACK}Prikaži zadnju poruku/vijest, prikaži postavke poruka
+STR_0204_MESSAGE_OPTIONS                                        :{WHITE}Mogućnosti poruka
+STR_0205_MESSAGE_TYPES                                          :{BLACK}Vrste poruka:
+STR_0206_ARRIVAL_OF_FIRST_VEHICLE                               :{YELLOW}Dolazak prvog vozila u stanicu igrača
+STR_0207_ARRIVAL_OF_FIRST_VEHICLE                               :{YELLOW}Dolazak prvog vozila u stanicu suparnika
+STR_0208_ACCIDENTS_DISASTERS                                    :{YELLOW}Nesreće / katastrofe
+STR_0209_COMPANY_INFORMATION                                    :{YELLOW}Podaci vezani za tvrtku
+STR_NEWS_OPEN_CLOSE                                             :{YELLOW}Otvaranje / zatvaranje industrija
+STR_020A_ECONOMY_CHANGES                                        :{YELLOW}Promjene u gospodarstvu
+STR_020B_ADVICE_INFORMATION_ON_PLAYER                           :{YELLOW}Savjet / informacija o vozilima igrača
+STR_020C_NEW_VEHICLES                                           :{YELLOW}Nova vozila
+STR_020D_CHANGES_OF_CARGO_ACCEPTANCE                            :{YELLOW}Promjene u prihvaćanju tereta
+STR_020E_SUBSIDIES                                              :{YELLOW}Subvencije
+STR_020F_GENERAL_INFORMATION                                    :{YELLOW}Opće informacije
+STR_MESSAGES_ALL                                                :{YELLOW}Postavi sve tipove poruka na: Isključeno/Ukratko/Potpuno
+STR_MESSAGE_SOUND                                               :{YELLOW} Pusti zvuk za sve skraćene novinske poruke
+STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO                       :{WHITE}...predaleko od prethodnog odredišta
+STR_0211_TOP_COMPANIES_WHO_REACHED                              :{BIGFONT}{BLACK}Najbolje tvrtke koje su dosigle razinu {NUM}{}({STRING})
+STR_TOP_COMPANIES_NETWORK_GAME                                  :{BIGFONT}{BLACK}Tablica kompanija u {NUM}
+STR_0212                                                        :{BIGFONT}{COMMA}.
+STR_0213_BUSINESSMAN                                            :Privrednik
+STR_0214_ENTREPRENEUR                                           :Poduzetnik
+STR_0215_INDUSTRIALIST                                          :Industrijalist
+STR_0216_CAPITALIST                                             :Kapitalist
+STR_0217_MAGNATE                                                :Velikaš
+STR_0218_MOGUL                                                  :Bogataš
+STR_0219_TYCOON_OF_THE_CENTURY                                  :Tajkun stoljeća
+STR_HIGHSCORE_NAME                                              :{BIGFONT}{PLAYERNAME}, {COMPANY}
+STR_HIGHSCORE_STATS                                             :{BIGFONT}'{STRING}'   ({COMMA})
+STR_021B_ACHIEVES_STATUS                                        :{BLACK}{BIGFONT}{COMPANY} postigao je status '{STRING}' !
+STR_021C_OF_ACHIEVES_STATUS                                     :{WHITE}{BIGFONT}{PLAYERNAME} iz {COMPANY} postigao je status '{STRING}' !
+STR_021F                                                        :{BLUE}{COMMA}
+STR_0221_OPENTTD                                                :{YELLOW}OpenTTD
+STR_0222_SCENARIO_EDITOR                                        :{YELLOW}Uređivanje scenarija
+STR_0223_LAND_GENERATION                                        :{WHITE}Stvaranje zemljišta
+STR_0224                                                        :{BLACK}{UPARROW}
+STR_0225                                                        :{BLACK}{DOWNARROW}
+STR_0228_INCREASE_SIZE_OF_LAND_AREA                             :{BLACK}Povećaj područje koje će biti povišeno/sniženo
+STR_0229_DECREASE_SIZE_OF_LAND_AREA                             :{BLACK}Smanji podrčje koje će biti povišeno/sniženo
+STR_022A_GENERATE_RANDOM_LAND                                   :{BLACK}Napravi nasumično zemljište
+STR_022B_RESET_LANDSCAPE                                        :{BLACK}Poništi krajolik
+STR_022C_RESET_LANDSCAPE                                        :{WHITE}Poništi krajolik
+STR_RESET_LANDSCAPE_TOOLTIP                                     :{BLACK}Obriši sa mape sve u vlasništvu igrača
+STR_RESET_LANDSCAPE_CONFIRMATION_TEXT                           :{WHITE}Jeste li sigurni da želite obrisati sve u vlasništvu igrača?
+STR_022E_LANDSCAPE_GENERATION                                   :{BLACK}Stvaranje krajolika
+STR_022F_TOWN_GENERATION                                        :{BLACK}Stvaranje gradova
+STR_0230_INDUSTRY_GENERATION                                    :{BLACK}Stvaranje industrija
+STR_0231_ROAD_CONSTRUCTION                                      :{BLACK}Izgradnja ceste
+STR_0233_TOWN_GENERATION                                        :{WHITE}Stvaranje gradova
+STR_0234_NEW_TOWN                                               :{BLACK}Novi grad
+STR_0235_CONSTRUCT_NEW_TOWN                                     :{BLACK}Izgradi novi grad
+STR_0236_CAN_T_BUILD_TOWN_HERE                                  :{WHITE}Ovdje nije moguće graditi...
+STR_0237_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}...preblizu rubu karte
+STR_0238_TOO_CLOSE_TO_ANOTHER_TOWN                              :{WHITE}...preblizu drugog grada
+STR_0239_SITE_UNSUITABLE                                        :{WHITE}...neprikladno mjesto
+STR_023A_TOO_MANY_TOWNS                                         :{WHITE}...previše gradova
+STR_CANNOT_GENERATE_TOWN                                        :{WHITE}Nije moguće graditi gradove
+STR_NO_SPACE_FOR_TOWN                                           :{WHITE}...nema više mjesta na karti
+STR_023B_INCREASE_SIZE_OF_TOWN                                  :{BLACK}Povećaj stanovništvo grada
+STR_023C_EXPAND                                                 :{BLACK}Proširi
+STR_023D_RANDOM_TOWN                                            :{BLACK}Nasumičan grad
+STR_023E_BUILD_TOWN_IN_RANDOM_LOCATION                          :{BLACK}Izgradi grad na nasumično odabranom pložaju
+STR_023F_INDUSTRY_GENERATION                                    :{WHITE}Stvaranje industrije
+STR_0240_COAL_MINE                                              :{BLACK}Rudnik ugljena
+STR_0241_POWER_STATION                                          :{BLACK}Elektrana
+STR_0242_SAWMILL                                                :{BLACK}Pilana
+STR_0243_FOREST                                                 :{BLACK}Šuma
+STR_0244_OIL_REFINERY                                           :{BLACK}Rafinerija nafte
+STR_0245_OIL_RIG                                                :{BLACK}Naftna platforma
+STR_0246_FACTORY                                                :{BLACK}Tvornica
+STR_0247_STEEL_MILL                                             :{BLACK}Čeličana
+STR_0248_FARM                                                   :{BLACK}Farma
+STR_0249_IRON_ORE_MINE                                          :{BLACK}Rudnik željeza
+STR_024A_OIL_WELLS                                              :{BLACK}Naftna polja
+STR_024B_BANK                                                   :{BLACK}Banka
+STR_024C_PAPER_MILL                                             :{BLACK}Tvornica papira
+STR_024D_FOOD_PROCESSING_PLANT                                  :{BLACK}Tvornica hrane
+STR_024E_PRINTING_WORKS                                         :{BLACK}Tiskara
+STR_024F_GOLD_MINE                                              :{BLACK}Rudnik zlata
+STR_0250_LUMBER_MILL                                            :{BLACK}Pilana
+STR_0251_FRUIT_PLANTATION                                       :{BLACK}Plantaža voća
+STR_0252_RUBBER_PLANTATION                                      :{BLACK}Plantaža gume
+STR_0253_WATER_SUPPLY                                           :{BLACK}Izvor vode
+STR_0254_WATER_TOWER                                            :{BLACK}Vodotoranj
+STR_0255_DIAMOND_MINE                                           :{BLACK}Rudnik dijamanata
+STR_0256_COPPER_ORE_MINE                                        :{BLACK}Rudnik bakra
+STR_0257_COTTON_CANDY_FOREST                                    :{BLACK}Šuma šećerne vune
+STR_0258_CANDY_FACTORY                                          :{BLACK}Tvornica slatkiša
+STR_0259_BATTERY_FARM                                           :{BLACK}Tvornica baterija
+STR_025A_COLA_WELLS                                             :{BLACK}Izvor Cole
+STR_025B_TOY_SHOP                                               :{BLACK}Trgovina igračkama
+STR_025C_TOY_FACTORY                                            :{BLACK}Tvornica igračaka
+STR_025D_PLASTIC_FOUNTAINS                                      :{BLACK}Izvori plastike
+STR_025E_FIZZY_DRINK_FACTORY                                    :{BLACK}Tvornica gaziranih pića
+STR_025F_BUBBLE_GENERATOR                                       :{BLACK}Generator balona
+STR_0260_TOFFEE_QUARRY                                          :{BLACK}Iskop mliječne karamele
+STR_0261_SUGAR_MINE                                             :{BLACK}Rudnik šećera
+STR_0262_CONSTRUCT_COAL_MINE                                    :{BLACK}Izgradi rudnik ugljena
+STR_0263_CONSTRUCT_POWER_STATION                                :{BLACK}Izgradi elektranu
+STR_0264_CONSTRUCT_SAWMILL                                      :{BLACK}Izgradi pilanu
+STR_0265_PLANT_FOREST                                           :{BLACK}Posadi šumu
+STR_0266_CONSTRUCT_OIL_REFINERY                                 :{BLACK}Izgradi naftnu rafineriju
+STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY                             :{BLACK}Izgradi naftnu bušotinu (može biti sagrađena samo blizu rubova karte)
+STR_0268_CONSTRUCT_FACTORY                                      :{BLACK}Izgradi tvornicu
+STR_0269_CONSTRUCT_STEEL_MILL                                   :{BLACK}Izgradi čeličanu
+STR_026A_CONSTRUCT_FARM                                         :{BLACK}Izgradi farmu
+STR_026B_CONSTRUCT_IRON_ORE_MINE                                :{BLACK}Izgradi rudnik bakra
+STR_026C_CONSTRUCT_OIL_WELLS                                    :{BLACK}Izgradi naftna polja
+STR_026D_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Izgradi banku (može biti izgrađena samo u gradovima s više od 1200 stanovnika)
+STR_026E_CONSTRUCT_PAPER_MILL                                   :{BLACK}Izgradi tvornicu papira
+STR_026F_CONSTRUCT_FOOD_PROCESSING                              :{BLACK}Izgradi tvornicu hrane
+STR_0270_CONSTRUCT_PRINTING_WORKS                               :{BLACK}Izgradi tiskaru
+STR_0271_CONSTRUCT_GOLD_MINE                                    :{BLACK}Izgradi rudnik zlata
+STR_0272_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Izgradi banku (može biti izgrađena samo u gradovima)
+STR_0273_CONSTRUCT_LUMBER_MILL_TO                               :{BLACK}Construct pilanu (za sječu prašume i proizvodnju drva)
+STR_0274_PLANT_FRUIT_PLANTATION                                 :{BLACK}Posadi plantažu voća
+STR_0275_PLANT_RUBBER_PLANTATION                                :{BLACK}Posadi plantažu gume
+STR_0276_CONSTRUCT_WATER_SUPPLY                                 :{BLACK}Iskopaj izvor vode
+STR_0277_CONSTRUCT_WATER_TOWER_CAN                              :{BLACK}Izgradi vodotoranj (može biti izgrađen samo u gradovima)
+STR_0278_CONSTRUCT_DIAMOND_MINE                                 :{BLACK}Izgradi rudnik dijamanata
+STR_0279_CONSTRUCT_COPPER_ORE_MINE                              :{BLACK}Izgradi rudnik bakra
+STR_027A_PLANT_COTTON_CANDY_FOREST                              :{BLACK}Posadi šumu šećerne vune
+STR_027B_CONSTRUCT_CANDY_FACTORY                                :{BLACK}Izgradi tvornicu slatkiša
+STR_027C_CONSTRUCT_BATTERY_FARM                                 :{BLACK}Izgradi tvornicu baterija
+STR_027D_CONSTRUCT_COLA_WELLS                                   :{BLACK}Iskopaj izvore Cole
+STR_027E_CONSTRUCT_TOY_SHOP                                     :{BLACK}Izgradi trgovinu igračkama
+STR_027F_CONSTRUCT_TOY_FACTORY                                  :{BLACK}Izgradi tvornicu igračaka
+STR_0280_CONSTRUCT_PLASTIC_FOUNTAINS                            :{BLACK}Iskopaj izvore plastike
+STR_0281_CONSTRUCT_FIZZY_DRINK_FACTORY                          :{BLACK}Izgradi tvornicu gaziranih pića
+STR_0282_CONSTRUCT_BUBBLE_GENERATOR                             :{BLACK}Izgradi generator balona
+STR_0283_CONSTRUCT_TOFFEE_QUARRY                                :{BLACK}Izgradi iskop milječne karamele
+STR_0284_CONSTRUCT_SUGAR_MINE                                   :{BLACK}Izgradi rudnik šećera
+STR_0285_CAN_T_BUILD_HERE                                       :{WHITE}Ne možeš graditi {STRING} ovdje...
+STR_0286_MUST_BUILD_TOWN_FIRST                                  :{WHITE}...moraš prvo izgraditi grad
+STR_0287_ONLY_ONE_ALLOWED_PER_TOWN                              :{WHITE}...dozvoljen samo jedan po gradu
+STR_0288_PLANT_TREES                                            :{BLACK}Posadi drveće
+STR_0289_PLACE_SIGN                                             :{BLACK}Stavi znak
+STR_028A_RANDOM_TREES                                           :{BLACK}Nasumično odabrano drveće
+STR_028B_PLANT_TREES_RANDOMLY_OVER                              :{BLACK}Nasumce posadi drveće po krajoliku
+STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE                         :{BLACK}Stavi stijenje na krajolik
+STR_028D_PLACE_LIGHTHOUSE                                       :{BLACK}Postavi svjetionik
+STR_028E_PLACE_TRANSMITTER                                      :{BLACK}Postavi odašiljač
+STR_028F_DEFINE_DESERT_AREA                                     :{BLACK}Odredi pustinjsko područje.{}Pritisni i drži CTRL za uklanjanje
+STR_CREATE_LAKE                                                 :{BLACK}Odredi vodeno područje.{}Napravi kanal, osim ako CTRL nije pritisnut na morskom nivou, kada će umjesto toga potopiti okolna područja
+STR_0290_DELETE                                                 :{BLACK}Obriši
+STR_0291_DELETE_THIS_TOWN_COMPLETELY                            :{BLACK}Obriši ovaj grad u cjelosti
+STR_0292_SAVE_SCENARIO                                          :Spremi scenarij
+STR_0293_LOAD_SCENARIO                                          :Učitaj secenarij
+STR_LOAD_HEIGHTMAP                                              :Učitaj visinsku kartu
+STR_0294_QUIT_EDITOR                                            :Završi s uređivanjem
+STR_0295                                                        :
+STR_0296_QUIT                                                   :Završi
+STR_0297_SAVE_SCENARIO_LOAD_SCENARIO                            :{BLACK}Snimi scenarij, učitaj scenarij, napusti uređivanje scenarija, završi
+STR_0298_LOAD_SCENARIO                                          :{WHITE}Učitaj scenarij
+STR_0299_SAVE_SCENARIO                                          :{WHITE}Spremi scenarij
+STR_029A_PLAY_SCENARIO                                          :{BLACK}Igraj scenarij
+STR_PLAY_HEIGHTMAP                                              :{BLACK}Igraj Rastersku Mapu
+STR_PLAY_HEIGHTMAP_HINT                                         :{BLACK}Pokreni novu igru, koristeći rastersku mapu kao krajolik
+STR_QUIT_SCENARIO_QUERY                                         :{YELLOW}Jeste li sigurni da želite završiti ovaj scenarij?
+STR_029C_QUIT_EDITOR                                            :{WHITE}Završi uređivanje
+STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}..može se izgraditi u gradovima sa najmanje 1200 stanovnika
+STR_029E_MOVE_THE_STARTING_DATE                                 :{BLACK}Pomakni početni datum 1 godinu unatrag
+STR_029F_MOVE_THE_STARTING_DATE                                 :{BLACK}Pomakni početni datum 1 godinu unaprijed
+STR_02A0_ENDS_OF_BRIDGE_MUST_BOTH                               :{WHITE}...oba kraja mosta moraju biti na zemlji
+STR_02A1_SMALL                                                  :{BLACK}Malo
+STR_02A2_MEDIUM                                                 :{BLACK}Srednje
+STR_02A3_LARGE                                                  :{BLACK}Veliko
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Grad
+STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Izaberi veličinu grada
+STR_02A5_TOWN_SIZE                                              :{YELLOW}Veličina grada:
+
+STR_02B6                                                        :{STRING}  -  {STRING}
+STR_02B7_SHOW_LAST_MESSAGE_OR_NEWS                              :{BLACK}Prikaži posljednu poruku ili vijest
+STR_OFF                                                         :Isključeno
+STR_SUMMARY                                                     :Sažetak
+STR_FULL                                                        :Puno
+STR_02BA                                                        :{SILVER}- -  {COMPANY}  - -
+STR_02BB_TOWN_DIRECTORY                                         :Popis gradova
+STR_02BC_VEHICLE_DESIGN_NAMES                                   :{BLACK}Imena dizajna vozila
+STR_02BD                                                        :{BLACK}{STRING}
+STR_02BE_DEFAULT                                                :Pretpostavljeno
+STR_02BF_CUSTOM                                                 :Prilagođeno
+STR_02C0_SAVE_CUSTOM_NAMES                                      :{BLACK}Spremi prilagođena imena
+STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION                         :{BLACK}Odabir imena dizajna vozila
+STR_02C2_SAVE_CUSTOMIZED_VEHICLE                                :{BLACK}Spremi prilagođena imena dizajna vozila
+
+STR_CHECKMARK                                                   :{CHECKMARK}
+############ range for menu starts
+STR_02C3_GAME_OPTIONS                                           :Opcije igre
+STR_02C5_DIFFICULTY_SETTINGS                                    :Postavke težine
+STR_02C7_CONFIG_PATCHES                                         :Konfiguriraj zakrpe
+STR_NEWGRF_SETTINGS                                             :Postavke NewGRF-a
+STR_TRANSPARENCY_OPTIONS                                        :Opcije prozirnosti
+STR_GAMEOPTMENU_0A                                              :
+STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Prikazana imena gradova
+STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Prikazana imena stanica
+STR_02CE_SIGNS_DISPLAYED                                        :{SETX 12}Prikazani znakovi
+STR_WAYPOINTS_DISPLAYED2                                        :{SETX 12}Prikazana čvorišta
+STR_02D0_FULL_ANIMATION                                         :{SETX 12}Sve animacije
+STR_02D2_FULL_DETAIL                                            :{SETX 12}Svi detalji
+STR_02D4_TRANSPARENT_BUILDINGS                                  :{SETX 12}Prozirne građevine
+STR_TRANSPARENT_SIGNS                                           :{SETX 12}Prozirni znakovi stanica
+############ range ends here
+
+############ range for menu starts
+STR_02D5_LAND_BLOCK_INFO                                        :Podatci o zemljištu
+STR_02D6                                                        :
+STR_CONSOLE_SETTING                                             :Otvori konzolu
+STR_02D7_SCREENSHOT_CTRL_S                                      :Slika zaslona (Ctrl-S)
+STR_02D8_GIANT_SCREENSHOT_CTRL_G                                :Ogromna slika zaslona (Ctrl-G)
+STR_02D9_ABOUT_OPENTTD                                          :O 'OpenTTD'
+############ range ends here
+
+STR_02DB_OFF                                                    :{BLACK}Isključeno
+STR_02DA_ON                                                     :{BLACK}Uključeno
+STR_02DC_DISPLAY_SUBSIDIES                                      :{BLACK}Prikaži subvencije
+STR_02DD_SUBSIDIES                                              :Subvencije
+STR_02DE_MAP_OF_WORLD                                           :Karta svijeta
+STR_EXTRA_VIEW_PORT                                             :Dodatni pogled
+STR_SIGN_LIST                                                   :Popis znakova
+STR_02DF_TOWN_DIRECTORY                                         :Direktorij gradova
+STR_TOWN_POPULATION                                             :{BLACK}Svjetska populacija: {COMMA}
+STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Pogled {COMMA}
+STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN                                :{BLACK}Kopiraj u pogled
+STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT                             :{BLACK}Kopiraj lokaciju globalnog pogleda na ovaj mini pogled
+STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW                                :{BLACK}Zalijepi iz mini pogleda
+STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT                             :{BLACK}Zalijepi lokaciju ovog mini pogleda na globalni pogled
+
+STR_02E0_CURRENCY_UNITS                                         :{BLACK}Novčane jedinice
+STR_02E1                                                        :{BLACK}{SKIP}{STRING}
+STR_02E2_CURRENCY_UNITS_SELECTION                               :{BLACK}Odabir novčanih jedinica
+STR_MEASURING_UNITS                                             :{BLACK}Mjerne jedinice
+STR_02E4                                                        :{BLACK}{SKIP}{SKIP}{STRING}
+STR_MEASURING_UNITS_SELECTION                                   :{BLACK}Odabir mjernih jedinica
+STR_02E6_ROAD_VEHICLES                                          :{BLACK}Cestovna vozila
+STR_02E7                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{STRING}
+STR_02E8_SELECT_SIDE_OF_ROAD_FOR                                :{BLACK}Izaberi na kojoj će strani ceste vozila prometovati
+STR_02E9_DRIVE_ON_LEFT                                          :Vozi na lijevoj strani
+STR_02EA_DRIVE_ON_RIGHT                                         :Vozi na desnoj strani
+STR_02EB_TOWN_NAMES                                             :{BLACK}Imena gradova
+STR_02EC                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_02ED_SELECT_STYLE_OF_TOWN_NAMES                             :{BLACK}Izaberi stil za imena gradova
+
+STR_02F4_AUTOSAVE                                               :{BLACK}Automatsko spremanje
+STR_02F5                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_02F6_SELECT_INTERVAL_BETWEEN                                :{BLACK}Odaberi interval između automatskih spremanja igre
+STR_02F7_OFF                                                    :Isključeno
+STR_02F8_EVERY_3_MONTHS                                         :Svaka 3 mjeseca
+STR_02F9_EVERY_6_MONTHS                                         :Svakih 6 mjeseci
+STR_02FA_EVERY_12_MONTHS                                        :Svakih 12 mjeseci
+STR_02FB_START_A_NEW_GAME                                       :{BLACK}Započni novu igru
+STR_02FC_LOAD_A_SAVED_GAME                                      :{BLACK}Učitaj spremljenu igru
+STR_02FE_CREATE_A_CUSTOMIZED_GAME                               :{BLACK}Izradi prilagođeni igrački svijet/scenarij
+STR_02FF_SELECT_SINGLE_PLAYER_GAME                              :{BLACK}Odaberi igru za jednog igrača
+STR_0300_SELECT_MULTIPLAYER_GAME                                :{BLACK}Odaberi igru za 2-8 igrača
+STR_0301_DISPLAY_GAME_OPTIONS                                   :{BLACK}Prikaži opcije igre
+STR_0302_DISPLAY_DIFFICULTY_OPTIONS                             :{BLACK}Prikaži opcije težine
+STR_0303_START_A_NEW_GAME_USING                                 :{BLACK}Započni novu igru koristeći prilagođeni scenarij
+STR_0304_QUIT                                                   :{BLACK}Završi
+STR_0305_QUIT_OPENTTD                                           :{BLACK}Završi 'OpenTTD'
+STR_0307_OPENTTD                                                :{WHITE}OpenTTD {REV}
+STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...može biti izgrađen samo u gradovima
+STR_030E_SELECT_TEMPERATE_LANDSCAPE                             :{BLACK}Odaberi 'umjeren' stil krajolika
+STR_030F_SELECT_SUB_ARCTIC_LANDSCAPE                            :{BLACK}Odaberi 'subarktički' stil krajolika
+STR_0310_SELECT_SUB_TROPICAL_LANDSCAPE                          :{BLACK}Odaberi 'subtropski' stil krajolika
+STR_0311_SELECT_TOYLAND_LANDSCAPE                               :{BLACK}Odaberi 'zemlju igračka' za stil krajolika
+STR_0312_FUND_CONSTRUCTION_OF_NEW                               :{BLACK}Financiraj izgradnju nove industrije
+
+############ range for menu starts
+STR_INDUSTRY_DIR                                                :Lista gospodarstava
+STR_0313_FUND_NEW_INDUSTRY                                      :Financiraj novo gospodarstvo
+############ range ends here
+
+STR_0314_FUND_NEW_INDUSTRY                                      :{WHITE}Financiraj novu industriju
+STR_JUST_STRING                                                 :{STRING}
+STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...može biti izgrađen samo u gradovima
+STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST                        :{WHITE}...može biti izgrađen samo u predjelima kišnih šuma
+STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT                            :{WHITE}...može biti izgrađen samo u pustinjskim područjima
+STR_0319_PAUSED                                                 :{YELLOW}* *  STANKA  *  *
+
+STR_031B_SCREENSHOT_SUCCESSFULLY                                :{WHITE}Slika zaslona uspješno spremljena kao '{STRING}'
+STR_031C_SCREENSHOT_FAILED                                      :{WHITE}Slika zaslona nije uspjela!
+
+STR_0329_PURCHASE_LAND_FOR_FUTURE                               :{BLACK}Kupi zemlju za buduću uporabu
+STR_032F_AUTOSAVE                                               :{RED}AUTOMATSKO SPREMANJE
+STR_SAVING_GAME                                                 :{RED}*  *  SAVING GAME  *  *
+STR_SAVE_STILL_IN_PROGRESS                                      :{WHITE}Spremanje još u tijeku,{}molimo pričekajte dok se ne završi!
+STR_0330_SELECT_EZY_STREET_STYLE                                :{BLACK}Izaberi glazbeni program 'Ezy Street style'
+
+STR_0335_6                                                      :{BLACK}6
+STR_0336_7                                                      :{BLACK}7
+
+############ start of townname region
+STR_TOWNNAME_ORIGINAL_ENGLISH                                   :Engleski (original)
+STR_TOWNNAME_FRENCH                                             :Francuski
+STR_TOWNNAME_GERMAN                                             :Njemački
+STR_TOWNNAME_ADDITIONAL_ENGLISH                                 :Engleski (dodatno)
+STR_TOWNNAME_LATIN_AMERICAN                                     :Latinoamerički
+STR_TOWNNAME_SILLY                                              :Blesavo
+STR_TOWNNAME_SWEDISH                                            :Švedski
+STR_TOWNNAME_DUTCH                                              :Nizozemski
+STR_TOWNNAME_FINNISH                                            :Finski
+STR_TOWNNAME_POLISH                                             :Poljski
+STR_TOWNNAME_SLOVAKISH                                          :Slovački
+STR_TOWNNAME_NORWEGIAN                                          :Norveški
+STR_TOWNNAME_HUNGARIAN                                          :Mađarski
+STR_TOWNNAME_AUSTRIAN                                           :Austrijski
+STR_TOWNNAME_ROMANIAN                                           :Rumunjski
+STR_TOWNNAME_CZECH                                              :Češki
+STR_TOWNNAME_SWISS                                              :Švicarski
+STR_TOWNNAME_DANISH                                             :Danski
+STR_TOWNNAME_TURKISH                                            :Turski
+STR_TOWNNAME_ITALIAN                                            :Talijanski
+STR_TOWNNAME_CATALAN                                            :Katalonski
+############ end of townname region
+
+STR_CURR_GBP                                                    :Funte (£)
+STR_CURR_USD                                                    :Dolari ($)
+STR_CURR_EUR                                                    :Euri (€)
+STR_CURR_YEN                                                    :Jeni (¥)
+STR_CURR_ATS                                                    :Austrijski šiling (ATS)
+STR_CURR_BEF                                                    :Belgijski franak (BEF)
+STR_CURR_CHF                                                    :Švicarski franak (CHF)
+STR_CURR_CZK                                                    :Češka kruna (CZK)
+STR_CURR_DEM                                                    :Njemačka marka (DEM)
+STR_CURR_DKK                                                    :Danska kruna (DKK)
+STR_CURR_ESP                                                    :Pezeta (ESP)
+STR_CURR_FIM                                                    :Finska marka (FIM)
+STR_CURR_FRF                                                    :Franak (FRF)
+STR_CURR_GRD                                                    :Grčka drahma (GRD)
+STR_CURR_HUF                                                    :Mađarski forint (HUF)
+STR_CURR_ISK                                                    :Islandska kruna (ISK)
+STR_CURR_ITL                                                    :Talijanska lira (ITL)
+STR_CURR_NLG                                                    :Nizozemski gulden (NLG)
+STR_CURR_NOK                                                    :Norveška kruna (NOK)
+STR_CURR_PLN                                                    :Poljski zloti (PLN)
+STR_CURR_ROL                                                    :Rumunjski lev (ROL)
+STR_CURR_RUR                                                    :Ruske rublje (RUR)
+STR_CURR_SIT                                                    :Slovenski tolar (SIT)
+STR_CURR_SEK                                                    :Švedska kruna (SEK)
+STR_CURR_YTL                                                    :Turska lira(YTL)
+STR_CURR_SKK                                                    :Slovačka kruna (SKK)
+STR_CURR_BRR                                                    :Brazilski real (BRL)
+
+STR_CURR_CUSTOM                                                 :Proizvoljno...
+
+STR_OPTIONS_LANG                                                :{BLACK}Jezik
+STR_OPTIONS_LANG_CBO                                            :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_OPTIONS_LANG_TIP                                            :{BLACK}Izaberi jezično sučelje
+
+STR_OPTIONS_FULLSCREEN                                          :{BLACK}Cijeli ekran
+STR_OPTIONS_FULLSCREEN_TIP                                      :{BLACK}Označi ovu kućicu kako bi igrao OpenTTD preko cijelog ekrana
+
+STR_OPTIONS_RES                                                 :{BLACK}Razlučivost ekrana
+STR_OPTIONS_RES_CBO                                             :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_OPTIONS_RES_TIP                                             :{BLACK}Izaberi rezoluciju ekrana
+
+STR_OPTIONS_SCREENSHOT_FORMAT                                   :{BLACK}Format za sliku ekrana
+STR_OPTIONS_SCREENSHOT_FORMAT_CBO                               :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_OPTIONS_SCREENSHOT_FORMAT_TIP                               :{BLACK}Izaberi format za sliku ekrana
+
+STR_AUTOSAVE_1_MONTH                                            :Svaki mjesec
+STR_AUTOSAVE_FAILED                                             :{WHITE}Automatsko spremanje neuspješno
+
+STR_MONTH_JAN                                                   :Siječanj
+STR_MONTH_FEB                                                   :Veljača
+STR_MONTH_MAR                                                   :Ožujak
+STR_MONTH_APR                                                   :Travanj
+STR_MONTH_MAY                                                   :Svibanj
+STR_MONTH_JUN                                                   :Lipanj
+STR_MONTH_JUL                                                   :Srpanj
+STR_MONTH_AUG                                                   :Kolovoz
+STR_MONTH_SEP                                                   :Rujan
+STR_MONTH_OCT                                                   :Listopad
+STR_MONTH_NOV                                                   :Studeni
+STR_MONTH_DEC                                                   :Prosinac
+
+STR_HEADING_FOR_STATION                                         :{LTBLUE}Kreće se prema {STATION}
+STR_HEADING_FOR_STATION_VEL                                     :{LTBLUE}Kreće se prema {STATION}, {VELOCITY}
+STR_NO_ORDERS                                                   :{LTBLUE}Nema narudžbi
+STR_NO_ORDERS_VEL                                               :{LTBLUE}Nema narudžbi, {VELOCITY}
+
+STR_PASSENGERS                                                  :putnici
+STR_BAGS                                                        :vreće
+STR_TONS                                                        :tone
+STR_LITERS                                                      :litre
+STR_ITEMS                                                       :jedinice
+STR_CRATES                                                      :sanduci
+STR_RES_OTHER                                                   :ostalo
+STR_NOTHING                                                     :
+
+STR_SMALL_RIGHT_ARROW                                           :{TINYFONT}{RIGHTARROW}
+
+STR_CANT_SHARE_ORDER_LIST                                       :{WHITE}Nije moguće dijeliti rednu listu...
+STR_CANT_COPY_ORDER_LIST                                        :{WHITE}Nije moguće kopirati rednu listu...
+STR_END_OF_SHARED_ORDERS                                        :{SETX 10}- - Kraj dijeljenih naredbi - -
+
+STR_TRAIN_IS_LOST                                               :{WHITE}Vlak {COMMA} se izgubio.
+STR_TRAIN_IS_UNPROFITABLE                                       :{WHITE}Prošlogodišnja zarada vlaka  {COMMA} bila je {CURRENCY}
+STR_EURO_INTRODUCE                                              :{BLACK}{BIGFONT}Europska Monetarna Unija!{}{}Euro je predstavljen kao jedinstvena valuta za svakodnevnu uporabu  u tvojoj zemlji!
+
+# Start of order review system.
+# DON'T ADD OR REMOVE LINES HERE
+STR_TRAIN_HAS_TOO_FEW_ORDERS                                    :{WHITE} Vlak {COMMA} ima premalo naredbi u rasporedu
+STR_TRAIN_HAS_VOID_ORDER                                        :{WHITE}Vlak {COMMA} ima praznu naredbu
+STR_TRAIN_HAS_DUPLICATE_ENTRY                                   :{WHITE}Vlak {COMMA} ima udvostučenu naredbu
+STR_TRAIN_HAS_INVALID_ENTRY                                     :{WHITE}Vlak {COMMA} ima nevažeću stanicu u voznom redu
+STR_ROADVEHICLE_HAS_TOO_FEW_ORDERS                              :{WHITE}Cestovno vozilo {COMMA} ima premalo naredbi u rasporedu
+STR_ROADVEHICLE_HAS_VOID_ORDER                                  :{WHITE}Cestovno vozilo {COMMA} ima praznu naredbu
+STR_ROADVEHICLE_HAS_DUPLICATE_ENTRY                             :{WHITE}Cestovno vozilo {COMMA} ima udvostručenu naredbu
+STR_ROADVEHICLE_HAS_INVALID_ENTRY                               :{WHITE}Cestovno vozilo {COMMA} ima nevažeću stanicu u voznom redu
+STR_SHIP_HAS_TOO_FEW_ORDERS                                     :{WHITE}Brod {COMMA} ima premalo naredbi u rasporedu
+STR_SHIP_HAS_VOID_ORDER                                         :{WHITE}Brod {COMMA} ima praznu naredbu
+STR_SHIP_HAS_DUPLICATE_ENTRY                                    :{WHITE}Brod{COMMA} ima udvostručene naredbe
+STR_SHIP_HAS_INVALID_ENTRY                                      :{WHITE}Brod {COMMA} ima nevažeću stanicu u voznom redu
+STR_AIRCRAFT_HAS_TOO_FEW_ORDERS                                 :{WHITE}Zrakoplov {COMMA} ima premalo naredbi u rasporedu
+STR_AIRCRAFT_HAS_VOID_ORDER                                     :{WHITE}Zrakoplov {COMMA} ima praznu naredbu
+STR_AIRCRAFT_HAS_DUPLICATE_ENTRY                                :{WHITE}Zrakoplov {COMMA} ima udvostručene naredbe
+STR_AIRCRAFT_HAS_INVALID_ENTRY                                  :{WHITE}Zrakoplov {COMMA} ima nevažeću stanicu u voznom redu
+# end of order system
+
+STR_TRAIN_AUTORENEW_FAILED                                      :{WHITE}Neuspješna automatska obnova vlaka {COMMA} (ograničena količina novca)
+STR_ROADVEHICLE_AUTORENEW_FAILED                                :{WHITE}Automatska zamjena nije izvršena na cestovnom vozilu {COMMA} (money limit)
+STR_SHIP_AUTORENEW_FAILED                                       :{WHITE}Neuspješna automatska obnova broda {COMMA} (ograničena količina novca)
+STR_AIRCRAFT_AUTORENEW_FAILED                                   :{WHITE}Neuspjela automatska zamjena zrakoplova {COMMA} (novčano ograničenje)
+STR_TRAIN_TOO_LONG_AFTER_REPLACEMENT                            :{WHITE}Nakon zamjene, vlak {COMMA} je postao predug
+
+STR_CONFIG_PATCHES                                              :{BLACK}Konfiguriraj zakrpe
+STR_CONFIG_PATCHES_TIP                                          :{BLACK}Podesi zakrpe
+STR_CONFIG_PATCHES_CAPTION                                      :{WHITE}Podesi zakrpe
+
+STR_CONFIG_PATCHES_OFF                                          :Isključeno
+STR_CONFIG_PATCHES_ON                                           :Uključeno
+STR_CONFIG_PATCHES_VEHICLESPEED                                 :{LTBLUE}Prikaži brzinu vozila u statusnoj traci: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_BUILDONSLOPES                                :{LTBLUE}Dozvoli gradnju na nagibima i obalama: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_CATCHMENT                                    :{LTBLUE}Dozvoli realističnije veličine područja zahvaćanja: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_EXTRADYNAMITE                                :{LTBLUE}Dopusti rušenje više gradskih cesta, mostova itd.: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAMMOTHTRAINS                                :{LTBLUE}Omogući sastavljanje vrlo dugačkih vlakova: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_REALISTICACCEL                               :{LTBLUE}Omogući realno ubrzanje za vlakove: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_FORBID_90_DEG                                :{LTBLUE}Zabrani vlakovima i brodovima skretanja pod 90 stupnjeva: {ORANGE}{STRING} {LTBLUE} (requires NPF)
+STR_CONFIG_PATCHES_JOINSTATIONS                                 :{LTBLUE}Spoji željezničke stanice koje se izgrade jedna kraj druge: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_FULLLOADANY                                  :{LTBLUE}Napusti stanicu ako je bilo koji teret u potpunosti natovaren pri 'punom utovaru': {ORANGE}{STRING}
+STR_CONFIG_PATCHES_IMPROVEDLOAD                                 :{LTBLUE}Koristi unaprijeđen algoritam ukrcavanja: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_GRADUAL_LOADING                              :{LTBLUE}Postupno utovaruj vozila: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_INFLATION                                    :{LTBLUE}Inflacija: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Dostavi teret u stanicu samo ako u njoj postoji potražnja: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Dopusti izgradnju vrlo dugačkih mostova: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Dopusti naredbe za slanje u spremište: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Dopusti više sličnih industrija po gradu: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Moguće je graditi spojene industrije iste vrste: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Uvijek prikaži dugi datum u statusnoj traci: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SIGNALSIDE                                   :{LTBLUE}Prikaži znakove na strani po kojoj se vozi: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SHOWFINANCES                                 :{LTBLUE}Prikaži financijski prozor na kraju godine: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_NEW_NONSTOP                                  :{LTBLUE}TTDPatch kompatibilno nonstop rukovanje: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ROADVEH_QUEUE                                :{LTBLUE}Nizanje cestovnih vozila(sa kvantum efektima): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSCROLL                                   :{LTBLUE}Pomiči prozor kada je miš na rubu: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_BRIBE                                        :{LTBLUE}Dozvoli potkupljivanje gradskih vlasti: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Neujednačene stanice: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Novo globalno pronalaženje puteva (NPF, isključuje NTP): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Težinski množitelj za teret za simulaciju teških vlakova: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Dozvoli drive-through cestovne prepreke na cestama pod vlašću grada: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADJACENT_STATIONS                            :{LTBLUE}Dozvoli izradu spojenih stanica: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Uvjek omogući male zračne luke: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_WARN_LOST_TRAIN                              :{LTBLUE}Upozori kad se vlak izgubi: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ORDER_REVIEW                                 :{LTBLUE}Pogledaj naređenja vozila: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ORDER_REVIEW_OFF                             :ne
+STR_CONFIG_PATCHES_ORDER_REVIEW_EXDEPOT                         :da, no isključi zaustavljena vozila
+STR_CONFIG_PATCHES_ORDER_REVIEW_ON                              :od svih vozila
+STR_CONFIG_PATCHES_WARN_INCOME_LESS                             :{LTBLUE}Upozori ako je prihod vlaka negativan: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES                        :{LTBLUE}Vozila ne zastaruju: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTORENEW_VEHICLE                            :{LTBLUE}Automatski zamijeni vozilo kada postane staro
+STR_CONFIG_PATCHES_AUTORENEW_MONTHS                             :{LTBLUE}Automatski obnovi vozilo kada je {ORANGE}{STRING}{LTBLUE} mjeseci prije/poslije maksimalnog godišta
+STR_CONFIG_PATCHES_AUTORENEW_MONEY                              :{LTBLUE}Minimum novca potrebnih za automatsko obnavljanje: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ERRMSG_DURATION                              :{LTBLUE}Trajanje poruke s greškom: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_POPULATION_IN_LABEL                          :{LTBLUE}Prikaži broj stanovnika u traci sa imenom grada: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_INVISIBLE_TREES                              :{LTBLUE}Nevidljivo drveće (sa prozirnim građevinama): {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_LAND_GENERATOR                               :{LTBLUE}Generator zemlje: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LAND_GENERATOR_ORIGINAL                      :Izvorno
+STR_CONFIG_PATCHES_LAND_GENERATOR_TERRA_GENESIS                 :TerraGenesis
+STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE                        :{LTBLUE}Maksimalna udaljenost Rafinerija nafte od ruba {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SNOWLINE_HEIGHT                              :{LTBLUE}Visina linije snijega: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN                         :{LTBLUE}Grubost terena (samo TerraGenesis) : {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH             :Vrlo glatko
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_SMOOTH                  :Glatko
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_ROUGH                   :Grubo
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_ROUGH              :Vrlo grubo
+STR_CONFIG_PATCHES_TREE_PLACER                                  :{LTBLUE}Algoritam postavljanja drveća: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TREE_PLACER_NONE                             :Nijedan
+STR_CONFIG_PATCHES_TREE_PLACER_ORIGINAL                         :Izvorno
+STR_CONFIG_PATCHES_TREE_PLACER_IMPROVED                         :Unaprijeđeno
+STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION                           :{LTBLUE}Rotacija visinske mape: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE         :Obrnuto smjeru kazaljke na satu
+STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_CLOCKWISE                 :U smjeru kazaljke na satu
+STR_CONFIG_PATCHES_SE_FLAT_WORLD_HEIGHT                         :{LTBLUE}Visinski nivo koji ravna mapa u scenariju dobiva: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_STATION_SPREAD                               :{LTBLUE}Maksimalna raširenost stanice: {ORANGE}{STRING} {RED}Pozor: Visoka vrijednost usporuje igru
+STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Automatski servisiraj helikoptere na heliodromima: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Poveži alatnu traku za krajolik sa alatnim trakama za željeznicu/ceste/vodu/zračne luke: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Okreni smjer pomicanja: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING                             :{LTBLUE}Glatko skrolanje kroz mini pogled: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Pokaži mjerni opis kod korištenja raznih alata za izgradnju: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Pokaži tvrtkine livreje: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LIVERIES_NONE                                :Ništa
+STR_CONFIG_PATCHES_LIVERIES_OWN                                 :Vlastita tvrtka
+STR_CONFIG_PATCHES_LIVERIES_ALL                                 :Sve tvrtke
+STR_CONFIG_PATCHES_PREFER_TEAMCHAT                              :{LTBLUE}Preferiraj timski chat sa <ENTER>:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLLING                        :{LTBLUE}Funkcija kotačića: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SCROLLWHEEL_ZOOM                             :Zumiraj kartu
+STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Skrolaj kartom
+STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Isključeno
+STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Brzina kotačića za skrolanje: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automatski pauziraj kad pokrećeš novu igru: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Koristi naprednu listu vozila: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Koristi indikatore utovara: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Uključi raspored za vozila: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Pokaži raspored u otkucajima radije nego u danima: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE                            :{LTBLUE}Zadana vrsta tračnica (poslije nove igre/podizanja igre): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Normalne Tračnice
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Elektrificirane Tračnice
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Monopruga
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :Prvi dostupan
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :Zadnji dostupan
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :Najčešće korišten
+
+STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maksimalan broj vlakova po igraču: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Maximalan broj cestovnih vozila po igraču: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Maksimalan broj zrakoplova po igraču: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAX_SHIPS                                    :{LTBLUE}Maximalan broj brodova po igraču: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_AI_BUILDS_TRAINS                             :{LTBLUE}Isključi vlakove za računalo: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH                            :{LTBLUE}Isključi cestovna vozila za računalo: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT                           :{LTBLUE}Isključi zrakoplov za računalo: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_SHIPS                              :{LTBLUE}Isključi cestovna vozila za računalo: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_AINEW_ACTIVE                                 :{LTBLUE}Omogući novi AI (alfa): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER                            :{LTBLUE}Omogući AI u modu s više igrača (eksperimentalno): {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_SERVINT_TRAINS                               :{LTBLUE}Pretpostavljeni period servisiranja vlakova: {ORANGE}{STRING} dana/%
+STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED                      :{LTBLUE}Pretpostavljeni period servisiranja vlakova: {ORANGE}onemogućeno
+STR_CONFIG_PATCHES_SERVINT_ROADVEH                              :{LTBLUE}Pretpostavljeni period servisiranja cestovnih vozila: {ORANGE}{STRING} dana/%
+STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED                     :{LTBLUE}Pretpostavljeni period servisiranja cestovnih vozila: {ORANGE}onemogućeno
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT                             :{LTBLUE}Pretpostavljeni period servisiranja zrakoplova: {ORANGE}{STRING} dana/%
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED                    :{LTBLUE}Pretpostavljeni period servisiranja aviona: {ORANGE}onemogućeno
+STR_CONFIG_PATCHES_SERVINT_SHIPS                                :{LTBLUE}Pretpostavljeni period servisiranja brodova: {ORANGE}{STRING} dana/%
+STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED                       :{LTBLUE}Pretpostavljeni period servisiranja brodova: {ORANGE}onemogućeno
+STR_CONFIG_PATCHES_NOSERVICE                                    :{LTBLUE}Isključi servisiranje kada su kvarovi postavljeni na nula: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_WAGONSPEEDLIMITS                             :{LTBLUE}Uključi ograničenje brzine za vagone: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DISABLE_ELRAILS                              :{LTBLUE}Onemogući električne tračnice: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_COLORED_NEWS_YEAR                            :{LTBLUE}Vijesti u boji pojavljuju se: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STARTING_YEAR                                :{LTBLUE}Početna godina: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ENDING_YEAR                                  :{LTBLUE}Završna godina: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_ECONOMY                               :{LTBLUE}Uključi tečnu ekonomiju (više manjih izazova)
+STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Dopusti kupovanje udjela drugih tvrtki
+STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Kod povlačenja, postavi signale svakih/svaku; {ORANGE}{STRING}pločica/u
+STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Automatski izgradi semafore prije: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}Izgled grada "bezviše cesta" nije valjan u editoru scenarija
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Odaberi grad-cesta raspored: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :nema više cesta
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :inicijalno
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :bolje ceste
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :2x2 mreža
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :3x3 mreža
+
+STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Položaj glavne alatne trake: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Lijevo
+STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Sredina
+STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :Desno
+STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}Radijus hvazanja  prozora: {ORANGE}{STRING} px
+STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}Radijus hvatanja prozora: {ORANGE}isključen
+STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}Brzina rasta gradova: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :Ništa
+STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :Sporo
+STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :Normalno
+STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :Brzo
+STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Vrlo brzo
+STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Proporcije mjesta koja će postati gradovi: {ORANGE}1 u {STRING}
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Proporcije mjesta koja će postati gradovi: {ORANGE} Ništa
+
+STR_CONFIG_PATCHES_GUI                                          :{BLACK}Sučelje
+STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Izgradnja
+STR_CONFIG_PATCHES_VEHICLES                                     :{BLACK}Vozila
+STR_CONFIG_PATCHES_STATIONS                                     :{BLACK}Stanice
+STR_CONFIG_PATCHES_ECONOMY                                      :{BLACK}Ekonomija
+STR_CONFIG_PATCHES_AI                                           :{BLACK}Konkurenti
+
+STR_CONFIG_PATCHES_DISABLED                                     :onemogućeno
+STR_CONFIG_PATCHES_INT32                                        :{NUM}
+STR_CONFIG_PATCHES_CURRENCY                                     :{CURRENCY}
+
+STR_CONFIG_PATCHES_QUERY_CAPT                                   :{WHITE}Promjeni vrijednost postavke
+STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE                :{WHITE}Neki ili svi od zadanih servisnih intervala ispod nisu kompatibilni sa odabranim postavkama! 5-90% ili 30-800 dana su valjane vrijednosti
+STR_CONFIG_PATCHES_YAPF_SHIPS                                   :{LTBLUE}Koristi YAPF za brodove: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_YAPF_ROAD                                    :{LTBLUE}Koristi YAPF za cestovna vozila: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_YAPF_RAIL                                    :{LTBLUE}Koristi YAPF za vlakove: {ORANGE}{STRING}
+
+STR_TEMPERATE_LANDSCAPE                                         :Umjereni krajolik
+STR_SUB_ARCTIC_LANDSCAPE                                        :Pod-arktički krajolik
+STR_SUB_TROPICAL_LANDSCAPE                                      :Sub-tropski krajolik
+STR_TOYLAND_LANDSCAPE                                           :Toyland krajolik
+
+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 {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}
+STR_CHEAT_BUILD_IN_PAUSE                                        :{LTBLUE}Gradi dok je vrijeme zaustavljeno: {ORANGE}{STRING}
+STR_CHEAT_NO_JETCRASH                                           :{LTBLUE}Veliki avioni se ne će rušiti (često) na malim zračnim lukama: {ORANGE} {STRING}
+STR_CHEAT_SWITCH_CLIMATE                                        :{LTBLUE}Promijeni klimu: {ORANGE} {STRING}
+STR_CHEAT_CHANGE_DATE                                           :{LTBLUE}Promijeni datum: {ORANGE} {DATE_SHORT}
+STR_CHEAT_SETUP_PROD                                            :{LTBLUE}Omogući izmjeni produkcijskih vrijednosti: {ORANGE}{STRING}
+
+STR_HEADING_FOR_WAYPOINT                                        :{LTBLUE}Ide prema {WAYPOINT}
+STR_HEADING_FOR_WAYPOINT_VEL                                    :{LTBLUE}Ide prema {WAYPOINT}, {VELOCITY}
+
+STR_GO_TO_WAYPOINT                                              :Idi preko {WAYPOINT}
+STR_GO_NON_STOP_TO_WAYPOINT                                     :Idi non-stop preko {WAYPOINT}
+
+STR_WAYPOINTNAME_CITY                                           : Čvorište{TOWN}
+STR_WAYPOINTNAME_CITY_SERIAL                                    :Čvorište {TOWN} #{COMMA}
+STR_LANDINFO_WAYPOINT                                           :Čvorište
+
+STR_WAYPOINT                                                    :{WHITE}Čvorište
+STR_WAYPOINT_GRAPHICS_TIP                                       :{BLACK}Odaberi vrstu čvorišta
+
+STR_WAYPOINT_VIEWPORT                                           :{WHITE}{WAYPOINT}
+STR_WAYPOINT_VIEWPORT_TINY                                      :{TINYFONT}{WHITE}{WAYPOINT}
+STR_WAYPOINT_RAW                                                :{WAYPOINT}
+STR_EDIT_WAYPOINT_NAME                                          :{WHITE}Promjeni ime čvorišta
+
+STR_CANT_CHANGE_WAYPOINT_NAME                                   :{WHITE}Ne možeš promijeniti ime smjerokaza...
+STR_CONVERT_RAIL_TO_WAYPOINT_TIP                                :{BLACK}Promijeni tračnicu u čvorište
+STR_CANT_BUILD_TRAIN_WAYPOINT                                   :{WHITE}Ne možeš izgraditi željeznički smjerokaz ovdje...
+STR_CANT_REMOVE_TRAIN_WAYPOINT                                  :{WHITE}Ne možeš ukloniti željeznički smjerokaz odavdje...
+
+STR_BUILD_AUTORAIL_TIP                                          :{BLACK}Izgradi željezničku tračnicu koristeći Autorail modus
+
+STR_NO_TOWN_IN_SCENARIO                                         :{WHITE}...u ovom scenariju nema gradova
+
+STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Jeste li sigurni da želite napraviti nasumični krajolik?
+STR_MANY_RANDOM_TOWNS                                           :{BLACK}Mnogo nasumičnih gradova
+STR_RANDOM_TOWNS_TIP                                            :{BLACK}Popuni kartu nasumce smještenim gradovima
+STR_MANY_RANDOM_INDUSTRIES                                      :Mnoge nasumične industrije
+STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Popuni kartu nasumce smještenim industrijama
+STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Ne možeš generirati gospodarstva...
+
+STR_LANDSCAPING_TOOLBAR_TIP                                     :{BLACK}Otvori alatnu traku za snižavanje/povećavanje, sadnju drveća, itd.
+STR_LANDSCAPING_TOOLBAR                                         :{WHITE}Uređivanje krajolika
+STR_LEVEL_LAND_TOOLTIP                                          :{BLACK}Ravnanje površine
+
+
+STR_TREES_RANDOM_TYPE                                           :{BLACK}Raznovrsno drveće
+STR_TREES_RANDOM_TYPE_TIP                                       :{BLACK}Stavi drveće nasumičnog tipa
+
+STR_CANT_BUILD_CANALS                                           :{WHITE}Ovdje ne možeš graditi kanale...
+STR_BUILD_CANALS_TIP                                            :{BLACK}Izgradi kanale.
+STR_LANDINFO_CANAL                                              :Kanal
+
+STR_CANT_BUILD_LOCKS                                            :{WHITE}Ne mogu graditi brane ovdje...
+STR_BUILD_LOCKS_TIP                                             :{BLACK}Izgradi brane
+STR_LANDINFO_LOCK                                               :Brana
+
+STR_BUOY_IS_IN_USE                                              :{WHITE}...plutača je u uporabi!
+
+STR_LANDINFO_COORDS                                             :{BLACK}Koordinate: {LTBLUE}{NUM}x{NUM} ({STRING})
+
+STR_CANT_REMOVE_PART_OF_STATION                                 :{WHITE}Ne možeš ukloniti dio stanice...
+STR_CANT_CONVERT_RAIL                                           :{WHITE}Ne možeš pretvoriti vrstu tračnica ovdje...
+STR_CONVERT_RAIL_TIP                                            :{BLACK}Konvertiraj/Nadogradi vrstu tračnica
+
+STR_DRAG_WHOLE_TRAIN_TO_SELL_TIP                                :{BLACK}Povucite lokomotivu na ovo mjesto da bi prodaoli cijeli vlak
+
+STR_DRAG_DROP                                                   :{BLACK}Povuci i spusti
+STR_STATION_DRAG_DROP                                           :{BLACK}Napravi stanicu koristeći drag & drop
+STR_SELECT_STATION_CLASS_TIP                                    :{BLACK}Odaberite vrstu stanice koju želite vidjeti
+STR_SELECT_STATION_TYPE_TIP                                     :{BLACK}Izaberite vrstu stanice za izgradnju
+
+STR_FAST_FORWARD                                                :{BLACK}Premotaj igru naprijed
+STR_MESSAGE_HISTORY                                             :{WHITE}Povijest poruka
+STR_MESSAGE_HISTORY_TIP                                         :{BLACK}Popis nedavnih novinskih poruka
+STR_MESSAGES_DISABLE_ALL                                        :{BLACK}Onemogući sve
+STR_MESSAGES_ENABLE_ALL                                         :{BLACK}Omogući sve
+
+STR_CONSTRUCT_COAL_MINE_TIP                                     :{BLACK}Izgradi rudnik ugljena
+STR_CONSTRUCT_FOREST_TIP                                        :{BLACK}Posadi šumu
+STR_CONSTRUCT_OIL_RIG_TIP                                       :{BLACK}Izgradi naftnu bušotinu
+STR_CONSTRUCT_FARM_TIP                                          :{BLACK}Financiraj farmu
+STR_CONSTRUCT_COPPER_ORE_MINE_TIP                               :{BLACK}Izgradi rudnik bakra
+STR_CONSTRUCT_OIL_WELLS_TIP                                     :{BLACK}Bušenjem traži naftu
+STR_CONSTRUCT_GOLD_MINE_TIP                                     :{BLACK}Izgradi rudnik zlata
+STR_CONSTRUCT_DIAMOND_MINE_TIP                                  :{BLACK}Izgradi rudnik dijamanata
+STR_CONSTRUCT_IRON_ORE_MINE_TIP                                 :{BLACK}Izgradi rudnik željeza
+STR_CONSTRUCT_FRUIT_PLANTATION_TIP                              :{BLACK}Financiraj plantažu voća
+STR_CONSTRUCT_RUBBER_PLANTATION_TIP                             :{BLACK}Financiraj plantažu gume
+STR_CONSTRUCT_WATER_SUPPLY_TIP                                  :{BLACK}Financiraj izvor vode
+STR_CONSTRUCT_COTTON_CANDY_TIP                                  :{BLACK}Posadi šumu šećerne vune
+STR_CONSTRUCT_BATTERY_FARM_TIP                                  :{BLACK}Financiraj tvornicu baterija
+STR_CONSTRUCT_COLA_WELLS_TIP                                    :{BLACK}Bušenjem traži Colu
+STR_CONSTRUCT_PLASTIC_FOUNTAINS_TIP                             :{BLACK}Financiraj izvore plastike
+STR_CONSTRUCT_BUBBLE_GENERATOR_TIP                              :{BLACK}Izgradi generator balona
+STR_CONSTRUCT_TOFFEE_QUARRY_TIP                                 :{BLACK}Financiraj kamenolom mliječne karamele
+STR_CONSTRUCT_SUGAR_MINE_TIP                                    :{BLACK}Izgradi šećeranu
+
+STR_INDUSTRYDIR_CAPTION                                         :{WHITE}Gospodarstva
+STR_INDUSTRYDIR_ITEM                                            :{ORANGE}{INDUSTRY}{BLACK} ({CARGO}){YELLOW} ({COMMA}% prevezeno)
+STR_INDUSTRYDIR_ITEM_TWO                                        :{ORANGE}{INDUSTRY}{BLACK} ({CARGO}/{CARGO}){YELLOW} ({COMMA}%/{COMMA}% prevezeno)
+STR_INDUSTRYDIR_ITEM_NOPROD                                     :{ORANGE}{INDUSTRY}
+
+STR_INDUSTRY_TOO_CLOSE                                          :{WHITE}...preblizu drugom gospodarstvu
+
+STR_RAIL_REFIT_VEHICLE_TO_CARRY                                 :{BLACK}Prepravi vlak kako bi nosio drugu vrstu tereta
+STR_RAIL_REFIT_VEHICLE                                          :{BLACK}Prepravi vlak
+STR_RAIL_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Izaberi vrstu tereta koju će vlak nositi
+STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED                             :{BLACK}Prepravi vlak kako bi nosio označenu vrstu tereta
+STR_RAIL_CAN_T_REFIT_VEHICLE                                    :{WHITE}Ne možeš prepraviti vlak...
+STR_CONFIG_PATCHES_SERVINT_ISPERCENT                            :{LTBLUE}Servisni intervali u postotcima: {ORANGE}{STRING}
+STR_CONFIG_GAME_PRODUCTION                                      :{WHITE}Promijeni proizvodnju
+
+TEMP_AI_IN_PROGRESS                                             :{WHITE}Dobrodošli u novi AI pod razvojem. Ukoliko naiđete na probleme, napravite sliku ekrana i stavite ju na forum.
+TEMP_AI_ACTIVATED                                               :{WHITE}Upozorenje: ovaj novi AI je još uvijek alfa! Trenutno, samo kamioni i autobusi rade!
+TEMP_AI_MULTIPLAYER                                             :{WHITE}Upozorenje: implementacije je još uvijek pokusna (koristeći novi AI). Molimo prijavite bilo kakav problem na truelight@openttd.org
+
+############ network gui strings
+
+STR_NETWORK_MULTIPLAYER                                         :{WHITE}Više igrača
+
+STR_NETWORK_PLAYER_NAME                                         :{BLACK}Ime igrača:
+STR_NETWORK_ENTER_NAME_TIP                                      :{BLACK}Ovo je ime po kojem će te drugi igrači identificirati
+STR_NETWORK_CONNECTION                                          :{BLACK}Veza:
+STR_NETWORK_CONNECTION_TIP                                      :{BLACK}Izaberi između internetske igre ili igre preko lokalne mreže (LAN)
+
+STR_NETWORK_START_SERVER                                        :{BLACK}Pokreni poslužitelj
+STR_NETWORK_START_SERVER_TIP                                    :{BLACK}Pokreni vlastiti poslužitelj
+
+STR_NETWORK_GAME_NAME                                           :{BLACK}Ime
+STR_NETWORK_GAME_NAME_TIP                                       :{BLACK}Ime igre
+STR_NETWORK_INFO_ICONS_TIP                                      :{BLACK}Jezik, verzija poslužitelja, itd.
+STR_NETWORK_CLICK_GAME_TO_SELECT                                :{BLACK}Klikni na igru s liste kako bi ju izabrao
+
+STR_NETWORK_FIND_SERVER                                         :{BLACK}Pronađi poslužitelj
+STR_NETWORK_FIND_SERVER_TIP                                     :{BLACK}Pronađi poslužitelje u mreži
+STR_NETWORK_ADD_SERVER                                          :{BLACK}Dodaj poslužitelj
+STR_NETWORK_ADD_SERVER_TIP                                      :{BLACK}Dodaje poslužitelj na popis koji će uvijek biti provjeren postoje li igre u tijeku.
+STR_NETWORK_ENTER_IP                                            :{BLACK}Unesi adresu domaćina
+
+STR_NETWORK_GENERAL_ONLINE                                      :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA}
+STR_NETWORK_CLIENTS_CAPTION                                     :{BLACK}Klijenti
+STR_NETWORK_CLIENTS_CAPTION_TIP                                 :{BLACK}Klijenata online / klijenata maks{}Tvrki online / tvrki maks
+STR_NETWORK_GAME_INFO                                           :{SILVER}INFO O IGRI
+STR_ORANGE                                                      :{ORANGE}{STRING}
+STR_NETWORK_CLIENTS                                             :{SILVER}Klijenti:  {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
+STR_NETWORK_LANGUAGE                                            :{SILVER}Jezik:  {WHITE}{STRING}
+STR_NETWORK_TILESET                                             :{SILVER}Set pločica:  {WHITE}{STRING}
+STR_NETWORK_MAP_SIZE                                            :{SILVER}Veličina karte:  {WHITE}{COMMA}x{COMMA}
+STR_NETWORK_SERVER_VERSION                                      :{SILVER}Verzija poslužitelja:  {WHITE}{STRING}
+STR_NETWORK_SERVER_ADDRESS                                      :{SILVER}Adresa poslužitelja:  {WHITE}{STRING} : {NUM}
+STR_NETWORK_START_DATE                                          :{SILVER}Datum početka:  {WHITE}{DATE_SHORT}
+STR_NETWORK_CURRENT_DATE                                        :{SILVER}Trenutni datum:  {WHITE}{DATE_SHORT}
+STR_NETWORK_PASSWORD                                            :{SILVER}Zaštićeno zaporkom!
+STR_NETWORK_SERVER_OFFLINE                                      :{SILVER}POSLUŽITELJ NEDOSTUPAN
+STR_NETWORK_SERVER_FULL                                         :{SILVER}POSLUŽITELJ PUN
+STR_NETWORK_VERSION_MISMATCH                                    :{SILVER}RAZLIKA U VERZIJAMA
+STR_NETWORK_GRF_MISMATCH                                        :{SILVER}NEWGRF GREŠKA
+
+STR_NETWORK_JOIN_GAME                                           :{BLACK}Pridruži se igri
+
+
+STR_NETWORK_START_GAME_WINDOW                                   :{WHITE}Započni novu igru za više igrača
+
+STR_NETWORK_NEW_GAME_NAME                                       :{BLACK}Ime igre:
+STR_NETWORK_NEW_GAME_NAME_TIP                                   :{BLACK}Ime igre bit će prikazno drugim igračima u izborniku za odabir igre s više igrača
+STR_NETWORK_SET_PASSWORD                                        :{BLACK}Postavi zaporku
+STR_NETWORK_PASSWORD_TIP                                        :{BLACK}Zaštiti svoju igru pomoću zaporke ukoliko ne želiš da bude javno dostupna
+STR_NETWORK_SELECT_MAP                                          :{BLACK}Izaberi kartu:
+STR_NETWORK_SELECT_MAP_TIP                                      :{BLACK}Koju kartu želiš igrati?
+STR_NETWORK_NUMBER_OF_CLIENTS                                   :{BLACK}Maks klijenata:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP                               :{BLACK}Izaberi maksimalan broj klijenata. Ne moraju sva mjesta biti popunjena.
+STR_NETWORK_COMBO1                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LAN                                                 :LAN
+STR_NETWORK_INTERNET                                            :Internet
+STR_NETWORK_LAN_INTERNET                                        :LAN / Internet
+STR_NETWORK_INTERNET_ADVERTISE                                  :Internet (oglasi)
+STR_NETWORK_COMBO2                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_0_PLAYERS                                           :0 igrača
+STR_NETWORK_1_PLAYERS                                           :1 igrač
+STR_NETWORK_2_PLAYERS                                           :2 igrača
+STR_NETWORK_3_PLAYERS                                           :3 igrača
+STR_NETWORK_4_PLAYERS                                           :4 igrača
+STR_NETWORK_5_PLAYERS                                           :5 igrača
+STR_NETWORK_6_PLAYERS                                           :6 igrača
+STR_NETWORK_7_PLAYERS                                           :7 igrača
+STR_NETWORK_8_PLAYERS                                           :8 igrača
+STR_NETWORK_9_PLAYERS                                           :9 igrača
+STR_NETWORK_10_PLAYERS                                          :10 igrača
+STR_NETWORK_NUMBER_OF_COMPANIES                                 :{BLACK}Maks tvrki:
+STR_NETWORK_NUMBER_OF_COMPANIES_TIP                             :{BLACK}Ograniči poslužitelj na određeni broj tvrtki
+STR_NETWORK_COMBO3                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_NUMBER_OF_SPECTATORS                                :{BLACK}Maks promatrača:
+STR_NETWORK_NUMBER_OF_SPECTATORS_TIP                            :{BLACK}Ograniči poslužitelj na određeni broj gledatelja
+STR_NETWORK_COMBO4                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LANGUAGE_SPOKEN                                     :{BLACK}Jezik kojim se govori:
+STR_NETWORK_LANGUAGE_TIP                                        :{BLACK}Drugi igrači znati će kojim se jezikom govori na poslužitelju
+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}Započni igru
+STR_NETWORK_START_GAME_TIP                                      :{BLACK}Započni novu igru u mreži na nasumičnoj mapi ili iz scenarija
+STR_NETWORK_LOAD_GAME                                           :{BLACK}Učitaj igru
+STR_NETWORK_LOAD_GAME_TIP                                       :{BLACK}Nastavi snimljenu igru za više igrača (pazite da se spojite pod svojim imenom)
+
+############ Leave those lines in this order!!
+STR_NETWORK_LANG_ANY                                            :Bilo koji
+STR_NETWORK_LANG_ENGLISH                                        :Engleski
+STR_NETWORK_LANG_GERMAN                                         :Njemački
+STR_NETWORK_LANG_FRENCH                                         :Francuski
+STR_NETWORK_LANG_BRAZILIAN                                      :Brazilski
+STR_NETWORK_LANG_BULGARIAN                                      :Bugarski
+STR_NETWORK_LANG_CHINESE                                        :Kineski
+STR_NETWORK_LANG_CZECH                                          :Češki
+STR_NETWORK_LANG_DANISH                                         :Danski
+STR_NETWORK_LANG_DUTCH                                          :Nizozemski
+STR_NETWORK_LANG_ESPERANTO                                      :Esperanto
+STR_NETWORK_LANG_FINNISH                                        :Finski
+STR_NETWORK_LANG_HUNGARIAN                                      :Mađarski
+STR_NETWORK_LANG_ICELANDIC                                      :Islandski
+STR_NETWORK_LANG_ITALIAN                                        :Talijanski
+STR_NETWORK_LANG_JAPANESE                                       :Japanski
+STR_NETWORK_LANG_KOREAN                                         :Korejski
+STR_NETWORK_LANG_LITHUANIAN                                     :Litavski
+STR_NETWORK_LANG_NORWEGIAN                                      :Norveški
+STR_NETWORK_LANG_POLISH                                         :Poljski
+STR_NETWORK_LANG_PORTUGUESE                                     :Portugalski
+STR_NETWORK_LANG_ROMANIAN                                       :Rumunjski
+STR_NETWORK_LANG_RUSSIAN                                        :Ruski
+STR_NETWORK_LANG_SLOVAK                                         :Slovački
+STR_NETWORK_LANG_SLOVENIAN                                      :Slovenski
+STR_NETWORK_LANG_SPANISH                                        :Španjolski
+STR_NETWORK_LANG_SWEDISH                                        :Švedski
+STR_NETWORK_LANG_TURKISH                                        :Turski
+STR_NETWORK_LANG_UKRAINIAN                                      :Ukrajinski
+############ End of leave-in-this-order
+
+STR_NETWORK_GAME_LOBBY                                          :{WHITE}Predvorje multiplayer igre
+
+STR_NETWORK_PREPARE_TO_JOIN                                     :{BLACK}Pripremanje za pridruživanje:   {ORANGE}{STRING}
+STR_NETWORK_COMPANY_LIST_TIP                                    :{BLACK}Popis svih kompanija trenutno u igri. Možete se pridružiti jednoj ili osnovati novu ako postoji slobodno mjesto
+STR_NETWORK_NEW_COMPANY                                         :{BLACK}Nova tvrtka
+STR_NETWORK_NEW_COMPANY_TIP                                     :{BLACK}Otvori novu tvrtku
+STR_NETWORK_SPECTATE_GAME                                       :{BLACK}Gledaj igru
+STR_NETWORK_SPECTATE_GAME_TIP                                   :{BLACK}Promatraj igru kao gledatelj
+STR_NETWORK_JOIN_COMPANY                                        :{BLACK}Pridruži se tvrtki
+STR_NETWORK_JOIN_COMPANY_TIP                                    :{BLACK}Pomogni upravljati ovom tvrtkom
+STR_NETWORK_REFRESH                                             :{BLACK}Osvježi poslužitelja
+STR_NETWORK_REFRESH_TIP                                         :{BLACK}Osvježi podatke o poslužitelju
+
+STR_NETWORK_COMPANY_INFO                                        :{SILVER}PODACI O TVRTKI
+
+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}{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}
+STR_NETWORK_STATIONS                                            :{SILVER}Stanice:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
+STR_NETWORK_PLAYERS                                             :{SILVER}Igrači:  {WHITE}{STRING}
+
+STR_NETWORK_CONNECTING                                          :{WHITE}Spajanje...
+
+############ Leave those lines in this order!!
+STR_NETWORK_CONNECTING_1                                        :{BLACK}(1/6) Spajanje u toku..
+STR_NETWORK_CONNECTING_2                                        :{BLACK}(2/6) Provjera ovlaštenja..
+STR_NETWORK_CONNECTING_3                                        :{BLACK}(3/6) Čekanje..
+STR_NETWORK_CONNECTING_4                                        :{BLACK}(4/6) Preuzimanje karte..
+STR_NETWORK_CONNECTING_5                                        :{BLACK}(5/6) Obrada podataka..
+STR_NETWORK_CONNECTING_6                                        :{BLACK}(6/6) Prijavljivanje..
+
+STR_NETWORK_CONNECTING_SPECIAL_1                                :{BLACK}Dohvaćanje podataka o igri..
+STR_NETWORK_CONNECTING_SPECIAL_2                                :{BLACK}Dohvaćanje podataka o tvrtki..
+############ End of leave-in-this-order
+STR_NETWORK_CONNECTING_WAITING                                  :{BLACK}{NUM} klijen{P t ta ata} {P je su je} prije Vas
+STR_NETWORK_CONNECTING_DOWNLOADING                              :{BLACK} Do sad je preuzeto {NUM} / {NUM} kbajta
+
+STR_NETWORK_DISCONNECT                                          :{BLACK}Odspoji
+
+STR_NETWORK_GIVE_MONEY_CAPTION                                  :{WHITE}Unesite količinu novca koju želite dati
+STR_NETWORK_NEED_GAME_PASSWORD_CAPTION                          :{WHITE}Poslužitelj je zaštićen. Upišite zaporku
+STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION                       :{WHITE}Tvrtka je zaštićena. Unesite zaporku
+STR_NETWORK_CLIENT_LIST                                         :{WHITE}Popis klijenata
+
+STR_NETWORK_ERR_NOTAVAILABLE                                    :{WHITE}Nisu pronađeni mrežni uređaji ili je kompajlirano bez ENABLE_NETWORK
+STR_NETWORK_ERR_NOSERVER                                        :{WHITE} Niti jedna mrežna igra nije pronađena
+STR_NETWORK_ERR_NOCONNECTION                                    :{WHITE} Poslužitelj nije odgovorio na zahtjev
+STR_NETWORK_ERR_NEWGRF_MISMATCH                                 :{WHITE} Ne mogu se spojiti zbog neslaganja u NewGRF
+STR_NETWORK_ERR_DESYNC                                          :{WHITE} Neuspješno usklađivanje mrežne igre
+STR_NETWORK_ERR_LOSTCONNECTION                                  :{WHITE} Izgubljena veza sa mrežnom igrom
+STR_NETWORK_ERR_SAVEGAMEERROR                                   :{WHITE} Nemoguće je učitati snimljenu igru
+STR_NETWORK_ERR_SERVER_START                                    :{WHITE} Nemoguće je pokrenuti poslužitelja
+STR_NETWORK_ERR_CLIENT_START                                    :{WHITE} Nije se moguće spojiti
+STR_NETWORK_ERR_TIMEOUT                                         :{WHITE} Istekla je veza #{NUM}
+STR_NETWORK_ERR_SERVER_ERROR                                    :{WHITE} Napravljena je greška u protokolu te se veza prekinula
+STR_NETWORK_ERR_WRONG_REVISION                                  :{WHITE}Revizija ovog klijenta ne slaže se sa revizijom servera
+STR_NETWORK_ERR_WRONG_PASSWORD                                  :{WHITE} Pogrešna zaporka
+STR_NETWORK_ERR_SERVER_FULL                                     :{WHITE} Poslužitelj je pun
+STR_NETWORK_ERR_SERVER_BANNED                                   :{WHITE} Zabranjen vam je pristup ovom poslužitelju
+STR_NETWORK_ERR_KICKED                                          :{WHITE} Izbačeni ste iz igre
+STR_NETWORK_ERR_CHEATER                                         :{WHITE} Na ovom poslužitelju nije dopušteno varanje
+
+STR_NETWORK_ERR_LEFT                                            :je napustio igru
+############ Leave those lines in this order!!
+STR_NETWORK_ERR_CLIENT_GENERAL                                  :opća greška
+STR_NETWORK_ERR_CLIENT_DESYNC                                   :greška u sinkronizaciji
+STR_NETWORK_ERR_CLIENT_SAVEGAME                                 :nije moguće učitati kartu
+STR_NETWORK_ERR_CLIENT_CONNECTION_LOST                          :veza je izgubljena
+STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR                           :greška u protokolu
+STR_NETWORK_ERR_CLIENT_NEWGRF_MISMATCH                          :NewGRF nepodudaranje
+STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED                           :nije ovlašten
+STR_NETWORK_ERR_CLIENT_NOT_EXPECTED                             :primljen je nepoznat paket
+STR_NETWORK_ERR_CLIENT_WRONG_REVISION                           :pogrešna revizija
+STR_NETWORK_ERR_CLIENT_NAME_IN_USE                              :ime se već koristi
+STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD                           :pogrešna zaporka
+STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH                          :pogrešan igrač-id u DoCommand
+STR_NETWORK_ERR_CLIENT_KICKED                                   :izbačen{G "" a o} od strane poslužitelja
+STR_NETWORK_ERR_CLIENT_CHEATER                                  :je pokuša{G o la lo} varati
+STR_NETWORK_ERR_CLIENT_SERVER_FULL                              :poslužitelj je pun
+############ End of leave-in-this-order
+STR_NETWORK_CLIENT_JOINED                                       :se pridruži{G o la lo} igri
+STR_NETWORK_GIVE_MONEY                                          :je da{G o la lo} novac Vašoj tvrtki ({CURRENCY})
+STR_NETWORK_GAVE_MONEY_AWAY                                     :dali ste {STRING} novac ({CURRENCY})
+STR_NETWORK_CHAT_COMPANY_CAPTION                                :[Tim]:
+STR_NETWORK_CHAT_COMPANY                                        :[Tim] {STRING}: {GRAY}{STRING}
+STR_NETWORK_CHAT_TO_COMPANY                                     :[Tim] Za {STRING}: {GRAY}{STRING}
+STR_NETWORK_CHAT_CLIENT_CAPTION                                 :[Privatno] :
+STR_NETWORK_CHAT_CLIENT                                         :[Privatno] {STRING}: {GRAY}{STRING}
+STR_NETWORK_CHAT_TO_CLIENT                                      :[Privatno] Za {STRING}: {GRAY}{STRING}
+STR_NETWORK_CHAT_ALL_CAPTION                                    :[Svima] :
+STR_NETWORK_CHAT_ALL                                            :[Svima] {STRING}: {GRAY}{STRING}
+STR_NETWORK_NAME_CHANGE                                         :je promjeni {G o la lo} ime u
+STR_NETWORK_SERVER_SHUTDOWN                                     :{WHITE} Poslužitelj je zatvorio sesiju
+STR_NETWORK_SERVER_REBOOT                                       :{WHITE} Poslužitelj se ponovno pokreće...{}Molimo pričekajte...
+
+STR_NETWORK_SERVER                                              :Poslužitelj
+STR_NETWORK_CLIENT                                              :Klijent
+STR_NETWORK_SPECTATORS                                          :Promatrači
+
+STR_NETWORK_CLIENTLIST_NONE                                     :(nitko)
+STR_NETWORK_CLIENTLIST_KICK                                     :Izbaci
+STR_NETWORK_CLIENTLIST_GIVE_MONEY                               :Daj novac
+STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL                             :Razgovaraj sa svima
+STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY                         :Razgovaraj s tvrtkom
+STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT                          :Privatna poruka
+
+
+STR_NETWORK_SEND                                                :{BLACK}Pošalji
+
+############ end network gui strings
+
+
+STR_CONFIG_PATCHES_MAP_X                                        :{LTBLUE}Veličina karte X: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAP_Y                                        :{LTBLUE}Veličina karte Y: {ORANGE}{STRING}
+
+
+##### PNG-MAP-Loader
+
+STR_PNGMAP_ERROR                                                :{WHITE}Nemoguće je učitati krajolik iz PNG-a...
+STR_PNGMAP_ERR_FILE_NOT_FOUND                                   :{WHITE}...datoteka nije pronađena.
+STR_PNGMAP_ERR_IMAGE_TYPE                                       :{WHITE}...ne mogu konvertirati tip slike. 8 ili 24-bitni PNG je potreban.
+STR_PNGMAP_ERR_MISC                                             :{WHITE}...nešto je otišlo u krivom smjeru. Oprostite. (vjerojatno je pokvarena datoteka)
+
+STR_BMPMAP_ERROR                                                :{WHITE}Ne mogu učitati krajolik iz BMP...
+STR_BMPMAP_ERR_IMAGE_TYPE                                       :{WHITE}...ne mogu pretvoriti tip slike.
+
+##id 0x0800
+STR_0800_COST                                                   :{TINYFONT}{RED}Trošak: {CURRENCY}
+STR_0801_COST                                                   :{RED}Trošak: {CURRENCY}
+STR_0802_INCOME                                                 :{TINYFONT}{GREEN}Prihod: {CURRENCY}
+STR_0803_INCOME                                                 :{GREEN}Prihod: {CURRENCY}
+STR_FEEDER_TINY                                                 :{TINYFONT}{YELLOW}Prebaci: {CURRENCY}
+STR_FEEDER                                                      :{YELLOW}Prebaci: {CURRENCY}
+STR_0805_ESTIMATED_COST                                         :{WHITE}Predviđeni trošak: {CURRENCY}
+STR_0807_ESTIMATED_INCOME                                       :{WHITE}Predviđeni prihod: {CURRENCY}
+STR_0808_CAN_T_RAISE_LAND_HERE                                  :{WHITE}Ne možeš povisiti zemlju ovdje...
+STR_0809_CAN_T_LOWER_LAND_HERE                                  :{WHITE}Ne možeš sniziti zemlju ovdje...
+STR_080A_ROCKS                                                  :Stijenje
+STR_080B_ROUGH_LAND                                             :Surova zemlja
+STR_080C_BARE_LAND                                              :Ogoljena zemlja
+STR_080D_GRASS                                                  :Trava
+STR_080E_FIELDS                                                 :Polja
+STR_080F_SNOW_COVERED_LAND                                      :Zemlja pokrivena snijegom
+STR_0810_DESERT                                                 :Pustinja
+
+##id 0x1000
+STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION                         :{WHITE}Zemlja nakošena u krivom smjeru
+STR_1001_IMPOSSIBLE_TRACK_COMBINATION                           :{WHITE}Nemoguća kombinacija tračnica
+STR_1002_EXCAVATION_WOULD_DAMAGE                                :{WHITE}Iskopavanje bi oštetilo tunel
+STR_1003_ALREADY_AT_SEA_LEVEL                                   :{WHITE}Već je na razini mora
+STR_1004_TOO_HIGH                                               :{WHITE}Previsoko
+STR_1005_NO_SUITABLE_RAILROAD_TRACK                             :{WHITE}Nije prikladno za želježnicke tračnice
+STR_1007_ALREADY_BUILT                                          :{WHITE}...već izgrađeno
+STR_1008_MUST_REMOVE_RAILROAD_TRACK                             :{WHITE}Moraš najprije ukloniti tračnice
+STR_100A_RAILROAD_CONSTRUCTION                                  :{WHITE}Izgradnja željeznice
+STR_TITLE_ELRAIL_CONSTRUCTION                                   :{WHITE}Izgradnja elektrificiranih tračnica
+STR_100B_MONORAIL_CONSTRUCTION                                  :{WHITE}Izgradnja jednotračne željeznice
+STR_100C_MAGLEV_CONSTRUCTION                                    :{WHITE}Izgradnja MagLeva
+STR_100D_SELECT_RAIL_BRIDGE                                     :{WHITE}Odaberi željeznički most
+STR_100E_CAN_T_BUILD_TRAIN_DEPOT                                :{WHITE}Ovdje nije moguće graditi željezničko spremište...
+STR_100F_CAN_T_BUILD_RAILROAD_STATION                           :{WHITE}Ovdje nije moguće izgraditi željezničku stanicu...
+STR_1010_CAN_T_BUILD_SIGNALS_HERE                               :{WHITE}Ovdje ne možeš postaviti znakove...
+STR_1011_CAN_T_BUILD_RAILROAD_TRACK                             :{WHITE}Ovdje ne možeš graditi tračnice...
+STR_1012_CAN_T_REMOVE_RAILROAD_TRACK                            :{WHITE}Odavde ne možeš ukloniti tračnice...
+STR_1013_CAN_T_REMOVE_SIGNALS_FROM                              :{WHITE}Odavde ne možeš maknuti signale...
+STR_1014_TRAIN_DEPOT_ORIENTATION                                :{WHITE}Smjer spremišta vlakova
+STR_1015_RAILROAD_CONSTRUCTION                                  :Izgradnja tračnica
+STR_TOOLB_ELRAIL_CONSTRUCTION                                   :Izgradnja električne željezničke pruge
+STR_1016_MONORAIL_CONSTRUCTION                                  :Izgradnja jednotračne željeznice
+STR_1017_MAGLEV_CONSTRUCTION                                    :Izgradnja MagLeva
+STR_1018_BUILD_RAILROAD_TRACK                                   :{BLACK}Izgradi tračnicu
+STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING                         :{BLACK}Izgradi spremište vlakova (za gradnju i servisiranje vlakova)
+STR_101A_BUILD_RAILROAD_STATION                                 :{BLACK}Izgradi željezničku stanicu
+STR_101B_BUILD_RAILROAD_SIGNALS                                 :{BLACK}Izgradi željezničke signale
+STR_101C_BUILD_RAILROAD_BRIDGE                                  :{BLACK}Izgradi željeznički most
+STR_101D_BUILD_RAILROAD_TUNNEL                                  :{BLACK}Izgradi željeznički tunel
+STR_101E_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Prebacuj izgradnju/uklanjanje za tračnice i željezničke signale
+STR_101F_BRIDGE_SELECTION_CLICK                                 :{BLACK}Odabir mosta - pritisni na most koji želiš izgraditi
+STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO                       :{BLACK}Odaberi smjer željezničkog spremišta
+STR_1021_RAILROAD_TRACK                                         :Tračnica
+STR_1023_RAILROAD_TRAIN_DEPOT                                   :Spremište vlakova
+STR_1024_AREA_IS_OWNED_BY_ANOTHER                               :{WHITE}...područje je u vlasništvu druge tvrke
+STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS                          :Željezničke tračnice s normalnim znakovima
+STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Željezničke tračnice s prethodno postavljenim znakovima
+STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Željezničke tračnice s izlaznim znakovima
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Željezničke tračnice s kombo znakovima
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Tračnice sa normalnim i pre-signalima
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Tračnice sa normalnim i izlaznim-signalima
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Tračnice sa normalnim i kombiniranim-signalima
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Tračnice sa pre- i izlaznim signalima
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Tračnice sa pre- i kombiniranim signalima
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Tračnice sa izlaznim i kombiniranim signalima
+STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Morati prvo maknuti željezničku stanicu
+
+
+
+##id 0x1800
+STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Moraš prvo ukloniti cestu
+STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Cestovni radovi u tijeku
+STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Izgradnja ceste
+STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Konstruiranje Tramvaja
+STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Izaberi cestovni most
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}...jednosmjerne ceste ne mogu imati raskršća
+STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Ovdje ne možeš graditi cestu...
+STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}Ne mogu izgraditi tramvaj ovdje...
+STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Odavde ne možeš maknuti cestu...
+STR_1805_CAN_T_REMOVE_TRAMWAY_FROM                              :{WHITE}Ne mogu maknuti tramvaj odavde...
+STR_1806_ROAD_DEPOT_ORIENTATION                                 :{WHITE}Smjer cestovnog spremišta
+STR_1806_TRAM_DEPOT_ORIENTATION                                 :{WHITE}Smjer Tramvajskog Skladišta
+STR_1807_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}Ovdje ne možeš izgraditi spremište cestovnih vozila...
+STR_1807_CAN_T_BUILD_TRAM_VEHICLE                               :{WHITE}Ne mogu izgraditi skladište tramvaja ovdje
+STR_1808_CAN_T_BUILD_BUS_STATION                                :{WHITE}Nije moguće izgraditi autobusnu stanicu...
+STR_1809_CAN_T_BUILD_TRUCK_STATION                              :{WHITE}Nije moguće izgraditi kamionski terminal...
+STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION                     :{WHITE}Ne mogu izgraditi tramvajsku stanicu za putnike...
+STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION                         :{WHITE}Nemogu izgraditi teretnu tramvajsku stanicu...
+STR_180A_ROAD_CONSTRUCTION                                      :Izgradnja ceste
+STR_180A_TRAMWAY_CONSTRUCTION                                   :Konstruiranje tramvaja
+STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Izgradi dio ceste
+STR_180B_BUILD_TRAMWAY_SECTION                                  :{BLACK}Izgradi dio tramvaja
+STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Izgradi spremište cestovnih vozila (za izgradnju i servisiranje vozila)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT                               :{BLACK}Izgradi skladište za tramvajska vozila(za izgradnju i servisiranje vozila)
+STR_180D_BUILD_BUS_STATION                                      :{BLACK}Izgradi autobusnu stanicu
+STR_180E_BUILD_TRUCK_LOADING_BAY                                :{BLACK}Izgradi pretovarni kamionski terminal
+STR_180D_BUILD_PASSENGER_TRAM_STATION                           :{BLACK}Izgradi putničku tramvajsku stanicu
+STR_180E_BUILD_CARGO_TRAM_STATION                               :{BLACK}Izgradi teretnu tramvajsku stanicu
+STR_180F_BUILD_ROAD_BRIDGE                                      :{BLACK}Izgradi cestovni most
+STR_180F_BUILD_TRAMWAY_BRIDGE                                   :{BLACK}Izgradi tramvajski most
+STR_1810_BUILD_ROAD_TUNNEL                                      :{BLACK}Izgradi cestovni tunel
+STR_1810_BUILD_TRAMWAY_TUNNEL                                   :{BLACK}Izgradi tramvajski tunel
+STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Prebacuj izgradnju/uklanjanje ceste
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS                       :{BLACK}Uključi izgradnju/brisanje za konstruiranje tramvaja
+STR_1813_SELECT_ROAD_VEHICLE_DEPOT                              :{BLACK}Izaberi smjer spremišta cestovnih vozila
+STR_1813_SELECT_TRAM_VEHICLE_DEPOT                              :{BLACK}Odaberi smjer skladišta za tramvaj
+STR_1814_ROAD                                                   :Cesta
+STR_1815_ROAD_WITH_STREETLIGHTS                                 :Cesta sa semaforima
+STR_1816_TREE_LINED_ROAD                                        :Cesta s tri trake
+STR_1817_ROAD_VEHICLE_DEPOT                                     :Spremište cestovnih vozila
+STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Prijelaz ceste preko željezničke pruge
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Ne mogu maknuti autobusnu stanicu...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Ne mogu maknuti kamionsku stanicu...
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION                         :{WHITE}Ne mogu maknuti putničku tramvajsku stanicu...
+STR_CAN_T_REMOVE_CARGO_TRAM_STATION                             :{WHITE}Ne mogu maknuti teretnu tramvajsku stanicu...
+
+##id 0x2000
+STR_2000_TOWNS                                                  :{WHITE}Gradovi
+STR_TOWN_LABEL_POP                                              :{WHITE}{TOWN} ({COMMA})
+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}{SIGN}
+STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Građevina mora prvo biti srušena
+STR_2005                                                        :{WHITE}{TOWN}
+STR_2006_POPULATION                                             :{BLACK}Stanovništvo: {ORANGE}{COMMA}{BLACK}  Kuće: {ORANGE}{COMMA}
+STR_2007_RENAME_TOWN                                            :Preimenuj grad
+STR_2008_CAN_T_RENAME_TOWN                                      :{WHITE}Grad se ne može preimenovati...
+STR_2009_LOCAL_AUTHORITY_REFUSES                                :{WHITE}{TOWN} lokalna samouprava odbija to dozvoliti
+STR_200A_TOWN_NAMES_CLICK_ON_NAME                               :{BLACK}Imena gradova - pritisni na ime kako bi centrirao pogled na zaslon
+STR_200B_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Centriraj glavni pogled na lokaciju grada
+STR_200C_CHANGE_TOWN_NAME                                       :{BLACK}Promijeni ime grada
+STR_200D_PASSENGERS_LAST_MONTH_MAX                              :{BLACK}Putnika prošli mjesec: {ORANGE}{COMMA}{BLACK}  maks: {ORANGE}{COMMA}
+STR_200E_MAIL_LAST_MONTH_MAX                                    :{BLACK}Pošte prošli mjesec: {ORANGE}{COMMA}{BLACK}  maks: {ORANGE}{COMMA}
+STR_200F_TALL_OFFICE_BLOCK                                      :Visoki uredski blok
+STR_2010_OFFICE_BLOCK                                           :Uredski blok
+STR_2011_SMALL_BLOCK_OF_FLATS                                   :Mali stambeni blok
+STR_2012_CHURCH                                                 :Crkva
+STR_2013_LARGE_OFFICE_BLOCK                                     :Veliki uredski blok
+STR_2014_TOWN_HOUSES                                            :Gradske kuće
+STR_2015_HOTEL                                                  :Hotel
+STR_2016_STATUE                                                 :Kip
+STR_2017_FOUNTAIN                                               :Fontana
+STR_2018_PARK                                                   :Park
+STR_2019_OFFICE_BLOCK                                           :Uredski blok
+STR_201A_SHOPS_AND_OFFICES                                      :Trgovine i uredi
+STR_201B_MODERN_OFFICE_BUILDING                                 :Moderne uredske zgrade
+STR_201C_WAREHOUSE                                              :Skladište
+STR_201D_OFFICE_BLOCK                                           :Uredski blok
+STR_201E_STADIUM                                                :Stadion
+STR_201F_OLD_HOUSES                                             :Stare kuće
+STR_2020_LOCAL_AUTHORITY                                        :{BLACK}Lokalna samouprava
+STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Prikaži informacije o lokalnoj samoupravi
+STR_2022_LOCAL_AUTHORITY                                        :{WHITE}Lokalna samouprava {TOWN}
+STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Ocjene prijevoznih tvrtki:
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
+STR_2025_SUBSIDIES                                              :{WHITE}Subvencije
+STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Ponuđene subvencije za pružanje usluga:
+STR_2027_FROM_TO                                                :{ORANGE}{STRING} od {STRING} do {STRING}
+STR_2028_BY                                                     :{YELLOW} (do {DATE_SHORT})
+STR_202A_NONE                                                   :{ORANGE}Ništa
+STR_202B_SERVICES_ALREADY_SUBSIDISED                            :{BLACK}Usluge subvencionirane:
+STR_202C_FROM_TO                                                :{ORANGE}{STRING} iz {STATION} prema {STATION}{YELLOW} ({COMPANY}
+STR_202D_UNTIL                                                  :{YELLOW}, do {DATE_SHORT})
+STR_202E_OFFER_OF_SUBSIDY_EXPIRED                               :{BLACK}{BIGFONT}Istekla je ponuda subvencije:{}{}Prijevoz tereta ( {STRING} ) od {STRING} do {STRING} neće više biti subvencioniran.
+STR_202F_SUBSIDY_WITHDRAWN_SERVICE                              :{BLACK}{BIGFONT}Povučena subvencija:{}{}Prijevoz tereta ( {STRING} ) od {STATION} do {STATION} nije više subvencioniran.
+STR_2030_SERVICE_SUBSIDY_OFFERED                                :{BLACK}{BIGFONT}Ponuđena je subvencija:{}{}Prvi koji preveze teret ({STRING}) od {STRING} do {STRING} dobivat će subvenciju od lokalne samouprave!
+STR_2031_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Subvencija je dodjeljena tvrtki {COMPANY}!{}{}Prijevoz tereta ({STRING}) od {STATION} do {STATION} plaćat će se 50% više slijedećih godinu dana!
+STR_2032_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Subvencija je dodjeljena tvrtki {COMPANY}!{}{}Prijevoz tereta ({STRING}) od {STATION} do {STATION} plaćat će se dvostruko slijedećih godinu dana!
+STR_2033_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Subvencija je dodjeljena tvrtki {COMPANY}!{}{}Prijevoz tereta ({STRING}) od {STATION} do {STATION} plaćat će se trostruko slijedećih godinu dana!
+STR_2034_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Subvencija je dodjeljena tvrtki {COMPANY}!{}{}Prijevoz tereta ({STRING}) od {STATION} do {STATION} plaćat će se četverostruko slijedećih godinu dana!
+STR_2035_LOCAL_AUTHORITY_REFUSES                                :{WHITE}{TOWN} lokalne vlasti odbijaju dozvoliti izgradnju još jedne zračne luke u ovom gradu
+STR_2036_COTTAGES                                               :Kolibe
+STR_2037_HOUSES                                                 :Kuće
+STR_2038_FLATS                                                  :Stanovi
+STR_2039_TALL_OFFICE_BLOCK                                      :Visoki uredski blok
+STR_203A_SHOPS_AND_OFFICES                                      :Trgovine i uredi
+STR_203B_SHOPS_AND_OFFICES                                      :Trgovine i uredi
+STR_203C_THEATER                                                :Kazalište
+STR_203D_STADIUM                                                :Stadion
+STR_203E_OFFICES                                                :Uredi
+STR_203F_HOUSES                                                 :Kuće
+STR_2040_CINEMA                                                 :Kino
+STR_2041_SHOPPING_MALL                                          :Trgovački centar
+STR_2042_DO_IT                                                  :{BLACK}Učini to
+STR_2043_LIST_OF_THINGS_TO_DO_AT                                :{BLACK}Popis stvari koje treba učiniti u ovom gradu - pritisni za dodatne informacije
+STR_2044_CARRY_OUT_THE_HIGHLIGHTED                              :{BLACK}Izvrši akcije označene na gornjem popisu
+STR_2045_ACTIONS_AVAILABLE                                      :{BLACK}Dostupne akcije:
+STR_2046_SMALL_ADVERTISING_CAMPAIGN                             :Mala oglasna kampanja
+STR_2047_MEDIUM_ADVERTISING_CAMPAIGN                            :Srednja oglasna kampanja
+STR_2048_LARGE_ADVERTISING_CAMPAIGN                             :Velika oglasna kampanja
+STR_2049_FUND_LOCAL_ROAD_RECONSTRUCTION                         :Financiraj popravljanje lokalne prometnice
+STR_204A_BUILD_STATUE_OF_COMPANY                                :Izgradi kip vlasnika tvrke
+STR_204B_FUND_NEW_BUILDINGS                                     :Financiraj nove građevine
+STR_204C_BUY_EXCLUSIVE_TRANSPORT                                :Kupi ekskluzivna prava prijevozna
+STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY                              :Podmiti lokalnu samoupravu
+STR_204D_INITIATE_A_SMALL_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Iniciraj malu oglasnu kampanju, kako bi privukao više putnika i tereta za svoje prijevozne usluge.{}  Trošak: {CURRENCY}
+STR_204E_INITIATE_A_MEDIUM_LOCAL                                :{WHITE}{STRING}{}{YELLOW} Iniciraj srednju oglasnu kampanju, kako bi privukao više putnika i tereta za svoje prijevozne usluge.{} Trošak: {CURRENCY}
+STR_204F_INITIATE_A_LARGE_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Iniciraj veliku oglasnu kampanju, kako bi privukao više putnika i tereta za svoje prijevozne usluge.{} Trošak: {CURRENCY}
+STR_2050_FUND_THE_RECONSTRUCTION                                :{WHITE}{STRING}{}{YELLOW} Financiraj popravak gradske mreže prometnica. Uzrokuje značajne poremećaje u cestovnom prometu do 6 mjeseci.{}  Trošak: {CURRENCY}
+STR_2051_BUILD_A_STATUE_IN_HONOR                                :{WHITE}{STRING}{}{YELLOW} Izgradi kip u čast svoje tvrke.{} Trošak: {CURRENCY}
+STR_2052_FUND_THE_CONSTRUCTION_OF                               :{WHITE}{STRING}{}{YELLOW} Financiraj izgradnju novih poslovnih prostora u gradu.{}  Trošak: {CURRENCY}
+STR_2053_BUY_1_YEAR_S_EXCLUSIVE                                 :{WHITE}{STRING}{}{YELLOW} Kupi jednogodišnje ekskluzivno pravo prijevoza u gradu. Gradska vlast će dopustiti putnicima i teretu da koriste samo stanice tvoje tvrtke.{} Trošak: {CURRENCY}
+STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY_DESC                         :{WHITE}{STRING}{}{YELLOW}Podmiti lokalnu vlast zbog povećanja rejtinga, riskirajući ozbiljne kazne ako vas uhvate{} Trošak: {CURRENCY}
+STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING                       :{BIGFONT}{BLACK}{TOWN} zahvatile prometne gužve!{}{}Program popravka cesta koji financira tvrtka  {COMPANY} slijedećih će 6 mjeseci zadavati glavobolje motociskistima!
+STR_2056                                                        :{TINYFONT}{WHITE}{TOWN}
+STR_2057                                                        :{ORANGE}{TOWN}{BLACK} ({COMMA})
+STR_2058_UNDER_CONSTRUCTION                                     :{STRING} (u izgradnji)
+STR_2059_IGLOO                                                  :Iglu
+STR_205A_TEPEES                                                 :Indijanski šator
+STR_205B_TEAPOT_HOUSE                                           :Čajnik za stanovanje
+STR_205C_PIGGY_BANK                                             :Kasica-Prasica
+
+STR_INDUSTRY                                                    :{INDUSTRY}
+STR_TOWN                                                        :{TOWN}
+STR_INDUSTRY_FORMAT                                             :{TOWN} {STRING}
+STR_STATION                                                     :{STATION}
+
+##id 0x2800
+STR_LANDSCAPING                                                 :Uređivanje krajolika
+STR_2800_PLANT_TREES                                            :Posadi drveće
+STR_2801_PLACE_SIGN                                             :Postavi znak
+STR_2802_TREES                                                  :{WHITE}Drveće
+STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...ovdje već postoji drvo
+STR_2804_SITE_UNSUITABLE                                        :{WHITE}...neprikladno mjesto
+STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Ovdje ne možeš posaditi drvo...
+STR_2806                                                        :{WHITE}{SIGN}
+STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...previše znakova
+STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Ovdje ne možeš postaviti znak...
+STR_280A_SIGN                                                   :Znak
+STR_280B_EDIT_SIGN_TEXT                                         :{WHITE}Izmijeni tekst znaka
+STR_280C_CAN_T_CHANGE_SIGN_NAME                                 :{WHITE}Ne možeš promijeniti ime znaka...
+STR_280D_SELECT_TREE_TYPE_TO_PLANT                              :{BLACK}Izaberi vrstu drveta za sadnju
+STR_280E_TREES                                                  :Drveće
+STR_280F_RAINFOREST                                             :Kišna šuma
+STR_2810_CACTUS_PLANTS                                          :Kaktusi
+
+##id 0x3000
+STR_3000_RAIL_STATION_SELECTION                                 :{WHITE}Odabir željezničke stanice
+STR_3001_AIRPORT_SELECTION                                      :{WHITE}Odabir zračne luke
+STR_3002_ORIENTATION                                            :{BLACK}Smjer
+STR_3003_NUMBER_OF_TRACKS                                       :{BLACK}Broj tračnica
+STR_3004_PLATFORM_LENGTH                                        :{BLACK}Dužina platforme
+STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD                          :{WHITE}Preblizu drugoj željezničkoj stanici
+STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING                         :{WHITE}Spaja više od jedne postojeće stanice/terminala
+STR_3007_TOO_MANY_STATIONS_LOADING                              :{WHITE}U ovom gradu ima previše stanica/terminala
+STR_3008_TOO_MANY_STATIONS_LOADING                              :{WHITE}Previše stanica/terminala
+STR_3008A_TOO_MANY_BUS_STOPS                                    :{WHITE}Previše autobusnih stanica
+STR_3008B_TOO_MANY_TRUCK_STOPS                                  :{WHITE}Previše kamionskih stanica
+STR_3009_TOO_CLOSE_TO_ANOTHER_STATION                           :{WHITE}Preblizu drugoj stanici/terminalu
+STR_300A_0                                                      :{WHITE}{STATION} {STATIONFEATURES}
+STR_300B_MUST_DEMOLISH_RAILROAD                                 :{WHITE}Prvo moraš uništiti željezničku stanicu
+STR_300D_TOO_CLOSE_TO_ANOTHER_AIRPORT                           :{WHITE}Preblizu drugoj zračnoj luci
+STR_300E_MUST_DEMOLISH_AIRPORT_FIRST                            :{WHITE}Moraš uništiti zračnu luku prvo
+
+STR_3030_RENAME_STATION_LOADING                                 :Preimenuj stanicu/terminal
+STR_3031_CAN_T_RENAME_STATION                                   :{WHITE}Ne možeš preimenovati stanicu...
+STR_3032_RATINGS                                                :{BLACK}Ocjene
+STR_3033_ACCEPTS                                                :{BLACK}Prihvaća
+STR_3034_LOCAL_RATING_OF_TRANSPORT                              :{BLACK}Lokalna ocjena usluge prijevoza:
+
+############ range for rating starts
+STR_3035_APPALLING                                              :Užasno
+STR_3036_VERY_POOR                                              :Vrlo loše
+STR_3037_POOR                                                   :Loše
+STR_3038_MEDIOCRE                                               :Osrednje
+STR_3039_GOOD                                                   :Dobro
+STR_303A_VERY_GOOD                                              :Vrlo dobro
+STR_303B_EXCELLENT                                              :Izvrsno
+STR_303C_OUTSTANDING                                            :Izvanredno
+############ range for rating ends
+
+STR_303D                                                        :{WHITE}{STRING}: {YELLOW}{STRING} ({COMMA}%)
+STR_303E_NO_LONGER_ACCEPTS                                      :{WHITE}{STATION} više ne prihvaća {STRING}
+STR_303F_NO_LONGER_ACCEPTS_OR                                   :{WHITE}{STATION} više ne prihvaća {STRING} or {STRING}
+STR_3040_NOW_ACCEPTS                                            :{WHITE}{STATION} sad prihvaća {STRING}
+STR_3041_NOW_ACCEPTS_AND                                        :{WHITE}{STATION} od sada prihvaća {STRING} i {STRING}
+STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Smjer autobusne stanice
+STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Smjer kamionskog terminala
+STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Prvo moraš uništiti autobusnu stanicu
+STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Prvo moraš uništiti kamionski terminal
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION                   :{WHITE}Morate prvo maknuti putničku tramvajsku stanicu
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION                       :{WHITE}Morate prvo maknuti teretnu tramvajsku stanicu
+STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} Stanic{P a e a}
+STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
+STR_304A_NONE                                                   :{YELLOW}- Ništa -
+STR_304B_SITE_UNSUITABLE                                        :{WHITE}...neprikladno mjesto
+STR_304C_TOO_CLOSE_TO_ANOTHER_DOCK                              :{WHITE}Preblizu drugom pristaništu
+STR_304D_MUST_DEMOLISH_DOCK_FIRST                               :{WHITE}Prvo moraš srušiti pristanište
+STR_304E_SELECT_RAILROAD_STATION                                :{BLACK}Izaberi smjer željezničke stanice
+STR_304F_SELECT_NUMBER_OF_PLATFORMS                             :{BLACK}Izaberi broj perona na željezničkoj stanici
+STR_3050_SELECT_LENGTH_OF_RAILROAD                              :{BLACK}Izaberi dužinu željezničke stanice
+STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Izaberi smjer autobusne stanice
+STR_3052_SELECT_TRUCK_LOADING_BAY                               :{BLACK}Izaberi smjer kamionskog terminala
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION              :{BLACK}Odaberite smjer putničke tramvajske stanice
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION                  :{BLACK}Odaberite smjer teretne tramvajske stanice
+STR_3053_CENTER_MAIN_VIEW_ON_STATION                            :{BLACK}Centriraj glavni pogled na lokaciju stanice
+STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}Pokaži ocjene stanice
+STR_3055_CHANGE_NAME_OF_STATION                                 :{BLACK}Promijeni ime stanice
+STR_3056_SHOW_LIST_OF_ACCEPTED_CARGO                            :{BLACK}Prikaži popis prihvaćenog tereta
+STR_3057_STATION_NAMES_CLICK_ON                                 :{BLACK}Imena stanica - pritisni ime da bi centrirao glavni pogled na stanicu
+STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT                            :{BLACK}Izaberi veličinu/tip zračne luke
+STR_305C_0                                                      :{STATION} {STATIONFEATURES}
+STR_STATION_SIGN_TINY                                           :{TINYFONT}{STATION}
+STR_305E_RAILROAD_STATION                                       :Željeznička stanica
+STR_305F_AIRCRAFT_HANGAR                                        :Zrakoplovni hangar
+STR_3060_AIRPORT                                                :Zračna luka
+STR_3061_TRUCK_LOADING_AREA                                     :Ukrcajno područje
+STR_3062_BUS_STATION                                            :Autobusna stanica
+STR_3063_SHIP_DOCK                                              :Brodsko pristanište
+STR_3064_HIGHLIGHT_COVERAGE_AREA                                :{BLACK}Označi područje koje pokriva željeno mjesto
+STR_3065_DON_T_HIGHLIGHT_COVERAGE                               :{BLACK}Nemoj označiti područje koje pokriva željeno mjesto
+STR_3066_COVERAGE_AREA_HIGHLIGHT                                :{BLACK}Označavanje područja pokrivanja
+STR_3068_DOCK                                                   :{WHITE}Pristanište
+STR_3069_BUOY                                                   :Plutača
+STR_306A_BUOY_IN_THE_WAY                                        :{WHITE}...plutača na putu
+STR_306C_STATION_TOO_SPREAD_OUT                                 :{WHITE}...stanica previše proširena
+STR_306D_NONUNIFORM_STATIONS_DISALLOWED                         :{WHITE}...neujednačene stanice onemogućene
+STR_USE_CTRL_TO_SELECT_MORE                                     :{BLACK}Drži CTRL kako bi izabrao više od jednog itema
+
+STR_UNDEFINED                                                   :(neodređen znakovni niz)
+STR_STAT_CLASS_DFLT                                             :Pretpostavljena stanica
+STR_STAT_CLASS_WAYP                                             :Čvorišta
+
+##id 0x3800
+STR_3800_SHIP_DEPOT_ORIENTATION                                 :{WHITE}Smjer brodskog spremišta
+STR_3801_MUST_BE_BUILT_ON_WATER                                 :{WHITE}...mora biti izgrađen na vodi
+STR_3802_CAN_T_BUILD_SHIP_DEPOT                                 :{WHITE}Ovdje ne možeš graditi brodsko spremište...
+STR_3803_SELECT_SHIP_DEPOT_ORIENTATION                          :{BLACK}Izaberi smjer brodskog spremišta
+STR_3804_WATER                                                  :Voda
+STR_3805_COAST_OR_RIVERBANK                                     :Obala ili riječni nasip
+STR_3806_SHIP_DEPOT                                             :Brodsko spremište
+STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...Ne možeš graditi na vodi
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Morate prvo maknuti kanal
+
+##id 0x4000
+STR_4000_SAVE_GAME                                              :{WHITE}Spremi igru
+STR_4001_LOAD_GAME                                              :{WHITE}Učitaj igru
+STR_4002_SAVE                                                   :{BLACK}Spremi
+STR_4003_DELETE                                                 :{BLACK}Obriši
+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{}{STRING}
+STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Ne mogu obrisati datoteku
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Učitavanje igre nije uspjelo{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Interna greška: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Pokvarena spremljena igra - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Igra je spremljena sa novijom verzijom
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :Ne mogu pročitati datoteku
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :Ne mogu pisati u datoteku
+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
+STR_400D_SAVE_THE_CURRENT_GAME_USING                            :{BLACK}Spremi ovu igru, koristeći odabrano ime
+STR_400E_SELECT_NEW_GAME_TYPE                                   :{WHITE}Odaberi vrstu nove igre
+STR_400F_SELECT_SCENARIO_GREEN_PRE                              :{BLACK}Odaberi scenarij (zeleno), namještenu igru (plavo), ili nasumičnu novu igru
+STR_4010_GENERATE_RANDOM_NEW_GAME                               :Izradi nasumičnu novu igru
+STR_4011_LOAD_HEIGHTMAP                                         :{WHITE}Učitaj visinsku kartu
+
+##id 0x4800
+STR_4800_IN_THE_WAY                                             :{WHITE}{STRING} na putu
+STR_4801                                                        :{WHITE}{INDUSTRY}
+STR_4802_COAL_MINE                                              :Rudnik ugljena
+STR_4803_POWER_STATION                                          :Elektrana
+STR_4804_SAWMILL                                                :Pilana
+STR_4805_FOREST                                                 :Šuma
+STR_4806_OIL_REFINERY                                           :Naftna rafinerija
+STR_4807_OIL_RIG                                                :Naftna bušotina
+STR_4808_FACTORY                                                :Tvornica
+STR_4809_PRINTING_WORKS                                         :Tiskara
+STR_480A_STEEL_MILL                                             :Čeličana
+STR_480B_FARM                                                   :Farma
+STR_480C_COPPER_ORE_MINE                                        :Rudnik bakra
+STR_480D_OIL_WELLS                                              :Naftna polja
+STR_480E_BANK                                                   :Banka
+STR_480F_FOOD_PROCESSING_PLANT                                  :Tvornica hrane
+STR_4810_PAPER_MILL                                             :Tvornica papira
+STR_4811_GOLD_MINE                                              :Rudnik zlata
+STR_4812_BANK                                                   :Banka
+STR_4813_DIAMOND_MINE                                           :Rudnik dijamanata
+STR_4814_IRON_ORE_MINE                                          :Rudnik željeza
+STR_4815_FRUIT_PLANTATION                                       :Plantaža voća
+STR_4816_RUBBER_PLANTATION                                      :Plantaža gume
+STR_4817_WATER_SUPPLY                                           :Izvor vode
+STR_4818_WATER_TOWER                                            :Vodotoranj
+STR_4819_FACTORY                                                :Tvornica
+STR_481A_FARM                                                   :Farma
+STR_481B_LUMBER_MILL                                            :Pilana
+STR_481C_COTTON_CANDY_FOREST                                    :Šuma šećerne vune
+STR_481D_CANDY_FACTORY                                          :Tvornica slatkiša
+STR_481E_BATTERY_FARM                                           :Tvornica baterija
+STR_481F_COLA_WELLS                                             :Izvori Cole
+STR_4820_TOY_SHOP                                               :Trgovina igračkama
+STR_4821_TOY_FACTORY                                            :Tvornica igračaka
+STR_4822_PLASTIC_FOUNTAINS                                      :Izvorni plastike
+STR_4823_FIZZY_DRINK_FACTORY                                    :Tvornica gaziranih pića
+STR_4824_BUBBLE_GENERATOR                                       :Generator balona
+STR_4825_TOFFEE_QUARRY                                          :Iskop mliječne karamele
+STR_4826_SUGAR_MINE                                             :Rudnik šećera
+
+############ range for requires starts
+STR_4827_REQUIRES                                               :{BLACK}Treba: {YELLOW}{STRING}
+STR_4828_REQUIRES                                               :{BLACK}Treba: {YELLOW}{STRING}, {STRING}
+STR_4829_REQUIRES                                               :{BLACK}Treba: {YELLOW}{STRING}, {STRING}, {STRING}
+############ range for requires ends
+
+STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Prošlomjesečna proizvodnja:
+STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% prevezeno)
+STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Centriraj glavni pogled na položaj industrije
+STR_482D_NEW_UNDER_CONSTRUCTION                                 :{BLACK}{BIGFONT}Započela je izgradnja nove industrije ( {STRING} ) u blizini grada {TOWN}!
+STR_482E_NEW_BEING_PLANTED_NEAR                                 :{BLACK}{BIGFONT}Nova {STRING} trenutno se sadi blizu grada {TOWN}!
+STR_482F_COST                                                   :{BLACK}Trošak: {YELLOW}{CURRENCY}
+STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY                          :{WHITE}Ovdje ne možeš izgraditi ovu vrstu industrije ovdje...
+STR_4831_FOREST_CAN_ONLY_BE_PLANTED                             :{WHITE}...šume mogu jedino biti posađene iznad linije snijega
+STR_4832_ANNOUNCES_IMMINENT_CLOSURE                             :{BLACK}{BIGFONT}{INDUSTRY} objavljuje skoro zatvaranje!
+STR_4833_SUPPLY_PROBLEMS_CAUSE_TO                               :{BLACK}{BIGFONT}Zbog problema u nabavi {INDUSTRY} se uskoro zatvara!
+STR_4834_LACK_OF_NEARBY_TREES_CAUSES                            :{BLACK}{BIGFONT}Manjak drveća u glavni je razlog što se {INDUSTRY} se uskoro zatvara!
+STR_4835_INCREASES_PRODUCTION                                   :{BLACK}{BIGFONT}{INDUSTRY} povećava proizvodnju!
+STR_4836_NEW_COAL_SEAM_FOUND_AT                                 :{BLACK}{BIGFONT}{INDUSTRY} očekuje udvostručenje proizvodnje!{}Pronađena je nova pukotina ugljena!
+STR_4837_NEW_OIL_RESERVES_FOUND                                 :{BLACK}{BIGFONT}{INDUSTRY} očekuje udvostručenje proizvodnje!{}Pronađene su nove rezerve nafte!
+STR_4838_IMPROVED_FARMING_METHODS                               :{BLACK}{BIGFONT}{INDUSTRY} poboljšava metode uzgoja, očekuje se udvostručenje proizvodnje!
+STR_4839_PRODUCTION_DOWN_BY_50                                  :{BLACK}{BIGFONT}{INDUSTRY} smanjuje proizvodnju za 50%
+STR_483A_INSECT_INFESTATION_CAUSES                              :{BLACK}{BIGFONT}{INDUSTRY} pod najezdom kukaca! Havarija!{}Proizvodnja je pala za 50%
+STR_483B_CAN_ONLY_BE_POSITIONED                                 :{WHITE}...može se postaviti samo blizu rubova karte
+STR_INDUSTRY_PROD_GOUP                                          :{BLACK}{BIGFONT}{STRING} prozivodnja u {INDUSTRY} povećana je {COMMA}%!
+STR_INDUSTRY_PROD_GODOWN                                        :{BLACK}{BIGFONT}{STRING} prozivodnja u {INDUSTRY} smanjena je {COMMA}%!
+
+##id 0x5000
+STR_5000_TRAIN_IN_TUNNEL                                        :{WHITE}Vlak u tunelu
+STR_5001_ROAD_VEHICLE_IN_TUNNEL                                 :{WHITE}Cestovno vozilo u tunelu
+STR_5003_ANOTHER_TUNNEL_IN_THE_WAY                              :{WHITE}Smeta drugi tunel
+STR_5005_UNABLE_TO_EXCAVATE_LAND                                :{WHITE}Ne moguće iskopoati zemlju na drugoj strani tunela
+STR_5006_MUST_DEMOLISH_TUNNEL_FIRST                             :{WHITE}Moraš prvo srušiti tunel
+STR_5007_MUST_DEMOLISH_BRIDGE_FIRST                             :{WHITE}Moraš prvo srušiti most
+STR_5008_CANNOT_START_AND_END_ON                                :{WHITE}Početak i kraj ne mogu biti na istom mjestu
+STR_5009_LEVEL_LAND_OR_WATER_REQUIRED                           :{WHITE}Ispod mosta mora biti ravna zemlja ili voda
+STR_500A_START_AND_END_MUST_BE_IN                               :{WHITE}Početak i kraj moraju biti u istoj liniji
+STR_500B_SITE_UNSUITABLE_FOR_TUNNEL                             :{WHITE}Neprikladan teren za ulaz u tunel
+STR_500D                                                        :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY}
+STR_500E_SUSPENSION_STEEL                                       :Viseći, čelični
+STR_500F_GIRDER_STEEL                                           :Noseći, čelični
+STR_5010_CANTILEVER_STEEL                                       :Konzolni, čelični
+STR_5011_SUSPENSION_CONCRETE                                    :Viseći, betonski
+STR_5012_WOODEN                                                 :Drveni
+STR_5013_CONCRETE                                               :Betonski
+STR_5014_TUBULAR_STEEL                                          :Cijevni, čelični
+STR_BRIDGE_TUBULAR_SILICON                                      :Cjevni, silikonski
+STR_5015_CAN_T_BUILD_BRIDGE_HERE                                :{WHITE}Ovdje se ne može graditi most...
+STR_5016_CAN_T_BUILD_TUNNEL_HERE                                :{WHITE}Ovdje se ne može graditi tunel...
+STR_5017_RAILROAD_TUNNEL                                        :Željeznički tunel
+STR_5018_ROAD_TUNNEL                                            :Cestovni tunel
+STR_501B_STEEL_SUSPENSION_RAIL_BRIDGE                           :Čelični viseći željeznički most
+STR_501C_STEEL_GIRDER_RAIL_BRIDGE                               :Čelični noseći željeznički most
+STR_501D_STEEL_CANTILEVER_RAIL_BRIDGE                           :Čelični konzolni željeznički most
+STR_501E_REINFORCED_CONCRETE_SUSPENSION                         :Ojačani betonski viseći željeznički most
+STR_501F_WOODEN_RAIL_BRIDGE                                     :Drveni željeznički most
+STR_5020_CONCRETE_RAIL_BRIDGE                                   :Betonski željeznički most
+STR_5021_STEEL_SUSPENSION_ROAD_BRIDGE                           :Čelični viseći cestovni most
+STR_5022_STEEL_GIRDER_ROAD_BRIDGE                               :Čelični noseći cestovni most
+STR_5023_STEEL_CANTILEVER_ROAD_BRIDGE                           :Čelični konzolni cestovni most
+STR_5024_REINFORCED_CONCRETE_SUSPENSION                         :Ojačani betonski viseći cestovni most
+STR_5025_WOODEN_ROAD_BRIDGE                                     :Drveni cestovni most
+STR_5026_CONCRETE_ROAD_BRIDGE                                   :Betonski cestovni most
+STR_5027_TUBULAR_RAIL_BRIDGE                                    :Cijevni željeznički most
+STR_5028_TUBULAR_ROAD_BRIDGE                                    :Cijevni cestovni most
+
+##id 0x5800
+STR_5800_OBJECT_IN_THE_WAY                                      :{WHITE}Smeta objekt
+STR_5801_TRANSMITTER                                            :Odašiljač
+STR_5802_LIGHTHOUSE                                             :Svjetionik
+STR_5803_COMPANY_HEADQUARTERS                                   :Sjedište tvrke
+STR_5804_COMPANY_HEADQUARTERS_IN                                :{WHITE}...smeta sjedište tvrke
+STR_5805_COMPANY_OWNED_LAND                                     :Zemlja u posjedu tvrke
+STR_5806_CAN_T_PURCHASE_THIS_LAND                               :{WHITE}Ova zemlja ne može se kupiti...
+STR_5807_YOU_ALREADY_OWN_IT                                     :{WHITE}...već je u tvom vlasništvu!
+
+
+############ WARNING, using range 0x6000 for strings that are stored in the savegame
+############ These strings may never get a new id, or savegames will break!
+##id 0x6000
+STR_SV_EMPTY                                                    :
+STR_SV_UNNAMED                                                  :Neimenovan
+STR_SV_TRAIN_NAME                                               :Vlak {COMMA}
+STR_SV_ROADVEH_NAME                                             :Cestovno vozilo {COMMA}
+STR_SV_SHIP_NAME                                                :Brod {COMMA}
+STR_SV_AIRCRAFT_NAME                                            :Zrakoplov {COMMA}
+
+STR_SV_STNAME                                                   :{STRING}
+STR_SV_STNAME_NORTH                                             :{STRING} Sjever
+STR_SV_STNAME_SOUTH                                             :{STRING} Jug
+STR_SV_STNAME_EAST                                              :{STRING} Istok
+STR_SV_STNAME_WEST                                              :{STRING} Zapad
+STR_SV_STNAME_CENTRAL                                           :{STRING} Centrala
+STR_SV_STNAME_TRANSFER                                          :{STRING} Transfer
+STR_SV_STNAME_HALT                                              :{STRING} Zaustavi
+STR_SV_STNAME_VALLEY                                            :{STRING} Dolina
+STR_SV_STNAME_HEIGHTS                                           :{STRING} Visine
+STR_SV_STNAME_WOODS                                             :{STRING} Šume
+STR_SV_STNAME_LAKESIDE                                          :{STRING} Jezero
+STR_SV_STNAME_EXCHANGE                                          :{STRING} Burza
+STR_SV_STNAME_AIRPORT                                           :{STRING} Zračna luka
+STR_SV_STNAME_OILFIELD                                          :{STRING} Naftno polje
+STR_SV_STNAME_MINES                                             :{STRING} Rudnici
+STR_SV_STNAME_DOCKS                                             :{STRING} Pristaništa
+STR_SV_STNAME_BUOY_1                                            :{STRING} Plutača 1
+STR_SV_STNAME_BUOY_2                                            :{STRING} Plutača 2
+STR_SV_STNAME_BUOY_3                                            :{STRING} Plutača 3
+STR_SV_STNAME_BUOY_4                                            :{STRING} Plutača 4
+STR_SV_STNAME_BUOY_5                                            :{STRING} Plutača 5
+STR_SV_STNAME_BUOY_6                                            :{STRING} Plutača 6
+STR_SV_STNAME_BUOY_7                                            :{STRING} Plutača 7
+STR_SV_STNAME_BUOY_8                                            :{STRING} Plutača 8
+STR_SV_STNAME_BUOY_9                                            :{STRING} Plutača 9
+STR_SV_STNAME_ANNEXE                                            :{STRING} Aneks
+STR_SV_STNAME_SIDINGS                                           :{STRING} Krak
+STR_SV_STNAME_BRANCH                                            :{STRING} Ogranak
+STR_SV_STNAME_UPPER                                             :Gornji {STRING}
+STR_SV_STNAME_LOWER                                             :Donji {STRING}
+STR_SV_STNAME_HELIPORT                                          :{STRING} Heliodrom
+STR_SV_STNAME_FOREST                                            :{STRING} Šuma
+STR_SV_STNAME_FALLBACK                                          :{STRING}Stanica #{NUM}
+
+############ end of savegame specific region!
+
+##id 0x6800
+STR_6800_DIFFICULTY_LEVEL                                       :{WHITE}Težina igre
+STR_OPTIONS_SAVE_CHANGES                                        :{BLACK}Spremi
+
+############ range for difficulty levels starts
+STR_6801_EASY                                                   :{BLACK}Lagano
+STR_6802_MEDIUM                                                 :{BLACK}Umjereno
+STR_6803_HARD                                                   :{BLACK}Teško
+STR_6804_CUSTOM                                                 :{BLACK}Proizvoljna igra
+############ range for difficulty levels ends
+
+############ range for difficulty settings starts
+STR_6805_MAXIMUM_NO_COMPETITORS                                 :{LTBLUE}Maksimalan broj natjecatelja: {ORANGE}{COMMA}
+STR_6806_COMPETITOR_START_TIME                                  :{LTBLUE}Vrijeme početka igre natjecatelja: {ORANGE}{STRING}
+STR_6807_NO_OF_TOWNS                                            :{LTBLUE}Broj gradova: {ORANGE}{STRING}
+STR_6808_NO_OF_INDUSTRIES                                       :{LTBLUE}Broj gospodarstava: {ORANGE}{STRING}
+STR_6809_MAXIMUM_INITIAL_LOAN_000                               :{LTBLUE}Maksimalni početni kredit: {ORANGE}{CURRENCY}
+STR_680A_INITIAL_INTEREST_RATE                                  :{LTBLUE}Početna kamata kredita: {ORANGE}{COMMA}%
+STR_680B_VEHICLE_RUNNING_COSTS                                  :{LTBLUE}Troškovi uporabe vozila: {ORANGE}{STRING}
+STR_680C_CONSTRUCTION_SPEED_OF_COMPETITOR                       :{LTBLUE}Brzina razvoja natjecatelja: {ORANGE}{STRING}
+STR_680D_INTELLIGENCE_OF_COMPETITORS                            :{LTBLUE}Inteligencija natjecatelja: {ORANGE}{STRING}
+STR_680E_VEHICLE_BREAKDOWNS                                     :{LTBLUE}Kvarovi na vozilima: {ORANGE}{STRING}
+STR_680F_SUBSIDY_MULTIPLIER                                     :{LTBLUE}Subvencijski množitelj: {ORANGE}{STRING}
+STR_6810_COST_OF_CONSTRUCTION                                   :{LTBLUE}Troškovi građenja: {ORANGE}{STRING}
+STR_6811_TERRAIN_TYPE                                           :{LTBLUE}Vrsta terena: {ORANGE}{STRING}
+STR_6812_QUANTITY_OF_SEA_LAKES                                  :{LTBLUE}Količina mora/jezera: {ORANGE}{STRING}
+STR_6813_ECONOMY                                                :{LTBLUE}Ekonomija: {ORANGE}{STRING}
+STR_6814_TRAIN_REVERSING                                        :{LTBLUE}Promjena smjera vlakova: {ORANGE}{STRING}
+STR_6815_DISASTERS                                              :{LTBLUE}Prirodne katastrofe: {ORANGE}{STRING}
+STR_16816_CITY_APPROVAL                                         :{LTBLUE}Stav gradsko vijeća prema restrukturiranju područja: {ORANGE}{STRING}
+############ range for difficulty settings ends
+
+STR_26816_NONE                                                  :Ništa
+STR_NUM_VERY_LOW                                                :Vrlo nisko
+STR_6816_LOW                                                    :Nisko
+STR_6817_NORMAL                                                 :Normalno
+STR_6818_HIGH                                                   :Visoko
+STR_6819                                                        :{BLACK}{SMALLLEFTARROW}
+STR_681A                                                        :{BLACK}{SMALLRIGHTARROW}
+STR_681B_VERY_SLOW                                              :Vrlo sporo
+STR_681C_SLOW                                                   :Sporo
+STR_681D_MEDIUM                                                 :Umjereno
+STR_681E_FAST                                                   :Brzo
+STR_681F_VERY_FAST                                              :Vrlo brzo
+STR_VERY_LOW                                                    :Vrlo nisko
+STR_6820_LOW                                                    :Nisko
+STR_6821_MEDIUM                                                 :Umjereno
+STR_6822_HIGH                                                   :Visoko
+STR_6823_NONE                                                   :Ništa
+STR_6824_REDUCED                                                :Smanjeno
+STR_6825_NORMAL                                                 :Normalno
+STR_6826_X1_5                                                   :x1.5
+STR_6827_X2                                                     :x2
+STR_6828_X3                                                     :x3
+STR_6829_X4                                                     :x4
+STR_682A_VERY_FLAT                                              :Vrlo ravno
+STR_682B_FLAT                                                   :Ravno
+STR_682C_HILLY                                                  :Brežuljkasto
+STR_682D_MOUNTAINOUS                                            :Brdovito
+STR_682E_STEADY                                                 :Stabilno
+STR_682F_FLUCTUATING                                            :Promjenjivo
+STR_6830_IMMEDIATE                                              :Odmah
+STR_6831_3_MONTHS_AFTER_PLAYER                                  :3 mjeseca nakon igrača
+STR_6832_6_MONTHS_AFTER_PLAYER                                  :6 mjeseci nakon igrača
+STR_6833_9_MONTHS_AFTER_PLAYER                                  :9 mjeseci nakon igrača
+STR_6834_AT_END_OF_LINE_AND_AT_STATIONS                         :Na kraju pruge, i na stanici
+STR_6835_AT_END_OF_LINE_ONLY                                    :Isključivo na kraju pruge
+STR_6836_OFF                                                    :Isključeno
+STR_6837_ON                                                     :Uključeno
+STR_6838_SHOW_HI_SCORE_CHART                                    :{BLACK}Prikaz tablice najboljih rezultata
+STR_6839_PERMISSIVE                                             :Dopustiv
+STR_683A_TOLERANT                                               :Tolerantan
+STR_683B_HOSTILE                                                :Agresivan
+
+##id 0x7000
+STR_7000                                                        :
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
+STR_7002_PLAYER                                                 :(Igrač {COMMA})
+STR_7004_NEW_FACE                                               :{BLACK}Novo lice
+STR_7005_COLOR_SCHEME                                           :{BLACK}Boja
+STR_7006_COLOR_SCHEME                                           :{GOLD}Boja:
+STR_7007_NEW_COLOR_SCHEME                                       :{WHITE}Nova boja
+STR_7008_COMPANY_NAME                                           :{BLACK}Ime tvrtke
+STR_7009_PRESIDENT_NAME                                         :{BLACK}Ime direktora
+STR_700A_COMPANY_NAME                                           :Ime tvrtke
+STR_700B_PRESIDENT_S_NAME                                       :Ime direktora
+STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Ime tvrtke ne može se promijeniti...
+STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Ne možeš promijeniti ime direktora...
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Financije {BLACK}{COMPANYNUM}
+STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Izdatci/Prihodi
+STR_7010                                                        :{WHITE}{NUM}
+STR_7011_CONSTRUCTION                                           :{GOLD}Građenje
+STR_7012_NEW_VEHICLES                                           :{GOLD}Nova vozila
+STR_7013_TRAIN_RUNNING_COSTS                                    :{GOLD}Troškovi uporabe vlakova
+STR_7014_ROAD_VEH_RUNNING_COSTS                                 :{GOLD}Troškovi uporabe cestovnih vozila
+STR_7015_AIRCRAFT_RUNNING_COSTS                                 :{GOLD}Troškovi uporabe zrakoplova
+STR_7016_SHIP_RUNNING_COSTS                                     :{GOLD}Troškovi uporabe brodova
+STR_7017_PROPERTY_MAINTENANCE                                   :{GOLD}Održavanje posjeda
+STR_7018_TRAIN_INCOME                                           :{GOLD}Prihod od vlakova
+STR_7019_ROAD_VEHICLES_INCOME                                   :{GOLD}Prihod od cestovnih vozila
+STR_701A_AIRCRAFT_INCOME                                        :{GOLD}Prihod od zrakoplova
+STR_701B_SHIP_INCOME                                            :{GOLD}Prihod od brodova
+STR_701C_LOAN_INTEREST                                          :{GOLD}Kamate
+STR_701D_OTHER                                                  :{GOLD}Ostalo
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
+STR_7020_TOTAL                                                  :{WHITE}Ukupno:
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
+STR_7022_INCOME_GRAPH                                           :{WHITE}Graf prihoda
+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}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Pozajmi {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Otplati {SKIP}{SKIP}{CURRENCY}
+STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...najveći dopušteni kredit iznosi {CURRENCY}
+STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Ne možeš dobiti još kredita...
+STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...nemaš kredita za otplatu
+STR_702E_REQUIRED                                               :{WHITE}...{CURRENCY} potrebno
+STR_702F_CAN_T_REPAY_LOAN                                       :{WHITE}Ne možeš otplatiti kredit...
+STR_INSUFFICIENT_FUNDS                                          :{WHITE}Ne možeš dati novac koji je pozajmljen od banke...
+STR_7030_SELECT_NEW_FACE_FOR_PRESIDENT                          :{BLACK}Odaberi novo lice za direktora
+STR_7031_CHANGE_THE_COMPANY_VEHICLE                             :{BLACK}Promijeni izgled vozila tvrtke
+STR_7032_CHANGE_THE_PRESIDENT_S                                 :{BLACK}Promjeni ime direktora
+STR_7033_CHANGE_THE_COMPANY_NAME                                :{BLACK}Promijeni ime tvrtke
+STR_7034_CLICK_ON_SELECTED_NEW_COLOR                            :{BLACK}Klikni na odabranu boju
+STR_7035_INCREASE_SIZE_OF_LOAN                                  :{BLACK}Povećaj iznos kredita
+STR_7036_REPAY_PART_OF_LOAN                                     :{BLACK}Otplati dio kredita
+STR_7037_PRESIDENT                                              :{WHITE}{PLAYERNAME}{}{GOLD}(Direktor)
+STR_7038_INAUGURATED                                            :{GOLD}Na poziciji od: {WHITE}{NUM}
+STR_7039_VEHICLES                                               :{GOLD}Vozila:
+STR_TRAINS                                                      :{WHITE}{COMMA} vlak{P "" a ova}
+STR_ROAD_VEHICLES                                               :{WHITE}{COMMA} cestovn{P o a ih} vozil{P o a a}
+STR_AIRCRAFT                                                    :{WHITE}{COMMA} zrakoplov
+STR_SHIPS                                                       :{WHITE}{COMMA} brod{P "" a ova}
+STR_7042_NONE                                                   :{WHITE}Ništa
+STR_7043_FACE_SELECTION                                         :{WHITE}Odabir lica
+STR_7044_MALE                                                   :{BLACK}Muško
+STR_7045_FEMALE                                                 :{BLACK}Žensko
+STR_7046_NEW_FACE                                               :{BLACK}Novo lice
+STR_7047_CANCEL_NEW_FACE_SELECTION                              :{BLACK}Odustani od odabira novog lica
+STR_7048_ACCEPT_NEW_FACE_SELECTION                              :{BLACK}Prihvati odabir novog lica
+STR_7049_SELECT_MALE_FACES                                      :{BLACK}Odaberi muška lica
+STR_704A_SELECT_FEMALE_FACES                                    :{BLACK}Odaberi ženska lica
+STR_704B_GENERATE_RANDOM_NEW_FACE                               :{BLACK}Generiraj nasumično novo lice
+STR_704C_KEY                                                    :{BLACK}Ključ
+STR_704D_SHOW_KEY_TO_GRAPHS                                     :{BLACK}Prikaži ključeve po grafovima
+STR_704E_KEY_TO_COMPANY_GRAPHS                                  :{WHITE}Ključ za grafove tvrtke
+STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY                           :{BLACK}Klikni ovdje za uključivanje/isključivanje tvrke s grafa
+STR_7050_UNITS_OF_CARGO_DELIVERED                               :{WHITE}Dostavljenih jedinica tereta
+STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Ocjena učinka tvrtke (najveća ocjena = 1000)
+STR_7052_COMPANY_VALUES                                         :{WHITE}Vrijednost tvrtki
+STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Tablica lige tvrtki
+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}Prijevozna tvrtka u nevoljama!
+STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} će biti rasprodana ili objaviti bankrot ukoliko se učinak uskoro ne poboljša!
+STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Direktor)
+STR_7059_TRANSPORT_COMPANY_MERGER                               :{BLACK}{BIGFONT}Spajanje prijevoznih tvrki!
+STR_705A_HAS_BEEN_SOLD_TO_FOR                                   :{BLACK}{BIGFONT}{COMPANY} je bila prodana tvrtki {COMPANY} za {CURRENCY}!
+STR_705B_WE_ARE_LOOKING_FOR_A_TRANSPORT                         :{WHITE}Tražimo prijevoznu tvrku koja bi preuzela našu tvrtku.{}{}Želiš li kupiti tvrtku{COMPANY} za {CURRENCY}?
+STR_705C_BANKRUPT                                               :{BLACK}{BIGFONT}Bankrot!
+STR_705D_HAS_BEEN_CLOSED_DOWN_BY                                :{BLACK}{BIGFONT}{COMPANY} je zatvorena od strane kreditora i sva je imovina rasprodana!
+STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED                         :{BLACK}{BIGFONT}Osnovana je nova prijevozna tvrtka!
+STR_705F_STARTS_CONSTRUCTION_NEAR                               :{BLACK}{BIGFONT}{COMPANY} započinje gradnju blizu grada {TOWN}!
+STR_7060_CAN_T_BUY_COMPANY                                      :{WHITE}Ne možeš kupiti tvrtku...
+STR_7061_CARGO_PAYMENT_RATES                                    :{WHITE}Isplatne rate tereta
+STR_7062_DAYS_IN_TRANSIT                                        :{BLACK}{TINYFONT}Dana u tranzitu
+STR_7064_TOGGLE_GRAPH_FOR_CARGO                                 :{BLACK}Aktiviraj/deaktiviraj graf za vrstu tereta
+STR_7065                                                        :{BLACK}{TINYFONT}{STRING}
+STR_7066_ENGINEER                                               :Inženjer
+STR_7067_TRAFFIC_MANAGER                                        :Prijevozni upravitelj
+STR_7068_TRANSPORT_COORDINATOR                                  :Prijevozni koordinator
+STR_7069_ROUTE_SUPERVISOR                                       :Prijevozni nadzornik
+STR_706A_DIRECTOR                                               :Direktor
+STR_706B_CHIEF_EXECUTIVE                                        :Izvršni direktor
+STR_706C_CHAIRMAN                                               :Predsjedavajući
+STR_706D_PRESIDENT                                              :Predsjednik
+STR_706E_TYCOON                                                 :Tajkun
+STR_706F_BUILD_HQ                                               :{BLACK}Izgradi sjedište tvrtke
+STR_7070_BUILD_COMPANY_HEADQUARTERS                             :{BLACK}Izgradi središte tvrtke / pogledaj sjedište tvrtke
+STR_RELOCATE_COMPANY_HEADQUARTERS                               :{BLACK}Izgradi sjedište kompanije negdje dalje za 1% troška od vrijednosti kompanije
+STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS                       :{WHITE}Ne mogu izgraditi sjedište tvrke...
+STR_7072_VIEW_HQ                                                :{BLACK}Pogledaj sjedište tvrtke
+STR_RELOCATE_HQ                                                 :{BLACK}Premjesti sjedište kompanije
+STR_COMPANY_PASSWORD                                            :{BLACK}Zaporka
+STR_COMPANY_PASSWORD_TOOLTIP                                    :{BLACK}Zaštiti svoju tvrku od neovlaštenog korištenje pomoću zaporke.
+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}{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
+STR_707A_SELL_25_SHARE_IN_THIS_COMPANY                          :{BLACK}Prodaj 25% udjela u ovoj tvrtci
+STR_707B_CAN_T_BUY_25_SHARE_IN_THIS                             :{WHITE}Ne možeš kupiti 25% udjela u ovoj tvrtci...
+STR_707C_CAN_T_SELL_25_SHARE_IN                                 :{WHITE}Ne možeš prodati 25% udjela u ovoj tvrtci...
+STR_707D_OWNED_BY                                               :{WHITE}({COMMA}% u vlasništvu {COMPANY})
+STR_707E_OWNED_BY_OWNED_BY                                      :{WHITE}({COMMA}% u vlasništvu {COMPANY}{}   {COMMA}% u vlasništvu {COMPANY})
+STR_707F_HAS_BEEN_TAKEN_OVER_BY                                 :{BLACK}{BIGFONT}{COMPANY} je preuzeta od strane tvrtke {COMPANY}!
+STR_7080_PROTECTED                                              :{WHITE}Ova tvrka još nije dovoljno stara da bi trgovala udjelima...
+
+STR_LIVERY_STEAM                                                :Parna lokomotva
+STR_LIVERY_DIESEL                                               :Dieselska lokomotiva
+STR_LIVERY_ELECTRIC                                             :Električna lokomotiva
+STR_LIVERY_MONORAIL                                             :Jednotračna lokomotiva
+STR_LIVERY_MAGLEV                                               :Maglevska lokomotiva
+STR_LIVERY_PASSENGER_WAGON_STEAM                                :Lokomotiva s putnicima (Parna)
+STR_LIVERY_PASSENGER_WAGON_DIESEL                               :Lokomotiva s putnicima (Dieselska)
+STR_LIVERY_PASSENGER_WAGON_ELECTRIC                             :Lokomotiva s putnicima (Električna)
+STR_LIVERY_FREIGHT_WAGON                                        :Teretni vagon
+STR_LIVERY_BUS                                                  :Autobus
+STR_LIVERY_TRUCK                                                :Kamion
+STR_LIVERY_PASSENGER_SHIP                                       :Trajekt
+STR_LIVERY_FREIGHT_SHIP                                         :Teretni brod
+STR_LIVERY_HELICOPTER                                           :Helikopter
+STR_LIVERY_SMALL_PLANE                                          :Mali zrakoplov
+STR_LIVERY_LARGE_PLANE                                          :Veliki zrakoplov
+
+
+##id 0x8000
+STR_8000_KIRBY_PAUL_TANK_STEAM                                  :Kirby Paul Tank (Para)
+STR_8001_MJS_250_DIESEL                                         :MJS 250 (Diesel)
+STR_8002_PLODDYPHUT_CHOO_CHOO                                   :Ploddyphut Choo-Choo
+STR_8003_POWERNAUT_CHOO_CHOO                                    :Powernaut Choo-Choo
+STR_8004_MIGHTYMOVER_CHOO_CHOO                                  :Mightymover Choo-Choo
+STR_8005_PLODDYPHUT_DIESEL                                      :Ploddyphut Diesel
+STR_8006_POWERNAUT_DIESEL                                       :Powernaut Diesel
+STR_8007_WILLS_2_8_0_STEAM                                      :Wills 2-8-0 (Para)
+STR_8008_CHANEY_JUBILEE_STEAM                                   :Chaney 'Jubilee' (Para)
+STR_8009_GINZU_A4_STEAM                                         :Ginzu 'A4' (Para)
+STR_800A_SH_8P_STEAM                                            :SH '8P' (Para)
+STR_800B_MANLEY_MOREL_DMU_DIESEL                                :Manley-Morel DMU (Diesel)
+STR_800C_DASH_DIESEL                                            :'Dash' (Diesel)
+STR_800D_SH_HENDRY_25_DIESEL                                    :SH/Hendry '25' (Diesel)
+STR_800E_UU_37_DIESEL                                           :UU '37' (Diesel)
+STR_800F_FLOSS_47_DIESEL                                        :Floss '47' (Diesel)
+STR_8010_CS_4000_DIESEL                                         :CS 4000 (Diesel)
+STR_8011_CS_2400_DIESEL                                         :CS 2400 (Diesel)
+STR_8012_CENTENNIAL_DIESEL                                      :Centennial (Diesel)
+STR_8013_KELLING_3100_DIESEL                                    :Kelling 3100 (Diesel)
+STR_8014_TURNER_TURBO_DIESEL                                    :Turner Turbo (Diesel)
+STR_8015_MJS_1000_DIESEL                                        :MJS 1000 (Diesel)
+STR_8016_SH_125_DIESEL                                          :SH '125' (Diesel)
+STR_8017_SH_30_ELECTRIC                                         :SH '30' (Electric)
+STR_8018_SH_40_ELECTRIC                                         :SH '40' (Električni)
+STR_8019_T_I_M_ELECTRIC                                         :'T.I.M.' (Električni)
+STR_801A_ASIASTAR_ELECTRIC                                      :'AsiaStar' (Električni)
+STR_801B_PASSENGER_CAR                                          :Putnički prijevoz
+STR_801C_MAIL_VAN                                               :Poštanski kombi
+STR_801D_COAL_CAR                                               :Kamion za ugljen
+STR_801E_OIL_TANKER                                             :Naftna cisterna
+STR_801F_LIVESTOCK_VAN                                          :Kamion za stoku
+STR_8020_GOODS_VAN                                              :Kamion za robu
+STR_8021_GRAIN_HOPPER                                           :Tegljač žita
+STR_8022_WOOD_TRUCK                                             :Kamion za drvo
+STR_8023_IRON_ORE_HOPPER                                        :Tegljač željeza
+STR_8024_STEEL_TRUCK                                            :Kamion za čelik
+STR_8025_ARMORED_VAN                                            :Oklopljeni kombi
+STR_8026_FOOD_VAN                                               :Kombi za hranu
+STR_8027_PAPER_TRUCK                                            :Kamion za papir
+STR_8028_COPPER_ORE_HOPPER                                      :Tegljač bakra
+STR_8029_WATER_TANKER                                           :Cisterna za vodu
+STR_802A_FRUIT_TRUCK                                            :Kamion za voće
+STR_802B_RUBBER_TRUCK                                           :Kamion za gumu
+STR_802C_SUGAR_TRUCK                                            :Kamion za šećer
+STR_802D_COTTON_CANDY_HOPPER                                    :Tegljač šećerne vune
+STR_802E_TOFFEE_HOPPER                                          :Tegljač mliječne karamele
+STR_802F_BUBBLE_VAN                                             :Kombi za balone
+STR_8030_COLA_TANKER                                            :Cisterna kole
+STR_8031_CANDY_VAN                                              :Kombi za slatkiše
+STR_8032_TOY_VAN                                                :Kombi za igračke
+STR_8033_BATTERY_TRUCK                                          :Kamion za baterije
+STR_8035_PLASTIC_TRUCK                                          :Kamion za plastiku
+STR_8036_X2001_ELECTRIC                                         :'X2001' (Električni)
+STR_8037_MILLENNIUM_Z1_ELECTRIC                                 :'Millennium Z1' (Električni)
+STR_8038_WIZZOWOW_Z99                                           :Wizzowow Z99
+STR_8039_PASSENGER_CAR                                          :Putnički prijevoz
+STR_803A_MAIL_VAN                                               :Poštanski kombi
+STR_803B_COAL_CAR                                               :Kamion za ugljen
+STR_803C_OIL_TANKER                                             :Naftni tanker
+STR_803D_LIVESTOCK_VAN                                          :Kamion za stoku
+STR_803E_GOODS_VAN                                              :Kamion za robu
+STR_803F_GRAIN_HOPPER                                           :Tegljač žita
+STR_8040_WOOD_TRUCK                                             :Kamion za drvo
+STR_8041_IRON_ORE_HOPPER                                        :Tegljač željeza
+STR_8042_STEEL_TRUCK                                            :Kamion za željezo
+STR_8043_ARMORED_VAN                                            :Oklopno vozilo
+STR_8044_FOOD_VAN                                               :Kamion za hranu
+STR_8045_PAPER_TRUCK                                            :Kamion za papir
+STR_8046_COPPER_ORE_HOPPER                                      :Tegljač bakra
+STR_8047_WATER_TANKER                                           :Cisterna za vodu
+STR_8048_FRUIT_TRUCK                                            :Kamion za voće
+STR_8049_RUBBER_TRUCK                                           :Kamion za gumu
+STR_804A_SUGAR_TRUCK                                            :Kamion za šećer
+STR_804B_COTTON_CANDY_HOPPER                                    :Tegljač Šećerne vune
+STR_804C_TOFFEE_HOPPER                                          :Tegljač mliječne karamele
+STR_804D_BUBBLE_VAN                                             :Kombi za balone
+STR_804E_COLA_TANKER                                            :Cisterna za colu
+STR_804F_CANDY_VAN                                              :Kombi za slatkiše
+STR_8050_TOY_VAN                                                :Kombi za igračke
+STR_8051_BATTERY_TRUCK                                          :Kamion za baterije
+STR_8053_PLASTIC_TRUCK                                          :Kamion za plastiku
+STR_8054_LEV1_LEVIATHAN_ELECTRIC                                :Lev1 'Leviathan' (Električni)
+STR_8055_LEV2_CYCLOPS_ELECTRIC                                  :Lev2 'Cyclops' (Električni)
+STR_8056_LEV3_PEGASUS_ELECTRIC                                  :Lev3 'Pegasus' (Električni)
+STR_8057_LEV4_CHIMAERA_ELECTRIC                                 :Lev4 'Chimaera' (Električni)
+STR_8058_WIZZOWOW_ROCKETEER                                     :Wizzowow Rocketeer
+STR_805A_MAIL_VAN                                               :Poštanski kombi
+STR_805B_COAL_CAR                                               :Kamion za ugljen
+STR_805C_OIL_TANKER                                             :Naftna cisterna
+STR_805D_LIVESTOCK_VAN                                          :Kamion za stoku
+STR_805E_GOODS_VAN                                              :Kamion za robu
+STR_805F_GRAIN_HOPPER                                           :Tegljač žita
+STR_8060_WOOD_TRUCK                                             :Kamion za drva
+STR_8061_IRON_ORE_HOPPER                                        :Tegljač željeza
+STR_8062_STEEL_TRUCK                                            :Kamion za čelik
+STR_8063_ARMORED_VAN                                            :Oklopno vozilo
+STR_8064_FOOD_VAN                                               :Kamion za hranu
+STR_8065_PAPER_TRUCK                                            :Kamion za papir
+STR_8066_COPPER_ORE_HOPPER                                      :Tegljač bakra
+STR_8067_WATER_TANKER                                           :Cisterna za vodu
+STR_8068_FRUIT_TRUCK                                            :Kamion za voće
+STR_8069_RUBBER_TRUCK                                           :Kamion za gumu
+STR_806A_SUGAR_TRUCK                                            :Kamion za šećer
+STR_806B_COTTON_CANDY_HOPPER                                    :Tegljač šećerne vune
+STR_806C_TOFFEE_HOPPER                                          :Teglač mliječne karamele
+STR_806D_BUBBLE_VAN                                             :Kombi za balone
+STR_806E_COLA_TANKER                                            :Cisterna za colu
+STR_806F_CANDY_VAN                                              :Kombi za slatkiše
+STR_8070_TOY_VAN                                                :Kombi za igračke
+STR_8071_BATTERY_TRUCK                                          :Kamion za baterije
+STR_8074_MPS_REGAL_BUS                                          :MPS Regal Bus
+STR_8075_HEREFORD_LEOPARD_BUS                                   :Hereford Leopard Bus
+STR_8076_FOSTER_BUS                                             :Foster Bus
+STR_8077_FOSTER_MKII_SUPERBUS                                   :Foster MkII Superbus
+STR_8078_PLODDYPHUT_MKI_BUS                                     :Ploddyphut MkI Bus
+STR_8079_PLODDYPHUT_MKII_BUS                                    :Ploddyphut MkII Bus
+STR_807A_PLODDYPHUT_MKIII_BUS                                   :Ploddyphut MkIII Bus
+STR_8081_MIGHTYMOVER_MAIL_TRUCK                                 :MightyMover Poštanski Kamion
+STR_8082_POWERNAUGHT_MAIL_TRUCK                                 :Powernaught Poštanski Kamion
+STR_8083_WIZZOWOW_MAIL_TRUCK                                    :Wizzwow Poštanski Kamion
+STR_8084_WITCOMBE_OIL_TANKER                                    :Witcombe Tanker Ulja
+STR_8085_FOSTER_OIL_TANKER                                      :Foster Tanker Ulja
+STR_8086_PERRY_OIL_TANKER                                       :Perry Tanker Ulja
+STR_8087_TALBOTT_LIVESTOCK_VAN                                  :Tallbot Stočni Kamion
+STR_8088_UHL_LIVESTOCK_VAN                                      :Uhl Stočni Kamion
+STR_8089_FOSTER_LIVESTOCK_VAN                                   :Foster Stočni Kamion
+STR_808A_BALOGH_GOODS_TRUCK                                     :Balogh Robni Kamion
+STR_808B_CRAIGHEAD_GOODS_TRUCK                                  :Craighead Robni Kamion
+STR_808C_GOSS_GOODS_TRUCK                                       :Goss Robni Kamion
+STR_808D_HEREFORD_GRAIN_TRUCK                                   :Hereford Kamion za žitarice
+STR_808E_THOMAS_GRAIN_TRUCK                                     :Thomas Kamion za žitarice
+STR_808F_GOSS_GRAIN_TRUCK                                       :Goss Kamion za žitarice
+STR_8090_WITCOMBE_WOOD_TRUCK                                    :Witcombe Kamion za drvo
+STR_8091_FOSTER_WOOD_TRUCK                                      :Foster Kamion za drvo
+STR_8092_MORELAND_WOOD_TRUCK                                    :Moreland Kamion za Drvo
+STR_8093_MPS_IRON_ORE_TRUCK                                     :MPS Kamion za željeznu rudu
+STR_8094_UHL_IRON_ORE_TRUCK                                     :Uhl Kamion za željezu rudu
+STR_8095_CHIPPY_IRON_ORE_TRUCK                                  :Chippy Kamion za željeznu rudu
+STR_8096_BALOGH_STEEL_TRUCK                                     :Balogh Kamion za čelik
+STR_8097_UHL_STEEL_TRUCK                                        :Uhl Kamion za čelik
+STR_8098_KELLING_STEEL_TRUCK                                    :Kelling Kamion za čelik
+STR_8099_BALOGH_ARMORED_TRUCK                                   :Balogh Blindirani Kamion
+STR_809A_UHL_ARMORED_TRUCK                                      :Uhl Blindirani Kamion
+STR_809B_FOSTER_ARMORED_TRUCK                                   :Foster Blindirani Kamion
+STR_809C_FOSTER_FOOD_VAN                                        :Foster Kamion za hranu
+STR_809D_PERRY_FOOD_VAN                                         :Perry Kamion za hranu
+STR_809E_CHIPPY_FOOD_VAN                                        :Chippy Kamion za hranu
+STR_809F_UHL_PAPER_TRUCK                                        :Uhl Kamion za papir
+STR_80A0_BALOGH_PAPER_TRUCK                                     :Balogh Kamion za papir
+STR_80A1_MPS_PAPER_TRUCK                                        :MPS Kamion za papir
+STR_80A2_MPS_COPPER_ORE_TRUCK                                   :MPS Kamion za bakrenu rudu
+STR_80A3_UHL_COPPER_ORE_TRUCK                                   :Uhl Kamion za bakrenu rudu
+STR_80A4_GOSS_COPPER_ORE_TRUCK                                  :Goss Kamion za bakrenu rudu
+STR_80A5_UHL_WATER_TANKER                                       :Uhl Tanker Voda
+STR_80A6_BALOGH_WATER_TANKER                                    :Baloght Tanker Voda
+STR_80A7_MPS_WATER_TANKER                                       :MPS Tanker Voda
+STR_80A8_BALOGH_FRUIT_TRUCK                                     :Balog Kamion za voće
+STR_80A9_UHL_FRUIT_TRUCK                                        :Uhl Kamion za voće
+STR_80AA_KELLING_FRUIT_TRUCK                                    :Kelling Kamion za voće
+STR_80AB_BALOGH_RUBBER_TRUCK                                    :Balogh Kamion za gumu
+STR_80AC_UHL_RUBBER_TRUCK                                       :Uhl Kamion za gumu
+STR_80AD_RMT_RUBBER_TRUCK                                       :RMT Kamion za gumu
+STR_80AE_MIGHTYMOVER_SUGAR_TRUCK                                :MightyMover Kamion za šećer
+STR_80AF_POWERNAUGHT_SUGAR_TRUCK                                :Powernaught Kamion za šećer
+STR_80B0_WIZZOWOW_SUGAR_TRUCK                                   :Wizzwow Kamion za šećer
+STR_80B1_MIGHTYMOVER_COLA_TRUCK                                 :MightyMover Cola Kamion
+STR_80B2_POWERNAUGHT_COLA_TRUCK                                 :Powernaught Cola Kamion
+STR_80B3_WIZZOWOW_COLA_TRUCK                                    :Wizzwow Cola Kamion
+STR_80B4_MIGHTYMOVER_COTTON_CANDY                               :MighyMover Kamion za šećernu vatu
+STR_80B5_POWERNAUGHT_COTTON_CANDY                               :Powernaught Kamion za šećernu vatu
+STR_80B6_WIZZOWOW_COTTON_CANDY_TRUCK                            :Wizzwow Kamion za šećernu vatu
+STR_80B7_MIGHTYMOVER_TOFFEE_TRUCK                               :MightyMover Toffee Kamion
+STR_80B8_POWERNAUGHT_TOFFEE_TRUCK                               :Powernaught Toffee Kamion
+STR_80B9_WIZZOWOW_TOFFEE_TRUCK                                  :Wizzwow Toffee Kamion
+STR_80BA_MIGHTYMOVER_TOY_VAN                                    :MigtyMover Kamion za igračke
+STR_80BB_POWERNAUGHT_TOY_VAN                                    :Powernaught Kamion za igračke
+STR_80BC_WIZZOWOW_TOY_VAN                                       :Wizzwow Kamion za igračke
+STR_80BD_MIGHTYMOVER_CANDY_TRUCK                                :MightyMover Kamona za slatkiše
+STR_80BE_POWERNAUGHT_CANDY_TRUCK                                :Powernaught Kamion za slatkiše
+STR_80BF_WIZZOWOW_CANDY_TRUCK                                   :Wizzwow Kamion za slatkiše
+STR_80C0_MIGHTYMOVER_BATTERY_TRUCK                              :MightyMover Kamiona za baterije
+STR_80C1_POWERNAUGHT_BATTERY_TRUCK                              :Powernaught Kamion za baterije
+STR_80C2_WIZZOWOW_BATTERY_TRUCK                                 :Wizzwwow Kamion za baterije
+STR_80C3_MIGHTYMOVER_FIZZY_DRINK                                :MightyMover Kamion za gazirana pića
+STR_80C4_POWERNAUGHT_FIZZY_DRINK                                :Powernaught Kamion za gazirana pića
+STR_80C5_WIZZOWOW_FIZZY_DRINK_TRUCK                             :Wizzwow Kamion za gazirana pića
+STR_80CC_MPS_OIL_TANKER                                         :MPS Tanker Ulja
+STR_80CD_CS_INC_OIL_TANKER                                      :CS-Inc. Tanker Ulja
+STR_80CE_MPS_PASSENGER_FERRY                                    :MPS Trajekt
+STR_80CF_FFP_PASSENGER_FERRY                                    :FFP Trajekt
+STR_80D0_BAKEWELL_300_HOVERCRAFT                                :Bakewell 300 Lebdjelica
+STR_80D1_CHUGGER_CHUG_PASSENGER                                 :Chugger-Chug Trajekt
+STR_80D2_SHIVERSHAKE_PASSENGER_FERRY                            :Shivershake Trajekt
+STR_80D3_YATE_CARGO_SHIP                                        :Yate Teretni Brod
+STR_80D4_BAKEWELL_CARGO_SHIP                                    :Bakewell Teretni Brod
+STR_80D5_MIGHTYMOVER_CARGO_SHIP                                 :Mightymover Teretni Brod
+STR_80D6_POWERNAUT_CARGO_SHIP                                   :Powernaught Teretni Brod
+STR_80D7_SAMPSON_U52                                            :Sampson U52
+STR_80D8_COLEMAN_COUNT                                          :Coleman Count
+STR_80D9_FFP_DART                                               :FFP Dart
+STR_80DA_YATE_HAUGAN                                            :Yate Haugan
+STR_80DB_BAKEWELL_COTSWALD_LB_3                                 :Bakewell Cotswald LB-3
+STR_80DC_BAKEWELL_LUCKETT_LB_8                                  :Bakewell Luckett LB-8
+STR_80DD_BAKEWELL_LUCKETT_LB_9                                  :Bakewell Luckett LB-9
+STR_80DE_BAKEWELL_LUCKETT_LB80                                  :Bakewell Luckett LB80
+STR_80DF_BAKEWELL_LUCKETT_LB_10                                 :Bakewell Luckett LB-10
+STR_80E0_BAKEWELL_LUCKETT_LB_11                                 :Bakewell Luckett LB-11
+STR_80E1_YATE_AEROSPACE_YAC_1_11                                :Yate Aerospace YAC 1-11
+STR_80E2_DARWIN_100                                             :Darwin 100
+STR_80E3_DARWIN_200                                             :Darwin 200
+STR_80E4_DARWIN_300                                             :Darwin 300
+STR_80E5_DARWIN_400                                             :Darwin 400
+STR_80E6_DARWIN_500                                             :Darwin 500
+STR_80E7_DARWIN_600                                             :Darwin 600
+STR_80E8_GURU_GALAXY                                            :Guru Galaxy
+STR_80E9_AIRTAXI_A21                                            :Airtaxi A21
+STR_80EA_AIRTAXI_A31                                            :Airtaxi A31
+STR_80EB_AIRTAXI_A32                                            :Airtaxi A32
+STR_80EC_AIRTAXI_A33                                            :Airtaxi A33
+STR_80ED_YATE_AEROSPACE_YAE46                                   :Yate Aerospace YAe46
+STR_80EE_DINGER_100                                             :Dinger 100
+STR_80EF_AIRTAXI_A34_1000                                       :AirTaxi A34-1000
+STR_80F0_YATE_Z_SHUTTLE                                         :Yate Z-Shuttle
+STR_80F1_KELLING_K1                                             :Kelling K1
+STR_80F2_KELLING_K6                                             :Kelling K6
+STR_80F3_KELLING_K7                                             :Kelling K7
+STR_80F4_DARWIN_700                                             :Darwin 700
+STR_80F5_FFP_HYPERDART_2                                        :FFP Hyperdart 2
+STR_80F6_DINGER_200                                             :Dinger 200
+STR_80F7_DINGER_1000                                            :Dinger 1000
+STR_80F8_PLODDYPHUT_100                                         :Ploddyphut 100
+STR_80F9_PLODDYPHUT_500                                         :Ploddyphut 500
+STR_80FA_FLASHBANG_X1                                           :Flashbang X1
+STR_80FB_JUGGERPLANE_M1                                         :Juggerplane M1
+STR_80FC_FLASHBANG_WIZZER                                       :Flashbang Wizzer
+STR_80FD_TRICARIO_HELICOPTER                                    :Tricario Helicopter
+STR_80FE_GURU_X2_HELICOPTER                                     :Guru X2 Helicopter
+STR_80FF_POWERNAUT_HELICOPTER                                   :Powernaut Helicopter
+STR_8100_MESSAGE_FROM_VEHICLE_MANUFACTURE                       :{WHITE}Poruka od proizvođača vozila
+STR_8101_WE_HAVE_JUST_DESIGNED_A                                :{GOLD}Upravo smo dizajnirani novi {STRING} - jeste li zainteresirani za jednogodišnje isključivo pravo uporabe ovog vozila, tako da vidimo kako se vozilo ponaša prije nego što postane univerzalno dostupno?
+STR_8102_RAILROAD_LOCOMOTIVE                                    :željeznička lokomotiva
+STR_8103_ROAD_VEHICLE                                           :cestovno vozilo
+STR_8104_AIRCRAFT                                               :zrakoplov
+STR_8105_SHIP                                                   :brod
+STR_8106_MONORAIL_LOCOMOTIVE                                    :monorail lokomotiva
+STR_8107_MAGLEV_LOCOMOTIVE                                      :maglev lokomotiva
+
+##id 0x8800
+STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Spremište vlakova
+STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Građani slave . . .{}Prvi vlak stiže na {STATION}!
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Detalji)
+STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Vlak na putu
+STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
+STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
+STR_8806_GO_TO                                                  :Idi do {STATION}
+STR_8807_GO_TO_TRANSFER                                         :Idi do {STATION} (Transferiraj i preuzmi teret)
+STR_8808_GO_TO_UNLOAD                                           :Idi do {STATION} (Istovar)
+STR_8809_GO_TO_TRANSFER_UNLOAD                                  :Go to {STATION} (Transferiraj i otiđi prazan)
+STR_880A_GO_TO_LOAD                                             :Idi do{STATION} (Utovar)
+STR_880B_GO_TO_TRANSFER_LOAD                                    :Idi do {STATION} (Transferiraj i pričekaj puni utovar)
+STR_880C_GO_NON_STOP_TO                                         :Idi non-stop do {STATION}
+STR_880D_GO_TO_NON_STOP_TRANSFER                                :Idi non-stop do {STATION} (Transferiraj i preuzmi teret)
+STR_880E_GO_NON_STOP_TO_UNLOAD                                  :Idi non-stop do {STATION} (Istovar)
+STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD                         :Idi non-stop do {STATION} (Transferiraj i otiđi prazan)
+STR_8810_GO_NON_STOP_TO_LOAD                                    :Idi non-stop do{STATION} (Utovar)
+STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD                           :Idi non-stop do {STATION} (Transferiraj i pričekaj puni utovar)
+STR_GO_TO_TRAIN_DEPOT                                           :Idi do {TOWN} spremište vlakova
+STR_SERVICE_AT_TRAIN_DEPOT                                      :Servisiraj u {TOWN} spremištu vlakova
+STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Idi non-stop do {TOWN} spremišta vlakova
+STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Servisiraj non-stop u {TOWN} Željezničkom Skladištu
+
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Putovanje (bez rasporeda)
+STR_TIMETABLE_TRAVEL_FOR                                        :Putovanje za {STRING}
+STR_TIMETABLE_STAY_FOR                                          :i boravak za {STRING}
+
+STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE} Krećem za {TOWN} Željezničko Skladište
+STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE} Krećem za {TOWN} Željezničko Skladište, {VELOCITY}
+STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Servis u {TOWN} Željezničkom Skladištu
+
+STR_INVALID_ORDER                                               :{RED} (Neispravna naredba)
+
+STR_UNKNOWN_DESTINATION                                         :nepoznato odredište
+STR_8812_EMPTY                                                  :{LTBLUE}Prazan
+STR_8813_FROM                                                   :{LTBLUE}{CARGO} iz {STATION}
+STR_8814_TRAIN_IS_WAITING_IN_DEPOT                              :{WHITE}Vlak {COMMA} čeka u spremištu
+STR_8815_NEW_VEHICLES                                           :{BLACK}Nova vozila
+STR_8816                                                        :{BLACK}-
+STR_8819_TRAIN_TOO_LONG                                         :{WHITE}Vlak predugačak
+STR_881A_TRAINS_CAN_ONLY_BE_ALTERED                             :{WHITE}Vlakovi mogu biti izmjenjeni jedino kad su zaustavljeni u spremištu
+
+STR_881C_NEW_RAIL_VEHICLES                                      :{WHITE}Nova željeznička vozila
+STR_NEW_ELRAIL_VEHICLES                                         :{WHITE}Nova vozila električne pruge
+STR_881D_NEW_MONORAIL_VEHICLES                                  :{WHITE}Nova monorail vozila
+STR_881E_NEW_MAGLEV_VEHICLES                                    :{WHITE}Nova maglev vozila
+STR_ALL_AVAIL_RAIL_VEHICLES                                     :{WHITE}Željeznička vozila
+
+STR_881F_BUILD_VEHICLE                                          :{BLACK}Izgradi vozilo
+STR_CLONE_ROAD_VEHICLE                                          :{BLACK}Kloniraj vozilo
+STR_CLONE_ROAD_VEHICLE_INFO                                     :{BLACK}Ovo će izgraditi kopiju cestovnog vozila. Control-clik će dijeliti naredbe
+STR_CLONE_ROAD_VEHICLE_DEPOT_INFO                               :{BLACK}Ovo će napraviti kopiju cestovnog vozila. Kliknite na ovu tipku i onda na cestovno vozilo unutar ili izvan skladišta. CTRL-klik će podijeliti naredbe
+STR_CLONE_TRAIN                                                 :{BLACK}Kloniraj vlak
+STR_CLONE_TRAIN_INFO                                            :{BLACK}Ovo će izgraditi kopiju vlaka uključujući sve vagone. Control-klik će dijeliti naredbe
+STR_CLONE_TRAIN_DEPOT_INFO                                      :{BLACK}Ovo će napraviti kopiju vlaka uključujući vagone. Kliknite na ovu tipku i onda na vlak unutar ili izvan skladišta. CTRL-klik će podijeliti naredbe
+STR_8820_RENAME                                                 :{BLACK}Preimenuj
+STR_8823_SKIP                                                   :{BLACK}Preskoči
+STR_8824_DELETE                                                 :{BLACK}Obriši
+STR_8825_NON_STOP                                               :{BLACK}Non-stop
+STR_8826_GO_TO                                                  :{BLACK}Idi do
+STR_8827_FULL_LOAD                                              :{BLACK}Puni utovar
+STR_8828_UNLOAD                                                 :{BLACK}Istovar
+STR_REFIT                                                       :{BLACK}Prenamijeni
+STR_REFIT_TIP                                                   :{BLACK}Odaberi tip tereta za prenamijeniti u ovoj narudžbi. CTRL-klik za brisanje uputa za prenamijenu
+STR_REFIT_ORDER                                                 :(Prenamijeni u {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK} Raspored
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Prebacivanje na pogled rasporeda
+STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Naredbe)
+STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Kraj naredbi - -
+STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
+STR_SERVICE                                                     :{BLACK}Servis
+STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Ne mogu izgraditi željezničko vozilo...
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Izgrađen: {LTBLUE}{NUM}{BLACK} Vrijednost: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Vrijednost: {LTBLUE}{CURRENCY}
+STR_882E                                                        :{WHITE}{VEHICLE}
+STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Utovar / Istovar
+STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Vlak mora biti zaustavljan unutar skladišta
+STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT                              :{WHITE}Ne mogu poslati vlak u spremište...
+STR_8831_NO_MORE_SPACE_FOR_ORDERS                               :{WHITE}Nema mjesta za nove naredbe
+STR_8832_TOO_MANY_ORDERS                                        :{WHITE}Previše naredbi
+STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Ne možeš ubaciti novu naredbu...
+STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Ne možeš obrisati ovu naredbu...
+STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Ne možeš izmjeniti ovu naredbu...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Ne mogu pomaknuti ovu naredbu...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Ne mohu preskočiti trenutačnu naredbu...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Nwe mogu skočiti na odabranu naredbu...
+STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Ne možeš pomaknuti vozilo...
+STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}Stražnja lokomotiva će uvijek pratiti svog prednjeg dvojnika
+STR_8838_N_A                                                    :N/A{SKIP}
+STR_8839_CAN_T_SELL_RAILROAD_VEHICLE                            :{WHITE}Ne možeš prodati željezničko vozilo
+STR_883A_UNABLE_TO_FIND_ROUTE_TO                                :{WHITE}Ne može pronaći put do lokalnog spremišta
+STR_883B_CAN_T_STOP_START_TRAIN                                 :{WHITE}Ne možeš zaustaviti/pokrenuti vlak...
+STR_883C_SERVICING_INTERVAL_DAYS                                :{BLACK}Servisni interval: {LTBLUE}{COMMA}dana{BLACK}   Zadnji servis: {LTBLUE}{DATE_LONG}
+STR_SERVICING_INTERVAL_PERCENT                                  :{BLACK}Servisni interval: {LTBLUE}{COMMA}%{BLACK} Zadnji servis: {LTBLUE}{DATE_LONG}
+STR_883D_TRAINS_CLICK_ON_TRAIN_FOR                              :{BLACK}Vlakovi - klikni na vlak za informacije
+STR_883E_BUILD_NEW_TRAINS_REQUIRES                              :{BLACK}Izgradi/kupi nove vlakove (zahtijeva spremište vlakova)
+STR_883F_TRAINS_CLICK_ON_TRAIN_FOR                              :{BLACK}Vlakovi - klikni na vlak za informacije., vuci vozilo kako bi dodao/oduzeo od vlaka
+STR_8840_BUILD_NEW_TRAIN_VEHICLE                                :{BLACK}Izgradi novi vlak
+STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE                             :{BLACK}Povuci vlak ovdje za prodaju
+STR_8842_CENTER_MAIN_VIEW_ON_TRAIN                              :{BLACK}Centriraj glavni pogled na lokaciju željezničkog skladišta
+STR_8843_TRAIN_VEHICLE_SELECTION                                :{BLACK}Lista za odabiranje vlakova - klikni na vlak za informacije
+STR_8844_BUILD_THE_HIGHLIGHTED_TRAIN                            :{BLACK}Izgradi označeni vlak
+STR_8845_RENAME_TRAIN_VEHICLE_TYPE                              :{BLACK}Preimenuj tip vlaka
+STR_8846_CURRENT_TRAIN_ACTION_CLICK                             :{BLACK}Akcije trenutnog vlaka - klikni za zaustavljanje/pokretanje vlaka
+STR_8847_SHOW_TRAIN_S_ORDERS                                    :{BLACK}Pokaži naredbe vlaka
+STR_8848_CENTER_MAIN_VIEW_ON_TRAIN                              :{BLACK}Centriraj glavni pogled na lokaciju vlaka
+STR_8849_SEND_TRAIN_TO_DEPOT                                    :{BLACK}Pošalji vlak u skladište. CTRL+klik će ga samo servisirati
+STR_884A_FORCE_TRAIN_TO_PROCEED                                 :{BLACK}Natjeraj vlak da nastavi bez čekanja za odobrenjem signala
+STR_884B_REVERSE_DIRECTION_OF_TRAIN                             :{BLACK}Okreni smjer vlaka
+STR_884C_SHOW_TRAIN_DETAILS                                     :{BLACK}Prikaži detalje vlaka
+STR_884D_INCREASE_SERVICING_INTERVAL                            :{BLACK}Povećaj servisni interval
+STR_884E_DECREASE_SERVICING_INTERVAL                            :{BLACK}Smanji servisni interval
+STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED                          :{BLACK}Pokaži detalje prevoženog tereta
+STR_8850_SHOW_DETAILS_OF_TRAIN_VEHICLES                         :{BLACK}Pokaži detalje vagona
+STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Pokaži kapacitet svakog vagona
+STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Pokaži potpuni kapacitet vlaka, podijeljen prema tipu tereta
+STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Lista naredbi - klikni na naredbu da ju označiš. CTRL + klik klizi na stanicu
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Preskoči trenutnu naredbu, i pokreni slijedeću. CTRL + klik preskače na odabranu naredbu
+STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Obriši označenu naredbu
+STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Napravi označenu naredbu da bude non-stop
+STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Umetni novu naredbu prije odabrane naredbe, ili dodaj na kraj liste
+STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Napravi da odabrana naredba natjera vozilo da čeka na potpuni utovar
+STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Napravi da označena naredba natjera vozilo na istovar
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Raspored - klikni na naredbu da ju označiš.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Promijeni količinu vremena koju bi označena naredba trebala uzeti
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Obriši potrebno vrijeme za označenu naredbu
+STR_SERVICE_HINT                                                :{BLACK}Preskoči ovu narudžbu osim ako servis nije potreban
+STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Trošak: {CURRENCY} Težina: {WEIGHT_S}{}Brzina: {VELOCITY} Snaga: {POWER}{}Troškovi održavanja: {CURRENCY}/god{}Kapacitet: {CARGO}
+STR_885C_BROKEN_DOWN                                            :{RED}Pokvaren
+STR_885D_AGE_RUNNING_COST_YR                                    :{BLACK}Starost: {LTBLUE}{STRING}{BLACK}   Troškovi uporabe: {LTBLUE}{CURRENCY}/god
+STR_885F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Zarada ove godine: {LTBLUE}{CURRENCY}  (prošle godine: {CURRENCY})
+STR_8860_RELIABILITY_BREAKDOWNS                                 :{BLACK}Pouzdanost: {LTBLUE}{COMMA}%  {BLACK}Kvarova od zadnjeg servisa: {LTBLUE}{COMMA}
+STR_8861_STOPPED                                                :{RED}Zaustavljen
+STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL                           :{WHITE}Ne mogu natjerati vlak da ignorira signale dok je opasnost...
+STR_8863_CRASHED                                                :{RED}Slupan!
+
+STR_8865_NAME_TRAIN                                             :{WHITE}Imenuj vlak
+STR_8866_CAN_T_NAME_TRAIN                                       :{WHITE}Ne mogu imenovati vlak...
+STR_8867_NAME_TRAIN                                             :{BLACK}Imenuj vlak
+STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL                            :{BLACK}{BIGFONT}Vlak se sudario!{}{COMMA} poginulih u eksploziji nakon sudara
+STR_8869_CAN_T_REVERSE_DIRECTION                                :{WHITE}Ne mogu promijeniti smjer vlaka...
+STR_886A_RENAME_TRAIN_VEHICLE_TYPE                              :{WHITE}Preimenuj vrstu vlaka
+STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Ne mogu preimenovati tip vagona...
+STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Naprvi da označeni red prisili vozilo da izbaci teret
+STR_886F_TRANSFER                                               :{BLACK}Transfer
+STR_CLEAR_TIME                                                  :{BLACK}Obriši Vrijeme
+STR_RESET_LATENESS                                              :{BLACK}Poništi Brojač Kašnjenja
+
+STR_TRAIN_STOPPING                                              :{RED}Zaustavljam
+STR_TRAIN_STOPPING_VEL                                          :{RED}Zaustavljam, {VELOCITY}
+STR_INCOMPATIBLE_RAIL_TYPES                                     :Nekompatibilan tip tračnica
+
+STR_NEW_VEHICLE_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}Novi {STRING} je sada dostupan!
+STR_NEW_VEHICLE_TYPE                                            :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Novi {STRING} je sada dostupan! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Ne mogu rasporediti vozilo...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Vozila mogu čekati samo na stanicama.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Ovo vozilo se ne zaustavlja na ovoj stanici.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Promijeni Vrijeme
+STR_TIMETABLE_STATUS_ON_TIME                                    :Ovo vozilo vozi na vrijeme
+STR_TIMETABLE_STATUS_LATE                                       :Ovo vozilo trenutačno {STRING} kasni
+STR_TIMETABLE_STATUS_EARLY                                      :Ovo vozilo je stiglo {STRING} ranije
+STR_TIMETABLE_TOTAL_TIME                                        :Ovaj raspored će trebati {STRING} za završetak
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :OVaj raspored će trebati najmanje {STRING} za završetak (nije sve raspoređeno)
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Automatsko punjenje
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Napuni raspored automatski sa vrijednostima iz prvog puta
+
+##id 0x9000
+STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Cestovno vozilo na putu
+STR_9002                                                        :{WHITE}{VEHICLE}
+STR_9003_ROAD_VEHICLE_DEPOT                                     :{WHITE}{TOWN} Spremište cestovnih vozila
+STR_9004_NEW_VEHICLES                                           :{BLACK}Nova vozila
+STR_9006_NEW_ROAD_VEHICLES                                      :{WHITE}Nova cestovna vozila
+STR_9007_BUILD_VEHICLE                                          :{BLACK}Izgradi vozilo
+STR_9009_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}Ne mogu izgraditi cestovno vozilo...
+STR_900C_DETAILS                                                :{WHITE}{VEHICLE} (Detalji)
+STR_900D_AGE_RUNNING_COST_YR                                    :{BLACK}Starost: {LTBLUE}{STRING}{BLACK}   Trošak uporabe {LTBLUE}{CURRENCY}/god
+STR_900E_MAX_SPEED                                              :{BLACK}Maks brzina: {LTBLUE}{VELOCITY}
+STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Zarada ove godine: {LTBLUE}{CURRENCY}  (prošle godine: {CURRENCY})
+STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Pouzdanost: {LTBLUE}{COMMA}%  {BLACK}Kvarovi od posljednjeg servisa: {LTBLUE}{COMMA}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Izgrađen: {LTBLUE}{NUM}{BLACK} Vrijednost: {LTBLUE}{CURRENCY}
+STR_9012_CAPACITY                                               :{BLACK}Kapacitet: {LTBLUE}{CARGO}
+STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...mora biti zaustavljen unutar spremišta cestovnih vozila
+STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Ne mogu prodati cestovno vozilo...
+STR_9015_CAN_T_STOP_START_ROAD_VEHICLE                          :{WHITE}Ne mogu zaustaviti/pokrenuti cestovno vozilo...
+STR_9016_ROAD_VEHICLE_IS_WAITING                                :{WHITE}Cestovno vozilo {COMMA} čeka u spremištu
+STR_HEADING_FOR_ROAD_DEPOT                                      :{ORANGE}Kreće se prema {TOWN} cestovnom spremištu
+STR_HEADING_FOR_ROAD_DEPOT_VEL                                  :{ORANGE}Kreće se prema {TOWN} cestovnom spremištu, {VELOCITY}
+STR_HEADING_FOR_ROAD_DEPOT_SERVICE                              :{LTBLUE}Servisiranje u {TOWN} cestovnom spremištu
+STR_HEADING_FOR_ROAD_DEPOT_SERVICE_VEL                          :{LTBLUE}Seervisiranje u {TOWN} cestovnom spremištu, {VELOCITY}
+STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT                            :{WHITE}Ne mogu poslati vozilo u spremište...
+STR_9019_UNABLE_TO_FIND_LOCAL_DEPOT                             :{WHITE}Ne mogu pronaći lokalno spremište
+STR_901A_ROAD_VEHICLES_CLICK_ON                                 :{BLACK}Cestovna vozila - klikni na vozilo za informacije
+STR_901B_BUILD_NEW_ROAD_VEHICLES                                :{BLACK}Izgradi nova cestovna vozila (zahtijeva spremište cestovnih vozila)
+STR_901C_CURRENT_VEHICLE_ACTION                                 :{BLACK}Trenutna radnja vozila - klikni ovdje kako bi zaustavio/pokrenuo vozilo
+STR_901D_SHOW_VEHICLE_S_ORDERS                                  :{BLACK}Prikaži naredbe vozila
+STR_901E_CENTER_MAIN_VIEW_ON_VEHICLE                            :{BLACK}Centriraj glavni pogled na lokaciju vozila
+STR_901F_SEND_VEHICLE_TO_DEPOT                                  :{BLACK}Pošalji vozilo u spremište. CTRL+klik će samo servisirati
+STR_9020_FORCE_VEHICLE_TO_TURN_AROUND                           :{BLACK}Natjeraj vozila da se okrene natrag
+STR_9021_SHOW_ROAD_VEHICLE_DETAILS                              :{BLACK}Prikaži detalje cestovnog vozila
+STR_9022_VEHICLES_CLICK_ON_VEHICLE                              :{BLACK}Vozila - klikni na vozilo za informaciju
+STR_9023_BUILD_NEW_ROAD_VEHICLE                                 :{BLACK}Izgradi novo cestovno vozilo
+STR_9024_DRAG_ROAD_VEHICLE_TO_HERE                              :{BLACK}Povuci cestovno vozilo ovdje kako bi ga prodao
+STR_9025_CENTER_MAIN_VIEW_ON_ROAD                               :{BLACK}Centriraj glavni pogled na lokaciju spremišta cestovnih vozila
+STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Popis cestovnih vozila - pritisni na vozilo za informacije
+STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Izgradi označeno cestovno vozilo
+STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Trošak: {CURRENCY}{}Brzina: {VELOCITY}{}Trošak uporabe: {CURRENCY}/god{}Kapacitet: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Kapacitet: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
+
+STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Imenuj cestovno vozilo
+STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Ne mogu imenovati cestovno vozilo...
+STR_902E_NAME_ROAD_VEHICLE                                      :{BLACK}Imenuj cestovno vozilo
+STR_902F_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Građani slave . . .{}Prvi bus stiže na {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Građani slave . . .{}Prvi kamion stiže na {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Građani slave . . .{}Prvi teretni vlak je stigao u {STATION}!
+STR_9031_ROAD_VEHICLE_CRASH_DRIVER                              :{BLACK}{BIGFONT}Sudar cestovnog vozila!{}Vozač poginuo u eksploziji nakon sudara s vlakom
+STR_9032_ROAD_VEHICLE_CRASH_DIE                                 :{BLACK}{BIGFONT}Sudar cestovnog vozila!{}{COMMA} poginulih u eksploziji nakon sudara s vlakom
+STR_9033_CAN_T_MAKE_VEHICLE_TURN                                :{WHITE}Ne mogu natjerati vozilo da se okrene...
+STR_ONLY_TURN_SINGLE_UNIT                                       :{WHITE}Ne mogu okreniti vozila koja se sastoje od više jedinica
+STR_9034_RENAME                                                 :{BLACK}Preimenuj
+STR_9035_RENAME_ROAD_VEHICLE_TYPE                               :{BLACK}Preimenuj vrstu cestovnog vozila
+STR_9036_RENAME_ROAD_VEHICLE_TYPE                               :{WHITE}Preimenuj vrstu cestovnog vozila
+STR_9037_CAN_T_RENAME_ROAD_VEHICLE                              :{WHITE}Ne mogu preimenovati vrstu cestovnog vozila...
+STR_9038_GO_TO_ROADVEH_DEPOT                                    :Idi prema spremištu cestovnih vozila {TOWN}
+STR_SERVICE_AT_ROADVEH_DEPOT                                    :Servisiranje pri {TOWN} spremištu cestovnih vozila
+
+STR_REFIT_ROAD_VEHICLE_TO_CARRY                                 :{BLACK}Prenamijeni cestovno vozilo za prijevoz druge vrste tereta
+STR_REFIT_ROAD_VEHICLE                                          :{BLACK}Prenamijeni cestovno vozilo
+STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED                     :{BLACK}Prenamijeni cestovno vozilo za prijevoz druge vrste tereta
+STR_REFIT_ROAD_VEHICLE_CAN_T                                    :{WHITE}Ne mogu prenamijeniti cestovno vozilo...
+STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Izaberi vrstu tereta koje će cestovno vozilo prevoziti
+
+##id 0x9800
+STR_9800_DOCK_CONSTRUCTION                                      :Izgradnja pristaništa
+STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Izgradnja pristaništa
+STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Ovdje ne mogu izgraditi pristanište...
+STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Spremište brodova
+STR_9804_NEW_SHIPS                                              :{BLACK}Novi brodovi
+STR_9805_SHIPS                                                  :{WHITE}{COMPANY} - {COMMA} Brod{P "" a ova}
+STR_9808_NEW_SHIPS                                              :{WHITE}Novi brodovi
+STR_9809_BUILD_SHIP                                             :{BLACK}Izgradi brod
+STR_CLONE_SHIP                                                  :{BLACK}Kloniraj brod
+STR_CLONE_SHIP_INFO                                             :{BLACK}Ovo će izgradi kopiju broda. Control-klik će dijeliti naredbe
+STR_CLONE_SHIP_DEPOT_INFO                                       :{BLACK}Ovo će napraviti kopiju broda. Kliknite na ovu tipku i onda na brod unutar ili izvan skladišta. CTRL-klik će podijeliti naredbe
+STR_980B_SHIP_MUST_BE_STOPPED_IN                                :{WHITE}Brod mora biti zaustavljen u spremištu
+STR_980C_CAN_T_SELL_SHIP                                        :{WHITE}Ne mogu prodati brod...
+STR_980D_CAN_T_BUILD_SHIP                                       :{WHITE}Ne mogu izgraditi brod...
+STR_980E_SHIP_IN_THE_WAY                                        :{WHITE}Smeta brod
+STR_980F                                                        :{WHITE}{VEHICLE}
+STR_9811_DETAILS                                                :{WHITE}{VEHICLE} (Detalji)
+STR_9812_AGE_RUNNING_COST_YR                                    :{BLACK}Starost: {LTBLUE}{STRING}{BLACK}   Trošak uporabe: {LTBLUE}{CURRENCY}/god
+STR_9813_MAX_SPEED                                              :{BLACK}Maks. brzina: {LTBLUE}{VELOCITY}
+STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Zarada ove godine: {LTBLUE}{CURRENCY}  (prošle godine: {CURRENCY})
+STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Pouzdanost: {LTBLUE}{COMMA}%  {BLACK}Kvarova od posljednjeg servisa: {LTBLUE}{COMMA}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Izgrađeno: {LTBLUE}{NUM}{BLACK} Vrijednost: {LTBLUE}{CURRENCY}
+STR_9817_CAPACITY                                               :{BLACK}Zapremnina: {LTBLUE}{CARGO}
+STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Ne mogu pokrenuti/zaustaviti brod...
+STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Ne mogu poslati brod u skladište...
+STR_981A_UNABLE_TO_FIND_LOCAL_DEPOT                             :{WHITE}Ne mogu naći lokalno spremište
+STR_HEADING_FOR_SHIP_DEPOT                                      :{ORANGE}Kreće se prema {TOWN} spremištu brodova
+STR_HEADING_FOR_SHIP_DEPOT_VEL                                  :{ORANGE}Kreće se prema {TOWN} spremištu brodova, {VELOCITY}
+STR_HEADING_FOR_SHIP_DEPOT_SERVICE                              :{LTBLUE}Servisiranje u {TOWN} spremištu brodova
+STR_HEADING_FOR_SHIP_DEPOT_SERVICE_VEL                          :{LTBLUE}Servisiranje u {TOWN} spremištu brodova, {VELOCITY}
+STR_981C_SHIP_IS_WAITING_IN_DEPOT                               :{WHITE}Brod {COMMA} čeka u spremištu
+STR_981D_BUILD_SHIP_DOCK                                        :{BLACK}Izgradi brodsko pristanište
+STR_981E_BUILD_SHIP_DEPOT_FOR_BUILDING                          :{BLACK}Izgradi spremište brodova (za gradnu i servisiranje brodova)
+STR_981F_SHIPS_CLICK_ON_SHIP_FOR                                :{BLACK}Brodovi - klikni na brod za informacije
+STR_9820_BUILD_NEW_SHIP                                         :{BLACK}Izgradi novi brod
+STR_9821_DRAG_SHIP_TO_HERE_TO_SELL                              :{BLACK}Povuci brod ovdje kako bi ga prodao
+STR_9822_CENTER_MAIN_VIEW_ON_SHIP                               :{BLACK}Centriraj glavni pogled na lokaciju spremišta brodova
+STR_9823_SHIPS_CLICK_ON_SHIP_FOR                                :{BLACK}Brodovi - klikni na brod za informacije
+STR_9824_BUILD_NEW_SHIPS_REQUIRES                               :{BLACK}Izgradi nove brodove (zahtijeva spremište brodova)
+STR_9825_SHIP_SELECTION_LIST_CLICK                              :{BLACK}Popis brodova - pritisni na brod za informacije
+STR_9826_BUILD_THE_HIGHLIGHTED_SHIP                             :{BLACK}Izgradi označeni brod
+STR_9827_CURRENT_SHIP_ACTION_CLICK                              :{BLACK}Trenutna radnja broda - pritisni ovdje za zaustavljanje/pokretanje broda
+STR_9828_SHOW_SHIP_S_ORDERS                                     :{BLACK}Prikaži naredbe broda
+STR_9829_CENTER_MAIN_VIEW_ON_SHIP                               :{BLACK}Centriraj glavni pogled na lokaciju broda
+STR_982B_SHOW_SHIP_DETAILS                                      :{BLACK}Prikaži detalje broda
+STR_982F_NAME_SHIP                                              :{BLACK}Imenuj brod
+
+STR_9831_NAME_SHIP                                              :{WHITE}Imenuj brod
+STR_9832_CAN_T_NAME_SHIP                                        :{WHITE}Ne mogu imenovati brod...
+STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Građani slave . . .{}Prvi brod stigao do {STATION}!
+STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}Smjesti plutaču koja može biti korištena kao pokazatelj puta
+STR_9835_CAN_T_POSITION_BUOY_HERE                               :{WHITE}Ne mogu staviti plutaču ovdje...
+STR_9836_RENAME                                                 :{BLACK}Preimenuj
+STR_9837_RENAME_SHIP_TYPE                                       :{BLACK}Preimenuj vrstu broda
+STR_9838_RENAME_SHIP_TYPE                                       :{WHITE}Preimenuj vrstu broda
+STR_9839_CAN_T_RENAME_SHIP_TYPE                                 :{WHITE}Ne mogu preimenovati vrstu broda...
+STR_983A_REFIT_CARGO_SHIP_TO_CARRY                              :{BLACK}Prenamijeni teretni brod da nosi neku drugu vrstu tereta
+STR_983B_REFIT                                                  :{WHITE}{VEHICLE} (Prenamijeni)
+STR_983C_REFIT_SHIP                                             :{BLACK}Prenamijeni brod
+STR_983D_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Odabri vrstu tereta za prijevoz brodom:
+STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED                        :{BLACK}Prenamjeni brod za prijevoz označene vrste tereta
+STR_983F_SELECT_CARGO_TYPE_TO_CARRY                             :{GOLD}Odabri vrstu tereta za prijevoz:
+STR_9840_NEW_CAPACITY_COST_OF_REFIT                             :{BLACK}Nova zapremnina: {GOLD}{CARGO}{}{BLACK}Cijena prenamjene: {GOLD}{CURRENCY}
+STR_9841_CAN_T_REFIT_SHIP                                       :{WHITE}Ne mogu prenamijeniti brod...
+STR_9842_REFITTABLE                                             :(prenamjenjiv)
+SERVICE_AT_SHIP_DEPOT                                           :Servis u brodskom spremištu grada {TOWN}
+
+##id 0xA000
+STR_A000_AIRPORTS                                               :{WHITE}Zračne luke
+STR_A001_CAN_T_BUILD_AIRPORT_HERE                               :{WHITE}Ne možeš graditi zračnu luku ovdje...
+STR_A002_AIRCRAFT_HANGAR                                        :{WHITE}{STATION} Spremište zrakoplova
+STR_A003_NEW_AIRCRAFT                                           :{BLACK}Novi zrakoplov
+STR_CLONE_AIRCRAFT                                              :{BLACK}Kloniraj zrakoplov
+STR_CLONE_AIRCRAFT_INFO                                         :{BLACK}Ovo će izgraditi kopiju zrakoplova. Control-klik će dijeliti naredbe
+STR_A005_NEW_AIRCRAFT                                           :{WHITE}Novi zrakoplov
+STR_A006_BUILD_AIRCRAFT                                         :{BLACK}Izgradi zrakoplov
+STR_A008_CAN_T_BUILD_AIRCRAFT                                   :{WHITE}Ne mogu izgraditi zrakoplov...
+STR_A009_AIRCRAFT                                               :{WHITE}{COMPANY} - {COMMA} zrakoplov
+STR_A00A                                                        :{WHITE}{VEHICLE}
+STR_A00B_ORDERS                                                 :{WHITE}{VEHICLE} (Naredbe)
+STR_A00C_DETAILS                                                :{WHITE}{VEHICLE} (Detalji)
+STR_A00D_AGE_RUNNING_COST_YR                                    :{BLACK}Starost: {LTBLUE}{STRING}{BLACK}   Troškovi uporabe {LTBLUE}{CURRENCY}/god
+STR_A00E_MAX_SPEED                                              :{BLACK}Maks brzina: {LTBLUE}{VELOCITY}
+STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Zarada ove godine: {LTBLUE}{CURRENCY}  (prošle godine: {CURRENCY})
+STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Pouzdanost: {LTBLUE}{COMMA}%  {BLACK}Kvarova od poslijednjeg servisa: {LTBLUE}{COMMA}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Izgrađen: {LTBLUE}{NUM}{BLACK} Vrijednost: {LTBLUE}{CURRENCY}
+STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Ne mogu poslati zrakoplov u hangar
+STR_A014_AIRCRAFT_IS_WAITING_IN                                 :{WHITE}Zrakoplov {COMMA} čeka u hangaru
+STR_A015_AIRCRAFT_IN_THE_WAY                                    :{WHITE}Smeta zrakoplov
+STR_A016_CAN_T_STOP_START_AIRCRAFT                              :{WHITE}Ne mogu zaustaviti/pokrenuti zrakoplov...
+STR_A017_AIRCRAFT_IS_IN_FLIGHT                                  :{WHITE}Zrakoplov je u letu
+STR_A019_CAPACITY                                               :{BLACK}Nosivost: {LTBLUE}{CARGO}, {CARGO}
+STR_A01A_CAPACITY                                               :{BLACK}Nosivost: {LTBLUE}{CARGO}
+STR_A01B_AIRCRAFT_MUST_BE_STOPPED                               :{WHITE}Zrakoplov mora biti zaustavljen u hangaru
+STR_A01C_CAN_T_SELL_AIRCRAFT                                    :{WHITE}Ne možeš prodati zrakoplov...
+STR_A01E_BUILD_AIRPORT                                          :{BLACK}Izgradi zračnu luku
+STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT                             :{BLACK}Zrakoplov - klikni na zrakoplov za informacije
+STR_A020_BUILD_NEW_AIRCRAFT_REQUIRES                            :{BLACK}Izgradi novi zrakoplov(potreban je aerodrom sa hangarom)
+STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT                             :{BLACK}Zrakoplov - kliknite na zrakoplov za informacije
+STR_A022_BUILD_NEW_AIRCRAFT                                     :{BLACK}Izgradi novi zrakoplov
+STR_A023_DRAG_AIRCRAFT_TO_HERE_TO                               :{BLACK}Povuci zrakoplov ovdje kako bi ga prodao
+STR_A024_CENTER_MAIN_VIEW_ON_HANGAR                             :{BLACK}Centriraj glavni pogled na lokaciju hangara
+STR_A025_AIRCRAFT_SELECTION_LIST                                :{BLACK}Popis zrakoplova - klini na zrakoplov za informacije
+STR_A026_BUILD_THE_HIGHLIGHTED_AIRCRAFT                         :{BLACK}Izgradi označeni zrakoplov
+STR_A027_CURRENT_AIRCRAFT_ACTION                                :{BLACK}Trenutka radnja zrakoplova - kliknite ovdje za zaustavljanje/pokretanje zrakoplova
+STR_A028_SHOW_AIRCRAFT_S_ORDERS                                 :{BLACK}Prikaži naredbe zrakoplova
+STR_A029_CENTER_MAIN_VIEW_ON_AIRCRAFT                           :{BLACK} Centrirajte glavni prozor na lokaciju zrakoplova
+STR_A02A_SEND_AIRCRAFT_TO_HANGAR                                :{BLACK}Pošaljite avion u hangar. CTRL + klik će ga samo servisirati
+STR_A02B_SHOW_AIRCRAFT_DETAILS                                  :{BLACK}Prikaži detalje zrakoplova
+
+STR_A030_NAME_AIRCRAFT                                          :{WHITE}Imenuj zrakoplov
+STR_A031_CAN_T_NAME_AIRCRAFT                                    :{WHITE}Ne mogu imenovati zrakoplov...
+STR_A032_NAME_AIRCRAFT                                          :{BLACK}Imenuj zrakoplov
+STR_A033_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Građani slave . . .{}Prvi zrakoplov stigao je na {STATION}!
+STR_A034_PLANE_CRASH_DIE_IN_FIREBALL                            :{BLACK}{BIGFONT}Pad zrakoplova!{}{COMMA} poginulih u eksploziji na {STATION}
+STR_PLANE_CRASH_OUT_OF_FUEL                                     :{BLACK}{BIGFONT}Avionska nesreća{}Avion je ostao bez goriva, {COMMA} poginulo u nesreći
+STR_A036                                                        :{TINYFONT}{BLACK}{STATION}
+STR_A037_RENAME                                                 :{BLACK}Preimenuj
+STR_A038_RENAME_AIRCRAFT_TYPE                                   :{BLACK}Preimenuj vrstu zrakoplova
+STR_A039_RENAME_AIRCRAFT_TYPE                                   :{WHITE}Preimenuj vrstu zrakoplova
+STR_A03A_CAN_T_RENAME_AIRCRAFT_TYPE                             :{WHITE}Ne mogu preimenovati vrstu zrakoplova...
+STR_A03B_REFIT_AIRCRAFT_TO_CARRY                                :{BLACK}Prenamijeni zrakoplov da nosi drugu vrstu tereta
+STR_A03C_REFIT                                                  :{WHITE}{VEHICLE} (Prenamijeni)
+STR_A03D_REFIT_AIRCRAFT                                         :{BLACK}Prenamijeni zrakoplov
+STR_A03E_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Izaberi vrstu tereta koju će zrakoplov nositi
+STR_A03F_REFIT_AIRCRAFT_TO_CARRY                                :{BLACK}Prenamijeni zrakoplov da nosi označenu vrstu tereta
+STR_A040_SELECT_CARGO_TYPE_TO_CARRY                             :{GOLD}Označi vrstu tereta za prijenos:
+STR_A041_NEW_CAPACITY_COST_OF_REFIT                             :{BLACK}Novi kapacitet: {GOLD}{STRING}{}{BLACK}Trošak prenamijene: {GOLD}{CURRENCY}
+STR_A042_CAN_T_REFIT_AIRCRAFT                                   :{WHITE}Ne mogu prenamijeniti zrakoplov...
+STR_GO_TO_AIRPORT_HANGAR                                        :Idi u {STATION} Hangar
+SERVICE_AT_AIRPORT_HANGAR                                       :Servisiranje u hangaru {STATION}
+
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Raspored)
+
+##id 0xB000
+STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Cepelin je pao kod {STATION}!
+STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Cestovno vozilo uništeno u 'NLO' sudaru!
+STR_B002_OIL_REFINERY_EXPLOSION                                 :{BLACK}{BIGFONT}Eksplozija rafinerije nafte blizu {TOWN}!
+STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS                        :{BLACK}{BIGFONT}Tvornica uništena pod sumnjivim okolnostima u blizini {TOWN}!
+STR_B004_UFO_LANDS_NEAR                                         :{BLACK}{BIGFONT}'NLO' sletio blizu {TOWN}!
+STR_B005_COAL_MINE_SUBSIDENCE_LEAVES                            :{BLACK}{BIGFONT}Urušavanje rudnika ugljena ostavilo je trag blizu {TOWN}!
+STR_B006_FLOOD_VEHICLE_DESTROYED                                :{BLACK}{BIGFONT}Poplave!{}Najmanje {COMMA} nestalih, pretpostavlja se poginulih nakon značajnih poplava!
+
+STR_BRIBE_FAILED                                                :{WHITE}Tvoj pokušaj podmićivanja je
+STR_BRIBE_FAILED_2                                              :{WHITE}otkriven od strane regionalnog istražitelja
+STR_BUILD_DATE                                                  :{BLACK}Izgrađeno: {LTBLUE}{DATE_LONG}
+
+STR_PERFORMANCE_DETAIL                                          :{WHITE}Detaljna procjena rezultata
+STR_PERFORMANCE_DETAIL_KEY                                      :{BLACK}Detalji
+STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY                          :{BLACK}({CURRCOMPACT}/{CURRCOMPACT})
+STR_PERFORMANCE_DETAIL_AMOUNT_INT                               :{BLACK}({COMMA}/{COMMA})
+STR_PERFORMANCE_DETAIL_PERCENT                                  :{WHITE}{NUM}%
+SET_PERFORMANCE_DETAIL_INT                                      :{BLACK}{NUM}
+############ Those following lines need to be in this order!!
+STR_PERFORMANCE_DETAIL_VEHICLES                                 :{BLACK}Vozila:
+STR_PERFORMANCE_DETAIL_STATIONS                                 :{BLACK}Stations:
+STR_PERFORMANCE_DETAIL_MIN_PROFIT                               :{BLACK}Min. prihod:
+STR_PERFORMANCE_DETAIL_MIN_INCOME                               :{BLACK}Min. prihod:
+STR_PERFORMANCE_DETAIL_MAX_INCOME                               :{BLACK}Maks. prihod:
+STR_PERFORMANCE_DETAIL_DELIVERED                                :{BLACK}Dostavljeno:
+STR_PERFORMANCE_DETAIL_CARGO                                    :{BLACK}Cargo:
+STR_PERFORMANCE_DETAIL_MONEY                                    :{BLACK}Novac:
+STR_PERFORMANCE_DETAIL_LOAN                                     :{BLACK}Zajam:
+STR_PERFORMANCE_DETAIL_TOTAL                                    :{BLACK}Totalno:
+############ End of order list
+STR_PERFORMANCE_DETAIL_VEHICLES_TIP                             :{BLACK}Broj vozila; ovo uključuje cestovna vozila, vlakove, brodove i avione
+STR_PERFORMANCE_DETAIL_STATIONS_TIP                             :{BLACK}Broj dijelova stanice. Svaki dio stanice (npr. željeznički kolodvor, autobusna postaja, aerodrom) se računa, čak i ako su spojene kao jedna stanica
+STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP                           :{BLACK}Profit vozila sa najnižim prihodom(od svih vozila starijih od 2 godine)
+STR_PERFORMANCE_DETAIL_MIN_INCOME_TIP                           :{BLACK}Količina gotovine ostvarene u mjesecu sa najnižim profitom u zadnjih 12 četvrtina
+STR_PERFORMANCE_DETAIL_MAX_INCOME_TIP                           :{BLACK}Količina gotovine ostvarene u mjesecu za najvišim profitom u zadnjih 12 četvrtina
+STR_PERFORMANCE_DETAIL_DELIVERED_TIP                            :{BLACK}Jedinice tereta dostavljene u zadnje četiri četvrtine
+STR_PERFORMANCE_DETAIL_CARGO_TIP                                :{BLACK}Broj vrsta tereta dostavljenog u zadnjoj četvrtini
+STR_PERFORMANCE_DETAIL_MONEY_TIP                                :{BLACK}Količina novca koji ova kompanija ima u banci
+STR_PERFORMANCE_DETAIL_LOAN_TIP                                 :{BLACK}Iznos novca koji je ova kompanija pozajmila
+STR_PERFORMANCE_DETAIL_TOTAL_TIP                                :{BLACK}Totalni broj bodova od mogućih bodova
+
+STR_NEWGRF_SETTINGS_BUTTON                                      :{BLACK}NewGRF Postavke
+STR_NEWGRF_SETTINGS_CAPTION                                     :{WHITE}NewGRF postavke
+STR_NEWGRF_APPLY_CHANGES                                        :{BLACK}Potvrdi promjene
+STR_NEWGRF_SET_PARAMETERS                                       :{BLACK}Postavi parametre
+STR_NEWGRF_TIP                                                  :{BLACK}Lista svih newGRF setova koje ste instalirali. Kliknite na set za promjenu postavki
+STR_NEWGRF_NO_FILES_INSTALLED                                   :{BLACK}Nema novih newgrf datoteka instaliranih! Molimo pogledajte manual za upute o tome kako instalirati novu grafiku
+STR_NEWGRF_FILENAME                                             :{BLACK}Datoteka: {SILVER}{STRING}
+STR_NEWGRF_GRF_ID                                               :{BLACK}GRF ID: {SILVER}{STRING}
+STR_NEWGRF_MD5SUM                                               :{BLACK}MD5 suma: {SILVER}{STRING}
+STR_NEWGRF_CONFIRMATION_TEXT                                    :{YELLOW}Spremate se napraviti izmjene na pokrenutoj igri; to može srušiti OpenTTD.{}Jeste li potpuno sigurni u to?
+
+STR_NEWGRF_ERROR_MSG_INFO                                       :{SILVER}{STRING}
+STR_NEWGRF_ERROR_MSG_WARNING                                    :{RED}Upozorenje: {SILVER}{STRING}
+STR_NEWGRF_ERROR_MSG_ERROR                                      :{RED}Greška: {SILVER}{STRING}
+STR_NEWGRF_ERROR_MSG_FATAL                                      :{RED}Kobno: {SILVER}{STRING}
+STR_NEWGRF_ERROR_VERSION_NUMBER                                 :{STRING} neće raditi sa inačicom zakrpe u OpenTTD-u.
+STR_NEWGRF_ERROR_DOS_OR_WINDOWS                                 :{STRING} je za {STRING} inačicu TTD-a.
+STR_NEWGRF_ERROR_UNSET_SWITCH                                   :{STRING} je napravljen da se koristi sa {STRING}
+STR_NEWGRF_ERROR_INVALID_PARAMETER                              :Nevažeći parametar za  {STRING}: parametar {STRING} ({NUM})
+STR_NEWGRF_ERROR_LOAD_BEFORE                                    :{STRING} se mora učitati prije {STRING}.
+STR_NEWGRF_ERROR_LOAD_AFTER                                     :{STRING} se mora učitati nakon {STRING}.
+STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE                          :GRF datoteka je dizajnirana za prijevod
+
+STR_NEWGRF_ADD                                                  :{BLACK}Dodaj
+STR_NEWGRF_ADD_TIP                                              :{BLACK}Dodaj NewGRF datoteku u listu
+STR_NEWGRF_REMOVE                                               :{BLACK}Obriši
+STR_NEWGRF_REMOVE_TIP                                           :{BLACK}Obriši odabranu NewGRF datoteku sa liste
+STR_NEWGRF_MOVEUP                                               :{BLACK}Pomakni gore
+STR_NEWGRF_MOVEUP_TIP                                           :{BLACK}Pomakni odabranu NewGRF datoteku gore na listi
+STR_NEWGRF_MOVEDOWN                                             :{BLACK} Pomakni dolje
+STR_NEWGRF_MOVEDOWN_TIP                                         :{BLACK}Pomakni odabranu NewGRF datoteku dolje na listi
+STR_NEWGRF_FILE_TIP                                             :{BLACK}Popis instaliranih NewGRF datoteka. Kliknite na datoteku da bi promijenili njene parametre
+STR_NEWGRF_PARAMETER                                            :{BLACK}Parametri: {SILVER}{STRING}
+STR_NEWGRF_PARAMETER_QUERY                                      :{BLACK}Unesite NewGRF  parametre
+STR_NEWGRF_NO_INFO                                              :{BLACK}Nema dostupnih informacija
+
+STR_NEWGRF_ADD_CAPTION                                          :{WHITE}Dostupne NewGRF datoteke
+STR_NEWGRF_ADD_FILE                                             :{BLACK}Dodaj u selekciju
+STR_NEWGRF_ADD_FILE_TIP                                         :{BLACK}Dodaj odabrane NewGRF datoteke u svoju konfiguraciju
+STR_NEWGRF_RESCAN_FILES                                         :{BLACK}Ponovno skeniraj datoteke
+STR_NEWGRF_RESCAN_FILES_TIP                                     :{BLACK}Osvježi listu dostupnih NewGRF datoteka
+STR_NEWGRF_DUPLICATE_GRFID                                      :{WHITE}Ne mogu dodati datoteku: dupli GRF ID
+
+STR_NEWGRF_NOT_FOUND                                            :{RED}Odgovarajuća datoteka nije pronađena
+STR_NEWGRF_DISABLED                                             :{RED}Onemogućeno
+STR_NEWGRF_COMPATIBLE_LOADED                                    :{ORANGE}Odgovarajuća datoteka nije pronađena (kompatibilni GRF podignut)
+
+STR_NEWGRF_COMPATIBLE_LOAD_WARNING                              :{WHITE}Kompatibilni GRF(ovi) učitani umjesto nepronađenih datoteka
+STR_NEWGRF_DISABLED_WARNING                                     :{WHITE}Nepronađene GRF datoteke su isključene
+STR_NEWGRF_NOT_FOUND_WARNING                                    :{WHITE}Nedostaje(u) datoteka(e) GRF za učitavanje igre
+
+STR_CURRENCY_WINDOW                                             :{WHITE}Proizvoljna valuta
+STR_CURRENCY_EXCHANGE_RATE                                      :{LTBLUE}Devizni tečaj: {ORANGE}{CURRENCY} = £ {COMMA}
+STR_CURRENCY_SEPARATOR                                          :{LTBLUE}Razdjelnik:
+STR_CURRENCY_PREFIX                                             :{LTBLUE}Prefiks:
+STR_CURRENCY_SUFFIX                                             :{LTBLUE}Sufiks:
+STR_CURRENCY_SWITCH_TO_EURO                                     :{LTBLUE}Prebaci se na euro: {ORANGE}{NUM}
+STR_CURRENCY_SWITCH_TO_EURO_NEVER                               :{LTBLUE}Prebaci se na euro: {ORANGE}nikad
+STR_CURRENCY_PREVIEW                                            :{LTBLUE}Prikaz: {ORANGE}{CURRENCY}
+STR_CURRENCY_CHANGE_PARAMETER                                   :{BLACK}Promijeni parametar proizvoljne valute
+
+STR_TRAIN                                                       :{BLACK}{TRAIN}
+STR_BUS                                                         :{BLACK}{BUS}
+STR_LORRY                                                       :{BLACK}{LORRY}
+STR_PLANE                                                       :{BLACK}{PLANE}
+STR_SHIP                                                        :{BLACK}{SHIP}
+
+STR_SCHEDULED_TRAINS                                            :{WHITE}{STATION} - {COMMA} Vlak{P "" a ova}
+STR_SCHEDULED_ROAD_VEHICLES                                     :{WHITE}{STATION} - {COMMA} Cestovn{P o a ih} vozil{P o a a}
+STR_SCHEDULED_AIRCRAFT                                          :{WHITE}{STATION} - {COMMA} Zrakoplov
+STR_SCHEDULED_SHIPS                                             :{WHITE}{STATION} - {COMMA} Brod{P "" a ova}
+
+STR_SCHEDULED_TRAINS_TIP                                        :{BLACK}Prikaži sve vlakove koji imaju ovu stanicu u svom rasporedu
+STR_SCHEDULED_ROAD_VEHICLES_TIP                                 :{BLACK}Prikaži sva cestovna vozila koja imaju ovu stanicu u svom rasporedu
+STR_SCHEDULED_AIRCRAFT_TIP                                      :{BLACK}Prikaži sve zrakoplove koji imaju ovu stanicu u svom rasporedu
+STR_SCHEDULED_SHIPS_TIP                                         :{BLACK}Prikaži sve brodove koji imaju ovu stanicu u svom rasporedu
+
+STR_VEH_WITH_SHARED_ORDERS_LIST                                 :{WHITE}Djeljene naredbe za {COMMA} vozil{P o a a}
+STR_VEH_WITH_SHARED_ORDERS_LIST_TIP                             :{BLACK}Prikaži sva vozila koja dijele ovaj raspored.
+
+### depot strings
+STR_DEPOT_SELL_CONFIRMATION_TEXT                                :{YELLOW}Upravo se spremaš prodati sva vozila u spremištu. Jesi li siguran?
+STR_DEPOT_WRONG_DEPOT_TYPE                                      :Pogrešna vrsta skladišta
+
+STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP                             :{BLACK}Prodaj sve vlakove u spremištu
+STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP                           :{BLACK}Prodaj sva cestovna vozila u spremištu
+STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP                              :{BLACK}Prodaj sve brodove u spremištu
+STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP                          :{BLACK}Prodaj sve zrakoplove u hangaru
+
+STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TIP                          :{BLACK}Daje popis svih vlakova u trenutnom spremištu, zajedno s njihovim naredbama
+STR_DEPOT_VEHICLE_ORDER_LIST_ROADVEH_TIP                        :{BLACK}Daje popis svih cestovnih vozila u trenutnom spremištu, zajedno s njihovim naredbama
+STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TIP                           :{BLACK}Daje popis svih brodova u trenutnom spremištu, zajedno s njihovim naredbama
+STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TIP                       :{BLACK}Daje popis svih zrakoplova u trenutnom spremištu, zajedno s njihovim naredbama
+
+STR_DEPOT_AUTOREPLACE_TRAIN_TIP                                 :{BLACK}Automatski zamijeni sve vlakove u spremištu
+STR_DEPOT_AUTOREPLACE_ROADVEH_TIP                               :{BLACK}Automatski zamijeni sva cestovna vozikla u spremištu
+STR_DEPOT_AUTOREPLACE_SHIP_TIP                                  :{BLACK}Automatski zamijeni sve brodove u spremištu
+STR_DEPOT_AUTOREPLACE_AIRCRAFT_TIP                              :{BLACK}Automatski zamijeni sve zrakoplove u spremištu
+
+STR_VEHICLE_LIST_TRAIN_DEPOT                                    :{BLACK}{STRING} - {COMMA} Vlak{P "" a ova}
+STR_VEHICLE_LIST_ROADVEH_DEPOT                                  :{BLACK}{STRING} - {COMMA} Cestovn{P o a ih} vozil{P o a a}
+STR_VEHICLE_LIST_SHIP_DEPOT                                     :{BLACK}{STRING} - {COMMA} Brod{P "" a ova}
+STR_VEHICLE_LIST_AIRCRAFT_DEPOT                                 :{BLACK}{STRING} - {COMMA} Zrakoplov
+
+STR_REPLACE_VEHICLES_WHITE                                      :{WHITE}Zamijeni {STRING}
+STR_REPLACE_VEHICLES_START                                      :{BLACK}Počni zamijenjivati vozila
+STR_REPLACE_VEHICLES_STOP                                       :{BLACK}Prestani zamijenjivati vozila
+STR_NOT_REPLACING                                               :{BLACK}Ne zamijenjujem
+STR_NOT_REPLACING_VEHICLE_SELECTED                              :{BLACK}Niti jedno vozilo nije odabrano
+STR_REPLACE_HELP_LEFT_ARRAY                                     :{BLACK}Izaberi vrstu motora koju želiš zamijeniti
+STR_REPLACE_HELP_RIGHT_ARRAY                                    :{BLACK}Odaberite novi tip lokomotive koji želite koristiti umjesto lijevo odabranog tipa lokomotive
+STR_REPLACE_HELP_STOP_BUTTON                                    :{BLACK}Klikni za zaustavljanje zamjene lijevo odabranog tipa lokomotive
+STR_REPLACE_HELP_START_BUTTON                                   :{BLACK}Klikni za početak zamjene lijevo odabrane lokomotive sa desno odabranim tipom
+STR_REPLACE_HELP_RAILTYPE                                       :{BLACK}Odaberite tip tračnica za koji želite zamijeniti lokomotive
+STR_REPLACE_HELP_REPLACE_INFO_TAB                               :{BLACK}Prikazuje sa kojom se lokomotivom zamjenjuje lijevo odabrana lokomotiva, ako postoji koji
+STR_REPLACE_HELP                                                :{BLACK}Ovo dozvoljava zamjenu jednog tipa lokomotive sa drugim, kada vlakovi prvotnog tipa uđu u stovarište
+STR_REPLACE_REMOVE_WAGON                                        :{BLACK}Brisanje vagona: {ORANGE}{SKIP}{STRING}
+STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Neka automatska zamijena drži dužinu vlaka istom brišući vagone(počevši od naprijed), ako bi zamijena lokomotive vlak učinila dužim.
+STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Zamjenjujem:{ORANGE}{SKIP}{SKIP}{STRING}
+STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK}EXPERIMENTALNA FUNKCIJA {} Prebaci između prozora za izmjenu lokomotiva i vagona.{}Izmjena vagona će se izvršiti samo ako novi vagon može biti prenamijenjen za prijevoz istog tipa tereta kao i stari vagon. Ovo se provjerava za svaki vagon kada se stvarna zamjena odvija.
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Vozilo nije dostupno
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Vozilo nije dostupno
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Brod nije dostupan
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Zrakoplov nije dostupan
+
+STR_ENGINES                                                     :Lokomotive
+STR_WAGONS                                                      :Vagoni
+
+STR_MASS_STOP_DEPOT_TRAIN_TIP                                   :{BLACK}Pritisni za zaustavljanje svih vlakova u spremištu
+STR_MASS_STOP_DEPOT_ROADVEH_TIP                                 :{BLACK}Pritisni za zaustavljanje svih cestovnih vozila u spremištu
+STR_MASS_STOP_DEPOT_SHIP_TIP                                    :{BLACK}Pritisni za zaustavljanje svih brodova u spremištu
+STR_MASS_STOP_HANGAR_TIP                                        :{BLACK}Pritisni za zaustavljanje svih zrakoplova u hangaru
+
+STR_MASS_START_DEPOT_TRAIN_TIP                                  :{BLACK}Pritisni za pokretanje svih vlakova u spremištu
+STR_MASS_START_DEPOT_ROADVEH_TIP                                :{BLACK}Pritisni za pokretanje svih cestovnih vozila u spremištu
+STR_MASS_START_DEPOT_SHIP_TIP                                   :{BLACK}Pritisni za pokretanje svih brodova u spremištu
+STR_MASS_START_HANGAR_TIP                                       :{BLACK}Klikni za pokretanje svih aviona u hangaru
+
+STR_MASS_STOP_LIST_TIP                                          :{BLACK}Klikni za zaustavljanje svih vozila na listi
+STR_MASS_START_LIST_TIP                                         :{BLACK}Klikni za pokretanje svih vozila na listi
+
+STR_SHORT_DATE                                                  :{WHITE}{DATE_TINY}
+STR_SIGN_LIST_CAPTION                                           :{WHITE}Popis znakova - {COMMA} Znak{P "" a ova}
+
+STR_ORDER_REFIT_FAILED                                          :{WHITE}Prepravke narudžbi nisu uspjele {STRING} {COMMA}
+
+############ Lists rail types
+
+STR_RAIL_VEHICLES                                               :Tračna Vozila
+STR_ELRAIL_VEHICLES                                             :Električna željeznička vozila
+STR_MONORAIL_VEHICLES                                           :Jednotračna vozila
+STR_MAGLEV_VEHICLES                                             :Maglev željeznička vozila
+
+############ End of list of rail types
+
+STR_TINY_BLACK                                                  :{BLACK}{TINYFONT}{COMMA}
+
+STR_PURCHASE_INFO_COST_WEIGHT                                   :{BLACK}Trošak: {GOLD}{CURRENCY}{BLACK} Težina {GOLD}{WEIGHT_S}
+STR_PURCHASE_INFO_SPEED_POWER                                   :{BLACK}Brzina: {GOLD}{VELOCITY}{BLACK} Snaga: {GOLD}{POWER}
+STR_PURCHASE_INFO_SPEED                                         :{BLACK}Brzina: {GOLD}{VELOCITY}
+STR_PURCHASE_INFO_RUNNINGCOST                                   :{BLACK}Radni trošak: {GOLD}{CURRENCY}/god
+STR_PURCHASE_INFO_CAPACITY                                      :{BLACK}Kapacitet: {GOLD}{CARGO}{STRING}
+STR_PURCHASE_INFO_DESIGNED_LIFE                                 :{BLACK}Dizajnirana: {GOLD}{NUM}{BLACK} Životni vijek: {GOLD}{COMMA} godina
+STR_PURCHASE_INFO_RELIABILITY                                   :{BLACK}Maks. pouzdanost: {GOLD}{COMMA}%
+STR_PURCHASE_INFO_COST                                          :{BLACK}Trošak: {GOLD}{CURRENCY}
+STR_PURCHASE_INFO_WEIGHT_CWEIGHT                                :{BLACK}Težina: {GOLD}{WEIGHT_S} ({WEIGHT_S})
+STR_PURCHASE_INFO_COST_SPEED                                    :{BLACK}Trošak: {GOLD}{CURRENCY}{BLACK} Brzina: {GOLD}{VELOCITY}
+STR_PURCHASE_INFO_AIRCRAFT_CAPACITY                             :{BLACK}Zapremnina: {GOLD}{COMMA} putnika, {COMMA} vreća s poštom
+STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT                          :{BLACK} Pokretni vagoni:.{GOLD}+{POWER}{BLACK} Težina: {GOLD}+{WEIGHT_S}
+STR_PURCHASE_INFO_REFITTABLE_TO                                 :{BLACK}Promjenjivo u: {GOLD}
+STR_PURCHASE_INFO_ALL_TYPES                                     :Svi tipovi tereta
+STR_PURCHASE_INFO_ALL_BUT                                       :Sve osim {GOLD}
+STR_PURCHASE_INFO_MAX_TE                                        :{BLACK} Maks. vučni napor: {GOLD}{FORCE}
+
+########### String for New Landscape Generator
+
+STR_GENERATE                                                    :{WHITE}Izradi
+STR_RANDOM                                                      :{BLACK}Nasumično
+STR_RANDOM_HELP                                                 :{BLACK}Promijeni slučajni slijed koji se koristi za kreiranje terena
+STR_WORLD_GENERATION_CAPTION                                    :{WHITE}Izrada svijeta
+STR_RANDOM_SEED                                                 :{BLACK}Nasumični slijed:
+STR_RANDOM_SEED_HELP                                            :{BLACK}Klikni za unos nasumičnog slijeda
+STR_LAND_GENERATOR                                              :{BLACK}Izrađivač zemljišta:
+STR_TREE_PLACER                                                 :{BLACK} Algoritam za drveće:
+STR_HEIGHTMAP_ROTATION                                          :{BLACK}Rotacija visinske mape:
+STR_TERRAIN_TYPE                                                :{BLACK}Tip terena:
+STR_QUANTITY_OF_SEA_LAKES                                       :{BLACK}Razina mora:
+STR_SMOOTHNESS                                                  :{BLACK}Graduacija:
+STR_SNOW_LINE_HEIGHT                                            :{BLACK}Visina linije snijega
+STR_DATE                                                        :{BLACK}Datum:
+STR_NUMBER_OF_TOWNS                                             :{BLACK}Broj gradova:
+STR_NUMBER_OF_INDUSTRIES                                        :{BLACK}Broj industrija:
+STR_GENERATE_DATE                                               :{BLACK}{DATE_LONG}
+STR_SNOW_LINE_UP                                                :{BLACK}Pomakni visinu linije snijega za jedan gore
+STR_SNOW_LINE_DOWN                                              :{BLACK}Pomakni visinu linije snijega za jedan dolje
+STR_SNOW_LINE_QUERY_CAPT                                        :{WHITE}Promijeni visinu linije snijega
+STR_START_DATE_QUERY_CAPT                                       :{WHITE}Promijeni početnu godinu
+STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Upozorenje o veličini
+STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}Prekomjerna promjena veličine mape nije preporučena. Nastaviti sa kreiranjem?
+STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
+STR_HEIGHTMAP_SIZE                                              :{BLACK}Veličina: {ORANGE}{NUM} x {NUM}
+STR_GENERATION_WORLD                                            :{WHITE}Izrada svijeta u toku...
+STR_GENERATION_ABORT                                            :{BLACK}Prekini
+STR_GENERATION_ABORT_CAPTION                                    :{WHITE}Poništi izradu svijeta
+STR_GENERATION_ABORT_MESSAGE                                    :{YELLOW}Da li zaista želiš prekinuti izradu?
+STR_PROGRESS                                                    :{WHITE}{NUM}% gotovo
+STR_GENERATION_PROGRESS                                         :{BLACK}{NUM} / {NUM}
+STR_WORLD_GENERATION                                            :{BLACK}Izrada svijeta
+STR_TREE_GENERATION                                             :{BLACK}Generiranje drveća
+STR_CLEARING_TILES                                              :{BLACK}Generiranje grubog i stjenovitog područja
+STR_SETTINGUP_GAME                                              :{BLACK}Uspostavljam igru
+STR_PREPARING_TILELOOP                                          :{BLACK}Izvršavam tile-petlju
+STR_PREPARING_GAME                                              :{BLACK}Pripremam igru
+STR_SE_FLAT_WORLD                                               :{WHITE}Ravna zemlja
+STR_SE_FLAT_WORLD_TIP                                           :{BLACK}Kreiraj ravan teren
+STR_SE_RANDOM_LAND                                              :{WHITE}Nasumični teren
+STR_SE_NEW_WORLD                                                :{BLACK}Kreiraj novi scenarij
+STR_SE_CAPTION                                                  :{WHITE}Vrsta scenarija
+STR_FLAT_WORLD_HEIGHT_DOWN                                      :{BLACK}Snizi ravnu površinu za jedan korak
+STR_FLAT_WORLD_HEIGHT_UP                                        :{BLACK}Povisi ravnu površinu za jedan korak
+STR_FLAT_WORLD_HEIGHT_QUERY_CAPT                                :{WHITE}Promijeni visinu ravne površine
+STR_FLAT_WORLD_HEIGHT                                           :{BLACK}Visina ravne površine:
+STR_FLAT_WORLD_HEIGHT_NUM                                       :{NUM}
+
+STR_SMALLMAP_CENTER                                             :{BLACK}Centriraj malu mapu na trenutni položaj
+
+########### String for new airports
+STR_SMALL_AIRPORT                                               :{BLACK}Mala
+STR_CITY_AIRPORT                                                :{BLACK}Grad
+STR_METRO_AIRPORT                                               :{BLACK}Metropolitanski airport
+STR_INTERNATIONAL_AIRPORT                                       :{BLACK}Međunarodni aerodrom
+STR_COMMUTER_AIRPORT                                            :{BLACK}Redoviti putnik
+STR_INTERCONTINENTAL_AIRPORT                                    :{BLACK}Međukontinentalni
+STR_HELIPORT                                                    :{BLACK}Heliodrom
+STR_HELIDEPOT                                                   :{BLACK}Spremište za helikoptere
+STR_HELISTATION                                                 :{BLACK}Stanica za helikoptere
+
+STR_SMALL_AIRPORTS                                              :{BLACK}Mali aerodromi
+STR_LARGE_AIRPORTS                                              :{BLACK}Veliki aerodromi
+STR_HUB_AIRPORTS                                                :{BLACK}Središnje zračne luke
+STR_HELIPORTS                                                   :{BLACK}Helicopterske zračne luke
+
+############ Tooltip measurment
+
+STR_MEASURE_LENGTH                                              :{BLACK}Dužina:{NUM}
+STR_MEASURE_AREA                                                :{BLACK}Područje:{NUM}x{NUM}
+STR_MEASURE_LENGTH_HEIGHTDIFF                                   :{BLACK}Dužina:{NUM}{}Visinska razlika:{NUM} m
+STR_MEASURE_AREA_HEIGHTDIFF                                     :{BLACK}Područje:{NUM}x{NUM}Visinska razlika:{NUM} m
+
+############ Date formatting
+STR_DATE_TINY                                                   :{STRING}-{STRING}-{NUM}
+STR_DATE_SHORT                                                  :{STRING} {NUM}
+STR_DATE_LONG                                                   :{STRING} {STRING} {NUM}
+
+########
+
+STR_FEEDER_CARGO_VALUE                                          :{BLACK}Prebaci novac: {LTBLUE}{CURRENCY}
+
+
+
+##### Mass Order
+
+
+
+
+
+
+
+########
--- a/src/lang/czech.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/czech.txt	Sat Jul 14 19:42:58 2007 +0000
@@ -1,6 +1,6 @@
 ##name Czech
-##ownname Česky
-##isocode cs_CS
+##ownname Čeština
+##isocode cs_CZ
 ##plural 6
 ##case nom gen dat acc voc loc ins big
 ##gender f m n
@@ -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.
@@ -836,6 +836,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Nastavení obtížnosti
 STR_02C7_CONFIG_PATCHES                                         :Nastavení patchů
 STR_NEWGRF_SETTINGS                                             :Nastavení newgrf
+STR_TRANSPARENCY_OPTIONS                                        :Nastavení průhlednosti
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Zobrazení jmen měst
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Zobrazení jmen stanic
@@ -863,7 +864,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Mapa světa
 STR_EXTRA_VIEW_PORT                                             :Další pohled
 STR_SIGN_LIST                                                   :Seznam popisků
-STR_TRANSPARENCY_OPTIONS                                        :Nastavení průhlednosti
 STR_02DF_TOWN_DIRECTORY                                         :Seznam měst
 STR_TOWN_POPULATION                                             :{BLACK}Populace světa: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Pohled {COMMA}
@@ -1092,7 +1092,10 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Vozit zboží do stanice jen když je poptávka: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Povolit stavbu velmi dlouhých mostů: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Povolit příkaz 'jeď do depa': {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Povolit výstavbu průmyslu těžícího surový materiál: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}Způsob manuálního budování průmyslu těžby surovin: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :žádný
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :jako u ostatniho průmyslu
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :průzkum
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Povolit více stejného průmyslu kolem jednoho města: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Průmysl stejného druhu může být budován poblíž sebe: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Ukazovat dlouhé datum ve stavové liště: {ORANGE}{STRING}
@@ -1127,7 +1130,7 @@
 STR_CONFIG_PATCHES_LAND_GENERATOR                               :{LTBLUE}Tvůrce krajiny: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LAND_GENERATOR_ORIGINAL                      :původní
 STR_CONFIG_PATCHES_LAND_GENERATOR_TERRA_GENESIS                 :TerraGenesis
-STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE                        :{LTBLUE}Maximální vzdálenost ropných rafinerií od okraje mapy {ORANGE}{STRING}
+STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE                        :{LTBLUE}Maximální vzdálenost ropných rafinerií od okraje mapy: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SNOWLINE_HEIGHT                              :{LTBLUE}Výška sněhové čáry: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN                         :{LTBLUE}Členitost krajiny (jen TerraGenesis): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH             :velmi rovná
@@ -1147,6 +1150,7 @@
 STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Údržba vrtulníků na heliportech: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Otevírat lištu na úpravy terénu s lištami na výstavbu tratí/silnic atd.: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Posouvat pohled opačným směrem: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING                             :{LTBLUE}Plynulé posouvání po mapě: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Ukázat rozměry při použití stavebních nástrojů: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Zobrazovat barvy společnosti pro: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES_NONE                                :žádnou společnost
@@ -1160,7 +1164,19 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Rychlost skrolovacího kolečka: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Zastavit automaticky hru při začínání nové hry: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Používat pokročilý seznam vozidel: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Používat ukazatele naložení: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Povolit jizdní řády vozidel: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Zobrazit jízdní řády v cyklech místo ve dnech: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE                            :{LTBLUE}Standardní druh kolejí (v nové hře/po načtení hry): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Normální koleje
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Elektrifikované koleje
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Monorail
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :První dostupný
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :Nejlepší dostupný
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :Nejpoužívanější
 
+STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Zobrazit nástroje pro budování i bez dostupných vozidel: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maximum vlaků na hráče: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Maximum silničních vozidel na hráče: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Maximum letadel na hráče: {ORANGE}{STRING}
@@ -1243,7 +1259,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}
@@ -1283,7 +1299,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Opravdu chceš vytvořit nový náhodný terén?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Hodně náhodných měst
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Pokryje krajinu mnoha náhodnými městy
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Hodně náhodného průmyslu
+STR_MANY_RANDOM_INDUSTRIES                                      :Hodně náhodného průmyslu
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Pokryje krajinu náhodným průmyslem
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Nemůžu generovat průmysl...
 
@@ -1454,6 +1470,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :Angličtina
 STR_NETWORK_LANG_GERMAN                                         :Němčina
 STR_NETWORK_LANG_FRENCH                                         :Francouzština
+STR_NETWORK_LANG_BRAZILIAN                                      :Brazilská portugalština
+STR_NETWORK_LANG_BULGARIAN                                      :Bulharština
+STR_NETWORK_LANG_CHINESE                                        :Čínština
+STR_NETWORK_LANG_CZECH                                          :Čeština
+STR_NETWORK_LANG_DANISH                                         :Dánština
+STR_NETWORK_LANG_DUTCH                                          :Nizozemština
+STR_NETWORK_LANG_ESPERANTO                                      :Esperanto
+STR_NETWORK_LANG_FINNISH                                        :Finština
+STR_NETWORK_LANG_HUNGARIAN                                      :Maďarština
+STR_NETWORK_LANG_ICELANDIC                                      :Islandština
+STR_NETWORK_LANG_ITALIAN                                        :Italština
+STR_NETWORK_LANG_JAPANESE                                       :Japonština
+STR_NETWORK_LANG_KOREAN                                         :Korejština
+STR_NETWORK_LANG_LITHUANIAN                                     :Litevština
+STR_NETWORK_LANG_NORWEGIAN                                      :Norština
+STR_NETWORK_LANG_POLISH                                         :Polština
+STR_NETWORK_LANG_PORTUGUESE                                     :Portugalština
+STR_NETWORK_LANG_ROMANIAN                                       :Rumunština
+STR_NETWORK_LANG_RUSSIAN                                        :Ruština
+STR_NETWORK_LANG_SLOVAK                                         :Slovenština
+STR_NETWORK_LANG_SLOVENIAN                                      :Slovinština
+STR_NETWORK_LANG_SPANISH                                        :Španělština
+STR_NETWORK_LANG_SWEDISH                                        :Švédština
+STR_NETWORK_LANG_TURKISH                                        :Turečtina
+STR_NETWORK_LANG_UKRAINIAN                                      :Ukrajinština
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Vstupní místnost do multiplayerové hry
@@ -1473,9 +1514,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}
@@ -1647,6 +1688,12 @@
 STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Železniční trať s presignály
 STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Železniční trať s výstupními signály
 STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Železniční trať s kombinovanými signály
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Koleje s normálním a vjezdovým návěstím (pre-signal)
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Koleje s normálním a výjezdovým návěstím (exit-signal)
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Koleje s normálním a cestovým návěstím (combo-signal)
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Koleje s vjezdovým (pre-signal) a výjezdovým návěstím (exit-signal)
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Koleje s vjezdovým (pre-signal) a cestovým návěstím (combo-signal)
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Koleje s výjezdovým (exit-signal) a cestovým návěstím (combo-signal)
 STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Je nejprve nutno odstranit stanici
 
 
@@ -1655,22 +1702,39 @@
 STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Musíš nejprve odstranit silnici
 STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Silnice je v rekonstrukci
 STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Výstavba silnic
+STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Výstavba tramvajové tratě
 STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Zvolit silniční most
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}... na jednosměrných silnicích nemůžou být křižovatky
 STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Zde nemohu postavit silnici...
+STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}Zde není možné postavit tramvajovou trať...
 STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Nemohu odsud odstranit silnici
+STR_1805_CAN_T_REMOVE_TRAMWAY_FROM                              :{WHITE}Není možné odsud odstranit tramvajovou trať...
 STR_1806_ROAD_DEPOT_ORIENTATION                                 :{WHITE}Orientace garáže
+STR_1806_TRAM_DEPOT_ORIENTATION                                 :{WHITE}Orientace tramvajového depa
 STR_1807_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}Tady nejde postavit garáž
+STR_1807_CAN_T_BUILD_TRAM_VEHICLE                               :{WHITE}Zde není možné postavit depo pro tramvaje...
 STR_1808_CAN_T_BUILD_BUS_STATION                                :{WHITE}Nemohu postavit autobusovou stanici...
 STR_1809_CAN_T_BUILD_TRUCK_STATION                              :{WHITE}Nemohu postavit nákladovou rampu...
+STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION                     :{WHITE}Není možné postavit tramvajovou stanici pro cestující...
+STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION                         :{WHITE}Není možné postavit tramvajovou stanici pro cestující...
 STR_180A_ROAD_CONSTRUCTION                                      :Výstavba silnic
+STR_180A_TRAMWAY_CONSTRUCTION                                   :Výstavba tramvajové tratě
 STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Postavit silnici
+STR_180B_BUILD_TRAMWAY_SECTION                                  :{BLACK}Položit kus kolejí pro tramvaje
 STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Postavit garáž (pro nákup a servis vozidel)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT                               :{BLACK}Vystavět tramvajové depo (na kupování a servis tramvají)
 STR_180D_BUILD_BUS_STATION                                      :{BLACK}Postavit autobusovou stanici
 STR_180E_BUILD_TRUCK_LOADING_BAY                                :{BLACK}Postavit nákladovou rampu
+STR_180D_BUILD_PASSENGER_TRAM_STATION                           :{BLACK}Postavit tramvajovou stanici pro cestující
+STR_180E_BUILD_CARGO_TRAM_STATION                               :{BLACK}Postavit nákladní tramvajovou stanici
 STR_180F_BUILD_ROAD_BRIDGE                                      :{BLACK}Postavit silniční most
+STR_180F_BUILD_TRAMWAY_BRIDGE                                   :{BLACK}Postavit tramvajový most
 STR_1810_BUILD_ROAD_TUNNEL                                      :{BLACK}Postavit silniční tunel
+STR_1810_BUILD_TRAMWAY_TUNNEL                                   :{BLACK}Postavit tramvajový tunel
 STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Přepnout stavba / odstranění silnice
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS                       :{BLACK}Přepínání mezi výstavbou a bouráním tramvajové tratě
 STR_1813_SELECT_ROAD_VEHICLE_DEPOT                              :{BLACK}Výběr orientace garáže
+STR_1813_SELECT_TRAM_VEHICLE_DEPOT                              :{BLACK}Zvol směr tramvajového depa
 STR_1814_ROAD                                                   :Silnice
 STR_1815_ROAD_WITH_STREETLIGHTS                                 :Silnice s pouličním osvětlením
 STR_1816_TREE_LINED_ROAD                                        :Silnice s alejí
@@ -1678,6 +1742,8 @@
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Železniční přejezd
 STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Nelze odstranit autobusovou zastávku...
 STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Nelze odstranit nakládací rampu...
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION                         :{WHITE}Nelze zbourat tramvajovou stanici pro cestující...
+STR_CAN_T_REMOVE_CARGO_TRAM_STATION                             :{WHITE}Nelze odstranit nákladní tramvajovou stanici...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Města
@@ -1685,7 +1751,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}
@@ -1718,7 +1784,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}
@@ -1789,7 +1855,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
@@ -1842,8 +1908,12 @@
 STR_3041_NOW_ACCEPTS_AND                                        :{WHITE}{STATION} nyní přijímá {STRING} a {STRING}
 STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Orientace autobusové zastávky.
 STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Orientace nákladové rampy
+STR_3042_PASSENGER_TRAM_STATION_ORIENTATION                     :{WHITE}Orientace tramvajové stanice pro cestující
+STR_3043_CARGO_TRAM_STATION_ORIENT                              :{WHITE}Orientace nákladní tramvajové stanice
 STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Musíš nejprve zničit autobusovou zastávku
 STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Musíš nejprve zničit nákladovou rampu
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION                   :{WHITE}Je nutné nejdříve zbourat tramvajovou stanici pro cestující
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION                       :{WHITE}Je nutné nejdříve zbourat nákladní tramvajovou stanici
 STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} stanic{P e e ""}
 STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
 STR_304A_NONE                                                   :{YELLOW}- Nic -
@@ -1855,6 +1925,8 @@
 STR_3050_SELECT_LENGTH_OF_RAILROAD                              :{BLACK}Zvolit délku nádraží
 STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Zvolit orientaci autobusové zastávky
 STR_3052_SELECT_TRUCK_LOADING_BAY                               :{BLACK}Zvolit orientaci nákladové rampy
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION              :{BLACK}Vyber směr tramvajové stanice pro cestující
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION                  :{BLACK}Vyber směr nákladní tramvajové stanice
 STR_3053_CENTER_MAIN_VIEW_ON_STATION                            :{BLACK}Vycentrovat pohled na stanici
 STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}Ukázat hodnocení společností
 STR_3055_CHANGE_NAME_OF_STATION                                 :{BLACK}Změnit jméno stanice
@@ -1892,6 +1964,7 @@
 STR_3805_COAST_OR_RIVERBANK                                     :Pobřeží nebo břeh
 STR_3806_SHIP_DEPOT                                             :Lodní depo
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}... nemohu stavět na vodě
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Nejprve je třeba zničit průplav
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Uložit hru
@@ -1901,9 +1974,14 @@
 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_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Interní chyba: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Poškozená hra - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Uložená hra je z novější verze
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :Soubor je nečitelný
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :Do souboru nelze zapisovat
 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
@@ -1960,6 +2038,9 @@
 STR_4829_REQUIRES                                               :{BLACK}Vyžaduje: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}Náklad čekající na zpracování:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Produkce minulý měsíc:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA} % přepraveno)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Nastavit pohled na průmysl
@@ -2074,8 +2155,7 @@
 STR_SV_STNAME_LOWER                                             :dolní {STRING}
 STR_SV_STNAME_HELIPORT                                          :{STRING} heliport
 STR_SV_STNAME_FOREST                                            :{STRING} les
-
-STR_SV_GROUP_NAME                                               :{GROUP}
+STR_SV_STNAME_FALLBACK                                          :{STRING} Stanice #{NUM}
 
 ############ end of savegame specific region!
 
@@ -2155,7 +2235,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
@@ -2167,7 +2247,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
@@ -2183,20 +2263,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í
@@ -2235,8 +2315,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)
@@ -2274,7 +2354,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
@@ -2305,6 +2385,8 @@
 STR_LIVERY_HELICOPTER                                           :Vrtulník
 STR_LIVERY_SMALL_PLANE                                          :Malé letadlo
 STR_LIVERY_LARGE_PLANE                                          :Velké letadlo
+STR_LIVERY_PASSENGER_TRAM                                       :Tramvaj pro cestující
+STR_LIVERY_FREIGHT_TRAM                                         :Nákladní tramvaj
 
 STR_LIVERY_GENERAL_TIP                                          :{BLACK}Zobrazit všeobecná barevná schémata
 STR_LIVERY_TRAIN_TIP                                            :{BLACK}Zobrazit barevná schémata pro vlaky
@@ -2590,7 +2672,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}
@@ -2611,6 +2693,13 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Jet bez zastavení do železničního depa {TOWN}
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Údržba bez zastavení v železničním depu {TOWN}
 
+STR_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Výlet (mimo jízdní řád)
+STR_TIMETABLE_TRAVEL_FOR                                        :Výlet na {STRING}
+STR_TIMETABLE_STAY_FOR                                          :a zůstat {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} d{P en ny nů}
+STR_TIMETABLE_TICKS                                             :{COMMA} cykl{P us y ů}
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Jedu do železničního depa {TOWN}
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Jedu do železničního depa {TOWN}, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Údržba v železničním depu {TOWN}
@@ -2652,13 +2741,15 @@
 STR_REFIT                                                       :{BLACK}Přestavět
 STR_REFIT_TIP                                                   :{BLACK}Vyber, na který druh nákladu přestavět. CTRL-klik odstraní přestavbu z příkazu.
 STR_REFIT_ORDER                                                 :(Přestavět na {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Jízdní řád
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Přepnout na jízdní řád
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Příkazy)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Konec příkazů - -
 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
@@ -2668,6 +2759,9 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Nemohu přidat nový příkaz
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Nemohu tento příkaz smazat...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Nemohu tento příkaz změnit...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Nelze přesunout tento příkaz...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Nelze přeskočit současný příkaz...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Nelze přeskočit na označený příkaz...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Nemohu přesunout vozidlo...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}Zadní stroj vždy doprovází svůj protějšek vepředu
 STR_8838_N_A                                                    :N/A{SKIP}
@@ -2699,12 +2793,16 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Ukázat kapacity jednotlivých vagonů
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Ukázat celkovou kapacitu vlaku, rozdělenou dle nákladu
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Seznam příkazů - stiskni příkaz pro označení. Kliknutím na příkaz se stisknutým CTRL se nastaví pohled na stanici
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Přeskočit příkaz a jít na další
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Přeskočit příkaz a jít na další. Pomocí CTRL + kliknutí se přeskočí na vybraný příkaz
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Smazat označený příkaz
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Provést označený příkaz bez zastavení
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Vložit nový příkaz před označený příkaz nebo na konec seznamu
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Označený příkaz provádět do plného naložení
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Označený příkaz vyloží vozidlo
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Jízdní řád - příkaz vybrat kliknutím.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Změnit čas pro splnění jízdního příkazu
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Zrušit čas pro splnění jízdního příkazu
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Smazat ukazatel zpoždění, takže vozidlo pojede na čas
 STR_SERVICE_HINT                                                :{BLACK}Přeskoč tento cíl, pokud není potřeba pravidelná údržba
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Cena: {CURRENCY} Hmotnost: {WEIGHT_S}{}Rychlost: {VELOCITY}  Výkon: {POWER}{}Cena provozu: {CURRENCY} ročně{}Kapacita: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Porucha
@@ -2726,6 +2824,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Nemohu přejmenovat typ železničního vozidla...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}U označeného příkazu vozidlo musí vyložit náklad
 STR_886F_TRANSFER                                               :{BLACK}Překládka
+STR_CLEAR_TIME                                                  :{BLACK}Smazat čas
+STR_RESET_LATENESS                                              :{BLACK}Smazat ukazatel zpoždění
 
 STR_TRAIN_STOPPING                                              :{RED}Zastavuje
 STR_TRAIN_STOPPING_VEL                                          :{RED}Zastavuje, {VELOCITY}
@@ -2734,8 +2834,20 @@
 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}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Tomuto vozidlu nejde nastavit jízdní řád...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Vozidla mohou čekat jen ve stanicích.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Toto vozidlo v této stanici nestaví.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Změnit čas
+STR_TIMETABLE_STATUS_ON_TIME                                    :Vozidlo jede na čas
+STR_TIMETABLE_STATUS_LATE                                       :Vozidlo má  {STRING} zpoždění
+STR_TIMETABLE_STATUS_EARLY                                      :Vozidlo jede {STRING} napřed
+STR_TIMETABLE_TOTAL_TIME                                        :Tento jízdní řád bude trvat {STRING}
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :Tento jízdní řád bude trvat nejméně {STRING} (vozidla mimo jízdní řád)
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Vyplnit automaticky
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Vyplnit jízdní řád automaticky s hodnotami z první jízdy
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Silniční vozidlo v cestě
@@ -2751,7 +2863,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...
@@ -2778,12 +2890,16 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Seznam silničních vozidel - klepni na vozidlo pro informace
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Koupit označené vozidlo
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Cena: {CURRENCY}{}Rychlost: {VELOCITY}{}Cena provozu: {CURRENCY} ročně{}Kapacita: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Kapacita: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Přejmenovat silniční vozidlo
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Nelze přejmenovat silniční vozidlo...
 STR_902E_NAME_ROAD_VEHICLE                                      :{BLACK}Přejmenovat silniční vozidlo
 STR_902F_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Obyvatelé oslavují...{}První autobus přijel do {STATION}!
 STR_9030_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Obyvatelé oslavují...{}První nákladní vozidlo přijelo do {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Obyvatelé oslavují...{}První tramvaj pro cestující přijela do {STATION}
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Obyvatelé oslavují...{}První nákladní tramvaj přijíždí do {STATION}!
 STR_9031_ROAD_VEHICLE_CRASH_DRIVER                              :{BLACK}{BIGFONT}Dopravní nehoda!{}Řidič zahynul v plamenech při srážce s vlakem
 STR_9032_ROAD_VEHICLE_CRASH_DIE                                 :{BLACK}{BIGFONT}Dopravní nehoda!{}{COMMA} {P člověk lidé lidí} zahynul{P "" i o} v plamenech při srážce s vlakem
 STR_9033_CAN_T_MAKE_VEHICLE_TURN                                :{WHITE}Nelze otočit vozidlo...
@@ -2823,7 +2939,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...
@@ -2891,7 +3007,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}
@@ -2944,6 +3060,8 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Poslat do hangáru {STATION}
 SERVICE_AT_AIRPORT_HANGAR                                       :Údržba v hangáru {STATION}
 
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Jízdní řád)
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Zeppelin se zřítil do {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Silniční vozidlo bylo zničeno při srážce s UFO!
@@ -3068,6 +3186,7 @@
 
 ### depot strings
 STR_DEPOT_SELL_CONFIRMATION_TEXT                                :{YELLOW}Chceš prodat všechna vozidla v depu. Jsi si jistý?
+STR_DEPOT_WRONG_DEPOT_TYPE                                      :Nevhodný druh depa
 
 STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP                             :{BLACK}Prodat všechny vlaky v depu
 STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP                           :{BLACK}Prodat všechna silniční vozidla v depu
@@ -3258,6 +3377,14 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Změna průhlednosti postavitelných objektů, jako stanic, kontrolních bodů a vedení
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Změna průhlednosti mostů
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Změna průhlednosti staveb jako majáků, vysílačů a doplňků (v budoucnosti)
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Přepnout průhlednost pro ukazatele naložení
+
+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}
@@ -3295,4 +3422,17 @@
 STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Letošní příjem: {GREEN}{CURRENCY} {BLACK}(minulý rok: {RED}{CURRENCY}{BLACK})
 STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Letošní příjem: {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}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}Jméno musí být unikátní
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Na další signál
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Na předešlý signál
+
 ########
--- a/src/lang/danish.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/danish.txt	Sat Jul 14 19:42: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}
@@ -1034,7 +1034,10 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Aflever kun last til en station hvis der er en forespørgsel: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Tillad bygning af meget lange broer: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Tillad gå til depot ordrer: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Tillad opførslen af råmateriale industrier: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}Metode til manuel opførsel af primær industri: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :ingen
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :som andre industrier
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :efterforskning
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Tillad flere af samme slags industri per by: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Tillad flere af samme type industri tæt på hinanden: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Vis altid lang dato i statusbaren: {ORANGE}{STRING}
@@ -1089,6 +1092,7 @@
 STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Automatisk service på helikopterlandingspladser: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Forbind landskabsværktøjer med skinne/vej/vand/lufthavn: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Flyt i modsat retning ved scroll med musen: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING                             :{LTBLUE}Jævn scrolling af udsnit: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Vis måleværktøjstip ved brug af div. bygge-værktøjer: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Vis selskabsfarver: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES_NONE                                :Ingen
@@ -1102,7 +1106,19 @@
 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_DEFAULT_RAIL_TYPE                            :{LTBLUE}Standard skinnetype (efter nyt spil/hentet spil): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Normal jernbane
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Elektrificeret jernbane
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Monorail
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Magnetskinne
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :Første tilgængelige
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :Sidste tilgængelige
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :Mest anvendte
 
+STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Vis byggeværktøjer hvis ingen passende transportmidler er tilgængelige: {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}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Maks. antal fly per spiller: {ORANGE}{STRING}
@@ -1125,7 +1141,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}
@@ -1185,7 +1201,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}
@@ -1225,7 +1241,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Er du sikker på, at du vil lave et tilfældigt landskab?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Mange tilfældige byer
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Dæk kortet med tilfældigt placerede byer
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Mange tilfældige industrier
+STR_MANY_RANDOM_INDUSTRIES                                      :Mange tilfældige industrier
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Dæk kortet med tilfældigt placerede industrier
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Kan ikke lave industrier...
 
@@ -1262,29 +1278,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)
@@ -1354,7 +1370,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?
@@ -1396,6 +1412,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :Engelsk
 STR_NETWORK_LANG_GERMAN                                         :Tysk
 STR_NETWORK_LANG_FRENCH                                         :Fransk
+STR_NETWORK_LANG_BRAZILIAN                                      :Brasiliansk
+STR_NETWORK_LANG_BULGARIAN                                      :Bulgarsk
+STR_NETWORK_LANG_CHINESE                                        :Kinesisk
+STR_NETWORK_LANG_CZECH                                          :Tjekkisk
+STR_NETWORK_LANG_DANISH                                         :Dansk
+STR_NETWORK_LANG_DUTCH                                          :Hollandsk
+STR_NETWORK_LANG_ESPERANTO                                      :Esperanto
+STR_NETWORK_LANG_FINNISH                                        :Finsk
+STR_NETWORK_LANG_HUNGARIAN                                      :Ungarsk
+STR_NETWORK_LANG_ICELANDIC                                      :Islandsk
+STR_NETWORK_LANG_ITALIAN                                        :Italiensk
+STR_NETWORK_LANG_JAPANESE                                       :Japansk
+STR_NETWORK_LANG_KOREAN                                         :Koreansk
+STR_NETWORK_LANG_LITHUANIAN                                     :Litauisk
+STR_NETWORK_LANG_NORWEGIAN                                      :Norsk
+STR_NETWORK_LANG_POLISH                                         :Polsk
+STR_NETWORK_LANG_PORTUGUESE                                     :Portugisisk
+STR_NETWORK_LANG_ROMANIAN                                       :Rumænsk
+STR_NETWORK_LANG_RUSSIAN                                        :Russisk
+STR_NETWORK_LANG_SLOVAK                                         :Slovakisk
+STR_NETWORK_LANG_SLOVENIAN                                      :Slovensk
+STR_NETWORK_LANG_SPANISH                                        :Spansk
+STR_NETWORK_LANG_SWEDISH                                        :Svensk
+STR_NETWORK_LANG_TURKISH                                        :Tyrkisk
+STR_NETWORK_LANG_UKRAINIAN                                      :Ukrainsk
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Netværksspils lobby
@@ -1415,9 +1456,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}
@@ -1432,9 +1473,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
@@ -1443,7 +1484,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
 
@@ -1456,7 +1497,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
@@ -1652,7 +1693,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}
@@ -1685,7 +1726,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}
@@ -1756,7 +1797,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
@@ -1865,6 +1906,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
@@ -1874,9 +1916,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
@@ -1933,6 +1980,9 @@
 STR_4829_REQUIRES                                               :{BLACK}Kræver: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}Fragt der venter på forarbejdning:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Produktion sidste måned:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% transporteret)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Centrer skærmen over industriens lokalitet
@@ -2047,8 +2097,7 @@
 STR_SV_STNAME_LOWER                                             :Nedre {STRING}
 STR_SV_STNAME_HELIPORT                                          :{STRING} Helikopterplads
 STR_SV_STNAME_FOREST                                            :{STRING} Skov
-
-STR_SV_GROUP_NAME                                               :{GROUP}
+STR_SV_STNAME_FALLBACK                                          :{STRING} Station #{NUM}
 
 ############ end of savegame specific region!
 
@@ -2128,7 +2177,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
@@ -2140,7 +2189,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
@@ -2156,20 +2205,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
@@ -2208,8 +2257,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)
@@ -2247,7 +2296,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
@@ -2559,7 +2608,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}
@@ -2580,6 +2629,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
@@ -2601,7 +2657,7 @@
 STR_881C_NEW_RAIL_VEHICLES                                      :{WHITE}Nye jernbanekøretøjer
 STR_NEW_ELRAIL_VEHICLES                                         :{WHITE}Nyt Elektrisk lokomotiv
 STR_881D_NEW_MONORAIL_VEHICLES                                  :{WHITE}Nye monorailkøretøjer
-STR_881E_NEW_MAGLEV_VEHICLES                                    :{WHITE}Nye magnetskinne køretøjer
+STR_881E_NEW_MAGLEV_VEHICLES                                    :{WHITE}Nye magnetskinnekøretøjer
 STR_ALL_AVAIL_RAIL_VEHICLES                                     :{WHITE}Jernbanekøretøjer
 
 STR_881F_BUILD_VEHICLE                                          :{BLACK}Byg køretøj
@@ -2621,13 +2677,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
@@ -2637,6 +2695,9 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Kan ikke indsætte ny ordre...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Kan ikke slette denne ordre...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Kan ikke ændre denne ordre...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Kan ikke flytte denne ordre...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Kan ikke springe over nuværende ordre...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Kan ikke springe over valgt ordre...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Kan ikke flytte køretøjet...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}Det bagerste lokomotiv vil altid følge dets forende
 STR_8838_N_A                                                    :N/A{SKIP}
@@ -2668,12 +2729,16 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Vis kapaciteten af hver togvogn
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Vis total lasteevne på toget, fordelt på lasttyper
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Ordreliste - klik på en ordre for at markere den. CTRL-klik for at centrere skærmen over stationen
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Spring over den nuværende ordre og gå til den næste
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Spring over nuværende ordre og start næste. CTRL + klik springer til den valgte ordre
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Slet den markerede ordre
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Lav den markerede ordre til en "uden stop" ordre
 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
@@ -2695,6 +2760,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}
@@ -2703,8 +2770,20 @@
 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
+STR_TIMETABLE_TOTAL_TIME                                        :Denne køreplan vil tage {STRING} at fuldføre
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :Denne køreplan vil tage mindst {STRING} at fuldføre (ikke alt indført i køreplan)
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Auto-udfyld
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Udfyld køreplanen automatisk med værdier fra den første tur
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Køretøj i vejen
@@ -2720,7 +2799,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...
@@ -2747,6 +2826,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Liste over køretøjstyper - klik på køretøj for information
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Byg det markerede køretøj
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Pris: {CURRENCY}{}Hastighed: {VELOCITY}{}Driftsomkostninger: {CURRENCY}/år{}Kapacitet: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Kapacitet: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Giv køretøjet et navn
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Kan ikke give køretøjet et navn...
@@ -2794,7 +2875,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...
@@ -2862,7 +2943,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}
@@ -2915,6 +2996,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
@@ -3230,6 +3313,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}
@@ -3267,4 +3358,17 @@
 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_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}Navnet skal være unikt
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Gå til næste skilt
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Gå til forrige skilt
+
 ########
--- a/src/lang/dutch.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/dutch.txt	Sat Jul 14 19:42: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
@@ -1034,7 +1034,10 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Lading alleen bezorgen aan een station als er vraag naar is: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Bouwen van zeer lange bruggen toestaan: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}'Ga naar depot' order toestaan: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Plaatsen van grondstofproducerende industrie toestaan: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}Handmatige bouwmethode voor hoofdindustrieën: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :geen
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :zoals andere industrieën
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :proberen
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Meerdere vergelijkbare industrieën per stad toestaan: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Industrieën van hetzelfde type dicht bij elkaar toestaan: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Altijd lange datum in statusbalk weergeven: {ORANGE}{STRING}
@@ -1103,7 +1106,19 @@
 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_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Geef bouwgereedschap weer wanneer geen geschikte voertuigen beschikbaar zijn: {ORANGE}{STRING}
 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}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Maximaal aantal vliegtuigen per speler: {ORANGE}{STRING}
@@ -1181,12 +1196,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}
@@ -1226,7 +1241,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Weet je zeker dat je een willekeurig landschap wil maken?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Veel willekeurige steden
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Bedek de kaart met willekeurig geplaatste steden
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Veel willekeurige industrieën
+STR_MANY_RANDOM_INDUSTRIES                                      :Veel willekeurige industrieën
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Bedek de kaart met willekeurig geplaatste industrieën
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Kan geen industrieën genereren
 
@@ -1258,7 +1273,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
@@ -1397,6 +1412,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :Engels
 STR_NETWORK_LANG_GERMAN                                         :Duits
 STR_NETWORK_LANG_FRENCH                                         :Frans
+STR_NETWORK_LANG_BRAZILIAN                                      :Brazilliaans
+STR_NETWORK_LANG_BULGARIAN                                      :Bulgaars
+STR_NETWORK_LANG_CHINESE                                        :Chinees
+STR_NETWORK_LANG_CZECH                                          :Tchechisch
+STR_NETWORK_LANG_DANISH                                         :Deens
+STR_NETWORK_LANG_DUTCH                                          :Nederlands
+STR_NETWORK_LANG_ESPERANTO                                      :Esperanto
+STR_NETWORK_LANG_FINNISH                                        :Fins
+STR_NETWORK_LANG_HUNGARIAN                                      :Hongaars
+STR_NETWORK_LANG_ICELANDIC                                      :IJslands
+STR_NETWORK_LANG_ITALIAN                                        :Italiaans
+STR_NETWORK_LANG_JAPANESE                                       :Japans
+STR_NETWORK_LANG_KOREAN                                         :Koreaans
+STR_NETWORK_LANG_LITHUANIAN                                     :Litouws
+STR_NETWORK_LANG_NORWEGIAN                                      :Noors
+STR_NETWORK_LANG_POLISH                                         :Pools
+STR_NETWORK_LANG_PORTUGUESE                                     :Portugees
+STR_NETWORK_LANG_ROMANIAN                                       :Roemeens
+STR_NETWORK_LANG_RUSSIAN                                        :Russisch
+STR_NETWORK_LANG_SLOVAK                                         :Slovaaks
+STR_NETWORK_LANG_SLOVENIAN                                      :Sloveens
+STR_NETWORK_LANG_SPANISH                                        :Spaans
+STR_NETWORK_LANG_SWEDISH                                        :Zweeds
+STR_NETWORK_LANG_TURKISH                                        :Turks
+STR_NETWORK_LANG_UKRAINIAN                                      :Oekraïne
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Multiplayer lobby
@@ -1416,9 +1456,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}
@@ -1590,6 +1630,12 @@
 STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Spoor met voorseinen
 STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Spoor met uitgangseinen
 STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Spoor met combinatieseinen
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Spoor met normale en pre-seinen
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Spoor met normale en uitgangs-signalen
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Spoor met normale en dubbele-signalen
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Spoor met pre- en uitgangs- signalen
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Spoor met pre- en dubbele- signalen
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Spoor met uitgangs- en dubbele- signalen
 STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Treinstation moet eerst verwijderd worden
 
 
@@ -1600,6 +1646,7 @@
 STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Wegenbouw
 STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Bouw tramrails
 STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Kies brug
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}... een richtings wegen kunnen geen kruisingen hebben
 STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Kan hier geen weg bouwen...
 STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}Kan geen tramrails bouwen hier...
 STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Kan hier geen weg weghalen...
@@ -1646,7 +1693,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}
@@ -1679,7 +1726,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}
@@ -1750,7 +1797,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
@@ -1859,6 +1906,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
@@ -1868,9 +1916,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
@@ -1927,6 +1980,13 @@
 STR_4829_REQUIRES                                               :{BLACK}Vereist: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}Vracht klaar om te worden verwerkt:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES                                               :{BLACK}Produceert: {YELLOW}{STRING}
+STR_4828_PRODUCES                                               :{BLACK}Produceert: {YELLOW}{STRING}, {STRING}
+############ range for produces ends
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Productie vorige maand:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% getransporteerd)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Centreer het hoofdbeeld op de locatie van de industrie
@@ -2004,7 +2064,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}
 
@@ -2041,8 +2101,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!
 
@@ -2122,7 +2181,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
@@ -2134,7 +2193,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
@@ -2150,20 +2209,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
@@ -2181,7 +2240,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
@@ -2202,8 +2261,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)
@@ -2241,7 +2300,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
@@ -2553,7 +2612,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}
@@ -2570,9 +2629,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}
@@ -2615,13 +2681,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
@@ -2631,6 +2699,9 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Kan nieuwe order niet invoegen...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Kan deze order niet verwijderen...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Kan deze order niet aanpassen...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Kan deze order niet verplaatsen...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Kan huidige order niet overslaan...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Kan geselecteerde order niet overslaan...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Kan voertuig niet verplaatsen...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}De achterste locomotief zal altijd het voorste deel volgen
 STR_8838_N_A                                                    :NVT.{SKIP}
@@ -2662,12 +2733,16 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Laat de mogelijkheden van elk voertuig zien
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Laat totale capaiteit van trein zien, gescheiden door goederentype
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Orderlijst - klik op een order om deze te selecteren. CTRL + klikken gaat naar het station
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Sla de huidige order over en begin met de volgende
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Sla huidige order over, en begin met de volgende. CTRL + klik, begin direct met geselecteerde order
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Verwijder de geselecteerde order
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Maak de geselecteerde order non-stop
 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
@@ -2689,6 +2764,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}
@@ -2697,8 +2774,20 @@
 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
+STR_TIMETABLE_TOTAL_TIME                                        :Dit tijdscheme duurt {STRING} om te volbrengen
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :Dit tijdscheme duurt minstens {STRING} om te volbrengen (niet alles geselecteerd)
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Auto aanvullen
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Vul het tijdschema automatisch met de waardes van de eerste reis
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Wegvoertuig in de weg
@@ -2714,7 +2803,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...
@@ -2741,6 +2830,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Wegvoertuig selectie lijst - klik op voertuig voor informatie
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Bouw het geselecteerde wegvoertuig
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Prijs: {CURRENCY}{}Snelheid: {VELOCITY}{}Brandstofkosten: {CURRENCY}/jr{}Capaciteit: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Capaciteit: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Hernoem wegvoertuig
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Kan wegvoertuig niet hernoemen...
@@ -2758,13 +2849,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
@@ -2788,7 +2879,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...
@@ -2856,7 +2947,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}
@@ -2909,6 +3000,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'
@@ -3018,13 +3111,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
 
@@ -3136,17 +3229,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?
@@ -3170,17 +3263,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
@@ -3224,6 +3317,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}
@@ -3261,4 +3362,22 @@
 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_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}Naam moet unique zijn
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Ga naar volgende bord
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Ga naar vorige bord
+
 ########
+
+STR_FUND_NEW_INDUSTRY                                           :{BLACK}Investeer
+STR_PROSPECT_NEW_INDUSTRY                                       :{BLACK}Onderzoek
+STR_BUILD_NEW_INDUSTRY                                          :{BLACK}Bouw
+STR_INDUSTRY_SELECTION_HINT                                     :{BLACK}Kies de aangewezen industrie van de lijst
--- a/src/lang/english.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/english.txt	Sat Jul 14 19:42: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}
@@ -1034,7 +1034,10 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Deliver cargo to a station only when there is a demand: {ORANGE}{STRING1}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Allow building very long bridges: {ORANGE}{STRING1}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Allow goto depot orders: {ORANGE}{STRING1}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Allow constructing raw material producing industries: {ORANGE}{STRING1}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}Manual primary industry construction method: {ORANGE}{STRING1}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :none
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :as other industries
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :prospecting
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Allow multiple similar industries per town: {ORANGE}{STRING1}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Industries of the same type can be built close to each other: {ORANGE}{STRING1}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Always show long date in the status bar: {ORANGE}{STRING1}
@@ -1103,7 +1106,19 @@
 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_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Show building tools when no suitable vehicles are available: {ORANGE}{STRING1}
 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}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Max aircraft per player: {ORANGE}{STRING1}
@@ -1186,7 +1201,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}
@@ -1226,7 +1241,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Are you sure you want to create a random landscape?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Many random towns
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Cover the map with randomly placed towns
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Many random industries
+STR_MANY_RANDOM_INDUSTRIES                                      :Many random industries
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Cover the map with randomly placed industries
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Can't generate industries...
 
@@ -1441,9 +1456,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 +1693,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 +1726,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 +1797,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 +1906,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 +1916,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
@@ -1959,6 +1980,13 @@
 STR_4829_REQUIRES                                               :{BLACK}Requires: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}Cargo waiting to be processed:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES                                               :{BLACK}Produces: {YELLOW}{STRING}
+STR_4828_PRODUCES                                               :{BLACK}Produces: {YELLOW}{STRING}, {STRING}
+############ range for produces ends
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Production last month:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% transported)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Centre the main view on industry location
@@ -2073,8 +2101,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 +2181,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 +2193,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 +2209,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 +2261,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 +2300,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 +2612,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 +2633,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 +2681,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
@@ -2663,6 +2699,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}
@@ -2694,12 +2733,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 an order to highlight it. CTRL + click scrolls to the station
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Skip the current order, and start the next
+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
@@ -2721,6 +2764,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}
@@ -2729,8 +2774,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
@@ -2746,7 +2803,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...
@@ -2773,6 +2830,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...
@@ -2820,7 +2879,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...
@@ -2888,7 +2947,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}
@@ -2941,6 +3000,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!
@@ -3256,6 +3317,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}
@@ -3293,4 +3362,22 @@
 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}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}Name must be unique
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Go to next sign
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Go to previous sign
+
 ########
+
+STR_FUND_NEW_INDUSTRY                                           :{BLACK}Fund
+STR_PROSPECT_NEW_INDUSTRY                                       :{BLACK}Prospect
+STR_BUILD_NEW_INDUSTRY                                          :{BLACK}Build
+STR_INDUSTRY_SELECTION_HINT                                     :{BLACK}Choose the appropriate industry from this list
--- a/src/lang/esperanto.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/esperanto.txt	Sat Jul 14 19:42:58 2007 +0000
@@ -4,13 +4,15 @@
 ##plural 0
 ##case n
 
+#
+
 ##id 0x0000
 STR_NULL                                                        :
 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}
@@ -494,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
@@ -1033,7 +1035,6 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Nur liveru ŝarĝon al stacio se estas peto: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Permesu konstruadon de tre longaj pontoj: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Permesu ordenojn por iri al deponejo: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Permesu konstruadon de fontmalerialaj industrioj: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Permesu pliajn similajn industriojn en la sama urbo: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Samtipaj industrioj povas esti konstruataj proksime unu de la alia: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Ĉiam montru longan daton en la statbreto: {ORANGE}{STRING}
@@ -1047,6 +1048,7 @@
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Nova ĝenerala vojtrovado (NPF, superas NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Pezpliigo pro ŝarĝo por imiti pezajn trajnojn: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Permesu trairaj bushaltejoj sur vojoj urboposedataj: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADJACENT_STATIONS                            :{LTBLUE}Permesu konstrui staciojn apude: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Ĉiam permesu malgrandajn flughavenojn: {ORANGE}{STRING}
 
@@ -1182,7 +1184,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}
@@ -1222,7 +1224,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Ĉu vi certas ke vi volas krei hazardan landaspekton?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Multaj hazardaj urboj
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Kovru la mapon per hazarde metitajn urbojn
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Multaj hazardaj industrioj
+STR_MANY_RANDOM_INDUSTRIES                                      :Multaj hazardaj industrioj
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Kovru la mapon per hazarde metitajn industriojn
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Ne povas generi industriojn...
 
@@ -1412,9 +1414,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}
@@ -1623,7 +1625,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}
@@ -1656,7 +1658,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}
@@ -1727,7 +1729,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
@@ -1839,9 +1841,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
@@ -2013,6 +2015,7 @@
 STR_SV_STNAME_HELIPORT                                          :{STRING} Helikopterejo
 STR_SV_STNAME_FOREST                                            :Arbaro de {STRING}
 
+
 ############ end of savegame specific region!
 
 ##id 0x6800
@@ -2091,7 +2094,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
@@ -2103,7 +2106,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
@@ -2119,20 +2122,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
@@ -2171,8 +2174,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)
@@ -2210,7 +2213,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
@@ -2520,7 +2523,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}
@@ -2587,8 +2590,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
@@ -2629,7 +2632,6 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Montru kapablojn de ĉiu veturilo
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Montru tutan kapablon de trajno, dividite laŭ ŝarĝtipo
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Ordena listo - alklaku ordenon por elekti. CTRL + klako skrolas al la stacio
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Saltu de la nuna ordeno al la sekva
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Forviŝu la elektitan ordenon
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Senhaltigu elektitan ordenon
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Enigu novan ordenon antaŭ la elektita ordeno, aŭ aldonu fine de la listo
@@ -2664,8 +2666,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
@@ -2681,7 +2683,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...
@@ -2753,7 +2755,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...
@@ -2821,7 +2823,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}
@@ -3188,3 +3190,11 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}(Ne)travideblu konstrueblaĵoj kiel stacidomoj, deponejoj, trairejoj kaj kondukdratoj
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}(Ne)travideblu la pontoj
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}(Ne)travideblu aĵoj kiel lumturoj kaj antenoj, kaj eble estonte vidĝuaĵoj
+
+##### Mass Order
+
+
+
+
+
+########
--- a/src/lang/estonian.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/estonian.txt	Sat Jul 14 19:42:58 2007 +0000
@@ -4,15 +4,17 @@
 ##plural 0
 ##case g genitiiv
 
+#
+
 ##id 0x0000
 STR_NULL                                                        :
 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}Maa peab olema tasane
+STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Maapind peab olema tasane
 STR_0008_WAITING                                                :{BLACK}Ootel: {WHITE}{STRING}
 STR_0009                                                        :{WHITE}{CARGO}
 STR_000A_EN_ROUTE_FROM                                          :{WHITE}{CARGO}{YELLOW}  (tulnud jaamast
@@ -294,15 +296,15 @@
 STR_00E2                                                        :{BLACK}{COMMA}
 STR_00E3                                                        :{RED}{COMMA}
 STR_00E4_LOCATION                                               :{BLACK}Asukoht
-STR_00E5_CONTOURS                                               :Maastik
-STR_00E6_VEHICLES                                               :Sõidukid
-STR_00E7_INDUSTRIES                                             :Tööstused
-STR_00E8_ROUTES                                                 :Teed
-STR_00E9_VEGETATION                                             :Taimestik
-STR_00EA_OWNERS                                                 :Omanikud
-STR_00EB_ROADS                                                  :{BLACK}{TINYFONT}Teed
-STR_00EC_RAILROADS                                              :{BLACK}{TINYFONT}Raudteed
-STR_00ED_STATIONS_AIRPORTS_DOCKS                                :{BLACK}{TINYFONT}Jaamad/lennujaamad/sadamad
+STR_00E5_CONTOURS                                               :maastik
+STR_00E6_VEHICLES                                               :sõidukid
+STR_00E7_INDUSTRIES                                             :tööstused
+STR_00E8_ROUTES                                                 :kaubaliinid
+STR_00E9_VEGETATION                                             :taimestik
+STR_00EA_OWNERS                                                 :omanikud
+STR_00EB_ROADS                                                  :{BLACK}{TINYFONT}Sõiduteed
+STR_00EC_RAILROADS                                              :{BLACK}{TINYFONT}Rööbasteed
+STR_00ED_STATIONS_AIRPORTS_DOCKS                                :{BLACK}{TINYFONT}Jaamad/lennuväljad/sadamad
 STR_00EE_BUILDINGS_INDUSTRIES                                   :{BLACK}{TINYFONT}Ehitised/tööstused
 STR_00EF_VEHICLES                                               :{BLACK}{TINYFONT}Sõidukid
 STR_00F0_100M                                                   :{BLACK}{TINYFONT}100 m
@@ -311,7 +313,7 @@
 STR_00F3_400M                                                   :{BLACK}{TINYFONT}400 m
 STR_00F4_500M                                                   :{BLACK}{TINYFONT}500 m
 STR_00F5_TRAINS                                                 :{BLACK}{TINYFONT}Rongid
-STR_00F6_ROAD_VEHICLES                                          :{BLACK}{TINYFONT}Maanteesõidukid
+STR_00F6_ROAD_VEHICLES                                          :{BLACK}{TINYFONT}Mootorsõidukid
 STR_00F7_SHIPS                                                  :{BLACK}{TINYFONT}Laevad
 STR_00F8_AIRCRAFT                                               :{BLACK}{TINYFONT}Õhusõidukid
 STR_00F9_TRANSPORT_ROUTES                                       :{BLACK}{TINYFONT}Veoliinid
@@ -324,20 +326,20 @@
 STR_0100_FACTORY                                                :{BLACK}{TINYFONT}Vabrik
 STR_0101_PRINTING_WORKS                                         :{BLACK}{TINYFONT}Trükikoda
 STR_0102_OIL_WELLS                                              :{BLACK}{TINYFONT}Naftapuuraugud
-STR_0103_IRON_ORE_MINE                                          :{BLACK}{TINYFONT}Rauamaagi kaevandus
+STR_0103_IRON_ORE_MINE                                          :{BLACK}{TINYFONT}Rauamaagikaevandus
 STR_0104_STEEL_MILL                                             :{BLACK}{TINYFONT}Terase tööstus
 STR_0105_BANK                                                   :{BLACK}{TINYFONT}Pank
 STR_0106_PAPER_MILL                                             :{BLACK}{TINYFONT}Paberitehas
 STR_0107_GOLD_MINE                                              :{BLACK}{TINYFONT}Kullakaevandus
 STR_0108_FOOD_PROCESSING_PLANT                                  :{BLACK}{TINYFONT}Toidutöötlustehas
 STR_0109_DIAMOND_MINE                                           :{BLACK}{TINYFONT}Teemantikaevandus
-STR_010A_COPPER_ORE_MINE                                        :{BLACK}{TINYFONT}Vasemaagi kaevandus
+STR_010A_COPPER_ORE_MINE                                        :{BLACK}{TINYFONT}Vasemaagikaevandus
 STR_010B_FRUIT_PLANTATION                                       :{BLACK}{TINYFONT}Puuviljaistandus
 STR_010C_RUBBER_PLANTATION                                      :{BLACK}{TINYFONT}Kummipuuistandus
 STR_010D_WATER_SUPPLY                                           :{BLACK}{TINYFONT}Veepumbad
 STR_010E_WATER_TOWER                                            :{BLACK}{TINYFONT}Veetorn
 STR_010F_LUMBER_MILL                                            :{BLACK}{TINYFONT}Saeveski
-STR_0110_COTTON_CANDY_FOREST                                    :{BLACK}{TINYFONT}Suhkruvati mets
+STR_0110_COTTON_CANDY_FOREST                                    :{BLACK}{TINYFONT}Suhkruvatimets
 STR_0111_CANDY_FACTORY                                          :{BLACK}{TINYFONT}Maiustuste tehas
 STR_0112_BATTERY_FARM                                           :{BLACK}{TINYFONT}Patareitalu
 STR_0113_COLA_WELLS                                             :{BLACK}{TINYFONT}Koolapumbad
@@ -351,10 +353,10 @@
 STR_011B_RAILROAD_STATION                                       :{BLACK}{TINYFONT}Raudteejaam
 STR_011C_TRUCK_LOADING_BAY                                      :{BLACK}{TINYFONT}Veoautode laadimisplats
 STR_011D_BUS_STATION                                            :{BLACK}{TINYFONT}Bussijaam
-STR_011E_AIRPORT_HELIPORT                                       :{BLACK}{TINYFONT}Lennujaam
+STR_011E_AIRPORT_HELIPORT                                       :{BLACK}{TINYFONT}Lennuväli/kopteriväljak
 STR_011F_DOCK                                                   :{BLACK}{TINYFONT}Sadam
 STR_0120_ROUGH_LAND                                             :{BLACK}{TINYFONT}Konarlik maa
-STR_0121_GRASS_LAND                                             :{BLACK}{TINYFONT}Muru
+STR_0121_GRASS_LAND                                             :{BLACK}{TINYFONT}Rohuväli
 STR_0122_BARE_LAND                                              :{BLACK}{TINYFONT}Lage maa
 STR_0123_FIELDS                                                 :{BLACK}{TINYFONT}Põllud
 STR_0124_TREES                                                  :{BLACK}{TINYFONT}Puud
@@ -384,19 +386,19 @@
 
 STR_013B_OWNED_BY                                               :{WHITE}...omanik on {STRING}
 STR_013C_CARGO                                                  :{BLACK}Laadung
-STR_013D_INFORMATION                                            :{BLACK}Informatsioon
-STR_013E_CAPACITIES                                             :{BLACK}Mahutavused
+STR_013D_INFORMATION                                            :{BLACK}Andmed
+STR_013E_CAPACITIES                                             :{BLACK}Kandevõimed
 STR_013E_TOTAL_CARGO                                            :{BLACK}Laadungit kokku
-STR_013F_CAPACITY                                               :{BLACK}Mahutavus: {LTBLUE}{CARGO}
-STR_CAPACITY_MULT                                               :{BLACK}Mahutavus: {LTBLUE}{CARGO} (x{NUM})
-STR_013F_TOTAL_CAPACITY_TEXT                                    :{BLACK}Rongi kogumahutavus:
+STR_013F_CAPACITY                                               :{BLACK}Kandevõime: {LTBLUE}{CARGO}
+STR_CAPACITY_MULT                                               :{BLACK}Kandevõime: {LTBLUE}{CARGO} (x{NUM})
+STR_013F_TOTAL_CAPACITY_TEXT                                    :{BLACK}Selle rongi kandevõime:
 STR_013F_TOTAL_CAPACITY                                         :{LTBLUE}- {CARGO} ({SHORTCARGO})
 STR_TOTAL_CAPACITY_MULT                                         :{LTBLUE}- {CARGO} ({SHORTCARGO}) (x{NUM})
 STR_0140_NEW_GAME                                               :{BLACK}Alusta mängu
 STR_0141_LOAD_GAME                                              :{BLACK}Laadi mängu
 STR_SINGLE_PLAYER                                               :{BLACK}Üksikmängija
 STR_MULTIPLAYER                                                 :{BLACK}Võrgumäng
-STR_SCENARIO_EDITOR                                             :{BLACK}Stsenaariumi Muutmine
+STR_SCENARIO_EDITOR                                             :{BLACK}Stsenaariumiredaktor
 
 STR_64                                                          :64
 STR_128                                                         :128
@@ -447,13 +449,13 @@
 
 ############ range for menu starts
 STR_0154_OPERATING_PROFIT_GRAPH                                 :Opereerimiskasumi graafik
-STR_0155_INCOME_GRAPH                                           :Sissetulekute graafik
-STR_0156_DELIVERED_CARGO_GRAPH                                  :Transporditud kauba graafik
+STR_0155_INCOME_GRAPH                                           :Tulugraafik
+STR_0156_DELIVERED_CARGO_GRAPH                                  :Kohaleviidud kauba graafik
 STR_0157_PERFORMANCE_HISTORY_GRAPH                              :Tegevustulemuste graafik
-STR_0158_COMPANY_VALUE_GRAPH                                    :Ettevõtte väärtuse graafik
+STR_0158_COMPANY_VALUE_GRAPH                                    :Firmaväärtuse graafik
 STR_0159_CARGO_PAYMENT_RATES                                    :Veotasude määrad
 STR_015A_COMPANY_LEAGUE_TABLE                                   :Ettevõtete edetabel
-STR_PERFORMANCE_DETAIL_MENU                                     :Üksikasjalik tulemusreiting
+STR_PERFORMANCE_DETAIL_MENU                                     :Üksikasjalik tulemushinnang
 ############ range for menu ends
 
 STR_015B_OPENTTD                                                :{WHITE}OpenTTD lisainfo
@@ -470,7 +472,7 @@
 STR_SORT_BY_POPULATION                                          :{BLACK}Rahvastik
 STR_SORT_BY_PRODUCTION                                          :{BLACK}Toodang
 STR_SORT_BY_TYPE                                                :{BLACK}Tüüp
-STR_SORT_BY_TRANSPORTED                                         :{BLACK}Transporditud
+STR_SORT_BY_TRANSPORTED                                         :{BLACK}Veetud
 STR_SORT_BY_NAME                                                :{BLACK}Nimi
 STR_SORT_BY_DROPDOWN_NAME                                       :Nimi
 STR_SORT_BY_DATE                                                :{BLACK}Daatum
@@ -478,9 +480,9 @@
 STR_SORT_BY_PROFIT_LAST_YEAR                                    :Eelmise aasta kasum
 STR_SORT_BY_PROFIT_THIS_YEAR                                    :Selle aasta kasum
 STR_SORT_BY_AGE                                                 :Vanus
-STR_SORT_BY_RELIABILITY                                         :Töökindlus
-STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE                        :Kogumahutavus veose tüübi kohta
-STR_SORT_BY_MAX_SPEED                                           :Maksimaalne kiirus
+STR_SORT_BY_RELIABILITY                                         :Tehnoseisund
+STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE                        :Kandevõime kokku veose tüübi kohta
+STR_SORT_BY_MAX_SPEED                                           :Tippkiirus
 STR_SORT_BY_MODEL                                               :Mudel
 STR_SORT_BY_VALUE                                               :Väärtus
 STR_SORT_BY_FACILITY                                            :Jaama tüüp
@@ -490,16 +492,16 @@
 STR_ENGINE_SORT_COST                                            :Hind
 STR_ENGINE_SORT_POWER                                           :Võimsus
 STR_ENGINE_SORT_INTRO_DATE                                      :Esitluskuupäev
-STR_ENGINE_SORT_RUNNING_COST                                    :Teenindusmaks
-STR_ENGINE_SORT_POWER_VS_RUNNING_COST                           :Jõud/Teenindusmaks
-STR_ENGINE_SORT_CARGO_CAPACITY                                  :Laadungi mahutavus
+STR_ENGINE_SORT_RUNNING_COST                                    :Käituskulud
+STR_ENGINE_SORT_POWER_VS_RUNNING_COST                           :Võimsus- ja käituskulud
+STR_ENGINE_SORT_CARGO_CAPACITY                                  :Kauba kandevõime
 STR_NO_WAITING_CARGO                                            :{BLACK}Kaupa pole ootamas
 STR_SELECT_ALL_FACILITIES                                       :{BLACK}Vali kõik tööstused
 STR_SELECT_ALL_TYPES                                            :{BLACK}Vali kõik kaubatüüpid (ka mitteoodatav kaup)
-STR_AVAILABLE_TRAINS                                            :{BLACK}Saada olevad rongid
-STR_AVAILABLE_ROAD_VEHICLES                                     :{BLACK}Saada olevad maanteesõidukid
-STR_AVAILABLE_SHIPS                                             :{BLACK}Saada olevad laevad
-STR_AVAILABLE_AIRCRAFT                                          :{BLACK}Saada olevad õhusõidukid
+STR_AVAILABLE_TRAINS                                            :{BLACK}Saadaval rongid
+STR_AVAILABLE_ROAD_VEHICLES                                     :{BLACK}Saadaval sõidukid
+STR_AVAILABLE_SHIPS                                             :{BLACK}Saadaval laevad
+STR_AVAILABLE_AIRCRAFT                                          :{BLACK}Saadaval õhusõidukid
 STR_AVAILABLE_ENGINES_TIP                                       :{BLACK}Vaata nimekirja seda tüüpi veovahenditest
 STR_MANAGE_LIST                                                 :{BLACK}Halda nimekirja
 STR_MANAGE_LIST_TIP                                             :{BLACK}Saada juhised kõikidele selles nimekirjas olevatele veovahenditele
@@ -508,7 +510,7 @@
 STR_SEND_ROAD_VEHICLE_TO_DEPOT                                  :Saada depoose
 STR_SEND_SHIP_TO_DEPOT                                          :Saada depoose
 STR_SEND_AIRCRAFT_TO_HANGAR                                     :Saada angaari
-STR_SEND_FOR_SERVICING                                          :Saada teenindusse
+STR_SEND_FOR_SERVICING                                          :Saada hooldusesse
 
 ############ range for months starts
 STR_0162_JAN                                                    :jaan
@@ -539,27 +541,27 @@
 STR_0179_DISPLAY_GRAPHS                                         :{BLACK}Kuva graafikuid
 STR_017A_DISPLAY_COMPANY_LEAGUE                                 :{BLACK}Kuva ettevõtete edetabel
 STR_017B_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Kuva ettevõtte rongide nimistu
-STR_017C_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Kuva nimekiri ettevõtte maanteesõidukitest
+STR_017C_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Kuva nimekiri ettevõtte mootorsõidukitest
 STR_017D_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Kuva ettevõtte laevade nimistu
 STR_017E_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Kuva nimekiri ettevõtte õhusõidukitest
 STR_017F_ZOOM_THE_VIEW_IN                                       :{BLACK}Suurenda vaadet
 STR_0180_ZOOM_THE_VIEW_OUT                                      :{BLACK}Vähenda vaadet
-STR_0181_BUILD_RAILROAD_TRACK                                   :{BLACK}Ehita raudteed
+STR_0181_BUILD_RAILROAD_TRACK                                   :{BLACK}Ehita rööbasteed
 STR_0182_BUILD_ROADS                                            :{BLACK}Ehita maanteid
 STR_0183_BUILD_SHIP_DOCKS                                       :{BLACK}Ehita laevasadamat
-STR_0184_BUILD_AIRPORTS                                         :{BLACK}Ehita lennujaamu
+STR_0184_BUILD_AIRPORTS                                         :{BLACK}Ehita lennuvälju
 STR_0185_PLANT_TREES_PLACE_SIGNS                                :{BLACK}Puude istutamine, siltide paigaldamine jne.
-STR_0186_LAND_BLOCK_INFORMATION                                 :{BLACK}Maa-ala informatsioon
+STR_0186_LAND_BLOCK_INFORMATION                                 :{BLACK}Maa-ala andmed
 STR_0187_OPTIONS                                                :{BLACK}Seaded
 STR_0188                                                        :{BLACK}{SMALLUPARROW}
 STR_0189                                                        :{BLACK}{SMALLDOWNARROW}
-STR_018A_CAN_T_CHANGE_SERVICING                                 :{WHITE}Teenindusvahemikku ei saa muuta...
+STR_018A_CAN_T_CHANGE_SERVICING                                 :{WHITE}Hooldusperioodi ei saa muuta...
 STR_018B_CLOSE_WINDOW                                           :{BLACK}Sulge aken
 STR_018C_WINDOW_TITLE_DRAG_THIS                                 :{BLACK}Akna pealkiri - lohista akna liigutamiseks
 STR_STICKY_BUTTON                                               :{BLACK}Keela selle akna sulgemine 'Sulge kõik aknad' nupu klõpsamisel
 STR_RESIZE_BUTTON                                               :{BLACK}Kliki ja venita, et akna suurust muuta
 STR_SAVELOAD_HOME_BUTTON                                        :{BLACK}Vajuta siia, et minna praegusesse vaikimisi valitud salvestamise/laadimise kausta
-STR_018D_DEMOLISH_BUILDINGS_ETC                                 :{BLACK}Ehitiste jms. hävitamine
+STR_018D_DEMOLISH_BUILDINGS_ETC                                 :{BLACK}Rajatiste lammutamine
 STR_018E_LOWER_A_CORNER_OF_LAND                                 :{BLACK}Maapinna madaldamine
 STR_018F_RAISE_A_CORNER_OF_LAND                                 :{BLACK}Maapinna kõrgendamine
 STR_0190_SCROLL_BAR_SCROLLS_LIST                                :{BLACK}Kerimisriba - kerib nimistut üles/alla
@@ -585,15 +587,15 @@
 STR_01A0_IS_GETTING_OLD                                         :{WHITE}{STRING} {COMMA} on vanaks muutumas
 STR_01A1_IS_GETTING_VERY_OLD                                    :{WHITE}{STRING} {COMMA} on saamas väga vanaks
 STR_01A2_IS_GETTING_VERY_OLD_AND                                :{WHITE}{STRING} {COMMA} on saanud väga vanaks ja vajab kohest asendamist
-STR_01A3_LAND_AREA_INFORMATION                                  :{WHITE}Maa-ala info
-STR_01A4_COST_TO_CLEAR_N_A                                      :{BLACK}Puhastamistasu: {LTBLUE}N/A
-STR_01A5_COST_TO_CLEAR                                          :{BLACK}Puhastamistasu: {LTBLUE}{CURRENCY}
-STR_01A6_N_A                                                    :k-tu
+STR_01A3_LAND_AREA_INFORMATION                                  :{WHITE}Maa-ala andmed
+STR_01A4_COST_TO_CLEAR_N_A                                      :{BLACK}Puhastustasu: {LTBLUE}N/A
+STR_01A5_COST_TO_CLEAR                                          :{BLACK}Puhastustasu: {LTBLUE}{CURRENCY}
+STR_01A6_N_A                                                    :puudub
 STR_01A7_OWNER                                                  :{BLACK}Omanik: {LTBLUE}{STRING}
-STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Kohalik võim: {LTBLUE}{STRING}
-STR_01A9_NONE                                                   :Mitte keegi
+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.
@@ -645,7 +647,7 @@
 STR_01DA_CUSTOM_2                                               :{TINYFONT}Omatehtud 2
 STR_01DB_MUSIC_VOLUME                                           :{BLACK}{TINYFONT}Muusika valjus
 STR_01DC_EFFECTS_VOLUME                                         :{BLACK}{TINYFONT}Effektide valjus
-STR_01DD_MIN_MAX                                                :{BLACK}{TINYFONT}MIN  '  '  ' '  '  '  MAX
+STR_01DD_MIN_MAX                                                :{BLACK}{TINYFONT}Vähim  '  '  ' '  '  '  Suurim
 STR_01DE_SKIP_TO_PREVIOUS_TRACK                                 :{BLACK}Eelmine lugu
 STR_01DF_SKIP_TO_NEXT_TRACK_IN_SELECTION                        :{BLACK}Järgmine lugu
 STR_01E0_STOP_PLAYING_MUSIC                                     :{BLACK}Lõpeta muusika mängimine
@@ -675,10 +677,10 @@
 STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1                          :{BLACK}Tühjenda valitud programm (ainult omatehtud 1 ja omatehtud 2)
 STR_01F9_SAVE_MUSIC_SETTINGS                                    :{BLACK}Muusikaseadete salvestamine
 STR_01FA_CLICK_ON_MUSIC_TRACK_TO                                :{BLACK}Vajuta loole, et seda programmi lisada (ainult omatehtud 1 ja omatehtud 2)
-STR_CLICK_ON_TRACK_TO_REMOVE                                    :{BLACK}Vajuta loole, et see eemaldada praegusest progammist (Custom1 või Custom2 ainult)
+STR_CLICK_ON_TRACK_TO_REMOVE                                    :{BLACK}Vajuta laulule, et see eemaldada praegusest progammist (Custom1 või Custom2 ainult)
 STR_01FB_TOGGLE_PROGRAM_SHUFFLE                                 :{BLACK}Lülita lugude segamine sisse ja välja
 STR_01FC_SHOW_MUSIC_TRACK_SELECTION                             :{BLACK}Näita muusikalugude valimise akent
-STR_01FD_CLICK_ON_SERVICE_TO_CENTER                             :{BLACK}Vajuta pakkumisele, et näha linna/tööstuse asukohta
+STR_01FD_CLICK_ON_SERVICE_TO_CENTER                             :{BLACK}Vajuta pakkumisele, et näha linna või tööstuse asukohta
 STR_01FE_DIFFICULTY                                             :{BLACK}Raskusaste ({STRING})
 STR_01FF                                                        :{TINYFONT}{BLACK}{DATE_LONG}
 STR_0200_LAST_MESSAGE_NEWS_REPORT                               :Viimane teade
@@ -694,7 +696,7 @@
 STR_NEWS_OPEN_CLOSE                                             :{YELLOW}Ava / sulge tööstuseid
 STR_020A_ECONOMY_CHANGES                                        :{YELLOW}Muutused majanduses
 STR_020B_ADVICE_INFORMATION_ON_PLAYER                           :{YELLOW}Soovitused ja teated mängija veovahendite kohta
-STR_020C_NEW_VEHICLES                                           :{YELLOW}Uued veovahendid
+STR_020C_NEW_VEHICLES                                           :{YELLOW}Uus veerem
 STR_020D_CHANGES_OF_CARGO_ACCEPTANCE                            :{YELLOW}Veoste vastuvõtutingimuste muutumine
 STR_020E_SUBSIDIES                                              :{YELLOW}Toetused
 STR_020F_GENERAL_INFORMATION                                    :{YELLOW}Üldine teave
@@ -726,8 +728,8 @@
 STR_022A_GENERATE_RANDOM_LAND                                   :{BLACK}Juhusliku kaardi loomine
 STR_022B_RESET_LANDSCAPE                                        :{BLACK}Nulli maastik
 STR_022C_RESET_LANDSCAPE                                        :{WHITE}Nulli maastik
-STR_RESET_LANDSCAPE_TOOLTIP                                     :{BLACK}Eemalda kogu mängija omand kaardilt
-STR_RESET_LANDSCAPE_CONFIRMATION_TEXT                           :{WHITE}Kas oled kindel, et tahad eemaldada kogu mängija omandi?
+STR_RESET_LANDSCAPE_TOOLTIP                                     :{BLACK}Eemalda kõik mängija omandid
+STR_RESET_LANDSCAPE_CONFIRMATION_TEXT                           :{WHITE}Kas oled kindel, et tahad lammutada kõik mängija omandid?
 STR_022E_LANDSCAPE_GENERATION                                   :{BLACK}Maastiku loomine
 STR_022F_TOWN_GENERATION                                        :{BLACK}Linnade loomine
 STR_0230_INDUSTRY_GENERATION                                    :{BLACK}Tööstuste loomine
@@ -756,7 +758,7 @@
 STR_0246_FACTORY                                                :{BLACK}Vabrik
 STR_0247_STEEL_MILL                                             :{BLACK}Terasetööstus
 STR_0248_FARM                                                   :{BLACK}Talu
-STR_0249_IRON_ORE_MINE                                          :{BLACK}Rauamaagi kaevandus
+STR_0249_IRON_ORE_MINE                                          :{BLACK}Rauamaagikaevandus
 STR_024A_OIL_WELLS                                              :{BLACK}Naftapuurauk
 STR_024B_BANK                                                   :{BLACK}Pank
 STR_024C_PAPER_MILL                                             :{BLACK}Paberitehas
@@ -772,7 +774,7 @@
 STR_0256_COPPER_ORE_MINE                                        :{BLACK}Vasemaagikaevandus
 STR_0257_COTTON_CANDY_FOREST                                    :{BLACK}Suhkruvatimets
 STR_0258_CANDY_FACTORY                                          :{BLACK}Maiustuste tehas
-STR_0259_BATTERY_FARM                                           :{BLACK}Patareifarm
+STR_0259_BATTERY_FARM                                           :{BLACK}Patareitalu
 STR_025A_COLA_WELLS                                             :{BLACK}Koolapumbad
 STR_025B_TOY_SHOP                                               :{BLACK}Mänguasjapood
 STR_025C_TOY_FACTORY                                            :{BLACK}Mänguasjatehas
@@ -784,12 +786,12 @@
 STR_0262_CONSTRUCT_COAL_MINE                                    :{BLACK}Ehita kivisöekaevandus
 STR_0263_CONSTRUCT_POWER_STATION                                :{BLACK}Ehita elektrijaam
 STR_0264_CONSTRUCT_SAWMILL                                      :{BLACK}Ehita saeveski
-STR_0265_PLANT_FOREST                                           :{BLACK}Istuta mets
+STR_0265_PLANT_FOREST                                           :{BLACK}Istuta metsa
 STR_0266_CONSTRUCT_OIL_REFINERY                                 :{BLACK}Ehita naftarafineerimistehas
-STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY                             :{BLACK}Ehita naftaplatvorm (seda saab ehitada vaid kaardi serva)
+STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY                             :{BLACK}Ehita naftaplatvorm (seda on võimalik ehitada ainult kaardi serva)
 STR_0268_CONSTRUCT_FACTORY                                      :{BLACK}Ehita vabrik
 STR_0269_CONSTRUCT_STEEL_MILL                                   :{BLACK}Ehita terasetööstus
-STR_026A_CONSTRUCT_FARM                                         :{BLACK}Raja farm
+STR_026A_CONSTRUCT_FARM                                         :{BLACK}Raja talu
 STR_026B_CONSTRUCT_IRON_ORE_MINE                                :{BLACK}Ehita rauamaagikaevandus
 STR_026C_CONSTRUCT_OIL_WELLS                                    :{BLACK}Ehita naftapuuraugud
 STR_026D_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Ehita pank (saab ehitada vaid linnadesse, mille rahvastikuarv ületab 1200)
@@ -798,16 +800,16 @@
 STR_0270_CONSTRUCT_PRINTING_WORKS                               :{BLACK}Ehita trükikoda
 STR_0271_CONSTRUCT_GOLD_MINE                                    :{BLACK}Ehita kullakaevandus
 STR_0272_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Ehita pank (saab vaid linnadesse ehitada)
-STR_0273_CONSTRUCT_LUMBER_MILL_TO                               :{BLACK}Ehita saeveski (vihmametsade puhustamiseks ja puidu tootmiseks)
+STR_0273_CONSTRUCT_LUMBER_MILL_TO                               :{BLACK}Ehita saeveskit (vihmametsade raideks ja puidu tootmiseks)
 STR_0274_PLANT_FRUIT_PLANTATION                                 :{BLACK}Istuta puuviljaistandus
 STR_0275_PLANT_RUBBER_PLANTATION                                :{BLACK}Istuta kummipuuistandus
 STR_0276_CONSTRUCT_WATER_SUPPLY                                 :{BLACK}Ehita veepumbad
 STR_0277_CONSTRUCT_WATER_TOWER_CAN                              :{BLACK}Ehita veetorn (saab ainult linnadesse ehitada)
 STR_0278_CONSTRUCT_DIAMOND_MINE                                 :{BLACK}Ehita teemantikaevandus
 STR_0279_CONSTRUCT_COPPER_ORE_MINE                              :{BLACK}Ehita vasemaagikaevandus
-STR_027A_PLANT_COTTON_CANDY_FOREST                              :{BLACK}Istuta suhkruvatimets
+STR_027A_PLANT_COTTON_CANDY_FOREST                              :{BLACK}Istuta suhkruvatimetsa
 STR_027B_CONSTRUCT_CANDY_FACTORY                                :{BLACK}Ehita maiustuste tehas
-STR_027C_CONSTRUCT_BATTERY_FARM                                 :{BLACK}Ehita patareifarm
+STR_027C_CONSTRUCT_BATTERY_FARM                                 :{BLACK}Ehita patareitalu
 STR_027D_CONSTRUCT_COLA_WELLS                                   :{BLACK}Ehita koolapumbad
 STR_027E_CONSTRUCT_TOY_SHOP                                     :{BLACK}Ehita mänguasjapood
 STR_027F_CONSTRUCT_TOY_FACTORY                                  :{BLACK}Ehita mänguasjatehas
@@ -862,12 +864,12 @@
 STR_FULL                                                        :Täielik
 STR_02BA                                                        :{SILVER}- -  {COMPANY}  - -
 STR_02BB_TOWN_DIRECTORY                                         :Linnanimistu
-STR_02BC_VEHICLE_DESIGN_NAMES                                   :{BLACK}Sõidukite disaini nimed
+STR_02BC_VEHICLE_DESIGN_NAMES                                   :{BLACK}Sõidukidisanide nimed
 STR_02BD                                                        :{BLACK}{STRING}
 STR_02BE_DEFAULT                                                :Vaikimisi valitud
 STR_02BF_CUSTOM                                                 :Omatehtud
 STR_02C0_SAVE_CUSTOM_NAMES                                      :{BLACK}Salvesta oma nimega
-STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION                         :{BLACK}Sõidukite disaininimede valik
+STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION                         :{BLACK}Sõidukidisainide nimevalik
 STR_02C2_SAVE_CUSTOMIZED_VEHICLE                                :{BLACK}Salvesta omatehtud disaininimed
 
 STR_CHECKMARK                                                   :{CHECKMARK}
@@ -876,11 +878,12 @@
 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
 STR_02CE_SIGNS_DISPLAYED                                        :{SETX 12}Näidatavad sildid
-STR_WAYPOINTS_DISPLAYED2                                        :{SETX 12}Näidatavad kontrollpunktid
+STR_WAYPOINTS_DISPLAYED2                                        :{SETX 12}Näidatavad meldepunktid
 STR_02D0_FULL_ANIMATION                                         :{SETX 12}Täielik animeerimine
 STR_02D2_FULL_DETAIL                                            :{SETX 12}Kõik üksikasjad
 STR_02D4_TRANSPARENT_BUILDINGS                                  :{SETX 12}Läbipaistvad hooned
@@ -888,7 +891,7 @@
 ############ range ends here
 
 ############ range for menu starts
-STR_02D5_LAND_BLOCK_INFO                                        :Maapinna informatsioon
+STR_02D5_LAND_BLOCK_INFO                                        :Maapinna andmed
 STR_02D6                                                        :
 STR_CONSOLE_SETTING                                             :Lülita konsool sisse/välja
 STR_02D7_SCREENSHOT_CTRL_S                                      :Ekraanitõmmis (Ctrl-S)
@@ -903,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}
@@ -912,24 +914,24 @@
 STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW                                :{BLACK}Kleebi vaateaknast
 STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT                             :{BLACK}Vaatealma koha võtmine peamiseks vaateks
 
-STR_02E0_CURRENCY_UNITS                                         :{BLACK}Rahaühik
+STR_02E0_CURRENCY_UNITS                                         :{BLACK}Valuuta
 STR_02E1                                                        :{BLACK}{SKIP}{STRING}
-STR_02E2_CURRENCY_UNITS_SELECTION                               :{BLACK}Rahaühiku valimine
+STR_02E2_CURRENCY_UNITS_SELECTION                               :{BLACK}Valuuta valimine
 STR_MEASURING_UNITS                                             :{BLACK}Mõõtmisühikud
 STR_02E4                                                        :{BLACK}{SKIP}{SKIP}{STRING}
 STR_MEASURING_UNITS_SELECTION                                   :{BLACK}Mõõtmisühikute valik
 STR_02E6_ROAD_VEHICLES                                          :{BLACK}Sõidukid
 STR_02E7                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{STRING}
-STR_02E8_SELECT_SIDE_OF_ROAD_FOR                                :{BLACK}Vali, kummal pool teed maanteesõidukid liiguvad
+STR_02E8_SELECT_SIDE_OF_ROAD_FOR                                :{BLACK}Vali, kummal pool teed mootorsõidukid liiklevad
 STR_02E9_DRIVE_ON_LEFT                                          :Vasakpoolne liiklus
 STR_02EA_DRIVE_ON_RIGHT                                         :Parempoolne liiklus
 STR_02EB_TOWN_NAMES                                             :{BLACK}Linnanimed
 STR_02EC                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
 STR_02ED_SELECT_STYLE_OF_TOWN_NAMES                             :{BLACK}Vali linnanimede stiil
 
-STR_02F4_AUTOSAVE                                               :{BLACK}Automaatsalvestus
+STR_02F4_AUTOSAVE                                               :{BLACK}Isesalvestus
 STR_02F5                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_02F6_SELECT_INTERVAL_BETWEEN                                :{BLACK}Vali intervall, mille järel automaatsalvestus toimub
+STR_02F6_SELECT_INTERVAL_BETWEEN                                :{BLACK}Vali intervall, mille järel isesalvestus toimub
 STR_02F7_OFF                                                    :Väljas
 STR_02F8_EVERY_3_MONTHS                                         :Iga 3 kuu tagant
 STR_02F9_EVERY_6_MONTHS                                         :Iga 6 kuu tagant
@@ -1046,7 +1048,7 @@
 STR_OPTIONS_SCREENSHOT_FORMAT_TIP                               :{BLACK}Valik, millises formaadis salvestatakse ekraanitõmmis
 
 STR_AUTOSAVE_1_MONTH                                            :Iga kuu
-STR_AUTOSAVE_FAILED                                             :{WHITE}Automaatsalvestus ebaõnnestus
+STR_AUTOSAVE_FAILED                                             :{WHITE}Isesalvestus ebaõnnestus
 
 STR_MONTH_JAN                                                   :Jaanuar
 STR_MONTH_FEB                                                   :Veebruar
@@ -1087,28 +1089,28 @@
 
 # Start of order review system.
 # DON'T ADD OR REMOVE LINES HERE
-STR_TRAIN_HAS_TOO_FEW_ORDERS                                    :{WHITE}Rongil {COMMA} marsruudis on liiga vähe sihtpunkte
+STR_TRAIN_HAS_TOO_FEW_ORDERS                                    :{WHITE}Rongi {COMMA} sõidugraafikus on liiga vähe sihtpunkte
 STR_TRAIN_HAS_VOID_ORDER                                        :{WHITE}Rongil {COMMA} on tühistatud käsklus
 STR_TRAIN_HAS_DUPLICATE_ENTRY                                   :{WHITE}Rongil {COMMA} on mõni sihtpunktidest topelt
 STR_TRAIN_HAS_INVALID_ENTRY                                     :{WHITE}Rongi {COMMA} plaanis on kehtetuid jaamu
-STR_ROADVEHICLE_HAS_TOO_FEW_ORDERS                              :{WHITE}Maanteesõiduki {COMMA} sõiduplaan sisaldab liiga vähe sihtpunkte
-STR_ROADVEHICLE_HAS_VOID_ORDER                                  :{WHITE}Maanteesõiduki {COMMA} sõiduplaan sisaldab kehtetuid sihtpunkte
-STR_ROADVEHICLE_HAS_DUPLICATE_ENTRY                             :{WHITE}Maanteesõidukil {COMMA} on mõni sihtpunkt on topelt
-STR_ROADVEHICLE_HAS_INVALID_ENTRY                               :{WHITE}Maanteesõiduki {COMMA} marsruudis on kehtetuid jaamu
+STR_ROADVEHICLE_HAS_TOO_FEW_ORDERS                              :{WHITE}Mootorsõiduki {COMMA} sõidugraafik sisaldab liiga vähe sihtpunkte
+STR_ROADVEHICLE_HAS_VOID_ORDER                                  :{WHITE}Mootorsõiduki {COMMA} sõidugraafik sisaldab kehtetuid sihtpunkte
+STR_ROADVEHICLE_HAS_DUPLICATE_ENTRY                             :{WHITE}Mootorsõidukil {COMMA} on mõni sihtpunkt on topelt
+STR_ROADVEHICLE_HAS_INVALID_ENTRY                               :{WHITE}Mootorsõiduki {COMMA} sõidugraafik sisaldab olematut jaama
 STR_SHIP_HAS_TOO_FEW_ORDERS                                     :{WHITE}Laeval {COMMA} on plaanis liiga vähe sihtpunkte
 STR_SHIP_HAS_VOID_ORDER                                         :{WHITE}Laeval {COMMA} on kehtetuid sihtpunkte
 STR_SHIP_HAS_DUPLICATE_ENTRY                                    :{WHITE}Laeval {COMMA} on mõni sihtpunkt on topelt
 STR_SHIP_HAS_INVALID_ENTRY                                      :{WHITE}Laeva {COMMA} plaanis on kehtetuid jaamu
-STR_AIRCRAFT_HAS_TOO_FEW_ORDERS                                 :{WHITE}Õhusõiduki {COMMA} sõiduplaanis on liiga vähe sihtpunkte
-STR_AIRCRAFT_HAS_VOID_ORDER                                     :{WHITE}Õhusõidukil {COMMA} on sõiduplaanis kehtetu sihtpunkt
+STR_AIRCRAFT_HAS_TOO_FEW_ORDERS                                 :{WHITE}Õhusõiduki {COMMA} sõidugraafikus on liiga vähe sihtpunkte
+STR_AIRCRAFT_HAS_VOID_ORDER                                     :{WHITE}Õhusõidukil {COMMA} on sõidugraafikus kehtetu sihtpunkt
 STR_AIRCRAFT_HAS_DUPLICATE_ENTRY                                :{WHITE}Õhusõidukil {COMMA} on topeltsihtpunkte
-STR_AIRCRAFT_HAS_INVALID_ENTRY                                  :{WHITE}Õhusõiduki {COMMA} sõiduplaanis on kehtetu jaam
+STR_AIRCRAFT_HAS_INVALID_ENTRY                                  :{WHITE}Õhusõiduki {COMMA} sõidugraafikus on kehtetu jaam
 # end of order system
 
-STR_TRAIN_AUTORENEW_FAILED                                      :{WHITE}Rongi automaatne uuendamine {COMMA} ebaõnnestus (rahalimiit)
-STR_ROADVEHICLE_AUTORENEW_FAILED                                :{WHITE}Maanteesõiduki automaatne uuendamine ebaõnnestus {COMMA} (rahalimiit)
-STR_SHIP_AUTORENEW_FAILED                                       :{WHITE}Laeva automaatne uuendamine ebaõnnestus {COMMA} (rahalimiit)
-STR_AIRCRAFT_AUTORENEW_FAILED                                   :{WHITE}Õhusõiduki automaatne uuendamine ebaõnnestus{COMMA} (rahapiirang)
+STR_TRAIN_AUTORENEW_FAILED                                      :{WHITE}Rongi iseuuendamine {COMMA} ebaõnnestus (rahapiirang)
+STR_ROADVEHICLE_AUTORENEW_FAILED                                :{WHITE}Mootorsõiduki iseuuendamine ebaõnnestus {COMMA} (rahapiirang)
+STR_SHIP_AUTORENEW_FAILED                                       :{WHITE}Laeva iseuuendamine ebaõnnestus {COMMA} (rahapiirang)
+STR_AIRCRAFT_AUTORENEW_FAILED                                   :{WHITE}Õhusõiduki iseuuendamine ebaõnnestus{COMMA} (rahapiirang)
 STR_TRAIN_TOO_LONG_AFTER_REPLACEMENT                            :{WHITE}Rong {COMMA} on peale asendust liiga pikk
 
 STR_CONFIG_PATCHES                                              :{BLACK}Paranduste seaded
@@ -1120,7 +1122,7 @@
 STR_CONFIG_PATCHES_VEHICLESPEED                                 :{LTBLUE}Näita olekuribal veovahendi kiirust: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_BUILDONSLOPES                                :{LTBLUE}Luba ehitised nõlvadele ja kallastele: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_CATCHMENT                                    :{LTBLUE}Võimalda reaalsemaid veekogu alasid: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_EXTRADYNAMITE                                :{LTBLUE}Luba linna teede, sildade, tunnelite jne eemaldamine: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_EXTRADYNAMITE                                :{LTBLUE}Luba linnateede, -sildade, -tunnelite jne lammutamine: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAMMOTHTRAINS                                :{LTBLUE}Luba väga pikkade rongide ehitamine: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_REALISTICACCEL                               :{LTBLUE}Aktiveeri realistlik rongide kiirendamine: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FORBID_90_DEG                                :{LTBLUE}Keela rongidel ja laevadel 90 kraadised pöörded: {ORANGE}{STRING} {LTBLUE} (vajab NPF)
@@ -1132,33 +1134,37 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Vii kaup jaama ainult siis, kui seal on nõudlus: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Luba väga pikkade sildade ehitus: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Luba 'mine depoosse' käsud: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Luba rajada toormaterjalide tehaseid: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}Põhiline tööstuse rajamise viis: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :pole
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :nagu muud tööstused
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :uurides
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Luba mitu sama liiki tööstust linna kohta: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Sama liiki tööstusi saab ehitada üksteise lähedale: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Alati näita olekuribal pikka kuupäeva: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SIGNALSIDE                                   :{LTBLUE}Paiguta signaaltuled raudteele arvestades sõidusuunda: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SIGNALSIDE                                   :{LTBLUE}Paiguta signaalid rööbasteele sõidusuunda arvestades: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SHOWFINANCES                                 :{LTBLUE}Näita rahaliste seisude akent iga aasta lõpus: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_NONSTOP                                  :{LTBLUE}TTDPatchiga ühilduv 'mittepeatumine': {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ROADVEH_QUEUE                                :{LTBLUE}Maanteesõidukite järjekorrad (koos mahueffektidega): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ROADVEH_QUEUE                                :{LTBLUE}Mootorsõidukite järjekorrad (koos mahueffektidega): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_AUTOSCROLL                                   :{LTBLUE}Keri vaadet, kui hiir on viidud ekraani serva: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BRIBE                                        :{LTBLUE}Luba kohalikele võimudele altkäemaksu maksmine: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_BRIBE                                        :{LTBLUE}Luba kohalikule omavalitsusele altkäemaksu maksmine: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Luba suvalise kujuga jaamad: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Uus teeotsimise algoritm(NPF asendab NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Raskete rongide simuleerimiseks kasutatav raskuse korrutaja: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Luba läbisõidupeatused linnateedel: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADJACENT_STATIONS                            :{LTBLUE}Luba jaamu lähestikku ehitada: {ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Luba väikesed lennujaamad kuni mängu lõpuni: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Luba väikesed lennuväljad kuni mängu lõpuni: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_WARN_LOST_TRAIN                              :{LTBLUE}Hoiata, kui rong on eksinud: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ORDER_REVIEW                                 :{LTBLUE}Sõidukite sihtpunktide ülevaade: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ORDER_REVIEW_OFF                             :ei
 STR_CONFIG_PATCHES_ORDER_REVIEW_EXDEPOT                         :jah, kuid jäta välja seisatud veovahendid
 STR_CONFIG_PATCHES_ORDER_REVIEW_ON                              :kõikidest veovahenditest
-STR_CONFIG_PATCHES_WARN_INCOME_LESS                             :{LTBLUE}Hoiata, kui rongi sissetulek on negatiivne: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_WARN_INCOME_LESS                             :{LTBLUE}Hoiata, kui rong tekitab kahjumit: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES                        :{LTBLUE}Sõidukid ei aegu: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AUTORENEW_VEHICLE                            :{LTBLUE}Uuenda vananemisel veovahendeid automaatselt
+STR_CONFIG_PATCHES_AUTORENEW_VEHICLE                            :{LTBLUE}Uuenda vananemisel veovahendeid ise
 STR_CONFIG_PATCHES_AUTORENEW_MONTHS                             :{LTBLUE}Uuenda {ORANGE}{STRING}{LTBLUE} kuud enne/pärast veovahendi suurimat vanust
-STR_CONFIG_PATCHES_AUTORENEW_MONEY                              :{LTBLUE}Automaatsetele uuendusele kuluv minimaalne raha: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTORENEW_MONEY                              :{LTBLUE}Iseuuendusele kuluv väikseim summa: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ERRMSG_DURATION                              :{LTBLUE}Veateate kuvamise kestus: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_POPULATION_IN_LABEL                          :{LTBLUE}Näita linna nimesildil rahvaarvu: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_INVISIBLE_TREES                              :{LTBLUE}Nähtamatud puud (läbipaistvate ehitistega): {ORANGE}{STRING}
@@ -1166,14 +1172,14 @@
 STR_CONFIG_PATCHES_LAND_GENERATOR                               :{LTBLUE}Maaala Generaator: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LAND_GENERATOR_ORIGINAL                      :Algupärane
 STR_CONFIG_PATCHES_LAND_GENERATOR_TERRA_GENESIS                 :TerraGenesis
-STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE                        :{LTBLUE}Suurim kaugus kaardi äärest nafta puuraukudeni {ORANGE}{STRING}
+STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE                        :{LTBLUE}Suurim kaugus kaardiservast naftapuuraukudeni {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SNOWLINE_HEIGHT                              :{LTBLUE}Lumepiiri kõrgus: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN                         :{LTBLUE}Maa mägisus (TerraGenesis ainult) : {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH             :Väga sile
 STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_SMOOTH                  :Sile
 STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_ROUGH                   :Mägine
 STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_ROUGH              :Väga mägine
-STR_CONFIG_PATCHES_TREE_PLACER                                  :{LTBLUE}Puude panemis süsteem: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TREE_PLACER                                  :{LTBLUE}Puuasetusalgoritm: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TREE_PLACER_NONE                             :Pole
 STR_CONFIG_PATCHES_TREE_PLACER_ORIGINAL                         :Algupärane
 STR_CONFIG_PATCHES_TREE_PLACER_IMPROVED                         :Täiustatud
@@ -1182,10 +1188,11 @@
 STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_CLOCKWISE                 :Päevapidi
 STR_CONFIG_PATCHES_SE_FLAT_WORLD_HEIGHT                         :{LTBLUE}Kõrguse level kui kõrgele lapik kaart läheb: {ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_STATION_SPREAD                               :{LTBLUE}Maksimaalne jaama ala: {ORANGE}{STRING} {RED}Hoiatus: kõrged seaded aeglustavad mängu
-STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Teeninda maandumisplatsidel helikoptereid automaatselt: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Lingi maastiku riba raudtee/tee/vee/lennujaama tööriistaribaga: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STATION_SPREAD                               :{LTBLUE}Suurim jaama ala: {ORANGE}{STRING} {RED}Hoiatus: kõrged seaded aeglustavad mängu
+STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Hoolda maandumisplatsidel ise helikoptereid: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Liida maastikuriba raudtee/tee/vee/lennujaamade tööriistaribaga: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Kui kerid hiirega, liiguta vaade vastassuunda: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING                             :{LTBLUE}Sujuv vaatevälja liigutamine: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Näita mitmesuguste ehitusvahendite kasutamisel mõõtmise kohtspikrit: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Näita firma livree: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES_NONE                                :Mitte ükski
@@ -1196,13 +1203,26 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_ZOOM                             :Suurenda kaarti
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Keri kaarti
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Väljas
-STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Kaarti kerimisratta kiirus: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automaatne mängu peatamine uue mängu alustamisel: {ORANGE}{STRING}
+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_DEFAULT_RAIL_TYPE                            :{LTBLUE}Algne rööbastee liik (mängu alustamisel/laadimisel): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Tavaline rööbastee
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Elektrifitseeritud rööbastee
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Monorelss
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :Esimene saadaval
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :Viimane saadaval
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :Enim kasutatud
 
-STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maks. rongide arv mängija kohta: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Suurim maanteesõidukite arv mängija kohta: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Suurim õhusõidukite arv mängija kohta: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAX_SHIPS                                    :{LTBLUE}Maksimaalne laevade arv mängija kohta: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Näita ehitustööriistu isegi siis, kui sobivaid sõidukeid veel pole: {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}
+STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Enim õhusõidukeid mängija kohta: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAX_SHIPS                                    :{LTBLUE}Enim laevu mängija kohta: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_AI_BUILDS_TRAINS                             :{LTBLUE}Arvuti ei tohi ronge kasutada: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH                            :{LTBLUE}Keela arvutile sõidukid: {ORANGE}{STRING}
@@ -1213,15 +1233,15 @@
 STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER                            :{LTBLUE}Luba TI (AI) võrgumängus (TESTIMISEL!): {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SERVINT_TRAINS                               :{LTBLUE}Vaikimisi hooldusintervall rongidele: {ORANGE}{STRING} päeva
-STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED                      :{LTBLUE}Vaikimisi teenindusvahemik rongidel: {ORANGE}välja lülitatud
-STR_CONFIG_PATCHES_SERVINT_ROADVEH                              :{LTBLUE}Vaikimisi valitud maanteesõidukite teenindusvahemik: {ORANGE}{STRING} päeva
-STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED                     :{LTBLUE}Vaikimisi valitud maanteesõidukite teenindusvahemik: {ORANGE}välja lülitatud
-STR_CONFIG_PATCHES_SERVINT_AIRCRAFT                             :{LTBLUE}Vaikimisi valitud õhusõidukite teenindusvahemik: {ORANGE}{STRING} päeva
-STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED                    :{LTBLUE}Vaikimisi valitud õhusõidukite teenindusvahemik: {ORANGE}välja lülitatud
+STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED                      :{LTBLUE}Vaikimisi hooldusperiood rongidele: {ORANGE}väljas
+STR_CONFIG_PATCHES_SERVINT_ROADVEH                              :{LTBLUE}Vaikimisi valitud mootorsõidukite hooldusvahemik: {ORANGE}{STRING} päeva
+STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED                     :{LTBLUE}Vaikimisi valitud mootorsõidukite hooldusvahemik: {ORANGE}välja lülitatud
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT                             :{LTBLUE}Vaikimisi valitud õhusõidukite hooldusperiood: {ORANGE}{STRING} päeva
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED                    :{LTBLUE}Vaikimisi valitud õhusõidukite hooldusperiood: {ORANGE}väljas
 STR_CONFIG_PATCHES_SERVINT_SHIPS                                :{LTBLUE}Vaikimisi hooldusintervall laevadele: {ORANGE}{STRING} päeva
-STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED                       :{LTBLUE}Vaikimisi teenindusvahemik laevadele: {ORANGE}välja lülitatud
-STR_CONFIG_PATCHES_NOSERVICE                                    :{LTBLUE}Keela teenindamine, kui lagunemine on välja lülitatud: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_WAGONSPEEDLIMITS                             :{LTBLUE}Luba vaguni kiiruse limiidid: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED                       :{LTBLUE}Vaikimisi hooldusperiood laevadele: {ORANGE}väljas
+STR_CONFIG_PATCHES_NOSERVICE                                    :{LTBLUE}Keela hooldus, kui rikkiminemine on välja lülitatud: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_WAGONSPEEDLIMITS                             :{LTBLUE}Luba vagunite kiiruspiirangud: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_DISABLE_ELRAILS                              :{LTBLUE}Keela elektrirongid: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_COLORED_NEWS_YEAR                            :{LTBLUE}Värvilised uudised ilmuvad aastast {ORANGE}{STRING}
@@ -1229,16 +1249,16 @@
 STR_CONFIG_PATCHES_ENDING_YEAR                                  :{LTBLUE}Mäng lõppeb aastal: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SMOOTH_ECONOMY                               :{LTBLUE}Luba sujuv majandus (väiksemad muutused)
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Luba teiste ettevõtete aktsiate ostmine
-STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Venitades paigutatud signaaltulede tihedus: {ORANGE}{STRING} ühik(ut)
-STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Ehita semaforid automaatselt enne: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Venitades rajatavate signaalide paigutustihedus: {ORANGE}{STRING} ühik(ut)
+STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Ehita ise semaforid enne: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}Stsenaariumiredaktor ei tunnista "ilma teedeta" linnaplaneeringut
-STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Vali linnale teeplaan: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :ilma teedeta
-STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :tavalised
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Vali linnale teedeplaneering: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :rohkem teid ei ole
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :vaikimisi
 STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :paremad teed
-STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :2x2 ruudustik
-STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :3x3 ruudustik
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :2x2 võrgustik
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :3x3 võrgustik
 
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Tööriistariba asukoht: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Vasakul
@@ -1246,14 +1266,14 @@
 STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :Paremal
 STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}Akna haaramise raadius: {ORANGE}{STRING} px
 STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}Akna haaramise raadius: {ORANGE}välja lülitatud
-STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}Linna suurenemise kiirus: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}Linna kasvutempo: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :Pole
 STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :Aeglane
 STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :Normaalne
 STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :Kiire
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Väga Kiire
-STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Topeltkiirusel suurenevaid linnu: {ORANGE}1 iga {STRING} linna kohta
-STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Topeltkiirusel suurenevaid linnu: {ORANGE}puudub
+STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Topeltkiirusel kasvavaid linnu: {ORANGE}1 iga {STRING} linna kohta
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Topeltkiirusel kasvavaid linnu: {ORANGE}puudub
 STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Algne linna suuruse kordaja: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Välimus
@@ -1268,7 +1288,7 @@
 STR_CONFIG_PATCHES_CURRENCY                                     :{CURRENCY}
 
 STR_CONFIG_PATCHES_QUERY_CAPT                                   :{WHITE}Muuda seadete väärtusi
-STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE                :{WHITE}Mõni või kõik vaikimisi teenindusvahemikud on kõlbmatud! Lubatud on 5-90% või 30-800 päeva
+STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE                :{WHITE}Mõni või kõik vaikimisi hooldusperioodid on kõlbmatud! Lubatud on 5-90% või 30-800 päeva
 STR_CONFIG_PATCHES_YAPF_SHIPS                                   :{LTBLUE}Kasuta YAPF'i laevadel: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_YAPF_ROAD                                    :{LTBLUE}Kasuta YAPF'i autodel: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_YAPF_RAIL                                    :{LTBLUE}Kasuta YAPF'i rongidel: {ORANGE}{STRING}
@@ -1281,38 +1301,38 @@
 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 objektide eemaldamine): {ORANGE}{STRING}
+STR_CHEAT_EXTRA_DYNAMITE                                        :{LTBLUE}Maagiline buldooser (eemaldamatute rajatiste lammutamine): {ORANGE}{STRING}
 STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tunnelid võivad üksteist läbida: {ORANGE}{STRING}
 STR_CHEAT_BUILD_IN_PAUSE                                        :{LTBLUE}Pausi ajal ehitamine: {ORANGE}{STRING}
-STR_CHEAT_NO_JETCRASH                                           :{LTBLUE}Reaktiivlennukid ei kuku alla (tihti) väikestel lennuväljadel: {ORANGE} {STRING}
+STR_CHEAT_NO_JETCRASH                                           :{LTBLUE}Reaktiivlennukid ei kuku (tihti) alla väikestel lennuväljadel: {ORANGE} {STRING}
 STR_CHEAT_SWITCH_CLIMATE                                        :{LTBLUE}Vaheta kliimat: {ORANGE} {STRING}
 STR_CHEAT_CHANGE_DATE                                           :{LTBLUE}Muuda kuupäeva: {ORANGE} {DATE_SHORT}
 STR_CHEAT_SETUP_PROD                                            :{LTBLUE}Luba muutuvad tootmisväärtused: {ORANGE}{STRING}
 
-STR_HEADING_FOR_WAYPOINT                                        :{LTBLUE}Suudub kontrollpunti: {WAYPOINT}
+STR_HEADING_FOR_WAYPOINT                                        :{LTBLUE}Suudub meldepunkti: {WAYPOINT}
 STR_HEADING_FOR_WAYPOINT_VEL                                    :{LTBLUE}Suundub {WAYPOINT}, {VELOCITY}
 
 STR_GO_TO_WAYPOINT                                              :Läbi punkti {WAYPOINT}
 STR_GO_NON_STOP_TO_WAYPOINT                                     :Läbi peatumata punkti{WAYPOINT}
 
-STR_WAYPOINTNAME_CITY                                           :Kontrollpunkt {TOWN}
-STR_WAYPOINTNAME_CITY_SERIAL                                    :Kontrollpunkt {TOWN} #{COMMA}
-STR_LANDINFO_WAYPOINT                                           :Kontrollpunkt
+STR_WAYPOINTNAME_CITY                                           :{TOWN} meldepunkt
+STR_WAYPOINTNAME_CITY_SERIAL                                    :Meldepunkt {TOWN} #{COMMA}
+STR_LANDINFO_WAYPOINT                                           :Meldepunkt
 
-STR_WAYPOINT                                                    :{WHITE}Kontrollpunkt
-STR_WAYPOINT_GRAPHICS_TIP                                       :{BLACK}Kontrollpunkti tüübi valik
+STR_WAYPOINT                                                    :{WHITE}Meldepunkt
+STR_WAYPOINT_GRAPHICS_TIP                                       :{BLACK}Vali meldepunkti liik
 
 STR_WAYPOINT_VIEWPORT                                           :{WHITE}{WAYPOINT}
 STR_WAYPOINT_VIEWPORT_TINY                                      :{TINYFONT}{WHITE}{WAYPOINT}
 STR_WAYPOINT_RAW                                                :{WAYPOINT}
-STR_EDIT_WAYPOINT_NAME                                          :{WHITE}Kontrollpunkti nime muutmine
+STR_EDIT_WAYPOINT_NAME                                          :{WHITE}Muuda meldepunkti nime
 
-STR_CANT_CHANGE_WAYPOINT_NAME                                   :{WHITE}Kontrollpunkti nime ei saa muuta...
-STR_CONVERT_RAIL_TO_WAYPOINT_TIP                                :{BLACK}Rööbaste muutmine kontrollpunktiks
-STR_CANT_BUILD_TRAIN_WAYPOINT                                   :{WHITE}Rongide kontrollpunkti ei saa siia teha...
-STR_CANT_REMOVE_TRAIN_WAYPOINT                                  :{WHITE}Rongide kontrollpunkti ei saa siit eemaldada...
+STR_CANT_CHANGE_WAYPOINT_NAME                                   :{WHITE}Meldepunkti nime ei saa muuta...
+STR_CONVERT_RAIL_TO_WAYPOINT_TIP                                :{BLACK}Muuda rööpad meldepunktiks
+STR_CANT_BUILD_TRAIN_WAYPOINT                                   :{WHITE}Meldepunkti ei saa siia rajada...
+STR_CANT_REMOVE_TRAIN_WAYPOINT                                  :{WHITE}Meldepunkti ei saa siit eemaldada...
 
 STR_BUILD_AUTORAIL_TIP                                          :{BLACK}Rööbaste ehitamine kasutades "venitamist"
 
@@ -1321,7 +1341,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Oled sa kindel, et soovid luua suvalist maastikku?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Palju suvalisi linnu
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Kaardi katmine suvaliselt asetatud linnadega
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Palju suvalisi tööstusi
+STR_MANY_RANDOM_INDUSTRIES                                      :Palju suvalisi tööstusi
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Kata kaart suvaliselt paigutatud tööstustega
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Tööstust ei saa tekitada...
 
@@ -1345,9 +1365,9 @@
 
 STR_LANDINFO_COORDS                                             :{BLACK}Koordinaadid: {LTBLUE}{NUM}x{NUM} ({STRING})
 
-STR_CANT_REMOVE_PART_OF_STATION                                 :{WHITE}Jaamaosa ei saa eemaldada...
+STR_CANT_REMOVE_PART_OF_STATION                                 :{WHITE}Siinset jaamablokki ei saa lammutada...
 STR_CANT_CONVERT_RAIL                                           :{WHITE}Siin ei saa raudteetüüpi muuta...
-STR_CONVERT_RAIL_TIP                                            :{BLACK}Muuda/uuenda raudteetüüpi
+STR_CONVERT_RAIL_TIP                                            :{BLACK}Muuda/uuenda rööpaliiki
 
 STR_DRAG_WHOLE_TRAIN_TO_SELL_TIP                                :{BLACK}Tõsta vedur siia, et kogu rong maha müüa
 
@@ -1362,25 +1382,25 @@
 STR_MESSAGES_DISABLE_ALL                                        :{BLACK}Lülita kõik välja
 STR_MESSAGES_ENABLE_ALL                                         :{BLACK}Luba kõik
 
-STR_CONSTRUCT_COAL_MINE_TIP                                     :{BLACK}Kivisöe kaevanduse ehitamine
+STR_CONSTRUCT_COAL_MINE_TIP                                     :{BLACK}Kivisöekaevanduse ehitamine
 STR_CONSTRUCT_FOREST_TIP                                        :{BLACK}Metsa istutamine
 STR_CONSTRUCT_OIL_RIG_TIP                                       :{BLACK}Naftaplatrvormi ehitamine
 STR_CONSTRUCT_FARM_TIP                                          :{BLACK}Talu rajamine
-STR_CONSTRUCT_COPPER_ORE_MINE_TIP                               :{BLACK}Vasemaagi kaevanduse ehitamine
+STR_CONSTRUCT_COPPER_ORE_MINE_TIP                               :{BLACK}Vasemaagikaevanduse ehitamine
 STR_CONSTRUCT_OIL_WELLS_TIP                                     :{BLACK}Naftapuuraugu ehitamine
 STR_CONSTRUCT_GOLD_MINE_TIP                                     :{BLACK}Kullakaevanduse ehitamine
 STR_CONSTRUCT_DIAMOND_MINE_TIP                                  :{BLACK}Teemantikaevanduse ehitamine
-STR_CONSTRUCT_IRON_ORE_MINE_TIP                                 :{BLACK}Rauamaagi kaevandus ehitamine
-STR_CONSTRUCT_FRUIT_PLANTATION_TIP                              :{BLACK}Puuviljaistandusue istutamine
-STR_CONSTRUCT_RUBBER_PLANTATION_TIP                             :{BLACK}Kummipuu istanduse istutamine
-STR_CONSTRUCT_WATER_SUPPLY_TIP                                  :{BLACK}Rahasta Veevärki
-STR_CONSTRUCT_COTTON_CANDY_TIP                                  :{BLACK}Suhkruvati metsa istutamine
-STR_CONSTRUCT_BATTERY_FARM_TIP                                  :{BLACK}Patarei talu ehitamine
+STR_CONSTRUCT_IRON_ORE_MINE_TIP                                 :{BLACK}Rauamaagikaevanduse ehitamine
+STR_CONSTRUCT_FRUIT_PLANTATION_TIP                              :{BLACK}Puuviljaistanduse istutamine
+STR_CONSTRUCT_RUBBER_PLANTATION_TIP                             :{BLACK}Kummipuuistanduse istutamine
+STR_CONSTRUCT_WATER_SUPPLY_TIP                                  :{BLACK}Rahasta veevärki
+STR_CONSTRUCT_COTTON_CANDY_TIP                                  :{BLACK}Suhkruvatimetsa istutamine
+STR_CONSTRUCT_BATTERY_FARM_TIP                                  :{BLACK}Patareitalu ehitamine
 STR_CONSTRUCT_COLA_WELLS_TIP                                    :{BLACK}Koolapumpade ehitamine
 STR_CONSTRUCT_PLASTIC_FOUNTAINS_TIP                             :{BLACK}Plastmassiallikate tekitamine
 STR_CONSTRUCT_BUBBLE_GENERATOR_TIP                              :{BLACK}Mulligeneraatori ehitamine
 STR_CONSTRUCT_TOFFEE_QUARRY_TIP                                 :{BLACK}Iirisekaevanduse ehitamine
-STR_CONSTRUCT_SUGAR_MINE_TIP                                    :{BLACK}Suhkrukaevandus ehitamine
+STR_CONSTRUCT_SUGAR_MINE_TIP                                    :{BLACK}Suhkrukaevanduse ehitamine
 
 STR_INDUSTRYDIR_CAPTION                                         :{WHITE}Tööstused
 STR_INDUSTRYDIR_ITEM                                            :{ORANGE}{INDUSTRY}{BLACK} ({CARGO}){YELLOW} ({COMMA}% veetud)
@@ -1394,11 +1414,11 @@
 STR_RAIL_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Vali laadung, mida rong peaks kandma
 STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED                             :{BLACK}Rongi ümberseadistamine valitud laadungi vedamiseks
 STR_RAIL_CAN_T_REFIT_VEHICLE                                    :{WHITE}Ei ole võimalik ümber seadistada...
-STR_CONFIG_PATCHES_SERVINT_ISPERCENT                            :{LTBLUE}Teenindusvahemikud on protsentides: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SERVINT_ISPERCENT                            :{LTBLUE}Hooldusperioodid on protsentides: {ORANGE}{STRING}
 STR_CONFIG_GAME_PRODUCTION                                      :{WHITE}Tootlikuse muutmine
 
 TEMP_AI_IN_PROGRESS                                             :{WHITE}Tervitused uuele TI'le(AI). Töö selle kallal veel käib. Peaksite eeldama, et esineb probleeme. Kui juhtud tegema kuvatõmmise, siis postita see ka foorumisse. Edu!
-TEMP_AI_ACTIVATED                                               :{WHITE}Hoiatus: uus tehisintelligents on veel katsetamisel! Hetkel töötavad ainult maanteesõidukid!
+TEMP_AI_ACTIVATED                                               :{WHITE}Hoiatus: uus tehisintelligents on veel eelkatsetamisel! Hetkel töötavad ainult mootorsõidukid!
 TEMP_AI_MULTIPLAYER                                             :{WHITE}TÄHELEPANU! Seda funksiooni veel teistitakse. Palun teata kõik probleemid sellega truelight@openttd.org.
 
 ############ network gui strings
@@ -1415,7 +1435,7 @@
 
 STR_NETWORK_GAME_NAME                                           :{BLACK}Nimi
 STR_NETWORK_GAME_NAME_TIP                                       :{BLACK}Mängu nimi
-STR_NETWORK_INFO_ICONS_TIP                                      :{BLACK}Keel, serveri versioon, jne.
+STR_NETWORK_INFO_ICONS_TIP                                      :{BLACK}Suhtluskeel, serveri versioon, jne.
 STR_NETWORK_CLICK_GAME_TO_SELECT                                :{BLACK}Mäng valimiseks vajuta nimekirjas olevale nimele
 
 STR_NETWORK_FIND_SERVER                                         :{BLACK}Serveri otsimine
@@ -1426,8 +1446,8 @@
 
 STR_NETWORK_GENERAL_ONLINE                                      :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA}
 STR_NETWORK_CLIENTS_CAPTION                                     :{BLACK}Kliendid
-STR_NETWORK_CLIENTS_CAPTION_TIP                                 :{BLACK}Kliente sees / maksimum
-STR_NETWORK_GAME_INFO                                           :{SILVER}MÄNGU INFO
+STR_NETWORK_CLIENTS_CAPTION_TIP                                 :{BLACK}Kliente sees / enim kliente{}Ettevõtteid sees / enim ettevõtteid
+STR_NETWORK_GAME_INFO                                           :{SILVER}MÄNGU ANDMED
 STR_ORANGE                                                      :{ORANGE}{STRING}
 STR_NETWORK_CLIENTS                                             :{SILVER}Kliendid:  {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
 STR_NETWORK_LANGUAGE                                            :{SILVER}Keel:  {WHITE}{STRING}
@@ -1454,7 +1474,7 @@
 STR_NETWORK_PASSWORD_TIP                                        :{BLACK}Kaitse oma mäng parooliga, kui sa ei taha, et kõik sellele ligi pääseksid
 STR_NETWORK_SELECT_MAP                                          :{BLACK}Vali kaart:
 STR_NETWORK_SELECT_MAP_TIP                                      :{BLACK}Millist kaarti sa tahad mängida?
-STR_NETWORK_NUMBER_OF_CLIENTS                                   :{BLACK}Maksimaalne klientide arv:
+STR_NETWORK_NUMBER_OF_CLIENTS                                   :{BLACK}Suurim klientide arv:
 STR_NETWORK_NUMBER_OF_CLIENTS_TIP                               :{BLACK}Määra suurim klientide arv. Kõik vabad kohad ei pea täidetud olema
 STR_NETWORK_COMBO1                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
 STR_NETWORK_LAN                                                 :kohtvõrk (LAN)
@@ -1473,10 +1493,10 @@
 STR_NETWORK_8_PLAYERS                                           :8 mängijat
 STR_NETWORK_9_PLAYERS                                           :9 mängijat
 STR_NETWORK_10_PLAYERS                                          :10 mängijat
-STR_NETWORK_NUMBER_OF_COMPANIES                                 :{BLACK}Maks. firmasi:
+STR_NETWORK_NUMBER_OF_COMPANIES                                 :{BLACK}Enim ettevõtteid:
 STR_NETWORK_NUMBER_OF_COMPANIES_TIP                             :{BLACK}Luba serveris X mängijat
 STR_NETWORK_COMBO3                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_NUMBER_OF_SPECTATORS                                :{BLACK}Maks. vaatajaid
+STR_NETWORK_NUMBER_OF_SPECTATORS                                :{BLACK}Enim pealtvaatajaid
 STR_NETWORK_NUMBER_OF_SPECTATORS_TIP                            :{BLACK}Luba serveris X vaatajat
 STR_NETWORK_COMBO4                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
 STR_NETWORK_LANGUAGE_SPOKEN                                     :{BLACK}Räägitav keel:
@@ -1492,6 +1512,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :Inglise keel
 STR_NETWORK_LANG_GERMAN                                         :Saksa keel
 STR_NETWORK_LANG_FRENCH                                         :Prantsuse keel
+STR_NETWORK_LANG_BRAZILIAN                                      :Brasiilia
+STR_NETWORK_LANG_BULGARIAN                                      :Bulgaaria
+STR_NETWORK_LANG_CHINESE                                        :Hiina
+STR_NETWORK_LANG_CZECH                                          :Tšehhi
+STR_NETWORK_LANG_DANISH                                         :Taani
+STR_NETWORK_LANG_DUTCH                                          :Hollandi
+STR_NETWORK_LANG_ESPERANTO                                      :Esperanto
+STR_NETWORK_LANG_FINNISH                                        :Soome
+STR_NETWORK_LANG_HUNGARIAN                                      :Ungari
+STR_NETWORK_LANG_ICELANDIC                                      :Islandi
+STR_NETWORK_LANG_ITALIAN                                        :Itaalia
+STR_NETWORK_LANG_JAPANESE                                       :Jaapani
+STR_NETWORK_LANG_KOREAN                                         :Korea
+STR_NETWORK_LANG_LITHUANIAN                                     :Leedu
+STR_NETWORK_LANG_NORWEGIAN                                      :Norra
+STR_NETWORK_LANG_POLISH                                         :Poola
+STR_NETWORK_LANG_PORTUGUESE                                     :Portugali
+STR_NETWORK_LANG_ROMANIAN                                       :Rumeenia
+STR_NETWORK_LANG_RUSSIAN                                        :Vene
+STR_NETWORK_LANG_SLOVAK                                         :Slovakkia
+STR_NETWORK_LANG_SLOVENIAN                                      :Sloveenia
+STR_NETWORK_LANG_SPANISH                                        :Hispaania
+STR_NETWORK_LANG_SWEDISH                                        :Rootsi
+STR_NETWORK_LANG_TURKISH                                        :Türgi
+STR_NETWORK_LANG_UKRAINIAN                                      :Ukraina
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Võrgumängu jututuba
@@ -1507,13 +1552,13 @@
 STR_NETWORK_REFRESH                                             :{BLACK}Värskenda servereid
 STR_NETWORK_REFRESH_TIP                                         :{BLACK}Serveri info värskendamine
 
-STR_NETWORK_COMPANY_INFO                                        :{SILVER}ETTEVÕTE INFO
+STR_NETWORK_COMPANY_INFO                                        :{SILVER}ETTEVÕTE ANDMED
 
 STR_NETWORK_COMPANY_NAME                                        :{SILVER}Ettevõtte nimi:  {WHITE}{STRING}
 STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Avamine:  {WHITE}{NUM}
-STR_NETWORK_VALUE                                               :{SILVER}Ettevõtte väärtus:  {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Rahaline seis:  {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Eelmise aasta sissetulek:  {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}
@@ -1628,93 +1673,119 @@
 ##id 0x0800
 STR_0800_COST                                                   :{TINYFONT}{RED}Hind: {CURRENCY}
 STR_0801_COST                                                   :{RED}Hind: {CURRENCY}
-STR_0802_INCOME                                                 :{TINYFONT}{GREEN}Sissetulek: {CURRENCY}
-STR_0803_INCOME                                                 :{GREEN}Sissetulek: {CURRENCY}
+STR_0802_INCOME                                                 :{TINYFONT}{GREEN}Tulu: {CURRENCY}
+STR_0803_INCOME                                                 :{GREEN}Tulu: {CURRENCY}
 STR_FEEDER_TINY                                                 :{TINYFONT}{YELLOW}Kanna üle: {CURRENCY}
 STR_FEEDER                                                      :{YELLOW}Kanna üle: {CURRENCY}
 STR_0805_ESTIMATED_COST                                         :{WHITE}Eeldatav hind: {CURRENCY}
-STR_0807_ESTIMATED_INCOME                                       :{WHITE}Eeldatav sissetulek: {CURRENCY}
+STR_0807_ESTIMATED_INCOME                                       :{WHITE}Eeldatavad tulud: {CURRENCY}
 STR_0808_CAN_T_RAISE_LAND_HERE                                  :{WHITE}Siin ei saa maad kõrgendada...
 STR_0809_CAN_T_LOWER_LAND_HERE                                  :{WHITE}Siin ei saa maad madaldada...
 STR_080A_ROCKS                                                  :Kaljud
 STR_080B_ROUGH_LAND                                             :Konarlik maa
 STR_080C_BARE_LAND                                              :Lage maa
-STR_080D_GRASS                                                  :Muru
+STR_080D_GRASS                                                  :Rohi
 STR_080E_FIELDS                                                 :Põllud
 STR_080F_SNOW_COVERED_LAND                                      :Lumekattega maa
 STR_0810_DESERT                                                 :Kõrb
 
 ##id 0x1000
 STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION                         :{WHITE}Maa on vales suunas kaldu
-STR_1001_IMPOSSIBLE_TRACK_COMBINATION                           :{WHITE}Teostamatu raudteede kombinatsioon
+STR_1001_IMPOSSIBLE_TRACK_COMBINATION                           :{WHITE}Teostamatu rööbasteede kooslus
 STR_1002_EXCAVATION_WOULD_DAMAGE                                :{WHITE}Kaevandamine kahjustaks tunnelit
 STR_1003_ALREADY_AT_SEA_LEVEL                                   :{WHITE}Juba jõutud meretasemeni
 STR_1004_TOO_HIGH                                               :{WHITE}Liiga kõrge
 STR_1005_NO_SUITABLE_RAILROAD_TRACK                             :{WHITE}Sobiv rongitee puudub
 STR_1007_ALREADY_BUILT                                          :{WHITE}...juba ehitatud
-STR_1008_MUST_REMOVE_RAILROAD_TRACK                             :{WHITE}Raudtee tuleb eelnevalt eemaldada
-STR_100A_RAILROAD_CONSTRUCTION                                  :{WHITE}Raudteede ehitamine
-STR_TITLE_ELRAIL_CONSTRUCTION                                   :{WHITE}Elektriraudtee ehitus
-STR_100B_MONORAIL_CONSTRUCTION                                  :{WHITE}Monorelsi ehitus
-STR_100C_MAGLEV_CONSTRUCTION                                    :{WHITE}MagLevi ehitus
+STR_1008_MUST_REMOVE_RAILROAD_TRACK                             :{WHITE}Rööbastee tuleb eelnevalt lammutada
+STR_100A_RAILROAD_CONSTRUCTION                                  :{WHITE}Rööbastee ehitamine
+STR_TITLE_ELRAIL_CONSTRUCTION                                   :{WHITE}Elektrifitseeritud rööbastee ehitus
+STR_100B_MONORAIL_CONSTRUCTION                                  :{WHITE}Monorööbastee ehitamine
+STR_100C_MAGLEV_CONSTRUCTION                                    :{WHITE}Elektromageetilise rööbastee ehitamine
 STR_100D_SELECT_RAIL_BRIDGE                                     :{WHITE}Vali raudteesild
 STR_100E_CAN_T_BUILD_TRAIN_DEPOT                                :{WHITE}Siia ei saa depood ehitada...
-STR_100F_CAN_T_BUILD_RAILROAD_STATION                           :{WHITE}Siia ei saa rongijaama ehitada...
-STR_1010_CAN_T_BUILD_SIGNALS_HERE                               :{WHITE}Siia ei saa signaaltuld asetada...
-STR_1011_CAN_T_BUILD_RAILROAD_TRACK                             :{WHITE}Siia ei saa raudteed ehitada...
-STR_1012_CAN_T_REMOVE_RAILROAD_TRACK                            :{WHITE}Siit ei saa raudteed eemaldada...
-STR_1013_CAN_T_REMOVE_SIGNALS_FROM                              :{WHITE}Siit ei saa signaaltulesid eemaldada...
+STR_100F_CAN_T_BUILD_RAILROAD_STATION                           :{WHITE}Siia ei saa raudteejaama ehitada...
+STR_1010_CAN_T_BUILD_SIGNALS_HERE                               :{WHITE}Siia ei saa signaale rajada...
+STR_1011_CAN_T_BUILD_RAILROAD_TRACK                             :{WHITE}Siia ei saa rööbasteed ehitada...
+STR_1012_CAN_T_REMOVE_RAILROAD_TRACK                            :{WHITE}Siit ei saa rööbasteed lammutada...
+STR_1013_CAN_T_REMOVE_SIGNALS_FROM                              :{WHITE}Siit ei saa signaale lammutada...
 STR_1014_TRAIN_DEPOT_ORIENTATION                                :{WHITE}Depoo suund
-STR_1015_RAILROAD_CONSTRUCTION                                  :Raudtee ehitus
-STR_TOOLB_ELRAIL_CONSTRUCTION                                   :Elektriraudtee ehitus
-STR_1016_MONORAIL_CONSTRUCTION                                  :Monorelsi ehitus
-STR_1017_MAGLEV_CONSTRUCTION                                    :MagLevi ehitus
-STR_1018_BUILD_RAILROAD_TRACK                                   :{BLACK}Ehita rongitee
+STR_1015_RAILROAD_CONSTRUCTION                                  :Rööbastee ehitamine
+STR_TOOLB_ELRAIL_CONSTRUCTION                                   :Elektrifitseeritud rööbastee ehitus
+STR_1016_MONORAIL_CONSTRUCTION                                  :Monorööbastee ehitamine
+STR_1017_MAGLEV_CONSTRUCTION                                    :Elektromagneetilise rööbastee ehitamine
+STR_1018_BUILD_RAILROAD_TRACK                                   :{BLACK}Ehita rööbasteed
 STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING                         :{BLACK}Ehita rongidepoo (rongide ehitamiseks ja hoolduseks)
-STR_101A_BUILD_RAILROAD_STATION                                 :{BLACK}Ehita rongijaam
-STR_101B_BUILD_RAILROAD_SIGNALS                                 :{BLACK}Ehita rongisignaalid
+STR_101A_BUILD_RAILROAD_STATION                                 :{BLACK}Ehita raudteejaam
+STR_101B_BUILD_RAILROAD_SIGNALS                                 :{BLACK}Ehita rööbasteesignaale
 STR_101C_BUILD_RAILROAD_BRIDGE                                  :{BLACK}Ehita raudteesild
 STR_101D_BUILD_RAILROAD_TUNNEL                                  :{BLACK}Ehita rongitunnel
-STR_101E_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Rööbaste ja signaaltulede ehitamine/eemaldamine
+STR_101E_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Lülitu rööbastee ja signaalide ehitamise ja lammutamise vahel
 STR_101F_BRIDGE_SELECTION_CLICK                                 :{BLACK}Silla valik - klõpsa sobivale sillale, et seda ehitada
 STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO                       :{BLACK}Depoole suuna valimine
-STR_1021_RAILROAD_TRACK                                         :Raudtee
+STR_1021_RAILROAD_TRACK                                         :Rööbastee
 STR_1023_RAILROAD_TRAIN_DEPOT                                   :Rongidepoo
 STR_1024_AREA_IS_OWNED_BY_ANOTHER                               :{WHITE}...ala kuulub teisele ettevõttele
-STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS                          :Raudtee tavaliste signaaltuledega
-STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Raudtee eel-signaalidega
-STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Raudtee väljumis-signaalidega
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Raudtee mitmiksignaalidega
+STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS                          :Rööbastee läbisõidusignaalidega
+STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Rööbastee sissesõidusignaalidega
+STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Rööbastee väljasõidusignaalidega
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Rööbastee mitmiksignaalidega
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Rööbastee läbisõidu- ja hoiatussignaalidega
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Rööbastee läbisõidu- ja väljasõidusignaalidega
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Rööbastee läbisõidu- ja mitmiksignaalidega
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Rööbastee hoiatus- ja väljasõidusignaalidega
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Rööbastee hoiatus- ja mitmiksignaalidega
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Rööbastee väljasõidu- ja mitmiksignaalidega
+STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Raudteejaama peab eelnevalt lammutama
 
 
 
 ##id 0x1800
-STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Enne on vaja maantee eemaldada
+STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Enne on vaja sõidutee lammutada
 STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Teede ehitamine
-STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Teede ehitamine
+STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Sõiduteede ehitus
+STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Trammitee ehitamine
 STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Vali sillatüüp
-STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Siia ei saa maanteed ehitada...
-STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Siit ei saa maanteed eemaldada...
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}... ühesuunalised teed ei saa teedesõlmi omada
+STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Siia ei saa sõiduteed ehitada...
+STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}Trammiteed ei ole võimalik siia rajada...
+STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Siinset sõiduteed ei saa lammutada...
+STR_1805_CAN_T_REMOVE_TRAMWAY_FROM                              :{WHITE}Siinset trammiteed ei saa lammutada...
 STR_1806_ROAD_DEPOT_ORIENTATION                                 :{WHITE}Depoo suund
+STR_1806_TRAM_DEPOT_ORIENTATION                                 :{WHITE}Trammidepoo suund
 STR_1807_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}Siia ei saa depood ehitada...
+STR_1807_CAN_T_BUILD_TRAM_VEHICLE                               :{WHITE}Trammidepood ei saa siia rajada
 STR_1808_CAN_T_BUILD_BUS_STATION                                :{WHITE}Siia ei saa bussijaama ehitada...
 STR_1809_CAN_T_BUILD_TRUCK_STATION                              :{WHITE}Siia ei saa laadimisplatsi ehitada...
-STR_180A_ROAD_CONSTRUCTION                                      :Teeehitus
-STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Ehita tee osa
+STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION                     :{WHITE}Siia ei saa reisitrammijaama rajada...
+STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION                         :{WHITE}Siia ei saa kaubatrammijaama rajada...
+STR_180A_ROAD_CONSTRUCTION                                      :Tee-ehitus
+STR_180A_TRAMWAY_CONSTRUCTION                                   :Trammitee ehitamine
+STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Ehita sõidutee blokk
+STR_180B_BUILD_TRAMWAY_SECTION                                  :{BLACK}Ehita trammitee blokk
 STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Depoo ehitamine (veovahendite ehitamiseks ja hooldamiseks)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT                               :{BLACK}Ehita trammidepoo (veeremi ehitamiseks ja hoolduseks)
 STR_180D_BUILD_BUS_STATION                                      :{BLACK}Ehita bussijaam
 STR_180E_BUILD_TRUCK_LOADING_BAY                                :{BLACK}Ehita veokite laadimisplats
+STR_180D_BUILD_PASSENGER_TRAM_STATION                           :{BLACK}Ehita reisitrammijaam
+STR_180E_BUILD_CARGO_TRAM_STATION                               :{BLACK}Ehita kaubatrammijaam
 STR_180F_BUILD_ROAD_BRIDGE                                      :{BLACK}Ehita sild
+STR_180F_BUILD_TRAMWAY_BRIDGE                                   :{BLACK}Ehita trammisild
 STR_1810_BUILD_ROAD_TUNNEL                                      :{BLACK}Ehita tunnel
-STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Teeehituse ja -eemaldamise vahetamine
+STR_1810_BUILD_TRAMWAY_TUNNEL                                   :{BLACK}Ehita trammitunnel
+STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Tee-ehituse ja -lammutamise vahetamine
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS                       :{BLACK}Lülitu trammitee ehitamise ja lammutamise vahel
 STR_1813_SELECT_ROAD_VEHICLE_DEPOT                              :{BLACK}Vali depoole suund
-STR_1814_ROAD                                                   :Maantee
-STR_1815_ROAD_WITH_STREETLIGHTS                                 :Valgustatud maantee
+STR_1813_SELECT_TRAM_VEHICLE_DEPOT                              :{BLACK}Vali trammidepoo suund
+STR_1814_ROAD                                                   :Sõidutee
+STR_1815_ROAD_WITH_STREETLIGHTS                                 :Valgustatud sõidutee
 STR_1816_TREE_LINED_ROAD                                        :Kolmerajaline tee
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Depoo
-STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Raudtee ülesõit
-STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Bussijaama ei saa eemaldada...
-STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Ei saa eemaldada veoauto jaama...
+STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Raudteeületuskoht
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Siinset bussijaama ei saa lammutada...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Siinset laadimisplatsi ei saa lammutada...
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION                         :{WHITE}Siinset reisitrammijaama ei saa lammutada...
+STR_CAN_T_REMOVE_CARGO_TRAM_STATION                             :{WHITE}Siinset kaubatrammijaama ei saa lammutada...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Linnad
@@ -1722,18 +1793,18 @@
 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} Maju: {ORANGE}{COMMA}
+STR_2006_POPULATION                                             :{BLACK}Rahvastik: {ORANGE}{COMMA}{BLACK}  Ehitisi: {ORANGE}{COMMA}
 STR_2007_RENAME_TOWN                                            :Linnanime muutmine
 STR_2008_CAN_T_RENAME_TOWN                                      :{WHITE}Linnanime ei saa muuta...
-STR_2009_LOCAL_AUTHORITY_REFUSES                                :{WHITE}{TOWN} kohalik võim keeldub seda lubamast
+STR_2009_LOCAL_AUTHORITY_REFUSES                                :{WHITE}{TOWN} kohalik omavalitsus keeldub seda lubamast
 STR_200A_TOWN_NAMES_CLICK_ON_NAME                               :{BLACK}Linnanimed - vajuta linnanimele, et viia vaade linnale
 STR_200B_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Vaate viimine linnale
 STR_200C_CHANGE_TOWN_NAME                                       :{BLACK}Linnanime muutmine
-STR_200D_PASSENGERS_LAST_MONTH_MAX                              :{BLACK}Reisijaid eelmisel kuul: {ORANGE}{COMMA}{BLACK}  maksimum: {ORANGE}{COMMA}
-STR_200E_MAIL_LAST_MONTH_MAX                                    :{BLACK}Posti eelmisel kuul: {ORANGE}{COMMA}{BLACK}  maksimum: {ORANGE}{COMMA}
+STR_200D_PASSENGERS_LAST_MONTH_MAX                              :{BLACK}Reisijaid eelmisel kuul: {ORANGE}{COMMA}{BLACK}  Enim: {ORANGE}{COMMA}
+STR_200E_MAIL_LAST_MONTH_MAX                                    :{BLACK}Posti eelmisel kuul: {ORANGE}{COMMA}{BLACK}  Enim: {ORANGE}{COMMA}
 STR_200F_TALL_OFFICE_BLOCK                                      :Kõrge büroohoone
 STR_2010_OFFICE_BLOCK                                           :Büroohoone
 STR_2011_SMALL_BLOCK_OF_FLATS                                   :Väike kortermaja
@@ -1751,27 +1822,27 @@
 STR_201D_OFFICE_BLOCK                                           :Büroohoone
 STR_201E_STADIUM                                                :Staadion
 STR_201F_OLD_HOUSES                                             :Vanad majad
-STR_2020_LOCAL_AUTHORITY                                        :{BLACK}Kohalik võim
-STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Näita teavet kohaliku võimu kohta
-STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} kohalik võim
+STR_2020_LOCAL_AUTHORITY                                        :{BLACK}Omavalitsus
+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}
 STR_2028_BY                                                     :{YELLOW} (kuni {DATE_SHORT})
 STR_202A_NONE                                                   :{ORANGE}Mitte ühtegi
-STR_202B_SERVICES_ALREADY_SUBSIDISED                            :{BLACK}Juba toetatavad teenused
+STR_202B_SERVICES_ALREADY_SUBSIDISED                            :{BLACK}Juba toetatavad veoteenused:
 STR_202C_FROM_TO                                                :{ORANGE}{STRING} kohast {STATION} kohta {STATION}{YELLOW} ({COMPANY}
 STR_202D_UNTIL                                                  :{YELLOW}, kuni {DATE_SHORT})
-STR_202E_OFFER_OF_SUBSIDY_EXPIRED                               :{BLACK}{BIGFONT}Toetuse pakkumine lõppes: {}{}{STRING.g} kohast {STRING} kohta {STRING} veo eest ei maksta enam toetusi.
+STR_202E_OFFER_OF_SUBSIDY_EXPIRED                               :{BLACK}{BIGFONT}Toetuse pakkumine lõppes: {}{}{STRING.g} kohast {STRING} kohta {STRING} veoste eest ei maksta enam toetusi.
 STR_202F_SUBSIDY_WITHDRAWN_SERVICE                              :{BLACK}{BIGFONT}Toetuse maksmise aeg sai läbi:{}{}{STRING}kohast {STATION} kohta {STATION} eest ei maksta enam edaspidi toetust.
-STR_2030_SERVICE_SUBSIDY_OFFERED                                :{BLACK}{BIGFONT}Transporditeenusele pakutakse toetust:{}{}{STRING.g}veo eest linnast {STRING} linna {STRING}. Esimesele teenusepakkujale makstakse aasta läbi toetusi!
+STR_2030_SERVICE_SUBSIDY_OFFERED                                :{BLACK}{BIGFONT}Veoteenusele pakutakse toetust:{}{}{STRING.g}veo eest linnast {STRING} linna {STRING}. Esimesele teenusepakkujale makstakse aasta läbi toetusi!
 STR_2031_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Teenusetoetust makstakse ettevõttele {COMPANY}!{}{}{STRING} kohast {STATION} kohta {STATION} teenuse eest makstakse järgmisel aastal 50% rohkem!
 STR_2032_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Teenusetoetust makstakse ettevõttele {COMPANY}!{}{}{STRING} kohast {STATION} kohta {STATION} teenuse eest makstakse järgmisel aastal kahekordselt!
 STR_2033_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Teenusetoetust makstakse ettevõttele {COMPANY}!{}{}{STRING} kohast {STATION} kohta {STATION} teenuse eest makstakse järgmisel aastal kolmekordselt!
 STR_2034_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Teenusetoetust makstakse ettevõttele {COMPANY}!{}{}{STRING} kohast {STATION} kohta {STATION} teenuse eest makstakse järgmisel aastal neljakordselt!
-STR_2035_LOCAL_AUTHORITY_REFUSES                                :{WHITE}Linna {TOWN} kohalik võim keelab uut lennujaama siia ehitada
+STR_2035_LOCAL_AUTHORITY_REFUSES                                :{WHITE}Linna {TOWN} kohalik omavalitsus keeldub uut lennujaama lubamast
 STR_2036_COTTAGES                                               :Suvilad
 STR_2037_HOUSES                                                 :Majad
 STR_2038_FLATS                                                  :Korterid
@@ -1785,32 +1856,32 @@
 STR_2040_CINEMA                                                 :Kino
 STR_2041_SHOPPING_MALL                                          :Ostukeskus
 STR_2042_DO_IT                                                  :{BLACK}Soorita toiming
-STR_2043_LIST_OF_THINGS_TO_DO_AT                                :{BLACK}Nimekiri asjadest, mida saab siin linnas teha - vajuta nimele, et saada rohkem informatsiooni
+STR_2043_LIST_OF_THINGS_TO_DO_AT                                :{BLACK}Nimekiri asjadest, mida saab siin linnas teha - klõpsa esemel, et saada rohkem andmeid
 STR_2044_CARRY_OUT_THE_HIGHLIGHTED                              :{BLACK}Soorita ülalpool valitud toiming
 STR_2045_ACTIONS_AVAILABLE                                      :{BLACK}Pakutavad toimingud:
 STR_2046_SMALL_ADVERTISING_CAMPAIGN                             :Väike reklaamikampaania
 STR_2047_MEDIUM_ADVERTISING_CAMPAIGN                            :Keskmine reklaamikampaania
 STR_2048_LARGE_ADVERTISING_CAMPAIGN                             :Suur reklaamikampaania
-STR_2049_FUND_LOCAL_ROAD_RECONSTRUCTION                         :Rahasta kohalikke teetöid
+STR_2049_FUND_LOCAL_ROAD_RECONSTRUCTION                         :Rahasta kohalikke teehoiutöid
 STR_204A_BUILD_STATUE_OF_COMPANY                                :Ehita ettevõtte omaniku kuju
 STR_204B_FUND_NEW_BUILDINGS                                     :Rahasta uute hoonete ehitust
 STR_204C_BUY_EXCLUSIVE_TRANSPORT                                :Osta monopoolsed veoõigused
-STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY                              :Paku kohalikele võimuesindajatele altkäemaksu
+STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY                              :Paku kohalikule omavalitsusele altkäemaksu
 STR_204D_INITIATE_A_SMALL_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Väikese reklaamikampaania korraldamine rohkemate reisijate ja kaupade meelitamiseks kasutama sinu teenuseid.{}  Hind: {CURRENCY}
 STR_204E_INITIATE_A_MEDIUM_LOCAL                                :{WHITE}{STRING}{}{YELLOW} Keskmise reklaamikampaania korraldamine, et meelitada rohkem reisijaid ja kaupu sinu teenuste juurede.{}  Hind: {CURRENCY}
 STR_204F_INITIATE_A_LARGE_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Suure reklaamikampaania korraldamine, et meelitada rohkem reisijaid ja kaupu sinu teenuste juurede.{}  Hind: {CURRENCY}
-STR_2050_FUND_THE_RECONSTRUCTION                                :{WHITE}{STRING}{}{YELLOW} Teetööde rahastamine. Põhjustab linnateedel tõsiseid liiklusprobleeme kuni 6 kuuks.{}  Hind: {CURRENCY}
+STR_2050_FUND_THE_RECONSTRUCTION                                :{WHITE}{STRING}{}{YELLOW} Teehoiutööde rahastamine. Põhjustab linnatänavatel tõsiseid liiklusprobleeme kuni 6 kuuks.{}  Hind: {CURRENCY}
 STR_2051_BUILD_A_STATUE_IN_HONOR                                :{WHITE}{STRING}{}{YELLOW} Oma ettevõtte auks kuju ehitamine.{} Hind: {CURRENCY}
 STR_2052_FUND_THE_CONSTRUCTION_OF                               :{WHITE}{STRING}{}{YELLOW} Uute ärihoonete ehitamise rahastamine selles linnas.{} Hind: {CURRENCY}
-STR_2053_BUY_1_YEAR_S_EXCLUSIVE                                 :{WHITE}{STRING}{}{YELLOW} Üheks aastaks monopoolsete veoõiguste ostmine selles linnas. Linna võimud lubavad reisijate ja kauba veoks kasutada ainult sinu jaamasid.{} Hind: {CURRENCY}
-STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY_DESC                         :{WHITE}{STRING}{}{YELLOW} Linnavõimudele ettevõtu reitingu tõstmise eesmärgil altkäemaksu pakkumine. Vahele jäädes korral tuleb trahvi maksta.{} Hind: {CURRENCY}
+STR_2053_BUY_1_YEAR_S_EXCLUSIVE                                 :{WHITE}{STRING}{}{YELLOW} Üheks aastaks monopoolsete veoõiguste ostmine selles linnas. Linna omavalitsus lubab reisijate ja kauba veoks kasutada ainult sinu jaamasid.{} Hind: {CURRENCY}
+STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY_DESC                         :{WHITE}{STRING}{}{YELLOW} Linna omavalitusele ettevõtte hinnangu tõstmise eesmärgil altkäemaksu pakkumine. Vahele jäädes tuleb trahvi maksta.{} Hind: {CURRENCY}
 STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING                       :{BIGFONT}{BLACK}Liikluskaos linnas {TOWN}!{}{}Ettevõtte {COMPANY} poolt rahastatud teedeehitus tekitab 6 kuu jooksul maanteedel liiklushäireid!
 STR_2056                                                        :{TINYFONT}{WHITE}{TOWN}
 STR_2057                                                        :{ORANGE}{TOWN}{BLACK} ({COMMA})
 STR_2058_UNDER_CONSTRUCTION                                     :{STRING} (ehitusel)
 STR_2059_IGLOO                                                  :Iglu
 STR_205A_TEPEES                                                 :Tipid
-STR_205B_TEAPOT_HOUSE                                           :Teepoti maja
+STR_205B_TEAPOT_HOUSE                                           :Teekannu maja
 STR_205C_PIGGY_BANK                                             :Krossu pank
 
 STR_INDUSTRY                                                    :{INDUSTRY}
@@ -1826,7 +1897,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
@@ -1839,10 +1910,10 @@
 
 ##id 0x3000
 STR_3000_RAIL_STATION_SELECTION                                 :{WHITE}Raudteejaama valik
-STR_3001_AIRPORT_SELECTION                                      :{WHITE}Lennujaama valik
+STR_3001_AIRPORT_SELECTION                                      :{WHITE}Lennuvälja valik
 STR_3002_ORIENTATION                                            :{BLACK}Orientatsioon
 STR_3003_NUMBER_OF_TRACKS                                       :{BLACK}Radade arv
-STR_3004_PLATFORM_LENGTH                                        :{BLACK}Platvormi pikkus
+STR_3004_PLATFORM_LENGTH                                        :{BLACK}Perrooni pikkus
 STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD                          :{WHITE}Teisele raudteejaamale liiga lähedal
 STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING                         :{WHITE}Mitme olemasoleva jaama ühendamine
 STR_3007_TOO_MANY_STATIONS_LOADING                              :{WHITE}Selles linnas on juba liiga palju jaamasid
@@ -1851,15 +1922,15 @@
 STR_3008B_TOO_MANY_TRUCK_STOPS                                  :{WHITE}Liiga palju laadimisplatvorme
 STR_3009_TOO_CLOSE_TO_ANOTHER_STATION                           :{WHITE}Mõnele teisele jaamale liiga lähedal
 STR_300A_0                                                      :{WHITE}{STATION} {STATIONFEATURES}
-STR_300B_MUST_DEMOLISH_RAILROAD                                 :{WHITE}Raudteejaam tuleb eelnevalt hävitada
+STR_300B_MUST_DEMOLISH_RAILROAD                                 :{WHITE}Raudteejaam tuleb eelnevalt lammutada
 STR_300D_TOO_CLOSE_TO_ANOTHER_AIRPORT                           :{WHITE}Liiga lähedal teisele lennuväljale
-STR_300E_MUST_DEMOLISH_AIRPORT_FIRST                            :{WHITE}Lennujaam tuleb eelnevalt hävitada
+STR_300E_MUST_DEMOLISH_AIRPORT_FIRST                            :{WHITE}Lennuväli tuleb eelnevalt lammutada
 
 STR_3030_RENAME_STATION_LOADING                                 :Jaama nime muutmine
 STR_3031_CAN_T_RENAME_STATION                                   :{WHITE}Jaama nime ei saa muuta...
-STR_3032_RATINGS                                                :{BLACK}Reitingud
+STR_3032_RATINGS                                                :{BLACK}Hinnangud
 STR_3033_ACCEPTS                                                :{BLACK}Võtab vastu
-STR_3034_LOCAL_RATING_OF_TRANSPORT                              :{BLACK}Kohaliku veoteenuse reiting:
+STR_3034_LOCAL_RATING_OF_TRANSPORT                              :{BLACK}Kohaliku veoteenuse hinnang:
 
 ############ range for rating starts
 STR_3035_APPALLING                                              :Kohutav
@@ -1879,8 +1950,12 @@
 STR_3041_NOW_ACCEPTS_AND                                        :{WHITE}Jaam {STATION} võtab nüüd vastu veoseid {STRING} ja {STRING}
 STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Bussijaama suund
 STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Laadimisplatsi suund
+STR_3042_PASSENGER_TRAM_STATION_ORIENTATION                     :{WHITE}Reisitrammi suund
+STR_3043_CARGO_TRAM_STATION_ORIENT                              :{WHITE}Kaubatrammi suund
 STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Bussijaam tuleb enne hävitada
 STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Enne pead laadimisplatsi hävitama
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION                   :{WHITE}Reisitrammijaam tuleb eelnevalt lammutada
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION                       :{WHITE}Kaubatrammijaam tuleb eelnevalt lammutada
 STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} jaam{P "" a}
 STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
 STR_304A_NONE                                                   :{YELLOW}- Puudub -
@@ -1888,21 +1963,23 @@
 STR_304C_TOO_CLOSE_TO_ANOTHER_DOCK                              :{WHITE}Liiga lähedal teisele sadamale
 STR_304D_MUST_DEMOLISH_DOCK_FIRST                               :{WHITE}Enne pead sadama hävitama
 STR_304E_SELECT_RAILROAD_STATION                                :{BLACK}Raudteejaamale suuna valimine
-STR_304F_SELECT_NUMBER_OF_PLATFORMS                             :{BLACK}Vali raudteejaama platvormide arv
+STR_304F_SELECT_NUMBER_OF_PLATFORMS                             :{BLACK}Vali raudteejaama perroonide arv
 STR_3050_SELECT_LENGTH_OF_RAILROAD                              :{BLACK}Vali raudteejaama pikkus
 STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Vali bussijaamale suund
 STR_3052_SELECT_TRUCK_LOADING_BAY                               :{BLACK}Vali laadimisplatsile suund
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION              :{BLACK}Vali reisitrammijaama suund
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION                  :{BLACK}Vali kaubatrammijaama suund
 STR_3053_CENTER_MAIN_VIEW_ON_STATION                            :{BLACK}Vaate viimine jaama juurde
-STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}Näita jaama reitinguid
+STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}Näita jaamahinnangut
 STR_3055_CHANGE_NAME_OF_STATION                                 :{BLACK}Muuda jaama nime
 STR_3056_SHOW_LIST_OF_ACCEPTED_CARGO                            :{BLACK}Näita vastuvõetavate veoste nimistut
 STR_3057_STATION_NAMES_CLICK_ON                                 :{BLACK}Jaamanimed - vajuta nimel, et vaadet jaamale keskendada
-STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT                            :{BLACK}Vali lennuvälja suurus, ning tüüp
+STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT                            :{BLACK}Vali lennuvälja suurus ja tüüp
 STR_305C_0                                                      :{STATION} {STATIONFEATURES}
 STR_STATION_SIGN_TINY                                           :{TINYFONT}{STATION}
 STR_305E_RAILROAD_STATION                                       :Raudteejaam
 STR_305F_AIRCRAFT_HANGAR                                        :Angaar
-STR_3060_AIRPORT                                                :Lennujaam
+STR_3060_AIRPORT                                                :Lennuväli
 STR_3061_TRUCK_LOADING_AREA                                     :Laadimisplats
 STR_3062_BUS_STATION                                            :Bussijaam
 STR_3063_SHIP_DOCK                                              :Laevasadam
@@ -1918,7 +1995,7 @@
 
 STR_UNDEFINED                                                   :(määratlemata väljend)
 STR_STAT_CLASS_DFLT                                             :Vaikimisi valitud jaam
-STR_STAT_CLASS_WAYP                                             :Kontrollpunktid
+STR_STAT_CLASS_WAYP                                             :Meldepunktid
 
 ##id 0x3800
 STR_3800_SHIP_DEPOT_ORIENTATION                                 :{WHITE}Paadikuuri Orientatsioon
@@ -1929,6 +2006,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
@@ -1938,9 +2016,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
@@ -1962,26 +2045,26 @@
 STR_4808_FACTORY                                                :vabrik
 STR_4809_PRINTING_WORKS                                         :trükikoda
 STR_480A_STEEL_MILL                                             :terasetööstus
-STR_480B_FARM                                                   :farm
-STR_480C_COPPER_ORE_MINE                                        :vasemaagi kaevandus
-STR_480D_OIL_WELLS                                              :nafta puurauk
+STR_480B_FARM                                                   :talu
+STR_480C_COPPER_ORE_MINE                                        :vasemaagikaevandus
+STR_480D_OIL_WELLS                                              :naftapuurauk
 STR_480E_BANK                                                   :pank
 STR_480F_FOOD_PROCESSING_PLANT                                  :toiduainetetööstus
 STR_4810_PAPER_MILL                                             :paberivabrik
 STR_4811_GOLD_MINE                                              :kullakaevandus
 STR_4812_BANK                                                   :pank
 STR_4813_DIAMOND_MINE                                           :teemantikaevandus
-STR_4814_IRON_ORE_MINE                                          :rauamaagi kaevandus
+STR_4814_IRON_ORE_MINE                                          :rauamaagikaevandus
 STR_4815_FRUIT_PLANTATION                                       :puuviljaistandus
-STR_4816_RUBBER_PLANTATION                                      :kummipuu istandus
+STR_4816_RUBBER_PLANTATION                                      :kummipuuistandus
 STR_4817_WATER_SUPPLY                                           :veepumbad
 STR_4818_WATER_TOWER                                            :veetorn
 STR_4819_FACTORY                                                :vabrik
-STR_481A_FARM                                                   :farm
+STR_481A_FARM                                                   :talu
 STR_481B_LUMBER_MILL                                            :saeveski
-STR_481C_COTTON_CANDY_FOREST                                    :suhkruvati mets
+STR_481C_COTTON_CANDY_FOREST                                    :suhkruvatimets
 STR_481D_CANDY_FACTORY                                          :kommivabrik
-STR_481E_BATTERY_FARM                                           :patarei farm
+STR_481E_BATTERY_FARM                                           :patareitalu
 STR_481F_COLA_WELLS                                             :koolapumbad
 STR_4820_TOY_SHOP                                               :mänguasjapood
 STR_4821_TOY_FACTORY                                            :mänguasjatehas
@@ -1997,7 +2080,14 @@
 STR_4829_REQUIRES                                               :{BLACK}Vajab: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
-STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Eelmise kuu toodang:
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}Käitlust ootav kaup:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES                                               :{BLACK}Toodab: {YELLOW}{STRING}
+STR_4828_PRODUCES                                               :{BLACK}Toodab: {YELLOW}{STRING}, {STRING}
+############ range for produces ends
+
+STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Eelmise kuu valmistoodang:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% veetud)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Vaate keskendamine tööstusele
 STR_482D_NEW_UNDER_CONSTRUCTION                                 :{BLACK}{BIGFONT}Uus {STRING} on linna {TOWN} lähedal ehitamisel!
@@ -2008,7 +2098,7 @@
 STR_4832_ANNOUNCES_IMMINENT_CLOSURE                             :{BLACK}{BIGFONT}{INDUSTRY} juhtkond teatab sulgemisest!
 STR_4833_SUPPLY_PROBLEMS_CAUSE_TO                               :{BLACK}{BIGFONT}{INDUSTRY} teatab sulgemisest varustusprobleemide tõttu!
 STR_4834_LACK_OF_NEARBY_TREES_CAUSES                            :{BLACK}{BIGFONT}Lähiümbruse puude puudumine põhjustab {INDUSTRY} sulgemise!
-STR_4835_INCREASES_PRODUCTION                                   :{BLACK}{BIGFONT}{INDUSTRY} tõuseb toodang!
+STR_4835_INCREASES_PRODUCTION                                   :{BLACK}{BIGFONT}{INDUSTRY} kasvab toodang!
 STR_4836_NEW_COAL_SEAM_FOUND_AT                                 :{BLACK}{BIGFONT}{INDUSTRY} lähedal avati uus kivisöe kiht!{}Toodang kahekordistub!
 STR_4837_NEW_OIL_RESERVES_FOUND                                 :{BLACK}{BIGFONT}{INDUSTRY} lähedal avastati uusi naftareserve!{}Toodang kahekordistub!
 STR_4838_IMPROVED_FARMING_METHODS                               :{BLACK}{BIGFONT}{INDUSTRY} võttis kasutusele uued põllutöövahendid! Toodang kahekordistub!
@@ -2042,20 +2132,20 @@
 STR_5016_CAN_T_BUILD_TUNNEL_HERE                                :{WHITE}Siia ei saa tunnelit ehitada...
 STR_5017_RAILROAD_TUNNEL                                        :Raudteetunnel
 STR_5018_ROAD_TUNNEL                                            :Maanteetunnel
-STR_501B_STEEL_SUSPENSION_RAIL_BRIDGE                           :Terasest raudtee rippsild
+STR_501B_STEEL_SUSPENSION_RAIL_BRIDGE                           :Terasest raudteerippsild
 STR_501C_STEEL_GIRDER_RAIL_BRIDGE                               :Terasest võrestikuga raudteesild
 STR_501D_STEEL_CANTILEVER_RAIL_BRIDGE                           :Terasest ulgtoestikuga raudteesild
-STR_501E_REINFORCED_CONCRETE_SUSPENSION                         :Raudbetoonist raudtee rippsild
-STR_501F_WOODEN_RAIL_BRIDGE                                     :Puidust raudteesild
-STR_5020_CONCRETE_RAIL_BRIDGE                                   :Betoonist raudteesild
-STR_5021_STEEL_SUSPENSION_ROAD_BRIDGE                           :Terasest raudtee rippsild
-STR_5022_STEEL_GIRDER_ROAD_BRIDGE                               :Terasraamistikuga maanteesild
-STR_5023_STEEL_CANTILEVER_ROAD_BRIDGE                           :Terasest ulgtoestikuga maanteesild
-STR_5024_REINFORCED_CONCRETE_SUSPENSION                         :Raudbetoonist maantee rippsild
-STR_5025_WOODEN_ROAD_BRIDGE                                     :Puidust maanteesild
-STR_5026_CONCRETE_ROAD_BRIDGE                                   :Betoonist maanteesild
+STR_501E_REINFORCED_CONCRETE_SUSPENSION                         :Raudbetoonist raudteerippsild
+STR_501F_WOODEN_RAIL_BRIDGE                                     :Puitraudteesild
+STR_5020_CONCRETE_RAIL_BRIDGE                                   :Betoonraudteesild
+STR_5021_STEEL_SUSPENSION_ROAD_BRIDGE                           :Terasest raudteerippsild
+STR_5022_STEEL_GIRDER_ROAD_BRIDGE                               :Terasraamistikuga sõiduteesild
+STR_5023_STEEL_CANTILEVER_ROAD_BRIDGE                           :Terasest ulgtoestikuga sõiduteesild
+STR_5024_REINFORCED_CONCRETE_SUSPENSION                         :Raudbetoonist sõidutee rippsild
+STR_5025_WOODEN_ROAD_BRIDGE                                     :Puidust sõiduteesild
+STR_5026_CONCRETE_ROAD_BRIDGE                                   :Betoonist sõiduteesild
 STR_5027_TUBULAR_RAIL_BRIDGE                                    :Torujas raudteesild
-STR_5028_TUBULAR_ROAD_BRIDGE                                    :Torujas maanteesild
+STR_5028_TUBULAR_ROAD_BRIDGE                                    :Torujas sõiduteesild
 
 ##id 0x5800
 STR_5800_OBJECT_IN_THE_WAY                                      :{WHITE}Mingi objekt on ees
@@ -2074,7 +2164,7 @@
 STR_SV_EMPTY                                                    :
 STR_SV_UNNAMED                                                  :Nimetu
 STR_SV_TRAIN_NAME                                               :Rong {COMMA}
-STR_SV_ROADVEH_NAME                                             :Maanteesõiduk {COMMA}
+STR_SV_ROADVEH_NAME                                             :Mootorsõiduk {COMMA}
 STR_SV_SHIP_NAME                                                :Laev {COMMA}
 STR_SV_AIRCRAFT_NAME                                            :Õhusõiduk {COMMA}
 
@@ -2091,7 +2181,7 @@
 STR_SV_STNAME_WOODS                                             :{STRING} metsad
 STR_SV_STNAME_LAKESIDE                                          :{STRING} järveäärne
 STR_SV_STNAME_EXCHANGE                                          :{STRING} vahetus
-STR_SV_STNAME_AIRPORT                                           :{STRING} lennujaam
+STR_SV_STNAME_AIRPORT                                           :{STRING} lennuväli
 STR_SV_STNAME_OILFIELD                                          :{STRING} naftaväli
 STR_SV_STNAME_MINES                                             :{STRING} kaevandused
 STR_SV_STNAME_DOCKS                                             :{STRING} sadam
@@ -2109,8 +2199,9 @@
 STR_SV_STNAME_BRANCH                                            :{STRING} filiaal
 STR_SV_STNAME_UPPER                                             :Ülemine {STRING}
 STR_SV_STNAME_LOWER                                             :Alumine {STRING}
-STR_SV_STNAME_HELIPORT                                          :{STRING} helikopteri maandumisplats
+STR_SV_STNAME_HELIPORT                                          :{STRING} Kopteriväljak
 STR_SV_STNAME_FOREST                                            :{STRING} mets
+STR_SV_STNAME_FALLBACK                                          :{STRING} Jaam #{NUM}
 
 ############ end of savegame specific region!
 
@@ -2126,17 +2217,17 @@
 ############ range for difficulty levels ends
 
 ############ range for difficulty settings starts
-STR_6805_MAXIMUM_NO_COMPETITORS                                 :{LTBLUE}Maksimaalne konkurentide arv: {ORANGE}{COMMA}
+STR_6805_MAXIMUM_NO_COMPETITORS                                 :{LTBLUE}Suurim konkurentide arv: {ORANGE}{COMMA}
 STR_6806_COMPETITOR_START_TIME                                  :{LTBLUE}Konkurentide tulemise aeg: {ORANGE}{STRING}
 STR_6807_NO_OF_TOWNS                                            :{LTBLUE}Linnade arv: {ORANGE}{STRING}
 STR_6808_NO_OF_INDUSTRIES                                       :{LTBLUE}Tööstuste arv: {ORANGE}{STRING}
-STR_6809_MAXIMUM_INITIAL_LOAN_000                               :{LTBLUE}Suurim laen alguses: {ORANGE}{CURRENCY}
+STR_6809_MAXIMUM_INITIAL_LOAN_000                               :{LTBLUE}Suurim alustuslaen: {ORANGE}{CURRENCY}
 STR_680A_INITIAL_INTEREST_RATE                                  :{LTBLUE}Intress alguses: {ORANGE}{COMMA}%
-STR_680B_VEHICLE_RUNNING_COSTS                                  :{LTBLUE}Sõidukite hoolduskulud: {ORANGE}{STRING}
-STR_680C_CONSTRUCTION_SPEED_OF_COMPETITOR                       :{LTBLUE}Konkurentide ehituskiirus: {ORANGE}{STRING}
+STR_680B_VEHICLE_RUNNING_COSTS                                  :{LTBLUE}Sõidukite käituskulud: {ORANGE}{STRING}
+STR_680C_CONSTRUCTION_SPEED_OF_COMPETITOR                       :{LTBLUE}Konkurentide ehitustempo: {ORANGE}{STRING}
 STR_680D_INTELLIGENCE_OF_COMPETITORS                            :{LTBLUE}Konkurentide intelligentsus: {ORANGE}{STRING}
-STR_680E_VEHICLE_BREAKDOWNS                                     :{LTBLUE}Sõidukite lagunemine: {ORANGE}{STRING}
-STR_680F_SUBSIDY_MULTIPLIER                                     :{LTBLUE}Subsiidiumi suurus: {ORANGE}{STRING}
+STR_680E_VEHICLE_BREAKDOWNS                                     :{LTBLUE}Sõidukite rikkiminemine: {ORANGE}{STRING}
+STR_680F_SUBSIDY_MULTIPLIER                                     :{LTBLUE}Toetuse suurus: {ORANGE}{STRING}
 STR_6810_COST_OF_CONSTRUCTION                                   :{LTBLUE}Ehitamise hind: {ORANGE}{STRING}
 STR_6811_TERRAIN_TYPE                                           :{LTBLUE}Maastiku tüüp: {ORANGE}{STRING}
 STR_6812_QUANTITY_OF_SEA_LAKES                                  :{LTBLUE}Merede/järvede kogus: {ORANGE}{STRING}
@@ -2179,7 +2270,7 @@
 STR_6831_3_MONTHS_AFTER_PLAYER                                  :3 kuud pärast mängijat
 STR_6832_6_MONTHS_AFTER_PLAYER                                  :6 kuud pärast mängijat
 STR_6833_9_MONTHS_AFTER_PLAYER                                  :9 kuud pärast mängijat
-STR_6834_AT_END_OF_LINE_AND_AT_STATIONS                         :Raudtee lõpus ja jaamas
+STR_6834_AT_END_OF_LINE_AND_AT_STATIONS                         :Raudtee lõpus ja jaamades
 STR_6835_AT_END_OF_LINE_ONLY                                    :Ainult raudtee lõpus
 STR_6836_OFF                                                    :Väljas
 STR_6837_ON                                                     :Sees
@@ -2190,7 +2281,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
@@ -2202,36 +2293,36 @@
 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} finantsaruanne {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}Ehitamine
-STR_7012_NEW_VEHICLES                                           :{GOLD}Uued veovahendid
-STR_7013_TRAIN_RUNNING_COSTS                                    :{GOLD}Rongide hoolduskulud
-STR_7014_ROAD_VEH_RUNNING_COSTS                                 :{GOLD}Maanteesõidukite hoolduskulud
-STR_7015_AIRCRAFT_RUNNING_COSTS                                 :{GOLD}Õhusõidukite hoolduskulud
-STR_7016_SHIP_RUNNING_COSTS                                     :{GOLD}Laevade hoolduskulud
-STR_7017_PROPERTY_MAINTENANCE                                   :{GOLD}Kinnisvara korrashoid
-STR_7018_TRAIN_INCOME                                           :{GOLD}Rongide sissetulekud
-STR_7019_ROAD_VEHICLES_INCOME                                   :{GOLD}Maanteesõidukite sissetulekud
-STR_701A_AIRCRAFT_INCOME                                        :{GOLD}Õhusõidukite sissetulekud
-STR_701B_SHIP_INCOME                                            :{GOLD}Laevade sissetulekud
+STR_7011_CONSTRUCTION                                           :{GOLD}Ehituskulud
+STR_7012_NEW_VEHICLES                                           :{GOLD}Uus veerem
+STR_7013_TRAIN_RUNNING_COSTS                                    :{GOLD}Rongide käituskulud
+STR_7014_ROAD_VEH_RUNNING_COSTS                                 :{GOLD}Mootorsõidukite käituskulud
+STR_7015_AIRCRAFT_RUNNING_COSTS                                 :{GOLD}Õhusõidukite käituskulud
+STR_7016_SHIP_RUNNING_COSTS                                     :{GOLD}Laevade käituskulud
+STR_7017_PROPERTY_MAINTENANCE                                   :{GOLD}Infrastruktuuri korrashoid
+STR_7018_TRAIN_INCOME                                           :{GOLD}Rongide tulud
+STR_7019_ROAD_VEHICLES_INCOME                                   :{GOLD}Mootorsõidukite tulud
+STR_701A_AIRCRAFT_INCOME                                        :{GOLD}Õhusõidukite tulud
+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_7022_INCOME_GRAPH                                           :{WHITE}Sissetulekute graafik
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
+STR_7022_INCOME_GRAPH                                           :{WHITE}Tulugraafik
+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 võimalik 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
@@ -2265,13 +2356,13 @@
 STR_704C_KEY                                                    :{BLACK}Selgitus
 STR_704D_SHOW_KEY_TO_GRAPHS                                     :{BLACK}Näita selgitust graafikute juures
 STR_704E_KEY_TO_COMPANY_GRAPHS                                  :{WHITE}Ettevõttegraafiku selgitus
-STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY                           :{BLACK}Vajuta, et ettevõtte graafikut sisse ja välja lülitada
-STR_7050_UNITS_OF_CARGO_DELIVERED                               :{WHITE}Transporditud veoste kogus
-STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Ettevõtte tegevuse reiting (maksimaalne reiting=1000)
-STR_7052_COMPANY_VALUES                                         :{WHITE}Ettevõtte väärtus
+STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY                           :{BLACK}Klõpsa, et ettevõtte graafikut sisse ja välja lülitada
+STR_7050_UNITS_OF_CARGO_DELIVERED                               :{WHITE}Veetud veoste kogus
+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)
@@ -2299,7 +2390,7 @@
 STR_706E_TYCOON                                                 :Magnaat
 STR_706F_BUILD_HQ                                               :{BLACK}Ehita peakorter
 STR_7070_BUILD_COMPANY_HEADQUARTERS                             :{BLACK}Ehita ettevõtte peakorter või vii vaade peakorterile
-STR_RELOCATE_COMPANY_HEADQUARTERS                               :{BLACK}Ehita ettevõtte peakorter mujale 1% ettevõtte väärtuse hinna eest
+STR_RELOCATE_COMPANY_HEADQUARTERS                               :{BLACK}Ehita ettevõtte peakorter mujale 1% firmaväärtuse tasu eest
 STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS                       :{WHITE}Ettevõtte peakorterit ei saa ehitada...
 STR_7072_VIEW_HQ                                                :{BLACK}Vaata peakorterit
 STR_RELOCATE_HQ                                                 :{BLACK}Liiguta peakorterit
@@ -2309,7 +2400,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}Ettevõtte vää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
@@ -2321,12 +2412,12 @@
 STR_707F_HAS_BEEN_TAKEN_OVER_BY                                 :{BLACK}{BIGFONT}{COMPANY} võeti üle ettevõtte {COMPANY} poolt!
 STR_7080_PROTECTED                                              :{WHITE}See ettevõtte pole veel piisavalt vana, et aktsiaid vahetada...
 
-STR_LIVERY_DEFAULT                                              :Tavaline Üleandmine
-STR_LIVERY_STEAM                                                :Aurumootor
-STR_LIVERY_DIESEL                                               :Diiselmootor
-STR_LIVERY_ELECTRIC                                             :Elektrimootor
-STR_LIVERY_MONORAIL                                             :Monorelsi Mootor
-STR_LIVERY_MAGLEV                                               :Maglev'i Mootor
+STR_LIVERY_DEFAULT                                              :Firmavärv
+STR_LIVERY_STEAM                                                :Aurumootorvedur
+STR_LIVERY_DIESEL                                               :Diiselmootorvedur
+STR_LIVERY_ELECTRIC                                             :Elektrimootorvedur
+STR_LIVERY_MONORAIL                                             :Monorelss-mootorvedur
+STR_LIVERY_MAGLEV                                               :Elektromagneetiline mootorvedur
 STR_LIVERY_DMU                                                  :DMU
 STR_LIVERY_EMU                                                  :EMU
 STR_LIVERY_PASSENGER_WAGON_STEAM                                :Reisivagun (auru)
@@ -2335,20 +2426,22 @@
 STR_LIVERY_FREIGHT_WAGON                                        :Kaubavagun
 STR_LIVERY_BUS                                                  :Buss
 STR_LIVERY_TRUCK                                                :Veoauto
-STR_LIVERY_PASSENGER_SHIP                                       :Reisijate Praam
+STR_LIVERY_PASSENGER_SHIP                                       :Reisipraam
 STR_LIVERY_FREIGHT_SHIP                                         :Kaubalaev
 STR_LIVERY_HELICOPTER                                           :Helikopter
-STR_LIVERY_SMALL_PLANE                                          :Väike Lennuk
-STR_LIVERY_LARGE_PLANE                                          :Suur Lennuk
+STR_LIVERY_SMALL_PLANE                                          :Väikelennuk
+STR_LIVERY_LARGE_PLANE                                          :Suurlennuk
+STR_LIVERY_PASSENGER_TRAM                                       :Reisitramm
+STR_LIVERY_FREIGHT_TRAM                                         :Kaubatramm
 
-STR_LIVERY_GENERAL_TIP                                          :{BLACK}Näita üldist värviskeemi
+STR_LIVERY_GENERAL_TIP                                          :{BLACK}Näita üldiseid värvistikke
 STR_LIVERY_TRAIN_TIP                                            :{BLACK}Näita rongide värvistikke
-STR_LIVERY_ROADVEH_TIP                                          :{BLACK}Näita maanteesõidukite värviskeeme
-STR_LIVERY_SHIP_TIP                                             :{BLACK}Näita laeva värviskeeme
-STR_LIVERY_AIRCRAFT_TIP                                         :{BLACK}Näita lennuki värviskeemi
-STR_LIVERY_PRIMARY_TIP                                          :{BLACK}Vali põhivärv valitud skeemile
-STR_LIVERY_SECONDARY_TIP                                        :{BLACK}Vali teine värv valitud skeemile
-STR_LIVERY_PANEL_TIP                                            :{BLACK}Vali värviskeem  mida muuta, või mitu tükki vajutades CTRL+Kõps. Vajuta kastil et valida värviskeemi kaustamise vahel.
+STR_LIVERY_ROADVEH_TIP                                          :{BLACK}Näita mootorsõidukite värvistikke
+STR_LIVERY_SHIP_TIP                                             :{BLACK}Näita laevavärvistikke
+STR_LIVERY_AIRCRAFT_TIP                                         :{BLACK}Näita lennukivärvistikke
+STR_LIVERY_PRIMARY_TIP                                          :{BLACK}Vali põhivärv värvistikule
+STR_LIVERY_SECONDARY_TIP                                        :{BLACK}Vali teine värv valitud värvistikule
+STR_LIVERY_PANEL_TIP                                            :{BLACK}Vali muudetav värvivalik - või mitu CTRL+klõps abil. Klõpsa kastil, et muuta värvivaliku kasutust.
 
 ##id 0x8000
 STR_8000_KIRBY_PAUL_TANK_STEAM                                  :Kirby Paul Tank (auruvedur)
@@ -2608,9 +2701,9 @@
 STR_80FE_GURU_X2_HELICOPTER                                     :Guru X2 Helicopter
 STR_80FF_POWERNAUT_HELICOPTER                                   :Powernaut Helicopter
 STR_8100_MESSAGE_FROM_VEHICLE_MANUFACTURE                       :{WHITE}Teade veovahendi tootjalt
-STR_8101_WE_HAVE_JUST_DESIGNED_A                                :{GOLD}Me oleme just kujundanud uue {STRING} - kas te tahaksite testida aasta aega enne kui see on saadaval kõigile?
+STR_8101_WE_HAVE_JUST_DESIGNED_A                                :{GOLD}Me oleme just kujundanud uue {STRING}{P "" i} - kas te tahaksite testida seda aasta aega enne, kui see on saadaval kõigile?
 STR_8102_RAILROAD_LOCOMOTIVE                                    :raudteevedur
-STR_8103_ROAD_VEHICLE                                           :maanteesõiduk
+STR_8103_ROAD_VEHICLE                                           :mootorsõiduk
 STR_8104_AIRCRAFT                                               :lennuk
 STR_8105_SHIP                                                   :laev
 STR_8106_MONORAIL_LOCOMOTIVE                                    :monorelsivedur
@@ -2619,7 +2712,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} (Detailid)
+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}
@@ -2636,14 +2729,21 @@
 STR_8810_GO_NON_STOP_TO_LOAD                                    :Sõida läbi {STATION} (laadi)
 STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD                           :Sõida läbi {STATION} (Vea ja oota täislaadingut)
 STR_GO_TO_TRAIN_DEPOT                                           :Mine linna {TOWN} rongidepoosse
-STR_SERVICE_AT_TRAIN_DEPOT                                      :Teeninda linna {TOWN} rongidepoos
+STR_SERVICE_AT_TRAIN_DEPOT                                      :Hoolda linna {TOWN} rongidepoos
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Sõida läbi linna {TOWN} rongidepoo
-STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Teenindus linna {TOWN} rongidepoost läbisõidul
+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}Teenindus linna {TOWN} rongidepoos
-STR_HEADING_FOR_TRAIN_DEPOT_SERVICE_VEL                         :{LTBLUE}Teenindus linna {TOWN} rongidepoos, {VELOCITY}
+STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Hooldus linna {TOWN} raudteedepoos
+STR_HEADING_FOR_TRAIN_DEPOT_SERVICE_VEL                         :{LTBLUE}Hooldus linna {TOWN} raudteedepoos, {VELOCITY}
 
 STR_INVALID_ORDER                                               :{RED} (Ebasobiv järjekord)
 
@@ -2658,16 +2758,16 @@
 STR_881A_TRAINS_CAN_ONLY_BE_ALTERED                             :{WHITE}Ronge saab ainult siis muuta kui nad on peatatud depoo sees
 STR_881B_TRAINS                                                 :{WHITE}{COMPANY} - {COMMA} rong{P "" i}
 
-STR_881C_NEW_RAIL_VEHICLES                                      :{WHITE}Uus Raudtee Sõiduk
-STR_NEW_ELRAIL_VEHICLES                                         :{WHITE}Uued elektriraudteesõidukid
+STR_881C_NEW_RAIL_VEHICLES                                      :{WHITE}Uus raudteeveerem
+STR_NEW_ELRAIL_VEHICLES                                         :{WHITE}Uus elektriraudteeveerem
 STR_881D_NEW_MONORAIL_VEHICLES                                  :{WHITE}Uus Monorelssi Sõiduk
 STR_881E_NEW_MAGLEV_VEHICLES                                    :{WHITE}Uus Maglevi Sõiduk
 STR_ALL_AVAIL_RAIL_VEHICLES                                     :{WHITE}Raudteesõidukid
 
 STR_881F_BUILD_VEHICLE                                          :{BLACK}Ehita veovahend
 STR_CLONE_ROAD_VEHICLE                                          :{BLACK}Klooni veovahendit
-STR_CLONE_ROAD_VEHICLE_INFO                                     :{BLACK}See kopeerib maanteesõidukit. CTRL-klõps jagab sihtpunkte
-STR_CLONE_ROAD_VEHICLE_DEPOT_INFO                               :{BLACK}See kopeerib maanteesõidukit. Vajuta sellele nuppule, ning seejärel maanteesõidukile depoo sees või väljas. CTRL-klõps jagab sihtpunkte
+STR_CLONE_ROAD_VEHICLE_INFO                                     :{BLACK}See paljundab mootorsõidukit. CTRL-klõps jagab sihtpunkte
+STR_CLONE_ROAD_VEHICLE_DEPOT_INFO                               :{BLACK}See paljundab mootorsõidukit. Klõpsa seda nuppu, ning seejärel mootorsõidukil depoos või sellest väljas. CTRL-klõps jagab sihtpunkte
 STR_CLONE_TRAIN                                                 :{BLACK}Klooni rong
 STR_CLONE_TRAIN_INFO                                            :{BLACK}See ehitab koopia rongist koos kõikide vagunitega. CTRL-klikk jagab sihtpunkte
 STR_CLONE_TRAIN_DEPOT_INFO                                      :{BLACK}See ehitab koopia rongist koos kõikide vagunitega. Vajuta sellele nuppule, ning seejärel rongile depoo sees või väljas. CTRL-klikk jagab sihtpunkte
@@ -2681,15 +2781,17 @@
 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}Teenindus
+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}Laadin / Laadin maha
+STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Veose ümberlaadimine
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Rong peab olema depoos peatatud
 STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT                              :{WHITE}Rongi ei saa depoosse saata...
 STR_8831_NO_MORE_SPACE_FOR_ORDERS                               :{WHITE}Pole ruumi käskudeks
@@ -2697,53 +2799,60 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Ei saa lisada uut käsku...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Ei saa kustutada seda käsku...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Ei saa muuta seda käsku...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Seda sihtpunkti ei saa ümber asetada...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Praegust järjestust ei ole võimalik vahele jätta...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Valitud järjestust ei ole võimalik vahele jätta...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Transpordivahendit ei saa liigutada...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}Tagumine vedur järgneb alati eesmisele
 STR_8838_N_A                                                    :N/A{SKIP}
 STR_8839_CAN_T_SELL_RAILROAD_VEHICLE                            :{WHITE}Raudteesõidukit ei saa müüa...
 STR_883A_UNABLE_TO_FIND_ROUTE_TO                                :{WHITE}Ei leia teed kohalikku depoosse
 STR_883B_CAN_T_STOP_START_TRAIN                                 :{WHITE}Ei saa peatada/startida rongi...
-STR_883C_SERVICING_INTERVAL_DAYS                                :{BLACK}Teenindusperiood: {LTBLUE}{COMMA} päeva{BLACK}  Viimati teenindatud: {LTBLUE}{DATE_LONG}
-STR_SERVICING_INTERVAL_PERCENT                                  :{BLACK}Teeninduse ajavahemik: {LTBLUE}{COMMA}%{BLACK}   Viimane teenindus: {LTBLUE}{DATE_LONG}
+STR_883C_SERVICING_INTERVAL_DAYS                                :{BLACK}Hooldusperiood: {LTBLUE}{COMMA} päeva{BLACK}  Viimati hooldatud: {LTBLUE}{DATE_LONG}
+STR_SERVICING_INTERVAL_PERCENT                                  :{BLACK}Hooldusperiood: {LTBLUE}{COMMA}%{BLACK}   Viimati hooldatud: {LTBLUE}{DATE_LONG}
 STR_883D_TRAINS_CLICK_ON_TRAIN_FOR                              :{BLACK}Rongid - vajuta rongile info jaoks
 STR_883E_BUILD_NEW_TRAINS_REQUIRES                              :{BLACK}Ehita uued rongid (vajab rongidepood)
-STR_883F_TRAINS_CLICK_ON_TRAIN_FOR                              :{BLACK}Rongid - et infot saada, vajuta rongile; liiguta vagunit, et seda rongilt lisada või eemaldada
+STR_883F_TRAINS_CLICK_ON_TRAIN_FOR                              :{BLACK}Rongid - et andmeid saada, vajuta rongile; liiguta vagunit, et seda rongile lisada või sellelt eemaldada
 STR_8840_BUILD_NEW_TRAIN_VEHICLE                                :{BLACK}Osta uus rongi veok
 STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE                             :{BLACK}Tiri rongi veok siia et müüa
 STR_8842_CENTER_MAIN_VIEW_ON_TRAIN                              :{BLACK}Keskenda põhivaade rongidepoo kohale
-STR_8843_TRAIN_VEHICLE_SELECTION                                :{BLACK}Nimekiri raudteesõidukitest - info saamiseks klõpsa raudteesõidukile
+STR_8843_TRAIN_VEHICLE_SELECTION                                :{BLACK}Nimekiri raudteesõidukitest - andmete saamiseks klõpsa raudteesõidukile
 STR_8844_BUILD_THE_HIGHLIGHTED_TRAIN                            :{BLACK}Ehita valitud raudteesõiduk
 STR_8845_RENAME_TRAIN_VEHICLE_TYPE                              :{BLACK}Muuda raudteesõiduki tüübinime
 STR_8846_CURRENT_TRAIN_ACTION_CLICK                             :{BLACK}Praegune rongi tegevus - vajuta siia et peatada/käivitada rong
 STR_8847_SHOW_TRAIN_S_ORDERS                                    :{BLACK}Näita rongi käske
 STR_8848_CENTER_MAIN_VIEW_ON_TRAIN                              :{BLACK}Vaate viimine rongi asukohale
 STR_8849_SEND_TRAIN_TO_DEPOT                                    :{BLACK}Saada rong depoosse
-STR_884A_FORCE_TRAIN_TO_PROCEED                                 :{BLACK}Sunni rongi minema edasi signaali ootamata
+STR_884A_FORCE_TRAIN_TO_PROCEED                                 :{BLACK}Sunni rongi signaale eirama
 STR_884B_REVERSE_DIRECTION_OF_TRAIN                             :{BLACK}Pööra rong ümber
 STR_884C_SHOW_TRAIN_DETAILS                                     :{BLACK}Näita rongi detaile
-STR_884D_INCREASE_SERVICING_INTERVAL                            :{BLACK}Suurenda teeninduse ajavahemikku
-STR_884E_DECREASE_SERVICING_INTERVAL                            :{BLACK}Vähenda teeninduse ajavahemikku
+STR_884D_INCREASE_SERVICING_INTERVAL                            :{BLACK}Suurenda hooldusperioodi
+STR_884E_DECREASE_SERVICING_INTERVAL                            :{BLACK}Vähenda hooldusperioodi
 STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED                          :{BLACK}Näita detaile viidud kauba kohta
 STR_8850_SHOW_DETAILS_OF_TRAIN_VEHICLES                         :{BLACK}Näita täpsemat infot rongivagunite kohta
-STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Näita iga rongivaguni mahutavust
+STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Näita iga rongivaguni kandevõimet
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Näita kogu rongi mahtu, jagatud kauba tüübi järgi
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Sihtpunktide nimekiri - vajuta käsul et see valida. CTRL + klik kerib jaama juurde
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Jäta praegune käsk vahele ja mine järgmise käsu juurde.
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Jäta praegune järjestus vahele ja alusta järgmisega. CTRL + klõps jätab vahele kuni valitud järjestuseni
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Kustuta valitud käsk
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Märgi valitud käsk ilma peatusetta peatuseks
 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_SERVICE_HINT                                                :{BLACK}Jäta see käsk vahele, kui teenindust ei vajata
-STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Maksumus: {CURRENCY} Mass: {WEIGHT_S}{}Kiirus: {VELOCITY}  Võimsus: {POWER}{}Kulu: {CURRENCY}/aastas{}Mahutus: {CARGO}
+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
-STR_885D_AGE_RUNNING_COST_YR                                    :{BLACK}Vanus: {LTBLUE}{STRING}{BLACK}   Kulud: {LTBLUE}{CURRENCY}/aastas
-STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED                         :{BLACK}Mass: {LTBLUE}{WEIGHT_S}  {BLACK}Võimsus: {LTBLUE}{POWER}{BLACK} Suurim kiirus: {LTBLUE}{VELOCITY}
-STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE                  :{BLACK}Mass: {LTBLUE}{WEIGHT_S} {BLACK}Võimsus: {LTBLUE}{POWER}{BLACK} Max. speed: {LTBLUE}{VELOCITY} {BLACK}Suurim veojõud: {LTBLUE}{FORCE}
+STR_885D_AGE_RUNNING_COST_YR                                    :{BLACK}Vanus: {LTBLUE}{STRING}{BLACK}   Käituskulud: {LTBLUE}{CURRENCY}/aastas
+STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED                         :{BLACK}Mass: {LTBLUE}{WEIGHT_S}  {BLACK}Võimsus: {LTBLUE}{POWER}{BLACK} Tippkiirus: {LTBLUE}{VELOCITY}
+STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE                  :{BLACK}Mass: {LTBLUE}{WEIGHT_S} {BLACK}Võimsus: {LTBLUE}{POWER}{BLACK} Tippkiirus: {LTBLUE}{VELOCITY} {BLACK}Veojõud: {LTBLUE}{FORCE}
 STR_885F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Selle aasta kasum: {LTBLUE}{CURRENCY}  (eelmisel aastal: {CURRENCY})
-STR_8860_RELIABILITY_BREAKDOWNS                                 :{BLACK}Töökindlus: {LTBLUE}{COMMA}%  {BLACK}Lagunemisi alates eelmisest hoolduskorrast: {LTBLUE}{COMMA}
+STR_8860_RELIABILITY_BREAKDOWNS                                 :{BLACK}Tehnoseisund: {LTBLUE}{COMMA}%  {BLACK}Rikkeid eelmisest hooldusest: {LTBLUE}{COMMA}
 STR_8861_STOPPED                                                :{RED}Peatatud
-STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL                           :{WHITE}Ohu korral ei ole võimalik sundida rongi signaali vahele jätma
+STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL                           :{WHITE}Ohu korral ei ole võimalik sundida rongi signaale eirama
 STR_8863_CRASHED                                                :{RED}Kokkupõrge!
 
 STR_8865_NAME_TRAIN                                             :{WHITE}Anna rongile nimi
@@ -2755,41 +2864,55 @@
 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}
-STR_INCOMPATIBLE_RAIL_TYPES                                     :Ühildamatud raudtee tüübid
+STR_INCOMPATIBLE_RAIL_TYPES                                     :Ühildamatud rööbasteetüübid
 STR_TRAIN_NO_POWER                                              :{RED}Vool puudub
 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
+STR_TIMETABLE_TOTAL_TIME                                        :Selle sõiduplaani täitmine võtab {STRING}
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :Selle sõiduplaani täitmine võtab vähemalt {STRING} (kõik ei ole planeeritud)
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Täida ise
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Täida sõiduplaan ise esmareisi väärtustega
 
 ##id 0x9000
-STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Maanteesõiduk on teel ees
-STR_9001_ROAD_VEHICLES                                          :{WHITE}{COMPANY} - {COMMA} maanteesõiduk{P "" it}
+STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Mootorsõiduk takistab teed
+STR_9001_ROAD_VEHICLES                                          :{WHITE}{COMPANY} - {COMMA} mootorsõiduk{P "" it}
 STR_9002                                                        :{WHITE}{VEHICLE}
-STR_9003_ROAD_VEHICLE_DEPOT                                     :{WHITE}Linna {TOWN} maanteesõidukidepoo
-STR_9004_NEW_VEHICLES                                           :{BLACK}Uus maanteesõiduk
-STR_9006_NEW_ROAD_VEHICLES                                      :{WHITE}Uued maanteesõidukid
+STR_9003_ROAD_VEHICLE_DEPOT                                     :{WHITE}Linna {TOWN} mootorsõidukidepoo
+STR_9004_NEW_VEHICLES                                           :{BLACK}Uus mootorsõiduk
+STR_9006_NEW_ROAD_VEHICLES                                      :{WHITE}Uued mootorsõidukid
 STR_9007_BUILD_VEHICLE                                          :{BLACK}Ehita veovahend
-STR_9009_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}Maanteesõidukit ei saa ehitada...
-STR_900C_DETAILS                                                :{WHITE}{VEHICLE} (Detailid)
-STR_900D_AGE_RUNNING_COST_YR                                    :{BLACK}Vanus: {LTBLUE}{STRING}{BLACK}   Hoolduskulud: {LTBLUE}{CURRENCY}/aastas
-STR_900E_MAX_SPEED                                              :{BLACK}Maksimaalne kiirus: {LTBLUE}{VELOCITY}
-STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Selle aasta kasum: {LTBLUE}{CURRENCY}  (viimasel aastal: {CURRENCY})
-STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Töökindlus: {LTBLUE}{COMMA}%  {BLACK}Lagunemisi alates viimasest hooldusest: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Ehitatud: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY}
-STR_9012_CAPACITY                                               :{BLACK}Mahutavus: {LTBLUE}{CARGO}
+STR_9009_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}Mootorsõidukit ei saa ehitada...
+STR_900C_DETAILS                                                :{WHITE}{VEHICLE} (üksikasjad)
+STR_900D_AGE_RUNNING_COST_YR                                    :{BLACK}Vanus: {LTBLUE}{STRING}{BLACK}   Käituskulud: {LTBLUE}{CURRENCY}/aastas
+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}{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...
 STR_9015_CAN_T_STOP_START_ROAD_VEHICLE                          :{WHITE}Ei saa veokit peatada, ega startida...
 STR_9016_ROAD_VEHICLE_IS_WAITING                                :{WHITE}Veok {COMMA} ootab garaaþi
 STR_HEADING_FOR_ROAD_DEPOT                                      :{ORANGE}Suundub {TOWN} garaaþi
 STR_HEADING_FOR_ROAD_DEPOT_VEL                                  :{ORANGE}Suundub {TOWN} garaaþi, {VELOCITY}
-STR_HEADING_FOR_ROAD_DEPOT_SERVICE                              :{LTBLUE}Teenindus linna {TOWN} depoos
-STR_HEADING_FOR_ROAD_DEPOT_SERVICE_VEL                          :{LTBLUE}Teenindus linna {TOWN} depoos, {VELOCITY}
+STR_HEADING_FOR_ROAD_DEPOT_SERVICE                              :{LTBLUE}Hooldus linna {TOWN} depoos
+STR_HEADING_FOR_ROAD_DEPOT_SERVICE_VEL                          :{LTBLUE}Hooldus linna {TOWN} depoos, {VELOCITY}
 STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT                            :{WHITE}Ei saa veokit garaaþi saata
 STR_9019_UNABLE_TO_FIND_LOCAL_DEPOT                             :{WHITE}Ei leia kohalikku garaaþi üles
 STR_901A_ROAD_VEHICLES_CLICK_ON                                 :{BLACK}Veokid - info saamiseks vajuta veokile
@@ -2797,41 +2920,45 @@
 STR_901C_CURRENT_VEHICLE_ACTION                                 :{BLACK}Transpordivahendi praegune tegevus - selle peatamiseks või startimiseks klõpsa siia
 STR_901D_SHOW_VEHICLE_S_ORDERS                                  :{BLACK}Näita veovahendi sihtpunkte
 STR_901E_CENTER_MAIN_VIEW_ON_VEHICLE                            :{BLACK}Keskenda vaade veovahendile
-STR_901F_SEND_VEHICLE_TO_DEPOT                                  :{BLACK}Saada sõiduk garaaži. CTRL+klõps teenindab ainult.
+STR_901F_SEND_VEHICLE_TO_DEPOT                                  :{BLACK}Saada sõiduk garaaži. CTRL+klõps, et ainult teenindada.
 STR_9020_FORCE_VEHICLE_TO_TURN_AROUND                           :{BLACK}Sunni veovahendit ümber pöörama
-STR_9021_SHOW_ROAD_VEHICLE_DETAILS                              :{BLACK}Näita maanteesõiduki üksikasju
+STR_9021_SHOW_ROAD_VEHICLE_DETAILS                              :{BLACK}Näita mootorsõiduki üksikasju
 STR_9022_VEHICLES_CLICK_ON_VEHICLE                              :{BLACK}Veovahendid - andmete saamiseks klõpsa veovahendile
-STR_9023_BUILD_NEW_ROAD_VEHICLE                                 :{BLACK}Ehita uus maanteesõiduk
+STR_9023_BUILD_NEW_ROAD_VEHICLE                                 :{BLACK}Ehita uus mootorsõiduk
 STR_9024_DRAG_ROAD_VEHICLE_TO_HERE                              :{BLACK}Et müüa, tiri sõiduk siia
 STR_9025_CENTER_MAIN_VIEW_ON_ROAD                               :{BLACK}Vii vaade garaaþi asukohale
-STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Nimekiri maanteesõidukitest - maanteesõiduki kohta info saamiseks vajuta sellele
-STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Ehita valitud maanteesõiduk
-STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Hind: {CURRENCY}{}Kiirus: {VELOCITY}{}Hoolduskulud: {CURRENCY}/aastas{}Mahutavus: {CARGO}
+STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Mootorsõiduki valimisnimekiri - andmete saamiseks klõpsa sõidukile
+STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Ehita valitud mootorsõiduk
+STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Hind: {CURRENCY}{}Tippkiirus: {VELOCITY}{}Käituskulud: {CURRENCY}/aastas{}Kandevõime: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Kandevõime: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
-STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Nimeta maanteeveok ümber
+STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Nimeta mootorsõiduk ümber
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Ei saa maanteveokit ümber nimetada...
-STR_902E_NAME_ROAD_VEHICLE                                      :{BLACK}Nimeta maanteeveok ümber
+STR_902E_NAME_ROAD_VEHICLE                                      :{BLACK}Nimeta mootorsõidukit
 STR_902F_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Rahvas rõõmustab . . .{}{STATION} jaama saabus esimene buss!
 STR_9030_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Rahvas rõõmustab . . .{} esimene veok saabus {STATION} jaama!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Kodanikud tähistavad . . .{}Esimene reisitramm saabus trammijaama {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Kodanikud tähistavad . . .{}Esimene kaubatramm saabus trammijaama {STATION}!
 STR_9031_ROAD_VEHICLE_CRASH_DRIVER                              :{BLACK}{BIGFONT}Rongikokkupõrge!{}Juht suri peale õnnetust tules
-STR_9032_ROAD_VEHICLE_CRASH_DIE                                 :{BLACK}{BIGFONT}Maanteesõiduki kokkupõrge rongiga!{}{COMMA} inimest surnud
+STR_9032_ROAD_VEHICLE_CRASH_DIE                                 :{BLACK}{BIGFONT}Mootorsõiduki kokkupõrge rongiga!{}{COMMA} inimest suri õnnetuses
 STR_9033_CAN_T_MAKE_VEHICLE_TURN                                :{WHITE}Transpordivahendit ei saa ümber pöörata...
 STR_ONLY_TURN_SINGLE_UNIT                                       :{WHITE}Mitmest osast koosnevaid veovahendeid ei saa ümber pöörata
 STR_9034_RENAME                                                 :{BLACK}Muuda nime
-STR_9035_RENAME_ROAD_VEHICLE_TYPE                               :{BLACK}Muuda maanteesõiduki tüübinime
-STR_9036_RENAME_ROAD_VEHICLE_TYPE                               :{WHITE}Muuda maanteesõiduki tüübinime
-STR_9037_CAN_T_RENAME_ROAD_VEHICLE                              :{WHITE}Maanteesõiduki tüübinime ei saa muuta...
+STR_9035_RENAME_ROAD_VEHICLE_TYPE                               :{BLACK}Muuda mootorsõiduki tüübinime
+STR_9036_RENAME_ROAD_VEHICLE_TYPE                               :{WHITE}Muuda mootorsõiduki tüübinime
+STR_9037_CAN_T_RENAME_ROAD_VEHICLE                              :{WHITE}Mootorsõiduki tüübinime ei saa muuta...
 STR_9038_GO_TO_ROADVEH_DEPOT                                    :Mine linna {TOWN} garaaþi
-STR_SERVICE_AT_ROADVEH_DEPOT                                    :Hoolda linna {TOWN} maanteesõidukidepoos
+STR_SERVICE_AT_ROADVEH_DEPOT                                    :Hoolda linna {TOWN} mootorsõidukidepoos
 
-STR_REFIT_ROAD_VEHICLE_TO_CARRY                                 :{BLACK}Seadista maanteesõidukit kandmaks teist tüüpi laadungit
-STR_REFIT_ROAD_VEHICLE                                          :{BLACK}Muuda maanteesõiduki seadistust
-STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED                     :{BLACK}Seadista maanteesõidukit kandma valitud laadungitüüpi
-STR_REFIT_ROAD_VEHICLE_CAN_T                                    :{WHITE}Maanteesõiduki seadistust ei saa ümber muuta
+STR_REFIT_ROAD_VEHICLE_TO_CARRY                                 :{BLACK}Seadista mootorsõidukit kandmaks teist tüüpi veost
+STR_REFIT_ROAD_VEHICLE                                          :{BLACK}Muuda mootorsõiduki seadistust
+STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED                     :{BLACK}Seadista mootorsõidukit kandma valitud veotüüpi
+STR_REFIT_ROAD_VEHICLE_CAN_T                                    :{WHITE}Mootorsõiduki seadistust ei saa ümber muuta
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Vali, millist tüüpi laadungit veovahend veab
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Sadama ehitus
+STR_9800_DOCK_CONSTRUCTION                                      :Sadamaehitus
 STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Sadama ehitus
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Siia ei saa sadamat ehitada
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Paadikuur
@@ -2847,20 +2974,20 @@
 STR_980D_CAN_T_BUILD_SHIP                                       :{WHITE}Ei saa laeva ehitada...
 STR_980E_SHIP_IN_THE_WAY                                        :{WHITE}Laev on ees
 STR_980F                                                        :{WHITE}{VEHICLE}
-STR_9811_DETAILS                                                :{WHITE}{VEHICLE} (Detailid)
-STR_9812_AGE_RUNNING_COST_YR                                    :{BLACK}Vanus: {LTBLUE}{STRING}{BLACK}   Hoolduskulud: {LTBLUE}{CURRENCY}/aastas
-STR_9813_MAX_SPEED                                              :{BLACK}Maks. kiirus: {LTBLUE}{VELOCITY}
+STR_9811_DETAILS                                                :{WHITE}{VEHICLE} (üksikasjad)
+STR_9812_AGE_RUNNING_COST_YR                                    :{BLACK}Vanus: {LTBLUE}{STRING}{BLACK}   Käituskulud: {LTBLUE}{CURRENCY}/aastas
+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}Töökindlus: {LTBLUE}{COMMA}%  {BLACK}Lagunemisi alates viimasest hooldusest: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Ehitati: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY}
-STR_9817_CAPACITY                                               :{BLACK}Mahutavus: {LTBLUE}{CARGO}
+STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Tehnoseisund: {LTBLUE}{COMMA}%  {BLACK}Rikkeid eelmisest hooldusest: {LTBLUE}{COMMA}
+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...
 STR_981A_UNABLE_TO_FIND_LOCAL_DEPOT                             :{WHITE}Ei leia kohalikku paadikuuri
 STR_HEADING_FOR_SHIP_DEPOT                                      :{ORANGE}Suundub {TOWN}a paadikuuri
 STR_HEADING_FOR_SHIP_DEPOT_VEL                                  :{ORANGE}Suundub {TOWN}a paadikuuri, {VELOCITY}
-STR_HEADING_FOR_SHIP_DEPOT_SERVICE                              :{LTBLUE}Teenindus linna {TOWN} sadamas
-STR_HEADING_FOR_SHIP_DEPOT_SERVICE_VEL                          :{LTBLUE}Teenindus linna {TOWN} sadamas, {VELOCITY}
+STR_HEADING_FOR_SHIP_DEPOT_SERVICE                              :{LTBLUE}Hooldus linna {TOWN} sadamas
+STR_HEADING_FOR_SHIP_DEPOT_SERVICE_VEL                          :{LTBLUE}Hooldus linna {TOWN} sadamas, {VELOCITY}
 STR_981C_SHIP_IS_WAITING_IN_DEPOT                               :{WHITE}Laev {COMMA} ootab sadamas
 STR_981D_BUILD_SHIP_DOCK                                        :{BLACK}Ehita laevakuur
 STR_981E_BUILD_SHIP_DEPOT_FOR_BUILDING                          :{BLACK}Ehita laevakuur (laevade ehitamiseks ja hoolduseks)
@@ -2877,13 +3004,13 @@
 STR_9829_CENTER_MAIN_VIEW_ON_SHIP                               :{BLACK}Vii vaade laeva asukohale
 STR_982A_SEND_SHIP_TO_DEPOT                                     :{BLACK}Saada laev paadikuuri
 STR_982B_SHOW_SHIP_DETAILS                                      :{BLACK}Näita laeva detaile
-STR_982E_COST_MAX_SPEED_CAPACITY                                :{BLACK}Hind: {CURRENCY} Maks. Kiirus: {VELOCITY}{}Mahutavus: {CARGO}{}Hoolduskulud: {CURRENCY}/aasta
+STR_982E_COST_MAX_SPEED_CAPACITY                                :{BLACK}Hind: {CURRENCY} Tippkiirus: {VELOCITY}{}Kandevõime: {CARGO}{}Käituskulud: {CURRENCY}/aastas
 STR_982F_NAME_SHIP                                              :{BLACK}Anna laevale nimi
 
 STR_9831_NAME_SHIP                                              :{WHITE}Anna laevale nimi
 STR_9832_CAN_T_NAME_SHIP                                        :{WHITE}Ei saa laeva ümber nimetada...
-STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Rahvas rõõmustab . . .{}{STATION} sadamasse saabus esimene laev!
-STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}Aseta teemärgisena kasutatav poi
+STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Rahvas rõõmustab . . .{}{STATION} terminali saabus esimene laev!
+STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}Raja teemärgisena kasutatav poi
 STR_9835_CAN_T_POSITION_BUOY_HERE                               :{WHITE}Poid ei saa siia asetada...
 STR_9836_RENAME                                                 :{BLACK}Muuda nime
 STR_9837_RENAME_SHIP_TYPE                                       :{BLACK}Nimeta laeva tüüp ümber
@@ -2895,47 +3022,47 @@
 STR_983D_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Vali kauba tüüp, mida laev hakkab kandma
 STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED                        :{BLACK}Seadista laev ümber valitud kaubatüübi jaoks
 STR_983F_SELECT_CARGO_TYPE_TO_CARRY                             :{GOLD}Vali kaubatüüp, mida vedada:
-STR_9840_NEW_CAPACITY_COST_OF_REFIT                             :{BLACK}Uus mahutavus: {GOLD}{CARGO}{}{BLACK}Laeva ümberseadistamise hind: {GOLD}{CURRENCY}
+STR_9840_NEW_CAPACITY_COST_OF_REFIT                             :{BLACK}Uus kandevõime: {GOLD}{CARGO}{}{BLACK}Laeva ümberseadistamise hind: {GOLD}{CURRENCY}
 STR_9841_CAN_T_REFIT_SHIP                                       :{WHITE}Ei saa laeva ümber seadistada...
 STR_9842_REFITTABLE                                             :(ümberseadistatav)
 STR_GO_TO_SHIP_DEPOT                                            :Mine {TOWN} paadikuuri
-SERVICE_AT_SHIP_DEPOT                                           :Teenindus {TOWN} paadikuuris
+SERVICE_AT_SHIP_DEPOT                                           :Hooldus {TOWN} paadikuuris
 
 ##id 0xA000
-STR_A000_AIRPORTS                                               :{WHITE}Lennujaamad
-STR_A001_CAN_T_BUILD_AIRPORT_HERE                               :{WHITE}Ei saa lennujaama siia ehitada...
+STR_A000_AIRPORTS                                               :{WHITE}Lennuväljad
+STR_A001_CAN_T_BUILD_AIRPORT_HERE                               :{WHITE}Siia ei saa lennuvälja rajada...
 STR_A002_AIRCRAFT_HANGAR                                        :{WHITE}{STATION} Lennujaama angaar
 STR_A003_NEW_AIRCRAFT                                           :{BLACK}Uus lennuk
 STR_CLONE_AIRCRAFT                                              :{BLACK}Klooni lennuk
-STR_CLONE_AIRCRAFT_INFO                                         :{BLACK}See ehitab lennukist koopia. CTRL-klikk jagab sihtpunkte
-STR_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW                           :{BLACK}See ehitab lennukist koopia. Vajuta sellele nuppule, ning seejärel lennukile angaari sees või väljas. CTRL-klikk jagab sihtpunkte
+STR_CLONE_AIRCRAFT_INFO                                         :{BLACK}See paljundab õhusõidukit. CTRL-klikk jagab sihtpunkte
+STR_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW                           :{BLACK}See paljundab õhusõidukit. Vajuta sellele nuppule, ning seejärel lennukile angaari sees või väljas. CTRL-klikk jagab sihtpunkte
 STR_A005_NEW_AIRCRAFT                                           :{WHITE}Uus lennuk
 STR_A006_BUILD_AIRCRAFT                                         :{BLACK}Ehita lennuk
 STR_A008_CAN_T_BUILD_AIRCRAFT                                   :{WHITE}Ei saa ehitada lennukit...
 STR_A009_AIRCRAFT                                               :{WHITE}{COMPANY} - {COMMA} lennuk{P "" it}
 STR_A00A                                                        :{WHITE}{VEHICLE}
 STR_A00B_ORDERS                                                 :{WHITE}{VEHICLE} (sihtpunktid)
-STR_A00C_DETAILS                                                :{WHITE}{VEHICLE} (Detailid)
-STR_A00D_AGE_RUNNING_COST_YR                                    :{BLACK}Vanus: {LTBLUE}{STRING}{BLACK}   Hoolduskulud: {LTBLUE}{CURRENCY}/aastas
-STR_A00E_MAX_SPEED                                              :{BLACK}Maks. kiirus: {LTBLUE}{VELOCITY}
+STR_A00C_DETAILS                                                :{WHITE}{VEHICLE} (üksikasjad)
+STR_A00D_AGE_RUNNING_COST_YR                                    :{BLACK}Vanus: {LTBLUE}{STRING}{BLACK}   Käituskulud: {LTBLUE}{CURRENCY}/aastas
+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}Töökindlus: {LTBLUE}{COMMA}%  {BLACK}Lagunemisi alates viimasest hooldusest: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Ehitusaasta: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY}
+STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Tehnoseisund: {LTBLUE}{COMMA}%  {BLACK}Rikkeid eelmisest hooldusest: {LTBLUE}{COMMA}
+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}
-STR_HEADING_FOR_HANGAR_SERVICE                                  :{LTBLUE}Teenindus linna {STATION} angaaris
-STR_HEADING_FOR_HANGAR_SERVICE_VEL                              :{LTBLUE}Teenindus linna {STATION} angaaris, {VELOCITY}
+STR_HEADING_FOR_HANGAR_SERVICE                                  :{LTBLUE}Hooldus linna {STATION} angaaris
+STR_HEADING_FOR_HANGAR_SERVICE_VEL                              :{LTBLUE}Hooldus linna {STATION} angaaris, {VELOCITY}
 STR_A014_AIRCRAFT_IS_WAITING_IN                                 :{WHITE}Lennuk {COMMA} ootab angaaris
 STR_A015_AIRCRAFT_IN_THE_WAY                                    :{WHITE}Lennuk on teel
 STR_A016_CAN_T_STOP_START_AIRCRAFT                              :{WHITE}Ei saa lennukit peatada/käivitada...
 STR_A017_AIRCRAFT_IS_IN_FLIGHT                                  :{WHITE}Lennuk on õhus
-STR_A019_CAPACITY                                               :{BLACK}Mahutavus: {LTBLUE}{CARGO}, {CARGO}
-STR_A01A_CAPACITY                                               :{BLACK}Mahutavus: {LTBLUE}{CARGO}
+STR_A019_CAPACITY                                               :{BLACK}Kandevõime: {LTBLUE}{CARGO}, {CARGO}
+STR_A01A_CAPACITY                                               :{BLACK}Kandevõime: {LTBLUE}{CARGO}
 STR_A01B_AIRCRAFT_MUST_BE_STOPPED                               :{WHITE}Lennuk peab olema peatatud angaari sees
 STR_A01C_CAN_T_SELL_AIRCRAFT                                    :{WHITE}Ei saa lennukit müüa...
-STR_A01D_AIRPORT_CONSTRUCTION                                   :Lennujaama ehitus
-STR_A01E_BUILD_AIRPORT                                          :{BLACK}Ehita lennujaam
+STR_A01D_AIRPORT_CONSTRUCTION                                   :Lennuvälja ehitamine
+STR_A01E_BUILD_AIRPORT                                          :{BLACK}Ehita lennuväli
 STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT                             :{BLACK}Lennuk - info saamiseks vajuta lennukile
 STR_A020_BUILD_NEW_AIRCRAFT_REQUIRES                            :{BLACK}Ehita uus lennuk (vajab angaariga lennujaama)
 STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT                             :{BLACK}Lennuk - info saamiseks vajuta lennukile
@@ -2949,12 +3076,12 @@
 STR_A029_CENTER_MAIN_VIEW_ON_AIRCRAFT                           :{BLACK}Vii peavaade lennukile
 STR_A02A_SEND_AIRCRAFT_TO_HANGAR                                :{BLACK}Saada lennuk angaari
 STR_A02B_SHOW_AIRCRAFT_DETAILS                                  :{BLACK}Näita lennuki detaile
-STR_A02E_COST_MAX_SPEED_CAPACITY                                :{BLACK}Hind: {CURRENCY} Maks. kiirus: {VELOCITY}{}Mahutavus: {COMMA} reisijat, {COMMA} kotti kirju{}Hoolduskulud: {CURRENCY}/aastas
+STR_A02E_COST_MAX_SPEED_CAPACITY                                :{BLACK}Hind: {CURRENCY} Tippkiirus: {VELOCITY}{}Kandevõime: {COMMA} reisijat, {COMMA} kotti kirju{}Käituskulud: {CURRENCY}/aastas
 
 STR_A030_NAME_AIRCRAFT                                          :{WHITE}Anna lennukile nimi
 STR_A031_CAN_T_NAME_AIRCRAFT                                    :{WHITE}Ei saa lennukile nime anda
 STR_A032_NAME_AIRCRAFT                                          :{BLACK}Nimeta lennuk ümber
-STR_A033_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Rahvas rõõmustab . . .{}{STATION} lennujaama saabus esimene lennuk!
+STR_A033_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Rahvas rõõmustab . . .{}{STATION} terminali saabus esimene lennuk!
 STR_A034_PLANE_CRASH_DIE_IN_FIREBALL                            :{BLACK}{BIGFONT}Lennuõnnetus!{}{COMMA} surid tules {STATION}s
 STR_PLANE_CRASH_OUT_OF_FUEL                                     :{BLACK}{BIGFONT}Lennuõnnetus!{}Lennukil lõppes kütus, {COMMA} surid tules!
 STR_A036                                                        :{TINYFONT}{BLACK}{STATION}
@@ -2968,14 +3095,16 @@
 STR_A03E_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Vali kauba tüüp, mida lennuk hakkab kandma
 STR_A03F_REFIT_AIRCRAFT_TO_CARRY                                :{BLACK}Seadista lennuk ümber, et kanda valitud kaubatüüpi
 STR_A040_SELECT_CARGO_TYPE_TO_CARRY                             :{GOLD}Vali kaubatüüp, mida kanda:
-STR_A041_NEW_CAPACITY_COST_OF_REFIT                             :{BLACK}Uus mahutavus: {GOLD}{STRING}{}{BLACK}Ümber seadistamise maksumus: {GOLD}{CURRENCY}
+STR_A041_NEW_CAPACITY_COST_OF_REFIT                             :{BLACK}Uus kandevõime: {GOLD}{STRING}{}{BLACK}Ümberseadistamise hind: {GOLD}{CURRENCY}
 STR_A042_CAN_T_REFIT_AIRCRAFT                                   :{WHITE}Ei saa lennukit ümber seadistada...
-STR_GO_TO_AIRPORT_HANGAR                                        :Mine {STATION} Angaari
-SERVICE_AT_AIRPORT_HANGAR                                       :Teenindus {STATION} angaaris
+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}Maanteesõiduk plahvatas kokkupõrkes 'UFO-ga'!
+STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Mootorsõiduk plahvatas kokkupõrkes 'UFO-ga'!
 STR_B002_OIL_REFINERY_EXPLOSION                                 :{BLACK}{BIGFONT}Naftapuhastusjaama plahvatus {TOWN} lähedal!
 STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS                        :{BLACK}{BIGFONT}Tehas purunes teadmata põhjustel {TOWN} lähedal!
 STR_B004_UFO_LANDS_NEAR                                         :{BLACK}{BIGFONT}'UFO' maandus {TOWN} lähedal!
@@ -2986,8 +3115,8 @@
 STR_BRIBE_FAILED_2                                              :{WHITE}kohalike uurijate poolt avastatud
 STR_BUILD_DATE                                                  :{BLACK}Ehitatud: {LTBLUE}{DATE_LONG}
 
-STR_PERFORMANCE_DETAIL                                          :{WHITE}Detailne tegevuse reiting
-STR_PERFORMANCE_DETAIL_KEY                                      :{BLACK}Detailne
+STR_PERFORMANCE_DETAIL                                          :{WHITE}Üksikasjalik tulemushinnang
+STR_PERFORMANCE_DETAIL_KEY                                      :{BLACK}Üksikasjalik
 STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY                          :{BLACK}({CURRCOMPACT}/{CURRCOMPACT})
 STR_PERFORMANCE_DETAIL_AMOUNT_INT                               :{BLACK}({COMMA}/{COMMA})
 STR_PERFORMANCE_DETAIL_PERCENT                                  :{WHITE}{NUM}%
@@ -2996,23 +3125,23 @@
 STR_PERFORMANCE_DETAIL_VEHICLES                                 :{BLACK}Sõidukeid:
 STR_PERFORMANCE_DETAIL_STATIONS                                 :{BLACK}Jaamu:
 STR_PERFORMANCE_DETAIL_MIN_PROFIT                               :{BLACK}Vähim kasum:
-STR_PERFORMANCE_DETAIL_MIN_INCOME                               :{BLACK}Vähim sissetulek:
-STR_PERFORMANCE_DETAIL_MAX_INCOME                               :{BLACK}Maks. sissetulek:
-STR_PERFORMANCE_DETAIL_DELIVERED                                :{BLACK}Transporditud:
+STR_PERFORMANCE_DETAIL_MIN_INCOME                               :{BLACK}Vähim tulu:
+STR_PERFORMANCE_DETAIL_MAX_INCOME                               :{BLACK}Suurim tulu:
+STR_PERFORMANCE_DETAIL_DELIVERED                                :{BLACK}Veetud:
 STR_PERFORMANCE_DETAIL_CARGO                                    :{BLACK}Kaupu:
 STR_PERFORMANCE_DETAIL_MONEY                                    :{BLACK}Raha:
 STR_PERFORMANCE_DETAIL_LOAN                                     :{BLACK}Laen:
 STR_PERFORMANCE_DETAIL_TOTAL                                    :{BLACK}Kokku:
 ############ End of order list
-STR_PERFORMANCE_DETAIL_VEHICLES_TIP                             :{BLACK}Transpordivahendeid kokku; see sisaldab maantee-, raudtee- ja õhusõidukeid, ning laevu
-STR_PERFORMANCE_DETAIL_STATIONS_TIP                             :{BLACK}Jaamade osade arv. Iga osa jaamast (nt. rongijaam, bussipeatus, lennujaam) loetakse eraldi, isegi kui naad on ühendatud üheks jaamaks
-STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP                           :{BLACK}Kõige väiksema sissetulekuga sõiduki kasum (kõikidest vähemalt 2 aastastest veovahenditest)
+STR_PERFORMANCE_DETAIL_VEHICLES_TIP                             :{BLACK}Veeremit kokku; sisaldab sõidutee-, rööbastee- ja õhusõidukeid, ning laevu
+STR_PERFORMANCE_DETAIL_STATIONS_TIP                             :{BLACK}Jaamablokkide arv. Iga osa jaamast (nt. raudteejaam, bussipeatus, lennujaam) loetakse eraldi, isegi kui naad on ühendatud üheks jaamaks
+STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP                           :{BLACK}Kõige väiksema tuluga sõiduki kasum (kõikidest vähemalt 2 aastastest veovahenditest)
 STR_PERFORMANCE_DETAIL_MIN_INCOME_TIP                           :{BLACK}Väikseim kuukasum viimase 12 kvartali jooksul
 STR_PERFORMANCE_DETAIL_MAX_INCOME_TIP                           :{BLACK}Suurim kuukasum viimase 12 kvartali jooksul
 STR_PERFORMANCE_DETAIL_DELIVERED_TIP                            :{BLACK}Kauba arv, mis on veatud viimase 4 kvartali jooksul
 STR_PERFORMANCE_DETAIL_CARGO_TIP                                :{BLACK}Kauba arv, mis on veatud viimasel kvartalil
 STR_PERFORMANCE_DETAIL_MONEY_TIP                                :{BLACK}Raha arv, mis on sellel firmal pangas
-STR_PERFORMANCE_DETAIL_LOAN_TIP                                 :{BLACK}Raha arv, mida see firma on võtnud laenuks
+STR_PERFORMANCE_DETAIL_LOAN_TIP                                 :{BLACK}Selle ettevõtte kogulaen
 STR_PERFORMANCE_DETAIL_TOTAL_TIP                                :{BLACK}Kokku punkte võimalikest punktidest
 
 STR_NEWGRF_SETTINGS_BUTTON                                      :{BLACK}NewGRF seaded
@@ -3049,7 +3178,7 @@
 STR_NEWGRF_FILE_TIP                                             :{BLACK}Nimekiri installeerimata NewGRF failidest. Parameetrite muutmiseks klõpsa failil.
 STR_NEWGRF_PARAMETER                                            :{BLACK}Parameetrid: {SILVER}{STRING}
 STR_NEWGRF_PARAMETER_QUERY                                      :{BLACK}Sisesta NewGRF parameetrid
-STR_NEWGRF_NO_INFO                                              :{BLACK}Informatsioon puudub
+STR_NEWGRF_NO_INFO                                              :{BLACK}Andmed puuduvad
 
 STR_NEWGRF_ADD_CAPTION                                          :{WHITE}Olemasolevad NewGRF failid
 STR_NEWGRF_ADD_FILE                                             :{BLACK}Lisa valikule
@@ -3066,7 +3195,7 @@
 STR_NEWGRF_DISABLED_WARNING                                     :{WHITE}Puuduvad GRF failid on välja lülitatud
 STR_NEWGRF_NOT_FOUND_WARNING                                    :{WHITE}Mängu laadimiseks puudu olevad GRF failid
 
-STR_CURRENCY_WINDOW                                             :{WHITE}Personaalne valuuta
+STR_CURRENCY_WINDOW                                             :{WHITE}Isiklik valuuta
 STR_CURRENCY_EXCHANGE_RATE                                      :{LTBLUE}Vahetuskurss: {ORANGE}{CURRENCY} = £ {COMMA}
 STR_CURRENCY_SEPARATOR                                          :{LTBLUE}Vahemärk:
 STR_CURRENCY_PREFIX                                             :{LTBLUE}Eesliide:
@@ -3083,20 +3212,21 @@
 STR_SHIP                                                        :{BLACK}{SHIP}
 
 STR_SCHEDULED_TRAINS                                            :{WHITE}{STATION} - {COMMA} Rong{P "" i}
-STR_SCHEDULED_ROAD_VEHICLES                                     :{WHITE}{STATION} - {COMMA} maanteesõiduk{P "" it}
+STR_SCHEDULED_ROAD_VEHICLES                                     :{WHITE}{STATION} - {COMMA} mootorsõiduk{P "" it}
 STR_SCHEDULED_AIRCRAFT                                          :{WHITE}{STATION} - {COMMA} Lennuk{P "" it}
 STR_SCHEDULED_SHIPS                                             :{WHITE}{STATION} - {COMMA} Laev{P "" a}
 
-STR_SCHEDULED_TRAINS_TIP                                        :{BLACK}Näita kõiki ronge, mille marsruudis on see jaam
-STR_SCHEDULED_ROAD_VEHICLES_TIP                                 :{BLACK}Näita kõiki maanteesõidukeid, mille marsruut sisaldab seda jaama
-STR_SCHEDULED_AIRCRAFT_TIP                                      :{BLACK}Näita kõiki lennukeid, mille marsruudis on see lennujaam
-STR_SCHEDULED_SHIPS_TIP                                         :{BLACK}Näita kõiki laevu, mille marsruudis on see sadam
+STR_SCHEDULED_TRAINS_TIP                                        :{BLACK}Näita kõiki ronge, mille sõidugraafik sisaldab seda rongijaama
+STR_SCHEDULED_ROAD_VEHICLES_TIP                                 :{BLACK}Näita kõiki mootorsõidukeid, mille sõidugraafik sisaldab seda jaama
+STR_SCHEDULED_AIRCRAFT_TIP                                      :{BLACK}Näita kõiki lennukeid, mille sõidugraafik sisaldab seda lennujaama
+STR_SCHEDULED_SHIPS_TIP                                         :{BLACK}Näita kõiki laevu, mille sõidugraafik sisaldab seda sadamat
 
-STR_VEH_WITH_SHARED_ORDERS_LIST                                 :{WHITE}Jagatud marsruut{COMMA} Auto{P "" d}
-STR_VEH_WITH_SHARED_ORDERS_LIST_TIP                             :{BLACK}Näita kõiki sama marsruudiga maanteesõidukeid
+STR_VEH_WITH_SHARED_ORDERS_LIST                                 :{WHITE}Jagatud sõidugraafik{COMMA} Auto{P "" d}
+STR_VEH_WITH_SHARED_ORDERS_LIST_TIP                             :{BLACK}Näita kõiki sama sõidugraafikuga mootorsõidukeid
 
 ### depot strings
 STR_DEPOT_SELL_CONFIRMATION_TEXT                                :{YELLOW}Sa oled müümas kõiki depoos asuvaid masinaid. Kas sa oled kindel?
+STR_DEPOT_WRONG_DEPOT_TYPE                                      :Vale depootüüp
 
 STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP                             :{BLACK}Müü kõik rongid jaamast
 STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP                           :{BLACK}Müü kõik autod garaažist
@@ -3108,10 +3238,10 @@
 STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TIP                           :{BLACK}Võta nimekiri kõikidest laevadest selles sadamas nende käskude järgi
 STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TIP                       :{BLACK}Võta nimekiri kõikidest lennukitest suvalistest angaaridest selles lennujaamas nende käskude järgi
 
-STR_DEPOT_AUTOREPLACE_TRAIN_TIP                                 :{BLACK}Asenda automaatselt kõik rongid jaamas
-STR_DEPOT_AUTOREPLACE_ROADVEH_TIP                               :{BLACK}Asenda automaatselt kõik depoos olevad maanteesõidukid
-STR_DEPOT_AUTOREPLACE_SHIP_TIP                                  :{BLACK}Asenda automaatselt kõik laevad sadamas
-STR_DEPOT_AUTOREPLACE_AIRCRAFT_TIP                              :{BLACK}Asenda automaatselt kõik lennumasinad angaaris
+STR_DEPOT_AUTOREPLACE_TRAIN_TIP                                 :{BLACK}Asenda kõik rongid jaamas ise
+STR_DEPOT_AUTOREPLACE_ROADVEH_TIP                               :{BLACK}Asenda kõik depoos olevad mootorsõidukid ise
+STR_DEPOT_AUTOREPLACE_SHIP_TIP                                  :{BLACK}Asenda kõik laevad depoos ise
+STR_DEPOT_AUTOREPLACE_AIRCRAFT_TIP                              :{BLACK}Asenda kõik lennumasinad angaaris ise
 
 STR_VEHICLE_LIST_TRAIN_DEPOT                                    :{BLACK}{STRING} - {COMMA} Rong{P "" id}
 STR_VEHICLE_LIST_ROADVEH_DEPOT                                  :{BLACK}{STRING} - {COMMA} Auto{P "" d}
@@ -3127,11 +3257,11 @@
 STR_REPLACE_HELP_RIGHT_ARRAY                                    :{BLACK}Vali uus vedur, millega sa soovid vasakult valitud vedurit välja vahetada.
 STR_REPLACE_HELP_STOP_BUTTON                                    :{BLACK}Vajuta lõpetamaks vasakult valitud veduri väljavahetust
 STR_REPLACE_HELP_START_BUTTON                                   :{BLACK}Vajuta vasakul asuva veduri väljavahetust paremal valitud veduriga
-STR_REPLACE_HELP_RAILTYPE                                       :{BLACK}Vali raudteetüüp millel olevaid vedureid sa soovid vahetada
+STR_REPLACE_HELP_RAILTYPE                                       :{BLACK}Vali rööbasteetüüp mille vedureid sa soovid asendada
 STR_REPLACE_HELP_REPLACE_INFO_TAB                               :{BLACK}Näitab mis veduriga soovitakse vasakult valitud vedurit vahetada, kui üldse
 STR_REPLACE_HELP                                                :{BLACK}See lubab sul vahetada ühe veduritüübi teisega, kui esimest tüüpi rongid sisenevad depoosse
 STR_REPLACE_REMOVE_WAGON                                        :{BLACK}Vagunite eemaldus: {ORANGE}{SKIP}{STRING}
-STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Sunni automaatvahetus hoidma rongi pikkust samaks eemaldades vaguneid (alustades eestpoolt), kui vahetatav mootor muudaks rongi pikemaks.
+STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Sunni isevahetust hoidma rongi pikkust selleks (eest alustades) veeremit eemaldades, juhul kui uus vagun muudaks rongi pikemaks.
 STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Vahetamisel: {ORANGE}{SKIP}{SKIP}{STRING}
 STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} TESTIMISEL! {}Vaheta aken mootori ja vaguni vahetamise aknate vahel.{}Vaguni vahetus tehakse ainult siis kui uus vagun suudetakse muuta kandmaks sama tüüpi kaupa kui vana vagun. See valitakse igale vagunile kui tegelik vahetus käib
 STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Sõiduk pole saadaval
@@ -3148,7 +3278,7 @@
 STR_MASS_STOP_HANGAR_TIP                                        :{BLACK}Vajuta, kui tahad seisata kõiki lennukeid angaaris
 
 STR_MASS_START_DEPOT_TRAIN_TIP                                  :{BLACK}Klõpsa kõikide depoos asuvate rongide käivitamiseks
-STR_MASS_START_DEPOT_ROADVEH_TIP                                :{BLACK}Klõpsa, et käivitada kõik depoos olevad maanteesõidukid
+STR_MASS_START_DEPOT_ROADVEH_TIP                                :{BLACK}Klõpsa, et käivitada kõik depoos olevad mootorsõidukid
 STR_MASS_START_DEPOT_SHIP_TIP                                   :{BLACK}Klõpsa kõikide angaaris asuvate laevade käivitamiseks
 STR_MASS_START_HANGAR_TIP                                       :{BLACK}Klõpsa kõikide angaaris asuvate lennukite käivitamiseks
 
@@ -3171,18 +3301,18 @@
 
 STR_TINY_BLACK                                                  :{BLACK}{TINYFONT}{COMMA}
 
-STR_PURCHASE_INFO_COST_WEIGHT                                   :{BLACK}Maksuvus: {GOLD}{CURRENCY}{BLACK} Kaal: {GOLD}{WEIGHT_S}
-STR_PURCHASE_INFO_SPEED_POWER                                   :{BLACK}Kiirus: {GOLD}{VELOCITY}{BLACK}   Võimsus: {GOLD}{POWER}
-STR_PURCHASE_INFO_SPEED                                         :{BLACK}Kiirus: {GOLD}{VELOCITY}
-STR_PURCHASE_INFO_RUNNINGCOST                                   :{BLACK}Hoolduskulud: {GOLD}{CURRENCY}/aasta
-STR_PURCHASE_INFO_CAPACITY                                      :{BLACK}Mahutavus: {GOLD}{CARGO} {STRING}
+STR_PURCHASE_INFO_COST_WEIGHT                                   :{BLACK}Hind: {GOLD}{CURRENCY}{BLACK} Tühimass: {GOLD}{WEIGHT_S}
+STR_PURCHASE_INFO_SPEED_POWER                                   :{BLACK}Tippkiirus: {GOLD}{VELOCITY}{BLACK}   Võimsus: {GOLD}{POWER}
+STR_PURCHASE_INFO_SPEED                                         :{BLACK}Tippkiirus: {GOLD}{VELOCITY}
+STR_PURCHASE_INFO_RUNNINGCOST                                   :{BLACK}Käituskulud: {GOLD}{CURRENCY}/aastas
+STR_PURCHASE_INFO_CAPACITY                                      :{BLACK}Kandevõime: {GOLD}{CARGO} {STRING}
 STR_PURCHASE_INFO_DESIGNED_LIFE                                 :{BLACK}Kujundatud: {GOLD}{NUM}{BLACK} Vanus: {GOLD}{COMMA} aastat
-STR_PURCHASE_INFO_RELIABILITY                                   :{BLACK}Suurim töökindlus: {GOLD}{COMMA}%
-STR_PURCHASE_INFO_COST                                          :{BLACK}Maksuvus: {GOLD}{CURRENCY}
-STR_PURCHASE_INFO_WEIGHT_CWEIGHT                                :{BLACK}Kaal: {GOLD}{WEIGHT_S}  ({WEIGHT_S})
-STR_PURCHASE_INFO_COST_SPEED                                    :{BLACK}Maksumus: {GOLD}{CURRENCY}{BLACK} Kiirus: {GOLD}{VELOCITY}
-STR_PURCHASE_INFO_AIRCRAFT_CAPACITY                             :{BLACK}Mahutavus: {GOLD}{COMMA} reisijat, {COMMA} kotti kirju
-STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT                          :{BLACK}Kiirendavad vagunid: {GOLD}+{POWER}{BLACK} Kaal: {GOLD}+{WEIGHT_S}
+STR_PURCHASE_INFO_RELIABILITY                                   :{BLACK}Parim tehnoseisund: {GOLD}{COMMA}%
+STR_PURCHASE_INFO_COST                                          :{BLACK}Hind: {GOLD}{CURRENCY}
+STR_PURCHASE_INFO_WEIGHT_CWEIGHT                                :{BLACK}Mass: {GOLD}{WEIGHT_S}  ({WEIGHT_S})
+STR_PURCHASE_INFO_COST_SPEED                                    :{BLACK}Hind: {GOLD}{CURRENCY}{BLACK} Tippkiirus: {GOLD}{VELOCITY}
+STR_PURCHASE_INFO_AIRCRAFT_CAPACITY                             :{BLACK}Kandevõime: {GOLD}{COMMA} reisijat, {COMMA} kotti kirju
+STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT                          :{BLACK}Kiirendavad vagunid: {GOLD}+{POWER}{BLACK} Mass: {GOLD}+{WEIGHT_S}
 STR_PURCHASE_INFO_REFITTABLE_TO                                 :{BLACK}Ümberseadistatav: {GOLD}
 STR_PURCHASE_INFO_ALL_TYPES                                     :Kõik kaubatüübid
 STR_PURCHASE_INFO_ALL_BUT                                       :Kõik, välja arvatud {GOLD}
@@ -3248,18 +3378,18 @@
 ########### String for new airports
 STR_SMALL_AIRPORT                                               :{BLACK}Väike
 STR_CITY_AIRPORT                                                :{BLACK}Linn
-STR_METRO_AIRPORT                                               :{BLACK}Metropoli lennujaam
-STR_INTERNATIONAL_AIRPORT                                       :{BLACK}Rahvusvaheline lennujaam
+STR_METRO_AIRPORT                                               :{BLACK}Metropoli lennuväli
+STR_INTERNATIONAL_AIRPORT                                       :{BLACK}Rahvusvaheline lennuväli
 STR_COMMUTER_AIRPORT                                            :{BLACK}Turisti
-STR_INTERCONTINENTAL_AIRPORT                                    :{BLACK}Ülemaailmne lennujaam
-STR_HELIPORT                                                    :{BLACK}Helikopteri jaam
+STR_INTERCONTINENTAL_AIRPORT                                    :{BLACK}Ülemaailmne lennuväli
+STR_HELIPORT                                                    :{BLACK}Kopteriväljak
 STR_HELIDEPOT                                                   :{BLACK}Helikopteridepoo
 STR_HELISTATION                                                 :{BLACK}Helijaam
 
-STR_SMALL_AIRPORTS                                              :{BLACK}Väikesed lennujaamad
-STR_LARGE_AIRPORTS                                              :{BLACK}Suured lennujaamad
-STR_HUB_AIRPORTS                                                :{BLACK}Suured lennujaamad
-STR_HELIPORTS                                                   :{BLACK}Helikopteri lennujaamad
+STR_SMALL_AIRPORTS                                              :{BLACK}Väikesed lennuväljad
+STR_LARGE_AIRPORTS                                              :{BLACK}Suured lennuväljad
+STR_HUB_AIRPORTS                                                :{BLACK}Suured lennuväljad
+STR_HELIPORTS                                                   :{BLACK}Helikopteri lennuväljad
 
 ############ Tooltip measurment
 
@@ -3275,7 +3405,7 @@
 
 ########
 
-STR_FEEDER_CARGO_VALUE                                          :{BLACK}Kanna Raha: {LTBLUE}{CURRENCY}
+STR_FEEDER_CARGO_VALUE                                          :{BLACK}Ülekantud tulu: {LTBLUE}{CURRENCY}
 STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...see tee on omatud linna poolt
 STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...tee on vales suunas
 
@@ -3286,4 +3416,68 @@
 STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Vaheta tööstusehitiste läbipaistvust
 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 objektidel, nagu: majakad, antennid ja võimalik, et tulevikus ka silmailu
+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}
+STR_GROUP_TINY_NAME                                             :{TINYFONT}{GROUP}
+STR_GROUP_ALL_TRAINS                                            :Kõik raudteeveerem
+STR_GROUP_ALL_ROADS                                             :Kõik mootorsõidukid
+STR_GROUP_ALL_SHIPS                                             :Kõik laevad
+STR_GROUP_ALL_AIRCRAFTS                                         :Kõik lennukid
+STR_GROUP_TINY_NUM                                              :{TINYFONT}{COMMA}
+STR_GROUP_ADD_SHARED_VEHICLE                                    :Kõik jagatud sõidukid
+STR_GROUP_REMOVE_ALL_VEHICLES                                   :Eemalda kõik sõidukid
+
+STR_GROUP_TRAINS_CAPTION                                        :{WHITE}{GROUP} - {COMMA} Rong{P "" id}
+STR_GROUP_ROADVEH_CAPTION                                       :{WHITE}{GROUP} - {COMMA} Mootorsõiduk{P "" id}
+STR_GROUP_SHIPS_CAPTION                                         :{WHITE}{GROUP} - {COMMA} Laev{P "" ad}
+STR_GROUP_AIRCRAFTS_CAPTION                                     :{WHITE}{GROUP} - {COMMA} Lennuk{P "" id}
+STR_GROUP_RENAME_CAPTION                                        :{BLACK}Muuda grupi nime
+STR_GROUP_REPLACE_CAPTION                                       :{WHITE}Vaheta kõik grupi "{GROUP}" sõidukid
+
+STR_GROUP_CAN_T_CREATE                                          :{WHITE}Ei saa üksust luua...
+STR_GROUP_CAN_T_DELETE                                          :{WHITE}Ei saa seda üksust eemaldada...
+STR_GROUP_CAN_T_RENAME                                          :{WHITE}Ei saa seda üksust ümber nimetada...
+STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES                             :{WHITE}Ei saa kõiki sõidukeid sellest grupist eemaldada...
+STR_GROUP_CAN_T_ADD_VEHICLE                                     :{WHITE}Ei saa sõidukit siia üksusesse lisada...
+STR_GROUP_CAN_T_ADD_SHARED_VEHICLE                              :{WHITE}Ei saa jagatud sõidukeid siia üksusesse lisada...
+
+STR_GROUPS_CLICK_ON_GROUP_FOR_TIP                               :{BLACK}Grupid - Klõpsa grupil et kõiki seal olevaid sõidukeid järjestada
+STR_GROUP_CREATE_TIP                                            :{BLACK}Klõpsa grupi loomiseks
+STR_GROUP_DELETE_TIP                                            :{BLACK}Eemalda valitud üksus
+STR_GROUP_RENAME_TIP                                            :{BLACK}Nimeta valitud üksus ümber
+STR_GROUP_REPLACE_PROTECTION_TIP                                :{BLACK}Klõpsa, et seda üksust üldise iseväljavahetuse eest kaitsta
+
+STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR                        :{TINYFONT}{BLACK}Selle aasta kasum: {GREEN}{CURRENCY} {BLACK}(eelmisel aastal: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR                         :{TINYFONT}{BLACK}Selle aasta kasum: {RED}{CURRENCY} {BLACK}(eelmisel aastal: {GREEN}{CURRENCY}{BLACK})
+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_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}Nime ei tohi korduda
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Mine järgmise märgi juurde
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Mine eelmise märgi juurde
+
+########
+
+STR_FUND_NEW_INDUSTRY                                           :{BLACK}Rahasta
+STR_PROSPECT_NEW_INDUSTRY                                       :{BLACK}Uuri
+STR_BUILD_NEW_INDUSTRY                                          :{BLACK}Ehita
+STR_INDUSTRY_SELECTION_HINT                                     :{BLACK}Vali siit nimistust sobiv tööstus
--- a/src/lang/finnish.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/finnish.txt	Sat Jul 14 19:42: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.
@@ -776,6 +778,7 @@
 STR_02C5_DIFFICULTY_SETTINGS                                    :Vaikeusasetukset
 STR_02C7_CONFIG_PATCHES                                         :Muokkaa paikkauksia
 STR_NEWGRF_SETTINGS                                             :Newgrf-asetukset
+STR_TRANSPARENCY_OPTIONS                                        :Läpinäkyvyysvalinnat
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Kaupunkien nimet näkyvissä
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Asemien nimet näkyvissä
@@ -803,7 +806,6 @@
 STR_02DE_MAP_OF_WORLD                                           :Maailmankartta
 STR_EXTRA_VIEW_PORT                                             :Lisänäkymä
 STR_SIGN_LIST                                                   :Kylttilista
-STR_TRANSPARENCY_OPTIONS                                        :Läpinäkyvyysvalinnat
 STR_02DF_TOWN_DIRECTORY                                         :Kaupunkihakemisto
 STR_TOWN_POPULATION                                             :{BLACK}Maailman asukasluku: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Näkymä {COMMA}
@@ -1032,7 +1034,6 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Kuljeta rahti asemalle vain, kun on kysyntää: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Erittäin pitkien siltojen rakentaminen: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Varikollemenomääräykset: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Raaka-aineteollisuuden rakentaminen: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Kaupungissa voi olla useita samanlaisia teollisuustyyppejä: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Samantyyppistä teollisuutta voidaan rakentaa lähekkäin: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Näytä aina koko päiväys tilapalkissa: {ORANGE}{STRING}
@@ -1045,7 +1046,6 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Epäyhtenäiset asemat: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Uusi globaali tienhakualgor. (NPF, korvaa NTP:n): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Kerroin rahdin painolle raskaiden junien simuilointiin: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Salli pysähdyspaikkojen läpiajo kylien omistamilla teillä: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Salli aina pienet lentokentät: {ORANGE}{STRING}
 
@@ -1181,7 +1181,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}
@@ -1221,7 +1221,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Haluatko todella luoda satunnaisen maaston?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Monta satunnaista kaupunkia
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Peitä kartta satunnaisesti sijoitetuilla kaupungeilla.
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Monta satunnaista teollisuusaluetta
+STR_MANY_RANDOM_INDUSTRIES                                      :Monta satunnaista teollisuusaluetta
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Peitä kartta satunnaisesti sijoitetuilla teollisuusalueilla.
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Teollisuusaluetta ei voi luoda...
 
@@ -1392,6 +1392,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
@@ -1411,9 +1432,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}
@@ -1585,6 +1606,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
 
 
 
@@ -1592,22 +1620,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
@@ -1615,6 +1660,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
@@ -1622,7 +1669,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}
@@ -1655,7 +1702,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}
@@ -1726,7 +1773,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
@@ -1779,8 +1826,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 -
@@ -1792,6 +1843,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.
@@ -1829,6 +1882,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
@@ -1838,9 +1892,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.
@@ -2081,8 +2135,8 @@
 STR_6833_9_MONTHS_AFTER_PLAYER                                  :9 kuukautta pelaajan jälkeen
 STR_6834_AT_END_OF_LINE_AND_AT_STATIONS                         :Radan päässä ja asemilla
 STR_6835_AT_END_OF_LINE_ONLY                                    :Vain radan päässä
-STR_6836_OFF                                                    :Päällä
-STR_6837_ON                                                     :Pois
+STR_6836_OFF                                                    :Pois
+STR_6837_ON                                                     :Päällä
 STR_6838_SHOW_HI_SCORE_CHART                                    :{BLACK}Näytä pistetaulukko
 STR_6839_PERMISSIVE                                             :Salliva
 STR_683A_TOLERANT                                               :Suvaitseva
@@ -2090,7 +2144,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
@@ -2102,7 +2156,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
@@ -2118,20 +2172,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.
@@ -2170,8 +2224,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)
@@ -2209,7 +2263,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ä
@@ -2240,6 +2294,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
@@ -2519,7 +2575,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}
@@ -2540,6 +2596,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
@@ -2581,13 +2644,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ä
@@ -2597,6 +2662,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}
@@ -2634,6 +2702,10 @@
 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
@@ -2655,6 +2727,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}
@@ -2663,8 +2737,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ä.
@@ -2680,7 +2762,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ä...
@@ -2707,12 +2789,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...
@@ -2752,7 +2838,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...
@@ -2820,7 +2906,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}
@@ -2873,6 +2959,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!
@@ -2997,6 +3085,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
@@ -3187,3 +3276,44 @@
 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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/french.txt	Sat Jul 14 19:42: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}
@@ -884,7 +884,7 @@
 STR_TOWNNAME_FRENCH                                             :Français
 STR_TOWNNAME_GERMAN                                             :Allemand
 STR_TOWNNAME_ADDITIONAL_ENGLISH                                 :Anglais (Additionels)
-STR_TOWNNAME_LATIN_AMERICAN                                     :Latino-Americain
+STR_TOWNNAME_LATIN_AMERICAN                                     :Latino-Americains
 STR_TOWNNAME_SILLY                                              :Drôles
 STR_TOWNNAME_SWEDISH                                            :Suédois
 STR_TOWNNAME_DUTCH                                              :Hollandais
@@ -894,13 +894,13 @@
 STR_TOWNNAME_NORWEGIAN                                          :Norvégiens
 STR_TOWNNAME_HUNGARIAN                                          :Hongrois
 STR_TOWNNAME_AUSTRIAN                                           :Autrichiens
-STR_TOWNNAME_ROMANIAN                                           :Roumain
+STR_TOWNNAME_ROMANIAN                                           :Roumains
 STR_TOWNNAME_CZECH                                              :Tchèques
-STR_TOWNNAME_SWISS                                              :Suisse
+STR_TOWNNAME_SWISS                                              :Suisses
 STR_TOWNNAME_DANISH                                             :Danois
 STR_TOWNNAME_TURKISH                                            :Turques
-STR_TOWNNAME_ITALIAN                                            :Italien
-STR_TOWNNAME_CATALAN                                            :Catalan
+STR_TOWNNAME_ITALIAN                                            :Italiens
+STR_TOWNNAME_CATALAN                                            :Catalans
 ############ end of townname region
 
 STR_CURR_GBP                                                    :Livre (£)
@@ -1035,7 +1035,10 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Livrer la cargaison seulement sur demande: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Permettre la construction de longs ponts: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Permettre l'ordre d'aller au dépôt: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Permettre la construction de ressources primaires: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}Méthode de construction manuelle des industries primaires: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :aucune
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :comme les autres industries
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :prospection
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Permettre plusieurs industries similaires par ville: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Permettre plusieurs industries similaires à proximité: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Afficher la date complète dans la barre d'état: {ORANGE}{STRING}
@@ -1104,7 +1107,19 @@
 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_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Afficher les outils de construction quand aucun véhicule approprié n'est disponible: {ORANGE}{STRING}
 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}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Nombre d'aéronefs max. par joueur: {ORANGE}{STRING}
@@ -1187,7 +1202,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}
@@ -1227,7 +1242,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Etes-vous sûr de vouloir créer un terrain aléatoire?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Beaucoup de villes au hasard
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Couvrir la carte avec des villes placées aléatoirement
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Beaucoup d'industries au hasard
+STR_MANY_RANDOM_INDUSTRIES                                      :Beaucoup d'industries au hasard
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Couvrir la carte avec des industries placées au hasard
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Ne peut pas générer les industries...
 
@@ -1398,6 +1413,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :Anglais
 STR_NETWORK_LANG_GERMAN                                         :Allemand
 STR_NETWORK_LANG_FRENCH                                         :Français
+STR_NETWORK_LANG_BRAZILIAN                                      :Brésilien
+STR_NETWORK_LANG_BULGARIAN                                      :Bulgare
+STR_NETWORK_LANG_CHINESE                                        :Chinois
+STR_NETWORK_LANG_CZECH                                          :Tchèque
+STR_NETWORK_LANG_DANISH                                         :Danois
+STR_NETWORK_LANG_DUTCH                                          :Hollandais
+STR_NETWORK_LANG_ESPERANTO                                      :Esperanto
+STR_NETWORK_LANG_FINNISH                                        :Finlandais
+STR_NETWORK_LANG_HUNGARIAN                                      :Hongrois
+STR_NETWORK_LANG_ICELANDIC                                      :Islandais
+STR_NETWORK_LANG_ITALIAN                                        :Italien
+STR_NETWORK_LANG_JAPANESE                                       :Japonais
+STR_NETWORK_LANG_KOREAN                                         :Coréen
+STR_NETWORK_LANG_LITHUANIAN                                     :Lithuanien
+STR_NETWORK_LANG_NORWEGIAN                                      :Norvégien
+STR_NETWORK_LANG_POLISH                                         :Polonais
+STR_NETWORK_LANG_PORTUGUESE                                     :Portuguais
+STR_NETWORK_LANG_ROMANIAN                                       :Roumain
+STR_NETWORK_LANG_RUSSIAN                                        :Russe
+STR_NETWORK_LANG_SLOVAK                                         :Slovaque
+STR_NETWORK_LANG_SLOVENIAN                                      :Slovène
+STR_NETWORK_LANG_SPANISH                                        :Espagnol
+STR_NETWORK_LANG_SWEDISH                                        :Suédois
+STR_NETWORK_LANG_TURKISH                                        :Turc
+STR_NETWORK_LANG_UKRAINIAN                                      :Ukrainien
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Préparation de la partie
@@ -1417,9 +1457,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}
@@ -1654,7 +1694,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}
@@ -1687,7 +1727,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}
@@ -1758,7 +1798,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
@@ -1867,6 +1907,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
@@ -1876,9 +1917,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
@@ -1935,6 +1981,13 @@
 STR_4829_REQUIRES                                               :{BLACK}Nécessite: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}Marchandise en attente d'être utilisée:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES                                               :{BLACK}Produit: {YELLOW}{STRING}
+STR_4828_PRODUCES                                               :{BLACK}Produit: {YELLOW}{STRING}, {STRING}
+############ range for produces ends
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Production le mois dernier:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% transporté)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Centrer la vue sur l'industrie
@@ -2049,8 +2102,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!
 
@@ -2070,7 +2122,7 @@
 STR_6806_COMPETITOR_START_TIME                                  :{LTBLUE}Arrivée des concurents: {ORANGE}{STRING}
 STR_6807_NO_OF_TOWNS                                            :{LTBLUE}Nombre de villes: {ORANGE}{STRING}
 STR_6808_NO_OF_INDUSTRIES                                       :{LTBLUE}Nombre d'industries: {ORANGE}{STRING}
-STR_6809_MAXIMUM_INITIAL_LOAN_000                               :{LTBLUE}Prêt initial maximum: {ORANGE}{CURRENCY}
+STR_6809_MAXIMUM_INITIAL_LOAN_000                               :{LTBLUE}Emprunt initial maximum: {ORANGE}{CURRENCY}
 STR_680A_INITIAL_INTEREST_RATE                                  :{LTBLUE}Taux d'interêt initial: {ORANGE}{COMMA}%
 STR_680B_VEHICLE_RUNNING_COSTS                                  :{LTBLUE}Coûts d'entretien: {ORANGE}{STRING}
 STR_680C_CONSTRUCTION_SPEED_OF_COMPETITOR                       :{LTBLUE}Vitesse de développement des concurents: {ORANGE}{STRING}
@@ -2130,7 +2182,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
@@ -2142,7 +2194,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
@@ -2158,23 +2210,23 @@
 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_7027_LOAN                                                   :{WHITE}Emprunt
+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é
+STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...emprunt déjà remboursé
 STR_702E_REQUIRED                                               :{WHITE}...{CURRENCY} nécessaires
 STR_702F_CAN_T_REPAY_LOAN                                       :{WHITE}Impossible de rembourser...
 STR_INSUFFICIENT_FUNDS                                          :{WHITE}On ne peut pas distribuer de l'argent qui est emprunté à la banque...
@@ -2210,8 +2262,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)
@@ -2249,7 +2301,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
@@ -2561,7 +2613,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}
@@ -2582,6 +2634,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}
@@ -2623,13 +2682,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
@@ -2639,6 +2700,9 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Impossible d'insérer un nouvel ordre...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Impossible de supprimer cet ordre...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Impossible de modifier cet ordre...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Impossible de déplacer cet ordre...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Impossible de sauter l'ordre courant...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Impossible de sauter l'ordre sélectionné...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Impossible de déplacer le véhicule...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}L'engin de queue suivra toujours sa contre-partie avant
 STR_8838_N_A                                                    :N/D{SKIP}
@@ -2670,12 +2734,16 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Afficher la capacité de chaque wagon
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Afficher la capacité totale du train, par type de cargaison
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Liste des ordres - Cliquer sur un ordre pour le sélectionner.  Cliquer avec Ctrl déplace la vue sur la station
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Sauter l'ordre courant, et enchaîner sur le suivant
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Sauter l'ordre courant, et enchaîner sur le suivant. Ctrl-clic pour sauter l'ordre sélectionné
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Supprime l'ordre sélectionné
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Transformer l'ordre sélectionné en Sans-Arrêt
 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
@@ -2697,6 +2765,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}
@@ -2705,8 +2775,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
@@ -2722,7 +2804,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...
@@ -2749,6 +2831,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Choix du véhicule - cliquer sur un véhicule pour obtenir des informations
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Construire le véhicule sélectionné
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Prix: {CURRENCY}{}Vitesse: {VELOCITY}{}Coût d'entretien: {CURRENCY}/an{}Capacité: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Capacité: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Renommer le véhicule
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Impossible de renommer le véhicule...
@@ -2796,7 +2880,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...
@@ -2864,7 +2948,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}
@@ -2917,6 +3001,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'!
@@ -2945,7 +3031,7 @@
 STR_PERFORMANCE_DETAIL_DELIVERED                                :{BLACK}Livré :
 STR_PERFORMANCE_DETAIL_CARGO                                    :{BLACK}Cargo :
 STR_PERFORMANCE_DETAIL_MONEY                                    :{BLACK}Argent :
-STR_PERFORMANCE_DETAIL_LOAN                                     :{BLACK}Prêt :
+STR_PERFORMANCE_DETAIL_LOAN                                     :{BLACK}Emprunt :
 STR_PERFORMANCE_DETAIL_TOTAL                                    :{BLACK}Total :
 ############ End of order list
 STR_PERFORMANCE_DETAIL_VEHICLES_TIP                             :{BLACK}Nombre de véhicules. Ceci inclut les véhicules routiers, les trains, les navies et les aéronefs.
@@ -3232,6 +3318,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}
@@ -3269,4 +3363,22 @@
 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}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}Le nom doit être unique
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Aller au panneau suivant
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Aller au panneau précédent
+
 ########
+
+STR_FUND_NEW_INDUSTRY                                           :{BLACK}Fonder
+STR_PROSPECT_NEW_INDUSTRY                                       :{BLACK}Prospecter
+STR_BUILD_NEW_INDUSTRY                                          :{BLACK}Construire
+STR_INDUSTRY_SELECTION_HINT                                     :{BLACK}Choisissez l'industrie appropriée dans cette liste
--- a/src/lang/galician.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/galician.txt	Sat Jul 14 19:42:58 2007 +0000
@@ -3,13 +3,15 @@
 ##isocode gl_ES
 ##plural 0
 
+#
+
 ##id 0x0000
 STR_NULL                                                        :
 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}
@@ -476,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º
@@ -1002,7 +1004,6 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Descarga-la carga só cando haxa demanda: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Permiti-la construcción de pontes moi longas: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Permiti-las ordes de ir ó depósito: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Permiti-la construccion de industrias de materiales: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Permitir múltiples industrias similares en cada cidade: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Permiti-la construcción de industrias iguais cercanas: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Mostrar sempre a data longa na barra de estado: {ORANGE}{STRING}
@@ -1074,6 +1075,8 @@
 STR_CONFIG_PATCHES_SMOOTH_ECONOMY                               :{LTBLUE}Habilita-la economía "suave"(máis cambios, pero máis pequenos)
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Permiti-la compra de accións por outras compañías
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Cando se arrastre, colocar siniais cada: {ORANGE}{STRING} cadrado(s)
+
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Posición da barra de ferramentas principal: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Esquerda
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Centro
@@ -1106,7 +1109,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}
@@ -1145,7 +1148,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}¿Estás seguro de querer crear unha paisaxe aleatoria?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Varias cidades aleatorias
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Cubri-lo mapa con cidades colocadas aleatoriamente
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Varias industrias aleatorias
+STR_MANY_RANDOM_INDUSTRIES                                      :Varias industrias aleatorias
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Cubri-lo mapa con industrias colocadas aleatoriamente
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Non se poden xera-las industrias...
 
@@ -1330,9 +1333,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}
@@ -1531,7 +1534,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}
@@ -1564,7 +1567,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}
@@ -1635,7 +1638,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
@@ -1747,9 +1750,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
@@ -1997,7 +2000,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
@@ -2009,7 +2012,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
@@ -2025,20 +2028,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
@@ -2076,8 +2079,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)
@@ -2115,7 +2118,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
@@ -2416,7 +2419,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}
@@ -2437,6 +2440,7 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Ir sen paradas o Depósito de Trens de {TOWN}
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Face-lo servicio sen paradas no Depósito de Trens de {TOWN}
 
+
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}En camiño ó Depósito de {TOWN}
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}En camiño ó Depósito de {TOWN}, {VELOCITY}
 STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Servicio no Depósito de {TOWN}
@@ -2478,8 +2482,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
@@ -2519,7 +2523,6 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Mostra-la capacidade de cada vehículo
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Mostra-la capacidade total do tren, dividida por tipos de carga
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Lista de Ordes - Pincha nunha orde para seleccionala
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Salta-la orde actual, e comezar coa seguinte
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Borra-la orde seleccionada
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Facer que a orde seleccionada sexa de Non Parar
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Insertar unha nova orde despois da seleccionada, o insertar unha nova orde ó final da lista
@@ -2550,6 +2553,9 @@
 STR_TRAIN_STOPPING_VEL                                          :{RED}Parando, {VELOCITY}
 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}{ENGINE}
+
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Haí un vehículo de estrada no camiño
@@ -2565,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...
@@ -2592,6 +2598,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Lista de selección de vehículos de estrada - pincha nun vehículo para máis información
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Construí-lo vehículo de estrada seleccionado
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Coste: {CURRENCY}{}Velocidade: {VELOCITY}{}Coste de Mantemento: {CURRENCY}/ano{}Capacidade: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Capacidade: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Renomear vehículo de estrada
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Non se pode renomea-lo vehículo de estrada...
@@ -2635,7 +2643,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...
@@ -2703,7 +2711,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}
@@ -2756,6 +2764,7 @@
 STR_GO_TO_AIRPORT_HANGAR                                        :Ir ó hangar de {STATION}
 SERVICE_AT_AIRPORT_HANGAR                                       :Face-lo servicio no hangar de {STATION}
 
+
 ##id 0xB000
 STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}¡Desastre cun Zeppelin en {STATION}!
 STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}¡Vehículo de estrada destruído tras colisionar cun 'OVNI'!
@@ -2795,6 +2804,7 @@
 STR_PERFORMANCE_DETAIL_LOAN_TIP                                 :{BLACK}Valor do préstamo que ten a compañía
 STR_PERFORMANCE_DETAIL_TOTAL_TIP                                :{BLACK}Puntos totais de puntos posibles
 
+STR_NEWGRF_SETTINGS_BUTTON                                      :{BLACK}Configuración NewGRF
 STR_NEWGRF_SETTINGS_CAPTION                                     :{WHITE}Configuración Newgrf
 STR_NEWGRF_APPLY_CHANGES                                        :{BLACK}Aplica-los cambios
 STR_NEWGRF_SET_PARAMETERS                                       :{BLACK}Conf. parámetros
@@ -2804,8 +2814,13 @@
 STR_NEWGRF_GRF_ID                                               :{BLACK}GRF ID: {SILVER}{STRING}
 STR_NEWGRF_MD5SUM                                               :{BLACK}Suma MD5: {SILVER}{STRING}
 
+STR_NEWGRF_ERROR_MSG_INFO                                       :{SILVER}{STRING}
+STR_NEWGRF_ERROR_MSG_WARNING                                    :{RED}Aviso: {SILVER}{STRING}
+STR_NEWGRF_ERROR_MSG_ERROR                                      :{RED}Erro: {SILVER}{STRING}
+STR_NEWGRF_ERROR_UNSET_SWITCH                                   :{STRING} está deseñado para ser usado con {STRING}
 
 STR_NEWGRF_ADD                                                  :{BLACK}Engadir
+STR_NEWGRF_ADD_TIP                                              :{BLACK}Engadir un novo arquivo NewGRF á lista
 STR_NEWGRF_REMOVE                                               :{BLACK}Eliminar
 STR_NEWGRF_REMOVE_TIP                                           :{BLACK}Elimina-lo arquivo NewGRF seleccionado da lista
 STR_NEWGRF_MOVEUP                                               :{BLACK}Mover Arriba
@@ -2847,6 +2862,8 @@
 STR_VEH_WITH_SHARED_ORDERS_LIST_TIP                             :{BLACK}Mostrar tódolos vehículos que comparte esta planificación
 
 ### depot strings
+STR_DEPOT_SELL_CONFIRMATION_TEXT                                :{YELLOW}Vas vender tódolos vehículos do depósito. ¿Estás seguro?
+STR_DEPOT_WRONG_DEPOT_TYPE                                      :Tipo de depósito erróneo
 
 STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP                             :{BLACK}Vender tódolos trens do depósito
 STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP                              :{BLACK}Vender tódolos barcos no depósito
@@ -2990,3 +3007,44 @@
 STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Habilitar transparencia para industrias
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Habilitar transparencia para construibles como estacións, depósitos, puntos de ruta e catenaria
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}Habilitar transparencia para pontes
+
+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                                            :Tódolos trens
+STR_GROUP_ALL_ROADS                                             :Tódolos vehículos de estrada
+STR_GROUP_ALL_SHIPS                                             :Tódolos barcos
+STR_GROUP_ALL_AIRCRAFTS                                         :Tódolos avións
+STR_GROUP_TINY_NUM                                              :{TINYFONT}{COMMA}
+
+STR_GROUP_RENAME_CAPTION                                        :{BLACK}Renomear un grupo
+
+STR_GROUP_CAN_T_CREATE                                          :{WHITE}Non se pode crear o grupo...
+STR_GROUP_CAN_T_DELETE                                          :{WHITE}Non se pode borrar este grupo...
+STR_GROUP_CAN_T_RENAME                                          :{WHITE}Non se pode renomear o grupo...
+STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES                             :{WHITE}Non se pode borrar tódolos vehículos deste grupo...
+STR_GROUP_CAN_T_ADD_VEHICLE                                     :{WHITE}Non se pode engadir o vehículo a este grupo...
+
+STR_GROUP_CREATE_TIP                                            :{BLACK}Pincha para crear un grupo
+STR_GROUP_DELETE_TIP                                            :{BLACK}Borrar o grupo seleccionado
+STR_GROUP_RENAME_TIP                                            :{BLACK}Renomear o grupo seleccionado
+
+
+STR_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
+
+#### Improved sign GUI
+
+########
--- a/src/lang/german.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/german.txt	Sat Jul 14 19:42:58 2007 +0000
@@ -4,13 +4,15 @@
 ##plural 0
 ##gender m w n
 
+#
+
 ##id 0x0000
 STR_NULL                                                        :
 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}
@@ -494,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.
@@ -777,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
@@ -804,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}
@@ -1033,7 +1035,8 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Liefere Fracht nur, wenn die Station diese annimmt: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Erlaube das Bauen von sehr langen Brücken: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Erlaube "Gehe zum Depot"-Aufträge im Fahrplan: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Erlaube das Bauen von rohstoffproduzierenden Industrien: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :keine
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :wie andere Industrie
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Erlaube mehrere gleichartige Industrien pro Stadt: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Gleiche Industrien können nahe beieinander gebaut werden: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Lange Datumsanzeige in der Statusleiste (links unten): {ORANGE}{STRING}
@@ -1047,6 +1050,7 @@
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Neue globale Wegfindung für alle Fahrzeuge: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Frachtgewicht erhöhen um schwere Züge zu simulieren: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Erlaube Bushaltestellen an städtischen Straßen: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADJACENT_STATIONS                            :{LTBLUE}Erlaube das Bauen aneinanderliegender Stationen: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Kleine Flughäfen immer erlauben: {ORANGE}{STRING}
 
@@ -1087,6 +1091,7 @@
 STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Hubschrauber auf Helipads automatisch warten: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Landschaftsbau-Toolbar an Eisenbahn/Straßen/Hafen/Flughafen-Toolbar binden: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Beim Verschieben mit der Maus die Ansicht in die Gegenrichtung verschieben: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING                             :{LTBLUE}Weiches Scrollen in den Ansichten: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Zeige Tooltip mit Abmessungen bei verschiedenen Bauwerkzeugen: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Anzeigen der Firmenlackierungen: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES_NONE                                :Keine
@@ -1099,6 +1104,16 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Aus
 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_TIMETABLE_ALLOW                              :{LTBLUE}Aktiviere Fahrpläne für Fahrzeuge: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Zeige Zeitpläne in Ticks anstatt in Tagen: {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}
@@ -1182,7 +1197,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}
@@ -1222,7 +1237,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Soll wirklich eine zufällige Landschaft erzeugt werden?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Viele zufällige Städte
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Bedecke die Karte mit zufällig platzierten Städten
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Viele zufällige Industrien
+STR_MANY_RANDOM_INDUSTRIES                                      :Viele zufällige Industrien
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Bedecke die Karte mit zufällig platzierten Industrien
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Kann keine Industrie erzeugen...
 
@@ -1393,6 +1408,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :Englisch
 STR_NETWORK_LANG_GERMAN                                         :Deutsch
 STR_NETWORK_LANG_FRENCH                                         :Französisch
+STR_NETWORK_LANG_BRAZILIAN                                      :Brasilianisch
+STR_NETWORK_LANG_BULGARIAN                                      :Bulgarisch
+STR_NETWORK_LANG_CHINESE                                        :Chinesisch
+STR_NETWORK_LANG_CZECH                                          :Tschechisch
+STR_NETWORK_LANG_DANISH                                         :Dänisch
+STR_NETWORK_LANG_DUTCH                                          :Holländisch
+STR_NETWORK_LANG_ESPERANTO                                      :Esperanto
+STR_NETWORK_LANG_FINNISH                                        :Finnisch
+STR_NETWORK_LANG_HUNGARIAN                                      :Ungarisch
+STR_NETWORK_LANG_ICELANDIC                                      :Isländisch
+STR_NETWORK_LANG_ITALIAN                                        :Italienisch
+STR_NETWORK_LANG_JAPANESE                                       :Japanisch
+STR_NETWORK_LANG_KOREAN                                         :Koreanisch
+STR_NETWORK_LANG_LITHUANIAN                                     :Litauisch
+STR_NETWORK_LANG_NORWEGIAN                                      :Norwegisch
+STR_NETWORK_LANG_POLISH                                         :Polnisch
+STR_NETWORK_LANG_PORTUGUESE                                     :Portugiesisch
+STR_NETWORK_LANG_ROMANIAN                                       :Rumänisch
+STR_NETWORK_LANG_RUSSIAN                                        :Russisch
+STR_NETWORK_LANG_SLOVAK                                         :Slowakisch
+STR_NETWORK_LANG_SLOVENIAN                                      :Slowenisch
+STR_NETWORK_LANG_SPANISH                                        :Spanisch
+STR_NETWORK_LANG_SWEDISH                                        :Schwedisch
+STR_NETWORK_LANG_TURKISH                                        :Türkisch
+STR_NETWORK_LANG_UKRAINIAN                                      :Ukrainisch
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Mehrspielerlobby
@@ -1412,9 +1452,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}
@@ -1586,6 +1626,13 @@
 STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Gleis mit Vorsignalen
 STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Gleis mit Ausfahrsignalen
 STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Gleis mit kombinierten Vor-/Ausfahrsignalen
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Eisenbahnschienen mit Vor- und Hauptsignalen
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Eisenbahnschienen mit Haupt- und Ausfahrsignalen
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Eisenbahnschienen mit Haupt- und Kombinationssignalen
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Eisenbahnschienen mit Vor- und Ausfahrsignalen
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Eisenbahnschienen mit Vor- und Kombinationssignalen
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Eisenbahnschienen mit Ausfahr- und Kombinationssignalen
+STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Bahnhof muss erst entfernt werden
 
 
 
@@ -1593,22 +1640,39 @@
 STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Straße muss erst entfernt werden
 STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Straßenarbeiten sind im Gange
 STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Straßenbau
+STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Straßenbahnbau
 STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Brücke wählen
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}... Einbahnstraßen können keinen Abzweig haben
 STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Kann hier keine Straße bauen...
+STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}Kann Straßenbahn hier nicht bauen...
 STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Kann diese Straße nicht entfernen...
+STR_1805_CAN_T_REMOVE_TRAMWAY_FROM                              :{WHITE}Kann Straßenbahn hier nicht entfernen...
 STR_1806_ROAD_DEPOT_ORIENTATION                                 :{WHITE}Fahrzeugdepot-Ausr.
+STR_1806_TRAM_DEPOT_ORIENTATION                                 :{WHITE}Ausrichtung des Straßenbahndepots
 STR_1807_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}Kann Fahrzeugdepot hier nicht bauen...
+STR_1807_CAN_T_BUILD_TRAM_VEHICLE                               :{WHITE}Kann Straßenbahndepot hier nicht bauen...
 STR_1808_CAN_T_BUILD_BUS_STATION                                :{WHITE}Kann Busbahnhof nicht bauen...
 STR_1809_CAN_T_BUILD_TRUCK_STATION                              :{WHITE}Kann Lkw-Ladeplatz nicht bauen...
+STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION                     :{WHITE}Kann Haltestelle hier nicht bauen...
+STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION                         :{WHITE}Kann Güterverladestelle hier nicht bauen...
 STR_180A_ROAD_CONSTRUCTION                                      :Straßenbau
+STR_180A_TRAMWAY_CONSTRUCTION                                   :Straßenbahnbau
 STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Straße bauen
+STR_180B_BUILD_TRAMWAY_SECTION                                  :{BLACK}Baue Straßenbahnabschnitt
 STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Fahrzeugdepot bauen (zum Bau und zur Wartung von Fahrzeugen)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT                               :{BLACK}Baue Straßenbahndepot (zum Erstellen und Warten von Straßenbahnen)
 STR_180D_BUILD_BUS_STATION                                      :{BLACK}Busbahnhof bauen
 STR_180E_BUILD_TRUCK_LOADING_BAY                                :{BLACK}Lkw-Ladeplatz bauen
+STR_180D_BUILD_PASSENGER_TRAM_STATION                           :{BLACK}Baue Haltestelle
+STR_180E_BUILD_CARGO_TRAM_STATION                               :{BLACK}Baue Güterverladestelle
 STR_180F_BUILD_ROAD_BRIDGE                                      :{BLACK}Straßenbrücke bauen
+STR_180F_BUILD_TRAMWAY_BRIDGE                                   :{BLACK}Baue Straßenbahnbrücke
 STR_1810_BUILD_ROAD_TUNNEL                                      :{BLACK}Straßentunnel bauen
+STR_1810_BUILD_TRAMWAY_TUNNEL                                   :{BLACK}Baue Straßenbahntunnel
 STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Zwischen Bau/Abriss der Straße umschalten
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS                       :{BLACK}Umschalten zwischen bauen/entfernen für Straßenbahnbau
 STR_1813_SELECT_ROAD_VEHICLE_DEPOT                              :{BLACK}Ausrichtung des Fahrzeugdepots wählen
+STR_1813_SELECT_TRAM_VEHICLE_DEPOT                              :{BLACK}Ausrichtung des Straßenbahndepots wählen
 STR_1814_ROAD                                                   :Straße
 STR_1815_ROAD_WITH_STREETLIGHTS                                 :Straße mit Laternen
 STR_1816_TREE_LINED_ROAD                                        :Straße mit Bäumen
@@ -1616,6 +1680,8 @@
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Bahnübergang
 STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Kann Bushaltestelle nicht entfernen...
 STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Kann LKW-Ladestelle nicht entfernen...
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION                         :{WHITE} Haltestelle kann nicht entfernt werden...
+STR_CAN_T_REMOVE_CARGO_TRAM_STATION                             :{WHITE}Güterverladestelle kann nicht entfernt werden...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Städte
@@ -1623,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}Gebäude muss erst abgerissen werden
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Bevölkerung: {ORANGE}{COMMA}{BLACK}  Häuser: {ORANGE}{COMMA}
@@ -1656,7 +1722,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}
@@ -1727,7 +1793,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
@@ -1780,8 +1846,12 @@
 STR_3041_NOW_ACCEPTS_AND                                        :{WHITE}{STATION} akzeptiert jetzt {STRING} und {STRING}
 STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Busbahnhof-Ausr.
 STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Lkw-Ladeplatz-Ausr.
+STR_3042_PASSENGER_TRAM_STATION_ORIENTATION                     :{WHITE}Ausrichtung der Haltestelle
+STR_3043_CARGO_TRAM_STATION_ORIENT                              :{WHITE}Ausrichtung der Güterverladestelle
 STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Der Busbahnhof muss erst abgerissen werden
 STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Der Lkw-Ladeplatz muss erst abgerissen werden
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION                   :{WHITE}Haltestelle muss vorher abgerissen werden
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION                       :{WHITE}Güterverladestelle muss vorher abgerissen werden
 STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} Haltestelle{P "" n}
 STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
 STR_304A_NONE                                                   :{YELLOW}- Keine -
@@ -1793,6 +1863,8 @@
 STR_3050_SELECT_LENGTH_OF_RAILROAD                              :{BLACK}Bahnsteiglänge wählen
 STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Busbahnhofsausrichtung wählen
 STR_3052_SELECT_TRUCK_LOADING_BAY                               :{BLACK}Ladeplatzausrichtung wählen
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION              :{BLACK}Ausrichtung für die Haltestelle wählen
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION                  :{BLACK}Ausrichtung für die Güterverladestelle wählen
 STR_3053_CENTER_MAIN_VIEW_ON_STATION                            :{BLACK}Ansicht auf die Station zentrieren
 STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}Stationsbewertung anzeigen
 STR_3055_CHANGE_NAME_OF_STATION                                 :{BLACK}Name der Station ändern
@@ -1830,6 +1902,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
@@ -1839,9 +1912,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
@@ -1898,6 +1976,10 @@
 STR_4829_REQUIRES                                               :{BLACK}Benötigt: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+############ range for produces ends
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Produktion im letzten Monat:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% befördert)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Zentriere die Ansicht auf das Industriegebiet
@@ -2012,7 +2094,7 @@
 STR_SV_STNAME_LOWER                                             :Unter-{STRING}
 STR_SV_STNAME_HELIPORT                                          :{STRING} Heliport
 STR_SV_STNAME_FOREST                                            :{STRING} Wald
-
+STR_SV_STNAME_FALLBACK                                          :{STRING} Station #{NUM}
 
 ############ end of savegame specific region!
 
@@ -2092,7 +2174,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
@@ -2104,7 +2186,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
@@ -2120,20 +2202,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
@@ -2172,8 +2254,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)
@@ -2211,7 +2293,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
@@ -2242,6 +2324,8 @@
 STR_LIVERY_HELICOPTER                                           :Helikopter
 STR_LIVERY_SMALL_PLANE                                          :Kleines Flugzeug
 STR_LIVERY_LARGE_PLANE                                          :Großraumflugzeug
+STR_LIVERY_PASSENGER_TRAM                                       :Straßenbahn
+STR_LIVERY_FREIGHT_TRAM                                         :Frachtstraßenbahn
 
 STR_LIVERY_GENERAL_TIP                                          :{BLACK}Allgemeines Farbschema anzeigen
 STR_LIVERY_TRAIN_TIP                                            :{BLACK}Zugfarbschema anzeigen
@@ -2521,7 +2605,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}
@@ -2542,6 +2626,11 @@
 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_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_FOR                                        :Fahre für {STRING}
+STR_TIMETABLE_STAY_FOR                                          :und bleibe für {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} Tag{P "" e}
+
 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
@@ -2583,13 +2672,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
@@ -2599,6 +2690,9 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Kann keinen neuen Auftrag hinzufügen...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Kann den Auftrag nicht löschen...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Kann den Auftrag nicht bearbeiten...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Kann diesen Auftrag nicht verschieben...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Kann diesen Auftrag nicht auslassen...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Kann nicht zum gewählten Auftrag wechseln...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Kann das Fahrzeug nicht bewegen...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}Hintere Lok folgt immer der vorderen Lok
 STR_8838_N_A                                                    :k.A.{SKIP}
@@ -2630,12 +2724,16 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Zeige Kapazität jedes Fahrzeugs
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Frachtübersicht des Zuges anzeigen, aufgeteilt nach Frachttyp
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Auftragsliste - zum Markieren hier anklicken
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Übergehe den laufenden Auftrag, und starte den nächsten
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Den aktuellen Auftrag auslassen und den Nächsten starten. STRG + Klick geht zum ausgewählten Auftrag
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Lösche den markierten Auftrag
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Führe den markierten Auftrag ohne Halt durch
 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
@@ -2657,6 +2755,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}
@@ -2665,8 +2765,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
@@ -2682,7 +2790,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...
@@ -2709,12 +2817,16 @@
 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...
 STR_902E_NAME_ROAD_VEHICLE                                      :{BLACK}Name des Fahrzeuges
 STR_902F_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Die Stadt feiert . . .{}Der erste Bus erreicht {STATION}!
 STR_9030_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Die Stadt feiert . . .{}Der erste Lkw erreicht {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Die Einwohner feiern . . .{}Die erste Straßenbahn erreicht {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Die Einwohner feiern . . .{}Die erste Frachtstraßenbahn erreicht {STATION}!
 STR_9031_ROAD_VEHICLE_CRASH_DRIVER                              :{BLACK}{BIGFONT}Fahrzeug verunglückt!{}Fahrer stirbt in einem Feuerball nach Zusammenstoß mit einem Zug
 STR_9032_ROAD_VEHICLE_CRASH_DIE                                 :{BLACK}{BIGFONT}Fahrzeug verunglückt!{}{COMMA} sterben nach Zusammenstoß mit einem Zug im Feuerball
 STR_9033_CAN_T_MAKE_VEHICLE_TURN                                :{WHITE}Das Fahrzeug kann nicht gewendet werden...
@@ -2754,7 +2866,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...
@@ -2822,7 +2934,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}
@@ -2875,6 +2987,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!
@@ -2999,6 +3113,7 @@
 
 ### depot strings
 STR_DEPOT_SELL_CONFIRMATION_TEXT                                :{YELLOW}Möchtest du alle Fahrzeuge in diesem Depot verkaufen?
+STR_DEPOT_WRONG_DEPOT_TYPE                                      :Falsche Depotart
 
 STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP                             :{BLACK}Verkaufe alle Züge im Depot
 STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP                           :{BLACK}Verkaufe alle Fahrzeuge im Depot
@@ -3189,28 +3304,64 @@
 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
+
+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 Züge
 STR_GROUP_ALL_ROADS                                             :Alle Straßenfahrzeuge
 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})
+
+STR_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}Name muss eindeutig sein
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Gehe zum nächsten Schild
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Gehe zum vorherigen Schild
 
 ########
+
+STR_FUND_NEW_INDUSTRY                                           :{BLACK}Kapital
--- a/src/lang/hungarian.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/hungarian.txt	Sat Jul 14 19:42: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
@@ -889,8 +889,8 @@
 STR_02E6_ROAD_VEHICLES                                          :{BLACK}Közúti járművek
 STR_02E7                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{STRING}
 STR_02E8_SELECT_SIDE_OF_ROAD_FOR                                :{BLACK}Válaszd ki,az út melyik oldalán haladjanak a közúti járművek
-STR_02E9_DRIVE_ON_LEFT                                          :Balra hajts
-STR_02EA_DRIVE_ON_RIGHT                                         :Jobbra hajts
+STR_02E9_DRIVE_ON_LEFT                                          :Balra hajtás
+STR_02EA_DRIVE_ON_RIGHT                                         :Jobbra hajtás
 STR_02EB_TOWN_NAMES                                             :{BLACK}Városnevek
 STR_02EC                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
 STR_02ED_SELECT_STYLE_OF_TOWN_NAMES                             :{BLACK}A városnevek stílusának kiválasztása
@@ -1100,7 +1100,10 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Csak akkor szállítson árut az állomásra, ha ott van rá kereslet: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Nagyon hosszú hidak engedélyezése: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}'Menj a garázsba' engedélyezés a menetrendben: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Nyersanyagtermelő ipari épületek építési lehetősége: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}Utólagos elsődleges-ipar létesítési módszer: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :semmilyen
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :biztos módszer
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :lehetséges mód
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Több hasonló ipari épület egy városon belül: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Több ugyanolyan gyár építhető közel egymáshoz: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Mindig teljes dátum a képernyőn: {ORANGE}{STRING}
@@ -1169,7 +1172,19 @@
 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_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Akkor is mutasd az eszköztárat, ha nem építhető semmi róla: {ORANGE}{STRING}
 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}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Maximum repülőgép játékosonként: {ORANGE}{STRING}
@@ -1252,7 +1267,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}
@@ -1292,7 +1307,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Biztos vagy benne hogy véletlen tájképet akarsz létrehozni?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Sok véletlen város
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Elhelyez a térképen véletlenszerüen sok várost.
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Sok véletlen gazdasági épület
+STR_MANY_RANDOM_INDUSTRIES                                      :Sok véletlen gazdasági épület
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Elhelyez a térképen véletlenszerüen sok gazdasági épületet
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Nem tudok gazdasági épületet generálni...
 
@@ -1463,6 +1478,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :Angol
 STR_NETWORK_LANG_GERMAN                                         :Német
 STR_NETWORK_LANG_FRENCH                                         :Francia
+STR_NETWORK_LANG_BRAZILIAN                                      :Brazíl
+STR_NETWORK_LANG_BULGARIAN                                      :Bulgár
+STR_NETWORK_LANG_CHINESE                                        :Kínai
+STR_NETWORK_LANG_CZECH                                          :Cseh
+STR_NETWORK_LANG_DANISH                                         :Dán
+STR_NETWORK_LANG_DUTCH                                          :Holland
+STR_NETWORK_LANG_ESPERANTO                                      :Eszperantó
+STR_NETWORK_LANG_FINNISH                                        :Finn
+STR_NETWORK_LANG_HUNGARIAN                                      :Magyar
+STR_NETWORK_LANG_ICELANDIC                                      :Izlandi
+STR_NETWORK_LANG_ITALIAN                                        :Olasz
+STR_NETWORK_LANG_JAPANESE                                       :Japán
+STR_NETWORK_LANG_KOREAN                                         :Koreai
+STR_NETWORK_LANG_LITHUANIAN                                     :Litván
+STR_NETWORK_LANG_NORWEGIAN                                      :Norvég
+STR_NETWORK_LANG_POLISH                                         :Lengyel
+STR_NETWORK_LANG_PORTUGUESE                                     :Portugál
+STR_NETWORK_LANG_ROMANIAN                                       :Román
+STR_NETWORK_LANG_RUSSIAN                                        :Orosz
+STR_NETWORK_LANG_SLOVAK                                         :Szlovák
+STR_NETWORK_LANG_SLOVENIAN                                      :Szlovén
+STR_NETWORK_LANG_SPANISH                                        :Spanyol
+STR_NETWORK_LANG_SWEDISH                                        :Svéd
+STR_NETWORK_LANG_TURKISH                                        :Török
+STR_NETWORK_LANG_UKRAINIAN                                      :Ukrán
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Hálózati-játék lobby
@@ -1482,9 +1522,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}
@@ -1656,6 +1696,12 @@
 STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Vasúti sin előrejelző szemaforral
 STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Vasúti sin kijáratjelző szemaforral
 STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Vasúti sin vegyes szemaforral
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Vasúti sín normál és előrejelzőlámpával
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Vasúti sín normál és utójelzőlámpával
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Vasúti sín normál és előutójelző lámpával
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Vasúti sín elő és utójelző lámpával
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Vasúti sín elő és előutójelző lámpával
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Vasúti sín utó és előutójelző lámpával
 STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Előbb a vasútállomást le kell rombolni
 
 
@@ -1666,6 +1712,7 @@
 STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Útépítés
 STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Villamospálya építés
 STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Közúti híd építése
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}... egy irányú utaknak nem lehetnek kereszteződéseik...
 STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Nem építhetsz ide utat...
 STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}Nem lehet villamossínt építeni itt...
 STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Nem rombolhatod le innen az utat...
@@ -1681,6 +1728,7 @@
 STR_180A_ROAD_CONSTRUCTION                                      :Útépítés
 STR_180A_TRAMWAY_CONSTRUCTION                                   :Villamospálya építés
 STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Út építése
+STR_180B_BUILD_TRAMWAY_SECTION                                  :{BLACK}Villamos-sín építése
 STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Garázs építése (járművek vételére és karbantartására)
 STR_180C_BUILD_TRAM_VEHICLE_DEPOT                               :{BLACK}Villamos-depó építése (járművek megépítésére és szervizelésére)
 STR_180D_BUILD_BUS_STATION                                      :{BLACK}Buszmegálló építése
@@ -1711,7 +1759,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}
@@ -1744,7 +1792,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
@@ -1815,7 +1863,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
@@ -1924,6 +1972,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
@@ -1933,9 +1982,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
@@ -2029,6 +2083,13 @@
 STR_4829_REQUIRES                                               :{BLACK}Felhasznál: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}Feldolgozásra váró szállítmány:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES                                               :{BLACK}Gyárt: {YELLOW}{STRING}
+STR_4828_PRODUCES                                               :{BLACK}Gyárt: {YELLOW}{STRING}, {STRING}
+############ range for produces ends
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Múlt havi termelés:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% elszállítva)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}A fő nézetet a gazdasági épületre állítja
@@ -2143,8 +2204,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!
 
@@ -2224,7 +2284,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
@@ -2236,7 +2296,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
@@ -2252,20 +2312,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
@@ -2304,8 +2364,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)
@@ -2343,7 +2403,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
@@ -2655,7 +2715,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}
@@ -2676,6 +2736,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
@@ -2717,13 +2784,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
@@ -2733,6 +2802,9 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Nem adhatsz meg új célpontot...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Nem törölheted ezt a célpontot...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Nem módosíthatod ezt a célpontot...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Úticél mozgatása nem lehetséges...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Nem lehet átugrani a jelenlegi úticélt...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Nem lehet a kiválasztott úticélra ugrani...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Nem mozgathatod a járművet...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}A mozdony első felének mindig elöl kell lennie
 STR_8838_N_A                                                    :Nincs{SKIP}
@@ -2764,12 +2836,16 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}A kocsik kapacitása
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Megmutatja a vonat teljes kapacitását, rakománytípusokra lebontva
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Menetrend - kattints egy célpontra a kijelöléséhez
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Az aktuális célpont kihagyása és ugrás a következőre
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Jelenlegi úticél átugrása, és a következő aktiválása. CTRL + kattintásra a kiválasztott úticélra ugrik
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}A kijelölt célpont törlése
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}A kijelölt célpont felé megállás nélkül kell haladni
 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
@@ -2791,6 +2867,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}
@@ -2799,8 +2877,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
@@ -2816,7 +2906,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...
@@ -2843,6 +2933,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Közúti jármű kiválasztása - kattints egy járműre az adataihoz
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}A kijelölt közúti jármű megvétele
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Ár: {CURRENCY}{}Sebesség: {VELOCITY}{}Működtetési költség: {CURRENCY}/év{}Kapacitás: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Kapacitás: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Közúti jármű átnevezése
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Nem nevezheted át a közúti járművet...
@@ -2890,7 +2982,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...
@@ -2958,7 +3050,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}
@@ -3011,6 +3103,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!
@@ -3326,6 +3420,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
@@ -3363,4 +3465,22 @@
 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}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}A névnek egyedinek kell lennie
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Következő felirat
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Előző felirat
+
 ########
+
+STR_FUND_NEW_INDUSTRY                                           :{BLACK}Alapít
+STR_PROSPECT_NEW_INDUSTRY                                       :{BLACK}Támogat
+STR_BUILD_NEW_INDUSTRY                                          :{BLACK}Épít
+STR_INDUSTRY_SELECTION_HINT                                     :{BLACK}Válaszd ki a megfelelő ipartípust a listából
--- a/src/lang/icelandic.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/icelandic.txt	Sat Jul 14 19:42: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.
@@ -1028,7 +1028,6 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Aðeins afhlaða farmi á stöðvum þar sem er eftirspurn: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Leyfa byggingu mjög langra brúa: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Skýli má vera á áætlun lesta: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Leyfa byggingu hráefnaframleiðsluiðnaðar: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Leyfa marga svipaða iðnaði í sama bæ: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Má byggja iðnaði af sömu gerð nálægt hvor öðrum: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Sýna alltaf fulla dagsetningu á upplýsingaslá: {ORANGE}{STRING}
@@ -1153,7 +1152,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}
@@ -1193,7 +1192,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Ertu viss um að þú viljir búa til handahófskennt land?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Búa til marga bæi
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Þekja landið með bæjum
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Búa til marga iðnaði
+STR_MANY_RANDOM_INDUSTRIES                                      :Búa til marga iðnaði
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Þekja kortið mörgum handahófskenndum iðnöðum
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Get ekki búið til iðnað...
 
@@ -1382,9 +1381,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 +1592,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 +1625,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 +1696,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 +1808,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 +2059,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 +2071,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 +2087,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 +2139,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 +2178,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 +2488,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 +2555,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
@@ -2598,7 +2597,6 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Sýna burðargetu hvers farartækis
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Sýna heildar burðargetu lestar, raðar eftir tegund farms
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Áætlun - smelltu til að velja stöð. CTRL + músartakki færir sjónarhorn að stöðinni
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Sleppa núverandi skipun, og byrja á næstu
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Eyða valdri skipun
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Gera valda skipun viðstöðulausa
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Skeyta inn nýrri skipun á undan valdri skipun, eða bæta við á enda listans
@@ -2646,7 +2644,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ð...
@@ -2718,7 +2716,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...
@@ -2786,7 +2784,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/italian.txt	Sat Jul 14 19:42: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}
@@ -157,7 +157,7 @@
 STR_00B0_MAP                                                    :{WHITE}Mappa - {STRING}
 STR_00B1_GAME_OPTIONS                                           :{WHITE}Opzioni di gioco
 STR_00B2_MESSAGE                                                :{YELLOW}Messaggio
-STR_00B3_MESSAGE_FROM                                           :{YELLOW}Messaggio da {STRING}
+STR_00B3_MESSAGE_FROM                                           :{YELLOW}Messaggio dalla {STRING}
 STR_POPUP_CAUTION_CAPTION                                       :{WHITE}Attenzione!
 STR_00B4_CAN_T_DO_THIS                                          :{WHITE}Non è possibile farlo....
 STR_00B5_CAN_T_CLEAR_THIS_AREA                                  :{WHITE}Impossibile ripulire l'area....
@@ -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}
@@ -1036,7 +1036,10 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Scarica le merci in una stazione solo se richieste: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Consenti la costruzione di ponti molto lunghi: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Consenti gli ordini 'Vai al deposito': {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Consenti la costruzione di industrie primarie: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}Costruzione delle industrie primarie: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :Non permessa
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :Come le altre industrie
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :Prospezione
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Consenti più industrie dello stesso tipo nella stessa città: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Consenti la costruzione di industrie uguali anche molto vicine: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Mostra sempre la data lunga nella barra di stato: {ORANGE}{STRING}
@@ -1105,7 +1108,19 @@
 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}Ferrovia predefinita (a inizio/ripresa partita): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Ferrovia normale
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Ferrovia elettr.
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Monorotaia
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :La prima disponibile
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :L'ultima disponibile
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :La più usata
 
+STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Consenti costruzione di infrastrutture senza veicoli disponibili: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Max treni per giocatore: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Max automezzi per giocatore: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Max aeromobili per giocatore: {ORANGE}{STRING}
@@ -1188,7 +1203,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}
@@ -1228,7 +1243,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Si è sicuri di voler generare un paesaggio casuale?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Alcune città casuali
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Copre la mappa con città posizionate casualmente
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Alcune industrie casuali
+STR_MANY_RANDOM_INDUSTRIES                                      :Alcune industrie casuali
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Copre la mappa con industrie posizionate casualmente
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Impossibile generare industrie...
 
@@ -1399,6 +1414,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :Inglese
 STR_NETWORK_LANG_GERMAN                                         :Tedesco
 STR_NETWORK_LANG_FRENCH                                         :Francese
+STR_NETWORK_LANG_BRAZILIAN                                      :Brasiliano
+STR_NETWORK_LANG_BULGARIAN                                      :Bùlgaro
+STR_NETWORK_LANG_CHINESE                                        :Cinese
+STR_NETWORK_LANG_CZECH                                          :Ceco
+STR_NETWORK_LANG_DANISH                                         :Danese
+STR_NETWORK_LANG_DUTCH                                          :Olandese
+STR_NETWORK_LANG_ESPERANTO                                      :Esperanto
+STR_NETWORK_LANG_FINNISH                                        :Finlandese
+STR_NETWORK_LANG_HUNGARIAN                                      :Ungherese
+STR_NETWORK_LANG_ICELANDIC                                      :Islandese
+STR_NETWORK_LANG_ITALIAN                                        :Italiano
+STR_NETWORK_LANG_JAPANESE                                       :Giapponese
+STR_NETWORK_LANG_KOREAN                                         :Coreano
+STR_NETWORK_LANG_LITHUANIAN                                     :Lituano
+STR_NETWORK_LANG_NORWEGIAN                                      :Norvegese
+STR_NETWORK_LANG_POLISH                                         :Polacco
+STR_NETWORK_LANG_PORTUGUESE                                     :Portoghese
+STR_NETWORK_LANG_ROMANIAN                                       :Rumeno
+STR_NETWORK_LANG_RUSSIAN                                        :Russo
+STR_NETWORK_LANG_SLOVAK                                         :Slovacco
+STR_NETWORK_LANG_SLOVENIAN                                      :Sloveno
+STR_NETWORK_LANG_SPANISH                                        :Spagnolo
+STR_NETWORK_LANG_SWEDISH                                        :Svedese
+STR_NETWORK_LANG_TURKISH                                        :Turco
+STR_NETWORK_LANG_UKRAINIAN                                      :Ucraino
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Stanza principale partita multigiocatore
@@ -1418,9 +1458,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}
@@ -1655,7 +1695,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}
@@ -1688,7 +1728,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}
@@ -1759,7 +1799,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
@@ -1868,6 +1908,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
@@ -1877,9 +1918,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
@@ -1936,13 +1982,20 @@
 STR_4829_REQUIRES                                               :{BLACK}Richiede: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}Carico in attesa di lavorazione:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES                                               :{BLACK}Produce: {YELLOW}{STRING}
+STR_4828_PRODUCES                                               :{BLACK}Produce: {YELLOW}{STRING}, {STRING}
+############ range for produces ends
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Produzione il mese scorso:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% trasportato)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Centra la visuale principale sulla posizione dell'industria
 STR_482D_NEW_UNDER_CONSTRUCTION                                 :{BLACK}{BIGFONT}Nuov{G o a} {STRING} in costruzione vicino a {TOWN}!
 STR_482E_NEW_BEING_PLANTED_NEAR                                 :{BLACK}{BIGFONT}Nuov{G o a} {STRING} piantat{G o a} vicino a {TOWN}!
 STR_482F_COST                                                   :{BLACK}Costo: {YELLOW}{CURRENCY}
-STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY                          :{WHITE}Impossibile costruire questo tipo di industria qui...
+STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY                          :{WHITE}Imposibile costruire l'industria qui...
 STR_4831_FOREST_CAN_ONLY_BE_PLANTED                             :{WHITE}...una foresta può essere piantata solo in una zona innevata
 STR_4832_ANNOUNCES_IMMINENT_CLOSURE                             :{BLACK}{BIGFONT}{INDUSTRY} annuncia imminente chiusura!!
 STR_4833_SUPPLY_PROBLEMS_CAUSE_TO                               :{BLACK}{BIGFONT}Per problemi di rifornimenti {INDUSTRY} annuncia imminente chiusura!
@@ -2034,15 +2087,15 @@
 STR_SV_STNAME_OILFIELD                                          :Pozzi di {STRING}
 STR_SV_STNAME_MINES                                             :{STRING} Miniere
 STR_SV_STNAME_DOCKS                                             :Porto di {STRING}
-STR_SV_STNAME_BUOY_1                                            :{STRING} Boa 1
-STR_SV_STNAME_BUOY_2                                            :{STRING} Boa 2
-STR_SV_STNAME_BUOY_3                                            :{STRING} Boa 3
-STR_SV_STNAME_BUOY_4                                            :{STRING} Boa 4
-STR_SV_STNAME_BUOY_5                                            :{STRING} Boa 5
-STR_SV_STNAME_BUOY_6                                            :{STRING} Boa 6
-STR_SV_STNAME_BUOY_7                                            :{STRING} Boa 7
-STR_SV_STNAME_BUOY_8                                            :{STRING} Boa 8
-STR_SV_STNAME_BUOY_9                                            :{STRING} Boa 9
+STR_SV_STNAME_BUOY_1                                            :Boa 1 di {STRING}
+STR_SV_STNAME_BUOY_2                                            :Boa 2 di {STRING}
+STR_SV_STNAME_BUOY_3                                            :Boa 3 di {STRING}
+STR_SV_STNAME_BUOY_4                                            :Boa 4 di {STRING}
+STR_SV_STNAME_BUOY_5                                            :Boa 5 di {STRING}
+STR_SV_STNAME_BUOY_6                                            :Boa 6 di {STRING}
+STR_SV_STNAME_BUOY_7                                            :Boa 7 di {STRING}
+STR_SV_STNAME_BUOY_8                                            :Boa 8 di {STRING}
+STR_SV_STNAME_BUOY_9                                            :Boa 9 di {STRING}
 STR_SV_STNAME_ANNEXE                                            :{STRING} Distaccata
 STR_SV_STNAME_SIDINGS                                           :{STRING} Raccordo
 STR_SV_STNAME_BRANCH                                            :{STRING} Ramificata
@@ -2050,8 +2103,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!
 
@@ -2131,7 +2183,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
@@ -2143,7 +2195,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
@@ -2159,20 +2211,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
@@ -2211,8 +2263,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)
@@ -2250,7 +2302,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
@@ -2562,7 +2614,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}
@@ -2583,6 +2635,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}
@@ -2624,13 +2683,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
@@ -2640,6 +2701,9 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Impossibile inserire un nuovo ordine...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Impossibile cancellare questo ordine...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Impossibile modificare questo ordine...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Impossibile spostare questo ordine...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Impossibile saltare l'ordine corrente...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Impossibile saltare all'ordine selezionato...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Impossibile spostare il veicolo...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}La locomotiva di coda segue sempre quella di testa
 STR_8838_N_A                                                    :N/A{SKIP}
@@ -2671,18 +2735,22 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Mostra la capienza di ogni veicolo
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Mostra la capacità totale del treno, suddivisa per tipo di carico
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Lista degli ordini - fare clic su un ordine per selezionarlo e CTRL+clic per portarsi sulla stazione corrispondente
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Salta l'ordine corrente e inizia il successivo
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Salta l'ordine corrente e inizia il successivo. Tenere premuto CTRL per saltare all'ordine selezionato
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Elimina l'ordine selezionato
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Fa diventare l'ordine selezionato 'non-stop'
 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
@@ -2698,6 +2766,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}
@@ -2706,8 +2776,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                                        :Questi ordini richiedono {STRING}
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :Questi ordini richiedono almeno {STRING} (non tutti i tempi specificati)
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Auto
+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
@@ -2723,7 +2805,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...
@@ -2750,6 +2832,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Elenco selezione automezzi - fare clic su un veicolo per informazioni
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Costruisce l'automezzo selezionato
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Costo: {CURRENCY}{}Velocità: {VELOCITY}{}Costo d'esercizio: {CURRENCY}/anno{}Capacità: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Capacità: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Rinomina l'automezzo
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Impossibile rinominare l'automezzo...
@@ -2797,7 +2881,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...
@@ -2865,7 +2949,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}
@@ -2918,6 +3002,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'!
@@ -3132,7 +3218,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
 
@@ -3233,6 +3319,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}
@@ -3259,7 +3353,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
@@ -3270,4 +3364,22 @@
 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}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}Il nome deve essere univoco
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Va al cartello successivo
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Va al cartello precedente
+
 ########
+
+STR_FUND_NEW_INDUSTRY                                           :{BLACK}Finanzia
+STR_PROSPECT_NEW_INDUSTRY                                       :{BLACK}Esegui prospezione
+STR_BUILD_NEW_INDUSTRY                                          :{BLACK}Costruisci
+STR_INDUSTRY_SELECTION_HINT                                     :{BLACK}Selezionare l'industria appropriata dalla lista
--- a/src/lang/japanese.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/japanese.txt	Sat Jul 14 19:42: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}
@@ -1034,7 +1034,10 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}需要のあるときのみ駅へ貨物を運送:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}超長型橋の建設を許容:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}「車庫へ回送」という指令を許容:{ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}原料産業の建設を許容:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}第一次産業の手動の建設方法:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :なし
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :他の産業と同様
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :探鉱
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}町内に重複している産業の建設を許容:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}同類の産業を近くに建設することを許容:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}常に状況バーに長型日付を表示:{ORANGE}{STRING}
@@ -1089,6 +1092,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,7 +1106,19 @@
 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_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}適当な車両がまだ購入不可能であっても、基礎の建設を許容:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}一人のプレヤーの列車数上限:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}一人のプレヤーの道路車両数上限:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}一人のプレヤーの飛行機数上限:{ORANGE}{STRING}
@@ -1185,7 +1201,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}
@@ -1225,7 +1241,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}ランダムな地形を作成してもよろしいですか?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}多くのランダムな市町村
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}地図にたくさんの市町村を建設します
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}多くのランダムな産業
+STR_MANY_RANDOM_INDUSTRIES                                      :多くのランダムな産業
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}地図にたくさんの産業を建設します
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}産業が建設できません...
 
@@ -1396,6 +1412,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 +1456,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 +1630,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}先に駅を破壊しなければなりません
 
 
@@ -1597,16 +1644,27 @@
 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}乗客用路面電車駅を建設
@@ -1616,6 +1674,7 @@
 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                                                   :道路
@@ -1634,7 +1693,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}戸
@@ -1667,7 +1726,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}へ
@@ -1738,7 +1797,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                                                   :標示
@@ -1847,6 +1906,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}ゲームを保存
@@ -1856,9 +1916,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}選択したゲームを削除します
@@ -1915,6 +1980,13 @@
 STR_4829_REQUIRES                                               :{BLACK}必要な原料:{YELLOW}{STRING}、{STRING}、{STRING}
 ############ range for requires ends
 
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}処理待ちの貨物:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES                                               :{BLACK}産物:{YELLOW}{STRING}
+STR_4828_PRODUCES                                               :{BLACK}産物:{YELLOW}{STRING}、{STRING}
+############ range for produces ends
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}先月の生産量:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK}({COMMA}%運送済み)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}主の画面を産業の場所に移動します
@@ -2029,8 +2101,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!
 
@@ -2110,7 +2181,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}カラースキーム
@@ -2122,7 +2193,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}建設
@@ -2138,20 +2209,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}...残額がありません
@@ -2190,8 +2261,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}{}(社長)
@@ -2229,7 +2300,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%の株を購入
@@ -2541,7 +2612,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}
@@ -2562,6 +2633,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}電車庫で修理
@@ -2603,13 +2681,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}列車は車庫に止めなければ成らないんです
@@ -2619,6 +2699,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}
@@ -2650,12 +2733,16 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}各車両の容量を表示します
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}貨物種類に並べ替えて列車の合計容量を表示します
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}指令リスト - 指令を選択するにはクリックします
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}現在の指令をスキップして、次へ移動します
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}実行中の指令をスキップして、次へ移動します。Control クリックすると、選択した指令へ移動します。
 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}故障
@@ -2677,6 +2764,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}
@@ -2685,8 +2774,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}道路車両があります
@@ -2702,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}道路車両が販売できません...
@@ -2729,6 +2830,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}道路車両が名付けません...
@@ -2776,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}船舶が造船所へ回送できません...
@@ -2844,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}
@@ -2897,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}交通事故!UFO と衝突、車両が壊れた!
@@ -3212,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}
@@ -3249,4 +3362,22 @@
 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}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}名前は唯一でなければなりません
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}次の標示へ移動
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}前の標示へ移動
+
 ########
+
+STR_FUND_NEW_INDUSTRY                                           :{BLACK}出資
+STR_PROSPECT_NEW_INDUSTRY                                       :{BLACK}調査
+STR_BUILD_NEW_INDUSTRY                                          :{BLACK}建設
+STR_INDUSTRY_SELECTION_HINT                                     :{BLACK}適当な産業を選択します
--- a/src/lang/korean.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/korean.txt	Sat Jul 14 19:42: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}
@@ -48,7 +48,7 @@
 STR_0026_CANDY                                                  :사탕
 STR_0027_COLA                                                   :콜라
 STR_0028_COTTON_CANDY                                           :솜사탕
-STR_0029_BUBBLES                                                :풍선껌
+STR_0029_BUBBLES                                                :거품
 STR_002A_TOFFEE                                                 :태피
 STR_002B_BATTERIES                                              :배터리
 STR_002C_PLASTIC                                                :플라스틱
@@ -80,7 +80,7 @@
 STR_0046_CANDY                                                  :사탕
 STR_0047_COLA                                                   :콜라
 STR_0048_COTTON_CANDY                                           :솜사탕
-STR_0049_BUBBLE                                                 :풍선껌
+STR_0049_BUBBLE                                                 :거품
 STR_004A_TOFFEE                                                 :태피
 STR_004B_BATTERY                                                :배터리
 STR_004C_PLASTIC                                                :플라스틱
@@ -112,7 +112,7 @@
 STR_QUANTITY_SWEETS                                             :{COMMA} 자루의 사탕
 STR_QUANTITY_COLA                                               :{VOLUME}의 콜라
 STR_QUANTITY_CANDYFLOSS                                         :{WEIGHT}의 솜사탕
-STR_QUANTITY_BUBBLES                                            :풍선껌 {COMMA} 상자
+STR_QUANTITY_BUBBLES                                            :거품 {COMMA} 상자
 STR_QUANTITY_TOFFEE                                             :{WEIGHT}의 태피
 STR_QUANTITY_BATTERIES                                          :배터리 {COMMA} 상자
 STR_QUANTITY_PLASTIC                                            :{VOLUME}의 플라스틱
@@ -248,7 +248,7 @@
 STR_0115_TOY_FACTORY                                            :{BLACK}{TINYFONT}장난감 공장
 STR_0116_PLASTIC_FOUNTAINS                                      :{BLACK}{TINYFONT}플라스틱 분수
 STR_0117_FIZZY_DRINK_FACTORY                                    :{BLACK}{TINYFONT}탄산음료 공장
-STR_0118_BUBBLE_GENERATOR                                       :{BLACK}{TINYFONT}풍선껌 제조 공장
+STR_0118_BUBBLE_GENERATOR                                       :{BLACK}{TINYFONT}거품 제조 공장
 STR_0119_TOFFEE_QUARRY                                          :{BLACK}{TINYFONT}태피 채취장
 STR_011A_SUGAR_MINE                                             :{BLACK}{TINYFONT}설탕 광산
 STR_011B_RAILROAD_STATION                                       :{BLACK}{TINYFONT}철도역
@@ -460,7 +460,7 @@
 STR_018B_CLOSE_WINDOW                                           :{BLACK}창닫기
 STR_018C_WINDOW_TITLE_DRAG_THIS                                 :{BLACK}창 제목 - 창을 움직이려면 여기를 드래그하세요
 STR_STICKY_BUTTON                                               :{BLACK}이 창을 '모든 창 닫기' 키로 닫을 수 없게 하기
-STR_RESIZE_BUTTON                                               :{BLACK}이 창의 크기를 조절하려면 여기를 클릭하고 드래그하세요.
+STR_RESIZE_BUTTON                                               :{BLACK}이 창의 크기를 조절하려면 여기를 클릭하고 드래그하세요
 STR_SAVELOAD_HOME_BUTTON                                        :{BLACK}기본 저장/로드 디렉토리로 이동하려면 여기를 클릭하세요
 STR_018D_DEMOLISH_BUILDINGS_ETC                                 :{BLACK}사각형 모양의 땅에 있는 건물과 땅 등을 부숩니다.
 STR_018E_LOWER_A_CORNER_OF_LAND                                 :{BLACK}땅의 모퉁이를 낮춥니다.
@@ -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
@@ -681,7 +681,7 @@
 STR_025C_TOY_FACTORY                                            :{BLACK}장난감 공장
 STR_025D_PLASTIC_FOUNTAINS                                      :{BLACK}플라스틱 분수
 STR_025E_FIZZY_DRINK_FACTORY                                    :{BLACK}탄산음료 공장
-STR_025F_BUBBLE_GENERATOR                                       :{BLACK}풍선껌 제조 공장
+STR_025F_BUBBLE_GENERATOR                                       :{BLACK}거품 제조 공장
 STR_0260_TOFFEE_QUARRY                                          :{BLACK}태피 채취장
 STR_0261_SUGAR_MINE                                             :{BLACK}설탕 광산
 STR_0262_CONSTRUCT_COAL_MINE                                    :{BLACK}석탄 광산 건설
@@ -716,7 +716,7 @@
 STR_027F_CONSTRUCT_TOY_FACTORY                                  :{BLACK}장난감 공장 건설
 STR_0280_CONSTRUCT_PLASTIC_FOUNTAINS                            :{BLACK}플라스틱 분수 건설
 STR_0281_CONSTRUCT_FIZZY_DRINK_FACTORY                          :{BLACK}탄산음료 공장 건설
-STR_0282_CONSTRUCT_BUBBLE_GENERATOR                             :{BLACK}풍선껌 제조 공장 건설
+STR_0282_CONSTRUCT_BUBBLE_GENERATOR                             :{BLACK}거품 제조 공장 건설
 STR_0283_CONSTRUCT_TOFFEE_QUARRY                                :{BLACK}태피 채취장 건설
 STR_0284_CONSTRUCT_SUGAR_MINE                                   :{BLACK}설탕 광산 건설
 STR_0285_CAN_T_BUILD_HERE                                       :{WHITE}{STRING}을/를 여기에 건설할 수 없습니다...
@@ -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}
@@ -1035,7 +1035,10 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}수요가 있을때만 화물을 역에 옮겨놓음 : {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}매우 긴 교각 건설 허용 : {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}차량기지(차고/격납고)를 경로에 지정하는 것을 허용 : {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}원료 생산 산업시설의 건설을 허용 : {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}수동 기본 산업 건설 방법: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :없음
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :다른 산업시설처럼
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :답사
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}한 도시당 같은 종류의 산업시설의 중복 건설을 허용 : {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}같은 종류의 산업 시설이 가까이에 지어지는 것을 허용 : {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}날짜를 일(日)단위까지 상세하게 표시 : {ORANGE}{STRING}
@@ -1104,7 +1107,19 @@
 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_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}적절한 사용 가능한 차량이 없을 경우 건설 도구 표시: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}최대 열차 수: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}최대 자동차 수: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}최대 항공기 수: {ORANGE}{STRING}
@@ -1187,7 +1202,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}
@@ -1227,7 +1242,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}무작위로 지형을 생성하시겠습니까?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}무작위 도시 건설
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}무작위로 도시를 건설합니다.
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}무작위 산업시설 건설
+STR_MANY_RANDOM_INDUSTRIES                                      :무작위 산업시설 건설
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}무작위로 산업시설을 건설합니다.
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}산업시설을 생성할 수 없습니다...
 
@@ -1284,7 +1299,7 @@
 STR_CONSTRUCT_BATTERY_FARM_TIP                                  :{BLACK}배터리 농장에 투자합니다.
 STR_CONSTRUCT_COLA_WELLS_TIP                                    :{BLACK}콜라 우물을 팝니다.
 STR_CONSTRUCT_PLASTIC_FOUNTAINS_TIP                             :{BLACK}플라스틱 분수에 투자합니다.
-STR_CONSTRUCT_BUBBLE_GENERATOR_TIP                              :{BLACK}풍선껌 제조 공장을 건설합니다.
+STR_CONSTRUCT_BUBBLE_GENERATOR_TIP                              :{BLACK}거품 제조 공장을 건설합니다.
 STR_CONSTRUCT_TOFFEE_QUARRY_TIP                                 :{BLACK}태피 채취장에 투자합니다.
 STR_CONSTRUCT_SUGAR_MINE_TIP                                    :{BLACK}설탕 광산을 건설합니다.
 
@@ -1398,6 +1413,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}멀티플레이 준비
@@ -1417,9 +1457,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}
@@ -1654,7 +1694,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}
@@ -1687,14 +1727,14 @@
 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} 수송
 STR_2028_BY                                                     :{YELLOW} ({DATE_SHORT}까지)
 STR_202A_NONE                                                   :{ORANGE}없음
 STR_202B_SERVICES_ALREADY_SUBSIDISED                            :{BLACK}이미 지급된 보조금:
-STR_202C_FROM_TO                                                :{ORANGE}{STRING}에서 {STATION}까지 {STATION}{YELLOW} ({COMPANY}
+STR_202C_FROM_TO                                                :{ORANGE}{1:STATION}에서 {2:STATION}까지 {0:STRING} 수송{YELLOW} ({3:COMPANY}
 STR_202D_UNTIL                                                  :{YELLOW}, {DATE_SHORT}까지)
 STR_202E_OFFER_OF_SUBSIDY_EXPIRED                               :{BLACK}{BIGFONT}보조금 제공 계약 파기:{}{}{0:STRING}에서 {1:STRING}까지의 {2:STRING} 수송은 더이상 보조금을 지급하지 않습니다.
 STR_202F_SUBSIDY_WITHDRAWN_SERVICE                              :{BLACK}{BIGFONT}보조금 제공 철회:{}{}{1:STATION}에서 {2:STATION}까지의 {0:STRING} 수송은 더이상 보조금을 지급하지 않습니다.
@@ -1758,7 +1798,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                                                   :팻말
@@ -1867,6 +1907,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}게임 저장
@@ -1876,9 +1917,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}선택된 세이브 파일을 삭제합니다.
@@ -1925,7 +1971,7 @@
 STR_4821_TOY_FACTORY                                            :장난감 공장
 STR_4822_PLASTIC_FOUNTAINS                                      :플라스틱 분수
 STR_4823_FIZZY_DRINK_FACTORY                                    :탄산음료 공장
-STR_4824_BUBBLE_GENERATOR                                       :풍선껌 제조 공장
+STR_4824_BUBBLE_GENERATOR                                       :거품 제조 공장
 STR_4825_TOFFEE_QUARRY                                          :태피 채취장
 STR_4826_SUGAR_MINE                                             :설탕 광산
 
@@ -1935,6 +1981,13 @@
 STR_4829_REQUIRES                                               :{BLACK}필요함: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}처리될 화물 대기:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES                                               :{BLACK}생산: {YELLOW}{STRING}
+STR_4828_PRODUCES                                               :{BLACK}생산: {YELLOW}{STRING}, {STRING}
+############ range for produces ends
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}지난달 생산량:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% 수송됨)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}이 산업시설이 있는 곳으로 이동
@@ -2049,8 +2102,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!
 
@@ -2130,7 +2182,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}색상
@@ -2142,7 +2194,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}건설
@@ -2158,20 +2210,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}...값아야할 대출금이 없습니다.
@@ -2210,8 +2262,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}{}(매니저)
@@ -2249,7 +2301,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%를 매입합니다.
@@ -2340,7 +2392,7 @@
 STR_802C_SUGAR_TRUCK                                            :설탕 수송차량
 STR_802D_COTTON_CANDY_HOPPER                                    :솜사탕 수송차량
 STR_802E_TOFFEE_HOPPER                                          :태피 수송차량
-STR_802F_BUBBLE_VAN                                             :풍선껌 수송차량
+STR_802F_BUBBLE_VAN                                             :거품 수송차량
 STR_8030_COLA_TANKER                                            :콜라 탱크
 STR_8031_CANDY_VAN                                              :사탕 수송차량
 STR_8032_TOY_VAN                                                :장난감 수송차량
@@ -2370,7 +2422,7 @@
 STR_804A_SUGAR_TRUCK                                            :설탕 수송차량
 STR_804B_COTTON_CANDY_HOPPER                                    :솜사탕
 STR_804C_TOFFEE_HOPPER                                          :태피 수송차량
-STR_804D_BUBBLE_VAN                                             :풍선껌
+STR_804D_BUBBLE_VAN                                             :거품 수송차량
 STR_804E_COLA_TANKER                                            :콜라 탱크
 STR_804F_CANDY_VAN                                              :사탕 수송차량
 STR_8050_TOY_VAN                                                :장난감 수송차량
@@ -2402,7 +2454,7 @@
 STR_806A_SUGAR_TRUCK                                            :설탕 수송차량
 STR_806B_COTTON_CANDY_HOPPER                                    :솜사탕
 STR_806C_TOFFEE_HOPPER                                          :태피 수송차량
-STR_806D_BUBBLE_VAN                                             :풍선껌
+STR_806D_BUBBLE_VAN                                             :거품 수송차량
 STR_806E_COLA_TANKER                                            :콜라 탱크
 STR_806F_CANDY_VAN                                              :사탕 수송차량
 STR_8070_TOY_VAN                                                :장난감 수송차량
@@ -2494,9 +2546,9 @@
 STR_80C6_MIGHTYMOVER_PLASTIC_TRUCK                              :MightyMover 플라스틱 수송차
 STR_80C7_POWERNAUGHT_PLASTIC_TRUCK                              :Powernaught 플라스틱 수송차
 STR_80C8_WIZZOWOW_PLASTIC_TRUCK                                 :Wizzowow 플라스틱 수송차
-STR_80C9_MIGHTYMOVER_BUBBLE_TRUCK                               :MightyMover 풍선껌 트럭
-STR_80CA_POWERNAUGHT_BUBBLE_TRUCK                               :Powernaught 풍선껌 트럭
-STR_80CB_WIZZOWOW_BUBBLE_TRUCK                                  :Wizzowow 풍선껌 트럭
+STR_80C9_MIGHTYMOVER_BUBBLE_TRUCK                               :MightyMover 거품 트럭
+STR_80CA_POWERNAUGHT_BUBBLE_TRUCK                               :Powernaught 거품 트럭
+STR_80CB_WIZZOWOW_BUBBLE_TRUCK                                  :Wizzowow 거품 트럭
 STR_80CC_MPS_OIL_TANKER                                         :MPS 석유 탱크
 STR_80CD_CS_INC_OIL_TANKER                                      :CS-Inc. 석유 탱크
 STR_80CE_MPS_PASSENGER_FERRY                                    :MPS 여객선
@@ -2561,7 +2613,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}
@@ -2582,6 +2634,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} 차량기지로 점검하러 가는중
@@ -2623,13 +2682,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}차량기지 안에서 정지해있어야 합니다!
@@ -2639,6 +2700,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}
@@ -2670,12 +2734,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}현재 경로를 건너뛰고 다음 경로로 진행합니다.
+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}고장
@@ -2697,6 +2765,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}의 속도로 정지중
@@ -2704,9 +2774,21 @@
 STR_TRAIN_NO_POWER                                              :{RED}기관차 없음
 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_NOW_AVAILABLE                                   :{BLACK}{BIGFONT}신형 {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}중간에 자동차가 있습니다.
@@ -2722,7 +2804,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}자동차를 팔 수 없습니다...
@@ -2749,6 +2831,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}자동차의 이름을 지정할 수 없습니다...
@@ -2796,7 +2880,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}선박을 정박소로 보낼 수 없습니다...
@@ -2864,7 +2948,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})
@@ -2917,6 +3001,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의 폭격으로 자동차가 파괴되었습니다!
@@ -3232,6 +3318,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}
@@ -3269,4 +3363,22 @@
 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}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}이름은 유일해야 합니다
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}다음 팻말로 가기
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}이전 팻말로 가기
+
 ########
+
+STR_FUND_NEW_INDUSTRY                                           :{BLACK}투자
+STR_PROSPECT_NEW_INDUSTRY                                       :{BLACK}예측
+STR_BUILD_NEW_INDUSTRY                                          :{BLACK}건설
+STR_INDUSTRY_SELECTION_HINT                                     :{BLACK}목록에서 적당한 산업시설을 선택하십시오
--- a/src/lang/lithuanian.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/lithuanian.txt	Sat Jul 14 19:42: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
@@ -1061,7 +1061,6 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Pristatyti krovini stotelei tiktai tuomet, kai yra poreikis: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Leisti statyti labai ilgus tiltus: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Leisti naudoti uzduoti 'Keliauti i depa': {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Leisti statyti žaliavą gaminančias gamyklas: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Leisti kelias panašias pramonės įmones viename mieste: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Leisti statyti to paties tipo fabrikus arti vienas kito: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Rodyti pilna data busenos eiluteje: {ORANGE}{STRING}
@@ -1185,7 +1184,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}
@@ -1225,7 +1224,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Ar tikrai norite sukurti atsitiktinį kraštovaizdį?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Daug atsitiktinių miestų
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Sukuria miestus atsitiktinėse žemėlapio vietose
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Daug atsitiktinių pramonės įmonių
+STR_MANY_RANDOM_INDUSTRIES                                      :Daug atsitiktinių pramonės įmonių
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Sukuria pramonės įmones atsitiktinėse žemėlapio vietose
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Neimanoma sukurti pramones imoniu...
 
@@ -1414,9 +1413,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 +1622,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 +1655,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 +1726,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 +1838,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 +2089,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 +2101,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 +2117,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 +2169,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 +2208,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 +2518,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 +2585,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
@@ -2628,7 +2627,6 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Rodyti detalia vagonu talpos informacija
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Rodyti bendra traukinio talpos informacija pagal kroviniu tipa
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Nurodymų sąrašas - nurodymas pažymimas ant jo spragtelėjus. Spregtelėjimas laikant VALD (CTRL) nukelia į stotį
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Praleisti esama uzduoti, vygdyti sekancia
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Istrinti pazymeta uzduoti
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Nestoti pazymetoje stoteleje
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Iterpti nauja uzduoti pries pazymeta, arba iterpti saraso pabaigoje
@@ -2676,7 +2674,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...
@@ -2748,7 +2746,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...
@@ -2816,7 +2814,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/norwegian_bokmal.txt	Sat Jul 14 19:42: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}
@@ -1034,7 +1034,6 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Lever varer til en stasjon bare når varen trengs: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Tillat bygging av veldig lange broer: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Tillat 'gå til jernbanestall'-ordre: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Tillat bygging av anlegg som produserer råmaterialer: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Tillat flere like industrier i samme by: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Industrier av samme type kan bygges nær hverandre: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Vis alltid lang dato på statuslinjen: {ORANGE}{STRING}
@@ -1183,7 +1182,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}
@@ -1223,7 +1222,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Er du sikker på at du vil lage et tilfeldig generert landskap?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Mange tilfeldige byer
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Dekk kartet med tilfeldig plasserte byer
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Mange tilfeldige industrier
+STR_MANY_RANDOM_INDUSTRIES                                      :Mange tilfeldige industrier
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Dekk kartet med tilfeldig plasserte industrier
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Kan ikke generere industrier...
 
@@ -1394,6 +1393,23 @@
 STR_NETWORK_LANG_ENGLISH                                        :Engelsk
 STR_NETWORK_LANG_GERMAN                                         :Tysk
 STR_NETWORK_LANG_FRENCH                                         :Fransk
+STR_NETWORK_LANG_FINNISH                                        :Finsk
+STR_NETWORK_LANG_HUNGARIAN                                      :Ungarsk
+STR_NETWORK_LANG_ICELANDIC                                      :Islandsk
+STR_NETWORK_LANG_ITALIAN                                        :Italiensk
+STR_NETWORK_LANG_JAPANESE                                       :Japanesisk
+STR_NETWORK_LANG_KOREAN                                         :Koreansk
+STR_NETWORK_LANG_NORWEGIAN                                      :Norsk
+STR_NETWORK_LANG_POLISH                                         :Polsk
+STR_NETWORK_LANG_PORTUGUESE                                     :Portugisisk
+STR_NETWORK_LANG_ROMANIAN                                       :Romensk
+STR_NETWORK_LANG_RUSSIAN                                        :Russisk
+STR_NETWORK_LANG_SLOVAK                                         :Slovakisk
+STR_NETWORK_LANG_SLOVENIAN                                      :Slovensk
+STR_NETWORK_LANG_SPANISH                                        :Spansk
+STR_NETWORK_LANG_SWEDISH                                        :Svensk
+STR_NETWORK_LANG_TURKISH                                        :Tyrkisk
+STR_NETWORK_LANG_UKRAINIAN                                      :Ukrainsk
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Flerspillere spill lobby
@@ -1413,9 +1429,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}
@@ -1587,6 +1603,13 @@
 STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Jernbanespor med for-signaler
 STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Jernbanespor med forlat-signaler
 STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Jernbanespor med kombinerte signaler
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Togbane med normale og pre-signaler
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Togbane med normale og utgangs-signaler
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Togbane med normale og kombinasjons-signaler
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Togbane med pre- og utgangs-signaler
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Togbane med pre- og kombinasjons-signaler
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Togbane med utgangs- og kombinasjons-signaler
+STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Må fjerne togbanestasjon først
 
 
 
@@ -1624,7 +1647,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}
@@ -1657,7 +1680,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}
@@ -1728,7 +1751,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
@@ -1840,9 +1863,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
@@ -2013,7 +2038,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!
 
@@ -2050,6 +2075,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
@@ -2092,7 +2118,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
@@ -2104,7 +2130,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
@@ -2120,20 +2146,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
@@ -2172,8 +2198,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)
@@ -2211,7 +2237,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
@@ -2521,7 +2547,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}
@@ -2542,6 +2568,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
@@ -2583,13 +2612,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
@@ -2599,6 +2629,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}
@@ -2630,7 +2663,6 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Vis kapasiteten til vognene
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Vis en total kapasitet på togene oppdelt etter godstype
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Ordreliste - trykk på en ordre for å velge den
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Hopper over gjeldende ordre, og forsett på neste
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Slett den valgte ordren
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Gjør den valgte ordren om til en
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Sett inn en ordre før den valgte ordren, eller i slutten av listen.
@@ -2665,8 +2697,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
@@ -2682,7 +2722,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...
@@ -2709,6 +2749,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...
@@ -2754,7 +2796,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...
@@ -2822,7 +2864,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}
@@ -2875,6 +2917,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!
@@ -3188,10 +3232,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/norwegian_nynorsk.txt	Sat Jul 14 19:42:58 2007 +0000
@@ -4,13 +4,15 @@
 ##plural 0
 ##gender masculine feminine neuter
 
+#
+
 ##id 0x0000
 STR_NULL                                                        :
 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}
@@ -494,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.
@@ -777,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
@@ -804,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}
@@ -1033,7 +1035,6 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Lever varer til ein stasjon berre når varen trengst: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Tillat bygging av veldig lange bruer: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Tillat 'køyr til jernbanestall'-ordre: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Tillat bygging av anlegg som produserer råmaterial: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Tillat fleire like industriar i samme by: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Industriar av same type kan byggjast nær einannan: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Alltid vis lang dato på statuslinja: {ORANGE}{STRING}
@@ -1047,6 +1048,7 @@
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Ny global rutesøking (NGR, overstyrer NTK): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Vektmultiplikator for frakt til å simulere tunge tog: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Tillat å køyre gjennom stoppestadar på vegar som byane eig: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADJACENT_STATIONS                            :{LTBLUE}Tillat å byggje stasjonar inntil andre: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Alltid tillat bygging av små flyplassar: {ORANGE}{STRING}
 
@@ -1087,6 +1089,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
@@ -1099,7 +1102,20 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :av
 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_DEFAULT_RAIL_TYPE                            :{LTBLUE}Standard Jernbane / etter nytt spel / lasta spel: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Vanleg jernbane
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Elekrisk Jernbane
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Monorail
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :Første tilgjengelege
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :Siste tilgjengelege
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :Mest brukte
 
+STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Vis bygningsverktøy når det ikkje er nokon høvelege køyretøy tilgjengeleg: {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}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Maks antal fly per spelar: {ORANGE}{STRING}
@@ -1182,7 +1198,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}
@@ -1222,7 +1238,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Er du sikker på at du vil lage eit tilfeldig generert landskap?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Mange tilfeldige byar
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Dekk kartet med tilfeldig plasserte byar
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Mange tilfeldige industriar
+STR_MANY_RANDOM_INDUSTRIES                                      :Mange tilfeldige industriar
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Dekk kartet med tilfeldig plasserte industriar
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Kan ikkje lage industriar...
 
@@ -1393,6 +1409,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :Engelsk
 STR_NETWORK_LANG_GERMAN                                         :Tysk
 STR_NETWORK_LANG_FRENCH                                         :Fransk
+STR_NETWORK_LANG_BRAZILIAN                                      :Brasiliansk
+STR_NETWORK_LANG_BULGARIAN                                      :Bulgarsk
+STR_NETWORK_LANG_CHINESE                                        :Kinesisk
+STR_NETWORK_LANG_CZECH                                          :Tsjekkisk
+STR_NETWORK_LANG_DANISH                                         :Dansk
+STR_NETWORK_LANG_DUTCH                                          :Nederlandsk
+STR_NETWORK_LANG_ESPERANTO                                      :Esperanto
+STR_NETWORK_LANG_FINNISH                                        :Finsk
+STR_NETWORK_LANG_HUNGARIAN                                      :Ungarsk
+STR_NETWORK_LANG_ICELANDIC                                      :Islandsk
+STR_NETWORK_LANG_ITALIAN                                        :Italiensk
+STR_NETWORK_LANG_JAPANESE                                       :Japansk
+STR_NETWORK_LANG_KOREAN                                         :Koreansk
+STR_NETWORK_LANG_LITHUANIAN                                     :Litauisk
+STR_NETWORK_LANG_NORWEGIAN                                      :Norsk
+STR_NETWORK_LANG_POLISH                                         :Polsk
+STR_NETWORK_LANG_PORTUGUESE                                     :Portugisisk
+STR_NETWORK_LANG_ROMANIAN                                       :Rumensk
+STR_NETWORK_LANG_RUSSIAN                                        :Russisk
+STR_NETWORK_LANG_SLOVAK                                         :Slovakisk
+STR_NETWORK_LANG_SLOVENIAN                                      :Slovensk
+STR_NETWORK_LANG_SPANISH                                        :Spansk
+STR_NETWORK_LANG_SWEDISH                                        :Svensk
+STR_NETWORK_LANG_TURKISH                                        :Tyrkisk
+STR_NETWORK_LANG_UKRAINIAN                                      :Ukrainsk
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Fleirspelarspel-lobby
@@ -1412,9 +1453,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}
@@ -1586,6 +1627,13 @@
 STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Jernbanespor med for-signal
 STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Jernbanespor med ut-signal
 STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Jernbanespor med samansette signal
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Jernbanespor med normale- og pre-signal
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Jernbanespor med normale- og exit-spor
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Jernbanespor med normale- og blandingssignal
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Jernbanespor med pre- og exit-signal
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Jernbanespor med pre- og blandingssignal
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Jernbanespor med exit- og blandingssignal
+STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Må fjerne togstasjon først
 
 
 
@@ -1593,22 +1641,39 @@
 STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Må fjerne veg først
 STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Vegarbeid pågår
 STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Bygg veg
+STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Trikkekonstruksjon
 STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Vel type bru
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}... einvegskøyrde vegar kan ikkje ha kryss
 STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Kan ikkje byggje veg her...
+STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}Kan ikkje byggje trikk her
 STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Kan ikkje fjerne veg her...
+STR_1805_CAN_T_REMOVE_TRAMWAY_FROM                              :{WHITE}Kan ikkje fjerna trikk
 STR_1806_ROAD_DEPOT_ORIENTATION                                 :{WHITE}Retning for garasje
+STR_1806_TRAM_DEPOT_ORIENTATION                                 :{WHITE}Retning for trikkedepot
 STR_1807_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}Kan ikkje byggje garasje her...
+STR_1807_CAN_T_BUILD_TRAM_VEHICLE                               :{WHITE}Kan ikkje byggje trikkedepot her
 STR_1808_CAN_T_BUILD_BUS_STATION                                :{WHITE}Kan ikkje byggje busstasjon...
 STR_1809_CAN_T_BUILD_TRUCK_STATION                              :{WHITE}Kan ikkje byggje lasteterminal...
+STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION                     :{WHITE}Kan ikkje byggje trikkestasjon for passasjerer...
+STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION                         :{WHITE}Kan ikkje byggje trikkestasjon for frakt...
 STR_180A_ROAD_CONSTRUCTION                                      :Bygg veg
+STR_180A_TRAMWAY_CONSTRUCTION                                   :Trikkekonstruksjon
 STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Bygg veg
+STR_180B_BUILD_TRAMWAY_SECTION                                  :{BLACK}Bygg trikkeseksjon
 STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Bygg garasje (trengst for bygging og vedlikehald av køyretøy)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT                               :{BLACK}Bygg trikkedepot ( for å bygge og vedlikeholde køyretøy)
 STR_180D_BUILD_BUS_STATION                                      :{BLACK}Bygg busstasjon
 STR_180E_BUILD_TRUCK_LOADING_BAY                                :{BLACK}Bygg lasteterminal
+STR_180D_BUILD_PASSENGER_TRAM_STATION                           :{BLACK}Bygg trikkestasjon for passasjerer
+STR_180E_BUILD_CARGO_TRAM_STATION                               :{BLACK}Bygg trikkestasjon for frakt
 STR_180F_BUILD_ROAD_BRIDGE                                      :{BLACK}Bygg bru
+STR_180F_BUILD_TRAMWAY_BRIDGE                                   :{BLACK}Bygg bro for trikk
 STR_1810_BUILD_ROAD_TUNNEL                                      :{BLACK}Bygg tunnel
+STR_1810_BUILD_TRAMWAY_TUNNEL                                   :{BLACK}Bygg tunell for trikk
 STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Vel mellom bygging/fjerning for vegbygging
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS                       :{BLACK}Byt mellom bygge / fjerne for trikk
 STR_1813_SELECT_ROAD_VEHICLE_DEPOT                              :{BLACK}Vel retninga på garasjen
+STR_1813_SELECT_TRAM_VEHICLE_DEPOT                              :{BLACK}Vel retning for trikkedepot
 STR_1814_ROAD                                                   :Veg
 STR_1815_ROAD_WITH_STREETLIGHTS                                 :Veg med gatelykter
 STR_1816_TREE_LINED_ROAD                                        :Aveny
@@ -1616,6 +1681,8 @@
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Jernbaneovergang
 STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Kan ikkje fjerne busstasjon
 STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Kan ikkje fjerne lastebilstasjon
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION                         :{WHITE}Kan ikkje fjerne trikkestasjon...
+STR_CAN_T_REMOVE_CARGO_TRAM_STATION                             :{WHITE}Kan ikkje fjerne trikkestasjon...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Byar
@@ -1623,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}Bygningen må rivst først
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Innbyggjartal: {ORANGE}{COMMA}{BLACK}  Antal hus: {ORANGE}{COMMA}
@@ -1656,7 +1723,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}
@@ -1727,7 +1794,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
@@ -1780,8 +1847,12 @@
 STR_3041_NOW_ACCEPTS_AND                                        :{WHITE}{STATION} godtek no {STRING} og {STRING}
 STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Retning på bussterminal
 STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Retning på lasteterminal
+STR_3042_PASSENGER_TRAM_STATION_ORIENTATION                     :{WHITE}Retning på trikkestajon
+STR_3043_CARGO_TRAM_STATION_ORIENT                              :{WHITE}Retning på trikkestasjon
 STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Må rive bussterminal først
 STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Må rive lasteterminal først
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION                   :{WHITE}Må fjerne trikkestasjon først
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION                       :{WHITE}Må fjerne trikkestajon først
 STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} Stasjon{P "" ar}
 STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
 STR_304A_NONE                                                   :{YELLOW}- Ingen -
@@ -1793,6 +1864,8 @@
 STR_3050_SELECT_LENGTH_OF_RAILROAD                              :{BLACK}Vel kor lang stasjonen skal vere
 STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Vel retning på bussterminal
 STR_3052_SELECT_TRUCK_LOADING_BAY                               :{BLACK}Vel retning på lasteterminal
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION              :{BLACK}Velg retning på trikkestajon
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION                  :{BLACK}Velg retning på trikkestajon
 STR_3053_CENTER_MAIN_VIEW_ON_STATION                            :{BLACK}Sentrer biletet på stasjonen
 STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}Vis stasjonsvurdering
 STR_3055_CHANGE_NAME_OF_STATION                                 :{BLACK}Endre namnet på stasjonen
@@ -1830,6 +1903,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
@@ -1839,9 +1913,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
@@ -2012,6 +2091,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!
 
@@ -2091,7 +2171,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
@@ -2103,7 +2183,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
@@ -2119,20 +2199,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
@@ -2171,8 +2251,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)
@@ -2210,7 +2290,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
@@ -2241,6 +2321,8 @@
 STR_LIVERY_HELICOPTER                                           :Helikopter
 STR_LIVERY_SMALL_PLANE                                          :Lite fly
 STR_LIVERY_LARGE_PLANE                                          :Stort fly
+STR_LIVERY_PASSENGER_TRAM                                       :Passasjertrikk
+STR_LIVERY_FREIGHT_TRAM                                         :Frakttrikk
 
 STR_LIVERY_GENERAL_TIP                                          :{BLACK}Vis generelle fargetema
 STR_LIVERY_TRAIN_TIP                                            :{BLACK}Vis togfargetema
@@ -2520,7 +2602,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}
@@ -2541,6 +2623,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
@@ -2582,13 +2671,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
@@ -2598,6 +2689,9 @@
 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...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}Bakmaskinen vil alltid følgje det fremste motstykket
 STR_8838_N_A                                                    :N/A{SKIP}
@@ -2629,12 +2723,16 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Vis kapasiteten til vognene
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Vis total kapasitet på vognene, sortert etter type vare
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Ordreliste - trykk på ein ordre for å velje han
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Hopp over gjeldande ordre, og start den neste
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Hopp over gjedande ordre, og start neste.  CTRL + klikk hopper til valde ordre
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Slett den valde ordren
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Gjer den valde ordren om til ein
 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
@@ -2656,6 +2754,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}
@@ -2664,8 +2764,20 @@
 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
+STR_TIMETABLE_TOTAL_TIME                                        :Det vil ta {STRING} å gjere ferdig denne rutetabellen
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :Det vil ta minst {STRING} å gjere ferdig denne rutetabellen ( ikkje alle på rutetabellen
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Automatisk utfylling
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Fyll ut rutetabellen automatisk med verdiar frå den første turen
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Køyretøy i vegen
@@ -2681,7 +2793,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...
@@ -2708,12 +2820,16 @@
 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...
 STR_902E_NAME_ROAD_VEHICLE                                      :{BLACK}Namngje køyretøy
 STR_902F_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Innbyggjarane jublar . . .{}Første buss kjem til {STATION}!
 STR_9030_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Innbyggjarane jublar . . .{}Første lastebil kjem til {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Innbygjarane feirer . . .{}Første passasjertrikk kjem til{STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Innbygjarane feirer . . .{}Første fraktetrikk kjem til {STATION}!
 STR_9031_ROAD_VEHICLE_CRASH_DRIVER                              :{BLACK}{BIGFONT}Kollisjon!{}Sjåfør døyr etter kollisjon med tog
 STR_9032_ROAD_VEHICLE_CRASH_DIE                                 :{BLACK}{BIGFONT}Kollisjon!{}{COMMA} døyr etter kollisjon med tog
 STR_9033_CAN_T_MAKE_VEHICLE_TURN                                :{WHITE}Kan ikkje snu...
@@ -2753,7 +2869,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...
@@ -2821,7 +2937,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}
@@ -2874,6 +2990,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!
@@ -2998,6 +3116,7 @@
 
 ### depot strings
 STR_DEPOT_SELL_CONFIRMATION_TEXT                                :{YELLOW}Du er i ferd med å selje alle køyretøya i depotet. Er du sikker?
+STR_DEPOT_WRONG_DEPOT_TYPE                                      :Gal type depot
 
 STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP                             :{BLACK}Sel alle toga i togstallen
 STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP                           :{BLACK}Sel alle køyretøya i garasjen
@@ -3188,3 +3307,62 @@
 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}
+STR_GROUP_TINY_NAME                                             :{TINYFONT}{GROUP}
+STR_GROUP_ALL_TRAINS                                            :Alle tog
+STR_GROUP_ALL_ROADS                                             :Alle køyretøty
+STR_GROUP_ALL_SHIPS                                             :Alle skip
+STR_GROUP_ALL_AIRCRAFTS                                         :Alle fly
+STR_GROUP_TINY_NUM                                              :{TINYFONT}{COMMA}
+STR_GROUP_ADD_SHARED_VEHICLE                                    :Legg til delte køyretøy
+STR_GROUP_REMOVE_ALL_VEHICLES                                   :Fjern alle køyretøy
+
+STR_GROUP_TRAINS_CAPTION                                        :{WHITE}{GROUP} - {COMMA} Tog
+STR_GROUP_ROADVEH_CAPTION                                       :{WHITE}{GROUP} - {COMMA} Køyretøy
+STR_GROUP_SHIPS_CAPTION                                         :{WHITE}{GROUP} - {COMMA} Skip
+STR_GROUP_AIRCRAFTS_CAPTION                                     :{WHITE}{GROUP} - {COMMA} Fly
+STR_GROUP_RENAME_CAPTION                                        :{BLACK}Gje nytt namn til ei gruppe
+STR_GROUP_REPLACE_CAPTION                                       :{WHITE}Erstatt køyretøy i "{GROUP}"
+
+STR_GROUP_CAN_T_CREATE                                          :{WHITE}Kan ikkje lage gruppe...
+STR_GROUP_CAN_T_DELETE                                          :{WHITE}Kan ikkje slette denne gruppa...
+STR_GROUP_CAN_T_RENAME                                          :{WHITE}Kan ikkje gje gruppa nytt namn...
+STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES                             :{WHITE}Kan ikkje fjerne alle køyretøy fra denne gruppa...
+STR_GROUP_CAN_T_ADD_VEHICLE                                     :{WHITE}Kan ikkje legge dette køyretøyet til denne gruppa...
+STR_GROUP_CAN_T_ADD_SHARED_VEHICLE                              :{WHITE}Kan ikkje legge til gruppe for delte køyretøy...
+
+STR_GROUPS_CLICK_ON_GROUP_FOR_TIP                               :{BLACK}Grupper - Klikk på ei gruppe for å få ei liste over alle køyretøya i den
+STR_GROUP_CREATE_TIP                                            :{BLACK}Klikk for å lage ei gruppe
+STR_GROUP_DELETE_TIP                                            :{BLACK}Slett den valde gruppa
+STR_GROUP_RENAME_TIP                                            :{BLACK}Gje den valde gruppa nytt namn
+STR_GROUP_REPLACE_PROTECTION_TIP                                :{BLACK}Klikk for å beskytte denne gruppa frå å global automatisk erstatning
+
+STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR                        :{TINYFONT}{BLACK}Forteneste i år: {GREEN}{CURRENCY} {BLACK}(førre år: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR                         :{TINYFONT}{BLACK}Forteneste i år: {RED}{CURRENCY} {BLACK}(førre år: {GREEN}{CURRENCY}{BLACK})
+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})
+
+STR_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}Namnet må vera unikt
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Gå til neste skilt
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Gå til førre skilt
+
+########
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/lang/piglatin.txt	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,3371 @@
+##name Pig latin
+##ownname Igpay atinlay
+##isocode xx_PL
+##plural 0
+
+#
+
+##id 0x0000
+STR_NULL                                                        :
+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}{CURRENCY}
+STR_0005                                                        :{RED}{CURRENCY}
+STR_EMPTY                                                       :
+STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Atflay andlay equiredray
+STR_0008_WAITING                                                :{BLACK}Aitingway: {WHITE}{STRING}
+STR_0009                                                        :{WHITE}{CARGO}
+STR_000A_EN_ROUTE_FROM                                          :{WHITE}{CARGO}{YELLOW}  (enway-outeray omfray
+STR_000B                                                        :{YELLOW}{STATION})
+STR_000C_ACCEPTS                                                :{BLACK}Acceptsway: {WHITE}
+STR_000D_ACCEPTS                                                :{BLACK}Acceptsway: {GOLD}
+STR_000E                                                        :
+STR_000F_PASSENGERS                                             :Assengerspay
+STR_0010_COAL                                                   :Oalcay
+STR_0011_MAIL                                                   :Ailmay
+STR_0012_OIL                                                    :Oilway
+STR_0013_LIVESTOCK                                              :Ivestocklay
+STR_0014_GOODS                                                  :Oodsgay
+STR_0015_GRAIN                                                  :Aingray
+STR_0016_WOOD                                                   :Oodway
+STR_0017_IRON_ORE                                               :Ironway Oreway
+STR_0018_STEEL                                                  :Eelstay
+STR_0019_VALUABLES                                              :Aluablesvay
+STR_001A_COPPER_ORE                                             :Oppercay Oreway
+STR_001B_MAIZE                                                  :Aizemay
+STR_001C_FRUIT                                                  :Uitfray
+STR_001D_DIAMONDS                                               :Iamondsday
+STR_001E_FOOD                                                   :Oodfay
+STR_001F_PAPER                                                  :Aperpay
+STR_0020_GOLD                                                   :Oldgay
+STR_0021_WATER                                                  :Aterway
+STR_0022_WHEAT                                                  :Eatwhay
+STR_0023_RUBBER                                                 :Ubberray
+STR_0024_SUGAR                                                  :Ugarsay
+STR_0025_TOYS                                                   :Oystay
+STR_0026_CANDY                                                  :Eetssway
+STR_0027_COLA                                                   :Olacay
+STR_0028_COTTON_CANDY                                           :Andyflosscay
+STR_0029_BUBBLES                                                :Ubblesbay
+STR_002A_TOFFEE                                                 :Offeetay
+STR_002B_BATTERIES                                              :Atteriesbay
+STR_002C_PLASTIC                                                :Asticplay
+STR_002D_FIZZY_DRINKS                                           :Izzyfay Inksdray
+STR_002E                                                        :
+STR_002F_PASSENGER                                              :Assengerpay
+STR_0030_COAL                                                   :Oalcay
+STR_0031_MAIL                                                   :Ailmay
+STR_0032_OIL                                                    :Oilway
+STR_0033_LIVESTOCK                                              :Ivestocklay
+STR_0034_GOODS                                                  :Oodsgay
+STR_0035_GRAIN                                                  :Aingray
+STR_0036_WOOD                                                   :Oodway
+STR_0037_IRON_ORE                                               :Ironway Oreway
+STR_0038_STEEL                                                  :Eelstay
+STR_0039_VALUABLES                                              :Aluablesvay
+STR_003A_COPPER_ORE                                             :Oppercay Oreway
+STR_003B_MAIZE                                                  :Aizemay
+STR_003C_FRUIT                                                  :Uitfray
+STR_003D_DIAMOND                                                :Iamondday
+STR_003E_FOOD                                                   :Oodfay
+STR_003F_PAPER                                                  :Aperpay
+STR_0040_GOLD                                                   :Oldgay
+STR_0041_WATER                                                  :Aterway
+STR_0042_WHEAT                                                  :Eatwhay
+STR_0043_RUBBER                                                 :Ubberray
+STR_0044_SUGAR                                                  :Ugarsay
+STR_0045_TOY                                                    :Oytay
+STR_0046_CANDY                                                  :Eetsway
+STR_0047_COLA                                                   :Olacay
+STR_0048_COTTON_CANDY                                           :Andyflosscay
+STR_0049_BUBBLE                                                 :Ubblebay
+STR_004A_TOFFEE                                                 :Offeetay
+STR_004B_BATTERY                                                :Atterybay
+STR_004C_PLASTIC                                                :Asticplay
+STR_004D_FIZZY_DRINK                                            :Izzyfay Inkdray
+STR_QUANTITY_NOTHING                                            :
+STR_QUANTITY_PASSENGERS                                         :{COMMA} assenger{P "" s}pay
+STR_QUANTITY_COAL                                               :{WEIGHT} ofway oalcay
+STR_QUANTITY_MAIL                                               :{COMMA} ag{P "" s}bay ofway ailmay
+STR_QUANTITY_OIL                                                :{VOLUME} ofway oilway
+STR_QUANTITY_LIVESTOCK                                          :{COMMA} item{P "" s}WAY ofway ivestocklay
+STR_QUANTITY_GOODS                                              :{COMMA} ate{P "" s}cray ofway oodsgay
+STR_QUANTITY_GRAIN                                              :{WEIGHT} ofway aingray
+STR_QUANTITY_WOOD                                               :{WEIGHT} ofway oodway
+STR_QUANTITY_IRON_ORE                                           :{WEIGHT} ofway ironway oreway
+STR_QUANTITY_STEEL                                              :{WEIGHT} ofway eelstay
+STR_QUANTITY_VALUABLES                                          :{COMMA} ag{P "" s}bay ofway aluablesvay
+STR_QUANTITY_COPPER_ORE                                         :{WEIGHT} ofway oppercay oreway
+STR_QUANTITY_MAIZE                                              :{WEIGHT} ofway aizemay
+STR_QUANTITY_FRUIT                                              :{WEIGHT} ofway uitfray
+STR_QUANTITY_DIAMONDS                                           :{COMMA} ag{P "" s}bay ofway iamondsday
+STR_QUANTITY_FOOD                                               :{WEIGHT} ofway oodfay
+STR_QUANTITY_PAPER                                              :{WEIGHT} ofway aperpay
+STR_QUANTITY_GOLD                                               :{COMMA} ag{P "" s}bay ofway oldgay
+STR_QUANTITY_WATER                                              :{VOLUME} ofway aterway
+STR_QUANTITY_WHEAT                                              :{WEIGHT} ofway eatwhay
+STR_QUANTITY_RUBBER                                             :{VOLUME} ofway ubberray
+STR_QUANTITY_SUGAR                                              :{WEIGHT} ofway ugarsay
+STR_QUANTITY_TOYS                                               :{COMMA} oy{P "" s}tay
+STR_QUANTITY_SWEETS                                             :{COMMA} ag{P "" s}bay ofway eetssway
+STR_QUANTITY_COLA                                               :{VOLUME} ofway olacay
+STR_QUANTITY_CANDYFLOSS                                         :{WEIGHT} ofway andyflosscay
+STR_QUANTITY_BUBBLES                                            :{COMMA} ubble{P "" s}bay
+STR_QUANTITY_TOFFEE                                             :{WEIGHT} ofway offeetay
+STR_QUANTITY_BATTERIES                                          :{COMMA} atter{P y ies}bay
+STR_QUANTITY_PLASTIC                                            :{VOLUME} ofway asticplay
+STR_QUANTITY_FIZZY_DRINKS                                       :{COMMA} izzyfay ink{P "" s}dray
+STR_ABBREV_NOTHING                                              :
+STR_ABBREV_PASSENGERS                                           :{TINYFONT}PSay
+STR_ABBREV_COAL                                                 :{TINYFONT}CLay
+STR_ABBREV_MAIL                                                 :{TINYFONT}MLay
+STR_ABBREV_OIL                                                  :{TINYFONT}OLWAY
+STR_ABBREV_LIVESTOCK                                            :{TINYFONT}LVay
+STR_ABBREV_GOODS                                                :{TINYFONT}GDay
+STR_ABBREV_GRAIN                                                :{TINYFONT}GRay
+STR_ABBREV_WOOD                                                 :{TINYFONT}WDay
+STR_ABBREV_IRON_ORE                                             :{TINYFONT}ORWAY
+STR_ABBREV_STEEL                                                :{TINYFONT}STay
+STR_ABBREV_VALUABLES                                            :{TINYFONT}VLay
+STR_ABBREV_COPPER_ORE                                           :{TINYFONT}OCay
+STR_ABBREV_MAIZE                                                :{TINYFONT}MZay
+STR_ABBREV_FRUIT                                                :{TINYFONT}FTay
+STR_ABBREV_DIAMONDS                                             :{TINYFONT}DMay
+STR_ABBREV_FOOD                                                 :{TINYFONT}FDay
+STR_ABBREV_PAPER                                                :{TINYFONT}PRay
+STR_ABBREV_GOLD                                                 :{TINYFONT}GDay
+STR_ABBREV_WATER                                                :{TINYFONT}WRay
+STR_ABBREV_WHEAT                                                :{TINYFONT}WHay
+STR_ABBREV_RUBBER                                               :{TINYFONT}RBay
+STR_ABBREV_SUGAR                                                :{TINYFONT}SGay
+STR_ABBREV_TOYS                                                 :{TINYFONT}YTay
+STR_ABBREV_SWEETS                                               :{TINYFONT}SWay
+STR_ABBREV_COLA                                                 :{TINYFONT}CLay
+STR_ABBREV_CANDYFLOSS                                           :{TINYFONT}CFay
+STR_ABBREV_BUBBLES                                              :{TINYFONT}UBay
+STR_ABBREV_TOFFEE                                               :{TINYFONT}TFay
+STR_ABBREV_BATTERIES                                            :{TINYFONT}BAay
+STR_ABBREV_PLASTIC                                              :{TINYFONT}PLay
+STR_ABBREV_FIZZY_DRINKS                                         :{TINYFONT}FZay
+STR_ABBREV_NONE                                                 :{TINYFONT}ONay
+STR_ABBREV_ALL                                                  :{TINYFONT}ALLWAY
+STR_00AE                                                        :{WHITE}{DATE_SHORT}
+STR_00AF                                                        :{WHITE}{DATE_LONG}
+STR_00B0_MAP                                                    :{WHITE}Apmay - {STRING}
+STR_00B1_GAME_OPTIONS                                           :{WHITE}Amegay Optionsway
+STR_00B2_MESSAGE                                                :{YELLOW}Essagemay
+STR_00B3_MESSAGE_FROM                                           :{YELLOW}Essagemay omfray {STRING}
+STR_POPUP_CAUTION_CAPTION                                       :{WHITE}Autioncay!
+STR_00B4_CAN_T_DO_THIS                                          :{WHITE}An'tcay oday isthay....
+STR_00B5_CAN_T_CLEAR_THIS_AREA                                  :{WHITE}An'tcay earclay isthay areaway....
+STR_00B6_ORIGINAL_COPYRIGHT                                     :{BLACK}Originalway opyrightcay {COPYRIGHT} 1995 Ischray Awyersay, Allway ightsray eservedray
+STR_00B7_VERSION                                                :{BLACK}OpenTTDWAY ersionvay {REV}
+STR_00BA_COPYRIGHT_OPENTTD                                      :{BLACK}OpenTTDWAY {COPYRIGHT}2002-2007 Ethay OpenTTDWAY eamtay
+STR_TRANSLATED_BY                                               :{BLACK}  Anslatortray(say) -
+
+STR_00C5                                                        :{BLACK}{CROSS}
+STR_00C6                                                        :{SILVER}{CROSS}
+STR_00C7_QUIT                                                   :{WHITE}Itquay
+STR_00C8_YES                                                    :{BLACK}Esyay
+STR_00C9_NO                                                     :{BLACK}Onay
+STR_00CA_ARE_YOU_SURE_YOU_WANT_TO                               :{YELLOW}Areway ouyay uresay ouyay antway otay abandonway isthay amegay andway eturnray otay {STRING}?
+STR_00CB_1                                                      :{BLACK}1
+STR_00CC_2                                                      :{BLACK}2
+STR_00CD_3                                                      :{BLACK}3
+STR_00CE_4                                                      :{BLACK}4
+STR_00CF_5                                                      :{BLACK}5
+STR_00D0_NOTHING                                                :Othingnay
+STR_00D1_DARK_BLUE                                              :Arkday Ueblay
+STR_00D2_PALE_GREEN                                             :Alepay Eengray
+STR_00D3_PINK                                                   :Inkpay
+STR_00D4_YELLOW                                                 :Ellowyay
+STR_00D5_RED                                                    :Edray
+STR_00D6_LIGHT_BLUE                                             :Ightlay Ueblay
+STR_00D7_GREEN                                                  :Eengray
+STR_00D8_DARK_GREEN                                             :Arkday Eengray
+STR_00D9_BLUE                                                   :Ueblay
+STR_00DA_CREAM                                                  :Eamcray
+STR_00DB_MAUVE                                                  :Auvemay
+STR_00DC_PURPLE                                                 :Urplepay
+STR_00DD_ORANGE                                                 :Orangeway
+STR_00DE_BROWN                                                  :Ownbray
+STR_00DF_GREY                                                   :Eygray
+STR_00E0_WHITE                                                  :Itewhay
+STR_00E1_TOO_MANY_VEHICLES_IN_GAME                              :{WHITE}Ootay anymay ehiclesvay inway amegay
+STR_00E2                                                        :{BLACK}{COMMA}
+STR_00E3                                                        :{RED}{COMMA}
+STR_00E4_LOCATION                                               :{BLACK}Ocationlay
+STR_00E5_CONTOURS                                               :Ontourscay
+STR_00E6_VEHICLES                                               :Ehiclesvay
+STR_00E7_INDUSTRIES                                             :Industriesway
+STR_00E8_ROUTES                                                 :Outesray
+STR_00E9_VEGETATION                                             :Egetationvay
+STR_00EA_OWNERS                                                 :Ownersway
+STR_00EB_ROADS                                                  :{BLACK}{TINYFONT}Oadsray
+STR_00EC_RAILROADS                                              :{BLACK}{TINYFONT}Ailwaysray
+STR_00ED_STATIONS_AIRPORTS_DOCKS                                :{BLACK}{TINYFONT}Ationsstay/Airportsway/Ocksday
+STR_00EE_BUILDINGS_INDUSTRIES                                   :{BLACK}{TINYFONT}Uildingsbay/Industriesway
+STR_00EF_VEHICLES                                               :{BLACK}{TINYFONT}Ehiclesvay
+STR_00F0_100M                                                   :{BLACK}{TINYFONT}100may
+STR_00F1_200M                                                   :{BLACK}{TINYFONT}200may
+STR_00F2_300M                                                   :{BLACK}{TINYFONT}300may
+STR_00F3_400M                                                   :{BLACK}{TINYFONT}400may
+STR_00F4_500M                                                   :{BLACK}{TINYFONT}500may
+STR_00F5_TRAINS                                                 :{BLACK}{TINYFONT}Ainstray
+STR_00F6_ROAD_VEHICLES                                          :{BLACK}{TINYFONT}Oadray Ehiclesvay
+STR_00F7_SHIPS                                                  :{BLACK}{TINYFONT}Ipsshay
+STR_00F8_AIRCRAFT                                               :{BLACK}{TINYFONT}Aircraftway
+STR_00F9_TRANSPORT_ROUTES                                       :{BLACK}{TINYFONT}Ansporttray Outesray
+STR_00FA_COAL_MINE                                              :{BLACK}{TINYFONT}Oalcay Inemay
+STR_00FB_POWER_STATION                                          :{BLACK}{TINYFONT}Owerpay Ationstay
+STR_00FC_FOREST                                                 :{BLACK}{TINYFONT}Orestfay
+STR_00FD_SAWMILL                                                :{BLACK}{TINYFONT}Awmillsay
+STR_00FE_OIL_REFINERY                                           :{BLACK}{TINYFONT}Oilway Efineryray
+STR_00FF_FARM                                                   :{BLACK}{TINYFONT}Armfay
+STR_0100_FACTORY                                                :{BLACK}{TINYFONT}Actoryfay
+STR_0101_PRINTING_WORKS                                         :{BLACK}{TINYFONT}Intingpray Orksway
+STR_0102_OIL_WELLS                                              :{BLACK}{TINYFONT}Oilway Ellsway
+STR_0103_IRON_ORE_MINE                                          :{BLACK}{TINYFONT}Ironway Oreway Inemay
+STR_0104_STEEL_MILL                                             :{BLACK}{TINYFONT}Eelstay Illmay
+STR_0105_BANK                                                   :{BLACK}{TINYFONT}Ankbay
+STR_0106_PAPER_MILL                                             :{BLACK}{TINYFONT}Aperpay Illmay
+STR_0107_GOLD_MINE                                              :{BLACK}{TINYFONT}Oldgay Inemay
+STR_0108_FOOD_PROCESSING_PLANT                                  :{BLACK}{TINYFONT}Oodfay Ocessingpray Antplay
+STR_0109_DIAMOND_MINE                                           :{BLACK}{TINYFONT}Iamondday Inemay
+STR_010A_COPPER_ORE_MINE                                        :{BLACK}{TINYFONT}Oppercay Oreway Inemay
+STR_010B_FRUIT_PLANTATION                                       :{BLACK}{TINYFONT}Uitfray Antationplay
+STR_010C_RUBBER_PLANTATION                                      :{BLACK}{TINYFONT}Ubberray Antationplay
+STR_010D_WATER_SUPPLY                                           :{BLACK}{TINYFONT}Aterway Upplysay
+STR_010E_WATER_TOWER                                            :{BLACK}{TINYFONT}Aterway Owertay
+STR_010F_LUMBER_MILL                                            :{BLACK}{TINYFONT}Umberlay Illmay
+STR_0110_COTTON_CANDY_FOREST                                    :{BLACK}{TINYFONT}Andyflosscay Orestfay
+STR_0111_CANDY_FACTORY                                          :{BLACK}{TINYFONT}Eetsway Actoryfay
+STR_0112_BATTERY_FARM                                           :{BLACK}{TINYFONT}Atterybay Armfay
+STR_0113_COLA_WELLS                                             :{BLACK}{TINYFONT}Olacay Ellsway
+STR_0114_TOY_SHOP                                               :{BLACK}{TINYFONT}Oytay Opshay
+STR_0115_TOY_FACTORY                                            :{BLACK}{TINYFONT}Oytay Actoryfay
+STR_0116_PLASTIC_FOUNTAINS                                      :{BLACK}{TINYFONT}Asticplay Ountainsfay
+STR_0117_FIZZY_DRINK_FACTORY                                    :{BLACK}{TINYFONT}Izzyfay Inkdray Actoryfay
+STR_0118_BUBBLE_GENERATOR                                       :{BLACK}{TINYFONT}Ubblebay Eneratorgay
+STR_0119_TOFFEE_QUARRY                                          :{BLACK}{TINYFONT}Offeetay Arryquay
+STR_011A_SUGAR_MINE                                             :{BLACK}{TINYFONT}Ugarsay Inemay
+STR_011B_RAILROAD_STATION                                       :{BLACK}{TINYFONT}Ailwayray Ationstay
+STR_011C_TRUCK_LOADING_BAY                                      :{BLACK}{TINYFONT}Orrylay Oadinglay Aybay
+STR_011D_BUS_STATION                                            :{BLACK}{TINYFONT}Usbay Ationstay
+STR_011E_AIRPORT_HELIPORT                                       :{BLACK}{TINYFONT}Airportway/Eliporthay
+STR_011F_DOCK                                                   :{BLACK}{TINYFONT}Ockday
+STR_0120_ROUGH_LAND                                             :{BLACK}{TINYFONT}Oughray Andlay
+STR_0121_GRASS_LAND                                             :{BLACK}{TINYFONT}Assgray Andlay
+STR_0122_BARE_LAND                                              :{BLACK}{TINYFONT}Arebay Andlay
+STR_0123_FIELDS                                                 :{BLACK}{TINYFONT}Ieldsfay
+STR_0124_TREES                                                  :{BLACK}{TINYFONT}Eestray
+STR_0125_ROCKS                                                  :{BLACK}{TINYFONT}Ocksray
+STR_0126_WATER                                                  :{BLACK}{TINYFONT}Aterway
+STR_0127_NO_OWNER                                               :{BLACK}{TINYFONT}Onay Ownerway
+STR_0128_TOWNS                                                  :{BLACK}{TINYFONT}Ownstay
+STR_0129_INDUSTRIES                                             :{BLACK}{TINYFONT}Industriesway
+STR_012A_DESERT                                                 :{BLACK}{TINYFONT}Esertday
+STR_012B_SNOW                                                   :{BLACK}{TINYFONT}Owsnay
+STR_012C_MESSAGE                                                :{WHITE}Essagemay
+STR_012D                                                        :{WHITE}{STRING}
+STR_012E_CANCEL                                                 :{BLACK}Ancelcay
+STR_012F_OK                                                     :{BLACK}OKWAY
+STR_0130_RENAME                                                 :{BLACK}Enameray
+STR_0131_TOO_MANY_NAMES_DEFINED                                 :{WHITE}Ootay anymay amesnay efinedday
+STR_0132_CHOSEN_NAME_IN_USE_ALREADY                             :{WHITE}Osenchay amenay alreadyway inway useway
+
+STR_0133_WINDOWS                                                :Indowsway
+STR_0134_UNIX                                                   :Unixway
+STR_0135_OSX                                                    :OSWAY Xay
+STR_OSNAME_BEOS                                                 :EOSbay
+STR_OSNAME_MORPHOS                                              :OrphOSmay
+STR_OSNAME_AMIGAOS                                              :AmigaOSWAY
+STR_OSNAME_OS2                                                  :OSWAY/2
+STR_OSNAME_SUNOS                                                :UnOSsay
+
+STR_013B_OWNED_BY                                               :{WHITE}...ownedway ybay {STRING}
+STR_013C_CARGO                                                  :{BLACK}Argocay
+STR_013D_INFORMATION                                            :{BLACK}Informationway
+STR_013E_CAPACITIES                                             :{BLACK}Apacitiescay
+STR_013E_TOTAL_CARGO                                            :{BLACK}Otaltay Argocay
+STR_013F_CAPACITY                                               :{BLACK}Apacitycay: {LTBLUE}{CARGO}
+STR_CAPACITY_MULT                                               :{BLACK}Apacitycay: {LTBLUE}{CARGO} (xay{NUM})
+STR_013F_TOTAL_CAPACITY_TEXT                                    :{BLACK}Otaltay argocay apacitycay ofway isthay aintray:
+STR_013F_TOTAL_CAPACITY                                         :{LTBLUE}- {CARGO} ({SHORTCARGO})
+STR_TOTAL_CAPACITY_MULT                                         :{LTBLUE}- {CARGO} ({SHORTCARGO}) (xay{NUM})
+STR_0140_NEW_GAME                                               :{BLACK}Ewnay Amegay
+STR_0141_LOAD_GAME                                              :{BLACK}Oadlay Amegay
+STR_SINGLE_PLAYER                                               :{BLACK}Inglesay ayerplay
+STR_MULTIPLAYER                                                 :{BLACK}Ultiplayermay
+STR_SCENARIO_EDITOR                                             :{BLACK}Enarioscay Editorway
+
+STR_64                                                          :64
+STR_128                                                         :128
+STR_256                                                         :256
+STR_512                                                         :512
+STR_1024                                                        :1024
+STR_2048                                                        :2048
+STR_MAPSIZE                                                     :{BLACK}Apmay izesay:
+STR_BY                                                          :{BLACK}*
+STR_0148_GAME_OPTIONS                                           :{BLACK}Amegay Optionsway
+
+STR_0150_SOMEONE                                                :omeonesay{SKIP}{SKIP}
+STR_0151_MAP_OF_WORLD                                           :Apmay ofway orldway
+STR_0152_TOWN_DIRECTORY                                         :Owntay irectoryday
+STR_0153_SUBSIDIES                                              :Ubsidiessay
+
+STR_UNITS_IMPERIAL                                              :Imperialway
+STR_UNITS_METRIC                                                :Etricmay
+STR_UNITS_SI                                                    :ISay
+
+STR_UNITS_VELOCITY_IMPERIAL                                     :{COMMA} mphay
+STR_UNITS_VELOCITY_METRIC                                       :{COMMA} kmay/hay
+STR_UNITS_VELOCITY_SI                                           :{COMMA} may/say
+
+STR_UNITS_POWER_IMPERIAL                                        :{COMMA}hpay
+STR_UNITS_POWER_METRIC                                          :{COMMA}hpay
+STR_UNITS_POWER_SI                                              :{COMMA}kWay
+
+STR_UNITS_WEIGHT_SHORT_IMPERIAL                                 :{COMMA}tay
+STR_UNITS_WEIGHT_SHORT_METRIC                                   :{COMMA}tay
+STR_UNITS_WEIGHT_SHORT_SI                                       :{COMMA}kgay
+
+STR_UNITS_WEIGHT_LONG_IMPERIAL                                  :{COMMA} on{P "" s}tay
+STR_UNITS_WEIGHT_LONG_METRIC                                    :{COMMA} onne{P "" s}tay
+STR_UNITS_WEIGHT_LONG_SI                                        :{COMMA} kgay
+
+STR_UNITS_VOLUME_SHORT_IMPERIAL                                 :{COMMA}algay
+STR_UNITS_VOLUME_SHORT_METRIC                                   :{COMMA}lay
+STR_UNITS_VOLUME_SHORT_SI                                       :{COMMA}may³
+
+STR_UNITS_VOLUME_LONG_IMPERIAL                                  :{COMMA} allon{P "" s}gay
+STR_UNITS_VOLUME_LONG_METRIC                                    :{COMMA} itre{P "" s}lay
+STR_UNITS_VOLUME_LONG_SI                                        :{COMMA} may³
+
+STR_UNITS_FORCE_IMPERIAL                                        :{COMMA}xay10³ lbfay
+STR_UNITS_FORCE_METRIC                                          :{COMMA} ontay orcefay
+STR_UNITS_FORCE_SI                                              :{COMMA} kNay
+
+############ range for menu starts
+STR_0154_OPERATING_PROFIT_GRAPH                                 :Operatingway ofitpray aphgray
+STR_0155_INCOME_GRAPH                                           :Incomeway aphgray
+STR_0156_DELIVERED_CARGO_GRAPH                                  :Eliveredday argocay aphgray
+STR_0157_PERFORMANCE_HISTORY_GRAPH                              :Erformancepay istoryhay aphgray
+STR_0158_COMPANY_VALUE_GRAPH                                    :Ompanycay aluevay aphgray
+STR_0159_CARGO_PAYMENT_RATES                                    :Argocay aymentpay atesray
+STR_015A_COMPANY_LEAGUE_TABLE                                   :Ompanycay eaguelay abletay
+STR_PERFORMANCE_DETAIL_MENU                                     :Etailedday erformancepay atingray
+############ range for menu ends
+
+STR_015B_OPENTTD                                                :{WHITE}Aboutway OpenTTDWAY
+STR_015C_SAVE_GAME                                              :Avesay amegay
+STR_015D_LOAD_GAME                                              :Oadlay amegay
+STR_015E_QUIT_GAME                                              :Abandonway amegay
+STR_015F_QUIT                                                   :Exitway
+STR_ABANDON_GAME_QUERY                                          :{YELLOW}Areway ouyay uresay ouyay antway otay abandonway isthay amegay?
+STR_0161_QUIT_GAME                                              :{WHITE}Abandonway Amegay
+STR_SORT_ORDER_TIP                                              :{BLACK}Electsay ortingsay orderway (escendingday/ascendingway)
+STR_SORT_CRITERIA_TIP                                           :{BLACK}Electsay ortingsay iteriacray
+STR_SORT_BY                                                     :{BLACK}Ortsay ybay
+
+STR_SORT_BY_POPULATION                                          :{BLACK}Opulationpay
+STR_SORT_BY_PRODUCTION                                          :{BLACK}Oductionpray
+STR_SORT_BY_TYPE                                                :{BLACK}Ypetay
+STR_SORT_BY_TRANSPORTED                                         :{BLACK}Ansportedtray
+STR_SORT_BY_NAME                                                :{BLACK}Amenay
+STR_SORT_BY_DROPDOWN_NAME                                       :Amenay
+STR_SORT_BY_DATE                                                :{BLACK}Ateday
+STR_SORT_BY_NUMBER                                              :Umbernay
+STR_SORT_BY_PROFIT_LAST_YEAR                                    :Ofitpray astlay earyay
+STR_SORT_BY_PROFIT_THIS_YEAR                                    :Ofitpray isthay earyay
+STR_SORT_BY_AGE                                                 :Ageway
+STR_SORT_BY_RELIABILITY                                         :Eliabilityray
+STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE                        :Otaltay apacitycay erpay argocay ypetay
+STR_SORT_BY_MAX_SPEED                                           :Aximummay eedspay
+STR_SORT_BY_MODEL                                               :Odelmay
+STR_SORT_BY_VALUE                                               :Aluevay
+STR_SORT_BY_FACILITY                                            :Ationstay ypetay
+STR_SORT_BY_WAITING                                             :Aitingway argocay aluevay
+STR_SORT_BY_RATING_MAX                                          :Argocay atingray
+STR_ENGINE_SORT_ENGINE_ID                                       :EngineIDWAY (assicclay ortsay)
+STR_ENGINE_SORT_COST                                            :Ostcay
+STR_ENGINE_SORT_POWER                                           :Owerpay
+STR_ENGINE_SORT_INTRO_DATE                                      :Introductionway Ateday
+STR_ENGINE_SORT_RUNNING_COST                                    :Unningray Ostcay
+STR_ENGINE_SORT_POWER_VS_RUNNING_COST                           :Owerpay/Unningray Ostcay
+STR_ENGINE_SORT_CARGO_CAPACITY                                  :Argocay Apacitycay
+STR_NO_WAITING_CARGO                                            :{BLACK}Onay argocay ofway anyway ypetay isway aitingway
+STR_SELECT_ALL_FACILITIES                                       :{BLACK}Electsay allway acilitiesfay
+STR_SELECT_ALL_TYPES                                            :{BLACK}Electsay allway argocay ypestay (includingway onay aitingway argocay)
+STR_AVAILABLE_TRAINS                                            :{BLACK}Availableway Ainstray
+STR_AVAILABLE_ROAD_VEHICLES                                     :{BLACK}Availableway Ehiclesvay
+STR_AVAILABLE_SHIPS                                             :{BLACK}Availableway Ipsshay
+STR_AVAILABLE_AIRCRAFT                                          :{BLACK}Availableway Aircraftway
+STR_AVAILABLE_ENGINES_TIP                                       :{BLACK}Eesay away istlay ofway availableway engineway esignsday orfay isthay ehiclevay ypetay.
+STR_MANAGE_LIST                                                 :{BLACK}Anagemay istlay
+STR_MANAGE_LIST_TIP                                             :{BLACK}Endsay instructionsway otay allway ehiclesvay inway isthay istlay
+STR_REPLACE_VEHICLES                                            :Eplaceray ehiclesvay
+STR_SEND_TRAIN_TO_DEPOT                                         :Endsay otay Epotday
+STR_SEND_ROAD_VEHICLE_TO_DEPOT                                  :Endsay otay Epotday
+STR_SEND_SHIP_TO_DEPOT                                          :Endsay otay Epotday
+STR_SEND_AIRCRAFT_TO_HANGAR                                     :Endsay otay Angarhay
+STR_SEND_FOR_SERVICING                                          :Endsay orfay Ervicingsay
+
+############ range for months starts
+STR_0162_JAN                                                    :Anjay
+STR_0163_FEB                                                    :Ebfay
+STR_0164_MAR                                                    :Armay
+STR_0165_APR                                                    :Aprway
+STR_0166_MAY                                                    :Aymay
+STR_0167_JUN                                                    :Unjay
+STR_0168_JUL                                                    :Uljay
+STR_0169_AUG                                                    :Augway
+STR_016A_SEP                                                    :Epsay
+STR_016B_OCT                                                    :Octway
+STR_016C_NOV                                                    :Ovnay
+STR_016D_DEC                                                    :Ecday
+############ range for months ends
+
+STR_016E                                                        :{TINYFONT}{STRING}{} {STRING}
+STR_016F                                                        :{TINYFONT}{STRING}{} {STRING}{}{NUM}
+STR_0170                                                        :{TINYFONT}{STRING}-
+STR_0171_PAUSE_GAME                                             :{BLACK}Ausepay amegay
+STR_0172_SAVE_GAME_ABANDON_GAME                                 :{BLACK}Avesay amegay, abandonway amegay, itquay
+STR_0173_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Isplayday istlay ofway ompany'scay ationsstay
+STR_0174_DISPLAY_MAP                                            :{BLACK}Isplayday apmay
+STR_0175_DISPLAY_MAP_TOWN_DIRECTORY                             :{BLACK}Isplayday apmay, owntay irectoryday
+STR_0176_DISPLAY_TOWN_DIRECTORY                                 :{BLACK}Isplayday owntay irectoryday
+STR_0177_DISPLAY_COMPANY_FINANCES                               :{BLACK}Isplayday ompanycay inancesfay informationway
+STR_0178_DISPLAY_COMPANY_GENERAL                                :{BLACK}Isplayday eneralgay ompanycay informationway
+STR_0179_DISPLAY_GRAPHS                                         :{BLACK}Isplayday aphsgray
+STR_017A_DISPLAY_COMPANY_LEAGUE                                 :{BLACK}Isplayday ompanycay eaguelay abletay
+STR_017B_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Isplayday istlay ofway ompany'scay ainstray
+STR_017C_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Isplayday istlay ofway ompany'scay oadray ehiclesvay
+STR_017D_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Isplayday istlay ofway ompany'scay ipsshay
+STR_017E_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Isplayday istlay ofway ompany'scay aircraftway
+STR_017F_ZOOM_THE_VIEW_IN                                       :{BLACK}Oomzay ethay iewvay inway
+STR_0180_ZOOM_THE_VIEW_OUT                                      :{BLACK}Oomzay ethay iewvay outway
+STR_0181_BUILD_RAILROAD_TRACK                                   :{BLACK}Uildbay ailwayray acktray
+STR_0182_BUILD_ROADS                                            :{BLACK}Uildbay oadsray
+STR_0183_BUILD_SHIP_DOCKS                                       :{BLACK}Uildbay ipshay ocksday
+STR_0184_BUILD_AIRPORTS                                         :{BLACK}Uildbay airportsway
+STR_0185_PLANT_TREES_PLACE_SIGNS                                :{BLACK}Antplay eestray, aceplay ignssay etcway.
+STR_0186_LAND_BLOCK_INFORMATION                                 :{BLACK}Andlay areaway informationway
+STR_0187_OPTIONS                                                :{BLACK}Optionsway
+STR_0188                                                        :{BLACK}{SMALLUPARROW}
+STR_0189                                                        :{BLACK}{SMALLDOWNARROW}
+STR_018A_CAN_T_CHANGE_SERVICING                                 :{WHITE}An'tcay angechay ervicingsay intervalway...
+STR_018B_CLOSE_WINDOW                                           :{BLACK}Oseclay indowway
+STR_018C_WINDOW_TITLE_DRAG_THIS                                 :{BLACK}Indowway itletay - agdray isthay otay ovemay indowway
+STR_STICKY_BUTTON                                               :{BLACK}Arkmay isthay indowway asway uncloseableway ybay ethay 'Oseclay Allway Indows'way eykay
+STR_RESIZE_BUTTON                                               :{BLACK}Ickclay andway agdray otay esizeray isthay indowway
+STR_SAVELOAD_HOME_BUTTON                                        :{BLACK}Ickclay erehay otay umpjay otay ethay urrentcay efaultday avesay/oadlay irectoryday
+STR_018D_DEMOLISH_BUILDINGS_ETC                                 :{BLACK}Emolishday uildingsbay etcway. onway away aresquay ofway andlay
+STR_018E_LOWER_A_CORNER_OF_LAND                                 :{BLACK}Owerlay away ornercay ofway andlay
+STR_018F_RAISE_A_CORNER_OF_LAND                                 :{BLACK}Aiseray away ornercay ofway andlay
+STR_0190_SCROLL_BAR_SCROLLS_LIST                                :{BLACK}Ollscray arbay - ollsscray istlay upway/ownday
+STR_HSCROLL_BAR_SCROLLS_LIST                                    :{BLACK}Ollscray arbay - ollsscray istlay eftlay/ightray
+STR_0191_SHOW_LAND_CONTOURS_ON_MAP                              :{BLACK}Owshay andlay ontourscay onway apmay
+STR_0192_SHOW_VEHICLES_ON_MAP                                   :{BLACK}Owshay ehiclesvay onway apmay
+STR_0193_SHOW_INDUSTRIES_ON_MAP                                 :{BLACK}Owshay industriesway onway apmay
+STR_0194_SHOW_TRANSPORT_ROUTES_ON                               :{BLACK}Owshay ansporttray outesray onway apmay
+STR_0195_SHOW_VEGETATION_ON_MAP                                 :{BLACK}Owshay egetationvay onway apmay
+STR_0196_SHOW_LAND_OWNERS_ON_MAP                                :{BLACK}Owshay andlay ownersway onway apmay
+STR_0197_TOGGLE_TOWN_NAMES_ON_OFF                               :{BLACK}Oggletay owntay amesnay onway/offway onway apmay
+STR_0198_PROFIT_THIS_YEAR_LAST_YEAR                             :{TINYFONT}{BLACK}Ofitpray isthay earyay: {CURRENCY} (astlay earyay: {CURRENCY})
+
+############ range for service numbers starts
+STR_AGE                                                         :{COMMA} ear{P "" s}yay ({COMMA})
+STR_AGE_RED                                                     :{RED}{COMMA} ear{P "" s}yay ({COMMA})
+############ range for service numbers ends
+
+STR_019C_ROAD_VEHICLE                                           :Oadray ehiclevay
+STR_019D_AIRCRAFT                                               :Aircraftway
+STR_019E_SHIP                                                   :Ipshay
+STR_019F_TRAIN                                                  :Aintray
+STR_01A0_IS_GETTING_OLD                                         :{WHITE}{STRING} {COMMA} isway ettinggay oldway
+STR_01A1_IS_GETTING_VERY_OLD                                    :{WHITE}{STRING} {COMMA} isway ettinggay eryvay oldway
+STR_01A2_IS_GETTING_VERY_OLD_AND                                :{WHITE}{STRING} {COMMA} isway ettinggay eryvay oldway andway urgentlyway eedsnay eplacingray
+STR_01A3_LAND_AREA_INFORMATION                                  :{WHITE}Andlay Areaway Informationway
+STR_01A4_COST_TO_CLEAR_N_A                                      :{BLACK}Ostcay otay earclay: {LTBLUE}Nay/Away
+STR_01A5_COST_TO_CLEAR                                          :{BLACK}Ostcay otay earclay: {LTBLUE}{CURRENCY}
+STR_01A6_N_A                                                    :Nay/Away
+STR_01A7_OWNER                                                  :{BLACK}Ownerway: {LTBLUE}{STRING}
+STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Ocallay authorityway: {LTBLUE}{STRING}
+STR_01A9_NONE                                                   :Onenay
+STR_01AA_NAME                                                   :{BLACK}Amenay
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
+
+############ range for days starts
+STR_01AC_1ST                                                    :1stay
+STR_01AD_2ND                                                    :2nday
+STR_01AE_3RD                                                    :3rday
+STR_01AF_4TH                                                    :4thay
+STR_01B0_5TH                                                    :5thay
+STR_01B1_6TH                                                    :6thay
+STR_01B2_7TH                                                    :7thay
+STR_01B3_8TH                                                    :8thay
+STR_01B4_9TH                                                    :9thay
+STR_01B5_10TH                                                   :10thay
+STR_01B6_11TH                                                   :11thay
+STR_01B7_12TH                                                   :12thay
+STR_01B8_13TH                                                   :13thay
+STR_01B9_14TH                                                   :14thay
+STR_01BA_15TH                                                   :15thay
+STR_01BB_16TH                                                   :16thay
+STR_01BC_17TH                                                   :17thay
+STR_01BD_18TH                                                   :18thay
+STR_01BE_19TH                                                   :19thay
+STR_01BF_20TH                                                   :20thay
+STR_01C0_21ST                                                   :21stay
+STR_01C1_22ND                                                   :22nday
+STR_01C2_23RD                                                   :23rday
+STR_01C3_24TH                                                   :24thay
+STR_01C4_25TH                                                   :25thay
+STR_01C5_26TH                                                   :26thay
+STR_01C6_27TH                                                   :27thay
+STR_01C7_28TH                                                   :28thay
+STR_01C8_29TH                                                   :29thay
+STR_01C9_30TH                                                   :30thay
+STR_01CA_31ST                                                   :31stay
+############ range for days ends
+
+STR_01CB                                                        :{TINYFONT}{COMMA}
+
+STR_01CE_CARGO_ACCEPTED                                         :{BLACK}Argocay acceptedway: {LTBLUE}
+
+STR_01D1_8                                                      :({COMMA}/8 {STRING})
+STR_01D2_JAZZ_JUKEBOX                                           :{WHITE}Azzjay Ukeboxjay
+STR_01D3_SOUND_MUSIC                                            :Oundsay/usicmay
+STR_01D4_SHOW_SOUND_MUSIC_WINDOW                                :{BLACK}Owshay oundsay/usicmay indowway
+STR_01D5_ALL                                                    :{TINYFONT}Allway
+STR_01D6_OLD_STYLE                                              :{TINYFONT}Oldway Ylestay
+STR_01D7_NEW_STYLE                                              :{TINYFONT}Ewnay Ylestay
+STR_01D8_EZY_STREET                                             :{TINYFONT}Ezyway Eetstray
+STR_01D9_CUSTOM_1                                               :{TINYFONT}Ustomcay 1
+STR_01DA_CUSTOM_2                                               :{TINYFONT}Ustomcay 2
+STR_01DB_MUSIC_VOLUME                                           :{BLACK}{TINYFONT}Usicmay Olumevay
+STR_01DC_EFFECTS_VOLUME                                         :{BLACK}{TINYFONT}Effectsway Olumevay
+STR_01DD_MIN_MAX                                                :{BLACK}{TINYFONT}INMay  '  '  ' '  '  '  MAXay
+STR_01DE_SKIP_TO_PREVIOUS_TRACK                                 :{BLACK}Ipskay otay eviouspray acktray inway electionsay
+STR_01DF_SKIP_TO_NEXT_TRACK_IN_SELECTION                        :{BLACK}Ipskay otay extnay acktray inway electionsay
+STR_01E0_STOP_PLAYING_MUSIC                                     :{BLACK}Opstay ayingplay usicmay
+STR_01E1_START_PLAYING_MUSIC                                    :{BLACK}Artstay ayingplay usicmay
+STR_01E2_DRAG_SLIDERS_TO_SET_MUSIC                              :{BLACK}Agdray idersslay otay etsay usicmay andway oundsay effectway olumesvay
+STR_01E3                                                        :{DKGREEN}{TINYFONT}--
+STR_01E4_0                                                      :{DKGREEN}{TINYFONT}0{COMMA}
+STR_01E5                                                        :{DKGREEN}{TINYFONT}{COMMA}
+STR_01E6                                                        :{DKGREEN}{TINYFONT}------
+STR_01E7                                                        :{DKGREEN}{TINYFONT}"{STRING}"
+STR_01E8_TRACK_XTITLE                                           :{BLACK}{TINYFONT}Acktray{SETX 88}Itletay
+STR_01E9_SHUFFLE                                                :{TINYFONT}Uffleshay
+STR_01EA_PROGRAM                                                :{TINYFONT}{BLACK}Ogrammepray
+STR_01EB_MUSIC_PROGRAM_SELECTION                                :{WHITE}Usicmay Ogrammepray Electionsay
+STR_01EC_0                                                      :{TINYFONT}{LTBLUE}0{COMMA} "{STRING}"
+STR_01ED                                                        :{TINYFONT}{LTBLUE}{COMMA} "{STRING}"
+STR_01EE_TRACK_INDEX                                            :{TINYFONT}{BLACK}Acktray Indexway
+STR_01EF_PROGRAM                                                :{TINYFONT}{BLACK}Ogrammepray - '{STRING}'
+STR_01F0_CLEAR                                                  :{TINYFONT}{BLACK}Earclay
+STR_01F1_SAVE                                                   :{TINYFONT}{BLACK}Avesay
+STR_01F2_CURRENT_PROGRAM_OF_MUSIC                               :{BLACK}Urrentcay ogrammepray ofway usicmay ackstray
+STR_01F3_SELECT_ALL_TRACKS_PROGRAM                              :{BLACK}Electsay 'allway acks'tray ogrammepray
+STR_01F4_SELECT_OLD_STYLE_MUSIC                                 :{BLACK}Electsay 'oldway ylestay usic'may ogrammepray
+STR_01F5_SELECT_NEW_STYLE_MUSIC                                 :{BLACK}Electsay 'ewnay ylestay usic'may ogrammepray
+STR_01F6_SELECT_CUSTOM_1_USER_DEFINED                           :{BLACK}Electsay 'Ustomcay 1' (userway-efinedday) ogrammepray
+STR_01F7_SELECT_CUSTOM_2_USER_DEFINED                           :{BLACK}Electsay 'Ustomcay 2' (userway-efinedday) ogrammepray
+STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1                          :{BLACK}Earclay urrentcay ogrammepray (Ustomcay1 orway Ustomcay2 onlyway)
+STR_01F9_SAVE_MUSIC_SETTINGS                                    :{BLACK}Avesay usicmay ettingssay
+STR_01FA_CLICK_ON_MUSIC_TRACK_TO                                :{BLACK}Ickclay onway usicmay acktray otay addway otay urrentcay ogrammepray (Ustomcay1 orway Ustomcay2 onlyway)
+STR_CLICK_ON_TRACK_TO_REMOVE                                    :{BLACK}Ickclay onway usicmay acktray otay emoveray itway omfray urrentcay ogrammepray (Ustomcay1 orway Ustomcay2 onlyway)
+STR_01FB_TOGGLE_PROGRAM_SHUFFLE                                 :{BLACK}Oggletay ogrammepray uffleshay onway/offway
+STR_01FC_SHOW_MUSIC_TRACK_SELECTION                             :{BLACK}Owshay usicmay acktray electionsay indowway
+STR_01FD_CLICK_ON_SERVICE_TO_CENTER                             :{BLACK}Ickclay onway ervicesay otay entrecay iewvay onway industryway/owntay
+STR_01FE_DIFFICULTY                                             :{BLACK}Ifficultyday ({STRING})
+STR_01FF                                                        :{TINYFONT}{BLACK}{DATE_LONG}
+STR_0200_LAST_MESSAGE_NEWS_REPORT                               :Astlay essagemay/ewsnay eportray
+STR_0201_MESSAGE_SETTINGS                                       :Essagemay ettingssay
+STR_MESSAGE_HISTORY_MENU                                        :Essagemay Istoryhay
+STR_0203_SHOW_LAST_MESSAGE_NEWS                                 :{BLACK}Owshay astlay essagemay/ewsnay eportray, owshay essagemay optionsway
+STR_0204_MESSAGE_OPTIONS                                        :{WHITE}Essagemay Optionsway
+STR_0205_MESSAGE_TYPES                                          :{BLACK}Essagemay ypestay:
+STR_0206_ARRIVAL_OF_FIRST_VEHICLE                               :{YELLOW}Arrivalway ofway irstfay ehiclevay atway ayer'splay ationstay
+STR_0207_ARRIVAL_OF_FIRST_VEHICLE                               :{YELLOW}Arrivalway ofway irstfay ehiclevay atway ompetitor'scay ationstay
+STR_0208_ACCIDENTS_DISASTERS                                    :{YELLOW}Accidentsway / isastersday
+STR_0209_COMPANY_INFORMATION                                    :{YELLOW}Ompanycay informationway
+STR_NEWS_OPEN_CLOSE                                             :{YELLOW}Openway / oseclay ofway industriesway
+STR_020A_ECONOMY_CHANGES                                        :{YELLOW}Economyway angeschay
+STR_020B_ADVICE_INFORMATION_ON_PLAYER                           :{YELLOW}Adviceway / informationway onway ayer'splay ehiclesvay
+STR_020C_NEW_VEHICLES                                           :{YELLOW}Ewnay ehiclesvay
+STR_020D_CHANGES_OF_CARGO_ACCEPTANCE                            :{YELLOW}Angeschay otay argocay acceptanceway
+STR_020E_SUBSIDIES                                              :{YELLOW}Ubsidiessay
+STR_020F_GENERAL_INFORMATION                                    :{YELLOW}Eneralgay informationway
+STR_MESSAGES_ALL                                                :{YELLOW}Etsay allway essagemay ypestay otay: Offway / Ummarysay/ Ullfay
+STR_MESSAGE_SOUND                                               :{YELLOW}Ayplay oundsay orfay ummarisedsay ewsnay essagesmay
+STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO                       :{WHITE}...ootay arfay omfray eviouspray estinationday
+STR_0211_TOP_COMPANIES_WHO_REACHED                              :{BIGFONT}{BLACK}Optay ompaniescay owhay eachedray {NUM}{}({STRING} Evellay)
+STR_TOP_COMPANIES_NETWORK_GAME                                  :{BIGFONT}{BLACK}Ompanycay Eaguelay Abletay inway {NUM}
+STR_0212                                                        :{BIGFONT}{COMMA}.
+STR_0213_BUSINESSMAN                                            :Usinessmanbay
+STR_0214_ENTREPRENEUR                                           :Entrepreneurway
+STR_0215_INDUSTRIALIST                                          :Industrialistway
+STR_0216_CAPITALIST                                             :Apitalistcay
+STR_0217_MAGNATE                                                :Agnatemay
+STR_0218_MOGUL                                                  :Ogulmay
+STR_0219_TYCOON_OF_THE_CENTURY                                  :Ycoontay ofway ethay Enturycay
+STR_HIGHSCORE_NAME                                              :{BIGFONT}{PLAYERNAME}, {COMPANY}
+STR_HIGHSCORE_STATS                                             :{BIGFONT}'{STRING}'   ({COMMA})
+STR_021B_ACHIEVES_STATUS                                        :{BLACK}{BIGFONT}{COMPANY} achievesway '{STRING}' atusstay!
+STR_021C_OF_ACHIEVES_STATUS                                     :{WHITE}{BIGFONT}{PLAYERNAME} ofway {COMPANY} achievesway '{STRING}' atusstay!
+STR_021F                                                        :{BLUE}{COMMA}
+STR_0221_OPENTTD                                                :{YELLOW}OpenTTDWAY
+STR_0222_SCENARIO_EDITOR                                        :{YELLOW}Enarioscay Editorway
+STR_0223_LAND_GENERATION                                        :{WHITE}Andlay Enerationgay
+STR_0224                                                        :{BLACK}{UPARROW}
+STR_0225                                                        :{BLACK}{DOWNARROW}
+STR_0228_INCREASE_SIZE_OF_LAND_AREA                             :{BLACK}Increaseway areaway ofway andlay otay owerlay/aiseray
+STR_0229_DECREASE_SIZE_OF_LAND_AREA                             :{BLACK}Ecreaseday areaway ofway andlay otay owerlay/aiseray
+STR_022A_GENERATE_RANDOM_LAND                                   :{BLACK}Enerategay andomray andlay
+STR_022B_RESET_LANDSCAPE                                        :{BLACK}Esetray andscapelay
+STR_022C_RESET_LANDSCAPE                                        :{WHITE}Esetray Andscapelay
+STR_RESET_LANDSCAPE_TOOLTIP                                     :{BLACK}Emoveray allway ayerplay-ownedway opertypray omfray ethay apmay
+STR_RESET_LANDSCAPE_CONFIRMATION_TEXT                           :{WHITE}Areway ouyay uresay ouyay antway otay emoveray allway ayerplay-ownedway opertypray?
+STR_022E_LANDSCAPE_GENERATION                                   :{BLACK}Andscapelay enerationgay
+STR_022F_TOWN_GENERATION                                        :{BLACK}Owntay enerationgay
+STR_0230_INDUSTRY_GENERATION                                    :{BLACK}Industryway enerationgay
+STR_0231_ROAD_CONSTRUCTION                                      :{BLACK}Oadray onstructioncay
+STR_0233_TOWN_GENERATION                                        :{WHITE}Owntay Enerationgay
+STR_0234_NEW_TOWN                                               :{BLACK}Ewnay Owntay
+STR_0235_CONSTRUCT_NEW_TOWN                                     :{BLACK}Onstructcay ewnay owntay
+STR_0236_CAN_T_BUILD_TOWN_HERE                                  :{WHITE}An'tcay uildbay owntay erehay...
+STR_0237_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}...ootay oseclay otay edgeway ofway apmay
+STR_0238_TOO_CLOSE_TO_ANOTHER_TOWN                              :{WHITE}...ootay oseclay otay anotherway owntay
+STR_0239_SITE_UNSUITABLE                                        :{WHITE}...itesay unsuitableway
+STR_023A_TOO_MANY_TOWNS                                         :{WHITE}...ootay anymay ownstay
+STR_CANNOT_GENERATE_TOWN                                        :{WHITE}An'tcay uildbay anyway ownstay
+STR_NO_SPACE_FOR_TOWN                                           :{WHITE}...erethay isway onay oremay acespay onway ethay apmay
+STR_023B_INCREASE_SIZE_OF_TOWN                                  :{BLACK}Increaseway izesay ofway owntay
+STR_023C_EXPAND                                                 :{BLACK}Expandway
+STR_023D_RANDOM_TOWN                                            :{BLACK}Andomray Owntay
+STR_023E_BUILD_TOWN_IN_RANDOM_LOCATION                          :{BLACK}Uildbay owntay inway andomray ocationlay
+STR_023F_INDUSTRY_GENERATION                                    :{WHITE}Industryway Enerationgay
+STR_0240_COAL_MINE                                              :{BLACK}Oalcay Inemay
+STR_0241_POWER_STATION                                          :{BLACK}Owerpay Ationstay
+STR_0242_SAWMILL                                                :{BLACK}Awmillsay
+STR_0243_FOREST                                                 :{BLACK}Orestfay
+STR_0244_OIL_REFINERY                                           :{BLACK}Oilway Efineryray
+STR_0245_OIL_RIG                                                :{BLACK}Oilway Igray
+STR_0246_FACTORY                                                :{BLACK}Actoryfay
+STR_0247_STEEL_MILL                                             :{BLACK}Eelstay Illmay
+STR_0248_FARM                                                   :{BLACK}Armfay
+STR_0249_IRON_ORE_MINE                                          :{BLACK}Ironway Oreway Inemay
+STR_024A_OIL_WELLS                                              :{BLACK}Oilway Ellsway
+STR_024B_BANK                                                   :{BLACK}Ankbay
+STR_024C_PAPER_MILL                                             :{BLACK}Aperpay Illmay
+STR_024D_FOOD_PROCESSING_PLANT                                  :{BLACK}Oodfay Ocessingpray Antplay
+STR_024E_PRINTING_WORKS                                         :{BLACK}Intingpray Orksway
+STR_024F_GOLD_MINE                                              :{BLACK}Oldgay Inemay
+STR_0250_LUMBER_MILL                                            :{BLACK}Umberlay Illmay
+STR_0251_FRUIT_PLANTATION                                       :{BLACK}Uitfray Antationplay
+STR_0252_RUBBER_PLANTATION                                      :{BLACK}Ubberray Antationplay
+STR_0253_WATER_SUPPLY                                           :{BLACK}Aterway Upplysay
+STR_0254_WATER_TOWER                                            :{BLACK}Aterway Owertay
+STR_0255_DIAMOND_MINE                                           :{BLACK}Iamondday Inemay
+STR_0256_COPPER_ORE_MINE                                        :{BLACK}Oppercay Oreway Inemay
+STR_0257_COTTON_CANDY_FOREST                                    :{BLACK}Andyflosscay Orestfay
+STR_0258_CANDY_FACTORY                                          :{BLACK}Eetsway Actoryfay
+STR_0259_BATTERY_FARM                                           :{BLACK}Atterybay Armfay
+STR_025A_COLA_WELLS                                             :{BLACK}Olacay Ellsway
+STR_025B_TOY_SHOP                                               :{BLACK}Oytay Opshay
+STR_025C_TOY_FACTORY                                            :{BLACK}Oytay Actoryfay
+STR_025D_PLASTIC_FOUNTAINS                                      :{BLACK}Asticplay Ountainsfay
+STR_025E_FIZZY_DRINK_FACTORY                                    :{BLACK}Izzyfay Inkdray Actoryfay
+STR_025F_BUBBLE_GENERATOR                                       :{BLACK}Ubblebay Eneratorgay
+STR_0260_TOFFEE_QUARRY                                          :{BLACK}Offeetay Arryquay
+STR_0261_SUGAR_MINE                                             :{BLACK}Ugarsay Inemay
+STR_0262_CONSTRUCT_COAL_MINE                                    :{BLACK}Onstructcay Oalcay Inemay
+STR_0263_CONSTRUCT_POWER_STATION                                :{BLACK}Onstructcay Owerpay Ationstay
+STR_0264_CONSTRUCT_SAWMILL                                      :{BLACK}Onstructcay Awmillsay
+STR_0265_PLANT_FOREST                                           :{BLACK}Antplay Orestfay
+STR_0266_CONSTRUCT_OIL_REFINERY                                 :{BLACK}Onstructcay Oilway Efineryray
+STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY                             :{BLACK}Onstructcay Oilway Igray (Ancay onlyway ebay uiltbay earnay ethay edgesway ofway ethay apmay)
+STR_0268_CONSTRUCT_FACTORY                                      :{BLACK}Onstructcay Actoryfay
+STR_0269_CONSTRUCT_STEEL_MILL                                   :{BLACK}Onstructcay Eelstay Illmay
+STR_026A_CONSTRUCT_FARM                                         :{BLACK}Onstructcay Armfay
+STR_026B_CONSTRUCT_IRON_ORE_MINE                                :{BLACK}Onstructcay Ironway Oreway Inemay
+STR_026C_CONSTRUCT_OIL_WELLS                                    :{BLACK}Onstructcay Oilway Ellsway
+STR_026D_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Onstructcay Ankbay (Ancay onlyway ebay uiltbay inway ownstay ithway away opulationpay eatergray anthay 1200)
+STR_026E_CONSTRUCT_PAPER_MILL                                   :{BLACK}Onstructcay Aperpay Illmay
+STR_026F_CONSTRUCT_FOOD_PROCESSING                              :{BLACK}Onstructcay Oodfay Ocessingpray Antplay
+STR_0270_CONSTRUCT_PRINTING_WORKS                               :{BLACK}Onstructcay Intingpray Orksway
+STR_0271_CONSTRUCT_GOLD_MINE                                    :{BLACK}Onstructcay Oldgay Inemay
+STR_0272_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Onstructcay Ankbay (Ancay onlyway ebay uiltbay inway ownstay)
+STR_0273_CONSTRUCT_LUMBER_MILL_TO                               :{BLACK}Onstructcay Umberlay Illmay (otay earclay ainforestray andway oducepray Oodway)
+STR_0274_PLANT_FRUIT_PLANTATION                                 :{BLACK}Antplay Uitfray Antationplay
+STR_0275_PLANT_RUBBER_PLANTATION                                :{BLACK}Antplay Ubberray Antationplay
+STR_0276_CONSTRUCT_WATER_SUPPLY                                 :{BLACK}Onstructcay Aterway Upplysay
+STR_0277_CONSTRUCT_WATER_TOWER_CAN                              :{BLACK}Onstructcay Aterway Owertay (Ancay onlyway ebay uiltbay inway ownstay)
+STR_0278_CONSTRUCT_DIAMOND_MINE                                 :{BLACK}Onstructcay Iamondday Inemay
+STR_0279_CONSTRUCT_COPPER_ORE_MINE                              :{BLACK}Onstructcay Oppercay Oreway Inemay
+STR_027A_PLANT_COTTON_CANDY_FOREST                              :{BLACK}Antplay Andyflosscay Orestfay
+STR_027B_CONSTRUCT_CANDY_FACTORY                                :{BLACK}Onstructcay Eetsway Actoryfay
+STR_027C_CONSTRUCT_BATTERY_FARM                                 :{BLACK}Onstructcay Atterybay Armfay
+STR_027D_CONSTRUCT_COLA_WELLS                                   :{BLACK}Onstructcay Olacay Ellsway
+STR_027E_CONSTRUCT_TOY_SHOP                                     :{BLACK}Onstructcay Oytay Opshay
+STR_027F_CONSTRUCT_TOY_FACTORY                                  :{BLACK}Onstructcay Oytay Actoryfay
+STR_0280_CONSTRUCT_PLASTIC_FOUNTAINS                            :{BLACK}Onstructcay Asticplay Ountainsfay
+STR_0281_CONSTRUCT_FIZZY_DRINK_FACTORY                          :{BLACK}Onstructcay Izzyfay Inkdray Actoryfay
+STR_0282_CONSTRUCT_BUBBLE_GENERATOR                             :{BLACK}Onstructcay Ubblebay Eneratorgay
+STR_0283_CONSTRUCT_TOFFEE_QUARRY                                :{BLACK}Onstructcay Offeetay Arryquay
+STR_0284_CONSTRUCT_SUGAR_MINE                                   :{BLACK}Onstructcay Ugarsay Inemay
+STR_0285_CAN_T_BUILD_HERE                                       :{WHITE}An'tcay uildbay {STRING} erehay...
+STR_0286_MUST_BUILD_TOWN_FIRST                                  :{WHITE}...ustmay uildbay owntay irstfay
+STR_0287_ONLY_ONE_ALLOWED_PER_TOWN                              :{WHITE}...onlyway oneway allowedway erpay owntay
+STR_0288_PLANT_TREES                                            :{BLACK}Antplay eestray
+STR_0289_PLACE_SIGN                                             :{BLACK}Aceplay ignsay
+STR_028A_RANDOM_TREES                                           :{BLACK}Andomray Eestray
+STR_028B_PLANT_TREES_RANDOMLY_OVER                              :{BLACK}Antplay eestray andomlyray overway andscapelay
+STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE                         :{BLACK}Aceplay ockyray areasway onway andscapelay
+STR_028D_PLACE_LIGHTHOUSE                                       :{BLACK}Aceplay ighthouselay
+STR_028E_PLACE_TRANSMITTER                                      :{BLACK}Aceplay ansmittertray
+STR_028F_DEFINE_DESERT_AREA                                     :{BLACK}Efineday esertday areaway.{}Esspray andway oldhay CTRLay otay emoveray itway
+STR_CREATE_LAKE                                                 :{BLACK}Efineday aterway areaway.{}Akemay away analcay, unlessway CTRLay isway eldhay ownday atway easay evellay, enwhay itway illway oodflay ethay urroundingssay insteadway
+STR_0290_DELETE                                                 :{BLACK}Eleteday
+STR_0291_DELETE_THIS_TOWN_COMPLETELY                            :{BLACK}Eleteday isthay owntay ompletelycay
+STR_0292_SAVE_SCENARIO                                          :Avesay enarioscay
+STR_0293_LOAD_SCENARIO                                          :Oadlay enarioscay
+STR_LOAD_HEIGHTMAP                                              :Oadlay eightmaphay
+STR_0294_QUIT_EDITOR                                            :Itquay editorway
+STR_0295                                                        :
+STR_0296_QUIT                                                   :Itquay
+STR_0297_SAVE_SCENARIO_LOAD_SCENARIO                            :{BLACK}Avesay enarioscay, oadlay enarioscay, abandonway enarioscay editorway, itquay
+STR_0298_LOAD_SCENARIO                                          :{WHITE}Oadlay Enarioscay
+STR_0299_SAVE_SCENARIO                                          :{WHITE}Avesay Enarioscay
+STR_029A_PLAY_SCENARIO                                          :{BLACK}Ayplay Enarioscay
+STR_PLAY_HEIGHTMAP                                              :{BLACK}Ayplay Eightmaphay
+STR_PLAY_HEIGHTMAP_HINT                                         :{BLACK}Artstay away ewnay amegay, usingway away eightmaphay asway andscapelay
+STR_QUIT_SCENARIO_QUERY                                         :{YELLOW}Areway ouyay uresay ouyay antway otay itquay isthay enarioscay ?
+STR_029C_QUIT_EDITOR                                            :{WHITE}Itquay Editorway
+STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...ancay onlyway ebay uiltbay inway ownstay ithway away opulationpay ofway atway eastlay 1200
+STR_029E_MOVE_THE_STARTING_DATE                                 :{BLACK}Ovemay ethay artingstay ateday ackwardbay 1 earyay
+STR_029F_MOVE_THE_STARTING_DATE                                 :{BLACK}Ovemay ethay artingstay ateday orwardfay 1 earyay
+STR_02A0_ENDS_OF_BRIDGE_MUST_BOTH                               :{WHITE}...endsway ofway idgebray ustmay othbay ebay onway andlay
+STR_02A1_SMALL                                                  :{BLACK}Allsmay
+STR_02A2_MEDIUM                                                 :{BLACK}Ediummay
+STR_02A3_LARGE                                                  :{BLACK}Argelay
+STR_SCENARIO_EDITOR_CITY                                        :{BLACK}Itycay
+STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Electsay owntay izesay
+STR_02A5_TOWN_SIZE                                              :{YELLOW}Owntay izesay:
+
+STR_02B6                                                        :{STRING}  -  {STRING}
+STR_02B7_SHOW_LAST_MESSAGE_OR_NEWS                              :{BLACK}Owshay astlay essagemay orway ewsnay eportray
+STR_OFF                                                         :Offway
+STR_SUMMARY                                                     :Ummarysay
+STR_FULL                                                        :Ullfay
+STR_02BA                                                        :{SILVER}- -  {COMPANY}  - -
+STR_02BB_TOWN_DIRECTORY                                         :Owntay irectoryday
+STR_02BC_VEHICLE_DESIGN_NAMES                                   :{BLACK}Ehiclevay esignday amesnay
+STR_02BD                                                        :{BLACK}{STRING}
+STR_02BE_DEFAULT                                                :Efaultday
+STR_02BF_CUSTOM                                                 :Ustomcay
+STR_02C0_SAVE_CUSTOM_NAMES                                      :{BLACK}Avesay ustomcay amesnay
+STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION                         :{BLACK}Ehiclevay esignday amesnay electionsay
+STR_02C2_SAVE_CUSTOMIZED_VEHICLE                                :{BLACK}Avesay ustomisedcay ehiclevay esignday amesnay
+
+STR_CHECKMARK                                                   :{CHECKMARK}
+############ range for menu starts
+STR_02C3_GAME_OPTIONS                                           :Amegay optionsway
+STR_02C5_DIFFICULTY_SETTINGS                                    :Ifficultyday ettingssay
+STR_02C7_CONFIG_PATCHES                                         :Onfigurecay atchespay
+STR_NEWGRF_SETTINGS                                             :EwGRFnay ettingssay
+STR_TRANSPARENCY_OPTIONS                                        :Ansparencytray optionsway
+STR_GAMEOPTMENU_0A                                              :
+STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Owntay amesnay isplayedday
+STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Ationstay amesnay isplayedday
+STR_02CE_SIGNS_DISPLAYED                                        :{SETX 12}Ignssay isplayedday
+STR_WAYPOINTS_DISPLAYED2                                        :{SETX 12}Aypointsway isplayedday
+STR_02D0_FULL_ANIMATION                                         :{SETX 12}Ullfay animationway
+STR_02D2_FULL_DETAIL                                            :{SETX 12}Ullfay etailday
+STR_02D4_TRANSPARENT_BUILDINGS                                  :{SETX 12}Ansparenttray uildingsbay
+STR_TRANSPARENT_SIGNS                                           :{SETX 12}Ansparenttray ationstay ignssay
+############ range ends here
+
+############ range for menu starts
+STR_02D5_LAND_BLOCK_INFO                                        :Andlay areaway informationway
+STR_02D6                                                        :
+STR_CONSOLE_SETTING                                             :Oggletay Onsolecay
+STR_02D7_SCREENSHOT_CTRL_S                                      :Eenshotscray (Ctrlay-Say)
+STR_02D8_GIANT_SCREENSHOT_CTRL_G                                :Iantgay Eenshotscray (Ctrlay-Gay)
+STR_02D9_ABOUT_OPENTTD                                          :Aboutway 'OpenTTD'WAY
+############ range ends here
+
+STR_02DB_OFF                                                    :{BLACK}Offway
+STR_02DA_ON                                                     :{BLACK}Onway
+STR_02DC_DISPLAY_SUBSIDIES                                      :{BLACK}Isplayday ubsidiessay
+STR_02DD_SUBSIDIES                                              :Ubsidiessay
+STR_02DE_MAP_OF_WORLD                                           :Apmay ofway orldway
+STR_EXTRA_VIEW_PORT                                             :Extraway iewportvay
+STR_SIGN_LIST                                                   :Ignsay istlay
+STR_02DF_TOWN_DIRECTORY                                         :Owntay irectoryday
+STR_TOWN_POPULATION                                             :{BLACK}Orldway opulationpay: {COMMA}
+STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Iewportvay {COMMA}
+STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN                                :{BLACK}Opycay otay iewportvay
+STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT                             :{BLACK}Opycay ethay ocationlay ofway ethay obalglay iewvay otay isthay iewportvay
+STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW                                :{BLACK}Astepay omfray iewportvay
+STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT                             :{BLACK}Astepay ethay ocationlay ofway isthay iewportvay otay ethay obalglay iewvay
+
+STR_02E0_CURRENCY_UNITS                                         :{BLACK}Urrencycay unitsway
+STR_02E1                                                        :{BLACK}{SKIP}{STRING}
+STR_02E2_CURRENCY_UNITS_SELECTION                               :{BLACK}Urrencycay unitsway electionsay
+STR_MEASURING_UNITS                                             :{BLACK}Easuringmay unitsway
+STR_02E4                                                        :{BLACK}{SKIP}{SKIP}{STRING}
+STR_MEASURING_UNITS_SELECTION                                   :{BLACK}Easuringmay unitsway electionsay
+STR_02E6_ROAD_VEHICLES                                          :{BLACK}Oadray ehiclesvay
+STR_02E7                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{STRING}
+STR_02E8_SELECT_SIDE_OF_ROAD_FOR                                :{BLACK}Electsay idesay ofway oadray orfay ehiclesvay otay ivedray onway
+STR_02E9_DRIVE_ON_LEFT                                          :Ivedray onway eftlay
+STR_02EA_DRIVE_ON_RIGHT                                         :Ivedray onway ightray
+STR_02EB_TOWN_NAMES                                             :{BLACK}Owntay amesnay
+STR_02EC                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_02ED_SELECT_STYLE_OF_TOWN_NAMES                             :{BLACK}Electsay ylestay ofway owntay amesnay
+
+STR_02F4_AUTOSAVE                                               :{BLACK}Autosaveway
+STR_02F5                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_02F6_SELECT_INTERVAL_BETWEEN                                :{BLACK}Electsay intervalway etweenbay automaticway amegay avessay
+STR_02F7_OFF                                                    :Offway
+STR_02F8_EVERY_3_MONTHS                                         :Everyway 3 onthsmay
+STR_02F9_EVERY_6_MONTHS                                         :Everyway 6 onthsmay
+STR_02FA_EVERY_12_MONTHS                                        :Everyway 12 onthsmay
+STR_02FB_START_A_NEW_GAME                                       :{BLACK}Artstay away ewnay amegay
+STR_02FC_LOAD_A_SAVED_GAME                                      :{BLACK}Oadlay away avedsay amegay
+STR_02FE_CREATE_A_CUSTOMIZED_GAME                               :{BLACK}Eatecray away ustomisedcay amegay orldway/enarioscay
+STR_02FF_SELECT_SINGLE_PLAYER_GAME                              :{BLACK}Electsay inglesay-ayerplay amegay
+STR_0300_SELECT_MULTIPLAYER_GAME                                :{BLACK}Electsay ultiplayermay amegay ofway 2-8 ayersplay
+STR_0301_DISPLAY_GAME_OPTIONS                                   :{BLACK}Isplayday amegay optionsway
+STR_0302_DISPLAY_DIFFICULTY_OPTIONS                             :{BLACK}Isplayday ifficultyday optionsway
+STR_0303_START_A_NEW_GAME_USING                                 :{BLACK}Artstay away ewnay amegay, usingway away ustomisedcay enarioscay
+STR_0304_QUIT                                                   :{BLACK}Itquay
+STR_0305_QUIT_OPENTTD                                           :{BLACK}Itquay 'OpenTTD'WAY
+STR_0307_OPENTTD                                                :{WHITE}OpenTTDWAY {REV}
+STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...ancay onlyway ebay uiltbay inway ownstay
+STR_030E_SELECT_TEMPERATE_LANDSCAPE                             :{BLACK}Electsay 'emperate'tay andscapelay ylestay
+STR_030F_SELECT_SUB_ARCTIC_LANDSCAPE                            :{BLACK}Electsay 'ubsay-arctic'WAY andscapelay ylestay
+STR_0310_SELECT_SUB_TROPICAL_LANDSCAPE                          :{BLACK}Electsay 'ubsay-opical'tray andscapelay ylestay
+STR_0311_SELECT_TOYLAND_LANDSCAPE                               :{BLACK}Electsay 'oyland'tay andscapelay ylestay
+STR_0312_FUND_CONSTRUCTION_OF_NEW                               :{BLACK}Undfay onstructioncay ofway ewnay industryway
+
+############ range for menu starts
+STR_INDUSTRY_DIR                                                :Industryway Irectoryday
+STR_0313_FUND_NEW_INDUSTRY                                      :Undfay ewnay industryway
+############ range ends here
+
+STR_0314_FUND_NEW_INDUSTRY                                      :{WHITE}Undfay ewnay industryway
+STR_JUST_STRING                                                 :{STRING}
+STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...ancay onlyway ebay uiltbay inway ownstay
+STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST                        :{WHITE}...ancay onlyway ebay uiltbay inway ainforestray areasway
+STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT                            :{WHITE}...ancay onlyway ebay uiltbay inway esertday areasway
+STR_0319_PAUSED                                                 :{YELLOW}* *  USEDPAay  *  *
+
+STR_031B_SCREENSHOT_SUCCESSFULLY                                :{WHITE}Eenshotscray uccessfullysay avedsay asway '{STRING}'
+STR_031C_SCREENSHOT_FAILED                                      :{WHITE}Eenshotscray ailedfay!
+
+STR_0329_PURCHASE_LAND_FOR_FUTURE                               :{BLACK}Urchasepay andlay orfay uturefay useway
+STR_032F_AUTOSAVE                                               :{RED}AUTOSAVEWAY
+STR_SAVING_GAME                                                 :{RED}*  *  INGSAVay EGAMay  *  *
+STR_SAVE_STILL_IN_PROGRESS                                      :{WHITE}Avingsay illstay inway ogresspray,{}easeplay aitway untilway itway isway inishedfay!
+STR_0330_SELECT_EZY_STREET_STYLE                                :{BLACK}Electsay 'Ezyway Eetstray ylestay usic'may ogrammepray
+
+STR_0335_6                                                      :{BLACK}6
+STR_0336_7                                                      :{BLACK}7
+
+############ start of townname region
+STR_TOWNNAME_ORIGINAL_ENGLISH                                   :Englishway (Originalway)
+STR_TOWNNAME_FRENCH                                             :Enchfray
+STR_TOWNNAME_GERMAN                                             :Ermangay
+STR_TOWNNAME_ADDITIONAL_ENGLISH                                 :Englishway (Additionalway)
+STR_TOWNNAME_LATIN_AMERICAN                                     :Atinlay-Americanway
+STR_TOWNNAME_SILLY                                              :Illysay
+STR_TOWNNAME_SWEDISH                                            :Edishsway
+STR_TOWNNAME_DUTCH                                              :Utchday
+STR_TOWNNAME_FINNISH                                            :Innishfay
+STR_TOWNNAME_POLISH                                             :Olishpay
+STR_TOWNNAME_SLOVAKISH                                          :Ovakishslay
+STR_TOWNNAME_NORWEGIAN                                          :Orwegiannay
+STR_TOWNNAME_HUNGARIAN                                          :Ungarianhay
+STR_TOWNNAME_AUSTRIAN                                           :Austrianway
+STR_TOWNNAME_ROMANIAN                                           :Omanianray
+STR_TOWNNAME_CZECH                                              :Echczay
+STR_TOWNNAME_SWISS                                              :Isssway
+STR_TOWNNAME_DANISH                                             :Anishday
+STR_TOWNNAME_TURKISH                                            :Urkishtay
+STR_TOWNNAME_ITALIAN                                            :Italianway
+STR_TOWNNAME_CATALAN                                            :Atalancay
+############ end of townname region
+
+STR_CURR_GBP                                                    :Oundspay (£)
+STR_CURR_USD                                                    :Ollarsday ($)
+STR_CURR_EUR                                                    :Euroway (€)
+STR_CURR_YEN                                                    :Enyay (¥)
+STR_CURR_ATS                                                    :Austrianway Illingshay (ATSWAY)
+STR_CURR_BEF                                                    :Elgianbay Ancfray (EFBay)
+STR_CURR_CHF                                                    :Isssway Ancfray (CHFay)
+STR_CURR_CZK                                                    :Echczay Orunakay (CZKay)
+STR_CURR_DEM                                                    :Eutschmarkday (EMDay)
+STR_CURR_DKK                                                    :Anishday Onekray (DKKay)
+STR_CURR_ESP                                                    :Esetapay (ESPWAY)
+STR_CURR_FIM                                                    :Innishfay Arkkamay (IMFay)
+STR_CURR_FRF                                                    :Ancfray (FRFay)
+STR_CURR_GRD                                                    :Eekgray Achmadray (GRDay)
+STR_CURR_HUF                                                    :Ungarianhay Orintfay (UFHay)
+STR_CURR_ISK                                                    :Icelandicway Onakray (ISKWAY)
+STR_CURR_ITL                                                    :Italianway Iralay (ITLWAY)
+STR_CURR_NLG                                                    :Utchday Uildergay (NLGay)
+STR_CURR_NOK                                                    :Orwegiannay Onekray (OKNay)
+STR_CURR_PLN                                                    :Olishpay Otyzlay (PLNay)
+STR_CURR_ROL                                                    :Omanianray Eulay (OLRay)
+STR_CURR_RUR                                                    :Ussianray Ublesray (URRay)
+STR_CURR_SIT                                                    :Ovenianslay Olartay (ITSay)
+STR_CURR_SEK                                                    :Edishsway Onakray (EKSay)
+STR_CURR_YTL                                                    :Urkishtay Iralay (YTLay)
+STR_CURR_SKK                                                    :Ovakslay Orunakay (SKKay)
+STR_CURR_BRR                                                    :Azilianbray Ealray (BRLay)
+
+STR_CURR_CUSTOM                                                 :Ustomcay...
+
+STR_OPTIONS_LANG                                                :{BLACK}Anguagelay
+STR_OPTIONS_LANG_CBO                                            :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_OPTIONS_LANG_TIP                                            :{BLACK}Electsay ethay interfaceway anguagelay otay useway
+
+STR_OPTIONS_FULLSCREEN                                          :{BLACK}Ullscreenfay
+STR_OPTIONS_FULLSCREEN_TIP                                      :{BLACK}Eckchay isthay oxbay otay ayplay OpenTTDWAY ullscreenfay odemay
+
+STR_OPTIONS_RES                                                 :{BLACK}Eenscray esolutionray
+STR_OPTIONS_RES_CBO                                             :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_OPTIONS_RES_TIP                                             :{BLACK}Electsay ethay eenscray esolutionray otay useway
+
+STR_OPTIONS_SCREENSHOT_FORMAT                                   :{BLACK}Eenshotscray ormatfay
+STR_OPTIONS_SCREENSHOT_FORMAT_CBO                               :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_OPTIONS_SCREENSHOT_FORMAT_TIP                               :{BLACK}Electsay ethay eenshotscray ormatfay otay useway
+
+STR_AUTOSAVE_1_MONTH                                            :Everyway onthmay
+STR_AUTOSAVE_FAILED                                             :{WHITE}Autosaveway ailedfay
+
+STR_MONTH_JAN                                                   :Anuaryjay
+STR_MONTH_FEB                                                   :Ebruaryfay
+STR_MONTH_MAR                                                   :Archmay
+STR_MONTH_APR                                                   :Aprilway
+STR_MONTH_MAY                                                   :Aymay
+STR_MONTH_JUN                                                   :Unejay
+STR_MONTH_JUL                                                   :Ulyjay
+STR_MONTH_AUG                                                   :Augustway
+STR_MONTH_SEP                                                   :Eptembersay
+STR_MONTH_OCT                                                   :Octoberway
+STR_MONTH_NOV                                                   :Ovembernay
+STR_MONTH_DEC                                                   :Ecemberday
+
+STR_HEADING_FOR_STATION                                         :{LTBLUE}Eadinghay orfay {STATION}
+STR_HEADING_FOR_STATION_VEL                                     :{LTBLUE}Eadinghay orfay {STATION}, {VELOCITY}
+STR_NO_ORDERS                                                   :{LTBLUE}Onay ordersway
+STR_NO_ORDERS_VEL                                               :{LTBLUE}Onay ordersway, {VELOCITY}
+
+STR_PASSENGERS                                                  :assengerspay
+STR_BAGS                                                        :agsbay
+STR_TONS                                                        :onnestay
+STR_LITERS                                                      :itreslay
+STR_ITEMS                                                       :itemsway
+STR_CRATES                                                      :atescray
+STR_RES_OTHER                                                   :otherway
+STR_NOTHING                                                     :
+
+STR_SMALL_RIGHT_ARROW                                           :{TINYFONT}{RIGHTARROW}
+
+STR_CANT_SHARE_ORDER_LIST                                       :{WHITE}An'tcay areshay orderway istlay...
+STR_CANT_COPY_ORDER_LIST                                        :{WHITE}An'tcay opycay orderway istlay...
+STR_END_OF_SHARED_ORDERS                                        :{SETX 10}- - Endway ofway Aredshay Ordersway - -
+
+STR_TRAIN_IS_LOST                                               :{WHITE}Aintray {COMMA} isway ostlay.
+STR_TRAIN_IS_UNPROFITABLE                                       :{WHITE}Aintray {COMMA}'say ofitpray astlay earyay asway {CURRENCY}
+STR_EURO_INTRODUCE                                              :{BLACK}{BIGFONT}Europeanway Onetarymay Unionway!{}{}Ethay Euroway isway introducedway asway ethay olesay urrencycay orfay everydayway ansactionstray inway ouryay ountrycay!
+
+# Start of order review system.
+# DON'T ADD OR REMOVE LINES HERE
+STR_TRAIN_HAS_TOO_FEW_ORDERS                                    :{WHITE}Aintray {COMMA} ashay ootay ewfay ordersway inway ethay eduleschay
+STR_TRAIN_HAS_VOID_ORDER                                        :{WHITE}Aintray {COMMA} ashay away oidvay orderway
+STR_TRAIN_HAS_DUPLICATE_ENTRY                                   :{WHITE}Aintray {COMMA} ashay uplicateday ordersway
+STR_TRAIN_HAS_INVALID_ENTRY                                     :{WHITE}Aintray {COMMA} ashay anway invalidway ationstay inway itsway ordersway
+STR_ROADVEHICLE_HAS_TOO_FEW_ORDERS                              :{WHITE}Oadray Ehiclevay {COMMA} ashay ootay ewfay ordersway inway ethay eduleschay
+STR_ROADVEHICLE_HAS_VOID_ORDER                                  :{WHITE}Oadray Ehiclevay {COMMA} ashay away oidvay orderway
+STR_ROADVEHICLE_HAS_DUPLICATE_ENTRY                             :{WHITE}Oadray Ehiclevay {COMMA} ashay uplicateday ordersway
+STR_ROADVEHICLE_HAS_INVALID_ENTRY                               :{WHITE}Oadray Ehiclevay {COMMA} ashay anway invalidway ationstay inway itsway ordersway
+STR_SHIP_HAS_TOO_FEW_ORDERS                                     :{WHITE}Ipshay {COMMA} ashay ootay ewfay ordersway inway ethay eduleschay
+STR_SHIP_HAS_VOID_ORDER                                         :{WHITE}Ipshay {COMMA} ashay away oidvay orderway
+STR_SHIP_HAS_DUPLICATE_ENTRY                                    :{WHITE}Ipshay {COMMA} ashay uplicateday ordersway
+STR_SHIP_HAS_INVALID_ENTRY                                      :{WHITE}Ipshay {COMMA} ashay anway invalidway ationstay inway itsway ordersway
+STR_AIRCRAFT_HAS_TOO_FEW_ORDERS                                 :{WHITE}Aircraftway {COMMA} ashay ootay ewfay ordersway inway ethay eduleschay
+STR_AIRCRAFT_HAS_VOID_ORDER                                     :{WHITE}Aircraftway {COMMA} ashay away oidvay orderway
+STR_AIRCRAFT_HAS_DUPLICATE_ENTRY                                :{WHITE}Aircraftway {COMMA} ashay uplicateday ordersway
+STR_AIRCRAFT_HAS_INVALID_ENTRY                                  :{WHITE}Aircraftway {COMMA} ashay anway invalidway ationstay inway itsway ordersway
+# end of order system
+
+STR_TRAIN_AUTORENEW_FAILED                                      :{WHITE}Autorenewway ailedfay onway aintray {COMMA} (oneymay imitlay)
+STR_ROADVEHICLE_AUTORENEW_FAILED                                :{WHITE}Autorenewway ailedfay onway oadray ehiclevay {COMMA} (oneymay imitlay)
+STR_SHIP_AUTORENEW_FAILED                                       :{WHITE}Autorenewway ailedfay onway ipshay {COMMA} (oneymay imitlay)
+STR_AIRCRAFT_AUTORENEW_FAILED                                   :{WHITE}Autorenewway ailedfay onway aircraftway {COMMA} (oneymay imitlay)
+STR_TRAIN_TOO_LONG_AFTER_REPLACEMENT                            :{WHITE}Aintray {COMMA} isway ootay onglay afterway eplacementray
+
+STR_CONFIG_PATCHES                                              :{BLACK}Onfigurecay Atchespay
+STR_CONFIG_PATCHES_TIP                                          :{BLACK}Onfigurecay ethay atchespay
+STR_CONFIG_PATCHES_CAPTION                                      :{WHITE}Onfigurecay Atchespay
+
+STR_CONFIG_PATCHES_OFF                                          :Offway
+STR_CONFIG_PATCHES_ON                                           :Onway
+STR_CONFIG_PATCHES_VEHICLESPEED                                 :{LTBLUE}Owshay ehiclevay eedspay inway atusstay arbay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_BUILDONSLOPES                                :{LTBLUE}Allowway uildingbay onway opesslay andway oastscay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_CATCHMENT                                    :{LTBLUE}Allowway oremay ealisticallyray izedsay atchmentcay areasway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_EXTRADYNAMITE                                :{LTBLUE}Allowway emovalray ofway oremay owntay-ownedway oadsray, idgesbray, etcway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAMMOTHTRAINS                                :{LTBLUE}Enableway uildingbay eryvay onglay ainstray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_REALISTICACCEL                               :{LTBLUE}Enableway ealisticray accelerationway orfay ainstray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_FORBID_90_DEG                                :{LTBLUE}Orbidfay ainstray andway ipsshay otay akemay 90 egday urnstay: {ORANGE}{STRING} {LTBLUE} (equiresray NPFay)
+STR_CONFIG_PATCHES_JOINSTATIONS                                 :{LTBLUE}Oinjay aintray ationsstay uiltbay extnay otay eachway otherway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_FULLLOADANY                                  :{LTBLUE}Eavelay ationstay enwhay anyway argocay isway ullfay, ifway 'ullfay oad'lay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_IMPROVEDLOAD                                 :{LTBLUE}Useway improvedway oadinglay algorithmway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_GRADUAL_LOADING                              :{LTBLUE}Oadlay ehiclesvay aduallygray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_INFLATION                                    :{LTBLUE}Inflationway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Eliverday argocay otay away ationstay onlyway enwhay erethay isway away emandday: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Allowway uildingbay eryvay onglay idgesbray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Allowway otogay epotday ordersway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}Anualmay imarypray industryway onstructioncay ethodmay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :onenay
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :asway otherway industriesway
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :ospectingpray
+STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Allowway ultiplemay imilarsay industriesway erpay owntay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Industriesway ofway ethay amesay ypetay ancay ebay uiltbay oseclay otay eachway otherway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Alwaysway owshay onglay ateday inway ethay atusstay arbay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SIGNALSIDE                                   :{LTBLUE}Owshay ignalssay onway ethay ivedray idesay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SHOWFINANCES                                 :{LTBLUE}Owshay inancesfay indowway atway ethay endway ofway ethay earyay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_NEW_NONSTOP                                  :{LTBLUE}AtchtTDPay ompatiblecay onstopnay andlinghay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ROADVEH_QUEUE                                :{LTBLUE}Oadray ehiclevay eueingquay (ithway antumquay effectsway): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSCROLL                                   :{LTBLUE}Anpay indowway enwhay ousemay isway atway ethay edgeway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_BRIBE                                        :{LTBLUE}Allowway ibingbray ofway ethay ocallay authorityway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Onuniformnay ationsstay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Ewnay obalglay athfindingpay (NPFay, overridesway NTPay): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Eightway ultipliermay orfay eightfray otay imulatesay eavyhay ainstray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Allowway ivedray-oughthray oadray opsstay onway owntay ownedway oadsray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADJACENT_STATIONS                            :{LTBLUE}Allowway uildingbay adjacentway ationsstay: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Alwaysway allowway allsmay airportsway: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_WARN_LOST_TRAIN                              :{LTBLUE}Arnway ifway aintray isway ostlay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ORDER_REVIEW                                 :{LTBLUE}Eviewray ehicles'vay ordersway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ORDER_REVIEW_OFF                             :onay
+STR_CONFIG_PATCHES_ORDER_REVIEW_EXDEPOT                         :esyay, utbay excludeway oppedstay ehiclesvay
+STR_CONFIG_PATCHES_ORDER_REVIEW_ON                              :ofway allway ehiclesvay
+STR_CONFIG_PATCHES_WARN_INCOME_LESS                             :{LTBLUE}Arnway ifway away ain'stray incomeway isway egativenay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES                        :{LTBLUE}Ehiclesvay evernay expireway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTORENEW_VEHICLE                            :{LTBLUE}Autorenewway ehiclevay enwhay itway etsgay oldway
+STR_CONFIG_PATCHES_AUTORENEW_MONTHS                             :{LTBLUE}Autorenewway enwhay ehicevay isway {ORANGE}{STRING}{LTBLUE} onthsmay eforebay/afterway axmay ageway
+STR_CONFIG_PATCHES_AUTORENEW_MONEY                              :{LTBLUE}Autorenewway inimummay eedednay oneymay orfay enewray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ERRMSG_DURATION                              :{LTBLUE}Urationday ofway errorway essagemay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_POPULATION_IN_LABEL                          :{LTBLUE}Owshay owntay opulationpay inway ethay owntay amenay abellay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_INVISIBLE_TREES                              :{LTBLUE}Invisibleway eestray (ithway ansparenttray uildingsbay): {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_LAND_GENERATOR                               :{LTBLUE}Andlay eneratorgay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LAND_GENERATOR_ORIGINAL                      :Originalway
+STR_CONFIG_PATCHES_LAND_GENERATOR_TERRA_GENESIS                 :ErraGenesistay
+STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE                        :{LTBLUE}Axmay istanceday omfray edgeway orfay Oilway Efineriesray {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SNOWLINE_HEIGHT                              :{LTBLUE}Owsnay inelay eighthay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN                         :{LTBLUE}Oughnessray ofway erraintay (ErraGenesistay onlyway) : {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH             :Eryvay Oothsmay
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_SMOOTH                  :Oothsmay
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_ROUGH                   :Oughray
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_ROUGH              :Eryvay Oughray
+STR_CONFIG_PATCHES_TREE_PLACER                                  :{LTBLUE}Eetray acerplay algorithmway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TREE_PLACER_NONE                             :Onenay
+STR_CONFIG_PATCHES_TREE_PLACER_ORIGINAL                         :Originalway
+STR_CONFIG_PATCHES_TREE_PLACER_IMPROVED                         :Improvedway
+STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION                           :{LTBLUE}Eightmaphay otationray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE         :Ountercay ockwiseclay
+STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_CLOCKWISE                 :Ockwiseclay
+STR_CONFIG_PATCHES_SE_FLAT_WORLD_HEIGHT                         :{LTBLUE}Ethay eighthay evellay away atflay enarioscay apmay etsgay: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_STATION_SPREAD                               :{LTBLUE}Axmay ationstay eadspray: {ORANGE}{STRING} {RED}Arningway: Ighhay ettingsay owsslay amegay
+STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Ervicesay elicoptershay atway elipadshay automaticallyway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Inklay andscapelay oolbartay otay ailray/oadray/aterway/airportway oolbarstay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Everseray ollscray irectionday: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING                             :{LTBLUE}Oothsmay iewportvay ollingscray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Owshay away easurementmay ooltiptay enwhay usingway ariousvay uildbay-oolstay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Owshay ompanycay iverieslay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LIVERIES_NONE                                :Onenay
+STR_CONFIG_PATCHES_LIVERIES_OWN                                 :Ownway ompanycay
+STR_CONFIG_PATCHES_LIVERIES_ALL                                 :Allway ompaniescay
+STR_CONFIG_PATCHES_PREFER_TEAMCHAT                              :{LTBLUE}Eferpray eamtay atchay ithway <ENTERWAY>: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLLING                        :{LTBLUE}Unctionfay ofway ollwheelscray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SCROLLWHEEL_ZOOM                             :Oomzay apmay
+STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Ollscray apmay
+STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Offway
+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_LOADING_INDICATORS                           :{LTBLUE}Useway oadinglay indicatorsway:{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_DEFAULT_RAIL_TYPE                            :{LTBLUE}Efaultday ailray ypetay (afterway ewnay amegay/amegay oadlay): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Ormalnay Ailray
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Electrifiedway Ailray
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Onorailmay
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Aglevmay
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :Irstfay availableway
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :Astlay availableway
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :Ostmay usedway
+
+STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Owshay uildingbay oolstay enwhay onay uitablesay ehiclesvay:{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}
+STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Axmay aircraftway erpay ayerplay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAX_SHIPS                                    :{LTBLUE}Axmay ipsshay erpay ayerplay: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_AI_BUILDS_TRAINS                             :{LTBLUE}Isableday ainstray orfay omputercay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH                            :{LTBLUE}Isableday oadray ehiclesvay orfay omputercay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT                           :{LTBLUE}Isableday aircraftway orfay omputercay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_SHIPS                              :{LTBLUE}Isableday ipsshay orfay omputercay: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_AINEW_ACTIVE                                 :{LTBLUE}Enableway ewnay AIWAY (alphaway): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER                            :{LTBLUE}Allowway AIsway inway ultiplayermay (experimentalway): {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_SERVINT_TRAINS                               :{LTBLUE}Efaultday ervicesay intervalway orfay ainstray: {ORANGE}{STRING} aysday/%
+STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED                      :{LTBLUE}Efaultday ervicesay intervalway orfay ainstray: {ORANGE}isabledday
+STR_CONFIG_PATCHES_SERVINT_ROADVEH                              :{LTBLUE}Efaultday ervicesay intervalway orfay oadray ehiclesvay: {ORANGE}{STRING} aysday/%
+STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED                     :{LTBLUE}Efaultday ervicesay intervalway orfay oadray ehiclesvay: {ORANGE}isabledday
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT                             :{LTBLUE}Efaultday ervicesay intervalway orfay aircraftway: {ORANGE}{STRING} aysday/%
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED                    :{LTBLUE}Efaultday ervicesay intervalway orfay aircraftway: {ORANGE}isabledday
+STR_CONFIG_PATCHES_SERVINT_SHIPS                                :{LTBLUE}Efaultday ervicesay intervalway orfay ipsshay: {ORANGE}{STRING} aysday/%
+STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED                       :{LTBLUE}Efaultday ervicesay intervalway orfay ipsshay: {ORANGE}isabledday
+STR_CONFIG_PATCHES_NOSERVICE                                    :{LTBLUE}Isableday ervicingsay enwhay eakdownsbray etsay otay onenay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_WAGONSPEEDLIMITS                             :{LTBLUE}Enableway agonway eedspay imitslay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DISABLE_ELRAILS                              :{LTBLUE}Isableday electricway ailsray: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_COLORED_NEWS_YEAR                            :{LTBLUE}Olouredcay ewsnay appearsway inway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STARTING_YEAR                                :{LTBLUE}Artingstay earyay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ENDING_YEAR                                  :{LTBLUE}Endway amegay inway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_ECONOMY                               :{LTBLUE}Enableway oothsmay economyway (oremay, allersmay angeschay)
+STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Allowway uyingbay aresshay omfray otherway ompaniescay
+STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Enwhay aggingdray, aceplay ignalssay everyway: {ORANGE}{STRING} iletay(say)
+STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Automaticallyway uildbay emaphoressay eforebay: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}Ethay owntay ayoutlay "onay oremay oadsray" isn'tway alidvay inway ethay enarioscay editorway
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Electsay owntay-oadray ayoutlay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :onay oremay oadsray
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :efaultday
+STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :etterbay oadsray
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID                         :2xay2 idgray
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :3xay3 idgray
+
+STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Ositionpay ofway ainmay oolbartay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Eftlay
+STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Entrecay
+STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :Ightray
+STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}Indowway apsnay adiusray: {ORANGE}{STRING} pxay
+STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}Indowway apsnay adiusray: {ORANGE}isabledday
+STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}Owntay owthgray eedspay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :Onenay
+STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :Owslay
+STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :Ormalnay
+STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :Astfay
+STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Eryvay astfay
+STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Oportionpray ofway ownstay atthay illway ecomebay itiescay: {ORANGE}1 inway {STRING}
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Oportionpray ofway ownstay atthay illway ecomebay itiescay: {ORANGE}Onenay
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Initialway itycay izesay ultipliermay: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_GUI                                          :{BLACK}Interfaceway
+STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Onstructioncay
+STR_CONFIG_PATCHES_VEHICLES                                     :{BLACK}Ehiclesvay
+STR_CONFIG_PATCHES_STATIONS                                     :{BLACK}Ationsstay
+STR_CONFIG_PATCHES_ECONOMY                                      :{BLACK}Economyway
+STR_CONFIG_PATCHES_AI                                           :{BLACK}Ompetitorscay
+
+STR_CONFIG_PATCHES_DISABLED                                     :isabledday
+STR_CONFIG_PATCHES_INT32                                        :{NUM}
+STR_CONFIG_PATCHES_CURRENCY                                     :{CURRENCY}
+
+STR_CONFIG_PATCHES_QUERY_CAPT                                   :{WHITE}Angechay ettingsay aluevay
+STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE                :{WHITE}Omesay orway allway ofway ethay efaultday ervicesay intervalway(say) elowbay areway incompatibleway ithway ethay osenchay ettingsay! 5-90% andway 30-800 aysday areway alidvay
+STR_CONFIG_PATCHES_YAPF_SHIPS                                   :{LTBLUE}Useway YAPFay orfay ipsshay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_YAPF_ROAD                                    :{LTBLUE}Useway YAPFay orfay oadvehsray: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_YAPF_RAIL                                    :{LTBLUE}Useway YAPFay orfay ainstray: {ORANGE}{STRING}
+
+STR_TEMPERATE_LANDSCAPE                                         :Emperatetay andscapelay
+STR_SUB_ARCTIC_LANDSCAPE                                        :Ubsay-arcticway andscapelay
+STR_SUB_TROPICAL_LANDSCAPE                                      :Ubsay-opicaltray andscapelay
+STR_TOYLAND_LANDSCAPE                                           :Oylandtay andscapelay
+
+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 {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}
+STR_CHEAT_BUILD_IN_PAUSE                                        :{LTBLUE}Uildbay ilewhay inway ausepay odemay: {ORANGE}{STRING}
+STR_CHEAT_NO_JETCRASH                                           :{LTBLUE}Etplanesjay illway otnay ashcray (equentlyfray) onway allsmay airportsway: {ORANGE} {STRING}
+STR_CHEAT_SWITCH_CLIMATE                                        :{LTBLUE}Itchsway imateclay: {ORANGE} {STRING}
+STR_CHEAT_CHANGE_DATE                                           :{LTBLUE}Angechay ateday: {ORANGE} {DATE_SHORT}
+STR_CHEAT_SETUP_PROD                                            :{LTBLUE}Enableway odifyingmay oductionpray aluesvay: {ORANGE}{STRING}
+
+STR_HEADING_FOR_WAYPOINT                                        :{LTBLUE}Eadinghay orfay {WAYPOINT}
+STR_HEADING_FOR_WAYPOINT_VEL                                    :{LTBLUE}Eadinghay orfay {WAYPOINT}, {VELOCITY}
+
+STR_GO_TO_WAYPOINT                                              :Ogay iavay {WAYPOINT}
+STR_GO_NON_STOP_TO_WAYPOINT                                     :Ogay onnay-opstay iavay {WAYPOINT}
+
+STR_WAYPOINTNAME_CITY                                           :Aypointway {TOWN}
+STR_WAYPOINTNAME_CITY_SERIAL                                    :Aypointway {TOWN} #{COMMA}
+STR_LANDINFO_WAYPOINT                                           :Aypointway
+
+STR_WAYPOINT                                                    :{WHITE}Aypointway
+STR_WAYPOINT_GRAPHICS_TIP                                       :{BLACK}Electsay aypointway ypetay
+
+STR_WAYPOINT_VIEWPORT                                           :{WHITE}{WAYPOINT}
+STR_WAYPOINT_VIEWPORT_TINY                                      :{TINYFONT}{WHITE}{WAYPOINT}
+STR_WAYPOINT_RAW                                                :{WAYPOINT}
+STR_EDIT_WAYPOINT_NAME                                          :{WHITE}Editway aypointway amenay
+
+STR_CANT_CHANGE_WAYPOINT_NAME                                   :{WHITE}An'tcay angechay aypointway amenay...
+STR_CONVERT_RAIL_TO_WAYPOINT_TIP                                :{BLACK}Onvertcay ailray otay aypointway
+STR_CANT_BUILD_TRAIN_WAYPOINT                                   :{WHITE}An'tcay uildbay aintray aypointway erehay...
+STR_CANT_REMOVE_TRAIN_WAYPOINT                                  :{WHITE}An'tcay emoveray aintray aypointway erehay...
+
+STR_BUILD_AUTORAIL_TIP                                          :{BLACK}Uildbay ailwayray acktray usingway ethay Autorailway odemay
+
+STR_NO_TOWN_IN_SCENARIO                                         :{WHITE}...erethay isway onay owntay inway isthay enarioscay
+
+STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Areway ouyay uresay ouyay antway otay eatecray away andomray andscapelay?
+STR_MANY_RANDOM_TOWNS                                           :{BLACK}Anymay andomray ownstay
+STR_RANDOM_TOWNS_TIP                                            :{BLACK}Overcay ethay apmay ithway andomlyray acedplay ownstay
+STR_MANY_RANDOM_INDUSTRIES                                      :Anymay andomray industriesway
+STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Overcay ethay apmay ithway andomlyray acedplay industriesway
+STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}An'tcay enerategay industriesway...
+
+STR_LANDSCAPING_TOOLBAR_TIP                                     :{BLACK}Openway ethay andscapinglay oolbartay otay aiseray/owerlay andlay, antplay eestray, etcway.
+STR_LANDSCAPING_TOOLBAR                                         :{WHITE}Andscapinglay
+STR_LEVEL_LAND_TOOLTIP                                          :{BLACK}Evellay andlay
+
+
+STR_TREES_RANDOM_TYPE                                           :{BLACK}Eestray ofway andomray ypetay
+STR_TREES_RANDOM_TYPE_TIP                                       :{BLACK}Aceplay eestray ofway andomray ypetay
+
+STR_CANT_BUILD_CANALS                                           :{WHITE}An'tcay uildbay analscay erehay...
+STR_BUILD_CANALS_TIP                                            :{BLACK}Uildbay analscay.
+STR_LANDINFO_CANAL                                              :Analcay
+
+STR_CANT_BUILD_LOCKS                                            :{WHITE}An'tcay uildbay ockslay erehay...
+STR_BUILD_LOCKS_TIP                                             :{BLACK}Uildbay ockslay
+STR_LANDINFO_LOCK                                               :Ocklay
+
+STR_BUOY_IS_IN_USE                                              :{WHITE}...uoybay isway inway useway!
+
+STR_LANDINFO_COORDS                                             :{BLACK}Oordinatescay: {LTBLUE}{NUM}xay{NUM} ({STRING})
+
+STR_CANT_REMOVE_PART_OF_STATION                                 :{WHITE}An'tcay emoveray artpay ofway ationstay...
+STR_CANT_CONVERT_RAIL                                           :{WHITE}An'tcay onvertcay ailtyperay erehay...
+STR_CONVERT_RAIL_TIP                                            :{BLACK}Onvertcay/Upgradeway ethay ypetay ofway ailray
+
+STR_DRAG_WHOLE_TRAIN_TO_SELL_TIP                                :{BLACK}Agdray aintray engineway erehay otay ellsay ethay olewhay aintray
+
+STR_DRAG_DROP                                                   :{BLACK}Agdray & Opdray
+STR_STATION_DRAG_DROP                                           :{BLACK}Uildbay away ationstay usingway agdray & opdray
+STR_SELECT_STATION_CLASS_TIP                                    :{BLACK}Electsay away ationstay assclay otay isplayday
+STR_SELECT_STATION_TYPE_TIP                                     :{BLACK}Electsay ethay ationstay ypetay otay uildbay
+
+STR_FAST_FORWARD                                                :{BLACK}Astfay orwardfay ethay amegay
+STR_MESSAGE_HISTORY                                             :{WHITE}Essagemay Istoryhay
+STR_MESSAGE_HISTORY_TIP                                         :{BLACK}Away istlay ofway ethay ecentray ewsnay essagesmay
+STR_MESSAGES_DISABLE_ALL                                        :{BLACK}Isableday allway
+STR_MESSAGES_ENABLE_ALL                                         :{BLACK}Enableway allway
+
+STR_CONSTRUCT_COAL_MINE_TIP                                     :{BLACK}Onstructcay Oalcay Inemay
+STR_CONSTRUCT_FOREST_TIP                                        :{BLACK}Antplay Orestfay
+STR_CONSTRUCT_OIL_RIG_TIP                                       :{BLACK}Onstructcay Oilway Igray
+STR_CONSTRUCT_FARM_TIP                                          :{BLACK}Undfay Armfay
+STR_CONSTRUCT_COPPER_ORE_MINE_TIP                               :{BLACK}Onstructcay Oppercay Oreway Inemay
+STR_CONSTRUCT_OIL_WELLS_TIP                                     :{BLACK}Illdray orfay Oilway
+STR_CONSTRUCT_GOLD_MINE_TIP                                     :{BLACK}Onstructcay Oldgay Inemay
+STR_CONSTRUCT_DIAMOND_MINE_TIP                                  :{BLACK}Onstructcay Iamondday Inemay
+STR_CONSTRUCT_IRON_ORE_MINE_TIP                                 :{BLACK}Onstructcay Ironway Oreway Inemay
+STR_CONSTRUCT_FRUIT_PLANTATION_TIP                              :{BLACK}Undfay Uitfray Antationplay
+STR_CONSTRUCT_RUBBER_PLANTATION_TIP                             :{BLACK}Undfay Ubberray Antationplay
+STR_CONSTRUCT_WATER_SUPPLY_TIP                                  :{BLACK}Undfay Aterway Upplysay
+STR_CONSTRUCT_COTTON_CANDY_TIP                                  :{BLACK}Antplay Andyflosscay Orestfay
+STR_CONSTRUCT_BATTERY_FARM_TIP                                  :{BLACK}Undfay Atterybay Armfay
+STR_CONSTRUCT_COLA_WELLS_TIP                                    :{BLACK}Illdray orfay Olacay
+STR_CONSTRUCT_PLASTIC_FOUNTAINS_TIP                             :{BLACK}Undfay Asticplay Ountainsfay
+STR_CONSTRUCT_BUBBLE_GENERATOR_TIP                              :{BLACK}Onstructcay Ubblebay Eneratorgay
+STR_CONSTRUCT_TOFFEE_QUARRY_TIP                                 :{BLACK}Undfay Offeetay Arryquay
+STR_CONSTRUCT_SUGAR_MINE_TIP                                    :{BLACK}Onstructcay Ugarsay Inemay
+
+STR_INDUSTRYDIR_CAPTION                                         :{WHITE}Industriesway
+STR_INDUSTRYDIR_ITEM                                            :{ORANGE}{INDUSTRY}{BLACK} ({CARGO}){YELLOW} ({COMMA}% ansportedtray)
+STR_INDUSTRYDIR_ITEM_TWO                                        :{ORANGE}{INDUSTRY}{BLACK} ({CARGO}/{CARGO}){YELLOW} ({COMMA}%/{COMMA}% ansportedtray)
+STR_INDUSTRYDIR_ITEM_NOPROD                                     :{ORANGE}{INDUSTRY}
+
+STR_INDUSTRY_TOO_CLOSE                                          :{WHITE}...ootay oseclay otay anotherway industryway
+
+STR_RAIL_REFIT_VEHICLE_TO_CARRY                                 :{BLACK}Efitray aintray otay arrycay away ifferentday argocay ypetay
+STR_RAIL_REFIT_VEHICLE                                          :{BLACK}Efitray aintray
+STR_RAIL_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Electsay ypetay ofway argocay orfay aintray otay arrycay
+STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED                             :{BLACK}Efitray aintray otay arrycay ighlightedhay argocay ypetay
+STR_RAIL_CAN_T_REFIT_VEHICLE                                    :{WHITE}An'tcay efitray aintray...
+STR_CONFIG_PATCHES_SERVINT_ISPERCENT                            :{LTBLUE}Ervicesay intervalsway areway inway ercentspay: {ORANGE}{STRING}
+STR_CONFIG_GAME_PRODUCTION                                      :{WHITE}Angechay oductionpray
+
+TEMP_AI_IN_PROGRESS                                             :{WHITE}Elcomeway otay ethay ewnay AIWAY underway evelopmentday. Ifway ouyay encounterway oblemspray, aketay away eenshotscray andway ostpay itway inway ethay orumfay.
+TEMP_AI_ACTIVATED                                               :{WHITE}Arningway: isthay ewnay AIWAY isway illstay alphaway! Urrentlycay, onlyway uckstray andway ussesbay orkway!
+TEMP_AI_MULTIPLAYER                                             :{WHITE}Arningway: implementationway isway illstay experimentalway (usingway ewnay AIWAY). Easeplay eportray anyway oblemspray otay uelighttray@openttdway.orgway.
+
+############ network gui strings
+
+STR_NETWORK_MULTIPLAYER                                         :{WHITE}Ultiplayermay
+
+STR_NETWORK_PLAYER_NAME                                         :{BLACK}Ayerplay amenay:
+STR_NETWORK_ENTER_NAME_TIP                                      :{BLACK}Isthay isway ethay amenay otherway ayersplay illway identifyway ouyay ybay
+STR_NETWORK_CONNECTION                                          :{BLACK}Onnectioncay:
+STR_NETWORK_CONNECTION_TIP                                      :{BLACK}Oosechay etweenbay anway internetway amegay orway away Ocallay Areaway Etworknay (LANay) amegay
+
+STR_NETWORK_START_SERVER                                        :{BLACK}Artstay erversay
+STR_NETWORK_START_SERVER_TIP                                    :{BLACK}Artstay ouryay ownway erversay
+
+STR_NETWORK_GAME_NAME                                           :{BLACK}Amenay
+STR_NETWORK_GAME_NAME_TIP                                       :{BLACK}Amenay ofway ethay amegay
+STR_NETWORK_INFO_ICONS_TIP                                      :{BLACK}Anguagelay, erversay ersionvay, etcway.
+STR_NETWORK_CLICK_GAME_TO_SELECT                                :{BLACK}Ickclay away amegay omfray ethay istlay otay electsay itway
+
+STR_NETWORK_FIND_SERVER                                         :{BLACK}Indfay erversay
+STR_NETWORK_FIND_SERVER_TIP                                     :{BLACK}Earchsay etworknay orfay away erversay
+STR_NETWORK_ADD_SERVER                                          :{BLACK}Addway erversay
+STR_NETWORK_ADD_SERVER_TIP                                      :{BLACK}Addsway away erversay otay ethay istlay ichwhay illway alwaysway ebay eckedchay orfay unningray amesgay.
+STR_NETWORK_ENTER_IP                                            :{BLACK}Enterway ethay addressway ofway ethay osthay
+
+STR_NETWORK_GENERAL_ONLINE                                      :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA}
+STR_NETWORK_CLIENTS_CAPTION                                     :{BLACK}Ientsclay
+STR_NETWORK_CLIENTS_CAPTION_TIP                                 :{BLACK}Ientsclay onlineway / ientsclay axmay{}Ompaniescay onlineway / ompaniescay axmay
+STR_NETWORK_GAME_INFO                                           :{SILVER}EGAMay INFOWAY
+STR_ORANGE                                                      :{ORANGE}{STRING}
+STR_NETWORK_CLIENTS                                             :{SILVER}Ientsclay:  {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
+STR_NETWORK_LANGUAGE                                            :{SILVER}Anguagelay:  {WHITE}{STRING}
+STR_NETWORK_TILESET                                             :{SILVER}Ilesettay:  {WHITE}{STRING}
+STR_NETWORK_MAP_SIZE                                            :{SILVER}Apmay izesay:  {WHITE}{COMMA}xay{COMMA}
+STR_NETWORK_SERVER_VERSION                                      :{SILVER}Erversay ersionvay:  {WHITE}{STRING}
+STR_NETWORK_SERVER_ADDRESS                                      :{SILVER}Erversay addressway:  {WHITE}{STRING} : {NUM}
+STR_NETWORK_START_DATE                                          :{SILVER}Artstay ateday:  {WHITE}{DATE_SHORT}
+STR_NETWORK_CURRENT_DATE                                        :{SILVER}Urrentcay ateday:  {WHITE}{DATE_SHORT}
+STR_NETWORK_PASSWORD                                            :{SILVER}Asswordpay otectedpray!
+STR_NETWORK_SERVER_OFFLINE                                      :{SILVER}ERVERSay OFFLINEWAY
+STR_NETWORK_SERVER_FULL                                         :{SILVER}ERVERSay ULLFay
+STR_NETWORK_VERSION_MISMATCH                                    :{SILVER}ERSIONVay ISMATCHMay
+STR_NETWORK_GRF_MISMATCH                                        :{SILVER}EWGRFNay ISMATCHMay
+
+STR_NETWORK_JOIN_GAME                                           :{BLACK}Oinjay amegay
+
+
+STR_NETWORK_START_GAME_WINDOW                                   :{WHITE}Artstay ewnay ultiplayermay amegay
+
+STR_NETWORK_NEW_GAME_NAME                                       :{BLACK}Amegay amenay:
+STR_NETWORK_NEW_GAME_NAME_TIP                                   :{BLACK}Ethay amegay amenay illway ebay isplayedday otay otherway ayersplay inway ethay ultiplayermay amegay electionsay enumay
+STR_NETWORK_SET_PASSWORD                                        :{BLACK}Etsay asswordpay
+STR_NETWORK_PASSWORD_TIP                                        :{BLACK}Otectpray ouryay amegay ithway away asswordpay ifway ouyay on'tday antway itway otay ebay ubliclypay accessibleway
+STR_NETWORK_SELECT_MAP                                          :{BLACK}Electsay away apmay:
+STR_NETWORK_SELECT_MAP_TIP                                      :{BLACK}Ichwhay apmay oday ouyay antway otay ayplay?
+STR_NETWORK_NUMBER_OF_CLIENTS                                   :{BLACK}Axmay ientsclay:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP                               :{BLACK}Oosechay ethay aximummay umbernay ofway ientsclay. Otnay allway otsslay eednay otay ebay illedfay
+STR_NETWORK_COMBO1                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LAN                                                 :LANay
+STR_NETWORK_INTERNET                                            :Internetway
+STR_NETWORK_LAN_INTERNET                                        :LANay / Internetway
+STR_NETWORK_INTERNET_ADVERTISE                                  :Internetway (advertiseway)
+STR_NETWORK_COMBO2                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_0_PLAYERS                                           :0 ayersplay
+STR_NETWORK_1_PLAYERS                                           :1 ayerplay
+STR_NETWORK_2_PLAYERS                                           :2 ayersplay
+STR_NETWORK_3_PLAYERS                                           :3 ayersplay
+STR_NETWORK_4_PLAYERS                                           :4 ayersplay
+STR_NETWORK_5_PLAYERS                                           :5 ayersplay
+STR_NETWORK_6_PLAYERS                                           :6 ayersplay
+STR_NETWORK_7_PLAYERS                                           :7 ayersplay
+STR_NETWORK_8_PLAYERS                                           :8 ayersplay
+STR_NETWORK_9_PLAYERS                                           :9 ayersplay
+STR_NETWORK_10_PLAYERS                                          :10 ayersplay
+STR_NETWORK_NUMBER_OF_COMPANIES                                 :{BLACK}Axmay ompaniescay:
+STR_NETWORK_NUMBER_OF_COMPANIES_TIP                             :{BLACK}Imitlay ethay erversay otay away ertaincay amountway ofway ompaniescay
+STR_NETWORK_COMBO3                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_NUMBER_OF_SPECTATORS                                :{BLACK}Axmay ectatorsspay:
+STR_NETWORK_NUMBER_OF_SPECTATORS_TIP                            :{BLACK}Imitlay ethay erversay otay away ertaincay amountway ofway ectatorsspay
+STR_NETWORK_COMBO4                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LANGUAGE_SPOKEN                                     :{BLACK}Anguagelay okenspay:
+STR_NETWORK_LANGUAGE_TIP                                        :{BLACK}Otherway ayersplay illway owknay ichwhay anguagelay isway okenspay onway ethay erversay
+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}Artstay Amegay
+STR_NETWORK_START_GAME_TIP                                      :{BLACK}Artstay away ewnay etworknay amegay omfray away andomray apmay, orway enarioscay
+STR_NETWORK_LOAD_GAME                                           :{BLACK}Oadlay Amegay
+STR_NETWORK_LOAD_GAME_TIP                                       :{BLACK}Esumeray anway earlierway avedsay ultiplayermay amegay (ebay uresay otay onnectcay asway ethay orrectcay ayerplay)
+
+############ Leave those lines in this order!!
+STR_NETWORK_LANG_ANY                                            :Anyway
+STR_NETWORK_LANG_ENGLISH                                        :Englishway
+STR_NETWORK_LANG_GERMAN                                         :Ermangay
+STR_NETWORK_LANG_FRENCH                                         :Enchfray
+STR_NETWORK_LANG_BRAZILIAN                                      :Azilianbray
+STR_NETWORK_LANG_BULGARIAN                                      :Ulgarianbay
+STR_NETWORK_LANG_CHINESE                                        :Inesechay
+STR_NETWORK_LANG_CZECH                                          :Echczay
+STR_NETWORK_LANG_DANISH                                         :Anishday
+STR_NETWORK_LANG_DUTCH                                          :Utchday
+STR_NETWORK_LANG_ESPERANTO                                      :Esperantoway
+STR_NETWORK_LANG_FINNISH                                        :Innishfay
+STR_NETWORK_LANG_HUNGARIAN                                      :Ungarianhay
+STR_NETWORK_LANG_ICELANDIC                                      :Icelandicway
+STR_NETWORK_LANG_ITALIAN                                        :Italianway
+STR_NETWORK_LANG_JAPANESE                                       :Apanesejay
+STR_NETWORK_LANG_KOREAN                                         :Oreankay
+STR_NETWORK_LANG_LITHUANIAN                                     :Ithuanianlay
+STR_NETWORK_LANG_NORWEGIAN                                      :Orwegiannay
+STR_NETWORK_LANG_POLISH                                         :Olishpay
+STR_NETWORK_LANG_PORTUGUESE                                     :Ortuguesepay
+STR_NETWORK_LANG_ROMANIAN                                       :Omanianray
+STR_NETWORK_LANG_RUSSIAN                                        :Ussianray
+STR_NETWORK_LANG_SLOVAK                                         :Ovakslay
+STR_NETWORK_LANG_SLOVENIAN                                      :Ovenianslay
+STR_NETWORK_LANG_SPANISH                                        :Anishspay
+STR_NETWORK_LANG_SWEDISH                                        :Edishsway
+STR_NETWORK_LANG_TURKISH                                        :Urkishtay
+STR_NETWORK_LANG_UKRAINIAN                                      :Ukrainianway
+############ End of leave-in-this-order
+
+STR_NETWORK_GAME_LOBBY                                          :{WHITE}Ultiplayermay amegay obbylay
+
+STR_NETWORK_PREPARE_TO_JOIN                                     :{BLACK}Eparingpray otay oinjay:   {ORANGE}{STRING}
+STR_NETWORK_COMPANY_LIST_TIP                                    :{BLACK}Away istlay ofway allway ompaniescay urrentlycay inway isthay amegay. Ouyay ancay eitherway oinjay oneway orway artstay away ewnay oneway ifway erethay isway away eefray ompanycay otslay
+STR_NETWORK_NEW_COMPANY                                         :{BLACK}Ewnay ompanycay
+STR_NETWORK_NEW_COMPANY_TIP                                     :{BLACK}Eatecray away ewnay ompanycay
+STR_NETWORK_SPECTATE_GAME                                       :{BLACK}Ectatespay amegay
+STR_NETWORK_SPECTATE_GAME_TIP                                   :{BLACK}Atchway ethay amegay asway away ectatorspay
+STR_NETWORK_JOIN_COMPANY                                        :{BLACK}Oinjay ompanycay
+STR_NETWORK_JOIN_COMPANY_TIP                                    :{BLACK}Elphay anagemay isthay ompanycay
+STR_NETWORK_REFRESH                                             :{BLACK}Efreshray erversay
+STR_NETWORK_REFRESH_TIP                                         :{BLACK}Efreshray ethay erversay infoway
+
+STR_NETWORK_COMPANY_INFO                                        :{SILVER}OMPANYCay INFOWAY
+
+STR_NETWORK_COMPANY_NAME                                        :{SILVER}Ompanycay amenay:  {WHITE}{STRING}
+STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Inaugurationway:  {WHITE}{NUM}
+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}
+STR_NETWORK_STATIONS                                            :{SILVER}Ationsstay:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
+STR_NETWORK_PLAYERS                                             :{SILVER}Ayersplay:  {WHITE}{STRING}
+
+STR_NETWORK_CONNECTING                                          :{WHITE}Onnectingcay...
+
+############ Leave those lines in this order!!
+STR_NETWORK_CONNECTING_1                                        :{BLACK}(1/6) Onnectingcay..
+STR_NETWORK_CONNECTING_2                                        :{BLACK}(2/6) Authorisingway..
+STR_NETWORK_CONNECTING_3                                        :{BLACK}(3/6) Aitingway..
+STR_NETWORK_CONNECTING_4                                        :{BLACK}(4/6) Ownloadingday apmay..
+STR_NETWORK_CONNECTING_5                                        :{BLACK}(5/6) Ocessingpray ataday..
+STR_NETWORK_CONNECTING_6                                        :{BLACK}(6/6) Egisteringray..
+
+STR_NETWORK_CONNECTING_SPECIAL_1                                :{BLACK}Etchingfay amegay infoway..
+STR_NETWORK_CONNECTING_SPECIAL_2                                :{BLACK}Etchingfay ompanycay infoway..
+############ End of leave-in-this-order
+STR_NETWORK_CONNECTING_WAITING                                  :{BLACK}{NUM} ient{P "" s}clay inway ontfray ofway ouyay
+STR_NETWORK_CONNECTING_DOWNLOADING                              :{BLACK}{NUM} / {NUM} yteskbay ownloadedday osay arfay
+
+STR_NETWORK_DISCONNECT                                          :{BLACK}Isconnectday
+
+STR_NETWORK_GIVE_MONEY_CAPTION                                  :{WHITE}Enterway ethay amountway ofway oneymay ouyay antway otay ivegay
+STR_NETWORK_NEED_GAME_PASSWORD_CAPTION                          :{WHITE}Erversay isway otectedpray. Enterway asswordpay
+STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION                       :{WHITE}Ompanycay isway otectedpray. Enterway asswordpay
+STR_NETWORK_CLIENT_LIST                                         :{WHITE}Ientclay Istlay
+
+STR_NETWORK_ERR_NOTAVAILABLE                                    :{WHITE} Onay etworknay evicesday oundfay orway ompiledcay ithoutway ENABLEWAY_ETWORKNay
+STR_NETWORK_ERR_NOSERVER                                        :{WHITE} Ouldcay otnay indfay anyway etworknay amesgay
+STR_NETWORK_ERR_NOCONNECTION                                    :{WHITE} Ethay erversay idn'tday answerway ethay equestray
+STR_NETWORK_ERR_NEWGRF_MISMATCH                                 :{WHITE} Ouldcay otnay onnectcay ueday otay EwGRFnay ismatchmay
+STR_NETWORK_ERR_DESYNC                                          :{WHITE} Etworknay-Amegay ynchronisationsay ailedfay
+STR_NETWORK_ERR_LOSTCONNECTION                                  :{WHITE} Etworknay-Amegay onnectioncay ostlay
+STR_NETWORK_ERR_SAVEGAMEERROR                                   :{WHITE} Ouldcay otnay oadlay avegamesay
+STR_NETWORK_ERR_SERVER_START                                    :{WHITE} Ouldcay otnay artstay ethay erversay
+STR_NETWORK_ERR_CLIENT_START                                    :{WHITE} Ouldcay otnay onnectcay
+STR_NETWORK_ERR_TIMEOUT                                         :{WHITE} Onnectioncay #{NUM} imedtay outway
+STR_NETWORK_ERR_SERVER_ERROR                                    :{WHITE} Away otocolpray-errorway asway ademay andway ethay onnectioncay asway osedclay
+STR_NETWORK_ERR_WRONG_REVISION                                  :{WHITE} Ethay evisionray ofway isthay ientclay oesday otnay atchmay ethay erver'ssay evisionray
+STR_NETWORK_ERR_WRONG_PASSWORD                                  :{WHITE} Ongwray asswordpay
+STR_NETWORK_ERR_SERVER_FULL                                     :{WHITE} Ethay erversay isway ullfay
+STR_NETWORK_ERR_SERVER_BANNED                                   :{WHITE} Ouyay areway annedbay omfray isthay erversay
+STR_NETWORK_ERR_KICKED                                          :{WHITE} Ouyay ereway ickedkay outway ofway ethay amegay
+STR_NETWORK_ERR_CHEATER                                         :{WHITE} Eatingchay isway otnay allowedway onway isthay erversay
+
+STR_NETWORK_ERR_LEFT                                            :ashay eftlay ethay amegay
+############ Leave those lines in this order!!
+STR_NETWORK_ERR_CLIENT_GENERAL                                  :eneralgay errorway
+STR_NETWORK_ERR_CLIENT_DESYNC                                   :esyncday errorway
+STR_NETWORK_ERR_CLIENT_SAVEGAME                                 :ouldcay otnay oadlay apmay
+STR_NETWORK_ERR_CLIENT_CONNECTION_LOST                          :onnectioncay ostlay
+STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR                           :otocolpray errorway
+STR_NETWORK_ERR_CLIENT_NEWGRF_MISMATCH                          :EwGRFnay ismatchmay
+STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED                           :otnay authorizedway
+STR_NETWORK_ERR_CLIENT_NOT_EXPECTED                             :eceivedray angestray acketpay
+STR_NETWORK_ERR_CLIENT_WRONG_REVISION                           :ongwray evisionray
+STR_NETWORK_ERR_CLIENT_NAME_IN_USE                              :amenay alreadyway inway useway
+STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD                           :ongwray asswordpay
+STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH                          :ongwray ayerplay-idway inway OCommandday
+STR_NETWORK_ERR_CLIENT_KICKED                                   :ickedkay ybay erversay
+STR_NETWORK_ERR_CLIENT_CHEATER                                  :asway yingtray otay useway away eatchay
+STR_NETWORK_ERR_CLIENT_SERVER_FULL                              :erversay ullfay
+############ End of leave-in-this-order
+STR_NETWORK_CLIENT_JOINED                                       :ashay oinedjay ethay amegay
+STR_NETWORK_GIVE_MONEY                                          :avegay ouryay ompanycay omesay oneymay ({CURRENCY})
+STR_NETWORK_GAVE_MONEY_AWAY                                     :ouyay avegay {STRING} omesay oneymay ({CURRENCY})
+STR_NETWORK_CHAT_COMPANY_CAPTION                                :[Eamtay] :
+STR_NETWORK_CHAT_COMPANY                                        :[Eamtay] {STRING}: {GRAY}{STRING}
+STR_NETWORK_CHAT_TO_COMPANY                                     :[Eamtay] Otay {STRING}: {GRAY}{STRING}
+STR_NETWORK_CHAT_CLIENT_CAPTION                                 :[Ivatepray] :
+STR_NETWORK_CHAT_CLIENT                                         :[Ivatepray] {STRING}: {GRAY}{STRING}
+STR_NETWORK_CHAT_TO_CLIENT                                      :[Ivatepray] Otay {STRING}: {GRAY}{STRING}
+STR_NETWORK_CHAT_ALL_CAPTION                                    :[Allway] :
+STR_NETWORK_CHAT_ALL                                            :[Allway] {STRING}: {GRAY}{STRING}
+STR_NETWORK_NAME_CHANGE                                         :ashay angedchay ishay/erhay amenay otay
+STR_NETWORK_SERVER_SHUTDOWN                                     :{WHITE} Ethay erversay osedclay ethay essionsay
+STR_NETWORK_SERVER_REBOOT                                       :{WHITE} Ethay erversay isway estartingray...{}Easeplay aitway...
+
+STR_NETWORK_SERVER                                              :Erversay
+STR_NETWORK_CLIENT                                              :Ientclay
+STR_NETWORK_SPECTATORS                                          :Ectatorsspay
+
+STR_NETWORK_CLIENTLIST_NONE                                     :(onenay)
+STR_NETWORK_CLIENTLIST_KICK                                     :Ickkay
+STR_NETWORK_CLIENTLIST_GIVE_MONEY                               :Ivegay oneymay
+STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL                             :Eakspay otay allway
+STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY                         :Eakspay otay ompanycay
+STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT                          :Ivatepray essagemay
+
+
+STR_NETWORK_SEND                                                :{BLACK}Endsay
+
+############ end network gui strings
+
+
+STR_CONFIG_PATCHES_MAP_X                                        :{LTBLUE}Xay-izesay ofway apmay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAP_Y                                        :{LTBLUE}Yay-izesay ofway apmay: {ORANGE}{STRING}
+
+
+##### PNG-MAP-Loader
+
+STR_PNGMAP_ERROR                                                :{WHITE}Annotcay oadlay andscapelay omfray PNGay...
+STR_PNGMAP_ERR_FILE_NOT_FOUND                                   :{WHITE}...ilefay otnay oundfay.
+STR_PNGMAP_ERR_IMAGE_TYPE                                       :{WHITE}...ouldcay otnay onvertcay imageway ypetay. 8 orway 24-itbay PNGay imageway eedednay.
+STR_PNGMAP_ERR_MISC                                             :{WHITE}...omethingsay ustjay entway ongwray. Orrysay. (obablypray orruptedcay ilefay)
+
+STR_BMPMAP_ERROR                                                :{WHITE}Annotcay oadlay andscapelay omfray BMPay...
+STR_BMPMAP_ERR_IMAGE_TYPE                                       :{WHITE}...ouldcay otnay onvertcay imageway ypetay.
+
+##id 0x0800
+STR_0800_COST                                                   :{TINYFONT}{RED}Ostcay: {CURRENCY}
+STR_0801_COST                                                   :{RED}Ostcay: {CURRENCY}
+STR_0802_INCOME                                                 :{TINYFONT}{GREEN}Incomeway: {CURRENCY}
+STR_0803_INCOME                                                 :{GREEN}Incomeway: {CURRENCY}
+STR_FEEDER_TINY                                                 :{TINYFONT}{YELLOW}Ansfertray: {CURRENCY}
+STR_FEEDER                                                      :{YELLOW}Ansfertray: {CURRENCY}
+STR_0805_ESTIMATED_COST                                         :{WHITE}Estimatedway Ostcay: {CURRENCY}
+STR_0807_ESTIMATED_INCOME                                       :{WHITE}Estimatedway Incomeway: {CURRENCY}
+STR_0808_CAN_T_RAISE_LAND_HERE                                  :{WHITE}An'tcay aiseray andlay erehay...
+STR_0809_CAN_T_LOWER_LAND_HERE                                  :{WHITE}An'tcay owerlay andlay erehay...
+STR_080A_ROCKS                                                  :Ocksray
+STR_080B_ROUGH_LAND                                             :Oughray andlay
+STR_080C_BARE_LAND                                              :Arebay andlay
+STR_080D_GRASS                                                  :Assgray
+STR_080E_FIELDS                                                 :Ieldsfay
+STR_080F_SNOW_COVERED_LAND                                      :Owsnay-overedcay andlay
+STR_0810_DESERT                                                 :Esertday
+
+##id 0x1000
+STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION                         :{WHITE}Andlay opedslay inway ongwray irectionday
+STR_1001_IMPOSSIBLE_TRACK_COMBINATION                           :{WHITE}Impossibleway acktray ombinationcay
+STR_1002_EXCAVATION_WOULD_DAMAGE                                :{WHITE}Excavationway ouldway amageday unneltay
+STR_1003_ALREADY_AT_SEA_LEVEL                                   :{WHITE}Alreadyway atway easay-evellay
+STR_1004_TOO_HIGH                                               :{WHITE}Ootay ighhay
+STR_1005_NO_SUITABLE_RAILROAD_TRACK                             :{WHITE}Onay uitablesay ailwayray acktray
+STR_1007_ALREADY_BUILT                                          :{WHITE}...alreadyway uiltbay
+STR_1008_MUST_REMOVE_RAILROAD_TRACK                             :{WHITE}Ustmay emoveray ailwayray acktray irstfay
+STR_100A_RAILROAD_CONSTRUCTION                                  :{WHITE}Ailwayray Onstructioncay
+STR_TITLE_ELRAIL_CONSTRUCTION                                   :{WHITE}Electrifiedway Ailwayray Onstructioncay
+STR_100B_MONORAIL_CONSTRUCTION                                  :{WHITE}Onorailmay Onstructioncay
+STR_100C_MAGLEV_CONSTRUCTION                                    :{WHITE}AgLevmay Onstructioncay
+STR_100D_SELECT_RAIL_BRIDGE                                     :{WHITE}Electsay Ailray Idgebray
+STR_100E_CAN_T_BUILD_TRAIN_DEPOT                                :{WHITE}An'tcay uildbay aintray epotday erehay...
+STR_100F_CAN_T_BUILD_RAILROAD_STATION                           :{WHITE}An'tcay uildbay ailwayray ationstay erehay...
+STR_1010_CAN_T_BUILD_SIGNALS_HERE                               :{WHITE}An'tcay uildbay ignalssay erehay...
+STR_1011_CAN_T_BUILD_RAILROAD_TRACK                             :{WHITE}An'tcay uildbay ailwayray acktray erehay...
+STR_1012_CAN_T_REMOVE_RAILROAD_TRACK                            :{WHITE}An'tcay emoveray ailwayray acktray omfray erehay...
+STR_1013_CAN_T_REMOVE_SIGNALS_FROM                              :{WHITE}An'tcay emoveray ignalssay omfray erehay...
+STR_1014_TRAIN_DEPOT_ORIENTATION                                :{WHITE}Aintray Epotday Orientationway
+STR_1015_RAILROAD_CONSTRUCTION                                  :Ailwayray onstructioncay
+STR_TOOLB_ELRAIL_CONSTRUCTION                                   :Electrifiedway Ailwayray onstructioncay
+STR_1016_MONORAIL_CONSTRUCTION                                  :Onorailmay onstructioncay
+STR_1017_MAGLEV_CONSTRUCTION                                    :AgLevmay onstructioncay
+STR_1018_BUILD_RAILROAD_TRACK                                   :{BLACK}Uildbay ailwayray acktray
+STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING                         :{BLACK}Uildbay aintray epotday (orfay uildingbay andway ervicingsay ainstray)
+STR_101A_BUILD_RAILROAD_STATION                                 :{BLACK}Uildbay ailwayray ationstay
+STR_101B_BUILD_RAILROAD_SIGNALS                                 :{BLACK}Uildbay ailwayray ignalssay
+STR_101C_BUILD_RAILROAD_BRIDGE                                  :{BLACK}Uildbay ailwayray idgebray
+STR_101D_BUILD_RAILROAD_TUNNEL                                  :{BLACK}Uildbay ailwayray unneltay
+STR_101E_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Oggletay uildbay/emoveray orfay ailwayray acktray andway ignalssay
+STR_101F_BRIDGE_SELECTION_CLICK                                 :{BLACK}Idgebray electionsay - ickclay onway ouryay eferedpray idgebray otay uildbay itway
+STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO                       :{BLACK}Electsay ailwayray epotday orientationway
+STR_1021_RAILROAD_TRACK                                         :Ailwayray acktray
+STR_1023_RAILROAD_TRAIN_DEPOT                                   :Ailwayray aintray epotday
+STR_1024_AREA_IS_OWNED_BY_ANOTHER                               :{WHITE}...areaway isway ownedway ybay anotherway ompanycay
+STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS                          :Ailwayray acktray ithway ormalnay ignalssay
+STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Ailwayray acktray ithway epray-ignalssay
+STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Ailwayray acktray ithway exitway-ignalssay
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Ailwayray acktray ithway ombocay-ignalssay
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Ailwayray acktray ithway ormalnay andway epray-ignalssay
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Ailwayray acktray ithway ormalnay andway exitway-ignalssay
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Ailwayray acktray ithway ormalnay andway ombocay-ignalssay
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Ailwayray acktray ithway epray- andway exitway-ignalssay
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Ailwayray acktray ithway epray- andway ombocay-ignalssay
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Ailwayray acktray ithway exitway- andway ombocay-ignalssay
+STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Ustmay emoveray ailwayray ationstay irstfay
+
+
+
+##id 0x1800
+STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Ustmay emoveray oadray irstfay
+STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Oadray orksway inway ogresspray
+STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Oadray Onstructioncay
+STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Amwaytray Onstructioncay
+STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Electsay Oadray Idgebray
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}... oneway ayway oadsray an'tcay avehay unctionsjay
+STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}An'tcay uildbay oadray erehay...
+STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}An'tcay uildbay amwaytray erehay...
+STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}An'tcay emoveray oadray omfray erehay...
+STR_1805_CAN_T_REMOVE_TRAMWAY_FROM                              :{WHITE}An'tcay emoveray amwaytray omfray erehay...
+STR_1806_ROAD_DEPOT_ORIENTATION                                 :{WHITE}Oadray Epotday Orientationway
+STR_1806_TRAM_DEPOT_ORIENTATION                                 :{WHITE}Amtray Epotday Orientationway
+STR_1807_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}An'tcay uildbay oadray ehiclevay epotday erehay...
+STR_1807_CAN_T_BUILD_TRAM_VEHICLE                               :{WHITE}An'tcay uildbay amtray ehiclevay epotday erehay...
+STR_1808_CAN_T_BUILD_BUS_STATION                                :{WHITE}An'tcay uildbay usbay ationstay...
+STR_1809_CAN_T_BUILD_TRUCK_STATION                              :{WHITE}An'tcay uildbay orrylay ationstay...
+STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION                     :{WHITE}An'tcay uildbay assengerpay amtray ationstay...
+STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION                         :{WHITE}An'tcay uildbay eightfray amtray ationstay...
+STR_180A_ROAD_CONSTRUCTION                                      :Oadray onstructioncay
+STR_180A_TRAMWAY_CONSTRUCTION                                   :Amwaytray onstructioncay
+STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Uildbay oadray ectionsay
+STR_180B_BUILD_TRAMWAY_SECTION                                  :{BLACK}Uildbay amwaytray ectionsay
+STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Uildbay oadray ehiclevay epotday (orfay uildingbay andway ervicingsay ehiclesvay)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT                               :{BLACK}Uildbay amtray ehiclevay epotday (orfay uildingbay andway ervicingsay ehiclesvay)
+STR_180D_BUILD_BUS_STATION                                      :{BLACK}Uildbay usbay ationstay
+STR_180E_BUILD_TRUCK_LOADING_BAY                                :{BLACK}Uildbay orrylay oadinglay aybay
+STR_180D_BUILD_PASSENGER_TRAM_STATION                           :{BLACK}Uildbay assengerpay amtray ationstay
+STR_180E_BUILD_CARGO_TRAM_STATION                               :{BLACK}Uildbay eightfray amtray ationstay
+STR_180F_BUILD_ROAD_BRIDGE                                      :{BLACK}Uildbay oadray idgebray
+STR_180F_BUILD_TRAMWAY_BRIDGE                                   :{BLACK}Uildbay amwaytray idgebray
+STR_1810_BUILD_ROAD_TUNNEL                                      :{BLACK}Uildbay oadray unneltay
+STR_1810_BUILD_TRAMWAY_TUNNEL                                   :{BLACK}Uildbay amwaytray unneltay
+STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Oggletay uildbay/emoveray orfay oadray onstructioncay
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS                       :{BLACK}Oggletay uildbay/emoveray orfay amwaytray onstructioncay
+STR_1813_SELECT_ROAD_VEHICLE_DEPOT                              :{BLACK}Electsay oadray ehiclevay epotday orientationway
+STR_1813_SELECT_TRAM_VEHICLE_DEPOT                              :{BLACK}Electsay amtray ehiclevay epotday orientationway
+STR_1814_ROAD                                                   :Oadray
+STR_1815_ROAD_WITH_STREETLIGHTS                                 :Oadray ithway eetlightsstray
+STR_1816_TREE_LINED_ROAD                                        :Eetray-inedlay oadray
+STR_1817_ROAD_VEHICLE_DEPOT                                     :Oadray ehiclevay epotday
+STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Oadray/ailray evellay ossingcray
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}An'tcay emoveray usbay ationstay...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}An'tcay emoveray orrylay ationstay...
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION                         :{WHITE}An'tcay emoveray assengerpay amtray ationstay...
+STR_CAN_T_REMOVE_CARGO_TRAM_STATION                             :{WHITE}An'tcay emoveray eightfray amtray ationstay...
+
+##id 0x2000
+STR_2000_TOWNS                                                  :{WHITE}Ownstay
+STR_TOWN_LABEL_POP                                              :{WHITE}{TOWN} ({COMMA})
+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}{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}
+STR_2007_RENAME_TOWN                                            :Enameray Owntay
+STR_2008_CAN_T_RENAME_TOWN                                      :{WHITE}An'tcay enameray owntay...
+STR_2009_LOCAL_AUTHORITY_REFUSES                                :{WHITE}{TOWN} ocallay authorityway efusesray otay allowway isthay
+STR_200A_TOWN_NAMES_CLICK_ON_NAME                               :{BLACK}Owntay amesnay - ickclay onway amenay otay entrecay iewvay onway owntay
+STR_200B_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Entrecay ethay ainmay iewvay onway owntay ocationlay
+STR_200C_CHANGE_TOWN_NAME                                       :{BLACK}Angechay owntay amenay
+STR_200D_PASSENGERS_LAST_MONTH_MAX                              :{BLACK}Assengerspay astlay onthmay: {ORANGE}{COMMA}{BLACK}  axmay: {ORANGE}{COMMA}
+STR_200E_MAIL_LAST_MONTH_MAX                                    :{BLACK}Ailmay astlay onthmay: {ORANGE}{COMMA}{BLACK}  axmay: {ORANGE}{COMMA}
+STR_200F_TALL_OFFICE_BLOCK                                      :Alltay officeway ockblay
+STR_2010_OFFICE_BLOCK                                           :Officeway ockblay
+STR_2011_SMALL_BLOCK_OF_FLATS                                   :Allsmay ockblay ofway atsflay
+STR_2012_CHURCH                                                 :Urchchay
+STR_2013_LARGE_OFFICE_BLOCK                                     :Argelay officeway ockblay
+STR_2014_TOWN_HOUSES                                            :Owntay ouseshay
+STR_2015_HOTEL                                                  :Otelhay
+STR_2016_STATUE                                                 :Atuestay
+STR_2017_FOUNTAIN                                               :Ountainfay
+STR_2018_PARK                                                   :Arkpay
+STR_2019_OFFICE_BLOCK                                           :Officeway ockblay
+STR_201A_SHOPS_AND_OFFICES                                      :Opsshay andway officesway
+STR_201B_MODERN_OFFICE_BUILDING                                 :Odernmay officeway uildingbay
+STR_201C_WAREHOUSE                                              :Arehouseway
+STR_201D_OFFICE_BLOCK                                           :Officeway ockblay
+STR_201E_STADIUM                                                :Adiumstay
+STR_201F_OLD_HOUSES                                             :Oldway ouseshay
+STR_2020_LOCAL_AUTHORITY                                        :{BLACK}Ocallay authorityway
+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}{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}
+STR_2028_BY                                                     :{YELLOW} (ybay {DATE_SHORT})
+STR_202A_NONE                                                   :{ORANGE}Onenay
+STR_202B_SERVICES_ALREADY_SUBSIDISED                            :{BLACK}Ervicessay alreadyway ubsidisedsay:
+STR_202C_FROM_TO                                                :{ORANGE}{STRING} omfray {STATION} otay {STATION}{YELLOW} ({COMPANY}
+STR_202D_UNTIL                                                  :{YELLOW}, untilway {DATE_SHORT})
+STR_202E_OFFER_OF_SUBSIDY_EXPIRED                               :{BLACK}{BIGFONT}Offerway ofway ubsidysay expiredway:{}{}{STRING} omfray {STRING} otay {STRING} illway ownay otnay attractway away ubsidysay.
+STR_202F_SUBSIDY_WITHDRAWN_SERVICE                              :{BLACK}{BIGFONT}Ubsidysay ithdrawnway:{}{}{STRING} ervicesay omfray {STATION} otay {STATION} isway onay ongerlay ubsidisedsay.
+STR_2030_SERVICE_SUBSIDY_OFFERED                                :{BLACK}{BIGFONT}Ervicesay ubsidysay offeredway:{}{}Irstfay {STRING} ervicesay omfray {STRING} otay {STRING} illway attractway away ear'syay ubsidysay omfray ethay ocallay authorityway!
+STR_2031_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Ervicesay ubsidysay awardedway otay {COMPANY}!{}{}{STRING} ervicesay omfray {STATION} otay {STATION} illway aypay 50% extraway orfay ethay extnay earyay!
+STR_2032_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Ervicesay ubsidysay awardedway otay {COMPANY}!{}{}{STRING} ervicesay omfray {STATION} otay {STATION} illway aypay oubleday atesray orfay ethay extnay earyay!
+STR_2033_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Ervicesay ubsidysay awardedway otay {COMPANY}!{}{}{STRING} ervicesay omfray {STATION} otay {STATION} illway aypay ipletray atesray orfay ethay extnay earyay!
+STR_2034_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Ervicesay ubsidysay awardedway otay {COMPANY}!{}{}{STRING} ervicesay omfray {STATION} otay {STATION} illway aypay adruplequay atesray orfay ethay extnay earyay!
+STR_2035_LOCAL_AUTHORITY_REFUSES                                :{WHITE}{TOWN} ocallay authorityway efusesray otay allowway anotherway airportway otay ebay uiltbay inway isthay owntay
+STR_2036_COTTAGES                                               :Ottagescay
+STR_2037_HOUSES                                                 :Ouseshay
+STR_2038_FLATS                                                  :Atsflay
+STR_2039_TALL_OFFICE_BLOCK                                      :Alltay officeway ockblay
+STR_203A_SHOPS_AND_OFFICES                                      :Opsshay andway officesway
+STR_203B_SHOPS_AND_OFFICES                                      :Opsshay andway officesway
+STR_203C_THEATER                                                :Eatrethay
+STR_203D_STADIUM                                                :Adiumstay
+STR_203E_OFFICES                                                :Officesway
+STR_203F_HOUSES                                                 :Ouseshay
+STR_2040_CINEMA                                                 :Inemacay
+STR_2041_SHOPPING_MALL                                          :Oppingshay allmay
+STR_2042_DO_IT                                                  :{BLACK}Oday itway
+STR_2043_LIST_OF_THINGS_TO_DO_AT                                :{BLACK}Istlay ofway ingsthay otay oday atway isthay owntay - ickclay onway itemway orfay oremay etailsday
+STR_2044_CARRY_OUT_THE_HIGHLIGHTED                              :{BLACK}Arrycay outway ethay ighlightedhay actionway inway ethay istlay aboveway
+STR_2045_ACTIONS_AVAILABLE                                      :{BLACK}Actionsway availableway:
+STR_2046_SMALL_ADVERTISING_CAMPAIGN                             :Allsmay advertisingway ampaigncay
+STR_2047_MEDIUM_ADVERTISING_CAMPAIGN                            :Ediummay advertisingway ampaigncay
+STR_2048_LARGE_ADVERTISING_CAMPAIGN                             :Argelay advertisingway ampaigncay
+STR_2049_FUND_LOCAL_ROAD_RECONSTRUCTION                         :Undfay ocallay oadray econstructionray
+STR_204A_BUILD_STATUE_OF_COMPANY                                :Uildbay atuestay ofway ompanycay ownerway
+STR_204B_FUND_NEW_BUILDINGS                                     :Undfay ewnay uildingsbay
+STR_204C_BUY_EXCLUSIVE_TRANSPORT                                :Uybay exclusiveway ansporttray ightsray
+STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY                              :Ibebray ethay ocallay authorityway
+STR_204D_INITIATE_A_SMALL_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Initiateway away allsmay ocallay advertisingway ampaigncay, otay attractway oremay assengerspay andway argocay otay ouryay ansporttray ervicessay.{}  Ostcay: {CURRENCY}
+STR_204E_INITIATE_A_MEDIUM_LOCAL                                :{WHITE}{STRING}{}{YELLOW} Initiateway away ediummay ocallay advertisingway ampaigncay, otay attractway oremay assengerspay andway argocay otay ouryay ansporttray ervicessay.{}  Ostcay: {CURRENCY}
+STR_204F_INITIATE_A_LARGE_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Initiateway away argelay ocallay advertisingway ampaigncay, otay attractway oremay assengerspay andway argocay otay ouryay ansporttray ervicessay.{}  Ostcay: {CURRENCY}
+STR_2050_FUND_THE_RECONSTRUCTION                                :{WHITE}{STRING}{}{YELLOW} Undfay ethay econstructionray ofway ethay urbanway oadray etworknay. Ausescay onsiderablecay isruptionday otay oadray affictray orfay upway otay 6 onthsmay.{}  Ostcay: {CURRENCY}
+STR_2051_BUILD_A_STATUE_IN_HONOR                                :{WHITE}{STRING}{}{YELLOW} Uildbay away atuestay inway onourhay ofway ouryay ompanycay.{} Ostcay: {CURRENCY}
+STR_2052_FUND_THE_CONSTRUCTION_OF                               :{WHITE}{STRING}{}{YELLOW} Undfay ethay onstructioncay ofway ewnay ommercialcay uildingsbay inway ethay owntay.{}  Ostcay: {CURRENCY}
+STR_2053_BUY_1_YEAR_S_EXCLUSIVE                                 :{WHITE}{STRING}{}{YELLOW} Uybay 1 ear'syay exclusiveway ansporttray ightsray inway owntay. Owntay authorityway illway onlyway allowway assengerspay andway argocay otay useway ouryay ompany'scay ationsstay.{} Ostcay: {CURRENCY}
+STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY_DESC                         :{WHITE}{STRING}{}{YELLOW} Ibebray ethay ocallay authorityway otay increaseway ouryay atingray, atway ethay iskray ofway away everesay enaltypay ifway aughtcay.{}  Ostcay: {CURRENCY}
+STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING                       :{BIGFONT}{BLACK}Affictray aoschay inway {TOWN}!{}{}Oadray ebuildingray ogrammepray undedfay ybay {COMPANY} ingsbray 6 onthsmay ofway iserymay otay otoristsmay!
+STR_2056                                                        :{TINYFONT}{WHITE}{TOWN}
+STR_2057                                                        :{ORANGE}{TOWN}{BLACK} ({COMMA})
+STR_2058_UNDER_CONSTRUCTION                                     :{STRING} (underway onstructioncay)
+STR_2059_IGLOO                                                  :Iglooway
+STR_205A_TEPEES                                                 :Epeestay
+STR_205B_TEAPOT_HOUSE                                           :Eapottay-Ousehay
+STR_205C_PIGGY_BANK                                             :Iggypay-Ankbay
+
+STR_INDUSTRY                                                    :{INDUSTRY}
+STR_TOWN                                                        :{TOWN}
+STR_INDUSTRY_FORMAT                                             :{TOWN} {STRING}
+STR_STATION                                                     :{STATION}
+
+##id 0x2800
+STR_LANDSCAPING                                                 :Andscapinglay
+STR_2800_PLANT_TREES                                            :Antplay eestray
+STR_2801_PLACE_SIGN                                             :Aceplay ignsay
+STR_2802_TREES                                                  :{WHITE}Eestray
+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}{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
+STR_280B_EDIT_SIGN_TEXT                                         :{WHITE}Editway ignsay exttay
+STR_280C_CAN_T_CHANGE_SIGN_NAME                                 :{WHITE}An'tcay angechay ignsay amenay...
+STR_280D_SELECT_TREE_TYPE_TO_PLANT                              :{BLACK}Electsay eetray ypetay otay antplay
+STR_280E_TREES                                                  :Eestray
+STR_280F_RAINFOREST                                             :Ainforestray
+STR_2810_CACTUS_PLANTS                                          :Actuscay Antsplay
+
+##id 0x3000
+STR_3000_RAIL_STATION_SELECTION                                 :{WHITE}Ailray Ationstay Electionsay
+STR_3001_AIRPORT_SELECTION                                      :{WHITE}Airportway Electionsay
+STR_3002_ORIENTATION                                            :{BLACK}Orientationway
+STR_3003_NUMBER_OF_TRACKS                                       :{BLACK}Umbernay ofway ackstray
+STR_3004_PLATFORM_LENGTH                                        :{BLACK}Atformplay engthlay
+STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD                          :{WHITE}Ootay oseclay otay anotherway ailwayray ationstay
+STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING                         :{WHITE}Adjoinsway oremay anthay oneway existingway ationstay/oadinglay areaway
+STR_3007_TOO_MANY_STATIONS_LOADING                              :{WHITE}Ootay anymay ationsstay/oadinglay areasway inway isthay owntay
+STR_3008_TOO_MANY_STATIONS_LOADING                              :{WHITE}Ootay anymay ationsstay/oadinglay areasway
+STR_3008A_TOO_MANY_BUS_STOPS                                    :{WHITE}Ootay anymay usbay opsstay
+STR_3008B_TOO_MANY_TRUCK_STOPS                                  :{WHITE}Ootay anymay orrylay ationsstay
+STR_3009_TOO_CLOSE_TO_ANOTHER_STATION                           :{WHITE}Ootay oseclay otay anotherway ationstay/oadinglay areaway
+STR_300A_0                                                      :{WHITE}{STATION} {STATIONFEATURES}
+STR_300B_MUST_DEMOLISH_RAILROAD                                 :{WHITE}Ustmay emolishday ailwayray ationstay irstfay
+STR_300D_TOO_CLOSE_TO_ANOTHER_AIRPORT                           :{WHITE}Ootay oseclay otay anotherway airportway
+STR_300E_MUST_DEMOLISH_AIRPORT_FIRST                            :{WHITE}Ustmay emolishday airportway irstfay
+
+STR_3030_RENAME_STATION_LOADING                                 :Enameray ationstay/oadinglay areaway
+STR_3031_CAN_T_RENAME_STATION                                   :{WHITE}An'tcay enameray ationstay...
+STR_3032_RATINGS                                                :{BLACK}Atingsray
+STR_3033_ACCEPTS                                                :{BLACK}Acceptsway
+STR_3034_LOCAL_RATING_OF_TRANSPORT                              :{BLACK}Ocallay atingray ofway ansporttray ervicesay:
+
+############ range for rating starts
+STR_3035_APPALLING                                              :Appallingway
+STR_3036_VERY_POOR                                              :Eryvay Oorpay
+STR_3037_POOR                                                   :Oorpay
+STR_3038_MEDIOCRE                                               :Ediocremay
+STR_3039_GOOD                                                   :Oodgay
+STR_303A_VERY_GOOD                                              :Eryvay Oodgay
+STR_303B_EXCELLENT                                              :Excellentway
+STR_303C_OUTSTANDING                                            :Outstandingway
+############ range for rating ends
+
+STR_303D                                                        :{WHITE}{STRING}: {YELLOW}{STRING} ({COMMA}%)
+STR_303E_NO_LONGER_ACCEPTS                                      :{WHITE}{STATION} onay ongerlay acceptsway {STRING}
+STR_303F_NO_LONGER_ACCEPTS_OR                                   :{WHITE}{STATION} onay ongerlay acceptsway {STRING} orway {STRING}
+STR_3040_NOW_ACCEPTS                                            :{WHITE}{STATION} ownay acceptsway {STRING}
+STR_3041_NOW_ACCEPTS_AND                                        :{WHITE}{STATION} ownay acceptsway {STRING} andway {STRING}
+STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Usbay Ationstay Orientationway
+STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Orrylay Ationstay Orientationway
+STR_3042_PASSENGER_TRAM_STATION_ORIENTATION                     :{WHITE}Assengerpay Amtray Orientationway
+STR_3043_CARGO_TRAM_STATION_ORIENT                              :{WHITE}Eightfray Amtray Orientationway
+STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Ustmay emolishday usbay ationstay irstfay
+STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Ustmay emolishday orrylay ationstay irstfay
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION                   :{WHITE}Ustmay emolishday assengerpay amtray ationstay irstfay
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION                       :{WHITE}Ustmay emolishday eightfray amtray ationstay irstfay
+STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} Ation{P "" s}stay
+STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
+STR_304A_NONE                                                   :{YELLOW}- Onenay -
+STR_304B_SITE_UNSUITABLE                                        :{WHITE}...itesay unsuitableway
+STR_304C_TOO_CLOSE_TO_ANOTHER_DOCK                              :{WHITE}Ootay oseclay otay anotherway ockday
+STR_304D_MUST_DEMOLISH_DOCK_FIRST                               :{WHITE}Ustmay emolishday ockday irstfay
+STR_304E_SELECT_RAILROAD_STATION                                :{BLACK}Electsay ailwayray ationstay orientationway
+STR_304F_SELECT_NUMBER_OF_PLATFORMS                             :{BLACK}Electsay umbernay ofway atformsplay orfay ailwayray ationstay
+STR_3050_SELECT_LENGTH_OF_RAILROAD                              :{BLACK}Electsay engthlay ofway ailwayray ationstay
+STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Electsay usbay ationstay orientationway
+STR_3052_SELECT_TRUCK_LOADING_BAY                               :{BLACK}Electsay orrylay oadinglay aybay orientationway
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION              :{BLACK}Electsay assengerpay amtray ationstay orientationway
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION                  :{BLACK}Electsay eightfray amtray ationstay orientationway
+STR_3053_CENTER_MAIN_VIEW_ON_STATION                            :{BLACK}Entrecay ainmay iewvay onway ationstay ocationlay
+STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}Owshay ationstay atingsray
+STR_3055_CHANGE_NAME_OF_STATION                                 :{BLACK}Angechay amenay ofway ationstay
+STR_3056_SHOW_LIST_OF_ACCEPTED_CARGO                            :{BLACK}Owshay istlay ofway acceptedway argocay
+STR_3057_STATION_NAMES_CLICK_ON                                 :{BLACK}Ationstay amesnay - ickclay onway amenay otay entrecay ainmay iewvay onway ationstay
+STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT                            :{BLACK}Electsay izesay/ypetay ofway airportway
+STR_305C_0                                                      :{STATION} {STATIONFEATURES}
+STR_STATION_SIGN_TINY                                           :{TINYFONT}{STATION}
+STR_305E_RAILROAD_STATION                                       :Ailwayray ationstay
+STR_305F_AIRCRAFT_HANGAR                                        :Aircraftway angarhay
+STR_3060_AIRPORT                                                :Airportway
+STR_3061_TRUCK_LOADING_AREA                                     :Orrylay oadinglay areaway
+STR_3062_BUS_STATION                                            :Usbay ationstay
+STR_3063_SHIP_DOCK                                              :Ipshay ockday
+STR_3064_HIGHLIGHT_COVERAGE_AREA                                :{BLACK}Ighlighthay overagecay areaway ofway oposedpray itesay
+STR_3065_DON_T_HIGHLIGHT_COVERAGE                               :{BLACK}On'tday ighlighthay overagecay areaway ofway oposedpray itesay
+STR_3066_COVERAGE_AREA_HIGHLIGHT                                :{BLACK}Overagecay areaway ighlighthay
+STR_3068_DOCK                                                   :{WHITE}Ockday
+STR_3069_BUOY                                                   :Uoybay
+STR_306A_BUOY_IN_THE_WAY                                        :{WHITE}...uoybay inway ethay ayway
+STR_306C_STATION_TOO_SPREAD_OUT                                 :{WHITE}...ationstay ootay eadspray outway
+STR_306D_NONUNIFORM_STATIONS_DISALLOWED                         :{WHITE}...onuniformnay ationsstay isabledday
+STR_USE_CTRL_TO_SELECT_MORE                                     :{BLACK}Oldhay ownday CTRLay otay electsay oremay anthay oneway itemway
+
+STR_UNDEFINED                                                   :(undefinedway ingstray)
+STR_STAT_CLASS_DFLT                                             :Efaultday ationstay
+STR_STAT_CLASS_WAYP                                             :Aypointsway
+
+##id 0x3800
+STR_3800_SHIP_DEPOT_ORIENTATION                                 :{WHITE}Ipshay Epotday Orientationway
+STR_3801_MUST_BE_BUILT_ON_WATER                                 :{WHITE}...ustmay ebay uiltbay onway aterway
+STR_3802_CAN_T_BUILD_SHIP_DEPOT                                 :{WHITE}An'tcay uildbay ipshay epotday erehay...
+STR_3803_SELECT_SHIP_DEPOT_ORIENTATION                          :{BLACK}Electsay ipshay epotday orientationway
+STR_3804_WATER                                                  :Aterway
+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
+STR_4001_LOAD_GAME                                              :{WHITE}Oadlay Amegay
+STR_4002_SAVE                                                   :{BLACK}Avesay
+STR_4003_DELETE                                                 :{BLACK}Eleteday
+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{}{STRING}
+STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Unableway otay eleteday ilefay
+STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Amegay Oadlay Ailedfay{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Internalway errorway: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Okenbray avegamesay - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Avegamesay isway ademay ithway ewernay ersionvay
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :Ilefay otnay eadableray
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :Ilefay otnay iteablewray
+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
+STR_400D_SAVE_THE_CURRENT_GAME_USING                            :{BLACK}Avesay ethay urrentcay amegay, usingway ethay electedsay amenay
+STR_400E_SELECT_NEW_GAME_TYPE                                   :{WHITE}Electsay Ewnay Amegay Ypetay
+STR_400F_SELECT_SCENARIO_GREEN_PRE                              :{BLACK}Electsay enarioscay (eengray), epray-etsay amegay (ueblay), orway andomray ewnay amegay
+STR_4010_GENERATE_RANDOM_NEW_GAME                               :Enerategay andomray ewnay amegay
+STR_4011_LOAD_HEIGHTMAP                                         :{WHITE}Oadlay Eightmaphay
+
+##id 0x4800
+STR_4800_IN_THE_WAY                                             :{WHITE}{STRING} inway ethay ayway
+STR_4801                                                        :{WHITE}{INDUSTRY}
+STR_4802_COAL_MINE                                              :Oalcay Inemay
+STR_4803_POWER_STATION                                          :Owerpay Ationstay
+STR_4804_SAWMILL                                                :Awmillsay
+STR_4805_FOREST                                                 :Orestfay
+STR_4806_OIL_REFINERY                                           :Oilway Efineryray
+STR_4807_OIL_RIG                                                :Oilway Igray
+STR_4808_FACTORY                                                :Actoryfay
+STR_4809_PRINTING_WORKS                                         :Intingpray Orksway
+STR_480A_STEEL_MILL                                             :Eelstay Illmay
+STR_480B_FARM                                                   :Armfay
+STR_480C_COPPER_ORE_MINE                                        :Oppercay Oreway Inemay
+STR_480D_OIL_WELLS                                              :Oilway Ellsway
+STR_480E_BANK                                                   :Ankbay
+STR_480F_FOOD_PROCESSING_PLANT                                  :Oodfay Ocessingpray Antplay
+STR_4810_PAPER_MILL                                             :Aperpay Illmay
+STR_4811_GOLD_MINE                                              :Oldgay Inemay
+STR_4812_BANK                                                   :Ankbay
+STR_4813_DIAMOND_MINE                                           :Iamondday Inemay
+STR_4814_IRON_ORE_MINE                                          :Ironway Oreway Inemay
+STR_4815_FRUIT_PLANTATION                                       :Uitfray Antationplay
+STR_4816_RUBBER_PLANTATION                                      :Ubberray Antationplay
+STR_4817_WATER_SUPPLY                                           :Aterway Upplysay
+STR_4818_WATER_TOWER                                            :Aterway Owertay
+STR_4819_FACTORY                                                :Actoryfay
+STR_481A_FARM                                                   :Armfay
+STR_481B_LUMBER_MILL                                            :Umberlay Illmay
+STR_481C_COTTON_CANDY_FOREST                                    :Andyflosscay Orestfay
+STR_481D_CANDY_FACTORY                                          :Eetsway Actoryfay
+STR_481E_BATTERY_FARM                                           :Atterybay Armfay
+STR_481F_COLA_WELLS                                             :Olacay Ellsway
+STR_4820_TOY_SHOP                                               :Oytay Opshay
+STR_4821_TOY_FACTORY                                            :Oytay Actoryfay
+STR_4822_PLASTIC_FOUNTAINS                                      :Asticplay Ountainsfay
+STR_4823_FIZZY_DRINK_FACTORY                                    :Izzyfay Inkdray Actoryfay
+STR_4824_BUBBLE_GENERATOR                                       :Ubblebay Eneratorgay
+STR_4825_TOFFEE_QUARRY                                          :Offeetay Arryquay
+STR_4826_SUGAR_MINE                                             :Ugarsay Inemay
+
+############ range for requires starts
+STR_4827_REQUIRES                                               :{BLACK}Equiresray: {YELLOW}{STRING}
+STR_4828_REQUIRES                                               :{BLACK}Equiresray: {YELLOW}{STRING}, {STRING}
+STR_4829_REQUIRES                                               :{BLACK}Equiresray: {YELLOW}{STRING}, {STRING}, {STRING}
+############ range for requires ends
+
+STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Oductionpray astlay onthmay:
+STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% ansportedtray)
+STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Entrecay ethay ainmay iewvay onway industryway ocationlay
+STR_482D_NEW_UNDER_CONSTRUCTION                                 :{BLACK}{BIGFONT}Ewnay {STRING} underway onstructioncay earnay {TOWN}!
+STR_482E_NEW_BEING_PLANTED_NEAR                                 :{BLACK}{BIGFONT}Ewnay {STRING} eingbay antedplay earnay {TOWN}!
+STR_482F_COST                                                   :{BLACK}Ostcay: {YELLOW}{CURRENCY}
+STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY                          :{WHITE}An'tcay onstructcay isthay industryway ypetay erehay...
+STR_4831_FOREST_CAN_ONLY_BE_PLANTED                             :{WHITE}...orestfay ancay onlyway ebay antedplay aboveway owsnay-inelay
+STR_4832_ANNOUNCES_IMMINENT_CLOSURE                             :{BLACK}{BIGFONT}{INDUSTRY} announcesway imminentway osureclay!
+STR_4833_SUPPLY_PROBLEMS_CAUSE_TO                               :{BLACK}{BIGFONT}Upplysay oblemspray ausecay {INDUSTRY} otay announceway imminentway osureclay!
+STR_4834_LACK_OF_NEARBY_TREES_CAUSES                            :{BLACK}{BIGFONT}Acklay ofway earbynay eestray ausescay {INDUSTRY} otay announceway imminentway osureclay!
+STR_4835_INCREASES_PRODUCTION                                   :{BLACK}{BIGFONT}{INDUSTRY} increasesway oductionpray!
+STR_4836_NEW_COAL_SEAM_FOUND_AT                                 :{BLACK}{BIGFONT}Ewnay oalcay eamsay oundfay atway {INDUSTRY}!{}Oductionpray isway expectedway otay oubleday!
+STR_4837_NEW_OIL_RESERVES_FOUND                                 :{BLACK}{BIGFONT}Ewnay oilway eservesray oundfay atway {INDUSTRY}!{}Oductionpray isway expectedway otay oubleday!
+STR_4838_IMPROVED_FARMING_METHODS                               :{BLACK}{BIGFONT}Improvedway armingfay ethodsmay atway {INDUSTRY} areway expectedway otay oubleday oductionpray!
+STR_4839_PRODUCTION_DOWN_BY_50                                  :{BLACK}{BIGFONT}{INDUSTRY} oductionpray ownday ybay 50%
+STR_483A_INSECT_INFESTATION_CAUSES                              :{BLACK}{BIGFONT}Insectway infestationway ausescay avochay atway {INDUSTRY}!{}Oductionpray ownday ybay 50%
+STR_483B_CAN_ONLY_BE_POSITIONED                                 :{WHITE}...ancay onlyway ebay ositionedpay earnay edgesway ofway apmay
+STR_INDUSTRY_PROD_GOUP                                          :{BLACK}{BIGFONT}{STRING} oductionpray atway {INDUSTRY} increasesway {COMMA}%!
+STR_INDUSTRY_PROD_GODOWN                                        :{BLACK}{BIGFONT}{STRING} oductionpray atway {INDUSTRY} ecreasesday {COMMA}%!
+
+##id 0x5000
+STR_5000_TRAIN_IN_TUNNEL                                        :{WHITE}Aintray inway unneltay
+STR_5001_ROAD_VEHICLE_IN_TUNNEL                                 :{WHITE}Oadray ehiclevay inway unneltay
+STR_5003_ANOTHER_TUNNEL_IN_THE_WAY                              :{WHITE}Anotherway unneltay inway ethay ayway
+STR_5005_UNABLE_TO_EXCAVATE_LAND                                :{WHITE}Unableway otay excavateway andlay orfay otherway endway ofway unneltay
+STR_5006_MUST_DEMOLISH_TUNNEL_FIRST                             :{WHITE}Ustmay emolishday unneltay irstfay
+STR_5007_MUST_DEMOLISH_BRIDGE_FIRST                             :{WHITE}Ustmay emolishday idgebray irstfay
+STR_5008_CANNOT_START_AND_END_ON                                :{WHITE}Annotcay artstay andway endway inway ethay amesay otspay
+STR_5009_LEVEL_LAND_OR_WATER_REQUIRED                           :{WHITE}Evellay andlay orway aterway equiredray underway idgebray
+STR_500A_START_AND_END_MUST_BE_IN                               :{WHITE}Artstay andway endway ustmay ebay inway inelay
+STR_500B_SITE_UNSUITABLE_FOR_TUNNEL                             :{WHITE}Itesay unsuitableway orfay unneltay entranceway
+STR_500D                                                        :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY}
+STR_500E_SUSPENSION_STEEL                                       :Uspensionsay, Eelstay
+STR_500F_GIRDER_STEEL                                           :Irdergay, Eelstay
+STR_5010_CANTILEVER_STEEL                                       :Antilevercay, Eelstay
+STR_5011_SUSPENSION_CONCRETE                                    :Uspensionsay, Oncretecay
+STR_5012_WOODEN                                                 :Oodenway
+STR_5013_CONCRETE                                               :Oncretecay
+STR_5014_TUBULAR_STEEL                                          :Ubulartay, Eelstay
+STR_BRIDGE_TUBULAR_SILICON                                      :Ubulartay, Iliconsay
+STR_5015_CAN_T_BUILD_BRIDGE_HERE                                :{WHITE}An'tcay uildbay idgebray erehay...
+STR_5016_CAN_T_BUILD_TUNNEL_HERE                                :{WHITE}An'tcay uildbay unneltay erehay...
+STR_5017_RAILROAD_TUNNEL                                        :Ailwayray unneltay
+STR_5018_ROAD_TUNNEL                                            :Oadray unneltay
+STR_501B_STEEL_SUSPENSION_RAIL_BRIDGE                           :Eelstay uspensionsay ailray idgebray
+STR_501C_STEEL_GIRDER_RAIL_BRIDGE                               :Eelstay irdergay ailray idgebray
+STR_501D_STEEL_CANTILEVER_RAIL_BRIDGE                           :Eelstay antilevercay ailray idgebray
+STR_501E_REINFORCED_CONCRETE_SUSPENSION                         :Einforcedray oncretecay uspensionsay ailray idgebray
+STR_501F_WOODEN_RAIL_BRIDGE                                     :Oodenway ailray idgebray
+STR_5020_CONCRETE_RAIL_BRIDGE                                   :Oncretecay ailray idgebray
+STR_5021_STEEL_SUSPENSION_ROAD_BRIDGE                           :Eelstay uspensionsay oadray idgebray
+STR_5022_STEEL_GIRDER_ROAD_BRIDGE                               :Eelstay irdergay oadray idgebray
+STR_5023_STEEL_CANTILEVER_ROAD_BRIDGE                           :Eelstay antilevercay oadray idgebray
+STR_5024_REINFORCED_CONCRETE_SUSPENSION                         :Einforcedray oncretecay uspensionsay oadray idgebray
+STR_5025_WOODEN_ROAD_BRIDGE                                     :Oodenway oadray idgebray
+STR_5026_CONCRETE_ROAD_BRIDGE                                   :Oncretecay oadray idgebray
+STR_5027_TUBULAR_RAIL_BRIDGE                                    :Ubulartay ailray idgebray
+STR_5028_TUBULAR_ROAD_BRIDGE                                    :Ubulartay oadray idgebray
+
+##id 0x5800
+STR_5800_OBJECT_IN_THE_WAY                                      :{WHITE}Objectway inway ethay ayway
+STR_5801_TRANSMITTER                                            :Ansmittertray
+STR_5802_LIGHTHOUSE                                             :Ighthouselay
+STR_5803_COMPANY_HEADQUARTERS                                   :Ompanycay Eadquartershay
+STR_5804_COMPANY_HEADQUARTERS_IN                                :{WHITE}...ompanycay eadquartershay inway ethay ayway
+STR_5805_COMPANY_OWNED_LAND                                     :Ompanycay-ownedway andlay
+STR_5806_CAN_T_PURCHASE_THIS_LAND                               :{WHITE}An'tcay urchasepay isthay andlay areaway...
+STR_5807_YOU_ALREADY_OWN_IT                                     :{WHITE}...ouyay alreadyway ownway itway!
+
+
+############ WARNING, using range 0x6000 for strings that are stored in the savegame
+############ These strings may never get a new id, or savegames will break!
+##id 0x6000
+STR_SV_EMPTY                                                    :
+STR_SV_UNNAMED                                                  :Unnamedway
+STR_SV_TRAIN_NAME                                               :Aintray {COMMA}
+STR_SV_ROADVEH_NAME                                             :Oadray Ehiclevay {COMMA}
+STR_SV_SHIP_NAME                                                :Ipshay {COMMA}
+STR_SV_AIRCRAFT_NAME                                            :Aircraftway {COMMA}
+
+STR_SV_STNAME                                                   :{STRING}
+STR_SV_STNAME_NORTH                                             :{STRING} Orthnay
+STR_SV_STNAME_SOUTH                                             :{STRING} Outhsay
+STR_SV_STNAME_EAST                                              :{STRING} Eastway
+STR_SV_STNAME_WEST                                              :{STRING} Estway
+STR_SV_STNAME_CENTRAL                                           :{STRING} Entralcay
+STR_SV_STNAME_TRANSFER                                          :{STRING} Ansfertray
+STR_SV_STNAME_HALT                                              :{STRING} Althay
+STR_SV_STNAME_VALLEY                                            :{STRING} Alleyvay
+STR_SV_STNAME_HEIGHTS                                           :{STRING} Eightshay
+STR_SV_STNAME_WOODS                                             :{STRING} Oodsway
+STR_SV_STNAME_LAKESIDE                                          :{STRING} Akesidelay
+STR_SV_STNAME_EXCHANGE                                          :{STRING} Exchangeway
+STR_SV_STNAME_AIRPORT                                           :{STRING} Airportway
+STR_SV_STNAME_OILFIELD                                          :{STRING} Oilfieldway
+STR_SV_STNAME_MINES                                             :{STRING} Inesmay
+STR_SV_STNAME_DOCKS                                             :{STRING} Ocksday
+STR_SV_STNAME_BUOY_1                                            :{STRING} Uoybay 1
+STR_SV_STNAME_BUOY_2                                            :{STRING} Uoybay 2
+STR_SV_STNAME_BUOY_3                                            :{STRING} Uoybay 3
+STR_SV_STNAME_BUOY_4                                            :{STRING} Uoybay 4
+STR_SV_STNAME_BUOY_5                                            :{STRING} Uoybay 5
+STR_SV_STNAME_BUOY_6                                            :{STRING} Uoybay 6
+STR_SV_STNAME_BUOY_7                                            :{STRING} Uoybay 7
+STR_SV_STNAME_BUOY_8                                            :{STRING} Uoybay 8
+STR_SV_STNAME_BUOY_9                                            :{STRING} Uoybay 9
+STR_SV_STNAME_ANNEXE                                            :{STRING} Annexeway
+STR_SV_STNAME_SIDINGS                                           :{STRING} Idingssay
+STR_SV_STNAME_BRANCH                                            :{STRING} Anchbray
+STR_SV_STNAME_UPPER                                             :Upperway {STRING}
+STR_SV_STNAME_LOWER                                             :Owerlay {STRING}
+STR_SV_STNAME_HELIPORT                                          :{STRING} Eliporthay
+STR_SV_STNAME_FOREST                                            :{STRING} Orestfay
+STR_SV_STNAME_FALLBACK                                          :{STRING} Ationstay #{NUM}
+
+############ end of savegame specific region!
+
+##id 0x6800
+STR_6800_DIFFICULTY_LEVEL                                       :{WHITE}Ifficultyday Evellay
+STR_OPTIONS_SAVE_CHANGES                                        :{BLACK}Avesay
+
+############ range for difficulty levels starts
+STR_6801_EASY                                                   :{BLACK}Easyway
+STR_6802_MEDIUM                                                 :{BLACK}Ediummay
+STR_6803_HARD                                                   :{BLACK}Ardhay
+STR_6804_CUSTOM                                                 :{BLACK}Ustomcay
+############ range for difficulty levels ends
+
+############ range for difficulty settings starts
+STR_6805_MAXIMUM_NO_COMPETITORS                                 :{LTBLUE}Aximummay onay. ompetitorscay: {ORANGE}{COMMA}
+STR_6806_COMPETITOR_START_TIME                                  :{LTBLUE}Ompetitorcay artstay imetay: {ORANGE}{STRING}
+STR_6807_NO_OF_TOWNS                                            :{LTBLUE}Onay. ofway ownstay: {ORANGE}{STRING}
+STR_6808_NO_OF_INDUSTRIES                                       :{LTBLUE}Onay. ofway industriesway: {ORANGE}{STRING}
+STR_6809_MAXIMUM_INITIAL_LOAN_000                               :{LTBLUE}Aximummay initialway oanlay: {ORANGE}{CURRENCY}
+STR_680A_INITIAL_INTEREST_RATE                                  :{LTBLUE}Initialway interestway ateray: {ORANGE}{COMMA}%
+STR_680B_VEHICLE_RUNNING_COSTS                                  :{LTBLUE}Ehiclevay unningray ostscay: {ORANGE}{STRING}
+STR_680C_CONSTRUCTION_SPEED_OF_COMPETITOR                       :{LTBLUE}Onstructioncay eedspay ofway ompetitorscay: {ORANGE}{STRING}
+STR_680D_INTELLIGENCE_OF_COMPETITORS                            :{LTBLUE}Intelligenceway ofway ompetitorscay: {ORANGE}{STRING}
+STR_680E_VEHICLE_BREAKDOWNS                                     :{LTBLUE}Ehiclevay eakdownsbray: {ORANGE}{STRING}
+STR_680F_SUBSIDY_MULTIPLIER                                     :{LTBLUE}Ubsidysay ultipliermay: {ORANGE}{STRING}
+STR_6810_COST_OF_CONSTRUCTION                                   :{LTBLUE}Ostcay ofway onstructioncay: {ORANGE}{STRING}
+STR_6811_TERRAIN_TYPE                                           :{LTBLUE}Erraintay ypetay: {ORANGE}{STRING}
+STR_6812_QUANTITY_OF_SEA_LAKES                                  :{LTBLUE}Antityquay ofway easay/akeslay: {ORANGE}{STRING}
+STR_6813_ECONOMY                                                :{LTBLUE}Economyway: {ORANGE}{STRING}
+STR_6814_TRAIN_REVERSING                                        :{LTBLUE}Aintray eversingray: {ORANGE}{STRING}
+STR_6815_DISASTERS                                              :{LTBLUE}Isastersday: {ORANGE}{STRING}
+STR_16816_CITY_APPROVAL                                         :{LTBLUE}Itycay ouncil'scay attitudeway owardstay areaway estructuringray: {ORANGE}{STRING}
+############ range for difficulty settings ends
+
+STR_26816_NONE                                                  :Onenay
+STR_NUM_VERY_LOW                                                :Eryvay owlay
+STR_6816_LOW                                                    :Owlay
+STR_6817_NORMAL                                                 :Ormalnay
+STR_6818_HIGH                                                   :Ighhay
+STR_6819                                                        :{BLACK}{SMALLLEFTARROW}
+STR_681A                                                        :{BLACK}{SMALLRIGHTARROW}
+STR_681B_VERY_SLOW                                              :Eryvay Owslay
+STR_681C_SLOW                                                   :Owslay
+STR_681D_MEDIUM                                                 :Ediummay
+STR_681E_FAST                                                   :Astfay
+STR_681F_VERY_FAST                                              :Eryvay Astfay
+STR_VERY_LOW                                                    :Eryvay Owlay
+STR_6820_LOW                                                    :Owlay
+STR_6821_MEDIUM                                                 :Ediummay
+STR_6822_HIGH                                                   :Ighhay
+STR_6823_NONE                                                   :Onenay
+STR_6824_REDUCED                                                :Educedray
+STR_6825_NORMAL                                                 :Ormalnay
+STR_6826_X1_5                                                   :xay1.5
+STR_6827_X2                                                     :xay2
+STR_6828_X3                                                     :xay3
+STR_6829_X4                                                     :xay4
+STR_682A_VERY_FLAT                                              :Eryvay Atflay
+STR_682B_FLAT                                                   :Atflay
+STR_682C_HILLY                                                  :Illyhay
+STR_682D_MOUNTAINOUS                                            :Ountainousmay
+STR_682E_STEADY                                                 :Eadystay
+STR_682F_FLUCTUATING                                            :Uctuatingflay
+STR_6830_IMMEDIATE                                              :Immediateway
+STR_6831_3_MONTHS_AFTER_PLAYER                                  :3 onthsmay afterway ayerplay
+STR_6832_6_MONTHS_AFTER_PLAYER                                  :6 onthsmay afterway ayerplay
+STR_6833_9_MONTHS_AFTER_PLAYER                                  :9 onthsmay afterway ayerplay
+STR_6834_AT_END_OF_LINE_AND_AT_STATIONS                         :Atway endway ofway inelay, andway atway ationsstay
+STR_6835_AT_END_OF_LINE_ONLY                                    :Atway endway ofway inelay onlyway
+STR_6836_OFF                                                    :Offway
+STR_6837_ON                                                     :Onway
+STR_6838_SHOW_HI_SCORE_CHART                                    :{BLACK}Owshay ihay-orescay artchay
+STR_6839_PERMISSIVE                                             :Ermissivepay
+STR_683A_TOLERANT                                               :Oleranttay
+STR_683B_HOSTILE                                                :Ostilehay
+
+##id 0x7000
+STR_7000                                                        :
+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
+STR_7006_COLOR_SCHEME                                           :{GOLD}Olourcay Emeschay:
+STR_7007_NEW_COLOR_SCHEME                                       :{WHITE}Ewnay Olourcay Emeschay
+STR_7008_COMPANY_NAME                                           :{BLACK}Ompanycay Amenay
+STR_7009_PRESIDENT_NAME                                         :{BLACK}Anagermay Amenay
+STR_700A_COMPANY_NAME                                           :Ompanycay Amenay
+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}{COMPANYNUM}
+STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Expenditureway/Incomeway
+STR_7010                                                        :{WHITE}{NUM}
+STR_7011_CONSTRUCTION                                           :{GOLD}Onstructioncay
+STR_7012_NEW_VEHICLES                                           :{GOLD}Ewnay Ehiclesvay
+STR_7013_TRAIN_RUNNING_COSTS                                    :{GOLD}Aintray Unningray Ostscay
+STR_7014_ROAD_VEH_RUNNING_COSTS                                 :{GOLD}Oadray Ehvay. Unningray Ostscay
+STR_7015_AIRCRAFT_RUNNING_COSTS                                 :{GOLD}Aircraftway Unningray Ostscay
+STR_7016_SHIP_RUNNING_COSTS                                     :{GOLD}Ipshay Unningray Ostscay
+STR_7017_PROPERTY_MAINTENANCE                                   :{GOLD}Opertypray Aintenancemay
+STR_7018_TRAIN_INCOME                                           :{GOLD}Aintray Incomeway
+STR_7019_ROAD_VEHICLES_INCOME                                   :{GOLD}Oadray Ehiclevay Incomeway
+STR_701A_AIRCRAFT_INCOME                                        :{GOLD}Aircraftway Incomeway
+STR_701B_SHIP_INCOME                                            :{GOLD}Ipshay Incomeway
+STR_701C_LOAN_INTEREST                                          :{GOLD}Oanlay Interestway
+STR_701D_OTHER                                                  :{GOLD}Otherway
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
+STR_7020_TOTAL                                                  :{WHITE}Otaltay:
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
+STR_7022_INCOME_GRAPH                                           :{WHITE}Incomeway Aphgray
+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}{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
+STR_702E_REQUIRED                                               :{WHITE}...{CURRENCY} equiredray
+STR_702F_CAN_T_REPAY_LOAN                                       :{WHITE}An'tcay epayray oanlay...
+STR_INSUFFICIENT_FUNDS                                          :{WHITE}An'tcay ivegay awayway oneymay atthay isway oanedlay omfray ethay ankbay...
+STR_7030_SELECT_NEW_FACE_FOR_PRESIDENT                          :{BLACK}Electsay ewnay acefay orfay anagermay
+STR_7031_CHANGE_THE_COMPANY_VEHICLE                             :{BLACK}Angechay ethay ompanycay ehiclevay iverylay
+STR_7032_CHANGE_THE_PRESIDENT_S                                 :{BLACK}Angechay ethay anager'smay amenay
+STR_7033_CHANGE_THE_COMPANY_NAME                                :{BLACK}Angechay ethay ompanycay amenay
+STR_7034_CLICK_ON_SELECTED_NEW_COLOR                            :{BLACK}Ickclay onway esiredday olourcay emeschay
+STR_7035_INCREASE_SIZE_OF_LOAN                                  :{BLACK}Increaseway izesay ofway oanlay
+STR_7036_REPAY_PART_OF_LOAN                                     :{BLACK}Epayray artpay ofway oanlay
+STR_7037_PRESIDENT                                              :{WHITE}{PLAYERNAME}{}{GOLD}(Anagermay)
+STR_7038_INAUGURATED                                            :{GOLD}Inauguratedway: {WHITE}{NUM}
+STR_7039_VEHICLES                                               :{GOLD}Ehiclesvay:
+STR_TRAINS                                                      :{WHITE}{COMMA} ain{P "" s}tray
+STR_ROAD_VEHICLES                                               :{WHITE}{COMMA} oadray ehicle{P "" s}vay
+STR_AIRCRAFT                                                    :{WHITE}{COMMA} aircraftway
+STR_SHIPS                                                       :{WHITE}{COMMA} ip{P "" s}shay
+STR_7042_NONE                                                   :{WHITE}Onenay
+STR_7043_FACE_SELECTION                                         :{WHITE}Acefay Electionsay
+STR_7044_MALE                                                   :{BLACK}Alemay
+STR_7045_FEMALE                                                 :{BLACK}Emalefay
+STR_7046_NEW_FACE                                               :{BLACK}Ewnay Acefay
+STR_7047_CANCEL_NEW_FACE_SELECTION                              :{BLACK}Ancelcay ewnay acefay electionsay
+STR_7048_ACCEPT_NEW_FACE_SELECTION                              :{BLACK}Acceptway ewnay acefay electionsay
+STR_7049_SELECT_MALE_FACES                                      :{BLACK}Electsay alemay acesfay
+STR_704A_SELECT_FEMALE_FACES                                    :{BLACK}Electsay emalefay acesfay
+STR_704B_GENERATE_RANDOM_NEW_FACE                               :{BLACK}Enerategay andomray ewnay acefay
+STR_704C_KEY                                                    :{BLACK}Eykay
+STR_704D_SHOW_KEY_TO_GRAPHS                                     :{BLACK}Owshay eykay otay aphsgray
+STR_704E_KEY_TO_COMPANY_GRAPHS                                  :{WHITE}Eykay otay ompanycay aphsgray
+STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY                           :{BLACK}Ickclay erehay otay oggletay ompany'scay entryway onway aphgray onway/offway
+STR_7050_UNITS_OF_CARGO_DELIVERED                               :{WHITE}Unitsway ofway argocay eliveredday
+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}{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)
+STR_7059_TRANSPORT_COMPANY_MERGER                               :{BLACK}{BIGFONT}Ansporttray ompanycay ergermay!
+STR_705A_HAS_BEEN_SOLD_TO_FOR                                   :{BLACK}{BIGFONT}{COMPANY} ashay eenbay oldsay otay {COMPANY} orfay {CURRENCY}!
+STR_705B_WE_ARE_LOOKING_FOR_A_TRANSPORT                         :{WHITE}Eway areway ookinglay orfay away ansporttray ompanycay otay aketay-overway ourway ompanycay.{}{}Oday ouyay antway otay urchasepay {COMPANY} orfay {CURRENCY}?
+STR_705C_BANKRUPT                                               :{BLACK}{BIGFONT}Ankruptbay!
+STR_705D_HAS_BEEN_CLOSED_DOWN_BY                                :{BLACK}{BIGFONT}{COMPANY} ashay eenbay osedclay ownday ybay editorscray andway allway assetsway oldsay offway!
+STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED                         :{BLACK}{BIGFONT}Ewnay ansporttray ompanycay aunchedlay!
+STR_705F_STARTS_CONSTRUCTION_NEAR                               :{BLACK}{BIGFONT}{COMPANY} artsstay onstructioncay earnay {TOWN}!
+STR_7060_CAN_T_BUY_COMPANY                                      :{WHITE}An'tcay uybay ompanycay...
+STR_7061_CARGO_PAYMENT_RATES                                    :{WHITE}Argocay Aymentpay Atesray
+STR_7062_DAYS_IN_TRANSIT                                        :{BLACK}{TINYFONT}Aysday inway ansittray
+STR_7063_PAYMENT_FOR_DELIVERING                                 :{BLACK}{TINYFONT}Aymentpay orfay eliveringday 10 unitsway (orway 10,000 itreslay) ofway argocay away istanceday ofway 20 aressquay
+STR_7064_TOGGLE_GRAPH_FOR_CARGO                                 :{BLACK}Oggletay aphgray orfay argocay ypetay onway/offway
+STR_7065                                                        :{BLACK}{TINYFONT}{STRING}
+STR_7066_ENGINEER                                               :Engineerway
+STR_7067_TRAFFIC_MANAGER                                        :Affictray Anagermay
+STR_7068_TRANSPORT_COORDINATOR                                  :Ansporttray Oordinatorcay
+STR_7069_ROUTE_SUPERVISOR                                       :Outeray Upervisorsay
+STR_706A_DIRECTOR                                               :Irectorday
+STR_706B_CHIEF_EXECUTIVE                                        :Iefchay Executiveway
+STR_706C_CHAIRMAN                                               :Airmanchay
+STR_706D_PRESIDENT                                              :Esidentpray
+STR_706E_TYCOON                                                 :Ycoontay
+STR_706F_BUILD_HQ                                               :{BLACK}Uildbay HQay
+STR_7070_BUILD_COMPANY_HEADQUARTERS                             :{BLACK}Uildbay ompanycay eadquartershay / iewvay ompanycay eadquartershay
+STR_RELOCATE_COMPANY_HEADQUARTERS                               :{BLACK}Ebuildray ompanycay eadquartershay elsewhereway orfay 1% ostcay ofway ompanycay aluevay
+STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS                       :{WHITE}An'tcay uildbay ompanycay eadquartershay...
+STR_7072_VIEW_HQ                                                :{BLACK}Iewvay HQay
+STR_RELOCATE_HQ                                                 :{BLACK}Elocateray HQay
+STR_COMPANY_PASSWORD                                            :{BLACK}Asswordpay
+STR_COMPANY_PASSWORD_TOOLTIP                                    :{BLACK}Asswordpay-otectpray ouryay ompanycay otay eventpray unauthorisedway usersway omfray oiningjay.
+STR_SET_COMPANY_PASSWORD                                        :Etsay ompanycay asswordpay
+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}{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
+STR_707A_SELL_25_SHARE_IN_THIS_COMPANY                          :{BLACK}Ellsay 25% areshay inway isthay ompanycay
+STR_707B_CAN_T_BUY_25_SHARE_IN_THIS                             :{WHITE}An'tcay uybay 25% areshay inway isthay ompanycay...
+STR_707C_CAN_T_SELL_25_SHARE_IN                                 :{WHITE}An'tcay ellsay 25% areshay inway isthay ompanycay...
+STR_707D_OWNED_BY                                               :{WHITE}({COMMA}% ownedway ybay {COMPANY})
+STR_707E_OWNED_BY_OWNED_BY                                      :{WHITE}({COMMA}% ownedway ybay {COMPANY}{}   {COMMA}% ownedway ybay {COMPANY})
+STR_707F_HAS_BEEN_TAKEN_OVER_BY                                 :{BLACK}{BIGFONT}{COMPANY} ashay eenbay akentay overway ybay {COMPANY}!
+STR_7080_PROTECTED                                              :{WHITE}Isthay ompanycay isway otnay oldway enoughway otay adetray aresshay etyay...
+
+STR_LIVERY_DEFAULT                                              :Andardstay Iverylay
+STR_LIVERY_STEAM                                                :Eamstay Engineway
+STR_LIVERY_DIESEL                                               :Ieselday Engineway
+STR_LIVERY_ELECTRIC                                             :Electricway Engineway
+STR_LIVERY_MONORAIL                                             :Onorailmay Engineway
+STR_LIVERY_MAGLEV                                               :Aglevmay Engineway
+STR_LIVERY_DMU                                                  :UDMay
+STR_LIVERY_EMU                                                  :EMUWAY
+STR_LIVERY_PASSENGER_WAGON_STEAM                                :Assengerpay Oachcay (Eamstay)
+STR_LIVERY_PASSENGER_WAGON_DIESEL                               :Assengerpay Oachcay (Ieselday)
+STR_LIVERY_PASSENGER_WAGON_ELECTRIC                             :Assengerpay Oachcay (Electricway)
+STR_LIVERY_FREIGHT_WAGON                                        :Eightfray Agonway
+STR_LIVERY_BUS                                                  :Usbay
+STR_LIVERY_TRUCK                                                :Orrylay
+STR_LIVERY_PASSENGER_SHIP                                       :Assengerpay Erryfay
+STR_LIVERY_FREIGHT_SHIP                                         :Eightfray Ipshay
+STR_LIVERY_HELICOPTER                                           :Elicopterhay
+STR_LIVERY_SMALL_PLANE                                          :Allsmay Aeroplaneway
+STR_LIVERY_LARGE_PLANE                                          :Argelay Aeroplaneway
+STR_LIVERY_PASSENGER_TRAM                                       :Assengerpay Amtray
+STR_LIVERY_FREIGHT_TRAM                                         :Eightfray Amtray
+
+STR_LIVERY_GENERAL_TIP                                          :{BLACK}Owshay eneralgay olourcay emesschay
+STR_LIVERY_TRAIN_TIP                                            :{BLACK}Owshay aintray olourcay emesschay
+STR_LIVERY_ROADVEH_TIP                                          :{BLACK}Owshay oadray ehiclevay olourcay emesschay
+STR_LIVERY_SHIP_TIP                                             :{BLACK}Owshay ipshay olourcay emesschay
+STR_LIVERY_AIRCRAFT_TIP                                         :{BLACK}Owshay aircraftway olourcay emesschay
+STR_LIVERY_PRIMARY_TIP                                          :{BLACK}Oosechay ethay imarypray olourcay orfay ethay electedsay emeschay
+STR_LIVERY_SECONDARY_TIP                                        :{BLACK}Oosechay ethay econdarysay olourcay orfay ethay electedsay emeschay
+STR_LIVERY_PANEL_TIP                                            :{BLACK}Electsay away olourcay emeschay otay angechay, orway ultiplemay emesschay ithway CTRLay+ickclay. Ickclay onway ethay oxbay otay oggletay useway ofway ethay emeschay
+
+##id 0x8000
+STR_8000_KIRBY_PAUL_TANK_STEAM                                  :Irbykay Aulpay Anktay (Eamstay)
+STR_8001_MJS_250_DIESEL                                         :MJSay 250 (Ieselday)
+STR_8002_PLODDYPHUT_CHOO_CHOO                                   :Oddyphutplay Oochay-Oochay
+STR_8003_POWERNAUT_CHOO_CHOO                                    :Owernautpay Oochay-Oochay
+STR_8004_MIGHTYMOVER_CHOO_CHOO                                  :Ightymovermay Oochay-Oochay
+STR_8005_PLODDYPHUT_DIESEL                                      :Oddyphutplay Ieselday
+STR_8006_POWERNAUT_DIESEL                                       :Owernautpay Ieselday
+STR_8007_WILLS_2_8_0_STEAM                                      :Illsway 2-8-0 (Eamstay)
+STR_8008_CHANEY_JUBILEE_STEAM                                   :Aneychay 'Ubilee'jay (Eamstay)
+STR_8009_GINZU_A4_STEAM                                         :Inzugay 'Away4' (Eamstay)
+STR_800A_SH_8P_STEAM                                            :SHay '8P'ay (Eamstay)
+STR_800B_MANLEY_MOREL_DMU_DIESEL                                :Anleymay-Orelmay UDMay (Ieselday)
+STR_800C_DASH_DIESEL                                            :'Ash'day (Ieselday)
+STR_800D_SH_HENDRY_25_DIESEL                                    :SHay/Endryhay '25' (Ieselday)
+STR_800E_UU_37_DIESEL                                           :UUWAY '37' (Ieselday)
+STR_800F_FLOSS_47_DIESEL                                        :Ossflay '47' (Ieselday)
+STR_8010_CS_4000_DIESEL                                         :CSay 4000 (Ieselday)
+STR_8011_CS_2400_DIESEL                                         :CSay 2400 (Ieselday)
+STR_8012_CENTENNIAL_DIESEL                                      :Entennialcay (Ieselday)
+STR_8013_KELLING_3100_DIESEL                                    :Ellingkay 3100 (Ieselday)
+STR_8014_TURNER_TURBO_DIESEL                                    :Urnertay Urbotay (Ieselday)
+STR_8015_MJS_1000_DIESEL                                        :MJSay 1000 (Ieselday)
+STR_8016_SH_125_DIESEL                                          :SHay '125' (Ieselday)
+STR_8017_SH_30_ELECTRIC                                         :SHay '30' (Electricway)
+STR_8018_SH_40_ELECTRIC                                         :SHay '40' (Electricway)
+STR_8019_T_I_M_ELECTRIC                                         :'Tay.Iway.May.' (Electricway)
+STR_801A_ASIASTAR_ELECTRIC                                      :'AsiaStar'WAY (Electricway)
+STR_801B_PASSENGER_CAR                                          :Assengerpay Arriagecay
+STR_801C_MAIL_VAN                                               :Ailmay Anvay
+STR_801D_COAL_CAR                                               :Oalcay Ucktray
+STR_801E_OIL_TANKER                                             :Oilway Ankertay
+STR_801F_LIVESTOCK_VAN                                          :Ivestocklay Anvay
+STR_8020_GOODS_VAN                                              :Oodsgay Anvay
+STR_8021_GRAIN_HOPPER                                           :Aingray Opperhay
+STR_8022_WOOD_TRUCK                                             :Oodway Ucktray
+STR_8023_IRON_ORE_HOPPER                                        :Ironway Oreway Opperhay
+STR_8024_STEEL_TRUCK                                            :Eelstay Ucktray
+STR_8025_ARMORED_VAN                                            :Armouredway Anvay
+STR_8026_FOOD_VAN                                               :Oodfay Anvay
+STR_8027_PAPER_TRUCK                                            :Aperpay Ucktray
+STR_8028_COPPER_ORE_HOPPER                                      :Oppercay Oreway Opperhay
+STR_8029_WATER_TANKER                                           :Aterway Ankertay
+STR_802A_FRUIT_TRUCK                                            :Uitfray Ucktray
+STR_802B_RUBBER_TRUCK                                           :Ubberray Ucktray
+STR_802C_SUGAR_TRUCK                                            :Ugarsay Ucktray
+STR_802D_COTTON_CANDY_HOPPER                                    :Andyflosscay Opperhay
+STR_802E_TOFFEE_HOPPER                                          :Offeetay Opperhay
+STR_802F_BUBBLE_VAN                                             :Ubblebay Anvay
+STR_8030_COLA_TANKER                                            :Olacay Ankertay
+STR_8031_CANDY_VAN                                              :Eetsway Anvay
+STR_8032_TOY_VAN                                                :Oytay Anvay
+STR_8033_BATTERY_TRUCK                                          :Atterybay Ucktray
+STR_8034_FIZZY_DRINK_TRUCK                                      :Izzyfay Inkdray Ucktray
+STR_8035_PLASTIC_TRUCK                                          :Asticplay Ucktray
+STR_8036_X2001_ELECTRIC                                         :'Xay2001' (Electricway)
+STR_8037_MILLENNIUM_Z1_ELECTRIC                                 :'Illenniummay Zay1' (Electricway)
+STR_8038_WIZZOWOW_Z99                                           :Izzowowway Zay99
+STR_8039_PASSENGER_CAR                                          :Assengerpay Arriagecay
+STR_803A_MAIL_VAN                                               :Ailmay Anvay
+STR_803B_COAL_CAR                                               :Oalcay Ucktray
+STR_803C_OIL_TANKER                                             :Oilway Ankertay
+STR_803D_LIVESTOCK_VAN                                          :Ivestocklay Anvay
+STR_803E_GOODS_VAN                                              :Oodsgay Anvay
+STR_803F_GRAIN_HOPPER                                           :Aingray Opperhay
+STR_8040_WOOD_TRUCK                                             :Oodway Ucktray
+STR_8041_IRON_ORE_HOPPER                                        :Ironway Oreway Opperhay
+STR_8042_STEEL_TRUCK                                            :Eelstay Ucktray
+STR_8043_ARMORED_VAN                                            :Armouredway Anvay
+STR_8044_FOOD_VAN                                               :Oodfay Anvay
+STR_8045_PAPER_TRUCK                                            :Aperpay Ucktray
+STR_8046_COPPER_ORE_HOPPER                                      :Oppercay Oreway Opperhay
+STR_8047_WATER_TANKER                                           :Aterway Ankertay
+STR_8048_FRUIT_TRUCK                                            :Uitfray Ucktray
+STR_8049_RUBBER_TRUCK                                           :Ubberray Ucktray
+STR_804A_SUGAR_TRUCK                                            :Ugarsay Ucktray
+STR_804B_COTTON_CANDY_HOPPER                                    :Andyflosscay Opperhay
+STR_804C_TOFFEE_HOPPER                                          :Offeetay Opperhay
+STR_804D_BUBBLE_VAN                                             :Ubblebay Anvay
+STR_804E_COLA_TANKER                                            :Olacay Ankertay
+STR_804F_CANDY_VAN                                              :Eetsway Anvay
+STR_8050_TOY_VAN                                                :Oytay Anvay
+STR_8051_BATTERY_TRUCK                                          :Atterybay Ucktray
+STR_8052_FIZZY_DRINK_TRUCK                                      :Izzyfay Inkdray Ucktray
+STR_8053_PLASTIC_TRUCK                                          :Asticplay Ucktray
+STR_8054_LEV1_LEVIATHAN_ELECTRIC                                :Evlay1 'Eviathan'lay (Electricway)
+STR_8055_LEV2_CYCLOPS_ELECTRIC                                  :Evlay2 'Yclops'cay (Electricway)
+STR_8056_LEV3_PEGASUS_ELECTRIC                                  :Evlay3 'Egasus'pay (Electricway)
+STR_8057_LEV4_CHIMAERA_ELECTRIC                                 :Evlay4 'Imaera'chay (Electricway)
+STR_8058_WIZZOWOW_ROCKETEER                                     :Izzowowway Ocketeerray
+STR_8059_PASSENGER_CAR                                          :Assengerpay Arriagecay
+STR_805A_MAIL_VAN                                               :Ailmay Anvay
+STR_805B_COAL_CAR                                               :Oalcay Ucktray
+STR_805C_OIL_TANKER                                             :Oilway Ankertay
+STR_805D_LIVESTOCK_VAN                                          :Ivestocklay Anvay
+STR_805E_GOODS_VAN                                              :Oodsgay Anvay
+STR_805F_GRAIN_HOPPER                                           :Aingray Opperhay
+STR_8060_WOOD_TRUCK                                             :Oodway Ucktray
+STR_8061_IRON_ORE_HOPPER                                        :Ironway Oreway Opperhay
+STR_8062_STEEL_TRUCK                                            :Eelstay Ucktray
+STR_8063_ARMORED_VAN                                            :Armouredway Anvay
+STR_8064_FOOD_VAN                                               :Oodfay Anvay
+STR_8065_PAPER_TRUCK                                            :Aperpay Ucktray
+STR_8066_COPPER_ORE_HOPPER                                      :Oppercay Oreway Opperhay
+STR_8067_WATER_TANKER                                           :Aterway Ankertay
+STR_8068_FRUIT_TRUCK                                            :Uitfray Ucktray
+STR_8069_RUBBER_TRUCK                                           :Ubberray Ucktray
+STR_806A_SUGAR_TRUCK                                            :Ugarsay Ucktray
+STR_806B_COTTON_CANDY_HOPPER                                    :Andyflosscay Opperhay
+STR_806C_TOFFEE_HOPPER                                          :Offeetay Opperhay
+STR_806D_BUBBLE_VAN                                             :Ubblebay Anvay
+STR_806E_COLA_TANKER                                            :Olacay Ankertay
+STR_806F_CANDY_VAN                                              :Eetsway Anvay
+STR_8070_TOY_VAN                                                :Oytay Anvay
+STR_8071_BATTERY_TRUCK                                          :Atterybay Ucktray
+STR_8072_FIZZY_DRINK_TRUCK                                      :Izzyfay Inkdray Ucktray
+STR_8073_PLASTIC_TRUCK                                          :Asticplay Ucktray
+STR_8074_MPS_REGAL_BUS                                          :MPSay Egalray Usbay
+STR_8075_HEREFORD_LEOPARD_BUS                                   :Erefordhay Eopardlay Usbay
+STR_8076_FOSTER_BUS                                             :Osterfay Usbay
+STR_8077_FOSTER_MKII_SUPERBUS                                   :Osterfay IImkay Uperbussay
+STR_8078_PLODDYPHUT_MKI_BUS                                     :Oddyphutplay Imkay Usbay
+STR_8079_PLODDYPHUT_MKII_BUS                                    :Oddyphutplay IImkay Usbay
+STR_807A_PLODDYPHUT_MKIII_BUS                                   :Oddyphutplay IIImkay Usbay
+STR_807B_BALOGH_COAL_TRUCK                                      :Aloghbay Oalcay Ucktray
+STR_807C_UHL_COAL_TRUCK                                         :Uhlway Oalcay Ucktray
+STR_807D_DW_COAL_TRUCK                                          :DWay Oalcay Ucktray
+STR_807E_MPS_MAIL_TRUCK                                         :MPSay Ailmay Ucktray
+STR_807F_REYNARD_MAIL_TRUCK                                     :Eynardray Ailmay Ucktray
+STR_8080_PERRY_MAIL_TRUCK                                       :Errypay Ailmay Ucktray
+STR_8081_MIGHTYMOVER_MAIL_TRUCK                                 :IghtyMovermay Ailmay Ucktray
+STR_8082_POWERNAUGHT_MAIL_TRUCK                                 :Owernaughtpay Ailmay Ucktray
+STR_8083_WIZZOWOW_MAIL_TRUCK                                    :Izzowowway Ailmay Ucktray
+STR_8084_WITCOMBE_OIL_TANKER                                    :Itcombeway Oilway Ankertay
+STR_8085_FOSTER_OIL_TANKER                                      :Osterfay Oilway Ankertay
+STR_8086_PERRY_OIL_TANKER                                       :Errypay Oilway Ankertay
+STR_8087_TALBOTT_LIVESTOCK_VAN                                  :Albotttay Ivestocklay Anvay
+STR_8088_UHL_LIVESTOCK_VAN                                      :Uhlway Ivestocklay Anvay
+STR_8089_FOSTER_LIVESTOCK_VAN                                   :Osterfay Ivestocklay Anvay
+STR_808A_BALOGH_GOODS_TRUCK                                     :Aloghbay Oodsgay Ucktray
+STR_808B_CRAIGHEAD_GOODS_TRUCK                                  :Aigheadcray Oodsgay Ucktray
+STR_808C_GOSS_GOODS_TRUCK                                       :Ossgay Oodsgay Ucktray
+STR_808D_HEREFORD_GRAIN_TRUCK                                   :Erefordhay Aingray Ucktray
+STR_808E_THOMAS_GRAIN_TRUCK                                     :Omasthay Aingray Ucktray
+STR_808F_GOSS_GRAIN_TRUCK                                       :Ossgay Aingray Ucktray
+STR_8090_WITCOMBE_WOOD_TRUCK                                    :Itcombeway Oodway Ucktray
+STR_8091_FOSTER_WOOD_TRUCK                                      :Osterfay Oodway Ucktray
+STR_8092_MORELAND_WOOD_TRUCK                                    :Orelandmay Oodway Ucktray
+STR_8093_MPS_IRON_ORE_TRUCK                                     :MPSay Ironway Oreway Ucktray
+STR_8094_UHL_IRON_ORE_TRUCK                                     :Uhlway Ironway Oreway Ucktray
+STR_8095_CHIPPY_IRON_ORE_TRUCK                                  :Ippychay Ironway Oreway Ucktray
+STR_8096_BALOGH_STEEL_TRUCK                                     :Aloghbay Eelstay Ucktray
+STR_8097_UHL_STEEL_TRUCK                                        :Uhlway Eelstay Ucktray
+STR_8098_KELLING_STEEL_TRUCK                                    :Ellingkay Eelstay Ucktray
+STR_8099_BALOGH_ARMORED_TRUCK                                   :Aloghbay Armouredway Ucktray
+STR_809A_UHL_ARMORED_TRUCK                                      :Uhlway Armouredway Ucktray
+STR_809B_FOSTER_ARMORED_TRUCK                                   :Osterfay Armouredway Ucktray
+STR_809C_FOSTER_FOOD_VAN                                        :Osterfay Oodfay Anvay
+STR_809D_PERRY_FOOD_VAN                                         :Errypay Oodfay Anvay
+STR_809E_CHIPPY_FOOD_VAN                                        :Ippychay Oodfay Anvay
+STR_809F_UHL_PAPER_TRUCK                                        :Uhlway Aperpay Ucktray
+STR_80A0_BALOGH_PAPER_TRUCK                                     :Aloghbay Aperpay Ucktray
+STR_80A1_MPS_PAPER_TRUCK                                        :MPSay Aperpay Ucktray
+STR_80A2_MPS_COPPER_ORE_TRUCK                                   :MPSay Oppercay Oreway Ucktray
+STR_80A3_UHL_COPPER_ORE_TRUCK                                   :Uhlway Oppercay Oreway Ucktray
+STR_80A4_GOSS_COPPER_ORE_TRUCK                                  :Ossgay Oppercay Oreway Ucktray
+STR_80A5_UHL_WATER_TANKER                                       :Uhlway Aterway Ankertay
+STR_80A6_BALOGH_WATER_TANKER                                    :Aloghbay Aterway Ankertay
+STR_80A7_MPS_WATER_TANKER                                       :MPSay Aterway Ankertay
+STR_80A8_BALOGH_FRUIT_TRUCK                                     :Aloghbay Uitfray Ucktray
+STR_80A9_UHL_FRUIT_TRUCK                                        :Uhlway Uitfray Ucktray
+STR_80AA_KELLING_FRUIT_TRUCK                                    :Ellingkay Uitfray Ucktray
+STR_80AB_BALOGH_RUBBER_TRUCK                                    :Aloghbay Ubberray Ucktray
+STR_80AC_UHL_RUBBER_TRUCK                                       :Uhlway Ubberray Ucktray
+STR_80AD_RMT_RUBBER_TRUCK                                       :RMTay Ubberray Ucktray
+STR_80AE_MIGHTYMOVER_SUGAR_TRUCK                                :IghtyMovermay Ugarsay Ucktray
+STR_80AF_POWERNAUGHT_SUGAR_TRUCK                                :Owernaughtpay Ugarsay Ucktray
+STR_80B0_WIZZOWOW_SUGAR_TRUCK                                   :Izzowowway Ugarsay Ucktray
+STR_80B1_MIGHTYMOVER_COLA_TRUCK                                 :IghtyMovermay Olacay Ucktray
+STR_80B2_POWERNAUGHT_COLA_TRUCK                                 :Owernaughtpay Olacay Ucktray
+STR_80B3_WIZZOWOW_COLA_TRUCK                                    :Izzowowway Olacay Ucktray
+STR_80B4_MIGHTYMOVER_COTTON_CANDY                               :IghtyMovermay Andyflosscay Ucktray
+STR_80B5_POWERNAUGHT_COTTON_CANDY                               :Owernaughtpay Andyflosscay Ucktray
+STR_80B6_WIZZOWOW_COTTON_CANDY_TRUCK                            :Izzowowway Andyflosscay Ucktray
+STR_80B7_MIGHTYMOVER_TOFFEE_TRUCK                               :IghtyMovermay Offeetay Ucktray
+STR_80B8_POWERNAUGHT_TOFFEE_TRUCK                               :Owernaughtpay Offeetay Ucktray
+STR_80B9_WIZZOWOW_TOFFEE_TRUCK                                  :Izzowowway Offeetay Ucktray
+STR_80BA_MIGHTYMOVER_TOY_VAN                                    :IghtyMovermay Oytay Anvay
+STR_80BB_POWERNAUGHT_TOY_VAN                                    :Owernaughtpay Oytay Anvay
+STR_80BC_WIZZOWOW_TOY_VAN                                       :Izzowowway Oytay Anvay
+STR_80BD_MIGHTYMOVER_CANDY_TRUCK                                :IghtyMovermay Eetsway Ucktray
+STR_80BE_POWERNAUGHT_CANDY_TRUCK                                :Owernaughtpay Eetsway Ucktray
+STR_80BF_WIZZOWOW_CANDY_TRUCK                                   :Izzowowway Eetsway Ucktray
+STR_80C0_MIGHTYMOVER_BATTERY_TRUCK                              :IghtyMovermay Atterybay Ucktray
+STR_80C1_POWERNAUGHT_BATTERY_TRUCK                              :Owernaughtpay Atterybay Ucktray
+STR_80C2_WIZZOWOW_BATTERY_TRUCK                                 :Izzowowway Atterybay Ucktray
+STR_80C3_MIGHTYMOVER_FIZZY_DRINK                                :IghtyMovermay Izzyfay Inkdray Ucktray
+STR_80C4_POWERNAUGHT_FIZZY_DRINK                                :Owernaughtpay Izzyfay Inkdray Ucktray
+STR_80C5_WIZZOWOW_FIZZY_DRINK_TRUCK                             :Izzowowway Izzyfay Inkdray Ucktray
+STR_80C6_MIGHTYMOVER_PLASTIC_TRUCK                              :IghtyMovermay Asticplay Ucktray
+STR_80C7_POWERNAUGHT_PLASTIC_TRUCK                              :Owernaughtpay Asticplay Ucktray
+STR_80C8_WIZZOWOW_PLASTIC_TRUCK                                 :Izzowowway Asticplay Ucktray
+STR_80C9_MIGHTYMOVER_BUBBLE_TRUCK                               :IghtyMovermay Ubblebay Ucktray
+STR_80CA_POWERNAUGHT_BUBBLE_TRUCK                               :Owernaughtpay Ubblebay Ucktray
+STR_80CB_WIZZOWOW_BUBBLE_TRUCK                                  :Izzowowway Ubblebay Ucktray
+STR_80CC_MPS_OIL_TANKER                                         :MPSay Oilway Ankertay
+STR_80CD_CS_INC_OIL_TANKER                                      :CSay-Incway. Oilway Ankertay
+STR_80CE_MPS_PASSENGER_FERRY                                    :MPSay Assengerpay Erryfay
+STR_80CF_FFP_PASSENGER_FERRY                                    :FFPay Assengerpay Erryfay
+STR_80D0_BAKEWELL_300_HOVERCRAFT                                :Akewellbay 300 Overcrafthay
+STR_80D1_CHUGGER_CHUG_PASSENGER                                 :Uggerchay-Ugchay Assengerpay Erryfay
+STR_80D2_SHIVERSHAKE_PASSENGER_FERRY                            :Ivershakeshay Assengerpay Erryfay
+STR_80D3_YATE_CARGO_SHIP                                        :Ateyay Argocay ipshay
+STR_80D4_BAKEWELL_CARGO_SHIP                                    :Akewellbay Argocay ipshay
+STR_80D5_MIGHTYMOVER_CARGO_SHIP                                 :Ightymovermay Argocay ipshay
+STR_80D6_POWERNAUT_CARGO_SHIP                                   :Owernautpay Argocay ipshay
+STR_80D7_SAMPSON_U52                                            :Ampsonsay Uway52
+STR_80D8_COLEMAN_COUNT                                          :Olemancay Ountcay
+STR_80D9_FFP_DART                                               :FFPay Artday
+STR_80DA_YATE_HAUGAN                                            :Ateyay Auganhay
+STR_80DB_BAKEWELL_COTSWALD_LB_3                                 :Akewellbay Otswaldcay LBay-3
+STR_80DC_BAKEWELL_LUCKETT_LB_8                                  :Akewellbay Uckettlay LBay-8
+STR_80DD_BAKEWELL_LUCKETT_LB_9                                  :Akewellbay Uckettlay LBay-9
+STR_80DE_BAKEWELL_LUCKETT_LB80                                  :Akewellbay Uckettlay LBay80
+STR_80DF_BAKEWELL_LUCKETT_LB_10                                 :Akewellbay Uckettlay LBay-10
+STR_80E0_BAKEWELL_LUCKETT_LB_11                                 :Akewellbay Uckettlay LBay-11
+STR_80E1_YATE_AEROSPACE_YAC_1_11                                :Ateyay Aerospaceway YACay 1-11
+STR_80E2_DARWIN_100                                             :Arwinday 100
+STR_80E3_DARWIN_200                                             :Arwinday 200
+STR_80E4_DARWIN_300                                             :Arwinday 300
+STR_80E5_DARWIN_400                                             :Arwinday 400
+STR_80E6_DARWIN_500                                             :Arwinday 500
+STR_80E7_DARWIN_600                                             :Arwinday 600
+STR_80E8_GURU_GALAXY                                            :Urugay Alaxygay
+STR_80E9_AIRTAXI_A21                                            :Airtaxiway Away21
+STR_80EA_AIRTAXI_A31                                            :Airtaxiway Away31
+STR_80EB_AIRTAXI_A32                                            :Airtaxiway Away32
+STR_80EC_AIRTAXI_A33                                            :Airtaxiway Away33
+STR_80ED_YATE_AEROSPACE_YAE46                                   :Ateyay Aerospaceway EyAay46
+STR_80EE_DINGER_100                                             :Ingerday 100
+STR_80EF_AIRTAXI_A34_1000                                       :AirTaxiway Away34-1000
+STR_80F0_YATE_Z_SHUTTLE                                         :Ateyay Zay-Uttleshay
+STR_80F1_KELLING_K1                                             :Ellingkay Kay1
+STR_80F2_KELLING_K6                                             :Ellingkay Kay6
+STR_80F3_KELLING_K7                                             :Ellingkay Kay7
+STR_80F4_DARWIN_700                                             :Arwinday 700
+STR_80F5_FFP_HYPERDART_2                                        :FFPay Yperdarthay 2
+STR_80F6_DINGER_200                                             :Ingerday 200
+STR_80F7_DINGER_1000                                            :Ingerday 1000
+STR_80F8_PLODDYPHUT_100                                         :Oddyphutplay 100
+STR_80F9_PLODDYPHUT_500                                         :Oddyphutplay 500
+STR_80FA_FLASHBANG_X1                                           :Ashbangflay Xay1
+STR_80FB_JUGGERPLANE_M1                                         :Uggerplanejay May1
+STR_80FC_FLASHBANG_WIZZER                                       :Ashbangflay Izzerway
+STR_80FD_TRICARIO_HELICOPTER                                    :Icariotray Elicopterhay
+STR_80FE_GURU_X2_HELICOPTER                                     :Urugay Xay2 Elicopterhay
+STR_80FF_POWERNAUT_HELICOPTER                                   :Owernautpay Elicopterhay
+STR_8100_MESSAGE_FROM_VEHICLE_MANUFACTURE                       :{WHITE}Essagemay omfray ehiclevay anufacturermay
+STR_8101_WE_HAVE_JUST_DESIGNED_A                                :{GOLD}Eway avehay ustjay esignedday away ewnay {STRING} - ouldway ouyay ebay interestedway inway away ear'syay exclusiveway useway ofway isthay ehiclevay, osay eway ancay eesay owhay itway erformspay eforebay akingmay itway universallyway availableway?
+STR_8102_RAILROAD_LOCOMOTIVE                                    :ailwayray ocomotivelay
+STR_8103_ROAD_VEHICLE                                           :oadray ehiclevay
+STR_8104_AIRCRAFT                                               :aircraftway
+STR_8105_SHIP                                                   :ipshay
+STR_8106_MONORAIL_LOCOMOTIVE                                    :onorailmay ocomotivelay
+STR_8107_MAGLEV_LOCOMOTIVE                                      :aglevmay ocomotivelay
+
+##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}{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}
+STR_8806_GO_TO                                                  :Ogay otay {STATION}
+STR_8807_GO_TO_TRANSFER                                         :Ogay otay {STATION} (Ansfertray andway aketay argocay)
+STR_8808_GO_TO_UNLOAD                                           :Ogay otay {STATION} (Unloadway)
+STR_8809_GO_TO_TRANSFER_UNLOAD                                  :Ogay otay {STATION} (Ansfertray andway eavelay emptyway)
+STR_880A_GO_TO_LOAD                                             :Ogay otay {STATION} (Oadlay)
+STR_880B_GO_TO_TRANSFER_LOAD                                    :Ogay otay {STATION} (Ansfertray andway aitway orfay ullfay oadlay)
+STR_880C_GO_NON_STOP_TO                                         :Ogay onnay-opstay otay {STATION}
+STR_880D_GO_TO_NON_STOP_TRANSFER                                :Ogay onnay-opstay otay {STATION} (Ansfertray andway aketay argocay)
+STR_880E_GO_NON_STOP_TO_UNLOAD                                  :Ogay onnay-opstay otay {STATION} (Unloadway)
+STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD                         :Ogay onnay-opstay otay {STATION} (Ansfertray andway eavelay emptyway)
+STR_8810_GO_NON_STOP_TO_LOAD                                    :Ogay onnay-opstay otay {STATION} (Oadlay)
+STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD                           :Ogay onnay-opstay otay {STATION} (Ansfertray andway aitway orfay ullfay oadlay)
+STR_GO_TO_TRAIN_DEPOT                                           :Ogay otay {TOWN} Aintray Epotday
+STR_SERVICE_AT_TRAIN_DEPOT                                      :Ervicesay atway {TOWN} Aintray Epotday
+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_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Aveltray (otnay imetabledtay)
+STR_TIMETABLE_TRAVEL_FOR                                        :Aveltray orfay {STRING}
+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
+STR_HEADING_FOR_TRAIN_DEPOT_SERVICE_VEL                         :{LTBLUE}Ervicesay atway {TOWN} Aintray Epotday, {VELOCITY}
+
+STR_INVALID_ORDER                                               :{RED} (Invalidway Orderway)
+
+STR_UNKNOWN_DESTINATION                                         :unknownway estinationday
+STR_8812_EMPTY                                                  :{LTBLUE}Emptyway
+STR_8813_FROM                                                   :{LTBLUE}{CARGO} omfray {STATION}
+STR_FROM_MULT                                                   :{LTBLUE}{CARGO} omfray {STATION} (xay{NUM})
+STR_8814_TRAIN_IS_WAITING_IN_DEPOT                              :{WHITE}Aintray {COMMA} isway aitingway inway epotday
+STR_8815_NEW_VEHICLES                                           :{BLACK}Ewnay Ehiclesvay
+STR_8816                                                        :{BLACK}-
+STR_8819_TRAIN_TOO_LONG                                         :{WHITE}Aintray ootay onglay
+STR_881A_TRAINS_CAN_ONLY_BE_ALTERED                             :{WHITE}Ainstray ancay onlyway ebay alteredway enwhay oppedstay insideway away epotday
+STR_881B_TRAINS                                                 :{WHITE}{COMPANY} - {COMMA} Ain{P "" s}tray
+
+STR_881C_NEW_RAIL_VEHICLES                                      :{WHITE}Ewnay Ailray Ehiclesvay
+STR_NEW_ELRAIL_VEHICLES                                         :{WHITE}Ewnay Electricway Ailray Ehiclesvay
+STR_881D_NEW_MONORAIL_VEHICLES                                  :{WHITE}Ewnay Onorailmay Ehiclesvay
+STR_881E_NEW_MAGLEV_VEHICLES                                    :{WHITE}Ewnay Aglevmay Ehiclesvay
+STR_ALL_AVAIL_RAIL_VEHICLES                                     :{WHITE}Ailray Ehiclesvay
+
+STR_881F_BUILD_VEHICLE                                          :{BLACK}Uildbay Ehiclevay
+STR_CLONE_ROAD_VEHICLE                                          :{BLACK}Oneclay Ehiclevay
+STR_CLONE_ROAD_VEHICLE_INFO                                     :{BLACK}Isthay illway uildbay away opycay ofway ethay oadray ehiclevay. Ontrolcay-ickclay illway areshay ethay ordersway
+STR_CLONE_ROAD_VEHICLE_DEPOT_INFO                               :{BLACK}Isthay illway uildbay away opycay ofway away oadray ehiclevay. Ickclay isthay uttonbay andway enthay onway away oadray ehiclevay insideway orway outsideway ethay epotday. Ontrolcay-ickclay illway areshay ethay ordersway
+STR_CLONE_TRAIN                                                 :{BLACK}Oneclay Aintray
+STR_CLONE_TRAIN_INFO                                            :{BLACK}Isthay illway uildbay away opycay ofway ethay aintray includingway allway arscay. Ontrolcay-ickclay illway areshay ethay ordersway
+STR_CLONE_TRAIN_DEPOT_INFO                                      :{BLACK}Isthay illway uildbay away opycay ofway away aintray includingway allway arscay. Ickclay isthay uttonbay andway enthay onway away aintray insideway orway outsideway ethay epotday. Ontrolcay-ickclay illway areshay ethay ordersway
+STR_8820_RENAME                                                 :{BLACK}Enameray
+STR_8823_SKIP                                                   :{BLACK}Ipskay
+STR_8824_DELETE                                                 :{BLACK}Eleteday
+STR_8825_NON_STOP                                               :{BLACK}Onnay-Opstay
+STR_8826_GO_TO                                                  :{BLACK}Ogay Otay
+STR_8827_FULL_LOAD                                              :{BLACK}Ullfay Oadlay
+STR_8828_UNLOAD                                                 :{BLACK}Unloadway
+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}{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
+STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT                              :{WHITE}An'tcay endsay aintray otay epotday...
+STR_8831_NO_MORE_SPACE_FOR_ORDERS                               :{WHITE}Onay oremay acespay orfay ordersway
+STR_8832_TOO_MANY_ORDERS                                        :{WHITE}Ootay anymay ordersway
+STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}An'tcay insertway ewnay orderway...
+STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}An'tcay eleteday isthay orderway...
+STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}An'tcay odifymay isthay orderway...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}An'tcay ovemay isthay orderway...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}An'tcay ipskay urrentcay orderway...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}An'tcay ipskay otay electedsay orderway...
+STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}An'tcay ovemay ehiclevay...
+STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}Ethay earray engineway illway alwaysway ollowfay itsway ontfray ounterpartcay
+STR_8838_N_A                                                    :Nay/Away{SKIP}
+STR_8839_CAN_T_SELL_RAILROAD_VEHICLE                            :{WHITE}An'tcay ellsay ailwayray ehiclevay...
+STR_883A_UNABLE_TO_FIND_ROUTE_TO                                :{WHITE}Unableway otay indfay outeray otay ocallay epotday
+STR_883B_CAN_T_STOP_START_TRAIN                                 :{WHITE}An'tcay opstay/artstay aintray...
+STR_883C_SERVICING_INTERVAL_DAYS                                :{BLACK}Ervicingsay intervalway: {LTBLUE}{COMMA}aysday{BLACK}   Astlay ervicesay: {LTBLUE}{DATE_LONG}
+STR_SERVICING_INTERVAL_PERCENT                                  :{BLACK}Ervicingsay intervalway: {LTBLUE}{COMMA}%{BLACK}   Astlay ervicesay: {LTBLUE}{DATE_LONG}
+STR_883D_TRAINS_CLICK_ON_TRAIN_FOR                              :{BLACK}Ainstray - ickclay onway aintray orfay informationway
+STR_883E_BUILD_NEW_TRAINS_REQUIRES                              :{BLACK}Uildbay ewnay ainstray (equiresray aintray epotday)
+STR_883F_TRAINS_CLICK_ON_TRAIN_FOR                              :{BLACK}Ainstray - ickclay onway aintray orfay infoway., agdray ehiclevay otay addway/emoveray omfray aintray
+STR_8840_BUILD_NEW_TRAIN_VEHICLE                                :{BLACK}Uildbay ewnay aintray ehiclevay
+STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE                             :{BLACK}Agdray aintray ehiclevay otay erehay otay ellsay itway
+STR_8842_CENTER_MAIN_VIEW_ON_TRAIN                              :{BLACK}Entrecay ainmay iewvay onway aintray epotday ocationlay
+STR_8843_TRAIN_VEHICLE_SELECTION                                :{BLACK}Aintray ehiclevay electionsay istlay - ickclay onway ehiclevay orfay informationway
+STR_8844_BUILD_THE_HIGHLIGHTED_TRAIN                            :{BLACK}Uildbay ethay ighlightedhay aintray ehiclevay
+STR_8845_RENAME_TRAIN_VEHICLE_TYPE                              :{BLACK}Enameray aintray ehiclevay ypetay
+STR_8846_CURRENT_TRAIN_ACTION_CLICK                             :{BLACK}Urrentcay aintray actionway - ickclay erehay otay opstay/artstay aintray
+STR_8847_SHOW_TRAIN_S_ORDERS                                    :{BLACK}Owshay ain'stray ordersway
+STR_8848_CENTER_MAIN_VIEW_ON_TRAIN                              :{BLACK}Entrecay ainmay iewvay onway ain'stray ocationlay
+STR_8849_SEND_TRAIN_TO_DEPOT                                    :{BLACK}Endsay aintray otay epotday. CTRLay+ickclay illway onlyway ervicesay
+STR_884A_FORCE_TRAIN_TO_PROCEED                                 :{BLACK}Orcefay aintray otay oceedpray ithoutway aitingway orfay ignalsay otay earclay itway
+STR_884B_REVERSE_DIRECTION_OF_TRAIN                             :{BLACK}Everseray irectionday ofway aintray
+STR_884C_SHOW_TRAIN_DETAILS                                     :{BLACK}Owshay aintray etailsday
+STR_884D_INCREASE_SERVICING_INTERVAL                            :{BLACK}Increaseway ervicingsay intervalway
+STR_884E_DECREASE_SERVICING_INTERVAL                            :{BLACK}Ecreaseday ervicingsay intervalway
+STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED                          :{BLACK}Owshay etailsday ofway argocay arriedcay
+STR_8850_SHOW_DETAILS_OF_TRAIN_VEHICLES                         :{BLACK}Owshay etailsday ofway aintray ehiclesvay
+STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Owshay apacitiescay ofway eachway ehiclevay
+STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Owshay otaltay apacitycay ofway aintray, itsplay ybay argocay ypetay
+STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Ordersway istlay - ickclay onway anway orderway otay ighlighthay itway. CTRLay + ickclay ollsscray otay ethay ationstay
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Ipskay ethay urrentcay orderway, andway artstay ethay extnay. CTRLay + ickclay ipsskay otay ethay electedsay orderway
+STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Eleteday ethay ighlightedhay orderway
+STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Akemay ethay ighlightedhay orderway onnay-opstay
+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_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Esetray ethay atenesslay ountercay, osay ethay ehiclevay illway ebay onway imetay
+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
+STR_885D_AGE_RUNNING_COST_YR                                    :{BLACK}Ageway: {LTBLUE}{STRING}{BLACK}   Unningray Ostcay: {LTBLUE}{CURRENCY}/yray
+STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED                         :{BLACK}Eightway: {LTBLUE}{WEIGHT_S}  {BLACK}Owerpay: {LTBLUE}{POWER}{BLACK} Axmay. eedspay: {LTBLUE}{VELOCITY}
+STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE                  :{BLACK}Eightway: {LTBLUE}{WEIGHT_S} {BLACK}Owerpay: {LTBLUE}{POWER}{BLACK} Axmay. eedspay: {LTBLUE}{VELOCITY} {BLACK}Axmay. Tay.Eway.: {LTBLUE}{FORCE}
+STR_885F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Ofitpray isthay earyay: {LTBLUE}{CURRENCY}  (astlay earyay: {CURRENCY})
+STR_8860_RELIABILITY_BREAKDOWNS                                 :{BLACK}Eliabilityray: {LTBLUE}{COMMA}%  {BLACK}Eakdownsbray incesay astlay ervicesay: {LTBLUE}{COMMA}
+STR_8861_STOPPED                                                :{RED}Oppedstay
+STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL                           :{WHITE}An'tcay akemay aintray asspay ignalsay atway angerday...
+STR_8863_CRASHED                                                :{RED}Ashedcray!
+
+STR_8865_NAME_TRAIN                                             :{WHITE}Amenay aintray
+STR_8866_CAN_T_NAME_TRAIN                                       :{WHITE}An'tcay amenay aintray...
+STR_8867_NAME_TRAIN                                             :{BLACK}Amenay aintray
+STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL                            :{BLACK}{BIGFONT}Aintray Ashcray!{}{COMMA} ieday inway ireballfay afterway ollisioncay
+STR_8869_CAN_T_REVERSE_DIRECTION                                :{WHITE}An'tcay everseray irectionday ofway aintray...
+STR_886A_RENAME_TRAIN_VEHICLE_TYPE                              :{WHITE}Enameray aintray ehiclevay ypetay
+STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}An'tcay enameray aintray ehiclevay ypetay...
+STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Akemay ethay ighlightedhay orderway orcefay ethay ehiclevay otay umpday argocay
+STR_886F_TRANSFER                                               :{BLACK}Ansfertray
+STR_CLEAR_TIME                                                  :{BLACK}Angechay Imetay
+STR_RESET_LATENESS                                              :{BLACK}Esetray Atelay Ountercay
+
+STR_TRAIN_STOPPING                                              :{RED}Oppingstay
+STR_TRAIN_STOPPING_VEL                                          :{RED}Oppingstay, {VELOCITY}
+STR_INCOMPATIBLE_RAIL_TYPES                                     :Incompatibleway ailray ypestay
+STR_TRAIN_NO_POWER                                              :{RED}Onay owerpay
+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}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}Ewnay {STRING} ownay availableway!  -  {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Ancay otnay imetabletay ehiclevay...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Ehiclesvay ancay onlyway aitway atway ationsstay.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Isthay ehiclevay isway otnay oppingstay atway isthay ationstay.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Angechay Imetay
+STR_TIMETABLE_STATUS_ON_TIME                                    :Isthay ehiclevay isway urrentlycay unningray onway imetay
+STR_TIMETABLE_STATUS_LATE                                       :Isthay ehiclevay isway urrentlycay unningray {STRING} atelay
+STR_TIMETABLE_STATUS_EARLY                                      :Isthay ehiclevay isway urrentlycay unningray {STRING} earlyway
+STR_TIMETABLE_TOTAL_TIME                                        :Isthay imetabletay illway aketay {STRING} otay ompletecay
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :Isthay imetabletay illway aketay atway eastlay {STRING} otay ompletecay (otnay allway imetabledtay)
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Autofillway
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Fill thIllfay ethay imetabletay automaticallyway ithway ethay aluesvay omfray ethay irstfay ourneyjay
+
+##id 0x9000
+STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Oadray ehiclevay inway ethay ayway
+STR_9001_ROAD_VEHICLES                                          :{WHITE}{COMPANY} - {COMMA} Oadray Ehicle{P "" s}vay
+STR_9002                                                        :{WHITE}{VEHICLE}
+STR_9003_ROAD_VEHICLE_DEPOT                                     :{WHITE}{TOWN} Oadray Ehiclevay Epotday
+STR_9004_NEW_VEHICLES                                           :{BLACK}Ewnay Ehiclesvay
+STR_9006_NEW_ROAD_VEHICLES                                      :{WHITE}Ewnay Oadray Ehiclesvay
+STR_9007_BUILD_VEHICLE                                          :{BLACK}Uildbay Ehiclevay
+STR_9009_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}An'tcay uildbay oadray ehiclevay...
+STR_900C_DETAILS                                                :{WHITE}{VEHICLE} (Etailsday)
+STR_900D_AGE_RUNNING_COST_YR                                    :{BLACK}Ageway: {LTBLUE}{STRING}{BLACK}   Unningray Ostcay: {LTBLUE}{CURRENCY}/yray
+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}{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...
+STR_9015_CAN_T_STOP_START_ROAD_VEHICLE                          :{WHITE}An'tcay opstay/artstay oadray ehiclevay...
+STR_9016_ROAD_VEHICLE_IS_WAITING                                :{WHITE}Oadray ehiclevay {COMMA} isway aitingway inway epotday
+STR_HEADING_FOR_ROAD_DEPOT                                      :{ORANGE}Eadinghay orfay {TOWN} Oadray Epotday
+STR_HEADING_FOR_ROAD_DEPOT_VEL                                  :{ORANGE}Eadinghay orfay {TOWN} Oadray Epotday, {VELOCITY}
+STR_HEADING_FOR_ROAD_DEPOT_SERVICE                              :{LTBLUE}Ervicesay atway {TOWN} Oadray Epotday
+STR_HEADING_FOR_ROAD_DEPOT_SERVICE_VEL                          :{LTBLUE}Ervicesay atway {TOWN} Oadray Epotday, {VELOCITY}
+STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT                            :{WHITE}An'tcay endsay ehiclevay otay epotday...
+STR_9019_UNABLE_TO_FIND_LOCAL_DEPOT                             :{WHITE}Unableway otay indfay ocallay epotday
+STR_901A_ROAD_VEHICLES_CLICK_ON                                 :{BLACK}Oadray ehiclesvay - ickclay onway ehiclevay orfay informationway
+STR_901B_BUILD_NEW_ROAD_VEHICLES                                :{BLACK}Uildbay ewnay oadray ehiclesvay (equiresray oadray ehiclevay epotday)
+STR_901C_CURRENT_VEHICLE_ACTION                                 :{BLACK}Urrentcay ehiclevay actionway - ickclay erehay otay opstay/artstay ehiclevay
+STR_901D_SHOW_VEHICLE_S_ORDERS                                  :{BLACK}Owshay ehicle'svay ordersway
+STR_901E_CENTER_MAIN_VIEW_ON_VEHICLE                            :{BLACK}Entrecay ainmay iewvay onway ehicle'svay ocationlay
+STR_901F_SEND_VEHICLE_TO_DEPOT                                  :{BLACK}Endsay ehiclevay otay epotday. CTRLay+ickclay illway onlyway ervicesay
+STR_9020_FORCE_VEHICLE_TO_TURN_AROUND                           :{BLACK}Orcefay ehiclevay otay urntay aroundway
+STR_9021_SHOW_ROAD_VEHICLE_DETAILS                              :{BLACK}Owshay oadray ehiclevay etailsday
+STR_9022_VEHICLES_CLICK_ON_VEHICLE                              :{BLACK}Ehiclesvay - ickclay onway ehiclevay orfay informationway
+STR_9023_BUILD_NEW_ROAD_VEHICLE                                 :{BLACK}Uildbay ewnay oadray ehiclevay
+STR_9024_DRAG_ROAD_VEHICLE_TO_HERE                              :{BLACK}Agdray oadray ehiclevay otay erehay otay ellsay itway
+STR_9025_CENTER_MAIN_VIEW_ON_ROAD                               :{BLACK}Entrecay ainmay iewvay onway oadray ehiclevay epotday ocationlay
+STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Oadray ehiclevay electionsay istlay - ickclay onway ehiclevay orfay informationway
+STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Uildbay ethay ighlightedhay oadray ehiclevay
+STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Ostcay: {CURRENCY}{}Eedspay: {VELOCITY}{}Unningray Ostcay: {CURRENCY}/yray{}Apacitycay: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Apacitycay: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
+
+STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Amenay oadray ehiclevay
+STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}An'tcay amenay oadray ehiclevay...
+STR_902E_NAME_ROAD_VEHICLE                                      :{BLACK}Amenay oadray ehiclevay
+STR_902F_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Itizenscay elebratecay . . .{}Irstfay usbay arrivesway atway {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Itizenscay elebratecay . . .{}Irstfay ucktray arrivesway atway {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Itizenscay elebratecay . . .{}Irstfay assengerpay amtray arrivesway atway {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Itizenscay elebratecay . . .{}Irstfay eightfray amtray arrivesway atway {STATION}!
+STR_9031_ROAD_VEHICLE_CRASH_DRIVER                              :{BLACK}{BIGFONT}Oadray Ehiclevay Ashcray!{}Iverdray iesday inway ireballfay afterway ollisioncay ithway aintray
+STR_9032_ROAD_VEHICLE_CRASH_DIE                                 :{BLACK}{BIGFONT}Oadray Ehiclevay Ashcray!{}{COMMA} ieday inway ireballfay afterway ollisioncay ithway aintray
+STR_9033_CAN_T_MAKE_VEHICLE_TURN                                :{WHITE}An'tcay akemay ehiclevay urntay aroundway...
+STR_ONLY_TURN_SINGLE_UNIT                                       :{WHITE}An'tcay urntay ehiclesvay onsistingcay ofway ultiplemay unitsway
+STR_9034_RENAME                                                 :{BLACK}Enameray
+STR_9035_RENAME_ROAD_VEHICLE_TYPE                               :{BLACK}Enameray oadray ehiclevay ypetay
+STR_9036_RENAME_ROAD_VEHICLE_TYPE                               :{WHITE}Enameray oadray ehiclevay ypetay
+STR_9037_CAN_T_RENAME_ROAD_VEHICLE                              :{WHITE}An'tcay enameray oadray ehiclevay ypetay...
+STR_9038_GO_TO_ROADVEH_DEPOT                                    :Ogay otay {TOWN} Oadray Ehiclevay Epotday
+STR_SERVICE_AT_ROADVEH_DEPOT                                    :Ervicesay atway {TOWN} Oadray Ehiclevay Epotday
+
+STR_REFIT_ROAD_VEHICLE_TO_CARRY                                 :{BLACK}Efitray oadray ehiclevay otay arrycay away ifferentday argocay ypetay
+STR_REFIT_ROAD_VEHICLE                                          :{BLACK}Efitray oadray ehiclevay
+STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED                     :{BLACK}Efitray oadray ehiclevay otay arrycay ighlightedhay argocay ypetay
+STR_REFIT_ROAD_VEHICLE_CAN_T                                    :{WHITE}An'tcay efitray oadray ehiclevay...
+STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Electsay ypetay ofway argocay orfay oadray ehiclevay otay arrycay
+
+##id 0x9800
+STR_9800_DOCK_CONSTRUCTION                                      :Ockday onstructioncay
+STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Ockday onstructioncay
+STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}An'tcay uildbay ockday erehay...
+STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Ipshay Epotday
+STR_9804_NEW_SHIPS                                              :{BLACK}Ewnay Ipsshay
+STR_9805_SHIPS                                                  :{WHITE}{COMPANY} - {COMMA} Ip{P "" s}shay
+STR_9808_NEW_SHIPS                                              :{WHITE}Ewnay Ipsshay
+STR_9809_BUILD_SHIP                                             :{BLACK}Uildbay Ipshay
+STR_CLONE_SHIP                                                  :{BLACK}Oneclay Ipshay
+STR_CLONE_SHIP_INFO                                             :{BLACK}Isthay illway uildbay away opycay ofway ethay ipshay. Ontrolcay-ickclay illway areshay ethay ordersway
+STR_CLONE_SHIP_DEPOT_INFO                                       :{BLACK}Isthay illway uildbay away opycay ofway away ipshay. Ickclay isthay uttonbay andway enthay onway away ipshay insideway orway outsideway ethay epotday. Ontrolcay-ickclay illway areshay ethay ordersway
+STR_980B_SHIP_MUST_BE_STOPPED_IN                                :{WHITE}Ipshay ustmay ebay oppedstay inway epotday
+STR_980C_CAN_T_SELL_SHIP                                        :{WHITE}An'tcay ellsay ipshay...
+STR_980D_CAN_T_BUILD_SHIP                                       :{WHITE}An'tcay uildbay ipshay...
+STR_980E_SHIP_IN_THE_WAY                                        :{WHITE}Ipshay inway ethay ayway
+STR_980F                                                        :{WHITE}{VEHICLE}
+STR_9811_DETAILS                                                :{WHITE}{VEHICLE} (Etailsday)
+STR_9812_AGE_RUNNING_COST_YR                                    :{BLACK}Ageway: {LTBLUE}{STRING}{BLACK}   Unningray Ostcay: {LTBLUE}{CURRENCY}/yray
+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}{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...
+STR_981A_UNABLE_TO_FIND_LOCAL_DEPOT                             :{WHITE}Unableway otay indfay ocallay epotday
+STR_HEADING_FOR_SHIP_DEPOT                                      :{ORANGE}Eadinghay orfay {TOWN} Ipshay Epotday
+STR_HEADING_FOR_SHIP_DEPOT_VEL                                  :{ORANGE}Eadinghay orfay {TOWN} Ipshay Epotday, {VELOCITY}
+STR_HEADING_FOR_SHIP_DEPOT_SERVICE                              :{LTBLUE}Ervicesay atway {TOWN} Ipshay Epotday
+STR_HEADING_FOR_SHIP_DEPOT_SERVICE_VEL                          :{LTBLUE}Ervicesay atway {TOWN} Ipshay Epotday, {VELOCITY}
+STR_981C_SHIP_IS_WAITING_IN_DEPOT                               :{WHITE}Ipshay {COMMA} isway aitingway inway epotday
+STR_981D_BUILD_SHIP_DOCK                                        :{BLACK}Uildbay ipshay ockday
+STR_981E_BUILD_SHIP_DEPOT_FOR_BUILDING                          :{BLACK}Uildbay ipshay epotday (orfay uildingbay andway ervicingsay ipsshay)
+STR_981F_SHIPS_CLICK_ON_SHIP_FOR                                :{BLACK}Ipsshay - ickclay onway ipshay orfay informationway
+STR_9820_BUILD_NEW_SHIP                                         :{BLACK}Uildbay ewnay ipshay
+STR_9821_DRAG_SHIP_TO_HERE_TO_SELL                              :{BLACK}Agdray ipshay otay erehay otay ellsay itway
+STR_9822_CENTER_MAIN_VIEW_ON_SHIP                               :{BLACK}Entrecay ainmay iewvay onway ipshay epotday ocationlay
+STR_9823_SHIPS_CLICK_ON_SHIP_FOR                                :{BLACK}Ipsshay - ickclay onway ipshay orfay informationway
+STR_9824_BUILD_NEW_SHIPS_REQUIRES                               :{BLACK}Uildbay ewnay ipsshay (equiresray ipshay epotday)
+STR_9825_SHIP_SELECTION_LIST_CLICK                              :{BLACK}Ipshay electionsay istlay - ickclay onway ipshay orfay informationway
+STR_9826_BUILD_THE_HIGHLIGHTED_SHIP                             :{BLACK}Uildbay ethay ighlightedhay ipshay
+STR_9827_CURRENT_SHIP_ACTION_CLICK                              :{BLACK}Urrentcay ipshay actionway - ickclay erehay otay opstay/artstay ipshay
+STR_9828_SHOW_SHIP_S_ORDERS                                     :{BLACK}Owshay ip'sshay ordersway
+STR_9829_CENTER_MAIN_VIEW_ON_SHIP                               :{BLACK}Entrecay ainmay iewvay onway ip'sshay ocationlay
+STR_982A_SEND_SHIP_TO_DEPOT                                     :{BLACK}Endsay ipshay otay epotday. CTRLay+ickclay illway onlyway ervicesay
+STR_982B_SHOW_SHIP_DETAILS                                      :{BLACK}Owshay ipshay etailsday
+STR_982E_COST_MAX_SPEED_CAPACITY                                :{BLACK}Ostcay: {CURRENCY} Axmay. Eedspay: {VELOCITY}{}Apacitycay: {CARGO}{}Unningray Ostcay: {CURRENCY}/yray
+STR_982F_NAME_SHIP                                              :{BLACK}Amenay ipshay
+
+STR_9831_NAME_SHIP                                              :{WHITE}Amenay ipshay
+STR_9832_CAN_T_NAME_SHIP                                        :{WHITE}An'tcay amenay ipshay...
+STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Itizenscay elebratecay . . .{}Irstfay ipshay arrivesway atway {STATION}!
+STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}Aceplay away uoybay ichwhay ancay ebay usedway asway away aypointway
+STR_9835_CAN_T_POSITION_BUOY_HERE                               :{WHITE}An'tcay aceplay uoybay erehay...
+STR_9836_RENAME                                                 :{BLACK}Enameray
+STR_9837_RENAME_SHIP_TYPE                                       :{BLACK}Enameray ipshay ypetay
+STR_9838_RENAME_SHIP_TYPE                                       :{WHITE}Enameray ipshay ypetay
+STR_9839_CAN_T_RENAME_SHIP_TYPE                                 :{WHITE}An'tcay enameray ipshay ypetay...
+STR_983A_REFIT_CARGO_SHIP_TO_CARRY                              :{BLACK}Efitray argocay ipshay otay arrycay away ifferentday argocay ypetay
+STR_983B_REFIT                                                  :{WHITE}{VEHICLE} (Efitray)
+STR_983C_REFIT_SHIP                                             :{BLACK}Efitray ipshay
+STR_983D_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Electsay ypetay ofway argocay orfay ipshay otay arrycay
+STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED                        :{BLACK}Efitray ipshay otay arrycay ighlightedhay argocay ypetay
+STR_983F_SELECT_CARGO_TYPE_TO_CARRY                             :{GOLD}Electsay argocay ypetay otay arrycay:
+STR_9840_NEW_CAPACITY_COST_OF_REFIT                             :{BLACK}Ewnay apacitycay: {GOLD}{CARGO}{}{BLACK}Ostcay ofway efitray: {GOLD}{CURRENCY}
+STR_9841_CAN_T_REFIT_SHIP                                       :{WHITE}An'tcay efitray ipshay...
+STR_9842_REFITTABLE                                             :(efittableray)
+STR_GO_TO_SHIP_DEPOT                                            :Ogay otay {TOWN} Ipshay Epotday
+SERVICE_AT_SHIP_DEPOT                                           :Ervicesay atway {TOWN} Ipshay Epotday
+
+##id 0xA000
+STR_A000_AIRPORTS                                               :{WHITE}Airportsway
+STR_A001_CAN_T_BUILD_AIRPORT_HERE                               :{WHITE}An'tcay uildbay airportway erehay...
+STR_A002_AIRCRAFT_HANGAR                                        :{WHITE}{STATION} Aircraftway Angarhay
+STR_A003_NEW_AIRCRAFT                                           :{BLACK}Ewnay Aircraftway
+STR_CLONE_AIRCRAFT                                              :{BLACK}Oneclay Aircraftway
+STR_CLONE_AIRCRAFT_INFO                                         :{BLACK}Isthay illway uildbay away opycay ofway ethay aircraftway. Ontrolcay-ickclay illway areshay ethay ordersway
+STR_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW                           :{BLACK}Isthay illway uildbay away opycay ofway anway aircraftway. Ickclay isthay uttonbay andway enthay onway anway aircraftway insideway orway outsideway ethay angarhay. Ontrolcay-ickclay illway areshay ethay ordersway
+STR_A005_NEW_AIRCRAFT                                           :{WHITE}Ewnay Aircraftway
+STR_A006_BUILD_AIRCRAFT                                         :{BLACK}Uildbay Aircraftway
+STR_A008_CAN_T_BUILD_AIRCRAFT                                   :{WHITE}An'tcay uildbay aircraftway...
+STR_A009_AIRCRAFT                                               :{WHITE}{COMPANY} - {COMMA} Aircraftway
+STR_A00A                                                        :{WHITE}{VEHICLE}
+STR_A00B_ORDERS                                                 :{WHITE}{VEHICLE} (Ordersway)
+STR_A00C_DETAILS                                                :{WHITE}{VEHICLE} (Etailsday)
+STR_A00D_AGE_RUNNING_COST_YR                                    :{BLACK}Ageway: {LTBLUE}{STRING}{BLACK}   Unningray Ostcay: {LTBLUE}{CURRENCY}/yray
+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}{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}
+STR_HEADING_FOR_HANGAR_SERVICE                                  :{LTBLUE}Ervicesay atway {STATION} Angarhay
+STR_HEADING_FOR_HANGAR_SERVICE_VEL                              :{LTBLUE}Ervicesay atway {STATION} Angarhay, {VELOCITY}
+STR_A014_AIRCRAFT_IS_WAITING_IN                                 :{WHITE}Aircraftway {COMMA} isway aitingway inway ethay aircraftway angarhay
+STR_A015_AIRCRAFT_IN_THE_WAY                                    :{WHITE}Aircraftway inway ethay ayway
+STR_A016_CAN_T_STOP_START_AIRCRAFT                              :{WHITE}An'tcay opstay/artstay aircraftway...
+STR_A017_AIRCRAFT_IS_IN_FLIGHT                                  :{WHITE}Aircraftway isway inway ightflay
+STR_A019_CAPACITY                                               :{BLACK}Apacitycay: {LTBLUE}{CARGO}, {CARGO}
+STR_A01A_CAPACITY                                               :{BLACK}Apacitycay: {LTBLUE}{CARGO}
+STR_A01B_AIRCRAFT_MUST_BE_STOPPED                               :{WHITE}Aircraftway ustmay ebay oppedstay inway angarhay
+STR_A01C_CAN_T_SELL_AIRCRAFT                                    :{WHITE}An'tcay ellsay aircraftway...
+STR_A01D_AIRPORT_CONSTRUCTION                                   :Airportway onstructioncay
+STR_A01E_BUILD_AIRPORT                                          :{BLACK}Uildbay airportway
+STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT                             :{BLACK}Aircraftway - ickclay onway aircraftway orfay informationway
+STR_A020_BUILD_NEW_AIRCRAFT_REQUIRES                            :{BLACK}Uildbay ewnay aircraftway (equiresray airportway ithway angarhay)
+STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT                             :{BLACK}Aircraftway - ickclay onway aircraftway orfay informationway
+STR_A022_BUILD_NEW_AIRCRAFT                                     :{BLACK}Uildbay ewnay aircraftway
+STR_A023_DRAG_AIRCRAFT_TO_HERE_TO                               :{BLACK}Agdray aircraftway otay erehay otay ellsay itway
+STR_A024_CENTER_MAIN_VIEW_ON_HANGAR                             :{BLACK}Entrecay ainmay iewvay onway angarhay ocationlay
+STR_A025_AIRCRAFT_SELECTION_LIST                                :{BLACK}Aircraftway electionsay istlay - ickclay onway aircraftway orfay informationway
+STR_A026_BUILD_THE_HIGHLIGHTED_AIRCRAFT                         :{BLACK}Uildbay ethay ighlightedhay aircraftway
+STR_A027_CURRENT_AIRCRAFT_ACTION                                :{BLACK}Urrentcay aircraftway actionway - ickclay erehay otay opstay/artstay aircraftway
+STR_A028_SHOW_AIRCRAFT_S_ORDERS                                 :{BLACK}Owshay aircraft'sway ordersway
+STR_A029_CENTER_MAIN_VIEW_ON_AIRCRAFT                           :{BLACK}Entrecay ainmay iewvay onway aircraft'sway ocationlay
+STR_A02A_SEND_AIRCRAFT_TO_HANGAR                                :{BLACK}Endsay aircraftway otay angarhay. CTRLay+ickclay illway onlyway ervicesay
+STR_A02B_SHOW_AIRCRAFT_DETAILS                                  :{BLACK}Owshay aircraftway etailsday
+STR_A02E_COST_MAX_SPEED_CAPACITY                                :{BLACK}Ostcay: {CURRENCY} Axmay. Eedspay: {VELOCITY}{}Apacitycay: {COMMA} assengerspay, {COMMA} agsbay ofway ailmay{}Unningray Ostcay: {CURRENCY}/yray
+
+STR_A030_NAME_AIRCRAFT                                          :{WHITE}Amenay aircraftway
+STR_A031_CAN_T_NAME_AIRCRAFT                                    :{WHITE}An'tcay amenay aircraftway...
+STR_A032_NAME_AIRCRAFT                                          :{BLACK}Amenay aircraftway
+STR_A033_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Itizenscay elebratecay . . .{}Irstfay aircraftway arrivesway atway {STATION}!
+STR_A034_PLANE_CRASH_DIE_IN_FIREBALL                            :{BLACK}{BIGFONT}Aneplay Ashcray!{}{COMMA} ieday inway ireballfay atway {STATION}
+STR_PLANE_CRASH_OUT_OF_FUEL                                     :{BLACK}{BIGFONT}Aneplay Ashcray!{}Aircraftway anray outway ofway uelfay, {COMMA} ieday inway ireballfay!
+STR_A036                                                        :{TINYFONT}{BLACK}{STATION}
+STR_A037_RENAME                                                 :{BLACK}Enameray
+STR_A038_RENAME_AIRCRAFT_TYPE                                   :{BLACK}Enameray aircraftway ypetay
+STR_A039_RENAME_AIRCRAFT_TYPE                                   :{WHITE}Enameray aircraftway ypetay
+STR_A03A_CAN_T_RENAME_AIRCRAFT_TYPE                             :{WHITE}An'tcay enameray aircraftway ypetay...
+STR_A03B_REFIT_AIRCRAFT_TO_CARRY                                :{BLACK}Efitray aircraftway otay arrycay away ifferentday argocay ypetay
+STR_A03C_REFIT                                                  :{WHITE}{VEHICLE} (Efitray)
+STR_A03D_REFIT_AIRCRAFT                                         :{BLACK}Efitray aircraftway
+STR_A03E_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Electsay ypetay ofway argocay orfay aircraftway otay arrycay
+STR_A03F_REFIT_AIRCRAFT_TO_CARRY                                :{BLACK}Efitray aircraftway otay arrycay ighlightedhay argocay ypetay
+STR_A040_SELECT_CARGO_TYPE_TO_CARRY                             :{GOLD}Electsay argocay ypetay otay arrycay:
+STR_A041_NEW_CAPACITY_COST_OF_REFIT                             :{BLACK}Ewnay apacitycay: {GOLD}{STRING}{}{BLACK}Ostcay ofway efitray: {GOLD}{CURRENCY}
+STR_A042_CAN_T_REFIT_AIRCRAFT                                   :{WHITE}An'tcay efitray aircraftway...
+STR_GO_TO_AIRPORT_HANGAR                                        :Ogay otay {STATION} Angarhay
+SERVICE_AT_AIRPORT_HANGAR                                       :Ervicesay atway {STATION} Angarhay
+
+STR_TIMETABLE_TITLE                                             :{WHITE}{VEHICLE} (Imetabletay)
+
+##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!
+STR_B002_OIL_REFINERY_EXPLOSION                                 :{BLACK}{BIGFONT}Oilway efineryray explosionway earnay {TOWN}!
+STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS                        :{BLACK}{BIGFONT}Actoryfay estroyedday inway uspicioussay ircumstancescay earnay {TOWN}!
+STR_B004_UFO_LANDS_NEAR                                         :{BLACK}{BIGFONT}'UFO'WAY andslay earnay {TOWN}!
+STR_B005_COAL_MINE_SUBSIDENCE_LEAVES                            :{BLACK}{BIGFONT}Oalcay inemay ubsidencesay eaveslay ailtray ofway estructionday earnay {TOWN}!
+STR_B006_FLOOD_VEHICLE_DESTROYED                                :{BLACK}{BIGFONT}Oodsflay!{}Atway eastlay {COMMA} issingmay, esumedpray eadday afterway ignificantsay oodingflay!
+
+STR_BRIBE_FAILED                                                :{WHITE}Ouryay attemptedway ibebray ashay eenbay
+STR_BRIBE_FAILED_2                                              :{WHITE}iscoveredday ybay away egionalray investigatorway
+STR_BUILD_DATE                                                  :{BLACK}Uiltbay: {LTBLUE}{DATE_LONG}
+
+STR_PERFORMANCE_DETAIL                                          :{WHITE}Etailedday erformancepay atingray
+STR_PERFORMANCE_DETAIL_KEY                                      :{BLACK}Etailday
+STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY                          :{BLACK}({CURRCOMPACT}/{CURRCOMPACT})
+STR_PERFORMANCE_DETAIL_AMOUNT_INT                               :{BLACK}({COMMA}/{COMMA})
+STR_PERFORMANCE_DETAIL_PERCENT                                  :{WHITE}{NUM}%
+SET_PERFORMANCE_DETAIL_INT                                      :{BLACK}{NUM}
+############ Those following lines need to be in this order!!
+STR_PERFORMANCE_DETAIL_VEHICLES                                 :{BLACK}Ehiclesvay:
+STR_PERFORMANCE_DETAIL_STATIONS                                 :{BLACK}Ationsstay:
+STR_PERFORMANCE_DETAIL_MIN_PROFIT                               :{BLACK}Inmay. ofitpray:
+STR_PERFORMANCE_DETAIL_MIN_INCOME                               :{BLACK}Inmay. incomeway:
+STR_PERFORMANCE_DETAIL_MAX_INCOME                               :{BLACK}Axmay. incomeway:
+STR_PERFORMANCE_DETAIL_DELIVERED                                :{BLACK}Eliveredday:
+STR_PERFORMANCE_DETAIL_CARGO                                    :{BLACK}Argocay:
+STR_PERFORMANCE_DETAIL_MONEY                                    :{BLACK}Oneymay:
+STR_PERFORMANCE_DETAIL_LOAN                                     :{BLACK}Oanlay:
+STR_PERFORMANCE_DETAIL_TOTAL                                    :{BLACK}Otaltay:
+############ End of order list
+STR_PERFORMANCE_DETAIL_VEHICLES_TIP                             :{BLACK}Umbernay ofway ehiclesvay; isthay includesway oadray ehiclesvay, ainstray, ipsshay andway aircraftway
+STR_PERFORMANCE_DETAIL_STATIONS_TIP                             :{BLACK}Umbernay ofway ationstay artspay. Everyway artpay ofway away ationstay (eway.gay. aintray ationstay, usbay opstay, airportway) isway ountedcay, evenway ifway eythay areway onnectedcay asway oneway ationstay
+STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP                           :{BLACK}Ethay ofitpray ofway ethay ehiclevay ithway ethay owestlay incomeway (ofway allway ehiclesvay olderway anthay 2 earsyay)
+STR_PERFORMANCE_DETAIL_MIN_INCOME_TIP                           :{BLACK}Amountway ofway ashcay ademay inway ethay onthmay ithway ethay owestlay ofitpray ofway ethay astlay 12 artersquay
+STR_PERFORMANCE_DETAIL_MAX_INCOME_TIP                           :{BLACK}Amountway ofway ashcay ademay inway ethay onthmay ithway ethay ighesthay ofitpray ofway ethay astlay 12 artersquay
+STR_PERFORMANCE_DETAIL_DELIVERED_TIP                            :{BLACK}Unitsway ofway argocay eliveredday inway ethay astlay ourfay artersquay
+STR_PERFORMANCE_DETAIL_CARGO_TIP                                :{BLACK}Umbernay ofway ypestay ofway argocay eliveredday inway ethay astlay arterquay
+STR_PERFORMANCE_DETAIL_MONEY_TIP                                :{BLACK}Amountway ofway oneymay isthay ompanycay ashay inway ethay ankbay
+STR_PERFORMANCE_DETAIL_LOAN_TIP                                 :{BLACK}Ethay amountway ofway oneymay isthay ompanycay ashay akentay onway oanlay
+STR_PERFORMANCE_DETAIL_TOTAL_TIP                                :{BLACK}Otaltay ointspay outway ofway ossiblepay ointspay
+
+STR_NEWGRF_SETTINGS_BUTTON                                      :{BLACK}EwGRFnay Ettingssay
+STR_NEWGRF_SETTINGS_CAPTION                                     :{WHITE}EwGRFnay ettingssay
+STR_NEWGRF_APPLY_CHANGES                                        :{BLACK}Applyway angeschay
+STR_NEWGRF_SET_PARAMETERS                                       :{BLACK}Etsay arameterspay
+STR_NEWGRF_TIP                                                  :{BLACK}Away istlay ofway allway ethay Ewgrfnay etssay atthay ouyay avehay installedway. Ickclay away etsay otay angechay ethay ettingssay
+STR_NEWGRF_NO_FILES_INSTALLED                                   :{BLACK}Erethay areway urrentlycay onay ewgrfnay ilesfay installedway! Easeplay eferray otay ethay anualmay orfay instructionsway onway installingway ewnay aphicsgray
+STR_NEWGRF_FILENAME                                             :{BLACK}Ilenamefay: {SILVER}{STRING}
+STR_NEWGRF_GRF_ID                                               :{BLACK}GRFay IDWAY: {SILVER}{STRING}
+STR_NEWGRF_MD5SUM                                               :{BLACK}MDay5umsay: {SILVER}{STRING}
+STR_NEWGRF_CONFIRMATION_TEXT                                    :{YELLOW}Ouyay areway aboutway otay akemay angeschay otay away unningray amegay; isthay ancay ashcray OpenTTDWAY.{}Areway ouyay absolutelyway uresay aboutway isthay?
+
+STR_NEWGRF_ERROR_MSG_INFO                                       :{SILVER}{STRING}
+STR_NEWGRF_ERROR_MSG_WARNING                                    :{RED}Arningway: {SILVER}{STRING}
+STR_NEWGRF_ERROR_MSG_ERROR                                      :{RED}Errorway: {SILVER}{STRING}
+STR_NEWGRF_ERROR_MSG_FATAL                                      :{RED}Atalfay: {SILVER}{STRING}
+STR_NEWGRF_ERROR_VERSION_NUMBER                                 :{STRING} illway otnay orkway ithway ethay AtchtTDPay ersionvay eportedray ybay OpenTTDWAY.
+STR_NEWGRF_ERROR_DOS_OR_WINDOWS                                 :{STRING} isway orfay ethay {STRING} ersionvay ofway TTDay.
+STR_NEWGRF_ERROR_UNSET_SWITCH                                   :{STRING} isway esignedday otay ebay usedway ithway {STRING}
+STR_NEWGRF_ERROR_INVALID_PARAMETER                              :Invalidway arameterpay orfay {STRING}: arameterpay {STRING} ({NUM})
+STR_NEWGRF_ERROR_LOAD_BEFORE                                    :{STRING} ustmay ebay oadedlay eforebay {STRING}.
+STR_NEWGRF_ERROR_LOAD_AFTER                                     :{STRING} ustmay ebay oadedlay afterway {STRING}.
+STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE                          :ethay GRFay ilefay itway asway esignedday otay anslatetray
+
+STR_NEWGRF_ADD                                                  :{BLACK}Addway
+STR_NEWGRF_ADD_TIP                                              :{BLACK}Addway away EwGRFnay ilefay otay ethay istlay
+STR_NEWGRF_REMOVE                                               :{BLACK}Emoveray
+STR_NEWGRF_REMOVE_TIP                                           :{BLACK}Emoveray ethay electedsay EwGRFnay ilefay omfray ethay istlay
+STR_NEWGRF_MOVEUP                                               :{BLACK}Ovemay Upway
+STR_NEWGRF_MOVEUP_TIP                                           :{BLACK}Ovemay ethay electedsay EwGRFnay ilefay upway ethay istlay
+STR_NEWGRF_MOVEDOWN                                             :{BLACK}Ovemay Ownday
+STR_NEWGRF_MOVEDOWN_TIP                                         :{BLACK}Ovemay ethay electedsay EwGRFnay ilefay ownday ethay istlay
+STR_NEWGRF_FILE_TIP                                             :{BLACK}Away istlay ofway ethay EwGRFnay ilesfay atthay areway installedway. Ickclay away ilefay otay angechay itsway arameterspay
+STR_NEWGRF_PARAMETER                                            :{BLACK}Arameterspay: {SILVER}{STRING}
+STR_NEWGRF_PARAMETER_QUERY                                      :{BLACK}Enterway EwGRFnay arameterspay
+STR_NEWGRF_NO_INFO                                              :{BLACK}Onay informationway availableway
+
+STR_NEWGRF_ADD_CAPTION                                          :{WHITE}Availableway EwGRFnay ilesfay
+STR_NEWGRF_ADD_FILE                                             :{BLACK}Addway otay electionsay
+STR_NEWGRF_ADD_FILE_TIP                                         :{BLACK}Addway ethay electedsay EwGRFnay ilefay otay ouryay onfigurationcay
+STR_NEWGRF_RESCAN_FILES                                         :{BLACK}Escanray ilesfay
+STR_NEWGRF_RESCAN_FILES_TIP                                     :{BLACK}Updateway ethay istlay ofway availableway EwGRFnay ilesfay
+STR_NEWGRF_DUPLICATE_GRFID                                      :{WHITE}Annotcay addway ilefay: uplicateday GRFay IDWAY
+
+STR_NEWGRF_NOT_FOUND                                            :{RED}Atchingmay ilefay otnay oundfay
+STR_NEWGRF_DISABLED                                             :{RED}Isabledday
+STR_NEWGRF_COMPATIBLE_LOADED                                    :{ORANGE}Atchingmay ilefay otnay oundfay (ompatiblecay GRFay oadedlay)
+
+STR_NEWGRF_COMPATIBLE_LOAD_WARNING                              :{WHITE}Ompatiblecay GRFay(say) oadedlay orfay issingmay ilesfay
+STR_NEWGRF_DISABLED_WARNING                                     :{WHITE}Issingmay GRFay ilefay(say) avehay eenbay isabledday
+STR_NEWGRF_NOT_FOUND_WARNING                                    :{WHITE}Issingmay GRFay ilefay(say) otay ebay ableway otay oadlay amegay
+
+STR_CURRENCY_WINDOW                                             :{WHITE}Ustomcay urrencycay
+STR_CURRENCY_EXCHANGE_RATE                                      :{LTBLUE}Exchangeway ateray: {ORANGE}{CURRENCY} = £ {COMMA}
+STR_CURRENCY_SEPARATOR                                          :{LTBLUE}Eparatorsay:
+STR_CURRENCY_PREFIX                                             :{LTBLUE}Efixpray:
+STR_CURRENCY_SUFFIX                                             :{LTBLUE}Uffixsay:
+STR_CURRENCY_SWITCH_TO_EURO                                     :{LTBLUE}Itchsway otay Euroway: {ORANGE}{NUM}
+STR_CURRENCY_SWITCH_TO_EURO_NEVER                               :{LTBLUE}Itchsway otay Euroway: {ORANGE}evernay
+STR_CURRENCY_PREVIEW                                            :{LTBLUE}Eviewpray: {ORANGE}{CURRENCY}
+STR_CURRENCY_CHANGE_PARAMETER                                   :{BLACK}Angechay ustomcay urrencycay arameterpay
+
+STR_TRAIN                                                       :{BLACK}{TRAIN}
+STR_BUS                                                         :{BLACK}{BUS}
+STR_LORRY                                                       :{BLACK}{LORRY}
+STR_PLANE                                                       :{BLACK}{PLANE}
+STR_SHIP                                                        :{BLACK}{SHIP}
+
+STR_SCHEDULED_TRAINS                                            :{WHITE}{STATION} - {COMMA} Ain{P "" s}tray
+STR_SCHEDULED_ROAD_VEHICLES                                     :{WHITE}{STATION} - {COMMA} Oadray Ehicle{P "" s}vay
+STR_SCHEDULED_AIRCRAFT                                          :{WHITE}{STATION} - {COMMA} Aircraftway
+STR_SCHEDULED_SHIPS                                             :{WHITE}{STATION} - {COMMA} Ip{P "" s}shay
+
+STR_SCHEDULED_TRAINS_TIP                                        :{BLACK}Owshay allway ainstray ichwhay avehay isthay ationstay onway eirthay eduleschay
+STR_SCHEDULED_ROAD_VEHICLES_TIP                                 :{BLACK}Owshay allway oadray ehiclesvay ichwhay avehay isthay ationstay onway eirthay eduleschay
+STR_SCHEDULED_AIRCRAFT_TIP                                      :{BLACK}Owshay allway aircraftway ichwhay avehay isthay ationstay onway eirthay eduleschay
+STR_SCHEDULED_SHIPS_TIP                                         :{BLACK}Owshay allway ipsshay ichwhay avehay isthay ationstay onway eirthay eduleschay
+
+STR_VEH_WITH_SHARED_ORDERS_LIST                                 :{WHITE}Aredshay ordersway ofway {COMMA} Ehicle{P "" s}vay
+STR_VEH_WITH_SHARED_ORDERS_LIST_TIP                             :{BLACK}Owshay allway ehiclesvay atthay areshay isthay eduleschay
+
+### depot strings
+STR_DEPOT_SELL_CONFIRMATION_TEXT                                :{YELLOW}Ouyay areway aboutway otay ellsay allway ethay ehiclesvay inway ethay epotday. Areway ouyay uresay?
+STR_DEPOT_WRONG_DEPOT_TYPE                                      :Ongwray epotday ypetay
+
+STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP                             :{BLACK}Ellsay allway ainstray inway ethay epotday
+STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP                           :{BLACK}Ellsay allway oadray ehiclesvay inway ethay epotday
+STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP                              :{BLACK}Ellsay allway ipsshay inway ethay epotday
+STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP                          :{BLACK}Ellsay allway aircraftway inway ethay angarhay
+
+STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TIP                          :{BLACK}Etgay away istlay ofway allway ainstray ithway ethay urrentcay epotday inway eirthay ordersway
+STR_DEPOT_VEHICLE_ORDER_LIST_ROADVEH_TIP                        :{BLACK}Etgay away istlay ofway allway oadray ehiclesvay ithway ethay urrentcay epotday inway eirthay ordersway
+STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TIP                           :{BLACK}Etgay away istlay ofway allway ipsshay ithway ethay urrentcay epotday inway eirthay ordersway
+STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TIP                       :{BLACK}Etgay away istlay ofway allway aircraftway ithway anyway angarhay atway isthay airportway inway eirthay ordersway
+
+STR_DEPOT_AUTOREPLACE_TRAIN_TIP                                 :{BLACK}Autoreplaceway allway ainstray inway ethay epotday
+STR_DEPOT_AUTOREPLACE_ROADVEH_TIP                               :{BLACK}Autoreplaceway allway oadray ehiclesvay inway ethay epotday
+STR_DEPOT_AUTOREPLACE_SHIP_TIP                                  :{BLACK}Autoreplaceway allway ipsshay inway ethay epotday
+STR_DEPOT_AUTOREPLACE_AIRCRAFT_TIP                              :{BLACK}Autoreplaceway allway aircraftway inway ethay angarhay
+
+STR_VEHICLE_LIST_TRAIN_DEPOT                                    :{BLACK}{STRING} - {COMMA} Ain{P "" s}tray
+STR_VEHICLE_LIST_ROADVEH_DEPOT                                  :{BLACK}{STRING} - {COMMA} Oadray Ehicle{P "" s}vay
+STR_VEHICLE_LIST_SHIP_DEPOT                                     :{BLACK}{STRING} - {COMMA} Ip{P "" s}shay
+STR_VEHICLE_LIST_AIRCRAFT_DEPOT                                 :{BLACK}{STRING} - {COMMA} Aircraftway
+
+STR_REPLACE_VEHICLES_WHITE                                      :{WHITE}Eplaceray {STRING}
+STR_REPLACE_VEHICLES_START                                      :{BLACK}Artstay Eplacingray Ehiclesvay
+STR_REPLACE_VEHICLES_STOP                                       :{BLACK}Opstay Eplacingray Ehiclesvay
+STR_NOT_REPLACING                                               :{BLACK}Otnay eplacingray
+STR_NOT_REPLACING_VEHICLE_SELECTED                              :{BLACK}Onay ehiclevay electedsay
+STR_REPLACE_HELP_LEFT_ARRAY                                     :{BLACK}Electsay ethay engineway ypetay otay eplaceray
+STR_REPLACE_HELP_RIGHT_ARRAY                                    :{BLACK}Electsay ethay ewnay engineway ypetay ouyay ouldway ikelay otay useway inway aceplay ofway ethay eftlay electedsay engineway ypetay
+STR_REPLACE_HELP_STOP_BUTTON                                    :{BLACK}Esspray otay opstay ethay eplacementray ofway ethay engineway ypetay electedsay onway ethay eftlay
+STR_REPLACE_HELP_START_BUTTON                                   :{BLACK}Esspray otay eginbay eplacementray ofway ethay eftlay electedsay engineway ypetay ithway ethay ightray electedsay engineway ypetay
+STR_REPLACE_HELP_RAILTYPE                                       :{BLACK}Oosechay ethay ailtyperay ouyay antway otay eplaceray enginesway orfay
+STR_REPLACE_HELP_REPLACE_INFO_TAB                               :{BLACK}Isplaysday ichwhay engineway ethay eftlay electedsay engineway isway eingbay eplacedray ithway, ifway anyway
+STR_REPLACE_HELP                                                :{BLACK}Isthay allowsway ouyay otay eplaceray oneway engineway ypetay ithway anotherway ypetay, enwhay ainstray ofway ethay originalway ypetay enterway away epotday
+STR_REPLACE_REMOVE_WAGON                                        :{BLACK}Agonway emovalray: {ORANGE}{SKIP}{STRING}
+STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Akemay autoreplaceway eepkay ethay engthlay ofway away aintray ethay amesay ybay emovingray agonsway (artingstay atway ethay ontfray), ifway eplacingray ethay engineway ouldway akemay ethay aintray ongerlay.
+STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Eplacingray: {ORANGE}{SKIP}{SKIP}{STRING}
+STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK} EXPERIMENTALWAY EATUREFay {}Itchsway etweenbay engineway andway agonway eplacementray indowsway.{}Agonway eplacementray illway onlyway ebay oneday ifway ethay ewnay agonway ancay ebay efittedray intoway arryingcay ethay amesay ypetay ofway argocay asway ethay oldway oneway. Isthay isway eckedchay orfay eachway agonway enwhay ethay actualway eplacementray akestay aceplay.
+STR_RAIL_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Ehiclevay isway otnay availableway
+STR_ROAD_VEHICLE_NOT_AVAILABLE                                  :{WHITE}Ehiclevay isway otnay availableway
+STR_SHIP_NOT_AVAILABLE                                          :{WHITE}Ipshay isway otnay availableway
+STR_AIRCRAFT_NOT_AVAILABLE                                      :{WHITE}Aircraftway isway otnay availableway
+
+STR_ENGINES                                                     :Enginesway
+STR_WAGONS                                                      :Agonsway
+
+STR_MASS_STOP_DEPOT_TRAIN_TIP                                   :{BLACK}Ickclay otay opstay allway ethay ainstray insideway ethay epotday
+STR_MASS_STOP_DEPOT_ROADVEH_TIP                                 :{BLACK}Ickclay otay opstay allway ethay oadray ehiclesvay insideway ethay epotday
+STR_MASS_STOP_DEPOT_SHIP_TIP                                    :{BLACK}Ickclay otay opstay allway ethay ipsshay insideway ethay epotday
+STR_MASS_STOP_HANGAR_TIP                                        :{BLACK}Ickclay otay opstay allway ethay aircraftway insideway ethay angarhay
+
+STR_MASS_START_DEPOT_TRAIN_TIP                                  :{BLACK}Ickclay otay artstay allway ethay ainstray insideway ethay epotday
+STR_MASS_START_DEPOT_ROADVEH_TIP                                :{BLACK}Ickclay otay artstay allway ethay oadray ehiclesvay insideway ethay epotday
+STR_MASS_START_DEPOT_SHIP_TIP                                   :{BLACK}Ickclay otay artstay allway ethay ipsshay insideway ethay epotday
+STR_MASS_START_HANGAR_TIP                                       :{BLACK}Ickclay otay artstay allway ethay aircraftway insideway ethay angarhay
+
+STR_MASS_STOP_LIST_TIP                                          :{BLACK}Ickclay otay opstay allway ethay ehiclesvay inway ethay istlay
+STR_MASS_START_LIST_TIP                                         :{BLACK}Ickclay otay artstay allway ethay ehiclesvay inway ethay istlay
+
+STR_SHORT_DATE                                                  :{WHITE}{DATE_TINY}
+STR_SIGN_LIST_CAPTION                                           :{WHITE}Ignsay Istlay - {COMMA} Ign{P "" s}say
+
+STR_ORDER_REFIT_FAILED                                          :{WHITE}Orderway efitray ailurefay oppedstay {STRING} {COMMA}
+
+############ Lists rail types
+
+STR_RAIL_VEHICLES                                               :Ailray Ehiclesvay
+STR_ELRAIL_VEHICLES                                             :Electrifiedway Ailray Ehiclesvay
+STR_MONORAIL_VEHICLES                                           :Onorailmay Ehiclesvay
+STR_MAGLEV_VEHICLES                                             :Aglevmay Ehiclesvay
+
+############ End of list of rail types
+
+STR_TINY_BLACK                                                  :{BLACK}{TINYFONT}{COMMA}
+
+STR_PURCHASE_INFO_COST_WEIGHT                                   :{BLACK}Ostcay: {GOLD}{CURRENCY}{BLACK} Eightway: {GOLD}{WEIGHT_S}
+STR_PURCHASE_INFO_SPEED_POWER                                   :{BLACK}Eedspay: {GOLD}{VELOCITY}{BLACK}   Owerpay: {GOLD}{POWER}
+STR_PURCHASE_INFO_SPEED                                         :{BLACK}Eedspay: {GOLD}{VELOCITY}
+STR_PURCHASE_INFO_RUNNINGCOST                                   :{BLACK}Unningray Ostcay: {GOLD}{CURRENCY}/yray
+STR_PURCHASE_INFO_CAPACITY                                      :{BLACK}Apacitycay: {GOLD}{CARGO} {STRING}
+STR_PURCHASE_INFO_DESIGNED_LIFE                                 :{BLACK}Esignedday: {GOLD}{NUM}{BLACK} Ifelay: {GOLD}{COMMA} earsyay
+STR_PURCHASE_INFO_RELIABILITY                                   :{BLACK}Axmay. Eliabilityray: {GOLD}{COMMA}%
+STR_PURCHASE_INFO_COST                                          :{BLACK}Ostcay: {GOLD}{CURRENCY}
+STR_PURCHASE_INFO_WEIGHT_CWEIGHT                                :{BLACK}Eightway: {GOLD}{WEIGHT_S}  ({WEIGHT_S})
+STR_PURCHASE_INFO_COST_SPEED                                    :{BLACK}Ostcay: {GOLD}{CURRENCY}{BLACK} Eedspay: {GOLD}{VELOCITY}
+STR_PURCHASE_INFO_AIRCRAFT_CAPACITY                             :{BLACK}Apacitycay: {GOLD}{COMMA} assengerspay, {COMMA} agsbay ofway ailmay
+STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT                          :{BLACK}Oweredpay Agonsway: {GOLD}+{POWER}{BLACK} Eightway: {GOLD}+{WEIGHT_S}
+STR_PURCHASE_INFO_REFITTABLE_TO                                 :{BLACK}Efittableray otay: {GOLD}
+STR_PURCHASE_INFO_ALL_TYPES                                     :Allway argocay ypestay
+STR_PURCHASE_INFO_ALL_BUT                                       :Allway utbay {GOLD}
+STR_PURCHASE_INFO_MAX_TE                                        :{BLACK}Axmay. Activetray Effortway: {GOLD}{FORCE}
+
+########### String for New Landscape Generator
+
+STR_GENERATE                                                    :{WHITE}Enerategay
+STR_RANDOM                                                      :{BLACK}Andomiseray
+STR_RANDOM_HELP                                                 :{BLACK}Angechay ethay andomray eedsay usedway orfay Erraintay Enerationgay
+STR_WORLD_GENERATION_CAPTION                                    :{WHITE}Orldway enerationgay
+STR_RANDOM_SEED                                                 :{BLACK}Andomray Eedsay:
+STR_RANDOM_SEED_HELP                                            :{BLACK}Ickclay otay enterway away andomray eedsay
+STR_LAND_GENERATOR                                              :{BLACK}Andlay eneratorgay:
+STR_TREE_PLACER                                                 :{BLACK}Eetray algorithmway:
+STR_HEIGHTMAP_ROTATION                                          :{BLACK}Eightmaphay otationray:
+STR_TERRAIN_TYPE                                                :{BLACK}Erraintay ypetay:
+STR_QUANTITY_OF_SEA_LAKES                                       :{BLACK}Easay evellay:
+STR_SMOOTHNESS                                                  :{BLACK}Oothnesssmay:
+STR_SNOW_LINE_HEIGHT                                            :{BLACK}Owsnay inelay eighthay:
+STR_DATE                                                        :{BLACK}Ateday:
+STR_NUMBER_OF_TOWNS                                             :{BLACK}Onay. ofway ownstay:
+STR_NUMBER_OF_INDUSTRIES                                        :{BLACK}Onay. ofway industriesway:
+STR_GENERATE_DATE                                               :{BLACK}{DATE_LONG}
+STR_SNOW_LINE_UP                                                :{BLACK}Ovemay ethay owsnay inelay eighthay oneway upway
+STR_SNOW_LINE_DOWN                                              :{BLACK}Ovemay ethay owsnay inelay eighthay oneway ownday
+STR_SNOW_LINE_QUERY_CAPT                                        :{WHITE}Angechay owsnay inelay eighthay
+STR_START_DATE_QUERY_CAPT                                       :{WHITE}Angechay artingstay earyay
+STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Alescay arningway
+STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}Esizingray ourcesay apmay ootay uchmay isway otnay ecommendedray. Ontinuecay ithway ethay enerationgay?
+STR_TOWN_LAYOUT_WARNING_CAPTION                                 :{WHITE}Owntay ayoutlay arningway
+STR_TOWN_LAYOUT_WARNING_MESSAGE                                 :{YELLOW}Ethay owntay ayoutlay "onay oremay oadsray" isway otnay ecommendedray. Ontinuecay ithway ethay enerationgay?
+STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
+STR_HEIGHTMAP_NAME                                              :{BLACK}Eightmaphay amenay:
+STR_HEIGHTMAP_SIZE                                              :{BLACK}Izesay: {ORANGE}{NUM} xay {NUM}
+STR_GENERATION_WORLD                                            :{WHITE}Eneratinggay orldway...
+STR_GENERATION_ABORT                                            :{BLACK}Abortway
+STR_GENERATION_ABORT_CAPTION                                    :{WHITE}Abortway Orldway Enerationgay
+STR_GENERATION_ABORT_MESSAGE                                    :{YELLOW}Oday ouyay eallyray antway otay abortway ethay enerationgay?
+STR_PROGRESS                                                    :{WHITE}{NUM}% ompletecay
+STR_GENERATION_PROGRESS                                         :{BLACK}{NUM} / {NUM}
+STR_WORLD_GENERATION                                            :{BLACK}Orldway enerationgay
+STR_TREE_GENERATION                                             :{BLACK}Eetray enerationgay
+STR_UNMOVABLE_GENERATION                                        :{BLACK}Unmovableway enerationgay
+STR_CLEARING_TILES                                              :{BLACK}Oughray andway ockyray areaway enerationgay
+STR_SETTINGUP_GAME                                              :{BLACK}Ettingsay upway amegay
+STR_PREPARING_TILELOOP                                          :{BLACK}Unningray iletay-ooplay
+STR_PREPARING_GAME                                              :{BLACK}Eparingpray amegay
+STR_DIFFICULTY_TO_CUSTOM                                        :{WHITE}Isthay actionway angedchay ethay ifficultyday evellay otay ustomcay
+STR_SE_FLAT_WORLD                                               :{WHITE}Atflay andlay
+STR_SE_FLAT_WORLD_TIP                                           :{BLACK}Enerategay away atflay andlay
+STR_SE_RANDOM_LAND                                              :{WHITE}Andomray andlay
+STR_SE_NEW_WORLD                                                :{BLACK}Eatecray ewnay enarioscay
+STR_SE_CAPTION                                                  :{WHITE}Enarioscay ypetay
+STR_FLAT_WORLD_HEIGHT_DOWN                                      :{BLACK}Ovemay ethay eighthay ofway atflay andlay oneway ownday
+STR_FLAT_WORLD_HEIGHT_UP                                        :{BLACK}Ovemay ethay eighthay ofway atflay andlay oneway upway
+STR_FLAT_WORLD_HEIGHT_QUERY_CAPT                                :{WHITE}Angechay eighthay ofway atflay andlay
+STR_FLAT_WORLD_HEIGHT                                           :{BLACK}Eighthay ofway atflay andlay:
+STR_FLAT_WORLD_HEIGHT_NUM                                       :{NUM}
+
+STR_SMALLMAP_CENTER                                             :{BLACK}Entercay ethay allmapsmay onway ethay urrentcay ositionpay
+
+########### String for new airports
+STR_SMALL_AIRPORT                                               :{BLACK}Allsmay
+STR_CITY_AIRPORT                                                :{BLACK}Itycay
+STR_METRO_AIRPORT                                               :{BLACK}Etropolitanmay airportway
+STR_INTERNATIONAL_AIRPORT                                       :{BLACK}Internationalway airportway
+STR_COMMUTER_AIRPORT                                            :{BLACK}Ommutercay
+STR_INTERCONTINENTAL_AIRPORT                                    :{BLACK}Intercontinentalway
+STR_HELIPORT                                                    :{BLACK}Eliporthay
+STR_HELIDEPOT                                                   :{BLACK}Elidepothay
+STR_HELISTATION                                                 :{BLACK}Elistationhay
+
+STR_SMALL_AIRPORTS                                              :{BLACK}Allsmay airportsway
+STR_LARGE_AIRPORTS                                              :{BLACK}Argelay airportsway
+STR_HUB_AIRPORTS                                                :{BLACK}Ubhay airportsway
+STR_HELIPORTS                                                   :{BLACK}Elicopterhay airportsway
+
+############ Tooltip measurment
+
+STR_MEASURE_LENGTH                                              :{BLACK}Engthlay: {NUM}
+STR_MEASURE_AREA                                                :{BLACK}Areaway: {NUM} xay {NUM}
+STR_MEASURE_LENGTH_HEIGHTDIFF                                   :{BLACK}Engthlay: {NUM}{}Eighthay ifferenceday: {NUM} may
+STR_MEASURE_AREA_HEIGHTDIFF                                     :{BLACK}Areaway: {NUM} xay {NUM}{}Eighthay ifferenceday: {NUM} may
+
+############ Date formatting
+STR_DATE_TINY                                                   :{STRING}-{STRING}-{NUM}
+STR_DATE_SHORT                                                  :{STRING} {NUM}
+STR_DATE_LONG                                                   :{STRING} {STRING} {NUM}
+
+########
+
+STR_FEEDER_CARGO_VALUE                                          :{BLACK}Ansfertray Editscray: {LTBLUE}{CURRENCY}
+STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD                            :{WHITE}...isthay isway away owntay ownedway oadray
+STR_DRIVE_THROUGH_ERROR_DIRECTION                               :{WHITE}...oadray acingfay inway ethay ongwray irectionday
+
+STR_TRANSPARENCY_TOOLB                                          :{WHITE}Ansparencytray Optionsway
+STR_TRANSPARENT_SIGNS_DESC                                      :{BLACK}Oggletay ansparencytray orfay ationstay ignssay
+STR_TRANSPARENT_TREES_DESC                                      :{BLACK}Oggletay ansparencytray orfay eestray
+STR_TRANSPARENT_HOUSES_DESC                                     :{BLACK}Oggletay ansparencytray orfay ouseshay
+STR_TRANSPARENT_INDUSTRIES_DESC                                 :{BLACK}Oggletay ansparencytray orfay industriesway
+STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Oggletay ansparencytray orfay uildablesbay ikelay ationsstay, epotsday, aypointsway andway atenarycay
+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
+STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Oggletay ansparencytray orfay oadinglay indicatorsway
+
+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                                           :Oupgray {COMMA}
+STR_GROUP_TINY_NAME                                             :{TINYFONT}{GROUP}
+STR_GROUP_ALL_TRAINS                                            :Allway ainstray
+STR_GROUP_ALL_ROADS                                             :Allway oadray ehiclesvay
+STR_GROUP_ALL_SHIPS                                             :Allway ipsshay
+STR_GROUP_ALL_AIRCRAFTS                                         :Allway aircraftway
+STR_GROUP_TINY_NUM                                              :{TINYFONT}{COMMA}
+STR_GROUP_ADD_SHARED_VEHICLE                                    :Addway aredshay ehiclesvay
+STR_GROUP_REMOVE_ALL_VEHICLES                                   :Emoveray allway ehiclesvay
+
+STR_GROUP_TRAINS_CAPTION                                        :{WHITE}{GROUP} - {COMMA} Ain{P "" s}tray
+STR_GROUP_ROADVEH_CAPTION                                       :{WHITE}{GROUP} - {COMMA} Oadray Ehicle{P "" s}vay
+STR_GROUP_SHIPS_CAPTION                                         :{WHITE}{GROUP} - {COMMA} Ip{P "" s}shay
+STR_GROUP_AIRCRAFTS_CAPTION                                     :{WHITE}{GROUP} - {COMMA} Aircraftway
+STR_GROUP_RENAME_CAPTION                                        :{BLACK}Enameray away oupgray
+STR_GROUP_REPLACE_CAPTION                                       :{WHITE}Eplaceray Ehiclesvay ofway "{GROUP}"
+
+STR_GROUP_CAN_T_CREATE                                          :{WHITE}An'tcay eatecray oupgray...
+STR_GROUP_CAN_T_DELETE                                          :{WHITE}An'tcay eleteday isthay oupgray...
+STR_GROUP_CAN_T_RENAME                                          :{WHITE}An'tcay enameray oupgray...
+STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES                             :{WHITE}An'tcay emoveray allway ehiclesvay omfray isthay oupgray...
+STR_GROUP_CAN_T_ADD_VEHICLE                                     :{WHITE}An'tcay addway ethay ehiclevay otay isthay oupgray...
+STR_GROUP_CAN_T_ADD_SHARED_VEHICLE                              :{WHITE}An'tcay addway aredshay ehiclesvay otay oupgray...
+
+STR_GROUPS_CLICK_ON_GROUP_FOR_TIP                               :{BLACK}Oupsgray - Ickclay onway away oupgray otay istlay allway ehiclesvay ofway isthay oupgray
+STR_GROUP_CREATE_TIP                                            :{BLACK}Ickclay otay eatecray away oupgray
+STR_GROUP_DELETE_TIP                                            :{BLACK}Eleteday ethay electedsay oupgray
+STR_GROUP_RENAME_TIP                                            :{BLACK}Enameray ethay electedsay oupgray
+STR_GROUP_REPLACE_PROTECTION_TIP                                :{BLACK}Ickclay otay otectpray isthay oupgray omfray obalglay autoreplaceway
+
+STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR                        :{TINYFONT}{BLACK}Ofitpray isthay earyay: {GREEN}{CURRENCY} {BLACK}(astlay earyay: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR                         :{TINYFONT}{BLACK}Ofitpray isthay earyay: {RED}{CURRENCY} {BLACK}(astlay earyay: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Ofitpray isthay earyay: {GREEN}{CURRENCY} {BLACK}(astlay earyay: {RED}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Ofitpray isthay earyay: {RED}{CURRENCY} {BLACK}(astlay earyay: {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}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}Amenay ustmay ebay uniqueway
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Ogay otay extnay ignsay
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Ogay otay eviouspray ignsay
+
+########
--- a/src/lang/polish.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/polish.txt	Sat Jul 14 19:42: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)
@@ -1119,7 +1121,6 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Dostarcz ładunek na stację tylko jeśli jest zapotrzebowanie: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Pozwól budować bardzo długie mosty: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Zezwalaj na wysyłanie do zajezdni: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Pozwól budować przedsiębiorstwa produkujące surowce: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Pozwól na wiele podobnych przedsiębiorstw w mieście: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Przedsiębiorstwa jednego typu mogą być bud. obok siebie: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Zawsze pokazuj datę w długim formacie w pasku statusu: {ORANGE}{STRING}
@@ -1133,6 +1134,7 @@
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Nowe szukanie drogi (NPF, zastępuje NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Mnożnik wagi dla symulacji ciężkich pociągów towarowych: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Pozwól na budowę przystanków typu ro-ro na drogach miejskich: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADJACENT_STATIONS                            :{LTBLUE}Pozwól na budowę stacji przyległych do stacji przeciwnika (z CTRL): {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Zawsze zezwalaj budować małe lotniska: {ORANGE}{STRING}
 
@@ -1143,7 +1145,7 @@
 STR_CONFIG_PATCHES_ORDER_REVIEW_ON                              :wszystkich pojazdów
 STR_CONFIG_PATCHES_WARN_INCOME_LESS                             :{LTBLUE}Ostrzegaj, jeśli pociąg przynosi straty: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES                        :{LTBLUE}Pojazdy nigdy nie są wycofywane: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AUTORENEW_VEHICLE                            :{LTBLUE}Autoodnowienie pojazdu gdy staje się stary
+STR_CONFIG_PATCHES_AUTORENEW_VEHICLE                            :{LTBLUE}Autoodnawianie pojazdów gdy stają się stare
 STR_CONFIG_PATCHES_AUTORENEW_MONTHS                             :{LTBLUE}Autoodnowienie następuje {ORANGE}{STRING}{LTBLUE} miesięcy przed/po maks. wieku
 STR_CONFIG_PATCHES_AUTORENEW_MONEY                              :{LTBLUE}Min. ilość pieniędzy potrzebna do autoodnowienia: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ERRMSG_DURATION                              :{LTBLUE}Czas trwania komunikatu o błędzie: {ORANGE}{STRING} sekund{P a y ""}
@@ -1172,7 +1174,8 @@
 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_SMOOTH_SCROLLING                             :{LTBLUE}Wygładź przesuwanie widoku: {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
@@ -1184,8 +1187,21 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL                           :Przesuń widok
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Rolka wyłączona
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Prędkość przesuwania widoku: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automatycznie włącz pauzę tworząc nową grę: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Automatycznie włącz pauzę przy rozpoczęciu nowej gry: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS                       :{LTBLUE}Używaj zaawansowanej listy pojazdów: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS                           :{LTBLUE}Pokazuj wskaźniki załadunku: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW                              :{LTBLUE}Uaktywnij rozkłady jazdy pojazdów: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Pokazuj rozkłady jazdy w tickach, a nie w dniach: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE                            :{LTBLUE}Domyślny typ torowiska (w nowej grze/po wczytaniu gry): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Normalne
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Elektryfikowane
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Jednoszynowe
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :MagLev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :Pierwszy dostępny
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :Najnowszy
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :Najczęściej używany
 
+STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Pokaż okno narzędzi do budowy nawet gdy nie ma odpowiednich pojazdów: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maks. liczba pociągów na gracza: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Maks. liczba samochodów na gracza: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Maks. liczba samolotów na gracza: {ORANGE}{STRING}
@@ -1215,7 +1231,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 +1284,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}
@@ -1308,7 +1324,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Jesteś pewien że chcesz stworzyć losowy krajobraz?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Wiele losowych miast
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Pokryj mapę losowo położonymi miastami
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Wiele losowych przedsiębiorstw
+STR_MANY_RANDOM_INDUSTRIES                                      :Wiele losowych przedsiębiorstw
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Pokryj mapę losowo położonymi przedsiębiorstwami
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Nie można stworzyć przedsiębiorstw...
 
@@ -1397,8 +1413,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 +1482,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 +1495,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 +1539,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}
@@ -1523,7 +1564,7 @@
 STR_NETWORK_CONNECTING_WAITING                                  :{BLACK}{NUM} klient{P "" ów ów} chce się przyłączyć
 STR_NETWORK_CONNECTING_DOWNLOADING                              :{BLACK}{NUM} / {NUM} kB dotąd pobranych
 
-STR_NETWORK_DISCONNECT                                          :{BLACK}Rozłączony
+STR_NETWORK_DISCONNECT                                          :{BLACK}Rozłącz
 
 STR_NETWORK_GIVE_MONEY_CAPTION                                  :{WHITE}Wprowadź ilość pieniędzy jaką chcesz przekazać
 STR_NETWORK_NEED_GAME_PASSWORD_CAPTION                          :{WHITE}Serwer jest chroniony. Wprowadź hasło
@@ -1639,7 +1680,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 +1692,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 +1705,61 @@
 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
+STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Należy najpierw usunąć stację kolejową
 
 
 
 ##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 +1767,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 +1776,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 +1809,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 +1880,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,20 +1894,20 @@
 ##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
 STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING                         :{WHITE}Przylega do więcej niż jednej stacji
 STR_3007_TOO_MANY_STATIONS_LOADING                              :{WHITE}Za dużo stacji w tym mieście
 STR_3008_TOO_MANY_STATIONS_LOADING                              :{WHITE}Za duzo stacji
-STR_3008A_TOO_MANY_BUS_STOPS                                    :{WHITE}Za dużo  wiele przystankow autobusowych
+STR_3008A_TOO_MANY_BUS_STOPS                                    :{WHITE}Za dużo przystankow autobusowych
 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 +1931,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 +1981,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 +1999,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 +2125,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 +2213,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!
 
@@ -2170,6 +2250,7 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :Brak
+STR_NUM_VERY_LOW                                                :Bardzo mało
 STR_6816_LOW                                                    :Mało
 STR_6817_NORMAL                                                 :Średnio
 STR_6818_HIGH                                                   :Dużo
@@ -2212,7 +2293,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 +2305,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 +2321,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 +2373,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 +2412,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 +2443,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 +2730,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 +2751,13 @@
 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_TIMETABLE_GO_TO                                             :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Przejazd (bez ustalonego czasu)
+STR_TIMETABLE_TRAVEL_FOR                                        :Przejazd przez {STRING}
+STR_TIMETABLE_STAY_FOR                                          :i zostań tam przez {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} d{P zień ni ni}
+STR_TIMETABLE_TICKS                                             :{COMMA} tick{P "" i ów}
+
 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}
@@ -2709,13 +2799,15 @@
 STR_REFIT                                                       :{BLACK}Przebuduj
 STR_REFIT_TIP                                                   :{BLACK}Wybierz do przewozu jakiego towaru przebudować pojazd w tym zadaniu. CTRL+klik usuwa polecenie przebudowy
 STR_REFIT_ORDER                                                 :(Przebuduj na {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Rozkład
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Otwórz widok rozkładu jazdy
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Polecenia)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Koniec poleceń - -
 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 +2817,9 @@
 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_MOVE_THIS_ORDER                                       :{WHITE}Nie można przenieść tego zadania...
+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}
@@ -2756,12 +2851,16 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Pokaż pojemność każdego wagonu
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Pokaż całkowitą pojemność pociągu, według typu ładunku
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Lista poleceń - klik na poleceniu aby zaznaczyć. CTRL + klik przenosi do stacji
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Pomiń obecne polecenie i zacznij następne
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Pomiń obecne zadanie, i rozpocznij kolejne. CTRL + klik pomija aż do zaznaczonego zadania
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Usuń podświetlone polecenie
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Zrób z tego polecenia 'non-stop'
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Wstaw nowe polecenie na końcu listy lub przed zaznaczonym poleceniem
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Spraw aby zaznaczone polecenie zmusiło pojazd do czekania na pełny załadunek
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Spraw aby zaznaczone polecenie zmusiło pojazd do wyładunku
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Rozkład jazdy - kliknij na zadaniu aby je zaznaczyć.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Zmień ilość czasu którą zaznaczone zadanie powinno zająć
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Usuń ilość czas przeznaczoną na zaznaczone zadanie
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Wyzeruj licznik spóźnienia, aby pojazd podróżował zgodnie z rozkładem jazdy
 STR_SERVICE_HINT                                                :{BLACK}Pomiń to polecenie jesli serwis nie jest wymagany
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Koszt: {CURRENCY} Waga: {WEIGHT_S}{}Prędkość: {VELOCITY}  Moc: {POWER}{}Utrzymanie: {CURRENCY}/rok{}Pojemność: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Awaria
@@ -2783,6 +2882,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Nie można zmienić nazwy typu pojazdu...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Spraw by w zaznaczonym poleceniu pojazd był zmuszony do pozostawienia towaru dla kolejnego pojazdu
 STR_886F_TRANSFER                                               :{BLACK}Przewieź
+STR_CLEAR_TIME                                                  :{BLACK}Usuń czas
+STR_RESET_LATENESS                                              :{BLACK}Wyzeruj spóźnienia
 
 STR_TRAIN_STOPPING                                              :{RED}Hamowanie
 STR_TRAIN_STOPPING_VEL                                          :{RED}Hamowanie, {VELOCITY}
@@ -2791,8 +2892,20 @@
 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}!
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Nie można wyznaczyć rozkładu jazdy pojazdu...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Pojazdy mogą czekać tylko na stacjach.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Ten pojazd nie zatrzymuje się na tej stacji.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Zmień czas
+STR_TIMETABLE_STATUS_ON_TIME                                    :Ten pojazd podróżuje teraz zgodnie z rozkładem jazdy
+STR_TIMETABLE_STATUS_LATE                                       :Ten pojazd jest teraz spóźniony o {STRING}
+STR_TIMETABLE_STATUS_EARLY                                      :Ten pojazd spieszy się teraz o {STRING}
+STR_TIMETABLE_TOTAL_TIME                                        :Ten rozkład jazdy zajmie {STRING}
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :Ten rozkład jazdy zajmie przynajmniej {STRING} (nie wszystkie stacje są na rozkładzie)
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Autofill
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Wypełnij rozkład jazdy automatycznie wartościami z następnej podróży
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Samochód na drodze
@@ -2808,7 +2921,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...
@@ -2835,12 +2948,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...
@@ -2880,7 +2997,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...
@@ -2948,7 +3065,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}
@@ -3001,6 +3118,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'!
@@ -3125,6 +3244,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
@@ -3193,7 +3313,7 @@
 STR_RAIL_VEHICLES                                               :Kolej
 STR_ELRAIL_VEHICLES                                             :Kolej elektryczna
 STR_MONORAIL_VEHICLES                                           :Kolej jednoszynowa
-STR_MAGLEV_VEHICLES                                             :Kolej Maglev
+STR_MAGLEV_VEHICLES                                             :Kolej MagLev
 
 ############ End of list of rail types
 
@@ -3241,6 +3361,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}
@@ -3313,3 +3435,62 @@
 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_ADD_SHARED_VEHICLE                                    :Dodaj poj. współdzielące
+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_REPLACE_CAPTION                                       :{WHITE}Zastąp pojazdy z "{GROUP}"
+
+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_CAN_T_ADD_SHARED_VEHICLE                              :{WHITE}Nie można dodać pojazdów współdzielących polecenia do grupy...
+
+STR_GROUPS_CLICK_ON_GROUP_FOR_TIP                               :{BLACK}Grupy - Kliknij na grupie aby wyświetlić wszystkie pojazdy z 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_GROUP_REPLACE_PROTECTION_TIP                                :{BLACK}Kliknij, aby ochronić tę grupę przed globalną zamianą pojazdów
+
+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}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}Nazwa nie może się powtarzać
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Idź do następnej tablicy
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Idź do poprzedniej tablicy
+
+########
--- a/src/lang/portuguese.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/portuguese.txt	Sat Jul 14 19:42: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}
@@ -31,7 +31,7 @@
 STR_0016_WOOD                                                   :Madeira
 STR_0017_IRON_ORE                                               :Minério de Ferro
 STR_0018_STEEL                                                  :Aço
-STR_0019_VALUABLES                                              :Valores
+STR_0019_VALUABLES                                              :Bens Valiosos
 STR_001A_COPPER_ORE                                             :Minério de Cobre
 STR_001B_MAIZE                                                  :Milho
 STR_001C_FRUIT                                                  :Fruta
@@ -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}
@@ -1034,7 +1034,10 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Entregar carga a uma estação só quando houver procura: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Permitir a construção de pontes muito longas: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Permitir ordens de ir para o depósito: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Permitir construção de produções de matérias-primas: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}Método manual de construção de indústrias primárias: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :nenhum
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :como as outras indústrias
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :prospecção
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Permitir várias indústrias semelhantes por cidade: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Indústrias do mesmo tipo podem ser construídas perto: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Mostrar sempre a data completa na barra de estado: {ORANGE}{STRING}
@@ -1052,7 +1055,7 @@
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Permitir sempre aeroportos pequenos: {ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_WARN_LOST_TRAIN                              :{LTBLUE}Alertar em caso de perda do combóio: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_WARN_LOST_TRAIN                              :{LTBLUE}Alertar em caso de perda do comboio: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ORDER_REVIEW                                 :{LTBLUE}Analisar ordens dos veículos: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ORDER_REVIEW_OFF                             :Não
 STR_CONFIG_PATCHES_ORDER_REVIEW_EXDEPOT                         :Sim, mas excluir veículos parados
@@ -1089,7 +1092,8 @@
 STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Manutenção automática de helicópteros em heliportos: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Ligar ferramentas de paisagem com as de construção: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Ao deslizar com o rato, mover a vista na direcção oposta: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Mostrar uma dica de medição ao utilizar várias ferramentas de construção: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING                             :{LTBLUE}Suavizar deslocamento da navegação no mapa: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Mostrar as medidas nas várias ferramentas de construção: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Mostrar estampagens da companhia: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES_NONE                                :Nenhum
 STR_CONFIG_PATCHES_LIVERIES_OWN                                 :Própria companhia
@@ -1101,7 +1105,20 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Desligado
 STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER                       :{LTBLUE}Velocidade do scrollwheel no mapa: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME                            :{LTBLUE}Pausa automática ao iniciar 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}Activar plano de horários para veículos: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS                           :{LTBLUE}Mostrar horário em tics em vez dias: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE                            :{LTBLUE}Tipo padrão de ferrovia (ao criar ou carregar jogo): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Linha Normal
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Linha Electrificada
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Monorail
+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_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Mostrar ferramentas de construção quando não existirem veículos adequeados: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Máximo de comboios por jogador: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Máximo de veículos de estrada por jogador: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Máximo de aeronaves por jogador: {ORANGE}{STRING}
@@ -1184,7 +1201,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}
@@ -1224,7 +1241,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Tem a certeza que deseja criar um terreno aleatório?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Várias cidades aleatórias
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Cobrir o mapa com cidades colocadas aleatoriamente
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Várias indústrias aleatórias
+STR_MANY_RANDOM_INDUSTRIES                                      :Várias indústrias aleatórias
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Cobrir o mapa com indústrias colocadas aleatoriamente
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Não é possível gerar indústrias...
 
@@ -1395,6 +1412,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :Inglês
 STR_NETWORK_LANG_GERMAN                                         :Alemão
 STR_NETWORK_LANG_FRENCH                                         :Francês
+STR_NETWORK_LANG_BRAZILIAN                                      :Brasileiro
+STR_NETWORK_LANG_BULGARIAN                                      :Búlgaro
+STR_NETWORK_LANG_CHINESE                                        :Chinês
+STR_NETWORK_LANG_CZECH                                          :Checo
+STR_NETWORK_LANG_DANISH                                         :Dinamarquês
+STR_NETWORK_LANG_DUTCH                                          :Holandês
+STR_NETWORK_LANG_ESPERANTO                                      :Esperanto
+STR_NETWORK_LANG_FINNISH                                        :Finlandês
+STR_NETWORK_LANG_HUNGARIAN                                      :Húngaro
+STR_NETWORK_LANG_ICELANDIC                                      :Islandês
+STR_NETWORK_LANG_ITALIAN                                        :Italiano
+STR_NETWORK_LANG_JAPANESE                                       :Japonês
+STR_NETWORK_LANG_KOREAN                                         :Coreano
+STR_NETWORK_LANG_LITHUANIAN                                     :Lituano
+STR_NETWORK_LANG_NORWEGIAN                                      :Norueguês
+STR_NETWORK_LANG_POLISH                                         :Polaco
+STR_NETWORK_LANG_PORTUGUESE                                     :Português
+STR_NETWORK_LANG_ROMANIAN                                       :Romeno
+STR_NETWORK_LANG_RUSSIAN                                        :Russo
+STR_NETWORK_LANG_SLOVAK                                         :Eslovaco
+STR_NETWORK_LANG_SLOVENIAN                                      :Esloveno
+STR_NETWORK_LANG_SPANISH                                        :Espanhol
+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 espera de jogo multi-jogador
@@ -1414,9 +1456,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}
@@ -1588,6 +1630,12 @@
 STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Caminhos-de-ferro com pre-sinais
 STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Caminhos-de-ferro com sinais de saída
 STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Caminhos-de-ferro com sinais combinados
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Carris com sinais normais e pré-sinais
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Carris com sinais normais e de saída
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Carris com sinais normais e combinados
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Carris com pré-sinais e sinais de saída
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Carris com pré-sinais e sinais combinados
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Carris com sinais de saída e combinados
 STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}É preciso remover a estação primeiro
 
 
@@ -1596,22 +1644,39 @@
 STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Deverá remover a estrada primeiro
 STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Trabalhos na estrada em curso
 STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Construir Estradas
+STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Construção de eléctricos
 STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Seleccionar Ponte de Estrada
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}... estradas de um sentido não podem ter junções
 STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Não é possível construir estrada aqui...
+STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}Não é possível construir carris para eléctricos neste local...
 STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Não é possível remover estrada daqui...
+STR_1805_CAN_T_REMOVE_TRAMWAY_FROM                              :{WHITE}Não é possível remover carris para eléctricos deste local...
 STR_1806_ROAD_DEPOT_ORIENTATION                                 :{WHITE}Orientação do Depósito
+STR_1806_TRAM_DEPOT_ORIENTATION                                 :{WHITE}Orientação do depósito para eléctricos
 STR_1807_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}Não é possível construir depósito de veículos de estrada aqui...
+STR_1807_CAN_T_BUILD_TRAM_VEHICLE                               :{WHITE}Não é possível construir depósito para eléctricos neste local...
 STR_1808_CAN_T_BUILD_BUS_STATION                                :{WHITE}Não é possível construir estação de autocarros...
 STR_1809_CAN_T_BUILD_TRUCK_STATION                              :{WHITE}Não é possível construir estação de carregamento de camiões...
+STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION                     :{WHITE}Não é possível construir estação de passageiros para eléctricos...
+STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION                         :{WHITE}Não é possível construir estação de carga para eléctricos...
 STR_180A_ROAD_CONSTRUCTION                                      :Construir estradas
+STR_180A_TRAMWAY_CONSTRUCTION                                   :Construção de carris para eléctricos
 STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Construir estradas
+STR_180B_BUILD_TRAMWAY_SECTION                                  :{BLACK}Construir secção de carris para eléctricos
 STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Construir depósito (para criação e manutenção de veículos de estrada)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT                               :{BLACK}Construir depósito de eléctricos (para construção e manutenção)
 STR_180D_BUILD_BUS_STATION                                      :{BLACK}Construir estação de autocarros
 STR_180E_BUILD_TRUCK_LOADING_BAY                                :{BLACK}Construir área de carregamento de camiões
+STR_180D_BUILD_PASSENGER_TRAM_STATION                           :{BLACK}Construir paragem de eléctricos para passageiros
+STR_180E_BUILD_CARGO_TRAM_STATION                               :{BLACK}Construir paragem de eléctricos para carga
 STR_180F_BUILD_ROAD_BRIDGE                                      :{BLACK}Construir ponte de estrada
+STR_180F_BUILD_TRAMWAY_BRIDGE                                   :{BLACK}Construir ponte para eléctricos
 STR_1810_BUILD_ROAD_TUNNEL                                      :{BLACK}Construir túnel de estrada
+STR_1810_BUILD_TRAMWAY_TUNNEL                                   :{BLACK}Construir túnel para eléctricos
 STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Alternar entre construir/remover estradas
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS                       :{BLACK}Alternar construir/remover linhas de eléctricos e sinais
 STR_1813_SELECT_ROAD_VEHICLE_DEPOT                              :{BLACK}Seleccionar a orientação do depósito
+STR_1813_SELECT_TRAM_VEHICLE_DEPOT                              :{BLACK}Escolher a orientação do depósito de eléctricos
 STR_1814_ROAD                                                   :Estrada
 STR_1815_ROAD_WITH_STREETLIGHTS                                 :Estrada com iluminação
 STR_1816_TREE_LINED_ROAD                                        :Estrada com árvores
@@ -1619,6 +1684,8 @@
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Passagem de nível
 STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Impossível remover estação...
 STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Impossível remover estação...
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION                         :{WHITE}Impossível remover paragem de eléctricos de passageiros
+STR_CAN_T_REMOVE_CARGO_TRAM_STATION                             :{WHITE}Impossível remover estação de eléctricos de mercadorias...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Cidades
@@ -1626,7 +1693,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}
@@ -1659,7 +1726,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}
@@ -1719,7 +1786,7 @@
 
 STR_INDUSTRY                                                    :{INDUSTRY}
 STR_TOWN                                                        :{TOWN}
-STR_INDUSTRY_FORMAT                                             :{TOWN} {STRING}
+STR_INDUSTRY_FORMAT                                             :{1:STRING} de {0:TOWN}
 STR_STATION                                                     :{STATION}
 
 ##id 0x2800
@@ -1730,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}...demasiados sinais
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Não pode colocar um sinal aqui...
 STR_280A_SIGN                                                   :Sinal
@@ -1783,8 +1850,12 @@
 STR_3041_NOW_ACCEPTS_AND                                        :{WHITE}{STATION} agora aceita {STRING} e {STRING}
 STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Orientação da estação de autocarros
 STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Orientação da estação de carga
+STR_3042_PASSENGER_TRAM_STATION_ORIENTATION                     :{WHITE}Orientação da Estação de Eléctricos
+STR_3043_CARGO_TRAM_STATION_ORIENT                              :{WHITE}Orientação da Estação de Eléctricos
 STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Precisa de demolir a estação de autocarros primeiro
 STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Precisa de demolir a estação de carga primeiro
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION                   :{WHITE}Precisa demolir estação de eléctricos primeiro
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION                       :{WHITE}Precisa demolir estação de eléctricos primeiro
 STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} Estações
 STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
 STR_304A_NONE                                                   :{YELLOW}- Nenhuma -
@@ -1796,6 +1867,8 @@
 STR_3050_SELECT_LENGTH_OF_RAILROAD                              :{BLACK}Seleccionar o tamanho da estação ferroviária
 STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Seleccionar a orientação da estação de autocarros
 STR_3052_SELECT_TRUCK_LOADING_BAY                               :{BLACK}Seleccionar a orientação da estação de carregamento de camiões
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION              :{BLACK}Selecionar orientação da estação de eléctricos
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION                  :{BLACK}Selecionar orientação da estação de eléctricos
 STR_3053_CENTER_MAIN_VIEW_ON_STATION                            :{BLACK}Centrar visualização no local estação
 STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}Mostrar avaliações da estação
 STR_3055_CHANGE_NAME_OF_STATION                                 :{BLACK}Alterar o nome da estação
@@ -1833,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}...Não é possível construir na água
+STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Precisa de demolir o canal primeiro
 
 ##id 0x4000
 STR_4000_SAVE_GAME                                              :{WHITE}Guardar Jogo
@@ -1842,9 +1916,14 @@
 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_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Erro interno: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Ficheiro corrompido - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Jogo gravado numa versão mais recente do jogo
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :Impossível ler ficheiro
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :Impossível escrever ficheiro
 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
@@ -1901,6 +1980,13 @@
 STR_4829_REQUIRES                                               :{BLACK}Necessário: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}Carga aguardando processamento:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES                                               :{BLACK}Produz: {YELLOW}{STRING}
+STR_4828_PRODUCES                                               :{BLACK}Produz: {YELLOW}{STRING}, {STRING}
+############ range for produces ends
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Produção no último mês:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% transportado)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Centrar visualização na localização da indústria
@@ -2015,8 +2101,7 @@
 STR_SV_STNAME_LOWER                                             :{STRING} de baixo
 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!
 
@@ -2096,7 +2181,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
@@ -2108,7 +2193,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
@@ -2124,20 +2209,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
@@ -2176,8 +2261,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)
@@ -2215,7 +2300,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
@@ -2246,9 +2331,11 @@
 STR_LIVERY_HELICOPTER                                           :Helicóptero
 STR_LIVERY_SMALL_PLANE                                          :Aeronave de Pequenas Dimensões
 STR_LIVERY_LARGE_PLANE                                          :Aeronave de Grandes Dimensões
+STR_LIVERY_PASSENGER_TRAM                                       :Eléctrico de Passageiros
+STR_LIVERY_FREIGHT_TRAM                                         :Eléctrico de Mercadorias
 
 STR_LIVERY_GENERAL_TIP                                          :{BLACK}Exibir esquema de cores geral
-STR_LIVERY_TRAIN_TIP                                            :{BLACK}Exibir esquemas de cores dos combóios
+STR_LIVERY_TRAIN_TIP                                            :{BLACK}Exibir esquemas de cores dos comboios
 STR_LIVERY_ROADVEH_TIP                                          :{BLACK}Exibir esquemas de cores dos veículos de estrada
 STR_LIVERY_SHIP_TIP                                             :{BLACK}Exibir esquemas de cores dos navios
 STR_LIVERY_AIRCRAFT_TIP                                         :{BLACK}Exibir esquema de cores da aeronave
@@ -2525,7 +2612,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}
@@ -2546,6 +2633,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                             :Viagem (sem programação)
+STR_TIMETABLE_TRAVEL_FOR                                        :Viajar durante {STRING}
+STR_TIMETABLE_STAY_FOR                                          :e ficar durante {STRING}
+STR_TIMETABLE_DAYS                                              :{COMMA} dia{P "" s}
+STR_TIMETABLE_TICKS                                             :{COMMA} tic{P "" s}
+
 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}
@@ -2587,13 +2681,15 @@
 STR_REFIT                                                       :{BLACK}Converter
 STR_REFIT_TIP                                                   :{BLACK}Seleccionar o tipo de carga a converter nesta ordem. Pressionar Ctrl e botão-esquerdo do rato para remover instrução de conversão
 STR_REFIT_ORDER                                                 :(Converter para {STRING})
+STR_TIMETABLE_VIEW                                              :{BLACK}Horário
+STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}Mudar para a vista 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}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
@@ -2603,6 +2699,9 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Não é possível inserir nova ordem...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Não é possível eliminar esta ordem...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Não é possível modificar esta ordem...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Impossível mover esta ordem...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Impossível saltar esta ordem...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Impossível saltar ordem seleccionada...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Não é possível mover veículo...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}A locomotiva traseira seguirá sempre a sua parceira frontal
 STR_8838_N_A                                                    :N/D{SKIP}
@@ -2634,12 +2733,16 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Mostrar capacidades de cada veículo
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Mostrar capacidade total do comboio, dividir por tipo de carga
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Lista de ordens - clique numa ordem para a seleccionar
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Saltar a ordem actual, e iniciar a próxima
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Salta a ordem actual, e inicia a próxima. CTRL + clique salta para a ordem seleccionada
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Eliminar a ordem seleccionada
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}A ordem seleccionada fará com que o veículo não para noutras estações pelo caminho
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Inserir nova ordem antes da ordem seleccionada, ou adicionar ao fim da lista
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}A ordem seleccionada fará com que o veículo espere carregar completamente
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}A ordem seleccionada forçará o veículo a descarregar
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Horário - clique numa ordem para a seleccionar.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP                                 :{BLACK}Muda o espaço de tempo que a ordem seleccionada deve durar
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP                                :{BLACK}Apagar o tempo que dura a ordem seleccionada
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Limpar o contador de atraso, para que o veículo passe a estar a horas
 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}Avariado
@@ -2661,6 +2764,8 @@
 STR_886B_CAN_T_RENAME_TRAIN_VEHICLE                             :{WHITE}Não é possível renomear tipo de veículo ferroviário...
 STR_886D_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}A ordem seleccionada forçará o veículo a largar a carga
 STR_886F_TRANSFER                                               :{BLACK}Transferir
+STR_CLEAR_TIME                                                  :{BLACK}Apagar Tempo
+STR_RESET_LATENESS                                              :{BLACK}Apagar Contad. Atraso
 
 STR_TRAIN_STOPPING                                              :{RED}A Parar
 STR_TRAIN_STOPPING_VEL                                          :{RED}A Parar, {VELOCITY}
@@ -2669,8 +2774,20 @@
 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}
+
+STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}Impossível programar veículo...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}Veículos apenas podem esperar em estações.
+STR_TIMETABLE_NOT_STOPPING_HERE                                 :{WHITE}Este veículo não pára nesta estação.
+STR_TIMETABLE_CHANGE_TIME                                       :{BLACK}Mudar Tempo
+STR_TIMETABLE_STATUS_ON_TIME                                    :Este veículo está actualmente a andar a horas
+STR_TIMETABLE_STATUS_LATE                                       :Este veículo está presentemente atrasado {STRING}
+STR_TIMETABLE_STATUS_EARLY                                      :Este veículo está presentemente adiantado {STRING}
+STR_TIMETABLE_TOTAL_TIME                                        :Este horário vai levar {STRING} a completar
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :Este horário vai levar pelo menos {STRING} a completar (nem tudo está programado)
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Auto pr.
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Preencher o horário automaticamente com os valores da primeira viagem
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Veículo de estrada no caminho
@@ -2686,7 +2803,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...
@@ -2713,12 +2830,16 @@
 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_ARTICULATED_RV_CAPACITY                                     :{BLACK}Capacidade: {LTBLUE}
+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...
 STR_902E_NAME_ROAD_VEHICLE                                      :{BLACK}Renomear veículo de estrada
 STR_902F_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Cidadãos celebram . . .{}Primeiro autocarro chega a {STATION}!
 STR_9030_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Cidadãos celebram . . .{}Primeiro camião chega a {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Cidadãos celebram . . .{}Primeiro eléctrico de passageiros chega a {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Cidadãos celebram . . .{}Primeiro eléctrico de mercadorias chega a {STATION}!
 STR_9031_ROAD_VEHICLE_CRASH_DRIVER                              :{BLACK}{BIGFONT}Acidente de Veículo de Estrada!{}Condutor morre na explosão após a colisão com um comboio
 STR_9032_ROAD_VEHICLE_CRASH_DIE                                 :{BLACK}{BIGFONT}Acidente de Veículo de Estrada!{}{COMMA} morrem na explosão após a colisão com um comboio
 STR_9033_CAN_T_MAKE_VEHICLE_TURN                                :{WHITE}Não é possível fazer o veículo dar a volta...
@@ -2758,7 +2879,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...
@@ -2805,7 +2926,7 @@
 STR_9841_CAN_T_REFIT_SHIP                                       :{WHITE}Não é possível adaptar barco...
 STR_9842_REFITTABLE                                             :(adaptável)
 STR_GO_TO_SHIP_DEPOT                                            :Ir para o depósito naval de {TOWN}
-SERVICE_AT_SHIP_DEPOT                                           :Manutenção no depósito de {TOWN}
+SERVICE_AT_SHIP_DEPOT                                           :Manutenção no estaleiro de {TOWN}
 
 ##id 0xA000
 STR_A000_AIRPORTS                                               :{WHITE}Aeroportos
@@ -2826,7 +2947,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}
@@ -2879,6 +3000,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} (Horário)
+
 ##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!
@@ -3003,13 +3126,14 @@
 
 ### depot strings
 STR_DEPOT_SELL_CONFIRMATION_TEXT                                :{YELLOW}Está prestes a vender todos os veículos no depósito. Tem a certeza?
+STR_DEPOT_WRONG_DEPOT_TYPE                                      :Tipo de depósito errado
 
-STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP                             :{BLACK}Vender todos os combóios no depósito
+STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP                             :{BLACK}Vender todos os comboios no depósito
 STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP                           :{BLACK}Vender todos os veículos no depósito
 STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP                              :{BLACK}Vender todos os navios no depósito
 STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP                          :{BLACK}Vender todos os aviões no hangar
 
-STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TIP                          :{BLACK}Obter uma lista de todos os combóios em cujas ordens conste este depósito
+STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TIP                          :{BLACK}Obter uma lista de todos os comboios em cujas ordens conste este depósito
 STR_DEPOT_VEHICLE_ORDER_LIST_ROADVEH_TIP                        :{BLACK}Obter uma lista de todos os veículos em cujas ordens conste este depósito
 STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TIP                           :{BLACK}Obter uma lista de todos os navios em cujas ordens conste este depósito
 STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TIP                       :{BLACK}Obter uma lista de todas as aeronaves em cujas ordens conste um hangar deste aeroporto
@@ -3048,12 +3172,12 @@
 STR_ENGINES                                                     :Locomotivas
 STR_WAGONS                                                      :Vagões
 
-STR_MASS_STOP_DEPOT_TRAIN_TIP                                   :{BLACK}Pressione botão esquerdo do rato para imobilizar todos os combóios no depósito
+STR_MASS_STOP_DEPOT_TRAIN_TIP                                   :{BLACK}Pressione botão esquerdo do rato para imobilizar todos os comboios no depósito
 STR_MASS_STOP_DEPOT_ROADVEH_TIP                                 :{BLACK}Pressione botão esquerdo do rato para imobilizar todos os veículos no depósito
 STR_MASS_STOP_DEPOT_SHIP_TIP                                    :{BLACK}Pressione botão esquerdo do rato para imobilizar todos os navios no depósito
 STR_MASS_STOP_HANGAR_TIP                                        :{BLACK}Pressione botão esquerdo do rato para imobilizar todas as aeronaves no hangar
 
-STR_MASS_START_DEPOT_TRAIN_TIP                                  :{BLACK}Pressione botão esquerdo do rato para iniciar todos os combóios no depósito
+STR_MASS_START_DEPOT_TRAIN_TIP                                  :{BLACK}Pressione botão esquerdo do rato para iniciar todos os comboios no depósito
 STR_MASS_START_DEPOT_ROADVEH_TIP                                :{BLACK}Pressione botão esquerdo do rato para iniciar todos os veículos de estrada no depósito
 STR_MASS_START_DEPOT_SHIP_TIP                                   :{BLACK}Pressione botão esquerdo do rato para iniciar todos os navios no depósito
 STR_MASS_START_HANGAR_TIP                                       :{BLACK}Pressione botão esquerdo do rato para iniciar todas as aeronaves no hangar
@@ -3193,13 +3317,67 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}Comutar transparência para edificações como estações, depósitos, pontos-de-passagem e catenárias
 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_TRANSPARENT_LOADING_DESC                                    :{BLACK}Alterar transparência para 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 os Comboios
+STR_GROUP_ALL_ROADS                                             :Todos os veículos de estrada
+STR_GROUP_ALL_SHIPS                                             :Todos os barcos
+STR_GROUP_ALL_AIRCRAFTS                                         :Todas as aeronaves
 STR_GROUP_TINY_NUM                                              :{TINYFONT}{COMMA}
+STR_GROUP_ADD_SHARED_VEHICLE                                    :Adic. veíc. partilh.
+STR_GROUP_REMOVE_ALL_VEHICLES                                   :Remover todos os veículos
 
+STR_GROUP_TRAINS_CAPTION                                        :{WHITE}{GROUP} - {COMMA} Comboio{P "" s}
+STR_GROUP_ROADVEH_CAPTION                                       :{WHITE}{GROUP} - {COMMA} Veículo{P "" s} de estrada
+STR_GROUP_SHIPS_CAPTION                                         :{WHITE}{GROUP} - {COMMA} Barco{P "" s}
+STR_GROUP_AIRCRAFTS_CAPTION                                     :{WHITE}{GROUP} - {COMMA} Avi{P "ão" "ões"}
+STR_GROUP_RENAME_CAPTION                                        :{BLACK}Renomear um grupo
+STR_GROUP_REPLACE_CAPTION                                       :{WHITE}Substituir Veículos de "{GROUP}"
 
+STR_GROUP_CAN_T_CREATE                                          :{WHITE}Impossível criar grupo...
+STR_GROUP_CAN_T_DELETE                                          :{WHITE}Impossível remover este grupo...
+STR_GROUP_CAN_T_RENAME                                          :{WHITE}Impossível renomear o grupo...
+STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES                             :{WHITE}Não é possível remover todos os veículos deste grupo...
+STR_GROUP_CAN_T_ADD_VEHICLE                                     :{WHITE}Impossível adicionar o veículo a este grupo...
+STR_GROUP_CAN_T_ADD_SHARED_VEHICLE                              :{WHITE}Impossível adicionar veículos com ordens partilhadas ao grupo...
 
+STR_GROUPS_CLICK_ON_GROUP_FOR_TIP                               :{BLACK}Grupos - Clique num grupo para listar todos os seus veículos
+STR_GROUP_CREATE_TIP                                            :{BLACK}Clique para criar um grupo
+STR_GROUP_DELETE_TIP                                            :{BLACK}Remover o grupo seleccionado
+STR_GROUP_RENAME_TIP                                            :{BLACK}Mudar o nome do grupo seleccionado
+STR_GROUP_REPLACE_PROTECTION_TIP                                :{BLACK}Clique para proteger este grupo da autosubstituição global
 
+STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR                        :{TINYFONT}{BLACK}Lucro deste ano: {GREEN}{CURRENCY} {BLACK}(ano passado: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR                         :{TINYFONT}{BLACK}Lucro deste ano: {RED}{CURRENCY} {BLACK}(ano passado: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR                         :{TINYFONT}{BLACK}Lucro deste ano: {GREEN}{CURRENCY} {BLACK}(ano passado: {RED}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR                          :{TINYFONT}{BLACK}Lucro deste 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}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}Nome deve ser único
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Ir para o próximo sinal
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Ir para o sinal anterior
 
 ########
+
+STR_FUND_NEW_INDUSTRY                                           :{BLACK}Criar
+STR_PROSPECT_NEW_INDUSTRY                                       :{BLACK}Prospectar
+STR_BUILD_NEW_INDUSTRY                                          :{BLACK}Construir
+STR_INDUSTRY_SELECTION_HINT                                     :{BLACK}Escolha a indústria apropriada desta lista
--- a/src/lang/romanian.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/romanian.txt	Sat Jul 14 19:42: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}
@@ -315,16 +315,16 @@
 STR_0152_TOWN_DIRECTORY                                         :Lista cu orase
 STR_0153_SUBSIDIES                                              :Subventii
 
-STR_UNITS_IMPERIAL                                              :Imperial
-STR_UNITS_METRIC                                                :Metric
+STR_UNITS_IMPERIAL                                              :Imperiale
+STR_UNITS_METRIC                                                :Metrice
 STR_UNITS_SI                                                    :SI
 
 STR_UNITS_VELOCITY_IMPERIAL                                     :{COMMA} mph
 STR_UNITS_VELOCITY_METRIC                                       :{COMMA} km/h
 STR_UNITS_VELOCITY_SI                                           :{COMMA} m/s
 
-STR_UNITS_POWER_IMPERIAL                                        :{COMMA}hp
-STR_UNITS_POWER_METRIC                                          :{COMMA}hp
+STR_UNITS_POWER_IMPERIAL                                        :{COMMA}cp
+STR_UNITS_POWER_METRIC                                          :{COMMA}cp
 STR_UNITS_POWER_SI                                              :{COMMA}kW
 
 STR_UNITS_WEIGHT_SHORT_IMPERIAL                                 :{COMMA}t
@@ -343,8 +343,8 @@
 STR_UNITS_VOLUME_LONG_METRIC                                    :{COMMA} litri{P "" s}
 STR_UNITS_VOLUME_LONG_SI                                        :{COMMA} m³
 
-STR_UNITS_FORCE_IMPERIAL                                        :{COMMA}x10³ lbf
-STR_UNITS_FORCE_METRIC                                          :{COMMA} tone fortã
+STR_UNITS_FORCE_IMPERIAL                                        :{COMMA}x10³ livre-forţă
+STR_UNITS_FORCE_METRIC                                          :{COMMA} tone-forţă
 STR_UNITS_FORCE_SI                                              :{COMMA} kN
 
 ############ range for menu starts
@@ -472,7 +472,7 @@
 STR_0194_SHOW_TRANSPORT_ROUTES_ON                               :{BLACK}Aratã rutele de transport pe hartã
 STR_0195_SHOW_VEGETATION_ON_MAP                                 :{BLACK}Aratã vegetatia pe hartã
 STR_0196_SHOW_LAND_OWNERS_ON_MAP                                :{BLACK}Aratã proprietãtile pe hartã
-STR_0197_TOGGLE_TOWN_NAMES_ON_OFF                               :{BLACK}Activeazã/Dezactiveazã afisarea numelor oraselor pe hartã
+STR_0197_TOGGLE_TOWN_NAMES_ON_OFF                               :{BLACK}Activeazã/Dezactivează afişarea numelor oraşelor pe hartă
 STR_0198_PROFIT_THIS_YEAR_LAST_YEAR                             :{TINYFONT}{BLACK}Profit anul acesta: {CURRENCY} (anul trecut: {CURRENCY})
 
 ############ range for service numbers starts
@@ -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}
@@ -814,12 +814,12 @@
 STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW                                :{BLACK}Importa din ecran
 STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT                             :{BLACK}Importa locatia acestui ecran in ecranul principal
 
-STR_02E0_CURRENCY_UNITS                                         :{BLACK}Unităţi monetare
+STR_02E0_CURRENCY_UNITS                                         :{BLACK}Unitate monetară
 STR_02E1                                                        :{BLACK}{SKIP}{STRING}
 STR_02E2_CURRENCY_UNITS_SELECTION                               :{BLACK}Alege unitatea monetară
-STR_MEASURING_UNITS                                             :{BLACK}Unitãti de mãsurã
+STR_MEASURING_UNITS                                             :{BLACK}Unităţi de măsură
 STR_02E4                                                        :{BLACK}{SKIP}{SKIP}{STRING}
-STR_MEASURING_UNITS_SELECTION                                   :{BLACK}Selectie unitãti de mãsurã
+STR_MEASURING_UNITS_SELECTION                                   :{BLACK}Selecţie unităţi de măsură
 STR_02E6_ROAD_VEHICLES                                          :{BLACK}Autovehiculele circulă...
 STR_02E7                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{STRING}
 STR_02E8_SELECT_SIDE_OF_ROAD_FOR                                :{BLACK}Alege partea străzii pe care se circulă
@@ -902,35 +902,35 @@
 STR_TOWNNAME_CATALAN                                            :Catalan
 ############ end of townname region
 
-STR_CURR_GBP                                                    :Lira sterlina (£)
+STR_CURR_GBP                                                    :Liră sterlină (£)
 STR_CURR_USD                                                    :Dolar ($)
 STR_CURR_EUR                                                    :Euro (€)
 STR_CURR_YEN                                                    :Yen japonez (¥)
-STR_CURR_ATS                                                    :Siling austriac (ATS)
+STR_CURR_ATS                                                    :Şiling austriac (ATS)
 STR_CURR_BEF                                                    :Franc belgian (BEF)
-STR_CURR_CHF                                                    :Franc elvetian (CHF)
-STR_CURR_CZK                                                    :Coroanã cehã (CZK)
-STR_CURR_DEM                                                    :Marca germana (DEM)
-STR_CURR_DKK                                                    :Coroanã danezã (DKK)
+STR_CURR_CHF                                                    :Franc elveţian (CHF)
+STR_CURR_CZK                                                    :Coroană cehă (CZK)
+STR_CURR_DEM                                                    :Marcă germană (DEM)
+STR_CURR_DKK                                                    :Coroană daneză (DKK)
 STR_CURR_ESP                                                    :Peseta (ESP)
-STR_CURR_FIM                                                    :Marcã finlandezã (FIM)
-STR_CURR_FRF                                                    :Franc (FRF)
-STR_CURR_GRD                                                    :Drahmã greceascã (GRD)
-STR_CURR_HUF                                                    :Forint (HUF)
-STR_CURR_ISK                                                    :Coroanã islandezã (ISK)
-STR_CURR_ITL                                                    :Lirã italianã (ITL)
+STR_CURR_FIM                                                    :Marcă finlandeză (FIM)
+STR_CURR_FRF                                                    :Franc francez (FRF)
+STR_CURR_GRD                                                    :Drahmă grecească (GRD)
+STR_CURR_HUF                                                    :Forinţ unguresc (HUF)
+STR_CURR_ISK                                                    :Coroană islandeză (ISK)
+STR_CURR_ITL                                                    :Liră italiană (ITL)
 STR_CURR_NLG                                                    :Gulden olandez (NLG)
-STR_CURR_NOK                                                    :Coroanã norvegianã (NOK)
-STR_CURR_PLN                                                    :Zlot (PLN)
+STR_CURR_NOK                                                    :Coroană norvegiană (NOK)
+STR_CURR_PLN                                                    :Zlot polonez (PLN)
 STR_CURR_ROL                                                    :Leu românesc (ROL)
-STR_CURR_RUR                                                    :Rublã ruseascã (RUR)
+STR_CURR_RUR                                                    :Rublă rusească (RUR)
 STR_CURR_SIT                                                    :Tolar Sloven (SIT)
-STR_CURR_SEK                                                    :Coroanã suedezã (SEK)
-STR_CURR_YTL                                                    :Lira Turceasca (YTL)
-STR_CURR_SKK                                                    :Coroana Slovaca (SKK)
+STR_CURR_SEK                                                    :Coroană suedeză (SEK)
+STR_CURR_YTL                                                    :Liră Turcească (YTL)
+STR_CURR_SKK                                                    :Coroană Slovacă (SKK)
 STR_CURR_BRR                                                    :Real Brazilian (BRL)
 
-STR_CURR_CUSTOM                                                 :Propriu...
+STR_CURR_CUSTOM                                                 :Personalizată...
 
 STR_OPTIONS_LANG                                                :{BLACK}Limba
 STR_OPTIONS_LANG_CBO                                            :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
@@ -1034,11 +1034,14 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Livreazã marfa doar in statiile unde aceasta este ceruta: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Permite constructia de poduri foarte lungi: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Permite ordine de tipul "mergi la depou": {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Permite constructia de industrii pentru materii prime: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}Metoda manuala de constructie industrii primare: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :niciuna
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :ca alte industrii
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :de prospectie
 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 +1092,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,7 +1105,20 @@
 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_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Arata uneltele de constructie cand nu sunt disponibile vehiculele potrivite: {ORANGE}{STRING}
 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}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Nr. max. de aeronave pentru un jucãtor: {ORANGE}{STRING}
@@ -1132,7 +1149,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 +1201,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}
@@ -1224,7 +1241,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Esti sigur cã vrei sã creezi un peisaj aleator?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Mai multe orase aleatoare
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Umple harta cu orase generate aleator
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Multe industrii aleatoare
+STR_MANY_RANDOM_INDUSTRIES                                      :Multe industrii aleatoare
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Umple harta cu industrii generate aleator
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Nu pot genera industrii...
 
@@ -1309,9 +1326,9 @@
 STR_NETWORK_MULTIPLAYER                                         :{WHITE}Multiplayer
 
 STR_NETWORK_PLAYER_NAME                                         :{BLACK}Numele jucãtorului:
-STR_NETWORK_ENTER_NAME_TIP                                      :{BLACK}Acesta este numele prin care te vor identifica ceilalti
+STR_NETWORK_ENTER_NAME_TIP                                      :{BLACK}Acesta este numele prin care te vor identifica ceilalţi
 STR_NETWORK_CONNECTION                                          :{BLACK}Conexiune:
-STR_NETWORK_CONNECTION_TIP                                      :{BLACK}Alege intre un joc pe internet si unul pe LAN
+STR_NETWORK_CONNECTION_TIP                                      :{BLACK}Alege între un joc pe internet şi unul în reţea (LAN)
 
 STR_NETWORK_START_SERVER                                        :{BLACK}Porneste serverul
 STR_NETWORK_START_SERVER_TIP                                    :{BLACK}Porneste un server propriu
@@ -1321,32 +1338,32 @@
 STR_NETWORK_INFO_ICONS_TIP                                      :{BLACK}Limba, versiunea serverului, etc.
 STR_NETWORK_CLICK_GAME_TO_SELECT                                :{BLACK}Click pe un joc din listã pentru a-l selecta
 
-STR_NETWORK_FIND_SERVER                                         :{BLACK}Cautã server
-STR_NETWORK_FIND_SERVER_TIP                                     :{BLACK}Cautã un server în retea
-STR_NETWORK_ADD_SERVER                                          :{BLACK}Adauga un server
-STR_NETWORK_ADD_SERVER_TIP                                      :{BLACK}Adauga un server pe lista care va fi verificata pentru jocuri active
+STR_NETWORK_FIND_SERVER                                         :{BLACK}Caută server
+STR_NETWORK_FIND_SERVER_TIP                                     :{BLACK}Caută un server în reţea
+STR_NETWORK_ADD_SERVER                                          :{BLACK}Adaugă un server
+STR_NETWORK_ADD_SERVER_TIP                                      :{BLACK}Adaugă un server pe lista care va fi verificată pentru jocuri active
 STR_NETWORK_ENTER_IP                                            :{BLACK}Introdu IP-ul serverului
 
 STR_NETWORK_GENERAL_ONLINE                                      :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA}
-STR_NETWORK_CLIENTS_CAPTION                                     :{BLACK}Clienti
+STR_NETWORK_CLIENTS_CAPTION                                     :{BLACK}Clienţi
 STR_NETWORK_CLIENTS_CAPTION_TIP                                 :{BLACK}Clienti online / Nr. max. clienti
 STR_NETWORK_GAME_INFO                                           :{SILVER}INFO JOC
 STR_ORANGE                                                      :{ORANGE}{STRING}
-STR_NETWORK_CLIENTS                                             :{SILVER}Clienti:  {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
+STR_NETWORK_CLIENTS                                             :{SILVER}Clienţi:  {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
 STR_NETWORK_LANGUAGE                                            :{SILVER}Limba:  {WHITE}{STRING}
 STR_NETWORK_TILESET                                             :{SILVER}Tileset:  {WHITE}{STRING}
 STR_NETWORK_MAP_SIZE                                            :{SILVER}Marimea hartii:  {WHITE}{COMMA}x{COMMA}
 STR_NETWORK_SERVER_VERSION                                      :{SILVER}Versiune server:  {WHITE}{STRING}
 STR_NETWORK_SERVER_ADDRESS                                      :{SILVER}Adresa serverului:  {WHITE}{STRING} : {NUM}
 STR_NETWORK_START_DATE                                          :{SILVER}Data de inceput:  {WHITE}{DATE_SHORT}
-STR_NETWORK_CURRENT_DATE                                        :{SILVER}Data curenta:  {WHITE}{DATE_SHORT}
+STR_NETWORK_CURRENT_DATE                                        :{SILVER}Data curentă:  {WHITE}{DATE_SHORT}
 STR_NETWORK_PASSWORD                                            :{SILVER}Protejat cu parola!
 STR_NETWORK_SERVER_OFFLINE                                      :{SILVER}SERVER OFFLINE
 STR_NETWORK_SERVER_FULL                                         :{SILVER}SERVER PLIN
 STR_NETWORK_VERSION_MISMATCH                                    :{SILVER}VERSIUNE DIFERITA
-STR_NETWORK_GRF_MISMATCH                                        :{SILVER}NEWGRF NEPOTRIVIRE
+STR_NETWORK_GRF_MISMATCH                                        :{SILVER}NEPOTRIVIRE NEWGRF
 
-STR_NETWORK_JOIN_GAME                                           :{BLACK}Intrã în joc
+STR_NETWORK_JOIN_GAME                                           :{BLACK}Intră în joc
 
 
 STR_NETWORK_START_GAME_WINDOW                                   :{WHITE}Începe un joc nou
@@ -1363,7 +1380,7 @@
 STR_NETWORK_LAN                                                 :LAN
 STR_NETWORK_INTERNET                                            :Internet
 STR_NETWORK_LAN_INTERNET                                        :LAN / Internet
-STR_NETWORK_INTERNET_ADVERTISE                                  :Internet (fa reclama)
+STR_NETWORK_INTERNET_ADVERTISE                                  :Internet (fă reclamă)
 STR_NETWORK_COMBO2                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
 STR_NETWORK_0_PLAYERS                                           :0 jucãtori
 STR_NETWORK_1_PLAYERS                                           :1 jucãtor
@@ -1382,8 +1399,8 @@
 STR_NETWORK_NUMBER_OF_SPECTATORS                                :{BLACK}Maxim spectatori:
 STR_NETWORK_NUMBER_OF_SPECTATORS_TIP                            :{BLACK}Limiteazã serverul la un anumit numãr de spectatori
 STR_NETWORK_COMBO4                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_LANGUAGE_SPOKEN                                     :{BLACK}Limba vorbita:
-STR_NETWORK_LANGUAGE_TIP                                        :{BLACK}Ceilalti jucatori vor sti in ce limba se discuta per server.
+STR_NETWORK_LANGUAGE_SPOKEN                                     :{BLACK}Limba vorbită:
+STR_NETWORK_LANGUAGE_TIP                                        :{BLACK}Ceilalţi jucători vor şti în ce limbă se discută pe server.
 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}Începe jocul
 STR_NETWORK_START_GAME_TIP                                      :{BLACK}Incepe un joc nou in retea cu o harta aleatoare sau intr-un scenariu
@@ -1395,6 +1412,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :Engleza
 STR_NETWORK_LANG_GERMAN                                         :Germana
 STR_NETWORK_LANG_FRENCH                                         :Franceza
+STR_NETWORK_LANG_BRAZILIAN                                      :Braziliana
+STR_NETWORK_LANG_BULGARIAN                                      :Bulgara
+STR_NETWORK_LANG_CHINESE                                        :Chineza
+STR_NETWORK_LANG_CZECH                                          :Ceha
+STR_NETWORK_LANG_DANISH                                         :Daneza
+STR_NETWORK_LANG_DUTCH                                          :Olandeza
+STR_NETWORK_LANG_ESPERANTO                                      :Esperanto
+STR_NETWORK_LANG_FINNISH                                        :Finlandeza
+STR_NETWORK_LANG_HUNGARIAN                                      :Ungara
+STR_NETWORK_LANG_ICELANDIC                                      :Islandeza
+STR_NETWORK_LANG_ITALIAN                                        :Italiana
+STR_NETWORK_LANG_JAPANESE                                       :Japoneza
+STR_NETWORK_LANG_KOREAN                                         :Coreana
+STR_NETWORK_LANG_LITHUANIAN                                     :Lituaniana
+STR_NETWORK_LANG_NORWEGIAN                                      :Norvegiana
+STR_NETWORK_LANG_POLISH                                         :Poloneza
+STR_NETWORK_LANG_PORTUGUESE                                     :Portugheza
+STR_NETWORK_LANG_ROMANIAN                                       :Româna
+STR_NETWORK_LANG_RUSSIAN                                        :Rusa
+STR_NETWORK_LANG_SLOVAK                                         :Slovaca
+STR_NETWORK_LANG_SLOVENIAN                                      :Slovena
+STR_NETWORK_LANG_SPANISH                                        :Spaniola
+STR_NETWORK_LANG_SWEDISH                                        :Suedeza
+STR_NETWORK_LANG_TURKISH                                        :Turca
+STR_NETWORK_LANG_UKRAINIAN                                      :Ucrainiana
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Chatul jocului multiplayer
@@ -1405,8 +1447,8 @@
 STR_NETWORK_NEW_COMPANY_TIP                                     :{BLACK}Fondeazã o nouã companie
 STR_NETWORK_SPECTATE_GAME                                       :{BLACK}Modul spectator
 STR_NETWORK_SPECTATE_GAME_TIP                                   :{BLACK}Vizioneazã un joc din pozitia unui spectator
-STR_NETWORK_JOIN_COMPANY                                        :{BLACK}Alatura-te companiei
-STR_NETWORK_JOIN_COMPANY_TIP                                    :{BLACK}Ajuta la conducerea acestei companii
+STR_NETWORK_JOIN_COMPANY                                        :{BLACK}Alătură-te companiei
+STR_NETWORK_JOIN_COMPANY_TIP                                    :{BLACK}Ajută la conducerea acestei companii
 STR_NETWORK_REFRESH                                             :{BLACK}Actualizeaza serverul
 STR_NETWORK_REFRESH_TIP                                         :{BLACK}Actualizeaza informatiile despre server
 
@@ -1414,9 +1456,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}Balanta curenta:  {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}
@@ -1427,64 +1469,64 @@
 
 ############ Leave those lines in this order!!
 STR_NETWORK_CONNECTING_1                                        :{BLACK}(1/6) Conectare..
-STR_NETWORK_CONNECTING_2                                        :{BLACK}(2/6) Authorizare..
-STR_NETWORK_CONNECTING_3                                        :{BLACK}(3/6) Asteptati..
-STR_NETWORK_CONNECTING_4                                        :{BLACK}(4/6) Descarcare harta..
+STR_NETWORK_CONNECTING_2                                        :{BLACK}(2/6) Autorizare..
+STR_NETWORK_CONNECTING_3                                        :{BLACK}(3/6) Aşteptaţi..
+STR_NETWORK_CONNECTING_4                                        :{BLACK}(4/6) Descărcare harta..
 STR_NETWORK_CONNECTING_5                                        :{BLACK}(5/6) Prelucrare date..
-STR_NETWORK_CONNECTING_6                                        :{BLACK}(6/6) Inregistrare...
+STR_NETWORK_CONNECTING_6                                        :{BLACK}(6/6) Înregistrare...
 
 STR_NETWORK_CONNECTING_SPECIAL_1                                :{BLACK}Preluare info joc..
 STR_NETWORK_CONNECTING_SPECIAL_2                                :{BLACK}Preluare info companie..
 ############ End of leave-in-this-order
-STR_NETWORK_CONNECTING_WAITING                                  :{BLACK}{NUM} client{P "" i} inaintea noastra
-STR_NETWORK_CONNECTING_DOWNLOADING                              :{BLACK}{NUM} / {NUM} kbytes descarcati pana acum
+STR_NETWORK_CONNECTING_WAITING                                  :{BLACK}{NUM} clien{P t ţi} înaintea noastră
+STR_NETWORK_CONNECTING_DOWNLOADING                              :{BLACK}{NUM} / {NUM} kbytes descărcaţi până acum
 
 STR_NETWORK_DISCONNECT                                          :{BLACK}Deconectare
 
-STR_NETWORK_GIVE_MONEY_CAPTION                                  :{WHITE}Introdu suma de bani pe care vrei sa o cedezi
+STR_NETWORK_GIVE_MONEY_CAPTION                                  :{WHITE}Introdu suma de bani pe care vrei să o cedezi
 STR_NETWORK_NEED_GAME_PASSWORD_CAPTION                          :{WHITE}Server protejat. Introdu parola
 STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION                       :{WHITE}Companie protejata. Introdu parola
-STR_NETWORK_CLIENT_LIST                                         :{WHITE}Lista de clienti
+STR_NETWORK_CLIENT_LIST                                         :{WHITE}Lista de clienţi
 
-STR_NETWORK_ERR_NOTAVAILABLE                                    :{WHITE}Nu a fost detectatã o placã de retea valabilã
-STR_NETWORK_ERR_NOSERVER                                        :{WHITE}Nu a fost gãsit nici un joc în retea
-STR_NETWORK_ERR_NOCONNECTION                                    :{WHITE}Serverul nu a rãspuns cererii
+STR_NETWORK_ERR_NOTAVAILABLE                                    :{WHITE}Nu a fost detectată o placă sau jocul a fost compilat fără ENABLE_NETWORK
+STR_NETWORK_ERR_NOSERVER                                        :{WHITE}Nu a fost găsit nici un joc în reţea
+STR_NETWORK_ERR_NOCONNECTION                                    :{WHITE}Serverul nu a răspuns cererii
 STR_NETWORK_ERR_NEWGRF_MISMATCH                                 :{WHITE} Nu m-am putut conecta din cauza unei nepotriviri NewGRF
-STR_NETWORK_ERR_DESYNC                                          :{WHITE} Sincronizarea jocului in retea a esuat.
-STR_NETWORK_ERR_LOSTCONNECTION                                  :{WHITE} Conexiunea jocului in reatea a fost intrerupta.
-STR_NETWORK_ERR_SAVEGAMEERROR                                   :{WHITE} Nu am reusit sa incarc jocul-server salvat.
+STR_NETWORK_ERR_DESYNC                                          :{WHITE} Sincronizarea jocului în reţea a eşuat.
+STR_NETWORK_ERR_LOSTCONNECTION                                  :{WHITE} Conexiunea jocului în reţea a fost întreruptă.
+STR_NETWORK_ERR_SAVEGAMEERROR                                   :{WHITE} Nu am reuşit să încarc jocul-server salvat.
 STR_NETWORK_ERR_SERVER_START                                    :{WHITE}Nu pot porni serverul.
 STR_NETWORK_ERR_CLIENT_START                                    :{WHITE}Nu pot efectua conectarea.
 STR_NETWORK_ERR_TIMEOUT                                         :{WHITE} Conexiunea #{NUM} a expirat.
-STR_NETWORK_ERR_SERVER_ERROR                                    :{WHITE}Eroare de protocol. Conexiunea a fost inchisa.
-STR_NETWORK_ERR_WRONG_REVISION                                  :{WHITE}Versiunea acestui client este diferita de cea a serverului.
-STR_NETWORK_ERR_WRONG_PASSWORD                                  :{WHITE}Parola gresita.
+STR_NETWORK_ERR_SERVER_ERROR                                    :{WHITE}Eroare de protocol. Conexiunea a fost închisă.
+STR_NETWORK_ERR_WRONG_REVISION                                  :{WHITE}Versiunea acestui client este diferită de cea a serverului.
+STR_NETWORK_ERR_WRONG_PASSWORD                                  :{WHITE}Parola greşită.
 STR_NETWORK_ERR_SERVER_FULL                                     :{WHITE}Serverul este plin
-STR_NETWORK_ERR_SERVER_BANNED                                   :{WHITE} Acessul tau este interzis pe acest server
-STR_NETWORK_ERR_KICKED                                          :{WHITE}Ai fost dat afara de pe server
+STR_NETWORK_ERR_SERVER_BANNED                                   :{WHITE} Acessul tău este interzis pe acest server
+STR_NETWORK_ERR_KICKED                                          :{WHITE}Ai fost dat afară de pe server
 STR_NETWORK_ERR_CHEATER                                         :{WHITE} Cheat-urile nu sunt permise pe acest server
 
-STR_NETWORK_ERR_LEFT                                            :a parasit jocul
+STR_NETWORK_ERR_LEFT                                            :a părăsit jocul
 ############ Leave those lines in this order!!
-STR_NETWORK_ERR_CLIENT_GENERAL                                  :eroare generala
+STR_NETWORK_ERR_CLIENT_GENERAL                                  :eroare generală
 STR_NETWORK_ERR_CLIENT_DESYNC                                   :eroare de desincronizare
-STR_NETWORK_ERR_CLIENT_SAVEGAME                                 :nu pot incarca harta
-STR_NETWORK_ERR_CLIENT_CONNECTION_LOST                          :conexiune pierduta
+STR_NETWORK_ERR_CLIENT_SAVEGAME                                 :nu pot încărca harta
+STR_NETWORK_ERR_CLIENT_CONNECTION_LOST                          :conexiune pierdută
 STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR                           :eroare de protocol
 STR_NETWORK_ERR_CLIENT_NEWGRF_MISMATCH                          :Nepotrivire NewGRF
 STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED                           :neautorizat
 STR_NETWORK_ERR_CLIENT_NOT_EXPECTED                             :primit pachet ciudat
-STR_NETWORK_ERR_CLIENT_WRONG_REVISION                           :versiune incorecta
+STR_NETWORK_ERR_CLIENT_WRONG_REVISION                           :versiune incorectă
 STR_NETWORK_ERR_CLIENT_NAME_IN_USE                              :nume folosit deja
-STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD                           :parola gresita
-STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH                          :player-id in DoCommand gresit
-STR_NETWORK_ERR_CLIENT_KICKED                                   :dat afara de pe server
-STR_NETWORK_ERR_CLIENT_CHEATER                                  :a incercat sa foloseasca un cheat
+STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD                           :parola greşită
+STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH                          :player-id greşit în DoCommand
+STR_NETWORK_ERR_CLIENT_KICKED                                   :dat afară de pe server
+STR_NETWORK_ERR_CLIENT_CHEATER                                  :a încercat să folosească un cheat
 STR_NETWORK_ERR_CLIENT_SERVER_FULL                              :server plin
 ############ End of leave-in-this-order
-STR_NETWORK_CLIENT_JOINED                                       :a intrat in joc
-STR_NETWORK_GIVE_MONEY                                          :ti-a dat o suma de bani ({CURRENCY})
-STR_NETWORK_GAVE_MONEY_AWAY                                     :ai donat o suma de bani companiei {STRING} ({CURRENCY})
+STR_NETWORK_CLIENT_JOINED                                       :a intrat în joc
+STR_NETWORK_GIVE_MONEY                                          :ţi-a dat o sumă de bani ({CURRENCY})
+STR_NETWORK_GAVE_MONEY_AWAY                                     :ai donat o sumă de bani companiei {STRING} ({CURRENCY})
 STR_NETWORK_CHAT_COMPANY_CAPTION                                :[Team] :
 STR_NETWORK_CHAT_COMPANY                                        :[Team] {STRING}: {GRAY}{STRING}
 STR_NETWORK_CHAT_TO_COMPANY                                     :[Team] To {STRING}: {GRAY}{STRING}
@@ -1503,9 +1545,9 @@
 
 STR_NETWORK_CLIENTLIST_NONE                                     :(none)
 STR_NETWORK_CLIENTLIST_KICK                                     :Kick
-STR_NETWORK_CLIENTLIST_GIVE_MONEY                               :Doneaza bani
-STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL                             :Vorbeste catre toti
-STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY                         :Vorbeste catre companie
+STR_NETWORK_CLIENTLIST_GIVE_MONEY                               :Donează bani
+STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL                             :Vorbeşte către toţi
+STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY                         :Vorbeşte către companie
 STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT                          :Mesaj privat
 
 
@@ -1563,10 +1605,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ă
@@ -1575,7 +1617,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
@@ -1584,10 +1626,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
 
 
@@ -1598,6 +1646,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...
@@ -1615,13 +1664,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
@@ -1640,7 +1693,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}
@@ -1673,7 +1726,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}
@@ -1744,7 +1797,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
@@ -1853,6 +1906,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
@@ -1862,9 +1916,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
@@ -1921,6 +1980,9 @@
 STR_4829_REQUIRES                                               :{BLACK}Are nevoie de: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}Incarcatura in asteaptarea procesarii:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Producţia lunii trecute:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% transportat)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Centrează imaginea pe locaţia industriei
@@ -2035,8 +2097,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!
 
@@ -2116,7 +2177,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
@@ -2128,7 +2189,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
@@ -2144,20 +2205,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}Limita 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
@@ -2196,8 +2257,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)
@@ -2235,7 +2296,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
@@ -2266,6 +2327,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
@@ -2534,7 +2597,7 @@
 STR_80FE_GURU_X2_HELICOPTER                                     :Elicopter Guru X2
 STR_80FF_POWERNAUT_HELICOPTER                                   :Elicopter Powernaut
 STR_8100_MESSAGE_FROM_VEHICLE_MANUFACTURE                       :{WHITE}Mesaj de la producătorul de vehicule
-STR_8101_WE_HAVE_JUST_DESIGNED_A                                :{GOLD}Am creat un nou tip de {STRING}. Ati fi interesati de folosirea exclusivã pentru un an a acestui vehicul, astfel ca noi sa putem observa rezultatele înaintea lansãrii oficiale?
+STR_8101_WE_HAVE_JUST_DESIGNED_A                                :{GOLD}Am creat un nou tip de {STRING}. Aţi fi interesaţi de folosirea exclusivă pentru un an a acestui vehicul, astfel ca noi să-i putem observa performanţele înaintea lansării oficiale?
 STR_8102_RAILROAD_LOCOMOTIVE                                    :locomotivă
 STR_8103_ROAD_VEHICLE                                           :autovehicul
 STR_8104_AIRCRAFT                                               :aeronavă
@@ -2545,27 +2608,34 @@
 ##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}
 STR_8806_GO_TO                                                  :Mergi la {STATION}
-STR_8807_GO_TO_TRANSFER                                         :Mergi la {STATION} (Transferă şi preia încărcătura)
+STR_8807_GO_TO_TRANSFER                                         :Mergi la {STATION} (Preia încărcătura pentru transfer)
 STR_8808_GO_TO_UNLOAD                                           :Mergi la {STATION} (Descarcă)
-STR_8809_GO_TO_TRANSFER_UNLOAD                                  :Mergi la {STATION} (Transferă şi lasă descărcat)
+STR_8809_GO_TO_TRANSFER_UNLOAD                                  :Mergi la {STATION} (Descarcă încărcătura pentru transfer)
 STR_880A_GO_TO_LOAD                                             :Mergi la {STATION} (Încarcă)
-STR_880B_GO_TO_TRANSFER_LOAD                                    :Mergi la {STATION} (Transferă şi încarcă 100%)
+STR_880B_GO_TO_TRANSFER_LOAD                                    :Mergi la {STATION} (Aşteaptă 100% încărcătură pentru transfer)
 STR_880C_GO_NON_STOP_TO                                         :Mergi fără oprire la {STATION}
-STR_880D_GO_TO_NON_STOP_TRANSFER                                :Mergi non-stop la {STATION} (Transferã si ia încãrcãtura)
+STR_880D_GO_TO_NON_STOP_TRANSFER                                :Mergi fără oprire la {STATION} (Preia încărcătura pentru transfer)
 STR_880E_GO_NON_STOP_TO_UNLOAD                                  :Mergi fără oprire la {STATION} (Descarcă)
-STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD                         :Mergi fără oprire la {STATION} (Transferă şi lasă descărcat)
+STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD                         :Mergi fără oprire la {STATION} (Descarcă încărcătura pentru transfer)
 STR_8810_GO_NON_STOP_TO_LOAD                                    :Mergi fără oprire la {STATION} (Încarcă)
-STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD                           :Mergi fără oprire la {STATION} (Transferă şi încarcă 100%)
+STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD                           :Mergi fără oprire la {STATION} (Aşteaptă 100% încărcătură pentru transfer)
 STR_GO_TO_TRAIN_DEPOT                                           :Mergi la depoul {TOWN}
 STR_SERVICE_AT_TRAIN_DEPOT                                      :Service la Depoul {TOWN}
 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}
@@ -2607,13 +2677,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
@@ -2623,6 +2695,9 @@
 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
 STR_8838_N_A                                                    :N/A{SKIP}
@@ -2654,12 +2729,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}Sãri peste comanda curentã si treci la urmãtoarea
+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
@@ -2680,7 +2759,9 @@
 STR_886A_RENAME_TRAIN_VEHICLE_TYPE                              :{WHITE}Redenumeste modelul vehiculului feroviar
 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_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}
@@ -2689,8 +2770,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
@@ -2706,7 +2799,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...
@@ -2733,6 +2826,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Lista selectie vehicule rutiere - apasa pe vehicul pentru informatii
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Cumpãrã autovehiculul selectat
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Pret: {CURRENCY}{}Vitezã: {VELOCITY}{}Cost de rulare: {CURRENCY}/an{}Capacitate: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Capacitate: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Numele autovehiculului
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Nu pot redenumi autovehiculul...
@@ -2780,7 +2875,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...
@@ -2848,7 +2943,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}
@@ -2901,6 +2996,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!
@@ -2994,15 +3091,15 @@
 STR_NEWGRF_DISABLED_WARNING                                     :{WHITE}Fisierele GRF lipsa au fost dezactivate
 STR_NEWGRF_NOT_FOUND_WARNING                                    :{WHITE}Fisierele GRF lipsa pentru permiterea incarcarii jocului
 
-STR_CURRENCY_WINDOW                                             :{WHITE}Moneda proprie
+STR_CURRENCY_WINDOW                                             :{WHITE}Monedă proprie
 STR_CURRENCY_EXCHANGE_RATE                                      :{LTBLUE}Curs de schimb: {ORANGE}{CURRENCY} = £ {COMMA}
 STR_CURRENCY_SEPARATOR                                          :{LTBLUE}Separator:
 STR_CURRENCY_PREFIX                                             :{LTBLUE}Prefix:
 STR_CURRENCY_SUFFIX                                             :{LTBLUE}Sufix:
-STR_CURRENCY_SWITCH_TO_EURO                                     :{LTBLUE}Adera la Euro: {ORANGE}{NUM}
-STR_CURRENCY_SWITCH_TO_EURO_NEVER                               :{LTBLUE}Adera la Euro: {ORANGE}niciodata
+STR_CURRENCY_SWITCH_TO_EURO                                     :{LTBLUE}Aderă la Euro: {ORANGE}{NUM}
+STR_CURRENCY_SWITCH_TO_EURO_NEVER                               :{LTBLUE}Aderă la Euro: {ORANGE}niciodată
 STR_CURRENCY_PREVIEW                                            :{LTBLUE}Previzualizare: {ORANGE}{CURRENCY}
-STR_CURRENCY_CHANGE_PARAMETER                                   :{BLACK}Schimba un parametru al monedei proprii
+STR_CURRENCY_CHANGE_PARAMETER                                   :{BLACK}Schimbă un parametru al monedei proprii
 
 STR_TRAIN                                                       :{BLACK}{TRAIN}
 STR_BUS                                                         :{BLACK}{BUS}
@@ -3081,7 +3178,7 @@
 STR_MASS_START_DEPOT_SHIP_TIP                                   :{BLACK}Click pt pornirea tuturor vaselor din depou
 STR_MASS_START_HANGAR_TIP                                       :{BLACK}Click pt pornirea tuturor aeronavelor din hangar
 
-STR_MASS_STOP_LIST_TIP                                          :{BLACK}Click pt oprirea tuturor vehiculelor din lista
+STR_MASS_STOP_LIST_TIP                                          :{BLACK}Click pt oprirea tuturor vehiculelor din listă
 STR_MASS_START_LIST_TIP                                         :{BLACK}Apasa pentru pornirea tuturor vehiclulelor din lista
 
 STR_SHORT_DATE                                                  :{WHITE}{DATE_TINY}
@@ -3193,9 +3290,9 @@
 ############ Tooltip measurment
 
 STR_MEASURE_LENGTH                                              :{BLACK}Lungime: {NUM}
-STR_MEASURE_AREA                                                :{BLACK}Suprafata: {NUM} x {NUM}
-STR_MEASURE_LENGTH_HEIGHTDIFF                                   :{BLACK}Lungime: {NUM}{}Diferenta inaltime: {NUM} m
-STR_MEASURE_AREA_HEIGHTDIFF                                     :{BLACK}Suprafata: {NUM} x {NUM}{}Diferenta inaltime: {NUM} m
+STR_MEASURE_AREA                                                :{BLACK}Suprafaţa: {NUM} x {NUM}
+STR_MEASURE_LENGTH_HEIGHTDIFF                                   :{BLACK}Lungime: {NUM}{}Diferenţa de înălţime: {NUM} m
+STR_MEASURE_AREA_HEIGHTDIFF                                     :{BLACK}Suprafaţa: {NUM} x {NUM}{}Diferenţa de înălţime: {NUM} m
 
 ############ Date formatting
 STR_DATE_TINY                                                   :{STRING}-{STRING}-{NUM}
@@ -3216,25 +3313,62 @@
 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}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}Numele trebuie să fie unic
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Mergi la semnul urmator
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Mergi la semnul anterior
+
 ########
--- a/src/lang/russian.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/russian.txt	Sat Jul 14 19:42: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.
@@ -1036,7 +1036,10 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Поставлять груз на станцию, только если на него был спрос: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Разрешить строительство очень длинных мостов: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Депо можно добавить в маршрут: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Разрешить строительство сырьевых предприятий: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}Способ создания сырьевых предприятий: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :не создавать
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :как и остальные
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :геологоразведка
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Разрешить несколько предприятий одного типа на город: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Одинаковые предприятия могут быть рядом друг с другом: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Всегда полная дата в панели состояния: {ORANGE}{STRING}
@@ -1050,6 +1053,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 +1094,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,7 +1108,19 @@
 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_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Показывать окно покупки когда нет доступного транспорта: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Максимальное количество поездов на игрока: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Максимальное количество автотранспорта на игрока: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Максимальное количество авиатранспорта на игрока: {ORANGE}{STRING}
@@ -1186,7 +1203,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}
@@ -1226,7 +1243,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Вы уверены, что хотите создать случайную землю?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Много случайных городов
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Случайно разместить на карте города
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Много произвольных промышленностей
+STR_MANY_RANDOM_INDUSTRIES                                      :Много произвольных промышленностей
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Случайно разместить предприятия на карте
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Невозможно создать промышленность...
 
@@ -1397,6 +1414,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 +1458,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 +1602,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 +1632,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 +1646,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 +1686,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 +1695,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 +1728,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 +1799,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 +1852,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 +1869,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 +1908,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 +1918,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}Удалить выбранную сохраненную игру
@@ -1902,6 +1982,13 @@
 STR_4829_REQUIRES                                               :{BLACK}Требуется: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}Груз, ожидающий переработки:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES                                               :{BLACK}Произведено: {YELLOW}{STRING}
+STR_4828_PRODUCES                                               :{BLACK}Произведено: {YELLOW}{STRING}, {STRING}
+############ range for produces ends
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Произведено за прошлый месяц:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% перевезено)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Показать предприятие в основном окне
@@ -1984,12 +2071,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 +2097,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 +2194,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 +2206,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 +2222,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 +2274,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 +2313,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 +2344,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 +2625,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 +2646,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 +2694,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 +2712,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,12 +2746,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}Пропустить текущее задание и перейти к следующему
+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}Поломка
@@ -2673,6 +2777,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}
@@ -2681,8 +2787,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}Машина на пути
@@ -2698,7 +2816,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}Невозможно продать автомобиль...
@@ -2725,12 +2843,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}Невозможно развернуть автомобиль...
@@ -2770,7 +2892,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}Не могу отправить корабль в док...
@@ -2780,7 +2902,7 @@
 STR_HEADING_FOR_SHIP_DEPOT_SERVICE                              :{LTBLUE}Обслуж. в доке {TOWN}
 STR_HEADING_FOR_SHIP_DEPOT_SERVICE_VEL                          :{LTBLUE}Обслуж. в доке {TOWN}, {VELOCITY}
 STR_981C_SHIP_IS_WAITING_IN_DEPOT                               :{WHITE}Корабль {COMMA} ожидает в доке
-STR_981D_BUILD_SHIP_DOCK                                        :{BLACK}Построить док
+STR_981D_BUILD_SHIP_DOCK                                        :{BLACK}Построить пристань
 STR_981E_BUILD_SHIP_DEPOT_FOR_BUILDING                          :{BLACK}Построить док (для строительства и обслуживания кораблей)
 STR_981F_SHIPS_CLICK_ON_SHIP_FOR                                :{BLACK}Корабли - нажмите для получения справки
 STR_9820_BUILD_NEW_SHIP                                         :{BLACK}Построить новый корабль
@@ -2838,7 +2960,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}
@@ -2891,6 +3013,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}Автомобиль уничтожен при столкновении с НЛО!
@@ -3015,6 +3139,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}Продать все авто в гараже
@@ -3205,6 +3330,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}
@@ -3242,4 +3375,22 @@
 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}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}Имя должно быть уникальным
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}К следующему знаку
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}К предыдущему знаку
+
 ########
+
+STR_FUND_NEW_INDUSTRY                                           :{BLACK}Профинансировать
+STR_PROSPECT_NEW_INDUSTRY                                       :{BLACK}Разведать
+STR_BUILD_NEW_INDUSTRY                                          :{BLACK}Построить
+STR_INDUSTRY_SELECTION_HINT                                     :{BLACK}Выберите тип производства из списка
--- a/src/lang/simplified_chinese.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/simplified_chinese.txt	Sat Jul 14 19:42:58 2007 +0000
@@ -3,13 +3,15 @@
 ##isocode zh_CN
 ##plural 1
 
+#
+
 ##id 0x0000
 STR_NULL                                                        :
 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 +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日
@@ -776,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}显示车站名称
@@ -803,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}
@@ -1032,7 +1034,6 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}仅在车站接受此货物时卸货:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}允许建造超长桥梁:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}允许前往车库的计划任务:{ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}允许建设生产自然资源的工业设施:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}允许在一个城镇中建设多个同类工业设施:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}工业设施可以相邻:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}永远在状态栏中显示长日期:{ORANGE}{STRING}
@@ -1130,6 +1131,8 @@
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}允许购买其他公司的股份
 STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}当拖动的时候每 {ORANGE}{STRING} 个地块放置一个信号灯
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}在 {ORANGE}{STRING} 前自动设置旗帜信号
+
+
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}主工具栏位置:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :左侧
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :中央
@@ -1171,7 +1174,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}
@@ -1211,7 +1214,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}你确定要创建一个随机的景观吗?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}大量随机城镇
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}在地图上创建大量随机的城镇
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}大量随机工业
+STR_MANY_RANDOM_INDUSTRIES                                      :大量随机工业
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}在地图上创建大量随机的工业设施
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}不能生成工业设施……
 
@@ -1401,9 +1404,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 +1615,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 +1648,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 +1719,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 +1831,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 +2082,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 +2094,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 +2110,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 +2162,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 +2201,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 +2511,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}
@@ -2529,6 +2532,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} 车库保养
@@ -2570,13 +2580,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}列车必须停在一个车库中
@@ -2586,6 +2598,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}
@@ -2617,12 +2632,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}跳过的当前的调度指令并直接执行下一条
+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}/yr{}Capacity: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}抛锚
@@ -2644,6 +2663,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}
@@ -2652,8 +2673,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}指定的位置有汽车
@@ -2669,7 +2702,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}不能出售汽车...
@@ -2696,6 +2729,7 @@
 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_902C_NAME_ROAD_VEHICLE                                      :{WHITE}命名汽车
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}不能命名汽车……
@@ -2741,7 +2775,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}不能命令船只前往船坞……
@@ -2809,7 +2843,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}
@@ -2862,6 +2896,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}汽车被 'UFO' 炸毁!
@@ -3174,3 +3209,16 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}调节车站、码头及路点等的透明度
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}调节桥梁的透明度
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}调节灯塔及信号发射塔的透明度
+
+
+##### Mass Order
+
+
+
+
+
+
+
+#### Improved sign GUI
+
+########
--- a/src/lang/slovak.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/slovak.txt	Sat Jul 14 19:42: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}
@@ -1098,7 +1098,10 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Vykladat tovar len v stanici kde je dopyt: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Umoznit stavbu dlhych mostov: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Umoznit zaradenie depa do zoznamu prikazov: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Umoznit vystavbu priemyslu produkujuceho suroviny: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}Sposob výstavby priemyslu produkujúceho suroviny: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :žiadny
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :rovnaký ako ostatný priemysel
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :vyhladávací
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Umoznit viac priemyslu rovnakeho typu v jednom meste: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Rovnaky priemysel moze byt stavany blizko seba: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Zobrazit dlhy format datumu v stavovej liste: {ORANGE}{STRING}
@@ -1153,6 +1156,7 @@
 STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Automaticke opravy vrtulnikov v heliporte: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Otvarat panel uprav terenu s panelom stavby trati, ciest, ... : {ORANGE}{STRING}
 STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Pri posuvani mapy mysou posuvat opacnym smerom: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING                             :{LTBLUE}Plynulé posúvanie pohladu: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Zobrazit info o rozmerom pri vystavbe: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Zobrazit farebne schemy spolocnosti: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES_NONE                                :Ziadne
@@ -1166,7 +1170,19 @@
 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_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Zobrazit nástroje výstavby ak nie sú dostupné žiadne vhodné vozidlá: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maximalny pocet vlakov hraca: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Maximalny pocet automobilov hraca: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Maximalny pocet lietadiel hraca: {ORANGE}{STRING}
@@ -1249,7 +1265,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}
@@ -1289,7 +1305,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Si si isty, ze chces vytvorit nahodny teren?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Vela nahodnych miest
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Pokryt mapu nahodne umiestnenymi mestami
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Vela nahodneho priemyslu
+STR_MANY_RANDOM_INDUSTRIES                                      :Vela nahodneho priemyslu
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Pokryt mapu nahodne umiestnenym priemyslom
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Nemozno vygenerovat priemysel ...
 
@@ -1460,6 +1476,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :Anglicky
 STR_NETWORK_LANG_GERMAN                                         :Nemecky
 STR_NETWORK_LANG_FRENCH                                         :Francuzsky
+STR_NETWORK_LANG_BRAZILIAN                                      :Brazílsky
+STR_NETWORK_LANG_BULGARIAN                                      :Bulharsky
+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
+STR_NETWORK_LANG_ICELANDIC                                      :Islandsky
+STR_NETWORK_LANG_ITALIAN                                        :Taliansky
+STR_NETWORK_LANG_JAPANESE                                       :Japonsky
+STR_NETWORK_LANG_KOREAN                                         :Kórejsky
+STR_NETWORK_LANG_LITHUANIAN                                     :Litovksy
+STR_NETWORK_LANG_NORWEGIAN                                      :Nórsky
+STR_NETWORK_LANG_POLISH                                         :Polsky
+STR_NETWORK_LANG_PORTUGUESE                                     :Portugalsky
+STR_NETWORK_LANG_ROMANIAN                                       :Rumunsky
+STR_NETWORK_LANG_RUSSIAN                                        :Rusky
+STR_NETWORK_LANG_SLOVAK                                         :Slovensky
+STR_NETWORK_LANG_SLOVENIAN                                      :Slovinsky
+STR_NETWORK_LANG_SPANISH                                        :Spanielsky
+STR_NETWORK_LANG_SWEDISH                                        :Svédsky
+STR_NETWORK_LANG_TURKISH                                        :Turecky
+STR_NETWORK_LANG_UKRAINIAN                                      :Ukrajinsky
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Sietova hra - lobby
@@ -1479,9 +1520,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}
@@ -1653,6 +1694,12 @@
 STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Zeleznicne kolaje s pre-signalmi
 STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Zeleznicne kolaje s exit-signalmi
 STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Zeleznicne kolaje s combo-signalmi
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Železnicné kolaje s normálnymi a pre-signálmi
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Železnicné kolaje s normálnymi a exit-signálmi
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Železnicné kolaje s normálnymi a combo-signálmi
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Železnicné kolaje s pre- a exit-signálmi
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Železnicné kolaje s pre- a combo-signálmi
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Železnicné kolaje s exit- a combo-signálmi
 STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Je potrebné najprv odstránit železnicnú stanicu
 
 
@@ -1661,22 +1708,39 @@
 STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Cesta musi byt najskor odstranena
 STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Prebiehaju cestne prace
 STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Vystavba cesty
+STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Výstavba elektrickovej trate
 STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Vyber cestny most
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}... na jednosmerných cestách nie sú dovolené križovatky
 STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Tu sa neda postavit cesta ...
+STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}Nie je možné postavit elektrickovú trat ...
 STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Tu sa neda odstranit cesta ...
+STR_1805_CAN_T_REMOVE_TRAMWAY_FROM                              :{WHITE}Nie je možné odstránit elektrickovú trat ...
 STR_1806_ROAD_DEPOT_ORIENTATION                                 :{WHITE}Orientacia garaze
+STR_1806_TRAM_DEPOT_ORIENTATION                                 :{WHITE}Orientácia elektrickového depa
 STR_1807_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}Tu sa neda postavit garaz ...
+STR_1807_CAN_T_BUILD_TRAM_VEHICLE                               :{WHITE}Nie je možné postavit elektrickové depo ...
 STR_1808_CAN_T_BUILD_BUS_STATION                                :{WHITE}Nemozno postavit autobusovu zastavku ...
 STR_1809_CAN_T_BUILD_TRUCK_STATION                              :{WHITE}Nemozno postavit vykladku ...
+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
@@ -1684,6 +1748,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
@@ -1691,7 +1757,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}
@@ -1724,7 +1790,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}
@@ -1795,7 +1861,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
@@ -1848,8 +1914,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 -
@@ -1861,6 +1931,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
@@ -1898,6 +1970,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
@@ -1907,9 +1980,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
@@ -1966,6 +2044,13 @@
 STR_4829_REQUIRES                                               :{BLACK}Potrebuje: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}Náklad cakajúci na spracovanie:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES                                               :{BLACK}Produkuje: {YELLOW}{STRING}
+STR_4828_PRODUCES                                               :{BLACK}Produkuje: {YELLOW}{STRING}, {STRING}
+############ range for produces ends
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Produkcia za posledny mesiac:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% prepravenych)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Vycentrovanie pohladu na poziciu tovarne
@@ -2080,8 +2165,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!
 
@@ -2161,7 +2245,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
@@ -2173,7 +2257,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
@@ -2189,20 +2273,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
@@ -2241,8 +2325,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)
@@ -2280,7 +2364,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
@@ -2311,6 +2395,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
@@ -2590,7 +2676,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}
@@ -2611,6 +2697,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}
@@ -2652,13 +2745,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
@@ -2668,6 +2763,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}
@@ -2699,12 +2797,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}Vynechat aktualny prikaz - preskocit na dalsi
+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
@@ -2726,6 +2828,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}
@@ -2734,8 +2838,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
@@ -2751,7 +2867,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 ...
@@ -2778,12 +2894,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 ...
@@ -2823,7 +2943,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 ...
@@ -2891,7 +3011,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}
@@ -2944,6 +3064,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'
@@ -3068,6 +3190,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
@@ -3258,6 +3381,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}
@@ -3295,4 +3426,22 @@
 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}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}Meno musí byt jedinecné
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Prejst na dalsiu znacku
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Prejst na predchádzajúcu znacku
+
 ########
+
+STR_FUND_NEW_INDUSTRY                                           :{BLACK}Založit
+STR_PROSPECT_NEW_INDUSTRY                                       :{BLACK}Vyhladat
+STR_BUILD_NEW_INDUSTRY                                          :{BLACK}Postavit
+STR_INDUSTRY_SELECTION_HINT                                     :{BLACK}Vyberte vhodný typ priemyslu zo zoznamu
--- a/src/lang/slovenian.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/slovenian.txt	Sat Jul 14 19:42:58 2007 +0000
@@ -4,13 +4,15 @@
 ##plural 8
 ##case r d t
 
+#
+
 ##id 0x0000
 STR_NULL                                                        :
 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}
@@ -535,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.
@@ -818,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
@@ -845,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}
@@ -1074,7 +1076,10 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Dostavi tovor postaji le ob povpraševanju: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Dovoli gradnjo zelo dolgih mostov: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Dovoli ukaz 'pojdi v garažo': {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Dovoli gradnjo industrije surovin: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}Glavni ročni način gradnje industrij: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :brez
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :kot ostale industrije
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :obetaven
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Dovoli več enakih industrij na mesto: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Industrije enakega tipa lahko stojijo skupaj: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Vedno pokaži dolg datum v vrstici stanja: {ORANGE}{STRING}
@@ -1088,6 +1093,7 @@
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Novo skupno iskanje poti (NPF, prevlada NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Koeficient teže tovora za simulacijo težkih vlakov: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Dovoli prehodne postaje na cestah v lasti mest: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADJACENT_STATIONS                            :{LTBLUE}Dovoli gradnjo združljivih postaj: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Vedno dovoli majhna letališča: {ORANGE}{STRING}
 
@@ -1128,6 +1134,7 @@
 STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Avtomatski servis helikopterjev na pristajališču: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Pripni orodje za teren k orodju za gradnjo cest/železnic itd.: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Obrni smer premika okna: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING                             :{LTBLUE}Gladek premik pogleda: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Prikaz merilnega nasveta med uporabo gradbenih orodij: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Prikaz znakov podjetij: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES_NONE                                :Brez
@@ -1140,7 +1147,20 @@
 STR_CONFIG_PATCHES_SCROLLWHEEL_OFF                              :Izklopljeno
 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_DEFAULT_RAIL_TYPE                            :{LTBLUE}Privzeta vrsta železnice (ob zagonu nove igre): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL                       :Normalna železnica
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL                     :Electrificirana železnica
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL                   :Enotirna železnica
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV                     :Magnetna železnica
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST                      :Prvi/a/o/ na izbiro
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST                       :Zadnji/a/o/ na izbiro
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED                  :Najbolj uporabljan/a/o
 
+STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Prikaz gradbenih orodij, ko ni primernih vozil na izbiro: {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}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Največ letal na igralca: {ORANGE}{STRING}
@@ -1223,7 +1243,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}
@@ -1263,7 +1283,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Zagotovo želiš ustvariti naključno zemljišče?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Več naključnih mest
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Postavi na ozemlje naključna mesta
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Več naključnih industrij
+STR_MANY_RANDOM_INDUSTRIES                                      :Več naključnih industrij
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Postavi na ozemlje naključno industrijo
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Ni mogoče zgraditi industrij ...
 
@@ -1434,6 +1454,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :Angleški
 STR_NETWORK_LANG_GERMAN                                         :Nemški
 STR_NETWORK_LANG_FRENCH                                         :Francoski
+STR_NETWORK_LANG_BRAZILIAN                                      :Brazilski
+STR_NETWORK_LANG_BULGARIAN                                      :Bolgarski
+STR_NETWORK_LANG_CHINESE                                        :Kitajski
+STR_NETWORK_LANG_CZECH                                          :Češki
+STR_NETWORK_LANG_DANISH                                         :Danski
+STR_NETWORK_LANG_DUTCH                                          :Nizozemski
+STR_NETWORK_LANG_ESPERANTO                                      :Esperanto
+STR_NETWORK_LANG_FINNISH                                        :Finski
+STR_NETWORK_LANG_HUNGARIAN                                      :Madžarski
+STR_NETWORK_LANG_ICELANDIC                                      :Islandski
+STR_NETWORK_LANG_ITALIAN                                        :Italijanski
+STR_NETWORK_LANG_JAPANESE                                       :Japonski
+STR_NETWORK_LANG_KOREAN                                         :Korejski
+STR_NETWORK_LANG_LITHUANIAN                                     :Litvijski
+STR_NETWORK_LANG_NORWEGIAN                                      :Norveški
+STR_NETWORK_LANG_POLISH                                         :Poljski
+STR_NETWORK_LANG_PORTUGUESE                                     :Portugalski
+STR_NETWORK_LANG_ROMANIAN                                       :Romunski
+STR_NETWORK_LANG_RUSSIAN                                        :Ruski
+STR_NETWORK_LANG_SLOVAK                                         :Slovaški
+STR_NETWORK_LANG_SLOVENIAN                                      :Slovenski
+STR_NETWORK_LANG_SPANISH                                        :Španski
+STR_NETWORK_LANG_SWEDISH                                        :Švedski
+STR_NETWORK_LANG_TURKISH                                        :Turški
+STR_NETWORK_LANG_UKRAINIAN                                      :Ukrajinski
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Seje večigralskih iger
@@ -1453,9 +1498,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}
@@ -1627,6 +1672,13 @@
 STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Železniški tiri s pred-signali
 STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Železniški tiri z izhodnimi signali
 STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Železniški tiri s kombiniranimi signali
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Tiri z normalnimi in uvodnimi signali
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Tiri z normalnimi in izhodnimi signali
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Tiri z normalnimi in kombiniranimi signali
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Tiri z uvodnimi in izhodnimi signali
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Tiri z uvodnimi in kombiniranimi signali
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Tiri z izhodnimi in kombiniranimi signali
+STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Najprej moraš odstraniti železniško postajo
 
 
 
@@ -1634,22 +1686,39 @@
 STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Najprej odstrani cesto
 STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Cestna dela napredujejo
 STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Cestne gradnje
+STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Gradnja tramvaj proge
 STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Izberi cestni most
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}... enosmerne poti ne morejo imeti odcepov
 STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Nemogoča gradnja ceste ...
+STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}Nemogoča gradnja tramvaja tukaj...
 STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Nemogoča odstranitev ceste ...
+STR_1805_CAN_T_REMOVE_TRAMWAY_FROM                              :{WHITE}Nemogoče odstraniti tramvaja od tukaj...
 STR_1806_ROAD_DEPOT_ORIENTATION                                 :{WHITE}Smer garaže
+STR_1806_TRAM_DEPOT_ORIENTATION                                 :{WHITE}Orijentacija tramvaj garaže
 STR_1807_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}Nemogoča gradnja garaže tukaj ...
+STR_1807_CAN_T_BUILD_TRAM_VEHICLE                               :{WHITE}Nemogoča gradnja tramvaj garaže tukaj...
 STR_1808_CAN_T_BUILD_BUS_STATION                                :{WHITE}Nemogoča gradnja avtobusne postaje ...
 STR_1809_CAN_T_BUILD_TRUCK_STATION                              :{WHITE}Nemogoča gradnja tovorne postaje tukaj ...
+STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION                     :{WHITE}Nemogoča gradnja potniške tramvaj postaje...
+STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION                         :{WHITE}Nemogoča gradnja tovorne tramvaj postaje...
 STR_180A_ROAD_CONSTRUCTION                                      :Gradnja ceste
+STR_180A_TRAMWAY_CONSTRUCTION                                   :Gradnja tramvaj proge
 STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Zgradi cestni odsek
+STR_180B_BUILD_TRAMWAY_SECTION                                  :{BLACK}Zgradi odsek proge
 STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Zgradi garažo (za izdelavo in servis vozil)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT                               :{BLACK}Zgradi tramvaj garažo (za izdelavo in servisiranje vozil)
 STR_180D_BUILD_BUS_STATION                                      :{BLACK}Zgradi avtobusno postajo
 STR_180E_BUILD_TRUCK_LOADING_BAY                                :{BLACK}Zgradi tovorno postajo
+STR_180D_BUILD_PASSENGER_TRAM_STATION                           :{BLACK}Zgradi potniško tramvaj postajo
+STR_180E_BUILD_CARGO_TRAM_STATION                               :{BLACK}Zgradi tovorno tramvaj postajo
 STR_180F_BUILD_ROAD_BRIDGE                                      :{BLACK}Zgradi cestni most
+STR_180F_BUILD_TRAMWAY_BRIDGE                                   :{BLACK}Zgradi most za tramvaj
 STR_1810_BUILD_ROAD_TUNNEL                                      :{BLACK}Zgradi cestni predor
+STR_1810_BUILD_TRAMWAY_TUNNEL                                   :{BLACK}Zgradi predor za tramvaj
 STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Preklopi gradnja/rušenje cestnih konstrukcij
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS                       :{BLACK}Preklop gradi/odstrani za tramvaj progo
 STR_1813_SELECT_ROAD_VEHICLE_DEPOT                              :{BLACK}Izberi smer garaže
+STR_1813_SELECT_TRAM_VEHICLE_DEPOT                              :{BLACK}Izberi orijentacijo tramvaj garaže
 STR_1814_ROAD                                                   :Cesta
 STR_1815_ROAD_WITH_STREETLIGHTS                                 :Cesta z razsvetljavo
 STR_1816_TREE_LINED_ROAD                                        :Drevored
@@ -1657,6 +1726,8 @@
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Cestno/železniško križišče
 STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Ni mogoča odstranitev avtobusne postaje...
 STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Ni mogoča odstranitev tovorne postaje...
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION                         :{WHITE}Nemogoča odstranitev potniške tramvaj postaje...
+STR_CAN_T_REMOVE_CARGO_TRAM_STATION                             :{WHITE}Nemogoča odstranitev tovorne tramvaj postaje...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Mesta
@@ -1664,7 +1735,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}
@@ -1697,7 +1768,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}
@@ -1769,7 +1840,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
@@ -1822,8 +1893,12 @@
 STR_3041_NOW_ACCEPTS_AND                                        :{WHITE}{STATION} sedaj sprejema {STRING.t} in {STRING.t}
 STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Orientacija avtobusne postaje
 STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Orientacija tovorne postaje
+STR_3042_PASSENGER_TRAM_STATION_ORIENTATION                     :{WHITE}Orijentacija potniške postaje
+STR_3043_CARGO_TRAM_STATION_ORIENT                              :{WHITE}Orijentacija tovorne postaje
 STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Najprej moraš porušiti avtobusno postajo
 STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Najprej moraš porušiti tovorno postajo
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION                   :{WHITE}Najprej poruši potniško tramvaj postajo
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION                       :{WHITE}Najprej poruši tovorno tramvaj postajo
 STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} Postaj{P a i e ""}
 STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
 STR_304A_NONE                                                   :{YELLOW}- Brez -
@@ -1835,6 +1910,8 @@
 STR_3050_SELECT_LENGTH_OF_RAILROAD                              :{BLACK}Izberi dolžino železniške postaje
 STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Izberi orientacijo železniške postaje
 STR_3052_SELECT_TRUCK_LOADING_BAY                               :{BLACK}Izberi orientacijo tovorne postaje
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION              :{BLACK}Izbor orijentacije potniške tramvaj postaje
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION                  :{BLACK}Izbor orijentacije tovorne tramvaj postaje
 STR_3053_CENTER_MAIN_VIEW_ON_STATION                            :{BLACK}Pogled na postajo
 STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}Prikaz ocen postaje
 STR_3055_CHANGE_NAME_OF_STATION                                 :{BLACK}Spremeni ime postaje
@@ -1872,6 +1949,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
@@ -1881,9 +1959,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
@@ -1977,6 +2060,13 @@
 STR_4829_REQUIRES                                               :{BLACK}Potrebuje: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}Tovor na čakanju obdelave:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES                                               :{BLACK}Proizvaja: {YELLOW}{STRING}
+STR_4828_PRODUCES                                               :{BLACK}Proizvaja: {YELLOW}{STRING}, {STRING}
+############ range for produces ends
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Proizvodnja prejšnjega meseca:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% prepeljano)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Pogled na industrijo
@@ -2091,7 +2181,7 @@
 STR_SV_STNAME_LOWER                                             :Dolnja {STRING}
 STR_SV_STNAME_HELIPORT                                          :{STRING} Pristajališče
 STR_SV_STNAME_FOREST                                            :{STRING} Gozd
-
+STR_SV_STNAME_FALLBACK                                          :{STRING} Postaja #{NUM}
 
 ############ end of savegame specific region!
 
@@ -2171,7 +2261,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
@@ -2183,7 +2273,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
@@ -2199,20 +2289,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
@@ -2251,8 +2341,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)
@@ -2290,7 +2380,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
@@ -2321,6 +2411,8 @@
 STR_LIVERY_HELICOPTER                                           :Helikopter
 STR_LIVERY_SMALL_PLANE                                          :majhno letalo
 STR_LIVERY_LARGE_PLANE                                          :Veliko letalo
+STR_LIVERY_PASSENGER_TRAM                                       :Potniški tramvaj
+STR_LIVERY_FREIGHT_TRAM                                         :Tovorni tramvaj
 
 STR_LIVERY_GENERAL_TIP                                          :{BLACK}Prikaz glavnih barvnih shem
 STR_LIVERY_TRAIN_TIP                                            :{BLACK}Prikaz barvnih shem vlakov
@@ -2600,7 +2692,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}
@@ -2621,6 +2713,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
@@ -2662,13 +2761,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
@@ -2678,6 +2779,9 @@
 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 ...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}Zadnja lokomotiva vedno sledi prvi
 STR_8838_N_A                                                    :Ni na voljo{SKIP}
@@ -2709,12 +2813,16 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Prikaži zmogljivosti vsakega vagona
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Prikaži polno zmogljivost vlaka, razdeli glede na tip tovora
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Seznam navodil - klikni na ukaz, da ga izbereš. CTRL+klik prikaže postajo
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Preskoči trenuten ukaz in izvrši naslednjega
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Preskoči trenutni ukaz in začni naslednjega. CTRL + klik preskoči na izbran ukaz
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Zbriši izbran ukaz
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Označi izbran ukaz kot brez-postanka
 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
@@ -2736,6 +2844,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}
@@ -2744,8 +2854,20 @@
 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} .
+STR_TIMETABLE_TOTAL_TIME                                        :Ta časovna tabela bo trajala {STRING} do zaključka
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :Ta časovna tabela bo trajala vsaj {STRING} do zaključka (ni vse zajeto v tabeli)
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Samodejno
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Napolni tabelo samodejno z vrednostmi iz prvega potovanja
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Cestno vozilo na poti
@@ -2761,7 +2883,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...
@@ -2788,12 +2910,16 @@
 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 ...
 STR_902E_NAME_ROAD_VEHICLE                                      :{BLACK}Poimenuj cestno vozilo
 STR_902F_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Prebivalci praznujejo . . .{}Prihod prvega avtobusa na postajo {STATION}!
 STR_9030_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Prebivalci praznujejo . . .{}Prihod prvega tovornjaka na postajo {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Meščani proslavljajo . . .{}Prvi potniški tramvaj je prispel na postajo {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM                          :{BLACK}{BIGFONT}Proslava meščanov . . .{}Prvi tovorni tramvaj je pripeljal na postajo {STATION}!
 STR_9031_ROAD_VEHICLE_CRASH_DRIVER                              :{BLACK}{BIGFONT}Prometna nesreča!{}Voznik umrl v plamenih po trku z vlakom.
 STR_9032_ROAD_VEHICLE_CRASH_DIE                                 :{BLACK}{BIGFONT}Prometna nesreča!{}{COMMA} mrt{P ev va vi vih} v plamenih ob trku z vlakom.
 STR_9033_CAN_T_MAKE_VEHICLE_TURN                                :{WHITE}Ni mogoče obrniti smeri vozila ...
@@ -2833,7 +2959,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...
@@ -2901,7 +3027,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}
@@ -2954,6 +3080,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'!
@@ -3078,6 +3206,7 @@
 
 ### depot strings
 STR_DEPOT_SELL_CONFIRMATION_TEXT                                :{YELLOW}Pripravljaš se na prodajo vseh vozil v garaži. Zagotovo?
+STR_DEPOT_WRONG_DEPOT_TYPE                                      :Napačna vrsta garaže
 
 STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP                             :{BLACK}Prodaj vse vlake v garaži
 STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP                           :{BLACK}Prodaj vsa vestna vozila v garaži
@@ -3268,11 +3397,67 @@
 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}
+STR_GROUP_TINY_NAME                                             :{TINYFONT}{GROUP}
+STR_GROUP_ALL_TRAINS                                            :Vsi vlaki
+STR_GROUP_ALL_ROADS                                             :Vsa cestna vozila
+STR_GROUP_ALL_SHIPS                                             :Vse ladje
+STR_GROUP_ALL_AIRCRAFTS                                         :Vsa letala
+STR_GROUP_TINY_NUM                                              :{TINYFONT}{COMMA}
+STR_GROUP_ADD_SHARED_VEHICLE                                    :Vsa izmenljiva vozila
+STR_GROUP_REMOVE_ALL_VEHICLES                                   :Odstrani vsa vozila
 
+STR_GROUP_TRAINS_CAPTION                                        :{WHITE}{GROUP} - {COMMA} Vlak{P "" a i ov}
+STR_GROUP_ROADVEH_CAPTION                                       :{WHITE}{GROUP} - {COMMA} Cestn{P o i a ih} Vozil{P o i a ""}
+STR_GROUP_SHIPS_CAPTION                                         :{WHITE}{GROUP} - {COMMA} Lad{P ja ji je ij}
+STR_GROUP_AIRCRAFTS_CAPTION                                     :{WHITE}{GROUP} - {COMMA} Letal{P o i a ""}
+STR_GROUP_RENAME_CAPTION                                        :{BLACK}Preimenuj eno skupino
+STR_GROUP_REPLACE_CAPTION                                       :{WHITE}Zamenjaj Vozila v "{GROUP}"
 
+STR_GROUP_CAN_T_CREATE                                          :{WHITE}Nemogoče ustvariti skupino...
+STR_GROUP_CAN_T_DELETE                                          :{WHITE}Nemogoče brisanje te skupine...
+STR_GROUP_CAN_T_RENAME                                          :{WHITE}Nemogoče preimenovanje skupine...
+STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES                             :{WHITE}Nemogoča odstranitev vseh vozil iz te skupine...
+STR_GROUP_CAN_T_ADD_VEHICLE                                     :{WHITE}Nemogoče dodati vozilo v to skupino...
+STR_GROUP_CAN_T_ADD_SHARED_VEHICLE                              :{WHITE}Nemogoče dodati izmenljivo vozilo v to skupino...
 
+STR_GROUPS_CLICK_ON_GROUP_FOR_TIP                               :{BLACK}Skupine - Klikni na skupino za seznam vseh vozil v skupini
+STR_GROUP_CREATE_TIP                                            :{BLACK}Klikni za ustvarit skupino
+STR_GROUP_DELETE_TIP                                            :{BLACK}Izbriši izbrano skupino
+STR_GROUP_RENAME_TIP                                            :{BLACK}Preimenuj izbrano skupino
+STR_GROUP_REPLACE_PROTECTION_TIP                                :{BLACK}Klikni za zaščito skupine pred splošno samoobnovo
+
+STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR                        :{TINYFONT}{BLACK}Dobiček letos: {GREEN}{CURRENCY} {BLACK}(lani: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR                         :{TINYFONT}{BLACK}Dobiček letos: {RED}{CURRENCY} {BLACK}(lani: {GREEN}{CURRENCY}{BLACK})
+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})
+
+STR_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}Ime mora biti edinstveno
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Pojdi na naslednjo oznako
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Pojdi na  predhodno oznako
 
 ########
+
+STR_FUND_NEW_INDUSTRY                                           :{BLACK}Ustanovi
+STR_PROSPECT_NEW_INDUSTRY                                       :{BLACK}Obetajoča
+STR_BUILD_NEW_INDUSTRY                                          :{BLACK}Zgradi
+STR_INDUSTRY_SELECTION_HINT                                     :{BLACK}Izberi primerno industrijo iz tega seznama
--- a/src/lang/spanish.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/spanish.txt	Sat Jul 14 19:42: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}
@@ -1007,7 +1009,7 @@
 # end of order system
 
 STR_TRAIN_AUTORENEW_FAILED                                      :{WHITE}Auto renovar ha fallado con el tren {COMMA} (límite de dinero)
-STR_ROADVEHICLE_AUTORENEW_FAILED                                :{WHITE}AAuto renovar ha fallado con el vehículo de carretera {COMMA} (límite de dinero)
+STR_ROADVEHICLE_AUTORENEW_FAILED                                :{WHITE}Auto renovar ha fallado con el vehículo de carretera {COMMA} (límite de dinero)
 STR_SHIP_AUTORENEW_FAILED                                       :{WHITE}Auto renovar ha fallado con el barco {COMMA} (límite de dinero)
 STR_AIRCRAFT_AUTORENEW_FAILED                                   :{WHITE}Auto renovar ha fallado con la aeronave {COMMA} (límite de dinero)
 STR_TRAIN_TOO_LONG_AFTER_REPLACEMENT                            :{WHITE}El tren {COMMA} es demasiado largo tras el cambio
@@ -1033,7 +1035,10 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Entregar mercancía a una estación sólo si hay demanda: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Permitir la construcción de puentes muy largos: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Permitir órdenes de ir a depósito: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Construcción de material en bruto usando industrias: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}Método de construcción de industria primaria: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :ninguno
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :como las otras industrias
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :prospección
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Construcción de más de una industria similar por población: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Industrias mismo tipo pueden construirse unas junto a otras: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Mostrar siempre fecha larga en la barra de estado: {ORANGE}{STRING}
@@ -1047,6 +1052,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 +1093,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,7 +1107,19 @@
 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}Rail por defecto (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 usado
 
+STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Herramientas de construcción aún sin vehículos apropiados: {ORANGE}{STRING}
 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}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Máx aeroplanos por jugador: {ORANGE}{STRING}
@@ -1183,7 +1202,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}
@@ -1223,7 +1242,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}¿Está seguro de generar un paisaje al azar?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Varias poblaciones al azar
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Cubre el mapa con poblaciones colocadas al azar
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Varias industrias al azar
+STR_MANY_RANDOM_INDUSTRIES                                      :Varias industrias al azar
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Cubre el mapa con industrias colocadas al azar
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}No se pueden crear industrias...
 
@@ -1394,6 +1413,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 +1457,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}
@@ -1568,7 +1612,7 @@
 STR_1013_CAN_T_REMOVE_SIGNALS_FROM                              :{WHITE}No se pueden retirar señales de aquí...
 STR_1014_TRAIN_DEPOT_ORIENTATION                                :{WHITE}Orientación del depósito
 STR_1015_RAILROAD_CONSTRUCTION                                  :Construcción de ferrocarril
-STR_TOOLB_ELRAIL_CONSTRUCTION                                   :Construcción Línea Eléctrica de Ferrocarril
+STR_TOOLB_ELRAIL_CONSTRUCTION                                   :Construcción línea eléctrica de ferrocarril
 STR_1016_MONORAIL_CONSTRUCTION                                  :Construcción de monorraíl
 STR_1017_MAGLEV_CONSTRUCTION                                    :Construcción de maglev
 STR_1018_BUILD_RAILROAD_TRACK                                   :{BLACK}Construir tramo de ferrocarril
@@ -1587,6 +1631,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 +1645,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 +1685,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 +1694,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 +1727,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 +1798,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 +1851,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 +1868,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 +1907,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 +1917,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
@@ -1899,6 +1981,13 @@
 STR_4829_REQUIRES                                               :{BLACK}Requiere: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}La carga está esperando a ser procesada:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES                                               :{BLACK}Produce: {YELLOW}{STRING}
+STR_4828_PRODUCES                                               :{BLACK}Produce: {YELLOW}{STRING}, {STRING}
+############ range for produces ends
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Producción mes anterior:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% transportado)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Centrar la vista sobre la industria
@@ -2013,7 +2102,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 +2182,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 +2194,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 +2210,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 +2262,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 +2301,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 +2332,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 +2613,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 +2634,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 +2682,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 +2700,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}
@@ -2637,6 +2740,10 @@
 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
@@ -2658,6 +2765,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 Retrasos
 
 STR_TRAIN_STOPPING                                              :{RED}Parándose
 STR_TRAIN_STOPPING_VEL                                          :{RED}Parándose, {VELOCITY}
@@ -2666,8 +2775,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}Automático
+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
@@ -2683,7 +2804,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...
@@ -2710,12 +2831,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...
@@ -2755,7 +2880,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...
@@ -2823,7 +2948,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}
@@ -2876,6 +3001,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!
@@ -3000,6 +3127,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
@@ -3066,7 +3194,7 @@
 ############ Lists rail types
 
 STR_RAIL_VEHICLES                                               :Vehículos de rail
-STR_ELRAIL_VEHICLES                                             :Vehícules de Rail Eléctrico
+STR_ELRAIL_VEHICLES                                             :Vehículos de Rail Eléctrico
 STR_MONORAIL_VEHICLES                                           :Vehículos monorail
 STR_MAGLEV_VEHICLES                                             :Vehículos de Lev. Mag.
 
@@ -3190,9 +3318,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
@@ -3201,7 +3338,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...
@@ -3221,4 +3363,22 @@
 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_COMPANY_NAME                                                :{COMPANY}
+STR_ENGINE_NAME                                                 :{ENGINE}
+STR_GROUP_NAME                                                  :{GROUP}
+STR_PLAYER_NAME                                                 :{PLAYERNAME}
+STR_SIGN_NAME                                                   :{SIGN}
+STR_VEHICLE_NAME                                                :{VEHICLE}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}El nombre debe ser único
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Ir a la siguiente señal
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Ir a la señal anterior
+
 ########
+
+STR_FUND_NEW_INDUSTRY                                           :{BLACK}Fundar
+STR_PROSPECT_NEW_INDUSTRY                                       :{BLACK}Perspectiva
+STR_BUILD_NEW_INDUSTRY                                          :{BLACK}Construir
+STR_INDUSTRY_SELECTION_HINT                                     :{BLACK}Seleccione la industria apropiada de la lista
--- a/src/lang/swedish.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/swedish.txt	Sat Jul 14 19:42: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}
@@ -1034,7 +1034,10 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Leverera gods till en station enbart om någon frågar efter det: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Tillåt väldigt långa broar: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Tillåt order att gå till depå/bussgarage: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Tillåt byggnation av råmaterialsproducerande industrier: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}Manuell prioritering för industrins konstruktionsmetod: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :Inget
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :Som andra industrier
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :Prospekterande
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Tillåt flera industrier av samma typ per stad: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Industrier av samma typ kan byggas nära varandra: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Visa alltid långt datum i statusfältet: {ORANGE}{STRING}
@@ -1103,7 +1106,19 @@
 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_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Visa byggnationsverktygen när det ej finns några passande fordon tillgängligt: {ORANGE}{STRING}
 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}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Max antal flygplan per spelare: {ORANGE}{STRING}
@@ -1186,7 +1201,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}
@@ -1226,7 +1241,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Är du säker på att du vill generera ett slumpmässigt landskap?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Många slumpmässiga städer
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Täck kartan med slumpmässigt placerade städer
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Många slumpmässiga industrier
+STR_MANY_RANDOM_INDUSTRIES                                      :Många slumpmässiga industrier
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Täck kartan med slumpmässigt placerade industrier
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Kan inte generera industrier...
 
@@ -1397,6 +1412,31 @@
 STR_NETWORK_LANG_ENGLISH                                        :Engelska
 STR_NETWORK_LANG_GERMAN                                         :Tyska
 STR_NETWORK_LANG_FRENCH                                         :Franska
+STR_NETWORK_LANG_BRAZILIAN                                      :Brasiliansk
+STR_NETWORK_LANG_BULGARIAN                                      :Belgisk
+STR_NETWORK_LANG_CHINESE                                        :Kines
+STR_NETWORK_LANG_CZECH                                          :Tjeckisk
+STR_NETWORK_LANG_DANISH                                         :Dansk
+STR_NETWORK_LANG_DUTCH                                          :Holländsk
+STR_NETWORK_LANG_ESPERANTO                                      :Spansk
+STR_NETWORK_LANG_FINNISH                                        :Finsk
+STR_NETWORK_LANG_HUNGARIAN                                      :Ungersk
+STR_NETWORK_LANG_ICELANDIC                                      :Isländsk
+STR_NETWORK_LANG_ITALIAN                                        :Italiensk
+STR_NETWORK_LANG_JAPANESE                                       :Japansk
+STR_NETWORK_LANG_KOREAN                                         :Koreansk
+STR_NETWORK_LANG_LITHUANIAN                                     :Litauisk
+STR_NETWORK_LANG_NORWEGIAN                                      :Norsk
+STR_NETWORK_LANG_POLISH                                         :Polsk
+STR_NETWORK_LANG_PORTUGUESE                                     :Portugisisk
+STR_NETWORK_LANG_ROMANIAN                                       :Rumänsk
+STR_NETWORK_LANG_RUSSIAN                                        :Rysk
+STR_NETWORK_LANG_SLOVAK                                         :Slovakisk
+STR_NETWORK_LANG_SLOVENIAN                                      :Slovensk
+STR_NETWORK_LANG_SPANISH                                        :Spansk
+STR_NETWORK_LANG_SWEDISH                                        :Svensk
+STR_NETWORK_LANG_TURKISH                                        :Turkisk
+STR_NETWORK_LANG_UKRAINIAN                                      :Ukrainsk
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Nätverksspel
@@ -1416,9 +1456,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}
@@ -1653,7 +1693,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}
@@ -1686,7 +1726,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}
@@ -1757,7 +1797,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
@@ -1866,6 +1906,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
@@ -1875,9 +1916,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
@@ -1934,6 +1980,13 @@
 STR_4829_REQUIRES                                               :{BLACK}Kräver: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}Last som väntar på att bli behandlad:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES                                               :{BLACK}Producerar: {YELLOW}{STRING}
+STR_4828_PRODUCES                                               :{BLACK}Producerar: {YELLOW}{STRING}, {STRING}
+############ range for produces ends
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Produktion förra månaden:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% transporterat)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Centrera vyn ovanför industrin
@@ -2048,8 +2101,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!
 
@@ -2129,7 +2181,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
@@ -2141,7 +2193,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
@@ -2157,20 +2209,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
@@ -2209,8 +2261,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)
@@ -2248,7 +2300,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
@@ -2560,7 +2612,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}
@@ -2581,6 +2633,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å
@@ -2622,13 +2681,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
@@ -2638,6 +2699,9 @@
 STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Kan inte sätta in ny order...
 STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Kan inte ta bort denna order...
 STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Kan inte ändra denna order...
+STR_CAN_T_MOVE_THIS_ORDER                                       :{WHITE}Kan inte flytta denna order...
+STR_CAN_T_SKIP_ORDER                                            :{WHITE}Kan inte hoppa över nuvarande order...
+STR_CAN_T_SKIP_TO_ORDER                                         :{WHITE}Kan inte hoppa över till vald order...
 STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Kan inte flytta fordon...
 STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}Det bakre loket kommer alltid följa med det tillhörande främre loket
 STR_8838_N_A                                                    :N/A{SKIP}
@@ -2669,12 +2733,16 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Visa kapaciteter för varje fordon
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Visa tågets totala kapacitet, separera för typ av gods
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Orderlista - klicka på order för att markera det
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Skippa nuvararande order och börja med nästa
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Hoppa över nuvarande order och starta nästa. CTRL + klick hoppar över till vald order
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Ta bort markerad order
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Gör markerad order non-stop
 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
@@ -2696,6 +2764,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}
@@ -2704,8 +2774,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
@@ -2721,7 +2803,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...
@@ -2748,6 +2830,8 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Vägfordonslista - klicka på fordon för information
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Bygg markerat vägfordon
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Kostnad: {CURRENCY}{}Hastighet: {VELOCITY}{}Löpande kostnad: {CURRENCY}/år{}Kapacitet: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Kapacitet: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Byt namn på vägfordon
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Kan inte byta namn på vägfordon...
@@ -2795,7 +2879,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å...
@@ -2863,7 +2947,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}
@@ -2916,6 +3000,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!
@@ -3231,6 +3317,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}
@@ -3268,4 +3362,22 @@
 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}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}Namnet måste vara unikt
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Åk till nästa skylt
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Åk till föregående skylt
+
 ########
+
+STR_FUND_NEW_INDUSTRY                                           :{BLACK}Grunda
+STR_PROSPECT_NEW_INDUSTRY                                       :{BLACK}Prospektera
+STR_BUILD_NEW_INDUSTRY                                          :{BLACK}Bygga
+STR_INDUSTRY_SELECTION_HINT                                     :{BLACK}Välj lämplig industri från denna lista
--- a/src/lang/traditional_chinese.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/traditional_chinese.txt	Sat Jul 14 19:42: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}
@@ -355,7 +355,7 @@
 STR_0158_COMPANY_VALUE_GRAPH                                    :公司市值圖表
 STR_0159_CARGO_PAYMENT_RATES                                    :貨物收費圖表
 STR_015A_COMPANY_LEAGUE_TABLE                                   :公司排行榜
-STR_PERFORMANCE_DETAIL_MENU                                     :詳細營運數據
+STR_PERFORMANCE_DETAIL_MENU                                     :詳細營運評比
 ############ range for menu ends
 
 STR_015B_OPENTTD                                                :{WHITE}關於OpenTTD
@@ -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}
@@ -1034,7 +1034,10 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}有需求才向車站供貨:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}提高橋樑長度限制:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}可以下「到維修廠」指令:{ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}可以興建原物料工業:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}變更基礎工業的設立方式:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :無
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :與其他工業相同
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :探勘
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}每個市鎮可擁有多個同類型工業:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}同類型工業興建距離不受限制:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}永遠於狀態列顯示長日期:{ORANGE}{STRING}
@@ -1089,6 +1092,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,7 +1106,19 @@
 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_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}即使沒有適合的運具可使用也顯示建造工具:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}每位玩家可擁有列車數目:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}每位玩家可擁有車輛數目:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}每位玩家可擁有飛機數目:{ORANGE}{STRING}
@@ -1185,12 +1201,12 @@
 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}
 STR_CHEAT_BUILD_IN_PAUSE                                        :{LTBLUE}於暫停模式建設:{ORANGE}{STRING}
-STR_CHEAT_NO_JETCRASH                                           :{LTBLUE}噴射客機不會經常於小型機場墜毁:{ORANGE} {STRING}
+STR_CHEAT_NO_JETCRASH                                           :{LTBLUE}噴射客機不會經常於小型機場失事:{ORANGE} {STRING}
 STR_CHEAT_SWITCH_CLIMATE                                        :{LTBLUE}改變氣候:{ORANGE} {STRING}
 STR_CHEAT_CHANGE_DATE                                           :{LTBLUE}改變日期:{ORANGE} {DATE_SHORT}
 STR_CHEAT_SETUP_PROD                                            :{LTBLUE}可改變產量:{ORANGE}{STRING}
@@ -1225,7 +1241,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}你要建立一個隨機地形嗎?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}隨機產生多個市鎮
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}以隨機放置的市鎮佈滿版圖
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}隨機產生多個工業
+STR_MANY_RANDOM_INDUSTRIES                                      :隨機產生多個工業
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}以隨機放置的工業佈滿版圖
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}隨機產生工業失敗...
 
@@ -1302,7 +1318,7 @@
 STR_CONFIG_GAME_PRODUCTION                                      :{WHITE}修改產量
 
 TEMP_AI_IN_PROGRESS                                             :{WHITE}歡迎使用正在開發的新 AI。如果有任何問題,歡迎擷取畫面放上討論區通知開發團隊。
-TEMP_AI_ACTIVATED                                               :{WHITE}警告: 這個新 AI 還在開發階段,目前僅於汽車上實作!
+TEMP_AI_ACTIVATED                                               :{WHITE}警告: 這個新 AI 還在開發階段,目前僅於公路上實作!
 TEMP_AI_MULTIPLAYER                                             :{WHITE}警告: 新 AI 實作仍在開發階段。如有任何問題,請 E-Mail 至 truelight@openttd.org。
 
 ############ network gui strings
@@ -1396,6 +1412,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 +1456,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}
@@ -1562,10 +1603,10 @@
 STR_100B_MONORAIL_CONSTRUCTION                                  :{WHITE}鋪設單軌
 STR_100C_MAGLEV_CONSTRUCTION                                    :{WHITE}鋪設磁浮軌
 STR_100D_SELECT_RAIL_BRIDGE                                     :{WHITE}選擇鐵道橋樑
-STR_100E_CAN_T_BUILD_TRAIN_DEPOT                                :{WHITE}不能在這邊建築鐵道機廠...
-STR_100F_CAN_T_BUILD_RAILROAD_STATION                           :{WHITE}不能在這邊建築鐵道車站...
-STR_1010_CAN_T_BUILD_SIGNALS_HERE                               :{WHITE}不能在這邊建築號誌...
-STR_1011_CAN_T_BUILD_RAILROAD_TRACK                             :{WHITE}不能在這邊建築鐵道...
+STR_100E_CAN_T_BUILD_TRAIN_DEPOT                                :{WHITE}不能在這邊設置鐵道機廠...
+STR_100F_CAN_T_BUILD_RAILROAD_STATION                           :{WHITE}不能在這邊設置鐵道車站...
+STR_1010_CAN_T_BUILD_SIGNALS_HERE                               :{WHITE}不能在這邊設置號誌...
+STR_1011_CAN_T_BUILD_RAILROAD_TRACK                             :{WHITE}不能在這邊鋪設鐵道...
 STR_1012_CAN_T_REMOVE_RAILROAD_TRACK                            :{WHITE}不能從這邊移除鐵道...
 STR_1013_CAN_T_REMOVE_SIGNALS_FROM                              :{WHITE}不能從這邊移除號誌...
 STR_1014_TRAIN_DEPOT_ORIENTATION                                :{WHITE}鐵道機廠方向
@@ -1574,11 +1615,11 @@
 STR_1016_MONORAIL_CONSTRUCTION                                  :鋪設單軌
 STR_1017_MAGLEV_CONSTRUCTION                                    :鋪設磁浮軌
 STR_1018_BUILD_RAILROAD_TRACK                                   :{BLACK}鋪設鐵軌
-STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING                         :{BLACK}建築鐵路機廠 (用來建造、維修列車)
-STR_101A_BUILD_RAILROAD_STATION                                 :{BLACK}建築鐵道車站
-STR_101B_BUILD_RAILROAD_SIGNALS                                 :{BLACK}建築鐵道號誌
+STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING                         :{BLACK}設置鐵路機廠 (用來購置、維修列車)
+STR_101A_BUILD_RAILROAD_STATION                                 :{BLACK}設置鐵道車站
+STR_101B_BUILD_RAILROAD_SIGNALS                                 :{BLACK}設置鐵道號誌
 STR_101C_BUILD_RAILROAD_BRIDGE                                  :{BLACK}建築鐵道橋樑
-STR_101D_BUILD_RAILROAD_TUNNEL                                  :{BLACK}建築鐵道隧道
+STR_101D_BUILD_RAILROAD_TUNNEL                                  :{BLACK}挖掘鐵道隧道
 STR_101E_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}切換建築/移除鐵軌與號誌
 STR_101F_BRIDGE_SELECTION_CLICK                                 :{BLACK}選擇橋樑 - 點選想用的橋樑即可建造
 STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO                       :{BLACK}選擇鐵道機廠方向
@@ -1589,6 +1630,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,33 +1646,34 @@
 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_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_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_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_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_ROAD_TUNNEL                                      :{BLACK}挖掘公路隧道
 STR_1810_BUILD_TRAMWAY_TUNNEL                                   :{BLACK}開鐅電車隧道
-STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{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}選擇電車維修廠方向
@@ -1645,8 +1693,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}必須先摧毀建築
+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}
 STR_2007_RENAME_TOWN                                            :修改城鎮名稱
@@ -1678,7 +1726,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 +1797,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                                                   :標誌
@@ -1785,7 +1833,7 @@
 STR_3034_LOCAL_RATING_OF_TRANSPORT                              :{BLACK}本地對運輸服務的評價:
 
 ############ range for rating starts
-STR_3035_APPALLING                                              :駭人聽聞
+STR_3035_APPALLING                                              :慘不忍睹
 STR_3036_VERY_POOR                                              :非常糟糕
 STR_3037_POOR                                                   :糟糕
 STR_3038_MEDIOCRE                                               :普通
@@ -1835,8 +1883,8 @@
 STR_3061_TRUCK_LOADING_AREA                                     :貨運場
 STR_3062_BUS_STATION                                            :公車站
 STR_3063_SHIP_DOCK                                              :船塢
-STR_3064_HIGHLIGHT_COVERAGE_AREA                                :{BLACK}顯示建築地點的運輸涵蓋範圍
-STR_3065_DON_T_HIGHLIGHT_COVERAGE                               :{BLACK}不顯示建築地點的運輸涵蓋範圍
+STR_3064_HIGHLIGHT_COVERAGE_AREA                                :{BLACK}顯示設置地點的運輸涵蓋範圍
+STR_3065_DON_T_HIGHLIGHT_COVERAGE                               :{BLACK}不顯示設置地點的運輸涵蓋範圍
 STR_3066_COVERAGE_AREA_HIGHLIGHT                                :{BLACK}顯示運輸涵蓋範圍
 STR_3068_DOCK                                                   :{WHITE}碼頭
 STR_3069_BUOY                                                   :浮標
@@ -1858,6 +1906,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 +1916,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}刪除目前選定的存檔
@@ -1926,6 +1980,13 @@
 STR_4829_REQUIRES                                               :{BLACK}需要:{YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}囤積的貨物:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES                                               :{BLACK}產出:{YELLOW}{STRING}
+STR_4828_PRODUCES                                               :{BLACK}產出:{YELLOW}{STRING}, {STRING}
+############ range for produces ends
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}上月產量:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} (運送了 {COMMA}%)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}將主視野帶到工業上方
@@ -1949,7 +2010,7 @@
 
 ##id 0x5000
 STR_5000_TRAIN_IN_TUNNEL                                        :{WHITE}隧道內有列車
-STR_5001_ROAD_VEHICLE_IN_TUNNEL                                 :{WHITE}隧道內有汽車
+STR_5001_ROAD_VEHICLE_IN_TUNNEL                                 :{WHITE}隧道內有車輛
 STR_5003_ANOTHER_TUNNEL_IN_THE_WAY                              :{WHITE}被另一條隧道擋住
 STR_5005_UNABLE_TO_EXCAVATE_LAND                                :{WHITE}無法挖掘隧道出口
 STR_5006_MUST_DEMOLISH_TUNNEL_FIRST                             :{WHITE}必須先摧毀隧道
@@ -1968,7 +2029,7 @@
 STR_5014_TUBULAR_STEEL                                          :管橋,鋼製
 STR_BRIDGE_TUBULAR_SILICON                                      :管橋,玻璃纖維製
 STR_5015_CAN_T_BUILD_BRIDGE_HERE                                :{WHITE}無法在此建造橋樑...
-STR_5016_CAN_T_BUILD_TUNNEL_HERE                                :{WHITE}無法在此建築隧道...
+STR_5016_CAN_T_BUILD_TUNNEL_HERE                                :{WHITE}無法在此挖掘隧道...
 STR_5017_RAILROAD_TUNNEL                                        :鐵道隧道
 STR_5018_ROAD_TUNNEL                                            :公路隧道
 STR_501B_STEEL_SUSPENSION_RAIL_BRIDGE                           :鐵道鋼吊橋
@@ -2003,7 +2064,7 @@
 STR_SV_EMPTY                                                    :
 STR_SV_UNNAMED                                                  :未命名
 STR_SV_TRAIN_NAME                                               :列車 {COMMA}
-STR_SV_ROADVEH_NAME                                             :汽車 {COMMA}
+STR_SV_ROADVEH_NAME                                             :車輛 {COMMA}
 STR_SV_SHIP_NAME                                                :船舶 {COMMA}
 STR_SV_AIRCRAFT_NAME                                            :飛機 {COMMA}
 
@@ -2040,8 +2101,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 +2181,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 +2193,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 +2209,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}...不需償還貸款
@@ -2180,8 +2240,8 @@
 STR_7038_INAUGURATED                                            :{GOLD}成立於:{WHITE}{NUM}
 STR_7039_VEHICLES                                               :{GOLD}運具:
 STR_TRAINS                                                      :{WHITE}列車 {COMMA} 列
-STR_ROAD_VEHICLES                                               :{WHITE}汽車 {COMMA} 輛
-STR_AIRCRAFT                                                    :{WHITE}{COMMA} 飛機
+STR_ROAD_VEHICLES                                               :{WHITE}車輛 {COMMA} 部
+STR_AIRCRAFT                                                    :{WHITE}飛機 {COMMA} 架
 STR_SHIPS                                                       :{WHITE}船舶 {COMMA} 艘
 STR_7042_NONE                                                   :{WHITE}無
 STR_7043_FACE_SELECTION                                         :{WHITE}選擇面孔
@@ -2201,8 +2261,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 +2300,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% 股份
@@ -2253,7 +2313,7 @@
 STR_7080_PROTECTED                                              :{WHITE}這間公司才剛成立,還不能交易股票...
 
 STR_LIVERY_DEFAULT                                              :標準配色
-STR_LIVERY_STEAM                                                :蒸汽車頭
+STR_LIVERY_STEAM                                                :蒸汽機車
 STR_LIVERY_DIESEL                                               :柴油車頭
 STR_LIVERY_ELECTRIC                                             :電力車頭
 STR_LIVERY_MONORAIL                                             :單軌車頭
@@ -2271,10 +2331,12 @@
 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}顯示鐵道配色
-STR_LIVERY_ROADVEH_TIP                                          :{BLACK}顯示汽車配色
+STR_LIVERY_ROADVEH_TIP                                          :{BLACK}顯示車輛配色
 STR_LIVERY_SHIP_TIP                                             :{BLACK}顯示船舶配色
 STR_LIVERY_AIRCRAFT_TIP                                         :{BLACK}顯示飛機配色
 STR_LIVERY_PRIMARY_TIP                                          :{BLACK}選擇選定配色的主色調
@@ -2541,7 +2603,7 @@
 STR_8100_MESSAGE_FROM_VEHICLE_MANUFACTURE                       :{WHITE}運具製造商的訊息
 STR_8101_WE_HAVE_JUST_DESIGNED_A                                :{GOLD}我們剛設計了一種新{STRING} - 您有興趣獨家使用它一年,讓我們在正式發佈之前觀察它的表現嗎?
 STR_8102_RAILROAD_LOCOMOTIVE                                    :鐵道機車頭
-STR_8103_ROAD_VEHICLE                                           :汽車
+STR_8103_ROAD_VEHICLE                                           :車輛
 STR_8104_AIRCRAFT                                               :飛機
 STR_8105_SHIP                                                   :船舶
 STR_8106_MONORAIL_LOCOMOTIVE                                    :單軌機車頭
@@ -2549,8 +2611,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 +2633,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} 機廠維護中
@@ -2596,9 +2665,9 @@
 STR_ALL_AVAIL_RAIL_VEHICLES                                     :{WHITE}鐵道車輛
 
 STR_881F_BUILD_VEHICLE                                          :{BLACK}購買車輛
-STR_CLONE_ROAD_VEHICLE                                          :{BLACK}複製汽車
-STR_CLONE_ROAD_VEHICLE_INFO                                     :{BLACK}這將購買一輛一樣的汽車。按住 CTRL 點選還可共享指令
-STR_CLONE_ROAD_VEHICLE_DEPOT_INFO                               :{BLACK}這將購買一輛一樣的汽車。按下按鈕之後再點選車庫内外的汽車。按住 CTRL 點選還可共享指令
+STR_CLONE_ROAD_VEHICLE                                          :{BLACK}複製車輛
+STR_CLONE_ROAD_VEHICLE_INFO                                     :{BLACK}此舉將購買一部相同的車輛。按住 CTRL 點選還可共享指令
+STR_CLONE_ROAD_VEHICLE_DEPOT_INFO                               :{BLACK}此舉將購買一部相同的車輛。按下按鈕之後再點選於車庫内或外的車輛。按住 CTRL 點選還可共享指令
 STR_CLONE_TRAIN                                                 :{BLACK}複製列車
 STR_CLONE_TRAIN_INFO                                            :{BLACK}這將購買一列一樣的列車,包含所有車廂。按住 CTRL 點選還可共享指令
 STR_CLONE_TRAIN_DEPOT_INFO                                      :{BLACK}這將購買一列一樣的列車,包含所有車廂。按下按鈕之後再點選機廠内外的其他列車。按住 CTRL 點選還可共享指令
@@ -2612,13 +2681,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 +2699,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,12 +2733,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}跳過目前指令,繼續下個指令
+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}故障
@@ -2686,6 +2764,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}
@@ -2694,72 +2774,88 @@
 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}前方有汽車
-STR_9001_ROAD_VEHICLES                                          :{WHITE}{COMPANY} - 汽車 {COMMA} 輛
+STR_9001_ROAD_VEHICLES                                          :{WHITE}{COMPANY} - 車輛 {COMMA} 部
 STR_9002                                                        :{WHITE}{VEHICLE}
-STR_9003_ROAD_VEHICLE_DEPOT                                     :{WHITE}{TOWN} 汽車車庫
+STR_9003_ROAD_VEHICLE_DEPOT                                     :{WHITE}{TOWN} 車庫
 STR_9004_NEW_VEHICLES                                           :{BLACK}購買新車輛
-STR_9006_NEW_ROAD_VEHICLES                                      :{WHITE}購買新汽車
+STR_9006_NEW_ROAD_VEHICLES                                      :{WHITE}購置新車輛
 STR_9007_BUILD_VEHICLE                                          :{BLACK}購買車輛
-STR_9009_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}無法購買汽車
+STR_9009_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}無法購置車輛
 STR_900C_DETAILS                                                :{WHITE}{VEHICLE} (詳細資料)
 STR_900D_AGE_RUNNING_COST_YR                                    :{BLACK}使用年數:{LTBLUE}{STRING}{BLACK}   營運支出:{LTBLUE}{CURRENCY}/年
 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}無法出售汽車...
-STR_9015_CAN_T_STOP_START_ROAD_VEHICLE                          :{WHITE}無法停止/起動汽車...
-STR_9016_ROAD_VEHICLE_IS_WAITING                                :{WHITE}汽車 {COMMA} 已在車庫内待命
+STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...必須停在車庫内
+STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}無法出售車輛...
+STR_9015_CAN_T_STOP_START_ROAD_VEHICLE                          :{WHITE}無法停止/起動車輛...
+STR_9016_ROAD_VEHICLE_IS_WAITING                                :{WHITE}車輛 {COMMA} 已在車庫内待命
 STR_HEADING_FOR_ROAD_DEPOT                                      :{ORANGE}正前往 {TOWN} 車庫
 STR_HEADING_FOR_ROAD_DEPOT_VEL                                  :{ORANGE}正前往 {TOWN} 車庫, {VELOCITY}
 STR_HEADING_FOR_ROAD_DEPOT_SERVICE                              :{LTBLUE}在 {TOWN} 車庫維護中
 STR_HEADING_FOR_ROAD_DEPOT_SERVICE_VEL                          :{LTBLUE}在 {TOWN} 車庫維護中, {VELOCITY}
-STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT                            :{WHITE}無法將汽車送到車庫...
+STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT                            :{WHITE}無法將車輛送至車庫...
 STR_9019_UNABLE_TO_FIND_LOCAL_DEPOT                             :{WHITE}找不到附近的車庫
-STR_901A_ROAD_VEHICLES_CLICK_ON                                 :{BLACK}汽車 - 點選車輛檢視詳細資料
-STR_901B_BUILD_NEW_ROAD_VEHICLES                                :{BLACK}購買新汽車 (需要汽車庫)
+STR_901A_ROAD_VEHICLES_CLICK_ON                                 :{BLACK}車輛 - 點選車輛檢視詳細資料
+STR_901B_BUILD_NEW_ROAD_VEHICLES                                :{BLACK}購置新車輛 (需要車庫)
 STR_901C_CURRENT_VEHICLE_ACTION                                 :{BLACK}目前車輛動作 - 按此可停止/起動車輛
 STR_901D_SHOW_VEHICLE_S_ORDERS                                  :{BLACK}顯示車輛指令
 STR_901E_CENTER_MAIN_VIEW_ON_VEHICLE                            :{BLACK}將主視野移到車輛位置
 STR_901F_SEND_VEHICLE_TO_DEPOT                                  :{BLACK}將車輛送到車庫。按住 CTRL 點選則只做維護
 STR_9020_FORCE_VEHICLE_TO_TURN_AROUND                           :{BLACK}強制車輛掉頭
 STR_9021_SHOW_ROAD_VEHICLE_DETAILS                              :{BLACK}顯示車輛詳細資訊
-STR_9022_VEHICLES_CLICK_ON_VEHICLE                              :{BLACK}車輛 - 點選車輛顯示詳細資訊
-STR_9023_BUILD_NEW_ROAD_VEHICLE                                 :{BLACK}購買新汽車
+STR_9022_VEHICLES_CLICK_ON_VEHICLE                              :{BLACK}車輛 - 點選車輛顯示詳細資料
+STR_9023_BUILD_NEW_ROAD_VEHICLE                                 :{BLACK}購置新車輛
 STR_9024_DRAG_ROAD_VEHICLE_TO_HERE                              :{BLACK}將氣車拉至此即可出售
 STR_9025_CENTER_MAIN_VIEW_ON_ROAD                               :{BLACK}將主視野移到車庫位置
-STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}汽車清單 - 點選汽車可看到詳細資訊
-STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}購買選定的汽車
+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_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_9031_ROAD_VEHICLE_CRASH_DRIVER                              :{BLACK}{BIGFONT}汽車撞毀!{}駕駛在與列車相撞後死於火球下
-STR_9032_ROAD_VEHICLE_CRASH_DIE                                 :{BLACK}{BIGFONT}汽車撞毀!{}與列車相撞後 {COMMA} 人死於火球下
-STR_9033_CAN_T_MAKE_VEHICLE_TURN                                :{WHITE}無法使汽車掉頭...
+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}無法使車輛掉頭...
 STR_ONLY_TURN_SINGLE_UNIT                                       :{WHITE}無法迴轉由許多單位構成的車輛
 STR_9034_RENAME                                                 :{BLACK}更名
-STR_9035_RENAME_ROAD_VEHICLE_TYPE                               :{BLACK}為汽車類型更名
-STR_9036_RENAME_ROAD_VEHICLE_TYPE                               :{WHITE}為汽車類型更名
-STR_9037_CAN_T_RENAME_ROAD_VEHICLE                              :{WHITE}無法為汽車類型更名...
-STR_9038_GO_TO_ROADVEH_DEPOT                                    :前往 {TOWN} 汽車庫
+STR_9035_RENAME_ROAD_VEHICLE_TYPE                               :{BLACK}為車輛類型更名
+STR_9036_RENAME_ROAD_VEHICLE_TYPE                               :{WHITE}為車輛類型更名
+STR_9037_CAN_T_RENAME_ROAD_VEHICLE                              :{WHITE}無法為車輛類型更名...
+STR_9038_GO_TO_ROADVEH_DEPOT                                    :前往 {TOWN} 車庫
 STR_SERVICE_AT_ROADVEH_DEPOT                                    :在 {TOWN} 車庫維護
 
-STR_REFIT_ROAD_VEHICLE_TO_CARRY                                 :{BLACK}改裝汽車以運送不同的酬載
-STR_REFIT_ROAD_VEHICLE                                          :{BLACK}改裝汽車
-STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED                     :{BLACK}改裝汽車以運送指定的酬載
-STR_REFIT_ROAD_VEHICLE_CAN_T                                    :{WHITE}無法改裝汽車...
-STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}選擇汽車要運送的酬載種類
+STR_REFIT_ROAD_VEHICLE_TO_CARRY                                 :{BLACK}改裝車輛以運送不同的酬載
+STR_REFIT_ROAD_VEHICLE                                          :{BLACK}改裝車輛
+STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED                     :{BLACK}改裝車輛以運送指定的酬載
+STR_REFIT_ROAD_VEHICLE_CAN_T                                    :{WHITE}無法改裝車輛...
+STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}選擇車輛要運送的酬載種類
 
 ##id 0x9800
 STR_9800_DOCK_CONSTRUCTION                                      :建造碼頭
@@ -2783,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}無法將船舶送到船塢...
@@ -2795,7 +2891,7 @@
 STR_981C_SHIP_IS_WAITING_IN_DEPOT                               :{WHITE}船舶 {COMMA} 已在船塢待命
 STR_981D_BUILD_SHIP_DOCK                                        :{BLACK}建造碼頭
 STR_981E_BUILD_SHIP_DEPOT_FOR_BUILDING                          :{BLACK}建造船塢 (用以購買/維護船舶)
-STR_981F_SHIPS_CLICK_ON_SHIP_FOR                                :{BLACK}船舶 - 點選船舶可看到詳細資訊
+STR_981F_SHIPS_CLICK_ON_SHIP_FOR                                :{BLACK}船舶 - 點選船舶可看到詳細資料
 STR_9820_BUILD_NEW_SHIP                                         :{BLACK}購買新船舶
 STR_9821_DRAG_SHIP_TO_HERE_TO_SELL                              :{BLACK}將船舶拉至此即可出售
 STR_9822_CENTER_MAIN_VIEW_ON_SHIP                               :{BLACK}將主視野移到船塢上方
@@ -2813,7 +2909,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}更名
@@ -2851,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}
@@ -2875,7 +2971,7 @@
 STR_A024_CENTER_MAIN_VIEW_ON_HANGAR                             :{BLACK}將主視野帶到機棚位置
 STR_A025_AIRCRAFT_SELECTION_LIST                                :{BLACK}飛機清單 - 點選飛機檢視詳細資料
 STR_A026_BUILD_THE_HIGHLIGHTED_AIRCRAFT                         :{BLACK}購買選定的飛機
-STR_A027_CURRENT_AIRCRAFT_ACTION                                :{BLACK}目前非機動作 - 按此可停止/起動飛機
+STR_A027_CURRENT_AIRCRAFT_ACTION                                :{BLACK}目前飛機動作 - 按此可停止/起動飛機
 STR_A028_SHOW_AIRCRAFT_S_ORDERS                                 :{BLACK}顯示飛機的指令
 STR_A029_CENTER_MAIN_VIEW_ON_AIRCRAFT                           :{BLACK}將主視野帶到飛機位置
 STR_A02A_SEND_AIRCRAFT_TO_HANGAR                                :{BLACK}將飛機送到機棚。按住 CTRL 點選則只做維護
@@ -2886,8 +2982,8 @@
 STR_A031_CAN_T_NAME_AIRCRAFT                                    :{WHITE}無法命名飛機
 STR_A032_NAME_AIRCRAFT                                          :{BLACK}命名飛機
 STR_A033_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}市民慶賀 . . .{}首架飛機抵達 {STATION}!
-STR_A034_PLANE_CRASH_DIE_IN_FIREBALL                            :{BLACK}{BIGFONT}墜機!{}{COMMA} 名乘客與機組員死於 {STATION} 的火球下
-STR_PLANE_CRASH_OUT_OF_FUEL                                     :{BLACK}{BIGFONT}飛機墜毀!{}飛機用光燃油, {COMMA} 死在火球裡!
+STR_A034_PLANE_CRASH_DIE_IN_FIREBALL                            :{BLACK}{BIGFONT}空難!{}{COMMA} 名乘客與機組員不幸罹難於 {STATION}
+STR_PLANE_CRASH_OUT_OF_FUEL                                     :{BLACK}{BIGFONT}空難!{}飛機燃油耗盡, {COMMA} 名乘客與機組員不幸罹難
 STR_A036                                                        :{TINYFONT}{BLACK}{STATION}
 STR_A037_RENAME                                                 :{BLACK}更名
 STR_A038_RENAME_AIRCRAFT_TYPE                                   :{BLACK}重新命名飛機種類
@@ -2904,9 +3000,11 @@
 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 摧毀!
+STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}車輛被 UFO 擊毀!
 STR_B002_OIL_REFINERY_EXPLOSION                                 :{BLACK}{BIGFONT}{TOWN} 附近的煉油廠爆炸!
 STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS                        :{BLACK}{BIGFONT}{TOWN} 附近的工廠發生事故被毀!
 STR_B004_UFO_LANDS_NEAR                                         :{BLACK}{BIGFONT}UFO 在 {TOWN} 附近著陸!
@@ -2917,7 +3015,7 @@
 STR_BRIBE_FAILED_2                                              :{WHITE}已經被調查員發現
 STR_BUILD_DATE                                                  :{BLACK}建於:{LTBLUE}{DATE_LONG}
 
-STR_PERFORMANCE_DETAIL                                          :{WHITE}詳細效率評比
+STR_PERFORMANCE_DETAIL                                          :{WHITE}詳細營運評比
 STR_PERFORMANCE_DETAIL_KEY                                      :{BLACK}詳細資料
 STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY                          :{BLACK}({CURRCOMPACT}/{CURRCOMPACT})
 STR_PERFORMANCE_DETAIL_AMOUNT_INT                               :{BLACK}({COMMA}/{COMMA})
@@ -2935,7 +3033,7 @@
 STR_PERFORMANCE_DETAIL_LOAN                                     :{BLACK}貸款:
 STR_PERFORMANCE_DETAIL_TOTAL                                    :{BLACK}總計:
 ############ End of order list
-STR_PERFORMANCE_DETAIL_VEHICLES_TIP                             :{BLACK}運具數量;這包含汽車、鐵道、船舶與飛機
+STR_PERFORMANCE_DETAIL_VEHICLES_TIP                             :{BLACK}運具數量;這包含鐵公路車輛、船舶與飛機
 STR_PERFORMANCE_DETAIL_STATIONS_TIP                             :{BLACK}車站部分的數量。每部份車站 (火車站,公車站,機場) 都算在内,就算連在一起亦然
 STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP                           :{BLACK}使用超過兩年的運具之中,最低收入車輛的損益
 STR_PERFORMANCE_DETAIL_MIN_INCOME_TIP                           :{BLACK}之前三年的單月最低收入
@@ -3014,12 +3112,12 @@
 STR_SHIP                                                        :{BLACK}{SHIP}
 
 STR_SCHEDULED_TRAINS                                            :{WHITE}{STATION} - 列車 {COMMA} 列
-STR_SCHEDULED_ROAD_VEHICLES                                     :{WHITE}{STATION} - 汽車 {COMMA} 輛
+STR_SCHEDULED_ROAD_VEHICLES                                     :{WHITE}{STATION} - 車輛 {COMMA} 部
 STR_SCHEDULED_AIRCRAFT                                          :{WHITE}{STATION} - 飛機 {COMMA} 架
 STR_SCHEDULED_SHIPS                                             :{WHITE}{STATION} - 船舶 {COMMA} 艘
 
 STR_SCHEDULED_TRAINS_TIP                                        :{BLACK}顯示所有指令內包含這個站場的列車
-STR_SCHEDULED_ROAD_VEHICLES_TIP                                 :{BLACK}顯示所有指令内包含這個站場的汽車
+STR_SCHEDULED_ROAD_VEHICLES_TIP                                 :{BLACK}顯示所有指令内包含這個車站的車輛
 STR_SCHEDULED_AIRCRAFT_TIP                                      :{BLACK}顯示所有指令内包含這座站場的飛機
 STR_SCHEDULED_SHIPS_TIP                                         :{BLACK}顯示所有指令内包含這個站場的船舶
 
@@ -3028,24 +3126,25 @@
 
 ### 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}出售車庫内所有汽車
+STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP                           :{BLACK}出售車庫内所有車輛
 STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP                              :{BLACK}出售船塢内所有船舶
 STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP                          :{BLACK}出售機棚内所有飛機
 
 STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TIP                          :{BLACK}取得所有命令内有這個機廠的列車
-STR_DEPOT_VEHICLE_ORDER_LIST_ROADVEH_TIP                        :{BLACK}取得所有命令内有這個車庫的汽車
+STR_DEPOT_VEHICLE_ORDER_LIST_ROADVEH_TIP                        :{BLACK}取得所有命令内有這個車庫的車輛
 STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TIP                           :{BLACK}取得所有命令内有這個船塢的船舶
 STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TIP                       :{BLACK}取得所有命令内有這個機場的機棚的飛機
 
 STR_DEPOT_AUTOREPLACE_TRAIN_TIP                                 :{BLACK}自動替換所有機廠内列車
-STR_DEPOT_AUTOREPLACE_ROADVEH_TIP                               :{BLACK}自動替換所有車庫内汽車
+STR_DEPOT_AUTOREPLACE_ROADVEH_TIP                               :{BLACK}自動替換所有車庫内車輛
 STR_DEPOT_AUTOREPLACE_SHIP_TIP                                  :{BLACK}自動替換所有船塢内船舶
 STR_DEPOT_AUTOREPLACE_AIRCRAFT_TIP                              :{BLACK}自動替換所有機棚内飛機
 
 STR_VEHICLE_LIST_TRAIN_DEPOT                                    :{BLACK}{STRING} - 列車 {COMMA} 列
-STR_VEHICLE_LIST_ROADVEH_DEPOT                                  :{BLACK}{STRING} - 汽車 {COMMA} 輛
+STR_VEHICLE_LIST_ROADVEH_DEPOT                                  :{BLACK}{STRING} - 車輛 {COMMA} 部
 STR_VEHICLE_LIST_SHIP_DEPOT                                     :{BLACK}{STRING} - 船舶 {COMMA} 艘
 STR_VEHICLE_LIST_AIRCRAFT_DEPOT                                 :{BLACK}{STRING} - 飛機 {COMMA} 架
 
@@ -3079,7 +3178,7 @@
 STR_MASS_STOP_HANGAR_TIP                                        :{BLACK}按下可停止機棚内所有飛機
 
 STR_MASS_START_DEPOT_TRAIN_TIP                                  :{BLACK}按下可起動機廠内所有列車
-STR_MASS_START_DEPOT_ROADVEH_TIP                                :{BLACK}按下可起動車庫内所有汽車
+STR_MASS_START_DEPOT_ROADVEH_TIP                                :{BLACK}按下可起動車庫内所有車輛
 STR_MASS_START_DEPOT_SHIP_TIP                                   :{BLACK}按下可起動船塢内所有船舶
 STR_MASS_START_HANGAR_TIP                                       :{BLACK}按下可起動機棚内所有飛機
 
@@ -3218,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}
@@ -3248,10 +3355,29 @@
 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}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}名稱必須是唯一的
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}前往下一個標誌
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}前往前一個標誌
+
 ########
+
+STR_FUND_NEW_INDUSTRY                                           :{BLACK}投資
+STR_PROSPECT_NEW_INDUSTRY                                       :{BLACK}探勘
+STR_BUILD_NEW_INDUSTRY                                          :{BLACK}設立
+STR_INDUSTRY_SELECTION_HINT                                     :{BLACK}從列表中選擇適合的工業
--- a/src/lang/turkish.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/turkish.txt	Sat Jul 14 19:42: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}
@@ -1034,7 +1034,6 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Sadece istek varsa kargo kabul edilsin: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Çok uzun köprülere izin ver: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Garaja git talimati etkin: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Hammadde üreten tesisleri açmak izinli: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Bir şehirde birden fazla aynı fabrika olması izinli: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Aynı tür fabrikalar yan yana yapılabilir: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Durum çubuğunda uzun tarih göster: {ORANGE}{STRING}
@@ -1048,6 +1047,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}
 
@@ -1088,6 +1088,7 @@
 STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Helikopterler helipadlerde otomatik servise girsin: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Arazi araç çubuğunu diğer araç çubuklarına bağla: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Fareyle kaydırma hareketini ters çevir: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING                             :{LTBLUE}Düzgün viewport kaydırması: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}İnşa araçları kullanılırken ölçüm ipucu göster: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Şirketin renklerini göster: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES_NONE                                :Hiçbiri
@@ -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}
@@ -1153,6 +1165,7 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :Hızlı
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :Çok Hızlı
 STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Kasabaların şehir olması için gerekli nüfus: {ORANGE}1 in {STRING}
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Birincil şehir büyüklüğü çarpanı: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Arayüz
 STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}İnşaat
@@ -1179,7 +1192,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}
@@ -1219,7 +1232,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Arazinin rasgele düzenlenmesini istediğinizden emin misiniz?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Birçok rastgele şehir
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Haritayı rastgele şehirlerle doldur
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Birçok rastgele fabrika
+STR_MANY_RANDOM_INDUSTRIES                                      :Birçok rastgele fabrika
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Haritayı rastgele fabrikalarla doldur
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Fabrika yapılamıyor...
 
@@ -1390,6 +1403,24 @@
 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
+STR_NETWORK_LANG_ROMANIAN                                       :Romanca
+STR_NETWORK_LANG_RUSSIAN                                        :Rusça
+STR_NETWORK_LANG_SLOVAK                                         :Slovakça
+STR_NETWORK_LANG_SLOVENIAN                                      :Slovence
+STR_NETWORK_LANG_SPANISH                                        :İspanyolca
+STR_NETWORK_LANG_TURKISH                                        :Türkçe
+STR_NETWORK_LANG_UKRAINIAN                                      :Ukraynaca
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Çok oyunculu oyun lobisi
@@ -1409,9 +1440,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}
@@ -1583,6 +1614,13 @@
 STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Ön-sinayalli ray
 STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Çıkış-sinyalli ray
 STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Ön+çikis-sinyalli ray
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Normal ve ön sinyalli ray
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Normal ve çıkış sinyalli ray
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Normal ve birleşik sinyalli ray
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Ön ve Çıkış sinyalli ray
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Ön ve birleşik sinyalli ray
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Çıkış ve birleşik sinyalli ray
+STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Önce tren istasyonu kaldırılmalı
 
 
 
@@ -1590,7 +1628,9 @@
 STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Önce yol silinmeli
 STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Yol çalışmaları
 STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Yol Yapımı
+STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Tramvay Yapımı
 STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Köprü Seç
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}...tek yönlü yollar kesişemez
 STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Yol yapılamıyor...
 STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}Buraya tramvay yapılamaz...
 STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Yol kaldırılamıyor...
@@ -1618,6 +1658,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
@@ -1636,7 +1677,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}
@@ -1669,7 +1710,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}
@@ -1740,7 +1781,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
@@ -1798,6 +1839,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 -
@@ -1809,6 +1851,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
@@ -1846,6 +1890,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
@@ -1855,9 +1900,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
@@ -1914,6 +1964,7 @@
 STR_4829_REQUIRES                                               :{BLACK}İstenenler: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Geçen ayki üretim:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} (%{COMMA} tasindi)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Fabrikaya git
@@ -2028,8 +2079,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!
 
@@ -2109,7 +2159,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
@@ -2121,7 +2171,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
@@ -2137,20 +2187,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
@@ -2189,8 +2239,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)
@@ -2228,7 +2278,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
@@ -2540,7 +2590,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}
@@ -2561,6 +2611,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
@@ -2602,13 +2659,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ı
@@ -2618,6 +2677,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}
@@ -2649,12 +2711,14 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Her aracın kapasitesi
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Trenin kargo türlerine ayrilmis toplam kapasitesini göster
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Talimat listesi - seçmek için komutu tıklayın. CTRL + tıklama istasyona kaydırir
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Şimdiki talimatı atlayıp sıradakine geç
+STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Şimdiki talimatı atla ve sonrakine geç. CTRL ile tıklanırsa seçili talimata geçilir
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Seçili talimatı sil
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Seçili talimatı durmadan yap
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Seçili talimatın önüne ya da listenin sonuna komut ekle
 STR_8857_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Seçili talimatı yaparken tren dolana kadar beklesin
 STR_8858_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Seçili talimatı yaparken tren mutlaka yükünü boşaltsın
+STR_TIMETABLE_TOOLTIP                                           :{BLACK}Zaman çizelgesi - işaretlemek için bir talimata tıklayın.
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP                            :{BLACK}Geç kalma sayacını sıfırla, böylece araç zamanında gitmiş sayılacak
 STR_SERVICE_HINT                                                :{BLACK}Bakım gerekmiyorsa bunu atla
 STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Fiyat: {CURRENCY} Ağırlık: {WEIGHT_S}{}Hız: {VELOCITY}  Güç: {POWER}{}Bakım: {CURRENCY}/sene{}Kapasite: {CARGO}
 STR_885C_BROKEN_DOWN                                            :{RED}Bozuldu
@@ -2676,6 +2740,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}
@@ -2684,8 +2750,20 @@
 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_TOTAL_TIME                                        :Bu zaman çizelgesinin bitmesi {STRING} sürecek
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE                             :Bu zaman çizelgesinin bitmesi en az {STRING} sürecek (tamamı hesaplanmadı)
+STR_TIMETABLE_AUTOFILL                                          :{BLACK}Otomatik doldur
+STR_TIMETABLE_AUTOFILL_TOOLTIP                                  :{BLACK}Zaman tablosunu ilk seferde elde edilen değerleri kullanarak doldur
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Yolda araba var
@@ -2701,7 +2779,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...
@@ -2728,12 +2806,16 @@
 STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Araba listesi - bilgi için arabayı tıklayın
 STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Seçili arabayı al
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Fiyat: {CURRENCY}{}Hız: {VELOCITY}{}Bakım: {CURRENCY}/sene{}Kapasite: {CARGO}
+STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Kapasite: {LTBLUE}
+STR_BARE_CARGO                                                  :{CARGO}
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Arabayı adlandır
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Araba adlandırılamıyor...
 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...
@@ -2773,7 +2855,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...
@@ -2841,7 +2923,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}
@@ -2894,6 +2976,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ı!
@@ -3017,6 +3101,7 @@
 
 ### depot strings
 STR_DEPOT_SELL_CONFIRMATION_TEXT                                :{YELLOW}Garajdaki bütün araçları satmak üzeresiniz. Emin misiniz?
+STR_DEPOT_WRONG_DEPOT_TYPE                                      :Yanlış gar türü
 
 STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP                             :{BLACK}Gardaki tüm trenleri sat
 STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP                           :{BLACK}Garajdaki tüm arabaları sat
@@ -3205,6 +3290,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}
@@ -3235,6 +3328,24 @@
 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}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}İsim daha önce kullanılmamış olmalı
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Sonraki tabelaya git
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Önceki tabelaya git
 
 ########
--- a/src/lang/ukrainian.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/ukrainian.txt	Sat Jul 14 19:42: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}
@@ -301,7 +301,7 @@
 STR_00CD_3                                                      :{BLACK}3
 STR_00CE_4                                                      :{BLACK}4
 STR_00CF_5                                                      :{BLACK}5
-STR_00D0_NOTHING                                                :Нічого
+STR_00D0_NOTHING                                                :нічого
 STR_00D1_DARK_BLUE                                              :Темно-синій
 STR_00D2_PALE_GREEN                                             :Світло-зелений
 STR_00D3_PINK                                                   :Рожевий
@@ -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}
@@ -1160,7 +1160,10 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Доставляти вантаж за умови, що там приймається: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Будувати дуже довгі мости: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Наказувати прямувати в депо: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Будувати виробництво сировини: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}Ручний метод будівництва основної промисловості: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE        :нема
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL      :як інша промисловість
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :перспективний
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Подібна промисловість в одному місті: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Будувати промисловість однакового типу поруч: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Завжди показувати повну дату в рядку стану: {ORANGE}{STRING}
@@ -1229,7 +1232,19 @@
 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_ALWAYS_BUILD_INFRASTRUCTURE                  :{LTBLUE}Показувати засоби будівництва, коли нема відповідного транспорту: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Макс. поїздів у гравця: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Макс. авто у гравця: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Макс. літаків у гравця: {ORANGE}{STRING}
@@ -1312,7 +1327,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}
@@ -1352,7 +1367,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Ви дійсно бажаєте створити ландшафт випадково?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Багато різних міст
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Випадково розташувати міста по карті
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Багато різної промисловості
+STR_MANY_RANDOM_INDUSTRIES                                      :Багато різної промисловості
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Випадково розташувати промисловість по карті
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Неможливо створити промисловість...
 
@@ -1523,6 +1538,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}Multiplayer game lobby
@@ -1542,9 +1582,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}
@@ -1716,6 +1756,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}Спочатку потрібно знести залізничну станцію
 
 
@@ -1773,7 +1819,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}
@@ -1806,7 +1852,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}
@@ -1877,7 +1923,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                                                   :Позначення
@@ -1986,6 +2032,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}Зберегти гру
@@ -1995,9 +2042,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}Стерти вибрану збережену гру
@@ -2091,6 +2143,13 @@
 STR_4829_REQUIRES                                               :{BLACK}Потребує: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}Вантаж чекає на обробку:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES                                               :{BLACK}Продукція: {YELLOW}{STRING}
+STR_4828_PRODUCES                                               :{BLACK}Продукція: {YELLOW}{STRING}, {STRING}
+############ range for produces ends
+
 STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Вироблено за місяць:
 STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% перевезено)
 STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Показати в центрі екрану
@@ -2205,8 +2264,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!
 
@@ -2286,7 +2344,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}Колір
@@ -2298,7 +2356,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}Будівництво
@@ -2314,20 +2372,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}...кредит вже оплачено
@@ -2366,8 +2424,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}{}(Керівник)
@@ -2405,7 +2463,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% акцій цієї компанії
@@ -2717,7 +2775,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}
@@ -2738,6 +2796,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} депо
@@ -2779,13 +2844,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}Поїзд повинен стояти в депо
@@ -2795,6 +2862,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}задній потяг зажди слідує  follow its front counterpart!!!
 STR_8838_N_A                                                    :немає{SKIP}
@@ -2826,12 +2896,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}Пропустити це завдання, перейти до наступного
+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}Зламався
@@ -2853,6 +2927,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}
@@ -2861,8 +2937,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}Автоматично заповнювати розклад згiдно з даними першої подорожі
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}На шляху авто
@@ -2878,7 +2966,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}Неможливо продати авто...
@@ -2905,6 +2993,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}Неможливо назвати авто...
@@ -2952,7 +3042,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}Неможливо направити корабель в депо...
@@ -3020,7 +3110,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}
@@ -3073,6 +3163,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}Аварія!'НЛО' зіткнулось з авто!
@@ -3388,6 +3480,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}
@@ -3425,4 +3525,22 @@
 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}
+
+STR_NAME_MUST_BE_UNIQUE                                         :{WHITE}Ім'я має бути унікальним
+
+#### Improved sign GUI
+STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}Наступне позначення
+STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}Попереднє позначення
+
 ########
+
+STR_FUND_NEW_INDUSTRY                                           :{BLACK}Фінансувати
+STR_PROSPECT_NEW_INDUSTRY                                       :{BLACK}Огляд
+STR_BUILD_NEW_INDUSTRY                                          :{BLACK}Будувати
+STR_INDUSTRY_SELECTION_HINT                                     :{BLACK}Виберіть необхідне виробництво
--- a/src/lang/unfinished/afrikaans.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/unfinished/afrikaans.txt	Sat Jul 14 19:42: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}
@@ -485,7 +485,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Plaaslike raad: {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                                                    :1ste
@@ -979,7 +979,6 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Aflewer vrag na 'n stasie slegs as daar 'n aanvrag is:: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Toelaat opbou van baie lank bruge: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Toelaat gaan na depot opdrae: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Toelaat opbou van rumateriaal oplewering nywerheide: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Toelaat veelvout soortgelyke nywerheide per stad: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Nywerheide van die selfde tipe kan naby aan mekaar gebou word: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Altyd wys lang datum in die standbaan: {ORANGE}{STRING}
@@ -1093,7 +1092,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}
@@ -1125,7 +1124,7 @@
 
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Is jy seker jy wil 'n lukraake landeryke skep?
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Baie lukraak stede
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Baie luraak nyweheide
+STR_MANY_RANDOM_INDUSTRIES                                      :Baie luraak nyweheide
 STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Kan nie nywerheide ontwikkel nie...
 
 STR_LANDSCAPING_TOOLBAR_TIP                                     :{BLACK}Oppe die landargitekteur werktuigbaan om land te verhoog/verlaag, boome beplant, ens.
@@ -1299,9 +1298,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}
@@ -1490,7 +1489,7 @@
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Stede
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Gebou moet eers afgebreek word
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Populasie: {ORANGE}{COMMA}{BLACK}  Huise: {ORANGE}{COMMA}
@@ -1523,7 +1522,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Wys inlingting oor plaaslike raad
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} plaaslike raad
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Vervoer maatskappy graderings:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subsidiee
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Subsidiee op aanbod vir diens opneming:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} van {STRING} tot {STRING}
@@ -1590,7 +1589,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...boom reeds daar
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...plek ongeskik
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Kan nie boom hier beplant nie...
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...te veel tekens
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Kan nie teken hier plaas nie...
 STR_280A_SIGN                                                   :Teken
@@ -1697,9 +1696,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
@@ -1937,7 +1936,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}Nuwe Gesig
 STR_7005_COLOR_SCHEME                                           :{BLACK}Kleur Skema
@@ -1949,7 +1948,7 @@
 STR_700B_PRESIDENT_S_NAME                                       :Bestuurder se Naam
 STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Maatskappy naam kan nie verander word nie...
 STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Bestuurder se naam kan nie verander word nie...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finansies {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finansies {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Onkoste/Inkome
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Konstruksie
@@ -1965,20 +1964,20 @@
 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_7021                                                        :{COMPANY}{COMPANYNUM}
 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_7029_BORROW                                                 :{BLACK}Leen {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Terugbetaal {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN                                                    :{WHITE}Max Lening:  {BLACK}{CURRENCY}
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Leen {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Terugbetaal {SKIP}{SKIP}{CURRENCY}
 STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...maksimum vergun lening groote is {CURRENCY}
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Kan nie meer geld leen nie...
 STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...geen lening om terugbetaal te word
@@ -2017,8 +2016,8 @@
 STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Maatskappy prestasie graderings (maksimum gradering=1000)
 STR_7052_COMPANY_VALUES                                         :{WHITE}Maatskappy waarde
 STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Maatskappy Liga Tabel
-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}Vervoer maatsappy in moelikheid!
 STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} sal binnekort afverkoop of bankrospeler verklaar word tensy prestasie verbeter!
 STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Bestuurder)
@@ -2055,7 +2054,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
@@ -2365,7 +2364,7 @@
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Trein Depot
 STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Burgers herdenk . . .{}Eerste trein arriveer by {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Aanwyse)
+STR_8802_DETAILS                                                :{WHITE}{VEHICLE} (Aanwyse)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Trein in die pad
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2432,8 +2431,8 @@
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Diens
 STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Kan nie spoorweg voertuig bou nie...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Gebou: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Waarde: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Gebou: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
+STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   Waarde: {LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Laai / Aflaai
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}Trein moet binne in 'n depot gestop word
@@ -2473,7 +2472,6 @@
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Wys kapasiteite van elke voertuig
 STR_8852_SHOW_TOTAL_CARGO                                       :{BLACK}Wys totaale kapasitiet van trein, verdeel by vrag tipe
 STR_8852_ORDERS_LIST_CLICK_ON_ORDER                             :{BLACK}Opdraglys - kliek op 'n opdrag om dit te beklemtoon. CTRL + kliek senter op stasie
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Sprong die huidige opdrag, en begin die volgende
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Uitwis die beklemtoonde opdrag
 STR_8855_MAKE_THE_HIGHLIGHTED_ORDER                             :{BLACK}Maak die beklemtoonde opdrag deurgaande
 STR_8856_INSERT_A_NEW_ORDER_BEFORE                              :{BLACK}Invoeg 'n nuwe opdrag voor die beklemtoonde opdrag, of byvoeg na einde van lys
@@ -2520,7 +2518,7 @@
 STR_900E_MAX_SPEED                                              :{BLACK}Max. spoed: {LTBLUE}{VELOCITY}
 STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profyt die jaar: {LTBLUE}{CURRENCY}  (verlede jaar: {CURRENCY})
 STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Deeglikheid: {LTBLUE}{COMMA}%  {BLACK}Oponthoude sedert laaste diens: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Gebou: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Gebou: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
 STR_9012_CAPACITY                                               :{BLACK}Kapasitiet: {LTBLUE}{CARGO}
 STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...moet gestop binne 'n pad voertuig depot wees
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Kan nie pad voertuig verkoop nie
@@ -2590,7 +2588,7 @@
 STR_9813_MAX_SPEED                                              :{BLACK}Max. spoed: {LTBLUE}{VELOCITY}
 STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profyt die jaar: {LTBLUE}{CURRENCY}  (verlede jaar: {CURRENCY})
 STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Deeglikheid: {LTBLUE}{COMMA}%  {BLACK}Oponthoude sedert laaste diens: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Gebou: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Gebou: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
 STR_9817_CAPACITY                                               :{BLACK}Kapasitiet: {LTBLUE}{CARGO}
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Kan nie skip stop/aanvang nie
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Kan nie skip na depot stuur nie...
@@ -2658,7 +2656,7 @@
 STR_A00E_MAX_SPEED                                              :{BLACK}Max. spoed: {LTBLUE}{VELOCITY}
 STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Profyt die jaar: {LTBLUE}{CURRENCY}  (verlede jaar: {CURRENCY})
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Deeglikheid: {LTBLUE}{COMMA}%  {BLACK}Oponthoude sedert laaste diens: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Gebou: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE                                            :{LTBLUE}{ENGINE}{BLACK}   Gebou: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Kan nie vlietuig na hangar stuur nie...
 STR_HEADING_FOR_HANGAR                                          :{ORANGE}Op pad na {STATION} Hangar
 STR_HEADING_FOR_HANGAR_VEL                                      :{ORANGE}Op pad na {STATION} Hangar, {VELOCITY}
--- a/src/lang/unfinished/croatian.txt	Sat Jun 02 19:59:29 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2911 +0,0 @@
-##name Croatian
-##ownname Hrvatski
-##isocode hr_HR
-##plural 6
-##gender male female middle
-
-##id 0x0000
-STR_NULL                                                        :
-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_EMPTY                                                       :
-STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Potrebna ravna površina
-STR_0008_WAITING                                                :{BLACK}Čekanje: {WHITE}{STRING}
-STR_0009                                                        :{WHITE}{CARGO}
-STR_000A_EN_ROUTE_FROM                                          :{WHITE}{CARGO}{YELLOW}  (na putu od
-STR_000B                                                        :{YELLOW}{STATION})
-STR_000C_ACCEPTS                                                :{BLACK}Prihvaća: {WHITE}
-STR_000D_ACCEPTS                                                :{BLACK}Prihvaća: {GOLD}
-STR_000E                                                        :
-STR_000F_PASSENGERS                                             :Putnici
-STR_0010_COAL                                                   :Ugljen
-STR_0011_MAIL                                                   :Pošta
-STR_0012_OIL                                                    :Nafta
-STR_0013_LIVESTOCK                                              :Domaće životinje
-STR_0014_GOODS                                                  :Robe
-STR_0015_GRAIN                                                  :Žito
-STR_0016_WOOD                                                   :Drvo
-STR_0017_IRON_ORE                                               :Željezo
-STR_0018_STEEL                                                  :Čelik
-STR_0019_VALUABLES                                              :Dragocjenosti
-STR_001A_COPPER_ORE                                             :Bakar
-STR_001B_MAIZE                                                  :Kukuruz
-STR_001C_FRUIT                                                  :Voće
-STR_001D_DIAMONDS                                               :Dijamanti
-STR_001E_FOOD                                                   :Hrana
-STR_001F_PAPER                                                  :Papir
-STR_0020_GOLD                                                   :Zlato
-STR_0021_WATER                                                  :Voda
-STR_0022_WHEAT                                                  :Pšenica
-STR_0023_RUBBER                                                 :Guma
-STR_0024_SUGAR                                                  :Šećer
-STR_0025_TOYS                                                   :Igračke
-STR_0026_CANDY                                                  :Slatkiši
-STR_0027_COLA                                                   :Cola
-STR_0028_COTTON_CANDY                                           :Šećerna vuna
-STR_0029_BUBBLES                                                :Baloni
-STR_002A_TOFFEE                                                 :Mliječne karamele
-STR_002B_BATTERIES                                              :Baterije
-STR_002C_PLASTIC                                                :Plastika
-STR_002D_FIZZY_DRINKS                                           :Gazirana pića
-STR_002E                                                        :
-STR_002F_PASSENGER                                              :Putnik
-STR_0030_COAL                                                   :Ugljen
-STR_0031_MAIL                                                   :Pošta
-STR_0032_OIL                                                    :Nafta
-STR_0033_LIVESTOCK                                              :Domaće životinje
-STR_0034_GOODS                                                  :Robe
-STR_0035_GRAIN                                                  :Žito
-STR_0036_WOOD                                                   :Drvo
-STR_0037_IRON_ORE                                               :Željezo
-STR_0038_STEEL                                                  :Čelik
-STR_0039_VALUABLES                                              :Dragocjenosti
-STR_003A_COPPER_ORE                                             :Bakar
-STR_003B_MAIZE                                                  :Kukuruz
-STR_003C_FRUIT                                                  :Voće
-STR_003D_DIAMOND                                                :Dijamant
-STR_003E_FOOD                                                   :Hrana
-STR_003F_PAPER                                                  :Papir
-STR_0040_GOLD                                                   :Zlato
-STR_0041_WATER                                                  :Voda
-STR_0042_WHEAT                                                  :Pšenica
-STR_0043_RUBBER                                                 :Guma
-STR_0044_SUGAR                                                  :Šećer
-STR_0045_TOY                                                    :Igračka
-STR_0046_CANDY                                                  :Slatkiš
-STR_0047_COLA                                                   :Cola
-STR_0048_COTTON_CANDY                                           :Šećerna vuna
-STR_0049_BUBBLE                                                 :Balon
-STR_004A_TOFFEE                                                 :Mliječna karamela
-STR_004B_BATTERY                                                :Baterija
-STR_004C_PLASTIC                                                :Plastika
-STR_004D_FIZZY_DRINK                                            :Gazirano piće
-STR_QUANTITY_NOTHING                                            :
-STR_QUANTITY_PASSENGERS                                         :{COMMA} putni{P k ka ka}
-STR_QUANTITY_COAL                                               :{WEIGHT} ugljena
-STR_QUANTITY_MAIL                                               :{COMMA} poštansk{P a e ih} vreć{P a e a}
-STR_QUANTITY_OIL                                                :{VOLUME} nafte
-STR_QUANTITY_LIVESTOCK                                          :{COMMA} grla {P o a a} stoke
-STR_QUANTITY_GOODS                                              :{COMMA} sanduk{P "" a a} robe
-STR_QUANTITY_GRAIN                                              :{WEIGHT} žita
-STR_QUANTITY_WOOD                                               :{WEIGHT} drveta
-STR_QUANTITY_IRON_ORE                                           :{WEIGHT} željeza
-STR_QUANTITY_STEEL                                              :{WEIGHT} čelika
-STR_QUANTITY_VALUABLES                                          :{COMMA} vreć{P a e a} s vrijednostima
-STR_QUANTITY_COPPER_ORE                                         :{WEIGHT} bakra
-STR_QUANTITY_MAIZE                                              :{WEIGHT} kukuruza
-STR_QUANTITY_FRUIT                                              :{WEIGHT} voća
-STR_QUANTITY_DIAMONDS                                           :{COMMA} vreć{P a e a} dijamanata
-STR_QUANTITY_FOOD                                               :{WEIGHT} hrane
-STR_QUANTITY_PAPER                                              :{WEIGHT} papira
-STR_QUANTITY_GOLD                                               :{COMMA} vreć{P a e a} zlata
-STR_QUANTITY_WATER                                              :{VOLUME} vode
-STR_QUANTITY_WHEAT                                              :{WEIGHT} pšenice
-STR_QUANTITY_RUBBER                                             :{VOLUME} gume
-STR_QUANTITY_SUGAR                                              :{WEIGHT} šećera
-STR_QUANTITY_TOYS                                               :{COMMA} igrač{P ka ke aka}
-STR_QUANTITY_SWEETS                                             :{COMMA} vreć{P a e a} slatkiša
-STR_QUANTITY_COLA                                               :{VOLUME} cole
-STR_QUANTITY_CANDYFLOSS                                         :{WEIGHT} šećerne vune
-STR_QUANTITY_BUBBLES                                            :{COMMA} balon{P "" a a}
-STR_QUANTITY_TOFFEE                                             :{WEIGHT} mliječne karamele
-STR_QUANTITY_BATTERIES                                          :{COMMA} baterij{P a e a}
-STR_QUANTITY_PLASTIC                                            :{VOLUME} plastike
-STR_QUANTITY_FIZZY_DRINKS                                       :{COMMA} Gaziran{P o a a} pić{P e a a}
-STR_ABBREV_NOTHING                                              :
-STR_ABBREV_PASSENGERS                                           :{TINYFONT}PU
-STR_ABBREV_COAL                                                 :{TINYFONT}UG
-STR_ABBREV_MAIL                                                 :{TINYFONT}PT
-STR_ABBREV_OIL                                                  :{TINYFONT}NF
-STR_ABBREV_LIVESTOCK                                            :{TINYFONT}DŽ
-STR_ABBREV_GOODS                                                :{TINYFONT}AU
-STR_ABBREV_GRAIN                                                :{TINYFONT}ŽT
-STR_ABBREV_WOOD                                                 :{TINYFONT}DV
-STR_ABBREV_IRON_ORE                                             :{TINYFONT}FE
-STR_ABBREV_STEEL                                                :{TINYFONT}ČL
-STR_ABBREV_VALUABLES                                            :{TINYFONT}VR
-STR_ABBREV_COPPER_ORE                                           :{TINYFONT}CU
-STR_ABBREV_MAIZE                                                :{TINYFONT}KK
-STR_ABBREV_FRUIT                                                :{TINYFONT}VO
-STR_ABBREV_DIAMONDS                                             :{TINYFONT}DM
-STR_ABBREV_FOOD                                                 :{TINYFONT}HN
-STR_ABBREV_PAPER                                                :{TINYFONT}PR
-STR_ABBREV_GOLD                                                 :{TINYFONT}AU
-STR_ABBREV_WATER                                                :{TINYFONT}VO
-STR_ABBREV_WHEAT                                                :{TINYFONT}ŽT
-STR_ABBREV_RUBBER                                               :{TINYFONT}GM
-STR_ABBREV_SUGAR                                                :{TINYFONT}ŠĆ
-STR_ABBREV_TOYS                                                 :{TINYFONT}IG
-STR_ABBREV_SWEETS                                               :{TINYFONT}SL
-STR_ABBREV_COLA                                                 :{TINYFONT}CL
-STR_ABBREV_CANDYFLOSS                                           :{TINYFONT}ŠV
-STR_ABBREV_BUBBLES                                              :{TINYFONT}BL
-STR_ABBREV_TOFFEE                                               :{TINYFONT}MČ
-STR_ABBREV_BATTERIES                                            :{TINYFONT}BA
-STR_ABBREV_PLASTIC                                              :{TINYFONT}PL
-STR_ABBREV_FIZZY_DRINKS                                         :{TINYFONT}GP
-STR_ABBREV_NONE                                                 :{TINYFONT}NI
-STR_ABBREV_ALL                                                  :{TINYFONT}SVE
-STR_00AE                                                        :{WHITE}{DATE_SHORT}
-STR_00AF                                                        :{WHITE}{DATE_LONG}
-STR_00B0_MAP                                                    :{WHITE}Karta - {STRING}
-STR_00B1_GAME_OPTIONS                                           :{WHITE}Opcije za igru
-STR_00B2_MESSAGE                                                :{YELLOW}Poruka
-STR_00B3_MESSAGE_FROM                                           :{YELLOW}Poruka od {STRING}
-STR_POPUP_CAUTION_CAPTION                                       :{WHITE}Oprez!
-STR_00B4_CAN_T_DO_THIS                                          :{WHITE}To nije moguće napraviti....
-STR_00B5_CAN_T_CLEAR_THIS_AREA                                  :{WHITE}Nije moguće očistiti ovo područje....
-STR_00B6_ORIGINAL_COPYRIGHT                                     :{BLACK}Izvorno autorsko pravo {COPYRIGHT} 1995 Chris Sawyer, sva prava pridržana
-STR_00B7_VERSION                                                :{BLACK}OpenTTD verzija {REV}
-STR_00BA_COPYRIGHT_OPENTTD                                      :{BLACK}OpenTTD {COPYRIGHT}2002-2006 tim OpenTTD
-STR_TRANSLATED_BY                                               :{BLACK}  Prevoditelj(i) -
-
-STR_00C5                                                        :{BLACK}{CROSS}
-STR_00C6                                                        :{SILVER}{CROSS}
-STR_00C7_QUIT                                                   :{WHITE}Prekid
-STR_00C8_YES                                                    :{BLACK}Da
-STR_00C9_NO                                                     :{BLACK}Ne
-STR_00CA_ARE_YOU_SURE_YOU_WANT_TO                               :{YELLOW}Jesi li siguran da želiš napustiti ovu igru i vratiti se na {STRING}?
-STR_00CB_1                                                      :{BLACK}1
-STR_00CC_2                                                      :{BLACK}2
-STR_00CD_3                                                      :{BLACK}3
-STR_00CE_4                                                      :{BLACK}4
-STR_00CF_5                                                      :{BLACK}5
-STR_00D0_NOTHING                                                :Ništa
-STR_00D1_DARK_BLUE                                              :Tamnoplava
-STR_00D2_PALE_GREEN                                             :Blijedozelena
-STR_00D3_PINK                                                   :Ružičasta
-STR_00D4_YELLOW                                                 :Žuta
-STR_00D5_RED                                                    :Crvena
-STR_00D6_LIGHT_BLUE                                             :Svijetloplava
-STR_00D7_GREEN                                                  :Zelena
-STR_00D8_DARK_GREEN                                             :Tamnozelena
-STR_00D9_BLUE                                                   :Plava
-STR_00DA_CREAM                                                  :Kremasta
-STR_00DB_MAUVE                                                  :Svijetloljubičasta
-STR_00DC_PURPLE                                                 :Ljubičasta
-STR_00DD_ORANGE                                                 :Narančasta
-STR_00DE_BROWN                                                  :Smeđa
-STR_00DF_GREY                                                   :Siva
-STR_00E0_WHITE                                                  :Bijela
-STR_00E1_TOO_MANY_VEHICLES_IN_GAME                              :{WHITE}Previše vozila u igri
-STR_00E2                                                        :{BLACK}{COMMA}
-STR_00E3                                                        :{RED}{COMMA}
-STR_00E4_LOCATION                                               :{BLACK}Lokacija
-STR_00E5_CONTOURS                                               :Obrisi
-STR_00E6_VEHICLES                                               :Vozila
-STR_00E7_INDUSTRIES                                             :Industrije
-STR_00E8_ROUTES                                                 :Trase
-STR_00E9_VEGETATION                                             :Vegetacija
-STR_00EA_OWNERS                                                 :Vlasnici
-STR_00EB_ROADS                                                  :{BLACK}{TINYFONT}Ceste
-STR_00EC_RAILROADS                                              :{BLACK}{TINYFONT}Željeznice
-STR_00ED_STATIONS_AIRPORTS_DOCKS                                :{BLACK}{TINYFONT}Stanice/Zračne luke/Pristaništa
-STR_00EE_BUILDINGS_INDUSTRIES                                   :{BLACK}{TINYFONT}Građevine/Industrije
-STR_00EF_VEHICLES                                               :{BLACK}{TINYFONT}Vozila
-STR_00F0_100M                                                   :{BLACK}{TINYFONT}100m
-STR_00F1_200M                                                   :{BLACK}{TINYFONT}200m
-STR_00F2_300M                                                   :{BLACK}{TINYFONT}300m
-STR_00F3_400M                                                   :{BLACK}{TINYFONT}400m
-STR_00F4_500M                                                   :{BLACK}{TINYFONT}500m
-STR_00F5_TRAINS                                                 :{BLACK}{TINYFONT}Vlakovi
-STR_00F6_ROAD_VEHICLES                                          :{BLACK}{TINYFONT}Cestovna vozila
-STR_00F7_SHIPS                                                  :{BLACK}{TINYFONT}Brodovi
-STR_00F8_AIRCRAFT                                               :{BLACK}{TINYFONT}Zrakoplov
-STR_00F9_TRANSPORT_ROUTES                                       :{BLACK}{TINYFONT}Prijevozne trase
-STR_00FA_COAL_MINE                                              :{BLACK}{TINYFONT}Rudnik ugljena
-STR_00FB_POWER_STATION                                          :{BLACK}{TINYFONT}Elektrana
-STR_00FC_FOREST                                                 :{BLACK}{TINYFONT}Šuma
-STR_00FD_SAWMILL                                                :{BLACK}{TINYFONT}Pilana
-STR_00FE_OIL_REFINERY                                           :{BLACK}{TINYFONT}Naftna rafinerija
-STR_00FF_FARM                                                   :{BLACK}{TINYFONT}Farma
-STR_0100_FACTORY                                                :{BLACK}{TINYFONT}Tvornica
-STR_0101_PRINTING_WORKS                                         :{BLACK}{TINYFONT}Tiskara
-STR_0102_OIL_WELLS                                              :{BLACK}{TINYFONT}Naftna polja
-STR_0103_IRON_ORE_MINE                                          :{BLACK}{TINYFONT}Rudnik željeza
-STR_0104_STEEL_MILL                                             :{BLACK}{TINYFONT}Čeličana
-STR_0105_BANK                                                   :{BLACK}{TINYFONT}Banka
-STR_0106_PAPER_MILL                                             :{BLACK}{TINYFONT}Tvornica papira
-STR_0107_GOLD_MINE                                              :{BLACK}{TINYFONT}Rudnik zlata
-STR_0108_FOOD_PROCESSING_PLANT                                  :{BLACK}{TINYFONT}Tvornica hrane
-STR_0109_DIAMOND_MINE                                           :{BLACK}{TINYFONT}Rudnik dijamanata
-STR_010A_COPPER_ORE_MINE                                        :{BLACK}{TINYFONT}Rudnik bakra
-STR_010B_FRUIT_PLANTATION                                       :{BLACK}{TINYFONT}Plantaža voća
-STR_010C_RUBBER_PLANTATION                                      :{BLACK}{TINYFONT}Plantaža gume
-STR_010D_WATER_SUPPLY                                           :{BLACK}{TINYFONT}Izvor vode
-STR_010E_WATER_TOWER                                            :{BLACK}{TINYFONT}Vodotoranj
-STR_010F_LUMBER_MILL                                            :{BLACK}{TINYFONT}Pilana
-STR_0110_COTTON_CANDY_FOREST                                    :{BLACK}{TINYFONT}Šuma šećerne vune
-STR_0111_CANDY_FACTORY                                          :{BLACK}{TINYFONT}Tvornica slatkiša
-STR_0112_BATTERY_FARM                                           :{BLACK}{TINYFONT}Tvornica baterija
-STR_0113_COLA_WELLS                                             :{BLACK}{TINYFONT}Izvori Cole
-STR_0114_TOY_SHOP                                               :{BLACK}{TINYFONT}Trgovina igračkama
-STR_0115_TOY_FACTORY                                            :{BLACK}{TINYFONT}Tvornica igračaka
-STR_0116_PLASTIC_FOUNTAINS                                      :{BLACK}{TINYFONT}Izvori plastike
-STR_0117_FIZZY_DRINK_FACTORY                                    :{BLACK}{TINYFONT}Tvornica gaziranih pića
-STR_0118_BUBBLE_GENERATOR                                       :{BLACK}{TINYFONT}Generator balona
-STR_0119_TOFFEE_QUARRY                                          :{BLACK}{TINYFONT}Iskop mliječne karamele
-STR_011A_SUGAR_MINE                                             :{BLACK}{TINYFONT}Šećerana
-STR_011B_RAILROAD_STATION                                       :{BLACK}{TINYFONT}Željeznička stanica
-STR_011C_TRUCK_LOADING_BAY                                      :{BLACK}{TINYFONT}Kamionski terminal
-STR_011D_BUS_STATION                                            :{BLACK}{TINYFONT}Autobusn stanica
-STR_011E_AIRPORT_HELIPORT                                       :{BLACK}{TINYFONT}Aerodrom/Heliodrom
-STR_011F_DOCK                                                   :{BLACK}{TINYFONT}Pristanište
-STR_0120_ROUGH_LAND                                             :{BLACK}{TINYFONT}Surova zemlja
-STR_0121_GRASS_LAND                                             :{BLACK}{TINYFONT}Travnjak
-STR_0122_BARE_LAND                                              :{BLACK}{TINYFONT}Ogoljena zemlja
-STR_0123_FIELDS                                                 :{BLACK}{TINYFONT}Polja
-STR_0124_TREES                                                  :{BLACK}{TINYFONT}Stabla
-STR_0125_ROCKS                                                  :{BLACK}{TINYFONT}Stijenje
-STR_0126_WATER                                                  :{BLACK}{TINYFONT}Voda
-STR_0127_NO_OWNER                                               :{BLACK}{TINYFONT}Bez vlasnika
-STR_0128_TOWNS                                                  :{BLACK}{TINYFONT}Gradovi
-STR_0129_INDUSTRIES                                             :{BLACK}{TINYFONT}Industrije
-STR_012A_DESERT                                                 :{BLACK}{TINYFONT}Pustinja
-STR_012B_SNOW                                                   :{BLACK}{TINYFONT}Snijeg
-STR_012C_MESSAGE                                                :{WHITE}Poruka
-STR_012D                                                        :{WHITE}{STRING}
-STR_012E_CANCEL                                                 :{BLACK}Odustani
-STR_012F_OK                                                     :{BLACK}OK
-STR_0130_RENAME                                                 :{BLACK}Preimenuj
-STR_0131_TOO_MANY_NAMES_DEFINED                                 :{WHITE}Previše definiranih imena
-STR_0132_CHOSEN_NAME_IN_USE_ALREADY                             :{WHITE}Odabrano ime već se koristi
-
-STR_0133_WINDOWS                                                :Windows
-STR_0134_UNIX                                                   :Unix
-STR_0135_OSX                                                    :OS X
-STR_OSNAME_BEOS                                                 :BeOS
-STR_OSNAME_MORPHOS                                              :MorphOS
-STR_OSNAME_AMIGAOS                                              :AmigaOS
-STR_OSNAME_OS2                                                  :OS/2
-STR_OSNAME_SUNOS                                                :SunOS
-
-STR_013B_OWNED_BY                                               :{WHITE}...u vlasništvu {STRING}
-STR_013C_CARGO                                                  :{BLACK}Teret
-STR_013D_INFORMATION                                            :{BLACK}Informacije
-STR_013E_CAPACITIES                                             :{BLACK}Nosivosti
-STR_013E_TOTAL_CARGO                                            :{BLACK}Ukupni teret
-STR_013F_CAPACITY                                               :{BLACK}Nosivost: {LTBLUE}{CARGO}
-STR_CAPACITY_MULT                                               :{BLACK}Nosivost: {LTBLUE}{CARGO} (x{NUM})
-STR_013F_TOTAL_CAPACITY_TEXT                                    :{BLACK}Ukupna nosivost ovoga vlaka:
-STR_013F_TOTAL_CAPACITY                                         :{LTBLUE}- {CARGO} ({SHORTCARGO})
-STR_TOTAL_CAPACITY_MULT                                         :{LTBLUE}- {CARGO} ({SHORTCARGO}) (x{NUM})
-STR_0140_NEW_GAME                                               :{BLACK}Nova igra
-STR_0141_LOAD_GAME                                              :{BLACK}Učitaj igru
-STR_SINGLE_PLAYER                                               :{BLACK}Jedan igrač
-STR_MULTIPLAYER                                                 :{BLACK}Više igrača
-STR_SCENARIO_EDITOR                                             :{BLACK}Editor scenarija
-
-STR_64                                                          :64
-STR_128                                                         :128
-STR_256                                                         :256
-STR_512                                                         :512
-STR_1024                                                        :1024
-STR_2048                                                        :2048
-STR_MAPSIZE                                                     :{BLACK}Veličina karte:
-STR_BY                                                          :{BLACK}*
-STR_0148_GAME_OPTIONS                                           :{BLACK}Postavke igre
-
-STR_0150_SOMEONE                                                :netko{SKIP}{SKIP}
-STR_0151_MAP_OF_WORLD                                           :Karta svijeta
-STR_0152_TOWN_DIRECTORY                                         :Popis gradova
-STR_0153_SUBSIDIES                                              :Subvencije
-
-STR_UNITS_IMPERIAL                                              :Imperijalni
-STR_UNITS_METRIC                                                :Metrički
-STR_UNITS_SI                                                    :SI
-
-STR_UNITS_VELOCITY_IMPERIAL                                     :{COMMA} mph
-STR_UNITS_VELOCITY_METRIC                                       :{COMMA} km/h
-STR_UNITS_VELOCITY_SI                                           :{COMMA} m/s
-
-STR_UNITS_POWER_IMPERIAL                                        :{COMMA}KS
-STR_UNITS_POWER_METRIC                                          :{COMMA}KS
-STR_UNITS_POWER_SI                                              :{COMMA}kW
-
-STR_UNITS_WEIGHT_SHORT_IMPERIAL                                 :{COMMA}t
-STR_UNITS_WEIGHT_SHORT_METRIC                                   :{COMMA}t
-STR_UNITS_WEIGHT_SHORT_SI                                       :{COMMA}kg
-
-STR_UNITS_WEIGHT_LONG_IMPERIAL                                  :{COMMA} britansk{P a e ih} ton{P a e a}
-STR_UNITS_WEIGHT_LONG_METRIC                                    :{COMMA} ton{P a e a}
-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} galon{P "" a a}
-STR_UNITS_VOLUME_LONG_METRIC                                    :{COMMA} lit{P ra re ara}
-STR_UNITS_VOLUME_LONG_SI                                        :{COMMA} m³
-
-STR_UNITS_FORCE_IMPERIAL                                        :{COMMA}x10³ lbf
-STR_UNITS_FORCE_METRIC                                          :{COMMA} sila britanske tone
-STR_UNITS_FORCE_SI                                              :{COMMA} kN
-
-############ range for menu starts
-STR_0154_OPERATING_PROFIT_GRAPH                                 :Graf dobiti od poslovanja
-STR_0155_INCOME_GRAPH                                           :Graf prihoda
-STR_0156_DELIVERED_CARGO_GRAPH                                  :Graf isporučenog tereta
-STR_0157_PERFORMANCE_HISTORY_GRAPH                              :Graf povijesti učinka
-STR_0158_COMPANY_VALUE_GRAPH                                    :Graf vrijednosti tvrtke
-STR_0159_CARGO_PAYMENT_RATES                                    :Iznosi plaćanja tereta
-STR_015A_COMPANY_LEAGUE_TABLE                                   :Tablica lige tvrtki
-STR_PERFORMANCE_DETAIL_MENU                                     :Detaljna ocjena učinka
-############ range for menu ends
-
-STR_015B_OPENTTD                                                :{WHITE}O OpenTTD-u
-STR_015C_SAVE_GAME                                              :Spremi igru
-STR_015D_LOAD_GAME                                              :Učitaj igru
-STR_015E_QUIT_GAME                                              :Napusti igru
-STR_015F_QUIT                                                   :Izlaz
-STR_ABANDON_GAME_QUERY                                          :{YELLOW}Jeste li sigurni da želite napustiti ovu igru?
-STR_0161_QUIT_GAME                                              :{WHITE}Napusti igru
-STR_SORT_ORDER_TIP                                              :{BLACK}Izaberi način sortiranja (silazno/uzlazno)
-STR_SORT_CRITERIA_TIP                                           :{BLACK}Izaberi kriterij za sortiranje
-STR_SORT_BY                                                     :{BLACK}Sortiraj prema
-
-STR_SORT_BY_POPULATION                                          :{BLACK}Stanovnici
-STR_SORT_BY_PRODUCTION                                          :{BLACK}Produkcija
-STR_SORT_BY_TYPE                                                :{BLACK}Vrsta
-STR_SORT_BY_TRANSPORTED                                         :{BLACK}Prevezeno
-STR_SORT_BY_NAME                                                :{BLACK}Ime
-STR_SORT_BY_DROPDOWN_NAME                                       :Ime
-STR_SORT_BY_DATE                                                :{BLACK}Datum
-STR_SORT_BY_NUMBER                                              :Broj
-STR_SORT_BY_PROFIT_LAST_YEAR                                    :Zarada prošle godine
-STR_SORT_BY_PROFIT_THIS_YEAR                                    :Zarada ove godine
-STR_SORT_BY_AGE                                                 :Godine
-STR_SORT_BY_RELIABILITY                                         :Pouzdanost
-STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE                        :Totalna nosivost po vrsti tereta
-STR_SORT_BY_MAX_SPEED                                           :Maksimalna brzina
-STR_SORT_BY_MODEL                                               :Model
-STR_SORT_BY_VALUE                                               :Vrijednost
-STR_SORT_BY_FACILITY                                            :Vrsta stanice
-STR_SORT_BY_WAITING                                             :Vrijednost tereta koji čeka
-STR_SORT_BY_RATING_MAX                                          :Ocjena tereta
-STR_ENGINE_SORT_COST                                            :Trošak
-STR_ENGINE_SORT_POWER                                           :Snaga
-STR_ENGINE_SORT_INTRO_DATE                                      :Datum početka
-STR_ENGINE_SORT_RUNNING_COST                                    :Trošak uporabe
-STR_ENGINE_SORT_POWER_VS_RUNNING_COST                           :Trošak snage/uporabe
-STR_ENGINE_SORT_CARGO_CAPACITY                                  :Nosivost tereta
-STR_NO_WAITING_CARGO                                            :{BLACK}Nijedna vrsta tereta ne čeka
-STR_SELECT_ALL_FACILITIES                                       :{BLACK}Izaberi sva sredstva
-STR_SELECT_ALL_TYPES                                            :{BLACK}Izaberi sve vrste tereta (uključujući i teret koji ne čeka)
-STR_AVAILABLE_TRAINS                                            :{BLACK}Dostupni vlakovi
-STR_AVAILABLE_ROAD_VEHICLES                                     :{BLACK}Dostupna vozila
-STR_AVAILABLE_SHIPS                                             :{BLACK}Dostupni brodovi
-STR_AVAILABLE_AIRCRAFT                                          :{BLACK}Dostupni zrakoplovi
-STR_AVAILABLE_ENGINES_TIP                                       :{BLACK}Pogledaj popis dostupnih dizajna motora za ovu vrstu vozila.
-STR_MANAGE_LIST                                                 :{BLACK}Uredi popis
-STR_MANAGE_LIST_TIP                                             :{BLACK}Pošalji upute svim vozilima na ovoj listi
-STR_REPLACE_VEHICLES                                            :Zamjeni vozila
-STR_SEND_TRAIN_TO_DEPOT                                         :Pošalji u spremište
-STR_SEND_ROAD_VEHICLE_TO_DEPOT                                  :
-STR_SEND_SHIP_TO_DEPOT                                          :
-STR_SEND_AIRCRAFT_TO_HANGAR                                     :Pošalji u hangar
-STR_SEND_FOR_SERVICING                                          :Pošalji na servis
-
-############ range for months starts
-STR_0162_JAN                                                    :Sij
-STR_0163_FEB                                                    :Velj
-STR_0164_MAR                                                    :Ožu
-STR_0165_APR                                                    :Tra
-STR_0166_MAY                                                    :Svi
-STR_0167_JUN                                                    :Lip
-STR_0168_JUL                                                    :Srp
-STR_0169_AUG                                                    :Kol
-STR_016A_SEP                                                    :Ruj
-STR_016B_OCT                                                    :Lis
-STR_016C_NOV                                                    :Stu
-STR_016D_DEC                                                    :Pro
-############ range for months ends
-
-STR_016E                                                        :{TINYFONT}{STRING}{} {STRING}
-STR_016F                                                        :{TINYFONT}{STRING}{} {STRING}{}{NUM}
-STR_0170                                                        :{TINYFONT}{STRING}-
-STR_0171_PAUSE_GAME                                             :{BLACK}Zaustavi igru
-STR_0172_SAVE_GAME_ABANDON_GAME                                 :{BLACK}Spremi igru, napusti igru, prekini igru
-STR_0173_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Prikaži popis stanica u vlasništvu tvrke
-STR_0174_DISPLAY_MAP                                            :{BLACK}Prikaži kartu
-STR_0175_DISPLAY_MAP_TOWN_DIRECTORY                             :{BLACK}Prikaži kartu, popis gradova
-STR_0176_DISPLAY_TOWN_DIRECTORY                                 :{BLACK}Prikaži popis gradova
-STR_0177_DISPLAY_COMPANY_FINANCES                               :{BLACK}Prikaži financijske podatke tvrke
-STR_0178_DISPLAY_COMPANY_GENERAL                                :{BLACK}Prikaži opće podatke tvrtke
-STR_0179_DISPLAY_GRAPHS                                         :{BLACK}Prikaži grafove
-STR_017A_DISPLAY_COMPANY_LEAGUE                                 :{BLACK}Prikaži tablicu lige tvrtki
-STR_017B_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Prikaži popis vlakova u posjedu tvrtke
-STR_017C_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Prikaži popis cestovnih vozila u posjedu tvrke
-STR_017D_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Prikaž popis brodova u posjedu tvrke
-STR_017E_DISPLAY_LIST_OF_COMPANY                                :{BLACK}Prikaži popis zrakoplova u posjedu tvrtke
-STR_017F_ZOOM_THE_VIEW_IN                                       :{BLACK}Približi pogled
-STR_0180_ZOOM_THE_VIEW_OUT                                      :{BLACK}Udalji pogled
-STR_0181_BUILD_RAILROAD_TRACK                                   :{BLACK}Izgradi željezničku prugu
-STR_0182_BUILD_ROADS                                            :{BLACK}Izgradi ceste
-STR_0183_BUILD_SHIP_DOCKS                                       :{BLACK}Izgradi pristaništa za brodove
-STR_0184_BUILD_AIRPORTS                                         :{BLACK}Izgradi zračne luke
-STR_0185_PLANT_TREES_PLACE_SIGNS                                :{BLACK}Posadi drveće, postavi znakove itd.
-STR_0186_LAND_BLOCK_INFORMATION                                 :{BLACK}Podaci o zemlji
-STR_0187_OPTIONS                                                :{BLACK}Postavke
-STR_0188                                                        :{BLACK}{SMALLUPARROW}
-STR_0189                                                        :{BLACK}{SMALLDOWNARROW}
-STR_018A_CAN_T_CHANGE_SERVICING                                 :{WHITE}Nije moguće promijeniti servisni interval...
-STR_018B_CLOSE_WINDOW                                           :{BLACK}Zatvori prozor
-STR_018C_WINDOW_TITLE_DRAG_THIS                                 :{BLACK}Naslov prozora - povuci ovo za micanje prozora
-STR_STICKY_BUTTON                                               :{BLACK}Označi ovaj prozor kao nezatvoriv kad se rabi tipka 'Zatvori sve prozore'
-STR_RESIZE_BUTTON                                               :{BLACK}Pritisni i povuci za promjenu veličine prozora
-STR_SAVELOAD_HOME_BUTTON                                        :{BLACK}Pritisni ovdje za prelazak u trenutnu pretpostavljenu mapu za snimanje/učitavanje
-STR_018D_DEMOLISH_BUILDINGS_ETC                                 :{BLACK}Uništi građevine itd. na kvadratu zemlje
-STR_018E_LOWER_A_CORNER_OF_LAND                                 :{BLACK}Snizi vrh kvadrata zemlje
-STR_018F_RAISE_A_CORNER_OF_LAND                                 :{BLACK}Povisi vrh kvadrata zemlje
-STR_0190_SCROLL_BAR_SCROLLS_LIST                                :{BLACK}Pomična traka - lista gore/dolje
-STR_0191_SHOW_LAND_CONTOURS_ON_MAP                              :{BLACK}Prikaži obrise zemlje na karti
-STR_0192_SHOW_VEHICLES_ON_MAP                                   :{BLACK}Prikaži vozila na karti
-STR_0193_SHOW_INDUSTRIES_ON_MAP                                 :{BLACK}Prikaži industrije na karti
-STR_0194_SHOW_TRANSPORT_ROUTES_ON                               :{BLACK}Prikaži prijevozne trase na karti
-STR_0195_SHOW_VEGETATION_ON_MAP                                 :{BLACK}Prikaži vegetaciju na karti
-STR_0196_SHOW_LAND_OWNERS_ON_MAP                                :{BLACK}Prikaži vlasnike zemlje na karti
-STR_0197_TOGGLE_TOWN_NAMES_ON_OFF                               :{BLACK}Prikaži/sakrij imena grada na karti
-STR_0198_PROFIT_THIS_YEAR_LAST_YEAR                             :{TINYFONT}{BLACK}Ovogodišnja zarada: {CURRENCY} (prošlogodišnja: {CURRENCY})
-
-############ range for service numbers starts
-STR_AGE                                                         :{COMMA} godin{P a e a} ({COMMA})
-STR_AGE_RED                                                     :{RED}{COMMA} godin{P a e a} ({COMMA})
-############ range for service numbers ends
-
-STR_019C_ROAD_VEHICLE                                           :Cestovno vozilo
-STR_019D_AIRCRAFT                                               :Zrakoplov
-STR_019E_SHIP                                                   :Brod
-STR_019F_TRAIN                                                  :Vlak
-STR_01A0_IS_GETTING_OLD                                         :{WHITE}{STRING} {COMMA} postaje star
-STR_01A1_IS_GETTING_VERY_OLD                                    :{WHITE}{STRING} {COMMA} postaje vrlo star
-STR_01A2_IS_GETTING_VERY_OLD_AND                                :{WHITE}{STRING} {COMMA} postaje vrlo star i hitno treba zamjenu
-STR_01A3_LAND_AREA_INFORMATION                                  :{WHITE}Podaci o zemlji
-STR_01A4_COST_TO_CLEAR_N_A                                      :{BLACK}Troškovi čišćenja: {LTBLUE}NIJE DOSTUPNO
-STR_01A5_COST_TO_CLEAR                                          :{BLACK}Troškovi čišćenja: {LTBLUE}{CURRENCY}
-STR_01A6_N_A                                                    :NIJE DOSTUPNO
-STR_01A7_OWNER                                                  :{BLACK}Vlasnik: {LTBLUE}{STRING}
-STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Područna nadležnost: {LTBLUE}{STRING}
-STR_01A9_NONE                                                   :Nijedan/Nitko/Ništa
-STR_01AA_NAME                                                   :{BLACK}Ime
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
-
-############ range for days starts
-STR_01AC_1ST                                                    :1.
-STR_01AD_2ND                                                    :2.
-STR_01AE_3RD                                                    :3.
-STR_01AF_4TH                                                    :4.
-STR_01B0_5TH                                                    :5.
-STR_01B1_6TH                                                    :6.
-STR_01B2_7TH                                                    :7.
-STR_01B3_8TH                                                    :8.
-STR_01B4_9TH                                                    :9.
-STR_01B5_10TH                                                   :10.
-STR_01B6_11TH                                                   :11.
-STR_01B7_12TH                                                   :12.
-STR_01B8_13TH                                                   :13.
-STR_01B9_14TH                                                   :14.
-STR_01BA_15TH                                                   :15.
-STR_01BB_16TH                                                   :16.
-STR_01BC_17TH                                                   :17.
-STR_01BD_18TH                                                   :18.
-STR_01BE_19TH                                                   :19.
-STR_01BF_20TH                                                   :20.
-STR_01C0_21ST                                                   :21.
-STR_01C1_22ND                                                   :22.
-STR_01C2_23RD                                                   :23.
-STR_01C3_24TH                                                   :24.
-STR_01C4_25TH                                                   :25.
-STR_01C5_26TH                                                   :26.
-STR_01C6_27TH                                                   :27.
-STR_01C7_28TH                                                   :28.
-STR_01C8_29TH                                                   :29.
-STR_01C9_30TH                                                   :30.
-STR_01CA_31ST                                                   :31.
-############ range for days ends
-
-STR_01CB                                                        :{TINYFONT}{COMMA}
-
-STR_01CE_CARGO_ACCEPTED                                         :{BLACK}Prihvaćeni teret: {LTBLUE}
-
-STR_01D1_8                                                      :({COMMA}/8 {STRING})
-STR_01D2_JAZZ_JUKEBOX                                           :{WHITE}Jazz Jukebox
-STR_01D3_SOUND_MUSIC                                            :Zvuk/glazba
-STR_01D4_SHOW_SOUND_MUSIC_WINDOW                                :{BLACK}Prikaži prozor zvuk/glazba
-STR_01D5_ALL                                                    :{TINYFONT}Sve
-STR_01D6_OLD_STYLE                                              :{TINYFONT}Staromodno
-STR_01D7_NEW_STYLE                                              :{TINYFONT}Moderno
-STR_01D8_EZY_STREET                                             :{TINYFONT}Laganica
-STR_01D9_CUSTOM_1                                               :{TINYFONT}Proizvoljno 1
-STR_01DA_CUSTOM_2                                               :{TINYFONT}Proizvoljno 2
-STR_01DB_MUSIC_VOLUME                                           :{BLACK}{TINYFONT}Glasnoća glazbe
-STR_01DC_EFFECTS_VOLUME                                         :{BLACK}{TINYFONT}Glasnoća zvukova
-STR_01DD_MIN_MAX                                                :{BLACK}{TINYFONT}MIN  '  '  ' '  '  '  MAX
-STR_01DE_SKIP_TO_PREVIOUS_TRACK                                 :{BLACK}Prethodna traka
-STR_01DF_SKIP_TO_NEXT_TRACK_IN_SELECTION                        :{BLACK}Sljedeća traka
-STR_01E0_STOP_PLAYING_MUSIC                                     :{BLACK}Zaustavi glazbu
-STR_01E1_START_PLAYING_MUSIC                                    :{BLACK}Pokreni glazbu
-STR_01E2_DRAG_SLIDERS_TO_SET_MUSIC                              :{BLACK}Povuci klizače za namještanje glasnoće glazbe i zvukova
-STR_01E3                                                        :{DKGREEN}{TINYFONT}--
-STR_01E4_0                                                      :{DKGREEN}{TINYFONT}0{COMMA}
-STR_01E5                                                        :{DKGREEN}{TINYFONT}{COMMA}
-STR_01E6                                                        :{DKGREEN}{TINYFONT}------
-STR_01E7                                                        :{DKGREEN}{TINYFONT}"{STRING}"
-STR_01E8_TRACK_XTITLE                                           :{BLACK}{TINYFONT}Traka{SETX 88}Naslov
-STR_01E9_SHUFFLE                                                :{TINYFONT}Miješaj
-STR_01EA_PROGRAM                                                :{TINYFONT}{BLACK}Program
-STR_01EB_MUSIC_PROGRAM_SELECTION                                :{WHITE}Izbor glazbenog programa
-STR_01EC_0                                                      :{TINYFONT}{LTBLUE}0{COMMA} "{STRING}"
-STR_01ED                                                        :{TINYFONT}{LTBLUE}{COMMA} "{STRING}"
-STR_01EE_TRACK_INDEX                                            :{TINYFONT}{BLACK}Popis traka
-STR_01EF_PROGRAM                                                :{TINYFONT}{BLACK}Program- '{STRING}'
-STR_01F0_CLEAR                                                  :{TINYFONT}{BLACK}Obriši
-STR_01F1_SAVE                                                   :{TINYFONT}{BLACK}Spremi
-STR_01F2_CURRENT_PROGRAM_OF_MUSIC                               :{BLACK}Aktivni glazbeni program
-STR_01F3_SELECT_ALL_TRACKS_PROGRAM                              :{BLACK}Odaberi program 'sve trake'
-STR_01F4_SELECT_OLD_STYLE_MUSIC                                 :{BLACK}Odaberi program 'staromodna glazba'
-STR_01F5_SELECT_NEW_STYLE_MUSIC                                 :{BLACK}Odaberi program 'moderna glazba'
-STR_01F6_SELECT_CUSTOM_1_USER_DEFINED                           :{BLACK}Odaberi program 'Proizvoljna glazba 1'
-STR_01F7_SELECT_CUSTOM_2_USER_DEFINED                           :{BLACK}Odaberi program 'Proizvoljna glazba 2'
-STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1                          :{BLACK}Obriši aktivni program (samo Proizvoljno 1 ili Proizvoljno 2)
-STR_01F9_SAVE_MUSIC_SETTINGS                                    :{BLACK}Spremi glazbene postavke
-STR_01FA_CLICK_ON_MUSIC_TRACK_TO                                :{BLACK}Klikni na glazbenu traku za dodavanje u aktivni program (samo Proizvoljno 1 ili Proizvoljno 2)
-STR_01FB_TOGGLE_PROGRAM_SHUFFLE                                 :{BLACK}Ukluči/isključi miješanje programa
-STR_01FC_SHOW_MUSIC_TRACK_SELECTION                             :{BLACK}Prikaži prozor za izbor glazbenih traka
-STR_01FD_CLICK_ON_SERVICE_TO_CENTER                             :{BLACK}Pritisni na uslugu za centriranje pogleda na industriju/grad
-STR_01FE_DIFFICULTY                                             :{BLACK}Težina ({STRING})
-STR_01FF                                                        :{TINYFONT}{BLACK}{DATE_LONG}
-STR_0200_LAST_MESSAGE_NEWS_REPORT                               :Poslijednja poruka/vijest
-STR_0201_MESSAGE_SETTINGS                                       :Postavke poruka
-STR_MESSAGE_HISTORY_MENU                                        :Povijest poruka
-STR_0203_SHOW_LAST_MESSAGE_NEWS                                 :{BLACK}Prikaži zadnju poruku/vijest, prikaži postavke poruka
-STR_0204_MESSAGE_OPTIONS                                        :{WHITE}Mogućnosti poruka
-STR_0205_MESSAGE_TYPES                                          :{BLACK}Vrste poruka:
-STR_0206_ARRIVAL_OF_FIRST_VEHICLE                               :{YELLOW}Dolazak prvog vozila u stanicu igrača
-STR_0207_ARRIVAL_OF_FIRST_VEHICLE                               :{YELLOW}Dolazak prvog vozila u stanicu suparnika
-STR_0208_ACCIDENTS_DISASTERS                                    :{YELLOW}Nesreće / katastrofe
-STR_0209_COMPANY_INFORMATION                                    :{YELLOW}Podaci vezani za tvrtku
-STR_020A_ECONOMY_CHANGES                                        :{YELLOW}Promjene u gospodarstvu
-STR_020B_ADVICE_INFORMATION_ON_PLAYER                           :{YELLOW}Savjet / informacija o vozilima igrača
-STR_020C_NEW_VEHICLES                                           :{YELLOW}Nova vozila
-STR_020D_CHANGES_OF_CARGO_ACCEPTANCE                            :{YELLOW}Promjene u prihvaćanju tereta
-STR_020E_SUBSIDIES                                              :{YELLOW}Subvencije
-STR_020F_GENERAL_INFORMATION                                    :{YELLOW}Opće informacije
-STR_MESSAGES_ALL                                                :{YELLOW}Postavi sve tipove poruka na: Isključeno/Ukratko/Potpuno
-STR_MESSAGE_SOUND                                               :{YELLOW} Pusti zvuk za sve skraćene novinske poruke
-STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO                       :{WHITE}...predaleko od prethodnog odredišta
-STR_0211_TOP_COMPANIES_WHO_REACHED                              :{BIGFONT}{BLACK}Najbolje tvrtke koje su dosigle razinu {NUM}{}({STRING})
-STR_0212                                                        :{BIGFONT}{COMMA}.
-STR_0213_BUSINESSMAN                                            :Privrednik
-STR_0214_ENTREPRENEUR                                           :Poduzetnik
-STR_0215_INDUSTRIALIST                                          :Industrijalist
-STR_0216_CAPITALIST                                             :Kapitalist
-STR_0217_MAGNATE                                                :Velikaš
-STR_0218_MOGUL                                                  :Bogataš
-STR_0219_TYCOON_OF_THE_CENTURY                                  :Tajkun stoljeća
-STR_HIGHSCORE_NAME                                              :{BIGFONT}{PLAYERNAME}, {COMPANY}
-STR_HIGHSCORE_STATS                                             :{BIGFONT}'{STRING}'   ({COMMA})
-STR_021B_ACHIEVES_STATUS                                        :{BLACK}{BIGFONT}{COMPANY} postigao je status '{STRING}' !
-STR_021C_OF_ACHIEVES_STATUS                                     :{WHITE}{BIGFONT}{PLAYERNAME} iz {COMPANY} postigao je status '{STRING}' !
-STR_021F                                                        :{BLUE}{COMMA}
-STR_0221_OPENTTD                                                :{YELLOW}OpenTTD
-STR_0222_SCENARIO_EDITOR                                        :{YELLOW}Uređivanje scenarija
-STR_0223_LAND_GENERATION                                        :{WHITE}Stvaranje zemljišta
-STR_0224                                                        :{BLACK}{UPARROW}
-STR_0225                                                        :{BLACK}{DOWNARROW}
-STR_0228_INCREASE_SIZE_OF_LAND_AREA                             :{BLACK}Povećaj područje koje će biti povišeno/sniženo
-STR_0229_DECREASE_SIZE_OF_LAND_AREA                             :{BLACK}Smanji podrčje koje će biti povišeno/sniženo
-STR_022A_GENERATE_RANDOM_LAND                                   :{BLACK}Napravi nasumično zemljište
-STR_022B_RESET_LANDSCAPE                                        :{BLACK}Poništi krajolik
-STR_022C_RESET_LANDSCAPE                                        :{WHITE}Poništi krajolik
-STR_RESET_LANDSCAPE_TOOLTIP                                     :{BLACK}Obriši sa mape sve u vlasništvu igrača
-STR_RESET_LANDSCAPE_CONFIRMATION_TEXT                           :{WHITE}Jeste li sigurni da želite obrisati sve u vlasništvu igrača?
-STR_022E_LANDSCAPE_GENERATION                                   :{BLACK}Stvaranje krajolika
-STR_022F_TOWN_GENERATION                                        :{BLACK}Stvaranje gradova
-STR_0230_INDUSTRY_GENERATION                                    :{BLACK}Stvaranje industrija
-STR_0231_ROAD_CONSTRUCTION                                      :{BLACK}Izgradnja ceste
-STR_0233_TOWN_GENERATION                                        :{WHITE}Stvaranje gradova
-STR_0234_NEW_TOWN                                               :{BLACK}Novi grad
-STR_0235_CONSTRUCT_NEW_TOWN                                     :{BLACK}Izgradi novi grad
-STR_0236_CAN_T_BUILD_TOWN_HERE                                  :{WHITE}Ovdje nije moguće graditi...
-STR_0237_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}...preblizu rubu karte
-STR_0238_TOO_CLOSE_TO_ANOTHER_TOWN                              :{WHITE}...preblizu drugog grada
-STR_0239_SITE_UNSUITABLE                                        :{WHITE}...neprikladno mjesto
-STR_023A_TOO_MANY_TOWNS                                         :{WHITE}...previše gradova
-STR_CANNOT_GENERATE_TOWN                                        :{WHITE}Nije moguće graditi gradove
-STR_NO_SPACE_FOR_TOWN                                           :{WHITE}...nema više mjesta na karti
-STR_023B_INCREASE_SIZE_OF_TOWN                                  :{BLACK}Povećaj stanovništvo grada
-STR_023C_EXPAND                                                 :{BLACK}Proširi
-STR_023D_RANDOM_TOWN                                            :{BLACK}Nasumičan grad
-STR_023E_BUILD_TOWN_IN_RANDOM_LOCATION                          :{BLACK}Izgradi grad na nasumično odabranom pložaju
-STR_023F_INDUSTRY_GENERATION                                    :{WHITE}Stvaranje industrije
-STR_0240_COAL_MINE                                              :{BLACK}Rudnik ugljena
-STR_0241_POWER_STATION                                          :{BLACK}Elektrana
-STR_0242_SAWMILL                                                :{BLACK}Pilana
-STR_0243_FOREST                                                 :{BLACK}Šuma
-STR_0244_OIL_REFINERY                                           :{BLACK}Rafinerija nafte
-STR_0245_OIL_RIG                                                :{BLACK}Naftna platforma
-STR_0246_FACTORY                                                :{BLACK}Tvornica
-STR_0247_STEEL_MILL                                             :{BLACK}Čeličana
-STR_0248_FARM                                                   :{BLACK}Farma
-STR_0249_IRON_ORE_MINE                                          :{BLACK}Rudnik željeza
-STR_024A_OIL_WELLS                                              :{BLACK}Naftna polja
-STR_024B_BANK                                                   :{BLACK}Banka
-STR_024C_PAPER_MILL                                             :{BLACK}Tvornica papira
-STR_024D_FOOD_PROCESSING_PLANT                                  :{BLACK}Tvornica hrane
-STR_024E_PRINTING_WORKS                                         :{BLACK}Tiskara
-STR_024F_GOLD_MINE                                              :{BLACK}Rudnik zlata
-STR_0250_LUMBER_MILL                                            :{BLACK}Pilana
-STR_0251_FRUIT_PLANTATION                                       :{BLACK}Plantaža voća
-STR_0252_RUBBER_PLANTATION                                      :{BLACK}Plantaža gume
-STR_0253_WATER_SUPPLY                                           :{BLACK}Izvor vode
-STR_0254_WATER_TOWER                                            :{BLACK}Vodotoranj
-STR_0255_DIAMOND_MINE                                           :{BLACK}Rudnik dijamanata
-STR_0256_COPPER_ORE_MINE                                        :{BLACK}Rudnik bakra
-STR_0257_COTTON_CANDY_FOREST                                    :{BLACK}Šuma šećerne vune
-STR_0258_CANDY_FACTORY                                          :{BLACK}Tvornica slatkiša
-STR_0259_BATTERY_FARM                                           :{BLACK}Tvornica baterija
-STR_025A_COLA_WELLS                                             :{BLACK}Izvor Cole
-STR_025B_TOY_SHOP                                               :{BLACK}Trgovina igračkama
-STR_025C_TOY_FACTORY                                            :{BLACK}Tvornica igračaka
-STR_025D_PLASTIC_FOUNTAINS                                      :{BLACK}Izvori plastike
-STR_025E_FIZZY_DRINK_FACTORY                                    :{BLACK}Tvornica gaziranih pića
-STR_025F_BUBBLE_GENERATOR                                       :{BLACK}Generator balona
-STR_0260_TOFFEE_QUARRY                                          :{BLACK}Iskop mliječne karamele
-STR_0261_SUGAR_MINE                                             :{BLACK}Rudnik šećera
-STR_0262_CONSTRUCT_COAL_MINE                                    :{BLACK}Izgradi rudnik ugljena
-STR_0263_CONSTRUCT_POWER_STATION                                :{BLACK}Izgradi elektranu
-STR_0264_CONSTRUCT_SAWMILL                                      :{BLACK}Izgradi pilanu
-STR_0265_PLANT_FOREST                                           :{BLACK}Posadi šumu
-STR_0266_CONSTRUCT_OIL_REFINERY                                 :{BLACK}Izgradi naftnu rafineriju
-STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY                             :{BLACK}Izgradi naftnu bušotinu (može biti sagrađena samo blizu rubova karte)
-STR_0268_CONSTRUCT_FACTORY                                      :{BLACK}Izgradi tvornicu
-STR_0269_CONSTRUCT_STEEL_MILL                                   :{BLACK}Izgradi čeličanu
-STR_026A_CONSTRUCT_FARM                                         :{BLACK}Izgradi farmu
-STR_026B_CONSTRUCT_IRON_ORE_MINE                                :{BLACK}Izgradi rudnik bakra
-STR_026C_CONSTRUCT_OIL_WELLS                                    :{BLACK}Izgradi naftna polja
-STR_026D_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Izgradi banku (može biti izgrađena samo u gradovima s više od 1200 stanovnika)
-STR_026E_CONSTRUCT_PAPER_MILL                                   :{BLACK}Izgradi tvornicu papira
-STR_026F_CONSTRUCT_FOOD_PROCESSING                              :{BLACK}Izgradi tvornicu hrane
-STR_0270_CONSTRUCT_PRINTING_WORKS                               :{BLACK}Izgradi tiskaru
-STR_0271_CONSTRUCT_GOLD_MINE                                    :{BLACK}Izgradi rudnik zlata
-STR_0272_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}Izgradi banku (može biti izgrađena samo u gradovima)
-STR_0273_CONSTRUCT_LUMBER_MILL_TO                               :{BLACK}Construct pilanu (za sječu prašume i proizvodnju drva)
-STR_0274_PLANT_FRUIT_PLANTATION                                 :{BLACK}Posadi plantažu voća
-STR_0275_PLANT_RUBBER_PLANTATION                                :{BLACK}Posadi plantažu gume
-STR_0276_CONSTRUCT_WATER_SUPPLY                                 :{BLACK}Iskopaj izvor vode
-STR_0277_CONSTRUCT_WATER_TOWER_CAN                              :{BLACK}Izgradi vodotoranj (može biti izgrađen samo u gradovima)
-STR_0278_CONSTRUCT_DIAMOND_MINE                                 :{BLACK}Izgradi rudnik dijamanata
-STR_0279_CONSTRUCT_COPPER_ORE_MINE                              :{BLACK}Izgradi rudnik bakra
-STR_027A_PLANT_COTTON_CANDY_FOREST                              :{BLACK}Posadi šumu šećerne vune
-STR_027B_CONSTRUCT_CANDY_FACTORY                                :{BLACK}Izgradi tvornicu slatkiša
-STR_027C_CONSTRUCT_BATTERY_FARM                                 :{BLACK}Izgradi tvornicu baterija
-STR_027D_CONSTRUCT_COLA_WELLS                                   :{BLACK}Iskopaj izvore Cole
-STR_027E_CONSTRUCT_TOY_SHOP                                     :{BLACK}Izgradi trgovinu igračkama
-STR_027F_CONSTRUCT_TOY_FACTORY                                  :{BLACK}Izgradi tvornicu igračaka
-STR_0280_CONSTRUCT_PLASTIC_FOUNTAINS                            :{BLACK}Iskopaj izvore plastike
-STR_0281_CONSTRUCT_FIZZY_DRINK_FACTORY                          :{BLACK}Izgradi tvornicu gaziranih pića
-STR_0282_CONSTRUCT_BUBBLE_GENERATOR                             :{BLACK}Izgradi generator balona
-STR_0283_CONSTRUCT_TOFFEE_QUARRY                                :{BLACK}Izgradi iskop milječne karamele
-STR_0284_CONSTRUCT_SUGAR_MINE                                   :{BLACK}Izgradi rudnik šećera
-STR_0285_CAN_T_BUILD_HERE                                       :{WHITE}Ne možeš graditi {STRING} ovdje...
-STR_0286_MUST_BUILD_TOWN_FIRST                                  :{WHITE}...moraš prvo izgraditi grad
-STR_0287_ONLY_ONE_ALLOWED_PER_TOWN                              :{WHITE}...dozvoljen samo jedan po gradu
-STR_0288_PLANT_TREES                                            :{BLACK}Posadi drveće
-STR_0289_PLACE_SIGN                                             :{BLACK}Stavi znak
-STR_028A_RANDOM_TREES                                           :{BLACK}Nasumično odabrano drveće
-STR_028B_PLANT_TREES_RANDOMLY_OVER                              :{BLACK}Nasumce posadi drveće po krajoliku
-STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE                         :{BLACK}Stavi stijenje na krajolik
-STR_028D_PLACE_LIGHTHOUSE                                       :{BLACK}Postavi svjetionik
-STR_028E_PLACE_TRANSMITTER                                      :{BLACK}Postavi odašiljač
-STR_028F_DEFINE_DESERT_AREA                                     :{BLACK}Odredi pustinjsko područje.{}Pritisni i drži CTRL za uklanjanje
-STR_0290_DELETE                                                 :{BLACK}Obriši
-STR_0291_DELETE_THIS_TOWN_COMPLETELY                            :{BLACK}Obriši ovaj grad u cjelosti
-STR_0292_SAVE_SCENARIO                                          :Spremi scenarij
-STR_0293_LOAD_SCENARIO                                          :Učitaj secenarij
-STR_LOAD_HEIGHTMAP                                              :Učitaj visinsku kartu
-STR_0294_QUIT_EDITOR                                            :Završi s uređivanjem
-STR_0295                                                        :
-STR_0296_QUIT                                                   :Završi
-STR_0297_SAVE_SCENARIO_LOAD_SCENARIO                            :{BLACK}Snimi scenarij, učitaj scenarij, napusti uređivanje scenarija, završi
-STR_0298_LOAD_SCENARIO                                          :{WHITE}Učitaj scenarij
-STR_0299_SAVE_SCENARIO                                          :{WHITE}Spremi scenarij
-STR_029A_PLAY_SCENARIO                                          :{BLACK}Igraj scenarij
-STR_PLAY_HEIGHTMAP                                              :{BLACK}Igraj Rastersku Mapu
-STR_PLAY_HEIGHTMAP_HINT                                         :{BLACK}Pokreni novu igru, koristeći rastersku mapu kao krajolik
-STR_QUIT_SCENARIO_QUERY                                         :{YELLOW}Jeste li sigurni da želite završiti ovaj scenarij?
-STR_029C_QUIT_EDITOR                                            :{WHITE}Završi uređivanje
-STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}..može se izgraditi u gradovima sa najmanje 1200 stanovnika
-STR_029E_MOVE_THE_STARTING_DATE                                 :{BLACK}Pomakni početni datum 1 godinu unatrag
-STR_029F_MOVE_THE_STARTING_DATE                                 :{BLACK}Pomakni početni datum 1 godinu unaprijed
-STR_02A0_ENDS_OF_BRIDGE_MUST_BOTH                               :{WHITE}...oba kraja mosta moraju biti na zemlji
-STR_02A1_SMALL                                                  :{BLACK}Malo
-STR_02A2_MEDIUM                                                 :{BLACK}Srednje
-STR_02A3_LARGE                                                  :{BLACK}Veliko
-STR_02A4_SELECT_TOWN_SIZE                                       :{BLACK}Izaberi veličinu grada
-STR_02A5_TOWN_SIZE                                              :{YELLOW}Veličina grada:
-
-STR_02B6                                                        :{STRING}  -  {STRING}
-STR_02B7_SHOW_LAST_MESSAGE_OR_NEWS                              :{BLACK}Prikaži posljednu poruku ili vijest
-STR_OFF                                                         :Isključeno
-STR_SUMMARY                                                     :Sažetak
-STR_FULL                                                        :Puno
-STR_02BA                                                        :{SILVER}- -  {COMPANY}  - -
-STR_02BB_TOWN_DIRECTORY                                         :Popis gradova
-STR_02BC_VEHICLE_DESIGN_NAMES                                   :{BLACK}Imena dizajna vozila
-STR_02BD                                                        :{BLACK}{STRING}
-STR_02BE_DEFAULT                                                :Pretpostavljeno
-STR_02BF_CUSTOM                                                 :Prilagođeno
-STR_02C0_SAVE_CUSTOM_NAMES                                      :{BLACK}Spremi prilagođena imena
-STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION                         :{BLACK}Odabir imena dizajna vozila
-STR_02C2_SAVE_CUSTOMIZED_VEHICLE                                :{BLACK}Spremi prilagođena imena dizajna vozila
-
-STR_CHECKMARK                                                   :{CHECKMARK}
-############ range for menu starts
-STR_02C3_GAME_OPTIONS                                           :Opcije igre
-STR_02C5_DIFFICULTY_SETTINGS                                    :Postavke težine
-STR_02C7_CONFIG_PATCHES                                         :Konfiguriraj zakrpe
-STR_NEWGRF_SETTINGS                                             :Postavke NewGRF-a
-STR_GAMEOPTMENU_0A                                              :
-STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Prikazana imena gradova
-STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Prikazana imena stanica
-STR_02CE_SIGNS_DISPLAYED                                        :{SETX 12}Prikazani znakovi
-STR_WAYPOINTS_DISPLAYED2                                        :{SETX 12}Prikazana čvorišta
-STR_02D0_FULL_ANIMATION                                         :{SETX 12}Sve animacije
-STR_02D2_FULL_DETAIL                                            :{SETX 12}Svi detalji
-STR_02D4_TRANSPARENT_BUILDINGS                                  :{SETX 12}Prozirne građevine
-STR_TRANSPARENT_SIGNS                                           :{SETX 12}Prozirni znakovi stanica
-############ range ends here
-
-############ range for menu starts
-STR_02D5_LAND_BLOCK_INFO                                        :Podatci o zemljištu
-STR_02D6                                                        :
-STR_CONSOLE_SETTING                                             :Otvori konzolu
-STR_02D7_SCREENSHOT_CTRL_S                                      :Slika zaslona (Ctrl-S)
-STR_02D8_GIANT_SCREENSHOT_CTRL_G                                :Ogromna slika zaslona (Ctrl-G)
-STR_02D9_ABOUT_OPENTTD                                          :O 'OpenTTD'
-############ range ends here
-
-STR_02DB_OFF                                                    :{BLACK}Isključeno
-STR_02DA_ON                                                     :{BLACK}Uključeno
-STR_02DC_DISPLAY_SUBSIDIES                                      :{BLACK}Prikaži subvencije
-STR_02DD_SUBSIDIES                                              :Subvencije
-STR_02DE_MAP_OF_WORLD                                           :Karta svijeta
-STR_EXTRA_VIEW_PORT                                             :Dodatni pogled
-STR_SIGN_LIST                                                   :Popis znakova
-STR_02DF_TOWN_DIRECTORY                                         :Direktorij gradova
-STR_TOWN_POPULATION                                             :{BLACK}Svjetska populacija: {COMMA}
-STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Pogled {COMMA}
-STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN                                :{BLACK}Kopiraj u pogled
-
-STR_02E0_CURRENCY_UNITS                                         :{BLACK}Novčane jedinice
-STR_02E1                                                        :{BLACK}{SKIP}{STRING}
-STR_02E2_CURRENCY_UNITS_SELECTION                               :{BLACK}Odabir novčanih jedinica
-STR_MEASURING_UNITS                                             :{BLACK}Mjerne jedinice
-STR_02E4                                                        :{BLACK}{SKIP}{SKIP}{STRING}
-STR_MEASURING_UNITS_SELECTION                                   :{BLACK}Odabir mjernih jedinica
-STR_02E6_ROAD_VEHICLES                                          :{BLACK}Cestovna vozila
-STR_02E7                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{STRING}
-STR_02E8_SELECT_SIDE_OF_ROAD_FOR                                :{BLACK}Izaberi na kojoj će strani ceste vozila prometovati
-STR_02E9_DRIVE_ON_LEFT                                          :Vozi na lijevoj strani
-STR_02EA_DRIVE_ON_RIGHT                                         :Vozi na desnoj strani
-STR_02EB_TOWN_NAMES                                             :{BLACK}Imena gradova
-STR_02EC                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_02ED_SELECT_STYLE_OF_TOWN_NAMES                             :{BLACK}Izaberi stil za imena gradova
-
-STR_02F4_AUTOSAVE                                               :{BLACK}Automatsko spremanje
-STR_02F5                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_02F6_SELECT_INTERVAL_BETWEEN                                :{BLACK}Odaberi interval između automatskih spremanja igre
-STR_02F7_OFF                                                    :Isključeno
-STR_02F8_EVERY_3_MONTHS                                         :Svaka 3 mjeseca
-STR_02F9_EVERY_6_MONTHS                                         :Svakih 6 mjeseci
-STR_02FA_EVERY_12_MONTHS                                        :Svakih 12 mjeseci
-STR_02FB_START_A_NEW_GAME                                       :{BLACK}Započni novu igru
-STR_02FC_LOAD_A_SAVED_GAME                                      :{BLACK}Učitaj spremljenu igru
-STR_02FE_CREATE_A_CUSTOMIZED_GAME                               :{BLACK}Izradi prilagođeni igrački svijet/scenarij
-STR_02FF_SELECT_SINGLE_PLAYER_GAME                              :{BLACK}Odaberi igru za jednog igrača
-STR_0300_SELECT_MULTIPLAYER_GAME                                :{BLACK}Odaberi igru za 2-8 igrača
-STR_0301_DISPLAY_GAME_OPTIONS                                   :{BLACK}Prikaži opcije igre
-STR_0302_DISPLAY_DIFFICULTY_OPTIONS                             :{BLACK}Prikaži opcije težine
-STR_0303_START_A_NEW_GAME_USING                                 :{BLACK}Započni novu igru koristeći prilagođeni scenarij
-STR_0304_QUIT                                                   :{BLACK}Završi
-STR_0305_QUIT_OPENTTD                                           :{BLACK}Završi 'OpenTTD'
-STR_0307_OPENTTD                                                :{WHITE}OpenTTD {REV}
-STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...može biti izgrađen samo u gradovima
-STR_030E_SELECT_TEMPERATE_LANDSCAPE                             :{BLACK}Odaberi 'umjeren' stil krajolika
-STR_030F_SELECT_SUB_ARCTIC_LANDSCAPE                            :{BLACK}Odaberi 'subarktički' stil krajolika
-STR_0310_SELECT_SUB_TROPICAL_LANDSCAPE                          :{BLACK}Odaberi 'subtropski' stil krajolika
-STR_0311_SELECT_TOYLAND_LANDSCAPE                               :{BLACK}Odaberi 'zemlju igračka' za stil krajolika
-STR_0312_FUND_CONSTRUCTION_OF_NEW                               :{BLACK}Financiraj izgradnju nove industrije
-
-############ range for menu starts
-STR_INDUSTRY_DIR                                                :Lista gospodarstava
-STR_0313_FUND_NEW_INDUSTRY                                      :Financiraj novo gospodarstvo
-############ range ends here
-
-STR_0314_FUND_NEW_INDUSTRY                                      :{WHITE}Financiraj novu industriju
-STR_JUST_STRING                                                 :{STRING}
-STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...može biti izgrađen samo u gradovima
-STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST                        :{WHITE}...može biti izgrađen samo u predjelima kišnih šuma
-STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT                            :{WHITE}...može biti izgrađen samo u pustinjskim područjima
-STR_0319_PAUSED                                                 :{YELLOW}* *  STANKA  *  *
-
-STR_031B_SCREENSHOT_SUCCESSFULLY                                :{WHITE}Slika zaslona uspješno spremljena kao '{STRING}'
-STR_031C_SCREENSHOT_FAILED                                      :{WHITE}Slika zaslona nije uspjela!
-
-STR_0329_PURCHASE_LAND_FOR_FUTURE                               :{BLACK}Kupi zemlju za buduću uporabu
-STR_032F_AUTOSAVE                                               :{RED}AUTOMATSKO SPREMANJE
-STR_SAVING_GAME                                                 :{RED}*  *  SAVING GAME  *  *
-STR_SAVE_STILL_IN_PROGRESS                                      :{WHITE}Spremanje još u tijeku,{}molimo pričekajte dok se ne završi!
-STR_0330_SELECT_EZY_STREET_STYLE                                :{BLACK}Izaberi glazbeni program 'Ezy Street style'
-
-STR_0335_6                                                      :{BLACK}6
-STR_0336_7                                                      :{BLACK}7
-
-############ start of townname region
-STR_TOWNNAME_ORIGINAL_ENGLISH                                   :Engleski (original)
-STR_TOWNNAME_FRENCH                                             :Francuski
-STR_TOWNNAME_GERMAN                                             :Njemački
-STR_TOWNNAME_ADDITIONAL_ENGLISH                                 :Engleski (dodatno)
-STR_TOWNNAME_LATIN_AMERICAN                                     :Latinoamerički
-STR_TOWNNAME_SILLY                                              :Blesavo
-STR_TOWNNAME_SWEDISH                                            :Švedski
-STR_TOWNNAME_DUTCH                                              :Nizozemski
-STR_TOWNNAME_FINNISH                                            :Finski
-STR_TOWNNAME_POLISH                                             :Poljski
-STR_TOWNNAME_SLOVAKISH                                          :Slovački
-STR_TOWNNAME_NORWEGIAN                                          :Norveški
-STR_TOWNNAME_HUNGARIAN                                          :Mađarski
-STR_TOWNNAME_AUSTRIAN                                           :Austrijski
-STR_TOWNNAME_ROMANIAN                                           :Rumunjski
-STR_TOWNNAME_CZECH                                              :Češki
-STR_TOWNNAME_SWISS                                              :Švicarski
-STR_TOWNNAME_DANISH                                             :Danski
-STR_TOWNNAME_TURKISH                                            :Turski
-STR_TOWNNAME_ITALIAN                                            :Talijanski
-STR_TOWNNAME_CATALAN                                            :Katalonski
-############ end of townname region
-
-STR_CURR_GBP                                                    :Funte (£)
-STR_CURR_USD                                                    :Dolari ($)
-STR_CURR_EUR                                                    :Euri (€)
-STR_CURR_YEN                                                    :Jeni (¥)
-STR_CURR_ATS                                                    :Austrijski šiling (ATS)
-STR_CURR_BEF                                                    :Belgijski franak (BEF)
-STR_CURR_CHF                                                    :Švicarski franak (CHF)
-STR_CURR_CZK                                                    :Češka kruna (CZK)
-STR_CURR_DEM                                                    :Njemačka marka (DEM)
-STR_CURR_DKK                                                    :Danska kruna (DKK)
-STR_CURR_ESP                                                    :Pezeta (ESP)
-STR_CURR_FIM                                                    :Finska marka (FIM)
-STR_CURR_FRF                                                    :Franak (FRF)
-STR_CURR_GRD                                                    :Grčka drahma (GRD)
-STR_CURR_HUF                                                    :Mađarski forint (HUF)
-STR_CURR_ISK                                                    :Islandska kruna (ISK)
-STR_CURR_ITL                                                    :Talijanska lira (ITL)
-STR_CURR_NLG                                                    :Nizozemski gulden (NLG)
-STR_CURR_NOK                                                    :Norveška kruna (NOK)
-STR_CURR_PLN                                                    :Poljski zloti (PLN)
-STR_CURR_ROL                                                    :Rumunjski lev (ROL)
-STR_CURR_RUR                                                    :Ruske rublje (RUR)
-STR_CURR_SIT                                                    :Slovenski tolar (SIT)
-STR_CURR_SEK                                                    :Švedska kruna (SEK)
-STR_CURR_YTL                                                    :Turska lira(YTL)
-STR_CURR_SKK                                                    :Slovačka kruna (SKK)
-STR_CURR_BRR                                                    :Brazilski real (BRL)
-
-STR_CURR_CUSTOM                                                 :Proizvoljno...
-
-STR_OPTIONS_LANG                                                :{BLACK}Jezik
-STR_OPTIONS_LANG_CBO                                            :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_OPTIONS_LANG_TIP                                            :{BLACK}Izaberi jezično sučelje
-
-STR_OPTIONS_FULLSCREEN                                          :{BLACK}Cijeli ekran
-STR_OPTIONS_FULLSCREEN_TIP                                      :{BLACK}Označi ovu kućicu kako bi igrao OpenTTD preko cijelog ekrana
-
-STR_OPTIONS_RES                                                 :{BLACK}Razlučivost ekrana
-STR_OPTIONS_RES_CBO                                             :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_OPTIONS_RES_TIP                                             :{BLACK}Izaberi rezoluciju ekrana
-
-STR_OPTIONS_SCREENSHOT_FORMAT                                   :{BLACK}Format za sliku ekrana
-STR_OPTIONS_SCREENSHOT_FORMAT_CBO                               :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_OPTIONS_SCREENSHOT_FORMAT_TIP                               :{BLACK}Izaberi format za sliku ekrana
-
-STR_AUTOSAVE_1_MONTH                                            :Svaki mjesec
-STR_AUTOSAVE_FAILED                                             :{WHITE}Automatsko spremanje neuspješno
-
-STR_MONTH_JAN                                                   :Siječanj
-STR_MONTH_FEB                                                   :Veljača
-STR_MONTH_MAR                                                   :Ožujak
-STR_MONTH_APR                                                   :Travanj
-STR_MONTH_MAY                                                   :Svibanj
-STR_MONTH_JUN                                                   :Lipanj
-STR_MONTH_JUL                                                   :Srpanj
-STR_MONTH_AUG                                                   :Kolovoz
-STR_MONTH_SEP                                                   :Rujan
-STR_MONTH_OCT                                                   :Listopad
-STR_MONTH_NOV                                                   :Studeni
-STR_MONTH_DEC                                                   :Prosinac
-
-STR_HEADING_FOR_STATION                                         :{LTBLUE}Kreće se prema {STATION}
-STR_HEADING_FOR_STATION_VEL                                     :{LTBLUE}Kreće se prema {STATION}, {VELOCITY}
-STR_NO_ORDERS                                                   :{LTBLUE}Nema narudžbi
-STR_NO_ORDERS_VEL                                               :{LTBLUE}Nema narudžbi, {VELOCITY}
-
-STR_PASSENGERS                                                  :putnici
-STR_BAGS                                                        :vreće
-STR_TONS                                                        :tone
-STR_LITERS                                                      :litre
-STR_ITEMS                                                       :jedinice
-STR_CRATES                                                      :sanduci
-STR_RES_OTHER                                                   :ostalo
-STR_NOTHING                                                     :
-
-STR_SMALL_RIGHT_ARROW                                           :{TINYFONT}{RIGHTARROW}
-
-STR_CANT_SHARE_ORDER_LIST                                       :{WHITE}Nije moguće dijeliti rednu listu...
-STR_CANT_COPY_ORDER_LIST                                        :{WHITE}Nije moguće kopirati rednu listu...
-STR_END_OF_SHARED_ORDERS                                        :{SETX 10}- - Kraj dijeljenih naredbi - -
-
-STR_TRAIN_IS_LOST                                               :{WHITE}Vlak {COMMA} se izgubio.
-STR_TRAIN_IS_UNPROFITABLE                                       :{WHITE}Prošlogodišnja zarada vlaka  {COMMA} bila je {CURRENCY}
-STR_EURO_INTRODUCE                                              :{BLACK}{BIGFONT}Europska Monetarna Unija!{}{}Euro je predstavljen kao jedinstvena valuta za svakodnevnu uporabu  u tvojoj zemlji!
-
-# Start of order review system.
-# DON'T ADD OR REMOVE LINES HERE
-STR_TRAIN_HAS_TOO_FEW_ORDERS                                    :{WHITE} Vlak {COMMA} ima premalo naredbi u rasporedu
-STR_TRAIN_HAS_VOID_ORDER                                        :{WHITE}Vlak {COMMA} ima praznu naredbu
-STR_TRAIN_HAS_DUPLICATE_ENTRY                                   :{WHITE}Vlak {COMMA} ima udvostučenu naredbu
-STR_TRAIN_HAS_INVALID_ENTRY                                     :{WHITE}Vlak {COMMA} ima nevažeću stanicu u voznom redu
-STR_ROADVEHICLE_HAS_TOO_FEW_ORDERS                              :{WHITE}Cestovno vozilo {COMMA} ima premalo naredbi u rasporedu
-STR_ROADVEHICLE_HAS_VOID_ORDER                                  :{WHITE}Cestovno vozilo {COMMA} ima praznu naredbu
-STR_ROADVEHICLE_HAS_DUPLICATE_ENTRY                             :{WHITE}Cestovno vozilo {COMMA} ima udvostručenu naredbu
-STR_ROADVEHICLE_HAS_INVALID_ENTRY                               :{WHITE}Cestovno vozilo {COMMA} ima nevažeću stanicu u voznom redu
-STR_SHIP_HAS_TOO_FEW_ORDERS                                     :{WHITE}Brod {COMMA} ima premalo naredbi u rasporedu
-STR_SHIP_HAS_VOID_ORDER                                         :{WHITE}Brod {COMMA} ima praznu naredbu
-STR_SHIP_HAS_DUPLICATE_ENTRY                                    :{WHITE}Brod{COMMA} ima udvostručene naredbe
-STR_SHIP_HAS_INVALID_ENTRY                                      :{WHITE}Brod {COMMA} ima nevažeću stanicu u voznom redu
-STR_AIRCRAFT_HAS_TOO_FEW_ORDERS                                 :{WHITE}Zrakoplov {COMMA} ima premalo naredbi u rasporedu
-STR_AIRCRAFT_HAS_VOID_ORDER                                     :{WHITE}Zrakoplov {COMMA} ima praznu naredbu
-STR_AIRCRAFT_HAS_DUPLICATE_ENTRY                                :{WHITE}Zrakoplov {COMMA} ima udvostručene naredbe
-STR_AIRCRAFT_HAS_INVALID_ENTRY                                  :{WHITE}Zrakoplov {COMMA} ima nevažeću stanicu u voznom redu
-# end of order system
-
-STR_TRAIN_AUTORENEW_FAILED                                      :{WHITE}Neuspješna automatska obnova vlaka {COMMA} (ograničena količina novca)
-STR_ROADVEHICLE_AUTORENEW_FAILED                                :{WHITE}Automatska zamjena nije izvršena na cestovnom vozilu {COMMA} (money limit)
-STR_SHIP_AUTORENEW_FAILED                                       :{WHITE}Neuspješna automatska obnova broda {COMMA} (ograničena količina novca)
-STR_AIRCRAFT_AUTORENEW_FAILED                                   :{WHITE}Neuspjela automatska zamjena zrakoplova {COMMA} (novčano ograničenje)
-STR_TRAIN_TOO_LONG_AFTER_REPLACEMENT                            :{WHITE}Nakon zamjene, vlak {COMMA} je postao predug
-
-STR_CONFIG_PATCHES                                              :{BLACK}Konfiguriraj zakrpe
-STR_CONFIG_PATCHES_TIP                                          :{BLACK}Podesi zakrpe
-STR_CONFIG_PATCHES_CAPTION                                      :{WHITE}Podesi zakrpe
-
-STR_CONFIG_PATCHES_OFF                                          :Isključeno
-STR_CONFIG_PATCHES_ON                                           :Uključeno
-STR_CONFIG_PATCHES_VEHICLESPEED                                 :{LTBLUE}Prikaži brzinu vozila u statusnoj traci: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDONSLOPES                                :{LTBLUE}Dozvoli gradnju na nagibima i obalama: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_EXTRADYNAMITE                                :{LTBLUE}Dopusti rušenje više gradskih cesta, mostova itd.: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAMMOTHTRAINS                                :{LTBLUE}Omogući sastavljanje vrlo dugačkih vlakova: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_REALISTICACCEL                               :{LTBLUE}Omogući realno ubrzanje za vlakove: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_FORBID_90_DEG                                :{LTBLUE}Zabrani vlakovima i brodovima skretanja pod 90 stupnjeva: {ORANGE}{STRING} {LTBLUE} (requires NPF)
-STR_CONFIG_PATCHES_JOINSTATIONS                                 :{LTBLUE}Spoji željezničke stanice koje se izgrade jedna kraj druge: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_FULLLOADANY                                  :{LTBLUE}Napusti stanicu ako je bilo koji teret u potpunosti natovaren pri 'punom utovaru': {ORANGE}{STRING}
-STR_CONFIG_PATCHES_IMPROVEDLOAD                                 :{LTBLUE}Koristi unaprijeđen algoritam ukrcavanja: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_GRADUAL_LOADING                              :{LTBLUE}Postupno utovaruj vozila: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_INFLATION                                    :{LTBLUE}Inflacija: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Dostavi teret u stanicu samo ako u njoj postoji potražnja: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Dopusti izgradnju vrlo dugačkih mostova: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Dopusti naredbe za slanje u spremište: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Dopusti izgadnju industrija koje proizvode sirovine: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Dopusti više sličnih industrija po gradu: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Moguće je graditi spojene industrije iste vrste: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SIGNALSIDE                                   :{LTBLUE}Prikaži znakove na strani po kojoj se vozi: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BRIBE                                        :{LTBLUE}Dozvoli potkupljivanje gradskih vlasti: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Neujednačene stanice: {ORANGE}{STRING}
-
-STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Uvjek omogući male zračne luke: {ORANGE}{STRING}
-
-STR_CONFIG_PATCHES_WARN_LOST_TRAIN                              :{LTBLUE}Upozori kad se vlak izgubi: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ORDER_REVIEW_OFF                             :ne
-STR_CONFIG_PATCHES_ORDER_REVIEW_EXDEPOT                         :da, no isključi zaustavljena vozila
-STR_CONFIG_PATCHES_ORDER_REVIEW_ON                              :od svih vozila
-STR_CONFIG_PATCHES_WARN_INCOME_LESS                             :{LTBLUE}Upozori ako je prihod vlaka negativan: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES                        :{LTBLUE}Vozila ne zastaruju: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AUTORENEW_VEHICLE                            :{LTBLUE}Automatski zamijeni vozilo kada postane staro
-STR_CONFIG_PATCHES_AUTORENEW_MONTHS                             :{LTBLUE}Automatski obnovi vozilo kada je {ORANGE}{STRING}{LTBLUE} mjeseci prije/poslije maksimalnog godišta
-STR_CONFIG_PATCHES_AUTORENEW_MONEY                              :{LTBLUE}Minimum novca potrebnih za automatsko obnavljanje: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ERRMSG_DURATION                              :{LTBLUE}Trajanje poruke s greškom: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_POPULATION_IN_LABEL                          :{LTBLUE}Prikaži broj stanovnika u traci sa imenom grada: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_INVISIBLE_TREES                              :{LTBLUE}Nevidljivo drveće (sa prozirnim građevinama): {ORANGE}{STRING}
-
-STR_CONFIG_PATCHES_LAND_GENERATOR_ORIGINAL                      :Izvorno
-STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE                        :{LTBLUE}Maksimalna udaljenost Rafinerija nafte od ruba {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH             :Vrlo glatko
-STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_SMOOTH                  :Glatko
-STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_ROUGH                   :Grubo
-STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_ROUGH              :Vrlo grubo
-STR_CONFIG_PATCHES_TREE_PLACER                                  :{LTBLUE}Algoritam postavljanja drveća: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_TREE_PLACER_NONE                             :Nijedan
-STR_CONFIG_PATCHES_TREE_PLACER_ORIGINAL                         :Izvorno
-STR_CONFIG_PATCHES_TREE_PLACER_IMPROVED                         :Unaprijeđeno
-STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE         :Obrnuto smjeru kazaljke na satu
-STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_CLOCKWISE                 :U smjeru kazaljke na satu
-
-STR_CONFIG_PATCHES_STATION_SPREAD                               :{LTBLUE}Maksimalna raširenost stanice: {ORANGE}{STRING} {RED}Pozor: Visoka vrijednost usporuje igru
-STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Automatski servisiraj helikoptere na heliodromima: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Poveži alatnu traku za krajolik sa alatnim trakama za željeznicu/ceste/vodu/zračne luke: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_LIVERIES_OWN                                 :Vlastita tvrtka
-STR_CONFIG_PATCHES_LIVERIES_ALL                                 :Sve tvrtke
-
-STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Maksimalan broj vlakova po igraču: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Maximalan broj cestovnih vozila po igraču: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}Maksimalan broj zrakoplova po igraču: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAX_SHIPS                                    :{LTBLUE}Maximalan broj brodova po igraču: {ORANGE}{STRING}
-
-STR_CONFIG_PATCHES_AI_BUILDS_TRAINS                             :{LTBLUE}Isključi vlakove za računalo: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH                            :{LTBLUE}Isključi cestovna vozila za računalo: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT                           :{LTBLUE}Isključi zrakoplov za računalo: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AI_BUILDS_SHIPS                              :{LTBLUE}Isključi cestovna vozila za računalo: {ORANGE}{STRING}
-
-STR_CONFIG_PATCHES_AINEW_ACTIVE                                 :{LTBLUE}Omogući novi AI (alfa): {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER                            :{LTBLUE}Omogući AI u modu s više igrača (eksperimentalno): {ORANGE}{STRING}
-
-STR_CONFIG_PATCHES_SERVINT_TRAINS                               :{LTBLUE}Pretpostavljeni period servisiranja vlakova: {ORANGE}{STRING} dana/%
-STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED                      :{LTBLUE}Pretpostavljeni period servisiranja vlakova: {ORANGE}onemogućeno
-STR_CONFIG_PATCHES_SERVINT_ROADVEH                              :{LTBLUE}Pretpostavljeni period servisiranja cestovnih vozila: {ORANGE}{STRING} dana/%
-STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED                     :{LTBLUE}Pretpostavljeni period servisiranja cestovnih vozila: {ORANGE}onemogućeno
-STR_CONFIG_PATCHES_SERVINT_AIRCRAFT                             :{LTBLUE}Pretpostavljeni period servisiranja zrakoplova: {ORANGE}{STRING} dana/%
-STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED                    :{LTBLUE}Pretpostavljeni period servisiranja aviona: {ORANGE}onemogućeno
-STR_CONFIG_PATCHES_SERVINT_SHIPS                                :{LTBLUE}Pretpostavljeni period servisiranja brodova: {ORANGE}{STRING} dana/%
-STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED                       :{LTBLUE}Pretpostavljeni period servisiranja brodova: {ORANGE}onemogućeno
-STR_CONFIG_PATCHES_DISABLE_ELRAILS                              :{LTBLUE}Onemogući električne tračnice: {ORANGE}{STRING}
-
-STR_CONFIG_PATCHES_COLORED_NEWS_YEAR                            :{LTBLUE}Vijesti u boji pojavljuju se: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_STARTING_YEAR                                :{LTBLUE}Početna godina: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ENDING_YEAR                                  :{LTBLUE}Završna godina: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Dopusti kupovanje udjela drugih tvrtki
-STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Položaj glavne alatne trake: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Lijevo
-STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Sredina
-STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :Desno
-
-STR_CONFIG_PATCHES_GUI                                          :{BLACK}Sučelje
-STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Izgradnja
-STR_CONFIG_PATCHES_VEHICLES                                     :{BLACK}Vozila
-STR_CONFIG_PATCHES_STATIONS                                     :{BLACK}Stanice
-STR_CONFIG_PATCHES_ECONOMY                                      :{BLACK}Ekonomija
-STR_CONFIG_PATCHES_AI                                           :{BLACK}Konkurenti
-
-STR_CONFIG_PATCHES_DISABLED                                     :onemogućeno
-STR_CONFIG_PATCHES_INT32                                        :{NUM}
-STR_CONFIG_PATCHES_CURRENCY                                     :{CURRENCY}
-
-STR_CONFIG_PATCHES_QUERY_CAPT                                   :{WHITE}Promjeni vrijednost postavke
-STR_CONFIG_PATCHES_YAPF_SHIPS                                   :{LTBLUE}Koristi YAPF za brodove: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_YAPF_ROAD                                    :{LTBLUE}Koristi YAPF za cestovna vozila: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_YAPF_RAIL                                    :{LTBLUE}Koristi YAPF za vlakove: {ORANGE}{STRING}
-
-STR_TEMPERATE_LANDSCAPE                                         :Umjereni krajolik
-STR_SUB_ARCTIC_LANDSCAPE                                        :Pod-arktički krajolik
-STR_TOYLAND_LANDSCAPE                                           :Toyland krajolik
-
-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_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}
-STR_CHEAT_BUILD_IN_PAUSE                                        :{LTBLUE}Gradi dok je vrijeme zaustavljeno: {ORANGE}{STRING}
-STR_CHEAT_NO_JETCRASH                                           :{LTBLUE}Veliki avioni se ne će rušiti (često) na malim zračnim lukama: {ORANGE} {STRING}
-STR_CHEAT_SWITCH_CLIMATE                                        :{LTBLUE}Promijeni klimu: {ORANGE} {STRING}
-STR_CHEAT_CHANGE_DATE                                           :{LTBLUE}Promijeni datum: {ORANGE} {DATE_SHORT}
-STR_CHEAT_SETUP_PROD                                            :{LTBLUE}Omogući izmjeni produkcijskih vrijednosti: {ORANGE}{STRING}
-
-STR_HEADING_FOR_WAYPOINT                                        :{LTBLUE}Ide prema {WAYPOINT}
-STR_HEADING_FOR_WAYPOINT_VEL                                    :{LTBLUE}Ide prema {WAYPOINT}, {VELOCITY}
-
-
-STR_WAYPOINTNAME_CITY                                           : Čvorište{TOWN}
-STR_WAYPOINTNAME_CITY_SERIAL                                    :Čvorište {TOWN} #{COMMA}
-STR_LANDINFO_WAYPOINT                                           :Čvorište
-
-STR_WAYPOINT                                                    :{WHITE}Čvorište
-STR_WAYPOINT_GRAPHICS_TIP                                       :{BLACK}Odaberi vrstu čvorišta
-
-STR_WAYPOINT_VIEWPORT                                           :{WHITE}{WAYPOINT}
-STR_WAYPOINT_VIEWPORT_TINY                                      :{TINYFONT}{WHITE}{WAYPOINT}
-STR_WAYPOINT_RAW                                                :{WAYPOINT}
-STR_EDIT_WAYPOINT_NAME                                          :{WHITE}Promjeni ime čvorišta
-
-STR_CANT_CHANGE_WAYPOINT_NAME                                   :{WHITE}Ne možeš promijeniti ime smjerokaza...
-STR_CONVERT_RAIL_TO_WAYPOINT_TIP                                :{BLACK}Promijeni tračnicu u čvorište
-STR_CANT_BUILD_TRAIN_WAYPOINT                                   :{WHITE}Ne možeš izgraditi željeznički smjerokaz ovdje...
-STR_CANT_REMOVE_TRAIN_WAYPOINT                                  :{WHITE}Ne možeš ukloniti željeznički smjerokaz odavdje...
-
-STR_BUILD_AUTORAIL_TIP                                          :{BLACK}Izgradi željezničku tračnicu koristeći Autorail modus
-
-STR_NO_TOWN_IN_SCENARIO                                         :{WHITE}...u ovom scenariju nema gradova
-
-STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Jeste li sigurni da želite napraviti nasumični krajolik?
-STR_MANY_RANDOM_TOWNS                                           :{BLACK}Mnogo nasumičnih gradova
-STR_RANDOM_TOWNS_TIP                                            :{BLACK}Popuni kartu nasumce smještenim gradovima
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Mnoge nasumične industrije
-STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Popuni kartu nasumce smještenim industrijama
-STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Ne možeš generirati gospodarstva...
-
-STR_LANDSCAPING_TOOLBAR_TIP                                     :{BLACK}Otvori alatnu traku za snižavanje/povećavanje, sadnju drveća, itd.
-STR_LANDSCAPING_TOOLBAR                                         :{WHITE}Uređivanje krajolika
-STR_LEVEL_LAND_TOOLTIP                                          :{BLACK}Ravnanje površine
-
-
-STR_TREES_RANDOM_TYPE                                           :{BLACK}Raznovrsno drveće
-STR_TREES_RANDOM_TYPE_TIP                                       :{BLACK}Stavi drveće nasumičnog tipa
-
-STR_CANT_BUILD_CANALS                                           :{WHITE}Ovdje ne možeš graditi kanale...
-STR_LANDINFO_CANAL                                              :Kanal
-
-
-STR_BUOY_IS_IN_USE                                              :{WHITE}...plutača je u uporabi!
-
-STR_LANDINFO_COORDS                                             :{BLACK}Koordinate: {LTBLUE}{NUM}x{NUM} ({STRING})
-
-STR_CANT_REMOVE_PART_OF_STATION                                 :{WHITE}Ne možeš ukloniti dio stanice...
-STR_CANT_CONVERT_RAIL                                           :{WHITE}Ne možeš pretvoriti vrstu tračnica ovdje...
-
-STR_DRAG_WHOLE_TRAIN_TO_SELL_TIP                                :{BLACK}Povucite lokomotivu na ovo mjesto da bi prodaoli cijeli vlak
-
-STR_DRAG_DROP                                                   :{BLACK}Povuci i spusti
-STR_STATION_DRAG_DROP                                           :{BLACK}Napravi stanicu koristeći drag & drop
-STR_SELECT_STATION_CLASS_TIP                                    :{BLACK}Odaberite vrstu stanice koju želite vidjeti
-STR_SELECT_STATION_TYPE_TIP                                     :{BLACK}Izaberite vrstu stanice za izgradnju
-
-STR_FAST_FORWARD                                                :{BLACK}Premotaj igru naprijed
-STR_MESSAGE_HISTORY                                             :{WHITE}Povijest poruka
-STR_MESSAGE_HISTORY_TIP                                         :{BLACK}Popis nedavnih novinskih poruka
-STR_MESSAGES_DISABLE_ALL                                        :{BLACK}Onemogući sve
-STR_MESSAGES_ENABLE_ALL                                         :{BLACK}Omogući sve
-
-STR_CONSTRUCT_COAL_MINE_TIP                                     :{BLACK}Izgradi rudnik ugljena
-STR_CONSTRUCT_FOREST_TIP                                        :{BLACK}Posadi šumu
-STR_CONSTRUCT_OIL_RIG_TIP                                       :{BLACK}Izgradi naftnu bušotinu
-STR_CONSTRUCT_FARM_TIP                                          :{BLACK}Financiraj farmu
-STR_CONSTRUCT_COPPER_ORE_MINE_TIP                               :{BLACK}Izgradi rudnik bakra
-STR_CONSTRUCT_OIL_WELLS_TIP                                     :{BLACK}Bušenjem traži naftu
-STR_CONSTRUCT_GOLD_MINE_TIP                                     :{BLACK}Izgradi rudnik zlata
-STR_CONSTRUCT_DIAMOND_MINE_TIP                                  :{BLACK}Izgradi rudnik dijamanata
-STR_CONSTRUCT_IRON_ORE_MINE_TIP                                 :{BLACK}Izgradi rudnik željeza
-STR_CONSTRUCT_FRUIT_PLANTATION_TIP                              :{BLACK}Financiraj plantažu voća
-STR_CONSTRUCT_RUBBER_PLANTATION_TIP                             :{BLACK}Financiraj plantažu gume
-STR_CONSTRUCT_WATER_SUPPLY_TIP                                  :{BLACK}Financiraj izvor vode
-STR_CONSTRUCT_COTTON_CANDY_TIP                                  :{BLACK}Posadi šumu šećerne vune
-STR_CONSTRUCT_BATTERY_FARM_TIP                                  :{BLACK}Financiraj tvornicu baterija
-STR_CONSTRUCT_COLA_WELLS_TIP                                    :{BLACK}Bušenjem traži Colu
-STR_CONSTRUCT_PLASTIC_FOUNTAINS_TIP                             :{BLACK}Financiraj izvore plastike
-STR_CONSTRUCT_BUBBLE_GENERATOR_TIP                              :{BLACK}Izgradi generator balona
-STR_CONSTRUCT_TOFFEE_QUARRY_TIP                                 :{BLACK}Financiraj kamenolom mliječne karamele
-STR_CONSTRUCT_SUGAR_MINE_TIP                                    :{BLACK}Izgradi šećeranu
-
-STR_INDUSTRYDIR_CAPTION                                         :{WHITE}Gospodarstva
-STR_INDUSTRYDIR_ITEM                                            :{ORANGE}{INDUSTRY}{BLACK} ({CARGO}){YELLOW} ({COMMA}% prevezeno)
-STR_INDUSTRYDIR_ITEM_TWO                                        :{ORANGE}{INDUSTRY}{BLACK} ({CARGO}/{CARGO}){YELLOW} ({COMMA}%/{COMMA}% prevezeno)
-STR_INDUSTRYDIR_ITEM_NOPROD                                     :{ORANGE}{INDUSTRY}
-
-STR_INDUSTRY_TOO_CLOSE                                          :{WHITE}...preblizu drugom gospodarstvu
-
-STR_RAIL_REFIT_VEHICLE_TO_CARRY                                 :{BLACK}Prepravi vlak kako bi nosio drugu vrstu tereta
-STR_RAIL_REFIT_VEHICLE                                          :{BLACK}Prepravi vlak
-STR_RAIL_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Izaberi vrstu tereta koju će vlak nositi
-STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED                             :{BLACK}Prepravi vlak kako bi nosio označenu vrstu tereta
-STR_RAIL_CAN_T_REFIT_VEHICLE                                    :{WHITE}Ne možeš prepraviti vlak...
-STR_CONFIG_PATCHES_SERVINT_ISPERCENT                            :{LTBLUE}Servisni intervali u postotcima: {ORANGE}{STRING}
-STR_CONFIG_GAME_PRODUCTION                                      :{WHITE}Promijeni proizvodnju
-
-TEMP_AI_IN_PROGRESS                                             :{WHITE}Dobrodošli u novi AI pod razvojem. Ukoliko naiđete na probleme, napravite sliku ekrana i stavite ju na forum.
-TEMP_AI_ACTIVATED                                               :{WHITE}Upozorenje: ovaj novi AI je još uvijek alfa! Trenutno, samo kamioni i autobusi rade!
-TEMP_AI_MULTIPLAYER                                             :{WHITE}Upozorenje: implementacije je još uvijek pokusna (koristeći novi AI). Molimo prijavite bilo kakav problem na truelight@openttd.org
-
-############ network gui strings
-
-STR_NETWORK_MULTIPLAYER                                         :{WHITE}Više igrača
-
-STR_NETWORK_PLAYER_NAME                                         :{BLACK}Ime igrača:
-STR_NETWORK_ENTER_NAME_TIP                                      :{BLACK}Ovo je ime po kojem će te drugi igrači identificirati
-STR_NETWORK_CONNECTION                                          :{BLACK}Veza:
-STR_NETWORK_CONNECTION_TIP                                      :{BLACK}Izaberi između internetske igre ili igre preko lokalne mreže (LAN)
-
-STR_NETWORK_START_SERVER                                        :{BLACK}Pokreni poslužitelj
-STR_NETWORK_START_SERVER_TIP                                    :{BLACK}Pokreni vlastiti poslužitelj
-
-STR_NETWORK_GAME_NAME                                           :{BLACK}Ime
-STR_NETWORK_GAME_NAME_TIP                                       :{BLACK}Ime igre
-STR_NETWORK_INFO_ICONS_TIP                                      :{BLACK}Jezik, verzija poslužitelja, itd.
-STR_NETWORK_CLICK_GAME_TO_SELECT                                :{BLACK}Klikni na igru s liste kako bi ju izabrao
-
-STR_NETWORK_FIND_SERVER                                         :{BLACK}Pronađi poslužitelj
-STR_NETWORK_FIND_SERVER_TIP                                     :{BLACK}Pronađi poslužitelje u mreži
-STR_NETWORK_ADD_SERVER                                          :{BLACK}Dodaj poslužitelj
-STR_NETWORK_ADD_SERVER_TIP                                      :{BLACK}Dodaje poslužitelj na popis koji će uvijek biti provjeren postoje li igre u tijeku.
-STR_NETWORK_ENTER_IP                                            :{BLACK}Unesi adresu domaćina
-
-STR_NETWORK_GENERAL_ONLINE                                      :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA}
-STR_NETWORK_CLIENTS_CAPTION                                     :{BLACK}Klijenti
-STR_NETWORK_CLIENTS_CAPTION_TIP                                 :{BLACK}Klijenata online / klijenata maks{}Tvrki online / tvrki maks
-STR_NETWORK_GAME_INFO                                           :{SILVER}INFO O IGRI
-STR_ORANGE                                                      :{ORANGE}{STRING}
-STR_NETWORK_CLIENTS                                             :{SILVER}Klijenti:  {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
-STR_NETWORK_LANGUAGE                                            :{SILVER}Jezik:  {WHITE}{STRING}
-STR_NETWORK_TILESET                                             :{SILVER}Set pločica:  {WHITE}{STRING}
-STR_NETWORK_MAP_SIZE                                            :{SILVER}Veličina karte:  {WHITE}{COMMA}x{COMMA}
-STR_NETWORK_SERVER_VERSION                                      :{SILVER}Verzija poslužitelja:  {WHITE}{STRING}
-STR_NETWORK_SERVER_ADDRESS                                      :{SILVER}Adresa poslužitelja:  {WHITE}{STRING} : {NUM}
-STR_NETWORK_START_DATE                                          :{SILVER}Datum početka:  {WHITE}{DATE_SHORT}
-STR_NETWORK_CURRENT_DATE                                        :{SILVER}Trenutni datum:  {WHITE}{DATE_SHORT}
-STR_NETWORK_PASSWORD                                            :{SILVER}Zaštićeno zaporkom!
-STR_NETWORK_SERVER_OFFLINE                                      :{SILVER}POSLUŽITELJ NEDOSTUPAN
-STR_NETWORK_SERVER_FULL                                         :{SILVER}POSLUŽITELJ PUN
-STR_NETWORK_VERSION_MISMATCH                                    :{SILVER}RAZLIKA U VERZIJAMA
-STR_NETWORK_GRF_MISMATCH                                        :{SILVER}NEWGRF GREŠKA
-
-STR_NETWORK_JOIN_GAME                                           :{BLACK}Pridruži se igri
-
-
-STR_NETWORK_START_GAME_WINDOW                                   :{WHITE}Započni novu igru za više igrača
-
-STR_NETWORK_NEW_GAME_NAME                                       :{BLACK}Ime igre:
-STR_NETWORK_NEW_GAME_NAME_TIP                                   :{BLACK}Ime igre bit će prikazno drugim igračima u izborniku za odabir igre s više igrača
-STR_NETWORK_SET_PASSWORD                                        :{BLACK}Postavi zaporku
-STR_NETWORK_PASSWORD_TIP                                        :{BLACK}Zaštiti svoju igru pomoću zaporke ukoliko ne želiš da bude javno dostupna
-STR_NETWORK_SELECT_MAP                                          :{BLACK}Izaberi kartu:
-STR_NETWORK_SELECT_MAP_TIP                                      :{BLACK}Koju kartu želiš igrati?
-STR_NETWORK_NUMBER_OF_CLIENTS                                   :{BLACK}Maks klijenata:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP                               :{BLACK}Izaberi maksimalan broj klijenata. Ne moraju sva mjesta biti popunjena.
-STR_NETWORK_COMBO1                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_LAN                                                 :LAN
-STR_NETWORK_INTERNET                                            :Internet
-STR_NETWORK_LAN_INTERNET                                        :LAN / Internet
-STR_NETWORK_INTERNET_ADVERTISE                                  :Internet (oglasi)
-STR_NETWORK_COMBO2                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS                                           :0 igrača
-STR_NETWORK_1_PLAYERS                                           :1 igrač
-STR_NETWORK_2_PLAYERS                                           :2 igrača
-STR_NETWORK_3_PLAYERS                                           :3 igrača
-STR_NETWORK_4_PLAYERS                                           :4 igrača
-STR_NETWORK_5_PLAYERS                                           :5 igrača
-STR_NETWORK_6_PLAYERS                                           :6 igrača
-STR_NETWORK_7_PLAYERS                                           :7 igrača
-STR_NETWORK_8_PLAYERS                                           :8 igrača
-STR_NETWORK_9_PLAYERS                                           :9 igrača
-STR_NETWORK_10_PLAYERS                                          :10 igrača
-STR_NETWORK_NUMBER_OF_COMPANIES                                 :{BLACK}Maks tvrki:
-STR_NETWORK_NUMBER_OF_COMPANIES_TIP                             :{BLACK}Ograniči poslužitelj na određeni broj tvrtki
-STR_NETWORK_COMBO3                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_NUMBER_OF_SPECTATORS                                :{BLACK}Maks promatrača:
-STR_NETWORK_NUMBER_OF_SPECTATORS_TIP                            :{BLACK}Ograniči poslužitelj na određeni broj gledatelja
-STR_NETWORK_COMBO4                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_LANGUAGE_SPOKEN                                     :{BLACK}Jezik kojim se govori:
-STR_NETWORK_LANGUAGE_TIP                                        :{BLACK}Drugi igrači znati će kojim se jezikom govori na poslužitelju
-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}Započni igru
-STR_NETWORK_START_GAME_TIP                                      :{BLACK}Započni novu igru u mreži na nasumičnoj mapi ili iz scenarija
-STR_NETWORK_LOAD_GAME                                           :{BLACK}Učitaj igru
-STR_NETWORK_LOAD_GAME_TIP                                       :{BLACK}Nastavi snimljenu igru za više igrača (pazite da se spojite pod svojim imenom)
-
-############ Leave those lines in this order!!
-STR_NETWORK_LANG_ANY                                            :Bilo koji
-STR_NETWORK_LANG_ENGLISH                                        :Engleski
-STR_NETWORK_LANG_GERMAN                                         :Njemački
-STR_NETWORK_LANG_FRENCH                                         :Francuski
-############ End of leave-in-this-order
-
-STR_NETWORK_GAME_LOBBY                                          :{WHITE}Predvorje multiplayer igre
-
-STR_NETWORK_PREPARE_TO_JOIN                                     :{BLACK}Pripremanje za pridruživanje:   {ORANGE}{STRING}
-STR_NETWORK_COMPANY_LIST_TIP                                    :{BLACK}Popis svih kompanija trenutno u igri. Možete se pridružiti jednoj ili osnovati novu ako postoji slobodno mjesto
-STR_NETWORK_NEW_COMPANY                                         :{BLACK}Nova tvrtka
-STR_NETWORK_NEW_COMPANY_TIP                                     :{BLACK}Otvori novu tvrtku
-STR_NETWORK_SPECTATE_GAME                                       :{BLACK}Gledaj igru
-STR_NETWORK_SPECTATE_GAME_TIP                                   :{BLACK}Promatraj igru kao gledatelj
-STR_NETWORK_JOIN_COMPANY                                        :{BLACK}Pridruži se tvrtki
-STR_NETWORK_JOIN_COMPANY_TIP                                    :{BLACK}Pomogni upravljati ovom tvrtkom
-STR_NETWORK_REFRESH                                             :{BLACK}Osvježi poslužitelja
-STR_NETWORK_REFRESH_TIP                                         :{BLACK}Osvježi podatke o poslužitelju
-
-STR_NETWORK_COMPANY_INFO                                        :{SILVER}PODACI O TVRTKI
-
-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_PERFORMANCE                                         :{SILVER}Izvršavanje: {WHITE}{NUM}
-
-STR_NETWORK_VEHICLES                                            :{SILVER}Vozila:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
-STR_NETWORK_STATIONS                                            :{SILVER}Stanice:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
-STR_NETWORK_PLAYERS                                             :{SILVER}Igrači:  {WHITE}{STRING}
-
-STR_NETWORK_CONNECTING                                          :{WHITE}Spajanje...
-
-############ Leave those lines in this order!!
-STR_NETWORK_CONNECTING_1                                        :{BLACK}(1/6) Spajanje u toku..
-STR_NETWORK_CONNECTING_2                                        :{BLACK}(2/6) Provjera ovlaštenja..
-STR_NETWORK_CONNECTING_3                                        :{BLACK}(3/6) Čekanje..
-STR_NETWORK_CONNECTING_4                                        :{BLACK}(4/6) Preuzimanje karte..
-STR_NETWORK_CONNECTING_5                                        :{BLACK}(5/6) Obrada podataka..
-STR_NETWORK_CONNECTING_6                                        :{BLACK}(6/6) Prijavljivanje..
-
-STR_NETWORK_CONNECTING_SPECIAL_1                                :{BLACK}Dohvaćanje podataka o igri..
-STR_NETWORK_CONNECTING_SPECIAL_2                                :{BLACK}Dohvaćanje podataka o tvrtki..
-############ End of leave-in-this-order
-STR_NETWORK_CONNECTING_WAITING                                  :{BLACK}{NUM} klijen{P t ta ata} {P je su je} prije Vas
-STR_NETWORK_CONNECTING_DOWNLOADING                              :{BLACK} Do sad je preuzeto {NUM} / {NUM} kbajta
-
-STR_NETWORK_DISCONNECT                                          :{BLACK}Odspoji
-
-STR_NETWORK_GIVE_MONEY_CAPTION                                  :{WHITE}Unesite količinu novca koju želite dati
-STR_NETWORK_NEED_GAME_PASSWORD_CAPTION                          :{WHITE}Poslužitelj je zaštićen. Upišite zaporku
-STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION                       :{WHITE}Tvrtka je zaštićena. Unesite zaporku
-STR_NETWORK_CLIENT_LIST                                         :{WHITE}Popis klijenata
-
-STR_NETWORK_ERR_NOTAVAILABLE                                    :{WHITE}Nisu pronađeni mrežni uređaji ili je kompajlirano bez ENABLE_NETWORK
-STR_NETWORK_ERR_NOSERVER                                        :{WHITE} Niti jedna mrežna igra nije pronađena
-STR_NETWORK_ERR_NOCONNECTION                                    :{WHITE} Poslužitelj nije odgovorio na zahtjev
-STR_NETWORK_ERR_NEWGRF_MISMATCH                                 :{WHITE} Ne mogu se spojiti zbog neslaganja u NewGRF
-STR_NETWORK_ERR_DESYNC                                          :{WHITE} Neuspješno usklađivanje mrežne igre
-STR_NETWORK_ERR_LOSTCONNECTION                                  :{WHITE} Izgubljena veza sa mrežnom igrom
-STR_NETWORK_ERR_SAVEGAMEERROR                                   :{WHITE} Nemoguće je učitati snimljenu igru
-STR_NETWORK_ERR_SERVER_START                                    :{WHITE} Nemoguće je pokrenuti poslužitelja
-STR_NETWORK_ERR_CLIENT_START                                    :{WHITE} Nije se moguće spojiti
-STR_NETWORK_ERR_TIMEOUT                                         :{WHITE} Istekla je veza #{NUM}
-STR_NETWORK_ERR_SERVER_ERROR                                    :{WHITE} Napravljena je greška u protokolu te se veza prekinula
-STR_NETWORK_ERR_WRONG_REVISION                                  :{WHITE}Revizija ovog klijenta ne slaže se sa revizijom servera
-STR_NETWORK_ERR_WRONG_PASSWORD                                  :{WHITE} Pogrešna zaporka
-STR_NETWORK_ERR_SERVER_FULL                                     :{WHITE} Poslužitelj je pun
-STR_NETWORK_ERR_SERVER_BANNED                                   :{WHITE} Zabranjen vam je pristup ovom poslužitelju
-STR_NETWORK_ERR_KICKED                                          :{WHITE} Izbačeni ste iz igre
-STR_NETWORK_ERR_CHEATER                                         :{WHITE} Na ovom poslužitelju nije dopušteno varanje
-
-STR_NETWORK_ERR_LEFT                                            :je napustio igru
-############ Leave those lines in this order!!
-STR_NETWORK_ERR_CLIENT_GENERAL                                  :opća greška
-STR_NETWORK_ERR_CLIENT_DESYNC                                   :greška u sinkronizaciji
-STR_NETWORK_ERR_CLIENT_SAVEGAME                                 :nije moguće učitati kartu
-STR_NETWORK_ERR_CLIENT_CONNECTION_LOST                          :veza je izgubljena
-STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR                           :greška u protokolu
-STR_NETWORK_ERR_CLIENT_NEWGRF_MISMATCH                          :NewGRF nepodudaranje
-STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED                           :nije ovlašten
-STR_NETWORK_ERR_CLIENT_NOT_EXPECTED                             :primljen je nepoznat paket
-STR_NETWORK_ERR_CLIENT_WRONG_REVISION                           :pogrešna revizija
-STR_NETWORK_ERR_CLIENT_NAME_IN_USE                              :ime se već koristi
-STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD                           :pogrešna zaporka
-STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH                          :pogrešan igrač-id u DoCommand
-STR_NETWORK_ERR_CLIENT_KICKED                                   :izbačen{G "" a o) od strane poslužitelja
-STR_NETWORK_ERR_CLIENT_CHEATER                                  :je pokuša{G o la lo} varati
-STR_NETWORK_ERR_CLIENT_SERVER_FULL                              :poslužitelj je pun
-############ End of leave-in-this-order
-STR_NETWORK_CLIENT_JOINED                                       :se pridruži{G o la lo} igri
-STR_NETWORK_GIVE_MONEY                                          :je da{G o la lo} novac Vašoj tvrtki ({CURRENCY})
-STR_NETWORK_GAVE_MONEY_AWAY                                     :dali ste {STRING} novac ({CURRENCY})
-STR_NETWORK_CHAT_COMPANY_CAPTION                                :[Tim]:
-STR_NETWORK_CHAT_COMPANY                                        :[Tim] {STRING}: {GRAY}{STRING}
-STR_NETWORK_CHAT_TO_COMPANY                                     :[Tim] Za {STRING}: {GRAY}{STRING}
-STR_NETWORK_CHAT_CLIENT_CAPTION                                 :[Privatno] :
-STR_NETWORK_CHAT_CLIENT                                         :[Privatno] {STRING}: {GRAY}{STRING}
-STR_NETWORK_CHAT_TO_CLIENT                                      :[Privatno] Za {STRING}: {GRAY}{STRING}
-STR_NETWORK_CHAT_ALL_CAPTION                                    :[Svima] :
-STR_NETWORK_CHAT_ALL                                            :[Svima] {STRING}: {GRAY}{STRING}
-STR_NETWORK_NAME_CHANGE                                         :je promjeni {G o la lo} ime u
-STR_NETWORK_SERVER_SHUTDOWN                                     :{WHITE} Poslužitelj je zatvorio sesiju
-STR_NETWORK_SERVER_REBOOT                                       :{WHITE} Poslužitelj se ponovno pokreće...{}Molimo pričekajte...
-
-STR_NETWORK_SERVER                                              :Poslužitelj
-STR_NETWORK_CLIENT                                              :Klijent
-STR_NETWORK_SPECTATORS                                          :Promatrači
-
-STR_NETWORK_CLIENTLIST_NONE                                     :(nitko)
-STR_NETWORK_CLIENTLIST_KICK                                     :Izbaci
-STR_NETWORK_CLIENTLIST_GIVE_MONEY                               :Daj novac
-STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL                             :Razgovaraj sa svima
-STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY                         :Razgovaraj s tvrtkom
-STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT                          :Privatna poruka
-
-
-STR_NETWORK_SEND                                                :{BLACK}Pošalji
-
-############ end network gui strings
-
-
-STR_CONFIG_PATCHES_MAP_X                                        :{LTBLUE}Veličina karte X: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAP_Y                                        :{LTBLUE}Veličina karte Y: {ORANGE}{STRING}
-
-
-##### PNG-MAP-Loader
-
-STR_PNGMAP_ERROR                                                :{WHITE}Nemoguće je učitati krajolik iz PNG-a...
-STR_PNGMAP_ERR_FILE_NOT_FOUND                                   :{WHITE}...datoteka nije pronađena.
-STR_PNGMAP_ERR_IMAGE_TYPE                                       :{WHITE}...ne mogu konvertirati tip slike. 8 ili 24-bitni PNG je potreban.
-STR_PNGMAP_ERR_MISC                                             :{WHITE}...nešto je otišlo u krivom smjeru. Oprostite. (vjerojatno je pokvarena datoteka)
-
-STR_BMPMAP_ERROR                                                :{WHITE}Ne mogu učitati krajolik iz BMP...
-STR_BMPMAP_ERR_IMAGE_TYPE                                       :{WHITE}...ne mogu pretvoriti tip slike.
-
-##id 0x0800
-STR_0800_COST                                                   :{TINYFONT}{RED}Trošak: {CURRENCY}
-STR_0801_COST                                                   :{RED}Trošak: {CURRENCY}
-STR_0802_INCOME                                                 :{TINYFONT}{GREEN}Prihod: {CURRENCY}
-STR_0803_INCOME                                                 :{GREEN}Prihod: {CURRENCY}
-STR_FEEDER_TINY                                                 :{TINYFONT}{YELLOW}Prebaci: {CURRENCY}
-STR_FEEDER                                                      :{YELLOW}Prebaci: {CURRENCY}
-STR_0805_ESTIMATED_COST                                         :{WHITE}Predviđeni trošak: {CURRENCY}
-STR_0807_ESTIMATED_INCOME                                       :{WHITE}Predviđeni prihod: {CURRENCY}
-STR_0808_CAN_T_RAISE_LAND_HERE                                  :{WHITE}Ne možeš povisiti zemlju ovdje...
-STR_0809_CAN_T_LOWER_LAND_HERE                                  :{WHITE}Ne možeš sniziti zemlju ovdje...
-STR_080A_ROCKS                                                  :Stijenje
-STR_080B_ROUGH_LAND                                             :Surova zemlja
-STR_080C_BARE_LAND                                              :Ogoljena zemlja
-STR_080D_GRASS                                                  :Trava
-STR_080E_FIELDS                                                 :Polja
-STR_080F_SNOW_COVERED_LAND                                      :Zemlja pokrivena snijegom
-STR_0810_DESERT                                                 :Pustinja
-
-##id 0x1000
-STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION                         :{WHITE}Zemlja nakošena u krivom smjeru
-STR_1001_IMPOSSIBLE_TRACK_COMBINATION                           :{WHITE}Nemoguća kombinacija tračnica
-STR_1002_EXCAVATION_WOULD_DAMAGE                                :{WHITE}Iskopavanje bi oštetilo tunel
-STR_1003_ALREADY_AT_SEA_LEVEL                                   :{WHITE}Već je na razini mora
-STR_1004_TOO_HIGH                                               :{WHITE}Previsoko
-STR_1005_NO_SUITABLE_RAILROAD_TRACK                             :{WHITE}Nije prikladno za želježnicke tračnice
-STR_1007_ALREADY_BUILT                                          :{WHITE}...već izgrađeno
-STR_1008_MUST_REMOVE_RAILROAD_TRACK                             :{WHITE}Moraš najprije ukloniti tračnice
-STR_100A_RAILROAD_CONSTRUCTION                                  :{WHITE}Izgradnja željeznice
-STR_TITLE_ELRAIL_CONSTRUCTION                                   :{WHITE}Izgradnja elektrificiranih tračnica
-STR_100B_MONORAIL_CONSTRUCTION                                  :{WHITE}Izgradnja jednotračne željeznice
-STR_100C_MAGLEV_CONSTRUCTION                                    :{WHITE}Izgradnja MagLeva
-STR_100D_SELECT_RAIL_BRIDGE                                     :{WHITE}Odaberi željeznički most
-STR_100E_CAN_T_BUILD_TRAIN_DEPOT                                :{WHITE}Ovdje nije moguće graditi željezničko spremište...
-STR_100F_CAN_T_BUILD_RAILROAD_STATION                           :{WHITE}Ovdje nije moguće izgraditi željezničku stanicu...
-STR_1010_CAN_T_BUILD_SIGNALS_HERE                               :{WHITE}Ovdje ne možeš postaviti znakove...
-STR_1011_CAN_T_BUILD_RAILROAD_TRACK                             :{WHITE}Ovdje ne možeš graditi tračnice...
-STR_1012_CAN_T_REMOVE_RAILROAD_TRACK                            :{WHITE}Odavde ne možeš ukloniti tračnice...
-STR_1013_CAN_T_REMOVE_SIGNALS_FROM                              :{WHITE}Odavde ne možeš maknuti signale...
-STR_1014_TRAIN_DEPOT_ORIENTATION                                :{WHITE}Smjer spremišta vlakova
-STR_1015_RAILROAD_CONSTRUCTION                                  :Izgradnja tračnica
-STR_TOOLB_ELRAIL_CONSTRUCTION                                   :Izgradnja električne željezničke pruge
-STR_1016_MONORAIL_CONSTRUCTION                                  :Izgradnja jednotračne željeznice
-STR_1017_MAGLEV_CONSTRUCTION                                    :Izgradnja MagLeva
-STR_1018_BUILD_RAILROAD_TRACK                                   :{BLACK}Izgradi tračnicu
-STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING                         :{BLACK}Izgradi spremište vlakova (za gradnju i servisiranje vlakova)
-STR_101A_BUILD_RAILROAD_STATION                                 :{BLACK}Izgradi željezničku stanicu
-STR_101B_BUILD_RAILROAD_SIGNALS                                 :{BLACK}Izgradi željezničke signale
-STR_101C_BUILD_RAILROAD_BRIDGE                                  :{BLACK}Izgradi željeznički most
-STR_101D_BUILD_RAILROAD_TUNNEL                                  :{BLACK}Izgradi željeznički tunel
-STR_101E_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Prebacuj izgradnju/uklanjanje za tračnice i željezničke signale
-STR_101F_BRIDGE_SELECTION_CLICK                                 :{BLACK}Odabir mosta - pritisni na most koji želiš izgraditi
-STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO                       :{BLACK}Odaberi smjer željezničkog spremišta
-STR_1021_RAILROAD_TRACK                                         :Tračnica
-STR_1023_RAILROAD_TRAIN_DEPOT                                   :Spremište vlakova
-STR_1024_AREA_IS_OWNED_BY_ANOTHER                               :{WHITE}...područje je u vlasništvu druge tvrke
-STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS                          :Željezničke tračnice s normalnim znakovima
-STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Željezničke tračnice s prethodno postavljenim znakovima
-STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Željezničke tračnice s izlaznim znakovima
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Željezničke tračnice s kombo znakovima
-
-
-
-##id 0x1800
-STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Moraš prvo ukloniti cestu
-STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Cestovni radovi u tijeku
-STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Izgradnja ceste
-STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Izaberi cestovni most
-STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Ovdje ne možeš graditi cestu...
-STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Odavde ne možeš maknuti cestu...
-STR_1806_ROAD_DEPOT_ORIENTATION                                 :{WHITE}Smjer cestovnog spremišta
-STR_1807_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}Ovdje ne možeš izgraditi spremište cestovnih vozila...
-STR_1808_CAN_T_BUILD_BUS_STATION                                :{WHITE}Nije moguće izgraditi autobusnu stanicu...
-STR_1809_CAN_T_BUILD_TRUCK_STATION                              :{WHITE}Nije moguće izgraditi kamionski terminal...
-STR_180A_ROAD_CONSTRUCTION                                      :Izgradnja ceste
-STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Izgradi dio ceste
-STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Izgradi spremište cestovnih vozila (za izgradnju i servisiranje vozila)
-STR_180D_BUILD_BUS_STATION                                      :{BLACK}Izgradi autobusnu stanicu
-STR_180E_BUILD_TRUCK_LOADING_BAY                                :{BLACK}Izgradi pretovarni kamionski terminal
-STR_180F_BUILD_ROAD_BRIDGE                                      :{BLACK}Izgradi cestovni most
-STR_1810_BUILD_ROAD_TUNNEL                                      :{BLACK}Izgradi cestovni tunel
-STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Prebacuj izgradnju/uklanjanje ceste
-STR_1813_SELECT_ROAD_VEHICLE_DEPOT                              :{BLACK}Izaberi smjer spremišta cestovnih vozila
-STR_1814_ROAD                                                   :Cesta
-STR_1815_ROAD_WITH_STREETLIGHTS                                 :Cesta sa semaforima
-STR_1816_TREE_LINED_ROAD                                        :Cesta s tri trake
-STR_1817_ROAD_VEHICLE_DEPOT                                     :Spremište cestovnih vozila
-STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Prijelaz ceste preko željezničke pruge
-
-##id 0x2000
-STR_2000_TOWNS                                                  :{WHITE}Gradovi
-STR_TOWN_LABEL_POP                                              :{WHITE}{TOWN} ({COMMA})
-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}Građevina mora prvo biti srušena
-STR_2005                                                        :{WHITE}{TOWN}
-STR_2006_POPULATION                                             :{BLACK}Stanovništvo: {ORANGE}{COMMA}{BLACK}  Kuće: {ORANGE}{COMMA}
-STR_2007_RENAME_TOWN                                            :Preimenuj grad
-STR_2008_CAN_T_RENAME_TOWN                                      :{WHITE}Grad se ne može preimenovati...
-STR_2009_LOCAL_AUTHORITY_REFUSES                                :{WHITE}{TOWN} lokalna samouprava odbija to dozvoliti
-STR_200A_TOWN_NAMES_CLICK_ON_NAME                               :{BLACK}Imena gradova - pritisni na ime kako bi centrirao pogled na zaslon
-STR_200B_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Centriraj glavni pogled na lokaciju grada
-STR_200C_CHANGE_TOWN_NAME                                       :{BLACK}Promijeni ime grada
-STR_200D_PASSENGERS_LAST_MONTH_MAX                              :{BLACK}Putnika prošli mjesec: {ORANGE}{COMMA}{BLACK}  maks: {ORANGE}{COMMA}
-STR_200E_MAIL_LAST_MONTH_MAX                                    :{BLACK}Pošte prošli mjesec: {ORANGE}{COMMA}{BLACK}  maks: {ORANGE}{COMMA}
-STR_200F_TALL_OFFICE_BLOCK                                      :Visoki uredski blok
-STR_2010_OFFICE_BLOCK                                           :Uredski blok
-STR_2011_SMALL_BLOCK_OF_FLATS                                   :Mali stambeni blok
-STR_2012_CHURCH                                                 :Crkva
-STR_2013_LARGE_OFFICE_BLOCK                                     :Veliki uredski blok
-STR_2014_TOWN_HOUSES                                            :Gradske kuće
-STR_2015_HOTEL                                                  :Hotel
-STR_2016_STATUE                                                 :Kip
-STR_2017_FOUNTAIN                                               :Fontana
-STR_2018_PARK                                                   :Park
-STR_2019_OFFICE_BLOCK                                           :Uredski blok
-STR_201A_SHOPS_AND_OFFICES                                      :Trgovine i uredi
-STR_201B_MODERN_OFFICE_BUILDING                                 :Moderne uredske zgrade
-STR_201C_WAREHOUSE                                              :Skladište
-STR_201D_OFFICE_BLOCK                                           :Uredski blok
-STR_201E_STADIUM                                                :Stadion
-STR_201F_OLD_HOUSES                                             :Stare kuće
-STR_2020_LOCAL_AUTHORITY                                        :{BLACK}Lokalna samouprava
-STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Prikaži informacije o lokalnoj samoupravi
-STR_2022_LOCAL_AUTHORITY                                        :{WHITE}Lokalna samouprava {TOWN}
-STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Ocjene prijevoznih tvrtki:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
-STR_2025_SUBSIDIES                                              :{WHITE}Subvencije
-STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Ponuđene subvencije za pružanje usluga:
-STR_2027_FROM_TO                                                :{ORANGE}{STRING} od {STRING} do {STRING}
-STR_2028_BY                                                     :{YELLOW} (do {DATE_SHORT})
-STR_202A_NONE                                                   :{ORANGE}Ništa
-STR_202B_SERVICES_ALREADY_SUBSIDISED                            :{BLACK}Usluge subvencionirane:
-STR_202C_FROM_TO                                                :{ORANGE}{STRING} iz {STATION} prema {STATION}{YELLOW} ({COMPANY}
-STR_202D_UNTIL                                                  :{YELLOW}, do {DATE_SHORT})
-STR_202E_OFFER_OF_SUBSIDY_EXPIRED                               :{BLACK}{BIGFONT}Istekla je ponuda subvencije:{}{}Prijevoz tereta ( {STRING} ) od {STRING} do {STRING} neće više biti subvencioniran.
-STR_202F_SUBSIDY_WITHDRAWN_SERVICE                              :{BLACK}{BIGFONT}Povučena subvencija:{}{}Prijevoz tereta ( {STRING} ) od {STATION} do {STATION} nije više subvencioniran.
-STR_2030_SERVICE_SUBSIDY_OFFERED                                :{BLACK}{BIGFONT}Ponuđena je subvencija:{}{}Prvi koji preveze teret ({STRING}) od {STRING} do {STRING} dobivat će subvenciju od lokalne samouprave!
-STR_2031_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Subvencija je dodjeljena tvrtki {COMPANY}!{}{}Prijevoz tereta ({STRING}) od {STATION} do {STATION} plaćat će se 50% više slijedećih godinu dana!
-STR_2032_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Subvencija je dodjeljena tvrtki {COMPANY}!{}{}Prijevoz tereta ({STRING}) od {STATION} do {STATION} plaćat će se dvostruko slijedećih godinu dana!
-STR_2033_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Subvencija je dodjeljena tvrtki {COMPANY}!{}{}Prijevoz tereta ({STRING}) od {STATION} do {STATION} plaćat će se trostruko slijedećih godinu dana!
-STR_2034_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Subvencija je dodjeljena tvrtki {COMPANY}!{}{}Prijevoz tereta ({STRING}) od {STATION} do {STATION} plaćat će se četverostruko slijedećih godinu dana!
-STR_2035_LOCAL_AUTHORITY_REFUSES                                :{WHITE}{TOWN} lokalne vlasti odbijaju dozvoliti izgradnju još jedne zračne luke u ovom gradu
-STR_2036_COTTAGES                                               :Kolibe
-STR_2037_HOUSES                                                 :Kuće
-STR_2038_FLATS                                                  :Stanovi
-STR_2039_TALL_OFFICE_BLOCK                                      :Visoki uredski blok
-STR_203A_SHOPS_AND_OFFICES                                      :Trgovine i uredi
-STR_203B_SHOPS_AND_OFFICES                                      :Trgovine i uredi
-STR_203C_THEATER                                                :Kazalište
-STR_203D_STADIUM                                                :Stadion
-STR_203E_OFFICES                                                :Uredi
-STR_203F_HOUSES                                                 :Kuće
-STR_2040_CINEMA                                                 :Kino
-STR_2041_SHOPPING_MALL                                          :Trgovački centar
-STR_2042_DO_IT                                                  :{BLACK}Učini to
-STR_2043_LIST_OF_THINGS_TO_DO_AT                                :{BLACK}Popis stvari koje treba učiniti u ovom gradu - pritisni za dodatne informacije
-STR_2044_CARRY_OUT_THE_HIGHLIGHTED                              :{BLACK}Izvrši akcije označene na gornjem popisu
-STR_2045_ACTIONS_AVAILABLE                                      :{BLACK}Dostupne akcije:
-STR_2046_SMALL_ADVERTISING_CAMPAIGN                             :Mala oglasna kampanja
-STR_2047_MEDIUM_ADVERTISING_CAMPAIGN                            :Srednja oglasna kampanja
-STR_2048_LARGE_ADVERTISING_CAMPAIGN                             :Velika oglasna kampanja
-STR_2049_FUND_LOCAL_ROAD_RECONSTRUCTION                         :Financiraj popravljanje lokalne prometnice
-STR_204A_BUILD_STATUE_OF_COMPANY                                :Izgradi kip vlasnika tvrke
-STR_204B_FUND_NEW_BUILDINGS                                     :Financiraj nove građevine
-STR_204C_BUY_EXCLUSIVE_TRANSPORT                                :Kupi ekskluzivna prava prijevozna
-STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY                              :Podmiti lokalnu samoupravu
-STR_204D_INITIATE_A_SMALL_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Iniciraj malu oglasnu kampanju, kako bi privukao više putnika i tereta za svoje prijevozne usluge.{}  Trošak: {CURRENCY}
-STR_204E_INITIATE_A_MEDIUM_LOCAL                                :{WHITE}{STRING}{}{YELLOW} Iniciraj srednju oglasnu kampanju, kako bi privukao više putnika i tereta za svoje prijevozne usluge.{} Trošak: {CURRENCY}
-STR_204F_INITIATE_A_LARGE_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Iniciraj veliku oglasnu kampanju, kako bi privukao više putnika i tereta za svoje prijevozne usluge.{} Trošak: {CURRENCY}
-STR_2050_FUND_THE_RECONSTRUCTION                                :{WHITE}{STRING}{}{YELLOW} Financiraj popravak gradske mreže prometnica. Uzrokuje značajne poremećaje u cestovnom prometu do 6 mjeseci.{}  Trošak: {CURRENCY}
-STR_2051_BUILD_A_STATUE_IN_HONOR                                :{WHITE}{STRING}{}{YELLOW} Izgradi kip u čast svoje tvrke.{} Trošak: {CURRENCY}
-STR_2052_FUND_THE_CONSTRUCTION_OF                               :{WHITE}{STRING}{}{YELLOW} Financiraj izgradnju novih poslovnih prostora u gradu.{}  Trošak: {CURRENCY}
-STR_2053_BUY_1_YEAR_S_EXCLUSIVE                                 :{WHITE}{STRING}{}{YELLOW} Kupi jednogodišnje ekskluzivno pravo prijevoza u gradu. Gradska vlast će dopustiti putnicima i teretu da koriste samo stanice tvoje tvrtke.{} Trošak: {CURRENCY}
-STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY_DESC                         :{WHITE}{STRING}{}{YELLOW}Podmiti lokalnu vlast zbog povećanja rejtinga, riskirajući ozbiljne kazne ako vas uhvate{} Trošak: {CURRENCY}
-STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING                       :{BIGFONT}{BLACK}{TOWN} zahvatile prometne gužve!{}{}Program popravka cesta koji financira tvrtka  {COMPANY} slijedećih će 6 mjeseci zadavati glavobolje motociskistima!
-STR_2056                                                        :{TINYFONT}{WHITE}{TOWN}
-STR_2057                                                        :{ORANGE}{TOWN}{BLACK} ({COMMA})
-STR_2058_UNDER_CONSTRUCTION                                     :{STRING} (u izgradnji)
-STR_2059_IGLOO                                                  :Iglu
-STR_205A_TEPEES                                                 :Indijanski šator
-STR_205B_TEAPOT_HOUSE                                           :Čajnik za stanovanje
-STR_205C_PIGGY_BANK                                             :Kasica-Prasica
-
-STR_INDUSTRY                                                    :{INDUSTRY}
-STR_TOWN                                                        :{TOWN}
-STR_INDUSTRY_FORMAT                                             :{TOWN} {STRING}
-STR_STATION                                                     :{STATION}
-
-##id 0x2800
-STR_LANDSCAPING                                                 :Uređivanje krajolika
-STR_2800_PLANT_TREES                                            :Posadi drveće
-STR_2801_PLACE_SIGN                                             :Postavi znak
-STR_2802_TREES                                                  :{WHITE}Drveće
-STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...ovdje već postoji drvo
-STR_2804_SITE_UNSUITABLE                                        :{WHITE}...neprikladno mjesto
-STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Ovdje ne možeš posaditi drvo...
-STR_2806                                                        :{WHITE}{STRING}
-STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...previše znakova
-STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Ovdje ne možeš postaviti znak...
-STR_280A_SIGN                                                   :Znak
-STR_280B_EDIT_SIGN_TEXT                                         :{WHITE}Izmijeni tekst znaka
-STR_280C_CAN_T_CHANGE_SIGN_NAME                                 :{WHITE}Ne možeš promijeniti ime znaka...
-STR_280D_SELECT_TREE_TYPE_TO_PLANT                              :{BLACK}Izaberi vrstu drveta za sadnju
-STR_280E_TREES                                                  :Drveće
-STR_280F_RAINFOREST                                             :Kišna šuma
-STR_2810_CACTUS_PLANTS                                          :Kaktusi
-
-##id 0x3000
-STR_3000_RAIL_STATION_SELECTION                                 :{WHITE}Odabir željezničke stanice
-STR_3001_AIRPORT_SELECTION                                      :{WHITE}Odabir zračne luke
-STR_3002_ORIENTATION                                            :{BLACK}Smjer
-STR_3003_NUMBER_OF_TRACKS                                       :{BLACK}Broj tračnica
-STR_3004_PLATFORM_LENGTH                                        :{BLACK}Dužina platforme
-STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD                          :{WHITE}Preblizu drugoj željezničkoj stanici
-STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING                         :{WHITE}Spaja više od jedne postojeće stanice/terminala
-STR_3007_TOO_MANY_STATIONS_LOADING                              :{WHITE}U ovom gradu ima previše stanica/terminala
-STR_3008_TOO_MANY_STATIONS_LOADING                              :{WHITE}Previše stanica/terminala
-STR_3008A_TOO_MANY_BUS_STOPS                                    :{WHITE}Previše autobusnih stanica
-STR_3008B_TOO_MANY_TRUCK_STOPS                                  :{WHITE}Previše kamionskih stanica
-STR_3009_TOO_CLOSE_TO_ANOTHER_STATION                           :{WHITE}Preblizu drugoj stanici/terminalu
-STR_300A_0                                                      :{WHITE}{STATION} {STATIONFEATURES}
-STR_300B_MUST_DEMOLISH_RAILROAD                                 :{WHITE}Prvo moraš uništiti željezničku stanicu
-STR_300D_TOO_CLOSE_TO_ANOTHER_AIRPORT                           :{WHITE}Preblizu drugoj zračnoj luci
-STR_300E_MUST_DEMOLISH_AIRPORT_FIRST                            :{WHITE}Moraš uništiti zračnu luku prvo
-
-STR_3030_RENAME_STATION_LOADING                                 :Preimenuj stanicu/terminal
-STR_3031_CAN_T_RENAME_STATION                                   :{WHITE}Ne možeš preimenovati stanicu...
-STR_3032_RATINGS                                                :{BLACK}Ocjene
-STR_3033_ACCEPTS                                                :{BLACK}Prihvaća
-STR_3034_LOCAL_RATING_OF_TRANSPORT                              :{BLACK}Lokalna ocjena usluge prijevoza:
-
-############ range for rating starts
-STR_3035_APPALLING                                              :Užasno
-STR_3036_VERY_POOR                                              :Vrlo loše
-STR_3037_POOR                                                   :Loše
-STR_3038_MEDIOCRE                                               :Osrednje
-STR_3039_GOOD                                                   :Dobro
-STR_303A_VERY_GOOD                                              :Vrlo dobro
-STR_303B_EXCELLENT                                              :Izvrsno
-STR_303C_OUTSTANDING                                            :Izvanredno
-############ range for rating ends
-
-STR_303D                                                        :{WHITE}{STRING}: {YELLOW}{STRING} ({COMMA}%)
-STR_303E_NO_LONGER_ACCEPTS                                      :{WHITE}{STATION} više ne prihvaća {STRING}
-STR_303F_NO_LONGER_ACCEPTS_OR                                   :{WHITE}{STATION} više ne prihvaća {STRING} or {STRING}
-STR_3040_NOW_ACCEPTS                                            :{WHITE}{STATION} sad prihvaća {STRING}
-STR_3041_NOW_ACCEPTS_AND                                        :{WHITE}{STATION} od sada prihvaća {STRING} i {STRING}
-STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Smjer autobusne stanice
-STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Smjer kamionskog terminala
-STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Prvo moraš uništiti autobusnu stanicu
-STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Prvo moraš uništiti kamionski terminal
-STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} Stanic{P a e a}
-STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
-STR_304A_NONE                                                   :{YELLOW}- Ništa -
-STR_304B_SITE_UNSUITABLE                                        :{WHITE}...neprikladno mjesto
-STR_304C_TOO_CLOSE_TO_ANOTHER_DOCK                              :{WHITE}Preblizu drugom pristaništu
-STR_304D_MUST_DEMOLISH_DOCK_FIRST                               :{WHITE}Prvo moraš srušiti pristanište
-STR_304E_SELECT_RAILROAD_STATION                                :{BLACK}Izaberi smjer željezničke stanice
-STR_304F_SELECT_NUMBER_OF_PLATFORMS                             :{BLACK}Izaberi broj perona na željezničkoj stanici
-STR_3050_SELECT_LENGTH_OF_RAILROAD                              :{BLACK}Izaberi dužinu željezničke stanice
-STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Izaberi smjer autobusne stanice
-STR_3052_SELECT_TRUCK_LOADING_BAY                               :{BLACK}Izaberi smjer kamionskog terminala
-STR_3053_CENTER_MAIN_VIEW_ON_STATION                            :{BLACK}Centriraj glavni pogled na lokaciju stanice
-STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}Pokaži ocjene stanice
-STR_3055_CHANGE_NAME_OF_STATION                                 :{BLACK}Promijeni ime stanice
-STR_3056_SHOW_LIST_OF_ACCEPTED_CARGO                            :{BLACK}Prikaži popis prihvaćenog tereta
-STR_3057_STATION_NAMES_CLICK_ON                                 :{BLACK}Imena stanica - pritisni ime da bi centrirao glavni pogled na stanicu
-STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT                            :{BLACK}Izaberi veličinu/tip zračne luke
-STR_305C_0                                                      :{STATION} {STATIONFEATURES}
-STR_STATION_SIGN_TINY                                           :{TINYFONT}{STATION}
-STR_305E_RAILROAD_STATION                                       :Željeznička stanica
-STR_305F_AIRCRAFT_HANGAR                                        :Zrakoplovni hangar
-STR_3060_AIRPORT                                                :Zračna luka
-STR_3061_TRUCK_LOADING_AREA                                     :Ukrcajno područje
-STR_3062_BUS_STATION                                            :Autobusna stanica
-STR_3063_SHIP_DOCK                                              :Brodsko pristanište
-STR_3064_HIGHLIGHT_COVERAGE_AREA                                :{BLACK}Označi područje koje pokriva željeno mjesto
-STR_3065_DON_T_HIGHLIGHT_COVERAGE                               :{BLACK}Nemoj označiti područje koje pokriva željeno mjesto
-STR_3066_COVERAGE_AREA_HIGHLIGHT                                :{BLACK}Označavanje područja pokrivanja
-STR_3068_DOCK                                                   :{WHITE}Pristanište
-STR_3069_BUOY                                                   :Plutača
-STR_306A_BUOY_IN_THE_WAY                                        :{WHITE}...plutača na putu
-STR_306C_STATION_TOO_SPREAD_OUT                                 :{WHITE}...stanica previše proširena
-STR_306D_NONUNIFORM_STATIONS_DISALLOWED                         :{WHITE}...neujednačene stanice onemogućene
-STR_USE_CTRL_TO_SELECT_MORE                                     :{BLACK}Drži CTRL kako bi izabrao više od jednog itema
-
-STR_UNDEFINED                                                   :(neodređen znakovni niz)
-STR_STAT_CLASS_DFLT                                             :Pretpostavljena stanica
-STR_STAT_CLASS_WAYP                                             :Čvorišta
-
-##id 0x3800
-STR_3800_SHIP_DEPOT_ORIENTATION                                 :{WHITE}Smjer brodskog spremišta
-STR_3801_MUST_BE_BUILT_ON_WATER                                 :{WHITE}...mora biti izgrađen na vodi
-STR_3802_CAN_T_BUILD_SHIP_DEPOT                                 :{WHITE}Ovdje ne možeš graditi brodsko spremište...
-STR_3803_SELECT_SHIP_DEPOT_ORIENTATION                          :{BLACK}Izaberi smjer brodskog spremišta
-STR_3804_WATER                                                  :Voda
-STR_3805_COAST_OR_RIVERBANK                                     :Obala ili riječni nasip
-STR_3806_SHIP_DEPOT                                             :Brodsko spremište
-STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...Ne možeš graditi na vodi
-
-##id 0x4000
-STR_4000_SAVE_GAME                                              :{WHITE}Spremi igru
-STR_4001_LOAD_GAME                                              :{WHITE}Učitaj igru
-STR_4002_SAVE                                                   :{BLACK}Spremi
-STR_4003_DELETE                                                 :{BLACK}Obriši
-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_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Ne mogu obrisati datoteku
-STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Učitavanje igre nije uspjelo
-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
-STR_400D_SAVE_THE_CURRENT_GAME_USING                            :{BLACK}Spremi ovu igru, koristeći odabrano ime
-STR_400E_SELECT_NEW_GAME_TYPE                                   :{WHITE}Odaberi vrstu nove igre
-STR_400F_SELECT_SCENARIO_GREEN_PRE                              :{BLACK}Odaberi scenarij (zeleno), namještenu igru (plavo), ili nasumičnu novu igru
-STR_4010_GENERATE_RANDOM_NEW_GAME                               :Izradi nasumičnu novu igru
-STR_4011_LOAD_HEIGHTMAP                                         :{WHITE}Učitaj visinsku kartu
-
-##id 0x4800
-STR_4800_IN_THE_WAY                                             :{WHITE}{STRING} na putu
-STR_4801                                                        :{WHITE}{INDUSTRY}
-STR_4802_COAL_MINE                                              :Rudnik ugljena
-STR_4803_POWER_STATION                                          :Elektrana
-STR_4804_SAWMILL                                                :Pilana
-STR_4805_FOREST                                                 :Šuma
-STR_4806_OIL_REFINERY                                           :Naftna rafinerija
-STR_4807_OIL_RIG                                                :Naftna bušotina
-STR_4808_FACTORY                                                :Tvornica
-STR_4809_PRINTING_WORKS                                         :Tiskara
-STR_480A_STEEL_MILL                                             :Čeličana
-STR_480B_FARM                                                   :Farma
-STR_480C_COPPER_ORE_MINE                                        :Rudnik bakra
-STR_480D_OIL_WELLS                                              :Naftna polja
-STR_480E_BANK                                                   :Banka
-STR_480F_FOOD_PROCESSING_PLANT                                  :Tvornica hrane
-STR_4810_PAPER_MILL                                             :Tvornica papira
-STR_4811_GOLD_MINE                                              :Rudnik zlata
-STR_4812_BANK                                                   :Banka
-STR_4813_DIAMOND_MINE                                           :Rudnik dijamanata
-STR_4814_IRON_ORE_MINE                                          :Rudnik željeza
-STR_4815_FRUIT_PLANTATION                                       :Plantaža voća
-STR_4816_RUBBER_PLANTATION                                      :Plantaža gume
-STR_4817_WATER_SUPPLY                                           :Izvor vode
-STR_4818_WATER_TOWER                                            :Vodotoranj
-STR_4819_FACTORY                                                :Tvornica
-STR_481A_FARM                                                   :Farma
-STR_481B_LUMBER_MILL                                            :Pilana
-STR_481C_COTTON_CANDY_FOREST                                    :Šuma šećerne vune
-STR_481D_CANDY_FACTORY                                          :Tvornica slatkiša
-STR_481E_BATTERY_FARM                                           :Tvornica baterija
-STR_481F_COLA_WELLS                                             :Izvori Cole
-STR_4820_TOY_SHOP                                               :Trgovina igračkama
-STR_4821_TOY_FACTORY                                            :Tvornica igračaka
-STR_4822_PLASTIC_FOUNTAINS                                      :Izvorni plastike
-STR_4823_FIZZY_DRINK_FACTORY                                    :Tvornica gaziranih pića
-STR_4824_BUBBLE_GENERATOR                                       :Generator balona
-STR_4825_TOFFEE_QUARRY                                          :Iskop mliječne karamele
-STR_4826_SUGAR_MINE                                             :Rudnik šećera
-
-############ range for requires starts
-STR_4827_REQUIRES                                               :{BLACK}Treba: {YELLOW}{STRING}
-STR_4828_REQUIRES                                               :{BLACK}Treba: {YELLOW}{STRING}, {STRING}
-STR_4829_REQUIRES                                               :{BLACK}Treba: {YELLOW}{STRING}, {STRING}, {STRING}
-############ range for requires ends
-
-STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Prošlomjesečna proizvodnja:
-STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% prevezeno)
-STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Centriraj glavni pogled na položaj industrije
-STR_482D_NEW_UNDER_CONSTRUCTION                                 :{BLACK}{BIGFONT}Započela je izgradnja nove industrije ( {STRING} ) u blizini grada {TOWN}!
-STR_482E_NEW_BEING_PLANTED_NEAR                                 :{BLACK}{BIGFONT}Nova {STRING} trenutno se sadi blizu grada {TOWN}!
-STR_482F_COST                                                   :{BLACK}Trošak: {YELLOW}{CURRENCY}
-STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY                          :{WHITE}Ovdje ne možeš izgraditi ovu vrstu industrije ovdje...
-STR_4831_FOREST_CAN_ONLY_BE_PLANTED                             :{WHITE}...šume mogu jedino biti posađene iznad linije snijega
-STR_4832_ANNOUNCES_IMMINENT_CLOSURE                             :{BLACK}{BIGFONT}{INDUSTRY} objavljuje skoro zatvaranje!
-STR_4833_SUPPLY_PROBLEMS_CAUSE_TO                               :{BLACK}{BIGFONT}Zbog problema u nabavi {INDUSTRY} se uskoro zatvara!
-STR_4834_LACK_OF_NEARBY_TREES_CAUSES                            :{BLACK}{BIGFONT}Manjak drveća u glavni je razlog što se {INDUSTRY} se uskoro zatvara!
-STR_4835_INCREASES_PRODUCTION                                   :{BLACK}{BIGFONT}{INDUSTRY} povećava proizvodnju!
-STR_4836_NEW_COAL_SEAM_FOUND_AT                                 :{BLACK}{BIGFONT}{INDUSTRY} očekuje udvostručenje proizvodnje!{}Pronađena je nova pukotina ugljena!
-STR_4837_NEW_OIL_RESERVES_FOUND                                 :{BLACK}{BIGFONT}{INDUSTRY} očekuje udvostručenje proizvodnje!{}Pronađene su nove rezerve nafte!
-STR_4838_IMPROVED_FARMING_METHODS                               :{BLACK}{BIGFONT}{INDUSTRY} poboljšava metode uzgoja, očekuje se udvostručenje proizvodnje!
-STR_4839_PRODUCTION_DOWN_BY_50                                  :{BLACK}{BIGFONT}{INDUSTRY} smanjuje proizvodnju za 50%
-STR_483A_INSECT_INFESTATION_CAUSES                              :{BLACK}{BIGFONT}{INDUSTRY} pod najezdom kukaca! Havarija!{}Proizvodnja je pala za 50%
-STR_483B_CAN_ONLY_BE_POSITIONED                                 :{WHITE}...može se postaviti samo blizu rubova karte
-STR_INDUSTRY_PROD_GOUP                                          :{BLACK}{BIGFONT}{STRING} prozivodnja u {INDUSTRY} povećana je {COMMA}%!
-STR_INDUSTRY_PROD_GODOWN                                        :{BLACK}{BIGFONT}{STRING} prozivodnja u {INDUSTRY} smanjena je {COMMA}%!
-
-##id 0x5000
-STR_5000_TRAIN_IN_TUNNEL                                        :{WHITE}Vlak u tunelu
-STR_5001_ROAD_VEHICLE_IN_TUNNEL                                 :{WHITE}Cestovno vozilo u tunelu
-STR_5003_ANOTHER_TUNNEL_IN_THE_WAY                              :{WHITE}Smeta drugi tunel
-STR_5005_UNABLE_TO_EXCAVATE_LAND                                :{WHITE}Ne moguće iskopoati zemlju na drugoj strani tunela
-STR_5006_MUST_DEMOLISH_TUNNEL_FIRST                             :{WHITE}Moraš prvo srušiti tunel
-STR_5007_MUST_DEMOLISH_BRIDGE_FIRST                             :{WHITE}Moraš prvo srušiti most
-STR_5008_CANNOT_START_AND_END_ON                                :{WHITE}Početak i kraj ne mogu biti na istom mjestu
-STR_5009_LEVEL_LAND_OR_WATER_REQUIRED                           :{WHITE}Ispod mosta mora biti ravna zemlja ili voda
-STR_500A_START_AND_END_MUST_BE_IN                               :{WHITE}Početak i kraj moraju biti u istoj liniji
-STR_500B_SITE_UNSUITABLE_FOR_TUNNEL                             :{WHITE}Neprikladan teren za ulaz u tunel
-STR_500D                                                        :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY}
-STR_500E_SUSPENSION_STEEL                                       :Viseći, čelični
-STR_500F_GIRDER_STEEL                                           :Noseći, čelični
-STR_5010_CANTILEVER_STEEL                                       :Konzolni, čelični
-STR_5011_SUSPENSION_CONCRETE                                    :Viseći, betonski
-STR_5012_WOODEN                                                 :Drveni
-STR_5013_CONCRETE                                               :Betonski
-STR_5014_TUBULAR_STEEL                                          :Cijevni, čelični
-STR_BRIDGE_TUBULAR_SILICON                                      :Cjevni, silikonski
-STR_5015_CAN_T_BUILD_BRIDGE_HERE                                :{WHITE}Ovdje se ne može graditi most...
-STR_5016_CAN_T_BUILD_TUNNEL_HERE                                :{WHITE}Ovdje se ne može graditi tunel...
-STR_5017_RAILROAD_TUNNEL                                        :Željeznički tunel
-STR_5018_ROAD_TUNNEL                                            :Cestovni tunel
-STR_501B_STEEL_SUSPENSION_RAIL_BRIDGE                           :Čelični viseći željeznički most
-STR_501C_STEEL_GIRDER_RAIL_BRIDGE                               :Čelični noseći željeznički most
-STR_501D_STEEL_CANTILEVER_RAIL_BRIDGE                           :Čelični konzolni željeznički most
-STR_501E_REINFORCED_CONCRETE_SUSPENSION                         :Ojačani betonski viseći željeznički most
-STR_501F_WOODEN_RAIL_BRIDGE                                     :Drveni željeznički most
-STR_5020_CONCRETE_RAIL_BRIDGE                                   :Betonski željeznički most
-STR_5021_STEEL_SUSPENSION_ROAD_BRIDGE                           :Čelični viseći cestovni most
-STR_5022_STEEL_GIRDER_ROAD_BRIDGE                               :Čelični noseći cestovni most
-STR_5023_STEEL_CANTILEVER_ROAD_BRIDGE                           :Čelični konzolni cestovni most
-STR_5024_REINFORCED_CONCRETE_SUSPENSION                         :Ojačani betonski viseći cestovni most
-STR_5025_WOODEN_ROAD_BRIDGE                                     :Drveni cestovni most
-STR_5026_CONCRETE_ROAD_BRIDGE                                   :Betonski cestovni most
-STR_5027_TUBULAR_RAIL_BRIDGE                                    :Cijevni željeznički most
-STR_5028_TUBULAR_ROAD_BRIDGE                                    :Cijevni cestovni most
-
-##id 0x5800
-STR_5800_OBJECT_IN_THE_WAY                                      :{WHITE}Smeta objekt
-STR_5801_TRANSMITTER                                            :Odašiljač
-STR_5802_LIGHTHOUSE                                             :Svjetionik
-STR_5803_COMPANY_HEADQUARTERS                                   :Sjedište tvrke
-STR_5804_COMPANY_HEADQUARTERS_IN                                :{WHITE}...smeta sjedište tvrke
-STR_5805_COMPANY_OWNED_LAND                                     :Zemlja u posjedu tvrke
-STR_5806_CAN_T_PURCHASE_THIS_LAND                               :{WHITE}Ova zemlja ne može se kupiti...
-STR_5807_YOU_ALREADY_OWN_IT                                     :{WHITE}...već je u tvom vlasništvu!
-
-
-############ WARNING, using range 0x6000 for strings that are stored in the savegame
-############ These strings may never get a new id, or savegames will break!
-##id 0x6000
-STR_SV_EMPTY                                                    :
-STR_SV_UNNAMED                                                  :Neimenovan
-STR_SV_TRAIN_NAME                                               :Vlak {COMMA}
-STR_SV_ROADVEH_NAME                                             :Cestovno vozilo {COMMA}
-STR_SV_SHIP_NAME                                                :Brod {COMMA}
-STR_SV_AIRCRAFT_NAME                                            :Zrakoplov {COMMA}
-
-STR_SV_STNAME                                                   :{STRING}
-STR_SV_STNAME_NORTH                                             :{STRING} Sjever
-STR_SV_STNAME_SOUTH                                             :{STRING} Jug
-STR_SV_STNAME_EAST                                              :{STRING} Istok
-STR_SV_STNAME_WEST                                              :{STRING} Zapad
-STR_SV_STNAME_CENTRAL                                           :{STRING} Centrala
-STR_SV_STNAME_TRANSFER                                          :{STRING} Transfer
-STR_SV_STNAME_HALT                                              :{STRING} Zaustavi
-STR_SV_STNAME_VALLEY                                            :{STRING} Dolina
-STR_SV_STNAME_HEIGHTS                                           :{STRING} Visine
-STR_SV_STNAME_WOODS                                             :{STRING} Šume
-STR_SV_STNAME_LAKESIDE                                          :{STRING} Jezero
-STR_SV_STNAME_EXCHANGE                                          :{STRING} Burza
-STR_SV_STNAME_AIRPORT                                           :{STRING} Zračna luka
-STR_SV_STNAME_OILFIELD                                          :{STRING} Naftno polje
-STR_SV_STNAME_MINES                                             :{STRING} Rudnici
-STR_SV_STNAME_DOCKS                                             :{STRING} Pristaništa
-STR_SV_STNAME_BUOY_1                                            :{STRING} Plutača 1
-STR_SV_STNAME_BUOY_2                                            :{STRING} Plutača 2
-STR_SV_STNAME_BUOY_3                                            :{STRING} Plutača 3
-STR_SV_STNAME_BUOY_4                                            :{STRING} Plutača 4
-STR_SV_STNAME_BUOY_5                                            :{STRING} Plutača 5
-STR_SV_STNAME_BUOY_6                                            :{STRING} Plutača 6
-STR_SV_STNAME_BUOY_7                                            :{STRING} Plutača 7
-STR_SV_STNAME_BUOY_8                                            :{STRING} Plutača 8
-STR_SV_STNAME_BUOY_9                                            :{STRING} Plutača 9
-STR_SV_STNAME_ANNEXE                                            :{STRING} Aneks
-STR_SV_STNAME_SIDINGS                                           :{STRING} Krak
-STR_SV_STNAME_BRANCH                                            :{STRING} Ogranak
-STR_SV_STNAME_UPPER                                             :Gornji {STRING}
-STR_SV_STNAME_LOWER                                             :Donji {STRING}
-STR_SV_STNAME_HELIPORT                                          :{STRING} Heliodrom
-STR_SV_STNAME_FOREST                                            :{STRING} Šuma
-
-############ end of savegame specific region!
-
-##id 0x6800
-STR_6800_DIFFICULTY_LEVEL                                       :{WHITE}Težina igre
-STR_OPTIONS_SAVE_CHANGES                                        :{BLACK}Spremi
-
-############ range for difficulty levels starts
-STR_6801_EASY                                                   :{BLACK}Lagano
-STR_6802_MEDIUM                                                 :{BLACK}Umjereno
-STR_6803_HARD                                                   :{BLACK}Teško
-STR_6804_CUSTOM                                                 :{BLACK}Proizvoljna igra
-############ range for difficulty levels ends
-
-############ range for difficulty settings starts
-STR_6805_MAXIMUM_NO_COMPETITORS                                 :{LTBLUE}Maksimalan broj natjecatelja: {ORANGE}{COMMA}
-STR_6806_COMPETITOR_START_TIME                                  :{LTBLUE}Vrijeme početka igre natjecatelja: {ORANGE}{STRING}
-STR_6807_NO_OF_TOWNS                                            :{LTBLUE}Broj gradova: {ORANGE}{STRING}
-STR_6808_NO_OF_INDUSTRIES                                       :{LTBLUE}Broj gospodarstava: {ORANGE}{STRING}
-STR_6809_MAXIMUM_INITIAL_LOAN_000                               :{LTBLUE}Maksimalni početni kredit: {ORANGE}{CURRENCY}
-STR_680A_INITIAL_INTEREST_RATE                                  :{LTBLUE}Početna kamata kredita: {ORANGE}{COMMA}%
-STR_680B_VEHICLE_RUNNING_COSTS                                  :{LTBLUE}Troškovi uporabe vozila: {ORANGE}{STRING}
-STR_680C_CONSTRUCTION_SPEED_OF_COMPETITOR                       :{LTBLUE}Brzina razvoja natjecatelja: {ORANGE}{STRING}
-STR_680D_INTELLIGENCE_OF_COMPETITORS                            :{LTBLUE}Inteligencija natjecatelja: {ORANGE}{STRING}
-STR_680E_VEHICLE_BREAKDOWNS                                     :{LTBLUE}Kvarovi na vozilima: {ORANGE}{STRING}
-STR_680F_SUBSIDY_MULTIPLIER                                     :{LTBLUE}Subvencijski množitelj: {ORANGE}{STRING}
-STR_6810_COST_OF_CONSTRUCTION                                   :{LTBLUE}Troškovi građenja: {ORANGE}{STRING}
-STR_6811_TERRAIN_TYPE                                           :{LTBLUE}Vrsta terena: {ORANGE}{STRING}
-STR_6812_QUANTITY_OF_SEA_LAKES                                  :{LTBLUE}Količina mora/jezera: {ORANGE}{STRING}
-STR_6813_ECONOMY                                                :{LTBLUE}Ekonomija: {ORANGE}{STRING}
-STR_6814_TRAIN_REVERSING                                        :{LTBLUE}Promjena smjera vlakova: {ORANGE}{STRING}
-STR_6815_DISASTERS                                              :{LTBLUE}Prirodne katastrofe: {ORANGE}{STRING}
-STR_16816_CITY_APPROVAL                                         :{LTBLUE}Stav gradsko vijeća prema restrukturiranju područja: {ORANGE}{STRING}
-############ range for difficulty settings ends
-
-STR_26816_NONE                                                  :Ništa
-STR_6816_LOW                                                    :Nisko
-STR_6817_NORMAL                                                 :Normalno
-STR_6818_HIGH                                                   :Visoko
-STR_6819                                                        :{BLACK}{SMALLLEFTARROW}
-STR_681A                                                        :{BLACK}{SMALLRIGHTARROW}
-STR_681B_VERY_SLOW                                              :Vrlo sporo
-STR_681C_SLOW                                                   :Sporo
-STR_681D_MEDIUM                                                 :Umjereno
-STR_681E_FAST                                                   :Brzo
-STR_681F_VERY_FAST                                              :Vrlo brzo
-STR_VERY_LOW                                                    :Vrlo nisko
-STR_6820_LOW                                                    :Nisko
-STR_6821_MEDIUM                                                 :Umjereno
-STR_6822_HIGH                                                   :Visoko
-STR_6823_NONE                                                   :Ništa
-STR_6824_REDUCED                                                :Smanjeno
-STR_6825_NORMAL                                                 :Normalno
-STR_6826_X1_5                                                   :x1.5
-STR_6827_X2                                                     :x2
-STR_6828_X3                                                     :x3
-STR_6829_X4                                                     :x4
-STR_682A_VERY_FLAT                                              :Vrlo ravno
-STR_682B_FLAT                                                   :Ravno
-STR_682C_HILLY                                                  :Brežuljkasto
-STR_682D_MOUNTAINOUS                                            :Brdovito
-STR_682E_STEADY                                                 :Stabilno
-STR_682F_FLUCTUATING                                            :Promjenjivo
-STR_6830_IMMEDIATE                                              :Odmah
-STR_6831_3_MONTHS_AFTER_PLAYER                                  :3 mjeseca nakon igrača
-STR_6832_6_MONTHS_AFTER_PLAYER                                  :6 mjeseci nakon igrača
-STR_6833_9_MONTHS_AFTER_PLAYER                                  :9 mjeseci nakon igrača
-STR_6834_AT_END_OF_LINE_AND_AT_STATIONS                         :Na kraju pruge, i na stanici
-STR_6835_AT_END_OF_LINE_ONLY                                    :Isključivo na kraju pruge
-STR_6836_OFF                                                    :Isključeno
-STR_6837_ON                                                     :Uključeno
-STR_6838_SHOW_HI_SCORE_CHART                                    :{BLACK}Prikaz tablice najboljih rezultata
-STR_6839_PERMISSIVE                                             :Dopustiv
-STR_683A_TOLERANT                                               :Tolerantan
-STR_683B_HOSTILE                                                :Agresivan
-
-##id 0x7000
-STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
-STR_7002_PLAYER                                                 :(Igrač {COMMA})
-STR_7004_NEW_FACE                                               :{BLACK}Novo lice
-STR_7005_COLOR_SCHEME                                           :{BLACK}Boja
-STR_7006_COLOR_SCHEME                                           :{GOLD}Boja:
-STR_7007_NEW_COLOR_SCHEME                                       :{WHITE}Nova boja
-STR_7008_COMPANY_NAME                                           :{BLACK}Ime tvrtke
-STR_7009_PRESIDENT_NAME                                         :{BLACK}Ime direktora
-STR_700A_COMPANY_NAME                                           :Ime tvrtke
-STR_700B_PRESIDENT_S_NAME                                       :Ime direktora
-STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Ime tvrtke ne može se promijeniti...
-STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Ne možeš promijeniti ime direktora...
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Financije {BLACK}{PLAYERNAME}
-STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Izdatci/Prihodi
-STR_7010                                                        :{WHITE}{NUM}
-STR_7011_CONSTRUCTION                                           :{GOLD}Građenje
-STR_7012_NEW_VEHICLES                                           :{GOLD}Nova vozila
-STR_7013_TRAIN_RUNNING_COSTS                                    :{GOLD}Troškovi uporabe vlakova
-STR_7014_ROAD_VEH_RUNNING_COSTS                                 :{GOLD}Troškovi uporabe cestovnih vozila
-STR_7015_AIRCRAFT_RUNNING_COSTS                                 :{GOLD}Troškovi uporabe zrakoplova
-STR_7016_SHIP_RUNNING_COSTS                                     :{GOLD}Troškovi uporabe brodova
-STR_7017_PROPERTY_MAINTENANCE                                   :{GOLD}Održavanje posjeda
-STR_7018_TRAIN_INCOME                                           :{GOLD}Prihod od vlakova
-STR_7019_ROAD_VEHICLES_INCOME                                   :{GOLD}Prihod od cestovnih vozila
-STR_701A_AIRCRAFT_INCOME                                        :{GOLD}Prihod od zrakoplova
-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_7020_TOTAL                                                  :{WHITE}Ukupno:
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
-STR_7022_INCOME_GRAPH                                           :{WHITE}Graf prihoda
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
-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_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}
-STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Ne možeš dobiti još kredita...
-STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...nemaš kredita za otplatu
-STR_702E_REQUIRED                                               :{WHITE}...{CURRENCY} potrebno
-STR_702F_CAN_T_REPAY_LOAN                                       :{WHITE}Ne možeš otplatiti kredit...
-STR_INSUFFICIENT_FUNDS                                          :{WHITE}Ne možeš dati novac koji je pozajmljen od banke...
-STR_7030_SELECT_NEW_FACE_FOR_PRESIDENT                          :{BLACK}Odaberi novo lice za direktora
-STR_7031_CHANGE_THE_COMPANY_VEHICLE                             :{BLACK}Promijeni izgled vozila tvrtke
-STR_7032_CHANGE_THE_PRESIDENT_S                                 :{BLACK}Promjeni ime direktora
-STR_7033_CHANGE_THE_COMPANY_NAME                                :{BLACK}Promijeni ime tvrtke
-STR_7034_CLICK_ON_SELECTED_NEW_COLOR                            :{BLACK}Klikni na odabranu boju
-STR_7035_INCREASE_SIZE_OF_LOAN                                  :{BLACK}Povećaj iznos kredita
-STR_7036_REPAY_PART_OF_LOAN                                     :{BLACK}Otplati dio kredita
-STR_7037_PRESIDENT                                              :{WHITE}{PLAYERNAME}{}{GOLD}(Direktor)
-STR_7038_INAUGURATED                                            :{GOLD}Na poziciji od: {WHITE}{NUM}
-STR_7039_VEHICLES                                               :{GOLD}Vozila:
-STR_TRAINS                                                      :{WHITE}{COMMA} vlak{P "" a ova}
-STR_ROAD_VEHICLES                                               :{WHITE}{COMMA} cestovn{P o a ih} vozil{P o a a}
-STR_AIRCRAFT                                                    :{WHITE}{COMMA} zrakoplov
-STR_SHIPS                                                       :{WHITE}{COMMA} brod{P "" a ova}
-STR_7042_NONE                                                   :{WHITE}Ništa
-STR_7043_FACE_SELECTION                                         :{WHITE}Odabir lica
-STR_7044_MALE                                                   :{BLACK}Muško
-STR_7045_FEMALE                                                 :{BLACK}Žensko
-STR_7046_NEW_FACE                                               :{BLACK}Novo lice
-STR_7047_CANCEL_NEW_FACE_SELECTION                              :{BLACK}Odustani od odabira novog lica
-STR_7048_ACCEPT_NEW_FACE_SELECTION                              :{BLACK}Prihvati odabir novog lica
-STR_7049_SELECT_MALE_FACES                                      :{BLACK}Odaberi muška lica
-STR_704A_SELECT_FEMALE_FACES                                    :{BLACK}Odaberi ženska lica
-STR_704B_GENERATE_RANDOM_NEW_FACE                               :{BLACK}Generiraj nasumično novo lice
-STR_704C_KEY                                                    :{BLACK}Ključ
-STR_704D_SHOW_KEY_TO_GRAPHS                                     :{BLACK}Prikaži ključeve po grafovima
-STR_704E_KEY_TO_COMPANY_GRAPHS                                  :{WHITE}Ključ za grafove tvrtke
-STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY                           :{BLACK}Klikni ovdje za uključivanje/isključivanje tvrke s grafa
-STR_7050_UNITS_OF_CARGO_DELIVERED                               :{WHITE}Dostavljenih jedinica tereta
-STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Ocjena učinka tvrtke (najveća ocjena = 1000)
-STR_7052_COMPANY_VALUES                                         :{WHITE}Vrijednost tvrtki
-STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Tablica lige tvrtki
-STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
-STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Prijevozna tvrtka u nevoljama!
-STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} će biti rasprodana ili objaviti bankrot ukoliko se učinak uskoro ne poboljša!
-STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Direktor)
-STR_7059_TRANSPORT_COMPANY_MERGER                               :{BLACK}{BIGFONT}Spajanje prijevoznih tvrki!
-STR_705A_HAS_BEEN_SOLD_TO_FOR                                   :{BLACK}{BIGFONT}{COMPANY} je bila prodana tvrtki {COMPANY} za {CURRENCY}!
-STR_705B_WE_ARE_LOOKING_FOR_A_TRANSPORT                         :{WHITE}Tražimo prijevoznu tvrku koja bi preuzela našu tvrtku.{}{}Želiš li kupiti tvrtku{COMPANY} za {CURRENCY}?
-STR_705C_BANKRUPT                                               :{BLACK}{BIGFONT}Bankrot!
-STR_705D_HAS_BEEN_CLOSED_DOWN_BY                                :{BLACK}{BIGFONT}{COMPANY} je zatvorena od strane kreditora i sva je imovina rasprodana!
-STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED                         :{BLACK}{BIGFONT}Osnovana je nova prijevozna tvrtka!
-STR_705F_STARTS_CONSTRUCTION_NEAR                               :{BLACK}{BIGFONT}{COMPANY} započinje gradnju blizu grada {TOWN}!
-STR_7060_CAN_T_BUY_COMPANY                                      :{WHITE}Ne možeš kupiti tvrtku...
-STR_7061_CARGO_PAYMENT_RATES                                    :{WHITE}Isplatne rate tereta
-STR_7062_DAYS_IN_TRANSIT                                        :{BLACK}{TINYFONT}Dana u tranzitu
-STR_7064_TOGGLE_GRAPH_FOR_CARGO                                 :{BLACK}Aktiviraj/deaktiviraj graf za vrstu tereta
-STR_7065                                                        :{BLACK}{TINYFONT}{STRING}
-STR_7066_ENGINEER                                               :Inženjer
-STR_7067_TRAFFIC_MANAGER                                        :Prijevozni upravitelj
-STR_7068_TRANSPORT_COORDINATOR                                  :Prijevozni koordinator
-STR_7069_ROUTE_SUPERVISOR                                       :Prijevozni nadzornik
-STR_706A_DIRECTOR                                               :Direktor
-STR_706B_CHIEF_EXECUTIVE                                        :Izvršni direktor
-STR_706C_CHAIRMAN                                               :Predsjedavajući
-STR_706D_PRESIDENT                                              :Predsjednik
-STR_706E_TYCOON                                                 :Tajkun
-STR_706F_BUILD_HQ                                               :{BLACK}Izgradi sjedište tvrtke
-STR_7070_BUILD_COMPANY_HEADQUARTERS                             :{BLACK}Izgradi središte tvrtke / pogledaj sjedište tvrtke
-STR_RELOCATE_COMPANY_HEADQUARTERS                               :{BLACK}Izgradi sjedište kompanije negdje dalje za 1% troška od vrijednosti kompanije
-STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS                       :{WHITE}Ne mogu izgraditi sjedište tvrke...
-STR_7072_VIEW_HQ                                                :{BLACK}Pogledaj sjedište tvrtke
-STR_RELOCATE_HQ                                                 :{BLACK}Premjesti sjedište kompanije
-STR_COMPANY_PASSWORD                                            :{BLACK}Zaporka
-STR_COMPANY_PASSWORD_TOOLTIP                                    :{BLACK}Zaštiti svoju tvrku od neovlaštenog korištenje pomoću zaporke.
-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_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
-STR_707A_SELL_25_SHARE_IN_THIS_COMPANY                          :{BLACK}Prodaj 25% udjela u ovoj tvrtci
-STR_707B_CAN_T_BUY_25_SHARE_IN_THIS                             :{WHITE}Ne možeš kupiti 25% udjela u ovoj tvrtci...
-STR_707C_CAN_T_SELL_25_SHARE_IN                                 :{WHITE}Ne možeš prodati 25% udjela u ovoj tvrtci...
-STR_707D_OWNED_BY                                               :{WHITE}({COMMA}% u vlasništvu {COMPANY})
-STR_707E_OWNED_BY_OWNED_BY                                      :{WHITE}({COMMA}% u vlasništvu {COMPANY}{}   {COMMA}% u vlasništvu {COMPANY})
-STR_707F_HAS_BEEN_TAKEN_OVER_BY                                 :{BLACK}{BIGFONT}{COMPANY} je preuzeta od strane tvrtke {COMPANY}!
-STR_7080_PROTECTED                                              :{WHITE}Ova tvrka još nije dovoljno stara da bi trgovala udjelima...
-
-STR_LIVERY_STEAM                                                :Parna lokomotva
-STR_LIVERY_DIESEL                                               :Dieselska lokomotiva
-STR_LIVERY_ELECTRIC                                             :Električna lokomotiva
-STR_LIVERY_MONORAIL                                             :Jednotračna lokomotiva
-STR_LIVERY_MAGLEV                                               :Maglevska lokomotiva
-STR_LIVERY_PASSENGER_WAGON_STEAM                                :Lokomotiva s putnicima (Parna)
-STR_LIVERY_PASSENGER_WAGON_DIESEL                               :Lokomotiva s putnicima (Dieselska)
-STR_LIVERY_PASSENGER_WAGON_ELECTRIC                             :Lokomotiva s putnicima (Električna)
-STR_LIVERY_FREIGHT_WAGON                                        :Teretni vagon
-STR_LIVERY_BUS                                                  :Autobus
-STR_LIVERY_TRUCK                                                :Kamion
-STR_LIVERY_PASSENGER_SHIP                                       :Trajekt
-STR_LIVERY_FREIGHT_SHIP                                         :Teretni brod
-STR_LIVERY_HELICOPTER                                           :Helikopter
-STR_LIVERY_SMALL_PLANE                                          :Mali zrakoplov
-STR_LIVERY_LARGE_PLANE                                          :Veliki zrakoplov
-
-
-##id 0x8000
-STR_8000_KIRBY_PAUL_TANK_STEAM                                  :Kirby Paul Tank (Para)
-STR_8001_MJS_250_DIESEL                                         :MJS 250 (Diesel)
-STR_8002_PLODDYPHUT_CHOO_CHOO                                   :Ploddyphut Choo-Choo
-STR_8003_POWERNAUT_CHOO_CHOO                                    :Powernaut Choo-Choo
-STR_8004_MIGHTYMOVER_CHOO_CHOO                                  :Mightymover Choo-Choo
-STR_8005_PLODDYPHUT_DIESEL                                      :Ploddyphut Diesel
-STR_8006_POWERNAUT_DIESEL                                       :Powernaut Diesel
-STR_8007_WILLS_2_8_0_STEAM                                      :Wills 2-8-0 (Para)
-STR_8008_CHANEY_JUBILEE_STEAM                                   :Chaney 'Jubilee' (Para)
-STR_8009_GINZU_A4_STEAM                                         :Ginzu 'A4' (Para)
-STR_800A_SH_8P_STEAM                                            :SH '8P' (Para)
-STR_800B_MANLEY_MOREL_DMU_DIESEL                                :Manley-Morel DMU (Diesel)
-STR_800C_DASH_DIESEL                                            :'Dash' (Diesel)
-STR_800D_SH_HENDRY_25_DIESEL                                    :SH/Hendry '25' (Diesel)
-STR_800E_UU_37_DIESEL                                           :UU '37' (Diesel)
-STR_800F_FLOSS_47_DIESEL                                        :Floss '47' (Diesel)
-STR_8010_CS_4000_DIESEL                                         :CS 4000 (Diesel)
-STR_8011_CS_2400_DIESEL                                         :CS 2400 (Diesel)
-STR_8012_CENTENNIAL_DIESEL                                      :Centennial (Diesel)
-STR_8013_KELLING_3100_DIESEL                                    :Kelling 3100 (Diesel)
-STR_8014_TURNER_TURBO_DIESEL                                    :Turner Turbo (Diesel)
-STR_8015_MJS_1000_DIESEL                                        :MJS 1000 (Diesel)
-STR_8016_SH_125_DIESEL                                          :SH '125' (Diesel)
-STR_8017_SH_30_ELECTRIC                                         :SH '30' (Electric)
-STR_8018_SH_40_ELECTRIC                                         :SH '40' (Električni)
-STR_8019_T_I_M_ELECTRIC                                         :'T.I.M.' (Električni)
-STR_801A_ASIASTAR_ELECTRIC                                      :'AsiaStar' (Električni)
-STR_801B_PASSENGER_CAR                                          :Putnički prijevoz
-STR_801C_MAIL_VAN                                               :Poštanski kombi
-STR_801D_COAL_CAR                                               :Kamion za ugljen
-STR_801E_OIL_TANKER                                             :Naftna cisterna
-STR_801F_LIVESTOCK_VAN                                          :Kamion za stoku
-STR_8020_GOODS_VAN                                              :Kamion za robu
-STR_8021_GRAIN_HOPPER                                           :Tegljač žita
-STR_8022_WOOD_TRUCK                                             :Kamion za drvo
-STR_8023_IRON_ORE_HOPPER                                        :Tegljač željeza
-STR_8024_STEEL_TRUCK                                            :Kamion za čelik
-STR_8025_ARMORED_VAN                                            :Oklopljeni kombi
-STR_8026_FOOD_VAN                                               :Kombi za hranu
-STR_8027_PAPER_TRUCK                                            :Kamion za papir
-STR_8028_COPPER_ORE_HOPPER                                      :Tegljač bakra
-STR_8029_WATER_TANKER                                           :Cisterna za vodu
-STR_802A_FRUIT_TRUCK                                            :Kamion za voće
-STR_802B_RUBBER_TRUCK                                           :Kamion za gumu
-STR_802C_SUGAR_TRUCK                                            :Kamion za šećer
-STR_802D_COTTON_CANDY_HOPPER                                    :Tegljač šećerne vune
-STR_802E_TOFFEE_HOPPER                                          :Tegljač mliječne karamele
-STR_802F_BUBBLE_VAN                                             :Kombi za balone
-STR_8030_COLA_TANKER                                            :Cisterna kole
-STR_8031_CANDY_VAN                                              :Kombi za slatkiše
-STR_8032_TOY_VAN                                                :Kombi za igračke
-STR_8033_BATTERY_TRUCK                                          :Kamion za baterije
-STR_8035_PLASTIC_TRUCK                                          :Kamion za plastiku
-STR_8036_X2001_ELECTRIC                                         :'X2001' (Električni)
-STR_8037_MILLENNIUM_Z1_ELECTRIC                                 :'Millennium Z1' (Električni)
-STR_8038_WIZZOWOW_Z99                                           :Wizzowow Z99
-STR_8039_PASSENGER_CAR                                          :Putnički prijevoz
-STR_803A_MAIL_VAN                                               :Poštanski kombi
-STR_803B_COAL_CAR                                               :Kamion za ugljen
-STR_803C_OIL_TANKER                                             :Naftni tanker
-STR_803D_LIVESTOCK_VAN                                          :Kamion za stoku
-STR_803E_GOODS_VAN                                              :Kamion za robu
-STR_803F_GRAIN_HOPPER                                           :Tegljač žita
-STR_8040_WOOD_TRUCK                                             :Kamion za drvo
-STR_8041_IRON_ORE_HOPPER                                        :Tegljač željeza
-STR_8042_STEEL_TRUCK                                            :Kamion za željezo
-STR_8043_ARMORED_VAN                                            :Oklopno vozilo
-STR_8044_FOOD_VAN                                               :Kamion za hranu
-STR_8045_PAPER_TRUCK                                            :Kamion za papir
-STR_8046_COPPER_ORE_HOPPER                                      :Tegljač bakra
-STR_8047_WATER_TANKER                                           :Cisterna za vodu
-STR_8048_FRUIT_TRUCK                                            :Kamion za voće
-STR_8049_RUBBER_TRUCK                                           :Kamion za gumu
-STR_804A_SUGAR_TRUCK                                            :Kamion za šećer
-STR_804B_COTTON_CANDY_HOPPER                                    :Tegljač Šećerne vune
-STR_804C_TOFFEE_HOPPER                                          :Tegljač mliječne karamele
-STR_804D_BUBBLE_VAN                                             :Kombi za balone
-STR_804E_COLA_TANKER                                            :Cisterna za colu
-STR_804F_CANDY_VAN                                              :Kombi za slatkiše
-STR_8050_TOY_VAN                                                :Kombi za igračke
-STR_8051_BATTERY_TRUCK                                          :Kamion za baterije
-STR_8053_PLASTIC_TRUCK                                          :Kamion za plastiku
-STR_8054_LEV1_LEVIATHAN_ELECTRIC                                :Lev1 'Leviathan' (Električni)
-STR_8055_LEV2_CYCLOPS_ELECTRIC                                  :Lev2 'Cyclops' (Električni)
-STR_8056_LEV3_PEGASUS_ELECTRIC                                  :Lev3 'Pegasus' (Električni)
-STR_8057_LEV4_CHIMAERA_ELECTRIC                                 :Lev4 'Chimaera' (Električni)
-STR_8058_WIZZOWOW_ROCKETEER                                     :Wizzowow Rocketeer
-STR_805A_MAIL_VAN                                               :Poštanski kombi
-STR_805B_COAL_CAR                                               :Kamion za ugljen
-STR_805C_OIL_TANKER                                             :Naftna cisterna
-STR_805D_LIVESTOCK_VAN                                          :Kamion za stoku
-STR_805E_GOODS_VAN                                              :Kamion za robu
-STR_805F_GRAIN_HOPPER                                           :Tegljač žita
-STR_8060_WOOD_TRUCK                                             :Kamion za drva
-STR_8061_IRON_ORE_HOPPER                                        :Tegljač željeza
-STR_8062_STEEL_TRUCK                                            :Kamion za čelik
-STR_8063_ARMORED_VAN                                            :Oklopno vozilo
-STR_8064_FOOD_VAN                                               :Kamion za hranu
-STR_8065_PAPER_TRUCK                                            :Kamion za papir
-STR_8066_COPPER_ORE_HOPPER                                      :Tegljač bakra
-STR_8067_WATER_TANKER                                           :Cisterna za vodu
-STR_8068_FRUIT_TRUCK                                            :Kamion za voće
-STR_8069_RUBBER_TRUCK                                           :Kamion za gumu
-STR_806A_SUGAR_TRUCK                                            :Kamion za šećer
-STR_806B_COTTON_CANDY_HOPPER                                    :Tegljač šećerne vune
-STR_806C_TOFFEE_HOPPER                                          :Teglač mliječne karamele
-STR_806D_BUBBLE_VAN                                             :Kombi za balone
-STR_806E_COLA_TANKER                                            :Cisterna za colu
-STR_806F_CANDY_VAN                                              :Kombi za slatkiše
-STR_8070_TOY_VAN                                                :Kombi za igračke
-STR_8071_BATTERY_TRUCK                                          :Kamion za baterije
-STR_8074_MPS_REGAL_BUS                                          :MPS Regal Bus
-STR_8075_HEREFORD_LEOPARD_BUS                                   :Hereford Leopard Bus
-STR_8076_FOSTER_BUS                                             :Foster Bus
-STR_8077_FOSTER_MKII_SUPERBUS                                   :Foster MkII Superbus
-STR_8078_PLODDYPHUT_MKI_BUS                                     :Ploddyphut MkI Bus
-STR_8079_PLODDYPHUT_MKII_BUS                                    :Ploddyphut MkII Bus
-STR_807A_PLODDYPHUT_MKIII_BUS                                   :Ploddyphut MkIII Bus
-STR_80D7_SAMPSON_U52                                            :Sampson U52
-STR_80D8_COLEMAN_COUNT                                          :Coleman Count
-STR_80D9_FFP_DART                                               :FFP Dart
-STR_80DA_YATE_HAUGAN                                            :Yate Haugan
-STR_80DB_BAKEWELL_COTSWALD_LB_3                                 :Bakewell Cotswald LB-3
-STR_80DC_BAKEWELL_LUCKETT_LB_8                                  :Bakewell Luckett LB-8
-STR_80DD_BAKEWELL_LUCKETT_LB_9                                  :Bakewell Luckett LB-9
-STR_80DE_BAKEWELL_LUCKETT_LB80                                  :Bakewell Luckett LB80
-STR_80DF_BAKEWELL_LUCKETT_LB_10                                 :Bakewell Luckett LB-10
-STR_80E0_BAKEWELL_LUCKETT_LB_11                                 :Bakewell Luckett LB-11
-STR_80E1_YATE_AEROSPACE_YAC_1_11                                :Yate Aerospace YAC 1-11
-STR_80E2_DARWIN_100                                             :Darwin 100
-STR_80E3_DARWIN_200                                             :Darwin 200
-STR_80E4_DARWIN_300                                             :Darwin 300
-STR_80E5_DARWIN_400                                             :Darwin 400
-STR_80E6_DARWIN_500                                             :Darwin 500
-STR_80E7_DARWIN_600                                             :Darwin 600
-STR_80E8_GURU_GALAXY                                            :Guru Galaxy
-STR_80E9_AIRTAXI_A21                                            :Airtaxi A21
-STR_80EA_AIRTAXI_A31                                            :Airtaxi A31
-STR_80EB_AIRTAXI_A32                                            :Airtaxi A32
-STR_80EC_AIRTAXI_A33                                            :Airtaxi A33
-STR_80ED_YATE_AEROSPACE_YAE46                                   :Yate Aerospace YAe46
-STR_80EE_DINGER_100                                             :Dinger 100
-STR_80EF_AIRTAXI_A34_1000                                       :AirTaxi A34-1000
-STR_80F0_YATE_Z_SHUTTLE                                         :Yate Z-Shuttle
-STR_80F1_KELLING_K1                                             :Kelling K1
-STR_80F2_KELLING_K6                                             :Kelling K6
-STR_80F3_KELLING_K7                                             :Kelling K7
-STR_80F4_DARWIN_700                                             :Darwin 700
-STR_80F5_FFP_HYPERDART_2                                        :FFP Hyperdart 2
-STR_80F6_DINGER_200                                             :Dinger 200
-STR_80F7_DINGER_1000                                            :Dinger 1000
-STR_80F8_PLODDYPHUT_100                                         :Ploddyphut 100
-STR_80F9_PLODDYPHUT_500                                         :Ploddyphut 500
-STR_80FA_FLASHBANG_X1                                           :Flashbang X1
-STR_80FB_JUGGERPLANE_M1                                         :Juggerplane M1
-STR_80FC_FLASHBANG_WIZZER                                       :Flashbang Wizzer
-STR_80FD_TRICARIO_HELICOPTER                                    :Tricario Helicopter
-STR_80FE_GURU_X2_HELICOPTER                                     :Guru X2 Helicopter
-STR_80FF_POWERNAUT_HELICOPTER                                   :Powernaut Helicopter
-STR_8100_MESSAGE_FROM_VEHICLE_MANUFACTURE                       :{WHITE}Poruka od proizvođača vozila
-STR_8101_WE_HAVE_JUST_DESIGNED_A                                :{GOLD}Upravo smo dizajnirani novi {STRING} - jeste li zainteresirani za jednogodišnje isključivo pravo uporabe ovog vozila, tako da vidimo kako se vozilo ponaša prije nego što postane univerzalno dostupno?
-STR_8102_RAILROAD_LOCOMOTIVE                                    :željeznička lokomotiva
-STR_8103_ROAD_VEHICLE                                           :cestovno vozilo
-STR_8104_AIRCRAFT                                               :zrakoplov
-STR_8105_SHIP                                                   :brod
-STR_8106_MONORAIL_LOCOMOTIVE                                    :monorail lokomotiva
-STR_8107_MAGLEV_LOCOMOTIVE                                      :maglev lokomotiva
-
-##id 0x8800
-STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Spremište vlakova
-STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Građani slave . . .{}Prvi vlak stiže na {STATION}!
-STR_8802_DETAILS                                                :{WHITE}{STRING} (Detalji)
-STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Vlak na putu
-STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
-STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
-STR_8806_GO_TO                                                  :Idi do {STATION}
-STR_8807_GO_TO_TRANSFER                                         :Idi do {STATION} (Transferiraj i preuzmi teret)
-STR_8808_GO_TO_UNLOAD                                           :Idi do {STATION} (Istovar)
-STR_8809_GO_TO_TRANSFER_UNLOAD                                  :Go to {STATION} (Transferiraj i otiđi prazan)
-STR_880A_GO_TO_LOAD                                             :Idi do{STATION} (Utovar)
-STR_880B_GO_TO_TRANSFER_LOAD                                    :Idi do {STATION} (Transferiraj i pričekaj puni utovar)
-STR_880C_GO_NON_STOP_TO                                         :Idi non-stop do {STATION}
-STR_880D_GO_TO_NON_STOP_TRANSFER                                :Idi non-stop do {STATION} (Transferiraj i preuzmi teret)
-STR_880E_GO_NON_STOP_TO_UNLOAD                                  :Idi non-stop do {STATION} (Istovar)
-STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD                         :Idi non-stop do {STATION} (Transferiraj i otiđi prazan)
-STR_8810_GO_NON_STOP_TO_LOAD                                    :Idi non-stop do{STATION} (Utovar)
-STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD                           :Idi non-stop do {STATION} (Transferiraj i pričekaj puni utovar)
-STR_GO_TO_TRAIN_DEPOT                                           :Idi do {TOWN} spremište vlakova
-STR_SERVICE_AT_TRAIN_DEPOT                                      :Servisiraj u {TOWN} spremištu vlakova
-STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Idi non-stop do {TOWN} spremišta vlakova
-
-
-
-STR_UNKNOWN_DESTINATION                                         :nepoznato odredište
-STR_8812_EMPTY                                                  :{LTBLUE}Prazan
-STR_8813_FROM                                                   :{LTBLUE}{CARGO} iz {STATION}
-STR_8814_TRAIN_IS_WAITING_IN_DEPOT                              :{WHITE}Vlak {COMMA} čeka u spremištu
-STR_8815_NEW_VEHICLES                                           :{BLACK}Nova vozila
-STR_8816                                                        :{BLACK}-
-STR_8819_TRAIN_TOO_LONG                                         :{WHITE}Vlak predugačak
-STR_881A_TRAINS_CAN_ONLY_BE_ALTERED                             :{WHITE}Vlakovi mogu biti izmjenjeni jedino kad su zaustavljeni u spremištu
-
-STR_881C_NEW_RAIL_VEHICLES                                      :{WHITE}Nova željeznička vozila
-STR_881D_NEW_MONORAIL_VEHICLES                                  :{WHITE}Nova monorail vozila
-STR_881E_NEW_MAGLEV_VEHICLES                                    :{WHITE}Nova maglev vozila
-STR_ALL_AVAIL_RAIL_VEHICLES                                     :{WHITE}Željeznička vozila
-
-STR_881F_BUILD_VEHICLE                                          :{BLACK}Izgradi vozilo
-STR_CLONE_ROAD_VEHICLE                                          :{BLACK}Kloniraj vozilo
-STR_CLONE_ROAD_VEHICLE_INFO                                     :{BLACK}Ovo će izgraditi kopiju cestovnog vozila. Control-clik će dijeliti naredbe
-STR_CLONE_TRAIN                                                 :{BLACK}Kloniraj vlak
-STR_CLONE_TRAIN_INFO                                            :{BLACK}Ovo će izgraditi kopiju vlaka uključujući sve vagone. Control-klik će dijeliti naredbe
-STR_8820_RENAME                                                 :{BLACK}Preimenuj
-STR_8823_SKIP                                                   :{BLACK}Preskoči
-STR_8824_DELETE                                                 :{BLACK}Obriši
-STR_8825_NON_STOP                                               :{BLACK}Non-stop
-STR_8826_GO_TO                                                  :{BLACK}Idi do
-STR_8827_FULL_LOAD                                              :{BLACK}Puni utovar
-STR_8828_UNLOAD                                                 :{BLACK}Istovar
-STR_REFIT                                                       :{BLACK}Prenamijeni
-STR_REFIT_TIP                                                   :{BLACK}Odaberi tip tereta za prenamijeniti u ovoj narudžbi. CTRL-klik za brisanje uputa za prenamijenu
-STR_REFIT_ORDER                                                 :(Prenamijeni u {STRING})
-STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Naredbe)
-STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Kraj naredbi - -
-STR_SERVICE                                                     :{BLACK}Servis
-STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE                           :{WHITE}Ne mogu izgraditi željezničko vozilo...
-STR_882C_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Izgrađen: {LTBLUE}{NUM}{BLACK} Vrijednost: {LTBLUE}{CURRENCY}
-STR_882D_VALUE                                                  :{LTBLUE}{STRING}{BLACK}   Vrijednost: {LTBLUE}{CURRENCY}
-STR_882E                                                        :{WHITE}{VEHICLE}
-STR_882F_LOADING_UNLOADING                                      :{LTBLUE}Utovar / Istovar
-STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT                              :{WHITE}Ne mogu poslati vlak u spremište...
-STR_8831_NO_MORE_SPACE_FOR_ORDERS                               :{WHITE}Nema mjesta za nove naredbe
-STR_8832_TOO_MANY_ORDERS                                        :{WHITE}Previše naredbi
-STR_8833_CAN_T_INSERT_NEW_ORDER                                 :{WHITE}Ne možeš ubaciti novu naredbu...
-STR_8834_CAN_T_DELETE_THIS_ORDER                                :{WHITE}Ne možeš obrisati ovu naredbu...
-STR_8835_CAN_T_MODIFY_THIS_ORDER                                :{WHITE}Ne možeš izmjeniti ovu naredbu...
-STR_8837_CAN_T_MOVE_VEHICLE                                     :{WHITE}Ne možeš pomaknuti vozilo...
-STR_REAR_ENGINE_FOLLOW_FRONT_ERROR                              :{WHITE}Stražnja lokomotiva će uvijek pratiti svog prednjeg dvojnika
-STR_8838_N_A                                                    :N/A{SKIP}
-STR_8839_CAN_T_SELL_RAILROAD_VEHICLE                            :{WHITE}Ne možeš prodati željezničko vozilo
-STR_883A_UNABLE_TO_FIND_ROUTE_TO                                :{WHITE}Ne može pronaći put do lokalnog spremišta
-STR_883B_CAN_T_STOP_START_TRAIN                                 :{WHITE}Ne možeš zaustaviti/pokrenuti vlak...
-STR_883C_SERVICING_INTERVAL_DAYS                                :{BLACK}Servisni interval: {LTBLUE}{COMMA}dana{BLACK}   Zadnji servis: {LTBLUE}{DATE_LONG}
-STR_SERVICING_INTERVAL_PERCENT                                  :{BLACK}Servisni interval: {LTBLUE}{COMMA}%{BLACK} Zadnji servis: {LTBLUE}{DATE_LONG}
-STR_883D_TRAINS_CLICK_ON_TRAIN_FOR                              :{BLACK}Vlakovi - klikni na vlak za informacije
-STR_883E_BUILD_NEW_TRAINS_REQUIRES                              :{BLACK}Izgradi/kupi nove vlakove (zahtijeva spremište vlakova)
-STR_883F_TRAINS_CLICK_ON_TRAIN_FOR                              :{BLACK}Vlakovi - klikni na vlak za informacije., vuci vozilo kako bi dodao/oduzeo od vlaka
-STR_884C_SHOW_TRAIN_DETAILS                                     :{BLACK}Prikaži detalje vlaka
-STR_884D_INCREASE_SERVICING_INTERVAL                            :{BLACK}Povećaj servisni interval
-STR_884E_DECREASE_SERVICING_INTERVAL                            :{BLACK}Smanji servisni interval
-STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED                          :{BLACK}Pokaži detalje prevoženog tereta
-STR_8853_SKIP_THE_CURRENT_ORDER                                 :{BLACK}Preskoči trenutnu naredbu i počni sa sljedećom
-STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Obriši označenu naredbu
-STR_SERVICE_HINT                                                :{BLACK}Preskoči ovu narudžbu osim ako servis nije potreban
-STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER                        :{BLACK}Trošak: {CURRENCY} Težina: {WEIGHT_S}{}Brzina: {VELOCITY} Snaga: {POWER}{}Troškovi održavanja: {CURRENCY}/god{}Kapacitet: {CARGO}
-STR_885C_BROKEN_DOWN                                            :{RED}Pokvaren
-STR_885D_AGE_RUNNING_COST_YR                                    :{BLACK}Starost: {LTBLUE}{STRING}{BLACK}   Troškovi uporabe: {LTBLUE}{CURRENCY}/god
-STR_885F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Zarada ove godine: {LTBLUE}{CURRENCY}  (prošle godine: {CURRENCY})
-STR_8860_RELIABILITY_BREAKDOWNS                                 :{BLACK}Pouzdanost: {LTBLUE}{COMMA}%  {BLACK}Kvarova od zadnjeg servisa: {LTBLUE}{COMMA}
-STR_8861_STOPPED                                                :{RED}Zaustavljen
-STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL                           :{WHITE}Ne mogu natjerati vlak da ignorira signale dok je opasnost...
-STR_8863_CRASHED                                                :{RED}Slupan!
-
-STR_8865_NAME_TRAIN                                             :{WHITE}Imenuj vlak
-STR_8866_CAN_T_NAME_TRAIN                                       :{WHITE}Ne mogu imenovati vlak...
-STR_8867_NAME_TRAIN                                             :{BLACK}Imenuj vlak
-STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL                            :{BLACK}{BIGFONT}Vlak se sudario!{}{COMMA} poginulih u eksploziji nakon sudara
-STR_8869_CAN_T_REVERSE_DIRECTION                                :{WHITE}Ne mogu promijeniti smjer vlaka...
-STR_886A_RENAME_TRAIN_VEHICLE_TYPE                              :{WHITE}Preimenuj vrstu vlaka
-STR_886F_TRANSFER                                               :{BLACK}Transfer
-
-STR_TRAIN_STOPPING                                              :{RED}Zaustavljam
-STR_TRAIN_STOPPING_VEL                                          :{RED}Zaustavljam, {VELOCITY}
-
-
-##id 0x9000
-STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Cestovno vozilo na putu
-STR_9002                                                        :{WHITE}{VEHICLE}
-STR_9003_ROAD_VEHICLE_DEPOT                                     :{WHITE}{TOWN} Spremište cestovnih vozila
-STR_9004_NEW_VEHICLES                                           :{BLACK}Nova vozila
-STR_9006_NEW_ROAD_VEHICLES                                      :{WHITE}Nova cestovna vozila
-STR_9007_BUILD_VEHICLE                                          :{BLACK}Izgradi vozilo
-STR_9009_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}Ne mogu izgraditi cestovno vozilo...
-STR_900C_DETAILS                                                :{WHITE}{VEHICLE} (Detalji)
-STR_900D_AGE_RUNNING_COST_YR                                    :{BLACK}Starost: {LTBLUE}{STRING}{BLACK}   Trošak uporabe {LTBLUE}{CURRENCY}/god
-STR_900E_MAX_SPEED                                              :{BLACK}Maks brzina: {LTBLUE}{VELOCITY}
-STR_900F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Zarada ove godine: {LTBLUE}{CURRENCY}  (prošle godine: {CURRENCY})
-STR_9010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Pouzdanost: {LTBLUE}{COMMA}%  {BLACK}Kvarovi od posljednjeg servisa: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Izgrađen: {LTBLUE}{NUM}{BLACK} Vrijednost: {LTBLUE}{CURRENCY}
-STR_9012_CAPACITY                                               :{BLACK}Kapacitet: {LTBLUE}{CARGO}
-STR_9013_MUST_BE_STOPPED_INSIDE                                 :{WHITE}...mora biti zaustavljen unutar spremišta cestovnih vozila
-STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Ne mogu prodati cestovno vozilo...
-STR_9015_CAN_T_STOP_START_ROAD_VEHICLE                          :{WHITE}Ne mogu zaustaviti/pokrenuti cestovno vozilo...
-STR_9016_ROAD_VEHICLE_IS_WAITING                                :{WHITE}Cestovno vozilo {COMMA} čeka u spremištu
-STR_HEADING_FOR_ROAD_DEPOT                                      :{ORANGE}Kreće se prema {TOWN} cestovnom spremištu
-STR_HEADING_FOR_ROAD_DEPOT_VEL                                  :{ORANGE}Kreće se prema {TOWN} cestovnom spremištu, {VELOCITY}
-STR_HEADING_FOR_ROAD_DEPOT_SERVICE                              :{LTBLUE}Servisiranje u {TOWN} cestovnom spremištu
-STR_HEADING_FOR_ROAD_DEPOT_SERVICE_VEL                          :{LTBLUE}Seervisiranje u {TOWN} cestovnom spremištu, {VELOCITY}
-STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT                            :{WHITE}Ne mogu poslati vozilo u spremište...
-STR_9019_UNABLE_TO_FIND_LOCAL_DEPOT                             :{WHITE}Ne mogu pronaći lokalno spremište
-STR_901A_ROAD_VEHICLES_CLICK_ON                                 :{BLACK}Cestovna vozila - klikni na vozilo za informacije
-STR_901B_BUILD_NEW_ROAD_VEHICLES                                :{BLACK}Izgradi nova cestovna vozila (zahtijeva spremište cestovnih vozila)
-STR_901C_CURRENT_VEHICLE_ACTION                                 :{BLACK}Trenutna radnja vozila - klikni ovdje kako bi zaustavio/pokrenuo vozilo
-STR_901D_SHOW_VEHICLE_S_ORDERS                                  :{BLACK}Prikaži naredbe vozila
-STR_901E_CENTER_MAIN_VIEW_ON_VEHICLE                            :{BLACK}Centriraj glavni pogled na lokaciju vozila
-STR_901F_SEND_VEHICLE_TO_DEPOT                                  :{BLACK}Pošalji vozilo u spremište. CTRL+klik će samo servisirati
-STR_9020_FORCE_VEHICLE_TO_TURN_AROUND                           :{BLACK}Natjeraj vozila da se okrene natrag
-STR_9021_SHOW_ROAD_VEHICLE_DETAILS                              :{BLACK}Prikaži detalje cestovnog vozila
-STR_9022_VEHICLES_CLICK_ON_VEHICLE                              :{BLACK}Vozila - klikni na vozilo za informaciju
-STR_9023_BUILD_NEW_ROAD_VEHICLE                                 :{BLACK}Izgradi novo cestovno vozilo
-STR_9024_DRAG_ROAD_VEHICLE_TO_HERE                              :{BLACK}Povuci cestovno vozilo ovdje kako bi ga prodao
-STR_9025_CENTER_MAIN_VIEW_ON_ROAD                               :{BLACK}Centriraj glavni pogled na lokaciju spremišta cestovnih vozila
-STR_9026_ROAD_VEHICLE_SELECTION                                 :{BLACK}Popis cestovnih vozila - pritisni na vozilo za informacije
-STR_9027_BUILD_THE_HIGHLIGHTED_ROAD                             :{BLACK}Izgradi označeno cestovno vozilo
-STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Trošak: {CURRENCY}{}Brzina: {VELOCITY}{}Trošak uporabe: {CURRENCY}/god{}Kapacitet: {CARGO}
-
-STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Imenuj cestovno vozilo
-STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Ne mogu imenovati cestovno vozilo...
-STR_902E_NAME_ROAD_VEHICLE                                      :{BLACK}Imenuj cestovno vozilo
-STR_902F_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Građani slave . . .{}Prvi bus stiže na {STATION}!
-STR_9030_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Građani slave . . .{}Prvi kamion stiže na {STATION}!
-STR_9031_ROAD_VEHICLE_CRASH_DRIVER                              :{BLACK}{BIGFONT}Sudar cestovnog vozila!{}Vozač poginuo u eksploziji nakon sudara s vlakom
-STR_9032_ROAD_VEHICLE_CRASH_DIE                                 :{BLACK}{BIGFONT}Sudar cestovnog vozila!{}{COMMA} poginulih u eksploziji nakon sudara s vlakom
-STR_9033_CAN_T_MAKE_VEHICLE_TURN                                :{WHITE}Ne mogu natjerati vozilo da se okrene...
-STR_ONLY_TURN_SINGLE_UNIT                                       :{WHITE}Ne mogu okreniti vozila koja se sastoje od više jedinica
-STR_9034_RENAME                                                 :{BLACK}Preimenuj
-STR_9035_RENAME_ROAD_VEHICLE_TYPE                               :{BLACK}Preimenuj vrstu cestovnog vozila
-STR_9036_RENAME_ROAD_VEHICLE_TYPE                               :{WHITE}Preimenuj vrstu cestovnog vozila
-STR_9037_CAN_T_RENAME_ROAD_VEHICLE                              :{WHITE}Ne mogu preimenovati vrstu cestovnog vozila...
-STR_9038_GO_TO_ROADVEH_DEPOT                                    :Idi prema spremištu cestovnih vozila {TOWN}
-STR_SERVICE_AT_ROADVEH_DEPOT                                    :Servisiranje pri {TOWN} spremištu cestovnih vozila
-
-STR_REFIT_ROAD_VEHICLE_TO_CARRY                                 :{BLACK}Prenamijeni cestovno vozilo za prijevoz druge vrste tereta
-STR_REFIT_ROAD_VEHICLE                                          :{BLACK}Prenamijeni cestovno vozilo
-STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED                     :{BLACK}Prenamijeni cestovno vozilo za prijevoz druge vrste tereta
-STR_REFIT_ROAD_VEHICLE_CAN_T                                    :{WHITE}Ne mogu prenamijeniti cestovno vozilo...
-STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Izaberi vrstu tereta koje će cestovno vozilo prevoziti
-
-##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Izgradnja pristaništa
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Izgradnja pristaništa
-STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Ovdje ne mogu izgraditi pristanište...
-STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Spremište brodova
-STR_9804_NEW_SHIPS                                              :{BLACK}Novi brodovi
-STR_9805_SHIPS                                                  :{WHITE}{COMPANY} - {COMMA} Brod{P "" a ova}
-STR_9808_NEW_SHIPS                                              :{WHITE}Novi brodovi
-STR_9809_BUILD_SHIP                                             :{BLACK}Izgradi brod
-STR_CLONE_SHIP                                                  :{BLACK}Kloniraj brod
-STR_CLONE_SHIP_INFO                                             :{BLACK}Ovo će izgradi kopiju broda. Control-klik će dijeliti naredbe
-STR_980B_SHIP_MUST_BE_STOPPED_IN                                :{WHITE}Brod mora biti zaustavljen u spremištu
-STR_980C_CAN_T_SELL_SHIP                                        :{WHITE}Ne mogu prodati brod...
-STR_980D_CAN_T_BUILD_SHIP                                       :{WHITE}Ne mogu izgraditi brod...
-STR_980E_SHIP_IN_THE_WAY                                        :{WHITE}Smeta brod
-STR_980F                                                        :{WHITE}{VEHICLE}
-STR_9811_DETAILS                                                :{WHITE}{VEHICLE} (Detalji)
-STR_9812_AGE_RUNNING_COST_YR                                    :{BLACK}Starost: {LTBLUE}{STRING}{BLACK}   Trošak uporabe: {LTBLUE}{CURRENCY}/god
-STR_9813_MAX_SPEED                                              :{BLACK}Maks. brzina: {LTBLUE}{VELOCITY}
-STR_9814_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Zarada ove godine: {LTBLUE}{CURRENCY}  (prošle godine: {CURRENCY})
-STR_9815_RELIABILITY_BREAKDOWNS                                 :{BLACK}Pouzdanost: {LTBLUE}{COMMA}%  {BLACK}Kvarova od posljednjeg servisa: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Izgrađeno: {LTBLUE}{NUM}{BLACK} Vrijednost: {LTBLUE}{CURRENCY}
-STR_9817_CAPACITY                                               :{BLACK}Zapremnina: {LTBLUE}{CARGO}
-STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Ne mogu pokrenuti/zaustaviti brod...
-STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Ne mogu poslati brod u skladište...
-STR_981A_UNABLE_TO_FIND_LOCAL_DEPOT                             :{WHITE}Ne mogu naći lokalno spremište
-STR_HEADING_FOR_SHIP_DEPOT                                      :{ORANGE}Kreće se prema {TOWN} spremištu brodova
-STR_HEADING_FOR_SHIP_DEPOT_VEL                                  :{ORANGE}Kreće se prema {TOWN} spremištu brodova, {VELOCITY}
-STR_HEADING_FOR_SHIP_DEPOT_SERVICE                              :{LTBLUE}Servisiranje u {TOWN} spremištu brodova
-STR_HEADING_FOR_SHIP_DEPOT_SERVICE_VEL                          :{LTBLUE}Servisiranje u {TOWN} spremištu brodova, {VELOCITY}
-STR_981C_SHIP_IS_WAITING_IN_DEPOT                               :{WHITE}Brod {COMMA} čeka u spremištu
-STR_981D_BUILD_SHIP_DOCK                                        :{BLACK}Izgradi brodsko pristanište
-STR_981E_BUILD_SHIP_DEPOT_FOR_BUILDING                          :{BLACK}Izgradi spremište brodova (za gradnu i servisiranje brodova)
-STR_981F_SHIPS_CLICK_ON_SHIP_FOR                                :{BLACK}Brodovi - klikni na brod za informacije
-STR_9820_BUILD_NEW_SHIP                                         :{BLACK}Izgradi novi brod
-STR_9821_DRAG_SHIP_TO_HERE_TO_SELL                              :{BLACK}Povuci brod ovdje kako bi ga prodao
-STR_9822_CENTER_MAIN_VIEW_ON_SHIP                               :{BLACK}Centriraj glavni pogled na lokaciju spremišta brodova
-STR_9823_SHIPS_CLICK_ON_SHIP_FOR                                :{BLACK}Brodovi - klikni na brod za informacije
-STR_9824_BUILD_NEW_SHIPS_REQUIRES                               :{BLACK}Izgradi nove brodove (zahtijeva spremište brodova)
-STR_9825_SHIP_SELECTION_LIST_CLICK                              :{BLACK}Popis brodova - pritisni na brod za informacije
-STR_9826_BUILD_THE_HIGHLIGHTED_SHIP                             :{BLACK}Izgradi označeni brod
-STR_9827_CURRENT_SHIP_ACTION_CLICK                              :{BLACK}Trenutna radnja broda - pritisni ovdje za zaustavljanje/pokretanje broda
-STR_9828_SHOW_SHIP_S_ORDERS                                     :{BLACK}Prikaži naredbe broda
-STR_9829_CENTER_MAIN_VIEW_ON_SHIP                               :{BLACK}Centriraj glavni pogled na lokaciju broda
-STR_982B_SHOW_SHIP_DETAILS                                      :{BLACK}Prikaži detalje broda
-STR_982F_NAME_SHIP                                              :{BLACK}Imenuj brod
-
-STR_9831_NAME_SHIP                                              :{WHITE}Imenuj brod
-STR_9832_CAN_T_NAME_SHIP                                        :{WHITE}Ne mogu imenovati brod...
-STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Građani slave . . .{}Prvi brod stigao do {STATION}!
-STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}Smjesti plutaču koja može biti korištena kao pokazatelj puta
-STR_9835_CAN_T_POSITION_BUOY_HERE                               :{WHITE}Ne mogu staviti plutaču ovdje...
-STR_9836_RENAME                                                 :{BLACK}Preimenuj
-STR_9837_RENAME_SHIP_TYPE                                       :{BLACK}Preimenuj vrstu broda
-STR_9838_RENAME_SHIP_TYPE                                       :{WHITE}Preimenuj vrstu broda
-STR_9839_CAN_T_RENAME_SHIP_TYPE                                 :{WHITE}Ne mogu preimenovati vrstu broda...
-STR_983A_REFIT_CARGO_SHIP_TO_CARRY                              :{BLACK}Prenamijeni teretni brod da nosi neku drugu vrstu tereta
-STR_983B_REFIT                                                  :{WHITE}{VEHICLE} (Prenamijeni)
-STR_983C_REFIT_SHIP                                             :{BLACK}Prenamijeni brod
-STR_983D_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Odabri vrstu tereta za prijevoz brodom:
-STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED                        :{BLACK}Prenamjeni brod za prijevoz označene vrste tereta
-STR_983F_SELECT_CARGO_TYPE_TO_CARRY                             :{GOLD}Odabri vrstu tereta za prijevoz:
-STR_9840_NEW_CAPACITY_COST_OF_REFIT                             :{BLACK}Nova zapremnina: {GOLD}{CARGO}{}{BLACK}Cijena prenamjene: {GOLD}{CURRENCY}
-STR_9841_CAN_T_REFIT_SHIP                                       :{WHITE}Ne mogu prenamijeniti brod...
-STR_9842_REFITTABLE                                             :(prenamjenjiv)
-SERVICE_AT_SHIP_DEPOT                                           :Servis u brodskom spremištu grada {TOWN}
-
-##id 0xA000
-STR_A000_AIRPORTS                                               :{WHITE}Zračne luke
-STR_A001_CAN_T_BUILD_AIRPORT_HERE                               :{WHITE}Ne možeš graditi zračnu luku ovdje...
-STR_A002_AIRCRAFT_HANGAR                                        :{WHITE}{STATION} Spremište zrakoplova
-STR_A003_NEW_AIRCRAFT                                           :{BLACK}Novi zrakoplov
-STR_CLONE_AIRCRAFT                                              :{BLACK}Kloniraj zrakoplov
-STR_CLONE_AIRCRAFT_INFO                                         :{BLACK}Ovo će izgraditi kopiju zrakoplova. Control-klik će dijeliti naredbe
-STR_A005_NEW_AIRCRAFT                                           :{WHITE}Novi zrakoplov
-STR_A006_BUILD_AIRCRAFT                                         :{BLACK}Izgradi zrakoplov
-STR_A008_CAN_T_BUILD_AIRCRAFT                                   :{WHITE}Ne mogu izgraditi zrakoplov...
-STR_A009_AIRCRAFT                                               :{WHITE}{COMPANY} - {COMMA} zrakoplov
-STR_A00A                                                        :{WHITE}{VEHICLE}
-STR_A00B_ORDERS                                                 :{WHITE}{VEHICLE} (Naredbe)
-STR_A00C_DETAILS                                                :{WHITE}{VEHICLE} (Detalji)
-STR_A00D_AGE_RUNNING_COST_YR                                    :{BLACK}Starost: {LTBLUE}{STRING}{BLACK}   Troškovi uporabe {LTBLUE}{CURRENCY}/god
-STR_A00E_MAX_SPEED                                              :{BLACK}Maks brzina: {LTBLUE}{VELOCITY}
-STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Zarada ove godine: {LTBLUE}{CURRENCY}  (prošle godine: {CURRENCY})
-STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Pouzdanost: {LTBLUE}{COMMA}%  {BLACK}Kvarova od poslijednjeg servisa: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Izgrađen: {LTBLUE}{NUM}{BLACK} Vrijednost: {LTBLUE}{CURRENCY}
-STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Ne mogu poslati zrakoplov u hangar
-STR_A014_AIRCRAFT_IS_WAITING_IN                                 :{WHITE}Zrakoplov {COMMA} čeka u hangaru
-STR_A015_AIRCRAFT_IN_THE_WAY                                    :{WHITE}Smeta zrakoplov
-STR_A016_CAN_T_STOP_START_AIRCRAFT                              :{WHITE}Ne mogu zaustaviti/pokrenuti zrakoplov...
-STR_A017_AIRCRAFT_IS_IN_FLIGHT                                  :{WHITE}Zrakoplov je u letu
-STR_A019_CAPACITY                                               :{BLACK}Nosivost: {LTBLUE}{CARGO}, {CARGO}
-STR_A01A_CAPACITY                                               :{BLACK}Nosivost: {LTBLUE}{CARGO}
-STR_A01B_AIRCRAFT_MUST_BE_STOPPED                               :{WHITE}Zrakoplov mora biti zaustavljen u hangaru
-STR_A01C_CAN_T_SELL_AIRCRAFT                                    :{WHITE}Ne možeš prodati zrakoplov...
-STR_A01E_BUILD_AIRPORT                                          :{BLACK}Izgradi zračnu luku
-STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT                             :{BLACK}Zrakoplov - klikni na zrakoplov za informacije
-STR_A022_BUILD_NEW_AIRCRAFT                                     :{BLACK}Izgradi novi zrakoplov
-STR_A023_DRAG_AIRCRAFT_TO_HERE_TO                               :{BLACK}Povuci zrakoplov ovdje kako bi ga prodao
-STR_A024_CENTER_MAIN_VIEW_ON_HANGAR                             :{BLACK}Centriraj glavni pogled na lokaciju hangara
-STR_A025_AIRCRAFT_SELECTION_LIST                                :{BLACK}Popis zrakoplova - klini na zrakoplov za informacije
-STR_A026_BUILD_THE_HIGHLIGHTED_AIRCRAFT                         :{BLACK}Izgradi označeni zrakoplov
-STR_A028_SHOW_AIRCRAFT_S_ORDERS                                 :{BLACK}Prikaži naredbe zrakoplova
-STR_A02B_SHOW_AIRCRAFT_DETAILS                                  :{BLACK}Prikaži detalje zrakoplova
-
-STR_A030_NAME_AIRCRAFT                                          :{WHITE}Imenuj zrakoplov
-STR_A031_CAN_T_NAME_AIRCRAFT                                    :{WHITE}Ne mogu imenovati zrakoplov...
-STR_A032_NAME_AIRCRAFT                                          :{BLACK}Imenuj zrakoplov
-STR_A033_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Građani slave . . .{}Prvi zrakoplov stigao je na {STATION}!
-STR_A034_PLANE_CRASH_DIE_IN_FIREBALL                            :{BLACK}{BIGFONT}Pad zrakoplova!{}{COMMA} poginulih u eksploziji na {STATION}
-STR_PLANE_CRASH_OUT_OF_FUEL                                     :{BLACK}{BIGFONT}Avionska nesreća{}Avion je ostao bez goriva, {COMMA} poginulo u nesreći
-STR_A036                                                        :{TINYFONT}{BLACK}{STATION}
-STR_A037_RENAME                                                 :{BLACK}Preimenuj
-STR_A038_RENAME_AIRCRAFT_TYPE                                   :{BLACK}Preimenuj vrstu zrakoplova
-STR_A039_RENAME_AIRCRAFT_TYPE                                   :{WHITE}Preimenuj vrstu zrakoplova
-STR_A03A_CAN_T_RENAME_AIRCRAFT_TYPE                             :{WHITE}Ne mogu preimenovati vrstu zrakoplova...
-STR_A03B_REFIT_AIRCRAFT_TO_CARRY                                :{BLACK}Prenamijeni zrakoplov da nosi drugu vrstu tereta
-STR_A03C_REFIT                                                  :{WHITE}{VEHICLE} (Prenamijeni)
-STR_A03D_REFIT_AIRCRAFT                                         :{BLACK}Prenamijeni zrakoplov
-STR_A03E_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Izaberi vrstu tereta koju će zrakoplov nositi
-STR_A03F_REFIT_AIRCRAFT_TO_CARRY                                :{BLACK}Prenamijeni zrakoplov da nosi označenu vrstu tereta
-STR_A040_SELECT_CARGO_TYPE_TO_CARRY                             :{GOLD}Označi vrstu tereta za prijenos:
-STR_A041_NEW_CAPACITY_COST_OF_REFIT                             :{BLACK}Novi kapacitet: {GOLD}{STRING}{}{BLACK}Trošak prenamijene: {GOLD}{CURRENCY}
-STR_A042_CAN_T_REFIT_AIRCRAFT                                   :{WHITE}Ne mogu prenamijeniti zrakoplov...
-SERVICE_AT_AIRPORT_HANGAR                                       :Servisiranje u hangaru {STATION}
-
-##id 0xB000
-STR_B000_ZEPPELIN_DISASTER_AT                                   :{BLACK}{BIGFONT}Cepelin je pao kod {STATION}!
-STR_B001_ROAD_VEHICLE_DESTROYED                                 :{BLACK}{BIGFONT}Cestovno vozilo uništeno u 'NLO' sudaru!
-STR_B002_OIL_REFINERY_EXPLOSION                                 :{BLACK}{BIGFONT}Eksplozija rafinerije nafte blizu {TOWN}!
-STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS                        :{BLACK}{BIGFONT}Tvornica uništena pod sumnjivim okolnostima u blizini {TOWN}!
-STR_B004_UFO_LANDS_NEAR                                         :{BLACK}{BIGFONT}'NLO' sletio blizu {TOWN}!
-STR_B006_FLOOD_VEHICLE_DESTROYED                                :{BLACK}{BIGFONT}Poplave!{}Najmanje {COMMA} nestalih, pretpostavlja se poginulih nakon značajnih poplava!
-
-STR_BRIBE_FAILED                                                :{WHITE}Tvoj pokušaj podmićivanja je
-STR_BRIBE_FAILED_2                                              :{WHITE}otkriven od strane regionalnog istražitelja
-STR_BUILD_DATE                                                  :{BLACK}Izgrađeno: {LTBLUE}{DATE_LONG}
-
-STR_PERFORMANCE_DETAIL                                          :{WHITE}Detaljna procjena rezultata
-STR_PERFORMANCE_DETAIL_KEY                                      :{BLACK}Detalji
-STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY                          :{BLACK}({CURRCOMPACT}/{CURRCOMPACT})
-STR_PERFORMANCE_DETAIL_AMOUNT_INT                               :{BLACK}({COMMA}/{COMMA})
-STR_PERFORMANCE_DETAIL_PERCENT                                  :{WHITE}{NUM}%
-SET_PERFORMANCE_DETAIL_INT                                      :{BLACK}{NUM}
-############ Those following lines need to be in this order!!
-STR_PERFORMANCE_DETAIL_VEHICLES                                 :{BLACK}Vozila:
-STR_PERFORMANCE_DETAIL_STATIONS                                 :{BLACK}Stations:
-STR_PERFORMANCE_DETAIL_MIN_PROFIT                               :{BLACK}Min. prihod:
-STR_PERFORMANCE_DETAIL_MIN_INCOME                               :{BLACK}Min. prihod:
-STR_PERFORMANCE_DETAIL_MAX_INCOME                               :{BLACK}Maks. prihod:
-STR_PERFORMANCE_DETAIL_DELIVERED                                :{BLACK}Dostavljeno:
-STR_PERFORMANCE_DETAIL_CARGO                                    :{BLACK}Cargo:
-STR_PERFORMANCE_DETAIL_MONEY                                    :{BLACK}Novac:
-STR_PERFORMANCE_DETAIL_LOAN                                     :{BLACK}Zajam:
-STR_PERFORMANCE_DETAIL_TOTAL                                    :{BLACK}Totalno:
-############ End of order list
-STR_PERFORMANCE_DETAIL_VEHICLES_TIP                             :{BLACK}Broj vozila; ovo uključuje cestovna vozila, vlakove, brodove i avione
-STR_PERFORMANCE_DETAIL_STATIONS_TIP                             :{BLACK}Broj dijelova stanice. Svaki dio stanice (npr. željeznički kolodvor, autobusna postaja, aerodrom) se računa, čak i ako su spojene kao jedna stanica
-STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP                           :{BLACK}Profit vozila sa najnižim prihodom(od svih vozila starijih od 2 godine)
-STR_PERFORMANCE_DETAIL_MIN_INCOME_TIP                           :{BLACK}Količina gotovine ostvarene u mjesecu sa najnižim profitom u zadnjih 12 četvrtina
-STR_PERFORMANCE_DETAIL_MAX_INCOME_TIP                           :{BLACK}Količina gotovine ostvarene u mjesecu za najvišim profitom u zadnjih 12 četvrtina
-STR_PERFORMANCE_DETAIL_DELIVERED_TIP                            :{BLACK}Jedinice tereta dostavljene u zadnje četiri četvrtine
-STR_PERFORMANCE_DETAIL_CARGO_TIP                                :{BLACK}Broj vrsta tereta dostavljenog u zadnjoj četvrtini
-STR_PERFORMANCE_DETAIL_MONEY_TIP                                :{BLACK}Količina novca koji ova kompanija ima u banci
-STR_PERFORMANCE_DETAIL_LOAN_TIP                                 :{BLACK}Iznos novca koji je ova kompanija pozajmila
-STR_PERFORMANCE_DETAIL_TOTAL_TIP                                :{BLACK}Totalni broj bodova od mogućih bodova
-
-STR_NEWGRF_APPLY_CHANGES                                        :{BLACK}Potvrdi promjene
-STR_NEWGRF_NO_FILES_INSTALLED                                   :{BLACK}Nema novih newgrf datoteka instaliranih! Molimo pogledajte manual za upute o tome kako instalirati novu grafiku
-STR_NEWGRF_FILENAME                                             :{BLACK}Datoteka: {SILVER}{STRING}
-STR_NEWGRF_GRF_ID                                               :{BLACK}GRF ID: {SILVER}{STRING}
-STR_NEWGRF_MD5SUM                                               :{BLACK}MD5 suma: {SILVER}{STRING}
-STR_NEWGRF_CONFIRMATION_TEXT                                    :{YELLOW}Spremate se napraviti izmjene na pokrenutoj igri; to može srušiti OpenTTD.{}Jeste li potpuno sigurni u to?
-
-STR_NEWGRF_ERROR_MSG_ERROR                                      :{RED}Greška: {SILVER}{STRING}
-STR_NEWGRF_ERROR_MSG_FATAL                                      :{RED}Kobno: {SILVER}{STRING}
-STR_NEWGRF_ERROR_VERSION_NUMBER                                 :{STRING} neće raditi sa inačicom zakrpe u OpenTTD-u.
-STR_NEWGRF_ERROR_DOS_OR_WINDOWS                                 :{STRING} je za {STRING} inačicu TTD-a.
-STR_NEWGRF_ERROR_UNSET_SWITCH                                   :{STRING} je napravljen da se koristi sa {STRING}
-STR_NEWGRF_ERROR_INVALID_PARAMETER                              :Nevažeći parametar za  {STRING}: parametar {STRING} ({NUM})
-STR_NEWGRF_ERROR_LOAD_BEFORE                                    :{STRING} se mora učitati prije {STRING}.
-STR_NEWGRF_ERROR_LOAD_AFTER                                     :{STRING} se mora učitati nakon {STRING}.
-
-STR_NEWGRF_ADD                                                  :{BLACK}Dodaj
-STR_NEWGRF_ADD_TIP                                              :{BLACK}Dodaj NewGRF datoteku u listu
-STR_NEWGRF_REMOVE                                               :{BLACK}Obriši
-STR_NEWGRF_REMOVE_TIP                                           :{BLACK}Obriši odabranu NewGRF datoteku sa liste
-STR_NEWGRF_MOVEUP                                               :{BLACK}Pomakni gore
-STR_NEWGRF_MOVEUP_TIP                                           :{BLACK}Pomakni odabranu NewGRF datoteku gore na listi
-STR_NEWGRF_MOVEDOWN                                             :{BLACK} Pomakni dolje
-STR_NEWGRF_MOVEDOWN_TIP                                         :{BLACK}Pomakni odabranu NewGRF datoteku dolje na listi
-STR_NEWGRF_FILE_TIP                                             :{BLACK}Popis instaliranih NewGRF datoteka. Kliknite na datoteku da bi promijenili njene parametre
-STR_NEWGRF_PARAMETER                                            :{BLACK}Parametri: {SILVER}{STRING}
-STR_NEWGRF_PARAMETER_QUERY                                      :{BLACK}Unesite NewGRF  parametre
-STR_NEWGRF_NO_INFO                                              :{BLACK}Nema dostupnih informacija
-
-STR_NEWGRF_ADD_CAPTION                                          :{WHITE}Dostupne NewGRF datoteke
-STR_NEWGRF_ADD_FILE                                             :{BLACK}Dodaj u selekciju
-STR_NEWGRF_ADD_FILE_TIP                                         :{BLACK}Dodaj odabrane NewGRF datoteke u svoju konfiguraciju
-STR_NEWGRF_RESCAN_FILES                                         :{BLACK}Ponovno skeniraj datoteke
-STR_NEWGRF_RESCAN_FILES_TIP                                     :{BLACK}Osvježi listu dostupnih NewGRF datoteka
-STR_NEWGRF_DUPLICATE_GRFID                                      :{WHITE}Ne mogu dodati datoteku: dupli GRF ID
-
-STR_NEWGRF_NOT_FOUND                                            :{RED}Odgovarajuća datoteka nije pronađena
-STR_NEWGRF_DISABLED                                             :{RED}Onemogućeno
-STR_NEWGRF_COMPATIBLE_LOADED                                    :{ORANGE}Odgovarajuća datoteka nije pronađena (kompatibilni GRF podignut)
-
-STR_NEWGRF_COMPATIBLE_LOAD_WARNING                              :{WHITE}Kompatibilni GRF(ovi) učitani umjesto nepronađenih datoteka
-STR_NEWGRF_DISABLED_WARNING                                     :{WHITE}Nepronađene GRF datoteke su isključene
-STR_NEWGRF_NOT_FOUND_WARNING                                    :{WHITE}Nedostaje(u) datoteka(e) GRF za učitavanje igre
-
-STR_CURRENCY_WINDOW                                             :{WHITE}Proizvoljna valuta
-STR_CURRENCY_EXCHANGE_RATE                                      :{LTBLUE}Devizni tečaj: {ORANGE}{CURRENCY} = £ {COMMA}
-STR_CURRENCY_SEPARATOR                                          :{LTBLUE}Razdjelnik:
-STR_CURRENCY_PREFIX                                             :{LTBLUE}Prefiks:
-STR_CURRENCY_SUFFIX                                             :{LTBLUE}Sufiks:
-STR_CURRENCY_SWITCH_TO_EURO                                     :{LTBLUE}Prebaci se na euro: {ORANGE}{NUM}
-STR_CURRENCY_SWITCH_TO_EURO_NEVER                               :{LTBLUE}Prebaci se na euro: {ORANGE}nikad
-STR_CURRENCY_PREVIEW                                            :{LTBLUE}Prikaz: {ORANGE}{CURRENCY}
-STR_CURRENCY_CHANGE_PARAMETER                                   :{BLACK}Promijeni parametar proizvoljne valute
-
-STR_TRAIN                                                       :{BLACK}{TRAIN}
-STR_BUS                                                         :{BLACK}{BUS}
-STR_LORRY                                                       :{BLACK}{LORRY}
-STR_PLANE                                                       :{BLACK}{PLANE}
-STR_SHIP                                                        :{BLACK}{SHIP}
-
-STR_SCHEDULED_TRAINS                                            :{WHITE}{STATION} - {COMMA} Vlak{P "" a ova}
-STR_SCHEDULED_ROAD_VEHICLES                                     :{WHITE}{STATION} - {COMMA} Cestovn{P o a ih} vozil{P o a a}
-STR_SCHEDULED_AIRCRAFT                                          :{WHITE}{STATION} - {COMMA} Zrakoplov
-STR_SCHEDULED_SHIPS                                             :{WHITE}{STATION} - {COMMA} Brod{P "" a ova}
-
-STR_SCHEDULED_TRAINS_TIP                                        :{BLACK}Prikaži sve vlakove koji imaju ovu stanicu u svom rasporedu
-STR_SCHEDULED_ROAD_VEHICLES_TIP                                 :{BLACK}Prikaži sva cestovna vozila koja imaju ovu stanicu u svom rasporedu
-STR_SCHEDULED_AIRCRAFT_TIP                                      :{BLACK}Prikaži sve zrakoplove koji imaju ovu stanicu u svom rasporedu
-STR_SCHEDULED_SHIPS_TIP                                         :{BLACK}Prikaži sve brodove koji imaju ovu stanicu u svom rasporedu
-
-STR_VEH_WITH_SHARED_ORDERS_LIST                                 :{WHITE}Djeljene naredbe za {COMMA} vozil{P o a a}
-STR_VEH_WITH_SHARED_ORDERS_LIST_TIP                             :{BLACK}Prikaži sva vozila koja dijele ovaj raspored.
-
-### depot strings
-STR_DEPOT_SELL_CONFIRMATION_TEXT                                :{YELLOW}Upravo se spremaš prodati sva vozila u spremištu. Jesi li siguran?
-
-STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP                             :{BLACK}Prodaj sve vlakove u spremištu
-STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP                           :{BLACK}Prodaj sva cestovna vozila u spremištu
-STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP                              :{BLACK}Prodaj sve brodove u spremištu
-STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP                          :{BLACK}Prodaj sve zrakoplove u hangaru
-
-STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TIP                          :{BLACK}Daje popis svih vlakova u trenutnom spremištu, zajedno s njihovim naredbama
-STR_DEPOT_VEHICLE_ORDER_LIST_ROADVEH_TIP                        :{BLACK}Daje popis svih cestovnih vozila u trenutnom spremištu, zajedno s njihovim naredbama
-STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TIP                           :{BLACK}Daje popis svih brodova u trenutnom spremištu, zajedno s njihovim naredbama
-STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TIP                       :{BLACK}Daje popis svih zrakoplova u trenutnom spremištu, zajedno s njihovim naredbama
-
-STR_DEPOT_AUTOREPLACE_TRAIN_TIP                                 :{BLACK}Automatski zamijeni sve vlakove u spremištu
-STR_DEPOT_AUTOREPLACE_ROADVEH_TIP                               :{BLACK}Automatski zamijeni sva cestovna vozikla u spremištu
-STR_DEPOT_AUTOREPLACE_SHIP_TIP                                  :{BLACK}Automatski zamijeni sve brodove u spremištu
-STR_DEPOT_AUTOREPLACE_AIRCRAFT_TIP                              :{BLACK}Automatski zamijeni sve zrakoplove u spremištu
-
-STR_VEHICLE_LIST_TRAIN_DEPOT                                    :{BLACK}{STRING} - {COMMA} Vlak{P "" a ova}
-STR_VEHICLE_LIST_ROADVEH_DEPOT                                  :{BLACK}{STRING} - {COMMA} Cestovn{P o a ih} vozil{P o a a}
-STR_VEHICLE_LIST_SHIP_DEPOT                                     :{BLACK}{STRING} - {COMMA} Brod{P "" a ova}
-STR_VEHICLE_LIST_AIRCRAFT_DEPOT                                 :{BLACK}{STRING} - {COMMA} Zrakoplov
-
-STR_REPLACE_VEHICLES_WHITE                                      :{WHITE}Zamijeni {STRING}
-STR_REPLACE_VEHICLES_START                                      :{BLACK}Počni zamijenjivati vozila
-STR_REPLACE_VEHICLES_STOP                                       :{BLACK}Prestani zamijenjivati vozila
-STR_NOT_REPLACING                                               :{BLACK}Ne zamijenjujem
-STR_NOT_REPLACING_VEHICLE_SELECTED                              :{BLACK}Niti jedno vozilo nije odabrano
-STR_REPLACE_HELP_LEFT_ARRAY                                     :{BLACK}Izaberi vrstu motora koju želiš zamijeniti
-STR_REPLACE_HELP_RIGHT_ARRAY                                    :{BLACK}Odaberite novi tip lokomotive koji želite koristiti umjesto lijevo odabranog tipa lokomotive
-STR_REPLACE_HELP_STOP_BUTTON                                    :{BLACK}Klikni za zaustavljanje zamjene lijevo odabranog tipa lokomotive
-STR_REPLACE_HELP_START_BUTTON                                   :{BLACK}Klikni za početak zamjene lijevo odabrane lokomotive sa desno odabranim tipom
-STR_REPLACE_HELP_RAILTYPE                                       :{BLACK}Odaberite tip tračnica za koji želite zamijeniti lokomotive
-STR_REPLACE_HELP_REPLACE_INFO_TAB                               :{BLACK}Prikazuje sa kojom se lokomotivom zamjenjuje lijevo odabrana lokomotiva, ako postoji koji
-STR_REPLACE_HELP                                                :{BLACK}Ovo dozvoljava zamjenu jednog tipa lokomotive sa drugim, kada vlakovi prvotnog tipa uđu u stovarište
-STR_REPLACE_REMOVE_WAGON                                        :{BLACK}Brisanje vagona: {ORANGE}{SKIP}{STRING}
-STR_REPLACE_REMOVE_WAGON_HELP                                   :{BLACK}Neka automatska zamijena drži dužinu vlaka istom brišući vagone(počevši od naprijed), ako bi zamijena lokomotive vlak učinila dužim.
-STR_REPLACE_ENGINE_WAGON_SELECT                                 :{BLACK}Zamjenjujem:{ORANGE}{SKIP}{SKIP}{STRING}
-STR_REPLACE_ENGINE_WAGON_SELECT_HELP                            :{BLACK}EXPERIMENTALNA FUNKCIJA {} Prebaci između prozora za izmjenu lokomotiva i vagona.{}Izmjena vagona će se izvršiti samo ako novi vagon može biti prenamijenjen za prijevoz istog tipa tereta kao i stari vagon. Ovo se provjerava za svaki vagon kada se stvarna zamjena odvija.
-
-STR_ENGINES                                                     :Lokomotive
-STR_WAGONS                                                      :Vagoni
-
-STR_MASS_STOP_DEPOT_TRAIN_TIP                                   :{BLACK}Pritisni za zaustavljanje svih vlakova u spremištu
-STR_MASS_STOP_DEPOT_ROADVEH_TIP                                 :{BLACK}Pritisni za zaustavljanje svih cestovnih vozila u spremištu
-STR_MASS_STOP_DEPOT_SHIP_TIP                                    :{BLACK}Pritisni za zaustavljanje svih brodova u spremištu
-STR_MASS_STOP_HANGAR_TIP                                        :{BLACK}Pritisni za zaustavljanje svih zrakoplova u hangaru
-
-STR_MASS_START_DEPOT_TRAIN_TIP                                  :{BLACK}Pritisni za pokretanje svih vlakova u spremištu
-STR_MASS_START_DEPOT_ROADVEH_TIP                                :{BLACK}Pritisni za pokretanje svih cestovnih vozila u spremištu
-STR_MASS_START_DEPOT_SHIP_TIP                                   :{BLACK}Pritisni za pokretanje svih brodova u spremištu
-STR_MASS_START_HANGAR_TIP                                       :{BLACK}Klikni za pokretanje svih aviona u hangaru
-
-STR_MASS_STOP_LIST_TIP                                          :{BLACK}Klikni za zaustavljanje svih vozila na listi
-STR_MASS_START_LIST_TIP                                         :{BLACK}Klikni za pokretanje svih vozila na listi
-
-STR_SHORT_DATE                                                  :{WHITE}{DATE_TINY}
-STR_SIGN_LIST_CAPTION                                           :{WHITE}Popis znakova - {COMMA} Znak{P "" a ova}
-
-
-############ Lists rail types
-
-STR_RAIL_VEHICLES                                               :Tračna Vozila
-STR_ELRAIL_VEHICLES                                             :Električna željeznička vozila
-STR_MONORAIL_VEHICLES                                           :Jednotračna vozila
-STR_MAGLEV_VEHICLES                                             :Maglev željeznička vozila
-
-############ End of list of rail types
-
-STR_TINY_BLACK                                                  :{BLACK}{TINYFONT}{COMMA}
-
-STR_PURCHASE_INFO_COST_WEIGHT                                   :{BLACK}Trošak: {GOLD}{CURRENCY}{BLACK} Težina {GOLD}{WEIGHT_S}
-STR_PURCHASE_INFO_SPEED_POWER                                   :{BLACK}Brzina: {GOLD}{VELOCITY}{BLACK} Snaga: {GOLD}{POWER}
-STR_PURCHASE_INFO_SPEED                                         :{BLACK}Brzina: {GOLD}{VELOCITY}
-STR_PURCHASE_INFO_RUNNINGCOST                                   :{BLACK}Radni trošak: {GOLD}{CURRENCY}/god
-STR_PURCHASE_INFO_CAPACITY                                      :{BLACK}Kapacitet: {GOLD}{CARGO}{STRING}
-STR_PURCHASE_INFO_DESIGNED_LIFE                                 :{BLACK}Dizajnirana: {GOLD}{NUM}{BLACK} Životni vijek: {GOLD}{COMMA} godina
-STR_PURCHASE_INFO_RELIABILITY                                   :{BLACK}Maks. pouzdanost: {GOLD}{COMMA}%
-STR_PURCHASE_INFO_COST                                          :{BLACK}Trošak: {GOLD}{CURRENCY}
-STR_PURCHASE_INFO_WEIGHT_CWEIGHT                                :{BLACK}Težina: {GOLD}{WEIGHT_S} ({WEIGHT_S})
-STR_PURCHASE_INFO_COST_SPEED                                    :{BLACK}Trošak: {GOLD}{CURRENCY}{BLACK} Brzina: {GOLD}{VELOCITY}
-STR_PURCHASE_INFO_AIRCRAFT_CAPACITY                             :{BLACK}Zapremnina: {GOLD}{COMMA} putnika, {COMMA} vreća s poštom
-STR_PURCHASE_INFO_REFITTABLE_TO                                 :{BLACK}Promjenjivo u: {GOLD}
-STR_PURCHASE_INFO_ALL_TYPES                                     :Svi tipovi tereta
-STR_PURCHASE_INFO_ALL_BUT                                       :Sve osim {GOLD}
-STR_PURCHASE_INFO_MAX_TE                                        :{BLACK} Maks. vučni napor: {GOLD}{FORCE}
-
-########### String for New Landscape Generator
-
-STR_GENERATE                                                    :{WHITE}Izradi
-STR_RANDOM                                                      :{BLACK}Nasumično
-STR_RANDOM_HELP                                                 :{BLACK}Promijeni slučajni slijed koji se koristi za kreiranje terena
-STR_WORLD_GENERATION_CAPTION                                    :{WHITE}Izrada svijeta
-STR_RANDOM_SEED                                                 :{BLACK}Nasumični slijed:
-STR_RANDOM_SEED_HELP                                            :{BLACK}Klikni za unos nasumičnog slijeda
-STR_LAND_GENERATOR                                              :{BLACK}Izrađivač zemljišta:
-STR_TREE_PLACER                                                 :{BLACK} Algoritam za drveće:
-STR_TERRAIN_TYPE                                                :{BLACK}Tip terena:
-STR_QUANTITY_OF_SEA_LAKES                                       :{BLACK}Razina mora:
-STR_SMOOTHNESS                                                  :{BLACK}Graduacija:
-STR_SNOW_LINE_HEIGHT                                            :{BLACK}Visina linije snijega
-STR_DATE                                                        :{BLACK}Datum:
-STR_NUMBER_OF_TOWNS                                             :{BLACK}Broj gradova:
-STR_NUMBER_OF_INDUSTRIES                                        :{BLACK}Broj industrija:
-STR_GENERATE_DATE                                               :{BLACK}{DATE_LONG}
-STR_SNOW_LINE_UP                                                :{BLACK}Pomakni visinu linije snijega za jedan gore
-STR_SNOW_LINE_DOWN                                              :{BLACK}Pomakni visinu linije snijega za jedan dolje
-STR_SNOW_LINE_QUERY_CAPT                                        :{WHITE}Promijeni visinu linije snijega
-STR_START_DATE_QUERY_CAPT                                       :{WHITE}Promijeni početnu godinu
-STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
-STR_HEIGHTMAP_SIZE                                              :{BLACK}Veličina: {ORANGE}{NUM} x {NUM}
-STR_GENERATION_WORLD                                            :{WHITE}Izrada svijeta u toku...
-STR_GENERATION_ABORT                                            :{BLACK}Prekini
-STR_GENERATION_ABORT_CAPTION                                    :{WHITE}Poništi izradu svijeta
-STR_GENERATION_ABORT_MESSAGE                                    :{YELLOW}Da li zaista želiš prekinuti izradu?
-STR_PROGRESS                                                    :{WHITE}{NUM}% gotovo
-STR_GENERATION_PROGRESS                                         :{BLACK}{NUM} / {NUM}
-STR_WORLD_GENERATION                                            :{BLACK}Izrada svijeta
-STR_TREE_GENERATION                                             :{BLACK}Generiranje drveća
-STR_CLEARING_TILES                                              :{BLACK}Generiranje grubog i stjenovitog područja
-STR_SETTINGUP_GAME                                              :{BLACK}Uspostavljam igru
-STR_PREPARING_TILELOOP                                          :{BLACK}Izvršavam tile-petlju
-STR_PREPARING_GAME                                              :{BLACK}Pripremam igru
-STR_SE_FLAT_WORLD                                               :{WHITE}Ravna zemlja
-STR_SE_FLAT_WORLD_TIP                                           :{BLACK}Kreiraj ravan teren
-STR_SE_RANDOM_LAND                                              :{WHITE}Nasumični teren
-STR_SE_NEW_WORLD                                                :{BLACK}Kreiraj novi scenarij
-STR_SE_CAPTION                                                  :{WHITE}Vrsta scenarija
-STR_FLAT_WORLD_HEIGHT_DOWN                                      :{BLACK}Snizi ravnu površinu za jedan korak
-STR_FLAT_WORLD_HEIGHT_UP                                        :{BLACK}Povisi ravnu površinu za jedan korak
-STR_FLAT_WORLD_HEIGHT_QUERY_CAPT                                :{WHITE}Promijeni visinu ravne površine
-STR_FLAT_WORLD_HEIGHT                                           :{BLACK}Visina ravne površine:
-STR_FLAT_WORLD_HEIGHT_NUM                                       :{NUM}
-
-STR_SMALLMAP_CENTER                                             :{BLACK}Centriraj malu mapu na trenutni položaj
-
-########### String for new airports
-STR_SMALL_AIRPORT                                               :{BLACK}Mala
-STR_CITY_AIRPORT                                                :{BLACK}Grad
-STR_METRO_AIRPORT                                               :{BLACK}Metropolitanski airport
-STR_INTERNATIONAL_AIRPORT                                       :{BLACK}Međunarodni aerodrom
-STR_COMMUTER_AIRPORT                                            :{BLACK}Redoviti putnik
-STR_INTERCONTINENTAL_AIRPORT                                    :{BLACK}Međukontinentalni
-STR_HELIPORT                                                    :{BLACK}Heliodrom
-STR_HELIDEPOT                                                   :{BLACK}Spremište za helikoptere
-STR_HELISTATION                                                 :{BLACK}Stanica za helikoptere
-
-STR_SMALL_AIRPORTS                                              :{BLACK}Mali aerodromi
-STR_LARGE_AIRPORTS                                              :{BLACK}Veliki aerodromi
-STR_HUB_AIRPORTS                                                :{BLACK}Središnje zračne luke
-STR_HELIPORTS                                                   :{BLACK}Helicopterske zračne luke
-
-############ Tooltip measurment
-
-STR_MEASURE_LENGTH                                              :{BLACK}Dužina:{NUM}
-STR_MEASURE_AREA                                                :{BLACK}Područje:{NUM}x{NUM}
-STR_MEASURE_LENGTH_HEIGHTDIFF                                   :{BLACK}Dužina:{NUM}{}Visinska razlika:{NUM} m
-STR_MEASURE_AREA_HEIGHTDIFF                                     :{BLACK}Područje:{NUM}x{NUM}Visinska razlika:{NUM} m
-
-############ Date formatting
-STR_DATE_TINY                                                   :{STRING}-{STRING}-{NUM}
-STR_DATE_SHORT                                                  :{STRING} {NUM}
-STR_DATE_LONG                                                   :{STRING} {STRING} {NUM}
-
-########
-
-STR_FEEDER_CARGO_VALUE                                          :{BLACK}Prebaci novac: {LTBLUE}{CURRENCY}
--- a/src/lang/unfinished/frisian.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/unfinished/frisian.txt	Sat Jul 14 19:42: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}
@@ -348,7 +348,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Gemiente: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Neat
 STR_01AA_NAME                                                   :{BLACK}Namme
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :1
@@ -877,7 +877,7 @@
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Stêden
-STR_2002                                                        :{TINYFONT}{BLACK}{STRING}
+STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Gebou moat earst fuorthelle wurde
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Ynwenners: {ORANGE}{COMMA}{BLACK}  Hûzen: {ORANGE}{COMMA}
@@ -910,7 +910,7 @@
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Lit ynformaasje sjen oer de gemeente
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} gemeente
 STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Transportbedrieuw rang:
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subsydzjes
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Subsydzjes dy't oanbean wurde:
 STR_2027_FROM_TO                                                :{ORANGE}{STRING} fan {STRING} nei {STRING}
@@ -969,7 +969,7 @@
 STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...hjir stiet al in beam
 STR_2804_SITE_UNSUITABLE                                        :{WHITE}...bouplak net geskikt
 STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Kin hjir gjin beam plantsje
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...te folle buordsjes
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Kin hjir gjin buordsje delsette
 STR_280A_SIGN                                                   :Buordsje
@@ -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
 
@@ -1178,13 +1178,13 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7002_PLAYER                                                 :(Spyler {COMMA})
 STR_7004_NEW_FACE                                               :{BLACK}Nei Gesicht
 STR_7005_COLOR_SCHEME                                           :{BLACK}Kleurenskema
 STR_7006_COLOR_SCHEME                                           :{GOLD}Kleurenskema:
 STR_7007_NEW_COLOR_SCHEME                                       :{WHITE}Nei Kleurenskema
-STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finansieen {BLACK}{PLAYERNAME}
+STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finansieen {BLACK}{COMPANYNUM}
 STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Utjeften/Ynkomsten
 STR_7010                                                        :{WHITE}{NUM}
 STR_7011_CONSTRUCTION                                           :{GOLD}Konstruksje
@@ -1193,16 +1193,16 @@
 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_7021                                                        :{COMPANY}{COMPANYNUM}
 STR_7022_INCOME_GRAPH                                           :{WHITE}Ynkomsten Grafyk
 STR_7024                                                        :{COMMA}
 STR_7027_LOAN                                                   :{WHITE}Liening
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Lien {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Betelje {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY} werom
+STR_7028                                                        :{BLACK}{CURRENCY}
+STR_7029_BORROW                                                 :{BLACK}Lien {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY                                                  :{BLACK}Betelje {SKIP}{SKIP}{CURRENCY} werom
 STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Kin net mear jild liene
 STR_702E_REQUIRED                                               :{WHITE}...{CURRENCY} nedich
 STR_702F_CAN_T_REPAY_LOAN                                       :{WHITE}Kin liening net werombetelje
--- a/src/lang/unfinished/greek.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/unfinished/greek.txt	Sat Jul 14 19:42: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}
@@ -494,7 +494,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{G ος η ο}
@@ -1029,7 +1029,6 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Παράδοση φορτίου σε σταθμό μόνο όταν υπάρχει ζήτηση: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Επιτρέπεται να χτίζονται πολύ μακριές γέφυρες: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Επιτρέπονται οι εντολές αποστολής σε αμαξοστάσιο: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Επιτρέπεται η κατασκευή βιομηχανιών πρώτων υλών: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Επιτρέπονται πολλαπλές όμοιες βιομηχανίες ανα πόλη: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Βιομηχανίες ίδου τύπου μπορούν να χτιστούν κοντά η μία στην άλλη: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Εμφάνιση ολόκληρης ημερομηνίες στη γραμμή κατάστασης: {ORANGE}{STRING}
@@ -1159,7 +1158,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}
@@ -1199,7 +1198,7 @@
 STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Είστε σίγουρος ότι θέλετε να δημιουργήσετε ένα τυχαίο τοπίο;
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Πολλές τυχαίες πόλεις
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Κάλυψη του χάρτη με τυχαία τοποθετημένες πόλεις
-STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Πολλές τυχαίες βιομηχανίες
+STR_MANY_RANDOM_INDUSTRIES                                      :Πολλές τυχαίες βιομηχανίες
 
 
 
@@ -1353,7 +1352,7 @@
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Πόλεις
-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}
@@ -1386,7 +1385,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}
@@ -1450,7 +1449,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                                                   :Πινακίδα
@@ -1557,9 +1556,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}Διαγραφή του επιλεγμένου αποθηκευμένου παιχνιδιού
@@ -1764,7 +1763,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}Χρωματισμός
@@ -1776,7 +1775,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}Κατασκευή
@@ -1792,18 +1791,18 @@
 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_7024                                                        :{COMMA}
 STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Γράφημα Ενεργών Εσόδων
 STR_7026_BANK_BALANCE                                           :{WHITE}Ισολογισμός Τραπέζης
 STR_7027_LOAN                                                   :{WHITE}Δάνειο
-STR_7028                                                        :{BLACK}{CURRENCY64}
-STR_7029_BORROW                                                 :{BLACK}Δανεισμός {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY                                                  :{BLACK}Πληρωμή {SKIP}{SKIP}{SKIP}{SKIP}{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}...δεν υπάρχει δάνειο προς αποπληρωμή
@@ -1837,8 +1836,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}{}(Διευθυντής)
@@ -1871,7 +1870,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% της εταιρείας
@@ -2018,3 +2017,4 @@
 
 ########
 
+
--- a/src/lang/unfinished/latvian.txt	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/lang/unfinished/latvian.txt	Sat Jul 14 19:42:58 2007 +0000
@@ -1,28 +1,32 @@
 ##name Latvian
-##ownname Latviešu valoda
+##ownname Latviešu
 ##isocode lv_LV
 ##plural 3
+##case a
+##gender m n f
+
+#
 
 ##id 0x0000
 STR_NULL                                                        :
-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_0001_OFF_EDGE_OF_MAP                                        :{WHITE}Ārpus kartes robežām
+STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP                               :{WHITE}Pārāk tuvu kartes malai
+STR_0003_NOT_ENOUGH_CASH_REQUIRES                               :{WHITE}Nepietiek naudas - nepieciešami {CURRENCY}
+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}
+STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}Zemei jābūt plakanai
+STR_0008_WAITING                                                :{BLACK}Gaidam: {WHITE}{STRING.a}
 STR_0009                                                        :{WHITE}{CARGO}
-STR_000A_EN_ROUTE_FROM                                          :{WHITE}{CARGO}{YELLOW}  (cel'a' no
+STR_000A_EN_ROUTE_FROM                                          :{WHITE}{CARGO}{YELLOW}  (ceļā no
 STR_000B                                                        :{YELLOW}{STATION})
-STR_000C_ACCEPTS                                                :{BLACK}Pien'em: {WHITE}
-STR_000D_ACCEPTS                                                :{BLACK}Pien'em: {GOLD}
+STR_000C_ACCEPTS                                                :{BLACK}Pieņem: {WHITE}
+STR_000D_ACCEPTS                                                :{BLACK}Pieņem: {GOLD}
 STR_000E                                                        :
-STR_000F_PASSENGERS                                             :Pasaz'ierus
+STR_000F_PASSENGERS                                             :Pasažieri
 STR_0010_COAL                                                   :Ogles
-STR_0011_MAIL                                                   :Pastu
-STR_0012_OIL                                                    :Naftu
+STR_0011_MAIL                                                   :Pasts
+STR_0012_OIL                                                    :Nafta
 STR_0013_LIVESTOCK                                              :Liellopus
 STR_0014_GOODS                                                  :Preces
 STR_0015_GRAIN                                                  :Graudus
@@ -146,12 +150,15 @@
 STR_ABBREV_BATTERIES                                            :{TINYFONT}BT
 STR_ABBREV_PLASTIC                                              :{TINYFONT}PL
 STR_ABBREV_FIZZY_DRINKS                                         :{TINYFONT}BU
+STR_ABBREV_NONE                                                 :{TINYFONT}NAV
+STR_ABBREV_ALL                                                  :{TINYFONT}VISI
 STR_00AE                                                        :{WHITE}{DATE_SHORT}
 STR_00AF                                                        :{WHITE}{DATE_LONG}
 STR_00B0_MAP                                                    :{WHITE}Karte - {STRING}
 STR_00B1_GAME_OPTIONS                                           :{WHITE}Spe'les parametri
 STR_00B2_MESSAGE                                                :{YELLOW}Zin'ojums
 STR_00B3_MESSAGE_FROM                                           :{YELLOW}Zin'ojums no {STRING}
+STR_POPUP_CAUTION_CAPTION                                       :{WHITE}Uzmanību!
 STR_00B4_CAN_T_DO_THIS                                          :{WHITE}Ta' nevar dari't....
 STR_00B5_CAN_T_CLEAR_THIS_AREA                                  :{WHITE}S'o laukumu nevar noli'dzina't....
 STR_00B6_ORIGINAL_COPYRIGHT                                     :{BLACK}Org'ìina'la's autortiesi'bas {COPYRIGHT} 1995 Chris Sawyer, Visas tiesi'bas rezerve'tas
@@ -277,6 +284,7 @@
 STR_OSNAME_MORPHOS                                              :MorphOS
 STR_OSNAME_AMIGAOS                                              :AmigaOS
 STR_OSNAME_OS2                                                  :OS/2
+STR_OSNAME_SUNOS                                                :SunOS
 
 STR_013B_OWNED_BY                                               :{WHITE}...pieder {STRING}
 STR_013C_CARGO                                                  :{BLACK}Krava
@@ -284,12 +292,15 @@
 STR_013E_CAPACITIES                                             :{BLACK}Ietilpi'ba
 STR_013E_TOTAL_CARGO                                            :{BLACK}Krava kopa'
 STR_013F_CAPACITY                                               :{BLACK}Ietilpi'ba: {LTBLUE}{CARGO}
+STR_CAPACITY_MULT                                               :{BLACK}Ietilpība: {LTBLUE}{CARGO} (x{NUM})
 STR_013F_TOTAL_CAPACITY_TEXT                                    :{BLACK}Kope'ja' vilciena kravas ietilpi'ba:
 STR_013F_TOTAL_CAPACITY                                         :{LTBLUE}- {CARGO} ({SHORTCARGO})
+STR_TOTAL_CAPACITY_MULT                                         :{LTBLUE}- {CARGO} ({SHORTCARGO}) (x{NUM})
 STR_0140_NEW_GAME                                               :{BLACK}Jauna spe'le
 STR_0141_LOAD_GAME                                              :{BLACK}Iela'de't spe'li
 STR_SINGLE_PLAYER                                               :{BLACK}Viens spe'le'ta'js
 STR_MULTIPLAYER                                                 :{BLACK}Daudz-spe'le'ta'ju
+STR_SCENARIO_EDITOR                                             :{BLACK}Scenāriju redaktors
 
 STR_64                                                          :64
 STR_128                                                         :128
@@ -306,6 +317,34 @@
 STR_0152_TOWN_DIRECTORY                                         :Pilse'tu saraksts
 STR_0153_SUBSIDIES                                              :Subsi'dijas
 
+STR_UNITS_IMPERIAL                                              :Britu
+STR_UNITS_METRIC                                                :Metriska
+STR_UNITS_SI                                                    :SI
+
+STR_UNITS_VELOCITY_IMPERIAL                                     :{COMMA} jūdzes/h
+STR_UNITS_VELOCITY_METRIC                                       :{COMMA} km/h
+STR_UNITS_VELOCITY_SI                                           :{COMMA} m/s
+
+STR_UNITS_POWER_IMPERIAL                                        :{COMMA} zs
+STR_UNITS_POWER_METRIC                                          :{COMMA} zs
+STR_UNITS_POWER_SI                                              :{COMMA} kW
+
+STR_UNITS_WEIGHT_SHORT_IMPERIAL                                 :{COMMA}t
+STR_UNITS_WEIGHT_SHORT_METRIC                                   :{COMMA}t
+STR_UNITS_WEIGHT_SHORT_SI                                       :{COMMA}kg
+
+STR_UNITS_WEIGHT_LONG_SI                                        :{COMMA} kg
+
+STR_UNITS_VOLUME_SHORT_IMPERIAL                                 :{COMMA}galoni
+STR_UNITS_VOLUME_SHORT_METRIC                                   :{COMMA}l
+STR_UNITS_VOLUME_SHORT_SI                                       :{COMMA}m³
+
+STR_UNITS_VOLUME_LONG_SI                                        :{COMMA} m³
+
+STR_UNITS_FORCE_IMPERIAL                                        :{COMMA}x10³ mārciņasf
+STR_UNITS_FORCE_METRIC                                          :{COMMA} tonnu spēks
+STR_UNITS_FORCE_SI                                              :{COMMA} kN
+
 ############ range for menu starts
 STR_0154_OPERATING_PROFIT_GRAPH                                 :Pana'kumu grafiks
 STR_0155_INCOME_GRAPH                                           :Iena'kumu grafiks
@@ -322,7 +361,7 @@
 STR_015D_LOAD_GAME                                              :Iela'de't spe'li
 STR_015E_QUIT_GAME                                              :Pamest spe'li
 STR_015F_QUIT                                                   :Iziet a'ra'
-STR_0160_ARE_YOU_SURE_YOU_WANT_TO                               :{YELLOW}Vai tu patiesi gribi pamest s'o spe'li?
+STR_ABANDON_GAME_QUERY                                          :{YELLOW}Vai jūs tiešām vēlaties pārtraukt šo spēli?
 STR_0161_QUIT_GAME                                              :{WHITE}Pamest spe'li
 STR_SORT_ORDER_TIP                                              :{BLACK}Izve'le'ties saka'rtojumu (dilstos's/augos's)
 STR_SORT_CRITERIA_TIP                                           :{BLACK}Izve'le'ties sorte's'anas krite'riju
@@ -342,6 +381,34 @@
 STR_SORT_BY_RELIABILITY                                         :Dros'i'ba
 STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE                        :Kope'ja' ietilpi'ba pe'c kravas tipa
 STR_SORT_BY_MAX_SPEED                                           :maksima'lais a'trums
+STR_SORT_BY_MODEL                                               :Modelis
+STR_SORT_BY_VALUE                                               :Vērtība
+STR_SORT_BY_FACILITY                                            :Stacijas veids
+STR_SORT_BY_WAITING                                             :Gaidošās kravas vērtība
+STR_SORT_BY_RATING_MAX                                          :Kravas reitings
+STR_ENGINE_SORT_ENGINE_ID                                       :DzinējaID (klasiskais veids)
+STR_ENGINE_SORT_COST                                            :Izmaksas
+STR_ENGINE_SORT_POWER                                           :Jauda
+STR_ENGINE_SORT_INTRO_DATE                                      :Ieviešanas datums
+STR_ENGINE_SORT_RUNNING_COST                                    :Lietošanas izmaksas
+STR_ENGINE_SORT_POWER_VS_RUNNING_COST                           :Jauda/lietošanas izmaksas
+STR_ENGINE_SORT_CARGO_CAPACITY                                  :Kravnesība
+STR_NO_WAITING_CARGO                                            :{BLACK}Neviena veida krava negaida
+STR_SELECT_ALL_FACILITIES                                       :{BLACK}Izvēlēties visu aprīkojumu
+STR_SELECT_ALL_TYPES                                            :{BLACK}Izvēlēties visus kravas veidus (ieskaitot, kas negaida)
+STR_AVAILABLE_TRAINS                                            :{BLACK}Pieejamie vilcieni
+STR_AVAILABLE_ROAD_VEHICLES                                     :{BLACK}Pieejamie transportlīdzekļi
+STR_AVAILABLE_SHIPS                                             :{BLACK}Pieejamie kuģi
+STR_AVAILABLE_AIRCRAFT                                          :{BLACK}Pieejamās lidmašīnas
+STR_AVAILABLE_ENGINES_TIP                                       :{BLACK}Apskatīties visus vilcējus, kas pieejami šim transportlīdzekļu veidam.
+STR_MANAGE_LIST                                                 :{BLACK}Labot sarakstu
+STR_MANAGE_LIST_TIP                                             :{BLACK}Dot norādījumus visiem transportlīdzekļiem, kas ir šajā sarakstā
+STR_REPLACE_VEHICLES                                            :Nomainīt transportlīdzekļus
+STR_SEND_TRAIN_TO_DEPOT                                         :Sūtīt uz depo
+STR_SEND_ROAD_VEHICLE_TO_DEPOT                                  :Sūtīt uz depo
+STR_SEND_SHIP_TO_DEPOT                                          :Sūtīt uz depo
+STR_SEND_AIRCRAFT_TO_HANGAR                                     :Sūtīt uz angāru
+STR_SEND_FOR_SERVICING                                          :Sūtīt uz apkalpošanu
 
 ############ range for months starts
 STR_0162_JAN                                                    :Jan
@@ -407,8 +474,8 @@
 STR_0198_PROFIT_THIS_YEAR_LAST_YEAR                             :{TINYFONT}{BLACK}S'i' gada iena'kums: {CURRENCY} (paga'jus'aja' gada': {CURRENCY})
 
 ############ range for service numbers starts
-STR_AGE                                                         :{COMMA} gad{P s i} ({COMMA})
-STR_AGE_RED                                                     :{RED}{COMMA} gad{P s i} ({COMMA})
+STR_AGE                                                         :{COMMA} gad{P s i u} ({COMMA})
+STR_AGE_RED                                                     :{RED}{COMMA} gad{P s i u} ({COMMA})
 ############ range for service numbers ends
 
 STR_019C_ROAD_VEHICLE                                           :Cel'u transporta li'dzeklis
@@ -426,7 +493,7 @@
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Viete'ja's varas iesta'des: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Neviens/neviena
 STR_01AA_NAME                                                   :{BLACK}Va'rds
-STR_01AB                                                        :{BLACK}{TINYFONT}{STRING}
+STR_01AB                                                        :{BLACK}{TINYFONT}{VEHICLE}
 
 ############ range for days starts
 STR_01AC_1ST                                                    :Pirmais
@@ -508,6 +575,7 @@
 STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1                          :{BLACK}Dze'st tekos'o programmu (tikai 1.Specia'lo vai 2.Specia'lo)
 STR_01F9_SAVE_MUSIC_SETTINGS                                    :{BLACK}Saglaba't muzikas rez'i'mus
 STR_01FA_CLICK_ON_MUSIC_TRACK_TO                                :{BLACK}Uzkliks'k'ini uz muzikas treku lai to pievienotu tekos'ajai programmai (1.Specia'lai vai 2.Specia'lai)
+STR_CLICK_ON_TRACK_TO_REMOVE                                    :{BLACK}Uzklikšķiniet uz dziemas, lai to izdzēstu no šībrīža programmas (tikai Pielāgotā1 un Pielāgotā2)
 STR_01FB_TOGGLE_PROGRAM_SHUFFLE                                 :{BLACK}Pa'rsle'gt muzikas saraksta sajauks'anu
 STR_01FC_SHOW_MUSIC_TRACK_SELECTION                             :{BLACK}Para'di't muzikas saraksta atzi'me's'anas logu
 STR_01FD_CLICK_ON_SERVICE_TO_CENTER                             :{BLACK}Uzkliks'k'ini uz servisa lai iecentre'tu skatu uz industriju vai pilse'tu
@@ -523,6 +591,7 @@
 STR_0207_ARRIVAL_OF_FIRST_VEHICLE                               :{YELLOW}Sa'ncens'a stacija' ierodas pirmais transporta li'dzeklis
 STR_0208_ACCIDENTS_DISASTERS                                    :{YELLOW}Negadijumi / ava'rijas
 STR_0209_COMPANY_INFORMATION                                    :{YELLOW}Kompa'nijas informa'cija
+STR_NEWS_OPEN_CLOSE                                             :{YELLOW}Atvērt / aizvērt industrijas
 STR_020A_ECONOMY_CHANGES                                        :{YELLOW}Ekonomijas izmain'as
 STR_020B_ADVICE_INFORMATION_ON_PLAYER                           :{YELLOW}Padoms / informa'cija par spe'le'ta'ja transporta li'dzekl'iem
 STR_020C_NEW_VEHICLES                                           :{YELLOW}Jaunie transporta li'dzekl'i
@@ -547,20 +616,18 @@
 STR_021B_ACHIEVES_STATUS                                        :{BLACK}{BIGFONT}{COMPANY} sasniegus'i  '{STRING}' statusu!
 STR_021C_OF_ACHIEVES_STATUS                                     :{WHITE}{BIGFONT}{PLAYERNAME} no {COMPANY} sasniegusi '{STRING}' statusu!
 STR_021F                                                        :{BLUE}{COMMA}
-STR_0220_CREATE_SCENARIO                                        :{BLACK}Radi't scena'riju
 STR_0221_OPENTTD                                                :{YELLOW}OpenTTD
 STR_0222_SCENARIO_EDITOR                                        :{YELLOW}Scena'riju redaktors
 STR_0223_LAND_GENERATION                                        :{WHITE}Zemes g'enere's'ana
 STR_0224                                                        :{BLACK}{UPARROW}
 STR_0225                                                        :{BLACK}{DOWNARROW}
-STR_0226_RANDOM_LAND                                            :{BLACK}Nejaus'i g'enere'ta zeme
-STR_0227_RESET_LAND                                             :{BLACK}Atjaunot zemi
 STR_0228_INCREASE_SIZE_OF_LAND_AREA                             :{BLACK}Palielina't zemes apgabalu pazemina's'anai/pazels'anai
 STR_0229_DECREASE_SIZE_OF_LAND_AREA                             :{BLACK}Samazina't zemes apgabalu pazemina's'anai/pazels'anai
 STR_022A_GENERATE_RANDOM_LAND                                   :{BLACK}G'enere't nejaus'u zemi
 STR_022B_RESET_LANDSCAPE                                        :{BLACK}Atjaunot zemes virsu
 STR_022C_RESET_LANDSCAPE                                        :{WHITE}Atjaunot zemes virsu
-STR_022D_ARE_YOU_SURE_YOU_WANT_TO                               :{WHITE}Vai tu paties'a'm gribi atjaunot zemes virsu?
+STR_RESET_LANDSCAPE_TOOLTIP                                     :{BLACK}Novākt visus spēlētājam piederošos īpašumus no kartes
+STR_RESET_LANDSCAPE_CONFIRMATION_TEXT                           :{WHITE}Vai esat drošs, ka vēlaties novākt visus spēlētājam piederošos īpašumus?
 STR_022E_LANDSCAPE_GENERATION                                   :{BLACK}Zemes virsas g'enere's'ana
 STR_022F_TOWN_GENERATION                                        :{BLACK}Pilse'tu g'enere's'ana
 STR_0230_INDUSTRY_GENERATION                                    :{BLACK}Industrijas g'enere's'ana
@@ -671,7 +738,7 @@
 STR_0298_LOAD_SCENARIO                                          :{WHITE}Iela'de't scena'riju
 STR_0299_SAVE_SCENARIO                                          :{WHITE}Saglaba't scena'riju
 STR_029A_PLAY_SCENARIO                                          :{BLACK}Spe'le't scena'riju
-STR_029B_ARE_YOU_SURE_YOU_WANT_TO                               :{YELLOW}Vai ju's ties'a'm ve'laties izbeigt s'o scena'riju?
+STR_QUIT_SCENARIO_QUERY                                         :{YELLOW}Vai esat pārliecināts, ka vēlaties pamest šo scenāriju?
 STR_029C_QUIT_EDITOR                                            :{WHITE}Beigt redaktoru
 STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...atl'auts bu've't tikai pilse'ta's ar iedzi'vota'ju skaitu vismaz 1200
 STR_029E_MOVE_THE_STARTING_DATE                                 :{BLACK}Pa'rvietot starta datumu 1 gadu uz atpakal'u
@@ -698,6 +765,7 @@
 STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION                         :{BLACK}Transporta li'dzekl'u dizaina nosaukumu izve'le
 STR_02C2_SAVE_CUSTOMIZED_VEHICLE                                :{BLACK}Saglaba't specia'los transporta li'dzekl'a dizaina nosaukumus
 
+STR_CHECKMARK                                                   :{CHECKMARK}
 ############ range for menu starts
 STR_02C3_GAME_OPTIONS                                           :Spe'les rez'i'mi
 STR_02C5_DIFFICULTY_SETTINGS                                    :Gru'ti'bas paka'pes
@@ -741,7 +809,9 @@
 STR_02E0_CURRENCY_UNITS                                         :{BLACK}Naudas vieni'bas
 STR_02E1                                                        :{BLACK}{SKIP}{STRING}
 STR_02E2_CURRENCY_UNITS_SELECTION                               :{BLACK}Naudas vieni'bu izve'le
+STR_MEASURING_UNITS                                             :{BLACK}Mērvienības
 STR_02E4                                                        :{BLACK}{SKIP}{SKIP}{STRING}
+STR_MEASURING_UNITS_SELECTION                                   :{BLACK}Mērvienību izvēle
 STR_02E6_ROAD_VEHICLES                                          :{BLACK}Cel'a satiksmes li'dzekl'i
 STR_02E7                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{STRING}
 STR_02E8_SELECT_SIDE_OF_ROAD_FOR                                :{BLACK}Braucama's cel'a puses izve'le
@@ -819,6 +889,8 @@
 STR_TOWNNAME_CZECH                                              :C'ehijas
 STR_TOWNNAME_SWISS                                              :S'veices
 STR_TOWNNAME_DANISH                                             :Da'n'u
+STR_TOWNNAME_TURKISH                                            :Turku
+STR_TOWNNAME_ITALIAN                                            :Itāļu
 ############ end of townname region
 
 STR_CURR_GBP                                                    :Ma'rcin'as (£)
@@ -844,6 +916,8 @@
 STR_CURR_ROL                                                    :Ruma'nijas lejas (ROL)
 STR_CURR_RUR                                                    :Krievijas rubl'i (RUR)
 STR_CURR_SEK                                                    :Zviedru kronas (SEK)
+STR_CURR_YTL                                                    :Turcijas lira (YTL)
+STR_CURR_SKK                                                    :Slovākijas krona (SKK)
 
 STR_CURR_CUSTOM                                                 :Specia'la...
 
@@ -892,6 +966,8 @@
 STR_RES_OTHER                                                   :cits
 STR_NOTHING                                                     :
 
+STR_SMALL_RIGHT_ARROW                                           :{TINYFONT}{RIGHTARROW}
+
 STR_CANT_SHARE_ORDER_LIST                                       :{WHITE}Nevar dali'ties ar uzdevumu sarakstu...
 STR_CANT_COPY_ORDER_LIST                                        :{WHITE}Nevar kope't uzdevumu sarakstu...
 STR_END_OF_SHARED_ORDERS                                        :{SETX 10}- - Dali'to uzdevumu beigas - -
@@ -946,7 +1022,6 @@
 STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Transporte't kravu uz staciju tikai tad ja ir pieprasijums: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGBRIDGES                                  :{LTBLUE}Atl'aut l'oti garu tiltu cels'anu: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GOTODEPOT                                    :{LTBLUE}Atl'aut "iet uz depo" komandu: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Atl'aut materea'lu raz'os'anas industrijas: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Atl'aut vaira'kas li'dzi'gas industrijas vienai pilse'tai: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Viena veida industrijas var tikt celtas tuvu viena no otras: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Vienme'r ra'di't garu datumu statusa josla': {ORANGE}{STRING}
@@ -961,6 +1036,7 @@
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Vienme'r atl'aut mazas lidostas: {ORANGE}{STRING}
 
+STR_CONFIG_PATCHES_WARN_LOST_TRAIN                              :{LTBLUE}Brīdināt, ja vilciens apmaldās: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ORDER_REVIEW                                 :{LTBLUE}Pa'rskati't transporta uzdevumus: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ORDER_REVIEW_OFF                             :Ne'
 STR_CONFIG_PATCHES_ORDER_REVIEW_EXDEPOT                         :Ja', izn'emot transporta li'dzekl'us kas apsta'dina'ti
@@ -973,91 +1049,313 @@
 STR_CONFIG_PATCHES_ERRMSG_DURATION                              :{LTBLUE}Kl'u'das zin'ojuma ilgums: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_POPULATION_IN_LABEL                          :{LTBLUE}Râdît pilsçtas iedzîvotâju skaitu pie pilsçtas nosaukuma: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_INVISIBLE_TREES                              :{LTBLUE}Neredzami koki (ar caurspi'di'ga'm celtne'm): {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_LAND_GENERATOR_ORIGINAL                      :Parasts
+STR_CONFIG_PATCHES_LAND_GENERATOR_TERRA_GENESIS                 :TerraGenesis
 STR_CONFIG_PATCHES_SNOWLINE_HEIGHT                              :{LTBLUE}Sniega li'nijas augstums: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN                         :{LTBLUE}Reljefa raupjums (tikai TerraGenesis): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH             :Ļoti līdzena
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_SMOOTH                  :Līdzena
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_ROUGH                   :Nelīdzena
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_ROUGH              :Ļoti nelīdzena
+STR_CONFIG_PATCHES_TREE_PLACER                                  :{LTBLUE}Koku izvietošanas algoritms: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TREE_PLACER_NONE                             :Nav
+STR_CONFIG_PATCHES_TREE_PLACER_ORIGINAL                         :Parasts
+STR_CONFIG_PATCHES_TREE_PLACER_IMPROVED                         :Uzlabots
+STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE         :Pret pulksteņa radītaja virzienu
+STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_CLOCKWISE                 :Pa pulksteņa radītaja virzienu
+
 STR_CONFIG_PATCHES_STATION_SPREAD                               :{LTBLUE}Maksima'lais staciju izkaisijums: {ORANGE}{STRING} {RED}Uzmani'bu: augsts li'menis pale'lina spe'li
+STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Apkalpots helikopterus heliportos automātiski: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Sasaitē ainavas rīkjoslu ar dzelzceļa/ceļa/ūdens/lidostu rīkjoslu: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Pretējš pārtīšana virziens: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Rādīt mērījumu rīkjoslu, kas tiek izmantoti dažādi celniecības rīki: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Parādīt kompānijas ģildes: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LIVERIES_NONE                                :Nav
+STR_CONFIG_PATCHES_LIVERIES_OWN                                 :Paša uzņēmums
+STR_CONFIG_PATCHES_LIVERIES_ALL                                 :Visi uzņēmumi
 
 
 
+STR_CONFIG_PATCHES_AINEW_ACTIVE                                 :{LTBLUE}Iespējot jauno mākslīgo intelektu (alpha): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER                            :{LTBLUE}Atļaut mākslīgo intelektu daudzlietotāju režīmā (eksperimentāls): {ORANGE}{STRING}
 
+STR_CONFIG_PATCHES_SERVINT_TRAINS                               :{LTBLUE}Noklusētais vilcienu apkalpošanas periods: {ORANGE}{STRING} dienas/%
+STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED                      :{LTBLUE}Noklusētais vilcienu apkalpošanas periods: {ORANGE}atspējots
+STR_CONFIG_PATCHES_SERVINT_ROADVEH                              :{LTBLUE}Noklusētais autotransporta apkalpošanas periods: {ORANGE}{STRING} dienas/%
+STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED                     :{LTBLUE}Noklusētais autotransporta apkalpošanas periods: {ORANGE}atspējots
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT                             :{LTBLUE}Noklusētais lidaparātu apkalpošanas periods: {ORANGE}{STRING} dienas/%
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED                    :{LTBLUE}Noklusētais lidaparātu apkalpošanas periods: {ORANGE}atspējots
+STR_CONFIG_PATCHES_SERVINT_SHIPS                                :{LTBLUE}Noklusētais kuģu apkalpošanas periods: {ORANGE}{STRING} dienas/%
+STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED                       :{LTBLUE}Noklusētais kuģu apkalpošanas periods: {ORANGE}atspējots
 STR_CONFIG_PATCHES_NOSERVICE                                    :{LTBLUE}Aizliedz servisu kad saboja's'ana's izsle'gta: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_WAGONSPEEDLIMITS                             :{LTBLUE}Ieslēgt vagonu ātruma ierobežojumus: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DISABLE_ELRAILS                              :{LTBLUE}Izslēgt eletrificēto dzelzceļu: {ORANGE}{STRING}
 
+STR_CONFIG_PATCHES_COLORED_NEWS_YEAR                            :{LTBLUE}Krāsainās savīs parādās: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STARTING_YEAR                                :{LTBLUE}Sākuma gads: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ENDING_YEAR                                  :{LTBLUE}Nobeidz spe'li: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_ECONOMY                               :{LTBLUE}Ieslēgt lēzenas izmaiņas ekonomikā
 STR_CONFIG_PATCHES_ALLOW_SHARES                                 :{LTBLUE}Atïauj akciju pirkðanu no citâm kompânijâm
+STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY                         :{LTBLUE}Kads velk, izvietot semaforus katras: {ORANGE}{STRING} šūnas
+
+
+STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Galvenās rīkjoslas izvietojums: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Pa kreisi
 STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Centrâ
 STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :Pa labi
+STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}Logu pielipšanas rādiuss: {ORANGE}{STRING} px
+STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}Logu pielipšanas rādiuss: {ORANGE}atspējots
 
+STR_CONFIG_PATCHES_GUI                                          :{BLACK}Saskarne
+STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}Būvniecība
+STR_CONFIG_PATCHES_VEHICLES                                     :{BLACK}Transportlīdzekļi
 STR_CONFIG_PATCHES_STATIONS                                     :{BLACK}Stacijas
+STR_CONFIG_PATCHES_ECONOMY                                      :{BLACK}Ekonomika
+STR_CONFIG_PATCHES_AI                                           :{BLACK}Pretiniekis
 
+STR_CONFIG_PATCHES_DISABLED                                     :atspējots
 STR_CONFIG_PATCHES_INT32                                        :{NUM}
 STR_CONFIG_PATCHES_CURRENCY                                     :{CURRENCY}
 
+STR_CONFIG_PATCHES_QUERY_CAPT                                   :{WHITE}Mainīt iestatījuma vērtību
+STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE                :{WHITE}Daži vai visi apkalpošanas intervāli ir nesavietojami ar izvēlētajiem iestatījumiem! Der 5-90% un 30-800 dienas
+STR_CONFIG_PATCHES_YAPF_SHIPS                                   :{LTBLUE}Izmantot YAPF kuģiem: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_YAPF_ROAD                                    :{LTBLUE}Izmantot YAPF autotransportam: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_YAPF_RAIL                                    :{LTBLUE}Izmantot YAPF vilcieniem: {ORANGE}{STRING}
 
+STR_TEMPERATE_LANDSCAPE                                         :Mērenais klimats
+STR_SUB_ARCTIC_LANDSCAPE                                        :Subarktiskais klimats
+STR_SUB_TROPICAL_LANDSCAPE                                      :Subtropiskais klimats
+STR_TOYLAND_LANDSCAPE                                           :Rotaļlietu zeme
 
+STR_CHEATS                                                      :{WHITE}Blēdības
+STR_CHEATS_TIP                                                  :{BLACK}Izvēlas rūtiņas norāda uz to, vai esat jau izmantojis šo blēdību
+STR_CHEAT_CROSSINGTUNNELS                                       :{LTBLUE}Tuneļi drīkst krutoties: {ORANGE}{STRING}
+STR_CHEAT_BUILD_IN_PAUSE                                        :{LTBLUE}Būvniecības pauzes režīmā: {ORANGE}{STRING}
+STR_CHEAT_NO_JETCRASH                                           :{LTBLUE}Reaktīvās lidmašīnas neavarēs (bieži) mazajās lidostās: {ORANGE} {STRING}
+STR_CHEAT_SWITCH_CLIMATE                                        :{LTBLUE}Klimata maiņa: {ORANGE} {STRING}
+STR_CHEAT_CHANGE_DATE                                           :{LTBLUE}Datuma maiņa: {ORANGE} {DATE_SHORT}
 STR_CHEAT_SETUP_PROD                                            :{LTBLUE}L'auj izmaini't produktu ve'rti'bas: {ORANGE}{STRING}
 
+STR_HEADING_FOR_WAYPOINT                                        :{LTBLUE}Ceļā uz {WAYPOINT}
+STR_HEADING_FOR_WAYPOINT_VEL                                    :{LTBLUE}Ceļā uz {WAYPOINT}, {VELOCITY}
 
 STR_GO_TO_WAYPOINT                                              :Caur {WAYPOINT}
+STR_GO_NON_STOP_TO_WAYPOINT                                     :Brauc caur {WAYPOINT} bez apstāšanās
 
+STR_WAYPOINTNAME_CITY                                           :Kontrolpunkts {TOWN}
+STR_WAYPOINTNAME_CITY_SERIAL                                    :Kontrolpunkts {TOWN} #{COMMA}
+STR_LANDINFO_WAYPOINT                                           :Kontrolpunkts
 
+STR_WAYPOINT                                                    :{WHITE}Kontrolpunkts
+STR_WAYPOINT_GRAPHICS_TIP                                       :{BLACK}Izvēlaties kontrolpunkta veidu
 
 STR_WAYPOINT_VIEWPORT                                           :{WHITE}{WAYPOINT}
 STR_WAYPOINT_VIEWPORT_TINY                                      :{TINYFONT}{WHITE}{WAYPOINT}
 STR_WAYPOINT_RAW                                                :{WAYPOINT}
-
+STR_EDIT_WAYPOINT_NAME                                          :{WHITE}Labot kontrolpunkta nosaukumu
 
+STR_CANT_CHANGE_WAYPOINT_NAME                                   :{WHITE}Nevar pārsaukt kontrolpunktu...
+STR_CONVERT_RAIL_TO_WAYPOINT_TIP                                :{BLACK}Pārvērst sliedes par kontrolpunktu
+STR_CANT_BUILD_TRAIN_WAYPOINT                                   :{WHITE}Nevar šeit uzbūvēt vilcienu kontrolpunktu...
+STR_CANT_REMOVE_TRAIN_WAYPOINT                                  :{WHITE}Nevar šeit noņemt vilcienu kontrolpunktu...
 
+STR_BUILD_AUTORAIL_TIP                                          :{BLACK}Būvē dzelzceļu izmantojot Autosliežu režīmu
 
+STR_NO_TOWN_IN_SCENARIO                                         :{WHITE}...šajā scenārijā nav pilsētu
 
+STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}Vai jūs esat pārliecināts, ka vēlaties izveidot nejauši izvēlētu ainavu?
+STR_MANY_RANDOM_TOWNS                                           :Daudz nejauši izveidotu pilsētu
+STR_RANDOM_TOWNS_TIP                                            :{BLACK}Pāklāt karti ar nejauši izvietotām pilsētām
+STR_MANY_RANDOM_INDUSTRIES                                      :{BLACK}Daudz nejauši izveidotu rūpniecību
+STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}Pāklāt karti ar nejauši izvietotām rūpniecībām
+STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}Nevar izveidot rūpniecības...
+
+STR_LANDSCAPING_TOOLBAR_TIP                                     :{BLACK}Atvērt aiznavas rīkjoslu, lai mainīt zemes līmeni, stādīt kokus utt.
+STR_LANDSCAPING_TOOLBAR                                         :{WHITE}Ainava
 STR_LEVEL_LAND_TOOLTIP                                          :{BLACK}Izlidzinât zemi
 
 
+STR_TREES_RANDOM_TYPE                                           :{BLACK}Nejauši izvēlēta veida koki
+STR_TREES_RANDOM_TYPE_TIP                                       :{BLACK}Nejauši izveitot kokus
 
+STR_CANT_BUILD_CANALS                                           :{WHITE}Nedrīkst šeit būvēt kanālus...
+STR_BUILD_CANALS_TIP                                            :{BLACK}Būvēt kanālus. Nospiediet CTRL, lai izvietotu jūras šūnas (tikai jūras līmenī)
 STR_LANDINFO_CANAL                                              :Kanals
 
+STR_CANT_BUILD_LOCKS                                            :{WHITE}Nevar šeit būvet slūžas
+STR_BUILD_LOCKS_TIP                                             :{BLACK}Būvēt slūžas
+STR_LANDINFO_LOCK                                               :Slūžas
 
 STR_BUOY_IS_IN_USE                                              :{WHITE}...boja jau tiek lietota!
 
-
+STR_LANDINFO_COORDS                                             :{BLACK}Koordinātes: {LTBLUE}{NUM}x{NUM} ({STRING})
 
+STR_CANT_REMOVE_PART_OF_STATION                                 :{WHITE}Nevar novākt daļu stacijas
+STR_CANT_CONVERT_RAIL                                           :{WHITE}Nevar pārveidot sliežu veidu šeit...
+STR_CONVERT_RAIL_TIP                                            :{BLACK}Pārveidot/uzlabot sliežu veidu
 
+STR_DRAG_WHOLE_TRAIN_TO_SELL_TIP                                :{BLACK}Pārvēlciet šeit vilciena lokomotīvi, lai pārdotu visu vilcienu
 
+STR_DRAG_DROP                                                   :{BLACK}Vilkt un nomest
+STR_STATION_DRAG_DROP                                           :{BLACK}Būvēt staciju izmantojot "vilkt un nomest"
+STR_SELECT_STATION_CLASS_TIP                                    :{BLACK}Izvēlaties, kādu stacijas klasi rādīt
+STR_SELECT_STATION_TYPE_TIP                                     :{BLACK}Izvēlaties, kādu stacijas veidu būvēt
 
+STR_FAST_FORWARD                                                :{BLACK}Paātrināta spēle
+STR_MESSAGE_HISTORY                                             :{WHITE}Ziņojumu vēsture
+STR_MESSAGE_HISTORY_TIP                                         :{BLACK}Neseno ziņu saraksts
+STR_MESSAGES_DISABLE_ALL                                        :{BLACK}Atspējot visu
+STR_MESSAGES_ENABLE_ALL                                         :{BLACK}Iespējot visu
+
+STR_CONSTRUCT_COAL_MINE_TIP                                     :{BLACK}Būvēt ogļu raktuvi
+STR_CONSTRUCT_FOREST_TIP                                        :{BLACK}Stādīt kokaudzētavu
+STR_CONSTRUCT_OIL_RIG_TIP                                       :{BLACK}Būvēt naftas atradni
+STR_CONSTRUCT_FARM_TIP                                          :{BLACK}Būvēt fermu
+STR_CONSTRUCT_COPPER_ORE_MINE_TIP                               :{BLACK}Būvēt vara rūdas raktuvi
+STR_CONSTRUCT_OIL_WELLS_TIP                                     :{BLACK}Veikt naftas urbumu
+STR_CONSTRUCT_GOLD_MINE_TIP                                     :{BLACK}Būvēt zelta raktuvi
+STR_CONSTRUCT_DIAMOND_MINE_TIP                                  :{BLACK}Būvēt dimantu raktuvi
+STR_CONSTRUCT_IRON_ORE_MINE_TIP                                 :{BLACK}Būvēt dzelzs rūdas raktuvi
+STR_CONSTRUCT_FRUIT_PLANTATION_TIP                              :{BLACK}Finansēt augļu koku plantāciju
+STR_CONSTRUCT_RUBBER_PLANTATION_TIP                             :{BLACK}Finansēt gumijkoku plantāciju
+STR_CONSTRUCT_WATER_SUPPLY_TIP                                  :{BLACK}Finansēt ūdens ieguvi
+STR_CONSTRUCT_COTTON_CANDY_TIP                                  :{BLACK}Stādīt konfekšpūku mežu
+STR_CONSTRUCT_BATTERY_FARM_TIP                                  :{BLACK}Finansēt bateriju fermu
+STR_CONSTRUCT_COLA_WELLS_TIP                                    :{BLACK}Veikt kolas urbumus
+STR_CONSTRUCT_PLASTIC_FOUNTAINS_TIP                             :{BLACK}Finansēt plastmasas strūklakas
+STR_CONSTRUCT_BUBBLE_GENERATOR_TIP                              :{BLACK}Būvēt burbuļu ģenerātoru
+STR_CONSTRUCT_TOFFEE_QUARRY_TIP                                 :{BLACK}Finansēt Toffee raktuves
+STR_CONSTRUCT_SUGAR_MINE_TIP                                    :{BLACK}Būvēt cukura raktuves
 
 STR_INDUSTRYDIR_CAPTION                                         :{WHITE}Industrîjas
+STR_INDUSTRYDIR_ITEM                                            :{ORANGE}{INDUSTRY}{BLACK} ({CARGO}){YELLOW} ({COMMA}% pārvadāti)
+STR_INDUSTRYDIR_ITEM_TWO                                        :{ORANGE}{INDUSTRY}{BLACK} ({CARGO}/{CARGO}){YELLOW} ({COMMA}%/{COMMA}% pārvadāti)
 STR_INDUSTRYDIR_ITEM_NOPROD                                     :{ORANGE}{INDUSTRY}
 
+STR_INDUSTRY_TOO_CLOSE                                          :{WHITE}...pārāk tuvu citai industrijai
 
+STR_RAIL_REFIT_VEHICLE_TO_CARRY                                 :{BLACK}Pielāgot vilcienu citas kravas pārvadāšanai
+STR_RAIL_REFIT_VEHICLE                                          :{BLACK}Pārbūvēt vilcienu
+STR_RAIL_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Izvēlaties kravas veidu, ko pārvadāt ar vilcienu
+STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED                             :{BLACK}Pārbūvēt vilcienu izceltā kravas veida pārvadāšanai
+STR_RAIL_CAN_T_REFIT_VEHICLE                                    :{WHITE}Nevar pārbūvēt vilcienu...
+STR_CONFIG_PATCHES_SERVINT_ISPERCENT                            :{LTBLUE}Apkalpošanas intervāls procentos: {ORANGE}{STRING}
 STR_CONFIG_GAME_PRODUCTION                                      :{WHITE}Maini't produkciju
 
+TEMP_AI_IN_PROGRESS                                             :{WHITE}Laipni lūgti jaunā MI izstrādē. Ja jums rodas kādas problēmas, tad sataisiet ekrānuzņēmumu un publicējiet to forumā.
+TEMP_AI_ACTIVATED                                               :{WHITE}Brīdinājums: jaunais MI ir joprojām alfa stadijā! Šobrīd darbojas tikai autotransports!
+TEMP_AI_MULTIPLAYER                                             :{WHITE}Brīdinājums: realizācija joprojām ir eksperimentāla (izmantojot jauno MI). Lūdzu, ziņojiet par problēmām uz truelight@openttd.org.
 
 ############ network gui strings
 
+STR_NETWORK_MULTIPLAYER                                         :{WHITE}Vairāk spēlētāju režīms
 
 STR_NETWORK_PLAYER_NAME                                         :{BLACK}Spelçtâja vârds:
+STR_NETWORK_ENTER_NAME_TIP                                      :{BLACK}Šis vārds, pēc kura jūs pazīs citi spēlētāji
+STR_NETWORK_CONNECTION                                          :{BLACK}Savienojums:
+STR_NETWORK_CONNECTION_TIP                                      :{BLACK}Izvēlaties starp spēli caur internetu vai spēli lokālajā tīklā
 
+STR_NETWORK_START_SERVER                                        :{BLACK}Palaist serveri
+STR_NETWORK_START_SERVER_TIP                                    :{BLACK}Palaist jūsu personīgo serveri
 
 STR_NETWORK_GAME_NAME                                           :{BLACK}Vârds
+STR_NETWORK_GAME_NAME_TIP                                       :{BLACK}Spēles nosaukums
+STR_NETWORK_INFO_ICONS_TIP                                      :{BLACK}Valoda, servera versija utt.
+STR_NETWORK_CLICK_GAME_TO_SELECT                                :{BLACK}Noklikšķiniet uz spēles sarakstā, lai to izvēlētos
+
+STR_NETWORK_FIND_SERVER                                         :{BLACK}Atrast serveri
+STR_NETWORK_FIND_SERVER_TIP                                     :{BLACK}Meklēt serveri tīklā
+STR_NETWORK_ADD_SERVER                                          :{BLACK}Pievienot serveri
+STR_NETWORK_ADD_SERVER_TIP                                      :{BLACK}Pievieno serveri sarakstam, kurš vienmēr tiks pārbaudīts, vai tajā nav palaistas spēles.
+STR_NETWORK_ENTER_IP                                            :{BLACK}Ievadiet servera adresi
+
+STR_NETWORK_GENERAL_ONLINE                                      :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA}
+STR_NETWORK_CLIENTS_CAPTION                                     :{BLACK}Klienti
+STR_NETWORK_CLIENTS_CAPTION_TIP                                 :{BLACK}Klienti tiešsaitē / Maksimālais klientu skaits{}Uzņēmumi tiešsaistē / Maksimālais uzņēmumu skaits
+STR_NETWORK_GAME_INFO                                           :{SILVER}SPĒLES INFORMĀCIJA
+STR_ORANGE                                                      :{ORANGE}{STRING}
+STR_NETWORK_CLIENTS                                             :{SILVER}Klienti:  {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
+STR_NETWORK_LANGUAGE                                            :{SILVER}Valoda:  {WHITE}{STRING}
+STR_NETWORK_MAP_SIZE                                            :{SILVER}Kartes izmērs:  {WHITE}{COMMA}x{COMMA}
+STR_NETWORK_SERVER_VERSION                                      :{SILVER}Servera izmērs:  {WHITE}{STRING}
+STR_NETWORK_SERVER_ADDRESS                                      :{SILVER}Servera adrese:  {WHITE}{STRING} : {NUM}
+STR_NETWORK_START_DATE                                          :{SILVER}Sākuma datums:  {WHITE}{DATE_SHORT}
+STR_NETWORK_CURRENT_DATE                                        :{SILVER}Šībrīža datums:  {WHITE}{DATE_SHORT}
+STR_NETWORK_PASSWORD                                            :{SILVER}Aizsargāts ar paroli!
+STR_NETWORK_SERVER_OFFLINE                                      :{SILVER}SERVERIS NAV TIEŠSAISTĒ
+STR_NETWORK_SERVER_FULL                                         :{SILVER}SERVERIS IR PILNS
+STR_NETWORK_VERSION_MISMATCH                                    :{SILVER}VERSIJU NESAKRITĪBA
+STR_NETWORK_GRF_MISMATCH                                        :{SILVER}NEWGRF NESAKRITĪBA
+
+STR_NETWORK_JOIN_GAME                                           :{BLACK}Pievienoties spēlei
 
 
-STR_ORANGE                                                      :{ORANGE}{STRING}
-STR_NETWORK_LANGUAGE                                            :{SILVER}Valoda:  {WHITE}{STRING}
-STR_NETWORK_SERVER_ADDRESS                                      :{SILVER}Servera adrese:  {WHITE}{STRING} : {NUM}
+STR_NETWORK_START_GAME_WINDOW                                   :{WHITE}Sākt jaunu vairākspēlētāju spēli
 
-
-
-
+STR_NETWORK_NEW_GAME_NAME                                       :{BLACK}Spēles nosaukums:
+STR_NETWORK_NEW_GAME_NAME_TIP                                   :{BLACK}Spēles nosaukums, kas tiks attēlots citiem spēlētajiem vairākspēlētāju spēļu izvēlnē
+STR_NETWORK_SET_PASSWORD                                        :{BLACK}Uzstādīt paroli
+STR_NETWORK_PASSWORD_TIP                                        :{BLACK}Aizsargā jūsu spēli ar paroli, ja jūs nevēlaties, lai tā būtu publiski pieejama
+STR_NETWORK_SELECT_MAP                                          :{BLACK}Izvēlaties karti:
+STR_NETWORK_SELECT_MAP_TIP                                      :{BLACK}Kuru karti jūs vēlaties spēlēt?
+STR_NETWORK_NUMBER_OF_CLIENTS                                   :{BLACK}Maks. klientu sk.:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP                               :{BLACK}Izvēlaties maksimālo klientu skaitu. Ne visiem slotiem ir jābūt aizpildītiem
 STR_NETWORK_COMBO1                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
 STR_NETWORK_LAN                                                 :LAN
 STR_NETWORK_INTERNET                                            :Internets
 STR_NETWORK_LAN_INTERNET                                        :LAN / Internets
+STR_NETWORK_INTERNET_ADVERTISE                                  :Internets (reklamēt)
 STR_NETWORK_COMBO2                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_0_PLAYERS                                           :0 spēlētāju
+STR_NETWORK_1_PLAYERS                                           :1 spēlētājs
 STR_NETWORK_2_PLAYERS                                           :2 clienti
+STR_NETWORK_3_PLAYERS                                           :3 spēlētāji
+STR_NETWORK_4_PLAYERS                                           :4 spēlētāji
+STR_NETWORK_5_PLAYERS                                           :5 spēlētāji
+STR_NETWORK_6_PLAYERS                                           :6 spēlētāji
+STR_NETWORK_7_PLAYERS                                           :7 spēlētāji
+STR_NETWORK_8_PLAYERS                                           :8 spēlētāji
+STR_NETWORK_9_PLAYERS                                           :9 spēlētāji
+STR_NETWORK_10_PLAYERS                                          :10 spēlētāji
+STR_NETWORK_NUMBER_OF_COMPANIES                                 :{BLACK}Maks. uzņēmumu sk.:
+STR_NETWORK_NUMBER_OF_COMPANIES_TIP                             :{BLACK}Ierobežo serveri noteiktam uzņēmumu daudzumam
 STR_NETWORK_COMBO3                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_NUMBER_OF_SPECTATORS                                :{BLACK}Maks. novērotāju sk.:
+STR_NETWORK_NUMBER_OF_SPECTATORS_TIP                            :{BLACK}Ierobēžo serveri noteiktam novērotāju skaitam
+STR_NETWORK_COMBO4                                              :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LANGUAGE_SPOKEN                                     :{BLACK}Valodu, kurā runā:
+STR_NETWORK_LANGUAGE_TIP                                        :{BLACK}Citi lietotāji zinās, kurā valodā tiek runāts uz servera
+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}Sakt spçli
+STR_NETWORK_START_GAME_TIP                                      :{BLACK}Sāk jaunu tīkla spēli ar nejaušu karti vai scenāriju
+STR_NETWORK_LOAD_GAME                                           :{BLACK}Ielādēt spēli
+STR_NETWORK_LOAD_GAME_TIP                                       :{BLACK}Atsākt iepriekš saglabātu vairākspēlētāju spēli (esi pārliecināts, ka atsākat kā pareizs spēlētājs)
 
 ############ Leave those lines in this order!!
+STR_NETWORK_LANG_ANY                                            :Jebkurā
 STR_NETWORK_LANG_ENGLISH                                        :Angïu
+STR_NETWORK_LANG_GERMAN                                         :Vācu
+STR_NETWORK_LANG_FRENCH                                         :Franču
+STR_NETWORK_LANG_BRAZILIAN                                      :Brazīļu
+STR_NETWORK_LANG_BULGARIAN                                      :Bulgāru
+STR_NETWORK_LANG_CHINESE                                        :Ķīniešu
+STR_NETWORK_LANG_CZECH                                          :Čehu
+STR_NETWORK_LANG_DANISH                                         :Dāņu
+STR_NETWORK_LANG_DUTCH                                          :Holandiešu
+STR_NETWORK_LANG_ESPERANTO                                      :Esperanto
+STR_NETWORK_LANG_FINNISH                                        :Somu
+STR_NETWORK_LANG_HUNGARIAN                                      :Ungāru
+STR_NETWORK_LANG_ICELANDIC                                      :Islandiešu
+STR_NETWORK_LANG_ITALIAN                                        :Itāliešu
+STR_NETWORK_LANG_JAPANESE                                       :Japāņu
+STR_NETWORK_LANG_KOREAN                                         :Korejēšu
+STR_NETWORK_LANG_LITHUANIAN                                     :Lietuviešu
+STR_NETWORK_LANG_NORWEGIAN                                      :Norvēģu
+STR_NETWORK_LANG_POLISH                                         :Poļu
+STR_NETWORK_LANG_PORTUGUESE                                     :Portugāļu
+STR_NETWORK_LANG_ROMANIAN                                       :Rumāņu
 ############ End of leave-in-this-order
 
 
@@ -1091,6 +1389,11 @@
 STR_CONFIG_PATCHES_MAP_X                                        :{LTBLUE}kartes X-izme'ri: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAP_Y                                        :{LTBLUE}kartes Y-izme'ri: {ORANGE}{STRING}
 
+
+##### PNG-MAP-Loader
+
+
+
 ##id 0x0800
 STR_FEEDER_TINY                                                 :{TINYFONT}{YELLOW}Pa'rved: {CURRENCY}
 STR_FEEDER                                                      :{YELLOW}Pa'rved: {CURRENCY}
@@ -1111,7 +1414,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}Vispirms ja'demole' celtne
 STR_2005                                                        :{WHITE}{TOWN}
 STR_2006_POPULATION                                             :{BLACK}Iedzi'vota'ji: {ORANGE}{COMMA}{BLACK}  Ma'jas: {ORANGE}{COMMA}
@@ -1134,7 +1437,7 @@
 STR_2017_FOUNTAIN                                               :Stru'klaka
 STR_2018_PARK                                                   :Parks
 STR_201E_STADIUM                                                :Stadions
-STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024                                                        :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subsidijas
 STR_202A_NONE                                                   :{ORANGE}Neviens
 STR_2036_COTTAGES                                               :Kotedži
@@ -1151,30 +1454,80 @@
 STR_STATION                                                     :{STATION}
 
 ##id 0x2800
-STR_2806                                                        :{WHITE}{STRING}
+STR_2806                                                        :{WHITE}{SIGN}
 STR_280A_SIGN                                                   :Zîme
 STR_280E_TREES                                                  :Koki
+STR_280F_RAINFOREST                                             :Lietus meži
+STR_2810_CACTUS_PLANTS                                          :Kaktusu plantācijas
 
 ##id 0x3000
+STR_3000_RAIL_STATION_SELECTION                                 :{WHITE}Dzelzceļa stacijas izvēle
+STR_3001_AIRPORT_SELECTION                                      :{WHITE}Lidostas izvēle
+STR_3002_ORIENTATION                                            :{BLACK}Virziens
+STR_3003_NUMBER_OF_TRACKS                                       :{BLACK}Mašīnu skaits
+STR_3004_PLATFORM_LENGTH                                        :{BLACK}Platformas garums
+STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD                          :{WHITE}Pārāk tuvu citai dzelzceļa stacijai
+STR_3007_TOO_MANY_STATIONS_LOADING                              :{WHITE}Pārāk daudz staciju/iekrašanas zonu šajā pilsētā
+STR_3008_TOO_MANY_STATIONS_LOADING                              :{WHITE}Pārāk daudz stacijas/iekraušanas zonas
 STR_3008A_TOO_MANY_BUS_STOPS                                    :{WHITE}Pa'ra'k daudz autobusa pieturu
 STR_3008B_TOO_MANY_TRUCK_STOPS                                  :{WHITE}pa'ra'k daudz kravas auto staciju
+STR_3009_TOO_CLOSE_TO_ANOTHER_STATION                           :{WHITE}Pārāk tuvu citai stacijai/iekraušanas zonai
 STR_300A_0                                                      :{WHITE}{STATION} {STATIONFEATURES}
+STR_300B_MUST_DEMOLISH_RAILROAD                                 :{WHITE}Jānojauc dzelzsceļa stacija vispirms
+STR_300D_TOO_CLOSE_TO_ANOTHER_AIRPORT                           :{WHITE}Pārāk tuvu citai lidostai
+STR_300E_MUST_DEMOLISH_AIRPORT_FIRST                            :{WHITE}Vispirms jānosauc lidosta
 
+STR_3030_RENAME_STATION_LOADING                                 :Pārsaukt staciju/iekraušanas zonu
+STR_3031_CAN_T_RENAME_STATION                                   :{WHITE}Nevar pārsaukt staciju...
 STR_3032_RATINGS                                                :{BLACK}Reitingi
+STR_3033_ACCEPTS                                                :{BLACK}Pieņem
+STR_3034_LOCAL_RATING_OF_TRANSPORT                              :{BLACK}Vietējais transporta pakalpojumu reitings:
 
 ############ range for rating starts
+STR_3035_APPALLING                                              :Drausmīgs
+STR_3036_VERY_POOR                                              :Ļoti vājš
+STR_3037_POOR                                                   :Vājš
+STR_3038_MEDIOCRE                                               :Viduvējs
+STR_3039_GOOD                                                   :Labs
+STR_303A_VERY_GOOD                                              :Ļoti labs
+STR_303B_EXCELLENT                                              :Lielisks
+STR_303C_OUTSTANDING                                            :Perfekts
 ############ range for rating ends
 
 STR_303D                                                        :{WHITE}{STRING}: {YELLOW}{STRING} ({COMMA}%)
+STR_303E_NO_LONGER_ACCEPTS                                      :{WHITE}{STATION} vairs nepieņem {STRING}
+STR_303F_NO_LONGER_ACCEPTS_OR                                   :{WHITE}{STATION} vairs nepieņem {STRING} vai {STRING}
+STR_3040_NOW_ACCEPTS                                            :{WHITE}{STATION} pieņem {STRING}
+STR_3041_NOW_ACCEPTS_AND                                        :{WHITE}{STATION} pieņem {STRING} un {STRING}
+STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Autoostas virziens
+STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Virpirms jānojauc autoosta
+STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} Stacij{P a s u}
 STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
+STR_304A_NONE                                                   :{YELLOW}- Nav -
+STR_304B_SITE_UNSUITABLE                                        :{WHITE}...vieta nav piemērota
+STR_304C_TOO_CLOSE_TO_ANOTHER_DOCK                              :{WHITE}Pārāk tuvu citam dokam
+STR_304D_MUST_DEMOLISH_DOCK_FIRST                               :{WHITE}Vispirms jānojauc doks
+STR_304E_SELECT_RAILROAD_STATION                                :{BLACK}Izvēlaties dzelzsceļa stacijas virzienu
+STR_304F_SELECT_NUMBER_OF_PLATFORMS                             :{BLACK}Izvēlaties platformu skaitu dzelzsceļa stacijai
+STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Izvēlaties autoostas virzienu
+STR_3053_CENTER_MAIN_VIEW_ON_STATION                            :{BLACK}Centrēt galveno skatījumu uz stacijas atrašanās vietu
+STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}Parādīt stacijas reitingu
+STR_3055_CHANGE_NAME_OF_STATION                                 :{BLACK}Mainīt stacijas nosaukumu
+STR_3056_SHOW_LIST_OF_ACCEPTED_CARGO                            :{BLACK}Rādīt pieņemamās kravas sarakstu
+STR_3057_STATION_NAMES_CLICK_ON                                 :{BLACK}Staciju nosaukumi - uzklišķiniet uz nosaukuma, lai centrētu galveno skatījumu uz staciju
+STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT                            :{BLACK}Izvēlaties lidostas izmēru/veidu
 STR_305C_0                                                      :{STATION} {STATIONFEATURES}
-STR_STATION_SIGN_TINY                                           :{TINYFONT}{STATION} {STATIONFEATURES}
+STR_STATION_SIGN_TINY                                           :{TINYFONT}{STATION}
+STR_305E_RAILROAD_STATION                                       :Dzelzsceļa stacija
+STR_305F_AIRCRAFT_HANGAR                                        :Lidaparātu angārs
 STR_3060_AIRPORT                                                :Lidosta
 STR_3062_BUS_STATION                                            :Autoosta
 STR_3063_SHIP_DOCK                                              :Osta
 STR_3068_DOCK                                                   :{WHITE}Osta
 STR_306D_NONUNIFORM_STATIONS_DISALLOWED                         :{WHITE}...neregula'ras stacijas nav atl'autas
 
+STR_UNDEFINED                                                   :(nedefinēta rinda)
+
 ##id 0x3800
 STR_3804_WATER                                                  :Ûdens
 
@@ -1186,12 +1539,41 @@
 STR_4804_SAWMILL                                                :Gateris
 STR_4805_FOREST                                                 :Mežs
 STR_480B_FARM                                                   :Ferma
+STR_480D_OIL_WELLS                                              :Naftas urbumi
+STR_480E_BANK                                                   :Banka
+STR_480F_FOOD_PROCESSING_PLANT                                  :Ēdiena apstrādes fabrika
+STR_4810_PAPER_MILL                                             :Papirfabrika
+STR_4811_GOLD_MINE                                              :Zelta raktuves
 STR_4812_BANK                                                   :Banka
+STR_4813_DIAMOND_MINE                                           :Dimantu raktuves
+STR_4814_IRON_ORE_MINE                                          :Dzelzs rūdas raktuves
+STR_4815_FRUIT_PLANTATION                                       :Augļu plantācija
+STR_4816_RUBBER_PLANTATION                                      :Gumijkoka plantācija
+STR_4817_WATER_SUPPLY                                           :Ūdens ieguve
+STR_4818_WATER_TOWER                                            :Ūdens tornis
 STR_4819_FACTORY                                                :Rûpnîca
+STR_481A_FARM                                                   :Ferma
+STR_481B_LUMBER_MILL                                            :Kokzāģētava
+STR_481D_CANDY_FACTORY                                          :Saldumu fabrika
+STR_481F_COLA_WELLS                                             :Kolas urbumi
+STR_4820_TOY_SHOP                                               :Rotaļlietu veikals
+STR_4821_TOY_FACTORY                                            :Rotaļlietu fabrika
+STR_4822_PLASTIC_FOUNTAINS                                      :Plastmasas strūklakas
+STR_4824_BUBBLE_GENERATOR                                       :Burbuļu ģenerātors
+STR_4826_SUGAR_MINE                                             :Cukura raktuve
 
 ############ range for requires starts
+STR_4827_REQUIRES                                               :{BLACK}Nepieciešams: {YELLOW}{STRING}
+STR_4828_REQUIRES                                               :{BLACK}Nepieciešams: {YELLOW}{STRING}, {STRING}
+STR_4829_REQUIRES                                               :{BLACK}Nepieciešams: {YELLOW}{STRING}, {STRING}, {STRING}
 ############ range for requires ends
 
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}Krava, kas jāapstrādā:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
+############ range for produces ends
+
+STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Produkcija iepriekšēja mēnesī:
 
 ##id 0x5000
 STR_5000_TRAIN_IN_TUNNEL                                        :{WHITE}Vilciens tunelî
@@ -1209,18 +1591,45 @@
 STR_SV_TRAIN_NAME                                               :Vilciens {COMMA}
 
 STR_SV_STNAME                                                   :{STRING}
+STR_SV_STNAME_AIRPORT                                           :{STRING} Lidosta
+STR_SV_STNAME_MINES                                             :{STRING} Raktuves
+STR_SV_STNAME_DOCKS                                             :{STRING} Doki
+STR_SV_STNAME_BUOY_1                                            :{STRING} Boja 1
+STR_SV_STNAME_BUOY_2                                            :{STRING} Boja 2
+STR_SV_STNAME_BUOY_3                                            :{STRING} Boja 3
+STR_SV_STNAME_BUOY_4                                            :{STRING} Boja 4
+STR_SV_STNAME_BUOY_5                                            :{STRING} Boja 5
+STR_SV_STNAME_BUOY_6                                            :{STRING} Boja 6
+STR_SV_STNAME_BUOY_7                                            :{STRING} Boja 7
+STR_SV_STNAME_BUOY_8                                            :{STRING} Boja 8
+STR_SV_STNAME_BUOY_9                                            :{STRING} Boja 9
 STR_SV_STNAME_FOREST                                            :{STRING} Mežs
+STR_SV_STNAME_FALLBACK                                          :{STRING} Stacija #{NUM}
 
 ############ end of savegame specific region!
 
 ##id 0x6800
+STR_6800_DIFFICULTY_LEVEL                                       :{WHITE}Grūtības līmenis
 STR_OPTIONS_SAVE_CHANGES                                        :{BLACK}Saglabât
 
 ############ range for difficulty levels starts
 STR_6801_EASY                                                   :{BLACK}Viegls
+STR_6802_MEDIUM                                                 :{BLACK}Vidējs
+STR_6803_HARD                                                   :{BLACK}Grūts
+STR_6804_CUSTOM                                                 :{BLACK}Pielāgots
 ############ range for difficulty levels ends
 
 ############ range for difficulty settings starts
+STR_6805_MAXIMUM_NO_COMPETITORS                                 :{LTBLUE}Maksimāls pretinieku daudzums: {ORANGE}{COMMA}
+STR_6806_COMPETITOR_START_TIME                                  :{LTBLUE}Pretinieku sākuma laiks: {ORANGE}{STRING}
+STR_6807_NO_OF_TOWNS                                            :{LTBLUE}Pilsētu skaits: {ORANGE}{STRING}
+STR_6808_NO_OF_INDUSTRIES                                       :{LTBLUE}Industriju skaits: {ORANGE}{STRING}
+STR_6809_MAXIMUM_INITIAL_LOAN_000                               :{LTBLUE}Maksimāls sākotnējais kredīts: {ORANGE}{CURRENCY}
+STR_680A_INITIAL_INTEREST_RATE                                  :{LTBLUE}Sākotnējā kredīta likme: {ORANGE}{COMMA}%
+STR_680B_VEHICLE_RUNNING_COSTS                                  :{LTBLUE}Transportlīdzekļu lietošanas izdevumi: {ORANGE}{STRING}
+STR_680C_CONSTRUCTION_SPEED_OF_COMPETITOR                       :{LTBLUE}Pretinieku būvniecības ātrums: {ORANGE}{STRING}
+STR_680D_INTELLIGENCE_OF_COMPETITORS                            :{LTBLUE}Pretinieku inteliģence: {ORANGE}{STRING}
+STR_680E_VEHICLE_BREAKDOWNS                                     :{LTBLUE}Transportlīdzekļu lūšana: {ORANGE}{STRING}
 ############ range for difficulty settings ends
 
 STR_6819                                                        :{BLACK}{SMALLLEFTARROW}
@@ -1234,32 +1643,44 @@
 
 ##id 0x7000
 STR_7000                                                        :
-STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
 STR_7004_NEW_FACE                                               :{BLACK}Jauna Seja
 STR_7005_COLOR_SCHEME                                           :{BLACK}Krasas shçma
 STR_7006_COLOR_SCHEME                                           :{GOLD}Krasas shçma:
 STR_7007_NEW_COLOR_SCHEME                                       :{WHITE}Jaunâ Krasas shçma
 STR_7010                                                        :{WHITE}{NUM}
+STR_7014_ROAD_VEH_RUNNING_COSTS                                 :{GOLD}Ceļa transp. lietošanas izmaksas
+STR_7015_AIRCRAFT_RUNNING_COSTS                                 :{GOLD}Lidaparātu lietošanas izmaksas
+STR_7016_SHIP_RUNNING_COSTS                                     :{GOLD}Kuģu lietošanas izmaksas
+STR_7017_PROPERTY_MAINTENANCE                                   :{GOLD}Īpašumu apkalpošana
+STR_7018_TRAIN_INCOME                                           :{GOLD}Vilcienu ienākumi
+STR_7019_ROAD_VEHICLES_INCOME                                   :{GOLD}Ceļu transportlīdzekļu ienākumi
+STR_701A_AIRCRAFT_INCOME                                        :{GOLD}Lidaparātu ienākumi
+STR_701B_SHIP_INCOME                                            :{GOLD}Kuģu ienākumi
+STR_701C_LOAN_INTEREST                                          :{GOLD}Kredīta likme
 STR_701D_OTHER                                                  :{GOLD}Citi
-STR_701E                                                        :{BLACK}-{CURRENCY64}
-STR_701F                                                        :{BLACK}+{CURRENCY64}
-STR_7021                                                        :{COMPANY}{PLAYERNAME}
-STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
+STR_701E                                                        :{BLACK}-{CURRENCY}
+STR_701F                                                        :{BLACK}+{CURRENCY}
+STR_7020_TOTAL                                                  :{WHITE}Kopā:
+STR_7021                                                        :{COMPANY}{COMPANYNUM}
+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
 STR_7045_FEMALE                                                 :{BLACK}Sieviešu
-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_705C_BANKRUPT                                               :{BLACK}{BIGFONT}Bankrots!
 STR_7065                                                        :{BLACK}{TINYFONT}{STRING}
 STR_COMPANY_PASSWORD                                            :{BLACK}Parole
 STR_7080_PROTECTED                                              :{WHITE}S'i' kompa'nija ir pa'ra'k jauna lai tirgotu akcijas...
 
+
+
 ##id 0x8000
 STR_8000_KIRBY_PAUL_TANK_STEAM                                  :Kirby Paul Tank (Tvaika)
 STR_8001_MJS_250_DIESEL                                         :MJS 250 (Dizelis)
@@ -1358,8 +1779,8 @@
 STR_8104_AIRCRAFT                                               :lidmaðîna
 
 ##id 0x8800
-STR_8804                                                        :{SETX 10}{COMMA}: {STRING}
-STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING}
+STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
+STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8807_GO_TO_TRANSFER                                         :Uz {STATION} (Pa'rvest un pan'emt kravu)
 STR_8808_GO_TO_UNLOAD                                           :Uz {STATION} (Nokraut)
 STR_8809_GO_TO_TRANSFER_UNLOAD                                  :Uz {STATION} (Pa'rvest un atsta't tuks'u)
@@ -1375,8 +1796,11 @@
 
 
 
+
 STR_8812_EMPTY                                                  :{LTBLUE}Tukšs
 STR_8816                                                        :{BLACK}-
+
+
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
 STR_SERVICE                                                     :{BLACK}Serviss
 STR_882E                                                        :{WHITE}{VEHICLE}
@@ -1389,6 +1813,8 @@
 STR_886F_TRANSFER                                               :{BLACK}Tranzi'ts
 
 
+
+
 ##id 0x9000
 STR_9002                                                        :{WHITE}{VEHICLE}
 STR_9012_CAPACITY                                               :{BLACK}Capacitâte: {LTBLUE}{CARGO}
@@ -1396,12 +1822,14 @@
 
 STR_9034_RENAME                                                 :{BLACK}Pârsaukt
 
+
 ##id 0x9800
 STR_9805_SHIPS                                                  :{WHITE}{COMPANY} - {COMMA} Kuìi
 STR_980F                                                        :{WHITE}{VEHICLE}
 STR_9820_BUILD_NEW_SHIP                                         :{BLACK}Uzbûvet jauno kuìi
 
 STR_9836_RENAME                                                 :{BLACK}Pârsaukt
+SERVICE_AT_SHIP_DEPOT                                           :Apkalpošana {TOWN} kuģubūvētavā
 
 ##id 0xA000
 STR_A00A                                                        :{WHITE}{VEHICLE}
@@ -1410,7 +1838,8 @@
 STR_A036                                                        :{TINYFONT}{BLACK}{STATION}
 STR_A037_RENAME                                                 :{BLACK}Pârsaukt
 STR_GO_TO_AIRPORT_HANGAR                                        :Uz {STATION} Angâru
-SERVICE_AT_AIRPORT_HANGAR                                       :Serviss  {STATION} Angarâ
+SERVICE_AT_AIRPORT_HANGAR                                       :Apkalpošana {STATION} angārā
+
 
 ##id 0xB000
 
@@ -1428,6 +1857,11 @@
 
 STR_NEWGRF_GRF_ID                                               :{BLACK}GRF ID: {SILVER}{STRING}
 
+
+
+
+
+
 STR_CURRENCY_SUFFIX                                             :{LTBLUE}Suffikss:
 STR_CURRENCY_SWITCH_TO_EURO                                     :{LTBLUE}Pariet uz Eiro: {ORANGE}{NUM}
 STR_CURRENCY_SWITCH_TO_EURO_NEVER                               :{LTBLUE}Pariet uz Eiro: {ORANGE}nekad
@@ -1440,10 +1874,16 @@
 STR_SCHEDULED_SHIPS                                             :{WHITE}{STATION} - {COMMA} Kuìi
 
 
-STR_REPLACE_VEHICLES                                            :{BLACK}Nomaini transporta lîdzekïus
-STR_REPLACE_VEHICLES_WHITE                                      :{WHITE}Nomaini transporta lîdzekïus
-STR_REPLACE_VEHICLES_START                                      :{BLACK}Sâc nomainît transporta lîdzekïus
-STR_REPLACE_VEHICLES_STOP                                       :{BLACK}Pârtrauc nomainît transporta lîdzekïus
+
+### depot strings
+
+
+
+
+
+STR_REPLACE_VEHICLES_WHITE                                      :{WHITE}Nomainīt {STRING}
+STR_REPLACE_VEHICLES_START                                      :{BLACK}Sākt transportlīdzkļu nomaiņu
+STR_REPLACE_VEHICLES_STOP                                       :{BLACK}Pārtraukt transportlīdzekļu nomaiņu
 STR_NOT_REPLACING                                               :{BLACK}Netiks nomainîts
 STR_NOT_REPLACING_VEHICLE_SELECTED                              :{BLACK}Neviens transporta lîdzeklis nebija izvçlçts
 STR_REPLACE_HELP_LEFT_ARRAY                                     :{BLACK}Izvçlies lokomatîves tipu kuru tu gribi nomainît
@@ -1454,9 +1894,14 @@
 STR_REPLACE_HELP_REPLACE_INFO_TAB                               :{BLACK}Parâda kura lokomatîve no pa kreisi atzîmçtajâm tiek nomainîta, ja vien kâda ir
 STR_REPLACE_HELP                                                :{BLACK}ðis atïauj nomainît vienu lokomatîves tipu pret citu kad vilcieni ienâk depo
 
+
+
+
+
 STR_SHORT_DATE                                                  :{WHITE}{DATE_TINY}
 STR_SIGN_LIST_CAPTION                                           :{WHITE}Zi'mju saraksts- {COMMA} Zi'mes
 
+
 ############ Lists rail types
 
 STR_RAIL_VEHICLES                                               :Slieþu transporta lîdzekïi
@@ -1478,3 +1923,33 @@
 STR_PURCHASE_INFO_COST_SPEED                                    :{BLACK}Cena: {GOLD}{CURRENCY}{BLACK} A'trums: {GOLD}{VELOCITY}
 STR_PURCHASE_INFO_AIRCRAFT_CAPACITY                             :{BLACK}Ietilpi'ba: {GOLD}{COMMA} pasaz'ieru, {COMMA} pasta somas
 STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT                          :{BLACK}Motor-vagoni: {GOLD}+{POWER}zs{BLACK} Sva'rs: {GOLD}+{WEIGHT_S}t
+
+########### String for New Landscape Generator
+
+
+
+########### String for new airports
+
+
+############ Tooltip measurment
+
+
+############ Date formatting
+
+########
+
+
+
+
+##### Mass Order
+
+
+
+
+
+
+
+#### Improved sign GUI
+
+########
+
--- a/src/macros.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/macros.h	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/main_gui.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -30,6 +30,8 @@
 #include "waypoint.h"
 #include "variables.h"
 #include "train.h"
+#include "roadveh.h"
+#include "bridge_map.h"
 #include "unmovable_map.h"
 #include "string.h"
 #include "screenshot.h"
@@ -58,15 +60,29 @@
 extern bool GenerateTowns();
 
 
+void CcGiveMoney(bool success, TileIndex tile, uint32 p1, uint32 p2)
+{
+#ifdef ENABLE_NETWORK
+	if (!success) return;
+
+	char msg[20];
+	/* Inform the player of this action */
+	snprintf(msg, sizeof(msg), "%d", p1);
+
+	if (!_network_server) {
+		SEND_COMMAND(PACKET_CLIENT_CHAT)(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, p2, msg);
+	} else {
+		NetworkServer_HandleChat(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, p2, msg, NETWORK_SERVER_INDEX);
+	}
+#endif /* ENABLE_NETWORK */
+}
+
 void HandleOnEditText(const char *str)
 {
 	int id = _rename_id;
 	_cmd_text = str;
 
 	switch (_rename_what) {
-	case 0: // Rename a s sign, if string is empty, delete sign
-		DoCommandP(0, id, 0, NULL, CMD_RENAME_SIGN | CMD_MSG(STR_280C_CAN_T_CHANGE_SIGN_NAME));
-		break;
 	case 1: // Rename a waypoint
 		if (*str == '\0') return;
 		DoCommandP(0, id, 0, NULL, CMD_RENAME_WAYPOINT | CMD_MSG(STR_CANT_CHANGE_WAYPOINT_NAME));
@@ -74,22 +90,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);
-		char msg[20];
+		Money money = min(p->player_money - p->current_loan, atoi(str) / _currency->rate);
 
-		money = clamp(money, 0, 20000000); // Clamp between 20 million and 0
+		uint32 money_c = clamp(ClampToI32(money), 0, 20000000); // Clamp between 20 million and 0
 
 		/* Give 'id' the money, and substract it from ourself */
-		if (!DoCommandP(0, money, id, NULL, CMD_GIVE_MONEY | CMD_MSG(STR_INSUFFICIENT_FUNDS))) break;
-
-		/* Inform the player of this action */
-		snprintf(msg, sizeof(msg), "%d", money);
-
-		if (!_network_server) {
-			SEND_COMMAND(PACKET_CLIENT_CHAT)(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, id, msg);
-		} else {
-			NetworkServer_HandleChat(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, id, msg, NETWORK_SERVER_INDEX);
-		}
+		DoCommandP(0, money_c, id, CcGiveMoney, CMD_GIVE_MONEY | CMD_MSG(STR_INSUFFICIENT_FUNDS));
 	} break;
 #endif /* ENABLE_NETWORK */
 		default: NOT_REACHED();
@@ -171,15 +177,16 @@
 		case 1: ShowGameDifficulty();   return;
 		case 2: ShowPatchesSelection(); return;
 		case 3: ShowNewGRFSettings(!_networking, true, true, &_grfconfig);   return;
+		case 4: ShowTransparencyToolbar(); break;
 
-		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  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();
 }
@@ -210,7 +217,6 @@
 		case 0: ShowSmallMap();            break;
 		case 1: ShowExtraViewPortWindow(); break;
 		case 2: ShowSignList();            break;
-		case 3: ShowTransparencyToolbar(); break;
 	}
 }
 
@@ -225,8 +231,7 @@
 		case 0: ShowSmallMap();            break;
 		case 1: ShowExtraViewPortWindow(); break;
 		case 2: ShowSignList();            break;
-		case 3: ShowTransparencyToolbar(); break;
-		case 4: ShowTownDirectory();       break;
+		case 3: ShowTownDirectory();       break;
 	}
 }
 
@@ -334,13 +339,6 @@
 }
 #endif /* ENABLE_NETWORK */
 
-void ShowRenameSignWindow(const Sign *si)
-{
-	_rename_id = si->index;
-	_rename_what = 0;
-	ShowQueryString(si->str, STR_280B_EDIT_SIGN_TEXT, 30, 180, NULL, CS_ALPHANUMERAL);
-}
-
 void ShowRenameWaypointWindow(const Waypoint *wp)
 {
 	int id = wp->index;
@@ -596,9 +594,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;
@@ -783,7 +780,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)
@@ -844,7 +841,7 @@
 	int dis = -1;
 
 	FOR_ALL_VEHICLES(v) {
-		if (v->type == VEH_ROAD) CLRBIT(dis, v->owner);
+		if (v->type == VEH_ROAD && IsRoadVehFront(v)) CLRBIT(dis, v->owner);
 	}
 	PopupMainPlayerToolbMenu(w, 332, 14, dis);
 }
@@ -980,16 +977,16 @@
 {
 	uint16 x = 0;
 
-	w = PopupMainToolbMenu(w, 2, STR_02C3_GAME_OPTIONS, 13, 0);
+	w = PopupMainToolbMenu(w, 2, STR_02C3_GAME_OPTIONS, 14, 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);
+	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;
 }
 
@@ -1028,7 +1025,7 @@
 static void ToolbarScenMapTownDir(Window *w)
 {
 	/* Scenario editor button, *hack*hack* use different button to activate */
-	PopupMainToolbMenu(w, 8 | (17 << 8), STR_02DE_MAP_OF_WORLD, 5, 0);
+	PopupMainToolbMenu(w, 8 | (17 << 8), STR_02DE_MAP_OF_WORLD, 4, 0);
 }
 
 static void ToolbarScenZoomIn(Window *w)
@@ -1141,7 +1138,7 @@
 
 static void PlaceProc_LightHouse(TileIndex tile)
 {
-	if (!IsTileType(tile, MP_CLEAR) || IsSteepSlope(GetTileSlope(tile, NULL))) {
+	if (!IsTileType(tile, MP_CLEAR) || IsSteepSlope(GetTileSlope(tile, NULL)) || IsBridgeAbove(tile)) {
 		return;
 	}
 
@@ -1152,7 +1149,7 @@
 
 static void PlaceProc_Transmitter(TileIndex tile)
 {
-	if (!IsTileType(tile, MP_CLEAR) || IsSteepSlope(GetTileSlope(tile, NULL))) {
+	if (!IsTileType(tile, MP_CLEAR) || IsSteepSlope(GetTileSlope(tile, NULL)) || IsBridgeAbove(tile)) {
 		return;
 	}
 
@@ -1543,247 +1540,11 @@
 	AllocateWindowDescFront(&_scen_edit_town_gen_desc, 0);
 }
 
-
-static const Widget _scenedit_industry_normal_widgets[] = {
-{   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                     STR_018B_CLOSE_WINDOW},
-{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   169,     0,    13, STR_023F_INDUSTRY_GENERATION, STR_NULL},
-{      WWT_PANEL,   RESIZE_NONE,     7,     0,   169,    14,   224, 0x0,                          STR_NULL},
-
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    16,    27, STR_MANY_RANDOM_INDUSTRIES,   STR_RANDOM_INDUSTRIES_TIP},
-
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    42,    53, STR_0240_COAL_MINE,           STR_0262_CONSTRUCT_COAL_MINE},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    55,    66, STR_0241_POWER_STATION,       STR_0263_CONSTRUCT_POWER_STATION},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    68,    79, STR_0242_SAWMILL,             STR_0264_CONSTRUCT_SAWMILL},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    81,    92, STR_0243_FOREST,              STR_0265_PLANT_FOREST},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    94,   105, STR_0244_OIL_REFINERY,        STR_0266_CONSTRUCT_OIL_REFINERY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   107,   118, STR_0245_OIL_RIG,             STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   120,   131, STR_0246_FACTORY,             STR_0268_CONSTRUCT_FACTORY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   133,   144, STR_0247_STEEL_MILL,          STR_0269_CONSTRUCT_STEEL_MILL},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   146,   157, STR_0248_FARM,                STR_026A_CONSTRUCT_FARM},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   159,   170, STR_0249_IRON_ORE_MINE,       STR_026B_CONSTRUCT_IRON_ORE_MINE},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   172,   183, STR_024A_OIL_WELLS,           STR_026C_CONSTRUCT_OIL_WELLS},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   185,   196, STR_024B_BANK,                STR_026D_CONSTRUCT_BANK_CAN_ONLY},
-{   WIDGETS_END},
-};
-
-
-static const Widget _scenedit_industry_hilly_widgets[] = {
-{   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                       STR_018B_CLOSE_WINDOW},
-{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   169,     0,    13, STR_023F_INDUSTRY_GENERATION,   STR_NULL},
-{      WWT_PANEL,   RESIZE_NONE,     7,     0,   169,    14,   224, 0x0,                            STR_NULL},
-
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    16,    27, STR_MANY_RANDOM_INDUSTRIES,     STR_RANDOM_INDUSTRIES_TIP},
-
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    42,    53, STR_0240_COAL_MINE,             STR_0262_CONSTRUCT_COAL_MINE},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    55,    66, STR_0241_POWER_STATION,         STR_0263_CONSTRUCT_POWER_STATION},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    68,    79, STR_024C_PAPER_MILL,            STR_026E_CONSTRUCT_PAPER_MILL},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    81,    92, STR_0243_FOREST,                STR_0265_PLANT_FOREST},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    94,   105, STR_0244_OIL_REFINERY,          STR_0266_CONSTRUCT_OIL_REFINERY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   107,   118, STR_024D_FOOD_PROCESSING_PLANT, STR_026F_CONSTRUCT_FOOD_PROCESSING},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   120,   131, STR_024E_PRINTING_WORKS,        STR_0270_CONSTRUCT_PRINTING_WORKS},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   133,   144, STR_024F_GOLD_MINE,             STR_0271_CONSTRUCT_GOLD_MINE},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   146,   157, STR_0248_FARM,                  STR_026A_CONSTRUCT_FARM},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   159,   170, STR_024B_BANK,                  STR_0272_CONSTRUCT_BANK_CAN_ONLY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   172,   183, STR_024A_OIL_WELLS,             STR_026C_CONSTRUCT_OIL_WELLS},
-{   WIDGETS_END},
-};
-
-static const Widget _scenedit_industry_desert_widgets[] = {
-{   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                        STR_018B_CLOSE_WINDOW},
-{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   169,     0,    13, STR_023F_INDUSTRY_GENERATION,    STR_NULL},
-{      WWT_PANEL,   RESIZE_NONE,     7,     0,   169,    14,   224, 0x0,                             STR_NULL},
-
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    16,    27, STR_MANY_RANDOM_INDUSTRIES,      STR_RANDOM_INDUSTRIES_TIP},
-
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    42,    53, STR_0250_LUMBER_MILL,            STR_0273_CONSTRUCT_LUMBER_MILL_TO},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    55,    66, STR_0251_FRUIT_PLANTATION,       STR_0274_PLANT_FRUIT_PLANTATION},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    68,    79, STR_0252_RUBBER_PLANTATION,      STR_0275_PLANT_RUBBER_PLANTATION},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    81,    92, STR_0244_OIL_REFINERY,           STR_0266_CONSTRUCT_OIL_REFINERY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    94,   105, STR_024D_FOOD_PROCESSING_PLANT,  STR_026F_CONSTRUCT_FOOD_PROCESSING},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   107,   118, STR_0246_FACTORY,                STR_0268_CONSTRUCT_FACTORY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   120,   131, STR_0253_WATER_SUPPLY,           STR_0276_CONSTRUCT_WATER_SUPPLY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   133,   144, STR_0248_FARM,                   STR_026A_CONSTRUCT_FARM},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   146,   157, STR_0254_WATER_TOWER,            STR_0277_CONSTRUCT_WATER_TOWER_CAN},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   159,   170, STR_024A_OIL_WELLS,              STR_026C_CONSTRUCT_OIL_WELLS},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   172,   183, STR_024B_BANK,                   STR_0272_CONSTRUCT_BANK_CAN_ONLY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   185,   196, STR_0255_DIAMOND_MINE,           STR_0278_CONSTRUCT_DIAMOND_MINE},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   198,   209, STR_0256_COPPER_ORE_MINE,        STR_0279_CONSTRUCT_COPPER_ORE_MINE},
-{   WIDGETS_END},
-};
-
-static const Widget _scenedit_industry_candy_widgets[] = {
-{   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                     STR_018B_CLOSE_WINDOW},
-{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   169,     0,    13, STR_023F_INDUSTRY_GENERATION, STR_NULL},
-{      WWT_PANEL,   RESIZE_NONE,     7,     0,   169,    14,   224, 0x0,                          STR_NULL},
-
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    16,    27, STR_MANY_RANDOM_INDUSTRIES,   STR_RANDOM_INDUSTRIES_TIP},
-
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    42,    53, STR_0257_COTTON_CANDY_FOREST, STR_027A_PLANT_COTTON_CANDY_FOREST},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    55,    66, STR_0258_CANDY_FACTORY,       STR_027B_CONSTRUCT_CANDY_FACTORY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    68,    79, STR_0259_BATTERY_FARM,        STR_027C_CONSTRUCT_BATTERY_FARM},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    81,    92, STR_025A_COLA_WELLS,          STR_027D_CONSTRUCT_COLA_WELLS},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,    94,   105, STR_025B_TOY_SHOP,            STR_027E_CONSTRUCT_TOY_SHOP},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   107,   118, STR_025C_TOY_FACTORY,         STR_027F_CONSTRUCT_TOY_FACTORY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   120,   131, STR_025D_PLASTIC_FOUNTAINS,   STR_0280_CONSTRUCT_PLASTIC_FOUNTAINS},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   133,   144, STR_025E_FIZZY_DRINK_FACTORY, STR_0281_CONSTRUCT_FIZZY_DRINK_FACTORY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   146,   157, STR_025F_BUBBLE_GENERATOR,    STR_0282_CONSTRUCT_BUBBLE_GENERATOR},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   159,   170, STR_0260_TOFFEE_QUARRY,       STR_0283_CONSTRUCT_TOFFEE_QUARRY},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   172,   183, STR_0261_SUGAR_MINE,          STR_0284_CONSTRUCT_SUGAR_MINE},
-{   WIDGETS_END},
-};
-
-
-static bool AnyTownExists()
-{
-	const Town *t;
-
-	FOR_ALL_TOWNS(t) return true;
-
-	return false;
-}
-
-extern Industry *CreateNewIndustry(TileIndex tile, IndustryType type);
-
-/**
- * Search callback function for TryBuildIndustry
- * @param tile to test
- * @param data that is passed by the caller.  In this case, the type of industry been tested
- * @return the success (or not) of the operation
- */
-static bool SearchTileForIndustry(TileIndex tile, uint32 data)
-{
-	return CreateNewIndustry(tile, data) != NULL;
-}
-
-/**
- * Perform a 9*9 tiles circular search around a tile
- * in order to find a suitable zone to create the desired industry
- * @param tile to start search for
- * @param type of the desired industry
- * @return the success (or not) of the operation
- */
-static bool TryBuildIndustry(TileIndex tile, int type)
-{
-	return CircularTileSearch(tile, 9, SearchTileForIndustry, type);
-}
-
-
-static const byte _industry_type_list[4][16] = {
-	{ 0,  1,  2,  3,  4,  5,  6,  8,  9, 18, 11, 12},
-	{ 0,  1, 14,  3,  4, 13,  7, 15,  9, 16, 11, 12},
-	{25, 19, 20,  4, 13, 23, 21, 24, 22, 11, 16, 17, 10},
-	{26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36},
-};
-
-static int _industry_type_to_place;
-bool _ignore_restrictions;
-
-static void ScenEditIndustryWndProc(Window *w, WindowEvent *e)
-{
-	int button;
-
-	switch (e->event) {
-	case WE_PAINT:
-		DrawWindowWidgets(w);
-		break;
-
-	case WE_CLICK:
-		if (e->we.click.widget == 3) {
-			HandleButtonClick(w, 3);
-
-			if (!AnyTownExists()) {
-				ShowErrorMessage(STR_0286_MUST_BUILD_TOWN_FIRST, STR_CAN_T_GENERATE_INDUSTRIES, 0, 0);
-				return;
-			}
-
-			_generating_world = true;
-			GenerateIndustries();
-			_generating_world = false;
-		}
-
-		if ((button=e->we.click.widget) >= 4) {
-			if (HandlePlacePushButton(w, button, SPR_CURSOR_INDUSTRY, 1, NULL))
-				_industry_type_to_place = _industry_type_list[_opt.landscape][button - 4];
-		}
-		break;
-	case WE_PLACE_OBJ: {
-		int type;
-
-		/* Show error if no town exists at all */
-		type = _industry_type_to_place;
-		if (!AnyTownExists()) {
-			SetDParam(0, GetIndustrySpec(type)->name);
-			ShowErrorMessage(STR_0286_MUST_BUILD_TOWN_FIRST, STR_0285_CAN_T_BUILD_HERE, e->we.place.pt.x, e->we.place.pt.y);
-			return;
-		}
-
-		_current_player = OWNER_NONE;
-		_generating_world = true;
-		_ignore_restrictions = true;
-		if (!TryBuildIndustry(e->we.place.tile,type)) {
-			SetDParam(0, GetIndustrySpec(type)->name);
-			ShowErrorMessage(_error_message, STR_0285_CAN_T_BUILD_HERE, e->we.place.pt.x, e->we.place.pt.y);
-		}
-		_ignore_restrictions = false;
-		_generating_world = false;
-		break;
-	}
-	case WE_ABORT_PLACE_OBJ:
-		RaiseWindowButtons(w);
-		SetWindowDirty(w);
-		break;
-	case WE_TIMEOUT:
-		RaiseWindowWidget(w, 3);
-		InvalidateWidget(w, 3);
-		break;
-	}
-}
-
-static const WindowDesc _scenedit_industry_normal_desc = {
-	WDP_AUTO, WDP_AUTO, 170, 225,
-	WC_SCEN_INDUSTRY, WC_NONE,
-	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
-	_scenedit_industry_normal_widgets,
-	ScenEditIndustryWndProc,
-};
-
-static const WindowDesc _scenedit_industry_hilly_desc = {
-	WDP_AUTO, WDP_AUTO, 170, 225,
-	WC_SCEN_INDUSTRY, WC_NONE,
-	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
-	_scenedit_industry_hilly_widgets,
-	ScenEditIndustryWndProc,
-};
-
-static const WindowDesc _scenedit_industry_desert_desc = {
-	WDP_AUTO, WDP_AUTO, 170, 225,
-	WC_SCEN_INDUSTRY, WC_NONE,
-	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
-	_scenedit_industry_desert_widgets,
-	ScenEditIndustryWndProc,
-};
-
-static const WindowDesc _scenedit_industry_candy_desc = {
-	WDP_AUTO, WDP_AUTO, 170, 225,
-	WC_SCEN_INDUSTRY, WC_NONE,
-	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
-	_scenedit_industry_candy_widgets,
-	ScenEditIndustryWndProc,
-};
-
-static const WindowDesc * const _scenedit_industry_descs[] = {
-	&_scenedit_industry_normal_desc,
-	&_scenedit_industry_hilly_desc,
-	&_scenedit_industry_desert_desc,
-	&_scenedit_industry_candy_desc,
-};
-
-
 static void ToolbarScenGenIndustry(Window *w)
 {
 	HandleButtonClick(w, 13);
 	SndPlayFx(SND_15_BEEP);
-	AllocateWindowDescFront(_scenedit_industry_descs[_opt.landscape],0);
+	ShowBuildIndustryWindow();
 }
 
 static void ToolbarScenBuildRoad(Window *w)
@@ -1859,6 +1620,9 @@
 		/* disable company list drop downs, if there are no companies */
 		SetWindowWidgetsDisabledState(w, ActivePlayerCount() == 0, 7, 8, 13, 14, 15, 16, WIDGET_LIST_END);
 
+		SetWindowWidgetDisabledState(w, 19, !CanBuildVehicleInfrastructure(VEH_TRAIN));
+		SetWindowWidgetDisabledState(w, 22, !CanBuildVehicleInfrastructure(VEH_AIRCRAFT));
+
 		DrawWindowWidgets(w);
 		break;
 
@@ -1878,7 +1642,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;
@@ -1887,16 +1651,16 @@
 		case WKC_SHIFT | WKC_F4: ShowVehicleListWindow(_local_player, VEH_AIRCRAFT); break;
 		case WKC_SHIFT | WKC_F5: ToolbarZoomInClick(w); break;
 		case WKC_SHIFT | WKC_F6: ToolbarZoomOutClick(w); break;
-		case WKC_SHIFT | WKC_F7: ShowBuildRailToolbar(_last_built_railtype, -1); break;
+		case WKC_SHIFT | WKC_F7: if (CanBuildVehicleInfrastructure(VEH_TRAIN)) 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: if (CanBuildVehicleInfrastructure(VEH_AIRCRAFT)) ShowBuildAirToolbar(); break;
 		case WKC_SHIFT | WKC_F11: ShowBuildTreesToolbar(); break;
 		case WKC_SHIFT | WKC_F12: ShowMusicWindow(); break;
 		case WKC_CTRL  | 'S': MenuClickSmallScreenshot(); break;
 		case WKC_CTRL  | 'G': MenuClickWorldScreenshot(); break;
 		case WKC_CTRL | WKC_ALT | 'C': if (!_networking) ShowCheatWindow(); break;
-		case 'A': ShowBuildRailToolbar(_last_built_railtype, 4); break; /* Invoke Autorail */
+		case 'A': if (CanBuildVehicleInfrastructure(VEH_TRAIN)) ShowBuildRailToolbar(_last_built_railtype, 4); break; /* Invoke Autorail */
 		case 'L': ShowTerraformToolbar(); break;
 		default: return;
 		}
@@ -1936,7 +1700,7 @@
 	}
 
 		case WE_MESSAGE:
-			HandleZoomMessage(w, FindWindowById(WC_MAIN_WINDOW, 0)->viewport, 17, 18);
+			if (FindWindowById(WC_MAIN_WINDOW, 0) != NULL) HandleZoomMessage(w, FindWindowById(WC_MAIN_WINDOW, 0)->viewport, 17, 18);
 			break;
 	}
 }
@@ -2083,7 +1847,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;
@@ -2200,7 +1964,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);
 		}
 
@@ -2218,8 +1982,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/misc.cpp	Sat Jul 14 19:42: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();
@@ -270,6 +273,21 @@
 	return i;
 }
 
+int CountBitsSet(uint32 value)
+{
+	int num;
+
+	/* This loop is only called once for every bit set by clearing the lowest
+	 * bit in each loop. The number of bits is therefore equal to the number of
+	 * times the loop was called. It was found at the following website:
+	 * http://graphics.stanford.edu/~seander/bithacks.html */
+
+	for (num = 0; value != 0; num++) {
+		value &= value - 1;
+	}
+
+	return num;
+}
 
 static void Save_NAME()
 {
--- a/src/misc/array.hpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/misc/array.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -64,10 +64,23 @@
 	/** indexed access (const) */
 	FORCEINLINE const Titem& operator [] (int idx) const
 	{
-		CSubArray& sa = m_a[idx / Tblock_size];
-		Titem& item   = sa [idx % Tblock_size];
+		const CSubArray& sa = m_a[idx / Tblock_size];
+		const Titem& item   = sa [idx % Tblock_size];
 		return item;
 	}
+
+	template <typename D> void Dump(D &dmp) const
+	{
+		dmp.WriteLine("capacity = %d", Tcapacity);
+		int num_items = Size();
+		dmp.WriteLine("num_items = %d", num_items);
+		CStrA name;
+		for (int i = 0; i < num_items; i++) {
+			const Titem& item = (*this)[i];
+			name.Format("item[%d]", i);
+			dmp.WriteStructT(name.Data(), &item);
+		}
+	}
 };
 
 #endif /* ARRAY_HPP */
--- a/src/misc/blob.hpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/misc/blob.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -15,104 +15,196 @@
 	memcpy(d, s, num_items * sizeof(Titem_));
 }
 
-
 /** Base class for simple binary blobs.
- *  Item is byte.
- *  The word 'simple' means:
- *    - no configurable allocator type (always made from heap)
- *    - no smart deallocation - deallocation must be called from the same
- *        module (DLL) where the blob was allocated
- *    - no configurable allocation policy (how big blocks should be allocated)
- *    - no extra ownership policy (i.e. 'copy on write') when blob is copied
- *    - no thread synchronization at all
- *
- *  Internal member layout:
- *  1. The only class member is pointer to the first item (see union ptr_u).
- *  2. Allocated block contains the blob header (see CHdr) followed by the raw byte data.
- *     Always, when it allocates memory the allocated size is:
- *                                                      sizeof(CHdr) + <data capacity>
- *  3. Two 'virtual' members (m_size and m_max_size) are stored in the CHdr at beginning
- *     of the alloated block.
- *  4. The pointer (in ptr_u) points behind the header (to the first data byte).
- *     When memory block is allocated, the sizeof(CHdr) it added to it.
- *  5. Benefits of this layout:
- *     - items are accessed in the simplest possible way - just dereferencing the pointer,
- *       which is good for performance (assuming that data are accessed most often).
- *     - sizeof(blob) is the same as the size of any other pointer
- *  6. Drawbacks of this layout:
- *     - the fact, that pointer to the alocated block is adjusted by sizeof(CHdr) before
- *       it is stored can lead to several confusions:
- *         - it is not common pattern so the implementation code is bit harder to read
- *         - valgrind can generate warning that allocated block is lost (not accessible)
- * */
+*  Item is byte.
+*  The word 'simple' means:
+*    - no configurable allocator type (always made from heap)
+*    - no smart deallocation - deallocation must be called from the same
+*        module (DLL) where the blob was allocated
+*    - no configurable allocation policy (how big blocks should be allocated)
+*    - no extra ownership policy (i.e. 'copy on write') when blob is copied
+*    - no thread synchronization at all
+*
+*  Internal member layout:
+*  1. The only class member is pointer to the first item (see union ptr_u).
+*  2. Allocated block contains the blob header (see CHdr) followed by the raw byte data.
+*     Always, when it allocates memory the allocated size is:
+*                                                      sizeof(CHdr) + <data capacity>
+*  3. Two 'virtual' members (m_size and m_max_size) are stored in the CHdr at beginning
+*     of the alloated block.
+*  4. The pointter (in ptr_u) pobsize_ts behind the header (to the first data byte).
+*     When memory block is allocated, the sizeof(CHdr) it added to it.
+*  5. Benefits of this layout:
+*     - items are accessed in the simplest possible way - just dereferencing the pointer,
+*       which is good for performance (assuming that data are accessed most often).
+*     - sizeof(blob) is the same as the size of any other pointer
+*  6. Drawbacks of this layout:
+*     - the fact, that pointer to the alocated block is adjusted by sizeof(CHdr) before
+*       it is stored can lead to several confusions:
+*         - it is not common pattern so the implementation code is bit harder to read
+*         - valgrind can generate warning that allocated block is lost (not accessible)
+* */
 class CBlobBaseSimple {
+public:
+	typedef ::ptrdiff_t bsize_t;
+	typedef ::byte      bitem_t;
+
 protected:
 	/** header of the allocated memory block */
 	struct CHdr {
-		int    m_size;      ///< actual blob size in bytes
-		int    m_max_size;  ///< maximum (allocated) size in bytes
+		bsize_t    m_size;      ///< actual blob size in bytes
+		bsize_t    m_max_size;  ///< maximum (allocated) size in bytes
 	};
 
 	/** type used as class member */
 	union {
-		int8   *m_pData;    ///< pointer to the first byte of data
-		CHdr   *m_pHdr_1;   ///< pointer just after the CHdr holding m_size and m_max_size
+		bitem_t    *m_pData;    ///< ptr to the first byte of data
+		wchar_t    *m_pwData;   ///< ptr to the first byte of data
+		CHdr       *m_pHdr_1;   ///< ptr just after the CHdr holding m_size and m_max_size
 	} ptr_u;
 
 public:
-	static const int Ttail_reserve = 4; ///< four extra bytes will be always allocated and zeroed at the end
+	static const bsize_t Ttail_reserve = 4; ///< four extra bytes will be always allocated and zeroed at the end
 
 	/** default constructor - initializes empty blob */
 	FORCEINLINE CBlobBaseSimple() { InitEmpty(); }
+	/** constructor - create blob with data */
+	FORCEINLINE CBlobBaseSimple(const bitem_t *p, bsize_t num_bytes)
+	{
+		InitEmpty();
+		AppendRaw(p, num_bytes);
+	}
+
 	/** copy constructor */
 	FORCEINLINE CBlobBaseSimple(const CBlobBaseSimple& src)
 	{
 		InitEmpty();
 		AppendRaw(src);
 	}
+
+	/** move constructor - take ownership of blob data */
+	FORCEINLINE CBlobBaseSimple(CHdr * const & pHdr_1)
+	{
+		assert(pHdr_1 != NULL);
+		ptr_u.m_pHdr_1 = pHdr_1;
+		*(CHdr**)&pHdr_1 = NULL;
+	}
+
 	/** destructor */
-	FORCEINLINE ~CBlobBaseSimple() { Free(); }
+	FORCEINLINE ~CBlobBaseSimple()
+	{
+		Free();
+	}
+
 protected:
 	/** initialize the empty blob by setting the ptr_u.m_pHdr_1 pointer to the static CHdr with
-	 *  both m_size and m_max_size containing zero */
-	FORCEINLINE void InitEmpty() { static CHdr hdrEmpty[] = {{0, 0}, {0, 0}}; ptr_u.m_pHdr_1 = &hdrEmpty[1]; }
+	*  both m_size and m_max_size containing zero */
+	FORCEINLINE void InitEmpty()
+	{
+		static CHdr hdrEmpty[] = {{0, 0}, {0, 0}};
+		ptr_u.m_pHdr_1 = &hdrEmpty[1];
+	}
+
 	/** initialize blob by attaching it to the given header followed by data */
-	FORCEINLINE void Init(CHdr* hdr) { ptr_u.m_pHdr_1 = &hdr[1]; }
+	FORCEINLINE void Init(CHdr* hdr)
+	{
+		ptr_u.m_pHdr_1 = &hdr[1];
+	}
+
 	/** blob header accessor - use it rather than using the pointer arithmetics directly - non-const version */
-	FORCEINLINE CHdr& Hdr() { return ptr_u.m_pHdr_1[-1]; }
+	FORCEINLINE CHdr& Hdr()
+	{
+		return ptr_u.m_pHdr_1[-1];
+	}
+
 	/** blob header accessor - use it rather than using the pointer arithmetics directly - const version */
-	FORCEINLINE const CHdr& Hdr() const { return ptr_u.m_pHdr_1[-1]; }
+	FORCEINLINE const CHdr& Hdr() const
+	{
+		return ptr_u.m_pHdr_1[-1];
+	}
+
 	/** return reference to the actual blob size - used when the size needs to be modified */
-	FORCEINLINE int& RawSizeRef() { return Hdr().m_size; };
+	FORCEINLINE bsize_t& RawSizeRef()
+	{
+		return Hdr().m_size;
+	};
 
 public:
 	/** return true if blob doesn't contain valid data */
-	FORCEINLINE bool IsEmpty() const { return RawSize() == 0; }
+	FORCEINLINE bool IsEmpty() const
+	{
+		return RawSize() == 0;
+	}
+
 	/** return the number of valid data bytes in the blob */
-	FORCEINLINE int RawSize() const { return Hdr().m_size; };
+	FORCEINLINE bsize_t RawSize() const
+	{
+		return Hdr().m_size;
+	};
+
 	/** return the current blob capacity in bytes */
-	FORCEINLINE int MaxRawSize() const { return Hdr().m_max_size; };
+	FORCEINLINE bsize_t MaxRawSize() const
+	{
+		return Hdr().m_max_size;
+	};
+
 	/** return pointer to the first byte of data - non-const version */
-	FORCEINLINE int8* RawData() { return ptr_u.m_pData; }
+	FORCEINLINE bitem_t* RawData()
+	{
+		return ptr_u.m_pData;
+	}
+
 	/** return pointer to the first byte of data - const version */
-	FORCEINLINE const int8* RawData() const { return ptr_u.m_pData; }
-#if 0 // reenable when needed
+	FORCEINLINE const bitem_t* RawData() const
+	{
+		return ptr_u.m_pData;
+	}
+
 	/** return the 32 bit CRC of valid data in the blob */
-	FORCEINLINE uint32 Crc32() const {return CCrc32::Calc(RawData(), RawSize());}
-#endif //0
+	//FORCEINLINE bsize_t Crc32() const
+	//{
+	//	return CCrc32::Calc(RawData(), RawSize());
+	//}
+
 	/** invalidate blob's data - doesn't free buffer */
-	FORCEINLINE void Clear() { RawSizeRef() = 0; }
+	FORCEINLINE void Clear()
+	{
+		RawSizeRef() = 0;
+	}
+
 	/** free the blob's memory */
-	FORCEINLINE void Free() { if (MaxRawSize() > 0) {RawFree(&Hdr()); InitEmpty();} }
+	FORCEINLINE void Free()
+	{
+		if (MaxRawSize() > 0) {
+			RawFree(&Hdr());
+			InitEmpty();
+		}
+	}
+
 	/** copy data from another blob - replaces any existing blob's data */
-	FORCEINLINE void CopyFrom(const CBlobBaseSimple& src) { Clear(); AppendRaw(src); }
+	FORCEINLINE void CopyFrom(const CBlobBaseSimple& src)
+	{
+		Clear();
+		AppendRaw(src);
+	}
+
 	/** overtake ownership of data buffer from the source blob - source blob will become empty */
-	FORCEINLINE void MoveFrom(CBlobBaseSimple& src) { Free(); ptr_u.m_pData = src.ptr_u.m_pData; src.InitEmpty(); }
+	FORCEINLINE void MoveFrom(CBlobBaseSimple& src)
+	{
+		Free();
+		ptr_u.m_pData = src.ptr_u.m_pData;
+		src.InitEmpty();
+	}
+
 	/** swap buffers (with data) between two blobs (this and source blob) */
-	FORCEINLINE void Swap(CBlobBaseSimple& src) { int8 *tmp = ptr_u.m_pData; ptr_u.m_pData = src.ptr_u.m_pData; src.ptr_u.m_pData = tmp; }
+	FORCEINLINE void Swap(CBlobBaseSimple& src)
+	{
+		bitem_t *tmp = ptr_u.m_pData; ptr_u.m_pData = src.ptr_u.m_pData;
+		src.ptr_u.m_pData = tmp;
+	}
 
 	/** append new bytes at the end of existing data bytes - reallocates if necessary */
-	FORCEINLINE void AppendRaw(int8 *p, int num_bytes)
+	FORCEINLINE void AppendRaw(const void *p, bsize_t num_bytes)
 	{
 		assert(p != NULL);
 		if (num_bytes > 0) {
@@ -130,27 +222,26 @@
 	}
 
 	/** Reallocate if there is no free space for num_bytes bytes.
-	 *  @return pointer to the new data to be added */
-	FORCEINLINE int8* MakeRawFreeSpace(int num_bytes)
+	*  @return pointer to the new data to be added */
+	FORCEINLINE bitem_t* MakeRawFreeSpace(bsize_t num_bytes)
 	{
 		assert(num_bytes >= 0);
-		int new_size = RawSize() + num_bytes;
+		bsize_t new_size = RawSize() + num_bytes;
 		if (new_size > MaxRawSize()) SmartAlloc(new_size);
-		FixTail();
 		return ptr_u.m_pData + RawSize();
 	}
 
 	/** Increase RawSize() by num_bytes.
-	 *  @return pointer to the new data added */
-	FORCEINLINE int8* GrowRawSize(int num_bytes)
+	*  @return pointer to the new data added */
+	FORCEINLINE bitem_t* GrowRawSize(bsize_t num_bytes)
 	{
-		int8* pNewData = MakeRawFreeSpace(num_bytes);
+		bitem_t* pNewData = MakeRawFreeSpace(num_bytes);
 		RawSizeRef() += num_bytes;
 		return pNewData;
 	}
 
 	/** Decrease RawSize() by num_bytes. */
-	FORCEINLINE void ReduceRawSize(int num_bytes)
+	FORCEINLINE void ReduceRawSize(bsize_t num_bytes)
 	{
 		if (MaxRawSize() > 0 && num_bytes > 0) {
 			assert(num_bytes <= RawSize());
@@ -158,15 +249,16 @@
 			else RawSizeRef() = 0;
 		}
 	}
+
 	/** reallocate blob data if needed */
-	void SmartAlloc(int new_size)
+	void SmartAlloc(bsize_t new_size)
 	{
-		int old_max_size = MaxRawSize();
+		bsize_t old_max_size = MaxRawSize();
 		if (old_max_size >= new_size) return;
 		// calculate minimum block size we need to allocate
-		int min_alloc_size = sizeof(CHdr) + new_size + Ttail_reserve;
+		bsize_t min_alloc_size = sizeof(CHdr) + new_size + Ttail_reserve;
 		// ask allocation policy for some reasonable block size
-		int alloc_size = AllocPolicy(min_alloc_size);
+		bsize_t alloc_size = AllocPolicy(min_alloc_size);
 		// allocate new block
 		CHdr* pNewHdr = RawAlloc(alloc_size);
 		// setup header
@@ -181,8 +273,9 @@
 		if (old_max_size > 0)
 			RawFree(pOldHdr);
 	}
+
 	/** simple allocation policy - can be optimized later */
-	FORCEINLINE static int AllocPolicy(int min_alloc)
+	FORCEINLINE static bsize_t AllocPolicy(bsize_t min_alloc)
 	{
 		if (min_alloc < (1 << 9)) {
 			if (min_alloc < (1 << 5)) return (1 << 5);
@@ -201,58 +294,133 @@
 	}
 
 	/** all allocation should happen here */
-	static FORCEINLINE CHdr* RawAlloc(int num_bytes) { return (CHdr*)malloc(num_bytes); }
+	static FORCEINLINE CHdr* RawAlloc(bsize_t num_bytes)
+	{
+		return (CHdr*)malloc(num_bytes);
+	}
+
 	/** all deallocations should happen here */
-	static FORCEINLINE void RawFree(CHdr* p) { free(p); }
+	static FORCEINLINE void RawFree(CHdr* p)
+	{
+		free(p);
+	}
 	/** fixing the four bytes at the end of blob data - useful when blob is used to hold string */
-	FORCEINLINE void FixTail()
+	FORCEINLINE void FixTail() const
 	{
 		if (MaxRawSize() > 0) {
-			int8 *p = &ptr_u.m_pData[RawSize()];
-			for (int i = 0; i < Ttail_reserve; i++) p[i] = 0;
+			bitem_t *p = &ptr_u.m_pData[RawSize()];
+			for (bsize_t i = 0; i < Ttail_reserve; i++) {
+				p[i] = 0;
+			}
 		}
 	}
 };
 
 /** Blob - simple dynamic Titem_ array. Titem_ (template argument) is a placeholder for any type.
- *  Titem_ can be any integral type, pointer, or structure. Using Blob instead of just plain C array
- *  simplifies the resource management in several ways:
- *  1. When adding new item(s) it automatically grows capacity if needed.
- *  2. When variable of type Blob comes out of scope it automatically frees the data buffer.
- *  3. Takes care about the actual data size (number of used items).
- *  4. Dynamically constructs only used items (as opposite of static array which constructs all items) */
+*  Titem_ can be any integral type, pointer, or structure. Using Blob instead of just plain C array
+*  simplifies the resource management in several ways:
+*  1. When adding new item(s) it automatically grows capacity if needed.
+*  2. When variable of type Blob comes out of scope it automatically frees the data buffer.
+*  3. Takes care about the actual data size (number of used items).
+*  4. Dynamically constructs only used items (as opposite of static array which constructs all items) */
 template <class Titem_, class Tbase_ = CBlobBaseSimple>
-class CBlobT : public CBlobBaseSimple {
+class CBlobT : public Tbase_ {
 	// make template arguments public:
 public:
 	typedef Titem_ Titem;
 	typedef Tbase_ Tbase;
+	typedef typename Tbase::bsize_t bsize_t;
 
-	static const int Titem_size = sizeof(Titem);
+	static const bsize_t Titem_size = sizeof(Titem);
+
+	struct OnTransfer {
+		typename Tbase_::CHdr *m_pHdr_1;
+		OnTransfer(const OnTransfer& src) : m_pHdr_1(src.m_pHdr_1) {assert(src.m_pHdr_1 != NULL); *(typename Tbase_::CHdr**)&src.m_pHdr_1 = NULL;}
+		OnTransfer(CBlobT& src) : m_pHdr_1(src.ptr_u.m_pHdr_1) {src.InitEmpty();}
+		~OnTransfer() {assert(m_pHdr_1 == NULL);}
+	};
 
 	/** Default constructor - makes new Blob ready to accept any data */
-	FORCEINLINE CBlobT() : Tbase() {}
+	FORCEINLINE CBlobT()
+		: Tbase()
+	{}
+
+	/** Constructor - makes new Blob with data */
+	FORCEINLINE CBlobT(const Titem_ *p, bsize_t num_items)
+		: Tbase((typename Tbase_::bitem_t*)p, num_items * Titem_size)
+	{}
+
 	/** Copy constructor - make new blob to become copy of the original (source) blob */
-	FORCEINLINE CBlobT(const Tbase& src) : Tbase(src) {assert((RawSize() % Titem_size) == 0);}
+	FORCEINLINE CBlobT(const Tbase& src)
+		: Tbase(src)
+	{
+		assert((Tbase::RawSize() % Titem_size) == 0);
+	}
+
+	/** Take ownership constructor */
+	FORCEINLINE CBlobT(const OnTransfer& ot)
+		: Tbase(ot.m_pHdr_1)
+	{}
+
 	/** Destructor - ensures that allocated memory (if any) is freed */
-	FORCEINLINE ~CBlobT() { Free(); }
+	FORCEINLINE ~CBlobT()
+	{
+		Free();
+	}
+
 	/** Check the validity of item index (only in debug mode) */
-	FORCEINLINE void CheckIdx(int idx) { assert(idx >= 0); assert(idx < Size()); }
+	FORCEINLINE void CheckIdx(bsize_t idx)
+	{
+		assert(idx >= 0); assert(idx < Size());
+	}
+
 	/** Return pointer to the first data item - non-const version */
-	FORCEINLINE Titem* Data() { return (Titem*)RawData(); }
+	FORCEINLINE Titem* Data()
+	{
+		return (Titem*)Tbase::RawData();
+	}
+
 	/** Return pointer to the first data item - const version */
-	FORCEINLINE const Titem* Data() const { return (const Titem*)RawData(); }
+	FORCEINLINE const Titem* Data() const
+	{
+		return (const Titem*)Tbase::RawData();
+	}
+
 	/** Return pointer to the idx-th data item - non-const version */
-	FORCEINLINE Titem* Data(int idx) { CheckIdx(idx); return (Data() + idx); }
+	FORCEINLINE Titem* Data(bsize_t idx)
+	{
+		CheckIdx(idx);
+		return (Data() + idx);
+	}
+
 	/** Return pointer to the idx-th data item - const version */
-	FORCEINLINE const Titem* Data(int idx) const { CheckIdx(idx); return (Data() + idx); }
+	FORCEINLINE const Titem* Data(bsize_t idx) const
+	{
+		CheckIdx(idx); return (Data() + idx);
+	}
+
 	/** Return number of items in the Blob */
-	FORCEINLINE int Size() const { return (RawSize() / Titem_size); }
+	FORCEINLINE bsize_t Size() const
+	{
+		return (Tbase::RawSize() / Titem_size);
+	}
+
+	/** Return total number of items that can fit in the Blob without buffer reallocation */
+	FORCEINLINE bsize_t MaxSize() const
+	{
+		return (Tbase::MaxRawSize() / Titem_size);
+	}
+	/** Return number of additional items that can fit in the Blob without buffer reallocation */
+	FORCEINLINE bsize_t GetReserve() const
+	{
+		return ((Tbase::MaxRawSize() - Tbase::RawSize()) / Titem_size);
+	}
+
 	/** Free the memory occupied by Blob destroying all items */
 	FORCEINLINE void Free()
 	{
-		assert((RawSize() % Titem_size) == 0);
-		int old_size = Size();
+		assert((Tbase::RawSize() % Titem_size) == 0);
+		bsize_t old_size = Size();
 		if (old_size > 0) {
 			// destroy removed items;
 			Titem* pI_last_to_destroy = Data(0);
@@ -260,27 +428,34 @@
 		}
 		Tbase::Free();
 	}
+
 	/** Grow number of data items in Blob by given number - doesn't construct items */
-	FORCEINLINE Titem* GrowSizeNC(int num_items) { return (Titem*)GrowRawSize(num_items * Titem_size); }
+	FORCEINLINE Titem* GrowSizeNC(bsize_t num_items)
+	{
+		return (Titem*)Tbase::GrowRawSize(num_items * Titem_size);
+	}
+
 	/** Grow number of data items in Blob by given number - constructs new items (using Titem_'s default constructor) */
-	FORCEINLINE Titem* GrowSizeC(int num_items)
+	FORCEINLINE Titem* GrowSizeC(bsize_t num_items)
 	{
 		Titem* pI = GrowSizeNC(num_items);
-		for (int i = num_items; i > 0; i--, pI++) new (pI) Titem();
+		for (bsize_t i = num_items; i > 0; i--, pI++) new (pI) Titem();
 	}
+
 	/** Destroy given number of items and reduce the Blob's data size */
-	FORCEINLINE void ReduceSize(int num_items)
+	FORCEINLINE void ReduceSize(bsize_t num_items)
 	{
-		assert((RawSize() % Titem_size) == 0);
-		int old_size = Size();
+		assert((Tbase::RawSize() % Titem_size) == 0);
+		bsize_t old_size = Size();
 		assert(num_items <= old_size);
-		int new_size = (num_items <= old_size) ? (old_size - num_items) : 0;
+		bsize_t new_size = (num_items <= old_size) ? (old_size - num_items) : 0;
 		// destroy removed items;
 		Titem* pI_last_to_destroy = Data(new_size);
 		for (Titem* pI = Data(old_size - 1); pI >= pI_last_to_destroy; pI--) pI->~Titem();
 		// remove them
-		ReduceRawSize(num_items * Titem_size);
+		Tbase::ReduceRawSize(num_items * Titem_size);
 	}
+
 	/** Append one data item at the end (calls Titem_'s default constructor) */
 	FORCEINLINE Titem* AppendNew()
 	{
@@ -288,6 +463,7 @@
 		Titem* pNewItem = new (&dst) Titem(); // construct the new item by calling in-place new operator
 		return pNewItem;
 	}
+
 	/** Append the copy of given item at the end of Blob (using copy constructor) */
 	FORCEINLINE Titem* Append(const Titem& src)
 	{
@@ -295,8 +471,9 @@
 		Titem* pNewItem = new (&dst) Titem(src); // construct the new item by calling in-place new operator with copy ctor()
 		return pNewItem;
 	}
+
 	/** Add given items (ptr + number of items) at the end of blob */
-	FORCEINLINE Titem* Append(const Titem* pSrc, int num_items)
+	FORCEINLINE Titem* Append(const Titem* pSrc, bsize_t num_items)
 	{
 		Titem* pDst = GrowSizeNC(num_items);
 		Titem* pDstOrg = pDst;
@@ -304,14 +481,16 @@
 		while (pDst < pDstEnd) new (pDst++) Titem(*(pSrc++));
 		return pDstOrg;
 	}
+
 	/** Remove item with the given index by replacing it by the last item and reducing the size by one */
-	FORCEINLINE void RemoveBySwap(int idx)
+	FORCEINLINE void RemoveBySwap(bsize_t idx)
 	{
 		CheckIdx(idx);
 		// destroy removed item
 		Titem* pRemoved = Data(idx);
 		RemoveBySwap(pRemoved);
 	}
+
 	/** Remove item given by pointer replacing it by the last item and reducing the size by one */
 	FORCEINLINE void RemoveBySwap(Titem* pItem)
 	{
@@ -325,20 +504,21 @@
 		// destroy the last item
 		pLast->~Titem_();
 		// and reduce the raw blob size
-		ReduceRawSize(Titem_size);
+		Tbase::ReduceRawSize(Titem_size);
 	}
+
 	/** Ensures that given number of items can be added to the end of Blob. Returns pointer to the
-	 *  first free (unused) item */
-	FORCEINLINE Titem* MakeFreeSpace(int num_items) { return (Titem*)MakeRawFreeSpace(num_items * Titem_size); }
+	*  first free (unused) item */
+	FORCEINLINE Titem* MakeFreeSpace(bsize_t num_items)
+	{
+		return (Titem*)Tbase::MakeRawFreeSpace(num_items * Titem_size);
+	}
+
+	FORCEINLINE OnTransfer Transfer()
+	{
+		return OnTransfer(*this);
+	};
 };
 
-// simple string implementation
-struct CStrA : public CBlobT<char>
-{
-	typedef CBlobT<char> base;
-	CStrA(const char* str = NULL) {Append(str);}
-	FORCEINLINE CStrA(const CBlobBaseSimple& src) : base(src) {}
-	void Append(const char* str) {if (str != NULL && str[0] != '\0') base::Append(str, (int)strlen(str));}
-};
 
 #endif /* BLOB_HPP */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/misc/dbg_helpers.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,170 @@
+/* $Id$ */
+
+/** @file dbg_helpers.cpp */
+#include "../stdafx.h"
+#include "../direction.h"
+#include "../rail.h"
+#include "../rail_map.h"
+#include "dbg_helpers.h"
+
+/** Trackdir & TrackdirBits short names. */
+static const char* trackdir_names[] = {
+	"NE", "SE", "UE", "LE", "LS", "RS", "rne", "rse",
+	"SW", "NW", "UW", "LW", "LN", "RN", "rsw", "rnw",
+};
+
+/** Return name of given Trackdir. */
+CStrA ValueStr(Trackdir td)
+{
+	CStrA out;
+	out.Format("%d (%s)", td, ItemAtT(td, trackdir_names, "UNK", INVALID_TRACKDIR, "INV"));
+	return out.Transfer();
+}
+
+/** Return composed name of given TrackdirBits. */
+CStrA ValueStr(TrackdirBits td_bits)
+{
+	CStrA out;
+	out.Format("%d (%s)", td_bits, ComposeNameT(td_bits, trackdir_names, "UNK", INVALID_TRACKDIR_BIT, "INV").Data());
+	return out.Transfer();
+}
+
+
+/** DiagDirection short names. */
+static const char* diagdir_names[] = {
+	"NE", "SE", "SW", "NW",
+};
+
+/** Return name of given DiagDirection. */
+CStrA ValueStr(DiagDirection dd)
+{
+	CStrA out;
+	out.Format("%d (%s)", dd, ItemAtT(dd, diagdir_names, "UNK", INVALID_DIAGDIR, "INV"));
+	return out.Transfer();
+}
+
+
+/** SignalType short names. */
+static const char* signal_type_names[] = {
+	"NORMAL", "ENTRY", "EXIT", "COMBO",
+};
+
+/** Return name of given SignalType. */
+CStrA ValueStr(SignalType t)
+{
+	CStrA out;
+	out.Format("%d (%s)", t, ItemAtT(t, signal_type_names, "UNK"));
+	return out.Transfer();
+}
+
+
+/** Translate TileIndex into string. */
+CStrA TileStr(TileIndex tile)
+{
+	CStrA out;
+	out.Format("0x%04X (%d, %d)", tile, TileX(tile), TileY(tile));
+	return out.Transfer();
+}
+
+/** Keep track of the last assigned type_id. Used for anti-recursion. */
+/*static*/ size_t& DumpTarget::LastTypeId()
+{
+	static size_t last_type_id = 0;
+	return last_type_id;
+}
+
+/** Return structured name of the current class/structure. */
+CStrA DumpTarget::GetCurrentStructName()
+{
+	CStrA out;
+	if (!m_cur_struct.empty()) {
+		// we are inside some named struct, return its name
+		out = m_cur_struct.top();
+	}
+	return out.Transfer();
+}
+
+/**
+ * Find the given instance in our anti-recursion repository.
+ * Return true and set name when object was found.
+ */
+bool DumpTarget::FindKnownName(size_t type_id, const void *ptr, CStrA &name)
+{
+	KNOWN_NAMES::const_iterator it = m_known_names.find(KnownStructKey(type_id, ptr));
+	if (it != m_known_names.end()) {
+		/* we have found it */
+		name = (*it).second;
+		return true;
+	}
+	return false;
+}
+
+/** Write some leading spaces into the output. */
+void DumpTarget::WriteIndent()
+{
+	int num_spaces = 2 * m_indent;
+	memset(m_out.GrowSizeNC(num_spaces), ' ', num_spaces);
+}
+
+/** Write a line with indent at the beginning and <LF> at the end. */
+void DumpTarget::WriteLine(const char *format, ...)
+{
+	WriteIndent();
+	va_list args;
+	va_start(args, format);
+	m_out.AddFormatL(format, args);
+	va_end(args);
+	m_out.AppendStr("\n");
+}
+
+/** Write 'name = value' with indent and new-line. */
+void DumpTarget::WriteValue(const char *name, const char *value_str)
+{
+	WriteIndent();
+	m_out.AddFormat("%s = %s\n", name, value_str);
+}
+
+/** Write name & TileIndex to the output. */
+void DumpTarget::WriteTile(const char *name, TileIndex tile)
+{
+	WriteIndent();
+	m_out.AddFormat("%s = %s\n", name, TileStr(tile).Data());
+}
+
+/**
+ * Open new structure (one level deeper than the current one) 'name = {<LF>'.
+ */
+void DumpTarget::BeginStruct(size_t type_id, const char *name, const void *ptr)
+{
+	/* make composite name */
+	CStrA cur_name = GetCurrentStructName().Transfer();
+	if (cur_name.Size() > 0) {
+		/* add name delimiter (we use structured names) */
+		cur_name.AppendStr(".");
+	}
+	cur_name.AppendStr(name);
+
+	/* put the name onto stack (as current struct name) */
+	m_cur_struct.push(cur_name);
+
+	/* put it also to the map of known structures */
+	m_known_names.insert(KNOWN_NAMES::value_type(KnownStructKey(type_id, ptr), cur_name));
+
+	WriteIndent();
+	m_out.AddFormat("%s = {\n", name);
+	m_indent++;
+}
+
+/**
+ * Close structure '}<LF>'.
+ */
+void DumpTarget::EndStruct()
+{
+	m_indent--;
+	WriteIndent();
+	m_out.AddFormat("}\n");
+
+	/* remove current struct name from the stack */
+	m_cur_struct.pop();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/misc/dbg_helpers.h	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,166 @@
+/* $Id$ */
+
+/** @file dbg_helpers.h */
+
+#ifndef DBG_HELPERS
+#define DBG_HELPERS
+
+#include <new>
+#include <map>
+#include <stack>
+
+#include "blob.hpp"
+#include "str.hpp"
+
+/** Helper template class that provides C array length and item type */
+template <typename T> struct ArrayT;
+
+/** Helper template class that provides C array length and item type */
+template <typename T, size_t N> struct ArrayT<T[N]> {
+	static const size_t length = N;
+	typedef T item_t;
+};
+
+
+/**
+* Helper template function that returns item of array at given index
+* or t_unk when index is out of bounds.
+*/
+template <typename E, typename T>
+inline typename ArrayT<T>::item_t ItemAtT(E idx, T &t, typename ArrayT<T>::item_t t_unk)
+{
+	if ((size_t)idx >= ArrayT<T>::length) {
+		return t_unk;
+	}
+	return t[idx];
+}
+
+/**
+* Helper template function that returns item of array at given index
+* or t_inv when index == idx_inv
+* or t_unk when index is out of bounds.
+*/
+template <typename E, typename T>
+inline typename ArrayT<T>::item_t ItemAtT(E idx, T &t, typename ArrayT<T>::item_t t_unk, E idx_inv, typename ArrayT<T>::item_t t_inv)
+{
+	if ((size_t)idx < ArrayT<T>::length) {
+		return t[idx];
+	}
+	if (idx == idx_inv) {
+		return t_inv;
+	}
+	return t_unk;
+}
+
+/**
+* Helper template function that returns compound bitfield name that is
+* concatenation of names of each set bit in the given value
+* or t_inv when index == idx_inv
+* or t_unk when index is out of bounds.
+*/
+template <typename E, typename T>
+inline CStrA ComposeNameT(E value, T &t, const char* t_unk, E val_inv, const char* name_inv)
+{
+	CStrA out;
+	if (value == val_inv) {
+		out = name_inv;
+	} else if (value == 0) {
+		out = "<none>";
+	} else {
+		for (size_t i = 0; i < ArrayT<T>::length; i++) {
+			if ((value & (1 << i)) == 0) continue;
+			out.AddFormat("%s%s", (out.Size() > 0 ? "+" : ""), t[i]);
+			value &= ~(E)(1 << i);
+		}
+		if (value != 0) out.AddFormat("%s%s", (out.Size() > 0 ? "+" : ""), t_unk);
+	}
+	return out.Transfer();
+}
+
+CStrA ValueStr(Trackdir td);
+CStrA ValueStr(TrackdirBits td_bits);
+CStrA ValueStr(DiagDirection dd);
+CStrA ValueStr(SignalType t);
+
+/** Class that represents the dump-into-string target. */
+struct DumpTarget {
+
+	/** Used as a key into map of known object instances. */
+	struct KnownStructKey {
+		size_t      m_type_id;
+		const void *m_ptr;
+
+		KnownStructKey(size_t type_id, const void *ptr)
+			: m_type_id(type_id)
+			, m_ptr(ptr)
+		{}
+
+		KnownStructKey(const KnownStructKey &src)
+		{
+			m_type_id = src.m_type_id;
+			m_ptr = src.m_ptr;
+		}
+
+		bool operator < (const KnownStructKey &other) const
+		{
+			if ((size_t)m_ptr < (size_t)other.m_ptr) return true;
+			if ((size_t)m_ptr > (size_t)other.m_ptr) return false;
+			if (m_type_id < other.m_type_id) return true;
+			return false;
+		}
+	};
+
+	typedef std::map<KnownStructKey, CStrA> KNOWN_NAMES;
+
+	CStrA              m_out;         ///< the output string
+	int                m_indent;      ///< current indent/nesting level
+	std::stack<CStrA>  m_cur_struct;  ///< here we will track the current structure name
+	KNOWN_NAMES        m_known_names; ///< map of known object instances and their structured names
+
+	DumpTarget()
+		: m_indent(0)
+	{}
+
+	static size_t& LastTypeId();
+	CStrA GetCurrentStructName();
+	bool FindKnownName(size_t type_id, const void* ptr, CStrA &name);
+
+	void WriteIndent();
+
+	void WriteLine(const char *format, ...);
+	void WriteValue(const char *name, const char *value_str);
+	void WriteTile(const char *name, TileIndex t);
+
+	/** Dump given enum value (as a number and as named value) */
+	template <typename E> void WriteEnumT(const char *name, E e)
+	{
+		WriteValue(name, ValueStr(e).Data());
+	}
+
+	void BeginStruct(size_t type_id, const char *name, const void *ptr);
+	void EndStruct();
+
+	/** Dump nested object (or only its name if this instance is already known). */
+	template <typename S> void WriteStructT(const char *name, const S *s)
+	{
+		static size_t type_id = ++LastTypeId();
+
+		if (s == NULL) {
+			/* No need to dump NULL struct. */
+			WriteLine("%s = <null>", name);
+			return;
+		}
+		CStrA known_as;
+		if (FindKnownName(type_id, s, known_as)) {
+			/* We already know this one, no need to dump it. */
+			WriteLine("%s = known_as.%s", name, known_as.Data());
+		} else {
+			/* Still unknown, dump it */
+			BeginStruct(type_id, name, s);
+			s->Dump(*this);
+			EndStruct();
+		}
+	}
+};
+
+#endif /* DBG_HELPERS */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/misc/str.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,189 @@
+/* $Id$ */
+
+/** @file str.hpp */
+
+#ifndef  STR_HPP
+#define  STR_HPP
+
+#include <errno.h>
+#include <stdarg.h>
+#include "strapi.hpp"
+
+/** Blob based string. */
+template <typename Tchar, bool TcaseInsensitive>
+struct CStrT : public CBlobT<Tchar>
+{
+	typedef CBlobT<Tchar> base;                    ///< base class
+	typedef CStrApiT<Tchar, TcaseInsensitive> Api; ///< string API abstraction layer
+	typedef typename base::bsize_t bsize_t;        ///< size type inherited from blob
+	typedef typename base::OnTransfer OnTransfer;  ///< temporary 'transfer ownership' object type
+
+	/** Construction from C zero ended string. */
+	FORCEINLINE CStrT(const Tchar* str = NULL)
+	{
+		AppendStr(str);
+	}
+
+	/** Construction from C string and given number of characters. */
+	FORCEINLINE CStrT(const Tchar* str, bsize_t num_chars) : base(str, num_chars)
+	{
+		base::FixTail();
+	}
+
+	/** Construction from C string determined by 'begin' and 'end' pointers. */
+	FORCEINLINE CStrT(const Tchar* str, const Tchar* end)
+		: base(str, end - str)
+	{
+		base::FixTail();
+	}
+
+	/** Construction from blob contents. */
+	FORCEINLINE CStrT(const CBlobBaseSimple& src)
+		: base(src)
+	{
+		base::FixTail();
+	}
+
+	/** Copy constructor. */
+	FORCEINLINE CStrT(const CStrT& src)
+		: base(src)
+	{
+		base::FixTail();
+	}
+
+	/** Take over ownership constructor */
+	FORCEINLINE CStrT(const OnTransfer& ot)
+		: base(ot)
+	{
+	}
+
+	/** Grow the actual buffer and fix the trailing zero at the end. */
+	FORCEINLINE Tchar* GrowSizeNC(bsize_t count)
+	{
+		Tchar* ret = base::GrowSizeNC(count);
+		base::FixTail();
+		return ret;
+	}
+
+	/** Append zero-ended C string. */
+	FORCEINLINE void AppendStr(const Tchar* str)
+	{
+		if (str != NULL && str[0] != '\0') {
+			base::Append(str, (bsize_t)Api::StrLen(str));
+			base::FixTail();
+		}
+	}
+
+	/** Append another CStrT or blob. */
+	FORCEINLINE void Append(const CBlobBaseSimple& src)
+	{
+		if (src.RawSize() > 0) {
+			base::AppendRaw(src);
+			base::FixTail();
+		}
+	}
+
+	/** Assignment from C string. */
+	FORCEINLINE CStrT& operator = (const Tchar* src)
+	{
+		base::Clear();
+		AppendStr(src);
+		return *this;
+	}
+
+	/** Assignment from another CStrT or blob. */
+	FORCEINLINE CStrT& operator = (const CBlobBaseSimple& src)
+	{
+		base::Clear();
+		base::AppendRaw(src);
+		base::FixTail();
+		return *this;
+	}
+
+	/** Assignment from another CStrT or blob. */
+	FORCEINLINE CStrT& operator = (const CStrT& src)
+	{
+		base::Clear();
+		base::AppendRaw(src);
+		base::FixTail();
+		return *this;
+	}
+
+	/** Lower-than operator (to support stl collections) */
+	FORCEINLINE bool operator < (const CStrT &other) const
+	{
+		return (Api::StrCmp(base::Data(), other.Data()) < 0);
+	}
+
+	/** Add formated string (like vsprintf) at the end of existing contents. */
+	int AddFormatL(const Tchar *format, va_list args)
+	{
+		bsize_t addSize = Api::StrLen(format);
+		if (addSize < 16) addSize = 16;
+		addSize += addSize / 2;
+		int ret;
+		int err = 0;
+		for (;;) {
+			Tchar *buf = MakeFreeSpace(addSize);
+			ret = Api::SPrintFL(buf, base::GetReserve(), format, args);
+			if (ret >= base::GetReserve()) {
+				/* Greater return than given count means needed buffer size. */
+				addSize = ret + 1;
+				continue;
+			}
+			if (ret >= 0) {
+				/* success */
+				break;
+			}
+			err = errno;
+			if (err != ERANGE && err != ENOENT && err != 0) {
+				/* some strange failure */
+				break;
+			}
+			/* small buffer (M$ implementation) */
+			addSize *= 2;
+		}
+		if (ret > 0) {
+			GrowSizeNC(ret);
+		} else {
+			base::FixTail();
+		}
+		return ret;
+	}
+
+	/** Add formated string (like sprintf) at the end of existing contents. */
+	int AddFormat(const Tchar *format, ...)
+	{
+		va_list args;
+		va_start(args, format);
+		int ret = AddFormatL(format, args);
+		va_end(args);
+		return ret;
+	}
+
+	/** Assign formated string (like vsprintf). */
+	int FormatL(const Tchar *format, va_list args)
+	{
+		base::Free();
+		int ret = AddFormatL(format, args);
+		return ret;
+	}
+
+	/** Assign formated string (like sprintf). */
+	int Format(const Tchar *format, ...)
+	{
+		base::Free();
+		va_list args;
+		va_start(args, format);
+		int ret = AddFormatL(format, args);
+		va_end(args);
+		return ret;
+	}
+};
+
+typedef CStrT<char   , false> CStrA;   ///< Case sensitive ANSI/UTF-8 string
+typedef CStrT<char   , true > CStrCiA; ///< Case insensitive ANSI/UTF-8 string
+typedef CStrT<wchar_t, false> CStrW;   ///< Case sensitive unicode string
+typedef CStrT<wchar_t, true > CStrCiW; ///< Case insensitive unicode string
+
+#endif /* STR_HPP */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/misc/strapi.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,94 @@
+/* $Id$ */
+
+/** @file strapi.hpp */
+
+#ifndef  STRAPI_HPP
+#define  STRAPI_HPP
+
+#include <string.h>
+#include <wchar.h>
+
+#if !defined(_MSC_VER)
+#define _stricmp strcmp
+#define _wcsicmp wcscmp
+#endif //!_MSC_VER
+
+/** String API mapper base - just mapping by character type, not by case sensitivity yet.
+	* Class template CStrApiBaseT declaration is general, but following inline method
+	* definitions are specialized by character type. Class is not used directly, but only
+	* as a base class for template class CStrApiT */
+template <typename Tchar>
+class CStrApiBaseT
+{
+public:
+	/** ::strlen wrapper */
+	static size_t StrLen(const Tchar *s);
+	static int SPrintFL(Tchar *buf, size_t count, const Tchar *fmt, va_list args);
+};
+
+/** ::strlen wrapper specialization for char */
+template <> /*static*/ inline size_t CStrApiBaseT<char>::StrLen(const char *s)
+{
+	return ::strlen(s);
+}
+
+/** ::strlen wrapper specialization for wchar_t */
+template <> /*static*/ inline size_t CStrApiBaseT<wchar_t>::StrLen(const wchar_t *s)
+{
+	return ::wcslen(s);
+}
+
+/** ::vsprintf wrapper specialization for char */
+template <> /*static*/ inline int CStrApiBaseT<char>::SPrintFL(char *buf, size_t count, const char *fmt, va_list args)
+{
+#if defined(_MSC_VER) && (_MSC_VER >= 1400) // VC 8.0 and above
+	return ::vsnprintf_s(buf, count, count - 1, fmt, args);
+#else // ! VC 8.0 and above
+	return ::vsnprintf(buf, count, fmt, args);
+#endif
+}
+
+/** ::vsprintf wrapper specialization for wchar_t */
+template <> /*static*/ inline int CStrApiBaseT<wchar_t>::SPrintFL(wchar_t *buf, size_t count, const wchar_t *fmt, va_list args)
+{
+#if defined(_MSC_VER) && (_MSC_VER >= 1400) // VC 8.0 and above
+	return ::_vsnwprintf_s(buf, count, count - 1, fmt, args);
+#else // ! VC 8.0 and above
+# if defined(_WIN32)
+	 return ::_vsnwprintf(buf, count, fmt, args);
+# else // !_WIN32
+	 return ::vswprintf(buf, count, fmt, args);
+# endif // !_WIN32
+#endif
+}
+
+
+
+template <typename Tchar, bool TcaseInsensitive>
+class CStrApiT : public CStrApiBaseT<Tchar>
+{
+public:
+	static int StrCmp(const Tchar *s1, const Tchar *s2);
+};
+
+template <> /*static*/ inline int CStrApiT<char, false>::StrCmp(const char *s1, const char *s2)
+{
+	return ::strcmp(s1, s2);
+}
+
+template <> /*static*/ inline int CStrApiT<char, true>::StrCmp(const char *s1, const char *s2)
+{
+	return ::_stricmp(s1, s2);
+}
+
+template <> /*static*/ inline int CStrApiT<wchar_t, false>::StrCmp(const wchar_t *s1, const wchar_t *s2)
+{
+	return ::wcscmp(s1, s2);
+}
+
+template <> /*static*/ inline int CStrApiT<wchar_t, true>::StrCmp(const wchar_t *s1, const wchar_t *s2)
+{
+	return ::_wcsicmp(s1, s2);
+}
+
+#endif /* STRAPI_HPP */
--- a/src/misc_cmd.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/misc_cmd.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -17,6 +17,7 @@
 #include "variables.h"
 #include "livery.h"
 #include "player_face.h"
+#include "strings.h"
 
 /** Change the player's face.
  * @param tile unused
@@ -24,7 +25,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 +35,7 @@
 		GetPlayer(_current_player)->face = pf;
 		MarkWholeScreenDirty();
 	}
-	return 0;
+	return CommandCost();
 }
 
 /** Change the player's company-colour
@@ -45,7 +46,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,64 +115,71 @@
 		}
 		MarkWholeScreenDirty();
 	}
-	return 0;
+	return CommandCost();
 }
 
 /** Increase the loan of your company.
  * @param tile unused
  * @param flags operation to perform
  * @param p1 unused
- * @param p2 when set, loans the maximum amount in one go (press CTRL)
+ * @param p2 when 0: loans LOAN_INTERVAL
+ *           when 1: loans the maximum loan permitting money (press CTRL),
  */
-int32 CmdIncreaseLoan(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdIncreaseLoan(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	Player *p;
-
-	p = GetPlayer(_current_player);
+	Player *p = GetPlayer(_current_player);
 
 	if (p->current_loan >= _economy.max_loan) {
 		SetDParam(0, _economy.max_loan);
 		return_cmd_error(STR_702B_MAXIMUM_PERMITTED_LOAN);
 	}
 
+	Money loan;
+	switch (p2) {
+		default: return CMD_ERROR; // Invalid method
+		case 0: // Take some extra loan
+			loan = (IsHumanPlayer(_current_player) || _patches.ainew_active) ? LOAN_INTERVAL : LOAN_INTERVAL_OLD_AI;
+			break;
+		case 1: // Take a loan as big as possible
+			loan = _economy.max_loan - p->current_loan;
+			break;
+	}
+
+	/* Overflow protection */
+	if (p->player_money + p->current_loan + loan < p->player_money) return CMD_ERROR;
+
 	if (flags & DC_EXEC) {
-		/* Loan the maximum amount or not? */
-		int32 loan = (p2) ? _economy.max_loan - p->current_loan : (IsHumanPlayer(_current_player) || _patches.ainew_active) ? 10000 : 50000;
-
-		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.
  * @param tile unused
  * @param flags operation to perform
  * @param p1 unused
- * @param p2 when set, pays back the maximum loan permitting money (press CTRL)
+ * @param p2 when 0: pays back LOAN_INTERVAL
+ *           when 1: pays back the maximum loan permitting money (press CTRL),
  */
-int32 CmdDecreaseLoan(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdDecreaseLoan(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
-	Player *p;
-	int32 loan;
-
-	p = GetPlayer(_current_player);
+	Player *p = GetPlayer(_current_player);
 
 	if (p->current_loan == 0) return_cmd_error(STR_702D_LOAN_ALREADY_REPAYED);
 
-	loan = p->current_loan;
-
-	/* p2 is true while CTRL is pressed (repay all possible loan, or max money you have)
-	 * Repay any loan in chunks of 10.000 pounds */
-	if (p2) {
-		loan = min(loan, p->player_money);
-		loan = max(loan, 10000);
-		loan -= loan % 10000;
-	} else {
-		loan = min(loan, (IsHumanPlayer(_current_player) || _patches.ainew_active) ? 10000 : 50000);
+	Money loan;
+	switch (p2) {
+		default: return CMD_ERROR; // Invalid method
+		case 0: // Pay back one step
+			loan = min(p->current_loan, (Money)(IsHumanPlayer(_current_player) || _patches.ainew_active) ? LOAN_INTERVAL : LOAN_INTERVAL_OLD_AI);
+			break;
+		case 1: // Pay back as much as possible
+			loan = max(min(p->current_loan, p->player_money), (Money)LOAN_INTERVAL);
+			loan -= loan % LOAN_INTERVAL;
+			break;
 	}
 
 	if (p->player_money < loan) {
@@ -180,12 +188,26 @@
 	}
 
 	if (flags & DC_EXEC) {
-		p->money64 -= loan;
+		p->player_money -= loan;
 		p->current_loan -= loan;
-		UpdatePlayerMoney32(p);
 		InvalidatePlayerWindows(p);
 	}
-	return 0;
+	return CommandCost();
+}
+
+static bool IsUniqueCompanyName(const char *name)
+{
+	const Player *p;
+	char buf[512];
+
+	FOR_ALL_PLAYERS(p) {
+		if (!p->is_active) continue;
+		SetDParam(0, p->index);
+		GetString(buf, STR_COMPANY_NAME, lastof(buf));
+		if (strcmp(buf, name) == 0) return false;
+	}
+
+	return true;
 }
 
 /** Change the name of the company.
@@ -194,14 +216,16 @@
  * @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;
 
-	if (_cmd_text[0] == '\0') return CMD_ERROR;
+	if (StrEmpty(_cmd_text)) return CMD_ERROR;
 
-	str = AllocateNameUnique(_cmd_text, 4);
+	if (!IsUniqueCompanyName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+
+	str = AllocateName(_cmd_text, 4);
 	if (str == 0) return CMD_ERROR;
 
 	if (flags & DC_EXEC) {
@@ -213,7 +237,22 @@
 		DeleteName(str);
 	}
 
-	return 0;
+	return CommandCost();
+}
+
+static bool IsUniquePresidentName(const char *name)
+{
+	const Player *p;
+	char buf[512];
+
+	FOR_ALL_PLAYERS(p) {
+		if (!p->is_active) continue;
+		SetDParam(0, p->index);
+		GetString(buf, STR_PLAYER_NAME, lastof(buf));
+		if (strcmp(buf, name) == 0) return false;
+	}
+
+	return true;
 }
 
 /** Change the name of the president.
@@ -222,14 +261,16 @@
  * @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;
 
-	if (_cmd_text[0] == '\0') return CMD_ERROR;
+	if (StrEmpty(_cmd_text)) return CMD_ERROR;
 
-	str = AllocateNameUnique(_cmd_text, 4);
+	if (!IsUniquePresidentName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+
+	str = AllocateName(_cmd_text, 4);
 	if (str == 0) return CMD_ERROR;
 
 	if (flags & DC_EXEC) {
@@ -249,7 +290,7 @@
 		DeleteName(str);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Pause/Unpause the game (server-only).
@@ -261,7 +302,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;
@@ -269,7 +310,7 @@
 		InvalidateWindow(WC_STATUS_BAR, 0);
 		InvalidateWindow(WC_MAIN_TOOLBAR, 0);
 	}
-	return 0;
+	return CommandCost();
 }
 
 /** Change the financial flow of your company.
@@ -280,13 +321,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.
@@ -298,22 +339,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;
 	}
 
@@ -331,7 +372,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;
 
@@ -349,5 +390,5 @@
 		if (_networking && !_network_server && FindWindowById(WC_GAME_OPTIONS, 0) != NULL)
 			ShowGameDifficulty();
 	}
-	return 0;
+	return CommandCost();
 }
--- a/src/misc_gui.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/misc_gui.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -4,7 +4,6 @@
 
 #include "stdafx.h"
 #include "openttd.h"
-#include "hal.h"
 #include "heightmap.h"
 #include "debug.h"
 #include "functions.h"
@@ -35,7 +34,9 @@
 #include "date.h"
 #include "cargotype.h"
 #include "player_face.h"
+#include "fileio.h"
 
+#include "fileio.h"
 #include "fios.h"
 /* Variables to display file lists */
 FiosItem *_fios_list;
@@ -87,8 +88,8 @@
 	Player *p;
 	Window *w;
 	Town *t;
-	int64 old_money;
-	int64 costclear;
+	Money old_money;
+	CommandCost costclear;
 	AcceptedCargo ac;
 	TileDesc td;
 	StringID str;
@@ -101,11 +102,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;
@@ -120,8 +120,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]));
@@ -216,16 +216,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",
@@ -477,7 +477,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;
 
@@ -609,7 +609,7 @@
 }
 
 
-void ShowEstimatedCostOrIncome(int32 cost, int x, int y)
+void ShowEstimatedCostOrIncome(Money cost, int x, int y)
 {
 	StringID msg = STR_0805_ESTIMATED_COST;
 
@@ -621,7 +621,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);
@@ -632,15 +632,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[] = {
@@ -682,7 +705,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;
@@ -728,16 +751,22 @@
 
 
 static void DrawStationCoverageText(const AcceptedCargo accepts,
-	int str_x, int str_y, uint mask)
+	int str_x, int str_y, StationCoverageType sct)
 {
 	char *b = _userstring;
 	bool first = true;
 
 	b = InlineString(b, STR_000D_ACCEPTS);
 
-	for (CargoID i = 0; i < NUM_CARGO; i++, mask >>= 1) {
+	for (CargoID i = 0; i < NUM_CARGO; i++) {
 		if (b >= lastof(_userstring) - 5) break;
-		if (accepts[i] >= 8 && mask & 1) {
+		switch (sct) {
+			case SCT_PASSENGERS_ONLY: if (!IsCargoInClass(i, CC_PASSENGERS)) continue; break;
+			case SCT_NON_PASSENGERS_ONLY: if (IsCargoInClass(i, CC_PASSENGERS)) continue; break;
+			case SCT_ALL: break;
+			default: NOT_REACHED();
+		}
+		if (accepts[i] >= 8) {
 			if (first) {
 				first = false;
 			} else {
@@ -756,12 +785,12 @@
 	DrawStringMultiLine(str_x, str_y, STR_SPEC_USERSTRING, 144);
 }
 
-void DrawStationCoverageAreaText(int sx, int sy, uint mask, int rad) {
+void DrawStationCoverageAreaText(int sx, int sy, StationCoverageType sct, int rad) {
 	TileIndex tile = TileVirtXY(_thd.pos.x, _thd.pos.y);
 	AcceptedCargo accepts;
 	if (tile < MapSize()) {
 		GetAcceptanceAroundTiles(accepts, tile, _thd.size.x / TILE_SIZE, _thd.size.y / TILE_SIZE , rad);
-		DrawStationCoverageText(accepts, sx, sy, mask);
+		DrawStationCoverageText(accepts, sx, sy, sct);
 	}
 }
 
@@ -1193,8 +1222,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));
@@ -1392,10 +1421,10 @@
 	    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);
 }
 
 extern void StartupEngines();
@@ -1405,28 +1434,27 @@
 	static FiosItem o_dir;
 
 	switch (e->event) {
-	case WE_CREATE: { // Set up OPENTTD button
+	case WE_CREATE: // Set up OPENTTD button
 		o_dir.type = FIOS_TYPE_DIRECT;
 		switch (_saveload_mode) {
 			case SLD_SAVE_GAME:
 			case SLD_LOAD_GAME:
-				ttd_strlcpy(&o_dir.name[0], _paths.save_dir, sizeof(o_dir.name));
+				FioGetDirectory(o_dir.name, lengthof(o_dir.name), SAVE_DIR);
 				break;
 
 			case SLD_SAVE_SCENARIO:
 			case SLD_LOAD_SCENARIO:
-				ttd_strlcpy(&o_dir.name[0], _paths.scenario_dir, sizeof(o_dir.name));
+				FioGetDirectory(o_dir.name, lengthof(o_dir.name), SCENARIO_DIR);
 				break;
 
 			case SLD_LOAD_HEIGHTMAP:
-				ttd_strlcpy(&o_dir.name[0], _paths.heightmap_dir, sizeof(o_dir.name));
+				FioGetDirectory(o_dir.name, lengthof(o_dir.name), HEIGHTMAP_DIR);
 				break;
 
 			default:
-				ttd_strlcpy(&o_dir.name[0], _paths.personal_dir, sizeof(o_dir.name));
+				ttd_strlcpy(o_dir.name, _personal_dir, lengthof(o_dir.name));
 		}
 		break;
-		}
 
 	case WE_PAINT: {
 		int pos;
@@ -1825,7 +1853,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/music/bemidi.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/music/bemidi.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -11,17 +11,19 @@
 
 static BMidiSynthFile midiSynthFile;
 
-static const char *bemidi_start(const char * const *parm)
+static FMusicDriver_BeMidi iFMusicDriver_BeMidi;
+
+const char *MusicDriver_BeMidi::Start(const char * const *parm)
 {
 	return NULL;
 }
 
-static void bemidi_stop()
+void MusicDriver_BeMidi::Stop()
 {
 	midiSynthFile.UnloadFile();
 }
 
-static void bemidi_play_song(const char *filename)
+void MusicDriver_BeMidi::PlaySong(const char *filename)
 {
 	bemidi_stop();
 	entry_ref midiRef;
@@ -30,26 +32,17 @@
 	midiSynthFile.Start();
 }
 
-static void bemidi_stop_song()
+void MusicDriver_BeMidi::StopSong()
 {
 	midiSynthFile.UnloadFile();
 }
 
-static bool bemidi_is_playing()
+bool MusicDriver_BeMidi::IsSongPlaying()
 {
 	return !midiSynthFile.IsFinished();
 }
 
-static void bemidi_set_volume(byte vol)
+void MusicDriver_BeMidi::SetVolume(byte vol)
 {
 	fprintf(stderr, "BeMidi: Set volume not implemented\n");
 }
-
-const HalMusicDriver _bemidi_music_driver = {
-	bemidi_start,
-	bemidi_stop,
-	bemidi_play_song,
-	bemidi_stop_song,
-	bemidi_is_playing,
-	bemidi_set_volume,
-};
--- a/src/music/bemidi.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/music/bemidi.h	Sat Jul 14 19:42:58 2007 +0000
@@ -3,8 +3,29 @@
 #ifndef MUSIC_BEMIDI_H
 #define MUSIC_BEMIDI_H
 
-#include "../hal.h"
+#include "music_driver.hpp"
 
-extern const HalMusicDriver _bemidi_music_driver;
+class MusicDriver_BeMidi: public MusicDriver {
+public:
+	/* virtual */ const char *Start(const char * const *param);
+
+	/* virtual */ void Stop();
+
+	/* virtual */ void PlaySong(const char *filename);
+
+	/* virtual */ void StopSong();
+
+	/* virtual */ bool IsSongPlaying();
+
+	/* virtual */ void SetVolume(byte vol);
+};
+
+class FMusicDriver_BeMidi: public MusicDriverFactory<FMusicDriver_BeMidi> {
+public:
+	static const int priority = 10;
+	/* virtual */ const char *GetName() { return "bemidi"; }
+	/* virtual */ const char *GetDescription() { return "BeOS MIDI Driver"; }
+	/* virtual */ Driver *CreateInstance() { return new MusicDriver_BeMidi(); }
+};
 
 #endif /* MUSIC_BEMIDI_H */
--- a/src/music/dmusic.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/music/dmusic.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -47,7 +47,7 @@
 static ProcPtrs proc;
 
 
-static const char* DMusicMidiStart(const char* const* parm)
+const char *MusicDriver_DMusic::Start(const char * const *parm)
 {
 	if (performance != NULL) return NULL;
 
@@ -109,7 +109,7 @@
 }
 
 
-static void DMusicMidiStop()
+void MusicDriver_DMusic::Stop()
 {
 	seeking = false;
 
@@ -136,7 +136,7 @@
 }
 
 
-static void DMusicMidiPlaySong(const char* filename)
+void MusicDriver_DMusic::PlaySong(const char* filename)
 {
 	/* set up the loader object info */
 	DMUS_OBJECTDESC obj_desc;
@@ -188,7 +188,7 @@
 }
 
 
-static void DMusicMidiStopSong()
+void MusicDriver_DMusic::StopSong()
 {
 	if (FAILED(performance->Stop(segment, NULL, 0, 0))) {
 		DEBUG(driver, 0, "DirectMusic: StopSegment failed");
@@ -197,7 +197,7 @@
 }
 
 
-static bool DMusicMidiIsSongPlaying()
+bool MusicDriver_DMusic::IsSongPlaying()
 {
 	/* Not the nicest code, but there is a short delay before playing actually
 	 * starts. OpenTTD makes no provision for this. */
@@ -210,20 +210,11 @@
 }
 
 
-static void DMusicMidiSetVolume(byte vol)
+void MusicDriver_DMusic::SetVolume(byte vol)
 {
 	long db = vol * 2000 / 127 - 2000; ///< 0 - 127 -> -2000 - 0
 	performance->SetGlobalParam(GUID_PerfMasterVolume, &db, sizeof(db));
 }
 
 
-const HalMusicDriver _dmusic_midi_driver = {
-	DMusicMidiStart,
-	DMusicMidiStop,
-	DMusicMidiPlaySong,
-	DMusicMidiStopSong,
-	DMusicMidiIsSongPlaying,
-	DMusicMidiSetVolume,
-};
-
 #endif /* WIN32_ENABLE_DIRECTMUSIC_SUPPORT */
--- a/src/music/dmusic.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/music/dmusic.h	Sat Jul 14 19:42:58 2007 +0000
@@ -3,8 +3,29 @@
 #ifndef MUSIC_DMUSIC_H
 #define MUSIC_DMUSIC_H
 
-#include "../hal.h"
+#include "music_driver.hpp"
 
-extern const HalMusicDriver _dmusic_midi_driver;
+class MusicDriver_DMusic: public MusicDriver {
+public:
+	/* virtual */ const char *Start(const char * const *param);
+
+	/* virtual */ void Stop();
+
+	/* virtual */ void PlaySong(const char *filename);
+
+	/* virtual */ void StopSong();
+
+	/* virtual */ bool IsSongPlaying();
+
+	/* virtual */ void SetVolume(byte vol);
+};
+
+class FMusicDriver_DMusic: public MusicDriverFactory<FMusicDriver_DMusic> {
+public:
+	static const int priority = 10;
+	/* virtual */ const char *GetName() { return "dmusic"; }
+	/* virtual */ const char *GetDescription() { return "DirectMusic MIDI Driver"; }
+	/* virtual */ Driver *CreateInstance() { return new MusicDriver_DMusic(); }
+};
 
 #endif /* MUSIC_DMUSIC_H */
--- a/src/music/extmidi.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/music/extmidi.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -16,56 +16,50 @@
 #include <sys/stat.h>
 #include <errno.h>
 
-static struct {
-	char song[MAX_PATH];
-	pid_t pid;
-} _midi;
+static FMusicDriver_ExtMidi iFMusicDriver_ExtMidi;
 
-static void DoPlay();
-static void DoStop();
-
-static const char* ExtMidiStart(const char* const * parm)
+const char* MusicDriver_ExtMidi::Start(const char* const * parm)
 {
-	_midi.song[0] = '\0';
-	_midi.pid = -1;
+	this->song[0] = '\0';
+	this->pid = -1;
 	return NULL;
 }
 
-static void ExtMidiStop()
+void MusicDriver_ExtMidi::Stop()
 {
-	_midi.song[0] = '\0';
-	DoStop();
-}
-
-static void ExtMidiPlaySong(const char* filename)
-{
-	ttd_strlcpy(_midi.song, filename, lengthof(_midi.song));
-	DoStop();
+	this->song[0] = '\0';
+	this->DoStop();
 }
 
-static void ExtMidiStopSong()
+void MusicDriver_ExtMidi::PlaySong(const char* filename)
 {
-	_midi.song[0] = '\0';
-	DoStop();
+	ttd_strlcpy(this->song, filename, lengthof(this->song));
+	this->DoStop();
 }
 
-static bool ExtMidiIsPlaying()
+void MusicDriver_ExtMidi::StopSong()
 {
-	if (_midi.pid != -1 && waitpid(_midi.pid, NULL, WNOHANG) == _midi.pid)
-		_midi.pid = -1;
-	if (_midi.pid == -1 && _midi.song[0] != '\0') DoPlay();
-	return _midi.pid != -1;
+	this->song[0] = '\0';
+	this->DoStop();
 }
 
-static void ExtMidiSetVolume(byte vol)
+bool MusicDriver_ExtMidi::IsSongPlaying()
+{
+	if (this->pid != -1 && waitpid(this->pid, NULL, WNOHANG) == this->pid)
+		this->pid = -1;
+	if (this->pid == -1 && this->song[0] != '\0') this->DoPlay();
+	return this->pid != -1;
+}
+
+void MusicDriver_ExtMidi::SetVolume(byte vol)
 {
 	DEBUG(driver, 1, "extmidi: set volume not implemented");
 }
 
-static void DoPlay()
+void MusicDriver_ExtMidi::DoPlay()
 {
-	_midi.pid = fork();
-	switch (_midi.pid) {
+	this->pid = fork();
+	switch (this->pid) {
 		case 0: {
 			int d;
 
@@ -73,9 +67,9 @@
 			d = open("/dev/null", O_RDONLY);
 			if (d != -1 && dup2(d, 1) != -1 && dup2(d, 2) != -1) {
 				#if defined(MIDI_ARG)
-					execlp(msf.extmidi, "extmidi", MIDI_ARG, _midi.song, (char*)0);
+					execlp(msf.extmidi, "extmidi", MIDI_ARG, this->song, (char*)0);
 				#else
-					execlp(msf.extmidi, "extmidi", _midi.song, (char*)0);
+					execlp(msf.extmidi, "extmidi", this->song, (char*)0);
 				#endif
 			}
 			_exit(1);
@@ -86,23 +80,14 @@
 			/* FALLTHROUGH */
 
 		default:
-			_midi.song[0] = '\0';
+			this->song[0] = '\0';
 			break;
 	}
 }
 
-static void DoStop()
+void MusicDriver_ExtMidi::DoStop()
 {
-	if (_midi.pid != -1) kill(_midi.pid, SIGTERM);
+	if (this->pid != -1) kill(this->pid, SIGTERM);
 }
 
-const HalMusicDriver _extmidi_music_driver = {
-	ExtMidiStart,
-	ExtMidiStop,
-	ExtMidiPlaySong,
-	ExtMidiStopSong,
-	ExtMidiIsPlaying,
-	ExtMidiSetVolume,
-};
-
 #endif /* __MORPHOS__ */
--- a/src/music/extmidi.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/music/extmidi.h	Sat Jul 14 19:42:58 2007 +0000
@@ -3,8 +3,36 @@
 #ifndef MUSIC_EXTERNAL_H
 #define MUSIC_EXTERNAL_H
 
-#include "../hal.h"
+#include "music_driver.hpp"
 
-extern const HalMusicDriver _extmidi_music_driver;
+class MusicDriver_ExtMidi: public MusicDriver {
+private:
+	char song[MAX_PATH];
+	pid_t pid;
+
+	void DoPlay();
+	void DoStop();
+
+public:
+	/* virtual */ const char *Start(const char * const *param);
+
+	/* virtual */ void Stop();
+
+	/* virtual */ void PlaySong(const char *filename);
+
+	/* virtual */ void StopSong();
+
+	/* virtual */ bool IsSongPlaying();
+
+	/* virtual */ void SetVolume(byte vol);
+};
+
+class FMusicDriver_ExtMidi: public MusicDriverFactory<FMusicDriver_ExtMidi> {
+public:
+	static const int priority = 1;
+	/* virtual */ const char *GetName() { return "extmidi"; }
+	/* virtual */ const char *GetDescription() { return "External MIDI Driver"; }
+	/* virtual */ Driver *CreateInstance() { return new MusicDriver_ExtMidi(); }
+};
 
 #endif /* MUSIC_EXTERNAL_H */
--- a/src/music/libtimidity.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/music/libtimidity.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -44,7 +44,9 @@
 }
 #endif /* PSP */
 
-static const char *LibtimidityMidiStart(const char *const *param)
+static FMusicDriver_LibTimidity iFMusicDriver_LibTimidity;
+
+const char *MusicDriver_LibTimidity::Start(const char *const *param)
 {
 	_midi.status = MIDI_STOPPED;
 
@@ -53,8 +55,7 @@
 		 *  If it was not forced via param, try to load it without a
 		 *  configuration. Who knows that works. */
 		if (param != NULL || mid_init_no_config() < 0) {
-			DEBUG(driver, 0, "error initializing timidity");
-			return NULL;
+			return "error initializing timidity";
 		}
 	}
 	DEBUG(driver, 1, "successfully initialised timidity");
@@ -77,7 +78,7 @@
 	return NULL;
 }
 
-static void LibtimidityMidiStop()
+void MusicDriver_LibTimidity::Stop()
 {
 	if (_midi.status == MIDI_PLAYING) {
 		_midi.status = MIDI_STOPPED;
@@ -86,7 +87,7 @@
 	mid_exit();
 }
 
-static void LibtimidityMidiPlaySong(const char *filename)
+void MusicDriver_LibTimidity::PlaySong(const char *filename)
 {
 	_midi.stream = mid_istream_open_file(filename);
 	if (_midi.stream == NULL) {
@@ -107,13 +108,13 @@
 	_midi.status = MIDI_PLAYING;
 }
 
-static void LibtimidityMidiStopSong()
+void MusicDriver_LibTimidity::StopSong()
 {
 	_midi.status = MIDI_STOPPED;
 	mid_song_free(_midi.song);
 }
 
-static bool LibtimidityMidiIsPlaying()
+bool MusicDriver_LibTimidity::IsSongPlaying()
 {
 	if (_midi.status == MIDI_PLAYING) {
 		_midi.song_position = mid_song_get_time(_midi.song);
@@ -126,18 +127,8 @@
 	return (_midi.status == MIDI_PLAYING);
 }
 
-static void LibtimidityMidiSetVolume(byte vol)
+void MusicDriver_LibTimidity::SetVolume(byte vol)
 {
 	if (_midi.song != NULL)
 		mid_song_set_volume(_midi.song, vol);
 }
-
-const HalMusicDriver _libtimidity_music_driver = {
-	LibtimidityMidiStart,
-	LibtimidityMidiStop,
-	LibtimidityMidiPlaySong,
-	LibtimidityMidiStopSong,
-	LibtimidityMidiIsPlaying,
-	LibtimidityMidiSetVolume,
-};
-
--- a/src/music/libtimidity.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/music/libtimidity.h	Sat Jul 14 19:42:58 2007 +0000
@@ -3,8 +3,29 @@
 #ifndef MUSIC_LIBTIMIDITY_H
 #define MUSIC_LIBTIMIDITY_H
 
-#include "../hal.h"
+#include "music_driver.hpp"
 
-extern const HalMusicDriver _libtimidity_music_driver;
+class MusicDriver_LibTimidity: public MusicDriver {
+public:
+	/* virtual */ const char *Start(const char * const *param);
+
+	/* virtual */ void Stop();
+
+	/* virtual */ void PlaySong(const char *filename);
+
+	/* virtual */ void StopSong();
+
+	/* virtual */ bool IsSongPlaying();
+
+	/* virtual */ void SetVolume(byte vol);
+};
+
+class FMusicDriver_LibTimidity: public MusicDriverFactory<FMusicDriver_LibTimidity> {
+public:
+	static const int priority = 5;
+	/* virtual */ const char *GetName() { return "libtimidity"; }
+	/* virtual */ const char *GetDescription() { return "LibTimidity MIDI Driver"; }
+	/* virtual */ Driver *CreateInstance() { return new MusicDriver_LibTimidity(); }
+};
 
 #endif /* MUSIC_LIBTIMIDITY_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/music/music_driver.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,35 @@
+/* $Id$ */
+
+#ifndef MUSIC_MUSIC_DRIVER_HPP
+#define MUSIC_MUSIC_DRIVER_HPP
+
+#include "../driver.h"
+
+class MusicDriver: public Driver {
+public:
+	virtual void PlaySong(const char *filename) = 0;
+
+	virtual void StopSong() = 0;
+
+	virtual bool IsSongPlaying() = 0;
+
+	virtual void SetVolume(byte vol) = 0;
+};
+
+class MusicDriverFactoryBase: public DriverFactoryBase {
+};
+
+template <class T>
+class MusicDriverFactory: public MusicDriverFactoryBase {
+public:
+	MusicDriverFactory() { this->RegisterDriver(((T *)this)->GetName(), Driver::DT_MUSIC, ((T *)this)->priority); }
+
+	/**
+	 * Get the long, human readable, name for the Driver-class.
+	 */
+	const char *GetName();
+};
+
+extern MusicDriver *_music_driver;
+
+#endif /* MUSIC_MUSIC_DRIVER_HPP */
--- a/src/music/null_m.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/music/null_m.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -3,18 +3,5 @@
 #include "../stdafx.h"
 #include "null_m.h"
 
-static const char* NullMidiStart(const char* const* parm) { return NULL; }
-static void NullMidiStop() {}
-static void NullMidiPlaySong(const char *filename) {}
-static void NullMidiStopSong() {}
-static bool NullMidiIsSongPlaying() { return true; }
-static void NullMidiSetVolume(byte vol) {}
+static FMusicDriver_Null iFMusicDriver_Null;
 
-const HalMusicDriver _null_music_driver = {
-	NullMidiStart,
-	NullMidiStop,
-	NullMidiPlaySong,
-	NullMidiStopSong,
-	NullMidiIsSongPlaying,
-	NullMidiSetVolume,
-};
--- a/src/music/null_m.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/music/null_m.h	Sat Jul 14 19:42:58 2007 +0000
@@ -3,8 +3,29 @@
 #ifndef MUSIC_NULL_H
 #define MUSIC_NULL_H
 
-#include "../hal.h"
+#include "music_driver.hpp"
 
-extern const HalMusicDriver _null_music_driver;
+class MusicDriver_Null: public MusicDriver {
+public:
+	/* virtual */ const char *Start(const char * const *param) { return NULL; }
+
+	/* virtual */ void Stop() { }
+
+	/* virtual */ void PlaySong(const char *filename) { }
+
+	/* virtual */ void StopSong() { }
+
+	/* virtual */ bool IsSongPlaying() { return true; }
+
+	/* virtual */ void SetVolume(byte vol) { }
+};
+
+class FMusicDriver_Null: public MusicDriverFactory<FMusicDriver_Null> {
+public:
+	static const int priority = 0;
+	/* virtual */ const char *GetName() { return "null"; }
+	/* virtual */ const char *GetDescription() { return "Null Music Driver"; }
+	/* virtual */ Driver *CreateInstance() { return new MusicDriver_Null(); }
+};
 
 #endif /* MUSIC_NULL_H */
--- a/src/music/os2_m.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/music/os2_m.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -30,7 +30,9 @@
 	return mciSendString(buf, NULL, 0, NULL, 0);
 }
 
-static void OS2MidiPlaySong(const char *filename)
+static FMusicDriver_OS2 iFMusicDriver_OS2;
+
+void MusicDriver_OS2::PlaySong(const char *filename)
 {
 	MidiSendCommand("close all");
 
@@ -40,38 +42,29 @@
 	MidiSendCommand("play song from 0");
 }
 
-static void OS2MidiStopSong()
+void MusicDriver_OS2::StopSong()
 {
 	MidiSendCommand("close all");
 }
 
-static void OS2MidiSetVolume(byte vol)
+void MusicDriver_OS2::SetVolume(byte vol)
 {
 	MidiSendCommand("set song audio volume %d", ((vol/127)*100));
 }
 
-static bool OS2MidiIsSongPlaying()
+bool MusicDriver_OS2::IsSongPlaying()
 {
 	char buf[16];
 	mciSendString("status song mode", buf, sizeof(buf), NULL, 0);
 	return strcmp(buf, "playing") == 0 || strcmp(buf, "seeking") == 0;
 }
 
-static const char *OS2MidiStart(const char * const *parm)
+const char *MusicDriver_OS2::Start(const char * const *parm)
 {
 	return 0;
 }
 
-static void OS2MidiStop()
+void MusicDriver_OS2::Stop()
 {
 	MidiSendCommand("close all");
 }
-
-const HalMusicDriver _os2_music_driver = {
-	OS2MidiStart,
-	OS2MidiStop,
-	OS2MidiPlaySong,
-	OS2MidiStopSong,
-	OS2MidiIsSongPlaying,
-	OS2MidiSetVolume,
-};
--- a/src/music/os2_m.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/music/os2_m.h	Sat Jul 14 19:42:58 2007 +0000
@@ -3,8 +3,29 @@
 #ifndef MUSIC_OS2_H
 #define MUSIC_OS2_H
 
-#include "../hal.h"
+#include "music_driver.hpp"
 
-extern const HalMusicDriver _os2_music_driver;
+class MusicDriver_OS2: public MusicDriver {
+public:
+	/* virtual */ const char *Start(const char * const *param);
+
+	/* virtual */ void Stop();
+
+	/* virtual */ void PlaySong(const char *filename);
+
+	/* virtual */ void StopSong();
+
+	/* virtual */ bool IsSongPlaying();
+
+	/* virtual */ void SetVolume(byte vol);
+};
+
+class FMusicDriver_OS2: public MusicDriverFactory<FMusicDriver_OS2> {
+public:
+	static const int priority = 10;
+	/* virtual */ const char *GetName() { return "os2"; }
+	/* virtual */ const char *GetDescription() { return "OS/2 Music Driver"; }
+	/* virtual */ Driver *CreateInstance() { return new MusicDriver_OS2(); }
+};
 
 #endif /* MUSIC_OS2_H */
--- a/src/music/qtmidi.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/music/qtmidi.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -47,6 +47,8 @@
 // we need to include debug.h after CoreServices because defining DEBUG will break CoreServices in OSX 10.2
 #include "../debug.h"
 
+static FMusicDriver_QtMidi iFMusicDriver_QtMidi;
+
 
 enum {
 	midiType = 'Midi' /**< OSType code for MIDI songs. */
@@ -207,9 +209,6 @@
 #define VOLUME  ((short)((0x00FF & _quicktime_volume) << 1))
 
 
-static void StopSong();
-
-
 /**
  * Initialized the MIDI player, including QuickTime initialization.
  *
@@ -217,7 +216,7 @@
  * @c Gestalt() and @c EnterMovies(). Needs changes in
  * #InitQuickTimeIfNeeded.
  */
-static const char* StartDriver(const char * const *parm)
+const char *MusicDriver_QtMidi::Start(const char * const *parm)
 {
 	InitQuickTimeIfNeeded();
 	return (_quicktime_started) ? NULL : "can't initialize QuickTime";
@@ -230,7 +229,7 @@
  * This function is called at regular intervals from OpenTTD's main loop, so
  * we call @c MoviesTask() from here to let QuickTime do its work.
  */
-static bool SongIsPlaying()
+bool MusicDriver_QtMidi::IsSongPlaying()
 {
 	if (!_quicktime_started) return true;
 
@@ -258,7 +257,7 @@
  * Stops playing and frees any used resources before returning. As it
  * deinitilizes QuickTime, the #_quicktime_started flag is set to @c false.
  */
-static void StopDriver()
+void MusicDriver_QtMidi::Stop()
 {
 	if (!_quicktime_started) return;
 
@@ -284,7 +283,7 @@
  *
  * @param filename Path to a MIDI file.
  */
-static void PlaySong(const char *filename)
+void MusicDriver_QtMidi::PlaySong(const char *filename)
 {
 	if (!_quicktime_started) return;
 
@@ -312,7 +311,7 @@
 /**
  * Stops playing the current song, if the player is active.
  */
-static void StopSong()
+void MusicDriver_QtMidi::StopSong()
 {
 	if (!_quicktime_started) return;
 
@@ -340,7 +339,7 @@
  *
  * @param vol The desired volume, range of the value is @c 0-127
  */
-static void SetVolume(byte vol)
+void MusicDriver_QtMidi::SetVolume(byte vol)
 {
 	if (!_quicktime_started) return;
 
@@ -357,15 +356,3 @@
 	}
 }
 
-
-/**
- * Table of callbacks that implement the QuickTime MIDI player.
- */
-const HalMusicDriver _qtime_music_driver = {
-	StartDriver,
-	StopDriver,
-	PlaySong,
-	StopSong,
-	SongIsPlaying,
-	SetVolume,
-};
--- a/src/music/qtmidi.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/music/qtmidi.h	Sat Jul 14 19:42:58 2007 +0000
@@ -3,8 +3,29 @@
 #ifndef MUSIC_MACOSX_QUICKTIME_H
 #define MUSIC_MACOSX_QUICKTIME_H
 
-#include "../hal.h"
+#include "music_driver.hpp"
 
-extern const HalMusicDriver _qtime_music_driver;
+class MusicDriver_QtMidi: public MusicDriver {
+public:
+	/* virtual */ const char *Start(const char * const *param);
+
+	/* virtual */ void Stop();
+
+	/* virtual */ void PlaySong(const char *filename);
+
+	/* virtual */ void StopSong();
+
+	/* virtual */ bool IsSongPlaying();
+
+	/* virtual */ void SetVolume(byte vol);
+};
+
+class FMusicDriver_QtMidi: public MusicDriverFactory<FMusicDriver_QtMidi> {
+public:
+	static const int priority = 10;
+	/* virtual */ const char *GetName() { return "qt"; }
+	/* virtual */ const char *GetDescription() { return "QuickTime MIDI Driver"; }
+	/* virtual */ Driver *CreateInstance() { return new MusicDriver_QtMidi(); }
+};
 
 #endif /* MUSIC_MACOSX_QUICKTIME_H */
--- a/src/music/win32_m.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/music/win32_m.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -15,7 +15,9 @@
 	char start_song[260];
 } _midi;
 
-static void Win32MidiPlaySong(const char *filename)
+static FMusicDriver_Win32 iFMusicDriver_Win32;
+
+void MusicDriver_Win32::PlaySong(const char *filename)
 {
 	strcpy(_midi.start_song, filename);
 	_midi.playing = true;
@@ -23,7 +25,7 @@
 	SetEvent(_midi.wait_obj);
 }
 
-static void Win32MidiStopSong()
+void MusicDriver_Win32::StopSong()
 {
 	if (_midi.playing) {
 		_midi.stop_song = true;
@@ -32,12 +34,12 @@
 	}
 }
 
-static bool Win32MidiIsSongPlaying()
+bool MusicDriver_Win32::IsSongPlaying()
 {
 	return _midi.playing;
 }
 
-static void Win32MidiSetVolume(byte vol)
+void MusicDriver_Win32::SetVolume(byte vol)
 {
 	_midi.new_vol = vol;
 	SetEvent(_midi.wait_obj);
@@ -118,7 +120,7 @@
 	return 0;
 }
 
-static const char *Win32MidiStart(const char * const *parm)
+const char *MusicDriver_Win32::Start(const char * const *parm)
 {
 	MIDIOUTCAPS midicaps;
 	DWORD threadId;
@@ -146,17 +148,8 @@
 	return NULL;
 }
 
-static void Win32MidiStop()
+void MusicDriver_Win32::Stop()
 {
 	_midi.terminate = true;
 	SetEvent(_midi.wait_obj);
 }
-
-const HalMusicDriver _win32_music_driver = {
-	Win32MidiStart,
-	Win32MidiStop,
-	Win32MidiPlaySong,
-	Win32MidiStopSong,
-	Win32MidiIsSongPlaying,
-	Win32MidiSetVolume,
-};
--- a/src/music/win32_m.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/music/win32_m.h	Sat Jul 14 19:42:58 2007 +0000
@@ -3,8 +3,29 @@
 #ifndef MUSIC_WIN32_H
 #define MUSIC_WIN32_H
 
-#include "../hal.h"
+#include "music_driver.hpp"
 
-extern const HalMusicDriver _win32_music_driver;
+class MusicDriver_Win32: public MusicDriver {
+public:
+	/* virtual */ const char *Start(const char * const *param);
+
+	/* virtual */ void Stop();
+
+	/* virtual */ void PlaySong(const char *filename);
+
+	/* virtual */ void StopSong();
+
+	/* virtual */ bool IsSongPlaying();
+
+	/* virtual */ void SetVolume(byte vol);
+};
+
+class FMusicDriver_Win32: public MusicDriverFactory<FMusicDriver_Win32> {
+public:
+	static const int priority = 5;
+	/* virtual */ const char *GetName() { return "win32"; }
+	/* virtual */ const char *GetDescription() { return "Win32 Music Driver"; }
+	/* virtual */ Driver *CreateInstance() { return new MusicDriver_Win32(); }
+};
 
 #endif /* MUSIC_WIN32_H */
--- a/src/music_gui.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/music_gui.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -7,13 +7,14 @@
 #include "table/strings.h"
 #include "table/sprites.h"
 #include "functions.h"
+#include "fileio.h"
 #include "window.h"
 #include "gfx.h"
 #include "sound.h"
-#include "hal.h"
 #include "macros.h"
 #include "variables.h"
 #include "music.h"
+#include "music/music_driver.hpp"
 
 static byte _music_wnd_cursong;
 static bool _song_is_active;
@@ -85,40 +86,34 @@
 
 static void MusicVolumeChanged(byte new_vol)
 {
-	_music_driver->set_volume(new_vol);
+	_music_driver->SetVolume(new_vol);
 }
 
 static void DoPlaySong()
 {
-	char filename[256];
-	snprintf(filename, sizeof(filename), "%s%s",
-		_paths.gm_dir, origin_songs_specs[_music_wnd_cursong - 1].filename);
-	_music_driver->play_song(filename);
+	char filename[MAX_PATH];
+	FioFindFullPath(filename, lengthof(filename), GM_DIR,
+			origin_songs_specs[_music_wnd_cursong - 1].filename);
+	_music_driver->PlaySong(filename);
 }
 
 static void DoStopMusic()
 {
-	_music_driver->stop_song();
+	_music_driver->StopSong();
 }
 
 static void SelectSongToPlay()
 {
 	uint i = 0;
 	uint j = 0;
-	char filename[256];
 
 	memset(_cur_playlist, 0, sizeof(_cur_playlist));
 	do {
-		if (_playlists[msf.playlist][i] != 0) {  // Don't evaluate playlist terminator
-			snprintf(filename, sizeof(filename),  "%s%s",
-				_paths.gm_dir, origin_songs_specs[(_playlists[msf.playlist][i]) - 1].filename);
-
-			/* we are now checking for the existence of that file prior
-			 * to add it to the list of available songs */
-			if (FileExists(filename)) {
-				_cur_playlist[j] = _playlists[msf.playlist][i];
-				j++;
-			}
+		/* We are now checking for the existence of that file prior
+		 * to add it to the list of available songs */
+		if (FioCheckFileExists(origin_songs_specs[_playlists[msf.playlist][i]].filename, GM_DIR)) {
+			_cur_playlist[j] = _playlists[msf.playlist][i];
+			j++;
 		}
 	} while (_playlists[msf.playlist][i++] != 0 && i < lengthof(_cur_playlist) - 1);
 
@@ -183,7 +178,7 @@
 
 	if (!_song_is_active) return;
 
-	if (!_music_driver->is_song_playing()) {
+	if (!_music_driver->IsSongPlaying()) {
 		if (_game_mode != GM_MENU) {
 			StopMusic();
 			SkipToNextSong();
--- a/src/network/core/tcp.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/network/core/tcp.h	Sat Jul 14 19:42:58 2007 +0000
@@ -68,6 +68,7 @@
 	char text[80];     ///< possible text sent for name changes etc
 	uint32 frame;      ///< the frame in which this packet is executed
 	byte callback;     ///< any callback function executed upon successful completion of the command
+	bool my_cmd;       ///< did the command originate from "me"
 };
 
 /** Status of a client */
--- a/src/network/network.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/network/network.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -37,6 +37,7 @@
 #include "../console.h" /* IConsoleCmdExec */
 #include <stdarg.h> /* va_list */
 #include "../md5.h"
+#include "../fileio.h"
 
 /* Check whether NETWORK_NUM_LANDSCAPES is still in sync with NUM_LANDSCAPE */
 assert_compile((int)NETWORK_NUM_LANDSCAPES == (int)NUM_LANDSCAPE);
@@ -195,6 +196,9 @@
 			break;
 	}
 
+#ifdef DEBUG_DUMP_COMMANDS
+	debug_dump_commands("ddc:cmsg:%d;%d;%s\n", _date, _date_fract, message);
+#endif /* DUMP_COMMANDS */
 	IConsolePrintF(color, "%s", message);
 	AddTextMessage(color, duration, "%s", message);
 }
@@ -1235,6 +1239,9 @@
 			if (_sync_seed_1 != _random_seeds[0][0]) {
 #endif
 				NetworkError(STR_NETWORK_ERR_DESYNC);
+#ifdef DEBUG_DUMP_COMMANDS
+				debug_dump_commands("ddc:serr:%d;%d\n", _date, _date_fract);
+#endif /* DUMP_COMMANDS */
 				DEBUG(net, 0, "Sync error detected!");
 				NetworkClientError(NETWORK_RECV_STATUS_DESYNC, DEREF_CLIENT(0));
 				return false;
@@ -1280,6 +1287,37 @@
 	if (!NetworkReceive()) return;
 
 	if (_network_server) {
+#ifdef DEBUG_DUMP_COMMANDS
+		static FILE *f = FioFOpenFile("commands.log", "rb", SAVE_DIR);
+		static Date next_date = 0;
+		static uint32 next_date_fract;
+		static CommandPacket *cp = NULL;
+		if (f == NULL && next_date == 0) {
+			printf("Cannot open commands.log\n");
+			next_date = 1;
+		}
+
+		while (f != NULL && !feof(f)) {
+			if (cp != NULL && _date == next_date && _date_fract == next_date_fract) {
+				_current_player = cp->player;
+				_cmd_text = cp->text;
+				DoCommandP(cp->tile, cp->p1, cp->p2, NULL, cp->cmd);
+				free(cp);
+				cp = NULL;
+			}
+
+			if (cp != NULL) break;
+
+			char buff[4096];
+			if (fgets(buff, lengthof(buff), f) == NULL) break;
+			if (strncmp(buff, "ddc:cmd:", 8) != 0) continue;
+			cp = MallocT<CommandPacket>(1);
+			int player;
+			sscanf(&buff[8], "%d;%d;%d;%d;%d;%d;%d;%s", &next_date, &next_date_fract, &player, &cp->tile, &cp->p1, &cp->p2, &cp->cmd, cp->text);
+			cp->player = (Owner)player;
+		}
+#endif /* DUMP_COMMANDS */
+
 		bool send_frame = false;
 
 		// We first increase the _frame_counter
@@ -1432,8 +1470,21 @@
 bool IsNetworkCompatibleVersion(const char *other)
 {
 	extern const char _openttd_revision[];
-	return strncmp(NOREV_STRING, other, NETWORK_REVISION_LENGTH - 1) == 0 ||
-			strncmp(_openttd_revision, other, NETWORK_REVISION_LENGTH - 1) == 0;
+	return strncmp(_openttd_revision, other, NETWORK_REVISION_LENGTH - 1) == 0;
 }
 
+#ifdef DEBUG_DUMP_COMMANDS
+void CDECL debug_dump_commands(const char *s, ...)
+{
+	static FILE *f = FioFOpenFile("commands-out.log", "wb", SAVE_DIR);
+	if (f == NULL) return;
+
+	va_list va;
+	va_start(va, s);
+	vfprintf(f, s, va);
+	va_end(va);
+
+	fflush(f);
+}
+#endif /* DEBUG_DUMP_COMMANDS */
 #endif /* ENABLE_NETWORK */
--- a/src/network/network.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/network/network.h	Sat Jul 14 19:42:58 2007 +0000
@@ -20,6 +20,17 @@
 //  nothing will happen.
 //#define ENABLE_NETWORK_SYNC_EVERY_FRAME
 
+/*
+ * Dumps all commands that are sent/received to stderr and saves every month.
+ * This log can become quite large over time; say in the order of two to three
+ * times the bandwidth used for network games.
+ */
+//#define DEBUG_DUMP_COMMANDS
+
+#ifdef DEBUG_DUMP_COMMANDS
+void CDECL debug_dump_commands(const char *s, ...);
+#endif /* DEBUG_DUMP_COMMANDS */
+
 // In theory sending 1 of the 2 seeds is enough to check for desyncs
 //   so in theory, this next define can be left off.
 //#define NETWORK_SEND_DOUBLE_SEED
@@ -44,9 +55,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?
@@ -76,12 +87,38 @@
 	NETWORK_JOIN_STATUS_GETTING_COMPANY_INFO,
 };
 
-// language ids for server_lang and client_lang
+/* Language ids for server_lang and client_lang. Do NOT modify the order. */
 enum NetworkLanguage {
-	NETLANG_ANY     = 0,
-	NETLANG_ENGLISH = 1,
-	NETLANG_GERMAN  = 2,
-	NETLANG_FRENCH  = 3,
+	NETLANG_ANY = 0,
+	NETLANG_ENGLISH,
+	NETLANG_GERMAN,
+	NETLANG_FRENCH,
+	NETLANG_BRAZILIAN,
+	NETLANG_BULGARIAN,
+	NETLANG_CHINESE,
+	NETLANG_CZECH,
+	NETLANG_DANISH,
+	NETLANG_DUTCH,
+	NETLANG_ESPERANTO,
+	NETLANG_FINNISH,
+	NETLANG_HUNGARIAN,
+	NETLANG_ICELANDIC,
+	NETLANG_ITALIAN,
+	NETLANG_JAPANESE,
+	NETLANG_KOREAN,
+	NETLANG_LITHUANIAN,
+	NETLANG_NORWEGIAN,
+	NETLANG_POLISH,
+	NETLANG_PORTUGUESE,
+	NETLANG_ROMANIAN,
+	NETLANG_RUSSIAN,
+	NETLANG_SLOVAK,
+	NETLANG_SLOVENIAN,
+	NETLANG_SPANISH,
+	NETLANG_SWEDISH,
+	NETLANG_TURKISH,
+	NETLANG_UKRAINIAN,
+	NETLANG_COUNT
 };
 
 VARDEF NetworkGameInfo _network_game_info;
--- a/src/network/network_client.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/network/network_client.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -21,6 +21,7 @@
 #include "../variables.h"
 #include "../ai/ai.h"
 #include "../helpers.hpp"
+#include "../fileio.h"
 
 // This file handles all the client-commands
 
@@ -269,7 +270,7 @@
 //   DEF_CLIENT_RECEIVE_COMMAND has parameter: Packet *p
 // **********
 
-extern bool SafeSaveOrLoad(const char *filename, int mode, int newgm);
+extern bool SafeSaveOrLoad(const char *filename, int mode, int newgm, Subdirectory subdir);
 
 DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_FULL)
 {
@@ -489,7 +490,6 @@
 
 DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_MAP)
 {
-	static char filename[256];
 	static FILE *file_pointer;
 
 	byte maptype;
@@ -500,10 +500,7 @@
 
 	// First packet, init some stuff
 	if (maptype == MAP_PACKET_START) {
-		// The name for the temp-map
-		snprintf(filename, lengthof(filename), "%s%snetwork_client.tmp",  _paths.autosave_dir, PATHSEP);
-
-		file_pointer = fopen(filename, "wb");
+		file_pointer = FioFOpenFile("network_client.tmp", "wb", AUTOSAVE_DIR);;
 		if (file_pointer == NULL) {
 			_switch_mode_errorstr = STR_NETWORK_ERR_SAVEGAMEERROR;
 			return NETWORK_RECV_STATUS_SAVEGAME;
@@ -545,7 +542,7 @@
 		InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
 
 		/* The map is done downloading, load it */
-		if (!SafeSaveOrLoad(filename, SL_LOAD, GM_NORMAL)) {
+		if (!SafeSaveOrLoad("network_client.tmp", SL_LOAD, GM_NORMAL, AUTOSAVE_DIR)) {
 			DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
 			_switch_mode_errorstr = STR_NETWORK_ERR_SAVEGAMEERROR;
 			return NETWORK_RECV_STATUS_SAVEGAME;
@@ -631,6 +628,7 @@
 	p->Recv_string(cp->text, sizeof(cp->text));
 	cp->callback = p->Recv_uint8();
 	cp->frame    = p->Recv_uint32();
+	cp->my_cmd   = p->Recv_bool();
 	cp->next     = NULL;
 
 	// The server did send us this command..
@@ -675,7 +673,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_data.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/network/network_data.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -30,65 +30,62 @@
 // Prepare a DoCommand to be send over the network
 void NetworkSend_Command(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback)
 {
-	CommandPacket *c = MallocT<CommandPacket>(1);
-	byte temp_callback;
+	CommandPacket c;
 
-	c->player = _local_player;
-	c->next = NULL;
-	c->tile = tile;
-	c->p1 = p1;
-	c->p2 = p2;
-	c->cmd = cmd;
-	c->callback = 0;
+	c.player = _local_player;
+	c.next   = NULL;
+	c.tile   = tile;
+	c.p1     = p1;
+	c.p2     = p2;
+	c.cmd    = cmd;
 
-	temp_callback = 0;
+	c.callback = 0;
+	while (c.callback < _callback_table_count && _callback_table[c.callback] != callback) {
+		c.callback++;
+	}
 
-	while (temp_callback < _callback_table_count && _callback_table[temp_callback] != callback)
-		temp_callback++;
-	if (temp_callback == _callback_table_count) {
+	if (c.callback == _callback_table_count) {
 		DEBUG(net, 0, "Unknown callback. (Pointer: %p) No callback sent", callback);
-		temp_callback = 0; /* _callback_table[0] == NULL */
+		c.callback = 0; // _callback_table[0] == NULL
 	}
 
+	ttd_strlcpy(c.text, (_cmd_text != NULL) ? _cmd_text : "", lengthof(c.text));
+
 	if (_network_server) {
-		// We are the server, so set the command to be executed next possible frame
-		c->frame = _frame_counter_max + 1;
-	} else {
-		c->frame = 0; // The client can't tell which frame, so just make it 0
-	}
-
-	ttd_strlcpy(c->text, (_cmd_text != NULL) ? _cmd_text : "", lengthof(c->text));
+		/* If we are the server, we queue the command in our 'special' queue.
+		 *   In theory, we could execute the command right away, but then the
+		 *   client on the server can do everything 1 tick faster than others.
+		 *   So to keep the game fair, we delay the command with 1 tick
+		 *   which gives about the same speed as most clients.
+		 */
+		c.frame = _frame_counter_max + 1;
 
-	if (_network_server) {
-		// If we are the server, we queue the command in our 'special' queue.
-		//   In theory, we could execute the command right away, but then the
-		//   client on the server can do everything 1 tick faster than others.
-		//   So to keep the game fair, we delay the command with 1 tick
-		//   which gives about the same speed as most clients.
-		NetworkTCPSocketHandler *cs;
-
-		// And we queue it for delivery to the clients
-		FOR_ALL_CLIENTS(cs) {
-			if (cs->status > STATUS_AUTH) NetworkAddCommandQueue(cs, c);
+		CommandPacket *new_cp = MallocT<CommandPacket>(1);
+		*new_cp = c;
+		new_cp->my_cmd = true;
+		if (_local_command_queue == NULL) {
+			_local_command_queue = new_cp;
+		} else {
+			/* Find last packet */
+			CommandPacket *cp = _local_command_queue;
+			while (cp->next != NULL) cp = cp->next;
+			cp->next = new_cp;
 		}
 
-		// Only the server gets the callback, because clients should not get them
-		c->callback = temp_callback;
-		if (_local_command_queue == NULL) {
-			_local_command_queue = c;
-		} else {
-			// Find last packet
-			CommandPacket *cp = _local_command_queue;
-			while (cp->next != NULL) cp = cp->next;
-			cp->next = c;
+		/* Only the local client (in this case, the server) gets the callback */
+		c.callback = 0;
+		/* And we queue it for delivery to the clients */
+		NetworkTCPSocketHandler *cs;
+		FOR_ALL_CLIENTS(cs) {
+			if (cs->status > STATUS_AUTH) NetworkAddCommandQueue(cs, &c);
 		}
-
 		return;
 	}
 
-	// Clients send their command to the server and forget all about the packet
-	c->callback = temp_callback;
-	SEND_COMMAND(PACKET_CLIENT_COMMAND)(c);
+	c.frame = 0; // The client can't tell which frame, so just make it 0
+
+	/* Clients send their command to the server and forget all about the packet */
+	SEND_COMMAND(PACKET_CLIENT_COMMAND)(&c);
 }
 
 // Execute a DoCommand we received from the network
@@ -101,7 +98,12 @@
 		DEBUG(net, 0, "Received out-of-bounds callback (%d)", cp->callback);
 		cp->callback = 0;
 	}
-	DoCommandP(cp->tile, cp->p1, cp->p2, _callback_table[cp->callback], cp->cmd | CMD_NETWORK_COMMAND);
+
+#ifdef DEBUG_DUMP_COMMANDS
+	debug_dump_commands("ddc:cmd:%d;%d;%d;%d;%d;%d;%d;%s\n", _date, _date_fract, (int)cp->player, cp->tile, cp->p1, cp->p2, cp->cmd, cp->text);
+#endif /* DUMP_COMMANDS */
+
+	DoCommandP(cp->tile, cp->p1, cp->p2, _callback_table[cp->callback], cp->cmd | CMD_NETWORK_COMMAND, cp->my_cmd);
 }
 
 #endif /* ENABLE_NETWORK */
--- a/src/network/network_data.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/network/network_data.h	Sat Jul 14 19:42:58 2007 +0000
@@ -3,11 +3,12 @@
 #ifndef NETWORK_DATA_H
 #define NETWORK_DATA_H
 
+#include "../openttd.h"
+#include "network.h"
+
 // Is the network enabled?
 #ifdef ENABLE_NETWORK
 
-#include "../openttd.h"
-#include "network.h"
 #include "core/os_abstraction.h"
 #include "core/core.h"
 #include "core/config.h"
--- a/src/network/network_gui.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/network/network_gui.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -84,72 +84,19 @@
 	STR_NETWORK_10_PLAYERS,
 	INVALID_STRING_ID
 };
-/* The strings are in alphabetical order (in English). */
-static const StringID _language_dropdown[] = {
-	STR_NETWORK_LANG_ANY,
-	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_ENGLISH,
-	STR_NETWORK_LANG_ESPERANTO,
-	STR_NETWORK_LANG_FINNISH,
-	STR_NETWORK_LANG_FRENCH,
-	STR_NETWORK_LANG_GERMAN,
-	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,
-	INVALID_STRING_ID
-};
 
-/* Used to map the _server_lang value to the sorted string. */
-static const int _server_lang_to_string[] = {
-	 0, // Any
-	 7, // English
-	11, // German
-	10, // French
-	 1, // Brazilian
-	 2, // Bulgarian
-	 3, // Chinese
-	 4, // Czech
-	 5, // Danish
-	 6, // Dutch
-	 8, // Esperanto
-	 9, // Finnish
-	12, // Hungarian
-	13, // Icelandic
-	14, // Italian
-	15, // Japanese
-	16, // Korean
-	17, // Lithuanian
-	18, // Norwegian
-	19, // Polish
-	20, // Portuguese
-	21, // Romanian
-	22, // Russian
-	23, // Slovak
-	24, // Slovenian
-	25, // Spanish
-	26, // Swedish
-	27, // Turkish
-	28, // Ukrainian
-};
+static StringID _language_dropdown[NETLANG_COUNT + 1] = {STR_NULL};
+
+void SortNetworkLanguages() {
+	/* Init the strings */
+	if (_language_dropdown[0] == STR_NULL) {
+		for (int i = 0; i < NETLANG_COUNT; i++) _language_dropdown[i] = STR_NETWORK_LANG_ANY + i;
+		_language_dropdown[NETLANG_COUNT] = INVALID_STRING_ID;
+	}
+
+	/* Sort the strings (we don't move 'any' and the 'invalid' one) */
+	qsort(&_language_dropdown[1], NETLANG_COUNT - 1, sizeof(StringID), &StringIDSorter);
+}
 
 enum {
 	NET_PRC__OFFSET_TOP_WIDGET          = 54,
@@ -400,7 +347,7 @@
 			DrawString(x, y, STR_NETWORK_CLIENTS, 2);
 			y += 10;
 
-			SetDParam(0, _language_dropdown[_server_lang_to_string[sel->info.server_lang]]);
+			SetDParam(0, STR_NETWORK_LANG_ANY + sel->info.server_lang);
 			DrawString(x, y, STR_NETWORK_LANGUAGE, 2); // server language
 			y += 10;
 
@@ -667,7 +614,7 @@
 		SetDParam( 9, _players_dropdown[_network_game_info.clients_max]);
 		SetDParam(11, _players_dropdown[_network_game_info.companies_max]);
 		SetDParam(13, _players_dropdown[_network_game_info.spectators_max]);
-		SetDParam(15, _language_dropdown[_server_lang_to_string[_network_game_info.server_lang]]);
+		SetDParam(15, STR_NETWORK_LANG_ANY + _network_game_info.server_lang);
 		DrawWindowWidgets(w);
 
 		GfxFillRect(11, 63, 258, 215, 0xD7);
@@ -737,9 +684,17 @@
 		case 13: case 14: /* Number of Spectators */
 			ShowDropDownMenu(w, _players_dropdown, _network_game_info.spectators_max, 14, 0, 0);
 			break;
-		case 15: case 16: /* Language */
-			ShowDropDownMenu(w, _language_dropdown, _server_lang_to_string[_network_game_info.server_lang], 16, 0, 0);
+		case 15: case 16: { /* Language */
+			uint sel = 0;
+			for (uint i = 0; i < lengthof(_language_dropdown) - 1; i++) {
+				if (_language_dropdown[i] == STR_NETWORK_LANG_ANY + _network_game_info.server_lang) {
+					sel = i;
+					break;
+				}
+			}
+			ShowDropDownMenu(w, _language_dropdown, sel, 16, 0, 0);
 			break;
+		}
 		case 17: /* Start game */
 			_is_network_server = true;
 
@@ -774,11 +729,7 @@
 			case 12: _network_game_info.companies_max  = e->we.dropdown.index;        break;
 			case 14: _network_game_info.spectators_max = e->we.dropdown.index;        break;
 			case 16:
-				for (uint i = 0; i < lengthof(_server_lang_to_string); i++) {
-					if (_server_lang_to_string[i] == e->we.dropdown.index) {
-						_network_game_info.server_lang = i;
-					}
-				}
+				_network_game_info.server_lang = _language_dropdown[e->we.dropdown.index] - STR_NETWORK_LANG_ANY;
 				break;
 		}
 
@@ -794,7 +745,6 @@
 			if (HandleEditBoxKey(w, &WP(w, network_ql_d).q, 3, e) == 1) break; // enter pressed
 
 			ttd_strlcpy(_network_server_name, WP(w, network_ql_d).q.text.buf, sizeof(_network_server_name));
-			UpdateTextBufferSize(&WP(w, network_ql_d).q.text);
 		}
 		break;
 
@@ -943,15 +893,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;
 
@@ -1096,7 +1046,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},
@@ -1110,7 +1061,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
 };
@@ -1206,7 +1157,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;
@@ -1568,8 +1519,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/network/network_server.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -24,6 +24,7 @@
 #include "../variables.h"
 #include "../genworld.h"
 #include "../helpers.hpp"
+#include "../fileio.h"
 
 // This file handles all the server-commands
 
@@ -195,11 +196,13 @@
 	const GRFConfig *c;
 	uint grf_count = 0;
 
-	for (c = _grfconfig; c != NULL; c = c->next) grf_count++;
+	for (c = _grfconfig; c != NULL; c = c->next) {
+		if (!HASBIT(c->flags, GCF_STATIC)) grf_count++;
+	}
 
 	p->Send_uint8 (grf_count);
 	for (c = _grfconfig; c != NULL; c = c->next) {
-		cs->Send_GRFIdentifier(p, c);
+		if (!HASBIT(c->flags, GCF_STATIC)) cs->Send_GRFIdentifier(p, c);
 	}
 
 	cs->Send_Packet(p);
@@ -307,14 +310,13 @@
 	}
 
 	if (cs->status == STATUS_AUTH) {
-		char filename[256];
+		const char *filename = "network_server.tmp";
 		Packet *p;
 
 		// Make a dump of the current game
-		snprintf(filename, lengthof(filename), "%s%snetwork_server.tmp",  _paths.autosave_dir, PATHSEP);
-		if (SaveOrLoad(filename, SL_SAVE) != SL_OK) error("network savedump failed");
+		if (SaveOrLoad(filename, SL_SAVE, AUTOSAVE_DIR) != SL_OK) error("network savedump failed");
 
-		file_pointer = fopen(filename, "rb");
+		file_pointer = FioFOpenFile(filename, "rb", AUTOSAVE_DIR);
 		fseek(file_pointer, 0, SEEK_END);
 
 		if (ftell(file_pointer) == 0) error("network savedump failed - zero sized savegame?");
@@ -489,6 +491,7 @@
 	p->Send_string(cp->text);
 	p->Send_uint8 (cp->callback);
 	p->Send_uint32(cp->frame);
+	p->Send_bool  (cp->my_cmd);
 
 	cs->Send_Packet(p);
 }
@@ -832,8 +835,6 @@
 	const NetworkClientInfo *ci;
 	byte callback;
 
-	CommandPacket *cp = MallocT<CommandPacket>(1);
-
 	// The client was never joined.. so this is impossible, right?
 	//  Ignore the packet, give the client a warning, and close his connection
 	if (cs->status < STATUS_DONE_MAP || cs->has_quit) {
@@ -841,6 +842,7 @@
 		return;
 	}
 
+	CommandPacket *cp = MallocT<CommandPacket>(1);
 	cp->player = (Owner)p->Recv_uint8();
 	cp->cmd    = p->Recv_uint32();
 	cp->p1     = p->Recv_uint32();
@@ -850,7 +852,10 @@
 
 	callback = p->Recv_uint8();
 
-	if (cs->has_quit) return;
+	if (cs->has_quit) {
+		free(cp);
+		return;
+	}
 
 	ci = DEREF_CLIENT_INFO(cs);
 
@@ -858,11 +863,13 @@
 	if (!IsValidCommand(cp->cmd)) {
 		IConsolePrintF(_icolour_err, "WARNING: invalid command from client %d (IP: %s).", ci->client_index, GetPlayerIP(ci));
 		SEND_COMMAND(PACKET_SERVER_ERROR)(cs, NETWORK_ERROR_NOT_EXPECTED);
+		free(cp);
 		return;
 	}
 
 	if (!CheckCommandFlags(cp, ci)) {
 		SEND_COMMAND(PACKET_SERVER_ERROR)(cs, NETWORK_ERROR_KICKED);
+		free(cp);
 		return;
 	}
 
@@ -874,6 +881,7 @@
 		IConsolePrintF(_icolour_err, "WARNING: player %d (IP: %s) tried to execute a command as player %d, kicking...",
 		               ci->client_playas + 1, GetPlayerIP(ci), cp->player + 1);
 		SEND_COMMAND(PACKET_SERVER_ERROR)(cs, NETWORK_ERROR_PLAYER_MISMATCH);
+		free(cp);
 		return;
 	}
 
@@ -885,6 +893,7 @@
 	if (cp->cmd == CMD_PLAYER_CTRL) {
 		if (cp->p1 != 0) {
 			SEND_COMMAND(PACKET_SERVER_ERROR)(cs, NETWORK_ERROR_CHEATER);
+			free(cp);
 			return;
 		}
 
@@ -907,11 +916,13 @@
 			// Callbacks are only send back to the client who sent them in the
 			//  first place. This filters that out.
 			cp->callback = (new_cs != cs) ? 0 : callback;
+			cp->my_cmd = (new_cs == cs);
 			NetworkAddCommandQueue(new_cs, cp);
 		}
 	}
 
 	cp->callback = 0;
+	cp->my_cmd = false;
 	// Queue the command on the server
 	if (_local_command_queue == NULL) {
 		_local_command_queue = cp;
@@ -1084,7 +1095,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 {
@@ -1253,9 +1265,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) {
@@ -1272,7 +1283,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/network/network_udp.cpp	Sat Jul 14 19:42: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]);
@@ -289,7 +289,7 @@
 
 		for (c = item->info.grfconfig; c != NULL; c = c->next) {
 			if (c->status == GCS_NOT_FOUND) item->info.compatible = false;
-			if (c->status == GCS_NOT_FOUND || strcmp(c->name, UNKNOWN_GRF_NAME_PLACEHOLDER) != 0) continue;
+ 			if (c->status != GCS_NOT_FOUND || strcmp(c->name, UNKNOWN_GRF_NAME_PLACEHOLDER) != 0) continue;
 			in_request[in_request_count] = c;
 			in_request_count++;
 		}
@@ -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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/newgrf.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -18,6 +18,7 @@
 #include "newgrf.h"
 #include "variables.h"
 #include "string.h"
+#include "strings.h"
 #include "table/strings.h"
 #include "bridge.h"
 #include "town.h"
@@ -40,7 +41,10 @@
 #include "cargotype.h"
 #include "industry.h"
 #include "newgrf_canal.h"
+#include "table/build_industry.h"
 #include "newgrf_commons.h"
+#include "newgrf_townname.h"
+#include "newgrf_industries.h"
 
 /* TTDPatch extended GRF format codec
  * (c) Petr Baudis 2004 (GPL'd)
@@ -75,7 +79,7 @@
 static byte *_preload_sprite = NULL;
 
 /* Indicates which are the newgrf features currently loaded ingame */
-uint8 _loaded_newgrf_features;
+GRFLoadedFeatures _loaded_newgrf_features;
 
 enum GrfDataType {
 	GDT_SOUND,
@@ -283,8 +287,6 @@
 
 typedef bool (*VCI_Handler)(uint engine, int numinfo, int prop, byte **buf, int len);
 
-#define FOR_EACH_OBJECT for (i = 0; i < numinfo; i++)
-
 static void dewagonize(int condition, int engine)
 {
 	EngineInfo *ei = &_engine_info[engine];
@@ -302,153 +304,138 @@
 
 static bool RailVehicleChangeInfo(uint engine, int numinfo, int prop, byte **bufp, int len)
 {
-	EngineInfo *ei = &_engine_info[engine];
-	RailVehicleInfo *rvi = &_rail_vehicle_info[engine];
 	byte *buf = *bufp;
-	int i;
 	bool ret = false;
 
-	switch (prop) {
-		case 0x05: // Track type
-			FOR_EACH_OBJECT {
+	for (int i = 0; i < numinfo; i++) {
+		EngineInfo *ei       = &_engine_info[engine + i];
+		RailVehicleInfo *rvi = &_rail_vehicle_info[engine + i];
+
+		switch (prop) {
+			case 0x05: { // Track type
 				uint8 tracktype = grf_load_byte(&buf);
 
 				switch (tracktype) {
-					case 0: rvi[i].railtype = rvi[i].engclass >= 2 ? RAILTYPE_ELECTRIC : RAILTYPE_RAIL; break;
-					case 1: rvi[i].railtype = RAILTYPE_MONO; break;
-					case 2: rvi[i].railtype = RAILTYPE_MAGLEV; break;
+					case 0: rvi->railtype = rvi->engclass >= 2 ? RAILTYPE_ELECTRIC : RAILTYPE_RAIL; break;
+					case 1: rvi->railtype = RAILTYPE_MONO; break;
+					case 2: rvi->railtype = RAILTYPE_MAGLEV; break;
 					default:
 						grfmsg(1, "RailVehicleChangeInfo: Invalid track type %d specified, ignoring", tracktype);
 						break;
 				}
-			}
-			break;
-
-		case 0x08: // AI passenger service
-			/* @todo missing feature */
-			FOR_EACH_OBJECT grf_load_byte(&buf);
-			ret = true;
-			break;
-
-		case 0x09: // Speed (1 unit is 1 kmh)
-			FOR_EACH_OBJECT {
+			} break;
+
+			case 0x08: // AI passenger service
+				/** @todo Tells the AI that this engine is designed for
+				 * passenger services and shouldn't be used for freight. */
+				grf_load_byte(&buf);
+				ret = true;
+				break;
+
+			case 0x09: { // Speed (1 unit is 1 kmh)
 				uint16 speed = grf_load_word(&buf);
 				if (speed == 0xFFFF) speed = 0;
 
-				rvi[i].max_speed = speed;
-			}
-			break;
-
-		case 0x0B: // Power
-			FOR_EACH_OBJECT {
+				rvi->max_speed = speed;
+			} break;
+
+			case 0x0B: { // Power
 				uint16 power = grf_load_word(&buf);
 
-				if (rvi[i].railveh_type == RAILVEH_MULTIHEAD) power /= 2;
-
-				rvi[i].power = power;
+				if (rvi->railveh_type == RAILVEH_MULTIHEAD) power /= 2;
+
+				rvi->power = power;
 				dewagonize(power, engine + i);
-			}
-			break;
-
-		case 0x0D: // Running cost factor
-			FOR_EACH_OBJECT {
+			} break;
+
+			case 0x0D: { // Running cost factor
 				uint8 runcostfact = grf_load_byte(&buf);
 
-				if (rvi[i].railveh_type == RAILVEH_MULTIHEAD) runcostfact /= 2;
-
-				rvi[i].running_cost_base = runcostfact;
-			}
-			break;
-
-		case 0x0E: // Running cost base
-			FOR_EACH_OBJECT {
+				if (rvi->railveh_type == RAILVEH_MULTIHEAD) runcostfact /= 2;
+
+				rvi->running_cost_base = runcostfact;
+			} break;
+
+			case 0x0E: { // Running cost base
 				uint32 base = grf_load_dword(&buf);
 
 				switch (base) {
-					case 0x4C30: rvi[i].running_cost_class = 0; break;
-					case 0x4C36: rvi[i].running_cost_class = 1; break;
-					case 0x4C3C: rvi[i].running_cost_class = 2; break;
+					case 0x4C30: rvi->running_cost_class = 0; break;
+					case 0x4C36: rvi->running_cost_class = 1; break;
+					case 0x4C3C: rvi->running_cost_class = 2; break;
 					case 0: break; // Used by wagons
 					default:
 						grfmsg(1, "RailVehicleChangeInfo: Unsupported running cost base 0x%04X, ignoring", base);
 						break;
 				}
-			}
-			break;
-
-		case 0x12: // Sprite ID
-			FOR_EACH_OBJECT {
+			} break;
+
+			case 0x12: { // Sprite ID
 				uint8 spriteid = grf_load_byte(&buf);
 
 				/* TTD sprite IDs point to a location in a 16bit array, but we use it
 				 * as an array index, so we need it to be half the original value. */
 				if (spriteid < 0xFD) spriteid >>= 1;
 
-				rvi[i].image_index = spriteid;
-			}
-			break;
-
-		case 0x13: // Dual-headed
-			FOR_EACH_OBJECT {
+				rvi->image_index = spriteid;
+			} break;
+
+			case 0x13: { // Dual-headed
 				uint8 dual = grf_load_byte(&buf);
 
 				if (dual != 0) {
-					if (rvi[i].railveh_type != RAILVEH_MULTIHEAD) {
+					if (rvi->railveh_type != RAILVEH_MULTIHEAD) {
 						// adjust power and running cost if needed
-						rvi[i].power /= 2;
-						rvi[i].running_cost_base /= 2;
+						rvi->power /= 2;
+						rvi->running_cost_base /= 2;
 					}
-					rvi[i].railveh_type = RAILVEH_MULTIHEAD;
+					rvi->railveh_type = RAILVEH_MULTIHEAD;
 				} else {
-					if (rvi[i].railveh_type == RAILVEH_MULTIHEAD) {
+					if (rvi->railveh_type == RAILVEH_MULTIHEAD) {
 						// adjust power and running cost if needed
-						rvi[i].power *= 2;
-						rvi[i].running_cost_base *= 2;
+						rvi->power *= 2;
+						rvi->running_cost_base *= 2;
 					}
-					rvi[i].railveh_type = rvi[i].power == 0 ?
+					rvi->railveh_type = rvi->power == 0 ?
 						RAILVEH_WAGON : RAILVEH_SINGLEHEAD;
 				}
-			}
-			break;
-
-		case 0x14: // Cargo capacity
-			FOR_EACH_OBJECT rvi[i].capacity = grf_load_byte(&buf);
-			break;
-
-		case 0x15: // Cargo type
-			FOR_EACH_OBJECT {
+			} break;
+
+			case 0x14: // Cargo capacity
+				rvi->capacity = grf_load_byte(&buf);
+				break;
+
+			case 0x15: { // Cargo type
 				uint8 ctype = grf_load_byte(&buf);
 
 				if (ctype < NUM_CARGO && HASBIT(_cargo_mask, ctype)) {
-					rvi[i].cargo_type = ctype;
+					rvi->cargo_type = ctype;
 				} else {
-					rvi[i].cargo_type = CT_INVALID;
+					rvi->cargo_type = CT_INVALID;
 					grfmsg(2, "RailVehicleChangeInfo: Invalid cargo type %d, using first refittable", ctype);
 				}
-			}
-			break;
-
-		case 0x16: // Weight
-			FOR_EACH_OBJECT SB(rvi[i].weight, 0, 8, grf_load_byte(&buf));
-			break;
-
-		case 0x17: // Cost factor
-			FOR_EACH_OBJECT rvi[i].base_cost = grf_load_byte(&buf);
-			break;
-
-		case 0x18: // AI rank
-			FOR_EACH_OBJECT rvi[i].ai_rank = grf_load_byte(&buf);
-			break;
-
-		case 0x19: // Engine traction type
-			/* What do the individual numbers mean?
-			 * 0x00 .. 0x07: Steam
-			 * 0x08 .. 0x27: Diesel
-			 * 0x28 .. 0x31: Electric
-			 * 0x32 .. 0x37: Monorail
-			 * 0x38 .. 0x41: Maglev
-			 */
-			FOR_EACH_OBJECT {
+			} break;
+
+			case 0x16: // Weight
+				SB(rvi->weight, 0, 8, grf_load_byte(&buf));
+				break;
+
+			case 0x17: // Cost factor
+				rvi->base_cost = grf_load_byte(&buf);
+				break;
+
+			case 0x18: // AI rank
+				rvi->ai_rank = grf_load_byte(&buf);
+				break;
+
+			case 0x19: { // Engine traction type
+				/* What do the individual numbers mean?
+				 * 0x00 .. 0x07: Steam
+				 * 0x08 .. 0x27: Diesel
+				 * 0x28 .. 0x31: Electric
+				 * 0x32 .. 0x37: Monorail
+				 * 0x38 .. 0x41: Maglev
+				 */
 				uint8 traction = grf_load_byte(&buf);
 				EngineClass engclass;
 
@@ -465,15 +452,13 @@
 				} else {
 					break;
 				}
-				if (rvi[i].railtype == RAILTYPE_RAIL     && engclass >= EC_ELECTRIC) rvi[i].railtype = RAILTYPE_ELECTRIC;
-				if (rvi[i].railtype == RAILTYPE_ELECTRIC && engclass  < EC_ELECTRIC) rvi[i].railtype = RAILTYPE_RAIL;
-
-				rvi[i].engclass = engclass;
-			}
-			break;
-
-		case 0x1A: // Alter purchase list sort order
-			FOR_EACH_OBJECT {
+				if (rvi->railtype == RAILTYPE_RAIL     && engclass >= EC_ELECTRIC) rvi->railtype = RAILTYPE_ELECTRIC;
+				if (rvi->railtype == RAILTYPE_ELECTRIC && engclass  < EC_ELECTRIC) rvi->railtype = RAILTYPE_RAIL;
+
+				rvi->engclass = engclass;
+			} break;
+
+			case 0x1A: { // Alter purchase list sort order
 				EngineID pos = grf_load_byte(&buf);
 
 				if (pos < NUM_TRAIN_ENGINES) {
@@ -481,122 +466,118 @@
 				} else {
 					grfmsg(2, "RailVehicleChangeInfo: Invalid train engine ID %d, ignoring", pos);
 				}
-			}
-			break;
-
-		case 0x1B: // Powered wagons power bonus
-			FOR_EACH_OBJECT rvi[i].pow_wag_power = grf_load_word(&buf);
-			break;
-
-		case 0x1C: // Refit cost
-			FOR_EACH_OBJECT ei[i].refit_cost = grf_load_byte(&buf);
-			break;
-
-		case 0x1D: // Refit cargo
-			FOR_EACH_OBJECT ei[i].refit_mask = grf_load_dword(&buf);
-			break;
-
-		case 0x1E: // Callback
-			FOR_EACH_OBJECT ei[i].callbackmask = grf_load_byte(&buf);
-			break;
-
-		case 0x1F: // Tractive effort coefficient
-			FOR_EACH_OBJECT rvi[i].tractive_effort = grf_load_byte(&buf);
-			break;
-
-		case 0x21: // Shorter vehicle
-			FOR_EACH_OBJECT rvi[i].shorten_factor = grf_load_byte(&buf);
-			break;
-
-		case 0x22: // Visual effect
-			/* see note in engine.h about rvi->visual_effect */
-			FOR_EACH_OBJECT rvi[i].visual_effect = grf_load_byte(&buf);
-			break;
-
-		case 0x23: // Powered wagons weight bonus
-			FOR_EACH_OBJECT rvi[i].pow_wag_weight = grf_load_byte(&buf);
-			break;
-
-		case 0x24: // High byte of vehicle weight
-			FOR_EACH_OBJECT {
+			} break;
+
+			case 0x1B: // Powered wagons power bonus
+				rvi->pow_wag_power = grf_load_word(&buf);
+				break;
+
+			case 0x1C: // Refit cost
+				ei->refit_cost = grf_load_byte(&buf);
+				break;
+
+			case 0x1D: // Refit cargo
+				ei->refit_mask = grf_load_dword(&buf);
+				break;
+
+			case 0x1E: // Callback
+				ei->callbackmask = grf_load_byte(&buf);
+				break;
+
+			case 0x1F: // Tractive effort coefficient
+				rvi->tractive_effort = grf_load_byte(&buf);
+				break;
+
+			case 0x21: // Shorter vehicle
+				rvi->shorten_factor = grf_load_byte(&buf);
+				break;
+
+			case 0x22: // Visual effect
+				/** @see note in engine.h about rvi->visual_effect */
+				rvi->visual_effect = grf_load_byte(&buf);
+				break;
+
+			case 0x23: // Powered wagons weight bonus
+				rvi->pow_wag_weight = grf_load_byte(&buf);
+				break;
+
+			case 0x24: { // High byte of vehicle weight
 				byte weight = grf_load_byte(&buf);
 
 				if (weight > 4) {
 					grfmsg(2, "RailVehicleChangeInfo: Nonsensical weight of %d tons, ignoring", weight << 8);
 				} else {
-					SB(rvi[i].weight, 8, 8, weight);
+					SB(rvi->weight, 8, 8, weight);
 				}
-			}
-			break;
-
-		case 0x25: // User-defined bit mask to set when checking veh. var. 42
-			FOR_EACH_OBJECT rvi[i].user_def_data = grf_load_byte(&buf);
-			break;
-
-		case 0x26: // Retire vehicle early
-			FOR_EACH_OBJECT ei[i].retire_early = grf_load_byte(&buf);
-			break;
-
-		case 0x27: // Miscellaneous flags
-			FOR_EACH_OBJECT {
-				ei[i].misc_flags = grf_load_byte(&buf);
-				if (HASBIT(ei[i].misc_flags, EF_USES_2CC)) SETBIT(_loaded_newgrf_features, GRFLOADED_2CC);
-			}
-			break;
-
-		case 0x28: // Cargo classes allowed
-			FOR_EACH_OBJECT cargo_allowed[engine + i] = grf_load_word(&buf);
-			break;
-
-		case 0x29: // Cargo classes disallowed
-			FOR_EACH_OBJECT cargo_disallowed[engine + i] = grf_load_word(&buf);
-			break;
-
-		case 0x2A: // Long format introduction date (days since year 0)
-			FOR_EACH_OBJECT ei[i].base_intro = grf_load_dword(&buf);
-			break;
-
-		/* @todo air drag and retire vehicle early
-		 * Fall-through for unimplemented one byte long properties. */
-		case 0x20: // Air drag
-			FOR_EACH_OBJECT grf_load_byte(&buf);
-			ret = true;
-			break;
-
-		default:
-			ret = true;
-			break;
+			} break;
+
+			case 0x25: // User-defined bit mask to set when checking veh. var. 42
+				rvi->user_def_data = grf_load_byte(&buf);
+				break;
+
+			case 0x26: // Retire vehicle early
+				ei->retire_early = grf_load_byte(&buf);
+				break;
+
+			case 0x27: // Miscellaneous flags
+				ei->misc_flags = grf_load_byte(&buf);
+				_loaded_newgrf_features.has_2CC |= HASBIT(ei->misc_flags, EF_USES_2CC);
+				break;
+
+			case 0x28: // Cargo classes allowed
+				cargo_allowed[engine + i] = grf_load_word(&buf);
+				break;
+
+			case 0x29: // Cargo classes disallowed
+				cargo_disallowed[engine + i] = grf_load_word(&buf);
+				break;
+
+			case 0x2A: // Long format introduction date (days since year 0)
+				ei->base_intro = grf_load_dword(&buf);
+				break;
+
+			case 0x20: // Air drag
+				/** @todo Air drag for trains. */
+				grf_load_byte(&buf);
+				ret = true;
+				break;
+
+			default:
+				ret = true;
+				break;
+		}
 	}
+
 	*bufp = buf;
 	return ret;
 }
 
 static bool RoadVehicleChangeInfo(uint engine, int numinfo, int prop, byte **bufp, int len)
 {
-	EngineInfo *ei = &_engine_info[ROAD_ENGINES_INDEX + engine];
-	RoadVehicleInfo *rvi = &_road_vehicle_info[engine];
 	byte *buf = *bufp;
-	int i;
 	bool ret = false;
 
-	switch (prop) {
-		case 0x08: // Speed (1 unit is 0.5 kmh)
-			FOR_EACH_OBJECT rvi[i].max_speed = grf_load_byte(&buf);
-			break;
-
-		case 0x09: // Running cost factor
-			FOR_EACH_OBJECT rvi[i].running_cost = grf_load_byte(&buf);
-			break;
-
-		case 0x0A: // Running cost base
-			/* @todo : I have no idea. --pasky
-			 * I THINK it is used for overriding the base cost of all road vehicle (_price.roadveh_base) --belugas */
-			FOR_EACH_OBJECT grf_load_dword(&buf);
-			ret = true;
-			break;
-
-		case 0x0E: // Sprite ID
-			FOR_EACH_OBJECT {
+	for (int i = 0; i < numinfo; i++) {
+		EngineInfo *ei       = &_engine_info[ROAD_ENGINES_INDEX + engine + i];
+		RoadVehicleInfo *rvi = &_road_vehicle_info[engine + i];
+
+		switch (prop) {
+			case 0x08: // Speed (1 unit is 0.5 kmh)
+				rvi->max_speed = grf_load_byte(&buf);
+				break;
+
+			case 0x09: // Running cost factor
+				rvi->running_cost = grf_load_byte(&buf);
+				break;
+
+			case 0x0A: // Running cost base
+				/** @todo : I have no idea. --pasky
+				 * I THINK it is used for overriding the base cost of all road vehicle (_price.roadveh_base) --belugas */
+				grf_load_dword(&buf);
+				ret = true;
+				break;
+
+			case 0x0E: { // Sprite ID
 				uint8 spriteid = grf_load_byte(&buf);
 
 				/* cars have different custom id in the GRF file */
@@ -604,90 +585,86 @@
 
 				if (spriteid < 0xFD) spriteid >>= 1;
 
-				rvi[i].image_index = spriteid;
-			}
-			break;
-
-		case 0x0F: // Cargo capacity
-			FOR_EACH_OBJECT rvi[i].capacity = grf_load_byte(&buf);
-			break;
-
-		case 0x10: // Cargo type
-			FOR_EACH_OBJECT {
+				rvi->image_index = spriteid;
+			} break;
+
+			case 0x0F: // Cargo capacity
+				rvi->capacity = grf_load_byte(&buf);
+				break;
+
+			case 0x10: { // Cargo type
 				uint8 cargo = grf_load_byte(&buf);
 
 				if (cargo < NUM_CARGO && HASBIT(_cargo_mask, cargo)) {
-					rvi[i].cargo_type = cargo;
+					rvi->cargo_type = cargo;
 				} else {
-					rvi[i].cargo_type = CT_INVALID;
+					rvi->cargo_type = CT_INVALID;
 					grfmsg(2, "RoadVehicleChangeInfo: Invalid cargo type %d, using first refittable", cargo);
 				}
-			}
-			break;
-
-		case 0x11: // Cost factor
-			FOR_EACH_OBJECT rvi[i].base_cost = grf_load_byte(&buf); // ?? is it base_cost?
-			break;
-
-		case 0x12: // SFX
-			FOR_EACH_OBJECT rvi[i].sfx = (SoundFx)grf_load_byte(&buf);
-			break;
-
-		case 0x13: // Power in 10hp
-		case 0x14: // Weight in 1/4 tons
-		case 0x15: // Speed in mph*0.8
-			/* TODO: Support for road vehicles realistic power
-			 * computations (called rvpower in TTDPatch) is just
-			 * missing in OTTD yet. --pasky */
-			FOR_EACH_OBJECT grf_load_byte(&buf);
-			ret = true;
-			break;
-
-		case 0x16: // Cargos available for refitting
-			FOR_EACH_OBJECT ei[i].refit_mask = grf_load_dword(&buf);
-			break;
-
-		case 0x17: // Callback mask
-			FOR_EACH_OBJECT ei[i].callbackmask = grf_load_byte(&buf);
-			break;
-
-		case 0x1A: // Refit cost
-			FOR_EACH_OBJECT ei[i].refit_cost = grf_load_byte(&buf);
-			break;
-
-		case 0x1B: // Retire vehicle early
-			FOR_EACH_OBJECT ei[i].retire_early = grf_load_byte(&buf);
-			break;
-
-		case 0x1C: // Miscellaneous flags
-			FOR_EACH_OBJECT {
-				ei[i].misc_flags = grf_load_byte(&buf);
-				if (HASBIT(ei[i].misc_flags, EF_USES_2CC)) SETBIT(_loaded_newgrf_features, GRFLOADED_2CC);
-			}
-			break;
-
-		case 0x1D: // Cargo classes allowed
-			FOR_EACH_OBJECT cargo_allowed[ROAD_ENGINES_INDEX + engine + i] = grf_load_word(&buf);
-			break;
-
-		case 0x1E: // Cargo classes disallowed
-			FOR_EACH_OBJECT cargo_disallowed[ROAD_ENGINES_INDEX + engine + i] = grf_load_word(&buf);
-			break;
-
-		case 0x1F: // Long format introduction date (days since year 0)
-			FOR_EACH_OBJECT ei[i].base_intro = grf_load_dword(&buf);
-			break;
-
-		case 0x18: // Tractive effort
-		case 0x19: // Air drag
-			/* @todo */
-			FOR_EACH_OBJECT grf_load_byte(&buf);
-			ret = true;
-			break;
-
-		default:
-			ret = true;
-			break;
+			} break;
+
+			case 0x11: // Cost factor
+				rvi->base_cost = grf_load_byte(&buf); // ?? is it base_cost?
+				break;
+
+			case 0x12: // SFX
+				rvi->sfx = (SoundFx)grf_load_byte(&buf);
+				break;
+
+			case 0x13: // Power in 10hp
+			case 0x14: // Weight in 1/4 tons
+			case 0x15: // Speed in mph*0.8
+				/** @todo Support for road vehicles realistic power
+				 * computations (called rvpower in TTDPatch) is just
+				 * missing in OTTD yet. --pasky */
+				grf_load_byte(&buf);
+				ret = true;
+				break;
+
+			case 0x16: // Cargos available for refitting
+				ei->refit_mask = grf_load_dword(&buf);
+				break;
+
+			case 0x17: // Callback mask
+				ei->callbackmask = grf_load_byte(&buf);
+				break;
+
+			case 0x1A: // Refit cost
+				ei->refit_cost = grf_load_byte(&buf);
+				break;
+
+			case 0x1B: // Retire vehicle early
+				ei->retire_early = grf_load_byte(&buf);
+				break;
+
+			case 0x1C: // Miscellaneous flags
+				ei->misc_flags = grf_load_byte(&buf);
+				_loaded_newgrf_features.has_2CC |= HASBIT(ei->misc_flags, EF_USES_2CC);
+				break;
+
+			case 0x1D: // Cargo classes allowed
+				cargo_allowed[ROAD_ENGINES_INDEX + engine + i] = grf_load_word(&buf);
+				break;
+
+			case 0x1E: // Cargo classes disallowed
+				cargo_disallowed[ROAD_ENGINES_INDEX + engine + i] = grf_load_word(&buf);
+				break;
+
+			case 0x1F: // Long format introduction date (days since year 0)
+				ei->base_intro = grf_load_dword(&buf);
+				break;
+
+			case 0x18: // Tractive effort
+			case 0x19: // Air drag
+				/** @todo Tractive effort and air drag for road vehicles. */
+				grf_load_byte(&buf);
+				ret = true;
+				break;
+
+			default:
+				ret = true;
+				break;
+		}
 	}
 
 	*bufp = buf;
@@ -696,16 +673,15 @@
 
 static bool ShipVehicleChangeInfo(uint engine, int numinfo, int prop, byte **bufp, int len)
 {
-	EngineInfo *ei = &_engine_info[SHIP_ENGINES_INDEX + engine];
-	ShipVehicleInfo *svi = &_ship_vehicle_info[engine];
 	byte *buf = *bufp;
-	int i;
 	bool ret = false;
 
-	//printf("e %x prop %x?\n", engine, prop);
-	switch (prop) {
-		case 0x08: // Sprite ID
-			FOR_EACH_OBJECT {
+	for (int i = 0; i < numinfo; i++) {
+		EngineInfo *ei       = &_engine_info[SHIP_ENGINES_INDEX + engine + i];
+		ShipVehicleInfo *svi = &_ship_vehicle_info[engine + i];
+
+		switch (prop) {
+			case 0x08: { // Sprite ID
 				uint8 spriteid = grf_load_byte(&buf);
 
 				/* ships have different custom id in the GRF file */
@@ -713,92 +689,88 @@
 
 				if (spriteid < 0xFD) spriteid >>= 1;
 
-				svi[i].image_index = spriteid;
-			}
-			break;
-
-		case 0x09: // Refittable
-			FOR_EACH_OBJECT svi[i].refittable = (grf_load_byte(&buf) != 0);
-			break;
-
-		case 0x0A: // Cost factor
-			FOR_EACH_OBJECT svi[i].base_cost = grf_load_byte(&buf); // ?? is it base_cost?
-			break;
-
-		case 0x0B: // Speed (1 unit is 0.5 kmh)
-			FOR_EACH_OBJECT svi[i].max_speed = grf_load_byte(&buf);
-			break;
-
-		case 0x0C: // Cargo type
-			FOR_EACH_OBJECT {
+				svi->image_index = spriteid;
+			} break;
+
+			case 0x09: // Refittable
+				svi->refittable = (grf_load_byte(&buf) != 0);
+				break;
+
+			case 0x0A: // Cost factor
+				svi->base_cost = grf_load_byte(&buf); // ?? is it base_cost?
+				break;
+
+			case 0x0B: // Speed (1 unit is 0.5 kmh)
+				svi->max_speed = grf_load_byte(&buf);
+				break;
+
+			case 0x0C: { // Cargo type
 				uint8 cargo = grf_load_byte(&buf);
 
 				if (cargo < NUM_CARGO && HASBIT(_cargo_mask, cargo)) {
-					svi[i].cargo_type = cargo;
+					svi->cargo_type = cargo;
 				} else {
-					svi[i].cargo_type = CT_INVALID;
+					svi->cargo_type = CT_INVALID;
 					grfmsg(2, "ShipVehicleChangeInfo: Invalid cargo type %d, using first refittable", cargo);
 				}
-			}
-			break;
-
-		case 0x0D: // Cargo capacity
-			FOR_EACH_OBJECT svi[i].capacity = grf_load_word(&buf);
-			break;
-
-		case 0x0F: // Running cost factor
-			FOR_EACH_OBJECT svi[i].running_cost = grf_load_byte(&buf);
-			break;
-
-		case 0x10: // SFX
-			FOR_EACH_OBJECT svi[i].sfx = (SoundFx)grf_load_byte(&buf);
-			break;
-
-		case 0x11: // Cargos available for refitting
-			FOR_EACH_OBJECT ei[i].refit_mask = grf_load_dword(&buf);
-			break;
-
-		case 0x12: // Callback mask
-			FOR_EACH_OBJECT ei[i].callbackmask = grf_load_byte(&buf);
-			break;
-
-		case 0x13: // Refit cost
-			FOR_EACH_OBJECT ei[i].refit_cost = grf_load_byte(&buf);
-			break;
-
-		case 0x16: // Retire vehicle early
-			FOR_EACH_OBJECT ei[i].retire_early = grf_load_byte(&buf);
-			break;
-
-		case 0x17: // Miscellaneous flags
-			FOR_EACH_OBJECT {
-				ei[i].misc_flags = grf_load_byte(&buf);
-				if (HASBIT(ei[i].misc_flags, EF_USES_2CC)) SETBIT(_loaded_newgrf_features, GRFLOADED_2CC);
-			}
-			break;
-
-		case 0x18: // Cargo classes allowed
-			FOR_EACH_OBJECT cargo_allowed[SHIP_ENGINES_INDEX + engine + i] = grf_load_word(&buf);
-			break;
-
-		case 0x19: // Cargo classes disallowed
-			FOR_EACH_OBJECT cargo_disallowed[SHIP_ENGINES_INDEX + engine + i] = grf_load_word(&buf);
-			break;
-
-		case 0x1A: // Long format introduction date (days since year 0)
-			FOR_EACH_OBJECT ei[i].base_intro = grf_load_dword(&buf);
-			break;
-
-		case 0x14: // Ocean speed fraction
-		case 0x15: // Canal speed fraction
-			/* @todo */
-			FOR_EACH_OBJECT grf_load_byte(&buf);
-			ret = true;
-			break;
-
-		default:
-			ret = true;
-			break;
+			} break;
+
+			case 0x0D: // Cargo capacity
+				svi->capacity = grf_load_word(&buf);
+				break;
+
+			case 0x0F: // Running cost factor
+				svi->running_cost = grf_load_byte(&buf);
+				break;
+
+			case 0x10: // SFX
+				svi->sfx = (SoundFx)grf_load_byte(&buf);
+				break;
+
+			case 0x11: // Cargos available for refitting
+				ei->refit_mask = grf_load_dword(&buf);
+				break;
+
+			case 0x12: // Callback mask
+				ei->callbackmask = grf_load_byte(&buf);
+				break;
+
+			case 0x13: // Refit cost
+				ei->refit_cost = grf_load_byte(&buf);
+				break;
+
+			case 0x16: // Retire vehicle early
+				ei->retire_early = grf_load_byte(&buf);
+				break;
+
+			case 0x17: // Miscellaneous flags
+				ei->misc_flags = grf_load_byte(&buf);
+				_loaded_newgrf_features.has_2CC |= HASBIT(ei->misc_flags, EF_USES_2CC);
+				break;
+
+			case 0x18: // Cargo classes allowed
+				cargo_allowed[SHIP_ENGINES_INDEX + engine + i] = grf_load_word(&buf);
+				break;
+
+			case 0x19: // Cargo classes disallowed
+				cargo_disallowed[SHIP_ENGINES_INDEX + engine + i] = grf_load_word(&buf);
+				break;
+
+			case 0x1A: // Long format introduction date (days since year 0)
+				ei->base_intro = grf_load_dword(&buf);
+				break;
+
+			case 0x14: // Ocean speed fraction
+			case 0x15: // Canal speed fraction
+				/** @todo Speed fractions for ships on oceans and canals */
+				grf_load_byte(&buf);
+				ret = true;
+				break;
+
+			default:
+				ret = true;
+				break;
+		}
 	}
 
 	*bufp = buf;
@@ -807,16 +779,15 @@
 
 static bool AircraftVehicleChangeInfo(uint engine, int numinfo, int prop, byte **bufp, int len)
 {
-	EngineInfo *ei = &_engine_info[AIRCRAFT_ENGINES_INDEX + engine];
-	AircraftVehicleInfo *avi = &_aircraft_vehicle_info[engine];
 	byte *buf = *bufp;
-	int i;
 	bool ret = false;
 
-	//printf("e %x prop %x?\n", engine, prop);
-	switch (prop) {
-		case 0x08: // Sprite ID
-			FOR_EACH_OBJECT {
+	for (int i = 0; i < numinfo; i++) {
+		EngineInfo *ei           = &_engine_info[AIRCRAFT_ENGINES_INDEX + engine + i];
+		AircraftVehicleInfo *avi = &_aircraft_vehicle_info[engine + i];
+
+		switch (prop) {
+			case 0x08: { // Sprite ID
 				uint8 spriteid = grf_load_byte(&buf);
 
 				/* aircraft have different custom id in the GRF file */
@@ -824,90 +795,86 @@
 
 				if (spriteid < 0xFD) spriteid >>= 1;
 
-				avi[i].image_index = spriteid;
-			}
-			break;
-
-		case 0x09: // Helicopter
-			FOR_EACH_OBJECT {
+				avi->image_index = spriteid;
+			} break;
+
+			case 0x09: // Helicopter
 				if (grf_load_byte(&buf) == 0) {
-					avi[i].subtype = AIR_HELI;
+					avi->subtype = AIR_HELI;
 				} else {
-					SB(avi[i].subtype, 0, 1, 1); // AIR_CTOL
+					SB(avi->subtype, 0, 1, 1); // AIR_CTOL
 				}
-			}
-			break;
-
-		case 0x0A: // Large
-			FOR_EACH_OBJECT SB(avi[i].subtype, 1, 1, (grf_load_byte(&buf) != 0 ? 1 : 0)); // AIR_FAST
-			break;
-
-		case 0x0B: // Cost factor
-			FOR_EACH_OBJECT avi[i].base_cost = grf_load_byte(&buf); // ?? is it base_cost?
-			break;
-
-		case 0x0C: // Speed (1 unit is 8 mph, we translate to 1 unit is 1 km/h)
-			FOR_EACH_OBJECT avi[i].max_speed = (grf_load_byte(&buf) * 129) / 10;
-			break;
-
-		case 0x0D: // Acceleration
-			FOR_EACH_OBJECT avi[i].acceleration = (grf_load_byte(&buf) * 129) / 10;
-			break;
-
-		case 0x0E: // Running cost factor
-			FOR_EACH_OBJECT avi[i].running_cost = grf_load_byte(&buf);
-			break;
-
-		case 0x0F: // Passenger capacity
-			FOR_EACH_OBJECT avi[i].passenger_capacity = grf_load_word(&buf);
-			break;
-
-		case 0x11: // Mail capacity
-			FOR_EACH_OBJECT avi[i].mail_capacity = grf_load_byte(&buf);
-			break;
-
-		case 0x12: // SFX
-			FOR_EACH_OBJECT avi[i].sfx = (SoundFx)grf_load_byte(&buf);
-			break;
-
-		case 0x13: // Cargos available for refitting
-			FOR_EACH_OBJECT ei[i].refit_mask = grf_load_dword(&buf);
-			break;
-
-		case 0x14: // Callback mask
-			FOR_EACH_OBJECT ei[i].callbackmask = grf_load_byte(&buf);
-			break;
-
-		case 0x15: // Refit cost
-			FOR_EACH_OBJECT ei[i].refit_cost = grf_load_byte(&buf);
-			break;
-
-		case 0x16: // Retire vehicle early
-			FOR_EACH_OBJECT ei[i].retire_early = grf_load_byte(&buf);
-			break;
-
-		case 0x17: // Miscellaneous flags
-			FOR_EACH_OBJECT {
-				ei[i].misc_flags = grf_load_byte(&buf);
-				if (HASBIT(ei[i].misc_flags, EF_USES_2CC)) SETBIT(_loaded_newgrf_features, GRFLOADED_2CC);
-			}
-			break;
-
-		case 0x18: // Cargo classes allowed
-			FOR_EACH_OBJECT cargo_allowed[AIRCRAFT_ENGINES_INDEX + engine + i] = grf_load_word(&buf);
-			break;
-
-		case 0x19: // Cargo classes disallowed
-			FOR_EACH_OBJECT cargo_disallowed[AIRCRAFT_ENGINES_INDEX + engine + i] = grf_load_word(&buf);
-			break;
-
-		case 0x1A: // Long format introduction date (days since year 0)
-			FOR_EACH_OBJECT ei[i].base_intro = grf_load_dword(&buf);
-			break;
-
-		default:
-			ret = true;
-			break;
+				break;
+
+			case 0x0A: // Large
+				SB(avi->subtype, 1, 1, (grf_load_byte(&buf) != 0 ? 1 : 0)); // AIR_FAST
+				break;
+
+			case 0x0B: // Cost factor
+				avi->base_cost = grf_load_byte(&buf); // ?? is it base_cost?
+				break;
+
+			case 0x0C: // Speed (1 unit is 8 mph, we translate to 1 unit is 1 km/h)
+				avi->max_speed = (grf_load_byte(&buf) * 129) / 10;
+				break;
+
+			case 0x0D: // Acceleration
+				avi->acceleration = (grf_load_byte(&buf) * 129) / 10;
+				break;
+
+			case 0x0E: // Running cost factor
+				avi->running_cost = grf_load_byte(&buf);
+				break;
+
+			case 0x0F: // Passenger capacity
+				avi->passenger_capacity = grf_load_word(&buf);
+				break;
+
+			case 0x11: // Mail capacity
+				avi->mail_capacity = grf_load_byte(&buf);
+				break;
+
+			case 0x12: // SFX
+				avi->sfx = (SoundFx)grf_load_byte(&buf);
+				break;
+
+			case 0x13: // Cargos available for refitting
+				ei->refit_mask = grf_load_dword(&buf);
+				break;
+
+			case 0x14: // Callback mask
+				ei->callbackmask = grf_load_byte(&buf);
+				break;
+
+			case 0x15: // Refit cost
+				ei->refit_cost = grf_load_byte(&buf);
+				break;
+
+			case 0x16: // Retire vehicle early
+				ei->retire_early = grf_load_byte(&buf);
+				break;
+
+			case 0x17: // Miscellaneous flags
+				ei->misc_flags = grf_load_byte(&buf);
+				_loaded_newgrf_features.has_2CC |= HASBIT(ei->misc_flags, EF_USES_2CC);
+				break;
+
+			case 0x18: // Cargo classes allowed
+				cargo_allowed[AIRCRAFT_ENGINES_INDEX + engine + i] = grf_load_word(&buf);
+				break;
+
+			case 0x19: // Cargo classes disallowed
+				cargo_disallowed[AIRCRAFT_ENGINES_INDEX + engine + i] = grf_load_word(&buf);
+				break;
+
+			case 0x1A: // Long format introduction date (days since year 0)
+				ei->base_intro = grf_load_dword(&buf);
+				break;
+
+			default:
+				ret = true;
+				break;
+		}
 	}
 
 	*bufp = buf;
@@ -916,9 +883,7 @@
 
 static bool StationChangeInfo(uint stid, int numinfo, int prop, byte **bufp, int len)
 {
-	StationSpec **statspec;
 	byte *buf = *bufp;
-	int i;
 	bool ret = false;
 
 	if (stid + numinfo > MAX_STATIONS) {
@@ -929,34 +894,28 @@
 	/* Allocate station specs if necessary */
 	if (_cur_grffile->stations == NULL) _cur_grffile->stations = CallocT<StationSpec*>(MAX_STATIONS);
 
-	statspec = &_cur_grffile->stations[stid];
-
-	if (prop != 0x08) {
-		/* Check that all stations we are modifying are defined. */
-		FOR_EACH_OBJECT {
-			if (statspec[i] == NULL) {
-				grfmsg(2, "StationChangeInfo: Attempt to modify undefined station %u, ignoring", stid + i);
-				return false;
-			}
+	for (int i = 0; i < numinfo; i++) {
+		StationSpec *statspec = _cur_grffile->stations[stid + i];
+
+		/* Check that the station we are modifying is defined. */
+		if (statspec == NULL && prop != 0x08) {
+			grfmsg(2, "StationChangeInfo: Attempt to modify undefined station %u, ignoring", stid + i);
+			continue;
 		}
-	}
-
-	switch (prop) {
-		case 0x08: // Class ID
-			FOR_EACH_OBJECT {
+
+		switch (prop) {
+			case 0x08: { // Class ID
+				StationSpec **spec = &_cur_grffile->stations[stid + i];
+
 				/* Property 0x08 is special; it is where the station is allocated */
-				if (statspec[i] == NULL) statspec[i] = CallocT<StationSpec>(1);
+				if (*spec == NULL) *spec = CallocT<StationSpec>(1);
 
 				/* Swap classid because we read it in BE meaning WAYP or DFLT */
 				uint32 classid = grf_load_dword(&buf);
-				statspec[i]->sclass = AllocateStationClass(BSWAP32(classid));
-			}
-			break;
-
-		case 0x09: // Define sprite layout
-			FOR_EACH_OBJECT {
-				StationSpec *statspec = _cur_grffile->stations[stid + i];
-
+				(*spec)->sclass = AllocateStationClass(BSWAP32(classid));
+			} break;
+
+			case 0x09: // Define sprite layout
 				statspec->tiles = grf_load_extended(&buf);
 				statspec->renderdata = CallocT<DrawTileSprites>(statspec->tiles);
 				statspec->copied_renderdata = false;
@@ -1007,37 +966,30 @@
 						}
 					}
 				}
-			}
-			break;
-
-		case 0x0A: // Copy sprite layout
-			FOR_EACH_OBJECT {
-				StationSpec *statspec = _cur_grffile->stations[stid + i];
+				break;
+
+			case 0x0A: { // Copy sprite layout
 				byte srcid = grf_load_byte(&buf);
 				const StationSpec *srcstatspec = _cur_grffile->stations[srcid];
 
 				statspec->tiles = srcstatspec->tiles;
 				statspec->renderdata = srcstatspec->renderdata;
 				statspec->copied_renderdata = true;
-			}
-			break;
-
-		case 0x0B: // Callback mask
-			FOR_EACH_OBJECT statspec[i]->callbackmask = grf_load_byte(&buf);
-			break;
-
-		case 0x0C: // Disallowed number of platforms
-			FOR_EACH_OBJECT statspec[i]->disallowed_platforms = grf_load_byte(&buf);
-			break;
-
-		case 0x0D: // Disallowed platform lengths
-			FOR_EACH_OBJECT statspec[i]->disallowed_lengths = grf_load_byte(&buf);
-			break;
-
-		case 0x0E: // Define custom layout
-			FOR_EACH_OBJECT {
-				StationSpec *statspec = _cur_grffile->stations[stid + i];
-
+			} break;
+
+			case 0x0B: // Callback mask
+				statspec->callbackmask = grf_load_byte(&buf);
+				break;
+
+			case 0x0C: // Disallowed number of platforms
+				statspec->disallowed_platforms = grf_load_byte(&buf);
+				break;
+
+			case 0x0D: // Disallowed platform lengths
+				statspec->disallowed_lengths = grf_load_byte(&buf);
+				break;
+
+			case 0x0E: // Define custom layout
 				statspec->copied_layouts = false;
 
 				while (buf < *bufp + len) {
@@ -1084,12 +1036,9 @@
 					free(statspec->layouts[l][p]);
 					statspec->layouts[l][p] = layout;
 				}
-			}
-			break;
-
-		case 0x0F: // Copy custom layout
-			FOR_EACH_OBJECT {
-				StationSpec *statspec = _cur_grffile->stations[stid + i];
+				break;
+
+			case 0x0F: { // Copy custom layout
 				byte srcid = grf_load_byte(&buf);
 				const StationSpec *srcstatspec = _cur_grffile->stations[srcid];
 
@@ -1097,51 +1046,51 @@
 				statspec->platforms = srcstatspec->platforms;
 				statspec->layouts   = srcstatspec->layouts;
 				statspec->copied_layouts = true;
-			}
-			break;
-
-		case 0x10: // Little/lots cargo threshold
-			FOR_EACH_OBJECT statspec[i]->cargo_threshold = grf_load_word(&buf);
-			break;
-
-		case 0x11: // Pylon placement
-			FOR_EACH_OBJECT statspec[i]->pylons = grf_load_byte(&buf);
-			break;
-
-		case 0x12: // Cargo types for random triggers
-			FOR_EACH_OBJECT statspec[i]->cargo_triggers = grf_load_dword(&buf);
-			break;
-
-		case 0x13: // General flags
-			FOR_EACH_OBJECT statspec[i]->flags = grf_load_byte(&buf);
-			break;
-
-		case 0x14: // Overhead wire placement
-			FOR_EACH_OBJECT statspec[i]->wires = grf_load_byte(&buf);
-			break;
-
-		case 0x15: // Blocked tiles
-			FOR_EACH_OBJECT statspec[i]->blocked = grf_load_byte(&buf);
-			break;
-
-		case 0x16: // @todo Animation info
-			FOR_EACH_OBJECT grf_load_word(&buf);
-			ret = true;
-			break;
-
-		case 0x17: // @todo Animation speed
-			FOR_EACH_OBJECT grf_load_byte(&buf);
-			ret = true;
-			break;
-
-		case 0x18: // @todo Animation triggers
-			FOR_EACH_OBJECT grf_load_word(&buf);
-			ret = true;
-			break;
-
-		default:
-			ret = true;
-			break;
+			} break;
+
+			case 0x10: // Little/lots cargo threshold
+				statspec->cargo_threshold = grf_load_word(&buf);
+				break;
+
+			case 0x11: // Pylon placement
+				statspec->pylons = grf_load_byte(&buf);
+				break;
+
+			case 0x12: // Cargo types for random triggers
+				statspec->cargo_triggers = grf_load_dword(&buf);
+				break;
+
+			case 0x13: // General flags
+				statspec->flags = grf_load_byte(&buf);
+				break;
+
+			case 0x14: // Overhead wire placement
+				statspec->wires = grf_load_byte(&buf);
+				break;
+
+			case 0x15: // Blocked tiles
+				statspec->blocked = grf_load_byte(&buf);
+				break;
+
+			case 0x16: // @todo Animation info
+				grf_load_word(&buf);
+				ret = true;
+				break;
+
+			case 0x17: // @todo Animation speed
+				grf_load_byte(&buf);
+				ret = true;
+				break;
+
+			case 0x18: // @todo Animation triggers
+				grf_load_word(&buf);
+				ret = true;
+				break;
+
+			default:
+				ret = true;
+				break;
+		}
 	}
 
 	*bufp = buf;
@@ -1151,33 +1100,38 @@
 static bool BridgeChangeInfo(uint brid, int numinfo, int prop, byte **bufp, int len)
 {
 	byte *buf = *bufp;
-	int i;
 	bool ret = false;
 
-	switch (prop) {
-		case 0x08: // Year of availability
-			FOR_EACH_OBJECT _bridge[brid + i].avail_year = ORIGINAL_BASE_YEAR + grf_load_byte(&buf);
-			break;
-
-		case 0x09: // Minimum length
-			FOR_EACH_OBJECT _bridge[brid + i].min_length = grf_load_byte(&buf);
-			break;
-
-		case 0x0A: // Maximum length
-			FOR_EACH_OBJECT _bridge[brid + i].max_length = grf_load_byte(&buf);
-			break;
-
-		case 0x0B: // Cost factor
-			FOR_EACH_OBJECT _bridge[brid + i].price = grf_load_byte(&buf);
-			break;
-
-		case 0x0C: // Maximum speed
-			FOR_EACH_OBJECT _bridge[brid + i].speed = grf_load_word(&buf);
-			break;
-
-		case 0x0D: // Bridge sprite tables
-			FOR_EACH_OBJECT {
-				Bridge *bridge = &_bridge[brid + i];
+	if (brid + numinfo > MAX_BRIDGES) {
+		grfmsg(1, "BridgeChangeInfo: Bridge %u is invalid, max %u, ignoring", brid + numinfo, MAX_BRIDGES);
+		return false;
+	}
+
+	for (int i = 0; i < numinfo; i++) {
+		Bridge *bridge = &_bridge[brid + i];
+
+		switch (prop) {
+			case 0x08: // Year of availability
+				bridge->avail_year = ORIGINAL_BASE_YEAR + grf_load_byte(&buf);
+				break;
+
+			case 0x09: // Minimum length
+				bridge->min_length = grf_load_byte(&buf);
+				break;
+
+			case 0x0A: // Maximum length
+				bridge->max_length = grf_load_byte(&buf);
+				break;
+
+			case 0x0B: // Cost factor
+				bridge->price = grf_load_byte(&buf);
+				break;
+
+			case 0x0C: // Maximum speed
+				bridge->speed = grf_load_word(&buf);
+				break;
+
+			case 0x0D: { // Bridge sprite tables
 				byte tableid = grf_load_byte(&buf);
 				byte numtables = grf_load_byte(&buf);
 
@@ -1212,19 +1166,20 @@
 						bridge->sprite_table[tableid][sprite].pal    = pal;
 					}
 				}
-			}
-			break;
-
-		case 0x0E: // Flags; bit 0 - disable far pillars
-			FOR_EACH_OBJECT _bridge[brid + i].flags = grf_load_byte(&buf);
-			break;
-
-		case 0x0F: // Long format year of availability (year since year 0)
-			FOR_EACH_OBJECT _bridge[brid + i].avail_year = clamp(grf_load_dword(&buf), MIN_YEAR, MAX_YEAR);
-			break;
-
-		default:
-			ret = true;
+			} break;
+
+			case 0x0E: // Flags; bit 0 - disable far pillars
+				bridge->flags = grf_load_byte(&buf);
+				break;
+
+			case 0x0F: // Long format year of availability (year since year 0)
+				bridge->avail_year = clamp(grf_load_dword(&buf), MIN_YEAR, MAX_YEAR);
+				break;
+
+			default:
+				ret = true;
+				break;
+		}
 	}
 
 	*bufp = buf;
@@ -1233,13 +1188,11 @@
 
 static bool TownHouseChangeInfo(uint hid, int numinfo, int prop, byte **bufp, int len)
 {
-	HouseSpec **housespec;
 	byte *buf = *bufp;
-	int i;
 	bool ret = false;
 
-	if (hid + numinfo >= HOUSE_MAX) {
-		grfmsg(1, "TownHouseChangeInfo: Too many houses loaded (%u), max (%u). Ignoring.", hid + numinfo, HOUSE_MAX-1);
+	if (hid + numinfo > HOUSE_MAX) {
+		grfmsg(1, "TownHouseChangeInfo: Too many houses loaded (%u), max (%u). Ignoring.", hid + numinfo, HOUSE_MAX);
 		return false;
 	}
 
@@ -1251,21 +1204,17 @@
 		_house_mngr.ResetOverride();
 	}
 
-	housespec = &_cur_grffile->housespec[hid];
-
-	if (prop != 0x08) {
-		/* Check that all the houses being modified have been defined. */
-		FOR_EACH_OBJECT {
-			if (housespec[i] == NULL) {
-				grfmsg(2, "TownHouseChangeInfo: Attempt to modify undefined house %u. Ignoring.", hid + i);
-				return false;
-			}
+	for (int i = 0; i < numinfo; i++) {
+		HouseSpec *housespec = _cur_grffile->housespec[hid + i];
+
+		if (prop != 0x08 && housespec == NULL) {
+			grfmsg(2, "TownHouseChangeInfo: Attempt to modify undefined house %u. Ignoring.", hid + i);
+			continue;
 		}
-	}
-
-	switch (prop) {
-		case 0x08: // Substitute building type, and definition of a new house
-			FOR_EACH_OBJECT {
+
+		switch (prop) {
+			case 0x08: { // Substitute building type, and definition of a new house
+				HouseSpec **house = &_cur_grffile->housespec[hid + i];
 				byte subs_id = grf_load_byte(&buf);
 
 				if (subs_id == 0xFF) {
@@ -1280,144 +1229,130 @@
 				}
 
 				/* Allocate space for this house. */
-				if (housespec[i] == NULL) housespec[i] = CallocT<HouseSpec>(1);
-
-				memcpy(housespec[i], &_house_specs[subs_id], sizeof(_house_specs[subs_id]));
-
-				housespec[i]->enabled = true;
-				housespec[i]->local_id = hid + i;
-				housespec[i]->substitute_id = subs_id;
-				housespec[i]->grffile = _cur_grffile;
-				housespec[i]->random_colour[0] = 0x04;  // those 4 random colours are the base colour
-				housespec[i]->random_colour[1] = 0x08;  // for all new houses
-				housespec[i]->random_colour[2] = 0x0C;  // they stand for red, blue, orange and green
-				housespec[i]->random_colour[3] = 0x06;
-
-				/* New houses do not (currently) expect to have a default start
-				 * date before 1930, as this breaks the build date stuff. See
-				 * FinaliseHouseArray() for more details. */
-				if (housespec[i]->min_date < 1930) housespec[i]->min_date = 1930;
-			}
-			SETBIT(_loaded_newgrf_features, GRFLOADED_NEWHOUSES);
-			break;
-
-		case 0x09: // Building flags
-			FOR_EACH_OBJECT {
-				byte state = grf_load_byte(&buf);
-				housespec[i]->building_flags = (BuildingFlags)state;
-			}
-			break;
-
-		case 0x0A: // Availability years
-			FOR_EACH_OBJECT {
+				if (*house == NULL) *house = CallocT<HouseSpec>(1);
+
+				housespec = *house;
+
+				memcpy(housespec, &_house_specs[subs_id], sizeof(_house_specs[subs_id]));
+
+				housespec->enabled = true;
+				housespec->local_id = hid + i;
+				housespec->substitute_id = subs_id;
+				housespec->grffile = _cur_grffile;
+				housespec->random_colour[0] = 0x04;  // those 4 random colours are the base colour
+				housespec->random_colour[1] = 0x08;  // for all new houses
+				housespec->random_colour[2] = 0x0C;  // they stand for red, blue, orange and green
+				housespec->random_colour[3] = 0x06;
+
+				/**
+				 * New houses do not (currently) expect to have a default start
+				 * date before 1930, as this breaks the build date stuff.
+				 * @see FinaliseHouseArray() for more details.
+				 */
+				if (housespec->min_date < 1930) housespec->min_date = 1930;
+
+				_loaded_newgrf_features.has_newhouses = true;
+			} break;
+
+			case 0x09: // Building flags
+				housespec->building_flags = (BuildingFlags)grf_load_byte(&buf);
+				break;
+
+			case 0x0A: { // Availability years
 				uint16 years = grf_load_word(&buf);
-				housespec[i]->min_date = GB(years, 0, 8) > 150 ? MAX_YEAR : ORIGINAL_BASE_YEAR + GB(years, 0, 8);
-				housespec[i]->max_date = GB(years, 8, 8) > 150 ? MAX_YEAR : ORIGINAL_BASE_YEAR + GB(years, 8, 8);
-			}
-			break;
-
-		case 0x0B: // Population
-			FOR_EACH_OBJECT housespec[i]->population = grf_load_byte(&buf);
-			break;
-
-		case 0x0C: // Mail generation multiplier
-			FOR_EACH_OBJECT housespec[i]->mail_generation = grf_load_byte(&buf);
-			break;
-
-		case 0x0D: // Passenger acceptance
-		case 0x0E: // Mail acceptance
-			FOR_EACH_OBJECT housespec[i]->cargo_acceptance[prop - 0x0D] = grf_load_byte(&buf);
-			break;
-		case 0x0F: // Goods/candy, food/fizzy drinks acceptance
-			FOR_EACH_OBJECT {
+				housespec->min_date = GB(years, 0, 8) > 150 ? MAX_YEAR : ORIGINAL_BASE_YEAR + GB(years, 0, 8);
+				housespec->max_date = GB(years, 8, 8) > 150 ? MAX_YEAR : ORIGINAL_BASE_YEAR + GB(years, 8, 8);
+			} break;
+
+			case 0x0B: // Population
+				housespec->population = grf_load_byte(&buf);
+				break;
+
+			case 0x0C: // Mail generation multiplier
+				housespec->mail_generation = grf_load_byte(&buf);
+				break;
+
+			case 0x0D: // Passenger acceptance
+			case 0x0E: // Mail acceptance
+				housespec->cargo_acceptance[prop - 0x0D] = grf_load_byte(&buf);
+				break;
+
+			case 0x0F: { // Goods/candy, food/fizzy drinks acceptance
 				int8 goods = grf_load_byte(&buf);
 
 				/* If value of goods is negative, it means in fact food or, if in toyland, fizzy_drink acceptance.
 				 * Else, we have "standard" 3rd cargo type, goods or candy, for toyland once more */
-				housespec[i]->accepts_cargo[2] = (goods >= 0) ? ((_opt.landscape == LT_TOYLAND) ? CT_CANDY : CT_GOODS) :
+				housespec->accepts_cargo[2] = (goods >= 0) ? ((_opt.landscape == LT_TOYLAND) ? CT_CANDY : CT_GOODS) :
 						((_opt.landscape == LT_TOYLAND) ? CT_FIZZY_DRINKS : CT_FOOD);
 
-				housespec[i]->cargo_acceptance[2] = abs(goods); // but we do need positive value here
-			}
-			break;
-
-		case 0x10: // Local authority rating decrease on removal
-			FOR_EACH_OBJECT housespec[i]->remove_rating_decrease = grf_load_word(&buf);
-			break;
-
-		case 0x11: // Removal cost multiplier
-			FOR_EACH_OBJECT housespec[i]->removal_cost = grf_load_byte(&buf);
-			break;
-
-		case 0x12: // Building name ID
-			FOR_EACH_OBJECT housespec[i]->building_name = MapGRFStringID(_cur_grffile->grfid, grf_load_word(&buf));
-			break;
-
-		case 0x13: // Building availability mask
-			FOR_EACH_OBJECT {
-				uint16 avail = grf_load_word(&buf);
-				housespec[i]->building_availability = (HouseZones)avail;
-			}
-			break;
-
-		case 0x14: // House callback flags
-			FOR_EACH_OBJECT housespec[i]->callback_mask = grf_load_byte(&buf);
-			break;
-
-		case 0x15: // House override byte
-			FOR_EACH_OBJECT {
+				housespec->cargo_acceptance[2] = abs(goods); // but we do need positive value here
+			} break;
+
+			case 0x10: // Local authority rating decrease on removal
+				housespec->remove_rating_decrease = grf_load_word(&buf);
+				break;
+
+			case 0x11: // Removal cost multiplier
+				housespec->removal_cost = grf_load_byte(&buf);
+				break;
+
+			case 0x12: // Building name ID
+				housespec->building_name = MapGRFStringID(_cur_grffile->grfid, grf_load_word(&buf));
+				break;
+
+			case 0x13: // Building availability mask
+				housespec->building_availability = (HouseZones)grf_load_word(&buf);
+				break;
+
+			case 0x14: // House callback flags
+				housespec->callback_mask = grf_load_byte(&buf);
+				break;
+
+			case 0x15: { // House override byte
 				byte override = grf_load_byte(&buf);
 
 				/* The house being overridden must be an original house. */
 				if (override >= NEW_HOUSE_OFFSET) {
-					grfmsg(2, "TownHouseChangeInfo: Attempt to override new house %u with house id %u. Ignoring.", override, hid);
-					return false;
+					grfmsg(2, "TownHouseChangeInfo: Attempt to override new house %u with house id %u. Ignoring.", override, hid + i);
+					continue;
 				}
 
-				_house_mngr.Add(hid, override);
-			}
-			break;
-
-		case 0x16: // Periodic refresh multiplier
-			FOR_EACH_OBJECT housespec[i]->processing_time = grf_load_byte(&buf);
-			break;
-
-		case 0x17: // Four random colours to use
-			FOR_EACH_OBJECT {
-				uint j;
-				for (j = 0; j < 4; j++) housespec[i]->random_colour[j] = grf_load_byte(&buf);
-			}
-			break;
-
-		case 0x18: // Relative probability of appearing
-			FOR_EACH_OBJECT housespec[i]->probability = grf_load_byte(&buf);
-			break;
-
-		case 0x19: // Extra flags
-			FOR_EACH_OBJECT {
-				byte flags = grf_load_byte(&buf);
-				housespec[i]->extra_flags = (HouseExtraFlags)flags;
-			}
-			break;
-
-		case 0x1A: // Animation frames
-			FOR_EACH_OBJECT housespec[i]->animation_frames = grf_load_byte(&buf);
-			break;
-
-		case 0x1B: // Animation speed
-			FOR_EACH_OBJECT housespec[i]->animation_speed = clamp(grf_load_byte(&buf), 2, 16);
-			break;
-
-		case 0x1C: // Class of the building type
-			FOR_EACH_OBJECT housespec[i]->class_id = AllocateHouseClassID(grf_load_byte(&buf), _cur_grffile->grfid);
-			break;
-
-		case 0x1D: // Callback flags 2
-			FOR_EACH_OBJECT housespec[i]->callback_mask |= (grf_load_byte(&buf) << 8);
-			break;
-
-		case 0x1E: // Accepted cargo types
-			FOR_EACH_OBJECT {
+				_house_mngr.Add(hid + i, override);
+			} break;
+
+			case 0x16: // Periodic refresh multiplier
+				housespec->processing_time = grf_load_byte(&buf);
+				break;
+
+			case 0x17: // Four random colours to use
+				for (uint j = 0; j < 4; j++) housespec->random_colour[j] = grf_load_byte(&buf);
+				break;
+
+			case 0x18: // Relative probability of appearing
+				housespec->probability = grf_load_byte(&buf);
+				break;
+
+			case 0x19: // Extra flags
+				housespec->extra_flags = (HouseExtraFlags)grf_load_byte(&buf);
+				break;
+
+			case 0x1A: // Animation frames
+				housespec->animation_frames = grf_load_byte(&buf);
+				break;
+
+			case 0x1B: // Animation speed
+				housespec->animation_speed = clamp(grf_load_byte(&buf), 2, 16);
+				break;
+
+			case 0x1C: // Class of the building type
+				housespec->class_id = AllocateHouseClassID(grf_load_byte(&buf), _cur_grffile->grfid);
+				break;
+
+			case 0x1D: // Callback flags 2
+				housespec->callback_mask |= (grf_load_byte(&buf) << 8);
+				break;
+
+			case 0x1E: { // Accepted cargo types
 				uint32 cargotypes = grf_load_dword(&buf);
 
 				/* Check if the cargo types should not be changed */
@@ -1430,21 +1365,21 @@
 
 					if (cargo == CT_INVALID) {
 						/* Disable acceptance of invalid cargo type */
-						housespec[i]->cargo_acceptance[j] = 0;
+						housespec->cargo_acceptance[j] = 0;
 					} else {
-						housespec[i]->accepts_cargo[j] = cargo;
+						housespec->accepts_cargo[j] = cargo;
 					}
 				}
-			}
-			break;
-
-		case 0x1F: // Minimum life span
-			FOR_EACH_OBJECT housespec[i]->minimum_life = grf_load_byte(&buf);
-			break;
-
-		default:
-			ret = true;
-			break;
+			} break;
+
+			case 0x1F: // Minimum life span
+				housespec->minimum_life = grf_load_byte(&buf);
+				break;
+
+			default:
+				ret = true;
+				break;
+		}
 	}
 
 	*bufp = buf;
@@ -1454,12 +1389,11 @@
 static bool GlobalVarChangeInfo(uint gvid, int numinfo, int prop, byte **bufp, int len)
 {
 	byte *buf = *bufp;
-	int i;
 	bool ret = false;
 
-	switch (prop) {
-		case 0x08: /* Cost base factor */
-			FOR_EACH_OBJECT {
+	for (int i = 0; i < numinfo; i++) {
+		switch (prop) {
+			case 0x08: { // Cost base factor
 				byte factor = grf_load_byte(&buf);
 				uint price = gvid + i;
 
@@ -1468,28 +1402,24 @@
 				} else {
 					grfmsg(1, "GlobalVarChangeInfo: Price %d out of range, ignoring", price);
 				}
-			}
-			break;
-
-		case 0x09: /* Cargo translation table */
-			/* This is loaded during the initialisation stage, so just skip it here. */
-			/* Each entry is 4 bytes. */
-			buf += numinfo * 4;
-			break;
-
-		case 0x0A: // Currency display names
-			FOR_EACH_OBJECT {
+			} break;
+
+			case 0x09: // Cargo translation table
+				/* This is loaded during the initialisation stage, so just skip it here. */
+				/* Each entry is 4 bytes. */
+				buf += 4;
+				break;
+
+			case 0x0A: { // Currency display names
 				uint curidx = GetNewgrfCurrencyIdConverted(gvid + i);
 				StringID newone = GetGRFStringID(_cur_grffile->grfid, grf_load_word(&buf));
 
 				if ((newone != STR_UNDEFINED) && (curidx < NUM_CURRENCY)) {
 					_currency_specs[curidx].name = newone;
 				}
-			}
-			break;
-
-		case 0x0B: // Currency multipliers
-			FOR_EACH_OBJECT {
+			} break;
+
+			case 0x0B: { // Currency multipliers
 				uint curidx = GetNewgrfCurrencyIdConverted(gvid + i);
 				uint32 rate = grf_load_dword(&buf);
 
@@ -1501,11 +1431,9 @@
 				} else {
 					grfmsg(1, "GlobalVarChangeInfo: Currency multipliers %d out of range, ignoring", curidx);
 				}
-			}
-			break;
-
-		case 0x0C: // Currency options
-			FOR_EACH_OBJECT {
+			} break;
+
+			case 0x0C: { // Currency options
 				uint curidx = GetNewgrfCurrencyIdConverted(gvid + i);
 				uint16 options = grf_load_word(&buf);
 
@@ -1517,25 +1445,21 @@
 				} else {
 					grfmsg(1, "GlobalVarChangeInfo: Currency option %d out of range, ignoring", curidx);
 				}
-			}
-			break;
-
-		case 0x0D: // Currency prefix symbol
-			FOR_EACH_OBJECT {
+			} break;
+
+			case 0x0D: { // Currency prefix symbol
 				uint curidx = GetNewgrfCurrencyIdConverted(gvid + i);
 				uint32 tempfix = grf_load_dword(&buf);
 
 				if (curidx < NUM_CURRENCY) {
-					memcpy(_currency_specs[curidx].prefix,&tempfix,4);
+					memcpy(_currency_specs[curidx].prefix, &tempfix, 4);
 					_currency_specs[curidx].prefix[4] = 0;
 				} else {
 					grfmsg(1, "GlobalVarChangeInfo: Currency symbol %d out of range, ignoring", curidx);
 				}
-			}
-			break;
-
-		case 0x0E: // Currency suffix symbol
-			FOR_EACH_OBJECT {
+			} break;
+
+			case 0x0E: { // Currency suffix symbol
 				uint curidx = GetNewgrfCurrencyIdConverted(gvid + i);
 				uint32 tempfix = grf_load_dword(&buf);
 
@@ -1545,11 +1469,9 @@
 				} else {
 					grfmsg(1, "GlobalVarChangeInfo: Currency symbol %d out of range, ignoring", curidx);
 				}
-			}
-			break;
-
-		case 0x0F: //  Euro introduction dates
-			FOR_EACH_OBJECT {
+			} break;
+
+			case 0x0F: { //  Euro introduction dates
 				uint curidx = GetNewgrfCurrencyIdConverted(gvid + i);
 				Year year_euro = grf_load_word(&buf);
 
@@ -1558,28 +1480,29 @@
 				} else {
 					grfmsg(1, "GlobalVarChangeInfo: Euro intro date %d out of range, ignoring", curidx);
 				}
-			}
-			break;
-
-		case 0x10: // 12 * 32 * B Snow line height table
-			if (numinfo > 1 || IsSnowLineSet()) {
-				grfmsg(1, "GlobalVarChangeInfo: The snowline can only be set once (%d)", numinfo);
-			} else if (len < SNOW_LINE_MONTHS * SNOW_LINE_DAYS) {
-				grfmsg(1, "GlobalVarChangeInfo: Not enough entries set in the snowline table (%d)", len);
-			} else {
-				byte table[SNOW_LINE_MONTHS][SNOW_LINE_DAYS];
-
-				for (uint i = 0; i < SNOW_LINE_MONTHS; i++) {
-					for (uint j = 0; j < SNOW_LINE_DAYS; j++) {
-						table[i][j] = grf_load_byte(&buf);
+			} break;
+
+			case 0x10: // Snow line height table
+				if (numinfo > 1 || IsSnowLineSet()) {
+					grfmsg(1, "GlobalVarChangeInfo: The snowline can only be set once (%d)", numinfo);
+				} else if (len < SNOW_LINE_MONTHS * SNOW_LINE_DAYS) {
+					grfmsg(1, "GlobalVarChangeInfo: Not enough entries set in the snowline table (%d)", len);
+				} else {
+					byte table[SNOW_LINE_MONTHS][SNOW_LINE_DAYS];
+
+					for (uint i = 0; i < SNOW_LINE_MONTHS; i++) {
+						for (uint j = 0; j < SNOW_LINE_DAYS; j++) {
+							table[i][j] = grf_load_byte(&buf);
+						}
 					}
+					SetSnowLine(table);
 				}
-				SetSnowLine(table);
-			}
-			break;
-
-		default:
-			ret = true;
+				break;
+
+			default:
+				ret = true;
+				break;
+		}
 	}
 
 	*bufp = buf;
@@ -1588,120 +1511,118 @@
 
 static bool CargoChangeInfo(uint cid, int numinfo, int prop, byte **bufp, int len)
 {
+	byte *buf = *bufp;
+	bool ret = false;
+
 	if (cid + numinfo > NUM_CARGO) {
 		grfmsg(2, "CargoChangeInfo: Cargo type %d out of range (max %d)", cid + numinfo, NUM_CARGO - 1);
 		return false;
 	}
 
-	CargoSpec *cs = &_cargo[cid];
-	byte *buf = *bufp;
-	int i;
-	bool ret = false;
-
-	switch (prop) {
-		case 0x08: /* Bit number of cargo */
-			FOR_EACH_OBJECT {
-				cs[i].bitnum = grf_load_byte(&buf);
-				cs[i].grfid = _cur_grffile->grfid;
+	for (int i = 0; i < numinfo; i++) {
+		CargoSpec *cs = &_cargo[cid + i];
+
+		switch (prop) {
+			case 0x08: /* Bit number of cargo */
+				cs->bitnum = grf_load_byte(&buf);
+				cs->grfid = _cur_grffile->grfid;
 				if (cs->IsValid()) {
 					SETBIT(_cargo_mask, cid + i);
 				} else {
 					CLRBIT(_cargo_mask, cid + i);
 				}
-			}
-			break;
-
-		case 0x09: /* String ID for cargo type name */
-			FOR_EACH_OBJECT cs[i].name = grf_load_word(&buf);
-			break;
-
-		case 0x0A: /* String for cargo name, plural */
-			FOR_EACH_OBJECT cs[i].name_plural = grf_load_word(&buf);
-			break;
-
-		case 0x0B:
-			/* String for units of cargo. This is different in OpenTTD to TTDPatch
-			 * (e.g. 10 tonnes of coal) */
-			FOR_EACH_OBJECT cs[i].units_volume = grf_load_word(&buf);
-			break;
-
-		case 0x0C: /* String for quantity of cargo (e.g. 10 tonnes of coal) */
-			FOR_EACH_OBJECT cs[i].quantifier = grf_load_word(&buf);
-			break;
-
-		case 0x0D: /* String for two letter cargo abbreviation */
-			FOR_EACH_OBJECT cs[i].abbrev = grf_load_word(&buf);
-			break;
-
-		case 0x0E: /* Sprite ID for cargo icon */
-			FOR_EACH_OBJECT cs[i].sprite = grf_load_word(&buf);
-			break;
-
-		case 0x0F: /* Weight of one unit of cargo */
-			FOR_EACH_OBJECT cs[i].weight = grf_load_byte(&buf);
-			break;
-
-		case 0x10: /* Used for payment calculation */
-			FOR_EACH_OBJECT cs[i].transit_days[0] = grf_load_byte(&buf);
-			break;
-
-		case 0x11: /* Used for payment calculation */
-			FOR_EACH_OBJECT cs[i].transit_days[1] = grf_load_byte(&buf);
-			break;
-
-		case 0x12: /* Base cargo price */
-			FOR_EACH_OBJECT cs[i].initial_payment = grf_load_dword(&buf);
-			break;
-
-		case 0x13: /* Colour for station rating bars */
-			FOR_EACH_OBJECT cs[i].rating_colour = MapDOSColour(grf_load_byte(&buf));
-			break;
-
-		case 0x14: /* Colour for cargo graph */
-			FOR_EACH_OBJECT cs[i].legend_colour = MapDOSColour(grf_load_byte(&buf));
-			break;
-
-		case 0x15: /* Freight status */
-			FOR_EACH_OBJECT cs[i].is_freight = grf_load_byte(&buf) != 0;
-			break;
-
-		case 0x16: /* Cargo classes */
-			FOR_EACH_OBJECT cs[i].classes = grf_load_word(&buf);
-			break;
-
-		case 0x17: /* Cargo label */
-			FOR_EACH_OBJECT {
-				cs[i].label = grf_load_dword(&buf);
-				cs[i].label = BSWAP32(cs[i].label);
-			}
-			break;
-
-		case 0x18: /* Town growth substitute type */
-			FOR_EACH_OBJECT {
+				break;
+
+			case 0x09: /* String ID for cargo type name */
+				cs->name = grf_load_word(&buf);
+				break;
+
+			case 0x0A: /* String for cargo name, plural */
+				cs->name_plural = grf_load_word(&buf);
+				break;
+
+			case 0x0B:
+				/* String for units of cargo. This is different in OpenTTD to TTDPatch
+				 * (e.g. 10 tonnes of coal) */
+				cs->units_volume = grf_load_word(&buf);
+				break;
+
+			case 0x0C: /* String for quantity of cargo (e.g. 10 tonnes of coal) */
+				cs->quantifier = grf_load_word(&buf);
+				break;
+
+			case 0x0D: /* String for two letter cargo abbreviation */
+				cs->abbrev = grf_load_word(&buf);
+				break;
+
+			case 0x0E: /* Sprite ID for cargo icon */
+				cs->sprite = grf_load_word(&buf);
+				break;
+
+			case 0x0F: /* Weight of one unit of cargo */
+				cs->weight = grf_load_byte(&buf);
+				break;
+
+			case 0x10: /* Used for payment calculation */
+				cs->transit_days[0] = grf_load_byte(&buf);
+				break;
+
+			case 0x11: /* Used for payment calculation */
+				cs->transit_days[1] = grf_load_byte(&buf);
+				break;
+
+			case 0x12: /* Base cargo price */
+				cs->initial_payment = grf_load_dword(&buf);
+				break;
+
+			case 0x13: /* Colour for station rating bars */
+				cs->rating_colour = MapDOSColour(grf_load_byte(&buf));
+				break;
+
+			case 0x14: /* Colour for cargo graph */
+				cs->legend_colour = MapDOSColour(grf_load_byte(&buf));
+				break;
+
+			case 0x15: /* Freight status */
+				cs->is_freight = (grf_load_byte(&buf) != 0);
+				break;
+
+			case 0x16: /* Cargo classes */
+				cs->classes = grf_load_word(&buf);
+				break;
+
+			case 0x17: /* Cargo label */
+				cs->label = grf_load_dword(&buf);
+				cs->label = BSWAP32(cs->label);
+				break;
+
+			case 0x18: { /* Town growth substitute type */
 				uint8 substitute_type = grf_load_byte(&buf);
+
 				switch (substitute_type) {
-					case 0x00: cs[i].town_effect = TE_PASSENGERS; break;
-					case 0x02: cs[i].town_effect = TE_MAIL; break;
-					case 0x05: cs[i].town_effect = TE_GOODS; break;
-					case 0x09: cs[i].town_effect = TE_WATER; break;
-					case 0x0B: cs[i].town_effect = TE_FOOD; break;
+					case 0x00: cs->town_effect = TE_PASSENGERS; break;
+					case 0x02: cs->town_effect = TE_MAIL; break;
+					case 0x05: cs->town_effect = TE_GOODS; break;
+					case 0x09: cs->town_effect = TE_WATER; break;
+					case 0x0B: cs->town_effect = TE_FOOD; break;
 					default:
 						grfmsg(1, "CargoChangeInfo: Unknown town growth substitute value %d, setting to none.", substitute_type);
-					case 0xFF: cs[i].town_effect = TE_NONE; break;
+					case 0xFF: cs->town_effect = TE_NONE; break;
 				}
-			}
-			break;
-
-		case 0x19: /* Town growth coefficient */
-			FOR_EACH_OBJECT cs[i].multipliertowngrowth = grf_load_word(&buf);
-			break;
-
-		case 0x1A: /* Bitmask of callbacks to use */
-			FOR_EACH_OBJECT cs[i].callback_mask = grf_load_byte(&buf);
-			break;
-
-		default:
-			ret = true;
+			} break;
+
+			case 0x19: /* Town growth coefficient */
+				cs->multipliertowngrowth = grf_load_word(&buf);
+				break;
+
+			case 0x1A: /* Bitmask of callbacks to use */
+				cs->callback_mask = grf_load_byte(&buf);
+				break;
+
+			default:
+				ret = true;
+				break;
+		}
 	}
 
 	*bufp = buf;
@@ -1712,7 +1633,6 @@
 static bool SoundEffectChangeInfo(uint sid, int numinfo, int prop, byte **bufp, int len)
 {
 	byte *buf = *bufp;
-	int i;
 	bool ret = false;
 
 	if (_cur_grffile->sound_offset == 0) {
@@ -1720,38 +1640,28 @@
 		return false;
 	}
 
-	switch (prop) {
-		case 0x08: // Relative volume
-			FOR_EACH_OBJECT {
-				uint sound = sid + i + _cur_grffile->sound_offset - GetNumOriginalSounds();
-
-				if (sound >= GetNumSounds()) {
-					grfmsg(1, "SoundEffectChangeInfo: Sound %d not defined (max %d)", sound, GetNumSounds());
-				} else {
-					GetSound(sound)->volume = grf_load_byte(&buf);
-				}
-			}
-			break;
-
-		case 0x09: // Priority
-			FOR_EACH_OBJECT {
-				uint sound = sid + i + _cur_grffile->sound_offset - GetNumOriginalSounds();
-
-				if (sound >= GetNumSounds()) {
-					grfmsg(1, "SoundEffectChangeInfo: Sound %d not defined (max %d)", sound, GetNumSounds());
-				} else {
-					GetSound(sound)->priority = grf_load_byte(&buf);
-				}
-			}
-			break;
-
-		case 0x0A: // Override old sound
-			FOR_EACH_OBJECT {
-				uint sound = sid + i + _cur_grffile->sound_offset - GetNumOriginalSounds();
+	for (int i = 0; i < numinfo; i++) {
+		uint sound = sid + i + _cur_grffile->sound_offset - GetNumOriginalSounds();
+
+		if (sound >= GetNumSounds()) {
+			grfmsg(1, "SoundEffectChangeInfo: Sound %d not defined (max %d)", sound, GetNumSounds());
+			continue;
+		}
+
+		switch (prop) {
+			case 0x08: // Relative volume
+				GetSound(sound)->volume = grf_load_byte(&buf);
+				break;
+
+			case 0x09: // Priority
+				GetSound(sound)->priority = grf_load_byte(&buf);
+				break;
+
+			case 0x0A: { // Override old sound
 				uint orig_sound = grf_load_byte(&buf);
 
-				if (sound >= GetNumSounds() || orig_sound >= GetNumSounds()) {
-					grfmsg(1, "SoundEffectChangeInfo: Sound %d or %d not defined (max %d)", sound, orig_sound, GetNumSounds());
+				if (orig_sound >= GetNumSounds()) {
+					grfmsg(1, "SoundEffectChangeInfo: Original sound %d not defined (max %d)", orig_sound, GetNumSounds());
 				} else {
 					FileEntry *newfe = GetSound(sound);
 					FileEntry *oldfe = GetSound(orig_sound);
@@ -1759,11 +1669,373 @@
 					/* Literally copy the data of the new sound over the original */
 					*oldfe = *newfe;
 				}
-			}
-			break;
-
-		default:
-			ret = true;
+			} break;
+
+			default:
+				ret = true;
+				break;
+		}
+	}
+
+	*bufp = buf;
+	return ret;
+}
+
+static bool IndustrytilesChangeInfo(uint indtid, int numinfo, int prop, byte **bufp, int len)
+{
+	if (!HASBIT(_ttdpatch_flags[3], 0x07)) return true;
+
+	byte *buf = *bufp;
+	bool ret = false;
+
+	if (indtid + numinfo > NUM_INDUSTRYTILES) {
+		grfmsg(1, "IndustryTilesChangeInfo: Too many industry tiles loaded (%u), max (%u). Ignoring.", indtid + numinfo, NUM_INDUSTRYTILES);
+		return false;
+	}
+
+	/* Allocate industry tile specs if they haven't been allocated already. */
+	if (_cur_grffile->indtspec == NULL) {
+		_cur_grffile->indtspec = CallocT<IndustryTileSpec*>(NUM_INDUSTRYTILES);
+
+		/* Reset any overrides that have been set. */
+		_industile_mngr.ResetOverride();
+	}
+
+	for (int i = 0; i < numinfo; i++) {
+		IndustryTileSpec *tsp = _cur_grffile->indtspec[indtid + i];
+
+		if (prop != 0x08 && tsp == NULL) {
+			grfmsg(2, "IndustryTilesChangeInfo: Attempt to modify undefined industry tile %u. Ignoring.", indtid + i);
+			continue;
+		}
+
+		switch (prop) {
+			case 0x08: { // Substitute industry tile type
+				IndustryTileSpec **tilespec = &_cur_grffile->indtspec[indtid + i];
+				byte subs_id = grf_load_byte(&buf);
+
+				if (subs_id == 0xFF) {
+					/* Instead of defining a new industry, a substitute industry id
+					 * of 0xFF disables the old industry with the current id. */
+					tsp->enabled = false;
+					continue;
+				} else if (subs_id >= NEW_INDUSTRYTILEOFFSET) {
+					/* The substitute id must be one of the original industry tile. */
+					grfmsg(2, "IndustryTilesChangeInfo: Attempt to use new industry tile %u as substitute industry tile for %u. Ignoring.", subs_id, indtid + i);
+					return false;
+				}
+
+				/* Allocate space for this industry. */
+				if (*tilespec == NULL) {
+					int tempid;
+					*tilespec = CallocT<IndustryTileSpec>(1);
+					tsp = *tilespec;
+
+					memcpy(tsp, &_industry_tile_specs[subs_id], sizeof(_industry_tile_specs[subs_id]));
+					tsp->enabled = true;
+					tsp->grf_prop.local_id = indtid + i;
+					tsp->grf_prop.subst_id = subs_id;
+					tsp->grf_prop.grffile = _cur_grffile;
+					tempid = _industile_mngr.AddEntityID(indtid + i, _cur_grffile->grfid, subs_id); // pre-reserve the tile slot
+				}
+			} break;
+
+			case 0x09: { // Industry tile override
+				byte ovrid = grf_load_byte(&buf);
+
+				/* The industry being overridden must be an original industry. */
+				if (ovrid >= NEW_INDUSTRYTILEOFFSET) {
+					grfmsg(2, "IndustryTilesChangeInfo: Attempt to override new industry tile %u with industry tile id %u. Ignoring.", ovrid, indtid + i);
+					return false;
+				}
+
+				tsp->grf_prop.override = ovrid;
+				_industile_mngr.Add(indtid + i, ovrid);
+			} break;
+
+			case 0x0A: // Tile acceptance
+			case 0x0B:
+			case 0x0C: {
+				uint16 acctp = grf_load_word(&buf);
+				tsp->accepts_cargo[prop - 0x0A] = GetCargoTranslation(GB(acctp, 0, 8), _cur_grffile);
+				tsp->acceptance[prop - 0x0A] = GetCargoTranslation(GB(acctp, 8, 8), _cur_grffile);
+			} break;
+
+			case 0x0D: // Land shape flags
+				tsp->slopes_refused = (Slope)grf_load_byte(&buf);
+				break;
+
+			case 0x0E: // Callback flags
+				tsp->callback_flags = grf_load_byte(&buf);
+				break;
+
+			case 0x0F: // Animation information
+				tsp->animation_info = grf_load_word(&buf);
+				break;
+
+			case 0x10: // Animation speed
+				tsp->animation_speed = grf_load_byte(&buf);
+				break;
+
+			case 0x11: // Triggers for callback 25
+				tsp->animation_triggers = grf_load_byte(&buf);
+				break;
+
+			case 0x12: // Special flags
+				tsp->animation_special_flags = grf_load_byte(&buf);
+				break;
+
+			default:
+				ret = true;
+				break;
+		}
+	}
+
+	*bufp = buf;
+	return ret;
+}
+
+static bool IndustriesChangeInfo(uint indid, int numinfo, int prop, byte **bufp, int len)
+{
+	if (!HASBIT(_ttdpatch_flags[3], 0x07)) return true;
+
+	byte *buf = *bufp;
+	bool ret = false;
+
+	if (indid + numinfo > NUM_INDUSTRYTYPES) {
+		grfmsg(1, "IndustriesChangeInfo: Too many industries loaded (%u), max (%u). Ignoring.", indid + numinfo, NUM_INDUSTRYTYPES);
+		return false;
+	}
+
+	grfmsg(1, "IndustriesChangeInfo: newid %u", indid);
+
+	/* Allocate industry specs if they haven't been allocated already. */
+	if (_cur_grffile->industryspec == NULL) {
+		_cur_grffile->industryspec = CallocT<IndustrySpec*>(NUM_INDUSTRYTYPES);
+
+		/* Reset any overrides that have been set. */
+		_industry_mngr.ResetOverride();
+	}
+
+	for (int i = 0; i < numinfo; i++) {
+		IndustrySpec *indsp = _cur_grffile->industryspec[indid + i];
+
+		if (prop != 0x08 && indsp == NULL) {
+			grfmsg(2, "IndustriesChangeInfo: Attempt to modify undefined industry %u. Ignoring.", indid + i);
+			continue;
+		}
+
+		switch (prop) {
+			case 0x08: { // Substitute industry type
+				IndustrySpec **indspec = &_cur_grffile->industryspec[indid + i];
+				byte subs_id = grf_load_byte(&buf);
+
+				if (subs_id == 0xFF) {
+					/* Instead of defining a new industry, a substitute industry id
+					 * of 0xFF disables the old industry with the current id. */
+					_industry_specs[indid + i].enabled = false;
+					continue;
+				} else if (subs_id >= NEW_INDUSTRYOFFSET) {
+					/* The substitute id must be one of the original industry. */
+					grfmsg(2, "_industry_specs: Attempt to use new industry %u as substitute industry for %u. Ignoring.", subs_id, indid + i);
+					return false;
+				}
+
+				/* Allocate space for this industry.
+				 * Only need to do it once. If ever it is called again, it should not
+				 * do anything */
+				if (*indspec == NULL) {
+					*indspec = CallocT<IndustrySpec>(1);
+					indsp = *indspec;
+
+					memcpy(indsp, &_origin_industry_specs[subs_id], sizeof(_industry_specs[subs_id]));
+					indsp->enabled = true;
+					indsp->grf_prop.local_id = indid + i;
+					indsp->grf_prop.subst_id = subs_id;
+					indsp->grf_prop.grffile = _cur_grffile;
+				}
+			} break;
+
+			case 0x09: { // Industry type override
+				byte ovrid = grf_load_byte(&buf);
+
+				/* The industry being overridden must be an original industry. */
+				if (ovrid >= NEW_INDUSTRYOFFSET) {
+					grfmsg(2, "IndustriesChangeInfo: Attempt to override new industry %u with industry id %u. Ignoring.", ovrid, indid + i);
+					return false;
+				}
+				indsp->grf_prop.override = ovrid;
+				_industry_mngr.Add(indid + i, ovrid);
+			} break;
+
+			case 0x0A: { // Set industry layout(s)
+				indsp->num_table = grf_load_byte(&buf); // Number of layaouts
+				uint32 defsize = grf_load_dword(&buf);  // Total size of the definition
+				IndustryTileTable **tile_table = CallocT<IndustryTileTable*>(indsp->num_table); // Table with tiles to compose an industry
+				IndustryTileTable *itt = CallocT<IndustryTileTable>(defsize); // Temporary array to read the tile layouts from the GRF
+				int size;
+				IndustryTileTable *copy_from;
+
+				for (byte j = 0; j < indsp->num_table; j++) {
+					for (int k = 0;; k++) {
+						itt[k].ti.x = grf_load_byte(&buf); // Offsets from northermost tile
+
+						if (itt[k].ti.x == 0xFE && k == 0) {
+							/* This means we have to borrow the layout from an old industry */
+							IndustryType type = grf_load_byte(&buf);  //industry holding required layout
+							byte laynbr = grf_load_byte(&buf);        //layout number to borrow
+
+							copy_from = (IndustryTileTable*)_origin_industry_specs[type].table[laynbr];
+							for (size = 1;; size++) {
+								if (_origin_industry_specs[type].table[laynbr + (size - 1)]->ti.x == -0x80 &&
+										_origin_industry_specs[type].table[laynbr + (size - 1)]->ti.y == 0) break;
+							}
+							break;
+						}
+
+						itt[k].ti.y = grf_load_byte(&buf); // Or table definition finalisation
+
+						if (itt[k].ti.x == 0 && itt[k].ti.y == 0x80) {
+							/*  Not the same terminator.  The one we are using is rather
+							 x= -80, y = x .  So, adjust it. */
+							itt[k].ti.x = -0x80;
+							itt[k].ti.y =  0;
+							itt[k].gfx  =  0;
+
+							size = k + 1;
+							copy_from = itt;
+							break;
+						}
+
+						itt[k].gfx = grf_load_byte(&buf);
+
+						if (itt[k].gfx == 0xFE) {
+							/* Use a new tile from this GRF */
+							int local_tile_id = grf_load_word(&buf);
+
+							/* Read the ID from the _industile_mngr. */
+							int tempid = _industile_mngr.GetID(local_tile_id, _cur_grffile->grfid);
+
+							if (tempid == INVALID_INDUSTRYTILE) {
+								grfmsg(2, "IndustriesChangeInfo: Attempt to use industry tile %u with industry id %u, not yet defined. Ignoring.", local_tile_id, indid);
+							} else {
+								/* Declared as been valid, can be used */
+								itt[k].gfx = tempid;
+								size = k + 1;
+								copy_from = itt;
+							}
+						}
+					}
+					tile_table[j] = CallocT<IndustryTileTable>(size);
+					memcpy(tile_table[j], copy_from, sizeof(*copy_from) * size);
+				}
+				/* Install final layout construction in the industry spec */
+				indsp->table = tile_table;
+				SETBIT(indsp->cleanup_flag, 1);
+				free(itt);
+			} break;
+
+			case 0x0B: // Industry production flags
+				indsp->life_type = (IndustryLifeType)grf_load_byte(&buf);
+				break;
+
+			case 0x0C: // Industry closure message
+				indsp->closure_text = MapGRFStringID(_cur_grffile->grfid, grf_load_word(&buf));
+				break;
+
+			case 0x0D: // Production increase message
+				indsp->production_up_text = MapGRFStringID(_cur_grffile->grfid, grf_load_word(&buf));
+				break;
+
+			case 0x0E: // Production decrease message
+				indsp->production_down_text = MapGRFStringID(_cur_grffile->grfid, grf_load_word(&buf));
+				break;
+
+			case 0x0F: // Fund cost multiplier
+				indsp->cost_multiplier = grf_load_byte(&buf);
+				break;
+
+			case 0x10: // Production cargo types
+				for (byte j = 0; j < 2; j++) {
+					indsp->produced_cargo[j] = GetCargoTranslation(grf_load_byte(&buf), _cur_grffile);
+				}
+				break;
+
+			case 0x11: // Acceptance cargo types
+				for (byte j = 0; j < 3; j++) {
+					indsp->accepts_cargo[j] = GetCargoTranslation(grf_load_byte(&buf), _cur_grffile);
+				}
+				grf_load_byte(&buf); // Unnused, eat it up
+				break;
+
+			case 0x12: // Production multipliers
+			case 0x13:
+				indsp->production_rate[prop - 0x12] = grf_load_byte(&buf);
+				break;
+
+			case 0x14: // Minimal amount of cargo distributed
+				indsp->minimal_cargo = grf_load_byte(&buf);
+				break;
+
+			case 0x15: { // Random sound effects
+				indsp->number_of_sounds = grf_load_byte(&buf);
+				uint8 *sounds = MallocT<uint8>(indsp->number_of_sounds);
+
+				for (uint8 j = 0; j < indsp->number_of_sounds; j++) sounds[j] = grf_load_byte(&buf);
+				indsp->random_sounds = sounds;
+				SETBIT(indsp->cleanup_flag, 0);
+			} break;
+
+			case 0x16: // Conflicting industry types
+				for (byte j = 0; j < 3; j++) indsp->conflicting[j] = grf_load_byte(&buf);
+				break;
+
+			case 0x17: // Probability in random game
+				indsp->appear_ingame[_opt.landscape] = grf_load_byte(&buf);
+				break;
+
+			case 0x18: // Probability during gameplay
+				indsp->appear_creation[_opt.landscape] = grf_load_byte(&buf);
+				break;
+
+			case 0x19: // Map color
+				indsp->map_colour = MapDOSColour(grf_load_byte(&buf));
+				break;
+
+			case 0x1A: // Special industry flags to define special behavior
+				indsp->behaviour = (IndustyBehaviour)grf_load_dword(&buf);
+				break;
+
+			case 0x1B: // New industry text ID
+				indsp->new_industry_text = MapGRFStringID(_cur_grffile->grfid, grf_load_word(&buf));
+				break;
+
+			case 0x1C: // Input cargo multipliers for the three input cargo types
+			case 0x1D:
+			case 0x1E: {
+					uint32 multiples = grf_load_dword(&buf);
+					indsp->input_cargo_multiplier[prop - 0x1C][0] = GB(multiples, 0,15);
+					indsp->input_cargo_multiplier[prop - 0x1C][1] = GB(multiples, 15,15);
+				} break;
+
+			case 0x1F: // Industry name
+				indsp->name = MapGRFStringID(_cur_grffile->grfid, grf_load_word(&buf));
+				break;
+
+			case 0x20: // Prospecting success chance
+				indsp->prospecting_chance = grf_load_dword(&buf);
+				break;
+
+			case 0x21:   // Callback flags
+			case 0x22: { // Callback additional flags
+				byte aflag = grf_load_byte(&buf);
+				SB(indsp->callback_flags, (prop - 0x21) * 8, 8, aflag);
+			} break;
+
+			default:
+				ret = true;
+				break;
+		}
 	}
 
 	*bufp = buf;
@@ -1783,36 +2055,30 @@
 	}
 
 	/* Allocate station specs if necessary */
-	if (_cur_grffile->stations == NULL) _cur_grffile->stations = CallocT<StationSpec*>(MAX_FSM_PORTS);
-
-	statspec = &_cur_grffile->stations[stid];
-
-	if (prop != 0x08) {
-		/* Check that all stations we are modifying are defined. */
-		FOR_EACH_OBJECT {
-			if (statspec[i] == NULL) {
-				grfmsg(2, "StationChangeInfo: Attempt to modify undefined station %u, ignoring", stid + i);
-				return false;
-			}
+	if (_cur_grffile->stations == NULL) _cur_grffile->stations = CallocT<StationSpec*>(MAX_STATIONS);
+
+	for (int i = 0; i < numinfo; i++) {
+		StationSpec *statspec = _cur_grffile->stations[stid + i];
+
+		/* Check that the station we are modifying is defined. */
+		if (statspec == NULL && prop != 0x08) {
+			grfmsg(2, "StationChangeInfo: Attempt to modify undefined station %u, ignoring", stid + i);
+			continue;
 		}
-	}
-
-	switch (prop) {
-		case 0x08: // Class ID
-			FOR_EACH_OBJECT {
+
+		switch (prop) {
+			case 0x08: { // Class ID
+				StationSpec **spec = &_cur_grffile->stations[stid + i];
+
 				/* Property 0x08 is special; it is where the station is allocated */
-				if (statspec[i] == NULL) statspec[i] = CallocT<StationSpec>(1);
+				if (*spec == NULL) *spec = CallocT<StationSpec>(1);
 
 				/* Swap classid because we read it in BE meaning WAYP or DFLT */
 				uint32 classid = grf_load_dword(&buf);
-				statspec[i]->sclass = AllocateStationClass(BSWAP32(classid));
-			}
-			break;
-
-		case 0x09: // Define sprite layout
-			FOR_EACH_OBJECT {
-				StationSpec *statspec = _cur_grffile->stations[stid + i];
-
+				(*spec)->sclass = AllocateStationClass(BSWAP32(classid));
+			} break;
+
+			case 0x09: // Define sprite layout
 				statspec->tiles = grf_load_extended(&buf);
 				statspec->renderdata = CallocT<DrawTileSprites>(statspec->tiles);
 				statspec->copied_renderdata = false;
@@ -1863,37 +2129,30 @@
 						}
 					}
 				}
-			}
-			break;
-
-		case 0x0A: // Copy sprite layout
-			FOR_EACH_OBJECT {
-				StationSpec *statspec = _cur_grffile->stations[stid + i];
+				break;
+
+			case 0x0A: { // Copy sprite layout
 				byte srcid = grf_load_byte(&buf);
 				const StationSpec *srcstatspec = _cur_grffile->stations[srcid];
 
 				statspec->tiles = srcstatspec->tiles;
 				statspec->renderdata = srcstatspec->renderdata;
 				statspec->copied_renderdata = true;
-			}
-			break;
-
-		case 0x0B: // Callback mask
-			FOR_EACH_OBJECT statspec[i]->callbackmask = grf_load_byte(&buf);
-			break;
-
-		case 0x0C: // Disallowed number of platforms
-			FOR_EACH_OBJECT statspec[i]->disallowed_platforms = grf_load_byte(&buf);
-			break;
-
-		case 0x0D: // Disallowed platform lengths
-			FOR_EACH_OBJECT statspec[i]->disallowed_lengths = grf_load_byte(&buf);
-			break;
-
-		case 0x0E: // Define custom layout
-			FOR_EACH_OBJECT {
-				StationSpec *statspec = _cur_grffile->stations[stid + i];
-
+			} break;
+
+			case 0x0B: // Callback mask
+				statspec->callbackmask = grf_load_byte(&buf);
+				break;
+
+			case 0x0C: // Disallowed number of platforms
+				statspec->disallowed_platforms = grf_load_byte(&buf);
+				break;
+
+			case 0x0D: // Disallowed platform lengths
+				statspec->disallowed_lengths = grf_load_byte(&buf);
+				break;
+
+			case 0x0E: // Define custom layout
 				statspec->copied_layouts = false;
 
 				while (buf < *bufp + len) {
@@ -1940,12 +2199,9 @@
 					free(statspec->layouts[l][p]);
 					statspec->layouts[l][p] = layout;
 				}
-			}
-			break;
-
-		case 0x0F: // Copy custom layout
-			FOR_EACH_OBJECT {
-				StationSpec *statspec = _cur_grffile->stations[stid + i];
+				break;
+
+			case 0x0F: { // Copy custom layout
 				byte srcid = grf_load_byte(&buf);
 				const StationSpec *srcstatspec = _cur_grffile->stations[srcid];
 
@@ -1953,51 +2209,51 @@
 				statspec->platforms = srcstatspec->platforms;
 				statspec->layouts   = srcstatspec->layouts;
 				statspec->copied_layouts = true;
-			}
-			break;
-
-		case 0x10: // Little/lots cargo threshold
-			FOR_EACH_OBJECT statspec[i]->cargo_threshold = grf_load_word(&buf);
-			break;
-
-		case 0x11: // Pylon placement
-			FOR_EACH_OBJECT statspec[i]->pylons = grf_load_byte(&buf);
-			break;
-
-		case 0x12: // Cargo types for random triggers
-			FOR_EACH_OBJECT statspec[i]->cargo_triggers = grf_load_dword(&buf);
-			break;
-
-		case 0x13: // General flags
-			FOR_EACH_OBJECT statspec[i]->flags = grf_load_byte(&buf);
-			break;
-
-		case 0x14: // Overhead wire placement
-			FOR_EACH_OBJECT statspec[i]->wires = grf_load_byte(&buf);
-			break;
-
-		case 0x15: // Blocked tiles
-			FOR_EACH_OBJECT statspec[i]->blocked = grf_load_byte(&buf);
-			break;
-
-		case 0x16: // @todo Animation info
-			FOR_EACH_OBJECT grf_load_word(&buf);
-			ret = true;
-			break;
-
-		case 0x17: // @todo Animation speed
-			FOR_EACH_OBJECT grf_load_byte(&buf);
-			ret = true;
-			break;
-
-		case 0x18: // @todo Animation triggers
-			FOR_EACH_OBJECT grf_load_word(&buf);
-			ret = true;
-			break;
-
-		default:
-			ret = true;
-			break;
+			} break;
+
+			case 0x10: // Little/lots cargo threshold
+				statspec->cargo_threshold = grf_load_word(&buf);
+				break;
+
+			case 0x11: // Pylon placement
+				statspec->pylons = grf_load_byte(&buf);
+				break;
+
+			case 0x12: // Cargo types for random triggers
+				statspec->cargo_triggers = grf_load_dword(&buf);
+				break;
+
+			case 0x13: // General flags
+				statspec->flags = grf_load_byte(&buf);
+				break;
+
+			case 0x14: // Overhead wire placement
+				statspec->wires = grf_load_byte(&buf);
+				break;
+
+			case 0x15: // Blocked tiles
+				statspec->blocked = grf_load_byte(&buf);
+				break;
+
+			case 0x16: // @todo Animation info
+				grf_load_word(&buf);
+				ret = true;
+				break;
+
+			case 0x17: // @todo Animation speed
+				grf_load_byte(&buf);
+				ret = true;
+				break;
+
+			case 0x18: // @todo Animation triggers
+				grf_load_word(&buf);
+				ret = true;
+				break;
+
+			default:
+				ret = true;
+				break;
+		}
 	}
 
 	*bufp = buf;
@@ -2008,7 +2264,6 @@
 static void FeatureChangeInfo(byte *buf, int len)
 {
 	byte *bufend = buf + len;
-	uint i;
 
 	/* <00> <feature> <num-props> <num-info> <id> (<property <new-info>)...
 	 *
@@ -2033,15 +2288,13 @@
 		/* GSF_BRIDGE */       BridgeChangeInfo,
 		/* GSF_TOWNHOUSE */    TownHouseChangeInfo,
 		/* GSF_GLOBALVAR */    GlobalVarChangeInfo,
-		/* GSF_INDUSTRYTILES */NULL,
-		/* GSF_INDUSTRIES */   NULL,
+		/* GSF_INDUSTRYTILES */IndustrytilesChangeInfo,
+		/* GSF_INDUSTRIES */   IndustriesChangeInfo,
 		/* GSF_CARGOS */       NULL, /* Cargo is handled during reservation */
 		/* GSF_SOUNDFX */      SoundEffectChangeInfo,
 		/* GSF_FSMPORTS */     FSMPortChangeInfo,
 	};
 
-	EngineInfo *ei = NULL;
-
 	if (!check_length(len, 6, "FeatureChangeInfo")) return;
 	buf++;
 	uint8 feature  = grf_load_byte(&buf);
@@ -2062,7 +2315,6 @@
 			grfmsg(0, "FeatureChangeInfo: Last engine ID %d out of bounds (max %d), skipping", engine + numinfo, _vehcounts[feature]);
 			return;
 		}
-		ei = &_engine_info[engine + _vehshifts[feature]];
 	}
 
 	while (numprops-- && buf < bufend) {
@@ -2073,43 +2325,49 @@
 			case GSF_TRAIN:
 			case GSF_ROAD:
 			case GSF_SHIP:
-			case GSF_AIRCRAFT:
-				/* Common properties for vehicles */
-				switch (prop) {
-					case 0x00: // Introduction date
-						FOR_EACH_OBJECT ei[i].base_intro = grf_load_word(&buf) + DAYS_TILL_ORIGINAL_BASE_YEAR;
-						break;
-
-					case 0x02: // Decay speed
-						FOR_EACH_OBJECT SB(ei[i].unk2, 0, 7, grf_load_byte(&buf) & 0x7F);
-						break;
-
-					case 0x03: // Vehicle life
-						FOR_EACH_OBJECT ei[i].lifelength = grf_load_byte(&buf);
-						break;
-
-					case 0x04: // Model life
-						FOR_EACH_OBJECT ei[i].base_life = grf_load_byte(&buf);
-						break;
-
-					case 0x06: // Climates available
-						FOR_EACH_OBJECT ei[i].climates = grf_load_byte(&buf);
-						break;
-
-					case 0x07: // Loading speed
-						/* Hyronymus explained me what does
-						 * this mean and insists on having a
-						 * credit ;-). --pasky */
-						FOR_EACH_OBJECT ei[i].load_amount = grf_load_byte(&buf);
-						break;
-
-					default:
-						if (handler[feature](engine, numinfo, prop, &buf, bufend - buf)) {
-							ignoring = true;
-						}
-						break;
+			case GSF_AIRCRAFT: {
+				bool handled = true;
+
+				for (uint i = 0; i < numinfo; i++) {
+					EngineInfo *ei = &_engine_info[engine + _vehshifts[feature] + i];
+
+					/* Common properties for vehicles */
+					switch (prop) {
+						case 0x00: // Introduction date
+							ei->base_intro = grf_load_word(&buf) + DAYS_TILL_ORIGINAL_BASE_YEAR;
+							break;
+
+						case 0x02: // Decay speed
+							SB(ei->unk2, 0, 7, grf_load_byte(&buf) & 0x7F);
+							break;
+
+						case 0x03: // Vehicle life
+							ei->lifelength = grf_load_byte(&buf);
+							break;
+
+						case 0x04: // Model life
+							ei->base_life = grf_load_byte(&buf);
+							break;
+
+						case 0x06: // Climates available
+							ei->climates = grf_load_byte(&buf);
+							break;
+
+						case 0x07: // Loading speed
+							/* Hyronymus explained me what does
+							 * this mean and insists on having a
+							 * credit ;-). --pasky */
+							ei->load_amount = grf_load_byte(&buf);
+							break;
+
+						default:
+							handled = false;
+							break;
+					}
 				}
-				break;
+
+				if (handled) break;
+			} /* FALL THROUGH */
 
 			default:
 				if (handler[feature](engine, numinfo, prop, &buf, bufend - buf)) {
@@ -2173,8 +2431,7 @@
 						_cur_grffile->cargo_max = numinfo;
 						_cur_grffile->cargo_list = MallocT<CargoLabel>(numinfo);
 
-						int i;
-						FOR_EACH_OBJECT {
+						for (uint i = 0; i < numinfo; i++) {
 							CargoLabel cl = grf_load_dword(&buf);
 							_cur_grffile->cargo_list[i] = BSWAP32(cl);
 						}
@@ -2209,8 +2466,6 @@
 	}
 }
 
-#undef FOR_EACH_OBJECT
-
 /**
  * Creates a spritegroup representing a callback result
  * @param value The value that was used to represent this callback result
@@ -2281,7 +2536,7 @@
 	);
 
 	for (uint16 i = 0; i < num_sets * num_ents; i++) {
-		LoadNextSprite(_cur_spriteid++, _file_index);
+		LoadNextSprite(_cur_spriteid++, _file_index, _nfo_line);
 		_nfo_line++;
 	}
 }
@@ -2337,6 +2592,7 @@
 
 	if (feature != _cur_grffile->spriteset_feature) {
 		grfmsg(1, "CreateGroupFromGroupID(0x%02X:0x%02X): Sprite set feature 0x%02X does not match action feature 0x%02X, skipping",
+				setid, type,
 				_cur_grffile->spriteset_feature, feature);
 		return NULL;
 	}
@@ -2535,7 +2791,8 @@
 					break;
 				}
 
-				case GSF_TOWNHOUSE: {
+				case GSF_TOWNHOUSE:
+				case GSF_INDUSTRYTILES: {
 					byte sprites     = _cur_grffile->spriteset_numents;
 					byte num_sprites = max((uint8)1, type);
 					uint i;
@@ -2615,6 +2872,35 @@
 					break;
 				}
 
+				case GSF_INDUSTRIES: {
+					if (type > 1) {
+						grfmsg(1, "NewSpriteGroup: Unsupported industry production version %d, skipping", type);
+						break;
+					}
+
+					group = AllocateSpriteGroup();
+					group->type = SGT_INDUSTRY_PRODUCTION;
+					group->g.indprod.version = type;
+					if (type == 0) {
+						for (uint i = 0; i < 3; i++) {
+							group->g.indprod.substract_input[i] = grf_load_word(&buf);
+						}
+						for (uint i = 0; i < 2; i++) {
+							group->g.indprod.add_output[i] = grf_load_word(&buf);
+						}
+						group->g.indprod.again = grf_load_byte(&buf);
+					} else {
+						for (uint i = 0; i < 3; i++) {
+							group->g.indprod.substract_input[i] = grf_load_byte(&buf);
+						}
+						for (uint i = 0; i < 2; i++) {
+							group->g.indprod.add_output[i] = grf_load_byte(&buf);
+						}
+						group->g.indprod.again = grf_load_byte(&buf);
+					}
+					break;
+				}
+
 				/* Loading of Tile Layout and Production Callback groups would happen here */
 				default: grfmsg(1, "NewSpriteGroup: Unsupported feature %d, skipping", feature);
 			}
@@ -2741,7 +3027,7 @@
 
 			/* Don't tell me you don't love duplicated code! */
 			if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
-				grfmsg(1, "FeatureMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping",
+				grfmsg(1, "VehicleMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping",
 				       groupid, _cur_grffile->spritegroups_count);
 				continue;
 			}
@@ -2860,6 +3146,57 @@
 	}
 }
 
+static void IndustryMapSpriteGroup(byte *buf, uint8 idcount, uint8 cidcount)
+{
+	if (!HASBIT(_ttdpatch_flags[3], 0x07)) return;
+
+	byte *bp = &buf[4 + idcount + cidcount * 3];
+	uint16 groupid = grf_load_word(&bp);
+
+	if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
+		grfmsg(1, "IndustryMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping.",
+		       groupid, _cur_grffile->spritegroups_count);
+		return;
+	}
+
+	for (uint i = 0; i < idcount; i++) {
+		uint8 id = buf[3 + i];
+		IndustrySpec *indsp = _cur_grffile->industryspec[id];
+
+		if (indsp == NULL) {
+			grfmsg(1, "IndustryMapSpriteGroup: Too many industries defined, skipping");
+			return;
+		}
+
+		indsp->grf_prop.spritegroup = _cur_grffile->spritegroups[groupid];
+	}
+}
+
+static void IndustrytileMapSpriteGroup(byte *buf, uint8 idcount, uint8 cidcount)
+{
+	if (!HASBIT(_ttdpatch_flags[3], 0x07)) return;
+
+	byte *bp = &buf[4 + idcount + cidcount * 3];
+	uint16 groupid = grf_load_word(&bp);
+
+	if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
+		grfmsg(1, "IndustrytileMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping.",
+		       groupid, _cur_grffile->spritegroups_count);
+		return;
+	}
+
+	for (uint i = 0; i < idcount; i++) {
+		uint8 id = buf[3 + i];
+		IndustryTileSpec *indtsp = _cur_grffile->indtspec[id];
+
+		if (indtsp == NULL) {
+			grfmsg(1, "IndustrytileMapSpriteGroup: Too many industry tiles defined, skipping");
+			return;
+		}
+
+		indtsp->grf_prop.spritegroup = _cur_grffile->spritegroups[groupid];
+	}
+}
 
 static void CargoMapSpriteGroup(byte *buf, uint8 idcount, uint8 cidcount)
 {
@@ -2949,6 +3286,14 @@
 			TownHouseMapSpriteGroup(buf, idcount, cidcount);
 			return;
 
+		case GSF_INDUSTRIES:
+			IndustryMapSpriteGroup(buf, idcount, cidcount);
+			return;
+
+		case GSF_INDUSTRYTILES:
+			IndustrytileMapSpriteGroup(buf, idcount, cidcount);
+			return;
+
 		case GSF_CARGOS:
 			CargoMapSpriteGroup(buf, idcount, cidcount);
 			return;
@@ -3021,6 +3366,11 @@
 				}
 				break;
 
+			case GSF_INDUSTRIES: {
+				AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
+				break;
+			}
+
 			case GSF_TOWNHOUSE:
 			default:
 				switch (GB(id, 8, 8)) {
@@ -3071,10 +3421,6 @@
 					}
 					break;
 
-				case GSF_INDUSTRIES :
-				case 0x48 :   // for generic strings
-					AddGRFString(_cur_spriteid, id, lang, name);
-					break;
 				default :
 					grfmsg(7, "FeatureNewName: Unsupported feature (0x%02X)", feature);
 					break;
@@ -3151,7 +3497,7 @@
 
 		case 0x0B: // tramways
 			if (num != 113) {
-				grfmsg(1, "GraphicsNews: Tramway graphics sprite count must be 113, skipping");
+				grfmsg(1, "GraphicsNew: Tramway graphics sprite count must be 113, skipping");
 				return;
 			}
 			replace = SPR_TRAMWAY_BASE;
@@ -3184,6 +3530,7 @@
 		default:
 			grfmsg(2, "GraphicsNew: Custom graphics (type 0x%02X) sprite block of length %u (unimplemented, ignoring)",
 					type, num);
+			_skip_sprites = num;
 			return;
 	}
 
@@ -3194,7 +3541,7 @@
 	}
 
 	for (; num > 0; num--) {
-		LoadNextSprite(replace == 0 ? _cur_spriteid++ : replace++, _file_index);
+		LoadNextSprite(replace == 0 ? _cur_spriteid++ : replace++, _file_index, _nfo_line);
 		_nfo_line++;
 	}
 }
@@ -3223,8 +3570,14 @@
 		case 0x83: // current climate, 0=temp, 1=arctic, 2=trop, 3=toyland
 			return _opt.landscape;
 
-		case 0x84: // GRF loading stage
-			return (_cur_stage > GLS_INIT) | ((_cur_stage == GLS_ACTIVATION) << 9);
+		case 0x84: { // GRF loading stage
+			uint32 res = 0;
+
+			if (_cur_stage > GLS_INIT) SETBIT(res, 0);
+			if (_cur_stage == GLS_RESERVE) SETBIT(res, 8);
+			if (_cur_stage == GLS_ACTIVATION) SETBIT(res, 9);
+			return res;
+		}
 
 		case 0x85: // TTDPatch flags, only for bit tests
 			if (cond_val == NULL) {
@@ -3507,7 +3860,9 @@
 		_skip_sprites = -1;
 
 		/* If an action 8 hasn't been encountered yet, disable the grf. */
-		if (_cur_stage != GLS_RESERVE && _cur_grfconfig->status != GCS_ACTIVATED) _cur_grfconfig->status = GCS_DISABLED;
+		if (_cur_grfconfig->status != GCS_ACTIVATED && _cur_grfconfig->status != GCS_INITIALISED) {
+			_cur_grfconfig->status = GCS_DISABLED;
+		}
 	}
 }
 
@@ -3557,7 +3912,7 @@
 
 	_cur_grffile->grfid = grfid;
 	_cur_grffile->grf_version = version;
-	_cur_grfconfig->status = _cur_stage < GLS_ACTIVATION ? GCS_INITIALISED : GCS_ACTIVATED;
+	_cur_grfconfig->status = _cur_stage < GLS_RESERVE ? GCS_INITIALISED : GCS_ACTIVATED;
 
 	/* Do swap the GRFID for displaying purposes since people expect that */
 	DEBUG(grf, 1, "GRFInfo: Loaded GRFv%d set %08lX - %s", version, BSWAP32(grfid), name);
@@ -3586,7 +3941,7 @@
 		);
 
 		for (uint j = 0; j < num_sprites; j++) {
-			LoadNextSprite(first_sprite + j, _file_index); // XXX
+			LoadNextSprite(first_sprite + j, _file_index, _nfo_line); // XXX
 			_nfo_line++;
 		}
 	}
@@ -3642,15 +3997,6 @@
 		STR_NEWGRF_ERROR_MSG_FATAL
 	};
 
-	/* AddGRFString expects the string to be referred to by an id in the newgrf
-	 * file. Errors messages are never referred to however, so invent ids that
-	 * are unlikely to be reached in a newgrf file so they don't overwrite
-	 * anything else. */
-	enum {
-		MESSAGE_STRING_ID = MAX_UVALUE(StringID) - 1,
-		MESSAGE_DATA_ID   = MAX_UVALUE(StringID)
-	};
-
 	if (!check_length(len, 6, "GRFLoadError")) return;
 
 	/* For now we can only show one message per newgrf file. */
@@ -3662,10 +4008,13 @@
 	byte message_id = grf_load_byte(&buf);
 	len -= 4;
 
+	/* Skip the error if it isn't valid for the current language. */
+	if (!CheckGrfLangID(lang, _cur_grffile->grf_version)) return;
+
 	/* Skip the error until the activation stage unless bit 7 of the severity
 	 * is set. */
-	if (!HASBIT(severity, 7) && _cur_stage < GLS_ACTIVATION) {
-		grfmsg(7, "GRFLoadError: Skipping non-fatal GRFLoadError in stage 1");
+	if (!HASBIT(severity, 7) && _cur_stage == GLS_INIT) {
+		grfmsg(7, "GRFLoadError: Skipping non-fatal GRFLoadError in stage %d", _cur_stage);
 		return;
 	}
 	CLRBIT(severity, 7);
@@ -3691,7 +4040,6 @@
 		return;
 	}
 
-	bool new_scheme = _cur_grffile->grf_version >= 7;
 	GRFError *error = CallocT<GRFError>(1);
 
 	error->severity = sevstr[severity];
@@ -3701,7 +4049,7 @@
 		const char *message = grf_load_string(&buf, len);
 		len -= (strlen(message) + 1);
 
-		error->message = AddGRFString(_cur_grffile->grfid, MESSAGE_STRING_ID, lang, new_scheme, message, STR_UNDEFINED);
+		error->custom_message = TranslateTTDPatchCodes(message);
 	} else {
 		error->message = msgstr[message_id];
 	}
@@ -3710,7 +4058,7 @@
 		const char *data = grf_load_string(&buf, len);
 		len -= (strlen(data) + 1);
 
-		error->data = AddGRFString(_cur_grffile->grfid, MESSAGE_DATA_ID, lang, new_scheme, data, STR_UNDEFINED);
+		error->data = TranslateTTDPatchCodes(data);
 	}
 
 	/* Only two parameter numbers can be used in the string. */
@@ -4131,6 +4479,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)
 {
@@ -4316,7 +4764,7 @@
 
 		for (uint c = 0; c < num_char; c++) {
 			SetUnicodeGlyph(size, base_char + c, _cur_spriteid);
-			LoadNextSprite(_cur_spriteid++, _file_index);
+			LoadNextSprite(_cur_spriteid++, _file_index, _nfo_line);
 			_nfo_line++;
 		}
 	}
@@ -4346,8 +4794,12 @@
 		/* If the file is not active but will be activated later, give an error
 		 * and disable this file. */
 		GRFError *error = CallocT<GRFError>(1);
+
+		char tmp[256];
+		GetString(tmp, STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE, lastof(tmp));
+		error->data = strdup(tmp);
+
 		error->message  = STR_NEWGRF_ERROR_LOAD_AFTER;
-		error->data     = STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE;
 		error->severity = STR_NEWGRF_ERROR_MSG_FATAL;
 
 		if (_cur_grfconfig->error != NULL) free(_cur_grfconfig->error);
@@ -4458,7 +4910,7 @@
 	                   |                                        (0 << 0x0C)  // newagerating
 	                   |       ((_patches.build_on_slopes ? 1 : 0) << 0x0D)  // buildonslopes
 	                   |         ((_patches.full_load_any ? 1 : 0) << 0x0E)  // fullloadany
-	                   |                                        (0 << 0x0F)  // planespeed
+	                   |                                        (1 << 0x0F)  // planespeed - TODO depends on patch when implemented
 	                   |                                        (0 << 0x10)  // moreindustriesperclimate - obsolete
 	                   |                                        (0 << 0x11)  // moretoylandfeatures
 	                   |                                        (1 << 0x12)  // newstations
@@ -4470,7 +4922,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
@@ -4498,8 +4950,8 @@
 	                   |                                        (0 << 0x13)  // followvehicle
 	                   |                                        (1 << 0x14)  // trams
 	                   |                                        (0 << 0x15)  // enhancetunnels
-	                   |                                        (0 << 0x16)  // shortrvs
-	                   |                                        (0 << 0x17)  // articulatedrvs
+	                   |                                        (1 << 0x16)  // shortrvs
+	                   |                                        (1 << 0x17)  // articulatedrvs
 	                   |                                        (1 << 0x1E); // variablerunningcosts
 }
 
@@ -4548,7 +5000,9 @@
 
 	for (file = _first_grffile; file != NULL; file = file->next) {
 		if (file->housespec == NULL) continue;
-		for (i = 0; i < HOUSE_MAX; i++) free(file->housespec[i]);
+		for (i = 0; i < HOUSE_MAX; i++) {
+			free(file->housespec[i]);
+		}
 
 		free(file->housespec);
 		file->housespec = NULL;
@@ -4626,6 +5080,18 @@
 	_cur_grffile   = NULL;
 }
 
+static void ResetNewGRFErrors()
+{
+	for (GRFConfig *c = _grfconfig; c != NULL; c = c->next) {
+		if (!HASBIT(c->flags, GCF_COPY) && c->error != NULL) {
+			free(c->error->custom_message);
+			free(c->error->data);
+			free(c->error);
+			c->error = NULL;
+		}
+	}
+}
+
 /**
  * Reset all NewGRF loaded data
  * TODO
@@ -4633,6 +5099,7 @@
 static void ResetNewGRFData()
 {
 	CleanUpStrings();
+	CleanUpGRFTownNames();
 
 	/* Copy/reset original engine info data */
 	memcpy(&_engine_info, &orig_engine_info, sizeof(orig_engine_info));
@@ -4693,6 +5160,9 @@
 	/* Reset NewGRF files */
 	ResetNewGRF();
 
+	/* Reset NewGRF errors. */
+	ResetNewGRFErrors();
+
 	/* Add engine type to engine data. This is needed for the refit precalculation. */
 	AddTypeToEngines();
 
@@ -4704,7 +5174,9 @@
 	_traininfo_vehicle_pitch = 0;
 	_traininfo_vehicle_width = 29;
 
-	_loaded_newgrf_features = 0;
+	_loaded_newgrf_features.has_2CC           = false;
+	_loaded_newgrf_features.has_newhouses     = false;
+	_loaded_newgrf_features.has_newindustries = false,
 
 	_signal_base = 0;
 	_coast_base = 0;
@@ -4767,7 +5239,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 */
@@ -4941,6 +5413,61 @@
 	}
 }
 
+/** Add all new industries to the industry array. Industry properties can be set at any
+ * time in the GRF file, so we can only add a industry spec to the industry array
+ * after the file has finished loading. */
+static void FinaliseIndustriesArray()
+{
+	for (GRFFile *file = _first_grffile; file != NULL; file = file->next) {
+		if (file->industryspec != NULL) {
+			for (int i = 0; i < NUM_INDUSTRYTYPES; i++) {
+				IndustrySpec *indsp = file->industryspec[i];
+
+				if (indsp != NULL && indsp->enabled) {
+					StringID strid;
+					/* process the conversion of text at the end, so to be sure everything will be fine
+					 * and available.  Check if it does not return undefind marker, which is a very good sign of a
+					 * substitute industry who has not changed the string been examined, thus using it as such */
+					strid = GetGRFStringID(indsp->grf_prop.grffile->grfid, indsp->name);
+					if (strid != STR_UNDEFINED) indsp->name = strid;
+
+					strid = GetGRFStringID(indsp->grf_prop.grffile->grfid, indsp->closure_text);
+					if (strid != STR_UNDEFINED) indsp->closure_text = strid;
+
+					strid = GetGRFStringID(indsp->grf_prop.grffile->grfid, indsp->production_up_text);
+					if (strid != STR_UNDEFINED) indsp->production_up_text = strid;
+
+					strid = GetGRFStringID(indsp->grf_prop.grffile->grfid, indsp->production_down_text);
+					if (strid != STR_UNDEFINED) indsp->production_down_text = strid;
+
+					strid = GetGRFStringID(indsp->grf_prop.grffile->grfid, indsp->new_industry_text);
+					if (strid != STR_UNDEFINED) indsp->new_industry_text = strid;
+
+					_industry_mngr.SetEntitySpec(indsp);
+					_loaded_newgrf_features.has_newindustries = true;
+				}
+			}
+		}
+
+		if (file->indtspec != NULL) {
+			for (int i = 0; i < NUM_INDUSTRYTILES; i++) {
+				IndustryTileSpec *indtsp = file->indtspec[i];
+				if (indtsp != NULL) {
+					_industile_mngr.SetEntitySpec(indtsp);
+				}
+			}
+		}
+	}
+
+	for (uint j = 0; j < NUM_INDUSTRYTYPES; j++) {
+		IndustrySpec *indsp = &_industry_specs[j];
+		if (indsp->enabled && indsp->grf_prop.grffile != NULL) {
+			for (uint i = 0; i < 3; i++) {
+				indsp->conflicting[i] = MapNewGRFIndustryType(indsp->conflicting[i], indsp->grf_prop.grffile->grfid);
+			}
+		}
+	}
+}
 
 /** Each cargo string needs to be mapped from TTDPatch to OpenTTD string IDs.
  * This is done after loading so that strings from Action 4 will be mapped
@@ -4990,14 +5517,14 @@
 		/* 0x05 */ { SkipAct5, SkipAct5,  SkipAct5,        SkipAct5,       SkipAct5,          GraphicsNew, },
 		/* 0x06 */ { NULL,     NULL,      NULL,            CfgApply,       CfgApply,          CfgApply, },
 		/* 0x07 */ { NULL,     NULL,      NULL,            NULL,           SkipIf,            SkipIf, },
-		/* 0x08 */ { ScanInfo, NULL,      NULL,            GRFInfo,        NULL,              GRFInfo, },
+		/* 0x08 */ { ScanInfo, NULL,      NULL,            GRFInfo,        GRFInfo,           GRFInfo, },
 		/* 0x09 */ { NULL,     NULL,      NULL,            SkipIf,         SkipIf,            SkipIf, },
 		/* 0x0A */ { SkipActA, SkipActA,  SkipActA,        SkipActA,       SkipActA,          SpriteReplace, },
 		/* 0x0B */ { NULL,     NULL,      NULL,            GRFLoadError,   GRFLoadError,      GRFLoadError, },
 		/* 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, },
@@ -5044,7 +5571,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
@@ -5059,6 +5586,7 @@
 	if (stage != GLS_FILESCAN && stage != GLS_SAFETYSCAN && stage != GLS_LABELSCAN) {
 		_cur_grffile = GetFileByFilename(filename);
 		if (_cur_grffile == NULL) error("File '%s' lost in cache.\n", filename);
+		if (stage == GLS_RESERVE && config->status != GCS_INITIALISED) return;
 		if (stage == GLS_ACTIVATION && config->status != GCS_INITIALISED) return;
 	}
 
@@ -5126,6 +5654,8 @@
 
 void InitDepotWindowBlockSizes();
 
+extern void SortTownGeneratorNames();
+
 static void AfterLoadGRFs()
 {
 	/* Update the bitmasks for the vehicle lists */
@@ -5144,12 +5674,18 @@
 	/* Add all new houses to the house array. */
 	FinaliseHouseArray();
 
+	/* Add all new industries to the industry array. */
+	FinaliseIndustriesArray();
+
 	/* Create dynamic list of industry legends for smallmap_gui.cpp */
 	BuildIndustriesLegend();
 
 	/* 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)
@@ -5168,13 +5704,16 @@
 		_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 (!FileExists(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);
-			if (stage == GLS_ACTIVATION) {
+			if (stage == GLS_RESERVE) {
+				if (c->status == GCS_ACTIVATED) c->status = GCS_INITIALISED;
+			} else if (stage == GLS_ACTIVATION) {
 				ClearTemporaryNewGRFData();
 				BuildCargoTranslationMap();
 				DEBUG(sprite, 2, "LoadNewGRF: Currently %i sprites are loaded", _cur_spriteid);
--- a/src/newgrf.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/newgrf.h	Sat Jul 14 19:42:58 2007 +0000
@@ -88,14 +88,14 @@
 extern SpriteID _signal_base;
 extern SpriteID _coast_base;
 
-enum GRFLoadedFeatures {
-	GRFLOADED_2CC,             // Set if any vehicle is loaded which uses 2cc (two company colours).
-	GRFLOADED_NEWHOUSES,       // Set if there are any newhouses loaded.
-	GRFLOADED_NEWINDUSTRIES,   // Set if there are any newindustries loaded.
+struct GRFLoadedFeatures {
+	bool has_2CC;             ///< Set if any vehicle is loaded which uses 2cc (two company colours).
+	bool has_newhouses;       ///< Set if there are any newhouses loaded.
+	bool has_newindustries;   ///< Set if there are any newindustries loaded.
 };
 
 /* Indicates which are the newgrf features currently loaded ingame */
-extern uint8 _loaded_newgrf_features;
+extern GRFLoadedFeatures _loaded_newgrf_features;
 
 void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage);
 void LoadNewGRF(uint load_index, uint file_index);
--- a/src/newgrf_callbacks.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/newgrf_callbacks.h	Sat Jul 14 19:42:58 2007 +0000
@@ -9,161 +9,173 @@
 
 /**
  * List of implemented NewGRF callbacks.
+ * Most of these callbacks are only triggered when the corresponding
+ * bit is set in the callback flags/trigger for a vehicle, house,
+ * industry, etc.
  * Names are formatted as CBID_<CLASS>_<CALLBACK>
  */
 enum CallbackID {
-	/* Powered wagons, if the result is lower as 0x40 then the wagon is powered
-	 * @todo : interpret the rest of the result, aka "visual effects" */
-	CBID_TRAIN_WAGON_POWER          = 0x10,
-
-	/* Vehicle length, returns the amount of 1/8's the vehicle is shorter
-	 * only for train vehicles */
-	CBID_TRAIN_VEHICLE_LENGTH       = 0x11,
-
-	/* Called (if appropriate bit in callback mask is set) to determine the
-	 * amount of cargo to load per unit of time when using gradual loading. */
-	CBID_VEHICLE_LOAD_AMOUNT        = 0x12,
-
-	/* Called (if appropriate bit in callback mask is set) to determine if a
-	 * newstation should be made available to build */
-	CBID_STATION_AVAILABILITY       = 0x13,
-
-	/* Called (if appropriate bit in callback mask is set) when drawing a tile
-	 * to choose a sprite layout to draw, instead of the standard 0-7 range */
-	CBID_STATION_SPRITE_LAYOUT      = 0x14,
-
-	/* Refit capacity, the passed vehicle needs to have its ->cargo_type set to
-	 * the cargo we are refitting to, returns the new cargo capacity */
-	CBID_VEHICLE_REFIT_CAPACITY     = 0x15,
-
-	CBID_TRAIN_ARTIC_ENGINE         = 0x16,
-
-	/* Called (if appropriate bit in callback mask is set) to determine whether
-	 * the house can be built on the specified tile. */
-	CBID_HOUSE_ALLOW_CONSTRUCTION   = 0x17,
-
-	CBID_VEHICLE_CARGO_SUFFIX       = 0x19,
-
-	/* Called (if appropriate bit in callback mask is set) to determine
-	 * the next animation frame. */
-	CBID_HOUSE_ANIMATION_NEXT_FRAME = 0x1A,
-
-	/* Called (if appropriate bit in callback mask is set) for periodically
-	 * starting or stopping the animation. */
-	CBID_HOUSE_ANIMATION_START_STOP = 0x1B,
-
-	/* Called (if appropriate bit in callback mask is set) whenever the
-	 * construction state of a house changes. */
-	CBID_CONSTRUCTION_STATE_CHANGE  = 0x1C,
-
-	CBID_TRAIN_ALLOW_WAGON_ATTACH   = 0x1D,
-
-	/* Called (if appropriate bit in callback mask is set) to determine the
-	 * colour of a town building. */
-	CBID_BUILDING_COLOUR            = 0x1E,
-
-	/* Called (if appropriate bit in callback mask is set) to decide how much
-	 * cargo a town building can accept. */
-	CBID_HOUSE_CARGO_ACCEPTANCE     = 0x1F, // not yet implemented
-
-	/* Called (if appropriate bit in callback mask is set) to indicate
-	 * how long the current animation frame should last. */
-	CBID_HOUSE_ANIMATION_SPEED      = 0x20,
-
-	/* Called (if appropriate bit in callback mask is set) periodically to
-	 * determine if a house should be destroyed. */
-	CBID_HOUSE_DESTRUCTION          = 0x21,
-
-	/* Called to determine if the given industry type is available */
-	CBID_INDUSTRY_AVAILABLE         = 0x22, // not yet implemented
-
-	/* This callback is called from vehicle purchase lists. It returns a value to be
-	 * used as a custom string ID in the 0xD000 range. */
-	CBID_VEHICLE_ADDITIONAL_TEXT    = 0x23,
-
-	/* Called when building a station to customize the tile layout */
-	CBID_STATION_TILE_LAYOUT        = 0x24,
-
-	/* Called for periodically starting or stopping the animation. */
-	CBID_INDTILE_ANIM_START_STOP    = 0x25, // not yet implemented
+	/** Set when calling a randomizing trigger (almost undocumented). */
+	CBID_RANDOM_TRIGGER                  = 0x01,
 
-	/* Called to determine industry tile next animation frame. */
-	CBID_INDTILE_ANIM_NEXT_FRAME    = 0x26, // not yet implemented
-
-	/* Called to indicate how long the current animation frame should last. */
-	CBID_INDTILE_ANIMATION_SPEED    = 0x27, // not yet implemented
-
-	/* Called to determine if the given industry can be built on specific area */
-	CBID_INDUSTRY_LOCATION          = 0x28, // not yet implemented
-
-	/* Called on production changes, so it can be adjusted */
-	CBID_INDUSTRY_PRODUCTION_CHANGE = 0x29, // not yet implemented
-
-	/* Called (if appropriate bit in callback mask is set) to determine which
-	 * cargoes a town building should accept. */
-	CBID_HOUSE_ACCEPT_CARGO         = 0x2A, // not yet implemented
+	/** Powered wagons, if the result is lower as 0x40 then the wagon is powered
+	 * @todo : interpret the rest of the result, aka "visual effects". */
+	CBID_TRAIN_WAGON_POWER               = 0x10,
 
-	/* Called to query the cargo acceptance of the industry tile */
-	CBID_INDTILE_ACCEPT_CARGO       = 0x2B, // not yet implemented
-
-	/* Called to determine which cargoes an industry should accept. */
-	CBID_INDUSTRY_ACCEPT_CARGO      = 0x2C, // not yet implemented
-
-	/* Called to determine if a specific colour map should be used for a vehicle
-	 * instead of the default livery */
-	CBID_VEHICLE_COLOUR_MAPPING     = 0x2D,
+	/** Vehicle length, returns the amount of 1/8's the vehicle is shorter for trains and RVs. */
+	CBID_VEHICLE_LENGTH                  = 0x11,
 
-	/* Called (if appropriate bit in callback mask is set) to determine how much
-	 * cargo a town building produces. */
-	CBID_HOUSE_PRODUCE_CARGO        = 0x2E, // not yet implemented
+	/** Determine the amount of cargo to load per unit of time when using gradual loading. */
+	CBID_VEHICLE_LOAD_AMOUNT             = 0x12,
 
-	/* Called to determine if the given industry tile can be built on specific tile */
-	CBID_INDTILE_SHAPE_CHECK        = 0x2F, // not yet implemented
+	/** Determine whether a newstation should be made available to build. */
+	CBID_STATION_AVAILABILITY            = 0x13,
 
-	/* Called to determine the type (if any) of foundation to draw for industry tile */
-	CBID_INDUSTRY_DRAW_FOUNDATIONS  = 0x30, // not yet implemented
+	/** Choose a sprite layout to draw, instead of the standard 0-7 range. */
+	CBID_STATION_SPRITE_LAYOUT           = 0x14,
 
-	/* Called when the player (or AI) tries to start or stop a vehicle. Mainly
+	/** Refit capacity, the passed vehicle needs to have its ->cargo_type set to
+	 * the cargo we are refitting to, returns the new cargo capacity. */
+	CBID_VEHICLE_REFIT_CAPACITY          = 0x15,
+
+	/** Builds articulated engines for trains and RVs. */
+	CBID_VEHICLE_ARTIC_ENGINE            = 0x16,
+
+	/** Determine whether the house can be built on the specified tile. */
+	CBID_HOUSE_ALLOW_CONSTRUCTION        = 0x17,
+
+	/** AI construction/purchase selection */
+	CBID_GENERIC_AI_PURCHASE_SELECTION   = 0x18, // not implemented
+
+	/** Determine the cargo "suffixes" for each refit possibility of a cargo. */
+	CBID_VEHICLE_CARGO_SUFFIX            = 0x19,
+
+	/** Determine the next animation frame for a house. */
+	CBID_HOUSE_ANIMATION_NEXT_FRAME      = 0x1A,
+
+	/** Called for periodically starting or stopping the animation. */
+	CBID_HOUSE_ANIMATION_START_STOP      = 0x1B,
+
+	/** Called whenever the construction state of a house changes. */
+	CBID_HOUSE_CONSTRUCTION_STATE_CHANGE = 0x1C,
+
+	/** Determine whether a wagon can be attached to an already existing train. */
+	CBID_TRAIN_ALLOW_WAGON_ATTACH        = 0x1D,
+
+	/** Called to determine the colour of a town building. */
+	CBID_BUILDING_COLOUR                 = 0x1E,
+
+	/** Called to decide how much cargo a town building can accept. */
+	CBID_HOUSE_CARGO_ACCEPTANCE          = 0x1F,
+
+	/** Called to indicate how long the current animation frame should last. */
+	CBID_HOUSE_ANIMATION_SPEED           = 0x20,
+
+	/** Called periodically to determine if a house should be destroyed. */
+	CBID_HOUSE_DESTRUCTION               = 0x21,
+
+	/** Called to determine if the given industry type is available */
+	CBID_INDUSTRY_AVAILABLE              = 0x22, // not implemented
+
+	/** This callback is called from vehicle purchase lists. It returns a value to be
+	 * used as a custom string ID in the 0xD000 range. */
+	CBID_VEHICLE_ADDITIONAL_TEXT         = 0x23,
+
+	/** Called when building a station to customize the tile layout */
+	CBID_STATION_TILE_LAYOUT             = 0x24,
+
+	/** Called for periodically starting or stopping the animation. */
+	CBID_INDTILE_ANIM_START_STOP         = 0x25,
+
+	/** Called to determine industry tile next animation frame. */
+	CBID_INDTILE_ANIM_NEXT_FRAME         = 0x26,
+
+	/** Called to indicate how long the current animation frame should last. */
+	CBID_INDTILE_ANIMATION_SPEED         = 0x27,
+
+	/** Called to determine if the given industry can be built on specific area. */
+	CBID_INDUSTRY_LOCATION               = 0x28,
+
+	/** Called on production changes, so it can be adjusted. */
+	CBID_INDUSTRY_PRODUCTION_CHANGE      = 0x29, // not implemented
+
+	/** Called to determine which cargoes a town building should accept. */
+	CBID_HOUSE_ACCEPT_CARGO              = 0x2A,
+
+	/** Called to query the cargo acceptance of the industry tile */
+	CBID_INDTILE_CARGO_ACCEPTANCE        = 0x2B,
+
+	/** Called to determine which cargoes an industry should accept. */
+	CBID_INDTILE_ACCEPT_CARGO            = 0x2C,
+
+	/** Called to determine if a specific colour map should be used for a vehicle
+	 * instead of the default livery. */
+	CBID_VEHICLE_COLOUR_MAPPING          = 0x2D,
+
+	/** Called to determine how much cargo a town building produces. */
+	CBID_HOUSE_PRODUCE_CARGO             = 0x2E,
+
+	/** Called to determine if the given industry tile can be built on specific tile. */
+	CBID_INDTILE_SHAPE_CHECK             = 0x2F,
+
+	/** Called to determine the type (if any) of foundation to draw for industry tile. */
+	CBID_INDUSTRY_DRAW_FOUNDATIONS       = 0x30,
+
+	/** Called when the player (or AI) tries to start or stop a vehicle. Mainly
 	 * used for preventing a vehicle from leaving the depot. */
-	CBID_VEHICLE_START_STOP_CHECK   = 0x31,
-
-	/* Called to play a special sound effect */
-	CBID_VEHICLE_SOUND_EFFECT       = 0x33,
-
-	/* Called monthly on production changes, so it can be adjusted more frequently */
-	CBID_INDUSTRY_MONTHLYPROD_CHANGE= 0x35, // not yet implemented
-
-	/* Called to modify various vehicle properties. Callback parameter 1
-	 * specifies the property index, as used in Action 0, to change. */
-	CBID_VEHICLE_MODIFY_PROPERTY    = 0x36,
-
-	/* Called to determine text to display after cargo name */
-	CBID_INDUSTRY_CARGO_SUFFIX      = 0x37, // not yet implemented
-
-	/* Called to determine more text in the fund industry window */
-	CBID_INDUSTRY_FUND_MORE_TEXT    = 0x38, // not yet implemented
+	CBID_VEHICLE_START_STOP_CHECK        = 0x31,
 
-	/* Called to calculate the income of delivered cargo */
-	CBID_CARGO_PROFIT_CALC          = 0x39,
-
-	/* Called to determine more text in the industry window */
-	CBID_INDUSTRY_WINDOW_MORE_TEXT  = 0x3A, // not yet implemented
-
-	/* Called to determine industry special effects */
-	CBID_INDUSTRY_SPECIAL_EFFECT    = 0x3B, // not yet implemented
+	/** Called for every vehicle every 32 days (not all on same date though). */
+	CBID_VEHICLE_32DAY_CALLBACK          = 0x32, // not implemented
 
-	/* Called to determine if industry can alter the ground below industry tile */
-	CBID_INDUSTRY_AUTOSLOPE         = 0x3C, // not yet implemented
-
-	/* Called to determine if the industry can still accept or refuse  more cargo arrival */
-	CBID_INDUSTRY_REFUSE_CARGO      = 0x3D, // not yet implemented
+	/** Called to play a special sound effect */
+	CBID_VEHICLE_SOUND_EFFECT            = 0x33,
 
-	/* Called (if appropriate bit in callback mask set) to determine whether a
-	 * town building can be destroyed. */
-	CBID_HOUSE_DENY_DESTRUCTION     = 0x143,
+	/** Return the vehicles this given vehicle can be "upgraded" to. */
+	CBID_VEHICLE_AUTOREPLACE_SELECTION   = 0x34,
 
-	/* Called to calculate part of a station rating */
-	CBID_CARGO_STATION_RATING_CALC  = 0x145,
+	/** Called monthly on production changes, so it can be adjusted more frequently */
+	CBID_INDUSTRY_MONTHLYPROD_CHANGE     = 0x35, // not implemented
+
+	/** Called to modify various vehicle properties. Callback parameter 1
+	 * specifies the property index, as used in Action 0, to change. */
+	CBID_VEHICLE_MODIFY_PROPERTY         = 0x36,
+
+	/** Called to determine text to display after cargo name */
+	CBID_INDUSTRY_CARGO_SUFFIX           = 0x37, // not implemented
+
+	/** Called to determine more text in the fund industry window */
+	CBID_INDUSTRY_FUND_MORE_TEXT         = 0x38,
+
+	/** Called to calculate the income of delivered cargo */
+	CBID_CARGO_PROFIT_CALC               = 0x39,
+
+	/** Called to determine more text in the industry window */
+	CBID_INDUSTRY_WINDOW_MORE_TEXT       = 0x3A,
+
+	/** Called to determine industry special effects */
+	CBID_INDUSTRY_SPECIAL_EFFECT         = 0x3B,
+
+	/** Called to determine if industry can alter the ground below industry tile */
+	CBID_INDUSTRY_AUTOSLOPE              = 0x3C, // not implemented
+
+	/** Called to determine if the industry can still accept or refuse more cargo arrival */
+	CBID_INDUSTRY_REFUSE_CARGO           = 0x3D,
+
+	/** Called to determine whether a town building can be destroyed. */
+	CBID_HOUSE_DENY_DESTRUCTION          = 0x143,
+
+	/** Select an ambient sound to play for a given type of tile. */
+	CBID_SOUNDS_AMBIENT_EFFECT           = 0x144, // not implemented
+
+	/** Called to calculate part of a station rating. */
+	CBID_CARGO_STATION_RATING_CALC       = 0x145,
+
+	/** Allow signal sprites to be replaced dynamically. */
+	CBID_NEW_SIGNALS_SPRITE_DRAW         = 0x146, // not implemented
+
+	/** Add an offset to the default sprite numbers to show another sprite. */
+	CBID_CANALS_SPRITE_OFFSET            = 0x147, // not implemented
 };
 
 /**
@@ -237,7 +249,7 @@
 enum IndustryTileCallbackMask {
 	CBM_INDT_ANIM_NEXT_FRAME          = 0,  ///< decides next animation frame
 	CBM_INDT_ANIM_SPEED               = 1,  ///< decides animation speed
-	CBM_INDT_ACCEPTANCE_CARGO         = 2,  ///< decides amount of cargo acceptance
+	CBM_INDT_CARGO_ACCEPTANCE         = 2,  ///< decides amount of cargo acceptance
 	CBM_INDT_ACCEPT_CARGO             = 3,  ///< decides accepted types
 	CBM_INDT_SHAPE_CHECK              = 4,  ///< decides slope suitability
 	CBM_INDT_DRAW_FOUNDATIONS         = 5,  ///< decides if default foundations need to be drawn
--- a/src/newgrf_canal.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/newgrf_canal.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -7,6 +7,7 @@
 #include "debug.h"
 #include "newgrf.h"
 #include "newgrf_callbacks.h"
+#include "newgrf_commons.h"
 #include "newgrf_spritegroup.h"
 #include "newgrf_canal.h"
 
@@ -44,8 +45,7 @@
 			return TileHeight(tile);
 
 		case 0x81:
-			return ((_opt.landscape == LT_ARCTIC && GetTileZ(tile) > GetSnowLine()) ? 4 : 0) |
-			       (_opt.landscape == LT_TROPIC ? GetTropicZone(tile) : 0);
+			return GetTerrainType(tile);
 	}
 
 	DEBUG(grf, 1, "Unhandled canal property 0x%02X", variable);
--- a/src/newgrf_cargo.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/newgrf_cargo.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -110,3 +110,20 @@
 	/* Else the cargo value is a 'climate independent' 'bitnum' */
 	return GetCargoIDByBitnum(cargo);
 }
+
+uint8 GetReverseCargoTranslation(CargoID cargo, const GRFFile *grffile)
+{
+	/* Pre-version 7 uses the 'climate dependent' ID, i.e. cargo is the cargo ID */
+	if (grffile->grf_version < 7) return cargo;
+
+	const CargoSpec *cs = GetCargo(cargo);
+
+	/* If the GRF contains a translation table (and the cargo is in the table)
+	 * then get the cargo ID for the label */
+	for (uint i = 0; i < grffile->cargo_max; i++) {
+		if (cs->label == grffile->cargo_list[i]) return i;
+	}
+
+	/* No matching label was found, so we return the 'climate independent' 'bitnum' */
+	return cs->bitnum;;
+}
--- a/src/newgrf_cargo.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/newgrf_cargo.h	Sat Jul 14 19:42:58 2007 +0000
@@ -28,5 +28,6 @@
 SpriteID GetCustomCargoSprite(const CargoSpec *cs);
 uint16 GetCargoCallback(uint16 callback, uint32 param1, uint32 param2, const CargoSpec *cs);
 CargoID GetCargoTranslation(uint8 cargo, const GRFFile *grffile);
+uint8 GetReverseCargoTranslation(CargoID cargo, const GRFFile *grffile);
 
 #endif /* NEWGRF_CARGO_H */
--- a/src/newgrf_commons.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/newgrf_commons.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -6,6 +6,8 @@
 
 #include "stdafx.h"
 #include "openttd.h"
+#include "variables.h"
+#include "landscape.h"
 #include "town.h"
 #include "industry.h"
 #include "newgrf.h"
@@ -71,7 +73,7 @@
 {
 	const EntityIDMapping *map;
 
-	for (uint16 id = max_offset; id < max_new_entities; id++) {
+	for (uint16 id = 0; id < max_new_entities; id++) {
 		map = &mapping_ID[id];
 		if (map->entity_id == grf_local_id && map->grfid == grfid) {
 			return id;
@@ -148,3 +150,121 @@
 		entity_overrides[i] = invalid_ID;
 	}
 }
+
+/** Method to find an entity ID and to mark it as reserved for the Industry to be included.
+ * @param grf_local_id ID used by the grf file for pre-installation work (equivalent of TTDPatch's setid
+ * @param grfid ID of the current grf file
+ * @param substitute_id industry from which data has been copied
+ * @return a free entity id (slotid) if ever one has been found, or Invalid_ID marker otherwise
+ */
+uint16 IndustryOverrideManager::AddEntityID(byte grf_local_id, uint32 grfid, byte substitute_id)
+{
+	/* This entity hasn't been defined before, so give it an ID now. */
+	for (uint16 id = 0; id < max_new_entities; id++) {
+		/* Get the real live industry */
+		const IndustrySpec *inds = GetIndustrySpec(id);
+
+		/* This industry must be one that is not available(enabled), mostly because of climate.
+		 * And it must not already be used by a grf (grffile == NULL).
+		 * So reseve this slot here, as it is the chosen one */
+		if (!inds->enabled && inds->grf_prop.grffile == NULL) {
+			EntityIDMapping *map = &mapping_ID[id];
+
+			if (map->entity_id == 0 && map->grfid == 0) {
+				/* winning slot, mark it as been used */
+				map->entity_id     = grf_local_id;
+				map->grfid         = grfid;
+				map->substitute_id = substitute_id;
+				return id;
+			}
+		}
+	}
+
+	return invalid_ID;
+}
+
+/** Method to install the new indistry data in its proper slot
+ * The slot assigment is internal of this method, since it requires
+ * checking what is available
+ * @param inds Industryspec that comes from the grf decoding process
+ */
+void IndustryOverrideManager::SetEntitySpec(const IndustrySpec *inds)
+{
+	/* First step : We need to find if this industry is already specified in the savegame data */
+	IndustryType ind_id = this->GetID(inds->grf_prop.local_id, inds->grf_prop.grffile->grfid);
+
+	if (ind_id == invalid_ID) { // not found?  So this is the introduction of a new industry
+		/* Second step is dealing with the override. */
+		if (inds->grf_prop.override != invalid_ID && _industry_specs[inds->grf_prop.override].grf_prop.override == invalid_ID) {
+			/* this is an override, which means it will take the place of the industry it is
+			 * designed to replace. Before we conclude that the override is allowed,
+			* we first need to verify that the slot is not holding another override
+			* If it's the case,it will be considered as a normal substitute */
+			ind_id = inds->grf_prop.override;
+		} else {
+			/* It has already been overriden, so you've lost your place old boy.
+			 * Or it is a simple substitute.
+			 * In both case, we need to find a free available slot */
+			ind_id = this->AddEntityID(inds->grf_prop.local_id, inds->grf_prop.grffile->grfid, inds->grf_prop.subst_id);
+		}
+	}
+
+	if (ind_id == invalid_ID) {
+		grfmsg(1, "Industry.SetEntitySpec: Too many industries allocated. Ignoring.");
+		return;
+	}
+
+	/* Now that we know we can use the given id, copy the spech to its final destination*/
+	memcpy(&_industry_specs[ind_id], inds, sizeof(*inds));
+	/* and mark it as usable*/
+	_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
+ * @return value corresponding to the grf expected format:
+ *         Terrain type: 0 normal, 1 desert, 2 rainforest, 4 on or above snowline */
+uint32 GetTerrainType(TileIndex tile)
+{
+	switch (_opt.landscape) {
+		case LT_TROPIC: return GetTropicZone(tile) == TROPICZONE_DESERT ? 1 : 2;
+		case LT_ARCTIC: return GetTileZ(tile) >= GetSnowLine() ? 4 : 0;
+		default:        return 0;
+	}
+}
+
+TileIndex GetNearbyTile(byte parameter, TileIndex tile)
+{
+	int8 x = GB(parameter, 0, 4);
+	int8 y = GB(parameter, 4, 4);
+
+	if (x >= 8) x -= 16;
+	if (y >= 8) y -= 16;
+
+	/* Make sure we never roam outside of the map */
+	return TILE_MASK(tile + TileDiffXY(x, y));
+}
--- a/src/newgrf_commons.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/newgrf_commons.h	Sat Jul 14 19:42:58 2007 +0000
@@ -35,7 +35,6 @@
 
 	uint16 invalid_ID;       ///< ID used to dected invalid entities;
 
-	virtual uint16 AddEntityID(byte grf_local_id, uint32 grfid, byte substitute_id);
 public:
 	EntityIDMapping *mapping_ID; ///< mapping of ids from grf files.  Public out of convenience
 
@@ -46,6 +45,7 @@
 	void ResetMapping();
 
 	void Add(uint8 local_id, uint entity_type);
+	virtual uint16 AddEntityID(byte grf_local_id, uint32 grfid, byte substitute_id);
 
 	uint16 GetSubstituteID(byte entity_id);
 	uint16 GetID(uint8 grf_local_id, uint32 grfid);
@@ -59,11 +59,38 @@
 class HouseOverrideManager : public OverrideManagerBase
 {
 public:
-	HouseOverrideManager(uint16 offset, uint16 maximum, uint16 invalid) : OverrideManagerBase(offset, maximum, invalid) {};
+	HouseOverrideManager(uint16 offset, uint16 maximum, uint16 invalid) :
+			OverrideManagerBase(offset, maximum, invalid) {};
 	void SetEntitySpec(const HouseSpec *hs);
 };
 
 
+struct IndustrySpec;
+class IndustryOverrideManager : public OverrideManagerBase
+{
+	public:
+		IndustryOverrideManager(uint16 offset, uint16 maximum, uint16 invalid) :
+				OverrideManagerBase(offset, maximum, invalid) {};
+
+		virtual uint16 AddEntityID(byte grf_local_id, uint32 grfid, byte substitute_id);
+		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);
 
 #endif /* NEWGRF_COMMONS_H */
--- a/src/newgrf_config.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/newgrf_config.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -40,7 +40,7 @@
 	size_t len;
 
 	/* open the file */
-	f = fopen(config->full_path, "rb");
+	f = FioFOpenFile(config->filename);
 	if (f == NULL) return false;
 
 	/* calculate md5sum */
@@ -59,15 +59,11 @@
 /* Find the GRFID and calculate the md5sum */
 bool FillGRFDetails(GRFConfig *config, bool is_static)
 {
-	if (!FileExists(config->full_path)) {
+	if (!FioCheckFileExists(config->filename)) {
 		config->status = GCS_NOT_FOUND;
 		return false;
 	}
 
-	if (config->filename == NULL) {
-		config->filename = strdup(strrchr(config->full_path, PATHSEPCHAR) + 1);
-	}
-
 	/* Find and load the Action 8 information */
 	/* 62 is the last file slot before sample.cat.
 	 * Should perhaps be some "don't care" value */
@@ -93,10 +89,14 @@
 	/* 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);
-		free((*config)->error);
+
+		if ((*config)->error != NULL) {
+			free((*config)->error->custom_message);
+			free((*config)->error->data);
+			free((*config)->error);
+		}
 	}
 	free(*config);
 	*config = NULL;
@@ -118,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);
@@ -127,14 +128,18 @@
 		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) {
 			c->error = CallocT<GRFError>(1);
 			memcpy(c->error, src->error, sizeof(GRFError));
+			if (src->error->data != NULL) c->error->data = strdup(src->error->data);
+			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;
 	}
@@ -182,7 +187,7 @@
 	GRFConfig **tail = dst;
 	while (*tail != NULL) tail = &(*tail)->next;
 
-	CopyGRFConfigList(tail, _grfconfig_static);
+	CopyGRFConfigList(tail, _grfconfig_static, false);
 	RemoveDuplicatesFromGRFConfigList(*dst);
 }
 
@@ -202,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);
 }
 
@@ -260,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);
@@ -278,7 +274,7 @@
 extern bool FiosIsValidFile(const char *path, const struct dirent *ent, struct stat *sb);
 
 /* Scan a path for NewGRFs */
-static uint ScanPath(const char *path)
+static uint ScanPath(const char *path, int basepath_length)
 {
 	uint num = 0;
 	struct stat sb;
@@ -299,7 +295,7 @@
 			/* Directory */
 			if (strcmp(d_name, ".") == 0 || strcmp(d_name, "..") == 0) continue;
 			AppendPathSeparator(filename, lengthof(filename));
-			num += ScanPath(filename);
+			num += ScanPath(filename, basepath_length);
 		} else if (sb.st_mode & S_IFREG) {
 			/* File */
 			char *ext = strrchr(filename, '.');
@@ -309,7 +305,7 @@
 			if (strcasecmp(ext, ".grf") != 0) continue;
 
 			GRFConfig *c = CallocT<GRFConfig>(1);
-			c->full_path = strdup(filename);
+			c->filename = strdup(filename + basepath_length);
 
 			bool added = true;
 			if (FillGRFDetails(c, false)) {
@@ -336,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);
@@ -355,13 +350,17 @@
 /* Scan for all NewGRFs */
 void ScanNewGRFFiles()
 {
-	uint num;
+	Searchpath sp;
+	char path[MAX_PATH];
+	uint num = 0;
 
 	ClearGRFConfigList(&_all_grfs);
 
 	DEBUG(grf, 1, "Scanning for NewGRFs");
-	num  = ScanPath(_paths.data_dir);
-	num += ScanPath(_paths.second_data_dir);
+	FOR_ALL_SEARCHPATHS(sp) {
+		FioAppendDirectory(path, MAX_PATH, sp, DATA_DIR);
+		num += ScanPath(path, strlen(path));
+	}
 	DEBUG(grf, 1, "Scan complete, found %d files", num);
 }
 
--- a/src/newgrf_config.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/newgrf_config.h	Sat Jul 14 19:42: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 {
@@ -36,8 +37,9 @@
 };
 
 struct GRFError {
+	char *custom_message;
+	char *data;
 	StringID message;
-	StringID data;
 	StringID severity;
 	uint8 num_params;
 	uint8 param_number[2];
@@ -45,7 +47,6 @@
 
 struct GRFConfig : public GRFIdentifier {
 	char *filename;
-	char *full_path;
 	char *name;
 	char *info;
 	GRFError *error;
@@ -73,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/newgrf_engine.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -246,6 +246,8 @@
 static byte MapAircraftMovementState(const Vehicle *v)
 {
 	const Station *st = GetStation(v->u.air.targetairport);
+	if (st->airport_tile == 0) return AMS_TTDP_FLIGHT_TO_TOWER;
+
 	const AirportFTAClass *afc = st->Airport();
 	uint16 amdflag = afc->MovingData(v->u.air.pos)->flag;
 
@@ -516,7 +518,7 @@
 	switch (variable) {
 		case 0x40: // Get length of consist
 		case 0x41: // Get length of same consecutive wagons
-			if (v->type != VEH_TRAIN) return 1;
+			if (!v->HasFront()) return 1;
 
 			{
 				const Vehicle* u;
@@ -537,16 +539,19 @@
 			}
 
 		case 0x42: { // Consist cargo information
-			/* XXX Missing support for common refit cycle and property 25 */
 			const Vehicle *u;
 			byte cargo_classes = 0;
-			uint common_cargo_best = 0;
-			uint common_cargos[NUM_CARGO];
+			uint8 common_cargo_best = 0;
+			uint8 common_cargos[NUM_CARGO];
+			uint8 common_subtype_best = 0;
+			uint8 common_subtypes[256];
 			byte user_def_data = 0;
 			CargoID common_cargo_type = CT_PASSENGERS;
+			uint8 common_subtype = 0;
 
 			/* Reset our arrays */
 			memset(common_cargos, 0, sizeof(common_cargos));
+			memset(common_subtypes, 0, sizeof(common_subtypes));
 
 			for (u = v; u != NULL; u = u->next) {
 				/* Skip empty engines */
@@ -555,6 +560,7 @@
 				cargo_classes |= GetCargo(u->cargo_type)->classes;
 				common_cargos[u->cargo_type]++;
 				user_def_data |= RailVehInfo(u->engine_type)->user_def_data;
+				common_subtypes[u->cargo_subtype]++;
 			}
 
 			/* Pick the most common cargo type */
@@ -565,7 +571,14 @@
 				}
 			}
 
-			return cargo_classes | (common_cargo_type << 8) | (user_def_data << 24);
+			for (uint i = 0; i < lengthof(common_subtypes); i++) {
+				if (common_subtypes[i] > common_subtype_best) {
+					common_subtype_best = common_subtypes[i];
+					common_subtype = i;
+				}
+			}
+
+			return cargo_classes | (common_cargo_type << 8) | (common_subtype << 16) | (user_def_data << 24);
 		}
 
 		case 0x43: // Player information
@@ -701,10 +714,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;
@@ -723,19 +736,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;
@@ -807,12 +820,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];
@@ -828,7 +841,7 @@
 	res->ResolveReal   = &VehicleResolveReal;
 
 	res->u.vehicle.self   = v;
-	res->u.vehicle.parent = (v != NULL && v->type == VEH_TRAIN) ? GetFirstVehicleInChain(v) : v;
+	res->u.vehicle.parent = (v != NULL && v->HasFront()) ? GetFirstVehicleInChain(v) : v;
 
 	res->u.vehicle.self_type = engine_type;
 
@@ -1010,7 +1023,7 @@
 	assert(v != NULL);
 
 	NewVehicleResolver(&object, v->engine_type, v);
-
+	object.callback = CBID_RANDOM_TRIGGER;
 	object.trigger = trigger;
 
 	group = Resolve(GetVehicleSpriteGroup(v->engine_type, v), &object);
--- a/src/newgrf_gui.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/newgrf_gui.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -48,7 +48,7 @@
 
 	if (c->error != NULL) {
 		SetDParamStr(0, c->filename);
-		SetDParam(1, c->error->data);
+		SetDParamStr(1, c->error->data);
 		for (uint i = 0; i < c->error->num_params; i++) {
 			uint32 param = 0;
 			byte param_number = c->error->param_number[i];
@@ -59,7 +59,7 @@
 		}
 
 		char message[512];
-		GetString(message, c->error->message, lastof(message));
+		GetString(message, c->error->custom_message != NULL ? BindCString(c->error->custom_message) : c->error->message, lastof(message));
 
 		SetDParamStr(0, message);
 		y += DrawStringMultiLine(x, y, c->error->severity, w, bottom - y);
@@ -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_house.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/newgrf_house.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -83,7 +83,7 @@
 {
 	HouseClassID class_id = GetHouseSpecs(house_id)->class_id;
 
-	if (!HASBIT(_loaded_newgrf_features, GRFLOADED_NEWHOUSES)) return;
+	if (!_loaded_newgrf_features.has_newhouses) return;
 
 	/* If there are 255 buildings of this type in this town, there are also
 	 * at least that many houses of the same class in the town, and
@@ -111,7 +111,7 @@
 {
 	HouseClassID class_id = GetHouseSpecs(house_id)->class_id;
 
-	if (!HASBIT(_loaded_newgrf_features, GRFLOADED_NEWHOUSES)) return;
+	if (!_loaded_newgrf_features.has_newhouses) return;
 
 	if (t->building_counts.id_count[house_id] > 0) t->building_counts.id_count[house_id]--;
 	if (_building_counts.id_count[house_id] > 0)   _building_counts.id_count[house_id]--;
@@ -129,7 +129,7 @@
  */
 void AfterLoadCountBuildings()
 {
-	if (!HASBIT(_loaded_newgrf_features, GRFLOADED_NEWHOUSES)) return;
+	if (!_loaded_newgrf_features.has_newhouses) return;
 
 	for (TileIndex t = 0; t < MapSize(); t++) {
 		if (!IsTileType(t, MP_HOUSE)) continue;
@@ -169,15 +169,6 @@
 	return map_class_count << 24 | town_class_count << 16 | map_id_count << 8 | town_id_count;
 }
 
-static uint32 GetTerrainType(TileIndex tile)
-{
-	switch (_opt.landscape) {
-		case LT_TROPIC: return GetTropicZone(tile) == TROPICZONE_DESERT ? 1 : 2;
-		case LT_ARCTIC: return GetTileZ(tile) >= GetSnowLine() ? 4 : 0;
-		default:        return 0;
-	}
-}
-
 static uint32 GetGRFParameter(HouseID house_id, byte parameter)
 {
 	const HouseSpec *hs = GetHouseSpecs(house_id);
@@ -187,6 +178,16 @@
 	return file->param[parameter];
 }
 
+uint32 GetNearbyTileInformation(byte parameter, TileIndex tile)
+{
+	uint32 tile_type;
+
+	tile = GetNearbyTile(parameter, tile);
+	tile_type = GetTerrainType(tile) << 2 | (IsTileType(tile, MP_WATER) ? 1 : 0) << 1;
+
+	return GetTileType(tile) << 24 | (TileHeight(tile) * 8) << 16 | tile_type << 8 | GetTileSlope(tile, NULL);
+}
+
 /**
  * HouseGetVariable():
  *
@@ -238,20 +239,7 @@
 		}
 
 		/* Land info for nearby tiles. */
-		case 0x62: {
-			int8 x = GB(parameter, 0, 4);
-			int8 y = GB(parameter, 4, 4);
-			byte tile_type;
-
-			if (x >= 8) x -= 16;
-			if (y >= 8) y -= 16;
-
-			tile += TileDiffXY(x, y);
-
-			tile_type = GetTerrainType(tile) << 2 | (IsTileType(tile, MP_WATER) ? 1 : 0) << 1;
-
-			return GetTileType(tile) << 24 | (TileHeight(tile) * 8) << 16 | tile_type << 8 | GetTileSlope(tile, NULL);
-		}
+		case 0x62: return GetNearbyTileInformation(parameter, tile);
 
 		/* Read GRF parameter */
 		case 0x7F: return GetGRFParameter(object->u.house.house_id, parameter);
--- a/src/newgrf_house.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/newgrf_house.h	Sat Jul 14 19:42:58 2007 +0000
@@ -8,22 +8,6 @@
 #include "town.h"
 
 /**
- * Maps a house id stored on the map to a GRF file.
- * House IDs are stored on the map, so there needs to be a way to tie them to
- * GRF files. An array of HouseIDMapping structs is saved with the savegame so
- * that house GRFs can be loaded in a different order, or removed safely. The
- * index in the array is the house ID stored on the map.
- *
- * The substitute ID is the ID of an original house that should be used instead
- * if the GRF containing the new house is not available.
- */
-struct HouseIDMapping {
-	uint32 grfid;          ///< The GRF ID of the file this house belongs to
-	uint8  house_id;       ///< The house ID within the GRF file
-	uint8  substitute_id;  ///< The (original) house ID to use if this GRF is not available
-};
-
-/**
  * Makes class IDs unique to each GRF file.
  * Houses can be assigned class IDs which are only comparable within the GRF
  * file they were defined in. This mapping ensures that if two houses have the
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/newgrf_industries.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,420 @@
+/* $Id$ */
+
+/** @file newgrf_industries.cpp */
+
+#include "stdafx.h"
+#include "openttd.h"
+#include "debug.h"
+#include "functions.h"
+#include "macros.h"
+#include "variables.h"
+#include "landscape.h"
+#include "table/strings.h"
+#include "industry.h"
+#include "industry_map.h"
+#include "newgrf.h"
+#include "newgrf_callbacks.h"
+#include "newgrf_spritegroup.h"
+#include "newgrf_industries.h"
+#include "newgrf_commons.h"
+#include "newgrf_text.h"
+#include "newgrf_town.h"
+#include "date.h"
+
+/* Since the industry IDs defined by the GRF file don't necessarily correlate
+ * 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);
+
+IndustryType MapNewGRFIndustryType(IndustryType grf_type, uint32 grf_id)
+{
+	if (grf_type == IT_INVALID) return IT_INVALID;
+	if (!HASBIT(grf_type, 7)) return GB(grf_type, 0, 6);
+
+	return _industry_mngr.GetID(GB(grf_type, 0, 6), grf_id);
+}
+
+/**
+ * Finds the distance for the closest tile with water/land given a tile
+ * @param tile  the tile to find the distance too
+ * @param water whether to find water or land
+ * @note FAILS when an industry should be seen as water
+ */
+static uint GetClosestWaterDistance(TileIndex tile, bool water)
+{
+	TileIndex t;
+	int best_dist;
+	for (t = 0; t < MapSize(); t++) {
+		if (IsTileType(t, MP_WATER) == water) break;
+	}
+	best_dist = DistanceManhattan(tile, t);
+
+	for (; t < MapSize(); t++) {
+		int dist = DistanceManhattan(tile, t);
+		if (dist < best_dist) {
+			if (IsTileType(t, MP_WATER) == water) best_dist = dist;
+		} else {
+			/* When the Y distance between the current row and the 'source' tile
+			 * is larger than the best distance, we've found the best distance */
+			if ((int)TileY(t) - (int)TileY(tile) > best_dist) break;
+			if (TileX(tile) > TileX(t)) {
+				/* We can safely skip this many tiles; from here all tiles have a
+				 * higher or equal distance than the best distance */
+				t |= MapMaxX();
+				continue;
+			} else {
+				/* We can safely skip this many tiles; up to here all tiles have a
+				 * higher or equal distance than the best distance */
+				t += max(best_dist - dist, 0);
+				continue;
+			}
+		}
+	}
+
+	return best_dist;
+}
+
+/** Make an analysis of a tile and check for its belonging to the same
+ * industry, and/or the same grf file
+ * @param new_tile TileIndex of the tile to query
+ * @param old_tile TileINdex of teh reference tile
+ * @param i Industry to which old_tile belongs to
+ * @return value encoded as per NFO specs */
+uint32 GetIndustryIDAtOffset(TileIndex new_tile, TileIndex old_tile, const Industry *i)
+{
+	if (IsTileType(new_tile, MP_INDUSTRY)) {  // Is this an industry tile?
+
+		if (GetIndustryIndex(new_tile) == i->index) {  // Does it belong to the same industry?
+			IndustryGfx gfx = GetIndustryGfx(new_tile);
+			const IndustryTileSpec *indtsp = GetIndustryTileSpec(gfx);
+			const IndustryTileSpec *indold = GetIndustryTileSpec(GetIndustryGfx(old_tile));
+
+			if (gfx < NEW_INDUSTRYOFFSET) {  // Does it belongs to an old type?
+				/* It is an old tile.  We have to see if it's been overriden */
+				if (indtsp->grf_prop.override == INVALID_INDUSTRYTILE) {  // has it been overridden?
+					return 0xFF << 8 | gfx; // no. Tag FF + the gfx id of that tile
+				} else { // yes.  FInd out if it is from the same grf file or not
+					const IndustryTileSpec *old_tile_ovr = GetIndustryTileSpec(indtsp->grf_prop.override);
+
+					if (old_tile_ovr->grf_prop.grffile->grfid == indold->grf_prop.grffile->grfid) {
+						return old_tile_ovr->grf_prop.local_id; // same grf file
+					} else {
+						return 0xFFFE; // not the same grf file
+					}
+				}
+			} else {
+				if (indtsp->grf_prop.spritegroup != NULL) {  // tile has a spritegroup ?
+					if (indtsp->grf_prop.grffile->grfid == indold->grf_prop.grffile->grfid) {  // same industry, same grf ?
+						return indtsp->grf_prop.local_id;
+					} else {
+						return 0xFFFE;  // Defined in another grf file
+					}
+				} else {  // tile has no spritegroup
+					return 0xFF << 8 | indtsp->grf_prop.subst_id;  // so just give him the substitute
+				}
+			}
+		}
+	}
+
+	return 0xFFFF; // tile is not an industry one or  does not belong to the current industry
+}
+
+static uint32 GetClosestIndustry(TileIndex tile, IndustryType type, const Industry *current)
+{
+	uint32 best_dist = MAX_UVALUE(uint32);
+	const Industry *i;
+	FOR_ALL_INDUSTRIES(i) {
+		if (i->type != type || i == current) continue;
+
+		best_dist = min(best_dist, DistanceManhattan(tile, i->xy));
+	}
+
+	return best_dist;
+}
+
+/** This function implements the industries variables that newGRF defines.
+ * @param variable that is queried
+ * @param parameter unused
+ * @param available will return false if ever the variable asked for does not exist
+ * @param ind is of course the industry we are inquiring
+ * @return the value stored in the corresponding variable*/
+uint32 IndustryGetVariable(const ResolverObject *object, byte variable, byte parameter, bool *available)
+{
+	const Industry *industry = object->u.industry.ind;
+	TileIndex tile = object->u.industry.tile;
+	const IndustrySpec *indspec = GetIndustrySpec(industry->type);
+
+	switch (variable) {
+		case 0x40:
+		case 0x41:
+		case 0x42: { // waiting cargo, but only if those two callback flags are set
+			uint16 callback = indspec->callback_flags;
+			if (HASBIT(callback, CBM_IND_PRODUCTION_CARGO_ARRIVAL) || HASBIT(callback, CBM_IND_PRODUCTION_256_TICKS)) {
+				return min(industry->incoming_cargo_waiting[variable - 0x40], (uint16)0xFFFF);
+			} else {
+				return 0;
+			}
+		}
+
+		/* Manhattan distance of closes dry/water tile */
+		case 0x43: return GetClosestWaterDistance(tile, (object->u.industry_location.spec->behaviour & INDUSTRYBEH_BUILT_ONWATER) == 0);
+
+		/* Get industry ID at offset param */
+		case 0x60: return GetIndustryIDAtOffset(GetNearbyTile(parameter, industry->xy), tile, industry);
+
+		case 0x61: return 0; // Get random tile bits at offset param
+
+		/* Land info of nearby tiles */
+		case 0x62: return GetNearbyIndustryTileInformation(parameter, tile, INVALID_INDUSTRY);
+
+		/* Animation stage of nearby tiles */
+		case 0x63 : {
+			tile = GetNearbyTile(parameter, tile);
+			if (IsTileType(tile, MP_INDUSTRY) && GetIndustryByTile(tile) == industry) {
+				return GetIndustryAnimationState(tile);
+			}
+			return 0xFFFFFFFF;
+		}
+
+		/* Distance of nearest industry of given type */
+		case 0x64: return GetClosestIndustry(tile, MapNewGRFIndustryType(parameter, indspec->grf_prop.grffile->grfid), industry); // Distance of nearest industry of given type
+		/* Get town zone and Manhattan distance of closest town */
+ 		case 0x65: return GetTownRadiusGroup(industry->town, tile) << 16 | min(DistanceManhattan(tile, industry->town->xy), 0xFFFF);
+		/* Get square of Euclidian distance of closes town */
+		case 0x66: return GetTownRadiusGroup(industry->town, tile) << 16 | min(DistanceSquare(tile, industry->town->xy), 0xFFFF);
+
+		/* Count of industry, distance of closest instance
+		 * format is rr(reserved) cc(count)  dddd(manhattan distance of closest sister)
+		 * A lot more should be done, since it has to check for local id, grf id etc...
+		 * let's just say it is a beginning ;) */
+		case 0x67: return GetIndustryTypeCount(industry->type) << 16 | 0;
+
+		/* Industry structure access*/
+		case 0x80: return industry->xy;
+		case 0x81: return GB(industry->xy, 8, 8);
+		/* Pointer to the town the industry is associated with */
+		case 0x82: return industry->town->index;
+		case 0x83:
+		case 0x84:
+		case 0x85: DEBUG(grf, 0, "NewGRFs shouldn't be doing pointer magic"); break; // not supported
+		case 0x86: return industry->width;
+		case 0x87: return industry->height;// xy dimensions
+		/*  */
+		case 0x88:
+		case 0x89: return indspec->produced_cargo[variable - 0x88];
+		case 0x8A: return industry->produced_cargo_waiting[0];
+		case 0x8B: return GB(industry->produced_cargo_waiting[0], 8, 8);
+		case 0x8C: return industry->produced_cargo_waiting[1];
+		case 0x8D: return GB(industry->produced_cargo_waiting[1], 8, 8);
+		case 0x8E:
+		case 0x8F: return industry->production_rate[variable - 0x8E];
+		case 0x90:
+		case 0x91:
+		case 0x92: return indspec->accepts_cargo[variable - 0x90];
+		case 0x93: return industry->prod_level;
+		/* amount of cargo produced so far THIS month. */
+		case 0x94: return industry->this_month_production[0];
+		case 0x95: return GB(industry->this_month_production[0], 8, 8);
+		case 0x96: return industry->this_month_production[1];
+		case 0x97: return GB(industry->this_month_production[1], 8, 8);
+		/* amount of cargo transported so far THIS month. */
+		case 0x98: return industry->this_month_transported[0];
+		case 0x99: return GB(industry->this_month_transported[0], 8, 8);
+		case 0x9A: return industry->this_month_transported[1];
+		case 0x9B: return GB(industry->this_month_transported[0], 8, 8);
+		/* fraction of cargo transported LAST month. */
+		case 0x9C:
+		case 0x9D: return industry->last_month_pct_transported[variable - 0x9C];
+		/* amount of cargo produced LAST month. */
+		case 0x9E: return industry->last_month_production[0];
+		case 0x9F: return GB(industry->last_month_production[0], 8, 8);
+		case 0xA0: return industry->last_month_production[1];
+		case 0xA1: return GB(industry->last_month_production[1], 8, 8);
+		/* amount of cargo transported last month. */
+		case 0xA2: return industry->last_month_transported[0];
+		case 0xA3: return GB(industry->last_month_transported[0], 8, 8);
+		case 0xA4: return industry->last_month_transported[1];
+		case 0xA5: return GB(industry->last_month_transported[0], 8, 8);
+
+		case 0xA6: return industry->type;
+		case 0xA7: return industry->founder;
+		case 0xA8: return industry->random_color;
+		case 0xA9: return clamp(0, industry->last_prod_year - 1920, 255);
+		case 0xAA: return industry->counter;
+		case 0xAB: return GB(industry->counter, 8, 8);
+		case 0xAC: return industry->was_cargo_delivered;
+
+		case 0xB0: return clamp(0, industry->construction_date - DAYS_TILL_ORIGINAL_BASE_YEAR, 65535); // Date when built since 1920 (in days)
+		case 0xB3: return industry->construction_type; // Construction type
+		case 0xB4: return clamp(0, industry->last_cargo_accepted_at - DAYS_TILL_ORIGINAL_BASE_YEAR, 65535); // Date last cargo accepted since 1920 (in days)
+	}
+
+	DEBUG(grf, 1, "Unhandled industry property 0x%X", variable);
+
+	*available = false;
+	return (uint32)-1;
+}
+
+static const SpriteGroup *IndustryResolveReal(const ResolverObject *object, const SpriteGroup *group)
+{
+	/* IndustryTile do not have 'real' groups */
+	return NULL;
+}
+
+static void NewIndustryResolver(ResolverObject *res, TileIndex tile, Industry *indus)
+{
+	res->GetRandomBits = IndustryTileGetRandomBits;
+	res->GetTriggers   = IndustryTileGetTriggers;
+	res->SetTriggers   = IndustryTileSetTriggers;
+	res->GetVariable   = IndustryGetVariable;
+	res->ResolveReal   = IndustryResolveReal;
+
+	res->u.industry.tile = tile;
+	res->u.industry.ind  = indus;
+	res->u.industry.gfx  = INVALID_INDUSTRYTILE;
+
+	res->callback        = 0;
+	res->callback_param1 = 0;
+	res->callback_param2 = 0;
+	res->last_value      = 0;
+	res->trigger         = 0;
+	res->reseed          = 0;
+}
+
+uint16 GetIndustryCallback(uint16 callback, uint32 param1, uint32 param2, Industry *industry, IndustryType type, TileIndex tile)
+{
+	ResolverObject object;
+	const SpriteGroup *group;
+
+	NewIndustryResolver(&object, tile, industry);
+	object.callback = callback;
+	object.callback_param1 = param1;
+	object.callback_param2 = param2;
+
+	group = Resolve(GetIndustrySpec(type)->grf_prop.spritegroup, &object);
+	if (group == NULL || group->type != SGT_CALLBACK) return CALLBACK_FAILED;
+
+	return group->g.callback.result;
+}
+
+uint32 IndustryLocationGetVariable(const ResolverObject *object, byte variable, byte parameter, bool *available)
+{
+	TileIndex tile = object->u.industry_location.tile;
+
+	if (object->scope == VSG_SCOPE_PARENT) {
+		return TownGetVariable(variable, parameter, available, ClosestTownFromTile(tile, (uint)-1));
+	}
+
+	switch (variable) {
+		/* Land info of nearby tiles */
+		case 0x62: return GetNearbyIndustryTileInformation(parameter, tile, INVALID_INDUSTRY);
+
+		/* Distance of nearest industry of given type */
+		case 0x64: return GetClosestIndustry(tile, MapNewGRFIndustryType(parameter, object->u.industry_location.spec->grf_prop.grffile->grfid), NULL);
+
+		/* Location where to build the industry */
+		case 0x80: return tile;
+		case 0x81: return GB(tile, 8, 8);
+
+		/* Pointer to the town the industry is associated with */
+		case 0x82: return ClosestTownFromTile(tile, (uint)-1)->index;
+		case 0x83:
+		case 0x84:
+		case 0x85: DEBUG(grf, 0, "NewGRFs shouldn't be doing pointer magic"); break; // not supported
+
+		/* Number of the layout */
+		case 0x86: return object->u.industry_location.itspec_index;
+
+		/* Ground type */
+		case 0x87: return GetTerrainType(tile);
+
+		/* Town zone */
+		case 0x88: return GetTownRadiusGroup(ClosestTownFromTile(tile, (uint)-1), tile);
+
+		/* Manhattan distance of the closest town */
+		case 0x89: return min(DistanceManhattan(ClosestTownFromTile(tile, (uint)-1)->xy, tile), 255);
+
+		/* Lowest height of the tile */
+		case 0x8A: return GetTileZ(tile);
+
+		/* Distance to the nearest water/land tile */
+		case 0x8B: return GetClosestWaterDistance(tile, (object->u.industry_location.spec->behaviour & INDUSTRYBEH_BUILT_ONWATER) == 0);
+
+		/* Square of Euclidian distance from town */
+		case 0x8D: return min(DistanceSquare(ClosestTownFromTile(tile, (uint)-1)->xy, tile), 65535);
+	}
+
+	DEBUG(grf, 1, "Unhandled location industry property 0x%X", variable);
+
+	*available = false;
+	return (uint32)-1;
+}
+
+bool CheckIfCallBackAllowsCreation(TileIndex tile, IndustryType type, uint itspec_index)
+{
+	const IndustrySpec *indspec = GetIndustrySpec(type);
+
+	ResolverObject object;
+	const SpriteGroup *group;
+
+	NewIndustryResolver(&object, tile, NULL);
+	object.GetVariable = IndustryLocationGetVariable;
+	object.callback = CBID_INDUSTRY_LOCATION;
+	object.u.industry_location.tile = tile;
+	object.u.industry_location.spec = indspec;
+	object.u.industry_location.itspec_index = itspec_index;
+
+	group = Resolve(GetIndustrySpec(type)->grf_prop.spritegroup, &object);
+
+	if (group == NULL || group->type != SGT_CALLBACK) return false;
+
+	switch (group->g.callback.result) {
+		case 0x400: return true;
+		case 0x401: _error_message = STR_0239_SITE_UNSUITABLE; break;
+		case 0x402: _error_message = STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST; break;
+		case 0x403: _error_message = STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT; break;
+		default: _error_message = GetGRFStringID(indspec->grf_prop.grffile->grfid, 0xD000 + group->g.callback.result); break;
+	}
+
+	return false;
+}
+
+static int32 DerefIndProd(uint field, bool use_register)
+{
+	return use_register ? (int32)GetRegister(field) : field;
+}
+
+/**
+ * Get the industry production callback and apply it to the industry.
+ * @param ind    the industry this callback has to be called for
+ * @param reason the reason it is called (0 = incoming cargo, 1 = periodic tick callback)
+ */
+void IndustryProductionCallback(Industry *ind, int reason)
+{
+	ResolverObject object;
+	NewIndustryResolver(&object, ind->xy, ind);
+	object.callback_param2 = reason;
+
+	for (uint loop = 0;; loop++) {
+		SB(object.callback_param2, 8, 16, loop);
+		const SpriteGroup *group = Resolve(GetIndustrySpec(ind->type)->grf_prop.spritegroup, &object);
+		if (group == NULL || group->type != SGT_INDUSTRY_PRODUCTION) break;
+
+		bool deref = (group->g.indprod.version == 1);
+
+		for (uint i = 0; i < 3; i++) {
+			ind->incoming_cargo_waiting[i] = clamp(ind->incoming_cargo_waiting[i] - DerefIndProd(group->g.indprod.substract_input[i], deref), 0, 0xFFFF);
+		}
+		for (uint i = 0; i < 2; i++) {
+			ind->produced_cargo_waiting[i] = clamp(ind->produced_cargo_waiting[i] + DerefIndProd(group->g.indprod.add_output[i], deref), 0, 0xFFFF);
+		}
+
+		int32 again = DerefIndProd(group->g.indprod.again, deref);
+		if (again == 0) break;
+
+		SB(object.callback_param2, 24, 8, again);
+	}
+
+	InvalidateWindow(WC_INDUSTRY_VIEW, ind->index);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/newgrf_industries.h	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,27 @@
+/* $Id$ */
+
+/** @file newgrf_industries.h */
+
+#ifndef NEWGRF_INDUSTRIES_H
+#define NEWGRF_INDUSTRIES_H
+
+#include "industry.h"
+#include "newgrf_spritegroup.h"
+
+/* in newgrf_industry.cpp */
+uint32 IndustryGetVariable(const ResolverObject *object, byte variable, byte parameter, bool *available);
+uint16 GetIndustryCallback(uint16 callback, uint32 param1, uint32 param2, Industry *industry, IndustryType type, TileIndex tile);
+uint32 GetIndustryIDAtOffset(TileIndex new_tile, TileIndex old_tile, const Industry *i);
+void IndustryProductionCallback(Industry *ind, int reason);
+bool CheckIfCallBackAllowsCreation(TileIndex tile, IndustryType type, uint itspec_index);
+
+IndustryType MapNewGRFIndustryType(IndustryType grf_type, uint32 grf_id);
+
+/* in newgrf_industrytiles.cpp*/
+uint32 IndustryTileGetRandomBits(const ResolverObject *object);
+uint32 IndustryTileGetTriggers(const ResolverObject *object);
+void IndustryTileSetTriggers(const ResolverObject *object, int triggers);
+
+uint32 GetNearbyIndustryTileInformation(byte parameter, TileIndex tile, IndustryID index);
+
+#endif /* NEWGRF_INDUSTRIES_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/newgrf_industrytiles.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,357 @@
+/* $Id$ */
+
+/** @file newgrf_industrytiles.cpp */
+
+#include "stdafx.h"
+#include "openttd.h"
+#include "functions.h"
+#include "variables.h"
+#include "debug.h"
+#include "viewport.h"
+#include "landscape.h"
+#include "newgrf.h"
+#include "industry.h"
+#include "newgrf_commons.h"
+#include "newgrf_spritegroup.h"
+#include "newgrf_callbacks.h"
+#include "newgrf_industries.h"
+#include "newgrf_industrytiles.h"
+#include "newgrf_text.h"
+#include "industry_map.h"
+#include "clear_map.h"
+#include "table/sprites.h"
+#include "table/strings.h"
+#include "sprite.h"
+
+/**
+ * Based on newhouses equivalent, but adapted for newindustries
+ * @param parameter from callback.  It's in fact a pair of coordinates
+ * @param tile TileIndex from which the callback was initiated
+ * @param index of the industry been queried for
+ * @return a construction of bits obeying the newgrf format
+ */
+uint32 GetNearbyIndustryTileInformation(byte parameter, TileIndex tile, IndustryID index)
+{
+	byte tile_type;
+	bool is_same_industry;
+
+	tile = GetNearbyTile(parameter, tile);
+	is_same_industry = (IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == index);
+	tile_type = GetTerrainType(tile) << 2 | (IsTileType(tile, MP_WATER) ? 1 : 0) << 1 | (is_same_industry ? 1 : 0);
+
+	return GetTileType(tile) << 24 | (TileHeight(tile) * 8) << 16 | tile_type << 8 | GetTileSlope(tile, NULL);
+}
+
+/** This is the position of the tile relative to the northernmost tile of the industry.
+ * Format: 00yxYYXX
+ * Variable  Content
+ * x         the x offset from the northernmost tile
+ * XX        same, but stored in a byte instead of a nibble
+ * y         the y offset from the northernmost tile
+ * YY        same, but stored in a byte instead of a nibble
+ * @param tile TileIndex of the tile to evaluate
+ * @param ind_tile northernmost tile of the industry
+ */
+static uint32 GetRelativePosition(TileIndex tile, TileIndex ind_tile)
+{
+	byte x = TileX(tile) - TileX(ind_tile);
+	byte y = TileY(tile) - TileY(ind_tile);
+
+	return ((y & 0xF) << 20) | ((x & 0xF) << 16) | (y << 8) | x;
+}
+
+static uint32 IndustryTileGetVariable(const ResolverObject *object, byte variable, byte parameter, bool *available)
+{
+	const Industry *inds = object->u.industry.ind;
+	TileIndex tile       = object->u.industry.tile;
+
+	if (object->scope == VSG_SCOPE_PARENT) {
+		return IndustryGetVariable(object, variable, parameter, available);
+	}
+
+	switch (variable) {
+		 /* Construction state of the tile: a value between 0 and 3 */
+		case 0x40 : return (IsTileType(tile, MP_INDUSTRY)) ? GetIndustryConstructionStage(tile) : 0;
+
+		case 0x41 : return GetTerrainType(tile);
+
+		/* Current town zone of the tile in the nearest town */
+		case 0x42 : return GetTownRadiusGroup(ClosestTownFromTile(tile, (uint)-1), tile);
+
+		/* Relative position */
+		case 0x43 : return GetRelativePosition(tile, inds->xy);
+
+		/* Animation frame. Like house variable 46 but can contain anything 0..FF. */
+		case 0x44 : return (IsTileType(tile, MP_INDUSTRY)) ? GetIndustryAnimationState(tile) : 0;
+
+		/* Land info of nearby tiles */
+		case 0x60 : return GetNearbyIndustryTileInformation(parameter, tile, inds == NULL ? (IndustryID)INVALID_INDUSTRY : inds->index);
+
+		/* Animation stage of nearby tiles */
+		case 0x61 : {
+			tile = GetNearbyTile(parameter, tile);
+			if (IsTileType(tile, MP_INDUSTRY) && GetIndustryByTile(tile) == inds) {
+				return GetIndustryAnimationState(tile);
+			}
+			return 0xFFFFFFFF;
+		}
+
+		/* Get industry tile ID at offset */
+		case 0x62 : return GetIndustryIDAtOffset(GetNearbyTile(parameter, tile), tile, inds);
+	}
+
+	DEBUG(grf, 1, "Unhandled industry tile property 0x%X", variable);
+
+	*available = false;
+	return (uint32)-1;
+}
+
+static const SpriteGroup *IndustryTileResolveReal(const ResolverObject *object, const SpriteGroup *group)
+{
+	/* IndustryTile do not have 'real' groups.  Or do they?? */
+	return NULL;
+}
+
+uint32 IndustryTileGetRandomBits(const ResolverObject *object)
+{
+	const TileIndex tile = object->u.industry.tile;
+	return (tile == INVALID_TILE || !IsTileType(tile, MP_INDUSTRY)) ? 0 : GetIndustryRandomBits(tile);
+}
+
+uint32 IndustryTileGetTriggers(const ResolverObject *object)
+{
+	const TileIndex tile = object->u.industry.tile;
+	return (tile == INVALID_TILE || !IsTileType(tile, MP_INDUSTRY)) ? 0 : GetIndustryTriggers(tile);
+}
+
+void IndustryTileSetTriggers(const ResolverObject *object, int triggers)
+{
+	const TileIndex tile = object->u.industry.tile;
+	if (IsTileType(tile, MP_INDUSTRY)) SetIndustryTriggers(tile, triggers);
+}
+
+static void NewIndustryTileResolver(ResolverObject *res, IndustryGfx gfx, TileIndex tile, Industry *indus)
+{
+	res->GetRandomBits = IndustryTileGetRandomBits;
+	res->GetTriggers   = IndustryTileGetTriggers;
+	res->SetTriggers   = IndustryTileSetTriggers;
+	res->GetVariable   = IndustryTileGetVariable;
+	res->ResolveReal   = IndustryTileResolveReal;
+
+	res->u.industry.tile = tile;
+	res->u.industry.ind  = indus;
+	res->u.industry.gfx  = gfx;
+
+	res->callback        = 0;
+	res->callback_param1 = 0;
+	res->callback_param2 = 0;
+	res->last_value      = 0;
+	res->trigger         = 0;
+	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;
+	const SpriteGroup *group;
+
+	NewIndustryTileResolver(&object, gfx_id, tile, industry);
+	object.callback = callback;
+	object.callback_param1 = param1;
+	object.callback_param2 = param2;
+
+	group = Resolve(GetIndustryTileSpec(gfx_id)->grf_prop.spritegroup, &object);
+	if (group == NULL || group->type != SGT_CALLBACK) return CALLBACK_FAILED;
+
+	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;
+		}
+
+		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;
+	}
+}
+
+bool PerformIndustryTileSlopeCheck(TileIndex tile, const IndustryTileSpec *its, IndustryType type, IndustryGfx gfx)
+{
+	Industry ind;
+	ind.xy = 0;
+	ind.type = type;
+
+	uint16 callback_res = GetIndustryTileCallback(CBID_INDTILE_SHAPE_CHECK, 0, 0, gfx, &ind, tile);
+	if (its->grf_prop.grffile->grf_version < 7) {
+		return callback_res != 0;
+	}
+	if (callback_res == CALLBACK_FAILED) return false;
+
+	switch (callback_res) {
+		case 0x400: return true;
+		case 0x401: _error_message = STR_0239_SITE_UNSUITABLE;                 return false;
+		case 0x402: _error_message = STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST; return false;
+		case 0x403: _error_message = STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT;     return false;
+		default: _error_message = GetGRFStringID(its->grf_prop.grffile->grfid, 0xD000 + callback_res); return false;
+	}
+}
+
+void AnimateNewIndustryTile(TileIndex tile)
+{
+	Industry *ind = GetIndustryByTile(tile);
+	IndustryGfx gfx = GetIndustryGfx(tile);
+	const IndustryTileSpec *itspec = GetIndustryTileSpec(gfx);
+	byte animation_speed = itspec->animation_speed;
+
+	if (HASBIT(itspec->callback_flags, CBM_INDT_ANIM_SPEED)) {
+		uint16 callback_res = GetIndustryTileCallback(CBID_INDTILE_ANIMATION_SPEED, 0, 0, gfx, ind, tile);
+		if (callback_res != CALLBACK_FAILED) animation_speed = clamp(callback_res & 0xFF, 0, 16);
+	}
+
+	/* An animation speed of 2 means the animation frame changes 4 ticks, and
+	 * increasing this value by one doubles the wait. 0 is the minimum value
+	 * allowed for animation_speed, which corresponds to 30ms, and 16 is the
+	 * maximum, corresponding to around 33 minutes. */
+	if ((_tick_counter % (1 << animation_speed)) != 0) return;
+
+	bool frame_set_by_callback = false;
+	byte frame = GetIndustryAnimationState(tile);
+	uint16 num_frames = GB(itspec->animation_info, 0, 8) + 1;
+
+	if (HASBIT(itspec->callback_flags, CBM_INDT_ANIM_NEXT_FRAME)) {
+		uint16 callback_res = GetIndustryTileCallback(CBID_INDTILE_ANIM_NEXT_FRAME, HASBIT(itspec->animation_special_flags, 0) ? Random() : 0, 0, gfx, ind, tile);
+
+		if (callback_res != CALLBACK_FAILED) {
+			frame_set_by_callback = true;
+
+			switch (callback_res & 0xFF) {
+				case 0xFF:
+					DeleteAnimatedTile(tile);
+					break;
+				case 0xFE:
+					/* Carry on as normal. */
+					frame_set_by_callback = false;
+					break;
+				default:
+					frame = callback_res & 0xFF;
+					break;
+			}
+		}
+	}
+
+	if (!frame_set_by_callback) {
+		if (frame < num_frames) {
+			frame++;
+		} else if (frame == num_frames && GB(itspec->animation_info, 8, 8) == 1) {
+			/* This animation loops, so start again from the beginning */
+			frame = 0;
+		} else {
+			/* This animation doesn't loop, so stay here */
+			DeleteAnimatedTile(tile);
+		}
+	}
+
+	SetIndustryAnimationState(tile, frame);
+	MarkTileDirtyByTile(tile);
+}
+
+static void ChangeIndustryTileAnimationFrame(TileIndex tile, IndustryAnimationTrigger iat, uint32 random_bits, IndustryGfx gfx, Industry *ind)
+{
+	uint16 callback_res = GetIndustryTileCallback(CBID_INDTILE_ANIM_START_STOP, random_bits, iat, gfx, ind, tile);
+	if (callback_res == CALLBACK_FAILED) return;
+
+	switch (callback_res & 0xFF) {
+		case 0xFD: /* Do nothing. */         break;
+		case 0xFE: AddAnimatedTile(tile);    break;
+		case 0xFF: DeleteAnimatedTile(tile); break;
+		default:
+			SetIndustryAnimationState(tile, callback_res & 0xFF);
+			AddAnimatedTile(tile);
+			break;
+	}
+}
+
+bool StartStopIndustryTileAnimation(TileIndex tile, IndustryAnimationTrigger iat, uint32 random)
+{
+	IndustryGfx gfx = GetIndustryGfx(tile);
+	const IndustryTileSpec *itspec = GetIndustryTileSpec(gfx);
+
+	if (!HASBIT(itspec->animation_triggers, iat)) return false;
+
+	Industry *ind = GetIndustryByTile(tile);
+	ChangeIndustryTileAnimationFrame(tile, iat, random, gfx, ind);
+	return true;
+}
+
+bool StartStopIndustryTileAnimation(const Industry *ind, IndustryAnimationTrigger iat)
+{
+	bool ret = true;
+	uint32 random = Random();
+	BEGIN_TILE_LOOP(tile, ind->width, ind->height, ind->xy)
+		if (IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == ind->index) {
+			ret &= StartStopIndustryTileAnimation(tile, iat, random);
+			SB(random, 0, 16, Random());
+		}
+	END_TILE_LOOP(tile, ind->width, ind->height, ind->xy)
+
+	return ret;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/newgrf_industrytiles.h	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,24 @@
+/* $Id$ */
+
+/** @file newgrf_industrytiles.h */
+
+#ifndef NEWGRF_INDUSTRYTILES_H
+#define NEWGRF_INDUSTRYTILES_H
+
+enum IndustryAnimationTrigger {
+	IAT_CONSTRUCTION_STATE_CHANGE,
+	IAT_TILELOOP,
+	IAT_INDUSTRY_TICK,
+	IAT_INDUSTRY_RECEIVED_CARGO,
+	IAT_INDUSTRY_DISTRIBUTES_CARGO,
+};
+
+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);
+bool PerformIndustryTileSlopeCheck(TileIndex tile, const IndustryTileSpec *its, IndustryType type, IndustryGfx gfx);
+
+void AnimateNewIndustryTile(TileIndex tile);
+bool StartStopIndustryTileAnimation(TileIndex tile, IndustryAnimationTrigger iat, uint32 random = Random());
+bool StartStopIndustryTileAnimation(const Industry *ind, IndustryAnimationTrigger iat);
+
+#endif /* NEWGRF_INDUSTRYTILES_H */
--- a/src/newgrf_spritegroup.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/newgrf_spritegroup.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -76,7 +76,7 @@
 	_spritegroup_count = 0;
 }
 
-static uint32 _temp_store[0x110];
+uint32 _temp_store[0x110];
 
 
 static inline uint32 GetVariable(const ResolverObject *object, byte variable, byte parameter, bool *available)
--- a/src/newgrf_spritegroup.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/newgrf_spritegroup.h	Sat Jul 14 19:42:58 2007 +0000
@@ -6,6 +6,20 @@
 #define NEWGRF_SPRITEGROUP_H
 
 #include "town.h"
+#include "industry.h"
+
+/**
+ * Gets the value of a so-called newgrf "register".
+ * @param i index of the register
+ * @pre i < 0x110
+ * @return the value of the register
+ */
+static inline uint32 GetRegister(uint i)
+{
+	assert(i < 0x110);
+	extern uint32 _temp_store[0x110];
+	return _temp_store[i];
+}
 
 struct SpriteGroup;
 
@@ -134,6 +148,13 @@
 	struct DrawTileSprites *dts;
 };
 
+struct IndustryProductionSpriteGroup {
+	uint8 version;
+	uint16 substract_input[3];
+	uint16 add_output[2];
+	uint8 again;
+};
+
 /* List of different sprite group types */
 enum SpriteGroupType {
 	SGT_INVALID,
@@ -143,6 +164,7 @@
 	SGT_CALLBACK,
 	SGT_RESULT,
 	SGT_TILELAYOUT,
+	SGT_INDUSTRY_PRODUCTION,
 };
 
 /* Common wrapper for all the different sprite group types */
@@ -156,6 +178,7 @@
 		CallbackResultSpriteGroup callback;
 		ResultSpriteGroup result;
 		TileLayoutSpriteGroup layout;
+		IndustryProductionSpriteGroup indprod;
 	} g;
 };
 
@@ -197,6 +220,16 @@
 			HouseID house_id;
 		} house;
 		struct {
+			TileIndex tile;
+			Industry *ind;
+			IndustryGfx gfx;
+		} industry;
+		struct {
+			TileIndex tile;
+			const IndustrySpec *spec;
+			uint itspec_index;
+		} industry_location;
+		struct {
 			const struct CargoSpec *cs;
 		} cargo;
 	} u;
--- a/src/newgrf_station.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/newgrf_station.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -15,6 +15,7 @@
 #include "station_map.h"
 #include "newgrf.h"
 #include "newgrf_callbacks.h"
+#include "newgrf_commons.h"
 #include "newgrf_station.h"
 #include "newgrf_spritegroup.h"
 #include "date.h"
@@ -290,18 +291,18 @@
 static uint32 GetRailContinuationInfo(TileIndex tile)
 {
 	/* Tile offsets and exit dirs for X axis */
-	static Direction x_dir[8] = { DIR_SW, DIR_NE, DIR_SE, DIR_NW, DIR_S, DIR_E, DIR_W, DIR_N };
-	static DiagDirection x_exits[8] = { DIAGDIR_SW, DIAGDIR_NE, DIAGDIR_SE, DIAGDIR_NW, DIAGDIR_SW, DIAGDIR_NE, DIAGDIR_SW, DIAGDIR_NE };
+	static const Direction x_dir[8] = { DIR_SW, DIR_NE, DIR_SE, DIR_NW, DIR_S, DIR_E, DIR_W, DIR_N };
+	static const DiagDirection x_exits[8] = { DIAGDIR_SW, DIAGDIR_NE, DIAGDIR_SE, DIAGDIR_NW, DIAGDIR_SW, DIAGDIR_NE, DIAGDIR_SW, DIAGDIR_NE };
 
 	/* Tile offsets and exit dirs for Y axis */
-	static Direction y_dir[8] = { DIR_SE, DIR_NW, DIR_SW, DIR_NE, DIR_S, DIR_W, DIR_E, DIR_N };
-	static DiagDirection y_exits[8] = { DIAGDIR_SE, DIAGDIR_NW, DIAGDIR_SW, DIAGDIR_NE, DIAGDIR_SE, DIAGDIR_NW, DIAGDIR_SE, DIAGDIR_NW };
+	static const Direction y_dir[8] = { DIR_SE, DIR_NW, DIR_SW, DIR_NE, DIR_S, DIR_W, DIR_E, DIR_N };
+	static const DiagDirection y_exits[8] = { DIAGDIR_SE, DIAGDIR_NW, DIAGDIR_SW, DIAGDIR_NE, DIAGDIR_SE, DIAGDIR_NW, DIAGDIR_SE, DIAGDIR_NW };
 
 	Axis axis = IsTileType(tile, MP_RAILWAY) ? GetWaypointAxis(tile) : GetRailStationAxis(tile);
 
 	/* Choose appropriate lookup table to use */
-	Direction *dir = axis == AXIS_X ? x_dir : y_dir;
-	DiagDirection *diagdir = axis == AXIS_X ? x_exits : y_exits;
+	const Direction *dir = axis == AXIS_X ? x_dir : y_dir;
+	const DiagDirection *diagdir = axis == AXIS_X ? x_exits : y_exits;
 
 	uint32 res = 0;
 	uint i;
@@ -344,6 +345,20 @@
 	st->waiting_triggers = triggers;
 }
 
+/**
+ * Station variable cache
+ * This caches 'expensive' station variable lookups which iterate over
+ * several tiles that may be called multiple times per Resolve().
+ */
+static struct {
+	uint32 v40;
+	uint32 v41;
+	uint32 v45;
+	uint32 v46;
+	uint32 v47;
+	uint32 v49;
+	uint8 valid;
+} _svc;
 
 static uint32 StationGetVariable(const ResolverObject *object, byte variable, byte parameter, bool *available)
 {
@@ -377,7 +392,7 @@
 			case 0x42: return 0;               // Rail type (XXX Get current type from GUI?)
 			case 0x43: return _current_player; // Station owner
 			case 0x44: return 2;               // PBS status
-			case 0xFA: return max(_date - DAYS_TILL_ORIGINAL_BASE_YEAR, 0); // Build date
+			case 0xFA: return clamp(_date - DAYS_TILL_ORIGINAL_BASE_YEAR, 0, 65535); // Build date, clamped to a 16 bit value
 		}
 
 		*available = false;
@@ -386,27 +401,41 @@
 
 	switch (variable) {
 		/* Calculated station variables */
-		case 0x40: return GetPlatformInfoHelper(tile, false, false, false);
-		case 0x41: return GetPlatformInfoHelper(tile, true,  false, false);
-		case 0x42: // Terrain and rail type
-			return ((_opt.landscape == LT_ARCTIC && GetTileZ(tile) > GetSnowLine()) ? 4 : 0) |
-			       (_opt.landscape == LT_TROPIC ? GetTropicZone(tile) : 0) |
-			       (GetRailType(tile) << 8);
+		case 0x40:
+			if (!HASBIT(_svc.valid, 0)) { _svc.v40 = GetPlatformInfoHelper(tile, false, false, false); SETBIT(_svc.valid, 0); }
+			return _svc.v40;
+
+		case 0x41:
+			if (!HASBIT(_svc.valid, 1)) { _svc.v41 = GetPlatformInfoHelper(tile, true,  false, false); SETBIT(_svc.valid, 1); }
+			return _svc.v41;
+
+		case 0x42: return GetTerrainType(tile) | (GetRailType(tile) << 8);
 		case 0x43: return st->owner; // Station owner
 		case 0x44: return 2;         // PBS status
-		case 0x45: return GetRailContinuationInfo(tile);
-		case 0x46: return GetPlatformInfoHelper(tile, false, false, true);
-		case 0x47: return GetPlatformInfoHelper(tile, true,  false, true);
+		case 0x45:
+			if (!HASBIT(_svc.valid, 2)) { _svc.v45 = GetRailContinuationInfo(tile); SETBIT(_svc.valid, 2); }
+			return _svc.v45;
+
+		case 0x46:
+			if (!HASBIT(_svc.valid, 3)) { _svc.v46 = GetPlatformInfoHelper(tile, false, false, true); SETBIT(_svc.valid, 3); }
+			return _svc.v46;
+
+		case 0x47:
+			if (!HASBIT(_svc.valid, 4)) { _svc.v47 = GetPlatformInfoHelper(tile, true,  false, true); SETBIT(_svc.valid, 4); }
+			return _svc.v47;
+
 		case 0x48: { // Accepted cargo types
 			CargoID cargo_type;
 			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;
 		}
-		case 0x49: return GetPlatformInfoHelper(tile, false, true, false);
+		case 0x49:
+			if (!HASBIT(_svc.valid, 5)) { _svc.v49 = GetPlatformInfoHelper(tile, false, true, false); SETBIT(_svc.valid, 5); }
+			return _svc.v49;
 
 		/* Variables which use the parameter */
 		/* Variables 0x60 to 0x65 are handled separately below */
@@ -422,7 +451,7 @@
 		case 0xF3: return st->bus_stops->status;
 		case 0xF6: return st->airport_flags;
 		case 0xF7: return GB(st->airport_flags, 8, 8);
-		case 0xFA: return max(st->build_date - DAYS_TILL_ORIGINAL_BASE_YEAR, 0);
+		case 0xFA: return clamp(st->build_date - DAYS_TILL_ORIGINAL_BASE_YEAR, 0, 65535);
 	}
 
 	/* Handle cargo variables with parameter, 0x60 to 0x65 */
@@ -433,12 +462,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;
 		}
 	}
 
@@ -446,12 +475,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;
 		}
@@ -486,12 +515,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;
 	}
 
@@ -547,7 +576,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;
 			}
@@ -565,6 +594,9 @@
 	/* Remember the cargo type we've picked */
 	object->u.station.cargo_type = ctype;
 
+	/* Invalidate all cached vars */
+	_svc.valid = 0;
+
 	return Resolve(group, object);
 }
 
--- a/src/newgrf_text.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/newgrf_text.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -438,13 +438,27 @@
 	for (i=0; i < lengthof(iso_codes); i++) {
 		if (strncmp(iso_codes[i].code, iso_name, strlen(iso_codes[i].code)) == 0) {
 			/* We found a match, so let's use it. */
-			ret = i;
+			ret = iso_codes[i].grfLangID;
 			break;
 		}
 	}
 	_currentLangID = ret;
 }
 
+bool CheckGrfLangID(byte lang_id, byte grf_version)
+{
+	if (grf_version < 7) {
+		switch (_currentLangID) {
+			case GRFLX_GERMAN:  return (lang_id & GRFLB_GERMAN)  != 0;
+			case GRFLX_FRENCH:  return (lang_id & GRFLB_FRENCH)  != 0;
+			case GRFLX_SPANISH: return (lang_id & GRFLB_SPANISH) != 0;
+			default:            return (lang_id & (GRFLB_ENGLISH | GRFLB_AMERICAN)) != 0;
+		}
+	}
+
+	return (lang_id == _currentLangID || lang_id == GRFLX_UNSPECIFIED);
+}
+
 /**
  * House cleaning.
  * Remove all strings and reset the text counter.
--- a/src/newgrf_text.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/newgrf_text.h	Sat Jul 14 19:42:58 2007 +0000
@@ -13,4 +13,6 @@
 void SetCurrentGrfLangID(const char *iso_name);
 char *TranslateTTDPatchCodes(const char *str);
 
+bool CheckGrfLangID(byte lang_id, byte grf_version);
+
 #endif /* NEWGRF_TEXT_H */
--- a/src/newgrf_town.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/newgrf_town.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -53,7 +53,6 @@
 		case 0xA3: return t->ratings[5];
 		case 0xA4: return t->ratings[6];
 		case 0xA5: return t->ratings[7];
-		case 0xA6: return t->ratings[8];
 		case 0xAE: return t->have_ratings;
 		case 0xB2: return t->statues;
 		case 0xB6: return t->num_houses;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/newgrf_townname.cpp	Sat Jul 14 19:42: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	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/news.h	Sat Jul 14 19:42: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/npf.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/npf.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -877,7 +877,13 @@
 
 void InitializeNPF()
 {
-	init_AyStar(&_npf_aystar, NPFHash, NPF_HASH_SIZE);
+	static bool first_init = true;
+	if (first_init) {
+		first_init = false;
+		init_AyStar(&_npf_aystar, NPFHash, NPF_HASH_SIZE);
+	} else {
+		AyStarMain_Clear(&_npf_aystar);
+	}
 	_npf_aystar.loops_per_tick = 0;
 	_npf_aystar.max_path_cost = 0;
 	//_npf_aystar.max_search_nodes = 0;
--- a/src/oldloader.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/oldloader.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -22,7 +22,7 @@
 #include "signs.h"
 #include "debug.h"
 #include "depot.h"
-#include "network/network.h"
+#include "newgrf_config.h"
 #include "ai/ai.h"
 #include "date.h"
 
@@ -330,7 +330,11 @@
 		Vehicle *u;
 
 		/* We haven't used this bit for stations for ages */
-		if (v->type == VEH_ROAD) CLRBIT(v->u.road.state, RVS_IS_STOPPING);
+		if (v->type == VEH_ROAD &&
+				v->u.road.state != RVSB_IN_DEPOT &&
+				v->u.road.state != RVSB_WORMHOLE) {
+			CLRBIT(v->u.road.state, RVS_IS_STOPPING);
+		}
 
 		FOR_ALL_VEHICLES_FROM(u, v->index + 1) {
 			/* If a vehicle has the same orders, add the link to eachother
@@ -537,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;
@@ -561,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 ),
 
@@ -579,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[] = {
@@ -653,8 +670,8 @@
 	OCL_SVAR(  OC_UINT8, Industry, height ),
 	OCL_NULL( 2 ),  ///< used to be industry's produced_cargo
 
-	OCL_SVAR( OC_UINT16, Industry, cargo_waiting[0] ),
-	OCL_SVAR( OC_UINT16, Industry, cargo_waiting[1] ),
+	OCL_SVAR( OC_UINT16, Industry, produced_cargo_waiting[0] ),
+	OCL_SVAR( OC_UINT16, Industry, produced_cargo_waiting[1] ),
 
 	OCL_SVAR(  OC_UINT8, Industry, production_rate[0] ),
 	OCL_SVAR(  OC_UINT8, Industry, production_rate[1] ),
@@ -663,18 +680,18 @@
 
 	OCL_SVAR(  OC_UINT8, Industry, prod_level ),
 
-	OCL_SVAR( OC_UINT16, Industry, last_mo_production[0] ),
-	OCL_SVAR( OC_UINT16, Industry, last_mo_production[1] ),
-	OCL_SVAR( OC_UINT16, Industry, last_mo_transported[0] ),
-	OCL_SVAR( OC_UINT16, Industry, last_mo_transported[1] ),
+	OCL_SVAR( OC_UINT16, Industry, this_month_production[0] ),
+	OCL_SVAR( OC_UINT16, Industry, this_month_production[1] ),
+	OCL_SVAR( OC_UINT16, Industry, this_month_transported[0] ),
+	OCL_SVAR( OC_UINT16, Industry, this_month_transported[1] ),
 
-	OCL_SVAR(  OC_UINT8, Industry, pct_transported[0] ),
-	OCL_SVAR(  OC_UINT8, Industry, pct_transported[1] ),
+	OCL_SVAR(  OC_UINT8, Industry, last_month_pct_transported[0] ),
+	OCL_SVAR(  OC_UINT8, Industry, last_month_pct_transported[1] ),
 
-	OCL_SVAR( OC_UINT16, Industry, total_production[0] ),
-	OCL_SVAR( OC_UINT16, Industry, total_production[1] ),
-	OCL_SVAR( OC_UINT16, Industry, total_transported[0] ),
-	OCL_SVAR( OC_UINT16, Industry, total_transported[1] ),
+	OCL_SVAR( OC_UINT16, Industry, last_month_production[0] ),
+	OCL_SVAR( OC_UINT16, Industry, last_month_production[1] ),
+	OCL_SVAR( OC_UINT16, Industry, last_month_transported[0] ),
+	OCL_SVAR( OC_UINT16, Industry, last_month_transported[1] ),
 
 	OCL_SVAR(  OC_UINT8, Industry, type ),
 	OCL_SVAR(  OC_UINT8, Industry, owner ),
@@ -950,7 +967,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 */
@@ -968,7 +985,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;
@@ -1087,6 +1104,8 @@
 	return res;
 }
 
+static uint16 _cargo_count;
+
 static const OldChunks vehicle_chunk[] = {
 	OCL_SVAR(  OC_UINT8, Vehicle, type ),
 	OCL_SVAR(  OC_UINT8, Vehicle, subtype ),
@@ -1129,9 +1148,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 ),
@@ -1209,6 +1228,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/openttd.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -41,7 +41,6 @@
 #include "sound.h"
 #include "economy.h"
 #include "fileio.h"
-#include "hal.h"
 #include "airport.h"
 #include "aircraft.h"
 #include "console.h"
@@ -64,6 +63,10 @@
 #include "newgrf_commons.h"
 #include "player_face.h"
 #include "group.h"
+#include "blitter/factory.hpp"
+#include "sound/sound_driver.hpp"
+#include "music/music_driver.hpp"
+#include "video/video_driver.hpp"
 
 #include "bridge_map.h"
 #include "clear_map.h"
@@ -84,6 +87,9 @@
 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";
 
 /* TODO: usrerror() for errors which are not of an internal nature but
  * caused by the user, i.e. missing files or fatal configuration errors.
@@ -99,7 +105,7 @@
 	va_end(va);
 
 	ShowOSErrorBox(buf);
-	if (_video_driver != NULL) _video_driver->stop();
+	if (_video_driver != NULL) _video_driver->Stop();
 
 	assert(0);
 	exit(1);
@@ -159,6 +165,7 @@
 		"  -v drv              = Set video driver (see below)\n"
 		"  -s drv              = Set sound driver (see below) (param bufsize,hz)\n"
 		"  -m drv              = Set music driver (see below)\n"
+		"  -b drv              = Set the blitter to use (see below)\n"
 		"  -r res              = Set resolution (for instance 800x600)\n"
 		"  -h                  = Display this help text\n"
 		"  -t year             = Set starting year\n"
@@ -181,7 +188,11 @@
 		lastof(buf)
 	);
 
-	p = GetDriverList(p, lastof(buf));
+	/* List the drivers */
+	p = VideoDriverFactoryBase::GetDriversInfo(p, lastof(buf));
+
+	/* List the blitters */
+	p = BlitterFactoryBase::GetBlittersInfo(p, lastof(buf));
 
 	/* ShowInfo put output to stderr, but version information should go
 	 * to stdout; this is the only exception */
@@ -278,6 +289,8 @@
 	/* Dynamic stuff needs to be initialized somewhere... */
 	_town_sort     = NULL;
 	_industry_sort = NULL;
+	_industry_mngr.ResetMapping();
+	_industile_mngr.ResetMapping();
 }
 
 
@@ -296,6 +309,7 @@
 	CleanPool(&_Sign_pool);
 	CleanPool(&_Order_pool);
 	CleanPool(&_Group_pool);
+	CleanPool(&_CargoPacket_pool);
 
 	free((void*)_town_sort);
 	free((void*)_industry_sort);
@@ -305,8 +319,6 @@
 
 static void LoadIntroGame()
 {
-	char filename[256];
-
 	_game_mode = GM_MENU;
 
 	/* Clear transparency options */
@@ -319,14 +331,8 @@
 	ResetWindowSystem();
 	SetupColorsAndInitialWindow();
 
-	/* Generate a world. */
-	snprintf(filename, lengthof(filename), "%sopntitle.dat",  _paths.data_dir);
-#if defined SECOND_DATA_DIR
-	if (SaveOrLoad(filename, SL_LOAD) != SL_OK) {
-		snprintf(filename, lengthof(filename), "%sopntitle.dat",  _paths.second_data_dir);
-	}
-#endif
-	if (SaveOrLoad(filename, SL_LOAD) != SL_OK) {
+	/* Load the default opening screen savegame */
+	if (SaveOrLoad("opntitle.dat", SL_LOAD, DATA_DIR) != SL_OK) {
 		GenerateWorld(GW_EMPTY, 64, 64); // if failed loading, make empty world.
 		WaitTillGeneratedWorld();
 	}
@@ -339,7 +345,7 @@
 	MarkWholeScreenDirty();
 
 	/* Play main theme */
-	if (_music_driver->is_song_playing()) ResetMusic();
+	if (_music_driver->IsSongPlaying()) ResetMusic();
 }
 
 #if defined(UNIX) && !defined(__MORPHOS__)
@@ -350,7 +356,7 @@
 {
 	int i;
 	const char *optformat;
-	char musicdriver[32], sounddriver[32], videodriver[32];
+	char musicdriver[32], sounddriver[32], videodriver[32], blitter[32];
 	int resolution[2] = {0, 0};
 	Year startyear = INVALID_YEAR;
 	uint generation_seed = GENERATE_NEW_SEED;
@@ -364,7 +370,7 @@
 	uint16 dedicated_port = 0;
 #endif /* ENABLE_NETWORK */
 
-	musicdriver[0] = sounddriver[0] = videodriver[0] = '\0';
+	musicdriver[0] = sounddriver[0] = videodriver[0] = blitter[0] = '\0';
 
 	_game_mode = GM_MENU;
 	_switch_mode = SM_MENU;
@@ -376,7 +382,7 @@
 	 *   a letter means: it accepts that param (e.g.: -h)
 	 *   a ':' behind it means: it need a param (e.g.: -m<driver>)
 	 *   a '::' behind it means: it can optional have a param (e.g.: -d<debug>) */
-	optformat = "m:s:v:hD::n::eit:d::r:g::G:c:xl:"
+	optformat = "m:s:v:b:hD::n::eit:d::r:g::G:c:xl:"
 #if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(WIN32)
 		"f"
 #endif
@@ -389,11 +395,13 @@
 		case 'm': ttd_strlcpy(musicdriver, mgo.opt, sizeof(musicdriver)); break;
 		case 's': ttd_strlcpy(sounddriver, mgo.opt, sizeof(sounddriver)); break;
 		case 'v': ttd_strlcpy(videodriver, mgo.opt, sizeof(videodriver)); break;
+		case 'b': ttd_strlcpy(blitter, mgo.opt, sizeof(blitter)); break;
 #if defined(ENABLE_NETWORK)
 		case 'D':
 			strcpy(musicdriver, "null");
 			strcpy(sounddriver, "null");
 			strcpy(videodriver, "dedicated");
+			strcpy(blitter, "null");
 			dedicated = true;
 			if (mgo.opt != NULL) {
 				/* Use the existing method for parsing (openttd -n).
@@ -461,10 +469,16 @@
 	if (!StrEmpty(musicdriver)) ttd_strlcpy(_ini_musicdriver, musicdriver, sizeof(_ini_musicdriver));
 	if (!StrEmpty(sounddriver)) ttd_strlcpy(_ini_sounddriver, sounddriver, sizeof(_ini_sounddriver));
 	if (!StrEmpty(videodriver)) ttd_strlcpy(_ini_videodriver, videodriver, sizeof(_ini_videodriver));
+	if (StrEmpty(blitter)) ttd_strlcpy(blitter, _default_blitter, sizeof(blitter));
 	if (resolution[0] != 0) { _cur_resolution[0] = resolution[0]; _cur_resolution[1] = resolution[1]; }
 	if (startyear != INVALID_YEAR) _patches_newgame.starting_year = startyear;
 	if (generation_seed != GENERATE_NEW_SEED) _patches_newgame.generation_seed = generation_seed;
 
+	/* The width and height must be at least 1 pixel, this
+	 * way all internal drawing routines work correctly. */
+	if (_cur_resolution[0] == 0) _cur_resolution[0] = 1;
+	if (_cur_resolution[1] == 0) _cur_resolution[1] = 1;
+
 #if defined(ENABLE_NETWORK)
 	if (dedicated_host) snprintf(_network_server_bind_ip_host, NETWORK_HOSTNAME_LENGTH, "%s", dedicated_host);
 	if (dedicated_port) _network_server_port = dedicated_port;
@@ -500,16 +514,39 @@
 	/* Initialize game palette */
 	GfxInitPalettes();
 
+	DEBUG(misc, 1, "Loading blitter '%s'...", blitter);
+	if (BlitterFactoryBase::SelectBlitter(blitter) == NULL)
+		error("Failed to select requested blitter '%s'; does it exist?", blitter);
+
 	DEBUG(driver, 1, "Loading drivers...");
-	LoadDriver(SOUND_DRIVER, _ini_sounddriver);
-	LoadDriver(MUSIC_DRIVER, _ini_musicdriver);
-	LoadDriver(VIDEO_DRIVER, _ini_videodriver); // load video last, to prevent an empty window while sound and music loads
+
+	_sound_driver = (SoundDriver*)SoundDriverFactoryBase::SelectDriver(_ini_sounddriver, Driver::DT_SOUND);
+	if (_sound_driver == NULL) {
+		StrEmpty(_ini_sounddriver) ?
+			error("Failed to autoprobe sound driver") :
+			error("Failed to select requested sound driver '%s'", _ini_sounddriver);
+	}
+
+	_music_driver = (MusicDriver*)MusicDriverFactoryBase::SelectDriver(_ini_musicdriver, Driver::DT_MUSIC);
+	if (_music_driver == NULL) {
+		StrEmpty(_ini_musicdriver) ?
+			error("Failed to autoprobe music driver") :
+			error("Failed to select requested music driver '%s'", _ini_musicdriver);
+	}
+
+	_video_driver = (VideoDriver*)VideoDriverFactoryBase::SelectDriver(_ini_videodriver, Driver::DT_VIDEO);
+	if (_video_driver == NULL) {
+		StrEmpty(_ini_videodriver) ?
+			error("Failed to autoprobe video driver") :
+			error("Failed to select requested video driver '%s'", _ini_videodriver);
+	}
+
 	_savegame_sort_order = SORT_BY_DATE | SORT_DESCENDING;
 	/* Initialize the zoom level of the screen to normal */
 	_screen.zoom = ZOOM_LVL_NORMAL;
 
 	/* restore saved music volume */
-	_music_driver->set_volume(msf.music_vol);
+	_music_driver->SetVolume(msf.music_vol);
 
 	NetworkStartUp(); // initialize network-core
 
@@ -580,16 +617,16 @@
 	}
 #endif /* ENABLE_NETWORK */
 
-	_video_driver->main_loop();
+	_video_driver->MainLoop();
 
 	WaitTillSaved();
 	IConsoleFree();
 
 	if (_network_available) NetworkShutDown(); // Shut down the network and close any open connections
 
-	_video_driver->stop();
-	_music_driver->stop();
-	_sound_driver->stop();
+	_video_driver->Stop();
+	_music_driver->Stop();
+	_sound_driver->Stop();
 
 	/* only save config if we have to */
 	if (save_config) {
@@ -681,6 +718,7 @@
 	DoCommandP(0, (_patches.autorenew << 15 ) | (_patches.autorenew_months << 16) | 4, _patches.autorenew_money, NULL, CMD_SET_AUTOREPLACE);
 
 	SettingsDisableElrail(_patches.disable_elrails);
+	SetDefaultRailGui();
 
 	MarkWholeScreenDirty();
 }
@@ -691,6 +729,8 @@
 
 	ResetGRFConfig(true);
 	_house_mngr.ResetMapping();
+	_industile_mngr.ResetMapping();
+	_industry_mngr.ResetMapping();
 
 	GenerateWorldSetCallback(&MakeNewGameDone);
 	GenerateWorld(from_heightmap ? GW_HEIGHTMAP : GW_NEWGAME, 1 << _patches.map_x, 1 << _patches.map_y);
@@ -729,7 +769,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;
 	}
@@ -742,9 +783,10 @@
 	ResetGRFConfig(true);
 
 	/* Load game */
-	if (SaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode) != SL_OK) {
+	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;
@@ -764,12 +806,20 @@
 	MarkWholeScreenDirty();
 }
 
-bool SafeSaveOrLoad(const char *filename, int mode, int newgm)
+/** Load the specified savegame but on error do different things.
+ * If loading fails due to corrupt savegame, bad version, etc. go back to
+ * a previous correct state. In the menu for example load the intro game again.
+ * @param filename file to be loaded
+ * @param mode mode of loading, either SL_LOAD or SL_OLD_LOAD
+ * @param newgm switch to this mode of loading fails due to some unknown error
+ * @param subdir default directory to look for filename, set to 0 if not needed */
+bool SafeSaveOrLoad(const char *filename, int mode, int newgm, Subdirectory subdir)
 {
 	byte ogm = _game_mode;
 
 	_game_mode = newgm;
-	switch (SaveOrLoad(filename, mode)) {
+	assert(mode == SL_LOAD || mode == SL_OLD_LOAD);
+	switch (SaveOrLoad(filename, mode, subdir)) {
 		case SL_OK: return true;
 
 		case SL_REINIT:
@@ -842,9 +892,10 @@
 		_opt_ptr = &_opt;
 		ResetGRFConfig(true);
 
-		if (!SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_NORMAL)) {
+		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 */
@@ -876,13 +927,14 @@
 		break;
 
 	case SM_LOAD_SCENARIO: { /* Load scenario from scenario editor */
-		if (SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_EDITOR)) {
+		if (SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_EDITOR, NO_DIRECTORY)) {
 			_opt_ptr = &_opt;
 
 			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;
 	}
@@ -892,8 +944,9 @@
 		break;
 
 	case SM_SAVE: /* Save game */
-		if (SaveOrLoad(_file_to_saveload.name, SL_SAVE) != SL_OK) {
-			ShowErrorMessage(INVALID_STRING_ID, STR_4007_GAME_SAVE_FAILED, 0, 0);
+		if (SaveOrLoad(_file_to_saveload.name, SL_SAVE, NO_DIRECTORY) != SL_OK) {
+			SetDParamStr(0, GetSaveLoadErrorString());
+			ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
 		} else {
 			DeleteWindowById(WC_SAVELOAD, 0);
 		}
@@ -949,9 +1002,11 @@
 	}
 }
 
+/** Create an autosave. The default name is "autosave#.sav". However with
+ * the patch setting 'keep_all_autosave' the name defaults to company-name + date */
 static void DoAutosave()
 {
-	char buf[200];
+	char buf[MAX_PATH];
 
 #if defined(PSP)
 	/* Autosaving in networking is too time expensive for the PSP */
@@ -960,28 +1015,19 @@
 #endif /* PSP */
 
 	if (_patches.keep_all_autosave && _local_player != PLAYER_SPECTATOR) {
-		const Player *p = GetPlayer(_local_player);
-		char* s = buf;
-
-		s += snprintf(buf, lengthof(buf), "%s%s", _paths.autosave_dir, PATHSEP);
+		SetDParam(0, _local_player);
+		SetDParam(1, _date);
+		GetString(buf, STR_4004, lastof(buf));
+		ttd_strlcpy(buf, ".sav", sizeof(buf));
+	} else {
+		/* generate a savegame name and number according to _patches.max_num_autosaves */
+		snprintf(buf, sizeof(buf), "autosave%d.sav", _autosave_ctr);
 
-		SetDParam(0, p->name_1);
-		SetDParam(1, p->name_2);
-		SetDParam(2, _date);
-		s = GetString(s, STR_4004, lastof(buf));
-		strecpy(s, ".sav", lastof(buf));
-	} else { // generate a savegame name and number according to _patches.max_num_autosaves
-		snprintf(buf, lengthof(buf), "%s%sautosave%d.sav", _paths.autosave_dir, PATHSEP, _autosave_ctr);
-
-		_autosave_ctr++;
-		if (_autosave_ctr >= _patches.max_num_autosaves) {
-			/* we reached the limit for numbers of autosaves. We will start over */
-			_autosave_ctr = 0;
-		}
+		if (++_autosave_ctr >= _patches.max_num_autosaves) _autosave_ctr = 0;
 	}
 
 	DEBUG(sl, 2, "Autosaving to '%s'", buf);
-	if (SaveOrLoad(buf, SL_SAVE) != SL_OK)
+	if (SaveOrLoad(buf, SL_SAVE, AUTOSAVE_DIR) != SL_OK)
 		ShowErrorMessage(INVALID_STRING_ID, STR_AUTOSAVE_FAILED, 0, 0);
 }
 
@@ -1058,7 +1104,7 @@
 	}
 
 	_caret_timer += 3;
-	_timer_counter += 8;
+	_palette_animation_counter += 8;
 	CursorTick();
 
 #ifdef ENABLE_NETWORK
@@ -1227,7 +1273,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;
@@ -1272,7 +1321,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;
 	}
 
@@ -1288,7 +1337,7 @@
 	WP(w,vp_d).dest_scrollpos_y = _saved_scrollpos_y;
 
 	vp = w->viewport;
-	vp->zoom = _saved_scrollpos_zoom;
+	vp->zoom = (ZoomLevel)min(_saved_scrollpos_zoom, ZOOM_LVL_MAX);
 	vp->virtual_width = ScaleByZoom(vp->width, vp->zoom);
 	vp->virtual_height = ScaleByZoom(vp->height, vp->zoom);
 
@@ -1812,6 +1861,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. */
@@ -1882,13 +1932,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
@@ -1901,12 +1957,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;
 			}
 		}
 	}
@@ -1919,12 +1975,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();
 		}
 	}
 
@@ -2013,6 +2070,22 @@
 		}
 	}
 
+	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);
+			}
+		}
+	}
+
+	if (CheckSavegameVersion(70)) {
+		/* Added variables to support newindustries */
+		Industry *i;
+		FOR_ALL_INDUSTRIES(i) i->founder = OWNER_NONE;
+	}
+
 	/* Recalculate */
 	Group *g;
 	FOR_ALL_GROUPS(g) {
@@ -2053,8 +2126,3 @@
 	/* redraw the whole screen */
 	MarkWholeScreenDirty();
 }
-
-HalMusicDriver *_music_driver;
-HalSoundDriver *_sound_driver;
-HalVideoDriver *_video_driver;
-
--- a/src/openttd.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/openttd.h	Sat Jul 14 19:42:58 2007 +0000
@@ -8,7 +8,6 @@
 #define VARDEF extern
 #endif
 
-#include "hal.h"
 #include "helpers.hpp"
 
 struct Oblong {
@@ -52,11 +51,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 +69,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 +192,7 @@
 	TO_BUILDINGS,
 	TO_BRIDGES,
 	TO_STRUCTURES,
+	TO_LOADING,
 };
 
 /* Landscape types */
@@ -224,53 +228,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 +353,7 @@
 	StringID str;
 	Owner owner;
 	Date build_date;
-	uint32 dparam[2];
+	uint64 dparam[2];
 };
 
 struct ViewportSign {
@@ -358,10 +362,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 +571,7 @@
 	WC_GENERATE_PROGRESS_WINDOW,
 	WC_CONFIRM_POPUP_QUERY,
 	WC_TRANSPARENCY_TOOLBAR,
+	WC_VEHICLE_TIMETABLE,
 };
 
 
@@ -588,8 +665,6 @@
 
 VARDEF byte _savegame_sort_order;
 
-#define INVALID_STRING_ID 0xFFFF
-
 enum {
 	MAX_SCREEN_WIDTH  = 2048,
 	MAX_SCREEN_HEIGHT = 1200,
--- a/src/order.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/order.h	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/order_cmd.cpp	Sat Jul 14 19:42: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,32 +565,30 @@
 		RebuildVehicleLists();
 	}
 
-	return 0;
+	return CommandCost();
 }
 
-/** Goto next order of order-list.
+/** Goto order of order-list.
  * @param tile unused
  * @param flags operation to perform
  * @param p1 The ID of the vehicle which order is skipped
- * @param p2 unused
+ * @param p2 the selected order to which we want to skip
  */
-int32 CmdSkipOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSkipToOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	Vehicle *v;
 	VehicleID veh_id = p1;
+	VehicleOrderID sel_ord = p2;
 
 	if (!IsValidVehicleID(veh_id)) return CMD_ERROR;
 
 	v = GetVehicle(veh_id);
 
-	if (!CheckOwnership(v->owner)) return CMD_ERROR;
+	if (!CheckOwnership(v->owner) || sel_ord == v->cur_order_index ||
+			sel_ord >= v->num_orders || v->num_orders < 2) return CMD_ERROR;
 
 	if (flags & DC_EXEC) {
-		/* Goto next order */
-		VehicleOrderID b = v->cur_order_index + 1;
-		if (b >= v->num_orders) b = 0;
-
-		v->cur_order_index = b;
+		v->cur_order_index = sel_ord;
 
 		if (v->type == VEH_ROAD) ClearSlot(v);
 
@@ -597,9 +606,94 @@
 	if (v->type == VEH_AIRCRAFT) InvalidateWindowClasses(WC_AIRCRAFT_LIST);
 	if (v->type == VEH_SHIP) InvalidateWindowClasses(WC_SHIPS_LIST);
 
-	return 0;
+	return CommandCost();
 }
 
+/**
+ * Move an order inside the orderlist
+ * @param tile unused
+ * @param p1 the ID of the vehicle
+ * @param p2 order to move and target
+ *           bit 0-15  : the order to move
+ *           bit 16-31 : the target order
+ * @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
+ */
+CommandCost CmdMoveOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+{
+	VehicleID veh = p1;
+	VehicleOrderID moving_order = GB(p2,  0, 16);
+	VehicleOrderID target_order = GB(p2, 16, 16);
+
+	if (!IsValidVehicleID(veh)) return CMD_ERROR;
+
+	Vehicle *v = GetVehicle(veh);
+	if (!CheckOwnership(v->owner)) return CMD_ERROR;
+
+	/* Don't make senseless movements */
+	if (moving_order >= v->num_orders || target_order >= v->num_orders ||
+			moving_order == target_order || v->num_orders <= 1)
+		return CMD_ERROR;
+
+	Order *moving_one = GetVehicleOrder(v, moving_order);
+	/* Don't move an empty order */
+	if (moving_one == NULL) return CMD_ERROR;
+
+	if (flags & DC_EXEC) {
+		/* Take the moving order out of the pointer-chain */
+		Order *one_before = GetVehicleOrder(v, moving_order - 1);
+		Order *one_past = GetVehicleOrder(v, moving_order + 1);
+
+		if (one_before == NULL) {
+			/* First order edit */
+			v->orders = moving_one->next;
+		} else {
+			one_before->next = moving_one->next;
+		}
+
+		/* Insert the moving_order again in the pointer-chain */
+		one_before = GetVehicleOrder(v, target_order - 1);
+		one_past = GetVehicleOrder(v, target_order);
+
+		moving_one->next = one_past;
+
+		if (one_before == NULL) {
+			/* first order edit */
+			SwapOrders(v->orders, moving_one);
+			v->orders->next = moving_one;
+		} else {
+			one_before->next = moving_one;
+		}
+
+		/* Update shared list */
+		Vehicle *u = GetFirstVehicleFromSharedList(v);
+
+		DeleteOrderWarnings(u);
+
+		for (; u != NULL; u = u->next_shared) {
+			/* Update the first order */
+			if (u->orders != v->orders) u->orders = v->orders;
+
+			/* Update the current order */
+			if (u->cur_order_index == moving_order) {
+				u->cur_order_index = target_order;
+			} else if(u->cur_order_index > moving_order && u->cur_order_index <= target_order) {
+				u->cur_order_index--;
+			} else if(u->cur_order_index < moving_order && u->cur_order_index >= target_order) {
+				u->cur_order_index++;
+			}
+
+			assert(v->orders == u->orders);
+			/* Update any possible open window of the vehicle */
+			InvalidateVehicleOrder(u);
+		}
+
+		/* Make sure to rebuild the whole list */
+		RebuildVehicleLists();
+	}
+
+	return CommandCost();
+}
 
 /** Modify an order in the orderlist of a vehicle.
  * @param tile unused
@@ -611,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;
@@ -680,7 +774,7 @@
 		}
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Clone/share/copy an order-list of an other vehicle.
@@ -691,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);
@@ -813,7 +907,7 @@
 		default: return CMD_ERROR;
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Add/remove refit orders from an order
@@ -825,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;
@@ -862,7 +956,7 @@
 		}
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /**
@@ -881,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 */
@@ -956,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);
@@ -975,7 +1070,7 @@
 		v->service_interval = serv_int;
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -1232,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/order_gui.cpp	Sat Jul 14 19:42: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,
@@ -44,6 +46,13 @@
 	ORDER_WIDGET_RESIZE,
 };
 
+/**
+ * Return the memorised selected order.
+ *
+ * @param w current window
+ * @return the memorised order if it is a vaild one
+ *  else return the number of orders
+ */
 static int OrderGetSel(const Window *w)
 {
 	const Vehicle *v = GetVehicle(w->window_number);
@@ -52,6 +61,33 @@
 	return (num >= 0 && num < v->num_orders) ? num : v->num_orders;
 }
 
+/**
+ * Calculate the selected order.
+ * The calculation is based on the relative (to the window) y click position and
+ *  the position of the scrollbar.
+ *
+ * @param w current window
+ * @param y Y-value of the click relative to the window origin
+ * @param v current vehicle
+ * @return the new selected order if the order is valid else return that
+ *  an invalid one has been selected.
+ */
+static int GetOrderFromOrderWndPt(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 && sel >= 0) ? sel : INVALID_ORDER;
+}
+
 static StringID StationOrderStrings[] = {
 	STR_8806_GO_TO,
 	STR_8807_GO_TO_TRANSFER,
@@ -93,7 +129,7 @@
 
 	if (v->owner == _local_player) {
 		/* skip */
-		SetWindowWidgetDisabledState(w, ORDER_WIDGET_SKIP, v->num_orders == 0);
+		SetWindowWidgetDisabledState(w, ORDER_WIDGET_SKIP, v->num_orders <= 1);
 
 		/* delete */
 		SetWindowWidgetDisabledState(w, ORDER_WIDGET_DELETE,
@@ -140,8 +176,7 @@
 		}
 	}
 
-	SetDParam(0, v->string_id);
-	SetDParam(1, v->unitnumber);
+	SetDParam(0, v->index);
 	DrawWindowWidgets(w);
 
 	y = 15;
@@ -356,6 +391,12 @@
 	}
 }
 
+/**
+ * Handle the click on the goto button.
+ *
+ * @param w current window
+ * @param v current vehicle
+ */
 static void OrderClick_Goto(Window *w, const Vehicle *v)
 {
 	InvalidateWidget(w, ORDER_WIDGET_GOTO);
@@ -368,36 +409,86 @@
 	}
 }
 
+/**
+ * Handle the click on the full load button.
+ *
+ * @param w current window
+ * @param v current vehicle
+ */
 static void OrderClick_FullLoad(Window *w, const Vehicle *v)
 {
 	DoCommandP(v->tile, v->index + (OrderGetSel(w) << 16), OFB_FULL_LOAD, NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER));
 }
 
+/**
+ * Handle the click on the unload button.
+ *
+ * @param w current window
+ * @param v current vehicle
+ */
 static void OrderClick_Unload(Window *w, const Vehicle *v)
 {
 	DoCommandP(v->tile, v->index + (OrderGetSel(w) << 16), OFB_UNLOAD,    NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER));
 }
 
+/**
+ * Handle the click on the nonstop button.
+ *
+ * @param w current window
+ * @param v current vehicle
+ */
 static void OrderClick_Nonstop(Window *w, const Vehicle *v)
 {
 	DoCommandP(v->tile, v->index + (OrderGetSel(w) << 16), OFB_NON_STOP,  NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER));
 }
 
+/**
+ * Handle the click on the transfer button.
+ *
+ * @param w current window
+ * @param v current vehicle
+ */
 static void OrderClick_Transfer(Window* w, const Vehicle* v)
 {
 	DoCommandP(v->tile, v->index + (OrderGetSel(w) <<  16), OFB_TRANSFER, NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER));
 }
 
+/**
+ * Handle the click on the skip button.
+ * If ctrl is pressed skip to selected order.
+ *  Else skip to current order + 1
+ *
+ * @param w current window
+ * @param v current vehicle
+ */
 static void OrderClick_Skip(Window *w, const Vehicle *v)
 {
-	DoCommandP(v->tile, v->index, 0, NULL, CMD_SKIP_ORDER);
+	/* Don't skip when there's nothing to skip */
+	if (_ctrl_pressed && v->cur_order_index == OrderGetSel(w)) return;
+
+	DoCommandP(v->tile, v->index, _ctrl_pressed ? OrderGetSel(w) : ((v->cur_order_index + 1) % v->num_orders),
+			NULL, CMD_SKIP_TO_ORDER | CMD_MSG(_ctrl_pressed ? STR_CAN_T_SKIP_TO_ORDER : STR_CAN_T_SKIP_ORDER));
 }
 
+/**
+ * Handle the click on the unload button.
+ *
+ * @param w current window
+ * @param v current vehicle
+ */
 static void OrderClick_Delete(Window *w, const Vehicle *v)
 {
 	DoCommandP(v->tile, v->index, OrderGetSel(w), NULL, CMD_DELETE_ORDER | CMD_MSG(STR_8834_CAN_T_DELETE_THIS_ORDER));
 }
 
+/**
+ * Handle the click on the refit button.
+ * If ctrl is pressed cancel refitting.
+ *  Else show the refit window.
+ *
+ * @param w current window
+ * @param v current vehicle
+ */
 static void OrderClick_Refit(Window *w, const Vehicle *v)
 {
 	if (_ctrl_pressed) {
@@ -410,6 +501,12 @@
 
 typedef void OnButtonVehClick(Window *w, const Vehicle *v);
 
+/**
+ * Keycode function mapping.
+ *
+ * @see _order_keycodes[]
+ * @note Keep them allways in sync with _order_keycodes[]!
+ */
 static OnButtonVehClick* const _order_button_proc[] = {
 	OrderClick_Skip,
 	OrderClick_Delete,
@@ -444,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:
@@ -451,14 +555,20 @@
 		break;
 
 	case WE_CLICK: {
-		Vehicle *v = GetVehicle(w->window_number);
+		const Vehicle *v = GetVehicle(w->window_number);
 		switch (e->we.click.widget) {
 		case ORDER_WIDGET_ORDER_LIST: {
-			int sel = (e->we.click.pt.y - 15) / 10;
+			ResetObjectToPlace();
 
-			if ((uint)sel >= w->vscroll.cap) return;
+			int sel = GetOrderFromOrderWndPt(w, e->we.click.pt.y, v);
 
-			sel += w->vscroll.pos;
+			if (sel == INVALID_ORDER) {
+				/* This was a click on an empty part of the orders window, so
+				 * deselect the currently selected order. */
+				WP(w,order_d).sel = -1;
+				SetWindowDirty(w);
+				return;
+			}
 
 			if (_ctrl_pressed && sel < v->num_orders) {
 				const Order *ord = GetVehicleOrder(v, sel);
@@ -473,10 +583,21 @@
 
 				if (xy != 0) ScrollMainWindowToTile(xy);
 				return;
+			} else {
+				if (sel == WP(w,order_d).sel) {
+					/* Deselect clicked order */
+					WP(w,order_d).sel = -1;
+				} else {
+					/* Select clicked order */
+					WP(w,order_d).sel = sel;
+
+					if (v->owner == _local_player) {
+						/* Activate drag and drop */
+						SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, 4, w);
+					}
+				}
 			}
 
-			if (sel == WP(w,order_d).sel) sel = -1;
-			WP(w,order_d).sel = sel;
 			SetWindowDirty(w);
 		} break;
 
@@ -510,12 +631,42 @@
 		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;
 		}
 	} break;
 
+	case WE_DRAGDROP: {
+		const Vehicle *v = GetVehicle(w->window_number);
+
+		switch (e->we.click.widget) {
+			case ORDER_WIDGET_ORDER_LIST: {
+				int from_order = OrderGetSel(w);
+				int to_order = GetOrderFromOrderWndPt(w, e->we.dragdrop.pt.y, v);
+
+				if (!(from_order == to_order || from_order == INVALID_ORDER || from_order > v->num_orders || to_order == INVALID_ORDER || to_order > v->num_orders) &&
+						DoCommandP(v->tile, v->index, from_order | (to_order << 16), NULL, CMD_MOVE_ORDER | CMD_MSG(STR_CAN_T_MOVE_THIS_ORDER))) {
+					WP(w, order_d).sel = -1;
+				}
+
+				break;
+			}
+
+			case ORDER_WIDGET_DELETE:
+				OrderClick_Delete(w, v);
+				break;
+		}
+
+		ResetObjectToPlace();
+		break;
+	}
+
 	case WE_KEYPRESS: {
 		Vehicle *v = GetVehicle(w->window_number);
 		uint i;
@@ -589,23 +740,33 @@
 	}
 }
 
+/**
+ * Widget definition for player train orders
+ */
 static const Widget _orders_train_widgets[] = {
-{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                STR_018B_CLOSE_WINDOW},
-{    WWT_CAPTION,   RESIZE_RIGHT,   14,    11,   398,     0,    13, STR_8829_ORDERS,         STR_018C_WINDOW_TITLE_DRAG_THIS},
-{      WWT_PANEL,   RESIZE_RB,      14,     0,   386,    14,    75, 0x0,                     STR_8852_ORDERS_LIST_CLICK_ON_ORDER},
-{  WWT_SCROLLBAR,   RESIZE_LRB,     14,   387,   398,    14,    75, 0x0,                     STR_0190_SCROLL_BAR_SCROLLS_LIST},
-{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,     0,    52,    76,    87, STR_8823_SKIP,           STR_8853_SKIP_THE_CURRENT_ORDER},
-{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,    53,   105,    76,    87, STR_8824_DELETE,         STR_8854_DELETE_THE_HIGHLIGHTED},
-{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   106,   158,    76,    87, STR_8825_NON_STOP,       STR_8855_MAKE_THE_HIGHLIGHTED_ORDER},
-{    WWT_TEXTBTN,   RESIZE_TB,      14,   159,   211,    76,    87, STR_8826_GO_TO,          STR_8856_INSERT_A_NEW_ORDER_BEFORE},
-{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   212,   264,    76,    87, STR_FULLLOAD_OR_SERVICE, STR_NULL},
-{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   265,   319,    76,    87, STR_8828_UNLOAD,         STR_8858_MAKE_THE_HIGHLIGHTED_ORDER},
-{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   265,   319,    76,    87, STR_REFIT,               STR_REFIT_TIP},
-{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   320,   372,    76,    87, STR_886F_TRANSFER,       STR_886D_MAKE_THE_HIGHLIGHTED_ORDER},
-{ WWT_PUSHIMGBTN,   RESIZE_TB,      14,   373,   386,    76,    87, SPR_SHARED_ORDERS_ICON,  STR_VEH_WITH_SHARED_ORDERS_LIST_TIP},
-{      WWT_PANEL,   RESIZE_RTB,     14,   387,   386,    76,    87, 0x0,                     STR_NULL},
-{  WWT_RESIZEBOX,   RESIZE_LRTB,    14,   387,   398,    76,    87, 0x0,                     STR_RESIZE_BUTTON},
-{   WIDGETS_END},
+	{   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
+
+	{  WWT_SCROLLBAR,   RESIZE_LRB,     14,   387,   398,    14,    75, 0x0,                     STR_0190_SCROLL_BAR_SCROLLS_LIST},    // ORDER_WIDGET_SCROLLBAR
+
+	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,     0,    52,    76,    87, STR_8823_SKIP,           STR_8853_SKIP_THE_CURRENT_ORDER},     // ORDER_WIDGET_SKIP
+	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,    53,   105,    76,    87, STR_8824_DELETE,         STR_8854_DELETE_THE_HIGHLIGHTED},     // ORDER_WIDGET_DELETE
+	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   106,   158,    76,    87, STR_8825_NON_STOP,       STR_8855_MAKE_THE_HIGHLIGHTED_ORDER}, // ORDER_WIDGET_NON_STOP
+	{    WWT_TEXTBTN,   RESIZE_TB,      14,   159,   211,    76,    87, STR_8826_GO_TO,          STR_8856_INSERT_A_NEW_ORDER_BEFORE},  // ORDER_WIDGET_GOTO
+	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   212,   264,    76,    87, STR_FULLLOAD_OR_SERVICE, STR_NULL},                            // ORDER_WIDGET_FULL_LOAD
+	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   265,   319,    76,    87, STR_8828_UNLOAD,         STR_8858_MAKE_THE_HIGHLIGHTED_ORDER}, // ORDER_WIDGET_UNLOAD
+	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   265,   319,    76,    87, STR_REFIT,               STR_REFIT_TIP},                       // ORDER_WIDGET_REFIT
+	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   320,   372,    76,    87, STR_886F_TRANSFER,       STR_886D_MAKE_THE_HIGHLIGHTED_ORDER}, // ORDER_WIDGET_TRANSFER
+
+	{ WWT_PUSHIMGBTN,   RESIZE_TB,      14,   373,   386,    76,    87, SPR_SHARED_ORDERS_ICON,  STR_VEH_WITH_SHARED_ORDERS_LIST_TIP}, // ORDER_WIDGET_SHARED_ORDER_LIST
+
+	{      WWT_PANEL,   RESIZE_RTB,     14,   387,   386,    76,    87, 0x0,                     STR_NULL},                            // ORDER_WIDGET_RESIZE_BAR
+
+	{  WWT_RESIZEBOX,   RESIZE_LRTB,    14,   387,   398,    76,    87, 0x0,                     STR_RESIZE_BUTTON},                   // ORDER_WIDGET_RESIZE
+	{   WIDGETS_END},
 };
 
 static const WindowDesc _orders_train_desc = {
@@ -616,23 +777,33 @@
 	OrdersWndProc
 };
 
+/**
+ * Widget definition for player orders (!train)
+ */
 static const Widget _orders_widgets[] = {
-{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                STR_018B_CLOSE_WINDOW},
-{    WWT_CAPTION,   RESIZE_RIGHT,   14,    11,   409,     0,    13, STR_8829_ORDERS,         STR_018C_WINDOW_TITLE_DRAG_THIS},
-{      WWT_PANEL,   RESIZE_RB,      14,     0,   397,    14,    75, 0x0,                     STR_8852_ORDERS_LIST_CLICK_ON_ORDER},
-{  WWT_SCROLLBAR,   RESIZE_LRB,     14,   398,   409,    14,    75, 0x0,                     STR_0190_SCROLL_BAR_SCROLLS_LIST},
-{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,     0,    63,    76,    87, STR_8823_SKIP,           STR_8853_SKIP_THE_CURRENT_ORDER},
-{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,    64,   128,    76,    87, STR_8824_DELETE,         STR_8854_DELETE_THE_HIGHLIGHTED},
-{      WWT_EMPTY,   RESIZE_TB,      14,     0,     0,    76,    87, 0x0,                     0x0},
-{    WWT_TEXTBTN,   RESIZE_TB,      14,   129,   192,    76,    87, STR_8826_GO_TO,          STR_8856_INSERT_A_NEW_ORDER_BEFORE},
-{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   193,   256,    76,    87, STR_FULLLOAD_OR_SERVICE, STR_NULL},
-{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   257,   319,    76,    87, STR_8828_UNLOAD,         STR_8858_MAKE_THE_HIGHLIGHTED_ORDER},
-{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   257,   319,    76,    87, STR_REFIT,               STR_REFIT_TIP},
-{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   320,   383,    76,    87, STR_886F_TRANSFER,       STR_886D_MAKE_THE_HIGHLIGHTED_ORDER},
-{ WWT_PUSHIMGBTN,   RESIZE_TB,      14,   384,   397,    76,    87, SPR_SHARED_ORDERS_ICON,  STR_VEH_WITH_SHARED_ORDERS_LIST_TIP},
-{      WWT_PANEL,   RESIZE_RTB,     14,   397,   396,    76,    87, 0x0,                     STR_NULL},
-{  WWT_RESIZEBOX,   RESIZE_LRTB,    14,   398,   409,    76,    87, 0x0,                     STR_RESIZE_BUTTON},
-{   WIDGETS_END},
+	{   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
+
+	{  WWT_SCROLLBAR,   RESIZE_LRB,     14,   398,   409,    14,    75, 0x0,                     STR_0190_SCROLL_BAR_SCROLLS_LIST},    // ORDER_WIDGET_SCROLLBAR
+
+	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,     0,    63,    76,    87, STR_8823_SKIP,           STR_8853_SKIP_THE_CURRENT_ORDER},     // ORDER_WIDGET_SKIP
+	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,    64,   128,    76,    87, STR_8824_DELETE,         STR_8854_DELETE_THE_HIGHLIGHTED},     // ORDER_WIDGET_DELETE
+	{      WWT_EMPTY,   RESIZE_TB,      14,     0,     0,    76,    87, 0x0,                     0x0},                                 // ORDER_WIDGET_NON_STOP
+	{    WWT_TEXTBTN,   RESIZE_TB,      14,   129,   192,    76,    87, STR_8826_GO_TO,          STR_8856_INSERT_A_NEW_ORDER_BEFORE},  // ORDER_WIDGET_GOTO
+	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   193,   256,    76,    87, STR_FULLLOAD_OR_SERVICE, STR_NULL},                            // ORDER_WIDGET_FULL_LOAD
+	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   257,   319,    76,    87, STR_8828_UNLOAD,         STR_8858_MAKE_THE_HIGHLIGHTED_ORDER}, // ORDER_WIDGET_UNLOAD
+	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   257,   319,    76,    87, STR_REFIT,               STR_REFIT_TIP},                       // ORDER_WIDGET_REFIT
+	{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,   320,   383,    76,    87, STR_886F_TRANSFER,       STR_886D_MAKE_THE_HIGHLIGHTED_ORDER}, // ORDER_WIDGET_TRANSFER
+
+	{ WWT_PUSHIMGBTN,   RESIZE_TB,      14,   384,   397,    76,    87, SPR_SHARED_ORDERS_ICON,  STR_VEH_WITH_SHARED_ORDERS_LIST_TIP}, // ORDER_WIDGET_SHARED_ORDER_LIST
+
+	{      WWT_PANEL,   RESIZE_RTB,     14,   397,   396,    76,    87, 0x0,                     STR_NULL},                            // ORDER_WIDGET_RESIZE_BAR
+
+	{  WWT_RESIZEBOX,   RESIZE_LRTB,    14,   398,   409,    76,    87, 0x0,                     STR_RESIZE_BUTTON},                   // ORDER_WIDGET_RESIZE
+	{   WIDGETS_END},
 };
 
 static const WindowDesc _orders_desc = {
@@ -643,20 +814,33 @@
 	OrdersWndProc
 };
 
+/**
+ * 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},
-{    WWT_CAPTION,   RESIZE_RIGHT,   14,    11,   331,     0,    13, STR_A00B_ORDERS, STR_018C_WINDOW_TITLE_DRAG_THIS},
-{      WWT_PANEL,   RESIZE_RB,      14,     0,   319,    14,    75, 0x0,             STR_8852_ORDERS_LIST_CLICK_ON_ORDER},
-{  WWT_SCROLLBAR,   RESIZE_LRB,     14,   320,   331,    14,    75, 0x0,             STR_0190_SCROLL_BAR_SCROLLS_LIST},
-{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,             STR_NULL},
-{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,             STR_NULL},
-{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,             STR_NULL},
-{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,             STR_NULL},
-{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,             STR_NULL},
-{      WWT_EMPTY,   RESIZE_NONE,    14,     0,   319,    76,    87, 0x0,             STR_NULL},
-{      WWT_PANEL,   RESIZE_RTB,     14,     0,   319,    76,    87, 0x0,             STR_NULL},
-{  WWT_RESIZEBOX,   RESIZE_LRTB,    14,   320,   331,    76,    87, 0x0,             STR_RESIZE_BUTTON},
-{   WIDGETS_END},
+	{   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_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_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_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},
 };
 
 static const WindowDesc _other_orders_desc = {
--- a/src/os/macosx/splash.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/os/macosx/splash.cpp	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/os2.cpp	Sat Jul 14 19:42: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/ottdres.rc	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/ottdres.rc	Sat Jul 14 19:42:58 2007 +0000
@@ -65,8 +65,8 @@
 //
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 0,5,0,0
- PRODUCTVERSION 0,5,0,0
+ FILEVERSION 0,5,99,0
+ PRODUCTVERSION 0,5,99,0
  FILEFLAGSMASK 0x3fL
 #ifdef _DEBUG
  FILEFLAGS 0x1L
@@ -91,7 +91,7 @@
             VALUE "OriginalFilename", "openttd.exe\0"
             VALUE "PrivateBuild", "\0"
             VALUE "ProductName", "OpenTTD\0"
-            VALUE "ProductVersion", "0.0.0.0\0"
+            VALUE "ProductVersion", "Development Version\0"
             VALUE "SpecialBuild", "-\0"
         END
     END
--- a/src/pathfind.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/pathfind.cpp	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/player.h	Sat Jul 14 19:42: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;
 };
 
 struct AiBuildRec {
@@ -116,7 +116,7 @@
 
 	CargoID cargo;
 	byte tbt;    ///< train/bus/truck 0/1/2 AI_TRAIN/AI_BUS/AI_TRUCK
-	int new_cost;
+	Money new_cost;
 
 	byte action;
 
@@ -149,6 +149,12 @@
 };
 
 
+/* The "steps" in loan size, in British Pounds! */
+enum {
+	LOAN_INTERVAL        = 10000,
+	LOAN_INTERVAL_OLD_AI = 50000,
+};
+
 typedef uint32 PlayerFace;
 
 struct Player {
@@ -160,9 +166,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];
@@ -185,14 +190,14 @@
 	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;
 	PlayerAI ai;
 	PlayerAiNew ainew;
 
-	int64 yearly_expenses[3][13];
+	Money yearly_expenses[3][13];
 	PlayerEconomyEntry cur_economy;
 	PlayerEconomyEntry old_economy[24];
 	EngineRenewList engine_renew_list; ///< Defined later
@@ -207,9 +212,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++)
 
@@ -331,7 +335,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.
@@ -340,7 +344,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/player_gui.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -17,6 +17,7 @@
 #include "economy.h"
 #include "network/network.h"
 #include "variables.h"
+#include "roadveh.h"
 #include "train.h"
 #include "aircraft.h"
 #include "date.h"
@@ -30,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
@@ -59,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);
@@ -79,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);
 }
 
@@ -155,15 +156,18 @@
 		PlayerID player = (PlayerID)w->window_number;
 		const Player *p = GetPlayer(player);
 
+		/* Borrow/repay buttons only exist for local player */
 		if (player == _local_player) {
-			/* borrow/repay buttons only exist for local player */
+			/* Borrow button only shows when there is any more money to loan */
+			SetWindowWidgetDisabledState(w, 6, p->current_loan == _economy.max_loan);
+
+			/* Repay button only shows when there is any more money to repay */
 			SetWindowWidgetDisabledState(w, 7, p->current_loan == 0);
 		}
 
-		SetDParam(0, p->name_1);
-		SetDParam(1, p->name_2);
-		SetDParam(2, GetPlayerNameString(player, 3));
-		SetDParam(4, 10000);
+		SetDParam(0, p->index);
+		SetDParam(1, p->index);
+		SetDParam(2, LOAN_INTERVAL);
 		DrawWindowWidgets(w);
 
 		DrawPlayerEconomyStats(p, (byte)WP(w, def_d).data_1);
@@ -324,7 +328,7 @@
 	switch (e->event) {
 		case WE_CREATE:
 			LowerWindowWidget(w, WP(w, livery_d).livery_class + 2);
-			if (!HASBIT(_loaded_newgrf_features, GRFLOADED_2CC)) {
+			if (!_loaded_newgrf_features.has_2CC) {
 				HideWindowWidget(w, 11);
 				HideWindowWidget(w, 12);
 			}
@@ -366,7 +370,7 @@
 					DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOR(p->livery[scheme].colour1), 152, y);
 					DrawString(165, y, STR_00D1_DARK_BLUE + p->livery[scheme].colour1, sel ? 0xC : 2);
 
-					if (HASBIT(_loaded_newgrf_features, GRFLOADED_2CC)) {
+					if (_loaded_newgrf_features.has_2CC) {
 						DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOR(p->livery[scheme].colour2), 277, y);
 						DrawString(290, y, STR_00D1_DARK_BLUE + p->livery[scheme].colour2, sel ? 0xC : 2);
 					}
@@ -649,7 +653,7 @@
 		if (v->owner == player) {
 			switch (v->type) {
 				case VEH_TRAIN:    if (IsFrontEngine(v)) train++; break;
-				case VEH_ROAD:     road++; break;
+				case VEH_ROAD:     if (IsRoadVehFront(v)) road++; break;
 				case VEH_AIRCRAFT: if (IsNormalAircraft(v)) air++; break;
 				case VEH_SHIP:     ship++; break;
 				default: break;
@@ -703,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;
 		}
@@ -752,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);
 
@@ -769,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);
@@ -794,7 +795,7 @@
 				}
 
 				case PCW_WIDGET_COLOR_SCHEME: {
-					Window *wf = AllocateWindowDescFront(HASBIT(_loaded_newgrf_features, GRFLOADED_2CC) ? &_select_player_livery_2cc_desc : &_select_player_livery_desc, w->window_number);
+					Window *wf = AllocateWindowDescFront(_loaded_newgrf_features.has_2CC ? &_select_player_livery_2cc_desc : &_select_player_livery_desc, w->window_number);
 					if (wf != NULL) {
 						wf->caption_color = wf->window_number;
 						WP(wf, livery_d).livery_class = LC_OTHER;
@@ -807,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;
 				}
 
@@ -934,15 +935,14 @@
 	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, STR_COMPANY_NAME);
+		SetDParam(1, 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;
 	}
@@ -1023,16 +1023,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/players.cpp	Sat Jul 14 19:42: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,50 +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<<7|1<<8|1<<9|1<<10, _yearly_expenses_type)) {
-		p->cur_economy.income -= cost;
-	} else if (HASBIT(1<<2|1<<3|1<<4|1<<5|1<<6|1<<11, _yearly_expenses_type)) {
-		p->cur_economy.expenses -= cost;
+	if (HASBIT(1 << EXPENSES_TRAIN_INC    |
+	           1 << EXPENSES_ROADVEH_INC  |
+	           1 << EXPENSES_AIRCRAFT_INC |
+	           1 << EXPENSES_SHIP_INC, _yearly_expenses_type)) {
+		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)) {
+		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)
@@ -242,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);
@@ -410,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;
 			}
@@ -465,7 +469,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->ai.state = 5; // AIS_WANT_NEW_ROUTE
@@ -551,16 +555,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()
@@ -668,7 +662,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;
@@ -715,7 +709,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) {
@@ -742,7 +736,7 @@
 				cost = RemoveEngineReplacementForPlayer(p, old_engine_type,id_g, flags);
 			}
 
-			if (IsLocalPlayer()) InvalidateAutoreplaceWindow(old_engine_type);
+			if (IsLocalPlayer()) InvalidateAutoreplaceWindow(old_engine_type, id_g);
 
 			return cost;
 		}
@@ -774,7 +768,7 @@
 		break;
 
 	}
-	return 0;
+	return CommandCost();
 }
 
 /** Control the players: add, delete, etc.
@@ -797,7 +791,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;
 
@@ -819,9 +813,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 */
@@ -836,12 +830,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;
 		}
 
@@ -895,7 +887,7 @@
 	} break;
 
 	case 1: /* Make a new AI player */
-		if (!(flags & DC_EXEC)) return 0;
+		if (!(flags & DC_EXEC)) return CommandCost();
 
 		DoStartupNewPlayer(true);
 		break;
@@ -905,7 +897,7 @@
 
 		if (!IsValidPlayer((PlayerID)p2)) return CMD_ERROR;
 
-		if (!(flags & DC_EXEC)) return 0;
+		if (!(flags & DC_EXEC)) return CommandCost();
 
 		p = GetPlayer((PlayerID)p2);
 
@@ -915,8 +907,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 */
@@ -943,7 +934,7 @@
 	default: return CMD_ERROR;
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 static const StringID _endgame_perf_titles[] = {
@@ -1000,10 +991,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);
@@ -1045,10 +1034,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);
@@ -1126,10 +1113,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),
@@ -1151,7 +1139,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),
@@ -1176,11 +1165,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),
@@ -1309,7 +1298,6 @@
 		Player *p = GetPlayer((PlayerID)index);
 		SaveLoad_PLYR(p);
 		_player_colors[index] = p->player_color;
-		UpdatePlayerMoney32(p);
 
 		/* This is needed so an AI is attached to a loaded AI */
 		if (p->is_ai && (!_networking || _network_server) && _ai.enabled)
--- a/src/rail.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/rail.h	Sat Jul 14 19:42:58 2007 +0000
@@ -290,8 +290,8 @@
 */
 static inline Track TrackBitsToTrack(TrackBits tracks)
 {
-	assert(tracks == INVALID_TRACK_BIT || (tracks != TRACK_BIT_NONE && KILL_FIRST_BIT(tracks) == 0));
-	return tracks != INVALID_TRACK_BIT ? (Track)FIND_FIRST_BIT(tracks) : INVALID_TRACK;
+	assert(tracks == INVALID_TRACK_BIT || (tracks != TRACK_BIT_NONE && KILL_FIRST_BIT(tracks & TRACK_BIT_MASK) == 0));
+	return tracks != INVALID_TRACK_BIT ? (Track)FIND_FIRST_BIT(tracks & TRACK_BIT_MASK) : INVALID_TRACK;
 }
 
 /**
--- a/src/rail_cmd.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/rail_cmd.cpp	Sat Jul 14 19:42: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) {
@@ -206,20 +206,17 @@
 		}
 
 		/* no special foundation */
-		if ((~_valid_tileh_slopes[0][tileh] & rail_bits) == 0)
-			return 0;
+		if ((~_valid_tileh_slopes[0][tileh] & rail_bits) == 0) {
+			return CommandCost();
+		} else if (!_patches.build_on_slopes || _is_old_ai_player) {
+			return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
+		}
 
 		if ((~_valid_tileh_slopes[1][tileh] & rail_bits) == 0 || ( // whole tile is leveled up
 					(rail_bits == TRACK_BIT_X || rail_bits == TRACK_BIT_Y) &&
 					(tileh == SLOPE_W || tileh == SLOPE_S || tileh == SLOPE_E || tileh == SLOPE_N)
 				)) { // partly up
-			if (existing != 0) {
-				return 0;
-			} else if (!_patches.build_on_slopes || _is_old_ai_player) {
-				return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
-			} else {
-				return _price.terraform;
-			}
+			return CommandCost((existing != 0) ? 0 : _price.terraform);
 		}
 	}
 	return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
@@ -234,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;
@@ -266,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) {
@@ -333,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;
@@ -349,7 +346,7 @@
 		YapfNotifyTrackLayoutChange(tile, track);
 	}
 
-	return cost + _price.build_rail;
+	return cost.AddCost(_price.build_rail);
 }
 
 /** Remove a single piece of track
@@ -358,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;
@@ -400,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;
@@ -447,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);
@@ -495,7 +492,7 @@
 			return CMD_ERROR;
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Build a stretch of railroad tracks.
@@ -507,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);
@@ -534,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;
@@ -545,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.
@@ -559,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));
 }
@@ -575,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));
 }
@@ -589,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);
@@ -621,9 +618,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);
 
@@ -641,7 +637,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,
@@ -656,12 +652,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;
@@ -690,14 +686,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();
 		}
 	}
 
@@ -742,6 +738,64 @@
 	return cost;
 }
 
+static bool CheckSignalAutoFill(TileIndex &tile, Trackdir &trackdir, int &signal_ctr, bool remove)
+{
+	tile = AddTileIndexDiffCWrap(tile, _trackdelta[trackdir]);
+	if (tile == INVALID_TILE) return false;
+
+	/* Check for track bits on the new tile */
+	uint32 ts = GetTileTrackStatus(tile, TRANSPORT_RAIL, 0);
+	TrackdirBits trackdirbits = (TrackdirBits)(ts & TRACKDIR_BIT_MASK);
+
+	if (TracksOverlap(TrackdirBitsToTrackBits(trackdirbits))) return false;
+	trackdirbits &= TrackdirReachesTrackdirs(trackdir);
+
+	/* No track bits, must stop */
+	if (trackdirbits == TRACKDIR_BIT_NONE) return false;
+
+	/* Get the first track dir */
+	trackdir = RemoveFirstTrackdir(&trackdirbits);
+
+	/* Any left? It's a junction so we stop */
+	if (trackdirbits != TRACKDIR_BIT_NONE) return false;
+
+	switch (GetTileType(tile)) {
+		case MP_RAILWAY:
+			if (IsRailDepot(tile)) return false;
+			if (!remove && HasSignalOnTrack(tile, TrackdirToTrack(trackdir))) return false;
+			signal_ctr++;
+			if (IsDiagonalTrackdir(trackdir)) {
+				signal_ctr++;
+				/* Ensure signal_ctr even so X and Y pieces get signals */
+				CLRBIT(signal_ctr, 0);
+			}
+			return true;
+
+		case MP_STREET:
+			if (!IsLevelCrossing(tile)) return false;
+			signal_ctr += 2;
+			return true;
+
+		case MP_TUNNELBRIDGE: {
+			TileIndex orig_tile = tile;
+			/* Skip to end of tunnel or bridge */
+			if (IsBridge(tile)) {
+				if (GetBridgeTransportType(tile) != TRANSPORT_RAIL) return false;
+				if (GetBridgeRampDirection(tile) != TrackdirToExitdir(trackdir)) return false;
+				tile = GetOtherBridgeEnd(tile);
+			} else {
+				if (GetTunnelTransportType(tile) != TRANSPORT_RAIL) return false;
+				if (GetTunnelDirection(tile) != TrackdirToExitdir(trackdir)) return false;
+				tile = GetOtherTunnelEnd(tile);
+			}
+			signal_ctr += 2 + DistanceMax(orig_tile, tile) * 2;
+			return true;
+		}
+
+		default: return false;
+	}
+}
+
 /** Build many signals by dragging; AutoSignals
  * @param tile start tile of drag
  * @param flags operation to perform
@@ -751,19 +805,23 @@
  * - p2 = (bit  3)    - 1 = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
  * - p2 = (bit  4)    - 0 = signals, 1 = semaphores
  * - p2 = (bit  5)    - 0 = build, 1 = remove signals
+ * - p2 = (bit  6)    - 0 = selected stretch, 1 = auto fill
  * - 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;
+	TileIndex start_tile = tile;
 
 	Track track = (Track)GB(p2, 0, 3);
 	bool mode = HASBIT(p2, 3);
 	bool semaphores = HASBIT(p2, 4);
 	bool remove = HASBIT(p2, 5);
+	bool autofill = HASBIT(p2, 6);
 	Trackdir trackdir = TrackToTrackdir(track);
 	byte signal_density = GB(p2, 24, 8);
 
@@ -777,11 +835,15 @@
 
 	/* for vertical/horizontal tracks, double the given signals density
 	 * since the original amount will be too dense (shorter tracks) */
-	if (!IsDiagonalTrack(track)) signal_density *= 2;
+	signal_density *= 2;
 
 	if (CmdFailed(ValidateAutoDrag(&trackdir, tile, end_tile))) return CMD_ERROR;
 
 	track = TrackdirToTrack(trackdir); /* trackdir might have changed, keep track in sync */
+	Trackdir start_trackdir = trackdir;
+
+	/* Autofill must start on a valid track to be able to avoid loops */
+	if (autofill && !HasTrack(tile, track)) return CMD_ERROR;
 
 	/* copy the signal-style of the first rail-piece if existing */
 	if (HasSignals(tile)) {
@@ -794,6 +856,10 @@
 		signals = SignalOnTrack(track);
 	}
 
+	byte signal_dir = 0;
+	if (signals & SignalAlongTrackdir(trackdir))   SETBIT(signal_dir, 0);
+	if (signals & SignalAgainstTrackdir(trackdir)) SETBIT(signal_dir, 1);
+
 	/* signal_ctr         - amount of tiles already processed
 	 * signals_density    - patch setting to put signal on every Nth tile (double space on |, -- tracks)
 	 **********
@@ -802,29 +868,46 @@
 	 * 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) {
+		if ((remove && autofill) || signal_ctr % signal_density == 0) {
 			uint32 p1 = GB(TrackdirToTrack(trackdir), 0, 3);
 			SB(p1, 3, 1, mode);
 			SB(p1, 4, 1, semaphores);
+
+			/* Pick the correct orientation for the track direction */
+			signals = 0;
+			if (HASBIT(signal_dir, 0)) signals |= SignalAlongTrackdir(trackdir);
+			if (HASBIT(signal_dir, 1)) signals |= SignalAgainstTrackdir(trackdir);
+
 			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);
 			}
 		}
 
-		if (tile == end_tile) break;
+		if (autofill) {
+			if (!CheckSignalAutoFill(tile, trackdir, signal_ctr, remove)) break;
 
-		tile += ToTileIndexDiff(_trackdelta[trackdir]);
-		signal_ctr++;
+			/* Prevent possible loops */
+			if (tile == start_tile && trackdir == start_trackdir) break;
+		} else {
+			if (tile == end_tile) break;
 
-		/* toggle railbit for the non-diagonal tracks (|, -- tracks) */
-		if (!IsDiagonalTrackdir(trackdir)) ToggleBitT(trackdir, 0);
+			tile += ToTileIndexDiff(_trackdelta[trackdir]);
+			signal_ctr++;
+
+			/* toggle railbit for the non-diagonal tracks (|, -- tracks) */
+			if (IsDiagonalTrackdir(trackdir)) {
+				signal_ctr++;
+			} else {
+				ToggleBitT(trackdir, 0);
+			}
+		}
 	}
 
 	return error ? CMD_ERROR : total_cost;
@@ -840,10 +923,11 @@
  * - p2 = (bit  3)    - 1 = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
  * - p2 = (bit  4)    - 0 = signals, 1 = semaphores
  * - p2 = (bit  5)    - 0 = build, 1 = remove signals
+ * - p2 = (bit  6)    - 0 = selected stretch, 1 = auto fill
  * - 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);
 }
@@ -857,7 +941,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);
 
@@ -890,7 +974,7 @@
 		MarkTileDirtyByTile(tile);
 	}
 
-	return _price.remove_signals;
+	return CommandCost(_price.remove_signals);
 }
 
 /** Remove signals on a stretch of track.
@@ -903,15 +987,16 @@
  * - p2 = (bit  3)    - 1 = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
  * - p2 = (bit  4)    - 0 = signals, 1 = semaphores
  * - p2 = (bit  5)    - 0 = build, 1 = remove signals
+ * - p2 = (bit  6)    - 0 = selected stretch, 1 = auto fill
  * - 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.
@@ -923,7 +1008,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;
 
@@ -960,12 +1045,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.
@@ -974,9 +1059,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;
@@ -995,8 +1081,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) {
@@ -1013,23 +1097,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;
@@ -1045,13 +1129,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))
@@ -1064,8 +1148,6 @@
 		}
 	}
 
-	cost = 0;
-
 	switch (GetRailTileType(tile)) {
 		case RAIL_TILE_SIGNALS:
 		case RAIL_TILE_NORMAL: {
@@ -1074,7 +1156,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;
 		}
@@ -1295,9 +1377,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)
@@ -1346,6 +1425,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 */
@@ -1648,12 +1729,6 @@
 	}
 }
 
-static const DiagDirection _dir_from_track[14] = {
-	DIAGDIR_NE, DIAGDIR_SE, DIAGDIR_NE, DIAGDIR_SE, DIAGDIR_SW, DIAGDIR_SE, DIAGDIR_NE, DIAGDIR_NE,
-	DIAGDIR_SW, DIAGDIR_NW, DIAGDIR_NW, DIAGDIR_SW, DIAGDIR_NW, DIAGDIR_NE,
-};
-
-
 static void ChangeSignalStates(SetSignalsData *ssd)
 {
 	int i;
@@ -1699,7 +1774,7 @@
 		if (IsPresignalExit(tile, track)) {
 			if (ssd->cur_stack != NUM_SSD_STACK) {
 				ssd->next_tile[ssd->cur_stack] = tile;
-				ssd->next_dir[ssd->cur_stack] = _dir_from_track[ssd->bit[i]];
+				ssd->next_dir[ssd->cur_stack] = TrackdirToExitdir(ssd->bit[i]);
 				ssd->cur_stack++;
 			} else {
 				DEBUG(misc, 0, "NUM_SSD_STACK too small"); /// @todo WTF is this???
--- a/src/rail_gui.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/rail_gui.cpp	Sat Jul 14 19:42: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;
@@ -165,32 +171,27 @@
 
 static void GenericPlaceSignals(TileIndex tile)
 {
-	byte trackstat;
-	uint i;
-
-	trackstat = (byte)GetTileTrackStatus(tile, TRANSPORT_RAIL, 0);
+	TrackBits trackbits = (TrackBits)GB(GetTileTrackStatus(tile, TRANSPORT_RAIL, 0), 0, 6);
 
-	if (trackstat & TRACK_BIT_VERT) // N-S direction
-		trackstat = (_tile_fract_coords.x <= _tile_fract_coords.y) ? TRACK_BIT_RIGHT : TRACK_BIT_LEFT;
-
-	if (trackstat & TRACK_BIT_HORZ) // E-W direction
-		trackstat = (_tile_fract_coords.x + _tile_fract_coords.y <= 15) ? TRACK_BIT_UPPER : TRACK_BIT_LOWER;
-
-	// Lookup the bit index
-	i = 0;
-	if (trackstat != 0) {
-		for (; !(trackstat & 1); trackstat >>= 1) i++;
+	if (trackbits & TRACK_BIT_VERT) { // N-S direction
+		trackbits = (_tile_fract_coords.x <= _tile_fract_coords.y) ? TRACK_BIT_RIGHT : TRACK_BIT_LEFT;
 	}
 
+	if (trackbits & TRACK_BIT_HORZ) { // E-W direction
+		trackbits = (_tile_fract_coords.x + _tile_fract_coords.y <= 15) ? TRACK_BIT_UPPER : TRACK_BIT_LOWER;
+	}
+
+	Track track = FindFirstTrack(trackbits);
+
 	if (!_remove_button_clicked) {
-		uint32 p1 = GB(i, 0, 3);
+		uint32 p1 = track;
 		SB(p1, 3, 1, _ctrl_pressed);
 		SB(p1, 4, 1, _cur_year < _patches.semaphore_build_before);
 
 		DoCommandP(tile, p1, 0, CcPlaySound1E,
 			CMD_BUILD_SIGNALS | CMD_AUTO | CMD_MSG(STR_1010_CAN_T_BUILD_SIGNALS_HERE));
 	} else {
-		DoCommandP(tile, i, 0, CcPlaySound1E,
+		DoCommandP(tile, track, 0, CcPlaySound1E,
 			CMD_REMOVE_SIGNALS | CMD_AUTO | CMD_MSG(STR_1013_CAN_T_REMOVE_SIGNALS_FROM));
 	}
 }
@@ -372,8 +373,10 @@
 		return;
 	}
 
-	SB(p2,  3, 1, _ctrl_pressed);
+	/* XXX Steal ctrl for autosignal function, until we get some GUI */
+	SB(p2,  3, 1, 0);
 	SB(p2,  4, 1, _cur_year < _patches.semaphore_build_before);
+	SB(p2,  6, 1, _ctrl_pressed);
 	SB(p2, 24, 8, _patches.drag_signals_density);
 
 	/* _patches.drag_signals_density is given as a parameter such that each user
@@ -777,7 +780,7 @@
 		DrawStringCentered(74, 101 + y_offset, STR_3004_PLATFORM_LENGTH, 0);
 		DrawStringCentered(74, 141 + y_offset, STR_3066_COVERAGE_AREA_HIGHLIGHT, 0);
 
-		DrawStationCoverageAreaText(2, 166 + y_offset, (uint)-1, rad);
+		DrawStationCoverageAreaText(2, 166 + y_offset, SCT_ALL, rad);
 
 		if (newstations) {
 			uint16 i;
@@ -1230,4 +1233,56 @@
 	MarkWholeScreenDirty();
 }
 
+void SetDefaultRailGui()
+{
+	if (_local_player == PLAYER_SPECTATOR || !IsValidPlayer(_local_player)) 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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/road_cmd.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -13,6 +13,7 @@
 #include "table/sprites.h"
 #include "table/strings.h"
 #include "functions.h"
+#include "window.h"
 #include "map.h"
 #include "landscape.h"
 #include "tile.h"
@@ -99,14 +100,18 @@
  * @param flags operation to perform
  * @param p1 bit 0..3 road pieces to remove (RoadBits)
  *           bit 4..5 road type
+ *           bit    6 ignore the fact that the tram track has not been removed
+ *                    yet when removing the road bits when not actually doing
+ *                    it. Makes it possible to test whether the road bits can
+ *                    be removed from a level crossing without physically
+ *                    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};
 
-	Town *t;
 	/* true if the roadpiece was always removeable,
 	 * false if it was a center piece. Affects town ratings drop */
 	bool edge_road;
@@ -116,33 +121,25 @@
 	RoadType rt = (RoadType)GB(p1, 4, 2);
 	if (!IsValidRoadType(rt)) return CMD_ERROR;
 
-	Owner owner;
+	Town *t = NULL;
 	switch (GetTileType(tile)) {
 		case MP_STREET:
-			owner = GetRoadOwner(tile, rt);
+			if (_game_mode != GM_EDITOR && GetRoadOwner(tile, rt) == OWNER_TOWN) t = GetTownByTile(tile);
 			break;
 
 		case MP_STATION:
 			if (!IsDriveThroughStopTile(tile)) return CMD_ERROR;
-			owner = GetTileOwner(tile);
 			break;
 
 		case MP_TUNNELBRIDGE:
 			if ((IsTunnel(tile) && GetTunnelTransportType(tile) != TRANSPORT_ROAD) ||
 					(IsBridge(tile) && GetBridgeTransportType(tile) != TRANSPORT_ROAD)) return CMD_ERROR;
-			owner = GetTileOwner(tile);
 			break;
 
 		default:
 			return CMD_ERROR;
 	}
 
-	if (owner == OWNER_TOWN && _game_mode != GM_EDITOR) {
-		t = GetTownByTile(tile);
-	} else {
-		t = NULL;
-	}
-
 	RoadBits pieces = Extract<RoadBits, 0>(p1);
 	RoadTypes rts = GetRoadTypes(tile);
 	/* The tile doesn't have the given road type */
@@ -160,11 +157,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));
@@ -179,13 +176,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)) {
@@ -226,7 +223,7 @@
 					MarkTileDirtyByTile(tile);
 				}
 			}
-			return CountRoadBits(c) * _price.remove_road;
+			return CommandCost(CountRoadBits(c) * _price.remove_road);
 		}
 
 		case ROAD_TILE_CROSSING: {
@@ -236,7 +233,7 @@
 
 			/* Don't allow road to be removed from the crossing when there is tram;
 			 * we can't draw the crossing without trambits ;) */
-			if (rt == ROADTYPE_ROAD && HASBIT(GetRoadTypes(tile), ROADTYPE_TRAM)) return CMD_ERROR;
+			if (rt == ROADTYPE_ROAD && HASBIT(GetRoadTypes(tile), ROADTYPE_TRAM) && ((flags & DC_EXEC) || !HASBIT(p1, 6))) return CMD_ERROR;
 
 			if (flags & DC_EXEC) {
 				if (rt == ROADTYPE_ROAD) {
@@ -252,7 +249,7 @@
 				MarkTileDirtyByTile(tile);
 				YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetTrackBits(tile)));
 			}
-			return _price.remove_road * 2;
+			return CommandCost(_price.remove_road * 2);
 		}
 
 		default:
@@ -295,7 +292,7 @@
 };
 
 
-static uint32 CheckRoadSlope(Slope tileh, RoadBits* pieces, RoadBits existing)
+static CommandCost CheckRoadSlope(Slope tileh, RoadBits* pieces, RoadBits existing)
 {
 	RoadBits road_bits;
 
@@ -314,12 +311,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 */
@@ -340,10 +337,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;
@@ -390,7 +387,7 @@
 								SetDisallowedRoadDirections(tile, GetDisallowedRoadDirections(tile) ^ toggle_drd);
 								MarkTileDirtyByTile(tile);
 							}
-							return 0;
+							return CommandCost();
 						}
 						return_cmd_error(STR_1007_ALREADY_BUILT);
 					}
@@ -445,7 +442,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:
@@ -467,7 +464,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) {
@@ -475,10 +472,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 || _is_old_ai_player))) {
+		if (CmdFailed(ret) || (ret.GetCost() != 0 && (!_patches.build_on_slopes || _is_old_ai_player))) {
 			return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
 		}
-		cost += ret;
+		cost.AddCost(ret);
 	}
 
 	if (IsTileType(tile, MP_STREET)) {
@@ -486,10 +483,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) {
@@ -499,6 +496,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;
@@ -547,7 +545,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;
@@ -566,7 +564,7 @@
 		YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetCrossingRailBits(tile)));
 	}
 
-	return _price.build_rail / 2;
+	return CommandCost(_price.build_rail / 2);
 }
 
 
@@ -581,10 +579,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;
@@ -617,7 +615,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 (;;) {
@@ -635,11 +632,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);
 			}
 		}
 
@@ -661,10 +658,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);
 
@@ -686,7 +683,6 @@
 		p2 ^= IS_INT_INSIDE(p2 & 3, 1, 3) ? 3 : 0;
 	}
 
-	cost = 0;
 	tile = start_tile;
 	/* Start tile is the small number. */
 	for (;;) {
@@ -698,7 +694,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;
@@ -706,7 +702,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.
@@ -719,9 +715,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;
 
@@ -756,10 +752,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;
@@ -768,10 +764,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: {
@@ -785,12 +781,12 @@
 			    !(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;
@@ -800,12 +796,20 @@
 #undef M
 
 		case ROAD_TILE_CROSSING: {
-			int32 ret;
+			RoadTypes rts = GetRoadTypes(tile);
+			CommandCost ret;
 
 			if (flags & DC_AUTO) return_cmd_error(STR_1801_MUST_REMOVE_ROAD_FIRST);
 
-			ret = DoCommand(tile, GetCrossingRoadBits(tile), 0, flags, CMD_REMOVE_ROAD);
-			if (CmdFailed(ret)) return CMD_ERROR;
+			/* Must iterate over the roadtypes in a reverse manner because
+			 * tram tracks must be removed before the road bits. */
+			for (RoadType rt = ROADTYPE_HWAY; rt >= ROADTYPE_ROAD; rt--) {
+				if (HASBIT(rts, rt)) {
+					CommandCost tmp_ret = DoCommand(tile, 1 << 6 | rt << 4 | GetCrossingRoadBits(tile), 0, flags, CMD_REMOVE_ROAD);
+					if (CmdFailed(tmp_ret)) return tmp_ret;
+					ret.AddCost(tmp_ret);
+				}
+			}
 
 			if (flags & DC_EXEC) {
 				DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
@@ -980,13 +984,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 */
@@ -1000,6 +997,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);
@@ -1346,7 +1350,13 @@
 			if (v->type == VEH_ROAD &&
 					v->u.road.frame == 11 &&
 					_roadveh_enter_depot_dir[GetRoadDepotDirection(tile)] == v->u.road.state) {
-				VehicleEnterDepot(v);
+				v->u.road.state = RVSB_IN_DEPOT;
+				v->vehstatus |= VS_HIDDEN;
+				v->direction = ReverseDir(v->direction);
+				if (v->next == NULL) VehicleEnterDepot(v);
+				v->tile = tile;
+
+				InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
 				return VETSB_ENTERED_WORMHOLE;
 			}
 			break;
--- a/src/road_gui.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/road_gui.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -213,19 +213,19 @@
 
 static void BuildRoadClick_Depot(Window *w)
 {
-	if (_game_mode == GM_EDITOR) return;
+	if (_game_mode == GM_EDITOR || !CanBuildVehicleInfrastructure(VEH_ROAD)) return;
 	if (HandlePlacePushButton(w, RTW_DEPOT, SPR_CURSOR_ROAD_DEPOT, 1, PlaceRoad_Depot)) ShowRoadDepotPicker();
 }
 
 static void BuildRoadClick_BusStation(Window *w)
 {
-	if (_game_mode == GM_EDITOR) return;
+	if (_game_mode == GM_EDITOR || !CanBuildVehicleInfrastructure(VEH_ROAD)) return;
 	if (HandlePlacePushButton(w, RTW_BUS_STATION, SPR_CURSOR_BUS_STATION, 1, PlaceRoad_BusStation)) ShowRVStationPicker(RoadStop::BUS);
 }
 
 static void BuildRoadClick_TruckStation(Window *w)
 {
-	if (_game_mode == GM_EDITOR) return;
+	if (_game_mode == GM_EDITOR || !CanBuildVehicleInfrastructure(VEH_ROAD)) return;
 	if (HandlePlacePushButton(w, RTW_TRUCK_STATION, SPR_CURSOR_TRUCK_STATION, 1, PlaceRoad_TruckStation)) ShowRVStationPicker(RoadStop::TRUCK);
 }
 
@@ -270,6 +270,7 @@
 		if (IsWindowWidgetLowered(w, RTW_ROAD_X) || IsWindowWidgetLowered(w, RTW_ROAD_Y) || IsWindowWidgetLowered(w, RTW_BUS_STATION) || IsWindowWidgetLowered(w, RTW_TRUCK_STATION)) {
 			EnableWindowWidget(w, RTW_REMOVE);
 		}
+		SetWindowWidgetsDisabledState(w, !CanBuildVehicleInfrastructure(VEH_ROAD), 6, 7, 8, WIDGET_LIST_END);
 		DrawWindowWidgets(w);
 		break;
 
@@ -580,7 +581,7 @@
 		StationPickerDrawSprite(171, 85, RAILTYPE_BEGIN, _cur_roadtype, image + 1);
 
 		DrawStationCoverageAreaText(2, 146,
-			((w->window_class == WC_BUS_STATION) ? (1 << CT_PASSENGERS) : ~(1 << CT_PASSENGERS)),
+			(w->window_class == WC_BUS_STATION) ? SCT_PASSENGERS_ONLY : SCT_NON_PASSENGERS_ONLY,
 			3);
 
 	} break;
--- a/src/roadveh.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/roadveh.h	Sat Jul 14 19:42:58 2007 +0000
@@ -8,6 +8,42 @@
 #include "vehicle.h"
 
 
+enum RoadVehicleSubType {
+	RVST_FRONT,
+	RVST_ARTIC_PART,
+};
+
+static inline bool IsRoadVehFront(const Vehicle *v)
+{
+	assert(v->type == VEH_ROAD);
+	return v->subtype == RVST_FRONT;
+}
+
+static inline void SetRoadVehFront(Vehicle *v)
+{
+	assert(v->type == VEH_ROAD);
+	v->subtype = RVST_FRONT;
+}
+
+static inline bool IsRoadVehArticPart(const Vehicle *v)
+{
+	assert(v->type == VEH_ROAD);
+	return v->subtype == RVST_ARTIC_PART;
+}
+
+static inline void SetRoadVehArticPart(Vehicle *v)
+{
+	assert(v->type == VEH_ROAD);
+	v->subtype = RVST_ARTIC_PART;
+}
+
+static inline bool RoadVehHasArticPart(const Vehicle *v)
+{
+	assert(v->type == VEH_ROAD);
+	return v->next != NULL && IsRoadVehArticPart(v->next);
+}
+
+
 static inline bool IsRoadVehInDepot(const Vehicle* v)
 {
 	assert(v->type == VEH_ROAD);
@@ -43,7 +79,14 @@
 	void UpdateDeltaXY(Direction direction);
 	ExpensesType GetExpenseType(bool income) const { return income ? EXPENSES_ROADVEH_INC : EXPENSES_ROADVEH_RUN; }
 	WindowClass GetVehicleListWindowClass() const { return WC_ROADVEH_LIST; }
-	bool IsPrimaryVehicle() const { return true; }
+	bool IsPrimaryVehicle() const { return IsRoadVehFront(this); }
+	bool HasFront() const { return true; }
+	int GetImage(Direction direction) const;
+	void Tick();
 };
 
+byte GetRoadVehLength(const Vehicle *v);
+
+void RoadVehUpdateCache(Vehicle *v);
+
 #endif /* ROADVEH_H */
--- a/src/roadveh_cmd.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/roadveh_cmd.cpp	Sat Jul 14 19:42: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"
@@ -27,6 +28,7 @@
 #include "tunnel_map.h"
 #include "bridge_map.h"
 #include "vehicle_gui.h"
+#include "articulated_vehicles.h"
 #include "newgrf_callbacks.h"
 #include "newgrf_engine.h"
 #include "newgrf_text.h"
@@ -83,19 +85,19 @@
 	TRACKDIR_X_NE, TRACKDIR_Y_SE, TRACKDIR_X_SW, TRACKDIR_Y_NW
 };
 
-int GetRoadVehImage(const Vehicle* v, Direction direction)
+int RoadVehicle::GetImage(Direction direction) const
 {
-	int img = v->spritenum;
+	int img = this->spritenum;
 	int image;
 
 	if (is_custom_sprite(img)) {
-		image = GetCustomVehicleSprite(v, direction);
+		image = GetCustomVehicleSprite(this, (Direction)(direction + 4 * IS_CUSTOM_SECONDHEAD_SPRITE(img)));
 		if (image != 0) return image;
-		img = orig_road_vehicle_info[v->engine_type - ROAD_ENGINES_INDEX].image_index;
+		img = orig_road_vehicle_info[this->engine_type - ROAD_ENGINES_INDEX].image_index;
 	}
 
 	image = direction + _roadveh_images[img];
-	if (v->cargo_count >= v->cargo_cap / 2) image += _roadveh_full_adder[img];
+	if (this->cargo.Count() >= this->cargo_cap / 2U) image += _roadveh_full_adder[img];
 	return image;
 }
 
@@ -115,9 +117,38 @@
 	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)
+{
+	byte length = 8;
+
+	uint16 veh_len = GetVehicleCallback(CBID_VEHICLE_LENGTH, 0, 0, v->engine_type, v);
+	if (veh_len != CALLBACK_FAILED) {
+		length -= clamp(veh_len, 0, 7);
+	}
+
+	return length;
+}
+
+void RoadVehUpdateCache(Vehicle *v)
+{
+	assert(v->type == VEH_ROAD);
+	assert(IsRoadVehFront(v));
+
+	for (Vehicle *u = v; u != NULL; u = u->next) {
+		/* Update the v->first cache. */
+		if (u->first == NULL) u->first = v;
+
+		/* Update the 'first engine' */
+		u->u.road.first_engine = (v == u) ? INVALID_ENGINE : v->engine_type;
+
+		/* Update the length of the vehicle. */
+		u->u.road.cached_veh_length = GetRoadVehLength(u);
+	}
 }
 
 /** Build a road vehicle.
@@ -126,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;
@@ -147,8 +178,17 @@
 
 	if (HASBIT(GetRoadTypes(tile), ROADTYPE_TRAM) != HASBIT(EngInfo(p1)->misc_flags, EF_ROAD_TRAM)) return_cmd_error(STR_DEPOT_WRONG_DEPOT_TYPE);
 
-	v = AllocateVehicle();
-	if (v == NULL) return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME);
+	uint num_vehicles = 1 + CountArticulatedParts(p1);
+
+	/* Allow for the front and up to 10 articulated parts. */
+	Vehicle *vl[11];
+	memset(&vl, 0, sizeof(vl));
+
+	if (!AllocateVehicles(vl, num_vehicles)) {
+		return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME);
+	}
+
+	v = vl[0];
 
 	/* find the first free roadveh id */
 	unit_num = HASBIT(p2, 0) ? 0 : GetFreeUnitNumber(VEH_ROAD);
@@ -162,7 +202,7 @@
 		const RoadVehicleInfo *rvi = RoadVehInfo(p1);
 
 		v->unitnumber = unit_num;
-		v->direction = INVALID_DIR;
+		v->direction = DiagDirToDir(GetRoadDepotDirection(tile));
 		v->owner = _current_player;
 
 		v->tile = tile;
@@ -180,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;
@@ -193,9 +233,6 @@
 		v->max_speed = rvi->max_speed;
 		v->engine_type = (byte)p1;
 
-		v->u.road.roadtype = HASBIT(EngInfo(v->engine_type)->misc_flags, EF_ROAD_TRAM) ? ROADTYPE_TRAM : ROADTYPE_ROAD;
-		v->u.road.compatible_roadtypes = RoadTypeToRoadTypes(v->u.road.roadtype);
-
 		e = GetEngine(p1);
 		v->reliability = e->reliability;
 		v->reliability_spd_dec = e->reliability_spd_dec;
@@ -212,24 +249,32 @@
 		v = new (v) RoadVehicle();
 		v->cur_image = 0xC15;
 		v->random_bits = VehicleRandomBits();
+		SetRoadVehFront(v);
+
+		v->u.road.roadtype = HASBIT(EngInfo(v->engine_type)->misc_flags, EF_ROAD_TRAM) ? ROADTYPE_TRAM : ROADTYPE_ROAD;
+		v->u.road.compatible_roadtypes = RoadTypeToRoadTypes(v->u.road.roadtype);
+		v->u.road.cached_veh_length = GetRoadVehLength(v);
 
 		v->vehicle_flags = 0;
 		if (e->flags & ENGINE_EXCLUSIVE_PREVIEW) SETBIT(v->vehicle_flags, VF_BUILT_AS_PROTOTYPE);
 
+		v->first = NULL;
 		v->cargo_cap = GetVehicleProperty(v, 0x0F, rvi->capacity);
 
+		AddArticulatedParts(vl, VEH_ROAD);
+
 		VehiclePositionChanged(v);
 
 		InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
 		RebuildVehicleLists();
 		InvalidateWindow(WC_COMPANY, v->owner);
 		if (IsLocalPlayer())
-			InvalidateAutoreplaceWindow(VEH_ROAD); // updates the replace Road window
+			InvalidateAutoreplaceWindow(VEH_ROAD, v->group_id); // updates the replace Road window
 
 		GetPlayer(_current_player)->num_engines[p1]++;
 	}
 
-	return cost;
+	return CommandCost(cost);
 }
 
 /** Start/Stop a road vehicle.
@@ -238,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;
@@ -268,7 +313,7 @@
 		InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 void ClearSlot(Vehicle *v)
@@ -285,13 +330,25 @@
 	DEBUG(ms, 3, "Clearing slot at 0x%X", rs->xy);
 }
 
+static bool CheckRoadVehInDepotStopped(const Vehicle *v)
+{
+	TileIndex tile = v->tile;
+
+	if (!IsTileDepotType(tile, TRANSPORT_ROAD) || !(v->vehstatus & VS_STOPPED)) return false;
+
+	for (; v != NULL; v = v->next) {
+		if (v->u.road.state != RVSB_IN_DEPOT || v->tile != tile) return false;
+	}
+	return true;
+}
+
 /** Sell a road vehicle.
  * @param tile unused
  * @param flags operation to perform
  * @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;
 
@@ -303,7 +360,7 @@
 
 	SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
 
-	if (!IsRoadVehInDepotStopped(v)) {
+	if (!CheckRoadVehInDepotStopped(v)) {
 		return_cmd_error(STR_9013_MUST_BE_STOPPED_INSIDE);
 	}
 
@@ -317,7 +374,7 @@
 		DeleteVehicle(v);
 	}
 
-	return -(int32)v->value;
+	return CommandCost(-v->value);
 }
 
 struct RoadFindDepotData {
@@ -359,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 {
@@ -391,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;
@@ -422,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
@@ -436,7 +493,7 @@
 			v->current_order.flags = 0;
 			InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 		}
-		return 0;
+		return CommandCost();
 	}
 
 	dep = FindClosestRoadDepot(v);
@@ -455,7 +512,7 @@
 		InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Turn a roadvehicle around.
@@ -464,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;
 
@@ -492,13 +549,13 @@
 
 	if (flags & DC_EXEC) v->u.road.reverse_ctr = 180;
 
-	return 0;
+	return CommandCost();
 }
 
 
 void RoadVehicle::MarkDirty()
 {
-	this->cur_image = GetRoadVehImage(this, this->direction);
+	this->cur_image = this->GetImage(this->direction);
 	MarkAllViewportsDirty(this->left_coord, this->top_coord, this->right_coord + 1, this->bottom_coord + 1);
 }
 
@@ -536,8 +593,12 @@
 	rs->FreeBay(HASBIT(v->u.road.state, RVS_USING_SECOND_BAY));
 }
 
-static void RoadVehDelete(Vehicle *v)
+static void DeleteLastRoadVeh(Vehicle *v)
 {
+	Vehicle *u = v;
+	for (; v->next != NULL; v = v->next) u = v;
+	u->next = NULL;
+
 	DeleteWindowById(WC_VEHICLE_VIEW, v->index);
 
 	RebuildVehicleLists();
@@ -574,13 +635,15 @@
 		DIRDIFF_45LEFT, DIRDIFF_SAME, DIRDIFF_SAME, DIRDIFF_45RIGHT
 	};
 
-	uint32 r = Random();
+	do {
+		uint32 r = Random();
 
-	v->direction = ChangeDir(v->direction, delta[r & 3]);
-	BeginVehicleMove(v);
-	v->UpdateDeltaXY(v->direction);
-	v->cur_image = GetRoadVehImage(v, v->direction);
-	SetRoadVehPosition(v, v->x_pos, v->y_pos);
+		v->direction = ChangeDir(v->direction, delta[r & 3]);
+		BeginVehicleMove(v);
+		v->UpdateDeltaXY(v->direction);
+		v->cur_image = v->GetImage(v->direction);
+		SetRoadVehPosition(v, v->x_pos, v->y_pos);
+	} while ((v = v->next) != NULL);
 }
 
 static void RoadVehIsCrashed(Vehicle *v)
@@ -590,8 +653,8 @@
 		CreateEffectVehicleRel(v, 4, 4, 8, EV_EXPLOSION_LARGE);
 	} else if (v->u.road.crashed_ctr <= 45) {
 		if ((v->tick_counter & 7) == 0) RoadVehSetRandomDirection(v);
-	} else if (v->u.road.crashed_ctr >= 2220) {
-		RoadVehDelete(v);
+	} else if (v->u.road.crashed_ctr >= 2220 && !(v->tick_counter & 0x1F)) {
+		DeleteLastRoadVeh(v);
 	}
 }
 
@@ -609,18 +672,22 @@
 
 static void RoadVehCrash(Vehicle *v)
 {
-	uint16 pass;
+	uint16 pass = 1;
 
 	v->u.road.crashed_ctr++;
-	v->vehstatus |= VS_CRASHED;
+
+	for (Vehicle *u = v; u != NULL; u = u->next) {
+		if (IsCargoInClass(u->cargo_type, CC_PASSENGERS)) pass += u->cargo.Count();
+
+		u->vehstatus |= VS_CRASHED;
+
+		MarkAllViewportsDirty(u->left_coord, u->top_coord, u->right_coord + 1, u->bottom_coord + 1);
+	}
+
 	ClearSlot(v);
 
 	InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 
-	pass = 1;
-	if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) pass += v->cargo_count;
-	v->cargo_count = 0;
-
 	SetDParam(0, pass);
 	AddNewsItem(
 		(pass == 1) ?
@@ -636,16 +703,18 @@
 
 static void RoadVehCheckTrainCrash(Vehicle *v)
 {
-	TileIndex tile;
-
-	if (v->u.road.state == RVSB_WORMHOLE) return;
+	for (Vehicle *u = v; u != NULL; u = u->next) {
+		if (u->u.road.state == RVSB_WORMHOLE) continue;
 
-	tile = v->tile;
+		TileIndex tile = u->tile;
 
-	if (!IsLevelCrossingTile(tile)) return;
+		if (!IsLevelCrossingTile(tile)) continue;
 
-	if (VehicleFromPos(tile, v, EnumCheckRoadVehCrashTrain) != NULL)
-		RoadVehCrash(v);
+		if (VehicleFromPosXY(v->x_pos, v->y_pos, u, EnumCheckRoadVehCrashTrain) != NULL) {
+			RoadVehCrash(v);
+			return;
+		}
+	}
 }
 
 static void HandleBrokenRoadVeh(Vehicle *v)
@@ -689,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;
@@ -798,11 +868,11 @@
 	short y_diff = v->y_pos - rvf->y;
 
 	return
-		rvf->veh != v &&
 		v->type == VEH_ROAD &&
 		!IsRoadVehInDepot(v) &&
 		myabs(v->z_pos - rvf->veh->z_pos) < 6 &&
 		v->direction == rvf->dir &&
+		GetFirstVehicleInChain(rvf->veh) != GetFirstVehicleInChain(v) &&
 		(dist_x[v->direction] >= 0 || (x_diff > dist_x[v->direction] && x_diff <= 0)) &&
 		(dist_x[v->direction] <= 0 || (x_diff < dist_x[v->direction] && x_diff >= 0)) &&
 		(dist_y[v->direction] >= 0 || (y_diff > dist_y[v->direction] && y_diff <= 0)) &&
@@ -821,7 +891,7 @@
 	rvf.y = y;
 	rvf.dir = dir;
 	rvf.veh = v;
-	u = (Vehicle*)VehicleFromPos(TileVirtXY(x, y), &rvf, EnumCheckRoadVehClose);
+	u = (Vehicle*)VehicleFromPosXY(x, y, &rvf, EnumCheckRoadVehClose);
 
 	/* This code protects a roadvehicle from being blocked for ever
 	 * If more than 1480 / 74 days a road vehicle is blocked, it will
@@ -972,6 +1042,9 @@
 	/* Trams can't overtake other trams */
 	if (v->u.road.roadtype == ROADTYPE_TRAM) return;
 
+	/* For now, articulated road vehicles can't overtake anything. */
+	if (RoadVehHasArticPart(v)) return;
+
 	if (v->direction != u->direction || !(v->direction & 1)) return;
 
 	/* Check if vehicle is in a road stop, depot, tunnel or bridge or not on a straight road */
@@ -1014,15 +1087,8 @@
 
 static int PickRandomBit(uint bits)
 {
-	uint num = 0;
-	uint b = bits;
 	uint i;
-
-	do {
-		if (b & 1) num++;
-	} while (b >>= 1);
-
-	num = RandomRange(num);
+	uint num = RandomRange(CountBitsSet(bits));
 
 	for (i = 0; !(bits & 1) || (int)--num >= 0; bits >>= 1, i++) {}
 	return i;
@@ -1267,7 +1333,95 @@
 	15, 15, 11, 11
 };
 
-static void RoadVehController(Vehicle *v)
+static bool RoadVehLeaveDepot(Vehicle *v, bool first)
+{
+	/* Don't leave if not all the wagons are in the depot. */
+	for (const Vehicle *u = v; u != NULL; u = u->next) {
+		if (u->u.road.state != RVSB_IN_DEPOT || u->tile != v->tile) return false;
+	}
+
+	DiagDirection dir = GetRoadDepotDirection(v->tile);
+	v->direction = DiagDirToDir(dir);
+
+	Trackdir tdir = _roadveh_depot_exit_trackdir[dir];
+	const RoadDriveEntry *rdp = _road_drive_data[v->u.road.roadtype][(_opt.road_side << RVS_DRIVE_SIDE) + tdir];
+
+	int x = TileX(v->tile) * TILE_SIZE + (rdp[RVC_DEPOT_START_FRAME].x & 0xF);
+	int y = TileY(v->tile) * TILE_SIZE + (rdp[RVC_DEPOT_START_FRAME].y & 0xF);
+
+	if (first) {
+		if (RoadVehFindCloseTo(v, x, y, v->direction) != NULL) return true;
+
+		VehicleServiceInDepot(v);
+
+		StartRoadVehSound(v);
+
+		/* Vehicle is about to leave a depot */
+		v->cur_speed = 0;
+	}
+
+	BeginVehicleMove(v);
+
+	v->vehstatus &= ~VS_HIDDEN;
+	v->u.road.state = tdir;
+	v->u.road.frame = RVC_DEPOT_START_FRAME;
+
+	v->cur_image = v->GetImage(v->direction);
+	v->UpdateDeltaXY(v->direction);
+	SetRoadVehPosition(v,x,y);
+
+	InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
+
+	return true;
+}
+
+static Trackdir FollowPreviousRoadVehicle(const Vehicle *v, const Vehicle *prev, TileIndex tile, DiagDirection entry_dir)
+{
+	if (prev->tile == v->tile) {
+		/* If the previous vehicle is on the same tile as this vehicle is
+		 * then it must have reversed. */
+		return _road_reverse_table[entry_dir];
+	}
+
+	byte prev_state = prev->u.road.state;
+	Trackdir dir;
+
+	if (prev_state == RVSB_WORMHOLE || prev_state == RVSB_IN_DEPOT) {
+		DiagDirection diag_dir = INVALID_DIAGDIR;
+
+		if (IsTunnelTile(tile)) {
+			diag_dir = GetTunnelDirection(tile);
+		} else if (IsBridgeTile(tile)) {
+			diag_dir = GetBridgeRampDirection(tile);
+		} else if (IsTileType(tile, MP_STREET) && GetRoadTileType(tile) == ROAD_TILE_DEPOT) {
+			diag_dir = ReverseDiagDir(GetRoadDepotDirection(tile));
+		}
+
+		if (diag_dir == INVALID_DIAGDIR) return INVALID_TRACKDIR;
+		dir = DiagdirToDiagTrackdir(diag_dir);
+	} else if (HASBIT(prev_state, RVS_IN_DT_ROAD_STOP)) {
+		dir = (Trackdir)(prev_state & RVSB_ROAD_STOP_TRACKDIR_MASK);
+	} else if (prev_state < TRACKDIR_END) {
+		dir = (Trackdir)prev_state;
+	} else {
+		return INVALID_TRACKDIR;
+	}
+
+	/* Do some sanity checking. */
+	static const RoadBits required_roadbits[] = {
+		ROAD_X,            ROAD_Y,            ROAD_NW | ROAD_NE, ROAD_SW | ROAD_SE,
+		ROAD_NW | ROAD_SW, ROAD_NE | ROAD_SE, ROAD_X,            ROAD_Y
+	};
+	RoadBits required = required_roadbits[dir & 0x07];
+
+	if ((required & GetAnyRoadBits(tile, v->u.road.roadtype)) == ROAD_NONE) {
+		dir = INVALID_TRACKDIR;
+	}
+
+	return dir;
+}
+
+static bool IndividualRoadVehicleController(Vehicle *v, const Vehicle *prev)
 {
 	Direction new_dir;
 	Direction old_dir;
@@ -1275,74 +1429,6 @@
 	int x,y;
 	uint32 r;
 
-	/* decrease counters */
-	v->tick_counter++;
-	if (v->u.road.reverse_ctr != 0) v->u.road.reverse_ctr--;
-
-	/* handle crashed */
-	if (v->u.road.crashed_ctr != 0) {
-		RoadVehIsCrashed(v);
-		return;
-	}
-
-	RoadVehCheckTrainCrash(v);
-
-	/* road vehicle has broken down? */
-	if (v->breakdown_ctr != 0) {
-		if (v->breakdown_ctr <= 2) {
-			HandleBrokenRoadVeh(v);
-			return;
-		}
-		v->breakdown_ctr--;
-	}
-
-	if (v->vehstatus & VS_STOPPED) return;
-
-	ProcessRoadVehOrder(v);
-	v->HandleLoading();
-
-	if (v->current_order.type == OT_LOADING) return;
-
-	if (IsRoadVehInDepot(v)) {
-		/* Vehicle is about to leave a depot */
-		DiagDirection dir;
-		const RoadDriveEntry* rdp;
-		Trackdir tdir;
-
-		v->cur_speed = 0;
-
-		dir = GetRoadDepotDirection(v->tile);
-		v->direction = DiagDirToDir(dir);
-
-		tdir = _roadveh_depot_exit_trackdir[dir];
-		rdp = _road_drive_data[v->u.road.roadtype][(_opt.road_side << RVS_DRIVE_SIDE) + tdir];
-
-		x = TileX(v->tile) * TILE_SIZE + (rdp[RVC_DEPOT_START_FRAME].x & 0xF);
-		y = TileY(v->tile) * TILE_SIZE + (rdp[RVC_DEPOT_START_FRAME].y & 0xF);
-
-		if (RoadVehFindCloseTo(v, x, y, v->direction) != NULL) return;
-
-		VehicleServiceInDepot(v);
-
-		StartRoadVehSound(v);
-
-		BeginVehicleMove(v);
-
-		v->vehstatus &= ~VS_HIDDEN;
-		v->u.road.state = tdir;
-		v->u.road.frame = RVC_DEPOT_START_FRAME;
-
-		v->cur_image = GetRoadVehImage(v, v->direction);
-		v->UpdateDeltaXY(v->direction);
-		SetRoadVehPosition(v,x,y);
-
-		InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
-		return;
-	}
-
-	/* Check if vehicle needs to proceed, return if it doesn't */
-	if (!RoadVehAccelerate(v)) return;
-
 	if (v->u.road.overtaking != 0)  {
 		if (++v->u.road.overtaking_ctr >= 35)
 			/* If overtaking just aborts at a random moment, we can have a out-of-bound problem,
@@ -1353,6 +1439,11 @@
 			}
 	}
 
+	/* If this vehicle is in a depot and we've reached this point it must be
+	 * one of the articulated parts. It will stay in the depot until activated
+	 * by the previous vehicle in the chain when it gets to the right place. */
+	if (IsRoadVehInDepot(v)) return true;
+
 	/* Save old vehicle position to use at end of move to set viewport area dirty */
 	BeginVehicleMove(v);
 
@@ -1363,22 +1454,22 @@
 		const Vehicle *u = RoadVehFindCloseTo(v, gp.x, gp.y, v->direction);
 		if (u != NULL && u->cur_speed < v->cur_speed) {
 			v->cur_speed = u->cur_speed;
-			return;
+			return false;
 		}
 
 		if ((IsTunnelTile(gp.new_tile) || IsBridgeTile(gp.new_tile)) && HASBIT(VehicleEnterTile(v, gp.new_tile, gp.x, gp.y), VETS_ENTERED_WORMHOLE)) {
 			/* Vehicle has just entered a bridge or tunnel */
-			v->cur_image = GetRoadVehImage(v, v->direction);
+			v->cur_image = v->GetImage(v->direction);
 			v->UpdateDeltaXY(v->direction);
 			SetRoadVehPosition(v,gp.x,gp.y);
-			return;
+			return true;
 		}
 
 		v->x_pos = gp.x;
 		v->y_pos = gp.y;
 		VehiclePositionChanged(v);
 		if (!(v->vehstatus & VS_HIDDEN)) EndVehicleMove(v);
-		return;
+		return true;
 	}
 
 	/* Get move position data for next frame.
@@ -1390,14 +1481,22 @@
 
 	if (rd.x & RDE_NEXT_TILE) {
 		TileIndex tile = v->tile + TileOffsByDiagDir(rd.x & 3);
-		Trackdir dir = RoadFindPathToDest(v, tile, (DiagDirection)(rd.x & 3));
+		Trackdir dir;
 		uint32 r;
 		Direction newdir;
 		const RoadDriveEntry *rdp;
 
+		if (IsRoadVehFront(v)) {
+			/* If this is the front engine, look for the right path. */
+			dir = RoadFindPathToDest(v, tile, (DiagDirection)(rd.x & 3));
+		} else {
+			dir = FollowPreviousRoadVehicle(v, prev, tile, (DiagDirection)(rd.x & 3));
+		}
+
 		if (dir == INVALID_TRACKDIR) {
+			if (!IsRoadVehFront(v)) error("!Disconnecting road vehicle.");
 			v->cur_speed = 0;
-			return;
+			return false;
 		}
 
 again:
@@ -1412,14 +1511,14 @@
 					case TRACKDIR_RVREV_SW: needed = ROAD_NE; break;
 					case TRACKDIR_RVREV_NW: needed = ROAD_SE; break;
 				}
-				if (!IsTileType(tile, MP_STREET) || GetRoadTileType(tile) != ROAD_TILE_NORMAL || (needed & GetRoadBits(tile, ROADTYPE_TRAM)) == ROAD_NONE) {
+				if (!IsTileType(tile, MP_STREET) || GetRoadTileType(tile) != ROAD_TILE_NORMAL || HasRoadWorks(tile) || (needed & GetRoadBits(tile, ROADTYPE_TRAM)) == ROAD_NONE) {
 					/* The tram cannot turn here */
 					v->cur_speed = 0;
-					return;
+					return false;
 				}
 			} else if (IsTileType(v->tile, MP_STREET) && GetRoadTileType(v->tile) == ROAD_TILE_NORMAL && GetDisallowedRoadDirections(v->tile) != DRD_NONE) {
 				v->cur_speed = 0;
-				return;
+				return false;
 			} else {
 				tile = v->tile;
 			}
@@ -1432,13 +1531,13 @@
 		y = TileY(tile) * TILE_SIZE + rdp[RVC_DEFAULT_START_FRAME].y;
 
 		newdir = RoadVehGetSlidingDirection(v, x, y);
-		if (RoadVehFindCloseTo(v, x, y, newdir) != NULL) return;
+		if (IsRoadVehFront(v) && RoadVehFindCloseTo(v, x, y, newdir) != NULL) return false;
 
 		r = VehicleEnterTile(v, tile, x, y);
 		if (HASBIT(r, VETS_CANNOT_ENTER)) {
 			if (!IsTileType(tile, MP_TUNNELBRIDGE)) {
 				v->cur_speed = 0;
-				return;
+				return false;
 			}
 			/* Try an about turn to re-enter the previous tile */
 			dir = _road_reverse_table[rd.x & 3];
@@ -1450,7 +1549,7 @@
 				/* New direction is trying to turn vehicle around.
 				 * We can't turn at the exit of a road stop so wait.*/
 				v->cur_speed = 0;
-				return;
+				return false;
 			}
 			if (IsRoadStop(v->tile)) {
 				RoadStop *rs = GetRoadStopByTile(v->tile, GetRoadStopType(v->tile));
@@ -1475,10 +1574,10 @@
 			v->cur_speed -= v->cur_speed >> 2;
 		}
 
-		v->cur_image = GetRoadVehImage(v, newdir);
+		v->cur_image = v->GetImage(newdir);
 		v->UpdateDeltaXY(v->direction);
 		RoadZPosAffectSpeed(v, SetRoadVehPosition(v, x, y));
-		return;
+		return true;
 	}
 
 	if (rd.x & RDE_TURNED) {
@@ -1490,7 +1589,7 @@
 
 		if (dir == INVALID_TRACKDIR) {
 			v->cur_speed = 0;
-			return;
+			return false;
 		}
 
 		rdp = _road_drive_data[v->u.road.roadtype][(_opt.road_side << RVS_DRIVE_SIDE) + dir];
@@ -1499,12 +1598,12 @@
 		y = TileY(v->tile) * TILE_SIZE + rdp[RVC_TURN_AROUND_START_FRAME].y;
 
 		newdir = RoadVehGetSlidingDirection(v, x, y);
-		if (RoadVehFindCloseTo(v, x, y, newdir) != NULL) return;
+		if (IsRoadVehFront(v) && RoadVehFindCloseTo(v, x, y, newdir) != NULL) return false;
 
 		r = VehicleEnterTile(v, v->tile, x, y);
 		if (HASBIT(r, VETS_CANNOT_ENTER)) {
 			v->cur_speed = 0;
-			return;
+			return false;
 		}
 
 		v->u.road.state = dir;
@@ -1515,10 +1614,21 @@
 			v->cur_speed -= v->cur_speed >> 2;
 		}
 
-		v->cur_image = GetRoadVehImage(v, newdir);
+		v->cur_image = v->GetImage(newdir);
 		v->UpdateDeltaXY(v->direction);
 		RoadZPosAffectSpeed(v, SetRoadVehPosition(v, x, y));
-		return;
+		return true;
+	}
+
+	/* This vehicle is not in a wormhole and it hasn't entered a new tile. If
+	 * it's on a depot tile, check if it's time to activate the next vehicle in
+	 * the chain yet. */
+	if (v->next != NULL &&
+			IsTileType(v->tile, MP_STREET) && GetRoadTileType(v->tile) == ROAD_TILE_DEPOT) {
+
+		if (v->u.road.frame == v->u.road.cached_veh_length + RVC_DEPOT_START_FRAME) {
+			RoadVehLeaveDepot(v->next, false);
+		}
 	}
 
 	/* Calculate new position for the vehicle */
@@ -1527,7 +1637,7 @@
 
 	new_dir = RoadVehGetSlidingDirection(v, x, y);
 
-	if (!IS_BYTE_INSIDE(v->u.road.state, RVSB_IN_ROAD_STOP, RVSB_IN_ROAD_STOP_END)) {
+	if (IsRoadVehFront(v) && !IS_BYTE_INSIDE(v->u.road.state, RVSB_IN_ROAD_STOP, RVSB_IN_ROAD_STOP_END)) {
 		/* Vehicle is not in a road stop.
 		 * Check for another vehicle to overtake */
 		Vehicle* u = RoadVehFindCloseTo(v, x, y, new_dir);
@@ -1536,7 +1646,7 @@
 			v->cur_speed = u->cur_speed;
 			/* There is a vehicle in front overtake it if possible */
 			if (v->u.road.overtaking == 0) RoadVehCheckOvertake(v, u);
-			return;
+			return false;
 		}
 	}
 
@@ -1546,13 +1656,13 @@
 		v->cur_speed -= (v->cur_speed >> 2);
 		if (old_dir != v->u.road.state) {
 			/* The vehicle is in a road stop */
-			v->cur_image = GetRoadVehImage(v, new_dir);
+			v->cur_image = v->GetImage(new_dir);
 			v->UpdateDeltaXY(v->direction);
 			SetRoadVehPosition(v, v->x_pos, v->y_pos);
 			/* Note, return here means that the frame counter is not incremented
 			 * for vehicles changing direction in a road stop. This causes frames to
 			 * be repeated. (XXX) Is this intended? */
-			return;
+			return true;
 		}
 	}
 
@@ -1561,12 +1671,12 @@
 	 * and it's the correct type of stop (bus or truck) and the frame equals the stop frame...
 	 * (the station test and stop type test ensure that other vehicles, using the road stop as
 	 * a through route, do not stop) */
-	if ((IS_BYTE_INSIDE(v->u.road.state, RVSB_IN_ROAD_STOP, RVSB_IN_ROAD_STOP_END) &&
+	if (IsRoadVehFront(v) && ((IS_BYTE_INSIDE(v->u.road.state, RVSB_IN_ROAD_STOP, RVSB_IN_ROAD_STOP_END) &&
 			_road_veh_data_1[v->u.road.state - RVSB_IN_ROAD_STOP + (_opt.road_side << RVS_DRIVE_SIDE)] == v->u.road.frame) ||
 			(IS_BYTE_INSIDE(v->u.road.state, RVSB_IN_DT_ROAD_STOP, RVSB_IN_DT_ROAD_STOP_END) &&
 			v->current_order.dest == GetStationIndex(v->tile) &&
 			GetRoadStopType(v->tile) == (IsCargoInClass(v->cargo_type, CC_PASSENGERS) ? RoadStop::BUS : RoadStop::TRUCK) &&
-			v->u.road.frame == RVC_DRIVE_THROUGH_STOP_FRAME)) {
+			v->u.road.frame == RVC_DRIVE_THROUGH_STOP_FRAME))) {
 
 		RoadStop *rs = GetRoadStopByTile(v->tile, GetRoadStopType(v->tile));
 		Station* st = GetStationByTile(v->tile);
@@ -1596,7 +1706,7 @@
 
 						v->u.road.frame++;
 						RoadZPosAffectSpeed(v, SetRoadVehPosition(v, x, y));
-						return;
+						return true;
 					}
 				}
 			}
@@ -1608,7 +1718,7 @@
 			RoadVehArrivesAt(v, st);
 			v->BeginLoading();
 
-			return;
+			return false;
 		}
 
 		/* Vehicle is ready to leave a bay in a road stop */
@@ -1616,7 +1726,7 @@
 			if (rs->IsEntranceBusy()) {
 				/* Road stop entrance is busy, so wait as there is nowhere else to go */
 				v->cur_speed = 0;
-				return;
+				return false;
 			}
 			v->current_order.Free();
 			ClearSlot(v);
@@ -1659,28 +1769,71 @@
 	r = VehicleEnterTile(v, v->tile, x, y);
 	if (HASBIT(r, VETS_CANNOT_ENTER)) {
 		v->cur_speed = 0;
-		return;
+		return false;
 	}
 
 	/* Move to next frame unless vehicle arrived at a stop position
 	 * in a depot or entered a tunnel/bridge */
 	if (!HASBIT(r, VETS_ENTERED_WORMHOLE)) v->u.road.frame++;
 
-	v->cur_image = GetRoadVehImage(v, v->direction);
+	v->cur_image = v->GetImage(v->direction);
 	v->UpdateDeltaXY(v->direction);
 	RoadZPosAffectSpeed(v, SetRoadVehPosition(v, x, y));
+	return true;
+}
+
+static void RoadVehController(Vehicle *v)
+{
+	/* decrease counters */
+	v->tick_counter++;
+	v->current_order_time++;
+	if (v->u.road.reverse_ctr != 0) v->u.road.reverse_ctr--;
+
+	/* handle crashed */
+	if (v->u.road.crashed_ctr != 0) {
+		RoadVehIsCrashed(v);
+		return;
+	}
+
+	RoadVehCheckTrainCrash(v);
+
+	/* road vehicle has broken down? */
+	if (v->breakdown_ctr != 0) {
+		if (v->breakdown_ctr <= 2) {
+			HandleBrokenRoadVeh(v);
+			return;
+		}
+		v->breakdown_ctr--;
+	}
+
+	if (v->vehstatus & VS_STOPPED) return;
+
+	ProcessRoadVehOrder(v);
+	v->HandleLoading();
+
+	if (v->current_order.type == OT_LOADING) return;
+
+	if (IsRoadVehInDepot(v) && RoadVehLeaveDepot(v, true)) return;
+
+	/* Check if vehicle needs to proceed, return if it doesn't */
+	if (!RoadVehAccelerate(v)) return;
+
+	for (Vehicle *prev = NULL; v != NULL; prev = v, v = v->next) {
+		if (!IndividualRoadVehicleController(v, prev)) break;
+	}
 }
 
 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)
+void RoadVehicle::Tick()
 {
-	AgeRoadVehCargo(v);
-	RoadVehController(v);
+	AgeRoadVehCargo(this);
+
+	if (IsRoadVehFront(this)) RoadVehController(this);
 }
 
 static void CheckIfRoadVehNeedsService(Vehicle *v)
@@ -1736,7 +1889,9 @@
 
 void OnNewDay_RoadVeh(Vehicle *v)
 {
-	int32 cost;
+	CommandCost cost;
+
+	if (!IsRoadVehFront(v)) return;
 
 	if ((++v->day_counter & 7) == 0) DecreaseVehicleValue(v);
 	if (v->u.road.blocked_ctr == 0) CheckVehicleBreakdown(v);
@@ -1816,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);
@@ -1849,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;
@@ -1862,7 +2017,7 @@
 	v = GetVehicle(p1);
 
 	if (v->type != VEH_ROAD || !CheckOwnership(v->owner)) return CMD_ERROR;
-	if (!IsRoadVehInDepotStopped(v)) return_cmd_error(STR_9013_MUST_BE_STOPPED_INSIDE);
+	if (!CheckRoadVehInDepotStopped(v)) return_cmd_error(STR_9013_MUST_BE_STOPPED_INSIDE);
 
 	if (new_cid >= NUM_CARGO || !CanRefitTo(v->engine_type, new_cid)) return CMD_ERROR;
 
@@ -1908,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/roadveh_gui.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -11,6 +11,7 @@
 #include "table/strings.h"
 #include "window.h"
 #include "gui.h"
+#include "strings.h"
 #include "vehicle.h"
 #include "viewport.h"
 #include "command.h"
@@ -18,30 +19,68 @@
 #include "vehicle_gui.h"
 #include "newgrf_engine.h"
 
-void DrawRoadVehImage(const Vehicle *v, int x, int y, VehicleID selection)
+static inline int RoadVehLengthToPixels(int length)
 {
-	SpriteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v);
-	DrawSprite(GetRoadVehImage(v, DIR_W), pal, x + 14, y + 6);
+	return (length * 28) / 8;
+}
 
-	if (v->index == selection) {
-		DrawFrameRect(x - 1, y - 1, x + 28, y + 12, 15, FR_BORDERONLY);
-	}
+void DrawRoadVehImage(const Vehicle *v, int x, int y, int count, VehicleID selection)
+{
+	int dx = 0;
+
+	/* Road vehicle lengths are measured in eighths of the standard length, so
+	 * count is the number of standard vehicles that should be drawn. If it is
+	 * 0, we draw enough vehicles for 10 standard vehicle lengths. */
+	int max_length = (count == 0) ? 80 : count * 8;
+
+	do {
+		int length = v->u.road.cached_veh_length;
+
+		if (dx + length > 0 && dx <= max_length) {
+			SpriteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v);
+			DrawSprite(v->GetImage(DIR_W), pal, x + 14 + RoadVehLengthToPixels(dx), y + 6);
+
+			if (v->index == selection) {
+				DrawFrameRect(x - 1, y - 1, x + 28, y + 12, 15, FR_BORDERONLY);
+			}
+		}
+
+		dx += length;
+		v = v->next;
+	} while (v != NULL && dx < max_length);
 }
 
 static void RoadVehDetailsWndProc(Window *w, WindowEvent *e)
 {
 	switch (e->event) {
+	case WE_CREATE: {
+		const Vehicle *v = GetVehicle(w->window_number);
+
+		if (!RoadVehHasArticPart(v)) break;
+
+		/* Draw the text under the vehicle instead of next to it, minus the
+		 * height already allocated for the cargo of the first vehicle. */
+		uint height_extension = 15 - 11;
+
+		/* Add space for the cargo amount for each part. */
+		do {
+			height_extension += 11;
+		} while ((v = v->next) != NULL);
+
+		ResizeWindow(w, 0, height_extension);
+	} break;
+
 	case WE_PAINT: {
 		const Vehicle *v = GetVehicle(w->window_number);
 		StringID str;
+		uint y_offset = RoadVehHasArticPart(v) ? 15 :0;
 
 		SetWindowWidgetDisabledState(w, 2, v->owner != _local_player);
 		/* disable service-scroller when interval is set to disabled */
 		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 */
@@ -76,37 +115,81 @@
 			DrawString(2, 45, STR_9010_RELIABILITY_BREAKDOWNS, 0);
 		}
 
+		DrawRoadVehImage(v, 3, 57, 0, INVALID_VEHICLE);
+
+		SetDParam(0, v->engine_type);
+		SetDParam(1, v->build_year);
+		SetDParam(2, v->value);
+		DrawString(34, 57 + y_offset, STR_9011_BUILT_VALUE, 0);
+
+		if (RoadVehHasArticPart(v)) {
+			AcceptedCargo max_cargo;
+			char capacity[512];
+
+			memset(max_cargo, 0, sizeof(max_cargo));
+
+			for (const Vehicle *u = v; u != NULL; u = u->next) {
+				max_cargo[u->cargo_type] += u->cargo_cap;
+			}
+
+			GetString(capacity, STR_ARTICULATED_RV_CAPACITY, lastof(capacity));
+
+			bool first = true;
+			for (CargoID i = 0; i < NUM_CARGO; i++) {
+				if (max_cargo[i] > 0) {
+					char buffer[128];
+
+					SetDParam(0, i);
+					SetDParam(1, max_cargo[i]);
+					GetString(buffer, STR_BARE_CARGO, lastof(buffer));
+
+					if (!first) strecat(capacity, ", ", lastof(capacity));
+					strecat(capacity, buffer, lastof(capacity));
+				}
+			}
+
+			SetDParamStr(0, capacity);
+			DrawStringTruncated(34, 67 + y_offset, STR_JUST_STRING, 0, w->width - 34);
+
+			for (const Vehicle *u = v; u != NULL; u = u->next) {
+				str = STR_8812_EMPTY;
+				if (!u->cargo.Empty()) {
+					SetDParam(0, u->cargo_type);
+					SetDParam(1, u->cargo.Count());
+					SetDParam(2, u->cargo.Source());
+					str = STR_8813_FROM;
+				}
+				DrawString(34, 78 + y_offset, str, 0);
+
+				y_offset += 11;
+			}
+
+			y_offset -= 11;
+		} else {
+			SetDParam(0, v->cargo_type);
+			SetDParam(1, v->cargo_cap);
+			DrawString(34, 67 + y_offset, STR_9012_CAPACITY, 0);
+
+			str = STR_8812_EMPTY;
+			if (!v->cargo.Empty()) {
+				SetDParam(0, v->cargo_type);
+				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.FeederShare());
+		DrawString(34, 90 + y_offset, STR_FEEDER_CARGO_VALUE, 0);
+
 		/* Draw service interval text */
 		{
 			SetDParam(0, v->service_interval);
 			SetDParam(1, v->date_of_last_service);
-			DrawString(13, 102, _patches.servint_ispercent?STR_SERVICING_INTERVAL_PERCENT:STR_883C_SERVICING_INTERVAL_DAYS, 0);
+			DrawString(13, 102 + y_offset, _patches.servint_ispercent ? STR_SERVICING_INTERVAL_PERCENT : STR_883C_SERVICING_INTERVAL_DAYS, 0);
 		}
-
-		DrawRoadVehImage(v, 3, 57, INVALID_VEHICLE);
-
-		SetDParam(0, GetCustomEngineName(v->engine_type));
-		SetDParam(1, v->build_year);
-		SetDParam(2, v->value);
-		DrawString(34, 57, STR_9011_BUILT_VALUE, 0);
-
-		SetDParam(0, v->cargo_type);
-		SetDParam(1, v->cargo_cap);
-		DrawString(34, 67, STR_9012_CAPACITY, 0);
-
-		str = STR_8812_EMPTY;
-		if (v->cargo_count != 0) {
-			SetDParam(0, v->cargo_type);
-			SetDParam(1, v->cargo_count);
-			SetDParam(2, v->cargo_source);
-			str = STR_8813_FROM;
-		}
-		DrawString(34, 78, str, 0);
-
-		/* Draw Transfer credits text */
-		SetDParam(0, v->cargo_feeder_share);
-		DrawString(34, 89, STR_FEEDER_CARGO_VALUE, 0);
-
 	} break;
 
 	case WE_CLICK: {
@@ -115,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 */
@@ -151,10 +234,10 @@
 {    WWT_CAPTION,   RESIZE_NONE,    14,    11,   339,     0,    13, STR_900C_DETAILS, STR_018C_WINDOW_TITLE_DRAG_THIS},
 { WWT_PUSHTXTBTN,   RESIZE_NONE,    14,   340,   379,     0,    13, STR_01AA_NAME,    STR_902E_NAME_ROAD_VEHICLE},
 {      WWT_PANEL,   RESIZE_NONE,    14,     0,   379,    14,    55, 0x0,              STR_NULL},
-{      WWT_PANEL,   RESIZE_NONE,    14,     0,   379,    56,   100, 0x0,              STR_NULL},
-{ WWT_PUSHTXTBTN,   RESIZE_NONE,    14,     0,    10,   101,   106, STR_0188,         STR_884D_INCREASE_SERVICING_INTERVAL},
-{ WWT_PUSHTXTBTN,   RESIZE_NONE,    14,     0,    10,   107,   112, STR_0189,         STR_884E_DECREASE_SERVICING_INTERVAL},
-{      WWT_PANEL,   RESIZE_NONE,    14,    11,   379,   101,   112, 0x0,              STR_NULL},
+{      WWT_PANEL,   RESIZE_BOTTOM,  14,     0,   379,    56,   100, 0x0,              STR_NULL},
+{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,     0,    10,   101,   106, STR_0188,         STR_884D_INCREASE_SERVICING_INTERVAL},
+{ WWT_PUSHTXTBTN,   RESIZE_TB,      14,     0,    10,   107,   112, STR_0189,         STR_884E_DECREASE_SERVICING_INTERVAL},
+{      WWT_PANEL,   RESIZE_TB,      14,    11,   379,   101,   112, 0x0,              STR_NULL},
 {   WIDGETS_END},
 };
 
@@ -199,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) {
@@ -292,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/saveload.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -17,7 +17,6 @@
 #include "openttd.h"
 #include "debug.h"
 #include "functions.h"
-#include "hal.h"
 #include "vehicle.h"
 #include "station.h"
 #include "thread.h"
@@ -26,10 +25,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 = 70;
 uint16 _sl_version;       ///< the major savegame version identifier
 byte   _sl_minor_version; ///< the minor savegame version, DO NOT USE!
 
@@ -65,7 +66,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 +114,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 +138,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 +228,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();
@@ -283,6 +287,8 @@
 	_sl.array_index = index;
 }
 
+static uint32 _next_offs;
+
 /**
  * Iterate through the elements of an array and read the whole thing
  * @return The index of the object, or -1 if we have reached the end of current block
@@ -290,21 +296,20 @@
 int SlIterateArray()
 {
 	int index;
-	static uint32 next_offs;
 
 	/* After reading in the whole array inside the loop
 	 * we must have read in all the data, so we must be at end of current block. */
-	assert(next_offs == 0 || SlGetOffs() == next_offs);
+	if (_next_offs != 0 && SlGetOffs() != _next_offs) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Invalid chunk size");
 
 	while (true) {
 		uint length = SlReadArrayLength();
 		if (length == 0) {
-			next_offs = 0;
+			_next_offs = 0;
 			return -1;
 		}
 
 		_sl.obj_len = --length;
-		next_offs = SlGetOffs() + length;
+		_next_offs = SlGetOffs() + length;
 
 		switch (_sl.block_mode) {
 		case CH_SPARSE_ARRAY: index = (int)SlReadSparseIndex(); break;
@@ -491,6 +496,7 @@
  * @return return the net length of the string */
 static inline size_t SlCalcNetStringLen(const char *ptr, size_t length)
 {
+	if (ptr == NULL) return 0;
 	return minu(strlen(ptr), length - 1);
 }
 
@@ -568,9 +574,13 @@
 			case SLE_VAR_STR:
 			case SLE_VAR_STRQ: // Malloc'd string, free previous incarnation, and allocate
 				free(*(char**)ptr);
-				*(char**)ptr = (char*)malloc(len + 1); // terminating '\0'
-				ptr = *(char**)ptr;
-				SlCopyBytes(ptr, len);
+				if (len == 0) {
+					*(char**)ptr = NULL;
+				} else {
+					*(char**)ptr = (char*)malloc(len + 1); // terminating '\0'
+					ptr = *(char**)ptr;
+					SlCopyBytes(ptr, len);
+				}
 				break;
 		}
 
@@ -641,9 +651,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 +675,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 +779,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 +830,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 +841,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 +869,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 +901,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 +1004,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 +1024,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 +1034,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 +1058,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 +1102,6 @@
  ********** START OF MEMORY CODE (in ram)****
  ********************************************/
 
-#include "table/strings.h"
 #include "table/sprites.h"
 #include "gfx.h"
 #include "gui.h"
@@ -1178,8 +1180,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 +1215,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 +1259,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 +1278,7 @@
 	_animated_tile_chunk_handlers,
 	_newgrf_chunk_handlers,
 	_group_chunk_handlers,
+	_cargopacket_chunk_handlers,
 	NULL,
 };
 
@@ -1307,6 +1310,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 +1371,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 +1484,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 +1519,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 +1542,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;
@@ -1561,7 +1591,7 @@
  * @param mode Save or load. Load can also be a TTD(Patch) game. Use SL_LOAD, SL_OLD_LOAD or SL_SAVE
  * @return Return the results of the action. SL_OK, SL_ERROR or SL_REINIT ("unload" the game)
  */
-SaveOrLoadResult SaveOrLoad(const char *filename, int mode)
+SaveOrLoadResult SaveOrLoad(const char *filename, int mode, Subdirectory sb)
 {
 	uint32 hdr[2];
 	const SaveLoadFormat *fmt;
@@ -1574,6 +1604,8 @@
 	}
 	WaitTillSaved();
 
+	_next_offs = 0;
+
 	/* Load a TTDLX or TTDPatch game */
 	if (mode == SL_OLD_LOAD) {
 		InitializeGame(IG_DATE_RESET, 256, 256); // set a mapsize of 256x256 for TTDPatch games or it might get confused
@@ -1583,10 +1615,30 @@
 		return SL_OK;
 	}
 
-	_sl.fh = (mode == SL_SAVE) ? fopen(filename, "wb") : fopen(filename, "rb");
+	/* 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 */
+	if (_sl.fh == NULL && mode == SL_LOAD) _sl.fh = FioFOpenFile(filename, "rb", SAVE_DIR);
+	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;
@@ -1595,24 +1647,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 */
@@ -1643,11 +1677,11 @@
 		}
 	} else { /* LOAD game */
 		assert(mode == SL_LOAD);
+#ifdef DEBUG_DUMP_COMMANDS
+		debug_dump_commands("ddc:load:%s\n", filename);
+#endif /* DUMP_COMMANDS */
 
-		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++) {
@@ -1679,10 +1713,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;
 			}
 		}
@@ -1692,13 +1723,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
@@ -1721,9 +1754,7 @@
 /** Do a save when exiting the game (patch option) _patches.autosave_on_exit */
 void DoExitSave()
 {
-	char buf[200];
-	snprintf(buf, sizeof(buf), "%s%sexit.sav", _paths.autosave_dir, PATHSEP);
-	SaveOrLoad(buf, SL_SAVE);
+	SaveOrLoad("exit.sav", SL_SAVE, AUTOSAVE_DIR);
 }
 
 #if 0
--- a/src/saveload.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/saveload.h	Sat Jul 14 19:42:58 2007 +0000
@@ -5,6 +5,8 @@
 #ifndef SAVELOAD_H
 #define SAVELOAD_H
 
+#include "fileio.h"
+
 #ifdef SIZE_MAX
 #undef SIZE_MAX
 #endif
@@ -26,7 +28,9 @@
 	SL_BMP      =  4,
 };
 
-SaveOrLoadResult SaveOrLoad(const char *filename, int mode);
+void SetSaveLoadError(uint16 str);
+const char *GetSaveLoadErrorString();
+SaveOrLoadResult SaveOrLoad(const char *filename, int mode, Subdirectory sb);
 void WaitTillSaved();
 void DoExitSave();
 
@@ -53,6 +57,7 @@
 	REF_VEHICLE_OLD   = 4,
 	REF_ROADSTOPS     = 5,
 	REF_ENGINE_RENEWS = 6,
+	REF_CARGO_PACKET  = 7,
 };
 
 #define SL_MAX_VERSION 255
@@ -170,6 +175,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)
@@ -178,7 +184,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)
 };
 
@@ -186,7 +192,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)
@@ -202,12 +208,12 @@
 #define SLE_CONDNULL(length, from, to) SLE_CONDARR(NullStruct, null, SLE_FILE_U8 | SLE_VAR_NULL | SLF_CONFIG_NO, length, from, to)
 
 /* Translate values ingame to different values in the savegame and vv */
-#define SLE_WRITEBYTE(base, variable, game_value, file_value) SLE_GENERAL(SL_WRITEBYTE, base, variable, 0, 0, game_value, file_value)
+#define SLE_WRITEBYTE(base, variable, value) SLE_GENERAL(SL_WRITEBYTE, base, variable, 0, 0, value, value)
 /* Load common code and put it into each struct (currently only for vehicles */
 #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)
 
@@ -218,10 +224,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)
@@ -235,9 +241,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/screenshot.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -7,13 +7,16 @@
 #include "strings.h"
 #include "table/strings.h"
 #include "gfx.h"
-#include "hal.h"
+#include "fileio.h"
 #include "viewport.h"
 #include "player.h"
 #include "screenshot.h"
 #include "variables.h"
 #include "date.h"
+#include "string.h"
 #include "helpers.hpp"
+#include "blitter/factory.hpp"
+#include "fileio.h"
 
 char _screenshot_format_name[8];
 uint _num_screenshot_formats;
@@ -21,7 +24,7 @@
 ScreenshotType current_screenshot_type;
 
 /* called by the ScreenShot proc to generate screenshot lines. */
-typedef void ScreenshotCallback(void *userdata, Pixel *buf, uint y, uint pitch, uint n);
+typedef void ScreenshotCallback(void *userdata, void *buf, uint y, uint pitch, uint n);
 typedef bool ScreenshotHandlerProc(const char *name, ScreenshotCallback *callb, void *userdata, uint w, uint h, int pixelformat, const Colour *palette);
 
 struct ScreenshotFormat {
@@ -71,10 +74,11 @@
 	FILE *f;
 	uint i, padw;
 	uint n, maxlines;
+	uint pal_size = 0;
+	uint bpp = pixelformat / 8;
 
-	/* only implemented for 8bit images so far. */
-	if (pixelformat != 8)
-		return false;
+	/* only implemented for 8bit and 32bit images so far. */
+	if (pixelformat != 8 && pixelformat != 32) return false;
 
 	f = fopen(name, "wb");
 	if (f == NULL) return false;
@@ -82,18 +86,20 @@
 	/* each scanline must be aligned on a 32bit boundary */
 	padw = ALIGN(w, 4);
 
+	if (pixelformat == 8) pal_size = sizeof(RgbQuad) * 256;
+
 	/* setup the file header */
 	bfh.type = TO_LE16('MB');
-	bfh.size = TO_LE32(sizeof(bfh) + sizeof(bih) + sizeof(RgbQuad) * 256 + padw * h);
+	bfh.size = TO_LE32(sizeof(bfh) + sizeof(bih) + pal_size + padw * h * bpp);
 	bfh.reserved = 0;
-	bfh.off_bits = TO_LE32(sizeof(bfh) + sizeof(bih) + sizeof(RgbQuad) * 256);
+	bfh.off_bits = TO_LE32(sizeof(bfh) + sizeof(bih) + pal_size);
 
 	/* setup the info header */
 	bih.size = TO_LE32(sizeof(BitmapInfoHeader));
 	bih.width = TO_LE32(w);
 	bih.height = TO_LE32(h);
 	bih.planes = TO_LE16(1);
-	bih.bitcount = TO_LE16(8);
+	bih.bitcount = TO_LE16(pixelformat);
 	bih.compression = 0;
 	bih.sizeimage = 0;
 	bih.xpels = 0;
@@ -101,24 +107,26 @@
 	bih.clrused = 0;
 	bih.clrimp = 0;
 
-	/* convert the palette to the windows format */
-	for (i = 0; i != 256; i++) {
-		rq[i].red   = palette[i].r;
-		rq[i].green = palette[i].g;
-		rq[i].blue  = palette[i].b;
-		rq[i].reserved = 0;
+	if (pixelformat == 8) {
+		/* convert the palette to the windows format */
+		for (i = 0; i != 256; i++) {
+			rq[i].red   = palette[i].r;
+			rq[i].green = palette[i].g;
+			rq[i].blue  = palette[i].b;
+			rq[i].reserved = 0;
+		}
 	}
 
 	/* write file header and info header and palette */
 	if (fwrite(&bfh, sizeof(bfh), 1, f) != 1) return false;
 	if (fwrite(&bih, sizeof(bih), 1, f) != 1) return false;
-	if (fwrite(rq, sizeof(rq), 1, f) != 1) return false;
+	if (pixelformat == 8) if (fwrite(rq, sizeof(rq), 1, f) != 1) return false;
 
 	/* use by default 64k temp memory */
 	maxlines = clamp(65536 / padw, 16, 128);
 
 	/* now generate the bitmap bits */
-	Pixel *buff = MallocT<Pixel>(padw * maxlines); // by default generate 128 lines at a time.
+	void *buff = MallocT<uint8>(padw * maxlines * bpp); // by default generate 128 lines at a time.
 	if (buff == NULL) {
 		fclose(f);
 		return false;
@@ -136,7 +144,7 @@
 
 		/* write each line */
 		while (n)
-			if (fwrite(buff + (--n) * padw, padw, 1, f) != 1) {
+			if (fwrite((uint8 *)buff + (--n) * padw * bpp, padw * bpp, 1, f) != 1) {
 				free(buff);
 				fclose(f);
 				return false;
@@ -172,12 +180,12 @@
 	FILE *f;
 	uint i, y, n;
 	uint maxlines;
+	uint bpp = pixelformat / 8;
 	png_structp png_ptr;
 	png_infop info_ptr;
 
-	/* only implemented for 8bit images so far. */
-	if (pixelformat != 8)
-		return false;
+	/* only implemented for 8bit and 32bit images so far. */
+	if (pixelformat != 8 && pixelformat != 32) return false;
 
 	f = fopen(name, "wb");
 	if (f == NULL) return false;
@@ -206,31 +214,53 @@
 
 	png_set_filter(png_ptr, 0, PNG_FILTER_NONE);
 
-	png_set_IHDR(png_ptr, info_ptr, w, h, pixelformat, PNG_COLOR_TYPE_PALETTE,
+	png_set_IHDR(png_ptr, info_ptr, w, h, 8, pixelformat == 8 ? PNG_COLOR_TYPE_PALETTE : PNG_COLOR_TYPE_RGB,
 		PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
 
-	/* convert the palette to the .PNG format. */
-	for (i = 0; i != 256; i++) {
-		rq[i].red   = palette[i].r;
-		rq[i].green = palette[i].g;
-		rq[i].blue  = palette[i].b;
+	if (pixelformat == 8) {
+		/* convert the palette to the .PNG format. */
+		for (i = 0; i != 256; i++) {
+			rq[i].red   = palette[i].r;
+			rq[i].green = palette[i].g;
+			rq[i].blue  = palette[i].b;
+		}
+
+		png_set_PLTE(png_ptr, info_ptr, rq, 256);
 	}
 
-	png_set_PLTE(png_ptr, info_ptr, rq, 256);
 	png_write_info(png_ptr, info_ptr);
 	png_set_flush(png_ptr, 512);
 
+	if (pixelformat == 32) {
+		png_color_8 sig_bit;
+
+		/* Save exact color/alpha resolution */
+		sig_bit.alpha = 0;
+		sig_bit.blue  = 8;
+		sig_bit.green = 8;
+		sig_bit.red   = 8;
+		sig_bit.gray  = 8;
+		png_set_sBIT(png_ptr, info_ptr, &sig_bit);
+
+#ifdef TTD_LITTLE_ENDIAN
+		png_set_bgr(png_ptr);
+		png_set_filler(png_ptr, 0, PNG_FILLER_AFTER);
+#else
+		png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
+#endif
+	}
+
 	/* use by default 64k temp memory */
 	maxlines = clamp(65536 / w, 16, 128);
 
 	/* now generate the bitmap bits */
-	Pixel *buff = MallocT<Pixel>(w * maxlines); // by default generate 128 lines at a time.
+	void *buff = MallocT<uint8>(w * maxlines * bpp); // by default generate 128 lines at a time.
 	if (buff == NULL) {
 		png_destroy_write_struct(&png_ptr, &info_ptr);
 		fclose(f);
 		return false;
 	}
-	memset(buff, 0, w * maxlines); // zero the buffer to have the padding bytes set to 0
+	memset(buff, 0, w * maxlines * bpp);
 
 	y = 0;
 	do {
@@ -243,7 +273,7 @@
 
 		/* write them to png */
 		for (i = 0; i != n; i++)
-			png_write_row(png_ptr, buff + i * w);
+			png_write_row(png_ptr, (png_bytep)buff + i * w * bpp);
 	} while (y != h);
 
 	png_write_end(png_ptr, info_ptr);
@@ -287,6 +317,10 @@
 	PcxHeader pcx;
 	bool success;
 
+	if (pixelformat == 32) {
+		DEBUG(misc, 0, "Can't convert a 32bpp screenshot to PCX format. Please pick an other format.");
+		return false;
+	}
 	if (pixelformat != 8 || w == 0)
 		return false;
 
@@ -320,7 +354,7 @@
 	maxlines = clamp(65536 / w, 16, 128);
 
 	/* now generate the bitmap bits */
-	Pixel *buff = MallocT<Pixel>(w * maxlines); // by default generate 128 lines at a time.
+	uint8 *buff = MallocT<uint8>(w * maxlines); // by default generate 128 lines at a time.
 	if (buff == NULL) {
 		fclose(f);
 		return false;
@@ -339,14 +373,14 @@
 
 		/* write them to pcx */
 		for (i = 0; i != n; i++) {
-			const Pixel* bufp = buff + i * w;
+			const uint8 *bufp = buff + i * w;
 			byte runchar = bufp[0];
 			uint runcount = 1;
 			uint j;
 
 			/* for each pixel... */
 			for (j = 1; j < w; j++) {
-				Pixel ch = bufp[j];
+				uint8 ch = bufp[j];
 
 				if (ch != runchar || runcount >= 0x3f) {
 					if (runcount > 1 || (runchar & 0xC0) == 0xC0)
@@ -446,17 +480,15 @@
 }
 
 /* screenshot generator that dumps the current video buffer */
-static void CurrentScreenCallback(void *userdata, Pixel *buf, uint y, uint pitch, uint n)
+static void CurrentScreenCallback(void *userdata, void *buf, uint y, uint pitch, uint n)
 {
-	for (; n > 0; --n) {
-		memcpy(buf, _screen.dst_ptr + y * _screen.pitch, _screen.width * sizeof(Pixel));
-		++y;
-		buf += pitch;
-	}
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
+	void *src = blitter->MoveTo(_screen.dst_ptr, 0, y);
+	blitter->CopyImageToBuffer(src, buf, _screen.width, n, pitch);
 }
 
 /* generate a large piece of the world */
-static void LargeWorldCallback(void *userdata, Pixel *buf, uint y, uint pitch, uint n)
+static void LargeWorldCallback(void *userdata, void *buf, uint y, uint pitch, uint n)
 {
 	ViewPort *vp = (ViewPort *)userdata;
 	DrawPixelInfo dpi, *old_dpi;
@@ -491,29 +523,28 @@
 
 static char *MakeScreenshotName(const char *ext)
 {
-	static char filename[256];
-	char *base;
+	static char filename[MAX_PATH];
 	int serial;
+	size_t len;
 
 	if (_game_mode == GM_EDITOR || _game_mode == GM_MENU || _local_player == PLAYER_SPECTATOR) {
-		sprintf(_screenshot_name, "screenshot");
+		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));
 	}
 
-	base = strchr(_screenshot_name, 0);
-	base[0] = '.'; strcpy(base + 1, ext);
+	/* Add extension to screenshot file */
+	SanitizeFilename(_screenshot_name);
+	len = strlen(_screenshot_name);
+	snprintf(&_screenshot_name[len], lengthof(_screenshot_name) - len, ".%s", ext);
 
-	serial = 0;
-	for (;;) {
-		snprintf(filename, sizeof(filename), "%s%s", _paths.personal_dir, _screenshot_name);
-		if (!FileExists(filename))
-			break;
-		sprintf(base, " #%d.%s", ++serial, ext);
+	for (serial = 1;; serial++) {
+		snprintf(filename, lengthof(filename), "%s%s", _personal_dir, _screenshot_name);
+		if (!FileExists(filename)) break;
+		/* If file exists try another one with same name, but just with a higher index */
+		snprintf(&_screenshot_name[len], lengthof(_screenshot_name) - len, "#%d.%s", serial, ext);
 	}
 
 	return filename;
@@ -532,7 +563,7 @@
 static bool MakeSmallScreenshot()
 {
 	const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format;
-	return sf->proc(MakeScreenshotName(sf->extension), CurrentScreenCallback, NULL, _screen.width, _screen.height, 8, _cur_palette);
+	return sf->proc(MakeScreenshotName(sf->extension), CurrentScreenCallback, NULL, _screen.width, _screen.height, BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth(), _cur_palette);
 }
 
 static bool MakeWorldScreenshot()
@@ -551,7 +582,7 @@
 	vp.height = vp.virtual_height;
 
 	sf = _screenshot_formats + _cur_screenshot_format;
-	return sf->proc(MakeScreenshotName(sf->extension), LargeWorldCallback, &vp, vp.width, vp.height, 8, _cur_palette);
+	return sf->proc(MakeScreenshotName(sf->extension), LargeWorldCallback, &vp, vp.width, vp.height, BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth(), _cur_palette);
 }
 
 bool MakeScreenshot()
--- a/src/settings.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/settings.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -46,6 +46,7 @@
 #include "gfx.h"
 #include "fontcache.h"
 #endif
+#include "spritecache.h"
 
 /** The patch values that are used for new games and/or modified in config file */
 Patches _patches_newgame;
@@ -1224,14 +1225,13 @@
 
 /* win32_v.c only settings */
 #ifdef WIN32
-extern bool _force_full_redraw, _double_size, _window_maximize;
+extern bool _force_full_redraw, _window_maximize;
 extern uint _display_hz, _fullscreen_bpp;
 
 static const SettingDescGlobVarList _win32_settings[] = {
 	 SDTG_VAR("display_hz",     SLE_UINT, S, 0, _display_hz,       0, 0, 120, 0, STR_NULL, NULL),
 	SDTG_BOOL("force_full_redraw",        S, 0, _force_full_redraw,false,        STR_NULL, NULL),
 	 SDTG_VAR("fullscreen_bpp", SLE_UINT, S, 0, _fullscreen_bpp,   8, 8,  32, 0, STR_NULL, NULL),
-	SDTG_BOOL("double_size",              S, 0, _double_size,      false,        STR_NULL, NULL),
 	SDTG_BOOL("window_maximize",          S, 0, _window_maximize,  false,        STR_NULL, NULL),
 	 SDTG_END()
 };
@@ -1256,7 +1256,11 @@
 	  SDTG_VAR("small_size",       SLE_UINT, S, 0, _freetype.small_size,   6, 0, 72, 0, STR_NULL, NULL),
 	  SDTG_VAR("medium_size",      SLE_UINT, S, 0, _freetype.medium_size, 10, 0, 72, 0, STR_NULL, NULL),
 	  SDTG_VAR("large_size",       SLE_UINT, S, 0, _freetype.large_size,  16, 0, 72, 0, STR_NULL, NULL),
+	 SDTG_BOOL("small_aa",                   S, 0, _freetype.small_aa,    false,    STR_NULL, NULL),
+	 SDTG_BOOL("medium_aa",                  S, 0, _freetype.medium_aa,   false,    STR_NULL, NULL),
+	 SDTG_BOOL("large_aa",                   S, 0, _freetype.large_aa,    false,    STR_NULL, NULL),
 #endif
+	  SDTG_VAR("sprite_cache_size",SLE_UINT, S, 0, _sprite_cache_size,     4, 1, 64, 0, STR_NULL, NULL),
 	  SDTG_END()
 };
 
@@ -1302,7 +1306,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),
@@ -1343,7 +1348,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 */
@@ -1376,10 +1384,11 @@
 	SDT_BOOL(Patches, autorenew,                     S, 0, false,                    STR_CONFIG_PATCHES_AUTORENEW_VEHICLE,    EngineRenewUpdate),
 	 SDT_VAR(Patches, autorenew_months,   SLE_INT16, S, 0,     6,   -12,      12, 0, STR_CONFIG_PATCHES_AUTORENEW_MONTHS,     EngineRenewMonthsUpdate),
 	 SDT_VAR(Patches, autorenew_money,     SLE_UINT, S,CR,100000,     0, 2000000, 0, STR_CONFIG_PATCHES_AUTORENEW_MONEY,      EngineRenewMoneyUpdate),
-	 SDT_VAR(Patches, max_trains,        SLE_UINT16, 0, 0,   500,     0,    5000, 0, STR_CONFIG_PATCHES_MAX_TRAINS,           NULL),
-	 SDT_VAR(Patches, max_roadveh,       SLE_UINT16, 0, 0,   500,     0,    5000, 0, STR_CONFIG_PATCHES_MAX_ROADVEH,          NULL),
-	 SDT_VAR(Patches, max_aircraft,      SLE_UINT16, 0, 0,   200,     0,    5000, 0, STR_CONFIG_PATCHES_MAX_AIRCRAFT,         NULL),
-	 SDT_VAR(Patches, max_ships,         SLE_UINT16, 0, 0,   300,     0,    5000, 0, STR_CONFIG_PATCHES_MAX_SHIPS,            NULL),
+	SDT_BOOL(Patches, always_build_infrastructure,   S, 0, false,                    STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE, RedrawScreen),
+	 SDT_VAR(Patches, max_trains,        SLE_UINT16, 0, 0,   500,     0,    5000, 0, STR_CONFIG_PATCHES_MAX_TRAINS,           RedrawScreen),
+	 SDT_VAR(Patches, max_roadveh,       SLE_UINT16, 0, 0,   500,     0,    5000, 0, STR_CONFIG_PATCHES_MAX_ROADVEH,          RedrawScreen),
+	 SDT_VAR(Patches, max_aircraft,      SLE_UINT16, 0, 0,   200,     0,    5000, 0, STR_CONFIG_PATCHES_MAX_AIRCRAFT,         RedrawScreen),
+	 SDT_VAR(Patches, max_ships,         SLE_UINT16, 0, 0,   300,     0,    5000, 0, STR_CONFIG_PATCHES_MAX_SHIPS,            RedrawScreen),
 	SDT_BOOL(Patches, servint_ispercent,             0, 0, false,                    STR_CONFIG_PATCHES_SERVINT_ISPERCENT,    CheckInterval),
 	 SDT_VAR(Patches, servint_trains,    SLE_UINT16, 0,D0,   150,     5,     800, 0, STR_CONFIG_PATCHES_SERVINT_TRAINS,       InValidateDetailsWindow),
 	 SDT_VAR(Patches, servint_roadveh,   SLE_UINT16, 0,D0,   150,     5,     800, 0, STR_CONFIG_PATCHES_SERVINT_ROADVEH,      InValidateDetailsWindow),
@@ -1389,6 +1398,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 */
@@ -1408,7 +1418,7 @@
 	/***************************************************************************/
 	/* Economy section of the GUI-configure patches window */
 	SDT_BOOL(Patches, inflation,                  0, 0,  true,            STR_CONFIG_PATCHES_INFLATION,        NULL),
-	SDT_BOOL(Patches, build_rawmaterial_ind,      0, 0, false,            STR_CONFIG_PATCHES_BUILDXTRAIND,     NULL),
+	 SDT_VAR(Patches, raw_industry_construction,SLE_UINT8,0,MS,0,0, 2, 0, STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD, NULL),
 	SDT_BOOL(Patches, multiple_industry_per_town, 0, 0, false,            STR_CONFIG_PATCHES_MULTIPINDTOWN,    NULL),
 	SDT_BOOL(Patches, same_industry_close,        0, 0, false,            STR_CONFIG_PATCHES_SAMEINDCLOSE,     NULL),
 	SDT_BOOL(Patches, bribe,                      0, 0,  true,            STR_CONFIG_PATCHES_BRIBE,            NULL),
@@ -1618,7 +1628,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') {
@@ -1695,7 +1705,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;
 	}
@@ -1762,7 +1772,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);
 
@@ -1778,7 +1788,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/settings_gui.cpp	Sat Jul 14 19:42: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,6 +67,46 @@
 	return buf;
 }
 
+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 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_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()
 {
 	int i;
@@ -105,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();
@@ -136,8 +177,14 @@
 			ShowDropDownMenu(w, _driveside_dropdown, _opt_ptr->road_side, 11, i, 0);
 		} return;
 		case 13: case 14: { /* Setup townname dropdown */
-			int i = _opt_ptr->town_name;
-			ShowDropDownMenu(w, BuildDynamicDropdown(STR_TOWNNAME_ORIGINAL_ENGLISH, SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1), i, 14, (_game_mode == GM_MENU) ? 0 : (-1) ^ (1 << i), 0);
+			uint sel = 0;
+			for (uint i = 0; _town_names[i] != INVALID_STRING_ID; i++) {
+				if (_town_names[i] == TownName(_opt_ptr->town_name)) {
+					sel = i;
+					break;
+				}
+			}
+			ShowDropDownMenu(w, _town_names, sel, 14, (_game_mode == GM_MENU) ? 0 : (-1) ^ (1 << sel), 0);
 			return;
 		}
 		case 16: case 17: /* Setup autosave dropdown */
@@ -193,7 +240,12 @@
 			break;
 		case 14: /* Town names */
 			if (_game_mode == GM_MENU) {
-				_opt_ptr->town_name = e->we.dropdown.index;
+				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;
@@ -230,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. */
@@ -240,7 +292,7 @@
 		_opt_ptr->road_side = p1;
 		InvalidateWindow(WC_GAME_OPTIONS,0);
 	}
-	return 0;
+	return CommandCost();
 }
 
 static const Widget _game_options_widgets[] = {
@@ -600,6 +652,10 @@
 	"scrollwheel_multiplier",
 	"pause_on_newgame",
 	"advanced_vehicle_list",
+	"loading_indicators",
+	"timetable_in_ticks",
+	"default_rail_type",
+	"always_build_infrastructure",
 };
 
 static const char *_patches_construction[] = {
@@ -631,7 +687,7 @@
 
 static const char *_patches_economy[] = {
 	"inflation",
-	"build_rawmaterial_ind",
+	"raw_industry_construction",
 	"multiple_industry_per_town",
 	"same_industry_close",
 	"bribe",
@@ -683,6 +739,7 @@
 	"wagon_speed_limits",
 	"disable_elrails",
 	"freight_trains",
+	"timetabling",
 };
 
 struct PatchEntry {
@@ -925,7 +982,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},
@@ -937,7 +994,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.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/ship.h	Sat Jul 14 19:42:58 2007 +0000
@@ -46,6 +46,8 @@
 	WindowClass GetVehicleListWindowClass() const { return WC_SHIPS_LIST; }
 	void PlayLeaveStationSound() const;
 	bool IsPrimaryVehicle() const { return true; }
+	int GetImage(Direction direction) const;
+	void Tick();
 };
 
 #endif /* SHIP_H */
--- a/src/ship_cmd.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/ship_cmd.cpp	Sat Jul 14 19:42: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"
@@ -89,15 +90,15 @@
 	height = spr->height;
 }
 
-int GetShipImage(const Vehicle* v, Direction direction)
+int Ship::GetImage(Direction direction) const
 {
-	int spritenum = v->spritenum;
+	int spritenum = this->spritenum;
 
 	if (is_custom_sprite(spritenum)) {
-		int sprite = GetCustomVehicleSprite(v, direction);
+		int sprite = GetCustomVehicleSprite(this, direction);
 
 		if (sprite != 0) return sprite;
-		spritenum = orig_ship_vehicle_info[v->engine_type - SHIP_ENGINES_INDEX].image_index;
+		spritenum = orig_ship_vehicle_info[this->engine_type - SHIP_ENGINES_INDEX].image_index;
 	}
 	return _ship_sprites[spritenum] + direction;
 }
@@ -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 */
@@ -232,7 +233,7 @@
 
 void Ship::MarkDirty()
 {
-	this->cur_image = GetShipImage(this, this->direction);
+	this->cur_image = this->GetImage(this->direction);
 	MarkAllViewportsDirty(this->left_coord, this->top_coord, this->right_coord + 1, this->bottom_coord + 1);
 }
 
@@ -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;
@@ -280,7 +282,8 @@
 
 	if (order->type  == v->current_order.type &&
 			order->flags == v->current_order.flags &&
-			order->dest  == v->current_order.dest)
+			order->dest  == v->current_order.dest &&
+			(order->type != OT_GOTO_STATION || GetStation(order->dest)->dock_tile != 0))
 		return;
 
 	v->current_order = *order;
@@ -294,6 +297,8 @@
 		st = GetStation(order->dest);
 		if (st->dock_tile != 0) {
 			v->dest_tile = TILE_ADD(st->dock_tile, ToTileIndexDiff(GetDockOffset(st->dock_tile)));
+		} else {
+			v->cur_order_index++;
 		}
 	} else if (order->type == OT_GOTO_DEPOT) {
 		v->dest_tile = GetDepot(order->dest)->xy;
@@ -332,7 +337,7 @@
 void RecalcShipStuff(Vehicle *v)
 {
 	v->UpdateDeltaXY(v->direction);
-	v->cur_image = GetShipImage(v, v->direction);
+	v->cur_image = v->GetImage(v->direction);
 	v->MarkDirty();
 	InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
 }
@@ -400,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)
@@ -645,6 +650,7 @@
 	TrackBits tracks;
 
 	v->tick_counter++;
+	v->current_order_time++;
 
 	if (v->breakdown_ctr != 0) {
 		if (v->breakdown_ctr <= 2) {
@@ -690,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);
@@ -763,7 +770,7 @@
 
 getout:
 	v->UpdateDeltaXY(dir);
-	v->cur_image = GetShipImage(v, dir);
+	v->cur_image = v->GetImage(dir);
 	VehiclePositionChanged(v);
 	EndVehicleMove(v);
 	return;
@@ -777,13 +784,13 @@
 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)
+void Ship::Tick()
 {
-	AgeShipCargo(v);
-	ShipController(v);
+	AgeShipCargo(this);
+	ShipController(this);
 }
 
 
@@ -806,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;
@@ -854,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;
@@ -887,7 +894,7 @@
 		RebuildVehicleLists();
 		InvalidateWindow(WC_COMPANY, v->owner);
 		if (IsLocalPlayer())
-			InvalidateAutoreplaceWindow(VEH_SHIP); // updates the replace Ship window
+			InvalidateAutoreplaceWindow(VEH_SHIP, v->group_id); // updates the replace Ship window
 
 		GetPlayer(_current_player)->num_engines[p1]++;
 	}
@@ -901,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;
 
@@ -926,7 +933,7 @@
 		DeleteVehicle(v);
 	}
 
-	return -(int32)v->value;
+	return CommandCost(-v->value);
 }
 
 /** Start/Stop a ship.
@@ -935,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;
@@ -965,7 +972,7 @@
 		InvalidateWindowClasses(WC_SHIPS_LIST);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Send a ship to the depot.
@@ -976,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;
@@ -1007,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
@@ -1021,7 +1028,7 @@
 			v->current_order.flags = 0;
 			InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 		}
-		return 0;
+		return CommandCost();
 	}
 
 	dep = FindClosestShipDepot(v);
@@ -1039,7 +1046,7 @@
 		InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -1053,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;
@@ -1097,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/ship_gui.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -19,7 +19,7 @@
 
 void DrawShipImage(const Vehicle *v, int x, int y, VehicleID selection)
 {
-	DrawSprite(GetShipImage(v, DIR_W), GetVehiclePalette(v), x + 32, y + 10);
+	DrawSprite(v->GetImage(DIR_W), GetVehiclePalette(v), x + 32, y + 10);
 
 	if (v->index == selection) {
 		DrawFrameRect(x - 5, y - 1, x + 67, y + 21, 15, FR_BORDERONLY);
@@ -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 */
@@ -56,7 +55,7 @@
 
 		/* Draw max speed */
 		{
-			SetDParam(0, v->max_speed / 2);
+			SetDParam(0, v->max_speed * 10 / 32);
 			DrawString(2, 25, STR_9813_MAX_SPEED, 0);
 		}
 
@@ -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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/signs.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -39,7 +39,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);
 }
 
@@ -122,7 +122,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;
 
@@ -147,7 +147,7 @@
 		_new_sign = si;
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /** Rename a sign. If the new name of the sign is empty, we assume
@@ -159,7 +159,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;
 
@@ -201,7 +201,7 @@
 		}
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 /**
--- a/src/signs.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/signs.h	Sat Jul 14 19:42:58 2007 +0000
@@ -64,7 +64,7 @@
 void UpdateAllSignVirtCoords();
 void PlaceProc_Sign(TileIndex tile);
 
-/* misc.cpp */
+/* signs_gui.cpp */
 void ShowRenameSignWindow(const Sign *si);
 
 void ShowSignList();
--- a/src/signs_gui.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/signs_gui.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -16,6 +16,7 @@
 #include "debug.h"
 #include "variables.h"
 #include "helpers.hpp"
+#include "command.h"
 
 static const Sign **_sign_sort;
 static uint _num_sign_sort;
@@ -88,7 +89,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;
 			}
 		}
@@ -150,3 +152,172 @@
 		w->resize.height = w->height - 10 * 7; // minimum if 5 in the list
 	}
 }
+
+/* Edit sign window stuff */
+
+struct editsign_d : querystr_d {
+	SignID cur_sign;
+};
+
+static char _edit_str_buf[64];
+
+enum QueryEditSignWidgets {
+	QUERY_EDIT_SIGN_WIDGET_TEXT = 3,
+	QUERY_EDIT_SIGN_WIDGET_OK,
+	QUERY_EDIT_SIGN_WIDGET_CANCEL,
+	QUERY_EDIT_SIGN_WIDGET_DELETE,
+	QUERY_EDIT_SIGN_WIDGET_PREVIOUS = QUERY_EDIT_SIGN_WIDGET_DELETE + 2,
+	QUERY_EDIT_SIGN_WIDGET_NEXT,
+};
+
+static void UpdateSignEditWindow(Window *w, const Sign *si)
+{
+	/* Display an empty string when the sign hasnt been edited yet */
+	if (si->str != STR_280A_SIGN) {
+		SetDParam(0, si->index);
+		GetString(_edit_str_buf, STR_SIGN_NAME, lastof(_edit_str_buf));
+	} else {
+		GetString(_edit_str_buf, STR_EMPTY, lastof(_edit_str_buf));
+	}
+	_edit_str_buf[lengthof(_edit_str_buf) - 1] = '\0';
+
+	WP(w, editsign_d).cur_sign = si->index;
+	InitializeTextBuffer(&WP(w, querystr_d).text, _edit_str_buf, 31, 255); // Allow 31 characters (including \0)
+
+	InvalidateWidget(w, QUERY_EDIT_SIGN_WIDGET_TEXT);
+}
+
+static void RenameSign(SignID index, const char *text)
+{
+	_cmd_text = text;
+	DoCommandP(0, index, 0, NULL, CMD_RENAME_SIGN | CMD_MSG(STR_280C_CAN_T_CHANGE_SIGN_NAME));
+}
+
+static void QuerySignEditWndProc(Window *w, WindowEvent *e)
+{
+	editsign_d *qs = &WP(w, editsign_d);
+	Sign       *si;
+	uint       sign_index = 0;
+
+	switch (e->event) {
+		case WE_CREATE:
+			SETBIT(_no_scroll, SCROLL_EDIT);
+			break;
+
+		case WE_PAINT:
+			SetDParam(0, qs->caption);
+			DrawWindowWidgets(w);
+			DrawEditBox(w, qs, QUERY_EDIT_SIGN_WIDGET_TEXT);
+			break;
+
+		case WE_CLICK:
+			switch (e->we.click.widget) {
+				case QUERY_EDIT_SIGN_WIDGET_PREVIOUS:
+					if (_sign_sort_dirty) GlobalSortSignList();
+					sign_index = _sign_sort[_num_sign_sort - 1]->index;
+					for (uint i = 1; i < _num_sign_sort; i++) {
+						if (qs->cur_sign == _sign_sort[i]->index) {
+							sign_index = _sign_sort[i - 1]->index;
+							break;
+						}
+					}
+					si = GetSign(sign_index);
+
+					/* Scroll to sign and reopen window */
+					ScrollMainWindowToTile(TileVirtXY(si->x, si->y));
+					UpdateSignEditWindow(w, si);
+					break;
+
+				case QUERY_EDIT_SIGN_WIDGET_NEXT:
+					if (_sign_sort_dirty) GlobalSortSignList();
+					sign_index = _sign_sort[0]->index;
+					for (uint i = 0; i < _num_sign_sort-1; i++) {
+						if (qs->cur_sign == _sign_sort[i]->index) {
+							sign_index = _sign_sort[i + 1]->index;
+							break;
+						}
+					}
+					si = GetSign(sign_index);
+
+					/* Scroll to sign and reopen window */
+					ScrollMainWindowToTile(TileVirtXY(si->x, si->y));
+					UpdateSignEditWindow(w, si);
+					break;
+
+				case QUERY_EDIT_SIGN_WIDGET_DELETE:
+					/* Only need to set the buffer to null, the rest is handled as the OK button */
+					DeleteTextBufferAll(&qs->text);
+					/* FALL THROUGH */
+
+				case QUERY_EDIT_SIGN_WIDGET_OK:
+					RenameSign(qs->cur_sign, qs->text.buf);
+					/* FALL THROUGH */
+
+				case QUERY_EDIT_SIGN_WIDGET_CANCEL:
+					DeleteWindow(w);
+					break;
+			}
+			break;
+
+		case WE_KEYPRESS:
+			switch (HandleEditBoxKey(w, qs, QUERY_EDIT_SIGN_WIDGET_TEXT, e)) {
+				case 1: // Enter pressed, confirms change
+					RenameSign(qs->cur_sign, qs->text.buf);
+					/* FALL THROUGH */
+
+				case 2: // ESC pressed, closes window, abandons changes
+					DeleteWindow(w);
+					break;
+			}
+			break;
+
+		case WE_MOUSELOOP:
+			HandleEditBox(w, qs, QUERY_EDIT_SIGN_WIDGET_TEXT);
+			break;
+
+		case WE_DESTROY:
+			CLRBIT(_no_scroll, SCROLL_EDIT);
+			break;
+	}
+}
+
+static const Widget _query_sign_edit_widgets[] = {
+{ WWT_CLOSEBOX, RESIZE_NONE,  14,   0,  10,   0,  13, STR_00C5,        STR_018B_CLOSE_WINDOW},
+{  WWT_CAPTION, RESIZE_NONE,  14,  11, 259,   0,  13, STR_012D,        STR_NULL },
+{    WWT_PANEL, RESIZE_NONE,  14,   0, 259,  14,  29, STR_NULL,        STR_NULL },
+{    WWT_PANEL, RESIZE_NONE,  14,   2, 257,  16,  27, STR_NULL,        STR_NULL },  // Text field
+{  WWT_TEXTBTN, RESIZE_NONE,  14,   0,  60,  30,  41, STR_012F_OK,     STR_NULL },
+{  WWT_TEXTBTN, RESIZE_NONE,  14,  61, 120,  30,  41, STR_012E_CANCEL, STR_NULL },
+{  WWT_TEXTBTN, RESIZE_NONE,  14, 121, 180,  30,  41, STR_0290_DELETE, STR_NULL },
+{    WWT_PANEL, RESIZE_NONE,  14, 181, 237,  30,  41, STR_NULL,        STR_NULL },
+{  WWT_TEXTBTN, RESIZE_NONE,  14, 238, 248,  30,  41, STR_6819,        STR_PREVIOUS_SIGN_TOOLTIP },
+{  WWT_TEXTBTN, RESIZE_NONE,  14, 249, 259,  30,  41, STR_681A,        STR_NEXT_SIGN_TOOLTIP },
+{ WIDGETS_END },
+};
+
+static const WindowDesc _query_sign_edit_desc = {
+	190, 170, 260, 42,
+	WC_QUERY_STRING, WC_NONE,
+	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
+	_query_sign_edit_widgets,
+	QuerySignEditWndProc
+};
+
+void ShowRenameSignWindow(const Sign *si)
+{
+	Window *w;
+
+	/* Delete all other edit windows and the save window */
+	DeleteWindowById(WC_QUERY_STRING, 0);
+	DeleteWindowById(WC_SAVELOAD, 0);
+
+	w = AllocateWindowDesc(&_query_sign_edit_desc);
+
+	WP(w, editsign_d).caption = STR_280B_EDIT_SIGN_TEXT;
+	WP(w, editsign_d).afilter = CS_ALPHANUMERAL;
+	LowerWindowWidget(w, QUERY_EDIT_SIGN_WIDGET_TEXT);
+
+	UpdateSignEditWindow(w, si);
+}
+
+
--- a/src/smallmap_gui.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/smallmap_gui.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -25,6 +25,7 @@
 #include "town.h"
 #include "sound.h"
 #include "variables.h"
+#include "blitter/factory.hpp"
 
 static const Widget _smallmap_widgets[] = {
 {  WWT_CLOSEBOX,   RESIZE_NONE,    13,     0,    10,     0,    13, STR_00C5,                STR_018B_CLOSE_WINDOW},
@@ -167,41 +168,27 @@
 	_legend_land_owners,
 };
 
-#if defined(OTTD_ALIGNMENT)
-	static inline void WRITE_PIXELS(Pixel* d, uint32 val)
-	{
-#	if defined(TTD_BIG_ENDIAN)
-		d[0] = GB(val, 24, 8);
-		d[1] = GB(val, 16, 8);
-		d[2] = GB(val,  8, 8);
-		d[3] = GB(val,  0, 8);
-#	elif defined(TTD_LITTLE_ENDIAN)
-		d[0] = GB(val,  0, 8);
-		d[1] = GB(val,  8, 8);
-		d[2] = GB(val, 16, 8);
-		d[3] = GB(val, 24, 8);
-#	endif
-	}
+static inline void WRITE_PIXELS(void *d, uint32 val)
+{
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
+	uint8 *val8 = (uint8 *)&val;
 
-/* need to use OR, otherwise we will overwrite the wrong pixels at the edges :( */
-	static inline void WRITE_PIXELS_OR(Pixel *d, uint32 val)
-	{
-#	if defined(TTD_BIG_ENDIAN)
-		d[0] |= GB(val, 24, 8);
-		d[1] |= GB(val, 16, 8);
-		d[2] |= GB(val,  8, 8);
-		d[3] |= GB(val,  0, 8);
-#	elif defined(TTD_LITTLE_ENDIAN)
-		d[0] |= GB(val,  0, 8);
-		d[1] |= GB(val,  8, 8);
-		d[2] |= GB(val, 16, 8);
-		d[3] |= GB(val, 24, 8);
-#	endif
-	}
-#else
-#	define WRITE_PIXELS(dst, val)   *(uint32*)(dst) = (val);
-#	define WRITE_PIXELS_OR(dst,val) *(uint32*)(dst) |= (val);
-#endif
+	blitter->SetPixel(d, 0, 0, val8[0]);
+	blitter->SetPixel(d, 1, 0, val8[1]);
+	blitter->SetPixel(d, 2, 0, val8[2]);
+	blitter->SetPixel(d, 3, 0, val8[3]);
+}
+
+static inline void WRITE_PIXELS_OR(void *d, uint32 val)
+{
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
+	uint8 *val8 = (uint8 *)&val;
+
+	blitter->SetPixelIfEmpty(d, 0, 0, val8[0]);
+	blitter->SetPixelIfEmpty(d, 1, 0, val8[1]);
+	blitter->SetPixelIfEmpty(d, 2, 0, val8[2]);
+	blitter->SetPixelIfEmpty(d, 3, 0, val8[3]);
+}
 
 #define MKCOLOR(x) TO_LE32X(x)
 
@@ -296,9 +283,10 @@
  * @param proc Pointer to the colour function
  * @see GetSmallMapPixels(TileIndex)
  */
-static void DrawSmallMapStuff(Pixel *dst, uint xc, uint yc, int pitch, int reps, uint32 mask, GetSmallMapPixels *proc)
+static void DrawSmallMapStuff(void *dst, uint xc, uint yc, int pitch, int reps, uint32 mask, GetSmallMapPixels *proc)
 {
-	Pixel *dst_ptr_end = _screen.dst_ptr + _screen.width * _screen.height - _screen.width;
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
+	void *dst_ptr_end = blitter->MoveTo(_screen.dst_ptr, _screen.width, _screen.height - 1);
 
 	do {
 		/* check if the tile (xc,yc) is within the map range */
@@ -308,7 +296,7 @@
 				WRITE_PIXELS_OR(dst, proc(TileXY(xc, yc)) & mask);
 		}
 	/* switch to next tile in the column */
-	} while (xc++, yc++, dst += pitch, --reps != 0);
+	} while (xc++, yc++, dst = blitter->MoveTo(dst, pitch, 0), --reps != 0);
 }
 
 
@@ -528,9 +516,10 @@
  */
 static void DrawSmallMap(DrawPixelInfo *dpi, Window *w, int type, bool show_towns)
 {
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
 	DrawPixelInfo *old_dpi;
 	int dx,dy, x, y, x2, y2;
-	Pixel *ptr;
+	void *ptr;
 	int tile_x;
 	int tile_y;
 	ViewPort *vp;
@@ -582,7 +571,7 @@
 		}
 	}
 
-	ptr = dpi->dst_ptr - dx - 4;
+	ptr = blitter->MoveTo(dpi->dst_ptr, -dx - 4, 0);
 	x = - dx - 4;
 	y = 0;
 
@@ -609,7 +598,6 @@
 		/* number of lines */
 		reps = (dpi->height - y + 1) / 2;
 		if (reps > 0) {
-//			assert(ptr >= dpi->dst_ptr);
 			DrawSmallMapStuff(ptr, tile_x, tile_y, dpi->pitch * 2, reps, mask, _smallmap_draw_procs[type]);
 		}
 
@@ -617,13 +605,13 @@
 		if (y == 0) {
 			tile_y++;
 			y++;
-			ptr += dpi->pitch;
+			ptr = blitter->MoveTo(ptr, 0, 1);
 		} else {
 			tile_x--;
 			y--;
-			ptr -= dpi->pitch;
+			ptr = blitter->MoveTo(ptr, 0, -1);
 		}
-		ptr += 2;
+		ptr = blitter->MoveTo(ptr, 2, 0);
 		x += 2;
 	}
 
@@ -666,12 +654,11 @@
 				}
 
 				/* Calculate pointer to pixel and the color */
-				ptr = dpi->dst_ptr + y * dpi->pitch + x;
 				color = (type == 1) ? _vehicle_type_colors[v->type] : 0xF;
 
 				/* And draw either one or two pixels depending on clipping */
-				ptr[0] = color;
-				if (!skip) ptr[1] = color;
+				blitter->SetPixel(dpi->dst_ptr, x, y, color);
+				if (!skip) blitter->SetPixel(dpi->dst_ptr, x + 1, y, color);
 			}
 		}
 	}
--- a/src/sound.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/sound.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -152,7 +152,7 @@
 }
 
 
-static const byte _vol_factor_by_zoom[] = {255, 190, 134, 87, 49};
+static const byte _vol_factor_by_zoom[] = {255, 190, 134, 87};
 assert_compile(lengthof(_vol_factor_by_zoom) == ZOOM_LVL_END);
 
 static const byte _sound_base_vol[] = {
@@ -211,7 +211,7 @@
 
 			StartSound(
 				sound,
-				left / (vp->virtual_width / ((PANNING_LEVELS << 1) + 1)) - PANNING_LEVELS,
+				left / max(1, vp->virtual_width / ((PANNING_LEVELS << 1) + 1)) - PANNING_LEVELS,
 				(GetSound(sound)->volume * msf.effect_vol * _vol_factor_by_zoom[vp->zoom]) >> 15
 			);
 			return;
--- a/src/sound/cocoa_s.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/sound/cocoa_s.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -36,6 +36,7 @@
 #undef Point
 #undef Rect
 
+static FSoundDriver_Cocoa iFSoundDriver_Cocoa;
 
 static AudioUnit _outputAudioUnit;
 
@@ -48,7 +49,7 @@
 }
 
 
-static const char *CocoaSoundStart(const char * const *parm)
+const char *SoundDriver_Cocoa::Start(const char * const *parm)
 {
 	Component comp;
 	ComponentDescription desc;
@@ -116,7 +117,7 @@
 }
 
 
-static void CocoaSoundStop()
+void SoundDriver_Cocoa::Stop()
 {
 	struct AudioUnitInputCallback callback;
 
@@ -140,10 +141,4 @@
 	}
 }
 
-
-const HalSoundDriver _cocoa_sound_driver = {
-	CocoaSoundStart,
-	CocoaSoundStop,
-};
-
 #endif /* WITH_COCOA */
--- a/src/sound/cocoa_s.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/sound/cocoa_s.h	Sat Jul 14 19:42:58 2007 +0000
@@ -3,8 +3,21 @@
 #ifndef SOUND_COCOA_H
 #define SOUND_COCOA_H
 
-#include "../hal.h"
+#include "sound_driver.hpp"
 
-extern const HalSoundDriver _cocoa_sound_driver;
+class SoundDriver_Cocoa: public SoundDriver {
+public:
+	/* virtual */ const char *Start(const char * const *param);
+
+	/* virtual */ void Stop();
+};
+
+class FSoundDriver_Cocoa: public SoundDriverFactory<FSoundDriver_Cocoa> {
+public:
+	static const int priority = 10;
+	/* virtual */ const char *GetName() { return "cocoa"; }
+	/* virtual */ const char *GetDescription() { return "Cocoa Sound Driver"; }
+	/* virtual */ Driver *CreateInstance() { return new SoundDriver_Cocoa(); }
+};
 
 #endif /* SOUND_COCOA_H */
--- a/src/sound/null_s.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/sound/null_s.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -3,10 +3,4 @@
 #include "../stdafx.h"
 #include "null_s.h"
 
-static const char *NullSoundStart(const char * const *parm) { return NULL; }
-static void NullSoundStop() {}
-
-const HalSoundDriver _null_sound_driver = {
-	NullSoundStart,
-	NullSoundStop,
-};
+static FSoundDriver_Null iFSoundDriver_Null;
--- a/src/sound/null_s.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/sound/null_s.h	Sat Jul 14 19:42:58 2007 +0000
@@ -3,8 +3,21 @@
 #ifndef SOUND_NULL_H
 #define SOUND_NULL_H
 
-#include "../hal.h"
+#include "sound_driver.hpp"
 
-extern const HalSoundDriver _null_sound_driver;
+class SoundDriver_Null: public SoundDriver {
+public:
+	/* virtual */ const char *Start(const char * const *param) { return NULL; }
+
+	/* virtual */ void Stop() { }
+};
+
+class FSoundDriver_Null: public SoundDriverFactory<FSoundDriver_Null> {
+public:
+	static const int priority = 0;
+	/* virtual */ const char *GetName() { return "null"; }
+	/* virtual */ const char *GetDescription() { return "Null Sound Driver"; }
+	/* virtual */ Driver *CreateInstance() { return new SoundDriver_Null(); }
+};
 
 #endif /* SOUND_NULL_H */
--- a/src/sound/sdl_s.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/sound/sdl_s.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -10,12 +10,14 @@
 #include "sdl_s.h"
 #include <SDL.h>
 
+static FSoundDriver_SDL iFSoundDriver_SDL;
+
 static void CDECL fill_sound_buffer(void *userdata, Uint8 *stream, int len)
 {
 	MxMixSamples(stream, len / 4);
 }
 
-static const char *SdlSoundStart(const char * const *parm)
+const char *SoundDriver_SDL::Start(const char * const *parm)
 {
 	SDL_AudioSpec spec;
 
@@ -32,15 +34,10 @@
 	return NULL;
 }
 
-static void SdlSoundStop()
+void SoundDriver_SDL::Stop()
 {
 	SDL_CALL SDL_CloseAudio();
 	SdlClose(SDL_INIT_AUDIO);
 }
 
-const HalSoundDriver _sdl_sound_driver = {
-	SdlSoundStart,
-	SdlSoundStop,
-};
-
 #endif /* WITH_SDL */
--- a/src/sound/sdl_s.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/sound/sdl_s.h	Sat Jul 14 19:42:58 2007 +0000
@@ -3,8 +3,21 @@
 #ifndef SOUND_SDL_H
 #define SOUND_SDL_H
 
-#include "../hal.h"
+#include "sound_driver.hpp"
 
-extern const HalSoundDriver _sdl_sound_driver;
+class SoundDriver_SDL: public SoundDriver {
+public:
+	/* virtual */ const char *Start(const char * const *param);
+
+	/* virtual */ void Stop();
+};
+
+class FSoundDriver_SDL: public SoundDriverFactory<FSoundDriver_SDL> {
+public:
+	static const int priority = 5;
+	/* virtual */ const char *GetName() { return "sdl"; }
+	/* virtual */ const char *GetDescription() { return "SDL Sound Driver"; }
+	/* virtual */ Driver *CreateInstance() { return new SoundDriver_SDL(); }
+};
 
 #endif /* SOUND_SDL_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/sound/sound_driver.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,27 @@
+/* $Id$ */
+
+#ifndef SOUND_SOUND_DRIVER_HPP
+#define SOUND_SOUND_DRIVER_HPP
+
+#include "../driver.h"
+
+class SoundDriver: public Driver {
+};
+
+class SoundDriverFactoryBase: public DriverFactoryBase {
+};
+
+template <class T>
+class SoundDriverFactory: public SoundDriverFactoryBase {
+public:
+	SoundDriverFactory() { this->RegisterDriver(((T *)this)->GetName(), Driver::DT_SOUND, ((T *)this)->priority); }
+
+	/**
+	 * Get the long, human readable, name for the Driver-class.
+	 */
+	const char *GetName();
+};
+
+extern SoundDriver *_sound_driver;
+
+#endif /* SOUND_SOUND_DRIVER_HPP */
--- a/src/sound/win32_s.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/sound/win32_s.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -10,6 +10,8 @@
 #include <windows.h>
 #include <mmsystem.h>
 
+static FSoundDriver_Win32 iFSoundDriver_Win32;
+
 static HWAVEOUT _waveout;
 static WAVEHDR _wave_hdr[2];
 static int _bufsize;
@@ -48,7 +50,7 @@
 	}
 }
 
-static const char *Win32SoundStart(const char* const* parm)
+const char *SoundDriver_Win32::Start(const char* const* parm)
 {
 	WAVEFORMATEX wfex;
 	wfex.wFormatTag = WAVE_FORMAT_PCM;
@@ -69,7 +71,7 @@
 	return NULL;
 }
 
-static void Win32SoundStop()
+void SoundDriver_Win32::Stop()
 {
 	HWAVEOUT waveout = _waveout;
 
@@ -79,8 +81,3 @@
 	waveOutUnprepareHeader(waveout, &_wave_hdr[1], sizeof(WAVEHDR));
 	waveOutClose(waveout);
 }
-
-const HalSoundDriver _win32_sound_driver = {
-	Win32SoundStart,
-	Win32SoundStop,
-};
--- a/src/sound/win32_s.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/sound/win32_s.h	Sat Jul 14 19:42:58 2007 +0000
@@ -3,8 +3,21 @@
 #ifndef SOUND_WIN32_H
 #define SOUND_WIN32_H
 
-#include "../hal.h"
+#include "sound_driver.hpp"
 
-extern const HalSoundDriver _win32_sound_driver;
+class SoundDriver_Win32: public SoundDriver {
+public:
+	/* virtual */ const char *Start(const char * const *param);
+
+	/* virtual */ void Stop();
+};
+
+class FSoundDriver_Win32: public SoundDriverFactory<FSoundDriver_Win32> {
+public:
+	static const int priority = 10;
+	/* virtual */ const char *GetName() { return "win32"; }
+	/* virtual */ const char *GetDescription() { return "Win32 WaveOut Driver"; }
+	/* virtual */ Driver *CreateInstance() { return new SoundDriver_Win32(); }
+};
 
 #endif /* SOUND_WIN32_H */
--- a/src/spritecache.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/spritecache.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -4,6 +4,8 @@
 
 #include "stdafx.h"
 #include "openttd.h"
+#include "variables.h"
+#include "string.h"
 #include "debug.h"
 #include "functions.h"
 #include "macros.h"
@@ -11,16 +13,22 @@
 #include "table/sprites.h"
 #include "fileio.h"
 #include "helpers.hpp"
+#include "spriteloader/grf.hpp"
+#ifdef WITH_PNG
+#include "spriteloader/png.hpp"
+#endif /* WITH_PNG */
+#include "blitter/factory.hpp"
 
-#ifndef SPRITE_CACHE_SIZE
-# define SPRITE_CACHE_SIZE 2*1024*1024
-#endif /* SPRITE_CACHE_SIZE */
+/* Default of 4MB spritecache */
+uint _sprite_cache_size = 4;
 
 
 struct SpriteCache {
 	void *ptr;
 	uint32 file_pos;
 	int16 lru;
+	uint32 id;
+	const char *grf_name;
 };
 
 
@@ -115,12 +123,11 @@
 	return GetSpriteCache(id)->file_pos != 0;
 }
 
-static void* AllocSprite(size_t);
+void* AllocSprite(size_t);
 
-static void* ReadSprite(SpriteCache *sc, SpriteID id)
+static void* ReadSprite(SpriteCache *sc, SpriteID id, bool real_sprite)
 {
-	uint num;
-	byte type;
+	uint32 file_pos = sc->file_pos;
 
 	DEBUG(sprite, 9, "Load sprite %d", id);
 
@@ -129,31 +136,72 @@
 
 		/* SPR_IMG_QUERY is a BIG FAT RED ? */
 		id = SPR_IMG_QUERY;
-		sc = GetSpriteCache(SPR_IMG_QUERY);
+		file_pos = GetSpriteCache(SPR_IMG_QUERY)->file_pos;
 	}
 
-	FioSeekToFile(sc->file_pos);
+	if (BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() == 32) {
+#ifdef WITH_PNG
+		/* Try loading 32bpp graphics in case we are 32bpp output */
+		SpriteLoaderPNG sprite_loader;
+		SpriteLoader::Sprite sprite;
 
-	num  = FioReadWord();
-	type = FioReadByte();
+		if (sprite_loader.LoadSprite(&sprite, sc->grf_name, sc->id)) {
+			sc->ptr = BlitterFactoryBase::GetCurrentBlitter()->Encode(&sprite, &AllocSprite);
+			free(sprite.data);
+
+			return sc->ptr;
+		}
+		/* If the PNG couldn't be loaded, fall back to 8bpp grfs */
+#else
+		static bool show_once = true;
+		if (show_once) {
+			DEBUG(misc, 0, "You are running a 32bpp blitter, but this build is without libpng support; falling back to 8bpp graphics");
+			show_once = false;
+		}
+#endif /* WITH_PNG */
+	}
+
+	FioSeekToFile(file_pos);
+
+	/* Read the size and type */
+	int num  = FioReadWord();
+	byte type = FioReadByte();
+	/* Type 0xFF indicates either a colormap or some other non-sprite info */
 	if (type == 0xFF) {
-		byte* dest = (byte*)AllocSprite(num);
+		if (real_sprite) {
+			static byte warning_level = 0;
+			DEBUG(sprite, warning_level, "Tried to load non sprite #%d as a real sprite. Probable cause: NewGRF interference", id);
+			warning_level = 6;
+			if (id == SPR_IMG_QUERY) error("Uhm, would you be so kind not to load a NewGRF that makes the 'query' sprite a non- sprite?");
+			return (void*)GetSprite(SPR_IMG_QUERY);
+		}
+
+		byte *dest = (byte *)AllocSprite(num);
 
 		sc->ptr = dest;
 		FioReadBlock(dest, num);
 
-		return dest;
-	} else {
+		return sc->ptr;
+	}
+	/* Ugly hack to work around the problem that the old landscape
+	 *  generator assumes that those sprites are stored uncompressed in
+	 *  the memory, and they are only read directly by the code, never
+	 *  send to the blitter. So do not send it to the blitter (which will
+	 *  result in a data array in the format the blitter likes most), but
+	 *  read the data directly from disk and store that as sprite.
+	 * Ugly: yes. Other solution: no. Blame the original author or
+	 *  something ;) The image should really have been a data-stream
+	 *  (so type = 0xFF basicly). */
+	if (id >= 4845 && id <= 4881) {
 		uint height = FioReadByte();
 		uint width  = FioReadWord();
-		Sprite* sprite;
-		byte* dest;
+		Sprite *sprite;
+		byte *dest;
 
-		num = (type & 0x02) ? width * height : num - 8;
-		sprite = (Sprite*)AllocSprite(sizeof(*sprite) + num);
+		num = width * height;
+		sprite = (Sprite *)AllocSprite(sizeof(*sprite) + num);
 		sc->ptr = sprite;
-		sprite->info   = type;
-		sprite->height = (id != 142) ? height : 10; // Compensate for a TTD bug
+		sprite->height = height;
 		sprite->width  = width;
 		sprite->x_offs = FioReadWord();
 		sprite->y_offs = FioReadWord();
@@ -161,26 +209,39 @@
 		dest = sprite->data;
 		while (num > 0) {
 			int8 i = FioReadByte();
-
 			if (i >= 0) {
 				num -= i;
 				for (; i > 0; --i) *dest++ = FioReadByte();
 			} else {
 				const byte* rel = dest - (((i & 7) << 8) | FioReadByte());
-
 				i = -(i >> 3);
 				num -= i;
-
 				for (; i > 0; --i) *dest++ = *rel++;
 			}
 		}
 
-		return sprite;
+		return sc->ptr;
 	}
+
+	if (!real_sprite) {
+		static byte warning_level = 0;
+		DEBUG(sprite, warning_level, "Tried to load real sprite #%d as a non sprite. Probable cause: NewGRF interference", id);
+		warning_level = 6;
+	}
+
+	SpriteLoaderGrf sprite_loader;
+	SpriteLoader::Sprite sprite;
+
+	if (!sprite_loader.LoadSprite(&sprite, sc->grf_name, file_pos)) return NULL;
+	if (id == 142) sprite.height = 10; // Compensate for a TTD bug
+	sc->ptr = BlitterFactoryBase::GetCurrentBlitter()->Encode(&sprite, &AllocSprite);
+	free(sprite.data);
+
+	return sc->ptr;
 }
 
 
-bool LoadNextSprite(int load_index, byte file_index)
+bool LoadNextSprite(int load_index, byte file_index, uint file_sprite_id)
 {
 	SpriteCache *sc;
 	uint32 file_pos = FioGetPos() | (file_index << 24);
@@ -195,6 +256,20 @@
 	sc->file_pos = file_pos;
 	sc->ptr = NULL;
 	sc->lru = 0;
+	sc->id = file_sprite_id;
+
+	const char *fio_grf_name = FioGetFilename();
+	const char *t = strrchr(fio_grf_name, PATHSEPCHAR);
+	char *grf_name;
+	if (t == NULL) grf_name = strdup(fio_grf_name);
+	else           grf_name = strdup(t);
+	/* Make the string lowercase and strip extension */
+	char *t2 = strrchr(grf_name, '.');
+	if (t2 != NULL) *t2 = '\0';
+	strtolower(grf_name);
+
+	free((char *)sc->grf_name);
+	sc->grf_name = grf_name;
 
 	return true;
 }
@@ -207,6 +282,9 @@
 
 	scnew->file_pos = scold->file_pos;
 	scnew->ptr = NULL;
+	scnew->id = scold->id;
+	free((char *)scnew->grf_name);
+	scnew->grf_name = strdup(scold->grf_name);
 }
 
 
@@ -347,7 +425,7 @@
 	}
 }
 
-static void* AllocSprite(size_t mem_req)
+void* AllocSprite(size_t mem_req)
 {
 	mem_req += sizeof(MemBlock);
 
@@ -385,7 +463,7 @@
 }
 
 
-const void *GetRawSprite(SpriteID sprite)
+const void *GetRawSprite(SpriteID sprite, bool real_sprite)
 {
 	SpriteCache *sc;
 	void* p;
@@ -400,7 +478,7 @@
 	p = sc->ptr;
 
 	/* Load the sprite, if it is not loaded, yet */
-	if (p == NULL) p = ReadSprite(sc, sprite);
+	if (p == NULL) p = ReadSprite(sc, sprite, real_sprite);
 	return p;
 }
 
@@ -408,14 +486,15 @@
 void GfxInitSpriteMem()
 {
 	/* initialize sprite cache heap */
-	if (_spritecache_ptr == NULL) _spritecache_ptr = (MemBlock*)malloc(SPRITE_CACHE_SIZE);
+	if (_spritecache_ptr == NULL) _spritecache_ptr = (MemBlock*)malloc(_sprite_cache_size * 1024 * 1024);
 
 	/* A big free block */
-	_spritecache_ptr->size = (SPRITE_CACHE_SIZE - sizeof(MemBlock)) | S_FREE_MASK;
+	_spritecache_ptr->size = ((_sprite_cache_size * 1024 * 1024) - sizeof(MemBlock)) | S_FREE_MASK;
 	/* Sentinel block (identified by size == 0) */
 	NextBlock(_spritecache_ptr)->size = 0;
 
 	/* Reset the spritecache 'pool' */
+	for (uint i = 0; i < _spritecache_items; i++) free((char *)_spritecache[i].grf_name);
 	free(_spritecache);
 	_spritecache_items = 0;
 	_spritecache = NULL;
--- a/src/spritecache.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/spritecache.h	Sat Jul 14 19:42:58 2007 +0000
@@ -6,7 +6,6 @@
 #define SPRITECACHE_H
 
 struct Sprite {
-	byte info;
 	byte height;
 	uint16 width;
 	int16 x_offs;
@@ -14,23 +13,25 @@
 	byte data[VARARRAY_SIZE];
 };
 
-const void *GetRawSprite(SpriteID sprite);
+extern uint _sprite_cache_size;
+
+const void *GetRawSprite(SpriteID sprite, bool real_sprite);
 bool SpriteExists(SpriteID sprite);
 
 static inline const Sprite *GetSprite(SpriteID sprite)
 {
-	return (Sprite*)GetRawSprite(sprite);
+	return (Sprite*)GetRawSprite(sprite, true);
 }
 
 static inline const byte *GetNonSprite(SpriteID sprite)
 {
-	return (byte*)GetRawSprite(sprite);
+	return (byte*)GetRawSprite(sprite, false);
 }
 
 void GfxInitSpriteMem();
 void IncreaseSpriteLRU();
 
-bool LoadNextSprite(int load_index, byte file_index);
+bool LoadNextSprite(int load_index, byte file_index, uint file_sprite_id);
 void DupSprite(SpriteID old_spr, SpriteID new_spr);
 void SkipSprites(uint count);
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/spriteloader/grf.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,104 @@
+/* $Id$ */
+
+/** @file grf.cpp */
+
+#include "../stdafx.h"
+#include "../gfx.h"
+#include "../fileio.h"
+#include "../debug.h"
+#include "grf.hpp"
+
+bool SpriteLoaderGrf::LoadSprite(SpriteLoader::Sprite *sprite, const char *filename, uint32 file_pos)
+{
+	/* Open the right file and go to the correct position */
+	FioSeekToFile(file_pos);
+
+	/* Read the size and type */
+	int num = FioReadWord();
+	byte type = FioReadByte();
+
+	/* Type 0xFF indicates either a colormap or some other non-sprite info; we do not handle them here */
+	if (type == 0xFF) return false;
+
+	sprite->height = FioReadByte();
+	sprite->width  = FioReadWord();
+	sprite->x_offs = FioReadWord();
+	sprite->y_offs = FioReadWord();
+
+	/* 0x02 indicates it is a compressed sprite, so we can't rely on 'num' to be valid.
+	 *  In case it is uncompressed, the size is 'num' - 8 (header-size). */
+	num = (type & 0x02) ? sprite->width * sprite->height : num - 8;
+
+	/* XXX -- We should use a pre-located memory segment for this, malloc/free is pretty expensive */
+	byte *dest_orig = MallocT<byte>(num);
+	byte *dest = dest_orig;
+
+	/* Read the file, which has some kind of compression */
+	while (num > 0) {
+		int8 code = FioReadByte();
+
+		if (code >= 0) {
+			/* Plain bytes to read */
+			int size = (code == 0) ? 0x80 : code;
+			num -= size;
+			for (; size > 0; size--) {
+				*dest = FioReadByte();
+				dest++;
+			}
+		} else {
+			/* Copy bytes from earlier in the sprite */
+			const uint data_offset = ((code & 7) << 8) | FioReadByte();
+			int size = -(code >> 3);
+			num -= size;
+			for (; size > 0; size--) {
+				*dest = *(dest - data_offset);
+				dest++;
+			}
+		}
+	}
+
+	assert(num == 0);
+
+	sprite->data = CallocT<SpriteLoader::CommonPixel>(sprite->width * sprite->height);
+
+	/* When there are transparency pixels, this format has an other trick.. decode it */
+	if (type & 0x08) {
+		for (int y = 0; y < sprite->height; y++) {
+			bool last_item = false;
+			/* Look up in the header-table where the real data is stored for this row */
+			int offset = (dest_orig[y * 2 + 1] << 8) | dest_orig[y * 2];
+			/* Go to that row */
+			dest = &dest_orig[offset];
+
+			do {
+				SpriteLoader::CommonPixel *data;
+				/* Read the header:
+				 *  0 .. 14  - length
+				 *  15       - last_item
+				 *  16 .. 31 - transparency bytes */
+				last_item  = ((*dest) & 0x80) != 0;
+				int length =  (*dest++) & 0x7F;
+				int skip   =   *dest++;
+
+				data = &sprite->data[y * sprite->width + skip];
+
+				for (int x = 0; x < length; x++) {
+					data->m = *dest;
+					dest++;
+					data++;
+				}
+			} while (!last_item);
+		}
+	} else {
+		dest = dest_orig;
+		for (int i = 0; i < sprite->width * sprite->height; i++)
+			sprite->data[i].m = dest[i];
+	}
+
+	/* Make sure to mark all transparent pixels transparent on the alpha channel too */
+	for (int i = 0; i < sprite->width * sprite->height; i++)
+		if (sprite->data[i].m != 0) sprite->data[i].a = 0xFF;
+
+	free(dest_orig);
+	return true;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/spriteloader/grf.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,18 @@
+/* $Id$ */
+
+/** @file grf.hpp */
+
+#ifndef SPRITELOADER_GRF_HPP
+#define SPRITELOADER_GRF_HPP
+
+#include "spriteloader.hpp"
+
+class SpriteLoaderGrf : public SpriteLoader {
+public:
+	/**
+	 * Load a sprite from the disk and return a sprite struct which is the same for all loaders.
+	 */
+	bool LoadSprite(SpriteLoader::Sprite *sprite, const char *filename, uint32 file_pos);
+};
+
+#endif /* SPRITELOADER_GRF_HPP */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/spriteloader/png.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,190 @@
+/* $Id$ */
+
+/** @file grf.cpp */
+
+#ifdef WITH_PNG
+
+#include "../stdafx.h"
+#include "../gfx.h"
+#include "../fileio.h"
+#include "../variables.h"
+#include "../debug.h"
+#include "png.hpp"
+#include <png.h>
+
+#define PNG_SLOT 62
+
+static void PNGAPI png_my_read(png_structp png_ptr, png_bytep data, png_size_t length)
+{
+	FioReadBlock(data, length);
+}
+
+static void PNGAPI png_my_error(png_structp png_ptr, png_const_charp message)
+{
+	DEBUG(sprite, 0, "ERROR (libpng): %s - %s", message, (char *)png_get_error_ptr(png_ptr));
+	longjmp(png_ptr->jmpbuf, 1);
+}
+
+static void PNGAPI png_my_warning(png_structp png_ptr, png_const_charp message)
+{
+	DEBUG(sprite, 0, "WARNING (libpng): %s - %s", message, (char *)png_get_error_ptr(png_ptr));
+}
+
+static bool OpenPNGFile(const char *filename, uint32 id, bool mask)
+{
+	char png_file[MAX_PATH];
+
+	snprintf(png_file, sizeof(png_file), "sprites" PATHSEP "%s" PATHSEP "%d%s.png", filename, id, mask ? "m" : "");
+	if (FioCheckFileExists(png_file)) {
+		FioOpenFile(PNG_SLOT, png_file);
+		return true;
+	}
+
+	/* TODO -- Add TAR support */
+	return false;
+}
+
+static bool LoadPNG(SpriteLoader::Sprite *sprite, const char *filename, uint32 id, bool mask)
+{
+	png_byte header[8];
+	png_structp png_ptr;
+	png_infop info_ptr, end_info;
+	uint bit_depth, color_type;
+	uint i, pixelsize;
+	png_bytep row_pointer;
+	SpriteLoader::CommonPixel *dst;
+
+	if (!OpenPNGFile(filename, id, mask)) return mask; // If mask is true, and file not found, continue true anyway, as it isn't a show-stopper
+
+	/* Check the header */
+	FioReadBlock(header, 8);
+	if (png_sig_cmp(header, 0, 8) != 0) return false;
+
+	/* Create the reader */
+	png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, png_my_error, png_my_warning);
+	if (png_ptr == NULL) return false;
+
+	/* Create initial stuff */
+	info_ptr = png_create_info_struct(png_ptr);
+	if (info_ptr == NULL) {
+		png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
+		return false;
+	}
+	end_info = png_create_info_struct(png_ptr);
+	if (end_info == NULL) {
+		png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
+		return false;
+	}
+
+	/* Make sure that upon error, we can clean up graceful */
+	if (setjmp(png_jmpbuf(png_ptr))) {
+		png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
+		return false;
+	}
+
+	/* Read the file */
+	png_set_read_fn(png_ptr, NULL, png_my_read);
+	png_set_sig_bytes(png_ptr, 8);
+
+	png_read_info(png_ptr, info_ptr);
+
+	if (!mask) {
+		/* Read the text chunks */
+		png_textp text_ptr;
+		int num_text = 0;
+		png_get_text(png_ptr, info_ptr, &text_ptr, &num_text);
+		if (num_text == 0) DEBUG(misc, 0, "Warning: PNG Sprite '%s/%d.png' doesn't have x_offs and y_offs; expect graphical problems", filename, id);
+		for (int i = 0; i < num_text; i++) {
+			/* x_offs and y_offs are in the text-chunk of PNG */
+			if (strcmp("x_offs", text_ptr[i].key) == 0) sprite->x_offs = strtol(text_ptr[i].text, NULL, 0);
+			if (strcmp("y_offs", text_ptr[i].key) == 0) sprite->y_offs = strtol(text_ptr[i].text, NULL, 0);
+		}
+
+		sprite->height = info_ptr->height;
+		sprite->width  = info_ptr->width;
+		sprite->data = CallocT<SpriteLoader::CommonPixel>(sprite->width * sprite->height);
+	}
+
+	bit_depth  = png_get_bit_depth(png_ptr, info_ptr);
+	color_type = png_get_color_type(png_ptr, info_ptr);
+
+	if (mask && (bit_depth != 8 || color_type != PNG_COLOR_TYPE_PALETTE)) {
+		DEBUG(misc, 0, "Ignoring mask for SpriteID %d as it isn't a 8 bit palette image", id);
+		return true;
+	}
+
+	if (!mask) {
+		if (bit_depth == 16) png_set_strip_16(png_ptr);
+
+		if (color_type == PNG_COLOR_TYPE_PALETTE) {
+			png_set_palette_to_rgb(png_ptr);
+			color_type = PNG_COLOR_TYPE_RGB;
+		}
+		if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
+			png_set_gray_to_rgb(png_ptr);
+			color_type = PNG_COLOR_TYPE_RGB;
+		}
+
+#ifdef TTD_LITTLE_ENDIAN
+		png_set_bgr(png_ptr);
+#else
+		if (color_type == PNG_COLOR_TYPE_RGB_ALPHA) png_set_swap_alpha(png_ptr);
+#endif
+
+		if (color_type == PNG_COLOR_TYPE_RGB) {
+#ifdef TTD_LITTLE_ENDIAN
+			png_set_filler(png_ptr, 0xff, PNG_FILLER_AFTER);
+#else
+			png_set_filler(png_ptr, 0xff, PNG_FILLER_BEFORE);
+#endif
+		}
+
+		pixelsize = sizeof(uint32);
+	} else {
+		pixelsize = sizeof(uint8);
+	}
+
+	row_pointer = (png_byte *)malloc(info_ptr->width * pixelsize);
+	if (row_pointer == NULL) {
+		png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
+		return false;
+	}
+
+	for (i = 0; i < info_ptr->height; i++) {
+		png_read_row(png_ptr, row_pointer, NULL);
+
+		dst = sprite->data + i * info_ptr->width;
+
+		for (uint x = 0; x < info_ptr->width; x++) {
+			if (mask) {
+				if (row_pointer[x * sizeof(uint8)] != 0) {
+					dst[x].b = 0;
+					dst[x].g = 0;
+					dst[x].r = 0;
+					/* Alpha channel is used from the original image (to allow transparency in remap colors) */
+					dst[x].m = row_pointer[x * sizeof(uint8)];
+				}
+			} else {
+				dst[x].b = row_pointer[x * sizeof(uint32) + 0];
+				dst[x].g = row_pointer[x * sizeof(uint32) + 1];
+				dst[x].r = row_pointer[x * sizeof(uint32) + 2];
+				dst[x].a = row_pointer[x * sizeof(uint32) + 3];
+				dst[x].m = 0;
+			}
+		}
+	}
+
+	free(row_pointer);
+	png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
+
+	return true;
+}
+
+bool SpriteLoaderPNG::LoadSprite(SpriteLoader::Sprite *sprite, const char *filename, uint32 file_pos)
+{
+	if (!LoadPNG(sprite, filename, file_pos, false)) return false;
+	if (!LoadPNG(sprite, filename, file_pos, true)) return false;
+	return true;
+}
+
+#endif /* WITH_PNG */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/spriteloader/png.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,18 @@
+/* $Id$ */
+
+/** @file png.hpp */
+
+#ifndef SPRITELOADER_PNG_HPP
+#define SPRITELOADER_PNG_HPP
+
+#include "spriteloader.hpp"
+
+class SpriteLoaderPNG : public SpriteLoader {
+public:
+	/**
+	 * Load a sprite from the disk and return a sprite struct which is the same for all loaders.
+	 */
+	bool LoadSprite(SpriteLoader::Sprite *sprite, const char *filename, uint32 file_pos);
+};
+
+#endif /* SPRITELOADER_PNG_HPP */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/spriteloader/spriteloader.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,34 @@
+/* $Id$ */
+
+/** @file spriteloader.hpp */
+
+#ifndef SPRITELOADER_HPP
+#define SPRITELOADER_HPP
+
+class SpriteLoader {
+public:
+	struct CommonPixel {
+		uint8 r;  ///< Red-channel
+		uint8 g;  ///< Green-channel
+		uint8 b;  ///< Blue-channel
+		uint8 a;  ///< Alpha-channel
+		uint8 m;  ///< Remap-channel
+	};
+
+	struct Sprite {
+		uint16 height;                   ///< Height of the sprite
+		uint16 width;                    ///< Width of the sprite
+		int16 x_offs;                    ///< The x-offset of where the sprite will be drawn
+		int16 y_offs;                    ///< The y-offset of where the sprite will be drawn
+		SpriteLoader::CommonPixel *data; ///< The sprite itself
+	};
+
+	/**
+	 * Load a sprite from the disk and return a sprite struct which is the same for all loaders.
+	 */
+	virtual bool LoadSprite(SpriteLoader::Sprite *sprite, const char *filename, uint32 file_pos) = 0;
+
+	virtual ~SpriteLoader() { }
+};
+
+#endif /* SPRITELOADER_HPP */
--- a/src/station.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/station.cpp	Sat Jul 14 19:42: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)
@@ -133,7 +137,7 @@
 	}
 }
 
-void Station::MarkTilesDirty() const
+void Station::MarkTilesDirty(bool cargo_change) const
 {
 	TileIndex tile = train_tile;
 	int w, h;
@@ -141,6 +145,15 @@
 	/* XXX No station is recorded as 0, not INVALID_TILE... */
 	if (tile == 0) return;
 
+	/* cargo_change is set if we're refreshing the tiles due to cargo moving
+	 * around. */
+	if (cargo_change) {
+		/* Don't waste time updating if there are no custom station graphics
+		 * that might change. Even if there are custom graphics, they might
+		 * not change. Unfortunately we have no way of telling. */
+		if (this->num_specs == 0) return;
+	}
+
 	for (h = 0; h < trainst_h; h++) {
 		for (w = 0; w < trainst_w; w++) {
 			if (TileBelongsToRailStation(tile)) {
--- a/src/station.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/station.h	Sat Jul 14 19:42: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 */
@@ -182,7 +174,7 @@
 
 	void AddFacility(byte new_facility_bit, TileIndex facil_xy);
 	void MarkDirty() const;
-	void MarkTilesDirty() const;
+	void MarkTilesDirty(bool cargo_change) const;
 	bool TileBelongsToRailStation(TileIndex tile) const;
 	uint GetPlatformLength(TileIndex tile, DiagDirection dir) const;
 	uint GetPlatformLength(TileIndex tile) const;
--- a/src/station_cmd.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/station_cmd.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -30,6 +30,7 @@
 #include "sprite.h"
 #include "depot.h"
 #include "train.h"
+#include "roadveh.h"
 #include "water_map.h"
 #include "industry_map.h"
 #include "newgrf_callbacks.h"
@@ -40,6 +41,7 @@
 #include "misc/autoptr.hpp"
 #include "road.h"
 #include "cargotype.h"
+#include "strings.h"
 #include "table/station_air.h"
 #include "airport_states.h"
 
@@ -286,11 +288,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;
@@ -356,7 +354,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;
 }
@@ -537,7 +535,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.
@@ -613,13 +611,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;
 	uint8 airport_type = 0;
 	const byte *b = _airport_sections[(invalid_dirs & 0x78) >> 3];
@@ -636,7 +634,7 @@
 			return_cmd_error(STR_5007_MUST_DEMOLISH_BRIDGE_FIRST);
 		}
 
-		if (!EnsureNoVehicle(tile_cur)) return CMD_ERROR;
+		if (!EnsureNoVehicleOnGround(tile_cur)) return CMD_ERROR;
 
 		uint z;
 		Slope tileh = GetTileSlope(tile_cur, &z);
@@ -663,7 +661,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;
 		}
 
@@ -698,10 +696,10 @@
 						return_cmd_error(STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING);
 					}
 				}
-			} else {
-				int32 ret = DoCommand(tile_cur, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
+			} else if (check_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)
@@ -821,10 +819,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);
 
@@ -858,7 +856,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;
@@ -999,7 +997,7 @@
 			tile_org += tile_delta ^ TileDiffXY(1, 1); // perpendicular to tile_delta
 		} while (--numtracks);
 
-		st->MarkTilesDirty();
+		st->MarkTilesDirty(false);
 		UpdateStationVirtCoordDirty(st);
 		UpdateStationAcceptance(st, false);
 		RebuildStationLists();
@@ -1074,7 +1072,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;
 
@@ -1126,7 +1124,7 @@
 			// now we need to make the "spanned" area of the railway station smaller if we deleted something at the edges.
 			// we also need to adjust train_tile.
 			MakeRailwayStationAreaSmaller(st);
-			st->MarkTilesDirty();
+			st->MarkTilesDirty(false);
 			UpdateStationSignCoord(st);
 
 			// if we deleted the whole station, delete the train facility.
@@ -1141,11 +1139,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)
@@ -1162,7 +1160,7 @@
 
 	assert(w != 0 && h != 0);
 
-	int32 cost = 0;
+	CommandCost cost;
 	/* clear all areas of the station */
 	do {
 		int w_bak = w;
@@ -1171,7 +1169,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);
@@ -1211,7 +1209,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);
 
@@ -1231,7 +1229,7 @@
 		YapfNotifyTrackLayoutChange(tile, GetRailStationTrack(tile));
 	}
 
-	return _price.build_rail / 2;
+	return CommandCost(_price.build_rail / 2);
 }
 
 /**
@@ -1263,7 +1261,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);
@@ -1287,7 +1285,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) {
@@ -1360,7 +1358,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
@@ -1391,7 +1389,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;
@@ -1436,7 +1434,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
@@ -1445,7 +1443,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;
@@ -1458,10 +1456,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. */
@@ -1478,7 +1476,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;
 	const uint airport_type_for_flat_check = 0x80 | (p1 << 3);
@@ -1511,9 +1509,9 @@
 	int w = afc->size_x;
 	int h = afc->size_y;
 
-	int32 ret = CheckFlatLandBelow(tile, w, h, flags, airport_type_for_flat_check, NULL);
+	CommandCost ret = CheckFlatLandBelow(tile, w, h, flags, airport_type_for_flat_check, NULL);
 	if (CmdFailed(ret)) return ret;
-	int32 cost = ret;
+	CommandCost cost(ret.GetCost());
 
 	Station *st = NULL;
 
@@ -1567,7 +1565,7 @@
 		}
 	}
 
-	cost += _price.build_airport * w * h;
+	cost.AddCost(_price.build_airport * w * h);
 
 	if (flags & DC_EXEC) {
 		st->airport_tile = tile;
@@ -1605,7 +1603,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;
@@ -1616,7 +1614,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) {
@@ -1665,7 +1663,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);
 
@@ -1704,7 +1702,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 */
@@ -1724,7 +1722,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);
@@ -1756,7 +1754,7 @@
 		DeleteStationIfEmpty(st);
 	}
 
-	return _price.remove_truck_station;
+	return CommandCost(_price.remove_truck_station);
 }
 
 static const TileIndexDiffC _dock_tileoffs_chkaround[] = {
@@ -1774,9 +1772,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);
 
@@ -1870,10 +1868,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;
 
@@ -1899,7 +1897,7 @@
 		DeleteStationIfEmpty(st);
 	}
 
-	return _price.remove_dock;
+	return CommandCost(_price.remove_dock);
 }
 
 #include "table/station_land.h"
@@ -2216,7 +2214,7 @@
 		}
 	} else if (v->type == VEH_ROAD) {
 		if (v->u.road.state < RVSB_IN_ROAD_STOP && !IsReversingRoadTrackdir((Trackdir)v->u.road.state) && v->u.road.frame == 0) {
-			if (IsRoadStop(tile)) {
+			if (IsRoadStop(tile) && IsRoadVehFront(v)) {
 				/* Attempt to allocate a parking bay in a road stop */
 				RoadStop *rs = GetRoadStopByTile(tile, GetRoadStopType(tile));
 
@@ -2282,11 +2280,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;
@@ -2318,7 +2315,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) ||
@@ -2344,12 +2341,28 @@
 				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);
+				/* At some point we really must cap the cargo. Previously this
+				 * was a strict 4095, but now we'll have a less strict, but
+				 * increasingly agressive truncation of the amount of cargo. */
+				static const uint WAITING_CARGO_THRESHOLD  = 1 << 12;
+				static const uint WAITING_CARGO_CUT_FACTOR = 1 <<  6;
+				static const uint MAX_WAITING_CARGO        = 1 << 15;
+
+				if (waiting > WAITING_CARGO_THRESHOLD) {
+					uint difference = waiting - WAITING_CARGO_THRESHOLD;
+					waiting -= (difference / WAITING_CARGO_CUT_FACTOR);
+
+					waiting = min(waiting, MAX_WAITING_CARGO);
+					waiting_changed = true;
+				}
+
+				if (waiting_changed) ge->cargo.Truncate(waiting);
 			}
 		}
 	} while (++ge != endof(st->goods));
@@ -2402,7 +2415,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);
 				}
 			}
@@ -2412,15 +2425,24 @@
 
 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();
+	st->MarkTilesDirty(true);
+}
+
+static bool IsUniqueStationName(const char *name)
+{
+	const Station *st;
+	char buf[512];
+
+	FOR_ALL_STATIONS(st) {
+		SetDParam(0, st->index);
+		GetString(buf, STR_STATION, lastof(buf));
+		if (strcmp(buf, name) == 0) return false;
+	}
+
+	return true;
 }
 
 /** Rename a station
@@ -2429,14 +2451,16 @@
  * @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;
+	if (!IsValidStationID(p1) || StrEmpty(_cmd_text)) return CMD_ERROR;
 	Station *st = GetStation(p1);
 
 	if (!CheckOwnership(st->owner)) return CMD_ERROR;
 
-	StringID str = AllocateNameUnique(_cmd_text, 6);
+	if (!IsUniqueStationName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+
+	StringID str = AllocateName(_cmd_text, 6);
 	if (str == 0) return CMD_ERROR;
 
 	if (flags & DC_EXEC) {
@@ -2451,7 +2475,7 @@
 		DeleteName(str);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -2488,7 +2512,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
@@ -2618,10 +2642,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;
@@ -2683,7 +2705,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)) {
@@ -2745,6 +2767,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();
 	}
 }
 
@@ -2841,18 +2865,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()
 };
@@ -2869,9 +2902,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/station_gui.cpp	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/stdafx.h	Sat Jul 14 19:42:58 2007 +0000
@@ -20,6 +20,7 @@
 # endif
 #else
 # define INT64_MAX 9223372036854775807LL
+# define INT64_MIN -9223372036854775808LL
 #endif
 
 #include <cstdio>
@@ -152,7 +153,14 @@
 # if _MSC_VER >= 1400              // MSVC 2005 safety checks
 #  pragma warning(disable: 4996)   // 'strdup' was declared deprecated
 #  define _CRT_SECURE_NO_DEPRECATE // all deprecated 'unsafe string functions
+#  pragma warning(disable: 6308)   // code analyzer: 'realloc' might return null pointer: assigning null pointer to 't_ptr', which is passed as an argument to 'realloc', will cause the original memory block to be leaked
+#  pragma warning(disable: 6011)   // code analyzer: Dereferencing NULL pointer 'pfGetAddrInfo': Lines: 995, 996, 998, 999, 1001
+#  pragma warning(disable: 6326)   // code analyzer: potential comparison of a constant with another constant
+#  pragma warning(disable: 6031)   // code analyzer: Return value ignored: 'ReadFile'
+#  pragma warning(disable: 6255)   // code analyzer: _alloca indicates failure by raising a stack overflow exception. Consider using _malloca instead
+#  pragma warning(disable: 6246)   // code analyzer: Local declaration of 'statspec' hides declaration of the same name in outer scope. For additional information, see previous declaration at ...
 # 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 */
 
@@ -196,6 +204,7 @@
  * call to the same function and is not thread- or reentrancy-safe */
 #if !defined(STRGEN)
 # if defined(WIN32) || defined(WIN64)
+char *getcwd(char *buf, size_t size);
 #  include <tchar.h>
 /* XXX - WinCE without MSVCRT doesn't support wfopen, so it seems */
 #  if !defined(WINCE)
@@ -215,6 +224,7 @@
 /* Windows has always LITTLE_ENDIAN */
 #if defined(WIN32) || defined(__OS2__) || defined(WIN64)
 # define TTD_LITTLE_ENDIAN
+#elif defined(TESTING)
 #else
 /* Else include endian[target/host].h, which has the endian-type, autodetected by the Makefile */
 # if defined(STRGEN)
@@ -285,11 +295,7 @@
 # define TO_BE32X(x)  BSWAP32(x)
 #endif /* TTD_BIG_ENDIAN */
 
-#if !defined(GAME_DATA_DIR)
-# define GAME_DATA_DIR ""
-#endif
-
-#if !defined(PERSONAL_DIR)
+#if !defined(WITH_PERSONAL_DIR)
 # define PERSONAL_DIR ""
 #endif
 
--- a/src/strgen/strgen.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/strgen/strgen.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -66,7 +66,7 @@
 static bool _translated;
 static const char* _file = "(unknown file)";
 static int _cur_line;
-static int _errors, _warnings;
+static int _errors, _warnings, _show_todo;
 
 struct LangString {
 	char *name;            // Name of the string
@@ -377,7 +377,7 @@
 			fatal("%s: Invalid number of plural forms. Expecting %d, found %d.", _cur_ident,
 				_plural_form_counts[_lang_pluralform], nw);
 		} else {
-			warning("'%s' is untranslated. Tweaking english string to allow compilation for plural forms", _cur_ident);
+			if ((_show_todo & 2) != 0) warning("'%s' is untranslated. Tweaking english string to allow compilation for plural forms", _cur_ident);
 			if (nw > _plural_form_counts[_lang_pluralform]) {
 				nw = _plural_form_counts[_lang_pluralform];
 			} else {
@@ -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
@@ -1132,7 +1130,7 @@
 }
 
 
-static void WriteLangfile(const char *filename, int show_todo)
+static void WriteLangfile(const char *filename)
 {
 	FILE *f;
 	uint in_use[32];
@@ -1177,10 +1175,11 @@
 			_cur_line = ls->line;
 
 			// Produce a message if a string doesn't have a translation.
-			if (show_todo > 0 && ls->translated == NULL) {
-				if (show_todo == 2) {
+			if (_show_todo > 0 && ls->translated == NULL) {
+				if ((_show_todo & 2) != 0) {
 					warning("'%s' is untranslated", ls->name);
-				} else {
+				}
+				if ((_show_todo & 1) != 0) {
 					const char *s = "<TODO> ";
 					while (*s != '\0') PutByte(*s++);
 				}
@@ -1289,8 +1288,6 @@
 	const char *src_dir = ".";
 	const char *dest_dir = NULL;
 
-	int show_todo = 0;
-
 	while (argc > 1 && *argv[1] == '-') {
 		if (strcmp(argv[1], "-v") == 0 || strcmp(argv[1], "--version") == 0) {
 			puts("$Revision$");
@@ -1298,13 +1295,13 @@
 		}
 
 		if (strcmp(argv[1], "-t") == 0 || strcmp(argv[1], "--todo") == 0) {
-			show_todo = 1;
+			_show_todo |= 1;
 			argc--, argv++;
 			continue;
 		}
 
 		if (strcmp(argv[1], "-w") == 0 || strcmp(argv[1], "--warning") == 0) {
-			show_todo = 2;
+			_show_todo |= 2;
 			argc--, argv++;
 			continue;
 		}
@@ -1380,10 +1377,10 @@
 		r = strrchr(pathbuf, '.');
 		if (r == NULL || strcmp(r, ".txt") != 0) r = strchr(pathbuf, '\0');
 		ttd_strlcpy(r, ".lng", (size_t)(r - pathbuf));
-		WriteLangfile(pathbuf, show_todo);
+		WriteLangfile(pathbuf);
 
 		/* if showing warnings, print a summary of the language */
-		if (show_todo == 2) {
+		if ((_show_todo & 2) != 0) {
 			fprintf(stdout, "%d warnings and %d errors for %s\n", _warnings, _errors, pathbuf);
 		}
 	} else {
--- a/src/strings.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/strings.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -23,10 +23,15 @@
 #include "music.h"
 #include "date.h"
 #include "industry.h"
+#include "fileio.h"
 #include "helpers.hpp"
 #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"
@@ -36,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
@@ -59,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;
@@ -113,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);
@@ -178,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);
 }
 
 
@@ -220,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[] = {
@@ -310,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);
 }
 
@@ -319,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);
 }
 
@@ -334,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) {
@@ -521,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') {
@@ -558,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);
@@ -567,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} */
@@ -581,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);
@@ -590,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);
@@ -612,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);
@@ -665,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;
@@ -680,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);
@@ -714,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);
@@ -723,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);
@@ -732,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);
@@ -741,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);
@@ -750,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);
@@ -799,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) {
@@ -823,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;
@@ -833,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;
 			}
 
@@ -1028,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
@@ -1101,6 +1158,13 @@
 	}
 }
 
+#ifdef ENABLE_NETWORK
+extern void SortNetworkLanguages();
+#else /* ENABLE_NETWORK */
+static inline void SortNetworkLanguages() {}
+#endif /* ENABLE_NETWORK */
+extern void SortTownGeneratorNames();
+
 bool ReadLanguagePack(int lang_index)
 {
 	int tot_count, i;
@@ -1156,6 +1220,8 @@
 
 	_dynlang.curr = lang_index;
 	SetCurrentGrfLangID(_langpack->isocode);
+	SortNetworkLanguages();
+	SortTownGeneratorNames();
 	return true;
 }
 
@@ -1191,6 +1257,18 @@
 	return strcmp(cmp1->file, cmp2->file);
 }
 
+int CDECL StringIDSorter(const void *a, const void *b)
+{
+	const StringID va = *(const StringID*)a;
+	const StringID vb = *(const StringID*)b;
+	char stra[512];
+	char strb[512];
+	GetString(stra, va, lastof(stra));
+	GetString(strb, vb, lastof(strb));
+
+	return strcmp(stra, strb);
+}
+
 /**
  * Checks whether the given language is already found.
  * @param langs    languages we've found so fa
@@ -1274,8 +1352,15 @@
  */
 void InitializeLanguagePacks()
 {
+	Searchpath sp;
 	Language files[MAX_LANG];
-	uint language_count = GetLanguageList(files, 0, lengthof(files), _paths.lang_dir);
+	uint language_count = 0;
+
+	FOR_ALL_SEARCHPATHS(sp) {
+		char path[MAX_PATH];
+		FioAppendDirectory(path, lengthof(path), sp, LANG_DIR);
+		language_count += GetLanguageList(files, language_count, lengthof(files), path);
+	}
 	if (language_count == 0) error("No available language packs (invalid versions?)");
 
 	/* Sort the language names alphabetically */
--- a/src/strings.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/strings.h	Sat Jul 14 19:42:58 2007 +0000
@@ -16,4 +16,6 @@
 bool ReadLanguagePack(int index);
 void InitializeLanguagePacks();
 
+int CDECL StringIDSorter(const void *a, const void *b);
+
 #endif /* STRINGS_H */
--- a/src/subsidy_gui.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/subsidy_gui.cpp	Sat Jul 14 19:42: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/ai_rail.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/table/ai_rail.h	Sat Jul 14 19:42:58 2007 +0000
@@ -567,8 +567,32 @@
 	{1, 0, {0, 0}}
 };
 
+static const AiDefaultBlockData _airportdata_ai_3[] = {
+	MKAIR(3, 0, 0),
+	{1, 0, {0, 0}},
+};
+
+static const AiDefaultBlockData _airportdata_ai_4[] = {
+	MKAIR(4, 0, 0),
+	{1, 0, {0, 0}},
+};
+
+static const AiDefaultBlockData _airportdata_ai_5[] = {
+	MKAIR(5, 0, 0),
+	{1, 0, {0, 0}},
+};
+
+static const AiDefaultBlockData _airportdata_ai_7[] = {
+	MKAIR(7, 0, 0),
+	{1, 0, {0, 0}}
+};
+
 static const AiDefaultBlockData * const _airport_default_block_data[] = {
+	_airportdata_ai_7, // intercontinental airport
+	_airportdata_ai_4, // international airport
+	_airportdata_ai_3, // metropolitan airport
 	_airportdata_ai_0, // city airport
+	_airportdata_ai_5, // commuter airport
 	_airportdata_ai_1, // country airport
 	NULL
 };
--- a/src/table/build_industry.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/table/build_industry.h	Sat Jul 14 19:42:58 2007 +0000
@@ -1097,6 +1097,7 @@
  * @param sndc number of sounds
  * @param snd  sounds table
  * @param d    cost multiplier
+ * @param pc   prospecting chance
  * @param ai1  appear chance ingame - temperate
  * @param ai2  appear chance ingame - arctic
  * @param ai3  appear chance ingame - tropic
@@ -1131,9 +1132,9 @@
  * @param s3   text for production down
  */
 
-#define MI(tbl, sndc, snd, d, ai1, ai2, ai3, ai4, ag1, ag2, ag3, ag4, col, \
+#define MI(tbl, sndc, snd, d, pc, ai1, ai2, ai3, ai4, ag1, ag2, ag3, ag4, col, \
            c1, c2, c3, proc, p1, r1, p2, r2, m, a1, im1, a2, im2, a3, im3, pr, clim, bev, in, intx, s1, s2, s3) \
-	 {tbl, lengthof(tbl), d, {c1, c2, c3}, proc, {p1, p2}, {r1, r2}, m,            \
+	 {tbl, lengthof(tbl), min(255, d), d, pc, {c1, c2, c3}, proc, {p1, p2}, {r1, r2}, m,            \
 	 {a1, a2, a3}, {{im1, 0}, {im2, 0}, {im3, 0}}, pr, clim, bev, col, in, intx, s1, s2, s3, {ai1, ai2, ai3, ai4}, {ag1, ag2, ag3, ag4}, \
 	 sndc, snd, 0, 0, true, {0, 0, NULL, NULL, INVALID_INDUSTRYTYPE}}
 	/* Format:
@@ -1148,370 +1149,371 @@
 	   messages : Closure                      production up                      production down   */
 static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
 	MI(_tile_table_coal_mine,                  0, NULL,
-	   210,                                    2, 3, 0, 0,    8, 8, 0, 0,        215,
+	   1680, 0xB3333333,                       2, 3, 0, 0,    8, 8, 0, 0,        215,
 	   IT_POWER_STATION,  IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_COAL,       15, CT_INVALID,       0, 5,
 	   CT_INVALID,     0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_PRODUCTION,                1 << LT_TEMPERATE | 1 << LT_ARCTIC,
+	   INDUSTRYLIFE_EXTRACTIVE,                1 << LT_TEMPERATE | 1 << LT_ARCTIC,
 	   INDUSTRYBEH_CAN_SUBSIDENCE,
 	   STR_4802_COAL_MINE,                     STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4836_NEW_COAL_SEAM_FOUND_AT,   STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_power_station,              0, NULL,
-	   30,                                     2, 2, 0, 0,    5, 5, 0, 0,        184,
+	   240,  0xFFFFFFFF,                       2, 2, 0, 0,    5, 5, 0, 0,        184,
 	   IT_COAL_MINE,      IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_INVALID,     0, CT_INVALID,       0, 5,
 	   CT_COAL,        0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_NOT_CLOSABLE,              1 << LT_TEMPERATE | 1 << LT_ARCTIC,
+	   INDUSTRYLIFE_BLACK_HOLE,                1 << LT_TEMPERATE | 1 << LT_ARCTIC,
 	   INDUSTRYBEH_NONE,
 	   STR_4803_POWER_STATION,                 STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_sawmill,                    1, _sawmill_sounds,
-	   28,                                     2, 0, 0, 0,    5, 0, 0, 0,        194,
+	   224,  0xFFFFFFFF,                       2, 0, 0, 0,    5, 0, 0, 0,        194,
 	   IT_FOREST,         IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_GOODS,       0, CT_INVALID,       0, 5,
 	   CT_WOOD,      256, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_CLOSABLE,                  1 << LT_TEMPERATE,
+	   INDUSTRYLIFE_PROCESSING,                1 << LT_TEMPERATE,
 	   INDUSTRYBEH_NONE,
 	   STR_4804_SAWMILL,                       STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_forest,                     0, NULL,
-	   200,                                    3, 4, 0, 0,    5, 5, 0, 0,         86,
+	   1600, 0xBFFFFFFF,                       3, 4, 0, 0,    5, 5, 0, 0,         86,
 	   IT_SAWMILL,        IT_PAPER_MILL,       IT_INVALID,       CHECK_FOREST,
 	   CT_WOOD,       13, CT_INVALID,       0, 30,
 	   CT_INVALID,     0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_PRODUCTION,                1 << LT_TEMPERATE | 1 << LT_ARCTIC,
+	   INDUSTRYLIFE_ORGANIC,                   1 << LT_TEMPERATE | 1 << LT_ARCTIC,
 	   INDUSTRYBEH_NONE,
 	   STR_4805_FOREST,                        STR_482E_NEW_BEING_PLANTED_NEAR,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_483A_INSECT_INFESTATION_CAUSES),
 
 	MI(_tile_table_oil_refinery,               0, NULL,
-	   31,                                     2, 2, 2, 0,    4, 4, 4, 0,        191,
+	   244,  0xFFFFFFFF,                       2, 2, 2, 0,    4, 4, 4, 0,        191,
 	   IT_OIL_RIG,        IT_INVALID,          IT_INVALID,       CHECK_REFINERY,
 	   CT_GOODS,       0, CT_INVALID,       0, 5,
 	   CT_OIL,       256, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_CLOSABLE,                  1 << LT_TEMPERATE | 1 << LT_ARCTIC | 1 << LT_TROPIC,
+	   INDUSTRYLIFE_PROCESSING,                1 << LT_TEMPERATE | 1 << LT_ARCTIC | 1 << LT_TROPIC,
 	   INDUSTRYBEH_AIRPLANE_ATTACKS,
 	   STR_4806_OIL_REFINERY,                  STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_oil_rig,                    0, NULL,
-	   240,                                    6, 0, 0, 0,    0, 0, 0, 0,        152,
+	   1920, 0x99999999,                       6, 0, 0, 0,    0, 0, 0, 0,        152,
 	   IT_OIL_REFINERY,   IT_INVALID,          IT_INVALID,       CHECK_OIL_RIG,
 	   CT_OIL,        15, CT_PASSENGERS,    2, 5,
 	   CT_INVALID,     0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_PRODUCTION,                1 << LT_TEMPERATE,
+	   INDUSTRYLIFE_EXTRACTIVE,                1 << LT_TEMPERATE,
 	   INDUSTRYBEH_BUILT_ONWATER | INDUSTRYBEH_AFTER_1960 | INDUSTRYBEH_AI_AIRSHIP_ROUTES,
 	   STR_4807_OIL_RIG,                       STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4837_NEW_OIL_RESERVES_FOUND,   STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_factory,                    1, _factory_sounds,
-	   26,                                     2, 0, 0, 0,    5, 0, 0, 0,        174,
+	   208,  0xFFFFFFFF,                       2, 0, 0, 0,    5, 0, 0, 0,        174,
 	   IT_FARM,           IT_STEEL_MILL,       IT_INVALID,       CHECK_NOTHING,
 	   CT_GOODS,       0, CT_INVALID,       0, 5,
-	   CT_LIVESTOCK, 256, CT_GRAIN ,      256, CT_STEEL,    256,
-	   INDUSTRYLIFE_CLOSABLE,                  1 << LT_TEMPERATE,
+	   CT_LIVESTOCK, 256, CT_GRAIN,       256, CT_STEEL,    256,
+	   INDUSTRYLIFE_PROCESSING,                1 << LT_TEMPERATE,
 	   INDUSTRYBEH_CHOPPER_ATTACKS,
 	   STR_4808_FACTORY,                       STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_printing_works,             1, _factory_sounds,
-	   26,                                     0, 2, 0, 0,    0, 5, 0, 0,        174,
+	   208,  0xFFFFFFFF,                       0, 2, 0, 0,    0, 5, 0, 0,        174,
 	   IT_PAPER_MILL,     IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_GOODS,       0, CT_INVALID,       0, 5,
 	   CT_PAPER,     256, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_CLOSABLE,                  1 << LT_ARCTIC,
+	   INDUSTRYLIFE_PROCESSING,                1 << LT_ARCTIC,
 	   INDUSTRYBEH_NONE,
 	   STR_4809_PRINTING_WORKS,                STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_steel_mill,                 0, NULL,
-	   27,                                     2, 0, 0, 0,    5, 0, 0, 0,         10,
+	   215,  0xFFFFFFFF,                       2, 0, 0, 0,    5, 0, 0, 0,         10,
 	   IT_IRON_MINE,      IT_FACTORY,          IT_INVALID,       CHECK_NOTHING,
 	   CT_STEEL,       0, CT_INVALID,       0, 5,
 	   CT_IRON_ORE,  256, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_CLOSABLE,                  1 << LT_TEMPERATE,
+	   INDUSTRYLIFE_PROCESSING,                1 << LT_TEMPERATE,
 	   INDUSTRYBEH_NONE,
 	   STR_480A_STEEL_MILL,                    STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_farm,                       3, _farm_sounds,
-	   250,                                    2, 4, 0, 0,    9, 9, 0, 0,         48,
+	   2000, 0xD9999999,                       2, 4, 0, 0,    9, 9, 0, 0,         48,
 	   IT_FACTORY,        IT_FOOD_PROCESS,     IT_INVALID,       CHECK_FARM,
 	   CT_GRAIN,      10, CT_LIVESTOCK,    10, 5,
 	   CT_INVALID,     0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_PRODUCTION,                1 << LT_TEMPERATE | 1 << LT_ARCTIC,
+	   INDUSTRYLIFE_ORGANIC,                   1 << LT_TEMPERATE | 1 << LT_ARCTIC,
 	   INDUSTRYBEH_PLANT_FIELDS | INDUSTRYBEH_PLANT_ON_BUILT,
 	   STR_480B_FARM,                          STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4838_IMPROVED_FARMING_METHODS, STR_483A_INSECT_INFESTATION_CAUSES),
 
 	MI(_tile_table_copper_mine,                0, NULL,
-	   205,                                    0, 0, 3, 0,    0, 0, 4, 0,         10,
+	   1640, 0xB3333333,                       0, 0, 3, 0,    0, 0, 4, 0,         10,
 	   IT_FACTORY_2,      IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_COPPER_ORE, 10, CT_INVALID,       0, 5,
 	   CT_INVALID,     0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_PRODUCTION,                1 << LT_TROPIC,
+	   INDUSTRYLIFE_EXTRACTIVE,                1 << LT_TROPIC,
 	   INDUSTRYBEH_NONE,
 	   STR_480C_COPPER_ORE_MINE,               STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
-	MI(_tile_table_oil_well,                   0, NULL,               220,              0, 5, 3, 0,    4, 5, 5, 0,        152,
+	MI(_tile_table_oil_well,                   0, NULL,
+	   1760, 0x99999999,                       0, 5, 3, 0,    4, 5, 5, 0,        152,
 	   IT_OIL_REFINERY,   IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_OIL,        12, CT_INVALID,       0, 5,
 	   CT_INVALID,     0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_PRODUCTION,                1 << LT_TEMPERATE | 1 << LT_ARCTIC | 1 << LT_TROPIC,
+	   INDUSTRYLIFE_EXTRACTIVE,                1 << LT_TEMPERATE | 1 << LT_ARCTIC | 1 << LT_TROPIC,
 	   INDUSTRYBEH_DONT_INCR_PROD | INDUSTRYBEH_BEFORE_1950,
 	   STR_480D_OIL_WELLS,                     STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4837_NEW_OIL_RESERVES_FOUND,   STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_bank,                       0, NULL,
-	   193,                                    7, 0, 0, 0,    0, 0, 0, 0,         15,
+	   1544, 0xA6666666,                       7, 0, 0, 0,    0, 0, 0, 0,         15,
 	   IT_BANK_TEMP,      IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_VALUABLES,   6, CT_INVALID,       0, 5,
 	   CT_VALUABLES,   0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_NOT_CLOSABLE,              1 << LT_TEMPERATE,
+	   INDUSTRYLIFE_BLACK_HOLE,                1 << LT_TEMPERATE,
 	   INDUSTRYBEH_TOWN1200_MORE | INDUSTRYBEH_ONLY_INTOWN,
 	   STR_480E_BANK,                          STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_food_process,               0, NULL,
-	   26,                                     0, 2, 2, 0,    0, 3, 4, 0,         55,
+	   206,  0xFFFFFFFF,                       0, 2, 2, 0,    0, 3, 4, 0,         55,
 	   IT_FRUIT_PLANTATION, IT_FARM,           IT_FARM_2,        CHECK_NOTHING,
 	   CT_FOOD,        0, CT_INVALID,       0, 5,
 	   CT_FRUIT,     256, CT_MAIZE,       256, CT_INVALID,     0,
-	   INDUSTRYLIFE_CLOSABLE,                  1 << LT_ARCTIC | 1 << LT_TROPIC,
+	   INDUSTRYLIFE_PROCESSING,                1 << LT_ARCTIC | 1 << LT_TROPIC,
 	   INDUSTRYBEH_NONE,
 	   STR_480F_FOOD_PROCESSING_PLANT,         STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_paper_mill,                 1, _sawmill_sounds,
-	   28,                                     0, 2, 0, 0,    0, 5, 0, 0,         10,
+	   227,  0xFFFFFFFF,                       0, 2, 0, 0,    0, 5, 0, 0,         10,
 	   IT_FOREST,         IT_PRINTING_WORKS,   IT_INVALID,       CHECK_NOTHING,
 	   CT_PAPER,       0, CT_INVALID,       0, 5,
 	   CT_WOOD,      256, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_CLOSABLE,                  1 << LT_ARCTIC,
+	   INDUSTRYLIFE_PROCESSING,                1 << LT_ARCTIC,
 	   INDUSTRYBEH_NONE,
 	   STR_4810_PAPER_MILL,                    STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_gold_mine,                  0, NULL,
-	   208,                                    0, 3, 0, 0,    0, 4, 0, 0,        194,
+	   1664, 0x99999999,                       0, 3, 0, 0,    0, 4, 0, 0,        194,
 	   IT_BANK_TROPIC_ARCTIC, IT_INVALID,      IT_INVALID,       CHECK_NOTHING,
 	   CT_GOLD,        7, CT_INVALID,       0, 5,
 	   CT_INVALID,     0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_PRODUCTION,                1 << LT_ARCTIC,
+	   INDUSTRYLIFE_EXTRACTIVE,                1 << LT_ARCTIC,
 	   INDUSTRYBEH_NONE,
 	   STR_4811_GOLD_MINE,                     STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_bank2,                      0, NULL,
-	   19,                                     0, 3, 3, 0,    0, 6, 5, 0,         15,
+	   151,  0xA6666666,                       0, 3, 3, 0,    0, 6, 5, 0,         15,
 	   IT_GOLD_MINE,      IT_DIAMOND_MINE,     IT_INVALID,       CHECK_NOTHING,
 	   CT_INVALID,     0, CT_INVALID,       0, 5,
 	   CT_GOLD,      256, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_NOT_CLOSABLE,              1 << LT_ARCTIC | 1 << LT_TROPIC,
+	   INDUSTRYLIFE_BLACK_HOLE,                1 << LT_ARCTIC | 1 << LT_TROPIC,
 	   INDUSTRYBEH_ONLY_INTOWN,
 	   STR_4812_BANK,                          STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_diamond_mine,               0, NULL,
-	   213,                                    0, 0, 3, 0,    0, 0, 4, 0,        184,
+	   1704, 0x99999999,                       0, 0, 3, 0,    0, 0, 4, 0,        184,
 	   IT_BANK_TROPIC_ARCTIC, IT_INVALID,      IT_INVALID,       CHECK_NOTHING,
 	   CT_DIAMONDS,    7, CT_INVALID,       0, 5,
 	   CT_INVALID,     0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_PRODUCTION,                1 << LT_TROPIC,
+	   INDUSTRYLIFE_EXTRACTIVE,                1 << LT_TROPIC,
 	   INDUSTRYBEH_NONE,
 	   STR_4813_DIAMOND_MINE,                  STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_iron_mine,                  0, NULL,
-	   220,                                    2, 0, 0, 0,    5, 0, 0, 0,         55,
+	   1760, 0xB3333333,                       2, 0, 0, 0,    5, 0, 0, 0,         55,
 	   IT_STEEL_MILL,     IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_IRON_ORE,   10, CT_INVALID,       0, 5,
 	   CT_INVALID,     0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_PRODUCTION,                1 << LT_TEMPERATE,
+	   INDUSTRYLIFE_EXTRACTIVE,                1 << LT_TEMPERATE,
 	   INDUSTRYBEH_NONE,
 	   STR_4814_IRON_ORE_MINE,                 STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_fruit_plantation,           0, NULL,
-	   225,                                    0, 0, 2, 0,    0, 0, 4, 0,         86,
+	   1800, 0xBFFFFFFF,                       0, 0, 2, 0,    0, 0, 4, 0,         86,
 	   IT_FOOD_PROCESS,   IT_INVALID,          IT_INVALID,       CHECK_PLANTATION,
 	   CT_FRUIT,      10, CT_INVALID,       0, 15,
 	   CT_INVALID,     0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_PRODUCTION,                1 << LT_TROPIC,
+	   INDUSTRYLIFE_ORGANIC,                   1 << LT_TROPIC,
 	   INDUSTRYBEH_NONE,
 	   STR_4815_FRUIT_PLANTATION,              STR_482E_NEW_BEING_PLANTED_NEAR,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4838_IMPROVED_FARMING_METHODS, STR_483A_INSECT_INFESTATION_CAUSES),
 
 	MI(_tile_table_rubber_plantation,          0, NULL,
-	   218,                                    0, 0, 3, 0,    0, 0, 4, 0,         39,
+	   1744, 0xBFFFFFFF,                       0, 0, 3, 0,    0, 0, 4, 0,         39,
 	   IT_FACTORY_2,      IT_INVALID,          IT_INVALID,       CHECK_PLANTATION,
 	   CT_RUBBER,     10, CT_INVALID,       0, 15,
 	   CT_INVALID,     0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_PRODUCTION,                1 << LT_TROPIC,
+	   INDUSTRYLIFE_ORGANIC,                   1 << LT_TROPIC,
 	   INDUSTRYBEH_NONE,
 	   STR_4816_RUBBER_PLANTATION,             STR_482E_NEW_BEING_PLANTED_NEAR,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4838_IMPROVED_FARMING_METHODS, STR_483A_INSECT_INFESTATION_CAUSES),
 
 	MI(_tile_table_water_supply,               0, NULL,
-	   199,                                    0, 0, 3, 0,    0, 0, 4, 0,         37,
+	   1592, 0xB3333333,                       0, 0, 3, 0,    0, 0, 4, 0,         37,
 	   IT_WATER_TOWER,    IT_INVALID,          IT_INVALID,       CHECK_WATER,
 	   CT_WATER,      12, CT_INVALID,       0, 5,
 	   CT_INVALID,     0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_PRODUCTION,                1 << LT_TROPIC,
+	   INDUSTRYLIFE_EXTRACTIVE,                1 << LT_TROPIC,
 	   INDUSTRYBEH_NONE,
 	   STR_4817_WATER_SUPPLY,                  STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_water_tower,                0, NULL,
-	   14,                                     0, 0, 4, 0,    0, 0, 8, 0,        208,
+	   115,  0xFFFFFFFF,                       0, 0, 4, 0,    0, 0, 8, 0,        208,
 	   IT_WATER_SUPPLY,   IT_INVALID,          IT_INVALID,       CHECK_WATER,
 	   CT_INVALID,     0, CT_INVALID,       0, 5,
 	   CT_WATER,     256, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_NOT_CLOSABLE,              1 << LT_TROPIC,
+	   INDUSTRYLIFE_BLACK_HOLE,                1 << LT_TROPIC,
 	   INDUSTRYBEH_ONLY_INTOWN,
 	   STR_4818_WATER_TOWER,                   STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_factory2,                   1, _factory_sounds,
-	   26,                                     0, 0, 2, 0,    0, 0, 4, 0,        174,
+	   208,  0xFFFFFFFF,                       0, 0, 2, 0,    0, 0, 4, 0,        174,
 	   IT_RUBBER_PLANTATION, IT_COPPER_MINE,   IT_LUMBER_MILL,   CHECK_PLANTATION,
 	   CT_GOODS,       0, CT_INVALID,       0, 5,
 	   CT_RUBBER,    256, CT_COPPER_ORE,  256, CT_WOOD,      256,
-	   INDUSTRYLIFE_CLOSABLE,                  1 << LT_TROPIC,
+	   INDUSTRYLIFE_PROCESSING,                1 << LT_TROPIC,
 	   INDUSTRYBEH_NONE,
 	   STR_4819_FACTORY,                       STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_farm2,                      0, NULL,
-	   250,                                    0, 0, 1, 0,    0, 0, 2, 0,         48,
+	   2000, 0xD9999999,                       0, 0, 1, 0,    0, 0, 2, 0,         48,
 	   IT_FOOD_PROCESS,   IT_INVALID,          IT_INVALID,       CHECK_PLANTATION,
 	   CT_MAIZE,      11, CT_INVALID,       0, 5,
 	   CT_INVALID,     0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_PRODUCTION,                1 << LT_TROPIC,
+	   INDUSTRYLIFE_ORGANIC,                   1 << LT_TROPIC,
 	   INDUSTRYBEH_PLANT_FIELDS | INDUSTRYBEH_PLANT_ON_BUILT,
 	   STR_481A_FARM,                          STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4838_IMPROVED_FARMING_METHODS, STR_483A_INSECT_INFESTATION_CAUSES),
 
 	MI(_tile_table_lumber_mill,                0, NULL,
-	   17,                                     0, 0, 0, 0,    0, 0, 0, 0,        194,
+	   135,  0xFFFFFFFF,                       0, 0, 0, 0,    0, 0, 0, 0,        194,
 	   IT_FACTORY_2,      IT_INVALID,          IT_INVALID,       CHECK_LUMBERMILL,
 	   CT_WOOD,        0, CT_INVALID,       0, 5,
 	   CT_INVALID,     0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_CLOSABLE,                  1 << LT_TROPIC,
+	   INDUSTRYLIFE_PROCESSING,                1 << LT_TROPIC,
 	   INDUSTRYBEH_CUT_TREES,
 	   STR_481B_LUMBER_MILL,                   STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4834_LACK_OF_NEARBY_TREES_CAUSES,   STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_cotton_candy,               0, NULL,
-	   195,                                    0, 0, 0, 3,    0, 0, 0, 5,         48,
+	   1560, 0xBFFFFFFF,                       0, 0, 0, 3,    0, 0, 0, 5,         48,
 	   IT_CANDY_FACTORY,  IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_COTTON_CANDY, 13, CT_INVALID,    0, 30,
 	   CT_INVALID,     0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_PRODUCTION,                1 << LT_TOYLAND,
+	   INDUSTRYLIFE_ORGANIC,                   1 << LT_TOYLAND,
 	   INDUSTRYBEH_NONE,
 	   STR_481C_COTTON_CANDY_FOREST,           STR_482E_NEW_BEING_PLANTED_NEAR,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4838_IMPROVED_FARMING_METHODS, STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_candy_factory,              0, NULL,
-	   26,                                     0, 0, 0, 3,    0, 0, 0, 5,        174,
+	   206,  0xFFFFFFFF,                       0, 0, 0, 3,    0, 0, 0, 5,        174,
 	   IT_COTTON_CANDY,   IT_TOFFEE_QUARRY,    IT_SUGAR_MINE,    CHECK_NOTHING,
 	   CT_CANDY,       0, CT_INVALID,       0, 5,
 	   CT_SUGAR,     256, CT_TOFFEE,      256, CT_COTTON_CANDY, 256,
-	   INDUSTRYLIFE_CLOSABLE,                  1 << LT_TOYLAND,
+	   INDUSTRYLIFE_PROCESSING,                1 << LT_TOYLAND,
 	   INDUSTRYBEH_NONE,
 	   STR_481D_CANDY_FACTORY,                 STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_battery_farm,               0, NULL,
-	   187,                                    0, 0, 0, 3,    0, 0, 0, 4,         39,
+	   1496, 0xB3333333,                       0, 0, 0, 3,    0, 0, 0, 4,         39,
 	   IT_TOY_FACTORY,    IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_BATTERIES,  11, CT_INVALID,      0, 30,
 	   CT_INVALID,     0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_PRODUCTION,                1 << LT_TOYLAND,
+	   INDUSTRYLIFE_ORGANIC,                   1 << LT_TOYLAND,
 	   INDUSTRYBEH_NONE,
 	   STR_481E_BATTERY_FARM,                  STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4838_IMPROVED_FARMING_METHODS, STR_483A_INSECT_INFESTATION_CAUSES),
 
 	MI(_tile_table_cola_wells,                 0, NULL,
-	   193,                                    0, 0, 0, 3,    0, 0, 0, 5,         55,
+	   1544, 0x99999999,                       0, 0, 0, 3,    0, 0, 0, 5,         55,
 	   IT_FIZZY_DRINK_FACTORY, IT_INVALID,     IT_INVALID,       CHECK_NOTHING,
 	   CT_COLA,       12, CT_INVALID,       0, 5,
 	   CT_INVALID,     0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_PRODUCTION,                1 << LT_TOYLAND,
+	   INDUSTRYLIFE_EXTRACTIVE,                1 << LT_TOYLAND,
 	   INDUSTRYBEH_NONE,
 	   STR_481F_COLA_WELLS,                    STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_toy_shop,                   0, NULL,
-	   17,                                     0, 0, 0, 3,    0, 0, 0, 4,        208,
+	   133,  0xFFFFFFFF,                       0, 0, 0, 3,    0, 0, 0, 4,        208,
 	   IT_TOY_FACTORY,    IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_INVALID,     0, CT_INVALID,       0, 5,
 	   CT_TOYS,      256, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_NOT_CLOSABLE,              1 << LT_TOYLAND,
+	   INDUSTRYLIFE_BLACK_HOLE,                1 << LT_TOYLAND,
 	   INDUSTRYBEH_ONLY_NEARTOWN,
 	   STR_4820_TOY_SHOP,                      STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_toy_factory,                0, NULL,
-	   20,                                     0, 0, 0, 3,    0, 0, 0, 5,          10,
+	   163,  0xFFFFFFFF,                       0, 0, 0, 3,    0, 0, 0, 5,          10,
 	   IT_PLASTIC_FOUNTAINS, IT_BATTERY_FARM,  IT_TOY_SHOP,     CHECK_NOTHING,
 	   CT_TOYS,        0, CT_INVALID,       0, 5,
 	   CT_PLASTIC,   256, CT_BATTERIES,   256, CT_INVALID,     0,
-	   INDUSTRYLIFE_CLOSABLE,                  1 << LT_TOYLAND,
+	   INDUSTRYLIFE_PROCESSING,                1 << LT_TOYLAND,
 	   INDUSTRYBEH_NONE,
 	   STR_4821_TOY_FACTORY,                   STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_plastic_fountain,           1, _plastic_mine_sounds,
-	   192,                                    0, 0, 0, 3,    0, 0, 0, 5,         37,
+	   1536, 0xA6666666,                       0, 0, 0, 3,    0, 0, 0, 5,         37,
 	   IT_TOY_FACTORY,    IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_PLASTIC,    14, CT_INVALID,       0, 5,
 	   CT_INVALID,     0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_PRODUCTION,                1 << LT_TOYLAND,
+	   INDUSTRYLIFE_EXTRACTIVE,                1 << LT_TOYLAND,
 	   INDUSTRYBEH_NONE,
 	   STR_4822_PLASTIC_FOUNTAINS,             STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_fizzy_drink,                0, NULL,
-	   22,                                     0, 0, 0, 3,    0, 0, 0, 4,        184,
+	   177,  0xFFFFFFFF,                       0, 0, 0, 3,    0, 0, 0, 4,        184,
 	   IT_COLA_WELLS,     IT_BUBBLE_GENERATOR, IT_INVALID,       CHECK_NOTHING,
 	   CT_FIZZY_DRINKS, 0, CT_INVALID,      0, 5,
 	   CT_COLA,       256, CT_BUBBLES,    256, CT_INVALID,     0,
-	   INDUSTRYLIFE_CLOSABLE,                  1 << LT_TOYLAND,
+	   INDUSTRYLIFE_PROCESSING,                1 << LT_TOYLAND,
 	   INDUSTRYBEH_NONE,
 	   STR_4823_FIZZY_DRINK_FACTORY,           STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4833_SUPPLY_PROBLEMS_CAUSE_TO,      STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_bubble_generator,           0, NULL,
-	   203,                                    0, 0, 0, 3,    0, 0, 0, 5,        152,
+	   1624, 0xB3333333,                       0, 0, 0, 3,    0, 0, 0, 5,        152,
 	   IT_FIZZY_DRINK_FACTORY, IT_INVALID,     IT_INVALID,       CHECK_BUBBLEGEN,
 	   CT_BUBBLES,    13, CT_INVALID,       0, 5,
 	   CT_INVALID,     0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_PRODUCTION,                1 << LT_TOYLAND,
+	   INDUSTRYLIFE_EXTRACTIVE,                1 << LT_TOYLAND,
 	   INDUSTRYBEH_NONE,
 	   STR_4824_BUBBLE_GENERATOR,              STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_toffee_quarry,              0, NULL,
-	   213,                                    0, 0, 0, 3,    0, 0, 0, 5,        194,
+	   1704, 0xCCCCCCCC,                       0, 0, 0, 3,    0, 0, 0, 5,        194,
 	   IT_CANDY_FACTORY,  IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_TOFFEE,     10, CT_INVALID,       0, 5,
 	   CT_INVALID,     0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_PRODUCTION,                1 << LT_TOYLAND,
+	   INDUSTRYLIFE_EXTRACTIVE,                1 << LT_TOYLAND,
 	   INDUSTRYBEH_NONE,
 	   STR_4825_TOFFEE_QUARRY,                 STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
 
 	MI(_tile_table_sugar_mine,                 0, NULL,
-	   210,                                    0, 0, 0, 2,    0, 0, 0, 4,         15,
+	   1680, 0xBFFFFFFF,                       0, 0, 0, 2,    0, 0, 0, 4,         15,
 	   IT_CANDY_FACTORY,  IT_INVALID,          IT_INVALID,       CHECK_NOTHING,
 	   CT_SUGAR,      11, CT_INVALID,       0, 5,
 	   CT_INVALID,     0, CT_INVALID,       0, CT_INVALID,     0,
-	   INDUSTRYLIFE_PRODUCTION,                1 << LT_TOYLAND,
+	   INDUSTRYLIFE_EXTRACTIVE,                1 << LT_TOYLAND,
 	   INDUSTRYBEH_NONE,
 	   STR_4826_SUGAR_MINE,                    STR_482D_NEW_UNDER_CONSTRUCTION,
 	   STR_4832_ANNOUNCES_IMMINENT_CLOSURE,    STR_4835_INCREASES_PRODUCTION,     STR_4839_PRODUCTION_DOWN_BY_50),
@@ -1530,7 +1532,7 @@
  * @param a2  next frame of animation
  * @param a3  chooses between animation or construction state
  */
-#define MT(ca1, c1, ca2, c2, ca3, c3, sl, a1, a2, a3) {{c1, c2, c3}, {ca1, ca2, ca3}, sl, a1, a2, a3, 0, true, {0, 0, NULL, NULL, 0}}
+#define MT(ca1, c1, ca2, c2, ca3, c3, sl, a1, a2, a3) {{c1, c2, c3}, {ca1, ca2, ca3}, sl, a1, a2, a3, 0, 0xFFFF, 2, 0, 0, true, {0, 0, NULL, NULL, 0}}
 static const IndustryTileSpec _origin_industry_tile_specs[NEW_INDUSTRYTILEOFFSET] = {
 	/* Coal Mine */
 	MT(0,  CT_INVALID,      0,  CT_INVALID,   0,  CT_INVALID,    SLOPE_STEEP,  INDUSTRYTILE_NOANIM,   INDUSTRYTILE_NOANIM,  false),
--- a/src/table/control_codes.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/table/control_codes.h	Sat Jul 14 19:42: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/table/files.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/table/files.h	Sat Jul 14 19:42:58 2007 +0000
@@ -61,7 +61,7 @@
 	{ "elrailsw.grf",  { 0x4f, 0xf9, 0xac, 0x79, 0x50, 0x28, 0x9b, 0xe2, 0x15, 0x30, 0xa8, 0x1e, 0xd5, 0xfd, 0xe1, 0xda } },
 	{ "openttd.grf",   { 0x20, 0x64, 0x4a, 0xf6, 0x75, 0x26, 0x5b, 0x92, 0xbb, 0x6f, 0x8d, 0x0e, 0x34, 0x7e, 0xa6, 0xe3 } },
 	{ "trkfoundw.grf", { 0x12, 0x33, 0x3f, 0xa3, 0xd1, 0x86, 0x8b, 0x04, 0x53, 0x18, 0x9c, 0xee, 0xf9, 0x2d, 0xf5, 0x95 } },
-	{ "roadstops.grf", { 0x8c, 0xd9, 0x45, 0x21, 0x28, 0x82, 0x96, 0x45, 0x33, 0x22, 0x7a, 0xb9, 0x0d, 0xf3, 0x67, 0x4a } },
+	{ "roadstops.grf", { 0xa1, 0x5b, 0xb3, 0x52, 0x60, 0x12, 0x3c, 0xb7, 0x7b, 0x73, 0x09, 0xc1, 0x1a, 0xb4, 0xd0, 0xb8 } },
 	{ "group.grf",     { 0xe8, 0x52, 0x5f, 0x1c, 0x3e, 0xf9, 0x91, 0x9d, 0x0f, 0x70, 0x8c, 0x8a, 0x21, 0xa4, 0xc7, 0x02 } },
 	{ "tramtrkw.grf",  { 0x83, 0x0a, 0xf4, 0x9f, 0x29, 0x10, 0x48, 0xfd, 0x76, 0xe9, 0xda, 0xac, 0x5d, 0xa2, 0x30, 0x45 } },
 	{ "oneway.grf",    { 0xbb, 0xc6, 0xa3, 0xb2, 0xb3, 0xa0, 0xc9, 0x3c, 0xc9, 0xee, 0x24, 0x7c, 0xb6, 0x51, 0x74, 0x63 } },
--- a/src/table/road_land.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/table/road_land.h	Sat Jul 14 19:42:58 2007 +0000
@@ -72,7 +72,7 @@
 };
 
 static const SpriteID _road_frontwire_sprites_1[16] = {
-	0, 0x37, 0x37, 0x3F, 0x37, 0x37, 0x43, 0x37, 0x37, 0x3F, 0x37, 0x37, 0x3F, 0x37, 0x37, 0x37
+	0, 0x54, 0x55, 0x5B, 0x54, 0x54, 0x5E, 0x5A, 0x55, 0x5C, 0x55, 0x58, 0x5D, 0x57, 0x59, 0x56
 };
 
 static const SpriteID _road_backpole_sprites_1[16] = {
--- a/src/table/station_land.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/table/station_land.h	Sat Jul 14 19:42:58 2007 +0000
@@ -961,29 +961,29 @@
 
 // drive-through truck stop X
 static const DrawTileSeqStruct _station_display_datas_0168[] = {
-	{  1,  0,  0,  14,  3, 10, SPR_TRUCK_STOP_DT_X_W | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
-	{  1, 13,  0,  14,  1, 10, SPR_TRUCK_STOP_DT_X_E | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	{  0,  0,  0,  16,  3, 16, SPR_TRUCK_STOP_DT_X_W | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	{  0, 13,  0,  16,  3, 16, SPR_TRUCK_STOP_DT_X_E | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
 	TILE_SEQ_END()
 };
 
 // drive-through truck stop Y
 static const DrawTileSeqStruct _station_display_datas_0169[] = {
-	{ 13,  1,  0,  1, 14, 10, SPR_TRUCK_STOP_DT_Y_W | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
-	{  0,  1,  0,  3, 14, 10, SPR_TRUCK_STOP_DT_Y_E | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	{ 13,  0,  0,  3, 16, 16, SPR_TRUCK_STOP_DT_Y_W | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	{  0,  0,  0,  3, 16, 16, SPR_TRUCK_STOP_DT_Y_E | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
 	TILE_SEQ_END()
 };
 
 // drive-through bus stop X
 static const DrawTileSeqStruct _station_display_datas_0170[] = {
-	{  5,  0,  0,  8,  3, 10, SPR_BUS_STOP_DT_X_W | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
-	{  5, 14,  0,  8,  1, 10, SPR_BUS_STOP_DT_X_E | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	{  0,  0,  0,  16,  3, 16, SPR_BUS_STOP_DT_X_W | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	{  0, 13,  0,  16,  3, 16, SPR_BUS_STOP_DT_X_E | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
 	TILE_SEQ_END()
 };
 
 // drive-through bus stop Y
 static const DrawTileSeqStruct _station_display_datas_0171[] = {
-	{ 13,  5,  0,  1,  8, 10, SPR_BUS_STOP_DT_Y_W | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
-	{  0,  5,  0,  3,  8, 10, SPR_BUS_STOP_DT_Y_E | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	{ 13,  0,  0,  3,  16, 16, SPR_BUS_STOP_DT_Y_W | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	{  0,  0,  0,  3,  16, 16, SPR_BUS_STOP_DT_Y_E | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
 	TILE_SEQ_END()
 };
 
--- a/src/texteff.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/texteff.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -11,17 +11,19 @@
 #include "landscape.h"
 #include "viewport.h"
 #include "saveload.h"
-#include "hal.h"
 #include "console.h"
 #include "string.h"
 #include "variables.h"
 #include "table/sprites.h"
+#include "blitter/factory.hpp"
 #include <stdarg.h> /* va_list */
 #include "date.h"
+#include "texteff.hpp"
+#include "video/video_driver.hpp"
 
 enum {
 	MAX_TEXTMESSAGE_LENGTH = 200,
-	MAX_TEXT_MESSAGES      =  30,
+	INIT_NUM_TEXT_MESSAGES =  20,
 	MAX_CHAT_MESSAGES      =  10,
 	MAX_ANIMATED_TILES     = 256,
 };
@@ -33,8 +35,9 @@
 	int32 right;
 	int32 bottom;
 	uint16 duration;
-	uint32 params_1;
-	uint32 params_2;
+	uint64 params_1;
+	uint64 params_2;
+	TextEffectMode mode;
 };
 
 
@@ -44,19 +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 Pixel _textmessage_backup[150 * 500]; // (height * width)
-
-extern void memcpy_pitch(void *dst, void *src, int w, int h, int srcpitch, int dstpitch);
+static uint8 _textmessage_backup[150 * 500 * 6]; // (height * width)
 
 static inline uint GetTextMessageCount()
 {
@@ -128,6 +130,7 @@
 void UndrawTextMessage()
 {
 	if (_textmessage_visible) {
+		Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
 		/* Sometimes we also need to hide the cursor
 		 *   This is because both textmessage and the cursor take a shot of the
 		 *   screen before drawing.
@@ -163,13 +166,9 @@
 
 		_textmessage_visible = false;
 		/* Put our 'shot' back to the screen */
-		memcpy_pitch(
-			_screen.dst_ptr + x + y * _screen.pitch,
-			_textmessage_backup,
-			width, height, _textmsg_box.width, _screen.pitch);
-
+		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);
+		_video_driver->MakeDirty(x, y, width, height);
 
 		_textmessage_dirty = true;
 	}
@@ -202,6 +201,7 @@
 /** Draw the textmessage-box */
 void DrawTextMessage()
 {
+	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
 	if (!_textmessage_dirty) return;
 
 	/* First undraw if needed */
@@ -226,11 +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) */
-	memcpy_pitch(
-		_textmessage_backup,
-		_screen.dst_ptr + x + y * _screen.pitch,
-		width, height, _screen.pitch, _textmsg_box.width);
+	blitter->CopyToBuffer(blitter->MoveTo(_screen.dst_ptr, x, y), _textmessage_backup, width, height);
 
 	_cur_dpi = &_screen; // switch to _screen painting
 
@@ -249,7 +248,7 @@
 	}
 
 	/* Make sure the data is updated next flush */
-	_video_driver->make_dirty(x, y, width, height);
+	_video_driver->MakeDirty(x, y, width, height);
 
 	_textmessage_visible = true;
 	_textmessage_dirty = false;
@@ -265,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;
@@ -290,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 {
@@ -306,54 +347,54 @@
 
 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;
 
 		case ZOOM_LVL_OUT_4X:
 		case ZOOM_LVL_OUT_8X:
-		case ZOOM_LVL_OUT_16X:
 			break;
 
 		default: NOT_REACHED();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/texteff.hpp	Sat Jul 14 19:42: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	Sat Jul 14 19:42: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	Sat Jul 14 19:42: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	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/town.h	Sat Jul 14 19:42:58 2007 +0000
@@ -83,6 +83,7 @@
 	uint32 population;
 
 	/* Town name */
+	uint32 townnamegrfid;
 	uint16 townnametype;
 	uint32 townnameparts;
 
--- a/src/town_cmd.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/town_cmd.cpp	Sat Jul 14 19:42: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
@@ -344,7 +345,7 @@
 
 	/* Check and/or  */
 	if (HASBIT(GetHouseSpecs(GetHouseType(tile))->callback_mask, CBM_CONSTRUCTION_STATE_CHANGE)) {
-		uint16 callback_res = GetHouseCallback(CBID_CONSTRUCTION_STATE_CHANGE, 0, 0, GetHouseType(tile), GetTownByTile(tile), tile);
+		uint16 callback_res = GetHouseCallback(CBID_HOUSE_CONSTRUCTION_STATE_CHANGE, 0, 0, GetHouseType(tile), GetTownByTile(tile), tile);
 		if (callback_res != CALLBACK_FAILED) ChangeHouseAnimationFrame(tile, callback_res);
 	}
 
@@ -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 && !(flags&DC_AI_BUILDING)) 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;
@@ -639,6 +640,7 @@
 	TrackBits b = GetAnyRoadTrackBits(tile, ROADTYPE_ROAD);
 	RoadBits r = ROAD_NONE;
 
+	if (b == TRACK_BIT_NONE) return r;
 	if (b & TRACK_BIT_X)     r |= ROAD_X;
 	if (b & TRACK_BIT_Y)     r |= ROAD_Y;
 	if (b & TRACK_BIT_UPPER) r |= ROAD_NE | ROAD_NW;
@@ -667,6 +669,8 @@
 
 static bool IsRoadAllowedHere(TileIndex tile, int dir)
 {
+	if (TileX(tile) < 2 || TileY(tile) < 2 || MapMaxX() <= TileX(tile) || MapMaxY() <= TileY(tile)) return false;
+
 	Slope k;
 	Slope slope;
 
@@ -708,7 +712,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 +734,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 +1067,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 +1100,7 @@
 		do {
 			byte bridge_type = RandomRange(MAX_BRIDGES - 1);
 			if (CheckBridge_Stuff(bridge_type, bridge_len)) {
-				if (!CmdFailed(DoCommand(tile, tmptile, 0x8000 + bridge_type, 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 +1239,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 +1299,7 @@
 
 static bool CreateTownName(uint32 *townnameparts)
 {
+	extern int _nb_orig_names;
 	Town *t2;
 	char buf1[64];
 	char buf2[64];
@@ -1305,7 +1310,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 +1321,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 +1362,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 +1404,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 +1484,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 +1522,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 +1607,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));
 }
 
 
@@ -1668,7 +1688,7 @@
 		for (i = 0; i < HOUSE_MAX; i++) {
 			hs = GetHouseSpecs(i);
 			if ((~hs->building_availability & bitmask) == 0 && hs->enabled) {
-				if (HASBIT(_loaded_newgrf_features, GRFLOADED_NEWHOUSES)) {
+				if (_loaded_newgrf_features.has_newhouses) {
 					probability_max += hs->probability;
 					cumulative_probs[num] = probability_max;
 				}
@@ -1677,7 +1697,7 @@
 		}
 
 		for (;;) {
-			if (HASBIT(_loaded_newgrf_features, GRFLOADED_NEWHOUSES)) {
+			if (_loaded_newgrf_features.has_newhouses) {
 				uint r = RandomRange(probability_max);
 				for (i = 0; i < num; i++) if (cumulative_probs[i] >= r) break;
 
@@ -1688,7 +1708,7 @@
 
 			hs = GetHouseSpecs(house);
 
-			if (HASBIT(_loaded_newgrf_features, GRFLOADED_NEWHOUSES)) {
+			if (_loaded_newgrf_features.has_newhouses) {
 				if (hs->override != 0) hs = GetHouseSpecs(hs->override);
 
 				if ((hs->extra_flags & BUILDING_IS_HISTORICAL) && !_generating_world) continue;
@@ -1770,7 +1790,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;
@@ -1840,27 +1860,44 @@
 	if (eflags & BUILDING_HAS_4_TILES) DoClearTownHouseHelper(tile + TileDiffXY(1, 1));
 }
 
+static bool IsUniqueTownName(const char *name)
+{
+	const Town *t;
+	char buf[512];
+
+	FOR_ALL_TOWNS(t) {
+		SetDParam(0, t->index);
+		GetString(buf, STR_TOWN, lastof(buf));
+		if (strcmp(buf, name) == 0) return false;
+	}
+
+	return true;
+}
+
 /** Rename a town (server-only).
  * @param tile unused
  * @param flags type of operation
  * @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;
 
-	if (!IsValidTownID(p1) || _cmd_text[0] == '\0') return CMD_ERROR;
+	if (!IsValidTownID(p1) || StrEmpty(_cmd_text)) return CMD_ERROR;
 
 	t = GetTown(p1);
 
-	str = AllocateNameUnique(_cmd_text, 4);
+	if (!IsUniqueTownName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+
+	str = AllocateName(_cmd_text, 4);
 	if (str == 0) return CMD_ERROR;
 
 	if (flags & DC_EXEC) {
 		DeleteName(t->townnametype);
 		t->townnametype = str;
+		t->townnamegrfid = 0;
 
 		UpdateTownVirtCoord(t);
 		_town_sort_dirty = true;
@@ -1869,7 +1906,7 @@
 	} else {
 		DeleteName(str);
 	}
-	return 0;
+	return CommandCost();
 }
 
 /** Called from GUI */
@@ -1915,15 +1952,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 +1964,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 +2082,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 +2095,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 +2370,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/town_gui.cpp	Sat Jul 14 19:42: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.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/train.h	Sat Jul 14 19:42:58 2007 +0000
@@ -272,6 +272,8 @@
 	void PlayLeaveStationSound() const;
 	bool IsPrimaryVehicle() const { return IsFrontEngine(this); }
 	bool HasFront() const { return true; }
+	int GetImage(Direction direction) const;
+	void Tick();
 };
 
 #endif /* TRAIN_H */
--- a/src/train_cmd.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/train_cmd.cpp	Sat Jul 14 19:42: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)) {
@@ -230,7 +231,7 @@
 		/* check the vehicle length (callback) */
 		uint16 veh_len = CALLBACK_FAILED;
 		if (HASBIT(EngInfo(u->engine_type)->callbackmask, CBM_VEHICLE_LENGTH)) {
-			veh_len = GetVehicleCallback(CBID_TRAIN_VEHICLE_LENGTH, 0, 0, u->engine_type, u);
+			veh_len = GetVehicleCallback(CBID_VEHICLE_LENGTH, 0, 0, u->engine_type, u);
 		}
 		if (veh_len == CALLBACK_FAILED) veh_len = rvi_u->shorten_factor;
 		veh_len = clamp(veh_len, 0, u->next == NULL ? 7 : 5); // the clamp on vehicles not the last in chain is stricter, as too short wagons can break the 'follow next vehicle' code
@@ -447,22 +448,22 @@
 	v->acceleration = clamp(power / weight * 4, 1, 255);
 }
 
-int GetTrainImage(const Vehicle* v, Direction direction)
+int Train::GetImage(Direction direction) const
 {
-	int img = v->spritenum;
+	int img = this->spritenum;
 	int base;
 
-	if (HASBIT(v->u.rail.flags, VRF_REVERSE_DIRECTION)) direction = ReverseDir(direction);
+	if (HASBIT(this->u.rail.flags, VRF_REVERSE_DIRECTION)) direction = ReverseDir(direction);
 
 	if (is_custom_sprite(img)) {
-		base = GetCustomVehicleSprite(v, (Direction)(direction + 4 * IS_CUSTOM_SECONDHEAD_SPRITE(img)));
+		base = GetCustomVehicleSprite(this, (Direction)(direction + 4 * IS_CUSTOM_SECONDHEAD_SPRITE(img)));
 		if (base != 0) return base;
-		img = orig_rail_vehicle_info[v->engine_type].image_index;
+		img = orig_rail_vehicle_info[this->engine_type].image_index;
 	}
 
 	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 (this->cargo.Count() >= this->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;
@@ -576,7 +577,7 @@
 
 			v->group_id = DEFAULT_GROUP;
 
-			AddArticulatedParts(vl);
+			AddArticulatedParts(vl, VEH_TRAIN);
 
 			_new_vehicle_id = v->index;
 
@@ -586,13 +587,13 @@
 
 			InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
 			if (IsLocalPlayer()) {
-				InvalidateAutoreplaceWindow(VEH_TRAIN); // updates the replace Train window
+				InvalidateAutoreplaceWindow(VEH_TRAIN, v->group_id); // updates the replace Train window
 			}
 			GetPlayer(_current_player)->num_engines[engine]++;
 		}
 	}
 
-	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;
 
@@ -755,7 +756,7 @@
 				vl[0]->u.rail.other_multiheaded_part = vl[1];
 				vl[1]->u.rail.other_multiheaded_part = vl[0];
 			} else {
-				AddArticulatedParts(vl);
+				AddArticulatedParts(vl, VEH_TRAIN);
 			}
 
 			TrainConsistChanged(v);
@@ -770,7 +771,7 @@
 			RebuildVehicleLists();
 			InvalidateWindow(WC_COMPANY, v->owner);
 			if (IsLocalPlayer())
-				InvalidateAutoreplaceWindow(VEH_TRAIN); // updates the replace Train window
+				InvalidateAutoreplaceWindow(VEH_TRAIN, v->group_id); // updates the replace Train window
 
 			GetPlayer(_current_player)->num_engines[p1]++;
 		}
@@ -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,8 +1204,11 @@
  * - 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;
+
 	if (!IsValidVehicleID(p1) || p2 > 2) return CMD_ERROR;
 
 	Vehicle *v = GetVehicle(p1);
@@ -1225,13 +1229,14 @@
 
 	if (flags & DC_EXEC) {
 		if (v == first && IsFrontEngine(first)) {
-			DeleteWindowById(WC_VEHICLE_VIEW, first->index);
+			w = FindWindowById(WC_VEHICLE_VIEW, first->index);
+			if (w != NULL) DeleteWindow(w);
 		}
 		InvalidateWindow(WC_VEHICLE_DEPOT, first->tile);
 		RebuildVehicleLists();
 	}
 
-	int32 cost = 0;
+	CommandCost cost;
 	switch (p2) {
 		case 0: case 2: { /* Delete given wagon */
 			bool switch_engine = false;    // update second wagon to engine?
@@ -1243,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);
@@ -1292,12 +1297,13 @@
 					first->prev_shared = NULL;
 					first->next_shared = NULL;
 
-					if (IsLocalPlayer()) ShowTrainViewWindow(new_f);
+					/* If we deleted a window then open a new one for the 'new' train */
+					if (IsLocalPlayer() && w != NULL) ShowTrainViewWindow(new_f);
 				}
 			}
 
 			/* 3. Delete the requested wagon */
-			cost -= v->value;
+			cost.AddCost(-v->value);
 			if (flags & DC_EXEC) {
 				first = UnlinkWagon(v, first);
 				DeleteDepotHighlightOfVehicle(v);
@@ -1347,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
@@ -1369,7 +1375,7 @@
 					}
 				}
 
-				cost -= v->value;
+				cost.AddCost(-v->value);
 				if (flags & DC_EXEC) {
 					first = UnlinkWagon(v, first);
 					DeleteDepotHighlightOfVehicle(v);
@@ -1418,7 +1424,7 @@
 static void UpdateVarsAfterSwap(Vehicle *v)
 {
 	v->UpdateDeltaXY(v->direction);
-	v->cur_image = GetTrainImage(v, v->direction);
+	v->cur_image = v->GetImage(v->direction);
 	BeginVehicleMove(v);
 	VehiclePositionChanged(v);
 	EndVehicleMove(v);
@@ -1611,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;
 
@@ -1651,7 +1657,7 @@
 			}
 		}
 	}
-	return 0;
+	return CommandCost();
 }
 
 /** Force a train through a red signal
@@ -1660,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;
 
@@ -1670,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.
@@ -1683,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);
@@ -1701,7 +1707,7 @@
 
 	SET_EXPENSES_TYPE(EXPENSES_TRAIN_RUN);
 
-	int32 cost = 0;
+	CommandCost cost;
 	uint num = 0;
 
 	do {
@@ -1750,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;
@@ -1867,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 */
@@ -1892,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
@@ -1905,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
@@ -1929,7 +1935,7 @@
 		if (tfdd.reverse) DoCommand(v->tile, v->index, 0, DC_EXEC, CMD_REVERSE_TRAIN_DIRECTION);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -2075,7 +2081,7 @@
 	v->cur_speed = 0;
 
 	v->UpdateDeltaXY(v->direction);
-	v->cur_image = GetTrainImage(v, v->direction);
+	v->cur_image = v->GetImage(v->direction);
 	VehiclePositionChanged(v);
 	UpdateSignalsOnSegment(v->tile, DirToDiagDir(v->direction));
 	UpdateTrainAcceleration(v);
@@ -2374,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;
@@ -2385,11 +2392,19 @@
 		default: break;
 	}
 
+	/**
+	 * Reversing because of order change is allowed only just after leaving a
+	 * station (and the difficulty setting to allowed, of course)
+	 * this can be detected because only after OT_LEAVESTATION, current_order
+	 * will be reset to nothing. (That also happens if no order, but in that case
+	 * it won't hit the point in code where may_reverse is checked)
+	 */
+	bool may_reverse = v->current_order.type == OT_NOTHING;
+
 	/* 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;
 	}
 
 	/* check if we've reached a non-stop station while TTDPatch nonstop is enabled.. */
@@ -2397,6 +2412,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++;
 	}
 
@@ -2444,14 +2460,14 @@
 			return false;
 	}
 
-	return !at_waypoint && CheckReverseTrain(v);
+	return may_reverse && CheckReverseTrain(v);
 }
 
 void Train::MarkDirty()
 {
 	Vehicle *v = this;
 	do {
-		v->cur_image = GetTrainImage(v, v->direction);
+		v->cur_image = v->GetImage(v->direction);
 		MarkAllViewportsDirty(v->left_coord, v->top_coord, v->right_coord + 1, v->bottom_coord + 1);
 	} while ((v = v->next) != NULL);
 
@@ -2520,22 +2536,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);
 			}
 		}
 	}
@@ -2654,28 +2676,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;
@@ -2694,11 +2694,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.
@@ -2715,28 +2756,15 @@
 	TrainCollideChecker tcc;
 	tcc.v = v;
 	tcc.v_skip = v->next;
-
-	/* find colliding vehicle */
-	Vehicle *realcoll = (Vehicle*)VehicleFromPos(TileVirtXY(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 + passangers killed in train v */
-	uint num = 2 + CountPassengersInTrain(v);
-	if (!(coll->vehstatus & VS_CRASHED))
-		/* two drivers + passangers 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,
@@ -2770,6 +2798,8 @@
 
 	/* For every vehicle after and including the given vehicle */
 	for (prev = GetPrevVehicleInChain(v); v != NULL; prev = v, v = v->next) {
+		DiagDirection enterdir = DIAGDIR_BEGIN;
+		bool update_signals = false;
 		BeginVehicleMove(v);
 
 		GetNewVehiclePosResult gp = GetNewVehiclePos(v);
@@ -2805,7 +2835,7 @@
 
 				/* Determine what direction we're entering the new tile from */
 				Direction dir = GetNewVehicleDirectionByTile(gp.new_tile, gp.old_tile);
-				DiagDirection enterdir = DirToDiagDir(dir);
+				enterdir = DirToDiagDir(dir);
 				assert(IsValidDiagDirection(enterdir));
 
 				/* Get the status of the tracks in the new tile and mask
@@ -2912,11 +2942,9 @@
 					assert(v->u.rail.track);
 				}
 
-				if (IsFrontEngine(v)) TrainMovedChangeSignals(gp.new_tile, enterdir);
-
-				/* Signals can only change when the first
-				 * (above) or the last vehicle moves. */
-				if (v->next == NULL) TrainMovedChangeSignals(gp.old_tile, ReverseDiagDir(enterdir));
+				/* We need to update signal status, but after the vehicle position hash
+				 * has been updated by AfterSetTrainPos() */
+				update_signals = true;
 
 				if (prev == NULL) AffectSpeedByDirChange(v, chosen_dir);
 
@@ -2941,7 +2969,7 @@
 		/* update image of train, as well as delta XY */
 		Direction newdir = GetNewVehicleDirection(v, gp.x, gp.y);
 		v->UpdateDeltaXY(newdir);
-		if (update_image) v->cur_image = GetTrainImage(v, newdir);
+		if (update_image) v->cur_image = v->GetImage(newdir);
 
 		v->x_pos = gp.x;
 		v->y_pos = gp.y;
@@ -2953,6 +2981,14 @@
 			/* This is the first vehicle in the train */
 			AffectSpeedByZChange(v, old_z);
 		}
+
+		if (update_signals) {
+			if (IsFrontEngine(v)) TrainMovedChangeSignals(gp.new_tile, enterdir);
+
+			/* Signals can only change when the first
+			 * (above) or the last vehicle moves. */
+			if (v->next == NULL) TrainMovedChangeSignals(gp.old_tile, ReverseDiagDir(enterdir));
+		}
 	}
 	return;
 
@@ -2993,8 +3029,6 @@
 	BeginVehicleMove(v);
 	EndVehicleMove(v);
 
-	if (IsFrontEngine(v)) RemoveVehicleFromGroup(v);
-
 	DeleteVehicle(v);
 
 	if (v->u.rail.track != TRACK_BIT_DEPOT && v->u.rail.track != TRACK_BIT_WORMHOLE)
@@ -3040,7 +3074,7 @@
 			v->direction = ChangeDir(v->direction, delta[GB(Random(), 0, 2)]);
 			BeginVehicleMove(v);
 			v->UpdateDeltaXY(v->direction);
-			v->cur_image = GetTrainImage(v, v->direction);
+			v->cur_image = v->GetImage(v->direction);
 			/* Refrain from updating the z position of the vehicle when on
 			   a bridge, because AfterSetTrainPos will put the vehicle under
 			   the bridge in that case */
@@ -3269,23 +3303,24 @@
 }
 
 
-void Train_Tick(Vehicle *v)
+void Train::Tick()
 {
-	if (_age_cargo_skip_counter == 0 && v->cargo_days != 0xff)
-		v->cargo_days++;
-
-	v->tick_counter++;
-
-	if (IsFrontEngine(v)) {
-		TrainLocoHandler(v, false);
+	if (_age_cargo_skip_counter == 0) this->cargo.AgeCargo();
+
+	this->tick_counter++;
+
+	if (IsFrontEngine(this)) {
+		this->current_order_time++;
+
+		TrainLocoHandler(this, false);
 
 		/* make sure vehicle wasn't deleted. */
-		if (v->type == VEH_TRAIN && IsFrontEngine(v))
-			TrainLocoHandler(v, true);
-	} else if (IsFreeWagon(v) && HASBITS(v->vehstatus, VS_CRASHED)) {
+		if (this->type == VEH_TRAIN && IsFrontEngine(this))
+			TrainLocoHandler(this, true);
+	} else if (IsFreeWagon(this) && HASBITS(this->vehstatus, VS_CRASHED)) {
 		/* Delete flooded standalone wagon */
-		if (++v->u.rail.crash_anim_pos >= 4400)
-			DeleteVehicle(v);
+		if (++this->u.rail.crash_anim_pos >= 4400)
+			DeleteVehicle(this);
 	}
 }
 
@@ -3340,9 +3375,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);
@@ -3376,9 +3411,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);
@@ -3386,6 +3421,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/train_gui.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -93,7 +93,7 @@
 		if (dx + width > 0) {
 			if (dx <= count) {
 				SpriteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v);
-				DrawSprite(GetTrainImage(v, DIR_W), pal, 16 + WagonLengthToPixels(dx), 7 + (is_custom_sprite(RailVehInfo(v->engine_type)->image_index) ? _traininfo_vehicle_pitch : 0));
+				DrawSprite(v->GetImage(DIR_W), pal, 16 + WagonLengthToPixels(dx), 7 + (is_custom_sprite(RailVehInfo(v->engine_type)->image_index) ? _traininfo_vehicle_pitch : 0));
 				if (v->index == selection) {
 					/* Set the highlight position */
 					highlight_l = WagonLengthToPixels(dx) + 1;
@@ -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);
@@ -461,7 +459,7 @@
 				u = v;
 				do {
 					SpriteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v);
-					DrawSprite(GetTrainImage(u, DIR_W), pal, x + WagonLengthToPixels(4 + dx), y + 6 + (is_custom_sprite(RailVehInfo(u->engine_type)->image_index) ? _traininfo_vehicle_pitch : 0));
+					DrawSprite(u->GetImage(DIR_W), pal, x + WagonLengthToPixels(4 + dx), y + 6 + (is_custom_sprite(RailVehInfo(u->engine_type)->image_index) ? _traininfo_vehicle_pitch : 0));
 					dx += u->u.rail.cached_veh_length;
 					u = u->next;
 				} while (u != NULL && IsArticulatedPart(u) && u->cargo_cap == 0);
@@ -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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/transparency_gui.cpp	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/tree_cmd.cpp	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/tunnel_map.cpp	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/tunnel_map.h	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/tunnelbridge_cmd.cpp	Sat Jul 14 19:42: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;
@@ -301,7 +301,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);
 
@@ -316,20 +316,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) {
@@ -412,7 +412,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;
 		}
 
@@ -440,7 +440,7 @@
 		if (IsValidPlayer(_current_player) && !_is_old_ai_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;
@@ -453,7 +453,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;
@@ -462,8 +462,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)) {
@@ -489,39 +489,65 @@
 	 * 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;
+
+	/** Tile shift coeficient. Will decrease for very long tunnels to avoid exponential growth of price*/
+	int tiles_coef = 3;
+	/** Number of tiles from start of tunnel */
+	int tiles = 0;
+
 	for (;;) {
 		end_tile += delta;
 		end_tileh = GetTileSlope(end_tile, &end_z);
 
 		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;
+		tiles++;
+		if (tiles == 25 || tiles == 50 || tiles == 100 || tiles == 200 || tiles == 400 || tiles == 800) tiles_coef++;
+
+		cost.AddCost(_price.build_tunnel);
+		cost.AddCost(cost.GetCost() >> tiles_coef); // 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) {
@@ -578,7 +604,7 @@
 	return false;
 }
 
-static int32 DoClearTunnel(TileIndex tile, uint32 flags)
+static CommandCost DoClearTunnel(TileIndex tile, uint32 flags)
 {
 	Town *t = NULL;
 	TileIndex endtile;
@@ -622,7 +648,7 @@
 		YapfNotifyTrackLayoutChange(tile, track);
 		YapfNotifyTrackLayoutChange(endtile, track);
 	}
-	return _price.clear_tunnel * (length + 1);
+	return CommandCost(_price.clear_tunnel * (length + 1));
 }
 
 
@@ -638,7 +664,7 @@
 	return false;
 }
 
-static int32 DoClearBridge(TileIndex tile, uint32 flags)
+static CommandCost DoClearBridge(TileIndex tile, uint32 flags)
 {
 	DiagDirection direction;
 	TileIndexDiff delta;
@@ -695,10 +721,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);
@@ -721,7 +747,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;
 
@@ -749,7 +775,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;
@@ -784,7 +810,7 @@
 			}
 		}
 
-		return (DistanceManhattan(tile, endtile) + 1) * (_price.build_rail / 2);
+		return CommandCost((DistanceManhattan(tile, endtile) + 1) * (_price.build_rail / 2));
 	} else {
 		return CMD_ERROR;
 	}
@@ -872,7 +898,7 @@
 static void DrawBridgeTramBits(int x, int y, byte z, int offset, bool overlay)
 {
 	static const SpriteID tram_offsets[2][6] = { { 107, 108, 109, 110, 111, 112 }, { 4, 5, 15, 16, 17, 18 } };
-	static const SpriteID back_offsets[6]    =   {  95,  95,  99, 102, 100, 101 };
+	static const SpriteID back_offsets[6]    =   {  95,  96,  99, 102, 100, 101 };
 	static const SpriteID front_offsets[6]   =   {  97,  98, 103, 106, 104, 105 };
 
 	static const uint size_x[6] = { 11, 16, 16, 16, 16, 16 };
@@ -1009,6 +1035,8 @@
 		}
 
 		DrawBridgeMiddle(ti);
+	} else {
+		NOT_REACHED();
 	}
 }
 
@@ -1427,7 +1455,7 @@
 	} else if (IsBridge(tile)) { // XXX is this necessary?
 		DiagDirection dir;
 
-		if (v->type == VEH_ROAD || (v->type == VEH_TRAIN && IsFrontEngine(v))) {
+		if (v->HasFront() && v->IsPrimaryVehicle()) {
 			/* modify speed of vehicle */
 			uint16 spd = _bridge[GetBridgeType(tile)].speed;
 
--- a/src/unmovable_cmd.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/unmovable_cmd.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -18,6 +18,7 @@
 #include "economy.h"
 #include "town.h"
 #include "sprite.h"
+#include "bridge_map.h"
 #include "unmovable_map.h"
 #include "variables.h"
 #include "table/unmovable_land.h"
@@ -31,7 +32,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 +50,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 +74,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 +82,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 +215,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 +243,7 @@
 		DoClearSquare(tile);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 static void GetAcceptedCargo_Unmovable(TileIndex tile, AcceptedCargo ac)
@@ -360,7 +359,7 @@
 
 	do {
 		tile = RandomTile();
-		if (IsTileType(tile, MP_CLEAR) && GetTileSlope(tile, &h) == SLOPE_FLAT && h >= TILE_HEIGHT * 4) {
+		if (IsTileType(tile, MP_CLEAR) && GetTileSlope(tile, &h) == SLOPE_FLAT && h >= TILE_HEIGHT * 4 && !IsBridgeAbove(tile)) {
 			if (IsRadioTowerNearby(tile)) continue;
 			MakeTransmitter(tile);
 			IncreaseGeneratingWorldProgress(GWP_UNMOVABLE);
@@ -403,7 +402,7 @@
 		do {
 			if (--j == 0) goto restart;
 			tile = TILE_MASK(tile + TileOffsByDiagDir(dir));
-		} while (!(IsTileType(tile, MP_CLEAR) && GetTileSlope(tile, &h) == SLOPE_FLAT && h <= TILE_HEIGHT * 2));
+		} while (!(IsTileType(tile, MP_CLEAR) && GetTileSlope(tile, &h) == SLOPE_FLAT && h <= TILE_HEIGHT * 2 && !IsBridgeAbove(tile)));
 
 		assert(tile == TILE_MASK(tile));
 
--- a/src/variables.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/variables.h	Sat Jul 14 19:42: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 {
@@ -95,7 +95,7 @@
 	bool selectgoods;                   // only send the goods to station if a train has been there
 	bool longbridges;                   // allow 100 tile long bridges
 	bool gotodepot;                     // allow goto depot in orders
-	bool build_rawmaterial_ind;         // allow building raw material industries
+	uint8 raw_industry_construction;    ///< Type of (raw) industry construction (none, "normal", prospecting)
 	bool multiple_industry_per_town;    // allow many industries of the same type per town
 	bool same_industry_close;           // allow same type industries to be built close to each other
 	bool lost_train_warn;               // if a train can't find its destination, show a warning
@@ -133,10 +133,13 @@
 	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
 
+	bool always_build_infrastructure;   ///< Always allow building of infrastructure, even when you do not have the vehicles for it
 	UnitID max_trains;                  // max trains in game per player (these are 16bit because the unitnumber field can't hold more)
 	UnitID max_roadveh;                 // max trucks in game per player
 	UnitID max_aircraft;                // max planes in game per player
@@ -235,6 +238,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,26 +271,12 @@
 
 VARDEF Cheats _cheats;
 
-struct Paths {
-	char *personal_dir;  // includes cfg file and save folder
-	char *game_data_dir; // includes data, gm, lang
-	char *data_dir;
-	char *gm_dir;
-	char *lang_dir;
-	char *save_dir;
-	char *autosave_dir;
-	char *scenario_dir;
-	char *heightmap_dir;
-	char *second_data_dir;
-};
-
-VARDEF Paths _paths;
-
 /* 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 _is_old_ai_player; // current player is an oldAI player? (enables a lot of cheats..)
 
@@ -298,9 +290,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;
 
@@ -356,30 +348,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];
@@ -396,8 +381,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/vehicle.cpp	Sat Jul 14 19:42: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"
@@ -42,8 +43,9 @@
 #include "helpers.hpp"
 #include "group.h"
 #include "economy.h"
-
-#define INVALID_COORD (-0x8000)
+#include "strings.h"
+
+#define INVALID_COORD (0x7fffffff)
 #define GEN_HASH(x, y) ((GB((y), 6, 6) << 6) + GB((x), 7, 6))
 
 
@@ -228,28 +230,36 @@
 	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) {
-		if (v->type == VEH_TRAIN && (IsFrontEngine(v) || IsFreeWagon(v)))
+		if (v->type == VEH_TRAIN && (IsFrontEngine(v) || IsFreeWagon(v))) {
 			TrainConsistChanged(v);
+		} else if (v->type == VEH_ROAD && IsRoadVehFront(v)) {
+			RoadVehUpdateCache(v);
+		}
 	}
 
 	FOR_ALL_VEHICLES(v) {
 		switch (v->type) {
 			case VEH_ROAD:
-				v->cur_image = GetRoadVehImage(v, v->direction);
 				v->u.road.roadtype = HASBIT(EngInfo(v->engine_type)->misc_flags, EF_ROAD_TRAM) ? ROADTYPE_TRAM : ROADTYPE_ROAD;
 				v->u.road.compatible_roadtypes = RoadTypeToRoadTypes(v->u.road.roadtype);
+				/* FALL THROUGH */
+			case VEH_TRAIN:
+			case VEH_SHIP:
+				v->cur_image = v->GetImage(v->direction);
 				break;
 
-			case VEH_TRAIN: v->cur_image = GetTrainImage(v, v->direction); break;
-			case VEH_SHIP: v->cur_image = GetShipImage(v, v->direction); break;
 			case VEH_AIRCRAFT:
 				if (IsNormalAircraft(v)) {
-					v->cur_image = GetAircraftImage(v, v->direction);
+					v->cur_image = v->GetImage(v->direction);
 
 					/* The plane's shadow will have the same image as the plane */
 					Vehicle *shadow = v->next;
@@ -291,6 +301,7 @@
 	v->depot_list  = NULL;
 	v->random_bits = 0;
 	v->group_id = DEFAULT_GROUP;
+	v->fill_percent_te_id = INVALID_TE_ID;
 
 	return v;
 }
@@ -390,44 +401,117 @@
 	return true;
 }
 
-
-static Vehicle *_vehicle_position_hash[0x1000];
+/* Size of the hash, 6 = 64 x 64, 7 = 128 x 128. Larger sizes will (in theory) reduce hash
+ * lookup times at the expense of memory usage. */
+const int HASH_BITS = 7;
+const int HASH_SIZE = 1 << HASH_BITS;
+const int HASH_MASK = HASH_SIZE - 1;
+const int TOTAL_HASH_SIZE = 1 << (HASH_BITS * 2);
+const int TOTAL_HASH_MASK = TOTAL_HASH_SIZE - 1;
+
+/* Resolution of the hash, 0 = 1*1 tile, 1 = 2*2 tiles, 2 = 4*4 tiles, etc.
+ * Profiling results show that 0 is fastest. */
+const int HASH_RES = 0;
+
+static Vehicle *_new_vehicle_position_hash[TOTAL_HASH_SIZE];
+
+static void *VehicleFromHash(int xl, int yl, int xu, int yu, void *data, VehicleFromPosProc *proc)
+{
+	for (int y = yl; ; y = (y + (1 << HASH_BITS)) & (HASH_MASK << HASH_BITS)) {
+		for (int x = xl; ; x = (x + 1) & HASH_MASK) {
+			Vehicle *v = _new_vehicle_position_hash[(x + y) & TOTAL_HASH_MASK];
+			for (; v != NULL; v = v->next_new_hash) {
+				void *a = proc(v, data);
+				if (a != NULL) return a;
+			}
+			if (x == xu) break;
+		}
+		if (y == yu) break;
+	}
+
+	return NULL;
+}
+
+
+void *VehicleFromPosXY(int x, int y, void *data, VehicleFromPosProc *proc)
+{
+	const int COLL_DIST = 6;
+
+	/* Hash area to scan is from xl,yl to xu,yu */
+	int xl = GB((x - COLL_DIST) / TILE_SIZE, HASH_RES, HASH_BITS);
+	int xu = GB((x + COLL_DIST) / TILE_SIZE, HASH_RES, HASH_BITS);
+	int yl = GB((y - COLL_DIST) / TILE_SIZE, HASH_RES, HASH_BITS) << HASH_BITS;
+	int yu = GB((y + COLL_DIST) / TILE_SIZE, HASH_RES, HASH_BITS) << HASH_BITS;
+
+	return VehicleFromHash(xl, yl, xu, yu, data, proc);
+}
+
 
 void *VehicleFromPos(TileIndex tile, void *data, VehicleFromPosProc *proc)
 {
-	Point pt = RemapCoords(TileX(tile) * TILE_SIZE, TileY(tile) * TILE_SIZE, 0);
-
-	/* The hash area to scan */
-	const int xl = GB(pt.x - 174, 7, 6);
-	const int xu = GB(pt.x + 104, 7, 6);
-	const int yl = GB(pt.y - 294, 6, 6) << 6;
-	const int yu = GB(pt.y +  56, 6, 6) << 6;
-
-	int x;
-	int y;
-
-	for (y = yl;; y = (y + (1 << 6)) & (0x3F << 6)) {
-		for (x = xl;; x = (x + 1) & 0x3F) {
-			Vehicle *v = _vehicle_position_hash[(x + y) & 0xFFFF];
-
-			while (v != NULL) {
-				void* a = proc(v, data);
-
-				if (a != NULL) return a;
-				v = v->next_hash;
-			}
-
-			if (x == xu) break;
-		}
-
-		if (y == yu) break;
+	int x = GB(TileX(tile), HASH_RES, HASH_BITS);
+	int y = GB(TileY(tile), HASH_RES, HASH_BITS) << HASH_BITS;
+
+	Vehicle *v = _new_vehicle_position_hash[(x + y) & TOTAL_HASH_MASK];
+	for (; v != NULL; v = v->next_new_hash) {
+		if (v->tile != tile) continue;
+
+		void *a = proc(v, data);
+		if (a != NULL) return a;
 	}
+
 	return NULL;
 }
 
+static void UpdateNewVehiclePosHash(Vehicle *v, bool remove)
+{
+	Vehicle **old_hash = v->old_new_hash;
+	Vehicle **new_hash;
+
+	if (remove) {
+		new_hash = NULL;
+	} else {
+		int x = GB(v->x_pos / TILE_SIZE, HASH_RES, HASH_BITS);
+		int y = GB(v->y_pos / TILE_SIZE, HASH_RES, HASH_BITS) << HASH_BITS;
+		new_hash = &_new_vehicle_position_hash[(x + y) & TOTAL_HASH_MASK];
+	}
+
+	if (old_hash == new_hash) return;
+
+	/* Remove from the old position in the hash table */
+	if (old_hash != NULL) {
+		Vehicle *last = NULL;
+		Vehicle *u = *old_hash;
+		while (u != v) {
+			last = u;
+			u = u->next_new_hash;
+			assert(u != NULL);
+		}
+
+		if (last == NULL) {
+			*old_hash = v->next_new_hash;
+		} else {
+			last->next_new_hash = v->next_new_hash;
+		}
+	}
+
+	/* Insert vehicle at beginning of the new position in the hash table */
+	if (new_hash != NULL) {
+		v->next_new_hash = *new_hash;
+		*new_hash = v;
+		assert(v != v->next_new_hash);
+	}
+
+	/* Remember current hash position */
+	v->old_new_hash = new_hash;
+}
+
+static Vehicle *_vehicle_position_hash[0x1000];
 
 static void UpdateVehiclePosHash(Vehicle* v, int x, int y)
 {
+	UpdateNewVehiclePosHash(v, x == INVALID_COORD);
+
 	Vehicle **old_hash, **new_hash;
 	int old_x = v->left_coord;
 	int old_y = v->top_coord;
@@ -463,7 +547,10 @@
 
 void ResetVehiclePosHash()
 {
+	Vehicle *v;
+	FOR_ALL_VEHICLES(v) { v->old_new_hash = NULL; }
 	memset(_vehicle_position_hash, 0, sizeof(_vehicle_position_hash));
+	memset(_new_vehicle_position_hash, 0, sizeof(_new_vehicle_position_hash));
 }
 
 void InitializeVehicles()
@@ -498,7 +585,7 @@
 {
 	Vehicle *u;
 
-	FOR_ALL_VEHICLES(u) if (u->type == VEH_TRAIN && u->next == v) return u;
+	FOR_ALL_VEHICLES(u) if (u->type == v->type && u->next == v) return u;
 
 	return NULL;
 }
@@ -531,10 +618,14 @@
 	Vehicle* u;
 
 	assert(v != NULL);
-	assert(v->type == VEH_TRAIN);
+	assert(v->type == VEH_TRAIN || v->type == VEH_ROAD);
 
 	if (v->first != NULL) {
-		if (IsFrontEngine(v->first) || IsFreeWagon(v->first)) return v->first;
+		if (v->type == VEH_TRAIN) {
+			if (IsFrontEngine(v->first) || IsFreeWagon(v->first)) return v->first;
+		} else {
+			if (IsRoadVehFront(v->first)) return v->first;
+		}
 
 		DEBUG(misc, 0, "v->first cache faulty. We shouldn't be here, rebuilding cache!");
 	}
@@ -548,8 +639,10 @@
 	while ((u = GetPrevVehicleInChain_bruteforce(v)) != NULL) v = u;
 
 	/* Set the first pointer of all vehicles in that chain to the first wagon */
-	if (IsFrontEngine(v) || IsFreeWagon(v))
+	if ((v->type == VEH_TRAIN && (IsFrontEngine(v) || IsFreeWagon(v))) ||
+			(v->type == VEH_ROAD && IsRoadVehFront(v))) {
 		for (u = (Vehicle *)v; u != NULL; u = u->next) u->first = (Vehicle *)v;
+	}
 
 	return (Vehicle*)v;
 }
@@ -572,9 +665,8 @@
 		case VEH_TRAIN:
 			return !IsArticulatedPart(v) && // tenders and other articulated parts
 			(!IsMultiheaded(v) || IsTrainEngine(v)); // rear parts of multiheaded engines
-		case VEH_ROAD:
-		case VEH_SHIP:
-			return true;
+		case VEH_ROAD: return IsRoadVehFront(v);
+		case VEH_SHIP: return true;
 		default: return false; // Only count player buildable vehicles
 	}
 }
@@ -583,11 +675,14 @@
 {
 	if (IsValidStationID(v->last_station_visited)) {
 		GetStation(v->last_station_visited)->loading_vehicles.remove(v);
+
+		HideFillingPercent(v->fill_percent_te_id);
+		v->fill_percent_te_id = INVALID_TE_ID;
 	}
 
 	if (IsEngineCountable(v)) {
 		GetPlayer(v->owner)->num_engines[v->engine_type]--;
-		if (v->owner == _local_player) InvalidateAutoreplaceWindow(v->engine_type);
+		if (v->owner == _local_player) InvalidateAutoreplaceWindow(v->engine_type, v->group_id);
 
 		if (IsValidGroupID(v->group_id)) GetGroup(v->group_id)->num_engines[v->engine_type]--;
 		if (v->IsPrimaryVehicle()) DecreaseGroupNumVehicle(v->group_id);
@@ -602,14 +697,18 @@
 		InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
 	}
 
+	v->cargo.Truncate(0);
 	UpdateVehiclePosHash(v, INVALID_COORD, 0);
 	v->next_hash = NULL;
+	v->next_new_hash = NULL;
 	if (IsPlayerBuildableVehicleType(v)) DeleteVehicleOrders(v);
 
 	/* Now remove any artic part. This will trigger an other
 	 *  destroy vehicle, which on his turn can remove any
 	 *  other artic parts. */
-	if (v->type == VEH_TRAIN && EngineHasArticPart(v)) DeleteVehicle(v->next);
+	if ((v->type == VEH_TRAIN && EngineHasArticPart(v)) || (v->type == VEH_ROAD && RoadVehHasArticPart(v))) {
+		DeleteVehicle(v->next);
+	}
 }
 
 /**
@@ -621,7 +720,7 @@
  */
 void DeleteVehicleChain(Vehicle *v)
 {
-	assert(v->type != VEH_TRAIN);
+	assert(v->type != VEH_TRAIN && v->type != VEH_ROAD);
 
 	do {
 		Vehicle *u = v;
@@ -630,14 +729,6 @@
 	} while (v != NULL);
 }
 
-
-void Aircraft_Tick(Vehicle *v);
-void RoadVeh_Tick(Vehicle *v);
-void Ship_Tick(Vehicle *v);
-void Train_Tick(Vehicle *v);
-static void EffectVehicle_Tick(Vehicle *v);
-void DisasterVehicle_Tick(Vehicle *v);
-
 /** head of the linked list to tell what vehicles that visited a depot in a tick */
 static Vehicle* _first_veh_in_depot_list;
 
@@ -667,26 +758,8 @@
 	}
 }
 
-typedef void VehicleTickProc(Vehicle*);
-static VehicleTickProc* _vehicle_tick_procs[] = {
-	Train_Tick,
-	RoadVeh_Tick,
-	Ship_Tick,
-	Aircraft_Tick,
-	EffectVehicle_Tick,
-	DisasterVehicle_Tick,
-};
-
 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;
@@ -694,7 +767,7 @@
 
 	Vehicle *v;
 	FOR_ALL_VEHICLES(v) {
-		_vehicle_tick_procs[v->type](v);
+		v->Tick();
 
 		switch (v->type) {
 			default: break;
@@ -705,6 +778,7 @@
 			case VEH_SHIP:
 				if (v->type == VEH_TRAIN && IsTrainWagon(v)) continue;
 				if (v->type == VEH_AIRCRAFT && v->subtype != AIR_HELICOPTER) continue;
+				if (v->type == VEH_ROAD && !IsRoadVehFront(v)) continue;
 
 				v->motion_counter += (v->direction & 1) ? (v->cur_speed * 3) / 4 : v->cur_speed;
 				/* Play a running sound if the motion counter passes 256 (Do we not skip sounds?) */
@@ -756,21 +830,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)
@@ -800,17 +874,29 @@
 	const int b = dpi->top + dpi->height;
 
 	/* The hash area to scan */
-	const int xl = GB(l - 70, 7, 6);
-	const int xu = GB(r,      7, 6);
-	const int yl = GB(t - 70, 6, 6) << 6;
-	const int yu = GB(b,      6, 6) << 6;
-
-	int x;
-	int y;
-
-	for (y = yl;; y = (y + (1 << 6)) & (0x3F << 6)) {
-		for (x = xl;; x = (x + 1) & 0x3F) {
-			const Vehicle *v = _vehicle_position_hash[(x + y) & 0xFFFF];
+	int xl, xu, yl, yu;
+
+	if (dpi->width + 70 < (1 << (7 + 6))) {
+		xl = GB(l - 70, 7, 6);
+		xu = GB(r,      7, 6);
+	} else {
+		/* scan whole hash row */
+		xl = 0;
+		xu = 0x3F;
+	}
+
+	if (dpi->height + 70 < (1 << (6 + 6))) {
+		yl = GB(t - 70, 6, 6) << 6;
+		yu = GB(b,      6, 6) << 6;
+	} else {
+		/* scan whole column */
+		yl = 0;
+		yu = 0x3F << 6;
+	}
+
+	for (int y = yl;; y = (y + (1 << 6)) & (0x3F << 6)) {
+		for (int x = xl;; x = (x + 1) & 0x3F) {
+			const Vehicle *v = _vehicle_position_hash[x + y]; // already masked & 0xFFF
 
 			while (v != NULL) {
 				if (!(v->vehstatus & VS_HIDDEN) &&
@@ -1431,9 +1517,9 @@
 	return CreateEffectVehicle(v->x_pos + x, v->y_pos + y, v->z_pos + z, type);
 }
 
-static void EffectVehicle_Tick(Vehicle *v)
+void SpecialVehicle::Tick()
 {
-	_effect_tick_procs[v->subtype](v);
+	_effect_tick_procs[this->subtype](this);
 }
 
 Vehicle *CheckClickOnVehicle(const ViewPort *vp, int x, int y)
@@ -1578,12 +1664,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);
@@ -1610,7 +1696,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;
 
@@ -1624,8 +1710,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;
@@ -1642,7 +1728,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;
@@ -1651,7 +1737,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);
 
@@ -1670,7 +1756,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];
@@ -1680,12 +1766,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;
 }
 
@@ -1695,13 +1781,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;
@@ -1713,7 +1799,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;
@@ -1728,8 +1814,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
@@ -1741,14 +1827,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);
@@ -1761,11 +1847,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;
@@ -1813,7 +1899,7 @@
 
 		if (CmdFailed(cost)) return cost;
 
-		total_cost += cost;
+		total_cost.AddCost(cost);
 
 		if (flags & DC_EXEC) {
 			w = GetVehicle(_new_vehicle_id);
@@ -1825,7 +1911,14 @@
 			if (v->type == VEH_TRAIN && !IsFrontEngine(v)) {
 				/* this s a train car
 				 * add this unit to the end of the train */
-				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.           */
+					DoCommand(w_front->tile, w_front->index, 1, flags, GetCmdSellVeh(w_front));
+					DoCommand(w_front->tile, w->index,       1, flags, GetCmdSellVeh(w));
+					return result; // return error and the message returned from CMD_MOVE_RAIL_VEHICLE
+				}
 			} else {
 				/* this is a front engine or not a train. It need orders */
 				w_front = w;
@@ -1864,11 +1957,13 @@
 
 				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)) {
 					w = GetNextArticPart(w);
+				} else if (w->type == VEH_ROAD && RoadVehHasArticPart(w)) {
+					w = w->next;
 				} else {
 					break;
 				}
@@ -1876,10 +1971,18 @@
 				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));
 				}
 			}
-		} while (v->type == VEH_TRAIN && EngineHasArticPart(v) && (v = GetNextArticPart(v)) != NULL);
+
+			if (v->type == VEH_TRAIN && EngineHasArticPart(v)) {
+				v = GetNextArticPart(v);
+			} else if (v->type == VEH_ROAD && RoadVehHasArticPart(v)) {
+				v = v->next;
+			} else {
+				break;
+			}
+		} while (v != NULL);
 
 		if ((flags & DC_EXEC) && v->type == VEH_TRAIN) w = GetNextVehicle(w);
 	} while (v->type == VEH_TRAIN && (v = GetNextVehicle(v)) != NULL);
@@ -1957,7 +2060,7 @@
 
 		case VEH_ROAD:
 			FOR_ALL_VEHICLES(v) {
-				if (v->tile == tile && v->type == VEH_ROAD && IsRoadVehInDepot(v)) {
+				if (v->tile == tile && v->type == VEH_ROAD && IsRoadVehInDepot(v) && IsRoadVehFront(v)) {
 					if (*engine_count == *engine_list_length) ExtendVehicleListSize((const Vehicle***)engine_list, engine_list_length, 25);
 					(*engine_list)[(*engine_count)++] = v;
 				}
@@ -2105,7 +2208,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;
@@ -2116,20 +2219,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)
@@ -2144,6 +2247,47 @@
 	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;
+	bool loading = false;
+
+	assert(color != NULL);
+
+	const Vehicle *u = v;
+	const Station *st = GetStation(v->last_station_visited);
+
+	/* 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;
+			loading |= (u->current_order.flags & OF_UNLOAD) == 0 && st->goods[v->cargo_type].days_since_pickup != 255;
+			cars++;
+		}
+	}
+
+	if (unloading == 0 && loading)          *color = STR_PERCENT_UP;
+	else if (cars == unloading || !loading) *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) {
@@ -2156,7 +2300,7 @@
 
 		case VEH_ROAD:
 			InvalidateWindowClasses(WC_ROADVEH_LIST);
-			v->u.road.state = RVSB_IN_DEPOT;
+			if (!IsRoadVehFront(v)) v = GetFirstVehicleInChain(v);
 			break;
 
 		case VEH_SHIP:
@@ -2196,7 +2340,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));
@@ -2209,13 +2353,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 */
@@ -2238,24 +2383,59 @@
 	}
 }
 
+static bool IsUniqueVehicleName(const char *name)
+{
+	const Vehicle *v;
+	char buf[512];
+
+	FOR_ALL_VEHICLES(v) {
+		switch (v->type) {
+			case VEH_TRAIN:
+				if (!IsTrainEngine(v)) continue;
+				break;
+
+			case VEH_ROAD:
+				break;
+
+			case VEH_AIRCRAFT:
+				if (!IsNormalAircraft(v)) continue;
+				break;
+
+			case VEH_SHIP:
+				break;
+
+			default:
+				continue;
+		}
+
+		SetDParam(0, v->index);
+		GetString(buf, STR_VEHICLE_NAME, lastof(buf));
+		if (strcmp(buf, name) == 0) return false;
+	}
+
+	return true;
+}
+
 /** Give a custom name to your vehicle
  * @param tile unused
  * @param flags type of operation
  * @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;
 
-	if (!IsValidVehicleID(p1) || _cmd_text[0] == '\0') return CMD_ERROR;
+	if (!IsValidVehicleID(p1) || StrEmpty(_cmd_text)) return CMD_ERROR;
 
 	v = GetVehicle(p1);
 
 	if (!CheckOwnership(v->owner)) return CMD_ERROR;
 
-	str = AllocateNameUnique(_cmd_text, 2);
+	if (!IsUniqueVehicleName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+
+	str = AllocateName(_cmd_text, 2);
 	if (str == 0) return CMD_ERROR;
 
 	if (flags & DC_EXEC) {
@@ -2268,7 +2448,7 @@
 		DeleteName(str);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -2278,7 +2458,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 */
@@ -2294,7 +2474,7 @@
 		InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
 	}
 
-	return 0;
+	return CommandCost();
 }
 
 
@@ -2462,6 +2642,50 @@
 }
 
 
+/**
+ * Check whether we can build infrastructure for the given
+ * vehicle type. This to disable building stations etc. when
+ * you are not allowed/able to have the vehicle type yet.
+ * @param type the vehicle type to check this for
+ * @return true if there is any reason why you may build
+ *         the infrastructure for the given vehicle type
+ */
+bool CanBuildVehicleInfrastructure(VehicleType type)
+{
+	assert(IsPlayerBuildableVehicleType(type));
+
+	if (_patches.always_build_infrastructure) return true;
+
+	UnitID max;
+	switch (type) {
+		case VEH_TRAIN:    max = _patches.max_trains; break;
+		case VEH_ROAD:     max = _patches.max_roadveh; break;
+		case VEH_SHIP:     max = _patches.max_ships; break;
+		case VEH_AIRCRAFT: max = _patches.max_aircraft; break;
+		default: NOT_REACHED();
+	}
+
+	/* We can build vehicle infrastructure when we may build the vehicle type */
+	if (max > 0) {
+
+		/* Can we actually build the vehicle type? */
+		EngineID e;
+		FOR_ALL_ENGINEIDS_OF_TYPE(e, type) {
+			if (HASBIT(GetEngine(e)->player_avail, _local_player)) return true;
+		}
+		return false;
+	}
+
+	/* We should be able to build infrastructure when we have the actual vehicle type */
+	const Vehicle *v;
+	FOR_ALL_VEHICLES(v) {
+		if (v->owner == _local_player && v->type == type) return true;
+	}
+
+	return false;
+}
+
+
 const Livery *GetEngineLivery(EngineID engine_type, PlayerID player, EngineID parent_engine_type, const Vehicle *v)
 {
 	const Player *p = GetPlayer(player);
@@ -2595,7 +2819,7 @@
 {
 	if (v->type == VEH_TRAIN) {
 		return GetEngineColourMap(
-			(v->u.rail.first_engine != INVALID_ENGINE && (IsArticulatedPart(v) || UsesWagonOverride(v))) ?
+			(v->u.rail.first_engine != INVALID_ENGINE && (UsesWagonOverride(v) || (IsArticulatedPart(v) && RailVehInfo(v->engine_type)->railveh_type != RAILVEH_WAGON))) ?
 				v->u.rail.first_engine : v->engine_type,
 			v->owner, v->u.rail.first_engine, v);
 	}
@@ -2603,6 +2827,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),
@@ -2639,14 +2871,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),
@@ -2669,6 +2902,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),
@@ -2688,15 +2925,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),
@@ -2706,6 +2947,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),
 
@@ -2714,7 +2958,7 @@
 
 
 static const SaveLoad _train_desc[] = {
-	SLE_WRITEBYTE(Vehicle, type, VEH_TRAIN, 0), // Train type. VEH_TRAIN in mem, 0 in file.
+	SLE_WRITEBYTE(Vehicle, type, VEH_TRAIN),
 	SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
 	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRail, crash_anim_pos),         SLE_UINT16),
 	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRail, force_proceed),          SLE_UINT8),
@@ -2732,7 +2976,7 @@
 };
 
 static const SaveLoad _roadveh_desc[] = {
-	SLE_WRITEBYTE(Vehicle, type, VEH_ROAD, 1), // Road type. VEH_ROAD in mem, 1 in file.
+	SLE_WRITEBYTE(Vehicle, type, VEH_ROAD),
 	SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
 	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRoad, state),          SLE_UINT8),
 	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRoad, frame),          SLE_UINT8),
@@ -2752,7 +2996,7 @@
 };
 
 static const SaveLoad _ship_desc[] = {
-	SLE_WRITEBYTE(Vehicle, type, VEH_SHIP, 2), // Ship type. VEH_SHIP in mem, 2 in file.
+	SLE_WRITEBYTE(Vehicle, type, VEH_SHIP),
 	SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
 	SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleShip, state), SLE_UINT8),
 
@@ -2763,7 +3007,7 @@
 };
 
 static const SaveLoad _aircraft_desc[] = {
-	SLE_WRITEBYTE(Vehicle, type, VEH_AIRCRAFT, 3), // Aircraft type. VEH_AIRCRAFT in mem, 3 in file.
+	SLE_WRITEBYTE(Vehicle, type, VEH_AIRCRAFT),
 	SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
 	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleAir, crashed_counter), SLE_UINT16),
 	    SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleAir, pos),             SLE_UINT8),
@@ -2782,7 +3026,7 @@
 };
 
 static const SaveLoad _special_desc[] = {
-	SLE_WRITEBYTE(Vehicle,type,VEH_SPECIAL, 4),
+	SLE_WRITEBYTE(Vehicle, type, VEH_SPECIAL),
 
 	    SLE_VAR(Vehicle, subtype,       SLE_UINT8),
 
@@ -2810,7 +3054,7 @@
 };
 
 static const SaveLoad _disaster_desc[] = {
-	SLE_WRITEBYTE(Vehicle, type, VEH_DISASTER, 5),
+	SLE_WRITEBYTE(Vehicle, type, VEH_DISASTER),
 
 	    SLE_REF(Vehicle, next,          REF_VEHICLE_OLD),
 
@@ -2874,6 +3118,8 @@
 	int index;
 	Vehicle *v;
 
+	_cargo_count = 0;
+
 	while ((index = SlIterateArray()) != -1) {
 		Vehicle *v;
 
@@ -2881,9 +3127,9 @@
 			error("Vehicles: failed loading savegame: too many vehicles");
 
 		v = GetVehicle(index);
-		SlObject(v, (SaveLoad*)_veh_descs[SlReadByte()]);
-
-		switch (v->type) {
+		VehicleType vtype = (VehicleType)SlReadByte();
+
+		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;
@@ -2894,6 +3140,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;
@@ -2947,6 +3207,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;
@@ -2963,16 +3224,23 @@
 	InvalidateWindow(WC_VEHICLE_DETAILS, this->index);
 	InvalidateWindow(WC_STATION_VIEW, this->last_station_visited);
 
-	GetStation(this->last_station_visited)->MarkTilesDirty();
+	GetStation(this->last_station_visited)->MarkTilesDirty(true);
 	this->MarkDirty();
 }
 
 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;
 }
 
 
@@ -2980,8 +3248,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/vehicle.h	Sat Jul 14 19:42: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 {
@@ -75,6 +77,7 @@
 	VEH_END,
 	VEH_INVALID = 0xFF,
 };
+DECLARE_POSTFIX_INCREMENT(VehicleType);
 template <> struct EnumPropsT<VehicleType> : MakeEnumPropsT<VehicleType, byte, VEH_TRAIN, VEH_END, VEH_INVALID> {};
 typedef TinyEnumT<VehicleType> VehicleTypeByte;
 
@@ -93,6 +96,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 */
@@ -189,6 +194,8 @@
 	byte reverse_ctr;
 	struct RoadStop *slot;
 	byte slot_age;
+	EngineID first_engine;
+	byte cached_veh_length;
 
 	RoadType roadtype;
 	RoadTypes compatible_roadtypes;
@@ -243,6 +250,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 */
@@ -260,12 +269,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
@@ -288,6 +295,8 @@
 	int32 right_coord;
 	int32 bottom_coord;
 	Vehicle *next_hash;
+	Vehicle *next_new_hash;
+	Vehicle **old_new_hash;
 
 	/* Related to age and service time */
 	Date age;     // Age in days
@@ -305,17 +314,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;
@@ -410,6 +420,18 @@
 	 * basically, if GetFirstVehicleInChain() can be called for it.
 	 */
 	virtual bool HasFront() const { return false; }
+
+	/**
+	 * Gets the sprite to show for the given direction
+	 * @param direction the direction the vehicle is facing
+	 * @return the sprite for the given vehicle in the given direction
+	 */
+	virtual int GetImage(Direction direction) const { return 0; }
+
+	/**
+	 * Calls the tick handler of the vehicle
+	 */
+	virtual void Tick() = 0;
 };
 
 /**
@@ -436,6 +458,7 @@
 
 	const char *GetTypeString() const { return "special vehicle"; }
 	void UpdateDeltaXY(Direction direction);
+	void Tick();
 };
 
 /**
@@ -455,6 +478,7 @@
 
 	const char *GetTypeString() const { return "disaster vehicle"; }
 	void UpdateDeltaXY(Direction direction);
+	void Tick();
 };
 
 /**
@@ -473,6 +497,7 @@
 	virtual ~InvalidVehicle() {}
 
 	const char *GetTypeString() const { return "invalid vehicle"; }
+	void Tick() {}
 };
 
 #define is_custom_sprite(x) (x >= 0xFD)
@@ -495,8 +520,10 @@
 bool IsEngineCountable(const Vehicle *v);
 void DeleteVehicleChain(Vehicle *v);
 void *VehicleFromPos(TileIndex tile, void *data, VehicleFromPosProc *proc);
+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();
@@ -504,15 +531,10 @@
 
 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);
 
-/* train_cmd.h */
-int GetTrainImage(const Vehicle* v, Direction direction);
-int GetAircraftImage(const Vehicle* v, Direction direction);
-int GetRoadVehImage(const Vehicle* v, Direction direction);
-int GetShipImage(const Vehicle* v, Direction direction);
 SpriteID GetRotorImage(const Vehicle *v);
 
 Vehicle *CreateEffectVehicle(int x, int y, int z, EffectVehicle type);
@@ -543,7 +565,7 @@
 
 void TrainConsistChanged(Vehicle *v);
 void TrainPowerChanged(Vehicle *v);
-int32 GetTrainRunningCost(const Vehicle *v);
+Money GetTrainRunningCost(const Vehicle *v);
 
 int CheckTrainStoppedInDepot(const Vehicle *v);
 
@@ -551,13 +573,14 @@
 
 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);
+void InvalidateAutoreplaceWindow(EngineID e, GroupID id_g);
 
-int32 MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs);
+CommandCost MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs);
+bool CanBuildVehicleInfrastructure(VehicleType type);
 
 /* Flags to add to p2 for goto depot commands */
 /* Note: bits 8-10 are used for VLW flags */
--- a/src/vehicle_gui.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/vehicle_gui.cpp	Sat Jul 14 19:42: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/vehicle_gui.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/vehicle_gui.h	Sat Jul 14 19:42:58 2007 +0000
@@ -51,7 +51,7 @@
 int DrawVehiclePurchaseInfo(int x, int y, uint w, EngineID engine_number);
 
 void DrawTrainImage(const Vehicle *v, int x, int y, int count, int skip, VehicleID selection);
-void DrawRoadVehImage(const Vehicle *v, int x, int y, VehicleID selection);
+void DrawRoadVehImage(const Vehicle *v, int x, int y, int count, VehicleID selection);
 void DrawShipImage(const Vehicle *v, int x, int y, VehicleID selection);
 void DrawAircraftImage(const Vehicle *v, int x, int y, VehicleID selection);
 
@@ -75,7 +75,7 @@
 {
 	switch (v->type) {
 		case VEH_TRAIN:    DrawTrainImage(v, x, y, count, skip, selection); break;
-		case VEH_ROAD:     DrawRoadVehImage(v, x, y, selection);            break;
+		case VEH_ROAD:     DrawRoadVehImage(v, x, y, count, selection);     break;
 		case VEH_SHIP:     DrawShipImage(v, x, y, selection);               break;
 		case VEH_AIRCRAFT: DrawAircraftImage(v, x, y, selection);           break;
 		default: NOT_REACHED();
--- a/src/video/cocoa_v.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/video/cocoa_v.h	Sat Jul 14 19:42:58 2007 +0000
@@ -3,11 +3,29 @@
 #ifndef VIDEO_COCOA_H
 #define VIDEO_COCOA_H
 
-#include "../hal.h"
+#include "video_driver.hpp"
 
-#include "../openttd.h"
-#include "../gfx.h"
+class VideoDriver_Cocoa: public VideoDriver {
+public:
+	/* virtual */ const char *Start(const char * const *param);
 
-extern const HalVideoDriver _cocoa_video_driver;
+	/* virtual */ void Stop();
+
+	/* virtual */ void MakeDirty(int left, int top, int width, int height);
+
+	/* virtual */ void MainLoop();
+
+	/* virtual */ bool ChangeResolution(int w, int h);
+
+	/* virtual */ void ToggleFullscreen(bool fullscreen);
+};
+
+class FVideoDriver_Cocoa: public VideoDriverFactory<FVideoDriver_Cocoa> {
+public:
+	static const int priority = 10;
+	/* virtual */ const char *GetName() { return "cocoa"; }
+	/* virtual */ const char *GetDescription() { return "Cocoa Video Driver"; }
+	/* virtual */ Driver *CreateInstance() { return new VideoDriver_Cocoa(); }
+};
 
 #endif /* VIDEO_COCOA_H */
--- a/src/video/cocoa_v.mm	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/video/cocoa_v.mm	Sat Jul 14 19:42:58 2007 +0000
@@ -65,20 +65,20 @@
 
 
 #include "../stdafx.h"
+#include "../openttd.h"
 #include "../debug.h"
 #include "../macros.h"
 #include "../os/macosx/splash.h"
 #include "../variables.h"
+#include "../gfx.h"
 #include "cocoa_v.h"
 #include "cocoa_keys.h"
+#include "../blitter/factory.hpp"
+#include "../fileio.h"
 
 #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;
@@ -133,7 +133,6 @@
 static void QZ_WarpCursor(int x, int y);
 static void QZ_ShowMouse();
 static void QZ_HideMouse();
-static void CocoaVideoFullScreen(bool full_screen);
 
 
 static NSAutoreleasePool *_ottd_autorelease_pool;
@@ -203,9 +202,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;
 	}
 }
 
@@ -352,7 +367,7 @@
 		case QZ_RETURN:
 		case QZ_f:
 			if (down && (_cocoa_video_data.current_mods & NSCommandKeyMask)) {
-				CocoaVideoFullScreen(!_fullscreen);
+				_video_driver->ToggleFullscreen(!_fullscreen);
 			}
 			break;
 	}
@@ -671,6 +686,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
@@ -718,13 +734,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();
 
@@ -1170,10 +1185,17 @@
 		/* We already have a window, just change its size */
 		if (!isCustom) {
 			[ _cocoa_video_data.window setContentSize:contentRect.size ];
+			// Ensure frame height - title bar height >= view height
+			contentRect.size.height = clamp(height, 0, [ _cocoa_video_data.window frame ].size.height - 22 /* 22 is the height of title bar of window*/);
+			height = contentRect.size.height;
 			[ _cocoa_video_data.qdview setFrameSize:contentRect.size ];
 		}
 	}
 
+	// Update again
+	_cocoa_video_data.width = width;
+	_cocoa_video_data.height = height;
+
 	[ _cocoa_video_data.window center ];
 
 	/* Only recreate the view if it doesn't already exist */
@@ -1726,6 +1748,8 @@
 
 static void QZ_VideoInit()
 {
+	if (BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() == 0) error("Can't use a blitter that blits 0 bpp for normal visuals");
+
 	memset(&_cocoa_video_data, 0, sizeof(_cocoa_video_data));
 
 	/* Initialize the video settings; this data persists between mode switches */
@@ -1947,7 +1971,9 @@
  *                             Video driver interface                         *
  ******************************************************************************/
 
-static void CocoaVideoStop()
+static FVideoDriver_Cocoa iFVideoDriver_Cocoa;
+
+void VideoDriver_Cocoa::Stop()
 {
 	if (!_cocoa_video_started) return;
 
@@ -1958,7 +1984,7 @@
 	_cocoa_video_started = false;
 }
 
-static const char *CocoaVideoStart(const char * const *parm)
+const char *VideoDriver_Cocoa::Start(const char * const *parm)
 {
 	const char *ret;
 
@@ -1975,12 +2001,12 @@
 	QZ_VideoInit();
 
 	ret = QZ_SetVideoMode(_cur_resolution[0], _cur_resolution[1], _fullscreen);
-	if (ret != NULL) CocoaVideoStop();
+	if (ret != NULL) _video_driver->Stop();
 
 	return ret;
 }
 
-static void CocoaVideoMakeDirty(int left, int top, int width, int height)
+void VideoDriver_Cocoa::MakeDirty(int left, int top, int width, int height)
 {
 	if (_cocoa_video_data.num_dirty_rects < MAX_DIRTY_RECTS) {
 		_cocoa_video_data.dirty_rects[_cocoa_video_data.num_dirty_rects].left = left;
@@ -1991,41 +2017,32 @@
 	_cocoa_video_data.num_dirty_rects++;
 }
 
-static void CocoaVideoMainLoop()
+void VideoDriver_Cocoa::MainLoop()
 {
 	/* Start the main event loop */
 	[NSApp run];
 }
 
-static bool CocoaVideoChangeRes(int w, int h)
+bool VideoDriver_Cocoa::ChangeResolution(int w, int h)
 {
 	const char *ret = QZ_SetVideoModeAndRestoreOnFailure((uint)w, (uint)h, _cocoa_video_data.fullscreen);
 	if (ret != NULL) {
-		DEBUG(driver, 0, "cocoa_v: CocoaVideoChangeRes failed with message: %s", ret);
+		DEBUG(driver, 0, "cocoa_v: VideoDriver_Cocoa::ChangeResolution failed with message: %s", ret);
 	}
 
 	return ret == NULL;
 }
 
-static void CocoaVideoFullScreen(bool full_screen)
+void VideoDriver_Cocoa::ToggleFullscreen(bool full_screen)
 {
 	const char *ret = QZ_SetVideoModeAndRestoreOnFailure(_cocoa_video_data.width, _cocoa_video_data.height, full_screen);
 	if (ret != NULL) {
-		DEBUG(driver, 0, "cocoa_v: CocoaVideoFullScreen failed with message: %s", ret);
+		DEBUG(driver, 0, "cocoa_v: VideoDriver_Cocoa::ToggleFullscreen failed with message: %s", ret);
 	}
 
 	_fullscreen = _cocoa_video_data.fullscreen;
 }
 
-const HalVideoDriver _cocoa_video_driver = {
-	CocoaVideoStart,
-	CocoaVideoStop,
-	CocoaVideoMakeDirty,
-	CocoaVideoMainLoop,
-	CocoaVideoChangeRes,
-	CocoaVideoFullScreen,
-};
-
 
 /* This is needed since sometimes assert is called before the videodriver is initialized */
 void CocoaDialog(const char* title, const char* message, const char* buttonLabel)
@@ -2035,18 +2052,34 @@
 	_cocoa_video_dialog = true;
 
 	wasstarted = _cocoa_video_started;
-	if (!_cocoa_video_started && CocoaVideoStart(NULL) != NULL) {
+	if (!_cocoa_video_started && _video_driver->Start(NULL) != NULL) {
 		fprintf(stderr, "%s: %s\n", title, message);
 		return;
 	}
 
 	NSRunAlertPanel([NSString stringWithCString: title], [NSString stringWithCString: message], [NSString stringWithCString: buttonLabel], nil, nil);
 
-	if (!wasstarted) CocoaVideoStop();
+	if (!wasstarted) _video_driver->Stop();
 
 	_cocoa_video_dialog = false;
 }
 
+/* This is needed since OS X application bundles do not have a
+ * current directory and the data files are 'somewhere' in the bundle */
+void cocoaSetApplicationBundleDir()
+{
+	char tmp[MAXPATHLEN];
+	CFURLRef url = CFBundleCopyResourcesDirectoryURL(CFBundleGetMainBundle());
+	if (CFURLGetFileSystemRepresentation(url, true, (unsigned char*)tmp, MAXPATHLEN)) {
+		AppendPathSeparator(tmp, lengthof(tmp));
+		_searchpaths[SP_APPLICATION_BUNDLE_DIR] = strdup(tmp);
+	} else {
+		_searchpaths[SP_APPLICATION_BUNDLE_DIR] = NULL;
+	}
+
+	CFRelease(url);
+}
+
 /* These are called from main() to prevent a _NSAutoreleaseNoPool error when
  * exiting before the cocoa video driver has been loaded
  */
--- a/src/video/dedicated_v.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/video/dedicated_v.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -13,6 +13,8 @@
 #include "../console.h"
 #include "../variables.h"
 #include "../genworld.h"
+#include "../fileio.h"
+#include "../blitter/factory.hpp"
 #include "dedicated_v.h"
 
 #ifdef BEOS_NET_SERVER
@@ -112,17 +114,22 @@
 #endif
 
 
-static Pixel *_dedicated_video_mem;
+static void *_dedicated_video_mem;
 
-extern bool SafeSaveOrLoad(const char *filename, int mode, int newgm);
+extern bool SafeSaveOrLoad(const char *filename, int mode, int newgm, Subdirectory subdir);
 extern void SwitchMode(int new_mode);
 
+static FVideoDriver_Dedicated iFVideoDriver_Dedicated;
 
-static const char *DedicatedVideoStart(const char * const *parm)
+
+const char *VideoDriver_Dedicated::Start(const char * const *parm)
 {
+	int bpp = BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth();
+	if (bpp == 0) _dedicated_video_mem = NULL;
+	else          _dedicated_video_mem = malloc(_cur_resolution[0] * _cur_resolution[1] * (bpp / 8));
+
 	_screen.width = _screen.pitch = _cur_resolution[0];
 	_screen.height = _cur_resolution[1];
-	_dedicated_video_mem = (Pixel *)malloc(_cur_resolution[0] * _cur_resolution[1] * sizeof(Pixel));
 
 	SetDebugString("net=6");
 
@@ -142,7 +149,7 @@
 	return NULL;
 }
 
-static void DedicatedVideoStop()
+void VideoDriver_Dedicated::Stop()
 {
 #ifdef WIN32
 	CloseWindowsConsoleThread();
@@ -150,9 +157,9 @@
 	free(_dedicated_video_mem);
 }
 
-static void DedicatedVideoMakeDirty(int left, int top, int width, int height) {}
-static bool DedicatedVideoChangeRes(int w, int h) { return false; }
-static void DedicatedVideoFullScreen(bool fs) {}
+void VideoDriver_Dedicated::MakeDirty(int left, int top, int width, int height) {}
+bool VideoDriver_Dedicated::ChangeResolution(int w, int h) { return false; }
+void VideoDriver_Dedicated::ToggleFullscreen(bool fs) {}
 
 #if defined(UNIX) || defined(__OS2__) || defined(PSP)
 static bool InputWaiting()
@@ -227,7 +234,7 @@
 	IConsoleCmdExec(input_line); // execute command
 }
 
-static void DedicatedVideoMainLoop()
+void VideoDriver_Dedicated::MainLoop()
 {
 	uint32 cur_ticks = GetTime();
 	uint32 next_tick = cur_ticks + 30;
@@ -254,7 +261,7 @@
 		_switch_mode = SM_NONE;
 		/* First we need to test if the savegame can be loaded, else we will end up playing the
 		 *  intro game... */
-		if (!SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_NORMAL)) {
+		if (!SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_NORMAL, BASE_DIR)) {
 			/* Loading failed, pop out.. */
 			DEBUG(net, 0, "Loading requested map failed, aborting");
 			_networking = false;
@@ -290,13 +297,4 @@
 	}
 }
 
-const HalVideoDriver _dedicated_video_driver = {
-	DedicatedVideoStart,
-	DedicatedVideoStop,
-	DedicatedVideoMakeDirty,
-	DedicatedVideoMainLoop,
-	DedicatedVideoChangeRes,
-	DedicatedVideoFullScreen,
-};
-
 #endif /* ENABLE_NETWORK */
--- a/src/video/dedicated_v.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/video/dedicated_v.h	Sat Jul 14 19:42:58 2007 +0000
@@ -3,8 +3,29 @@
 #ifndef VIDEO_DEDICATED_H
 #define VIDEO_DEDICATED_H
 
-#include "../hal.h"
+#include "video_driver.hpp"
 
-extern const HalVideoDriver _dedicated_video_driver;
+class VideoDriver_Dedicated: public VideoDriver {
+public:
+	/* virtual */ const char *Start(const char * const *param);
+
+	/* virtual */ void Stop();
+
+	/* virtual */ void MakeDirty(int left, int top, int width, int height);
+
+	/* virtual */ void MainLoop();
+
+	/* virtual */ bool ChangeResolution(int w, int h);
+
+	/* virtual */ void ToggleFullscreen(bool fullscreen);
+};
+
+class FVideoDriver_Dedicated: public VideoDriverFactory<FVideoDriver_Dedicated> {
+public:
+	static const int priority = 0;
+	/* virtual */ const char *GetName() { return "dedicated"; }
+	/* virtual */ const char *GetDescription() { return "Dedicated Video Driver"; }
+	/* virtual */ Driver *CreateInstance() { return new VideoDriver_Dedicated(); }
+};
 
 #endif /* VIDEO_DEDICATED_H */
--- a/src/video/null_v.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/video/null_v.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -5,41 +5,38 @@
 #include "../gfx.h"
 #include "../variables.h"
 #include "../window.h"
+#include "../debug.h"
+#include "../blitter/factory.hpp"
 #include "null_v.h"
 
-static Pixel *_null_video_mem = NULL;
+static FVideoDriver_Null iFVideoDriver_Null;
 
-static const char* NullVideoStart(const char* const* parm)
+const char *VideoDriver_Null::Start(const char* const *parm)
 {
+	this->ticks = GetDriverParamInt(parm, "ticks", 1000);
 	_screen.width = _screen.pitch = _cur_resolution[0];
 	_screen.height = _cur_resolution[1];
-	_null_video_mem = (Pixel *)malloc(_cur_resolution[0] * _cur_resolution[1] * sizeof(Pixel));
+	/* Do not render, nor blit */
+	DEBUG(misc, 1, "Forcing blitter 'null'...");
+	BlitterFactoryBase::SelectBlitter("null");
 	return NULL;
 }
 
-static void NullVideoStop() { free(_null_video_mem); }
+void VideoDriver_Null::Stop() { }
 
-static void NullVideoMakeDirty(int left, int top, int width, int height) {}
+void VideoDriver_Null::MakeDirty(int left, int top, int width, int height) {}
 
-static void NullVideoMainLoop()
+void VideoDriver_Null::MainLoop()
 {
 	uint i;
 
-	for (i = 0; i < 1000; i++) {
+	for (i = 0; i < this->ticks; i++) {
 		GameLoop();
-		_screen.dst_ptr = _null_video_mem;
+		_screen.dst_ptr = NULL;
 		UpdateWindows();
 	}
 }
 
-static bool NullVideoChangeRes(int w, int h) { return false; }
-static void NullVideoFullScreen(bool fs) {}
+bool VideoDriver_Null::ChangeResolution(int w, int h) { return false; }
 
-const HalVideoDriver _null_video_driver = {
-	NullVideoStart,
-	NullVideoStop,
-	NullVideoMakeDirty,
-	NullVideoMainLoop,
-	NullVideoChangeRes,
-	NullVideoFullScreen,
-};
+void VideoDriver_Null::ToggleFullscreen(bool fs) {}
--- a/src/video/null_v.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/video/null_v.h	Sat Jul 14 19:42:58 2007 +0000
@@ -3,8 +3,32 @@
 #ifndef VIDEO_NULL_H
 #define VIDEO_NULL_H
 
-#include "../hal.h"
+#include "video_driver.hpp"
 
-extern const HalVideoDriver _null_video_driver;
+class VideoDriver_Null: public VideoDriver {
+private:
+	uint ticks;
+
+public:
+	/* virtual */ const char *Start(const char * const *param);
+
+	/* virtual */ void Stop();
+
+	/* virtual */ void MakeDirty(int left, int top, int width, int height);
+
+	/* virtual */ void MainLoop();
+
+	/* virtual */ bool ChangeResolution(int w, int h);
+
+	/* virtual */ void ToggleFullscreen(bool fullscreen);
+};
+
+class FVideoDriver_Null: public VideoDriverFactory<FVideoDriver_Null> {
+public:
+	static const int priority = 1;
+	/* virtual */ const char *GetName() { return "null"; }
+	/* virtual */ const char *GetDescription() { return "Null Video Driver"; }
+	/* virtual */ Driver *CreateInstance() { return new VideoDriver_Null(); }
+};
 
 #endif /* VIDEO_NULL_H */
--- a/src/video/sdl_v.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/video/sdl_v.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -13,9 +13,12 @@
 #include "../window.h"
 #include "../network/network.h"
 #include "../variables.h"
+#include "../blitter/factory.hpp"
 #include "sdl_v.h"
 #include <SDL.h>
 
+static FVideoDriver_SDL iFVideoDriver_SDL;
+
 static SDL_Surface *_sdl_screen;
 static bool _all_modes;
 
@@ -23,7 +26,7 @@
 static SDL_Rect _dirty_rects[MAX_DIRTY_RECTS];
 static int _num_dirty_rects;
 
-static void SdlVideoMakeDirty(int left, int top, int width, int height)
+void VideoDriver_SDL::MakeDirty(int left, int top, int width, int height)
 {
 	if (_num_dirty_rects < MAX_DIRTY_RECTS) {
 		_dirty_rects[_num_dirty_rects].x = left;
@@ -56,9 +59,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;
 	}
 }
 
@@ -172,10 +191,13 @@
 	extern const char _openttd_revision[];
 	SDL_Surface *newscreen, *icon;
 	char caption[50];
+	int bpp = BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth();
 
 	GetAvailableVideoMode(&w, &h);
 
-	DEBUG(driver, 1, "SDL: using mode %dx%d", w, h);
+	DEBUG(driver, 1, "SDL: using mode %dx%dx%d", w, h, bpp);
+
+	if (bpp == 0) error("Can't use a blitter that blits 0 bpp for normal visuals");
 
 	/* Give the application an icon */
 	icon = SDL_CALL SDL_LoadBMP(ICON_DIR PATHSEP "openttd.32.bmp");
@@ -189,14 +211,13 @@
 	}
 
 	// DO NOT CHANGE TO HWSURFACE, IT DOES NOT WORK
-	newscreen = SDL_CALL SDL_SetVideoMode(w, h, 8, SDL_SWSURFACE | SDL_HWPALETTE | (_fullscreen ? SDL_FULLSCREEN : SDL_RESIZABLE));
+	newscreen = SDL_CALL SDL_SetVideoMode(w, h, bpp, SDL_SWSURFACE | SDL_HWPALETTE | (_fullscreen ? SDL_FULLSCREEN : SDL_RESIZABLE));
 	if (newscreen == NULL)
 		return false;
 
 	_screen.width = newscreen->w;
 	_screen.height = newscreen->h;
-	_screen.pitch = newscreen->pitch / sizeof(Pixel);
-
+	_screen.pitch = newscreen->pitch / (bpp / 8);
 	_sdl_screen = newscreen;
 	InitPalette();
 
@@ -396,7 +417,7 @@
 	return -1;
 }
 
-static const char *SdlVideoStart(const char * const *parm)
+const char *VideoDriver_SDL::Start(const char * const *parm)
 {
 	char buf[30];
 
@@ -415,14 +436,15 @@
 	return NULL;
 }
 
-static void SdlVideoStop()
+void VideoDriver_SDL::Stop()
 {
 	SdlClose(SDL_INIT_VIDEO);
 }
 
-static void SdlVideoMainLoop()
+void VideoDriver_SDL::MainLoop()
 {
 	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;
@@ -453,13 +475,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 =
@@ -469,7 +490,7 @@
 				(keys[SDLK_DOWN]  ? 8 : 0);
 			GameLoop();
 
-			_screen.dst_ptr = (Pixel*)_sdl_screen->pixels;
+			_screen.dst_ptr = _sdl_screen->pixels;
 			UpdateWindows();
 			if (++pal_tick > 4) {
 				CheckPaletteAnim();
@@ -478,7 +499,7 @@
 			DrawSurfaceToScreen();
 		} else {
 			SDL_CALL SDL_Delay(1);
-			_screen.dst_ptr = (Pixel*)_sdl_screen->pixels;
+			_screen.dst_ptr = _sdl_screen->pixels;
 			DrawTextMessage();
 			DrawMouseCursor();
 			DrawSurfaceToScreen();
@@ -486,28 +507,19 @@
 	}
 }
 
-static bool SdlVideoChangeRes(int w, int h)
+bool VideoDriver_SDL::ChangeResolution(int w, int h)
 {
 	return CreateMainSurface(w, h);
 }
 
-static void SdlVideoFullScreen(bool full_screen)
+void VideoDriver_SDL::ToggleFullscreen(bool fullscreen)
 {
-	_fullscreen = full_screen;
+	_fullscreen = fullscreen;
 	GetVideoModes(); // get the list of available video modes
-	if (_num_resolutions == 0 || !_video_driver->change_resolution(_cur_resolution[0], _cur_resolution[1])) {
+	if (_num_resolutions == 0 || !this->ChangeResolution(_cur_resolution[0], _cur_resolution[1])) {
 		// switching resolution failed, put back full_screen to original status
 		_fullscreen ^= true;
 	}
 }
 
-const HalVideoDriver _sdl_video_driver = {
-	SdlVideoStart,
-	SdlVideoStop,
-	SdlVideoMakeDirty,
-	SdlVideoMainLoop,
-	SdlVideoChangeRes,
-	SdlVideoFullScreen,
-};
-
 #endif /* WITH_SDL */
--- a/src/video/sdl_v.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/video/sdl_v.h	Sat Jul 14 19:42:58 2007 +0000
@@ -3,8 +3,29 @@
 #ifndef VIDEO_SDL_H
 #define VIDEO_SDL_H
 
-#include "../hal.h"
+#include "video_driver.hpp"
 
-extern const HalVideoDriver _sdl_video_driver;
+class VideoDriver_SDL: public VideoDriver {
+public:
+	/* virtual */ const char *Start(const char * const *param);
+
+	/* virtual */ void Stop();
+
+	/* virtual */ void MakeDirty(int left, int top, int width, int height);
+
+	/* virtual */ void MainLoop();
+
+	/* virtual */ bool ChangeResolution(int w, int h);
+
+	/* virtual */ void ToggleFullscreen(bool fullscreen);
+};
+
+class FVideoDriver_SDL: public VideoDriverFactory<FVideoDriver_SDL> {
+public:
+	static const int priority = 5;
+	/* virtual */ const char *GetName() { return "sdl"; }
+	/* virtual */ const char *GetDescription() { return "SDL Video Driver"; }
+	/* virtual */ Driver *CreateInstance() { return new VideoDriver_SDL(); }
+};
 
 #endif /* VIDEO_SDL_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/video/video_driver.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -0,0 +1,35 @@
+/* $Id$ */
+
+#ifndef VIDEO_VIDEO_DRIVER_HPP
+#define VIDEO_VIDEO_DRIVER_HPP
+
+#include "../driver.h"
+
+class VideoDriver: public Driver {
+public:
+	virtual void MakeDirty(int left, int top, int width, int height) = 0;
+
+	virtual void MainLoop() = 0;
+
+	virtual bool ChangeResolution(int w, int h) = 0;
+
+	virtual void ToggleFullscreen(bool fullscreen) = 0;
+};
+
+class VideoDriverFactoryBase: public DriverFactoryBase {
+};
+
+template <class T>
+class VideoDriverFactory: public VideoDriverFactoryBase {
+public:
+	VideoDriverFactory() { this->RegisterDriver(((T *)this)->GetName(), Driver::DT_VIDEO, ((T *)this)->priority); }
+
+	/**
+	 * Get the long, human readable, name for the Driver-class.
+	 */
+	const char *GetName();
+};
+
+extern VideoDriver *_video_driver;
+
+#endif /* VIDEO_VIDEO_DRIVER_HPP */
--- a/src/video/win32_v.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/video/win32_v.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -9,6 +9,7 @@
 #include "../variables.h"
 #include "../win32.h"
 #include "../window.h"
+#include "../blitter/factory.hpp"
 #include "win32_v.h"
 #include <windows.h>
 #include <tchar.h>
@@ -16,22 +17,18 @@
 static struct {
 	HWND main_wnd;
 	HBITMAP dib_sect;
-	Pixel *bitmap_bits;
-	Pixel *buffer_bits;
-	Pixel *alloced_bits;
+	void *buffer_bits;
 	HPALETTE gdi_palette;
 	int width;
 	int height;
 	int width_org;
 	int height_org;
 	bool fullscreen;
-	bool double_size;
 	bool has_focus;
 	bool running;
 } _wnd;
 
 bool _force_full_redraw;
-bool _double_size;
 bool _window_maximize;
 uint _display_hz;
 uint _fullscreen_bpp;
@@ -136,16 +133,11 @@
 
 static void ClientSizeChanged(int w, int h)
 {
-	if (_wnd.double_size) {
-		w /= 2;
-		h /= 2;
-	}
-
 	// allocate new dib section of the new size
 	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 +201,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 +306,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);
@@ -319,11 +410,6 @@
 				DrawMouseCursor();
 			}
 
-			if (_wnd.double_size) {
-				x /= 2;
-				y /= 2;
-			}
-
 			if (_cursor.fix_at) {
 				int dx = x - _cursor.pos.x;
 				int dy = y - _cursor.pos.y;
@@ -334,10 +420,6 @@
 					pt.x = _cursor.pos.x;
 					pt.y = _cursor.pos.y;
 
-					if (_wnd.double_size) {
-						pt.x *= 2;
-						pt.y *= 2;
-					}
 					ClientToScreen(hwnd, &pt);
 					SetCursorPos(pt.x, pt.y);
 				}
@@ -400,13 +482,6 @@
 			 * WM_KEYDOWN only handles CTRL+ commands and special keys like VK_LEFT, etc. */
 			if (keycode == 0 || (keycode > WKC_PAUSE && GB(keycode, 13, 4) == 0)) return 0;
 
-			if (keycode == ('D' | WKC_CTRL) && !_wnd.fullscreen) {
-				_double_size ^= 1;
-				_wnd.double_size = _double_size;
-				ClientSizeChanged(_wnd.width, _wnd.height);
-				MarkWholeScreenDirty();
-			}
-
 			HandleKeypress(0 | (keycode << 16));
 			return 0;
 		}
@@ -455,16 +530,8 @@
 
 			w = r->right - r->left - (r2.right - r2.left);
 			h = r->bottom - r->top - (r2.bottom - r2.top);
-			if (_wnd.double_size) {
-				w /= 2;
-				h /= 2;
-			}
 			w = clamp(w, 64, MAX_SCREEN_WIDTH);
 			h = clamp(h, 64, MAX_SCREEN_HEIGHT);
-			if (_wnd.double_size) {
-				w *= 2;
-				h *= 2;
-			}
 			SetRect(&r2, 0, 0, w, h);
 
 			AdjustWindowRect(&r2, GetWindowLong(hwnd, GWL_STYLE), FALSE);
@@ -532,10 +599,34 @@
 			return 0;
 		}
 
-		case WM_ACTIVATEAPP:
-			_wnd.has_focus = (wParam != 0);
+		case WM_SETFOCUS:
+			_wnd.has_focus = true;
 			break;
+
+		case WM_KILLFOCUS:
+			_wnd.has_focus = false;
+			break;
+
+#if !defined(WINCE)
+		case WM_ACTIVATE: {
+			bool active = (LOWORD(wParam) != WA_INACTIVE);
+			bool minimized = (HIWORD(wParam) != 0);
+			if (_wnd.fullscreen) {
+				if (active && minimized) {
+					/* Restore the game window */
+					ShowWindow(hwnd, SW_RESTORE);
+					MakeWindow(true);
+				} else if (!active && !minimized) {
+					/* Minimise the window and restore desktop */
+					ShowWindow(hwnd, SW_MINIMIZE);
+					ChangeDisplaySettings(NULL, 0);
+				}
+			}
+			break;
+		}
 	}
+#endif
+
 	return DefWindowProc(hwnd, msg, wParam, lParam);
 }
 
@@ -563,135 +654,41 @@
 	}
 }
 
-static void MakeWindow(bool full_screen)
-{
-	_fullscreen = full_screen;
-
-	_wnd.double_size = _double_size && !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;
-
-		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 bool AllocateDibSection(int w, int h)
 {
 	BITMAPINFO *bi;
 	HDC dc;
+	int bpp = BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth();
 
 	w = clamp(w, 64, MAX_SCREEN_WIDTH);
 	h = clamp(h, 64, MAX_SCREEN_HEIGHT);
 
+	if (bpp == 0) error("Can't use a blitter that blits 0 bpp for normal visuals");
+
 	if (w == _screen.width && h == _screen.height)
 		return false;
 
 	_screen.width = w;
-	_screen.pitch = ALIGN(w, 4);
+	_screen.pitch = (bpp == 8) ? ALIGN(w, 4) : w;
 	_screen.height = h;
-
-	if (_wnd.alloced_bits) {
-		free(_wnd.alloced_bits);
-		_wnd.alloced_bits = NULL;
-	}
-
 	bi = (BITMAPINFO*)alloca(sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256);
 	memset(bi, 0, sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256);
 	bi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
 
-	if (_wnd.double_size) {
-		w = ALIGN(w, 4);
-		_wnd.alloced_bits = _wnd.buffer_bits = (Pixel *)malloc(w * h * sizeof(Pixel));
-		w *= 2;
-		h *= 2;
-	}
-
 	bi->bmiHeader.biWidth = _wnd.width = w;
 	bi->bmiHeader.biHeight = -(_wnd.height = h);
 
 	bi->bmiHeader.biPlanes = 1;
-	bi->bmiHeader.biBitCount = 8;
+	bi->bmiHeader.biBitCount = BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth();
 	bi->bmiHeader.biCompression = BI_RGB;
 
 	if (_wnd.dib_sect) DeleteObject(_wnd.dib_sect);
 
 	dc = GetDC(0);
-	_wnd.dib_sect = CreateDIBSection(dc, bi, DIB_RGB_COLORS, (VOID**)&_wnd.bitmap_bits, NULL, 0);
+	_wnd.dib_sect = CreateDIBSection(dc, bi, DIB_RGB_COLORS, (VOID**)&_wnd.buffer_bits, NULL, 0);
 	if (_wnd.dib_sect == NULL) error("CreateDIBSection failed");
 	ReleaseDC(0, dc);
 
-	if (!_wnd.double_size) _wnd.buffer_bits = _wnd.bitmap_bits;
-
 	return true;
 }
 
@@ -723,7 +720,7 @@
 	 * Doesn't really matter since we don't pass a string anyways, but still
 	 * a letdown */
 	for (i = 0; EnumDisplaySettingsA(NULL, i, &dm) != 0; i++) {
-		if (dm.dmBitsPerPel == 8 && IS_INT_INSIDE(dm.dmPelsWidth, 640, MAX_SCREEN_WIDTH + 1) &&
+		if (dm.dmBitsPerPel == BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() && IS_INT_INSIDE(dm.dmPelsWidth, 640, MAX_SCREEN_WIDTH + 1) &&
 				IS_INT_INSIDE(dm.dmPelsHeight, 480, MAX_SCREEN_HEIGHT + 1)) {
 			uint j;
 
@@ -754,8 +751,9 @@
 	SortResolutions(_num_resolutions);
 }
 
+static FVideoDriver_Win32 iFVideoDriver_Win32;
 
-static const char *Win32GdiStart(const char * const *parm)
+const char *VideoDriver_Win32::Start(const char * const *parm)
 {
 	memset(&_wnd, 0, sizeof(_wnd));
 
@@ -777,7 +775,7 @@
 	return NULL;
 }
 
-static void Win32GdiStop()
+void VideoDriver_Win32::Stop()
 {
 	DeleteObject(_wnd.gdi_palette);
 	DeleteObject(_wnd.dib_sect);
@@ -786,57 +784,28 @@
 #if !defined(WINCE)
 	if (_wnd.fullscreen) ChangeDisplaySettings(NULL, 0);
 #endif
-	if (_wnd.double_size) {
-		_cur_resolution[0] *= 2;
-		_cur_resolution[1] *= 2;
-	}
-
 	MyShowCursor(true);
 }
 
-// simple upscaler by 2
-static void filter(int left, int top, int width, int height)
-{
-	uint p = _screen.pitch;
-	const Pixel *s = _wnd.buffer_bits + top * p + left;
-	Pixel *d = _wnd.bitmap_bits + top * p * 4 + left * 2;
-
-	for (; height > 0; height--) {
-		int i;
-
-		for (i = 0; i != width; i++) {
-			d[i * 2] = d[i * 2 + 1] = d[i * 2 + p * 2] = d[i * 2 + 1 + p * 2] = s[i];
-		}
-		s += p;
-		d += p * 4;
-	}
-}
-
-static void Win32GdiMakeDirty(int left, int top, int width, int height)
+void VideoDriver_Win32::MakeDirty(int left, int top, int width, int height)
 {
 	RECT r = { left, top, left + width, top + height };
 
-	if (_wnd.double_size) {
-		filter(left, top, width, height);
-		r.left *= 2;
-		r.top *= 2;
-		r.right *= 2;
-		r.bottom *= 2;
-	}
 	InvalidateRect(_wnd.main_wnd, &r, FALSE);
 }
 
 static void CheckPaletteAnim()
 {
-	if (_pal_last_dirty == -1)
+	if (_pal_count_dirty == 0)
 		return;
 	InvalidateRect(_wnd.main_wnd, NULL, FALSE);
 }
 
-static void Win32GdiMainLoop()
+void VideoDriver_Win32::MainLoop()
 {
 	MSG mesg;
 	uint32 cur_ticks = GetTickCount();
+	uint32 last_cur_ticks = cur_ticks;
 	uint32 next_tick = cur_ticks + 30;
 
 	_wnd.running = true;
@@ -865,12 +834,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) {
@@ -906,7 +874,7 @@
 	}
 }
 
-static bool Win32GdiChangeRes(int w, int h)
+bool VideoDriver_Win32::ChangeResolution(int w, int h)
 {
 	_wnd.width = _wnd.width_org = w;
 	_wnd.height = _wnd.height_org = h;
@@ -916,16 +884,7 @@
 	return true;
 }
 
-static void Win32GdiFullScreen(bool full_screen)
+void VideoDriver_Win32::ToggleFullscreen(bool full_screen)
 {
 	MakeWindow(full_screen);
 }
-
-const HalVideoDriver _win32_video_driver = {
-	Win32GdiStart,
-	Win32GdiStop,
-	Win32GdiMakeDirty,
-	Win32GdiMainLoop,
-	Win32GdiChangeRes,
-	Win32GdiFullScreen,
-};
--- a/src/video/win32_v.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/video/win32_v.h	Sat Jul 14 19:42:58 2007 +0000
@@ -3,8 +3,29 @@
 #ifndef VIDEO_WIN32_H
 #define VIDEO_WIN32_H
 
-#include "../hal.h"
+#include "video_driver.hpp"
 
-extern const HalVideoDriver _win32_video_driver;
+class VideoDriver_Win32: public VideoDriver {
+public:
+	/* virtual */ const char *Start(const char * const *param);
+
+	/* virtual */ void Stop();
+
+	/* virtual */ void MakeDirty(int left, int top, int width, int height);
+
+	/* virtual */ void MainLoop();
+
+	/* virtual */ bool ChangeResolution(int w, int h);
+
+	/* virtual */ void ToggleFullscreen(bool fullscreen);
+};
+
+class FVideoDriver_Win32: public VideoDriverFactory<FVideoDriver_Win32> {
+public:
+	static const int priority = 10;
+	/* virtual */ const char *GetName() { return "win32"; }
+	/* virtual */ const char *GetDescription() { return "Win32 GDI Video Driver"; }
+	/* virtual */ Driver *CreateInstance() { return new VideoDriver_Win32(); }
+};
 
 #endif /* VIDEO_WIN32_H */
--- a/src/viewport.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/viewport.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -23,6 +23,8 @@
 #include "waypoint.h"
 #include "variables.h"
 #include "train.h"
+#include "roadveh.h"
+#include "blitter/factory.hpp"
 #include "table/station_air.h"
 
 #define VIEWPORT_DRAW_MEM (65536 * 2)
@@ -57,7 +59,7 @@
 	StringSpriteToDraw *next;
 	int32 x;
 	int32 y;
-	uint32 params[2];
+	uint64 params[2];
 	uint16 width;
 };
 
@@ -579,7 +581,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;
@@ -648,6 +650,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;
@@ -865,9 +871,6 @@
 			}
 			break;
 
-		case ZOOM_LVL_OUT_16X:
-			break;
-
 		default: NOT_REACHED();
 	}
 }
@@ -938,9 +941,6 @@
 			}
 			break;
 
-		case ZOOM_LVL_OUT_16X:
-			break;
-
 		default: NOT_REACHED();
 	}
 }
@@ -950,7 +950,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;
@@ -1011,9 +1011,6 @@
 			}
 			break;
 
-		case ZOOM_LVL_OUT_16X:
-			break;
-
 		default: NOT_REACHED();
 	}
 }
@@ -1084,9 +1081,6 @@
 			}
 			break;
 
-		case ZOOM_LVL_OUT_16X:
-			break;
-
 		default: NOT_REACHED();
 	}
 }
@@ -1287,7 +1281,7 @@
 	x = UnScaleByZoom(vd.dpi.left - (vp->virtual_left & mask), vp->zoom) + vp->left;
 	y = UnScaleByZoom(vd.dpi.top - (vp->virtual_top & mask), vp->zoom) + vp->top;
 
-	vd.dpi.dst_ptr = old_dpi->dst_ptr + x - old_dpi->left + (y - old_dpi->top) * old_dpi->pitch;
+	vd.dpi.dst_ptr = BlitterFactoryBase::GetCurrentBlitter()->MoveTo(old_dpi->dst_ptr, x - old_dpi->left, y - old_dpi->top);
 
 	vd.parent_list = parent_list;
 	vd.eof_parent_list = endof(parent_list);
@@ -1378,6 +1372,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;
@@ -1388,47 +1406,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);
 	}
 }
@@ -1588,9 +1584,6 @@
 			}
 			break;
 
-		case ZOOM_LVL_OUT_16X:
-			break;
-
 		default: NOT_REACHED();
 	}
 
@@ -1649,9 +1642,6 @@
 			}
 			break;
 
-		case ZOOM_LVL_OUT_16X:
-			break;
-
 		default: NOT_REACHED();
 	}
 
@@ -1710,9 +1700,6 @@
 			}
 			break;
 
-		case ZOOM_LVL_OUT_16X:
-			break;
-
 		default: NOT_REACHED();
 	}
 
@@ -1771,9 +1758,6 @@
 			}
 			break;
 
-		case ZOOM_LVL_OUT_16X:
-			break;
-
 		default: NOT_REACHED();
 	}
 
@@ -1795,12 +1779,18 @@
 	ShowTrainViewWindow(v);
 }
 
+static void SafeShowRoadVehViewWindow(const Vehicle *v)
+{
+	if (!IsRoadVehFront(v)) v = GetFirstVehicleInChain(v);
+	ShowRoadVehViewWindow(v);
+}
+
 static void Nop(const Vehicle *v) {}
 
 typedef void OnVehicleClickProc(const Vehicle *v);
 static OnVehicleClickProc* const _on_vehicle_click_proc[] = {
 	SafeShowTrainViewWindow,
-	ShowRoadVehViewWindow,
+	SafeShowRoadVehViewWindow,
 	ShowShipViewWindow,
 	ShowAircraftViewWindow,
 	Nop, // Special vehicles
@@ -1951,7 +1941,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;
@@ -2002,8 +1999,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();
 
@@ -2051,7 +2048,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;
@@ -2327,7 +2324,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);
@@ -2406,7 +2403,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
@@ -2439,7 +2436,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/viewport.h	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/water_cmd.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -23,6 +23,7 @@
 #include "depot.h"
 #include "vehicle_gui.h"
 #include "train.h"
+#include "roadveh.h"
 #include "water_map.h"
 #include "newgrf.h"
 #include "newgrf_canal.h"
@@ -55,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);
@@ -81,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;
 
@@ -97,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;
 
@@ -122,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 */
@@ -163,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));
 
@@ -182,7 +180,7 @@
 		DoClearSquare(tile - delta);
 	}
 
-	return _price.clear_water * 2;
+	return CommandCost(_price.clear_water * 2);
 }
 
 static void MarkTilesAroundDirty(TileIndex tile)
@@ -199,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;
 
@@ -221,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;
@@ -248,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);
@@ -261,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)) {
@@ -273,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:
@@ -301,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);
@@ -317,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);
 			}
 		}
 
@@ -342,7 +339,6 @@
 
 		default:
 			NOT_REACHED();
-			return 0;
 	}
 }
 
@@ -587,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);
 				}
@@ -602,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);
 		}
@@ -617,6 +613,21 @@
  */
 static Vehicle *FindFloodableVehicleOnTile(TileIndex tile)
 {
+	if (IsTileType(tile, MP_STATION) && IsAirport(tile)) {
+		const Station *st = GetStationByTile(tile);
+		const AirportFTAClass *airport = st->Airport();
+		for (uint x = 0; x < airport->size_x; x++) {
+			for (uint y = 0; y < airport->size_y; y++) {
+				tile = TILE_ADDXY(st->airport_tile, x, y);
+				Vehicle *v = FindVehicleOnTileZ(tile, 1 + airport->delta_z);
+				if (v != NULL && (v->vehstatus & VS_CRASHED) == 0) return v;
+			}
+		}
+
+		/* No vehicle could be flooded on this airport anymore */
+		return NULL;
+	}
+
 	if (!IsBridgeTile(tile)) return FindVehicleOnTileZ(tile, 0);
 
 	TileIndex end = GetOtherBridgeEnd(tile);
@@ -641,29 +652,49 @@
 	if (!(v->vehstatus & VS_CRASHED)) {
 		uint16 pass = 0;
 
-		if (v->type == VEH_ROAD) { // flood bus/truck
-			pass = 1; // driver
-			if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) pass += v->cargo_count;
+		if (v->type == VEH_TRAIN || v->type == VEH_ROAD || v->type == VEH_AIRCRAFT) {
+			if (v->type == VEH_AIRCRAFT) {
+				/* Crashing aircraft are always at z_pos == 1, never on z_pos == 0,
+				 * because that's always the shadow. Except for the heliport, because
+				 * that station has a big z_offset for the aircraft. */
+				if (!IsTileType(v->tile, MP_STATION) || !IsAirport(v->tile) || GetTileMaxZ(v->tile) != 0) return;
+				const Station *st = GetStationByTile(v->tile);
+				const AirportFTAClass *airport = st->Airport();
 
-			v->vehstatus |= VS_CRASHED;
-			v->u.road.crashed_ctr = 2000; // max 2220, disappear pretty fast
-			RebuildVehicleLists();
-		} else if (v->type == VEH_TRAIN) {
+				if (v->z_pos != airport->delta_z + 1) return;
+			}
 			Vehicle *u;
 
-			v = GetFirstVehicleInChain(v);
+			if (v->type != VEH_AIRCRAFT) v = GetFirstVehicleInChain(v);
 			u = v;
-			if (IsFrontEngine(v)) pass = 4; // driver
 
-			/* crash all wagons, and count passangers */
+			/* 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)
 
 			v = u;
-			v->u.rail.crash_anim_pos = 4000; // max 4440, disappear pretty fast
+
+			switch (v->type) {
+				default: NOT_REACHED();
+				case VEH_TRAIN:
+					if (IsFrontEngine(v)) pass += 4; // driver
+					v->u.rail.crash_anim_pos = 4000; // max 4440, disappear pretty fast
+					break;
+
+				case VEH_ROAD:
+					if (IsRoadVehFront(v)) pass += 1; // driver
+					v->u.road.crashed_ctr = 2000; // max 2220, disappear pretty fast
+					break;
+
+				case VEH_AIRCRAFT:
+					pass += 2; // driver
+					v->u.air.crashed_counter = 9000; // max 10000, disappear pretty fast
+					break;
+			}
+
 			RebuildVehicleLists();
 		} else {
 			return;
--- a/src/water_map.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/water_map.h	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/waypoint.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -24,6 +24,8 @@
 #include "yapf/yapf.h"
 #include "date.h"
 #include "newgrf.h"
+#include "string.h"
+#include "strings.h"
 
 enum {
 	MAX_WAYPOINTS_PER_TOWN = 64,
@@ -201,7 +203,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 +274,7 @@
 		YapfNotifyTrackLayoutChange(tile, AxisToTrack(axis));
 	}
 
-	return _price.build_train_depot;
+	return CommandCost(_price.build_train_depot);
 }
 
 /**
@@ -295,7 +297,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 +326,7 @@
 		YapfNotifyTrackLayoutChange(tile, track);
 	}
 
-	return _price.remove_train_depot;
+	return CommandCost(_price.remove_train_depot);
 }
 
 /**
@@ -335,12 +337,26 @@
  * @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);
 }
 
+static bool IsUniqueWaypointName(const char *name)
+{
+	const Waypoint *wp;
+	char buf[512];
+
+	FOR_ALL_WAYPOINTS(wp) {
+		SetDParam(0, wp->index);
+		GetString(buf, STR_WAYPOINT_RAW, lastof(buf));
+		if (strcmp(buf, name) == 0) return false;
+	}
+
+	return true;
+}
+
 /**
  * Rename a waypoint.
  * @param tile unused
@@ -349,19 +365,23 @@
  * @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;
 
 	if (!IsValidWaypointID(p1)) return CMD_ERROR;
 
-	if (_cmd_text[0] != '\0') {
-		StringID str = AllocateNameUnique(_cmd_text, 0);
+	wp = GetWaypoint(p1);
+	if (!CheckTileOwnership(wp->xy)) return CMD_ERROR;
+
+	if (!StrEmpty(_cmd_text)) {
+		if (!IsUniqueWaypointName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
+
+		StringID str = AllocateName(_cmd_text, 0);
 
 		if (str == 0) return CMD_ERROR;
 
 		if (flags & DC_EXEC) {
-			wp = GetWaypoint(p1);
 			if (wp->string != STR_NULL) DeleteName(wp->string);
 
 			wp->string = str;
@@ -374,7 +394,6 @@
 		}
 	} else {
 		if (flags & DC_EXEC) {
-			wp = GetWaypoint(p1);
 			if (wp->string != STR_NULL) DeleteName(wp->string);
 
 			MakeDefaultWaypointName(wp);
@@ -382,7 +401,7 @@
 			MarkWholeScreenDirty();
 		}
 	}
-	return 0;
+	return CommandCost();
 }
 
 /**
--- a/src/waypoint.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/waypoint.h	Sat Jul 14 19:42: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/win32.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/win32.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -3,7 +3,6 @@
 /** @file win32.cpp Implementation of MS Windows system calls */
 
 #include "stdafx.h"
-#include "hal.h"
 #include "openttd.h"
 #include "debug.h"
 #include "functions.h"
@@ -23,11 +22,13 @@
 #include "variables.h"
 #include "win32.h"
 #include "fios.h" // opendir/readdir/closedir
+#include "fileio.h"
 #include <ctype.h>
 #include <tchar.h>
 #include <errno.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <shlobj.h>
 
 static bool _has_console;
 
@@ -224,7 +225,7 @@
 
 static bool EmergencySave()
 {
-	SaveOrLoad("crash.sav", SL_SAVE);
+	SaveOrLoad("crash.sav", SL_SAVE, BASE_DIR);
 	return true;
 }
 
@@ -946,20 +947,66 @@
 }
 #endif
 
-void DetermineBasePaths(const char *exe)
+char *getcwd(char *buf, size_t size)
 {
-	_paths.personal_dir = _paths.game_data_dir = MallocT<char>(MAX_PATH);
-	_paths.second_data_dir = NULL;
 #if defined(UNICODE)
 	TCHAR path[MAX_PATH];
 	GetCurrentDirectory(MAX_PATH - 1, path);
-	convert_from_fs(path, _paths.personal_dir, MAX_PATH);
+	convert_from_fs(path, buf, size);
 #else
-	GetCurrentDirectory(MAX_PATH - 1, _paths.personal_dir);
+	GetCurrentDirectory(size, buf);
+#endif
+	return buf;
+}
+
+
+void DetermineBasePaths(const char *exe)
+{
+	char tmp[MAX_PATH];
+	TCHAR path[MAX_PATH];
+#ifdef WITH_PERSONAL_DIR
+	SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, path);
+	strncpy(tmp, WIDE_TO_MB_BUFFER(path, tmp, lengthof(tmp)), lengthof(tmp));
+	AppendPathSeparator(tmp, MAX_PATH);
+	ttd_strlcat(tmp, PERSONAL_DIR, MAX_PATH);
+	AppendPathSeparator(tmp, MAX_PATH);
+	_searchpaths[SP_PERSONAL_DIR] = strdup(tmp);
+
+	SHGetFolderPath(NULL, CSIDL_COMMON_DOCUMENTS, NULL, SHGFP_TYPE_CURRENT, path);
+	strncpy(tmp, WIDE_TO_MB_BUFFER(path, tmp, lengthof(tmp)), lengthof(tmp));
+	AppendPathSeparator(tmp, MAX_PATH);
+	ttd_strlcat(tmp, PERSONAL_DIR, MAX_PATH);
+	AppendPathSeparator(tmp, MAX_PATH);
+	_searchpaths[SP_SHARED_DIR] = strdup(tmp);
+#else
+	_searchpaths[SP_PERSONAL_DIR] = NULL;
+	_searchpaths[SP_SHARED_DIR]   = NULL;
 #endif
 
-	_paths.personal_dir[0] = toupper(_paths.personal_dir[0]);
-	AppendPathSeparator(_paths.personal_dir,  MAX_PATH);
+	/* Get the path to working directory of OpenTTD */
+	getcwd(tmp, lengthof(tmp));
+	AppendPathSeparator(tmp, MAX_PATH);
+	_searchpaths[SP_WORKING_DIR] = strdup(tmp);
+
+	if (!GetModuleFileName(NULL, path, lengthof(path))) {
+		DEBUG(misc, 0, "GetModuleFileName failed (%d)\n", GetLastError());
+		_searchpaths[SP_BINARY_DIR] = NULL;
+	} else {
+		TCHAR exec_dir[MAX_PATH];
+		_tcsncpy(path, MB_TO_WIDE_BUFFER(exe, path, lengthof(path)), lengthof(path));
+		if (!GetFullPathName(path, lengthof(exec_dir), exec_dir, NULL)) {
+			DEBUG(misc, 0, "GetFullPathName failed (%d)\n", GetLastError());
+			_searchpaths[SP_BINARY_DIR] = NULL;
+		} else {
+			strncpy(tmp, WIDE_TO_MB_BUFFER(exec_dir, tmp, lengthof(tmp)), lengthof(tmp));
+			char *s = strrchr(tmp, PATHSEPCHAR);
+			*(s + 1) = '\0';
+			_searchpaths[SP_BINARY_DIR] = strdup(tmp);
+		}
+	}
+
+	_searchpaths[SP_INSTALLATION_DIR]       = NULL;
+	_searchpaths[SP_APPLICATION_BUNDLE_DIR] = NULL;
 }
 
 /**
--- a/src/window.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/window.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -17,6 +17,7 @@
 #include "table/sprites.h"
 #include "genworld.h"
 #include "helpers.hpp"
+#include "blitter/factory.hpp"
 
 /* delta between mouse cursor and upper left corner of dragged window */
 static Point _drag_delta;
@@ -90,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);
@@ -270,7 +271,7 @@
 		dp->left = left - (*wz)->left;
 		dp->top = top - (*wz)->top;
 		dp->pitch = _screen.pitch;
-		dp->dst_ptr = _screen.dst_ptr + top * _screen.pitch + left;
+		dp->dst_ptr = BlitterFactoryBase::GetCurrentBlitter()->MoveTo(_screen.dst_ptr, left, top);
 		dp->zoom = ZOOM_LVL_NORMAL;
 		CallWindowEventNP(*wz, WE_PAINT);
 	}
@@ -637,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--;
@@ -651,8 +652,8 @@
 		_last_z_window++;
 	}
 
+	CallWindowEventNP(w, WE_CREATE);
 	SetWindowDirty(w);
-	CallWindowEventNP(w, WE_CREATE);
 
 	return w;
 }
@@ -1632,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;
@@ -1653,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;
@@ -1679,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 */
@@ -1699,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;
 
 	/*
@@ -1736,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/window.h	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/yapf/follow_track.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -31,6 +31,7 @@
 		m_exitdir = INVALID_DIAGDIR;
 		m_is_station = m_is_bridge = m_is_tunnel = false;
 		m_tiles_skipped = 0;
+		m_err = EC_NONE;
 	}
 
 	FORCEINLINE static TransportType TT() {return Ttr_type_;}
@@ -45,6 +46,7 @@
 	{
 		m_old_tile = old_tile;
 		m_old_td = old_td;
+		m_err = EC_NONE;
 		assert((GetTileTrackStatus(m_old_tile, TT(), m_veh->u.road.compatible_roadtypes) & TrackdirToTrackdirBits(m_old_td)) != 0);
 		m_exitdir = TrackdirToExitdir(m_old_td);
 		if (EnteredDepot()) return true;
@@ -53,9 +55,18 @@
 		if (!QueryNewTileTrackStatus()) return TryReverse();
 		if (!CanEnterNewTile()) return false;
 		m_new_td_bits &= DiagdirReachesTrackdirs(m_exitdir);
-		if (!Allow90degTurns())
+		if (m_new_td_bits == TRACKDIR_BIT_NONE) {
+			m_err = EC_NO_WAY;
+			return false;
+		}
+		if (!Allow90degTurns()) {
 			m_new_td_bits &= (TrackdirBits)~(int)TrackdirCrossesTrackdirs(m_old_td);
-		return (m_new_td_bits != TRACKDIR_BIT_NONE);
+			if (m_new_td_bits == TRACKDIR_BIT_NONE) {
+				m_err = EC_90DEG;
+				return false;
+			}
+		}
+		return true;
 	}
 
 protected:
@@ -126,15 +137,19 @@
 		// road stop can be left at one direction only unless it's a drive-through stop
 		if (IsRoadTT() && IsStandardRoadStopTile(m_old_tile)) {
 			DiagDirection exitdir = GetRoadStopDir(m_old_tile);
-			if (exitdir != m_exitdir)
+			if (exitdir != m_exitdir) {
+				m_err = EC_NO_WAY;
 				return false;
+			}
 		}
 
 		// road depots can be also left in one direction only
 		if (IsRoadTT() && IsTileDepotType(m_old_tile, TT())) {
 			DiagDirection exitdir = GetRoadDepotDirection(m_old_tile);
-			if (exitdir != m_exitdir)
+			if (exitdir != m_exitdir) {
+				m_err = EC_NO_WAY;
 				return false;
+			}
 		}
 		return true;
 	}
@@ -145,29 +160,37 @@
 		if (IsRoadTT() && IsStandardRoadStopTile(m_new_tile)) {
 			// road stop can be entered from one direction only unless it's a drive-through stop
 			DiagDirection exitdir = GetRoadStopDir(m_new_tile);
-			if (ReverseDiagDir(exitdir) != m_exitdir)
+			if (ReverseDiagDir(exitdir) != m_exitdir) {
+				m_err = EC_NO_WAY;
 				return false;
+			}
 		}
 
 		// road and rail depots can also be entered from one direction only
 		if (IsRoadTT() && IsTileDepotType(m_new_tile, TT())) {
 			DiagDirection exitdir = GetRoadDepotDirection(m_new_tile);
-			if (ReverseDiagDir(exitdir) != m_exitdir)
+			if (ReverseDiagDir(exitdir) != m_exitdir) {
+				m_err = EC_NO_WAY;
 				return false;
+			}
 			// don't try to enter other player's depots
 			if (GetTileOwner(m_new_tile) != m_veh->owner) {
+				m_err = EC_OWNER;
 				return false;
 			}
 		}
 		if (IsRailTT() && IsTileDepotType(m_new_tile, TT())) {
 			DiagDirection exitdir = GetRailDepotDirection(m_new_tile);
-			if (ReverseDiagDir(exitdir) != m_exitdir)
+			if (ReverseDiagDir(exitdir) != m_exitdir) {
+				m_err = EC_NO_WAY;
 				return false;
+			}
 		}
 
 		// rail transport is possible only on tiles with the same owner as vehicle
 		if (IsRailTT() && GetTileOwner(m_new_tile) != m_veh->owner) {
 			// different owner
+			m_err = EC_NO_WAY;
 			return false;
 		}
 
@@ -176,6 +199,7 @@
 			RailType rail_type = GetTileRailType(m_new_tile);
 			if (!HASBIT(m_veh->u.rail.compatible_railtypes, rail_type)) {
 				// incompatible rail type
+				m_err = EC_RAIL_TYPE;
 				return false;
 			}
 		}
@@ -185,12 +209,18 @@
 			if (IsTunnel(m_new_tile)) {
 				if (!m_is_tunnel) {
 					DiagDirection tunnel_enterdir = GetTunnelDirection(m_new_tile);
-					if (tunnel_enterdir != m_exitdir) return false;
+					if (tunnel_enterdir != m_exitdir) {
+						m_err = EC_NO_WAY;
+						return false;
+					}
 				}
 			} else if (IsBridge(m_new_tile)) {
 				if (!m_is_bridge) {
 					DiagDirection ramp_enderdir = GetBridgeRampDirection(m_new_tile);
-					if (ramp_enderdir != m_exitdir) return false;
+					if (ramp_enderdir != m_exitdir) {
+						m_err = EC_NO_WAY;
+						return false;
+					}
 				}
 			}
 		}
@@ -247,12 +277,13 @@
 				return true;
 			}
 		}
+		m_err = EC_NO_WAY;
 		return false;
 	}
 
 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/nodelist.hpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/yapf/nodelist.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -127,6 +127,11 @@
 
 	FORCEINLINE int TotalCount() {return m_arr.Size();}
 	FORCEINLINE Titem_& ItemAt(int idx) {return m_arr[idx];}
+
+	template <class D> void Dump(D &dmp) const
+	{
+		dmp.WriteStructT("m_arr", &m_arr);
+	}
 };
 
 #endif /* NODELIST_HPP */
--- a/src/yapf/yapf.h	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/yapf/yapf.h	Sat Jul 14 19:42:58 2007 +0000
@@ -89,6 +89,14 @@
 /** Base struct for track followers. */
 struct FollowTrack_t
 {
+	enum ErrorCode {
+		EC_NONE,
+		EC_OWNER,
+		EC_RAIL_TYPE,
+		EC_90DEG,
+		EC_NO_WAY,
+	};
+
 	const Vehicle*      m_veh;           ///< moving vehicle
 	TileIndex           m_old_tile;      ///< the origin (vehicle moved from) before move
 	Trackdir            m_old_td;        ///< the trackdir (the vehicle was on) before move
@@ -99,6 +107,7 @@
 	bool                m_is_bridge;     ///< last turn passed bridge ramp
 	bool                m_is_station;    ///< last turn passed station
 	int                 m_tiles_skipped; ///< number of skipped tunnel or station tiles
+	ErrorCode           m_err;
 };
 
 /** Initializes FollowTrack_t structure */
--- a/src/yapf/yapf.hpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/yapf/yapf.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -74,10 +74,12 @@
 
 #include "../misc/crc32.hpp"
 #include "../misc/blob.hpp"
+#include "../misc/str.hpp"
 #include "../misc/fixedsizearray.hpp"
 #include "../misc/array.hpp"
 #include "../misc/hashtable.hpp"
 #include "../misc/binaryheap.hpp"
+#include "../misc/dbg_helpers.h"
 #include "nodelist.hpp"
 #include "follow_track.hpp"
 #include "yapf_base.hpp"
--- a/src/yapf/yapf_base.hpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/yapf/yapf_base.hpp	Sat Jul 14 19:42: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);
@@ -280,6 +280,12 @@
 
 	const Vehicle* GetVehicle() const {return m_veh;}
 
+	void DumpBase(DumpTarget &dmp) const
+	{
+		dmp.WriteStructT("m_nodes", &m_nodes);
+		dmp.WriteLine("m_num_steps = %d", m_num_steps);
+	}
+
 	// methods that should be implemented at derived class Types::Tpf (derived from CYapfBaseT)
 
 #if 0
--- a/src/yapf/yapf_costrail.hpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/yapf/yapf_costrail.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -19,8 +19,44 @@
 	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;
+	bool          m_disable_cache;
+
 public:
 	bool          m_stopped_on_first_two_way_signal;
 protected:
@@ -29,6 +65,7 @@
 
 	CYapfCostRailT()
 		: m_max_cost(0)
+		, m_disable_cache(false)
 		, m_stopped_on_first_two_way_signal(false)
 	{
 		// pre-compute look-ahead penalties into array
@@ -53,6 +90,8 @@
 
 	FORCEINLINE int CurveCost(Trackdir td1, Trackdir td2)
 	{
+		assert(IsValidTrackdir(td1));
+		assert(IsValidTrackdir(td2));
 		int cost = 0;
 		if (TrackFollower::Allow90degTurns()
 				&& ((TrackdirToTrackdirBits(td2) & (TrackdirBits)TrackdirCrossesTrackdirs(td1)) != 0)) {
@@ -65,8 +104,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 +138,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 +156,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 +209,254 @@
 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;
+					/* We will need also some information about the last signal (if it was red). */
+					if (segment.m_last_signal_tile != INVALID_TILE) {
+						assert(HasSignalOnTrackdir(segment.m_last_signal_tile, segment.m_last_signal_td));
+						SignalState sig_state = GetSignalStateByTrackdir(segment.m_last_signal_tile, segment.m_last_signal_td);
+						bool is_red = (sig_state == SIGNAL_STATE_RED);
+						n.flags_u.flags_s.m_last_signal_was_red = is_red;
+						if (is_red) {
+							n.m_last_red_signal_type = GetSignalType(segment.m_last_signal_tile, TrackdirToTrack(segment.m_last_signal_td));
+						}
+					}
+					/* 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)) {
+				assert(tf_local.m_err != TrackFollower::EC_NONE);
+				/* Can't move to the next tile (EOL?). */
+				if (tf_local.m_err == TrackFollower::EC_RAIL_TYPE) {
+					end_segment_reason |= ESRB_RAIL_TYPE;
+				} else {
+					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,17 +466,29 @@
 					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
 	{
-		return (n.m_parent != NULL)
+		return !m_disable_cache
+			&& (n.m_parent != NULL)
 			&& (n.m_parent->m_num_signals_passed >= m_sig_look_ahead_costs.Size());
 	}
 
@@ -376,6 +501,10 @@
 		}
 	}
 
+	void DisableCache(bool disable)
+	{
+		m_disable_cache = disable;
+	}
 };
 
 
--- a/src/yapf/yapf_node.hpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/yapf/yapf_node.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -20,6 +20,13 @@
 
 	FORCEINLINE int CalcHash() const {return m_exitdir | (m_tile << 2);}
 	FORCEINLINE bool operator == (const CYapfNodeKeyExitDir& other) const {return (m_tile == other.m_tile) && (m_exitdir == other.m_exitdir);}
+
+	void Dump(DumpTarget &dmp) const
+	{
+		dmp.WriteTile("m_tile", m_tile);
+		dmp.WriteEnumT("m_td", m_td);
+		dmp.WriteEnumT("m_exitdir", m_exitdir);
+	}
 };
 
 struct CYapfNodeKeyTrackDir : public CYapfNodeKeyExitDir
@@ -57,6 +64,14 @@
 	FORCEINLINE int GetCost() {return m_cost;}
 	FORCEINLINE int GetCostEstimate() {return m_estimate;}
 	FORCEINLINE bool operator < (const Node& other) const {return m_estimate < other.m_estimate;}
+
+	void Dump(DumpTarget &dmp) const
+	{
+		dmp.WriteStructT("m_key", &m_key);
+		dmp.WriteStructT("m_parent", m_parent);
+		dmp.WriteLine("m_cost = %d", m_cost);
+		dmp.WriteLine("m_estimate = %d", m_estimate);
+	}
 };
 
 /** Yapf Node for ships */
--- a/src/yapf/yapf_node_rail.hpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/yapf/yapf_node_rail.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -11,17 +11,90 @@
 	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) << 4) | 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 >> 4);}
+	FORCEINLINE Trackdir GetTrackdir() const {return (Trackdir)(m_value & 0x0F);}
 	FORCEINLINE bool operator == (const CYapfRailSegmentKey& other) const {return m_value == other.m_value;}
+
+	void Dump(DumpTarget &dmp) const
+	{
+		dmp.WriteTile("tile", GetTile());
+		dmp.WriteEnumT("td", GetTrackdir());
+	}
 };
 
+/* 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 found 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);
+
+inline CStrA ValueStr(EndSegmentReasonBits bits)
+{
+	static const char* end_segment_reason_names[] = {
+		"DEAD_END", "RAIL_TYPE", "INFINITE_LOOP", "SEGMENT_TOO_LONG", "CHOICE_FOLLOWS",
+		"DEPOT", "WAYPOINT", "STATION",
+		"PATH_TOO_LONG", "FIRST_TWO_WAY_RED", "LOOK_AHEAD_END", "TARGET_REACHED"
+	};
+
+	CStrA out;
+	out.Format("0x%04X (%s)", bits, ComposeNameT(bits, end_segment_reason_names, "UNK", ESRB_NONE, "NONE").Data());
+	return out.Transfer();
+}
+
 /** cached segment cost for rail YAPF */
 struct CYapfRailSegment
 {
@@ -33,14 +106,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,16 +116,25 @@
 		, 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;}
+
+	void Dump(DumpTarget &dmp) const
+	{
+		dmp.WriteStructT("m_key", &m_key);
+		dmp.WriteTile("m_last_tile", m_last_tile);
+		dmp.WriteEnumT("m_last_td", m_last_td);
+		dmp.WriteLine("m_cost = %d", m_cost);
+		dmp.WriteTile("m_last_signal_tile", m_last_signal_tile);
+		dmp.WriteEnumT("m_last_signal_td", m_last_signal_td);
+		dmp.WriteEnumT("m_end_segment_reason", m_end_segment_reason);
+	}
 };
 
 /** Yapf Node for rail YAPF */
@@ -100,6 +176,17 @@
 	FORCEINLINE TileIndex GetLastTile() const {assert(m_segment != NULL); return m_segment->m_last_tile;}
 	FORCEINLINE Trackdir GetLastTrackdir() const {assert(m_segment != NULL); return m_segment->m_last_td;}
 	FORCEINLINE void SetLastTileTrackdir(TileIndex tile, Trackdir td) {assert(m_segment != NULL); m_segment->m_last_tile = tile; m_segment->m_last_td = td;}
+
+	void Dump(DumpTarget &dmp) const
+	{
+		base::Dump(dmp);
+		dmp.WriteStructT("m_segment", m_segment);
+		dmp.WriteLine("m_num_signals_passed = %d", m_num_signals_passed);
+		dmp.WriteLine("m_targed_seen = %s", flags_u.flags_s.m_targed_seen ? "Yes" : "No");
+		dmp.WriteLine("m_choice_seen = %s", flags_u.flags_s.m_choice_seen ? "Yes" : "No");
+		dmp.WriteLine("m_last_signal_was_red = %s", flags_u.flags_s.m_last_signal_was_red ? "Yes" : "No");
+		dmp.WriteEnumT("m_last_red_signal_type", m_last_red_signal_type);
+	}
 };
 
 // now define two major node types (that differ by key type)
--- a/src/yapf/yapf_rail.cpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/yapf/yapf_rail.cpp	Sat Jul 14 19:42:58 2007 +0000
@@ -9,6 +9,8 @@
 #include "yapf_costrail.hpp"
 #include "yapf_destrail.hpp"
 
+#define DEBUG_YAPF_CACHE 0
+
 int _total_pf_time_us = 0;
 
 
@@ -44,8 +46,21 @@
 
 	static bool stFindNearestDepotTwoWay(Vehicle *v, TileIndex t1, Trackdir td1, TileIndex t2, Trackdir td2, int max_distance, int reverse_penalty, TileIndex* depot_tile, bool* reversed)
 	{
-		Tpf pf;
-		return pf.FindNearestDepotTwoWay(v, t1, td1, t2, td2, max_distance, reverse_penalty, depot_tile, reversed);
+		Tpf pf1;
+		bool result1 = pf1.FindNearestDepotTwoWay(v, t1, td1, t2, td2, max_distance, reverse_penalty, depot_tile, reversed);
+
+#if DEBUG_YAPF_CACHE
+		Tpf pf2;
+		TileIndex depot_tile2 = INVALID_TILE;
+		bool reversed2 = false;
+		pf2.DisableCache(true);
+		bool result2 = pf2.FindNearestDepotTwoWay(v, t1, td1, t2, td2, max_distance, reverse_penalty, &depot_tile2, &reversed2);
+		if (result1 != result2 || (result1 && (*depot_tile != depot_tile2 || *reversed != reversed2))) {
+			DEBUG(yapf, 0, "CACHE ERROR: FindNearestDepotTwoWay() = [%s, %s]", result1 ? "T" : "F", result2 ? "T" : "F");
+		}
+#endif
+
+		return result1;
 	}
 
 	FORCEINLINE bool FindNearestDepotTwoWay(Vehicle *v, TileIndex t1, Trackdir td1, TileIndex t2, Trackdir td2, int max_distance, int reverse_penalty, TileIndex* depot_tile, bool* reversed)
@@ -108,8 +123,28 @@
 	static Trackdir stChooseRailTrack(Vehicle *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool *path_not_found)
 	{
 		// create pathfinder instance
-		Tpf pf;
-		return pf.ChooseRailTrack(v, tile, enterdir, tracks, path_not_found);
+		Tpf pf1;
+		Trackdir result1 = pf1.ChooseRailTrack(v, tile, enterdir, tracks, path_not_found);
+
+#if DEBUG_YAPF_CACHE
+		Tpf pf2;
+		pf2.DisableCache(true);
+		Trackdir result2 = pf2.ChooseRailTrack(v, tile, enterdir, tracks, path_not_found);
+		if (result1 != result2) {
+			DEBUG(yapf, 0, "CACHE ERROR: ChooseRailTrack() = [%d, %d]", result1, result2);
+			DumpTarget dmp1, dmp2;
+			pf1.DumpBase(dmp1);
+			pf2.DumpBase(dmp2);
+			FILE *f1 = fopen("C:\\yapf1.txt", "wt");
+			FILE *f2 = fopen("C:\\yapf2.txt", "wt");
+			fwrite(dmp1.m_out.Data(), 1, dmp1.m_out.Size(), f1);
+			fwrite(dmp2.m_out.Data(), 1, dmp2.m_out.Size(), f2);
+			fclose(f1);
+			fclose(f2);
+		}
+#endif
+
+		return result1;
 	}
 
 	FORCEINLINE Trackdir ChooseRailTrack(Vehicle *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool *path_not_found)
@@ -147,8 +182,19 @@
 
 	static bool stCheckReverseTrain(Vehicle* v, TileIndex t1, Trackdir td1, TileIndex t2, Trackdir td2)
 	{
-		Tpf pf;
-		return pf.CheckReverseTrain(v, t1, td1, t2, td2);
+		Tpf pf1;
+		bool result1 = pf1.CheckReverseTrain(v, t1, td1, t2, td2);
+
+#if DEBUG_YAPF_CACHE
+		Tpf pf2;
+		pf2.DisableCache(true);
+		bool result2 = pf2.CheckReverseTrain(v, t1, td1, t2, td2);
+		if (result1 != result2) {
+			DEBUG(yapf, 0, "CACHE ERROR: CheckReverseTrain() = [%s, %s]", result1 ? "T" : "F", result2 ? "T" : "F");
+		}
+#endif
+
+		return result1;
 	}
 
 	FORCEINLINE bool CheckReverseTrain(Vehicle* v, TileIndex t1, Trackdir td1, TileIndex t2, Trackdir td2)
@@ -194,25 +240,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 +276,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 +303,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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/yapf/yapf_road.cpp	Sat Jul 14 19:42: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	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/yapf/yapf_ship.cpp	Sat Jul 14 19:42: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;
--- a/src/zoom.hpp	Sat Jun 02 19:59:29 2007 +0000
+++ b/src/zoom.hpp	Sat Jul 14 19:42:58 2007 +0000
@@ -11,7 +11,6 @@
 	ZOOM_LVL_OUT_2X,
 	ZOOM_LVL_OUT_4X,
 	ZOOM_LVL_OUT_8X,
-	ZOOM_LVL_OUT_16X,
 	ZOOM_LVL_END,
 
 	/* Here we define in which zoom viewports are */
@@ -25,10 +24,10 @@
 	ZOOM_LVL_ROADVEH  = ZOOM_LVL_NORMAL,
 	ZOOM_LVL_WORLD_SCREENSHOT = ZOOM_LVL_NORMAL,
 
-	ZOOM_LVL_DETAIL   = ZOOM_LVL_OUT_2X, //! All zoomlevels below or equal to this, will result in details on the screen, like road-work, ...
+	ZOOM_LVL_DETAIL   = ZOOM_LVL_OUT_2X, ///< All zoomlevels below or equal to this, will result in details on the screen, like road-work, ...
 
 	ZOOM_LVL_MIN      = ZOOM_LVL_NORMAL,
-	ZOOM_LVL_MAX      = ZOOM_LVL_OUT_16X,
+	ZOOM_LVL_MAX      = ZOOM_LVL_OUT_8X,
 };
 
 extern ZoomLevel _saved_scrollpos_zoom;
@@ -37,14 +36,14 @@
 {
 	if (zoom == ZOOM_LVL_NORMAL) return value;
 	int izoom = (int)zoom - (int)ZOOM_LVL_NORMAL;
-	return (zoom > ZOOM_LVL_NORMAL) ? value << izoom : value >> -izoom;
+	return (zoom > ZOOM_LVL_NORMAL) ? value << izoom : (value + (1 << -izoom) - 1) >> -izoom;
 }
 
 static inline int UnScaleByZoom(int value, ZoomLevel zoom)
 {
 	if (zoom == ZOOM_LVL_NORMAL) return value;
 	int izoom = (int)zoom - (int)ZOOM_LVL_NORMAL;
-	return (zoom > ZOOM_LVL_NORMAL) ? value >> izoom : value << -izoom;
+	return (zoom > ZOOM_LVL_NORMAL) ? (value + (1 << izoom) - 1) >> izoom : value << -izoom;
 }
 
 #endif /* ZOOM_HPP */