(svn r13684) [NoAI] -Sync: with trunk r13599:13683. noai
authorrubidium
Wed, 09 Jul 2008 13:32:13 +0000
branchnoai
changeset 11126 72d4c9314c72
parent 11111 1b984dab8cec
child 11164 67338721eb26
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
config.lib
projects/openttd_vs80.vcproj
projects/openttd_vs90.vcproj
source.list
src/blitter/32bpp_anim.cpp
src/blitter/32bpp_anim.hpp
src/blitter/32bpp_base.hpp
src/blitter/32bpp_optimized.cpp
src/blitter/32bpp_optimized.hpp
src/blitter/8bpp_optimized.cpp
src/blitter/factory.hpp
src/bridge.h
src/cargopacket.cpp
src/console_cmds.cpp
src/core/alloc_func.hpp
src/core/alloc_type.hpp
src/core/bitmath_func.hpp
src/core/endian_func.hpp
src/core/enum_type.hpp
src/core/math_func.hpp
src/core/mem_func.hpp
src/core/random_func.hpp
src/core/smallvec_type.hpp
src/core/sort_func.hpp
src/dock_gui.cpp
src/driver.cpp
src/driver.h
src/economy.cpp
src/economy_type.h
src/elrail.cpp
src/engine_gui.cpp
src/fileio.cpp
src/fileio.h
src/genworld_gui.cpp
src/gfx.cpp
src/gfx_func.h
src/gfx_type.h
src/gui.h
src/industry_cmd.cpp
src/lang/afrikaans.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/english_US.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/latvian.txt
src/map.cpp
src/map_func.h
src/misc_gui.cpp
src/network/network.cpp
src/newgrf.cpp
src/newgrf_config.cpp
src/newgrf_house.cpp
src/newgrf_industries.cpp
src/news_gui.cpp
src/oldloader.cpp
src/openttd.cpp
src/order_cmd.cpp
src/players.cpp
src/rail_cmd.cpp
src/rail_gui.cpp
src/road_cmd.cpp
src/road_gui.cpp
src/roadveh_cmd.cpp
src/roadveh_gui.cpp
src/settings_gui.cpp
src/spritecache.cpp
src/station_gui.cpp
src/table/sprites.h
src/tar_type.h
src/terraform_gui.cpp
src/texteff.cpp
src/tgp.cpp
src/timetable_gui.cpp
src/toolbar_gui.cpp
src/town.h
src/town_cmd.cpp
src/town_gui.cpp
src/tunnelbridge_cmd.cpp
src/vehicle.cpp
src/vehicle_gui.cpp
src/widget.cpp
src/widgets/dropdown.cpp
src/window_type.h
--- a/config.lib	Mon Jun 30 21:31:23 2008 +0000
+++ b/config.lib	Wed Jul 09 13:32:13 2008 +0000
@@ -931,6 +931,12 @@
 			# Make sure we mark GCC 2.95 flag for Makefile.src.in, as we
 			#  need a lovely hack there to make it compile correctly.
 			gcc295="1"
+
+			# Disable warnings about unused variables when
+			# compiling with asserts disabled
+			if [ $enable_assert -eq 0 ]; then
+				CFLAGS="$CFLAGS -Wno-unused"
+			fi
 		fi
 
 		if [ $cc_version -ge 30 ]; then
--- a/projects/openttd_vs80.vcproj	Mon Jun 30 21:31:23 2008 +0000
+++ b/projects/openttd_vs80.vcproj	Wed Jul 09 13:32:13 2008 +0000
@@ -1476,6 +1476,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\tar_type.h"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\terraform_gui.h"
 				>
 			</File>
--- a/projects/openttd_vs90.vcproj	Mon Jun 30 21:31:23 2008 +0000
+++ b/projects/openttd_vs90.vcproj	Wed Jul 09 13:32:13 2008 +0000
@@ -1473,6 +1473,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\tar_type.h"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\terraform_gui.h"
 				>
 			</File>
--- a/source.list	Mon Jun 30 21:31:23 2008 +0000
+++ b/source.list	Wed Jul 09 13:32:13 2008 +0000
@@ -294,6 +294,7 @@
 string_type.h
 strings_func.h
 strings_type.h
+tar_type.h
 terraform_gui.h
 textbuf_gui.h
 texteff.hpp
--- a/src/blitter/32bpp_anim.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/blitter/32bpp_anim.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -15,6 +15,181 @@
 
 static FBlitter_32bppAnim iFBlitter_32bppAnim;
 
+template <BlitterMode mode>
+inline void Blitter_32bppAnim::Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom)
+{
+	const SpriteData *src = (const SpriteData *)bp->sprite;
+
+	const Colour *src_px = (const Colour *)(src->data + src->offset[zoom][0]);
+	const uint8  *src_n  = (const uint8  *)(src->data + src->offset[zoom][1]);
+
+	for (uint i = bp->skip_top; i != 0; i--) {
+		src_px = (const Colour *)((const byte *)src_px + *(const uint32 *)src_px);
+		src_n += *(const uint32 *)src_n;
+	}
+
+	uint32 *dst = (uint32 *)bp->dst + bp->top * bp->pitch + bp->left;
+	uint8 *anim = this->anim_buf + ((uint32 *)bp->dst - (uint32 *)_screen.dst_ptr) + bp->top * this->anim_buf_width + bp->left;
+
+	const byte *remap = bp->remap; // store so we don't have to access it via bp everytime
+
+	for (int y = 0; y < bp->height; y++) {
+		uint32 *dst_ln = dst + bp->pitch;
+		uint8 *anim_ln = anim + this->anim_buf_width;
+
+		const Colour *src_px_ln = (const Colour *)((const byte *)src_px + *(const uint32 *)src_px);
+		src_px++;
+
+		const uint8 *src_n_ln = src_n + *(uint32 *)src_n;
+		src_n += 4;
+
+		uint32 *dst_end = dst + bp->skip_left;
+
+		uint n;
+
+		while (dst < dst_end) {
+			n = *src_n++;
+
+			if (src_px->a == 0) {
+				dst += n;
+				src_px ++;
+				src_n++;
+
+				if (dst > dst_end) anim += dst - dst_end;
+			} else {
+				if (dst + n > dst_end) {
+					uint d = dst_end - dst;
+					src_px += d;
+					src_n += d;
+
+					dst = dst_end - bp->skip_left;
+					dst_end = dst + bp->width;
+
+					n = min<uint>(n - d, (uint)bp->width);
+					goto draw;
+				}
+				dst += n;
+				src_px += n;
+				src_n += n;
+			}
+		}
+
+		dst -= bp->skip_left;
+		dst_end -= bp->skip_left;
+
+		dst_end += bp->width;
+
+		while (dst < dst_end) {
+			n = min<uint>(*src_n++, (uint)(dst_end - dst));
+
+			if (src_px->a == 0) {
+				anim += n;
+				dst += n;
+				src_px++;
+				src_n++;
+				continue;
+			}
+
+			draw:;
+
+			switch (mode) {
+				case BM_COLOUR_REMAP:
+					if (src_px->a == 255) {
+						do {
+							uint m = *src_n;
+							/* In case the m-channel is zero, do not remap this pixel in any way */
+							if (m == 0) {
+								*dst = *src_px;
+								*anim = 0;
+							} else {
+								uint r = remap[m];
+								*anim = r;
+								if (r != 0) *dst = this->LookupColourInPalette(r);
+							}
+							anim++;
+							dst++;
+							src_px++;
+							src_n++;
+						} while (--n != 0);
+					} else {
+						do {
+							uint m = *src_n;
+							if (m == 0) {
+								*dst = ComposeColourRGBANoCheck(src_px->r, src_px->g, src_px->b, src_px->a, *dst);
+								*anim = 0;
+							} else {
+								uint r = remap[m];
+								*anim = r;
+								if (r != 0) *dst = ComposeColourPANoCheck(this->LookupColourInPalette(r), src_px->a, *dst);
+							}
+							anim++;
+							dst++;
+							src_px++;
+							src_n++;
+						} while (--n != 0);
+					}
+					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 */
+					src_n += n;
+					if (src_px->a == 255) {
+						src_px += n;
+						do {
+							*dst = MakeTransparent(*dst, 3, 4);
+							*anim = remap[*anim];
+							anim++;
+							dst++;
+						} while (--n != 0);
+					} else {
+						do {
+							*dst = MakeTransparent(*dst, (256 * 4 - src_px->a), 256 * 4);
+							*anim = remap[*anim];
+							anim++;
+							dst++;
+							src_px++;
+						} while (--n != 0);
+					}
+					break;
+
+				default:
+					if (src_px->a == 255) {
+						do {
+							/* Compiler assumes pointer aliasing, can't optimise this on its own */
+							uint m = *src_n++;
+							/* Above 217 is palette animation */
+							*anim++ = m;
+							*dst++ = (m >= 217) ? this->LookupColourInPalette(m) : *src_px;
+							src_px++;
+						} while (--n != 0);
+					} else {
+						do {
+							uint m = *src_n++;
+							*anim++ = m;
+							if (m >= 217) {
+								*dst = ComposeColourPANoCheck(this->LookupColourInPalette(m), src_px->a, *dst);
+							} else {
+								*dst = ComposeColourRGBANoCheck(src_px->r, src_px->g, src_px->b, src_px->a, *dst);
+							}
+							dst++;
+							src_px++;
+						} while (--n != 0);
+					}
+					break;
+			}
+		}
+
+		anim = anim_ln;
+		dst = dst_ln;
+		src_px = src_px_ln;
+		src_n  = src_n_ln;
+	}
+}
+
 void Blitter_32bppAnim::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
 {
 	if (_screen_disable_anim) {
@@ -23,10 +198,6 @@
 		return;
 	}
 
-	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);
@@ -35,68 +206,11 @@
 		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++) {
-			if (src->a == 0) {
-				/* src->r is 'misused' here to indicate how much more pixels are following with an alpha of 0 */
-				int skip = UnScaleByZoom(src->r, zoom);
-
-				dst  += skip;
-				anim += skip;
-				x    += skip - 1;
-				src  += ScaleByZoom(1, zoom) * skip;
-				continue;
-			}
-
-			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) {
-						*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 */
-					*dst = MakeTransparent(*dst, 192);
-					*anim = bp->remap[*anim];
-					break;
-
-				default:
-					/* 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);
-		}
+	switch (mode) {
+		default: NOT_REACHED();
+		case BM_NORMAL:       Draw<BM_NORMAL>      (bp, zoom); return;
+		case BM_COLOUR_REMAP: Draw<BM_COLOUR_REMAP>(bp, zoom); return;
+		case BM_TRANSPARENT:  Draw<BM_TRANSPARENT> (bp, zoom); return;
 	}
 }
 
--- a/src/blitter/32bpp_anim.hpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/blitter/32bpp_anim.hpp	Wed Jul 09 13:32:13 2008 +0000
@@ -34,6 +34,8 @@
 	/* virtual */ Blitter::PaletteAnimation UsePaletteAnimation();
 
 	/* virtual */ const char *GetName() { return "32bpp-anim"; }
+
+	template <BlitterMode mode> void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom);
 };
 
 class FBlitter_32bppAnim: public BlitterFactory<FBlitter_32bppAnim> {
--- a/src/blitter/32bpp_base.hpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/blitter/32bpp_base.hpp	Wed Jul 09 13:32:13 2008 +0000
@@ -30,7 +30,7 @@
 	/**
 	 * Compose a colour based on RGB values.
 	 */
-	static inline uint ComposeColour(uint a, uint r, uint g, uint b)
+	static inline uint32 ComposeColour(uint a, uint r, uint g, uint b)
 	{
 		return (((a) << 24) & 0xFF000000) | (((r) << 16) & 0x00FF0000) | (((g) << 8) & 0x0000FF00) | ((b) & 0x000000FF);
 	}
@@ -46,60 +46,76 @@
 	/**
 	 * 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)
+	static inline uint32 ComposeColourRGBANoCheck(uint r, uint g, uint b, uint a, uint32 current)
+	{
+		uint cr = GB(current, 16, 8);
+		uint cg = GB(current, 8,  8);
+		uint cb = GB(current, 0,  8);
+
+		/* The 256 is wrong, it should be 255, but 256 is much faster... */
+		return ComposeColour(0xFF,
+							(r * a + cr * (256 - a)) / 256,
+							(g * a + cg * (256 - a)) / 256,
+							(b * a + cb * (256 - a)) / 256);
+	}
+
+	/**
+	 * Compose a colour based on RGBA values and the current pixel value.
+	 * Handles fully transparent and solid pixels in a special (faster) way.
+	 */
+	static inline uint32 ComposeColourRGBA(uint r, uint g, uint b, uint a, uint32 current)
 	{
 		if (a == 0) return current;
 		if (a >= 255) return ComposeColour(0xFF, r, g, b);
 
-		uint cr, cg, cb;
-		cr = GB(current, 16, 8);
-		cg = GB(current, 8,  8);
-		cb = GB(current, 0,  8);
+		return ComposeColourRGBANoCheck(r, g, b, a, current);
+	}
+
+	/**
+	 * Compose a colour based on Pixel value, alpha value, and the current pixel value.
+	 */
+	static inline uint32 ComposeColourPANoCheck(uint32 colour, uint a, uint32 current)
+	{
+		uint r  = GB(colour,  16, 8);
+		uint g  = GB(colour,  8,  8);
+		uint b  = GB(colour,  0,  8);
+		uint cr = GB(current, 16, 8);
+		uint cg = GB(current, 8,  8);
+		uint cb = GB(current, 0,  8);
 
 		/* The 256 is wrong, it should be 255, but 256 is much faster... */
 		return ComposeColour(0xFF,
-												(r * a + cr * (256 - a)) / 256,
-												(g * a + cg * (256 - a)) / 256,
-												(b * a + cb * (256 - a)) / 256);
+							(r * a + cr * (256 - a)) / 256,
+							(g * a + cg * (256 - a)) / 256,
+							(b * a + cb * (256 - a)) / 256);
 	}
 
 	/**
-	* Compose a colour based on Pixel value, alpha value, and the current pixel value.
-	*/
-	static inline uint ComposeColourPA(uint colour, uint a, uint current)
+	 * Compose a colour based on Pixel value, alpha value, and the current pixel value.
+	 * Handles fully transparent and solid pixels in a special (faster) way.
+	 */
+	static inline uint32 ComposeColourPA(uint32 colour, uint a, uint32 current)
 	{
 		if (a == 0) return current;
 		if (a >= 255) return (colour | 0xFF000000);
 
-		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);
-
-		/* The 256 is wrong, it should be 255, but 256 is much faster... */
-		return ComposeColour(0xFF,
-												(r * a + cr * (256 - a)) / 256,
-												(g * a + cg * (256 - a)) / 256,
-												(b * a + cb * (256 - a)) / 256);
+		return ComposeColourPANoCheck(colour, a, current);
 	}
 
 	/**
 	* Make a pixel looks like it is transparent.
 	* @param colour the colour already on the screen.
-	* @param amount the amount of transparency, times 256.
+	* @param nom the amount of transparency, nominator, makes colour lighter.
+	* @param denom denominator, makes colour darker.
 	* @return the new colour for the screen.
 	*/
-	static inline uint MakeTransparent(uint colour, uint amount)
+	static inline uint32 MakeTransparent(uint32 colour, uint nom, uint denom = 256)
 	{
-		uint r, g, b;
-		r = GB(colour, 16, 8);
-		g = GB(colour, 8,  8);
-		b = GB(colour, 0,  8);
+		uint r = GB(colour, 16, 8);
+		uint g = GB(colour, 8,  8);
+		uint b = GB(colour, 0,  8);
 
-		return ComposeColour(0xFF, r * amount / 256, g * amount / 256, b * amount / 256);
+		return ComposeColour(0xFF, r * nom / denom, g * nom / denom, b * nom / denom);
 	}
 
 	/**
@@ -107,12 +123,11 @@
 	* @param colour the colour to make grey.
 	* @return the new colour, now grey.
 	*/
-	static inline uint MakeGrey(uint colour)
+	static inline uint32 MakeGrey(uint32 colour)
 	{
-		uint r, g, b;
-		r = GB(colour, 16, 8);
-		g = GB(colour, 8,  8);
-		b = GB(colour, 0,  8);
+		uint r = GB(colour, 16, 8);
+		uint g = GB(colour, 8,  8);
+		uint 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
--- a/src/blitter/32bpp_optimized.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/blitter/32bpp_optimized.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -6,44 +6,133 @@
 #include "../zoom_func.h"
 #include "../gfx_func.h"
 #include "../debug.h"
+#include "../core/math_func.hpp"
+#include "../core/alloc_func.hpp"
 #include "32bpp_optimized.hpp"
 
 static FBlitter_32bppOptimized iFBlitter_32bppOptimized;
 
-template <BlitterMode mode, ZoomLevel zoom> inline void Blitter_32bppOptimized::Draw(Blitter::BlitterParams *bp)
+/**
+ * Draws a sprite to a (screen) buffer. It is templated to allow faster operation.
+ *
+ * @param mode blitter mode
+ * @param bp further blitting parameters
+ * @param zoom zoom level at which we are drawing
+ */
+template <BlitterMode mode>
+inline void Blitter_32bppOptimized::Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom)
 {
-	const SpriteLoader::CommonPixel *src, *src_line;
-	uint32 *dst, *dst_line;
+	const SpriteData *src = (const SpriteData *)bp->sprite;
 
-	/* 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;
+	/* src_px : each line begins with uint32 n = 'number of bytes in this line',
+	 *          then n times is the Colour struct for this line */
+	const Colour *src_px = (const Colour *)(src->data + src->offset[zoom][0]);
+	/* src_n  : each line begins with uint32 n = 'number of bytes in this line',
+	 *          then interleaved stream of 'm' and 'n' channels. 'm' is remap,
+	 *          'n' is number of bytes with the same alpha channel class */
+	const uint8  *src_n  = (const uint8  *)(src->data + src->offset[zoom][1]);
+
+	/* skip upper lines in src_px and src_n */
+	for (uint i = bp->skip_top; i != 0; i--) {
+		src_px = (const Colour *)((const byte *)src_px + *(const uint32 *)src_px);
+		src_n += *(uint32 *)src_n;
+	}
+
+	/* skip lines in dst */
+	uint32 *dst = (uint32 *)bp->dst + bp->top * bp->pitch + bp->left;
+
+	/* store so we don't have to access it via bp everytime (compiler assumes pointer aliasing) */
+	const byte *remap = bp->remap;
 
 	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);
+		/* next dst line begins here */
+		uint32 *dst_ln = dst + bp->pitch;
 
-		for (int x = 0; x < bp->width; x++) {
-			if (src->a == 0) {
-				/* src->r is 'misused' here to indicate how much more pixels are following with an alpha of 0 */
-				int skip = UnScaleByZoom(src->r, zoom);
+		/* next src line begins here */
+		const Colour *src_px_ln = (const Colour *)((const byte *)src_px + *(const uint32 *)src_px);
+		src_px++;
 
-				dst += skip;
-				x   += skip - 1;
-				src += ScaleByZoom(1, zoom) * skip;
+		/* next src_n line begins here */
+		const uint8 *src_n_ln = src_n + *(uint32 *)src_n;
+		src_n += 4;
+
+		/* we will end this line when we reach this point */
+		uint32 *dst_end = dst + bp->skip_left;
+
+		/* number of pixels with the same aplha channel class */
+		uint n;
+
+		while (dst < dst_end) {
+			n = *src_n++;
+
+			if (src_px->a == 0) {
+				dst += n;
+				src_px ++;
+				src_n++;
+			} else {
+				if (dst + n > dst_end) {
+					uint d = dst_end - dst;
+					src_px += d;
+					src_n += d;
+
+					dst = dst_end - bp->skip_left;
+					dst_end = dst + bp->width;
+
+					n = min<uint>(n - d, (uint)bp->width);
+					goto draw;
+				}
+				dst += n;
+				src_px += n;
+				src_n += n;
+			}
+		}
+
+		dst -= bp->skip_left;
+		dst_end -= bp->skip_left;
+
+		dst_end += bp->width;
+
+		while (dst < dst_end) {
+			n = min<uint>(*src_n++, (uint)(dst_end - dst));
+
+			if (src_px->a == 0) {
+				dst += n;
+				src_px++;
+				src_n++;
 				continue;
 			}
 
+			draw:;
+
 			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) {
-						*dst = ComposeColourRGBA(src->r, src->g, src->b, src->a, *dst);
+					if (src_px->a == 255) {
+						do {
+							uint m = *src_n;
+							/* In case the m-channel is zero, do not remap this pixel in any way */
+							if (m == 0) {
+								*dst = *src_px;
+							} else {
+								uint r = remap[m];
+								if (r != 0) *dst = this->LookupColourInPalette(r);
+							}
+							dst++;
+							src_px++;
+							src_n++;
+						} while (--n != 0);
 					} else {
-						if (bp->remap[src->m] != 0) *dst = ComposeColourPA(this->LookupColourInPalette(bp->remap[src->m]), src->a, *dst);
+						do {
+							uint m = *src_n;
+							if (m == 0) {
+								*dst = ComposeColourRGBANoCheck(src_px->r, src_px->g, src_px->b, src_px->a, *dst);
+							} else {
+								uint r = remap[m];
+								if (r != 0) *dst = ComposeColourPANoCheck(this->LookupColourInPalette(r), src_px->a, *dst);
+							}
+							dst++;
+							src_px++;
+							src_n++;
+						} while (--n != 0);
 					}
 					break;
 
@@ -53,30 +142,54 @@
 					 *  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 */
-					*dst = MakeTransparent(*dst, 192);
+					src_n += n;
+					if (src_px->a == 255) {
+						src_px += n;
+						do {
+							*dst = MakeTransparent(*dst, 3, 4);
+							dst++;
+						} while (--n != 0);
+					} else {
+						do {
+							*dst = MakeTransparent(*dst, (256 * 4 - src_px->a), 256 * 4);
+							dst++;
+							src_px++;
+						} while (--n != 0);
+					}
 					break;
 
 				default:
-					*dst = ComposeColourRGBA(src->r, src->g, src->b, src->a, *dst);
+					if (src_px->a == 255) {
+						/* faster than memcpy(), n is usually low */
+						src_n += n;
+						do {
+							*dst++ = *src_px++;
+						} while (--n != 0);
+					} else {
+						src_n += n;
+						do {
+							*dst = ComposeColourRGBANoCheck(src_px->r, src_px->g, src_px->b, src_px->a, *dst);
+							dst++;
+							src_px++;
+						} while (--n != 0);
+					}
 					break;
 			}
-			dst++;
-			src += ScaleByZoom(1, zoom);
 		}
+
+		dst = dst_ln;
+		src_px = src_px_ln;
+		src_n  = src_n_ln;
 	}
 }
 
-template <BlitterMode mode> inline void Blitter_32bppOptimized::Draw(Blitter::BlitterParams *bp, ZoomLevel zoom)
-{
-	switch (zoom) {
-		default: NOT_REACHED();
-		case ZOOM_LVL_NORMAL: Draw<mode, ZOOM_LVL_NORMAL>(bp); return;
-		case ZOOM_LVL_OUT_2X: Draw<mode, ZOOM_LVL_OUT_2X>(bp); return;
-		case ZOOM_LVL_OUT_4X: Draw<mode, ZOOM_LVL_OUT_4X>(bp); return;
-		case ZOOM_LVL_OUT_8X: Draw<mode, ZOOM_LVL_OUT_8X>(bp); return;
-	}
-}
-
+/**
+ * Draws a sprite to a (screen) buffer. Calls adequate templated function.
+ *
+ * @param bp further blitting parameters
+ * @param mode blitter mode
+ * @param zoom zoom level at which we are drawing
+ */
 void Blitter_32bppOptimized::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
 {
 	switch (mode) {
@@ -87,46 +200,180 @@
 	}
 }
 
+/**
+ * Resizes the sprite in a very simple way, takes every n-th pixel and every n-th row
+ *
+ * @param sprite_src sprite to resize
+ * @param zoom resizing scale
+ * @return resized sprite
+ */
+static const SpriteLoader::Sprite *ResizeSprite(const SpriteLoader::Sprite *sprite_src, ZoomLevel zoom)
+{
+	SpriteLoader::Sprite *sprite = MallocT<SpriteLoader::Sprite>(1);
+
+	if (zoom == ZOOM_LVL_NORMAL) {
+		memcpy(sprite, sprite_src, sizeof(*sprite));
+		uint size = sprite_src->height * sprite_src->width;
+		sprite->data = MallocT<SpriteLoader::CommonPixel>(size);
+		memcpy(sprite->data, sprite_src->data, size * sizeof(SpriteLoader::CommonPixel));
+		return sprite;
+	}
+
+	sprite->height = UnScaleByZoom(sprite_src->height, zoom);
+	sprite->width  = UnScaleByZoom(sprite_src->width,  zoom);
+	sprite->x_offs = UnScaleByZoom(sprite_src->x_offs, zoom);
+	sprite->y_offs = UnScaleByZoom(sprite_src->y_offs, zoom);
+
+	uint size = sprite->height * sprite->width;
+	SpriteLoader::CommonPixel *dst = sprite->data = CallocT<SpriteLoader::CommonPixel>(size);
+
+	const SpriteLoader::CommonPixel *src = (SpriteLoader::CommonPixel *)sprite_src->data;
+	const SpriteLoader::CommonPixel *src_end = src + sprite_src->height * sprite_src->width;
+
+	uint scaled_1 = ScaleByZoom(1, zoom);
+
+	for (uint y = 0; y < sprite->height; y++) {
+		if (src >= src_end) src = src_end - sprite_src->width;
+
+		const SpriteLoader::CommonPixel *src_ln = src + sprite_src->width * scaled_1;
+		for (uint x = 0; x < sprite->width; x++) {
+			if (src >= src_ln) src = src_ln - 1;
+			*dst = *src;
+			dst++;
+			src += scaled_1;
+		}
+
+		src = src_ln;
+	}
+
+	return sprite;
+}
+
 Sprite *Blitter_32bppOptimized::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));
+	/* streams of pixels (a, r, g, b channels)
+	 *
+	 * stored in separated stream so data are always aligned on 4B boundary */
+	Colour *dst_px_orig[ZOOM_LVL_COUNT];
+
+	/* interleaved stream of 'm' channel and 'n' channel
+	 * 'n' is number if following pixels with the same alpha channel class
+	 * there are 3 classes: 0, 255, others
+	 *
+	 * it has to be stored in one stream so fewer registers are used -
+	 * x86 has problems with register allocation even with this solution */
+	uint8  *dst_n_orig[ZOOM_LVL_COUNT];
+
+	/* lengths of streams */
+	uint32 lengths[ZOOM_LVL_COUNT][2];
+
+	for (ZoomLevel z = ZOOM_LVL_BEGIN; z < ZOOM_LVL_END; z++) {
+		const SpriteLoader::Sprite *src_orig = ResizeSprite(sprite, z);
+
+		uint size = src_orig->height * src_orig->width;
+
+		dst_px_orig[z] = CallocT<Colour>(size + src_orig->height * 2);
+		dst_n_orig[z]  = CallocT<uint8>(size * 2 + src_orig->height * 4 * 2);
+
+		uint32 *dst_px_ln = (uint32 *)dst_px_orig[z];
+		uint32 *dst_n_ln  = (uint32 *)dst_n_orig[z];
+
+		const SpriteLoader::CommonPixel *src = (const SpriteLoader::CommonPixel *)src_orig->data;
+
+		for (uint y = src_orig->height; y > 0; y--) {
+			Colour *dst_px = (Colour *)(dst_px_ln + 1);
+			uint8 *dst_n = (uint8 *)(dst_n_ln + 1);
+
+			uint8 *dst_len = dst_n++;
+
+			uint last = 3;
+			int len = 0;
+
+			for (uint x = src_orig->width; x > 0; x--) {
+				uint8 a = src->a;
+				uint t = a > 0 && a < 255 ? 1 : a;
+
+				if (last != t || len == 255) {
+					if (last != 3) {
+						*dst_len = len;
+						dst_len = dst_n++;
+					}
+					len = 0;
+				}
+
+				last = t;
+				len++;
+
+				if (a != 0) {
+					dst_px->a = a;
+					*dst_n = src->m;
+					if (src->m != 0) {
+						/* Pre-convert the mapping channel to a RGB value */
+						uint32 colour = this->LookupColourInPalette(src->m);
+						dst_px->r = GB(colour, 16, 8);
+						dst_px->g = GB(colour, 8,  8);
+						dst_px->b = GB(colour, 0,  8);
+					} else {
+						dst_px->r = src->r;
+						dst_px->g = src->g;
+						dst_px->b = src->b;
+					}
+					dst_px++;
+					dst_n++;
+				} else if (len == 1) {
+					dst_px++;
+					*dst_n = src->m;
+					dst_n++;
+				}
+
+				src++;
+			}
+
+			if (last != 3) {
+				*dst_len = len;
+			}
+
+			dst_px = (Colour *)AlignPtr(dst_px, 4);
+			dst_n  = (uint8 *)AlignPtr(dst_n, 4);
+
+			*dst_px_ln = (uint8 *)dst_px - (uint8 *)dst_px_ln;
+			*dst_n_ln  = (uint8 *)dst_n  - (uint8 *)dst_n_ln;
+
+			dst_px_ln = (uint32 *)dst_px;
+			dst_n_ln =  (uint32 *)dst_n;
+		}
+
+		lengths[z][0] = (byte *)dst_px_ln - (byte *)dst_px_orig[z]; // all are aligned to 4B boundary
+		lengths[z][1] = (byte *)dst_n_ln  - (byte *)dst_n_orig[z];
+
+		free(src_orig->data);
+		free((void *)src_orig);
+	}
+
+	uint len = 0; // total length of data
+	for (ZoomLevel z = ZOOM_LVL_BEGIN; z < ZOOM_LVL_END; z++) {
+		len += lengths[z][0] + lengths[z][1];
+	}
+
+	Sprite *dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + sizeof(SpriteData) + len);
 
 	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));
-	/* Skip to the end of the array, and work backwards to find transparent blocks */
-	dst = dst + sprite->height * sprite->width - 1;
+	SpriteData *dst = (SpriteData *)dest_sprite->data;
 
-	for (uint y = sprite->height; y > 0; y--) {
-		int trans = 0;
-		/* Process sprite line backwards, to compute lengths of transparent blocks */
-		for (uint x = sprite->width; x > 0; x--) {
-			if (dst->a == 0) {
-				/* Save transparent block length in red channel; max value is 255 the red channel can contain */
-				if (trans < 255) trans++;
-				dst->r = trans;
-				dst->g = 0;
-				dst->b = 0;
-				dst->m = 0;
-			} else {
-				trans = 0;
-				if (dst->m != 0) {
-					/* Pre-convert the mapping channel to a RGB value */
-					uint color = this->LookupColourInPalette(dst->m);
-					dst->r = GB(color, 16, 8);
-					dst->g = GB(color, 8,  8);
-					dst->b = GB(color, 0,  8);
-				}
-			}
-			dst--;
-		}
+	for (ZoomLevel z = ZOOM_LVL_BEGIN; z < ZOOM_LVL_END; z++) {
+		dst->offset[z][0] = z == ZOOM_LVL_BEGIN ? 0 : lengths[z - 1][1] + dst->offset[z - 1][1];
+		dst->offset[z][1] = lengths[z][0] + dst->offset[z][0];
+
+		memcpy(dst->data + dst->offset[z][0], dst_px_orig[z], lengths[z][0]);
+		memcpy(dst->data + dst->offset[z][1], dst_n_orig[z],  lengths[z][1]);
+
+		free(dst_px_orig[z]);
+		free(dst_n_orig[z]);
 	}
+
 	return dest_sprite;
 }
--- a/src/blitter/32bpp_optimized.hpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/blitter/32bpp_optimized.hpp	Wed Jul 09 13:32:13 2008 +0000
@@ -10,13 +10,17 @@
 
 class Blitter_32bppOptimized : public Blitter_32bppSimple {
 public:
+	struct SpriteData {
+		uint32 offset[ZOOM_LVL_COUNT][2];
+		byte data[VARARRAY_SIZE];
+	};
+
 	/* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
 	/* virtual */ Sprite *Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator);
 
 	/* virtual */ const char *GetName() { return "32bpp-optimized"; }
 
-	template <BlitterMode mode, ZoomLevel zoom> void Draw(Blitter::BlitterParams *bp);
-	template <BlitterMode mode> void Draw(Blitter::BlitterParams *bp, ZoomLevel zoom);
+	template <BlitterMode mode> void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom);
 };
 
 class FBlitter_32bppOptimized: public BlitterFactory<FBlitter_32bppOptimized> {
--- a/src/blitter/8bpp_optimized.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/blitter/8bpp_optimized.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -71,24 +71,28 @@
 			/* Skip transparent pixels */
 			dst += trans;
 			width -= trans;
-			if (width <= 0) continue;
+			if (width <= 0 || pixels == 0) continue;
 			pixels = min<uint>(pixels, (uint)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];
+				case BM_COLOUR_REMAP: {
+					const uint8 *remap = bp->remap;
+					do {
+						uint m = remap[*src];
+						if (m != 0) *dst = m;
 						dst++; src++;
-					}
-					break;
+					} while (--pixels != 0);
+				} break;
 
-				case BM_TRANSPARENT:
-					for (uint x = 0; x < pixels; x++) {
-						*dst = bp->remap[*dst];
-						dst++; src++;
-					}
-					break;
+				case BM_TRANSPARENT: {
+					const uint8 *remap = bp->remap;
+					src += pixels;
+					do {
+						*dst = remap[*dst];
+						dst++;
+					} while (--pixels != 0);
+				} break;
 
 				default:
 					memcpy(dst, src, pixels);
--- a/src/blitter/factory.hpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/blitter/factory.hpp	Wed Jul 09 13:32:13 2008 +0000
@@ -8,7 +8,6 @@
 #include "base.hpp"
 #include "../debug.h"
 #include "../string_func.h"
-#include <string>
 #include <map>
 
 /**
@@ -16,8 +15,16 @@
  */
 class BlitterFactoryBase {
 private:
-	char *name;
-	typedef std::map<std::string, BlitterFactoryBase *> Blitters;
+	const char *name;
+
+	struct StringCompare {
+		bool operator () (const char *a, const char *b) const
+		{
+			return strcmp(a, b) < 0;
+		}
+	};
+
+	typedef std::map<const char *, BlitterFactoryBase *, StringCompare> Blitters;
 
 	static Blitters &GetBlitters()
 	{
@@ -58,7 +65,7 @@
 		if (this->name == NULL) return;
 		GetBlitters().erase(this->name);
 		if (GetBlitters().empty()) delete &GetBlitters();
-		free(this->name);
+		free((void *)this->name);
 	}
 
 	/**
--- a/src/bridge.h	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/bridge.h	Wed Jul 09 13:32:13 2008 +0000
@@ -44,7 +44,7 @@
 
 void DrawBridgeMiddle(const TileInfo *ti);
 
-bool CheckBridge_Stuff(BridgeType bridge_type, uint bridge_len);
+bool CheckBridge_Stuff(BridgeType bridge_type, uint bridge_len, uint32 flags = 0);
 int CalcBridgeLenCostFactor(int x);
 
 void ResetBridges();
--- a/src/cargopacket.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/cargopacket.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -242,7 +242,7 @@
 
 	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.MoveTo(this, UINT_MAX);
 		tmp.packets.clear();
 	}
 
--- a/src/console_cmds.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/console_cmds.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -408,9 +408,9 @@
 	}
 
 	if (ci != NULL) {
+		IConsolePrint(CC_DEFAULT, "Client banned");
 		banip = GetPlayerIP(ci);
 		NetworkServerSendError(index, NETWORK_ERROR_KICKED);
-		IConsolePrint(CC_DEFAULT, "Client banned");
 	} else {
 		IConsolePrint(CC_DEFAULT, "Client not online, banned IP");
 	}
@@ -1291,15 +1291,16 @@
 
 	if (argc != 3) return false;
 
-	if (atoi(argv[1]) < 1 || atoi(argv[1]) > MAX_PLAYERS) {
+	PlayerID player_id = (PlayerID)(atoi(argv[1]) - 1);
+	if (!IsValidPlayer(player_id) || !GetPlayer(player_id)->is_active) {
 		IConsolePrintF(CC_DEFAULT, "Unknown player. Player range is between 1 and %d.", MAX_PLAYERS);
 		return true;
 	}
 
 	if (!_network_server) {
-		NetworkClientSendChat(NETWORK_ACTION_CHAT_COMPANY, DESTTYPE_TEAM, atoi(argv[1]), argv[2]);
+		NetworkClientSendChat(NETWORK_ACTION_CHAT_COMPANY, DESTTYPE_TEAM, player_id, argv[2]);
 	} else {
-		NetworkServerSendChat(NETWORK_ACTION_CHAT_COMPANY, DESTTYPE_TEAM, atoi(argv[1]), argv[2], NETWORK_SERVER_INDEX);
+		NetworkServerSendChat(NETWORK_ACTION_CHAT_COMPANY, DESTTYPE_TEAM, player_id, argv[2], NETWORK_SERVER_INDEX);
 	}
 
 	return true;
--- a/src/core/alloc_func.hpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/core/alloc_func.hpp	Wed Jul 09 13:32:13 2008 +0000
@@ -24,7 +24,8 @@
  * @param num_elements the number of elements to allocate of the given type.
  * @return NULL when num_elements == 0, non-NULL otherwise.
  */
-template <typename T> FORCEINLINE T* MallocT(size_t num_elements)
+template <typename T>
+static FORCEINLINE T *MallocT(size_t num_elements)
 {
 	/*
 	 * MorphOS cannot handle 0 elements allocations, or rather that always
@@ -48,7 +49,8 @@
  * @param num_elements the number of elements to allocate of the given type.
  * @return NULL when num_elements == 0, non-NULL otherwise.
  */
-template <typename T> FORCEINLINE T* CallocT(size_t num_elements)
+template <typename T>
+static FORCEINLINE T *CallocT(size_t num_elements)
 {
 	/*
 	 * MorphOS cannot handle 0 elements allocations, or rather that always
@@ -73,7 +75,8 @@
  * @param num_elements the number of elements to allocate of the given type.
  * @return NULL when num_elements == 0, non-NULL otherwise.
  */
-template <typename T> FORCEINLINE T* ReallocT(T *t_ptr, size_t num_elements)
+template <typename T>
+static FORCEINLINE T *ReallocT(T *t_ptr, size_t num_elements)
 {
 	/*
 	 * MorphOS cannot handle 0 elements allocations, or rather that always
--- a/src/core/alloc_type.hpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/core/alloc_type.hpp	Wed Jul 09 13:32:13 2008 +0000
@@ -29,28 +29,39 @@
 
 	/** Allocating the memory */
 	SmallStackSafeStackAlloc() : data(MallocT<T>(length)), len(length) {}
+
 	/** And freeing when it goes out of scope */
-	~SmallStackSafeStackAlloc() { free(data); }
+	~SmallStackSafeStackAlloc()
+	{
+		free(data);
+	}
 #endif
 
 	/**
 	 * Gets a pointer to the data stored in this wrapper.
 	 * @return the pointer.
 	 */
-	inline operator T* () { return data; }
+	FORCEINLINE operator T* ()
+	{
+		return data;
+	}
 
 	/**
 	 * Gets a pointer to the data stored in this wrapper.
 	 * @return the pointer.
 	 */
-	inline T* operator -> () { return data; }
+	FORCEINLINE T* operator -> ()
+	{
+		return data;
+	}
 
 	/**
 	 * Gets a pointer to the last data element stored in this wrapper.
 	 * @note needed because endof does not work properly for pointers.
 	 * @return the 'endof' pointer.
 	 */
-	inline T* EndOf() {
+	FORCEINLINE T* EndOf()
+	{
 #if !defined(__NDS__)
 		return endof(data);
 #else
@@ -74,14 +85,14 @@
 	 * @param size the amount of bytes to allocate.
 	 * @return the given amounts of bytes zeroed.
 	 */
-	void *operator new(size_t size) { return CallocT<byte>(size); }
+	FORCEINLINE void *operator new(size_t size) { return CallocT<byte>(size); }
 
 	/**
 	 * Memory allocator for an array of class instances.
 	 * @param size the amount of bytes to allocate.
 	 * @return the given amounts of bytes zeroed.
 	 */
-	void *operator new[](size_t size) { return CallocT<byte>(size); }
+	FORCEINLINE void *operator new[](size_t size) { return CallocT<byte>(size); }
 
 	/**
 	 * Memory release for a single class instance.
@@ -91,7 +102,7 @@
 	 * @warning The value of the \a size parameter can only be trusted for
 	 *          classes that have their own (virtual) destructor method.
 	 */
-	void operator delete(void *ptr, size_t size) { free(ptr); }
+	FORCEINLINE void operator delete(void *ptr, size_t size) { free(ptr); }
 
 	/**
 	 * Memory release for an array of class instances.
@@ -101,7 +112,7 @@
 	 * @warning The value of the \a size parameter can only be trusted for
 	 *          classes that have their own (virtual) destructor method.
 	 */
-	void operator delete[](void *ptr, size_t size) { free(ptr); }
+	FORCEINLINE void operator delete[](void *ptr, size_t size) { free(ptr); }
 };
 
 #endif /* ALLOC_TYPE_HPP */
--- a/src/core/bitmath_func.hpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/core/bitmath_func.hpp	Wed Jul 09 13:32:13 2008 +0000
@@ -21,7 +21,8 @@
  * @param n The number of bits to read.
  * @return The selected bits, aligned to a LSB.
  */
-template<typename T> static inline uint GB(const T x, const uint8 s, const uint8 n)
+template <typename T>
+static FORCEINLINE uint GB(const T x, const uint8 s, const uint8 n)
 {
 	return (x >> s) & ((1U << n) - 1);
 }
@@ -43,7 +44,8 @@
  * @param d The actually new bits to save in the defined position.
  * @return The new value of x
  */
-template<typename T, typename U> static inline T SB(T& x, const uint8 s, const uint8 n, const U d)
+template <typename T, typename U>
+static FORCEINLINE T SB(T &x, const uint8 s, const uint8 n, const U d)
 {
 	x &= (T)(~(((1U << n) - 1) << s));
 	x |= (T)(d << s);
@@ -64,7 +66,8 @@
  * @param i The value to add at the given startposition in the given window.
  * @return The new value of x
  */
-template<typename T, typename U> static inline T AB(T& x, const uint8 s, const uint8 n, const U i)
+template <typename T, typename U>
+static FORCEINLINE T AB(T &x, const uint8 s, const uint8 n, const U i)
 {
 	const T mask = (T)(((1U << n) - 1) << s);
 	x = (T)((x & ~mask) | ((x + (i << s)) & mask));
@@ -82,7 +85,8 @@
  * @param y The position of the bit to check, started from the LSB
  * @return True if the bit is set, false else.
  */
-template<typename T> static inline bool HasBit(const T x, const uint8 y)
+template <typename T>
+static FORCEINLINE bool HasBit(const T x, const uint8 y)
 {
 	return (x & ((T)1U << y)) != 0;
 }
@@ -110,7 +114,8 @@
  * @param y The bit position to set
  * @return The new value of the old value with the bit set
  */
-template<typename T> static inline T SetBit(T& x, const uint8 y)
+template <typename T>
+static FORCEINLINE T SetBit(T &x, const uint8 y)
 {
 	return x = (T)(x | (T)(1U << y));
 }
@@ -138,7 +143,8 @@
  * @param y The bit position to clear
  * @return The new value of the old value with the bit cleared
  */
-template<typename T> static inline T ClrBit(T& x, const uint8 y)
+template <typename T>
+static FORCEINLINE T ClrBit(T &x, const uint8 y)
 {
 	return x = (T)(x & ~((T)1U << y));
 }
@@ -166,7 +172,8 @@
  * @param y The bit position to toggle
  * @return The new value of the old value with the bit toggled
  */
-template<typename T> static inline T ToggleBit(T& x, const uint8 y)
+template <typename T>
+static FORCEINLINE T ToggleBit(T &x, const uint8 y)
 {
 	return x = (T)(x ^ (T)(1U << y));
 }
@@ -201,7 +208,7 @@
  * @return The position of the first bit which is set
  * @see FIND_FIRST_BIT
  */
-static inline uint8 FindFirstBit2x64(const int value)
+static FORCEINLINE uint8 FindFirstBit2x64(const int value)
 {
 	if ((value & 0xFF) == 0) {
 		return FIND_FIRST_BIT((value >> 8) & 0x3F) + 8;
@@ -223,7 +230,8 @@
  * @param value The value to clear the first bit
  * @return The new value with the first bit cleared
  */
-template<typename T> static inline T KillFirstBit(T value)
+template <typename T>
+static FORCEINLINE T KillFirstBit(T value)
 {
 	return value &= (T)(value - 1);
 }
@@ -234,7 +242,8 @@
  * @param value the value to count the number of bits in.
  * @return the number of bits.
  */
-template<typename T> static inline uint CountBits(T value)
+template <typename T>
+static inline uint CountBits(T value)
 {
 	uint num;
 
@@ -258,7 +267,8 @@
  * @param n The number how many we waht to rotate
  * @return A bit rotated number
  */
-template<typename T> static inline T ROL(const T x, const uint8 n)
+template <typename T>
+static FORCEINLINE T ROL(const T x, const uint8 n)
 {
 	return (T)(x << n | x >> (sizeof(x) * 8 - n));
 }
@@ -271,7 +281,8 @@
  * @param n The number how many we waht to rotate
  * @return A bit rotated number
  */
-template<typename T> static inline T ROR(const T x, const uint8 n)
+template <typename T>
+static FORCEINLINE T ROR(const T x, const uint8 n)
 {
 	return (T)(x >> n | x << (sizeof(x) * 8 - n));
 }
@@ -305,7 +316,7 @@
 	 * @param x the variable to bitswap
 	 * @return the bitswapped value.
 	 */
-	static inline uint32 BSWAP32(uint32 x)
+	static FORCEINLINE uint32 BSWAP32(uint32 x)
 	{
 		return ((x >> 24) & 0xFF) | ((x >> 8) & 0xFF00) | ((x << 8) & 0xFF0000) | ((x << 24) & 0xFF000000);
 	}
@@ -315,7 +326,7 @@
 	 * @param x the variable to bitswap
 	 * @return the bitswapped value.
 	 */
-	static inline uint16 BSWAP16(uint16 x)
+	static FORCEINLINE uint16 BSWAP16(uint16 x)
 	{
 		return (x >> 8) | (x << 8);
 	}
--- a/src/core/endian_func.hpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/core/endian_func.hpp	Wed Jul 09 13:32:13 2008 +0000
@@ -33,12 +33,12 @@
 	#define TO_LE32X(x)  (x)
 #endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */
 
-static inline uint16 ReadLE16Aligned(const void *x)
+static FORCEINLINE uint16 ReadLE16Aligned(const void *x)
 {
 	return FROM_LE16(*(const uint16*)x);
 }
 
-static inline uint16 ReadLE16Unaligned(const void *x)
+static FORCEINLINE uint16 ReadLE16Unaligned(const void *x)
 {
 #if OTTD_ALIGNMENT == 1
 	return ((const byte*)x)[0] | ((const byte*)x)[1] << 8;
--- a/src/core/enum_type.hpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/core/enum_type.hpp	Wed Jul 09 13:32:13 2008 +0000
@@ -73,7 +73,8 @@
 template <typename Tenum_t> struct TinyEnumT;
 
 /** The general declaration of TinyEnumT<> (above) */
-template <typename Tenum_t> struct TinyEnumT
+template <typename Tenum_t>
+struct TinyEnumT
 {
 	typedef Tenum_t enum_type;                      ///< expose our enumeration type (i.e. Trackdir) to outside
 	typedef EnumPropsT<Tenum_t> Props;              ///< make easier access to our enumeration propeties
--- a/src/core/math_func.hpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/core/math_func.hpp	Wed Jul 09 13:32:13 2008 +0000
@@ -27,7 +27,8 @@
  * @param b The second value
  * @return The greater value or a if equals
  */
-template<typename T> static inline T max(const T a, const T b)
+template <typename T>
+static FORCEINLINE T max(const T a, const T b)
 {
 	return (a >= b) ? a : b;
 }
@@ -42,7 +43,8 @@
  * @param b The second value
  * @return The smaller value or b if equals
  */
-template<typename T> static inline T min(const T a, const T b)
+template <typename T>
+static FORCEINLINE T min(const T a, const T b)
 {
 	return (a < b) ? a : b;
 }
@@ -56,7 +58,7 @@
  * @param b The second integer
  * @return The smaller value
  */
-static inline int min(const int a, const int b)
+static FORCEINLINE int min(const int a, const int b)
 {
 	return (a < b) ? a : b;
 }
@@ -70,7 +72,7 @@
  * @param b The second unsigned integer
  * @return The smaller value
  */
-static inline uint minu(const uint a, const uint b)
+static FORCEINLINE uint minu(const uint a, const uint b)
 {
 	return (a < b) ? a : b;
 }
@@ -82,7 +84,8 @@
  * @param a The value we want to unsign
  * @return The unsigned value
  */
-template <typename T> static inline T abs(const T a)
+template <typename T>
+static FORCEINLINE T abs(const T a)
 {
 	return (a < (T)0) ? -a : a;
 }
@@ -95,10 +98,31 @@
  * @param n The base of the number we are searching
  * @return The smallest multiple of n equal or greater than x
  */
-template<typename T> static inline T Align(const T x, uint n)
+template <typename T>
+static FORCEINLINE T Align(const T x, uint n)
 {
+	assert((n & (n - 1)) == 0 && n != 0);
 	n--;
-	return (T)((x + n) & ~(n));
+	return (T)((x + n) & ~((T)n));
+}
+
+/**
+ * Return the smallest multiple of n equal or greater than x
+ * Applies to pointers only
+ *
+ * @note n must be a power of 2
+ * @param x The min value
+ * @param n The base of the number we are searching
+ * @return The smallest multiple of n equal or greater than x
+ * @see Align()
+ */
+
+assert_compile(sizeof(size_t) == sizeof(void *));
+
+template <typename T>
+static FORCEINLINE T *AlignPtr(T *x, uint n)
+{
+	return (T *)Align((size_t)x, n);
 }
 
 /**
@@ -117,7 +141,7 @@
  * @returns A value between min and max which is closest to a.
  * @see ClampU(uint, uint, uint)
  */
-static inline int Clamp(const int a, const int min, const int max)
+static FORCEINLINE int Clamp(const int a, const int min, const int max)
 {
 	if (a <= min) return min;
 	if (a >= max) return max;
@@ -140,7 +164,7 @@
  * @returns A value between min and max which is closest to a.
  * @see Clamp(int, int, int)
  */
-static inline uint ClampU(const uint a, const uint min, const uint max)
+static FORCEINLINE uint ClampU(const uint a, const uint min, const uint max)
 {
 	if (a <= min) return min;
 	if (a >= max) return max;
@@ -161,7 +185,7 @@
  * @return The 64-bit value reduced to a 32-bit value
  * @see Clamp(int, int, int)
  */
-static inline int32 ClampToI32(const int64 a)
+static FORCEINLINE int32 ClampToI32(const int64 a)
 {
 	if (a <= INT32_MIN) return INT32_MIN;
 	if (a >= INT32_MAX) return INT32_MAX;
@@ -175,7 +199,7 @@
  * @return The 64-bit value reduced to a 16-bit value
  * @see ClampU(uint, uint, uint)
  */
-static inline uint16 ClampToU16(const uint64 a)
+static FORCEINLINE uint16 ClampToU16(const uint64 a)
 {
 	return (uint16)(a <= UINT16_MAX ? a : UINT16_MAX);
 }
@@ -187,7 +211,9 @@
  * @param b The second scalar
  * @return The absolute difference between the given scalars
  */
-template <typename T> static inline T Delta(const T a, const T b) {
+template <typename T>
+static FORCEINLINE T Delta(const T a, const T b)
+{
 	return (a < b) ? b - a : a - b;
 }
 
@@ -203,7 +229,8 @@
  * @param size The size of the interval
  * @return True if the value is in the interval, false else.
  */
-template<typename T> static inline bool IsInsideBS(const T x, const uint base, const uint size)
+template <typename T>
+static FORCEINLINE bool IsInsideBS(const T x, const uint base, const uint size)
 {
 	return (uint)(x - base) < size;
 }
@@ -218,7 +245,8 @@
  * @param max The maximum of the interval
  * @see IsInsideBS()
  */
-template<typename T> static inline bool IsInsideMM(const T x, const uint min, const uint max)
+template <typename T>
+static FORCEINLINE bool IsInsideMM(const T x, const uint min, const uint max)
 {
 	return (uint)(x - min) < (max - min);
 }
@@ -228,7 +256,8 @@
  * @param a variable to swap with b
  * @param b variable to swap with a
  */
-template<typename T> void Swap(T& a, T& b)
+template <typename T>
+static FORCEINLINE void Swap(T &a, T &b)
 {
 	T t = a;
 	a = b;
--- a/src/core/mem_func.hpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/core/mem_func.hpp	Wed Jul 09 13:32:13 2008 +0000
@@ -16,7 +16,7 @@
  * @param num number of items to be copied. (!not number of bytes!)
  */
 template <typename T>
-FORCEINLINE void MemCpyT(T *destination, const T *source, uint num = 1)
+static FORCEINLINE void MemCpyT(T *destination, const T *source, uint num = 1)
 {
 	memcpy(destination, source, num * sizeof(T));
 }
@@ -29,7 +29,7 @@
  * @param num number of items to be copied. (!not number of bytes!)
  */
 template <typename T>
-FORCEINLINE void MemMoveT(T *destination, const T *source, uint num = 1)
+static FORCEINLINE void MemMoveT(T *destination, const T *source, uint num = 1)
 {
 	memmove(destination, source, num * sizeof(T));
 }
@@ -42,7 +42,7 @@
  * @param num number of items to be set (!not number of bytes!)
  */
 template <typename T>
-FORCEINLINE void MemSetT(T *ptr, int value, uint num = 1)
+static FORCEINLINE void MemSetT(T *ptr, int value, uint num = 1)
 {
 	memset(ptr, value, num * sizeof(T));
 }
@@ -56,7 +56,7 @@
  * @return an int value indicating the relationship between the content of the two buffers
  */
 template <typename T>
-FORCEINLINE int MemCmpT(const T *ptr1, const T *ptr2, uint num = 1)
+static FORCEINLINE int MemCmpT(const T *ptr1, const T *ptr2, uint num = 1)
 {
 	return memcmp(ptr1, ptr2, num * sizeof(T));
 }
@@ -69,8 +69,8 @@
  * @param ptr1 Start-pointer to the block of memory.
  * @param ptr2 End-pointer to the block of memory.
  */
-template<typename T>
-FORCEINLINE void MemReverseT(T *ptr1, T *ptr2)
+template <typename T>
+static FORCEINLINE void MemReverseT(T *ptr1, T *ptr2)
 {
 	assert(ptr1 != NULL && ptr2 != NULL);
 	assert(ptr1 < ptr2);
@@ -86,8 +86,8 @@
  * @param ptr Pointer to the block of memory.
  * @param num The number of items we want to reverse.
  */
-template<typename T>
-FORCEINLINE void MemReverseT(T *ptr, uint num)
+template <typename T>
+static FORCEINLINE void MemReverseT(T *ptr, uint num)
 {
 	assert(ptr != NULL);
 
--- a/src/core/random_func.hpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/core/random_func.hpp	Wed Jul 09 13:32:13 2008 +0000
@@ -59,12 +59,26 @@
 	#define RandomRange(max) DoRandomRange(max, __LINE__, __FILE__)
 	uint DoRandomRange(uint max, int line, const char *file);
 #else
-	static inline uint32 Random() { return _random.Next(); }
-	static inline uint32 RandomRange(uint16 max) { return _random.Next(max); }
+	static FORCEINLINE uint32 Random()
+	{
+		return _random.Next();
+	}
+
+	static FORCEINLINE uint32 RandomRange(uint16 max)
+	{
+		return _random.Next(max);
+	}
 #endif
 
-static inline uint32 InteractiveRandom() { return _interactive_random.Next(); }
-static inline uint32 InteractiveRandomRange(uint16 max) { return _interactive_random.Next(max); }
+static FORCEINLINE uint32 InteractiveRandom()
+{
+	return _interactive_random.Next();
+}
+
+static FORCEINLINE uint32 InteractiveRandomRange(uint16 max)
+{
+	return _interactive_random.Next(max);
+}
 
 /**
  * Checks if a given randomize-number is below a given probability.
@@ -81,7 +95,7 @@
  * @param r The given randomize-number
  * @return True if v is less or equals (a/b)
  */
-static inline bool Chance16I(const uint a, const uint b, const uint32 r)
+static FORCEINLINE bool Chance16I(const uint a, const uint b, const uint32 r)
 {
 	assert(b != 0);
 	return (uint16)r < (uint16)(((a << 16) + b / 2) / b);
@@ -99,7 +113,7 @@
  * @param b The denominator of the fraction
  * @return True in (a/b) percent
  */
-static inline bool Chance16(const uint a, const uint b)
+static FORCEINLINE bool Chance16(const uint a, const uint b)
 {
 	return Chance16I(a, b, Random());
 }
@@ -119,7 +133,7 @@
  * @param r The variable to save the randomize-number from Random()
  * @return True in (a/b) percent
  */
-static inline bool Chance16R(const uint a, const uint b, uint32 &r)
+static FORCEINLINE bool Chance16R(const uint a, const uint b, uint32 &r)
 {
 	r = Random();
 	return Chance16I(a, b, r);
--- a/src/core/smallvec_type.hpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/core/smallvec_type.hpp	Wed Jul 09 13:32:13 2008 +0000
@@ -36,7 +36,7 @@
 	/**
 	 * Remove all items from the list.
 	 */
-	void Clear()
+	FORCEINLINE void Clear()
 	{
 		/* In fact we just reset the item counter avoiding the need to
 		 * probably reallocate the same amount of memory the list was
@@ -47,7 +47,7 @@
 	/**
 	 * Compact the list down to the smallest block size boundary.
 	 */
-	void Compact()
+	FORCEINLINE void Compact()
 	{
 		uint capacity = Align(this->items, S);
 		if (capacity >= this->capacity) return;
@@ -59,7 +59,7 @@
 	/**
 	 * Append an item and return it.
 	 */
-	T *Append()
+	FORCEINLINE T *Append()
 	{
 		if (this->items == this->capacity) {
 			this->capacity += S;
@@ -72,7 +72,7 @@
 	/**
 	 * Get the number of items in the list.
 	 */
-	uint Length() const
+	FORCEINLINE uint Length() const
 	{
 		return this->items;
 	}
@@ -82,7 +82,7 @@
 	 *
 	 * @return the pointer to the first item
 	 */
-	const T *Begin() const
+	FORCEINLINE const T *Begin() const
 	{
 		return this->data;
 	}
@@ -92,7 +92,7 @@
 	 *
 	 * @return the pointer to the first item
 	 */
-	T *Begin()
+	FORCEINLINE T *Begin()
 	{
 		return this->data;
 	}
@@ -102,7 +102,7 @@
 	 *
 	 * @return the pointer behind the last valid item
 	 */
-	const T *End() const
+	FORCEINLINE const T *End() const
 	{
 		return &this->data[this->items];
 	}
@@ -112,7 +112,7 @@
 	 *
 	 * @return the pointer behind the last valid item
 	 */
-	T *End()
+	FORCEINLINE T *End()
 	{
 		return &this->data[this->items];
 	}
@@ -123,7 +123,7 @@
 	 * @param index the position of the item
 	 * @return the pointer to the item
 	 */
-	const T *Get(uint index) const
+	FORCEINLINE const T *Get(uint index) const
 	{
 		return &this->data[index];
 	}
@@ -134,7 +134,7 @@
 	 * @param index the position of the item
 	 * @return the pointer to the item
 	 */
-	T *Get(uint index)
+	FORCEINLINE T *Get(uint index)
 	{
 		return &this->data[index];
 	}
@@ -145,7 +145,7 @@
 	 * @param index the positon of the item
 	 * @return the item
 	 */
-	const T &operator[](uint index) const
+	FORCEINLINE const T &operator[](uint index) const
 	{
 		return this->data[index];
 	}
@@ -156,7 +156,7 @@
 	 * @param index the positon of the item
 	 * @return the item
 	 */
-	T &operator[](uint index)
+	FORCEINLINE T &operator[](uint index)
 	{
 		return this->data[index];
 	}
--- a/src/core/sort_func.hpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/core/sort_func.hpp	Wed Jul 09 13:32:13 2008 +0000
@@ -20,8 +20,8 @@
  * @param comparator Function that compares two elements.
  * @param desc Sort descending.
  */
-template<typename T>
-FORCEINLINE void QSortT(T *base, uint num, int (CDECL *comparator)(const T*, const T*), bool desc = false)
+template <typename T>
+static FORCEINLINE void QSortT(T *base, uint num, int (CDECL *comparator)(const T*, const T*), bool desc = false)
 {
 	if (num < 2) return;
 
@@ -44,8 +44,8 @@
  * @param comparator Function that compares two elements.
  * @param desc Sort descending.
  */
-template<typename T>
-FORCEINLINE void GSortT(T *base, uint num, int (CDECL *comparator)(const T*, const T*), bool desc = false)
+template <typename T>
+static inline void GSortT(T *base, uint num, int (CDECL *comparator)(const T*, const T*), bool desc = false)
 {
 	if (num < 2) return;
 
--- a/src/dock_gui.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/dock_gui.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -61,7 +61,7 @@
 
 static void PlaceDocks_BuildCanal(TileIndex tile)
 {
-	VpStartPlaceSizing(tile, VPM_X_OR_Y, DDSP_CREATE_WATER);
+	VpStartPlaceSizing(tile, (_game_mode == GM_EDITOR) ? VPM_X_AND_Y : VPM_X_OR_Y, DDSP_CREATE_WATER);
 }
 
 static void PlaceDocks_BuildLock(TileIndex tile)
@@ -69,6 +69,11 @@
 	DoCommandP(tile, 0, 0, CcBuildDocks, CMD_BUILD_LOCK | CMD_MSG(STR_CANT_BUILD_LOCKS));
 }
 
+static void PlaceDocks_BuildRiver(TileIndex tile)
+{
+	VpStartPlaceSizing(tile, VPM_X_AND_Y, DDSP_CREATE_RIVER);
+}
+
 static void PlaceDocks_Aqueduct(TileIndex tile)
 {
 	VpStartPlaceSizing(tile, VPM_X_OR_Y, DDSP_BUILD_BRIDGE);
@@ -89,6 +94,7 @@
 	DTW_DEPOT,                     ///< Build depot button
 	DTW_STATION,                   ///< Build station button
 	DTW_BUOY,                      ///< Build buoy button
+	DTW_RIVER,                     ///< Build river button (in scenario editor)
 	DTW_BUILD_AQUEDUCT,            ///< Build aqueduct button
 	DTW_END,                       ///< End of toolbar widgets
 };
@@ -96,6 +102,7 @@
 
 static void BuildDocksClick_Canal(Window *w)
 {
+
 	HandlePlacePushButton(w, DTW_CANAL, SPR_CURSOR_CANAL, VHM_RECT, PlaceDocks_BuildCanal);
 }
 
@@ -127,6 +134,12 @@
 	HandlePlacePushButton(w, DTW_BUOY, SPR_CURSOR_BOUY, VHM_RECT, PlaceDocks_Buoy);
 }
 
+static void BuildDocksClick_River(Window *w)
+{
+	if (_game_mode != GM_EDITOR) return;
+	HandlePlacePushButton(w, DTW_RIVER, SPR_CURSOR_RIVER, VHM_RECT, PlaceDocks_BuildRiver);
+}
+
 static void BuildDocksClick_Aqueduct(Window *w)
 {
 	HandlePlacePushButton(w, DTW_BUILD_AQUEDUCT, SPR_CURSOR_AQUEDUCT, VHM_RECT, PlaceDocks_Aqueduct);
@@ -142,6 +155,7 @@
 	BuildDocksClick_Depot,
 	BuildDocksClick_Dock,
 	BuildDocksClick_Buoy,
+	BuildDocksClick_River,
 	BuildDocksClick_Aqueduct
 };
 
@@ -177,8 +191,9 @@
 			case '4': BuildDocksClick_Depot(this); break;
 			case '5': BuildDocksClick_Dock(this); break;
 			case '6': BuildDocksClick_Buoy(this); break;
+			case '7': BuildDocksClick_River(this); break;
 			case 'B':
-			case '7': BuildDocksClick_Aqueduct(this); break;
+			case '8': BuildDocksClick_Aqueduct(this); break;
 			default:  return ES_NOT_HANDLED;
 		}
 		return ES_HANDLED;
@@ -207,7 +222,10 @@
 					GUIPlaceProcDragXY(select_proc, start_tile, end_tile);
 					break;
 				case DDSP_CREATE_WATER:
-					DoCommandP(end_tile, start_tile, 0, CcBuildCanal, CMD_BUILD_CANAL | CMD_MSG(STR_CANT_BUILD_CANALS));
+					DoCommandP(end_tile, start_tile, (_game_mode == GM_EDITOR ? _ctrl_pressed : 0), CcBuildCanal, CMD_BUILD_CANAL | CMD_MSG(STR_CANT_BUILD_CANALS));
+					break;
+				case DDSP_CREATE_RIVER:
+					DoCommandP(end_tile, start_tile, 2, CcBuildCanal, CMD_BUILD_CANAL | CMD_MSG(STR_CANT_PLACE_RIVERS));
 					break;
 
 				default: break;
@@ -233,24 +251,25 @@
 };
 
 static const Widget _build_docks_toolb_widgets[] = {
-{   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                   STR_018B_CLOSE_WINDOW},                   // DTW_CLOSEBOX
-{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   145,     0,    13, STR_9801_DOCK_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS},         // DTW_CAPTION
-{  WWT_STICKYBOX,   RESIZE_NONE,     7,   146,   157,     0,    13, 0x0,                        STR_STICKY_BUTTON},                       // DTW_STICKY
-{     WWT_IMGBTN,   RESIZE_NONE,     7,     0,    21,    14,    35, SPR_IMG_BUILD_CANAL,        STR_BUILD_CANALS_TIP},                    // DTW_CANAL
-{     WWT_IMGBTN,   RESIZE_NONE,     7,    22,    43,    14,    35, SPR_IMG_BUILD_LOCK,         STR_BUILD_LOCKS_TIP},                     // DTW_LOCK
+{   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                        STR_018B_CLOSE_WINDOW},                  // DTW_CLOSEBOX
+{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   147,     0,    13, STR_9801_WATERWAYS_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS},        // DTW_CAPTION
+{  WWT_STICKYBOX,   RESIZE_NONE,     7,   148,   159,     0,    13, 0x0,                             STR_STICKY_BUTTON},                      // DTW_STICKY
+{     WWT_IMGBTN,   RESIZE_NONE,     7,     0,    21,    14,    35, SPR_IMG_BUILD_CANAL,             STR_BUILD_CANALS_TIP},                   // DTW_CANAL
+{     WWT_IMGBTN,   RESIZE_NONE,     7,    22,    43,    14,    35, SPR_IMG_BUILD_LOCK,              STR_BUILD_LOCKS_TIP},                    // DTW_LOCK
 
-{      WWT_PANEL,   RESIZE_NONE,     7,    44,    47,    14,    35, 0x0,                        STR_NULL},                                // DTW_SEPERATOR
+{      WWT_PANEL,   RESIZE_NONE,     7,    44,    48,    14,    35, 0x0,                             STR_NULL},                               // DTW_SEPERATOR
 
-{     WWT_IMGBTN,   RESIZE_NONE,     7,    48,    69,    14,    35, SPR_IMG_DYNAMITE,           STR_018D_DEMOLISH_BUILDINGS_ETC},         // DTW_DEMOLISH
-{     WWT_IMGBTN,   RESIZE_NONE,     7,    70,    91,    14,    35, SPR_IMG_SHIP_DEPOT,         STR_981E_BUILD_SHIP_DEPOT_FOR_BUILDING},  // DTW_DEPOT
-{     WWT_IMGBTN,   RESIZE_NONE,     7,    92,   113,    14,    35, SPR_IMG_SHIP_DOCK,          STR_981D_BUILD_SHIP_DOCK},                // DTW_STATION
-{     WWT_IMGBTN,   RESIZE_NONE,     7,   114,   135,    14,    35, SPR_IMG_BOUY,               STR_9834_POSITION_BUOY_WHICH_CAN},        // DTW_BUOY
-{     WWT_IMGBTN,   RESIZE_NONE,     7,   136,   157,    14,    35, SPR_IMG_AQUEDUCT,           STR_BUILD_AQUEDUCT},                      // DTW_BUILD_AQUEDUCT
+{     WWT_IMGBTN,   RESIZE_NONE,     7,    49,    70,    14,    35, SPR_IMG_DYNAMITE,                STR_018D_DEMOLISH_BUILDINGS_ETC},        // DTW_DEMOLISH
+{     WWT_IMGBTN,   RESIZE_NONE,     7,    71,    92,    14,    35, SPR_IMG_SHIP_DEPOT,              STR_981E_BUILD_SHIP_DEPOT_FOR_BUILDING}, // DTW_DEPOT
+{     WWT_IMGBTN,   RESIZE_NONE,     7,    93,   114,    14,    35, SPR_IMG_SHIP_DOCK,               STR_981D_BUILD_SHIP_DOCK},               // DTW_STATION
+{     WWT_IMGBTN,   RESIZE_NONE,     7,   115,   136,    14,    35, SPR_IMG_BOUY,                    STR_9834_POSITION_BUOY_WHICH_CAN},       // DTW_BUOY
+{     WWT_EMPTY,    RESIZE_NONE,     0,     0,     0,     0,     0, 0x0,                             STR_NULL},                               // DTW_RIVER
+{     WWT_IMGBTN,   RESIZE_NONE,     7,   137,   159,    14,    35, SPR_IMG_AQUEDUCT,                STR_BUILD_AQUEDUCT},                     // DTW_BUILD_AQUEDUCT
 {   WIDGETS_END},
 };
 
 static const WindowDesc _build_docks_toolbar_desc = {
-	WDP_ALIGN_TBR, 22, 158, 36, 158, 36,
+	WDP_ALIGN_TBR, 22, 160, 36, 160, 36,
 	WC_BUILD_TOOLBAR, WC_NONE,
 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
 	_build_docks_toolb_widgets,
@@ -264,6 +283,38 @@
 	AllocateWindowDescFront<BuildDocksToolbarWindow>(&_build_docks_toolbar_desc, TRANSPORT_WATER);
 }
 
+/* Widget definition for the build docks in scenario editor window */
+static const Widget _build_docks_scen_toolb_widgets[] = {
+{   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                           STR_018B_CLOSE_WINDOW},           // DTW_CLOSEBOX
+{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   102,     0,    13, STR_9801_WATERWAYS_CONSTRUCTION_SE, STR_018C_WINDOW_TITLE_DRAG_THIS}, // DTW_CAPTION
+{  WWT_STICKYBOX,   RESIZE_NONE,     7,   103,   114,     0,    13, 0x0,                                STR_STICKY_BUTTON},               // DTW_STICKY
+{     WWT_IMGBTN,   RESIZE_NONE,     7,     0,    21,    14,    35, SPR_IMG_BUILD_CANAL,                STR_CREATE_LAKE},                 // DTW_CANAL
+{     WWT_IMGBTN,   RESIZE_NONE,     7,    22,    43,    14,    35, SPR_IMG_BUILD_LOCK,                 STR_BUILD_LOCKS_TIP},             // DTW_LOCK
+
+{      WWT_PANEL,   RESIZE_NONE,     7,    44,    48,    14,    35, 0x0,                                STR_NULL},                        // DTW_SEPERATOR
+
+{     WWT_IMGBTN,   RESIZE_NONE,     7,    49,    70,    14,    35, SPR_IMG_DYNAMITE,                   STR_018D_DEMOLISH_BUILDINGS_ETC}, // DTW_DEMOLISH
+{     WWT_EMPTY,    RESIZE_NONE,     0,     0,     0,     0,     0, 0x0,                                STR_NULL},                        // DTW_DEPOT
+{     WWT_EMPTY,    RESIZE_NONE,     0,     0,     0,     0,     0, 0x0,                                STR_NULL},                        // DTW_STATION
+{     WWT_EMPTY,    RESIZE_NONE,     0,     0,     0,     0,     0, 0x0,                                STR_NULL},                        // DTW_BUOY
+{     WWT_IMGBTN,   RESIZE_NONE,     7,    71,    92,    14,    35, SPR_IMG_BUILD_RIVER,                STR_CREATE_RIVER},                // DTW_RIVER
+{     WWT_IMGBTN,   RESIZE_NONE,     7,    93,   114,    14,    35, SPR_IMG_AQUEDUCT,                   STR_BUILD_AQUEDUCT},              // DTW_BUILD_AQUEDUCT
+{   WIDGETS_END},
+};
+
+/* Window definition for the build docks in scenario editor window */
+static const WindowDesc _build_docks_scen_toolbar_desc = {
+	WDP_AUTO, WDP_AUTO, 115, 36, 115, 36,
+	WC_SCEN_BUILD_TOOLBAR, WC_NONE,
+	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
+	_build_docks_scen_toolb_widgets,
+};
+
+void ShowBuildDocksScenToolbar()
+{
+	AllocateWindowDescFront<BuildDocksToolbarWindow>(&_build_docks_scen_toolbar_desc, TRANSPORT_WATER);
+}
+
 struct BuildDocksStationWindow : public PickerWindowBase {
 private:
 	enum BuildDockStationWidgets {
--- a/src/driver.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/driver.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -156,7 +156,9 @@
 	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));
+	const char *longname = strdup(buf);
+
+	std::pair<Drivers::iterator, bool> P = GetDrivers().insert(Drivers::value_type(longname, this));
 	assert(P.second);
 }
 
@@ -194,7 +196,14 @@
 	strecpy(buf, GetDriverTypeName(type), lastof(buf));
 	strecpy(buf + 5, this->name, lastof(buf));
 
-	GetDrivers().erase(buf);
+	Drivers::iterator it = GetDrivers().find(buf);
+	assert(it != GetDrivers().end());
+
+	const char *longname = (*it).first;
+
+	GetDrivers().erase(it);
+	free((void *)longname);
+
 	if (GetDrivers().empty()) delete &GetDrivers();
-	free(this->name);
+	free((void *)this->name);
 }
--- a/src/driver.h	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/driver.h	Wed Jul 09 13:32:13 2008 +0000
@@ -8,7 +8,6 @@
 #include "debug.h"
 #include "core/enum_type.hpp"
 #include "string_func.h"
-#include <string>
 #include <map>
 
 bool GetDriverParamBool(const char * const *parm, const char *name);
@@ -37,9 +36,17 @@
 class DriverFactoryBase {
 private:
 	Driver::Type type;
-	char *name;
+	const char *name;
 	int priority;
-	typedef std::map<std::string, DriverFactoryBase *> Drivers;
+
+	struct StringCompare {
+		bool operator () (const char *a, const char *b) const
+		{
+			return strcmp(a, b) < 0;
+		}
+	};
+
+	typedef std::map<const char *, DriverFactoryBase *, StringCompare> Drivers;
 
 	static Drivers &GetDrivers()
 	{
--- a/src/economy.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/economy.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -325,7 +325,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)->player_money = MAX_UVALUE(uint64) >> 2; // jackpot ;p
+		GetPlayer(old_player)->player_money = UINT64_MAX >> 2; // jackpot ;p
 	}
 
 	if (new_player == PLAYER_SPECTATOR) {
@@ -1934,7 +1934,7 @@
 	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, fluct,            SLE_INT16),
 	    SLE_VAR(Economy, interest_rate,    SLE_UINT8),
 	    SLE_VAR(Economy, infl_amount,      SLE_UINT8),
 	    SLE_VAR(Economy, infl_amount_pr,   SLE_UINT8),
--- a/src/economy_type.h	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/economy_type.h	Wed Jul 09 13:32:13 2008 +0000
@@ -15,7 +15,7 @@
 	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;
+	int16 fluct;
 	byte interest_rate;     ///< Interest
 	byte infl_amount;       ///< inflation amount
 	byte infl_amount_pr;    ///< inflation rate for payment rates
--- a/src/elrail.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/elrail.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -495,10 +495,13 @@
 		}
 	}
 
-	/* setup total power for trains */
+	/* Fix the total power and acceleration for trains */
 	FOR_ALL_VEHICLES(v) {
-		/* power is cached only for front engines */
-		if (v->type == VEH_TRAIN && IsFrontEngine(v)) TrainPowerChanged(v);
+		/* power and acceleration is cached only for front engines */
+		if (v->type == VEH_TRAIN && IsFrontEngine(v)) {
+			TrainPowerChanged(v);
+			UpdateTrainAcceleration(v);
+		}
 	}
 
 	FOR_ALL_PLAYERS(p) p->avail_railtypes = GetPlayerRailtypes(p->index);
--- a/src/engine_gui.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/engine_gui.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -202,7 +202,7 @@
 	DrawStringMultiCenter(w->width >> 1, 57, STR_NEW_VEHICLE_TYPE, w->width - 2);
 
 	dei->engine_proc(w->width >> 1, 88, engine, 0);
-	GfxFillRect(25, 56, w->width - 56, 112, PALETTE_TO_STRUCT_GREY | (1 << USE_COLORTABLE));
+	GfxFillRect(25, 56, w->width - 56, 112, PALETTE_TO_STRUCT_GREY, FILLRECT_RECOLOR);
 	dei->info_proc(engine, w->width >> 1, 129, w->width - 52);
 }
 
--- a/src/fileio.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/fileio.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -11,6 +11,7 @@
 #include "core/alloc_func.hpp"
 #include "core/math_func.hpp"
 #include "string_func.h"
+#include "tar_type.h"
 #ifdef WIN32
 #include <windows.h>
 #else
--- a/src/fileio.h	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/fileio.h	Wed Jul 09 13:32:13 2008 +0000
@@ -5,8 +5,6 @@
 #ifndef FILEIO_H
 #define FILEIO_H
 
-#include <map>
-#include <string>
 #include "core/enum_type.hpp"
 
 void FioSeekTo(size_t pos, int mode);
@@ -64,23 +62,6 @@
 extern const char *_searchpaths[NUM_SEARCHPATHS];
 
 /**
- * The define of a TarList.
- */
-struct TarListEntry {
-	const char *filename;
-	const char *dirname;
-};
-struct TarFileListEntry {
-	TarListEntry *tar;
-	size_t size;
-	size_t position;
-};
-typedef std::map<std::string, TarListEntry *> TarList;
-typedef std::map<std::string, TarFileListEntry> TarFileList;
-extern TarList _tar_list;
-extern TarFileList _tar_filelist;
-
-/**
  * 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
@@ -92,10 +73,6 @@
 
 /** Iterator for all the search paths */
 #define FOR_ALL_SEARCHPATHS(sp) for (sp = SP_FIRST_DIR; sp < NUM_SEARCHPATHS; sp++) if (IsValidSearchPath(sp))
-#define FOR_ALL_TARS(tar) for (tar = _tar_filelist.begin(); tar != _tar_filelist.end(); tar++)
-
-typedef bool FioTarFileListCallback(const char *filename, int size, void *userdata);
-FILE *FioTarFileList(const char *tar, const char *mode, size_t *filesize, FioTarFileListCallback *callback, void *userdata);
 
 void FioFCloseFile(FILE *f);
 FILE *FioFOpenFile(const char *filename, const char *mode = "rb", Subdirectory subdir = DATA_DIR, size_t *filesize = NULL);
--- a/src/genworld_gui.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/genworld_gui.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -473,11 +473,11 @@
 		EventState state;
 		this->HandleEditBoxKey(GLAND_RANDOM_EDITBOX, key, keycode, state);
 		/* the seed is unsigned, therefore atoi cannot be used.
-			* As 2^32 - 1 (MAX_UVALUE(uint32)) is a 'magic' value
+			* As 2^32 - 1 (UINT32_MAX) is a 'magic' value
 			* (use random seed) it should not be possible to be
 			* entered into the input field; the generate seed
 			* button can be used instead. */
-		_settings_newgame.game_creation.generation_seed = minu(strtoul(this->edit_str_buf, NULL, 10), MAX_UVALUE(uint32) - 1);
+		_settings_newgame.game_creation.generation_seed = minu(strtoul(this->edit_str_buf, NULL, 10), UINT32_MAX - 1);
 		return state;
 	}
 
--- a/src/gfx.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/gfx.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -89,7 +89,21 @@
 }
 
 
-void GfxFillRect(int left, int top, int right, int bottom, int color)
+/**
+ * Applies a certain FillRectMode-operation to a rectangle [left, right] x [top, bottom] on the screen.
+ *
+ * @pre dpi->zoom == ZOOM_LVL_NORMAL, right >= left, bottom >= top
+ * @param left Minimum X (inclusive)
+ * @param top Minimum Y (inclusive)
+ * @param right Maximum X (inclusive)
+ * @param bottom Maximum Y (inclusive)
+ * @param color A 8 bit palette index (FILLRECT_OPAQUE and FILLRECT_CHECKER) or a recolor spritenumber (FILLRECT_RECOLOR)
+ * @param mode
+ *         FILLRECT_OPAQUE:   Fill the rectangle with the specified color
+ *         FILLRECT_CHECKER:  Like FILLRECT_OPAQUE, but only draw every second pixel (used to grey out things)
+ *         FILLRECT_RECOLOR:  Apply a recolor sprite to every pixel in the rectangle currently on screen
+ */
+void GfxFillRect(int left, int top, int right, int bottom, int color, FillRectMode mode)
 {
 	Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
 	const DrawPixelInfo *dpi = _cur_dpi;
@@ -116,18 +130,23 @@
 
 	dst = blitter->MoveTo(dpi->dst_ptr, left, top);
 
-	if (!HasBit(color, PALETTE_MODIFIER_GREYOUT)) {
-		if (!HasBit(color, USE_COLORTABLE)) {
+	switch (mode) {
+		default: // FILLRECT_OPAQUE
 			blitter->DrawRect(dst, right, bottom, (uint8)color);
-		} else {
+			break;
+
+		case FILLRECT_RECOLOR:
 			blitter->DrawColorMappingRect(dst, right, bottom, GB(color, 0, PALETTE_WIDTH));
+			break;
+
+		case FILLRECT_CHECKER: {
+			byte bo = (oleft - left + dpi->left + otop - top + dpi->top) & 1;
+			do {
+				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);
+			break;
 		}
-	} else {
-		byte bo = (oleft - left + dpi->left + otop - top + dpi->top) & 1;
-		do {
-			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);
 	}
 }
 
--- a/src/gfx_func.h	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/gfx_func.h	Wed Jul 09 13:32:13 2008 +0000
@@ -99,7 +99,7 @@
 
 void DrawCharCentered(uint32 c, int x, int y, uint16 color);
 
-void GfxFillRect(int left, int top, int right, int bottom, int color);
+void GfxFillRect(int left, int top, int right, int bottom, int color, FillRectMode mode = FILLRECT_OPAQUE);
 void GfxDrawLine(int left, int top, int right, int bottom, int color);
 void DrawBox(int x, int y, int dx1, int dy1, int dx2, int dy2, int dx3, int dy3);
 
--- a/src/gfx_type.h	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/gfx_type.h	Wed Jul 09 13:32:13 2008 +0000
@@ -149,7 +149,7 @@
 	uint8 b, g, r, a; ///< colour channels in LE order
 #endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */
 
-	operator uint32 () { return *(uint32 *)this; }
+	operator uint32 () const { return *(uint32 *)this; }
 };
 
 enum FontSize {
@@ -216,4 +216,11 @@
 	IS_PALETTE_COLOR = 0x100, ///< color value is already a real palette color index, not an index of a StringColor
 };
 
+/** Define the operation GfxFillRect performs */
+enum FillRectMode {
+	FILLRECT_OPAQUE,  ///< Fill rectangle with a single color
+	FILLRECT_CHECKER, ///< Draw only every second pixel, used for greying-out
+	FILLRECT_RECOLOR, ///< Apply a recolor sprite to the screen content
+};
+
 #endif /* GFX_TYPE_H */
--- a/src/gui.h	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/gui.h	Wed Jul 09 13:32:13 2008 +0000
@@ -40,6 +40,7 @@
 
 /* dock_gui.cpp */
 void ShowBuildDocksToolbar();
+void ShowBuildDocksScenToolbar();
 
 /* aircraft_gui.cpp */
 void ShowBuildAirToolbar();
--- a/src/industry_cmd.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/industry_cmd.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -963,10 +963,10 @@
 /**
  * Search callback function for ChopLumberMillTrees
  * @param tile to test
- * @param data that is passed by the caller.  In this case, nothing
+ * @param user_data that is passed by the caller.  In this case, nothing
  * @return the result of the test
  */
-static bool SearchLumberMillTrees(TileIndex tile, uint32 data)
+static bool SearchLumberMillTrees(TileIndex tile, void *user_data)
 {
 	if (IsTileType(tile, MP_TREES) && GetTreeGrowth(tile) > 2) { ///< 3 and up means all fully grown trees
 		PlayerID old_player = _current_player;
@@ -995,7 +995,7 @@
 
 	if (!IsIndustryCompleted(tile)) return;  ///< Can't proceed if not completed
 
-	if (CircularTileSearch(&tile, 40, SearchLumberMillTrees, 0)) ///< 40x40 tiles  to search
+	if (CircularTileSearch(&tile, 40, SearchLumberMillTrees, NULL)) ///< 40x40 tiles  to search
 		i->produced_cargo_waiting[0] = min(0xffff, i->produced_cargo_waiting[0] + 45); ///< Found a tree, add according value to waiting cargo
 }
 
--- a/src/lang/afrikaans.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/afrikaans.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2823,8 +2823,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Kies vrag tipe vir pad voertuig te ontvoer
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Werf konstruksie
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Werf konstruksie
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Kan nie werf hier bou nie...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Skip Depot
 STR_9804_NEW_SHIPS                                              :{BLACK}Nuwe Skepe
--- a/src/lang/brazilian_portuguese.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/brazilian_portuguese.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -1292,6 +1292,9 @@
 STR_BUILD_LOCKS_TIP                                             :{BLACK}Construir eclusas
 STR_LANDINFO_LOCK                                               :Eclusa
 
+STR_CANT_PLACE_RIVERS                                           :{WHITE}Impossível fazer rios aqui...
+STR_LANDINFO_RIVER                                              :Rio
+
 STR_BUOY_IS_IN_USE                                              :{WHITE}...bóia está em uso!
 
 STR_LANDINFO_COORDS                                             :{BLACK}Coordenadas: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
@@ -1944,6 +1947,7 @@
 STR_3804_WATER                                                  :Água
 STR_3805_COAST_OR_RIVERBANK                                     :Costa ou margem
 STR_3806_SHIP_DEPOT                                             :Depósito naval
+STR_AQUEDUCT                                                    :Aqueduto
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...Impossível construir na água
 STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Deve demolir o canal primeiro
 
@@ -2663,14 +2667,17 @@
 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}
+STR_ORDER_NON_STOP                                              :{BLACK}Sem parar
 STR_ORDER_GO_TO                                                 :Vá para
 STR_ORDER_GO_NON_STOP_TO                                        :Ir sem parar para
 STR_ORDER_GO_VIA                                                :Vá via
 STR_ORDER_GO_NON_STOP_VIA                                       :Ir sem parar via
+STR_ORDER_TOGGLE_FULL_LOAD                                      :{BLACK}Carregar qualquer carga
 STR_ORDER_DROP_LOAD_IF_POSSIBLE                                 :Carregar se disponível
 STR_ORDER_DROP_FULL_LOAD_ALL                                    :Carregar tudo
 STR_ORDER_DROP_FULL_LOAD_ANY                                    :Carregar completamente qualquer carga
 STR_ORDER_DROP_NO_LOADING                                       :Não carregar
+STR_ORDER_TOGGLE_UNLOAD                                         :{BLACK}Descarregar tudo
 STR_ORDER_DROP_UNLOAD_IF_ACCEPTED                               :Descarregar se aceito
 STR_ORDER_DROP_UNLOAD                                           :Descarregar tudo
 STR_ORDER_DROP_TRANSFER                                         :Transferir
@@ -2951,8 +2958,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Selecionar tipo de carga para o automóvel
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Construir doca
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Construir doca
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Impossível construir doca aqui...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Depósito Naval
 STR_9804_NEW_SHIPS                                              :{BLACK}Novas Embarcações
@@ -3005,6 +3010,8 @@
 STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Cidadãos celebram . . .{} Primeira embarcação chega a {STATION}!
 STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}Posicione a bóia, que pode ser usada para marcar pontos de rota adicionais
 STR_9835_CAN_T_POSITION_BUOY_HERE                               :{WHITE}Impossível posicionar bóia aqui...
+STR_BUILD_AQUEDUCT                                              :{BLACK}Construir aqueduto
+STR_CAN_T_BUILD_AQUEDUCT_HERE                                   :{WHITE}Impossível construir aqueduto aqui
 STR_9836_RENAME                                                 :{BLACK}Renomear
 STR_9837_RENAME_SHIP_TYPE                                       :{BLACK}Renomear tipo de embarcação
 STR_9838_RENAME_SHIP_TYPE                                       :{WHITE}Renomear tipo de embarcação
@@ -3157,6 +3164,7 @@
 STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER                            :{STRING} requer versão {STRING} ou maior do OpenTTD.
 STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE                          :o arquivo GRF foi designado para tradução
 STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED                        :Muitos NewGRFs foram carregados.
+STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC                       :Carregar {STRING} como um NewGRF estático em conjunto com {STRING} pode causar desincronias.
 
 STR_NEWGRF_ADD                                                  :{BLACK}Adicionar
 STR_NEWGRF_ADD_TIP                                              :{BLACK}Adiciona um NewGRF à lista
--- a/src/lang/bulgarian.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/bulgarian.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -488,6 +488,9 @@
 STR_01A5_COST_TO_CLEAR                                          :{BLACK}Цена за изчистване: {LTBLUE}{CURRENCY}
 STR_01A6_N_A                                                    :Не се предлага
 STR_01A7_OWNER                                                  :{BLACK}Собственик: {LTBLUE}{STRING}
+STR_ROAD_OWNER                                                  :{BLACK}Собственик на шосето: {LTBLUE}{STRING}
+STR_TRAM_OWNER                                                  :{BLACK}Собственик на трамваината линиа: {LTBLUE}{STRING}
+STR_RAIL_OWNER                                                  :{BLACK}Собственик на железопътната линиа: {LTBLUE}{STRING}
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Община: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Нищо
 STR_01AA_NAME                                                   :{BLACK}Име
@@ -1289,6 +1292,9 @@
 STR_BUILD_LOCKS_TIP                                             :{BLACK}Строеж на шлюзове
 STR_LANDINFO_LOCK                                               :Заключване
 
+STR_CANT_PLACE_RIVERS                                           :{WHITE}Не можеш да сложиш реката тук...
+STR_LANDINFO_RIVER                                              :Река
+
 STR_BUOY_IS_IN_USE                                              :{WHITE}...шамандурата се използва!
 
 STR_LANDINFO_COORDS                                             :{BLACK}Координати: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
@@ -1713,6 +1719,7 @@
 STR_1816_TREE_LINED_ROAD                                        :Асфалтов път с дървета
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Авто депо
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :ЖП прелез
+STR_TRAMWAY                                                     :Трамваи
 STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Не може да премахне автогарата...
 STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Не може да премахне товарната гара...
 STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION                         :{WHITE}Пътническата трамвайна гара неможе да бъде премахната...
@@ -2657,14 +2664,17 @@
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Влак на пътя
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
+STR_ORDER_NON_STOP                                              :{BLACK}NБез спирка
 STR_ORDER_GO_TO                                                 :Отиди до
 STR_ORDER_GO_NON_STOP_TO                                        :Отиди без спиране до
 STR_ORDER_GO_VIA                                                :Отиди чрез
 STR_ORDER_GO_NON_STOP_VIA                                       :Отиди без спиране чрез
+STR_ORDER_TOGGLE_FULL_LOAD                                      :{BLACK}До пълно товарене на стоката
 STR_ORDER_DROP_LOAD_IF_POSSIBLE                                 :Натовари ако е вазможно
 STR_ORDER_DROP_FULL_LOAD_ALL                                    :Напълно нотовари всичкиат товар
 STR_ORDER_DROP_FULL_LOAD_ANY                                    :Напълно нотовари какъвто и да е товар
 STR_ORDER_DROP_NO_LOADING                                       :Ненатаваряй
+STR_ORDER_TOGGLE_UNLOAD                                         :{BLACK}Разтовари всичко
 STR_ORDER_DROP_UNLOAD_IF_ACCEPTED                               :Разтовари ако позволено
 STR_ORDER_DROP_UNLOAD                                           :Разтовари взичко
 STR_ORDER_DROP_TRANSFER                                         :Смени
@@ -2688,10 +2698,13 @@
 STR_ORDER_TOOLTIP_UNLOAD                                        :{BLACK}Промени начинат на разтоваряне на осветената заповед
 STR_GO_TO_STATION                                               :{STRING} {STATION} {STRING}
 
+STR_ORDER_GO_TO_DROPDOWN_TOOLTIP                                :{BLACK}Вмъкни допълнителна заповед
 STR_ORDER_GO_TO_NEAREST_DEPOT                                   :Отиди до най-близкото депо
 STR_ORDER_GO_TO_NEAREST_HANGAR                                  :Отиди до най-близкият хангар
 STR_ORDER_NEAREST_DEPOT                                         :най-близкото депо
 STR_ORDER_NEAREST_HANGAR                                        :най-близкият хангар
+STR_ORDER_SERVICE_AT                                            :Сервиз в
+STR_ORDER_SERVICE_NON_STOP_AT                                   :Сервиз без спиране в
 STR_ORDER_TRAIN_DEPOT                                           :Депо за влакове
 STR_ORDER_ROAD_DEPOT                                            :Депо за пътни превозни средства
 STR_ORDER_SHIP_DEPOT                                            :Депо за кораби
@@ -2699,7 +2712,13 @@
 STR_GO_TO_NEAREST_DEPOT                                         :{STRING} {STRING} {STRING}
 STR_GO_TO_HANGAR                                                :{STRING} {STATION} хангар
 
+STR_ORDER_CONDITIONAL                                           :Условна променяща се заповед
+STR_ORDER_CONDITIONAL_VALUE_CAPT                                :{WHITE}Вкарай стойност за сравнение
+STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE                           :Процент товарене
+STR_ORDER_CONDITIONAL_RELIABILITY                               :Надеждност
 STR_ORDER_CONDITIONAL_MAX_SPEED                                 :Максимална скорост
+STR_ORDER_CONDITIONAL_AGE                                       :Възраст на превозното средство (години)
+STR_ORDER_CONDITIONAL_REQUIRES_SERVICE                          :Нужен сервиз
 STR_ORDER_CONDITIONAL_UNCONDITIONALLY                           :Винаги
 STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS                         :е равно на
 STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS                     :не е равно на
@@ -2710,6 +2729,9 @@
 STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE                        :е правилно
 STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE                       :е неправилно
 STR_CONDITIONAL_VALUE                                           :{SKIP}{BLACK}{COMMA}
+STR_CONDITIONAL_UNCONDITIONAL                                   :Премини на заповед {COMMA}
+STR_CONDITIONAL_NUM                                             :Премини на заповед {COMMA} когато {STRING} {STRING} {COMMA}
+STR_CONDITIONAL_TRUE_FALSE                                      :Премини на заповед {COMMA} когато {STRING} {STRING}
 
 STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :Патувай (без разписание)
 STR_TIMETABLE_TRAVEL_FOR                                        :Патувай за {STRING}
@@ -2930,8 +2952,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Избор тип това за автомобила да превозва
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Създаване на Пристанище
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Създаване на Пристанище
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Не може да построиш пристанище тук...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Корабно депо
 STR_9804_NEW_SHIPS                                              :{BLACK}Нови Кораби
@@ -2984,6 +3004,8 @@
 STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Гражданите празнуват . . .{}Първия кораб пристигнал в {STATION}!
 STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}Поставете шамандура, използва се като отправна точка
 STR_9835_CAN_T_POSITION_BUOY_HERE                               :{WHITE}Не може да постави шамандура...
+STR_BUILD_AQUEDUCT                                              :{BLACK}Построй акведукт
+STR_CAN_T_BUILD_AQUEDUCT_HERE                                   :{WHITE}Не може да построиш акведукт тук...
 STR_9836_RENAME                                                 :{BLACK}Промяна на име
 STR_9837_RENAME_SHIP_TYPE                                       :{BLACK}Промяна името на кораб
 STR_9838_RENAME_SHIP_TYPE                                       :{WHITE}Промяна името на кораба
@@ -3167,6 +3189,7 @@
 STR_NEWGRF_UNPAUSE_WARNING_TITLE                                :{YELLOW}Липсва GRF файл(ове)
 STR_NEWGRF_UNPAUSE_WARNING                                      :{WHITE}Може да счупи OpenTTD. Не пускайте съобщение за грешка за последвали счупвания.{}Желаете ли да се махне паузата?
 
+
 STR_CURRENCY_WINDOW                                             :{WHITE}Парична единица
 STR_CURRENCY_EXCHANGE_RATE                                      :{LTBLUE}Обменен курс: {ORANGE}{CURRENCY} = £ {COMMA}
 STR_CURRENCY_SEPARATOR                                          :{LTBLUE}Разделител:
@@ -3531,3 +3554,8 @@
 STR_OSK_KEYBOARD_LAYOUT                                         :`1234567890-.,уеишщксдзц;(ьяаожгтнвмчюйъэфхпрлб
 STR_OSK_KEYBOARD_LAYOUT_CAPS                                    :~!?+"%=:/_№ІVыУЕИШЩКСДЗЦ§)ЬЯАОЖГТНВМЧЮЙЪЭФХПРЛБ
 ########
+
+############ town controlled noise level
+STR_NOISE_IN_TOWN                                               :{BLACK}Лимит на шумът в градът: {ORANGE}{COMMA}{BLACK}  най-много: {ORANGE}{COMMA}
+STR_STATION_NOISE                                               :{BLACK}Произведен шум: {GOLD}{COMMA}
+########
--- a/src/lang/catalan.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/catalan.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -391,7 +391,7 @@
 STR_ENGINE_SORT_CARGO_CAPACITY                                  :Capacitat de càrrega
 STR_NO_WAITING_CARGO                                            :{BLACK}No hi ha càrrega d'aquest tipus esperant
 STR_SELECT_ALL_FACILITIES                                       :{BLACK}Seleccionar totes les instal·lacions
-STR_SELECT_ALL_TYPES                                            :{BLACK}Selecciona tots els tipus de càrrega (inloent carga sense espera)
+STR_SELECT_ALL_TYPES                                            :{BLACK}Selecciona tots els tipus de càrrega (incloent carga sense espera)
 STR_AVAILABLE_TRAINS                                            :{BLACK}Trens Disponibles
 STR_AVAILABLE_ROAD_VEHICLES                                     :{BLACK}Vehicles Disponibles
 STR_AVAILABLE_SHIPS                                             :{BLACK}Vaixells Disponibles
@@ -1291,6 +1291,9 @@
 STR_BUILD_LOCKS_TIP                                             :{BLACK}Construeix rescloses
 STR_LANDINFO_LOCK                                               :Resclosa
 
+STR_CANT_PLACE_RIVERS                                           :{WHITE}Aquí no es poden posar rius...
+STR_LANDINFO_RIVER                                              :Riu
+
 STR_BUOY_IS_IN_USE                                              :{WHITE}...boia en ús!
 
 STR_LANDINFO_COORDS                                             :{BLACK}Coordenades: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
@@ -1943,6 +1946,7 @@
 STR_3804_WATER                                                  :Aigua
 STR_3805_COAST_OR_RIVERBANK                                     :Costa o marge de riu
 STR_3806_SHIP_DEPOT                                             :Drassana
+STR_AQUEDUCT                                                    :Aqüeducte
 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
 
@@ -2662,14 +2666,17 @@
 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}
+STR_ORDER_NON_STOP                                              :{BLACK}Sense parar
 STR_ORDER_GO_TO                                                 :Ves a
 STR_ORDER_GO_NON_STOP_TO                                        :Ves sense parar a
 STR_ORDER_GO_VIA                                                :Ves via
 STR_ORDER_GO_NON_STOP_VIA                                       :Ves sense parar via
+STR_ORDER_TOGGLE_FULL_LOAD                                      :{BLACK}Càrrega completa de qualsevol càrrega
 STR_ORDER_DROP_LOAD_IF_POSSIBLE                                 :Carrega si està disponible
 STR_ORDER_DROP_FULL_LOAD_ALL                                    :Carrega del tot totes les càrregues
-STR_ORDER_DROP_FULL_LOAD_ANY                                    :Carrega del tot qualsevol càrrega
+STR_ORDER_DROP_FULL_LOAD_ANY                                    :Càrrega completa de qualsevol càrrega
 STR_ORDER_DROP_NO_LOADING                                       :No carreguis
+STR_ORDER_TOGGLE_UNLOAD                                         :{BLACK}Descarrega tot
 STR_ORDER_DROP_UNLOAD_IF_ACCEPTED                               :Descarrega si s'accepta
 STR_ORDER_DROP_UNLOAD                                           :Descarrega tot
 STR_ORDER_DROP_TRANSFER                                         :Transfereix
@@ -2827,7 +2834,7 @@
 STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED                          :{BLACK}Mostra els detalls de càrrega transportada
 STR_8850_SHOW_DETAILS_OF_TRAIN_VEHICLES                         :{BLACK}Mostra els detalls d'elements del tren
 STR_8851_SHOW_CAPACITIES_OF_EACH                                :{BLACK}Mostra les capacitats de cada element
-STR_SHOW_TOTAL_CARGO                                            :{BLACK}Mostra la capacitat total del tren, separat per tipus de càrrega
+STR_SHOW_TOTAL_CARGO                                            :{BLACK}Mostra la capacitat total del tren, separada 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. CTRL + clic salta l'ordre seleccionada
 STR_8854_DELETE_THE_HIGHLIGHTED                                 :{BLACK}Esborra l'ordre seleccionada
@@ -2950,8 +2957,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Selecciona el tipus de càrrega a transportar pel vehicle
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Construcció de Port
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Construcció de Port
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Aquí no es pot construir un port...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Drassana
 STR_9804_NEW_SHIPS                                              :{BLACK}Nous Vaixells
@@ -3004,6 +3009,8 @@
 STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Celebració popular . . .{}El 1er. vaixell arriba a {STATION}!
 STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}Situa boia, que pot ser útil per marques de ruta addicionals
 STR_9835_CAN_T_POSITION_BUOY_HERE                               :{WHITE}Aquí no es pot situar una boia...
+STR_BUILD_AQUEDUCT                                              :{BLACK} Construeix aqüeducte
+STR_CAN_T_BUILD_AQUEDUCT_HERE                                   :{WHITE}Aquí no es pot construir un aqüeducte...
 STR_9836_RENAME                                                 :{BLACK}Reanomena
 STR_9837_RENAME_SHIP_TYPE                                       :{BLACK}Reanomena tipus de vaixell
 STR_9838_RENAME_SHIP_TYPE                                       :{WHITE}Reanomena tipus de vaixell
@@ -3126,7 +3133,7 @@
 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
 STR_PERFORMANCE_DETAIL_MAX_INCOME_TIP                           :{BLACK}Quantitat de diners fets durant el mes amb el màxim benefici dels darrers 12 trimestres
-STR_PERFORMANCE_DETAIL_DELIVERED_TIP                            :{BLACK}Unitats de càrrega entregada en els darrers quatre trimestres.
+STR_PERFORMANCE_DETAIL_DELIVERED_TIP                            :{BLACK}Unitats de càrrega entregades en els darrers quatre trimestres.
 STR_PERFORMANCE_DETAIL_CARGO_TIP                                :{BLACK}Tipus de càrrega entregada durant el darrer trimestre.
 STR_PERFORMANCE_DETAIL_MONEY_TIP                                :{BLACK}Quantitats de diners en efectiu
 STR_PERFORMANCE_DETAIL_LOAN_TIP                                 :{BLACK}Tens un prèstec elevat?
@@ -3156,6 +3163,7 @@
 STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER                            :{STRING} necessita OpenTTD versió {STRING} o més modern.
 STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE                          :l'arxiu GRF dissenyat està pendent de traduir
 STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED                        :Hi ha massa arxius NewGRF carregats.
+STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC                       :Carregant {STRING} com a NewGRF estàtic amb {STRING} podria causar desincronitzacions.
 
 STR_NEWGRF_ADD                                                  :{BLACK}Afegeix
 STR_NEWGRF_ADD_TIP                                              :{BLACK}Afegeix un arxiu NewGRF a la llista
--- a/src/lang/croatian.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/croatian.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -1283,6 +1283,7 @@
 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}x{NUM} ({STRING})
@@ -1449,6 +1450,8 @@
 STR_NETWORK_LANG_SWEDISH                                        :Švedski
 STR_NETWORK_LANG_TURKISH                                        :Turski
 STR_NETWORK_LANG_UKRAINIAN                                      :Ukrajinski
+STR_NETWORK_LANG_GREEK                                          :Grčki
+STR_NETWORK_LANG_LATVIAN                                        :Latvijski
 ############ End of leave-in-this-order
 
 STR_NETWORK_GAME_LOBBY                                          :{WHITE}Predvorje igre za više igrača
@@ -1697,6 +1700,7 @@
 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_TRAMWAY                                                     :Tramvaj
 STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Nije moguće ukloniti autobusnu stanicu...
 STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Nije moguće ukloniti kamionsku stanicu...
 STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION                         :{WHITE}Nije moguće ukloniti putničku tramvajsku stanicu...
@@ -1712,6 +1716,7 @@
 STR_2002_WHITE                                                  :{TINYFONT}{WHITE}{SIGN}
 STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Najprije moraš srušiti građevinu
 STR_2005                                                        :{WHITE}{TOWN}
+STR_CITY                                                        :{WHITE}{TOWN} (Grad)
 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}Nije moguće preimenovati grad...
@@ -1921,6 +1926,7 @@
 STR_3804_WATER                                                  :Voda
 STR_3805_COAST_OR_RIVERBANK                                     :Obala ili riječni nasip
 STR_3806_SHIP_DEPOT                                             :Spremište brodova
+STR_AQUEDUCT                                                    :Akvadukt
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...Nije moguće graditi na vodi
 STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Najprije moraš srušiti kanal
 
@@ -2854,8 +2860,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Odaberi 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 nije moguće izgraditi pristanište...
 STR_9803_SHIP_DEPOT                                             :{WHITE} Spremište brodova grada {TOWN}
 STR_9804_NEW_SHIPS                                              :{BLACK}Novi brodovi
--- a/src/lang/czech.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/czech.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -1082,7 +1082,7 @@
 STR_CONFIG_PATCHES_ON                                           :zapnuto
 STR_CONFIG_PATCHES_VEHICLESPEED                                 :{LTBLUE}Ukazovat rychlost vozidla ve stavové liště: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_BUILDONSLOPES                                :{LTBLUE}Povolit výstavbu na svazích kopců a na pobřežích: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AUTOSLOPE                                    :{LTBLUE}Úpravy terénu pod budovami, kolejemi atd. (tzv. autoslope): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSLOPE                                    :{LTBLUE}Srovnání terénu pod budovami, kolejemi atd. (autoslope): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_CATCHMENT                                    :{LTBLUE}Povolit u oblasti pokrytí realističtější velikost: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_EXTRADYNAMITE                                :{LTBLUE}Povolit bourání více městských silnic, mostů, tunelů, atp.: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAMMOTHTRAINS                                :{LTBLUE}Povolit stavbu dlouhých vlaků: {ORANGE}{STRING}
@@ -1092,7 +1092,7 @@
 STR_CONFIG_PATCHES_IMPROVEDLOAD                                 :{LTBLUE}Použij vylepšený algoritmus nakládání: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GRADUAL_LOADING                              :{LTBLUE}Nakládat vozidla postupně: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_INFLATION                                    :{LTBLUE}Inflace: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Vozit zboží do stanice jen když je poptávka: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SELECTGOODS                                  :{LTBLUE}Dodávat 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_RAW_INDUSTRY_CONSTRUCTION_METHOD             :{LTBLUE}Způsob manuálního budování primárního průmyslu: {ORANGE}{STRING}
@@ -1113,7 +1113,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Nejednolité stanice: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Pro simulaci těžkých vlaků vynásobit hmotnost nákladu: {ORANGE}{STRING}x
 STR_CONFIG_PATCHES_PLANE_SPEED                                  :{LTBLUE}Činitel rychlosti letadel: {ORANGE}1/{STRING}
-STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Povolit průjezdné zastávky na silnicích vlastněných obcemi: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Stavba průjezdných zastávek na obecních silnicích: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADJACENT_STATIONS                            :{LTBLUE}Povolit stavění přilehlých stanic: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_DYNAMIC_ENGINES                              :{LTBLUE}Více grafických setů s vozidly vedle sebe: {ORANGE}{STRING}
 
@@ -1126,7 +1126,7 @@
 STR_CONFIG_PATCHES_ORDER_REVIEW_ON                              :ano, u všech vozidel
 STR_CONFIG_PATCHES_WARN_INCOME_LESS                             :{LTBLUE}Varovat, pokud vlak prodělává: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES                        :{LTBLUE}Vozidlům se nikdy nezastaví výroba ('nezastarají'): {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AUTORENEW_VEHICLE                            :{LTBLUE}Automaticky obnovit dopravní prostředek, když je starý
+STR_CONFIG_PATCHES_AUTORENEW_VEHICLE                            :{LTBLUE}Automaticky nahradit dopravní prostředek, když zestárne
 STR_CONFIG_PATCHES_AUTORENEW_MONTHS                             :{LTBLUE}Obnovit vozidlo {ORANGE}{STRING}{LTBLUE} měsíců před / po dosažení maximálního stáří
 STR_CONFIG_PATCHES_AUTORENEW_MONEY                              :{LTBLUE}Minimální částka pro automatické obnovení: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ERRMSG_DURATION                              :{LTBLUE}Doba zobrazení chybové zprávy: {ORANGE}{STRING}
@@ -1219,7 +1219,7 @@
 STR_CONFIG_PATCHES_WAGONSPEEDLIMITS                             :{LTBLUE}Zapnout omezení rychlosti vagonů: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_DISABLE_ELRAILS                              :{LTBLUE}Vypnout elektrickou železnici: {ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_COLORED_NEWS_YEAR                            :{LTBLUE}Barevné noviny se objeví: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_COLORED_NEWS_YEAR                            :{LTBLUE}Barevné noviny se objeví v roce: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_STARTING_YEAR                                :{LTBLUE}Počáteční datum: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ENDING_YEAR                                  :{LTBLUE}Ukončit hru v roce: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SMOOTH_ECONOMY                               :{LTBLUE}Plynulé změny ekonomiky (více menších změn)
@@ -1229,7 +1229,7 @@
 STR_CONFIG_PATCHES_ENABLE_SIGNAL_GUI                            :{LTBLUE}Okno pro stavbu signálů: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}Vzor "žádné silnice" se neuplatňuje v editoru scénářů
-STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Vyber vzor městských silnic: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT                                  :{LTBLUE}Vzor městských silnic: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS                         :žádné silnice
 STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT                          :původní
 STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS                     :lepší silnice
@@ -1249,9 +1249,9 @@
 STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL                           :normální
 STR_CONFIG_PATCHES_TOWN_GROWTH_FAST                             :rychlá
 STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST                        :velmi rychlá
-STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Podíl měst, které budou růst dvakrát tak rychle: {ORANGE}1 z {STRING}
-STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Podíl měst, které budou růst dvakrát tak rychle: {ORANGE}žádné
-STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Násobitel původní velikosti města: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LARGER_TOWNS                                 :{LTBLUE}Podíl měst, ze kterých se stanou velkoměsta: {ORANGE}1 z {STRING}
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED                        :{LTBLUE}Podíl měst, ze kterých se stanou velkoměsta: {ORANGE}žádné
+STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER                         :{LTBLUE}Činitel základní velikosti města: {ORANGE}{STRING}
 STR_CONFIG_MODIFIED_ROAD_REBUILD                                :{LTBLUE}Odstraňovat nesmyslné prvky vozovky při výstavbě silnic
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}Ovládaní
@@ -1349,6 +1349,9 @@
 STR_BUILD_LOCKS_TIP                                             :{BLACK}Stavět zdymadlo
 STR_LANDINFO_LOCK                                               :Zdymadlo
 
+STR_CANT_PLACE_RIVERS                                           :{WHITE}Zde nelze vytvořit řeku...
+STR_LANDINFO_RIVER                                              :Řeka
+
 STR_BUOY_IS_IN_USE                                              :{WHITE}... bójka je používána!
 
 STR_LANDINFO_COORDS                                             :{BLACK}Souřadnice: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
@@ -2001,6 +2004,7 @@
 STR_3804_WATER                                                  :Voda
 STR_3805_COAST_OR_RIVERBANK                                     :Pobřeží nebo břeh
 STR_3806_SHIP_DEPOT                                             :Lodní depo
+STR_AQUEDUCT                                                    :Akvadukt
 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
 
@@ -2726,14 +2730,17 @@
 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}
+STR_ORDER_NON_STOP                                              :{BLACK}Jet bez zastavení
 STR_ORDER_GO_TO                                                 :Jet do
 STR_ORDER_GO_NON_STOP_TO                                        :Jet bez zastavení do
 STR_ORDER_GO_VIA                                                :Jet přes
 STR_ORDER_GO_NON_STOP_VIA                                       :Jet bez zastavení přes
+STR_ORDER_TOGGLE_FULL_LOAD                                      :{BLACK}Plně naložit čímkoli
 STR_ORDER_DROP_LOAD_IF_POSSIBLE                                 :Pokud možno naložit
 STR_ORDER_DROP_FULL_LOAD_ALL                                    :Plně naložit vším
 STR_ORDER_DROP_FULL_LOAD_ANY                                    :Plně naložit čímkoli
 STR_ORDER_DROP_NO_LOADING                                       :Nenakládat
+STR_ORDER_TOGGLE_UNLOAD                                         :{BLACK}Vyložit vše
 STR_ORDER_DROP_UNLOAD_IF_ACCEPTED                               :Vyložit vyžadovaný náklad
 STR_ORDER_DROP_UNLOAD                                           :Vyložit vše
 STR_ORDER_DROP_TRANSFER                                         :Přeložit
@@ -3014,8 +3021,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Vyber typ nákladu, který má vozidlo převážet
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Stavba přístavu
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Stavba přístavu
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Zde nelze postavit přístav...
 STR_9803_SHIP_DEPOT                                             :{WHITE}Lodní depo {TOWN}
 STR_9804_NEW_SHIPS                                              :{BLACK}Nové lodě
@@ -3068,6 +3073,8 @@
 STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Obyvatelé oslavují...{}První loď přistála v {STATION}!
 STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}Umístit bójku, kterou lze použít jako navigační bod
 STR_9835_CAN_T_POSITION_BUOY_HERE                               :{WHITE}Zde nelze umístit bójku...
+STR_BUILD_AQUEDUCT                                              :{BLACK}Postavit akvadukt
+STR_CAN_T_BUILD_AQUEDUCT_HERE                                   :{WHITE}Tady není možné postavit akvadukt...
 STR_9836_RENAME                                                 :{BLACK}Přejmenovat
 STR_9837_RENAME_SHIP_TYPE                                       :{BLACK}Přejmenovat typ lodi
 STR_9838_RENAME_SHIP_TYPE                                       :{WHITE}Přejmenovat typ lodi
--- a/src/lang/danish.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/danish.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2945,8 +2945,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Vælg lasttype som lastbilen skal transportere
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Havnekonstruktion
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Havnekonstruktion
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Kan ikke bygge en havn her...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} skibsdok
 STR_9804_NEW_SHIPS                                              :{BLACK}Nye skibe
--- a/src/lang/dutch.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/dutch.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -1291,6 +1291,9 @@
 STR_BUILD_LOCKS_TIP                                             :{BLACK}Bouw sluis
 STR_LANDINFO_LOCK                                               :Sluis
 
+STR_CANT_PLACE_RIVERS                                           :{WHITE}Kan hier geen rivier plaatsen...
+STR_LANDINFO_RIVER                                              :Rivier
+
 STR_BUOY_IS_IN_USE                                              :{WHITE}... boei is in gebruik!
 
 STR_LANDINFO_COORDS                                             :{BLACK}Coördinaten: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
@@ -1943,6 +1946,7 @@
 STR_3804_WATER                                                  :Water
 STR_3805_COAST_OR_RIVERBANK                                     :Kust of rivierbed
 STR_3806_SHIP_DEPOT                                             :Scheepswerf
+STR_AQUEDUCT                                                    :Aquaduct
 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
 
@@ -2662,14 +2666,17 @@
 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}
+STR_ORDER_NON_STOP                                              :{BLACK}Non-stop
 STR_ORDER_GO_TO                                                 :Ga naar
 STR_ORDER_GO_NON_STOP_TO                                        :Ga non-stop naar
 STR_ORDER_GO_VIA                                                :Ga via
 STR_ORDER_GO_NON_STOP_VIA                                       :Ga non-stop via
+STR_ORDER_TOGGLE_FULL_LOAD                                      :{BLACK}Alle vracht vol laden
 STR_ORDER_DROP_LOAD_IF_POSSIBLE                                 :Laden wanneer beschikbaar
 STR_ORDER_DROP_FULL_LOAD_ALL                                    :Volledig laden
 STR_ORDER_DROP_FULL_LOAD_ANY                                    :Volledig en stoort vracht laden
 STR_ORDER_DROP_NO_LOADING                                       :Niet laden
+STR_ORDER_TOGGLE_UNLOAD                                         :{BLACK}Alles lossen
 STR_ORDER_DROP_UNLOAD_IF_ACCEPTED                               :Ontladen wanneeer geaccepteerd
 STR_ORDER_DROP_UNLOAD                                           :Alles ontladen
 STR_ORDER_DROP_TRANSFER                                         :Transfer
@@ -2950,8 +2957,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Selecteer welk type vracht het wagen moet vervoeren
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Havenbouw
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Havenbouw
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Kan hier geen haven bouwen...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Scheepswerf
 STR_9804_NEW_SHIPS                                              :{BLACK}Nieuwe schepen
@@ -3004,6 +3009,8 @@
 STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Inwoners feesten...{}Eerste schip arriveert in {STATION}!
 STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}Plaats boei, kan gebruikt worden voor extra tussenstops
 STR_9835_CAN_T_POSITION_BUOY_HERE                               :{WHITE}Kan boei hier niet plaatsen...
+STR_BUILD_AQUEDUCT                                              :{BLACK}Bouw aquaduct
+STR_CAN_T_BUILD_AQUEDUCT_HERE                                   :{WHITE}Kan hier geen aquaduct bouwen...
 STR_9836_RENAME                                                 :{BLACK}Hernoem
 STR_9837_RENAME_SHIP_TYPE                                       :{BLACK}Hernoem schiptype
 STR_9838_RENAME_SHIP_TYPE                                       :{WHITE}Hernoem schiptype
@@ -3156,6 +3163,7 @@
 STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER                            :{STRING} heeft OpenTTD versie {STRING} of beter nodig.
 STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE                          :het GRF bestand is bedoelt voor het vertalen van
 STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED                        :Er zijn teveel NewGRFs geladen.
+STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC                       :Laden {STRING} als statisch NewGRF met {STRING} kan desyncs veroorzaken.
 
 STR_NEWGRF_ADD                                                  :{BLACK}Toevoegen
 STR_NEWGRF_ADD_TIP                                              :{BLACK}Voeg een NewGRF bestand toe aan te lijst
--- a/src/lang/english.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/english.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2959,8 +2959,9 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Select type of cargo for road vehicle to carry
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Dock construction
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Dock construction
+STR_9800_WATERWAYS_CONSTRUCTION                                 :Waterways construction
+STR_9801_WATERWAYS_CONSTRUCTION                                 :{WHITE}Waterways construction
+STR_9801_WATERWAYS_CONSTRUCTION_SE                              :{WHITE}Waterways
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Can't build dock here...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Ship Depot
 STR_9804_NEW_SHIPS                                              :{BLACK}New Ships
--- a/src/lang/english_US.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/english_US.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2834,8 +2834,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Select type of cargo for road vehicle to carry
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Dock construction
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Dock construction
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Can't build dock here...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Ship Depot
 STR_9804_NEW_SHIPS                                              :{BLACK}New Ships
--- a/src/lang/esperanto.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/esperanto.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2670,8 +2670,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Elektu portotan ŝarĝon de la vojveturilo
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Havenkonstruado
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Havenkonstruado
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Ne povas konstrui havenon ĉi tie...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Ŝipdeponejo
 STR_9804_NEW_SHIPS                                              :{BLACK}Novaj Ŝipoj
--- a/src/lang/estonian.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/estonian.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -3034,8 +3034,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Vali, millist tüüpi laadungit veovahend veab
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Sadamate ehitamine
-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} Laevaangaar
 STR_9804_NEW_SHIPS                                              :{BLACK}Uus laev
--- a/src/lang/finnish.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/finnish.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2821,8 +2821,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Valitse ajoneuvolla ajettava rahti
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Sataman rakentaminen
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Sataman rakentaminen
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Satamaa ei voi rakentaa tähän...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN}, telakka
 STR_9804_NEW_SHIPS                                              :{BLACK}Uusia laivoja
--- a/src/lang/french.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/french.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -1292,6 +1292,9 @@
 STR_BUILD_LOCKS_TIP                                             :{BLACK}Construire des écluses
 STR_LANDINFO_LOCK                                               :Ecluse
 
+STR_CANT_PLACE_RIVERS                                           :{WHITE}Impossible de construire une rivière ici...
+STR_LANDINFO_RIVER                                              :Rivière
+
 STR_BUOY_IS_IN_USE                                              :{WHITE}... bouée utilisée !
 
 STR_LANDINFO_COORDS                                             :{BLACK}Coordonnées: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
@@ -1944,6 +1947,7 @@
 STR_3804_WATER                                                  :Eau
 STR_3805_COAST_OR_RIVERBANK                                     :Rivage ou berge
 STR_3806_SHIP_DEPOT                                             :Dépôt naval
+STR_AQUEDUCT                                                    :Aqueduc
 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
 
@@ -2663,14 +2667,17 @@
 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}
+STR_ORDER_NON_STOP                                              :{BLACK}Sans arrêt
 STR_ORDER_GO_TO                                                 :Aller à
 STR_ORDER_GO_NON_STOP_TO                                        :Aller sans arrêt à
 STR_ORDER_GO_VIA                                                :Passer par
 STR_ORDER_GO_NON_STOP_VIA                                       :Passer sans arrêt par
+STR_ORDER_TOGGLE_FULL_LOAD                                      :{BLACK}Chargement complet par un seul type
 STR_ORDER_DROP_LOAD_IF_POSSIBLE                                 :Charger si possible
 STR_ORDER_DROP_FULL_LOAD_ALL                                    :Chargement complet
 STR_ORDER_DROP_FULL_LOAD_ANY                                    :Chargement complet par un seul type
 STR_ORDER_DROP_NO_LOADING                                       :Pas de chargement
+STR_ORDER_TOGGLE_UNLOAD                                         :{BLACK}Décharger tout
 STR_ORDER_DROP_UNLOAD_IF_ACCEPTED                               :Décharger si accepté
 STR_ORDER_DROP_UNLOAD                                           :Décharger tout
 STR_ORDER_DROP_TRANSFER                                         :Transférer
@@ -2951,8 +2958,9 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Choisir le type de cargaison à transporter
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Construction Portuaire
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Construction Portuaire
+STR_9800_WATERWAYS_CONSTRUCTION                                 :Construction de voies navigables
+STR_9801_WATERWAYS_CONSTRUCTION                                 :{WHITE}Construction de voies navigables
+STR_9801_WATERWAYS_CONSTRUCTION_SE                              :{WHITE}Voies navigables
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Impossible de construire port ici...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Dépôt naval
 STR_9804_NEW_SHIPS                                              :{BLACK}Nouveaux navires
@@ -3005,6 +3013,8 @@
 STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Les habitants célèbrent {}l'arrivée du premier navire à {STATION}!
 STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}Placer une bouée, peut servir de guide aux navires
 STR_9835_CAN_T_POSITION_BUOY_HERE                               :{WHITE}Impossible de placer une bouée ici...
+STR_BUILD_AQUEDUCT                                              :{BLACK}Construire un aqueduc
+STR_CAN_T_BUILD_AQUEDUCT_HERE                                   :{WHITE}Impossible de construire un aqueduc ici...
 STR_9836_RENAME                                                 :{BLACK}Renommer
 STR_9837_RENAME_SHIP_TYPE                                       :{BLACK}Renommer type de navire
 STR_9838_RENAME_SHIP_TYPE                                       :{WHITE}Renommer type de navire
@@ -3157,6 +3167,7 @@
 STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER                            :{STRING} nécessite OpenTTD version {STRING} ou supérieur.
 STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE                          :le fichier GRF qu'il doit traduire
 STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED                        :Trop de NewGRFs sont chargés.
+STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC                       :Charger {STRING} comme NewGRF statique avec {STRING} peut provoquer des erreurs de synchronistation.
 
 STR_NEWGRF_ADD                                                  :{BLACK}Ajouter
 STR_NEWGRF_ADD_TIP                                              :{BLACK}Ajouter un fichier NewGRF à la liste
--- a/src/lang/galician.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/galician.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2607,8 +2607,6 @@
 STR_REFIT_ROAD_VEHICLE_CAN_T                                    :{WHITE}Non se pode repara-lo vehículo
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Construcción de Peiraos
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Construcción de Peiraos
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Non se pode construí-lo peirao aí...
 STR_9803_SHIP_DEPOT                                             :{WHITE}Depósito de Barcos de {TOWN}
 STR_9804_NEW_SHIPS                                              :{BLACK}Novos Barcos
--- a/src/lang/german.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/german.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2856,8 +2856,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Wählen Sie aus, welche Fracht das Straßenfahrzeug transportieren soll
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Hafenanlage bauen
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Hafenanlage bauen
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Hafen kann hier nicht gebaut werden...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Werft
 STR_9804_NEW_SHIPS                                              :{BLACK}Neue Schiffe
--- a/src/lang/hungarian.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/hungarian.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2970,8 +2970,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Válaszd ki a közúti jármű által szállítandó rakományt
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Kikötőépítés
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Kikötőépítés
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Nem építhetsz ide kikötőt...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN}i dokk
 STR_9804_NEW_SHIPS                                              :{BLACK}Új hajók
--- a/src/lang/icelandic.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/icelandic.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2943,8 +2943,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Veldu tegund farms sem bifreið mun flytja
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Hafnarframkvæmdir
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Hafnarframkvæmdir
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Get ekki byggt höfn hér...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Slippur
 STR_9804_NEW_SHIPS                                              :{BLACK}Ný skip
--- a/src/lang/italian.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/italian.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -1293,6 +1293,9 @@
 STR_BUILD_LOCKS_TIP                                             :{BLACK}Costruisci chiuse
 STR_LANDINFO_LOCK                                               :Chiuse
 
+STR_CANT_PLACE_RIVERS                                           :{WHITE}Impossibile creare un fiume qui...
+STR_LANDINFO_RIVER                                              :Fiume
+
 STR_BUOY_IS_IN_USE                                              :{WHITE}...la boa è in uso!
 
 STR_LANDINFO_COORDS                                             :{BLACK}Coordinate: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
@@ -1945,6 +1948,7 @@
 STR_3804_WATER                                                  :Acqua
 STR_3805_COAST_OR_RIVERBANK                                     :Costa
 STR_3806_SHIP_DEPOT                                             :Deposito navale
+STR_AQUEDUCT                                                    :Acquedotto
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...impossibile costruire sull'acqua
 STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Bisogna demolire il canale prima
 
@@ -2664,14 +2668,17 @@
 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}
+STR_ORDER_NON_STOP                                              :{BLACK}No-stop
 STR_ORDER_GO_TO                                                 :Vai a
 STR_ORDER_GO_NON_STOP_TO                                        :Vai no-stop a
 STR_ORDER_GO_VIA                                                :Passa per
 STR_ORDER_GO_NON_STOP_VIA                                       :Passa no-stop per
+STR_ORDER_TOGGLE_FULL_LOAD                                      :{BLACK}Attendi pieno carico
 STR_ORDER_DROP_LOAD_IF_POSSIBLE                                 :Carica se possibile
 STR_ORDER_DROP_FULL_LOAD_ALL                                    :Attendi pieno carico
 STR_ORDER_DROP_FULL_LOAD_ANY                                    :Attendi qualsiasi carico
 STR_ORDER_DROP_NO_LOADING                                       :Non caricare
+STR_ORDER_TOGGLE_UNLOAD                                         :{BLACK}Scarica tutto
 STR_ORDER_DROP_UNLOAD_IF_ACCEPTED                               :Scarica se accettato
 STR_ORDER_DROP_UNLOAD                                           :Scarica tutto
 STR_ORDER_DROP_TRANSFER                                         :Trasferisci
@@ -2952,8 +2959,9 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Selezionare il tipo di carico da far trasportare all'automezzo
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Costruzione moli
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Costruzione moli
+STR_9800_WATERWAYS_CONSTRUCTION                                 :Costruisci trasporti su acqua
+STR_9801_WATERWAYS_CONSTRUCTION                                 :{WHITE}Costr. trasporti su acqua
+STR_9801_WATERWAYS_CONSTRUCTION_SE                              :{WHITE}Trasporti su acqua
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Impossibile costruire il molo qui...
 STR_9803_SHIP_DEPOT                                             :{WHITE}Deposito navale di {TOWN}
 STR_9804_NEW_SHIPS                                              :{BLACK}Nuove navi
@@ -3006,6 +3014,8 @@
 STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}I cittadini festeggiano . . .{}La prima nave attracca a {STATION}!
 STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}Posiziona una boa che può essere usata come waypoint
 STR_9835_CAN_T_POSITION_BUOY_HERE                               :{WHITE}Impossibile posizionare una boa qui...
+STR_BUILD_AQUEDUCT                                              :{BLACK}Costruisci acquedotto
+STR_CAN_T_BUILD_AQUEDUCT_HERE                                   :{WHITE}Impossibile costruire un acquedotto qui...
 STR_9836_RENAME                                                 :{BLACK}Rinomina
 STR_9837_RENAME_SHIP_TYPE                                       :{BLACK}Rinomina il tipo di nave
 STR_9838_RENAME_SHIP_TYPE                                       :{WHITE}Rinomina tipo di nave
@@ -3158,6 +3168,7 @@
 STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER                            :{STRING} richiede OpenTTD versione {STRING} o superiore.
 STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE                          :il file GRF che era progettato per tradurre
 STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED                        :Troppi file NewGRF caricati.
+STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC                       :Caricare {STRING} come NewGRF statico insieme a {STRING} può causare errori di sincronizzazione
 
 STR_NEWGRF_ADD                                                  :{BLACK}Aggiungi
 STR_NEWGRF_ADD_TIP                                              :{BLACK}Aggiunge un file NewGRF all'elenco
--- a/src/lang/japanese.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/japanese.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2853,8 +2853,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}運送する貨物種類を選択します
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :埠頭の建設
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}埠頭の建設
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}ここに埠頭が建設できません...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN}造船所
 STR_9804_NEW_SHIPS                                              :{BLACK}新規船舶
--- a/src/lang/korean.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/korean.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2,7 +2,6 @@
 ##ownname 한국어
 ##isocode ko_KR
 ##plural 1
-##gender a b
 
 #
 
@@ -1047,7 +1046,7 @@
 STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}날짜를 일(日)단위까지 상세하게 표시 : {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SIGNALSIDE                                   :{LTBLUE}신호등을 통행 방식에 따라 다른 위치에 설치 : {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SHOWFINANCES                                 :{LTBLUE}연말에 재정 창을 띄움 : {ORANGE}{STRING}
-STR_CONFIG_PATCHES_NEW_NONSTOP                                  :{LTBLUE}TTD패치에 적합한 급행(논스톱) 처리 : {ORANGE}{STRING}
+STR_CONFIG_PATCHES_NEW_NONSTOP                                  :{LTBLUE}TTD패치에 적합한 직통(논스톱) 처리 : {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ROADVEH_QUEUE                                :{LTBLUE}(획기적 방법으로) 자동차를 대기하게 하기 : {ORANGE}{STRING}
 STR_CONFIG_PATCHES_AUTOSCROLL                                   :{LTBLUE}가장자리에 마우스를 가져가면 화면을 움직이게 하기 : {ORANGE}{STRING}
 STR_CONFIG_PATCHES_BRIBE                                        :{LTBLUE}지역 당국에 뇌물을 주는 행위 허용 : {ORANGE}{STRING}
@@ -1292,6 +1291,9 @@
 STR_BUILD_LOCKS_TIP                                             :{BLACK}갑문 짓기
 STR_LANDINFO_LOCK                                               :갑문
 
+STR_CANT_PLACE_RIVERS                                           :{WHITE}여기에 강을 만들 수 없습니다...
+STR_LANDINFO_RIVER                                              :강
+
 STR_BUOY_IS_IN_USE                                              :{WHITE}...사용중인 부이입니다!
 
 STR_LANDINFO_COORDS                                             :{BLACK}좌표: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
@@ -1944,6 +1946,7 @@
 STR_3804_WATER                                                  :물
 STR_3805_COAST_OR_RIVERBANK                                     :해안 또는 강기슭
 STR_3806_SHIP_DEPOT                                             :정박소
+STR_AQUEDUCT                                                    :수도교
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...물 위에 지을 수 없습니다
 STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}운하를 먼저 제거하십시오
 
@@ -2663,28 +2666,31 @@
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}중간에 기차가 있습니다
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
+STR_ORDER_NON_STOP                                              :{BLACK}통과 설정
 STR_ORDER_GO_TO                                                 :[운행]
-STR_ORDER_GO_NON_STOP_TO                                        :급행
+STR_ORDER_GO_NON_STOP_TO                                        :직통
 STR_ORDER_GO_VIA                                                :경유
 STR_ORDER_GO_NON_STOP_VIA                                       :직통 경유
+STR_ORDER_TOGGLE_FULL_LOAD                                      :{BLACK}적재 옵션
 STR_ORDER_DROP_LOAD_IF_POSSIBLE                                 :적재 옵션
 STR_ORDER_DROP_FULL_LOAD_ALL                                    :모든 화물을 가득 실음
-STR_ORDER_DROP_FULL_LOAD_ANY                                    :종류에 상관 없이 화물을 가득 실음
+STR_ORDER_DROP_FULL_LOAD_ANY                                    :화물 하나만 가득 실음
 STR_ORDER_DROP_NO_LOADING                                       :싣지 않기
+STR_ORDER_TOGGLE_UNLOAD                                         :{BLACK}하차 옵션
 STR_ORDER_DROP_UNLOAD_IF_ACCEPTED                               :하차 옵션
 STR_ORDER_DROP_UNLOAD                                           :모든 화물 하차
 STR_ORDER_DROP_TRANSFER                                         :환승
 STR_ORDER_DROP_NO_UNLOADING                                     :화물 하차 않음
 STR_ORDER_FULL_LOAD                                             :(가득 실음)
-STR_ORDER_FULL_LOAD_ANY                                         :(종류에 상관 없이 모든 화물 적재)
+STR_ORDER_FULL_LOAD_ANY                                         :(화물 하나만 가득 실음)
 STR_ORDER_NO_LOAD                                               :(싣지 않기)
 STR_ORDER_UNLOAD                                                :(화물 하차 후 적재)
 STR_ORDER_UNLOAD_FULL_LOAD                                      :(화물 하차 후 모든 화물을 싣고 출발)
-STR_ORDER_UNLOAD_FULL_LOAD_ANY                                  :(화물 하차 후 종류에 상관없이 모든 화물 적재)
+STR_ORDER_UNLOAD_FULL_LOAD_ANY                                  :(화물 하차 후 화물 하나만 가득 실음)
 STR_ORDER_UNLOAD_NO_LOAD                                        :(화물 하차 후 빈 차로 출발)
 STR_ORDER_TRANSFER                                              :(환승 후 화물 받음)
 STR_ORDER_TRANSFER_FULL_LOAD                                    :(환승 후 모든 화물 적재)
-STR_ORDER_TRANSFER_FULL_LOAD_ANY                                :(환승 후 종류에 상관없이 모든 화물 적재)
+STR_ORDER_TRANSFER_FULL_LOAD_ANY                                :(환승 후 화물 하나만 가득 실음)
 STR_ORDER_TRANSFER_NO_LOAD                                      :(환승 후 빈 차로 출발)
 STR_ORDER_NO_UNLOAD                                             :(내리지 않고 화물을 받음)
 STR_ORDER_NO_UNLOAD_FULL_LOAD                                   :(내리지 않고 가득 찰 때까지 기다림)
@@ -2700,7 +2706,7 @@
 STR_ORDER_NEAREST_DEPOT                                         :가까운
 STR_ORDER_NEAREST_HANGAR                                        :가까운 격납고
 STR_ORDER_SERVICE_AT                                            :[점검]
-STR_ORDER_SERVICE_NON_STOP_AT                                   :[점검, 급행]
+STR_ORDER_SERVICE_NON_STOP_AT                                   :[점검, 직통]
 STR_ORDER_TRAIN_DEPOT                                           :차량기지
 STR_ORDER_ROAD_DEPOT                                            :차고
 STR_ORDER_SHIP_DEPOT                                            :정박소
@@ -2951,8 +2957,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}자동차가 수송할 화물의 종류를 선택하십시오.
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :항만 건설
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}항만 건설
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}여기에 항구를 건설할 수 없습니다...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} 정박소
 STR_9804_NEW_SHIPS                                              :{BLACK}새 선박
@@ -3005,6 +3009,8 @@
 STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}첫 선박이 {STATION}에 도착했습니다!{}시민들이 환호하고 있습니다!
 STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}웨이포인트로 사용할 부이를 설치합니다.
 STR_9835_CAN_T_POSITION_BUOY_HERE                               :{WHITE}여기에 부이를 설치할 수 없습니다...
+STR_BUILD_AQUEDUCT                                              :{BLACK}수도교 짓기
+STR_CAN_T_BUILD_AQUEDUCT_HERE                                   :{WHITE}여기에 수도교를 지을 수 없습니다...
 STR_9836_RENAME                                                 :{BLACK}이름 지정
 STR_9837_RENAME_SHIP_TYPE                                       :{BLACK}선박 타입의 이름 지정
 STR_9838_RENAME_SHIP_TYPE                                       :{WHITE}선박 타입의 이름 지정
--- a/src/lang/lithuanian.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/lithuanian.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2678,8 +2678,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Nurodykite šios transporto priemonės pervežamą krovinių tipą
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Doku konstrukcija
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Doku konstrukcija
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Neimanoma pastatyti uosto cia...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Laivu depas
 STR_9804_NEW_SHIPS                                              :{BLACK}Naujas laivas
--- a/src/lang/norwegian_bokmal.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/norwegian_bokmal.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2837,8 +2837,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Velg en type varer som kjøretøyet skal lastes med
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Bygg havn
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Bygg havn
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Kan ikke bygge havn her...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} skipsdepot
 STR_9804_NEW_SHIPS                                              :{BLACK}Nye skip
--- a/src/lang/norwegian_nynorsk.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/norwegian_nynorsk.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2835,8 +2835,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Vel ein type varer som køyretøyet skal lastast med
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Bygg hamn
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Bygg hamn
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Kan ikkje byggje hamn her...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} skipsdepot
 STR_9804_NEW_SHIPS                                              :{BLACK}Nye skip
--- a/src/lang/piglatin.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/piglatin.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2826,8 +2826,6 @@
 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
--- a/src/lang/polish.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/polish.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2964,8 +2964,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Wybierz ładunek jaki ma przewozić ten samochód
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Konstrukcje portowe
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Konstrukcje portowe
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Nie można tutaj wybudować portu...
 STR_9803_SHIP_DEPOT                                             :{WHITE}Stocznia w {TOWN}
 STR_9804_NEW_SHIPS                                              :{BLACK}Nowe statki
--- a/src/lang/portuguese.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/portuguese.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2864,8 +2864,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Seleccione o tipo de carga para o veículo
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Construir docas
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Construir docas
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Não é possível construir doca aqui...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Depósito Naval
 STR_9804_NEW_SHIPS                                              :{BLACK}Novos Barcos
--- a/src/lang/romanian.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/romanian.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2935,8 +2935,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Alege tipul de marfă pe care o transportă autovehiculul
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Construcţie port
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Construcţie port
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Nu pot construi port aici...
 STR_9803_SHIP_DEPOT                                             :{WHITE}Şantierul Naval {TOWN}
 STR_9804_NEW_SHIPS                                              :{BLACK}Nave noi
--- a/src/lang/russian.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/russian.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -1293,6 +1293,9 @@
 STR_BUILD_LOCKS_TIP                                             :{BLACK}Построить шлюзы
 STR_LANDINFO_LOCK                                               :Шлюз
 
+STR_CANT_PLACE_RIVERS                                           :{WHITE}Не возможно расположить реку здесь...
+STR_LANDINFO_RIVER                                              :Река
+
 STR_BUOY_IS_IN_USE                                              :{WHITE}...этот буй используется!
 
 STR_LANDINFO_COORDS                                             :{BLACK}Координаты: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
@@ -1945,6 +1948,7 @@
 STR_3804_WATER                                                  :Вода
 STR_3805_COAST_OR_RIVERBANK                                     :Морской или речной берег
 STR_3806_SHIP_DEPOT                                             :Верфь
+STR_AQUEDUCT                                                    :Акведук
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...Невозможно построить на воде
 STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Сначала надо уничтожить канал
 
@@ -2675,14 +2679,17 @@
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Поезд мешает
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
+STR_ORDER_NON_STOP                                              :{BLACK}Без остановки
 STR_ORDER_GO_TO                                                 :Идти на
 STR_ORDER_GO_NON_STOP_TO                                        :Идти без остановки на
 STR_ORDER_GO_VIA                                                :Идти через
 STR_ORDER_GO_NON_STOP_VIA                                       :Идти без остановки через
+STR_ORDER_TOGGLE_FULL_LOAD                                      :{BLACK}Полн. загр. любым грузом
 STR_ORDER_DROP_LOAD_IF_POSSIBLE                                 :Погрузить если доступно
 STR_ORDER_DROP_FULL_LOAD_ALL                                    :Полная загрузка всего груза
 STR_ORDER_DROP_FULL_LOAD_ANY                                    :Полная загрузка любым грузом
 STR_ORDER_DROP_NO_LOADING                                       :Не грузиться
+STR_ORDER_TOGGLE_UNLOAD                                         :{BLACK}Выгрузить все
 STR_ORDER_DROP_UNLOAD_IF_ACCEPTED                               :Разгузиться если груз принимается
 STR_ORDER_DROP_UNLOAD                                           :Выгрузить все
 STR_ORDER_DROP_TRANSFER                                         :Передать
@@ -2963,8 +2970,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Выберите тип грузов для перевозки
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Морские коммуникации
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Морские коммуникации
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Невозможно построить пристань здесь...
 STR_9803_SHIP_DEPOT                                             :{WHITE}Док {TOWN}
 STR_9804_NEW_SHIPS                                              :{BLACK}Новое судно
@@ -3017,6 +3022,8 @@
 STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Жители празднуют!{}Первый корабль причалил к {STATION}!
 STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}Буй помогает в навигации, если дистанция большая, исользуйте его как точку маршрута
 STR_9835_CAN_T_POSITION_BUOY_HERE                               :{WHITE}Не могу построить буй здесь...
+STR_BUILD_AQUEDUCT                                              :{BLACK}Построить акведук
+STR_CAN_T_BUILD_AQUEDUCT_HERE                                   :{WHITE}Не могу построить акведук здесь...
 STR_9836_RENAME                                                 :{BLACK}Переимен.
 STR_9837_RENAME_SHIP_TYPE                                       :{BLACK}Переименовать
 STR_9838_RENAME_SHIP_TYPE                                       :{WHITE}Переименовать
@@ -3169,6 +3176,7 @@
 STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER                            :{STRING} требует OpenTTD версии {STRING} или выше.
 STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE                          :файл GRF, который им переводится.
 STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED                        :Слишком много загружено новой графики
+STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC                       :Загрузка {STRING} в качестве статического NewGRF с {STRING} Может вызвать ошибку синхронизации.
 
 STR_NEWGRF_ADD                                                  :{BLACK}Добавить
 STR_NEWGRF_ADD_TIP                                              :{BLACK}Добавить файл NewGRF в список
--- a/src/lang/simplified_chinese.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/simplified_chinese.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2689,8 +2689,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}选择要运输的货物类型:
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :新建码头
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}新建码头
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}不能在这里新建码头……
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} 船坞
 STR_9804_NEW_SHIPS                                              :{BLACK}购买船只
--- a/src/lang/slovak.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/slovak.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2937,8 +2937,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Vyberte požadovaný typ nákladu pre cestné vozidlo
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Stavba pristavu
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Stavba pristavu
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Tu nemozno postavit pristav ...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Lodenica
 STR_9804_NEW_SHIPS                                              :{BLACK}Nove lode
--- a/src/lang/slovenian.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/slovenian.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -528,6 +528,9 @@
 STR_01A5_COST_TO_CLEAR                                          :{BLACK}Cena za čiščenje: {LTBLUE}{CURRENCY}
 STR_01A6_N_A                                                    :Ni na voljo
 STR_01A7_OWNER                                                  :{BLACK}Lastnik: {LTBLUE}{STRING}
+STR_ROAD_OWNER                                                  :{BLACK}Lastnik ceste: {LTBLUE}{STRING}
+STR_TRAM_OWNER                                                  :{BLACK}Lastnik tramvaj proge: {LTBLUE}{STRING}
+STR_RAIL_OWNER                                                  :{BLACK}Lastnik železnice: {LTBLUE}{STRING}
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}Lokalna oblast: {LTBLUE}{STRING}
 STR_01A9_NONE                                                   :Brez
 STR_01AA_NAME                                                   :{BLACK}Ime
@@ -1096,6 +1099,7 @@
 STR_CONFIG_PATCHES_PLANE_SPEED                                  :{LTBLUE}Faktor hitrosti letal: {ORANGE}1 / {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_DYNAMIC_ENGINES                              :{LTBLUE}Omogoči večkratni set NewGRF pogona: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Vedno dovoli majhna letališča: {ORANGE}{STRING}
 
@@ -1329,6 +1333,9 @@
 STR_BUILD_LOCKS_TIP                                             :{BLACK}Gradnja zapornic
 STR_LANDINFO_LOCK                                               :Zapornica
 
+STR_CANT_PLACE_RIVERS                                           :{WHITE}Ni mogoča postavitev rek tukaj...
+STR_LANDINFO_RIVER                                              :reka
+
 STR_BUOY_IS_IN_USE                                              :{WHITE} ... boja v uporabi!
 
 STR_LANDINFO_COORDS                                             :{BLACK}Koordinate: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
@@ -1755,6 +1762,7 @@
 STR_1816_TREE_LINED_ROAD                                        :Drevored
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Garaža
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Cestno/železniško križišče
+STR_TRAMWAY                                                     :tramvaj
 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...
@@ -1981,6 +1989,7 @@
 STR_3804_WATER                                                  :Voda
 STR_3805_COAST_OR_RIVERBANK                                     :Obala ali nabrežje
 STR_3806_SHIP_DEPOT                                             :Ladjedelnica
+STR_AQUEDUCT                                                    :vodovod
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE} ... Nemogoča gradnja na vodi
 STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Najprej moraš porušiti kanal
 
@@ -2737,14 +2746,17 @@
 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}
+STR_ORDER_NON_STOP                                              :{BLACK}Non-stop
 STR_ORDER_GO_TO                                                 :Pojdi do
 STR_ORDER_GO_NON_STOP_TO                                        :Pojdi non-stop do
 STR_ORDER_GO_VIA                                                :Pojdi preko
 STR_ORDER_GO_NON_STOP_VIA                                       :Pojdi non-stop preko
+STR_ORDER_TOGGLE_FULL_LOAD                                      :{BLACK}Napolni vse vrste tovora
 STR_ORDER_DROP_LOAD_IF_POSSIBLE                                 :Napolni, če je na voljo
 STR_ORDER_DROP_FULL_LOAD_ALL                                    :Napolni ves tovor
 STR_ORDER_DROP_FULL_LOAD_ANY                                    :Napolni kakršenkoli tovor
 STR_ORDER_DROP_NO_LOADING                                       :Brez polnjenja
+STR_ORDER_TOGGLE_UNLOAD                                         :{BLACK}Razloži vse
 STR_ORDER_DROP_UNLOAD_IF_ACCEPTED                               :Razloži, če je sprejeto
 STR_ORDER_DROP_UNLOAD                                           :Razloži vse
 STR_ORDER_DROP_TRANSFER                                         :Pretovori
@@ -2768,6 +2780,7 @@
 STR_ORDER_TOOLTIP_UNLOAD                                        :{BLACK}Spremeni način praznjenja označenega ukaza
 STR_GO_TO_STATION                                               :{STRING} {STATION} {STRING}
 
+STR_ORDER_GO_TO_DROPDOWN_TOOLTIP                                :{BLACK}Vstavi napreden ukaz
 STR_ORDER_GO_TO_NEAREST_DEPOT                                   :Pojdi v najbližjo garažo
 STR_ORDER_GO_TO_NEAREST_HANGAR                                  :Pojdi v najbližji hangar
 STR_ORDER_NEAREST_DEPOT                                         :najbližjo
@@ -3024,8 +3037,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Izberi tip tovora, ki ga bo vozilo prevažalo
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Gradnja pomola
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Gradnja pomola
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Ni mogoče zgraditi pomola tukaj ...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Ladijska garaža
 STR_9804_NEW_SHIPS                                              :{BLACK}Nove ladje
@@ -3078,6 +3089,8 @@
 STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Prebivalci praznujejo . . .{}Prva ladja prispela na postajo {STATION}!
 STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}Postavi bojo, ki je lahko uporabljena kot točka poti
 STR_9835_CAN_T_POSITION_BUOY_HERE                               :{WHITE}Ni mogoče postaviti boje tukaj ...
+STR_BUILD_AQUEDUCT                                              :{BLACK}Gradnja vodovoda
+STR_CAN_T_BUILD_AQUEDUCT_HERE                                   :{WHITE}Ni mogoča gradnja vodovoda tukaj...
 STR_9836_RENAME                                                 :{BLACK}Preimenuj
 STR_9837_RENAME_SHIP_TYPE                                       :{BLACK}Preimenuj ladjo
 STR_9838_RENAME_SHIP_TYPE                                       :{WHITE}Preimenuj ladjo
@@ -3261,6 +3274,8 @@
 STR_NEWGRF_UNPAUSE_WARNING_TITLE                                :{YELLOW}Manjkajoče GRF datoteke
 STR_NEWGRF_UNPAUSE_WARNING                                      :{WHITE}Izklop pavze lahko sesuje OpenTTD. Ne poročaj o napaki zaradi takih problemov.{}Zagotovo želiš izklopiti pavzo?
 
+STR_LOADGAME_REMOVED_TRAMS                                      :{WHITE}Igra je bila shranjena brez podpore za tramvaj. Vsi tramvaji so bili odstranjeni.
+
 STR_CURRENCY_WINDOW                                             :{WHITE}Valuta po meri
 STR_CURRENCY_EXCHANGE_RATE                                      :{LTBLUE}Menjalni tečaj: {ORANGE}{CURRENCY} = £ {COMMA}
 STR_CURRENCY_SEPARATOR                                          :{LTBLUE}Ločitev:
@@ -3625,3 +3640,9 @@
 STR_OSK_KEYBOARD_LAYOUT                                         :`1234567890-=\qwertyuiop[]asdfghjkl;'  zxcvbnm,./ .
 STR_OSK_KEYBOARD_LAYOUT_CAPS                                    :~!@#$%^&*()_+|QWERTYUIOP{{}}ASDFGHJKL:"  ZXCVBNM<>? .
 ########
+
+############ town controlled noise level
+STR_CONFIG_PATCHES_NOISE_LEVEL                                  :{LTBLUE}Omogoči mestni nadzor hrupa za letališča: {ORANGE}{STRING}
+STR_NOISE_IN_TOWN                                               :{BLACK}Meja hrupa v mestu: {ORANGE}{COMMA}{BLACK}  max: {ORANGE}{COMMA}
+STR_STATION_NOISE                                               :{BLACK}Efektivni hrup: {GOLD}{COMMA}
+########
--- a/src/lang/spanish.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/spanish.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -1292,6 +1292,9 @@
 STR_BUILD_LOCKS_TIP                                             :{BLACK}Constuir dársenas
 STR_LANDINFO_LOCK                                               :Dársena
 
+STR_CANT_PLACE_RIVERS                                           :{WHITE}No se pueden situar ríos aquí...
+STR_LANDINFO_RIVER                                              :Río
+
 STR_BUOY_IS_IN_USE                                              :{WHITE}...boya en uso!
 
 STR_LANDINFO_COORDS                                             :{BLACK}Coordenadas: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
@@ -1944,6 +1947,7 @@
 STR_3804_WATER                                                  :Agua
 STR_3805_COAST_OR_RIVERBANK                                     :Costa o rivera
 STR_3806_SHIP_DEPOT                                             :Astillero
+STR_AQUEDUCT                                                    :Acueducto
 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
 
@@ -2663,14 +2667,17 @@
 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}
+STR_ORDER_NON_STOP                                              :{BLACK}Sin paradas
 STR_ORDER_GO_TO                                                 :Ir a
 STR_ORDER_GO_NON_STOP_TO                                        :Ir sin paradas a
 STR_ORDER_GO_VIA                                                :Ir vía
 STR_ORDER_GO_NON_STOP_VIA                                       :Ir sin paradas vía
+STR_ORDER_TOGGLE_FULL_LOAD                                      :{BLACK}Carga completa de cualquier carga
 STR_ORDER_DROP_LOAD_IF_POSSIBLE                                 :Cargar si está disponible
 STR_ORDER_DROP_FULL_LOAD_ALL                                    :Carga completa de todas las cargas
 STR_ORDER_DROP_FULL_LOAD_ANY                                    :Carga completa de cualquier carga
 STR_ORDER_DROP_NO_LOADING                                       :Sin carga
+STR_ORDER_TOGGLE_UNLOAD                                         :{BLACK}Descargar todo
 STR_ORDER_DROP_UNLOAD_IF_ACCEPTED                               :Descargar si es aceptado
 STR_ORDER_DROP_UNLOAD                                           :Descargar todo
 STR_ORDER_DROP_TRANSFER                                         :Transferir
@@ -2951,8 +2958,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Selecciona tipo de carga que transportará el vehículo de carretera
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Construir muelles
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Construir muelles
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}No se pueden construir muelles aquí...
 STR_9803_SHIP_DEPOT                                             :{WHITE}Astillero de {TOWN}
 STR_9804_NEW_SHIPS                                              :{BLACK}Nuevos barcos
@@ -3005,6 +3010,8 @@
 STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}os ciudadanos celebran . . .{}¡Primer barco llega a {STATION}!
 STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}Boya de posición, que puede usarse como itinerarios adicionales
 STR_9835_CAN_T_POSITION_BUOY_HERE                               :{WHITE}No se puede colocar boya aquí...
+STR_BUILD_AQUEDUCT                                              :{BLACK}Construir acueducto
+STR_CAN_T_BUILD_AQUEDUCT_HERE                                   :{WHITE}No se puede construir un acueducto aquí
 STR_9836_RENAME                                                 :{BLACK}Renombrar
 STR_9837_RENAME_SHIP_TYPE                                       :{BLACK}Renombrar tipo de barco
 STR_9838_RENAME_SHIP_TYPE                                       :{WHITE}Renombrar tipo de barco
@@ -3157,6 +3164,7 @@
 STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER                            :{STRING} requiere OpenTTD versión {STRING} o superior.
 STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE                          :el fichero GRF ha sido diseñado para ser traducido
 STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED                        :Demasiados NewGRFs han sido cargados.
+STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC                       :Cargar {STRING} como NewGRF estático con {STRING} puede causar desincronizaciones.
 
 STR_NEWGRF_ADD                                                  :{BLACK}Añadir
 STR_NEWGRF_ADD_TIP                                              :{BLACK}Añadir un NewGRF a la lista
--- a/src/lang/swedish.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/swedish.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -1291,6 +1291,9 @@
 STR_BUILD_LOCKS_TIP                                             :{BLACK}Bygg slussar
 STR_LANDINFO_LOCK                                               :Sluss
 
+STR_CANT_PLACE_RIVERS                                           :{WHITE}Kan inte placera flod här...
+STR_LANDINFO_RIVER                                              :Flod
+
 STR_BUOY_IS_IN_USE                                              :{WHITE}... bojen används!
 
 STR_LANDINFO_COORDS                                             :{BLACK}Koordinater: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
@@ -1943,6 +1946,7 @@
 STR_3804_WATER                                                  :Vatten
 STR_3805_COAST_OR_RIVERBANK                                     :Kust eller flodbank
 STR_3806_SHIP_DEPOT                                             :Skeppsdepå
+STR_AQUEDUCT                                                    :Akvedukt
 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
 
@@ -2662,14 +2666,17 @@
 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}
+STR_ORDER_NON_STOP                                              :{BLACK}Utan uppehåll
 STR_ORDER_GO_TO                                                 :Åk till
 STR_ORDER_GO_NON_STOP_TO                                        :Åk non-stop till
 STR_ORDER_GO_VIA                                                :Åk via
 STR_ORDER_GO_NON_STOP_VIA                                       :Åk non-stop via
+STR_ORDER_TOGGLE_FULL_LOAD                                      :{BLACK}Full last, vilket gods som helst
 STR_ORDER_DROP_LOAD_IF_POSSIBLE                                 :Lasta om möjligt
 STR_ORDER_DROP_FULL_LOAD_ALL                                    :Full last alla frakttyper
 STR_ORDER_DROP_FULL_LOAD_ANY                                    :Full last någon frakttyp
 STR_ORDER_DROP_NO_LOADING                                       :Lasta ej
+STR_ORDER_TOGGLE_UNLOAD                                         :{BLACK}Lasta av allt
 STR_ORDER_DROP_UNLOAD_IF_ACCEPTED                               :Lasta av om accepterat
 STR_ORDER_DROP_UNLOAD                                           :Lasta av allt
 STR_ORDER_DROP_TRANSFER                                         :Överför
@@ -2950,8 +2957,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Välj lasttyp för fordon
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Hamnbyggnation
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Hamnbyggnation
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Kan inte bygga hamn här...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} skeppsdepå
 STR_9804_NEW_SHIPS                                              :{BLACK}Nytt skepp
@@ -3004,6 +3009,8 @@
 STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Invånarna firar . . .{}Första skeppet ankommer till {STATION}!
 STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}Positionsboj, som kan som kan användas för ytterligare vägpunkter
 STR_9835_CAN_T_POSITION_BUOY_HERE                               :{WHITE}Kan inte placera boj här...
+STR_BUILD_AQUEDUCT                                              :{BLACK}Bygg akvedukt
+STR_CAN_T_BUILD_AQUEDUCT_HERE                                   :{WHITE}Kan inte bygga akvedukt här...
 STR_9836_RENAME                                                 :{BLACK}Byt namn på
 STR_9837_RENAME_SHIP_TYPE                                       :{BLACK}Byt namn på skeppstyp
 STR_9838_RENAME_SHIP_TYPE                                       :{WHITE}Byt namn på skeppstyp
--- a/src/lang/traditional_chinese.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/traditional_chinese.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -15,8 +15,10 @@
 STR_0007_FLAT_LAND_REQUIRED                                     :{WHITE}需要平地
 STR_0008_WAITING                                                :{BLACK}等候:{WHITE}{STRING}
 STR_0009                                                        :{WHITE}{CARGO}
+STR_EN_ROUTE_FROM                                               :{YELLOW}({SHORTCARGO} 轉送自 {STATION})
 STR_000C_ACCEPTS                                                :{BLACK}接受:{WHITE}
 STR_000D_ACCEPTS                                                :{BLACK}接受:{GOLD}
+STR_SUPPLIES                                                    :{BLACK}供應: {GOLD}
 STR_000E                                                        :
 STR_000F_PASSENGERS                                             :乘客
 STR_0010_COAL                                                   :煤炭
@@ -166,7 +168,7 @@
 STR_00C7_QUIT                                                   :{WHITE}離開
 STR_00C8_YES                                                    :{BLACK}是
 STR_00C9_NO                                                     :{BLACK}否
-STR_00CA_ARE_YOU_SURE_YOU_WANT_TO                               :{YELLOW}你要放棄遊戲並回到 {STRING} 嗎?
+STR_00CA_ARE_YOU_SURE_YOU_WANT_TO                               :{YELLOW}您確定要放棄進行中的遊戲{}返回{STRING}?
 STR_00CB_1                                                      :{BLACK}1
 STR_00CC_2                                                      :{BLACK}2
 STR_00CD_3                                                      :{BLACK}3
@@ -281,12 +283,12 @@
 STR_OSNAME_OS2                                                  :OS/2
 STR_OSNAME_SUNOS                                                :SunOS
 
-STR_013B_OWNED_BY                                               :{WHITE}...{STRING} 所有
+STR_013B_OWNED_BY                                               :{WHITE}... 擁有者是 {STRING}
 STR_013C_CARGO                                                  :{BLACK}貨物
 STR_013D_INFORMATION                                            :{BLACK}資訊
-STR_013E_CAPACITIES                                             :{BLACK}載量
+STR_013E_CAPACITIES                                             :{BLACK}容量
 STR_TOTAL_CARGO                                                 :{BLACK}總貨物量
-STR_013F_CAPACITY                                               :{BLACK}載量:{LTBLUE}{CARGO}
+STR_013F_CAPACITY                                               :{BLACK}容量: {LTBLUE}{CARGO}
 STR_CAPACITY_MULT                                               :{BLACK}載量:{LTBLUE}{CARGO} (x{NUM})
 STR_TOTAL_CAPACITY_TEXT                                         :{BLACK}此列車的總載量:
 STR_TOTAL_CAPACITY                                              :{LTBLUE}- {CARGO} ({SHORTCARGO})
@@ -370,7 +372,7 @@
 STR_SORT_BY_NUMBER                                              :編號
 STR_SORT_BY_PROFIT_LAST_YEAR                                    :上年盈利
 STR_SORT_BY_PROFIT_THIS_YEAR                                    :本年盈利
-STR_SORT_BY_AGE                                                 :年齡
+STR_SORT_BY_AGE                                                 :使用年數
 STR_SORT_BY_RELIABILITY                                         :可靠性
 STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE                        :總容量,依貨物種類排序
 STR_SORT_BY_MAX_SPEED                                           :最高速度
@@ -382,9 +384,9 @@
 STR_SORT_BY_RATING_MAX                                          :酬載評價
 STR_ENGINE_SORT_ENGINE_ID                                       :引擎編號
 STR_ENGINE_SORT_COST                                            :價值
-STR_ENGINE_SORT_POWER                                           :輸出
+STR_ENGINE_SORT_POWER                                           :功率
 STR_ENGINE_SORT_INTRO_DATE                                      :登場日期
-STR_ENGINE_SORT_RUNNING_COST                                    :運作費用
+STR_ENGINE_SORT_RUNNING_COST                                    :營運費用
 STR_ENGINE_SORT_POWER_VS_RUNNING_COST                           :功率/營運費用
 STR_ENGINE_SORT_CARGO_CAPACITY                                  :載貨量
 STR_NO_WAITING_CARGO                                            :{BLACK}沒有任何酬載等候中
@@ -484,6 +486,9 @@
 STR_01A5_COST_TO_CLEAR                                          :{BLACK}整地花費:{LTBLUE}{CURRENCY}
 STR_01A6_N_A                                                    :不適用
 STR_01A7_OWNER                                                  :{BLACK}擁有人:{LTBLUE}{STRING}
+STR_ROAD_OWNER                                                  :{BLACK}道路擁有者: {LTBLUE}{STRING}
+STR_TRAM_OWNER                                                  :{BLACK}路面電車軌擁有者: {LTBLUE}{STRING}
+STR_RAIL_OWNER                                                  :{BLACK}鐵道擁有者: {LTBLUE}{STRING}
 STR_01A8_LOCAL_AUTHORITY                                        :{BLACK}地方政府:{LTBLUE}{STRING}
 STR_01A9_NONE                                                   :無
 STR_01AA_NAME                                                   :{BLACK}名稱
@@ -678,51 +683,51 @@
 STR_025F_BUBBLE_GENERATOR                                       :{BLACK}泡泡工場
 STR_0260_TOFFEE_QUARRY                                          :{BLACK}太妃糖礦場
 STR_0261_SUGAR_MINE                                             :{BLACK}砂糖礦場
-STR_0262_CONSTRUCT_COAL_MINE                                    :{BLACK}興建煤礦場
+STR_0262_CONSTRUCT_COAL_MINE                                    :{BLACK}興建煤礦
 STR_0263_CONSTRUCT_POWER_STATION                                :{BLACK}興建發電廠
 STR_0264_CONSTRUCT_SAWMILL                                      :{BLACK}興建鋸木廠
-STR_0265_PLANT_FOREST                                           :{BLACK}植林
+STR_0265_PLANT_FOREST                                           :{BLACK}種植森林
 STR_0266_CONSTRUCT_OIL_REFINERY                                 :{BLACK}興建煉油廠
-STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY                             :{BLACK}興建油井 (只能在地圖邊緣興建)
+STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY                             :{BLACK}興建鑽油平台 (只能建在地圖邊緣)
 STR_0268_CONSTRUCT_FACTORY                                      :{BLACK}興建工廠
-STR_0269_CONSTRUCT_STEEL_MILL                                   :{BLACK}興建鋼廠
+STR_0269_CONSTRUCT_STEEL_MILL                                   :{BLACK}興建煉鋼廠
 STR_026A_CONSTRUCT_FARM                                         :{BLACK}興建農場
-STR_026B_CONSTRUCT_IRON_ORE_MINE                                :{BLACK}興建鐵礦場
+STR_026B_CONSTRUCT_IRON_ORE_MINE                                :{BLACK}興建鐵礦
 STR_026C_CONSTRUCT_OIL_WELLS                                    :{BLACK}興建油井
-STR_026D_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}開設銀行 (只能在人口高於 1200 的市鎮內開設)
+STR_026D_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}興建銀行 (只能建在1200人以上的城鎮)
 STR_026E_CONSTRUCT_PAPER_MILL                                   :{BLACK}興建造紙廠
-STR_026F_CONSTRUCT_FOOD_PROCESSING                              :{BLACK}興建食物加工廠
+STR_026F_CONSTRUCT_FOOD_PROCESSING                              :{BLACK}興建食物處理廠
 STR_0270_CONSTRUCT_PRINTING_WORKS                               :{BLACK}興建印刷廠
-STR_0271_CONSTRUCT_GOLD_MINE                                    :{BLACK}興建金礦場
-STR_0272_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}開設銀行 (只能在市鎮內開設)
-STR_0273_CONSTRUCT_LUMBER_MILL_TO                               :{BLACK}興建鋸木廠 (砍伐雨林出產木材)
+STR_0271_CONSTRUCT_GOLD_MINE                                    :{BLACK}興建金礦
+STR_0272_CONSTRUCT_BANK_CAN_ONLY                                :{BLACK}興建銀行 (只能建在城鎮裡)
+STR_0273_CONSTRUCT_LUMBER_MILL_TO                               :{BLACK}興建鋸木場 (清除雨林製造木材)
 STR_0274_PLANT_FRUIT_PLANTATION                                 :{BLACK}種植蔬果園
-STR_0275_PLANT_RUBBER_PLANTATION                                :{BLACK}種植橡膠樹林
-STR_0276_CONSTRUCT_WATER_SUPPLY                                 :{BLACK}興建供水站
-STR_0277_CONSTRUCT_WATER_TOWER_CAN                              :{BLACK}興建儲水塔 (只能在市鎮內興建)
-STR_0278_CONSTRUCT_DIAMOND_MINE                                 :{BLACK}興建鑽石礦場
-STR_0279_CONSTRUCT_COPPER_ORE_MINE                              :{BLACK}興建銅礦場
+STR_0275_PLANT_RUBBER_PLANTATION                                :{BLACK}種植橡膠樹園
+STR_0276_CONSTRUCT_WATER_SUPPLY                                 :{BLACK}興建供水場
+STR_0277_CONSTRUCT_WATER_TOWER_CAN                              :{BLACK}興建水塔 (只能建在城鎮裡)
+STR_0278_CONSTRUCT_DIAMOND_MINE                                 :{BLACK}興建鑽石礦
+STR_0279_CONSTRUCT_COPPER_ORE_MINE                              :{BLACK}興建銅礦
 STR_027A_PLANT_COTTON_CANDY_FOREST                              :{BLACK}種植棉花糖森林
 STR_027B_CONSTRUCT_CANDY_FACTORY                                :{BLACK}興建糖果工廠
 STR_027C_CONSTRUCT_BATTERY_FARM                                 :{BLACK}興建電池農場
 STR_027D_CONSTRUCT_COLA_WELLS                                   :{BLACK}興建可樂井
-STR_027E_CONSTRUCT_TOY_SHOP                                     :{BLACK}設立玩具店
+STR_027E_CONSTRUCT_TOY_SHOP                                     :{BLACK}興建玩具店
 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_0283_CONSTRUCT_TOFFEE_QUARRY                                :{BLACK}興建太妃糖礦場
-STR_0284_CONSTRUCT_SUGAR_MINE                                   :{BLACK}興建砂糖礦場
+STR_0284_CONSTRUCT_SUGAR_MINE                                   :{BLACK}興建糖礦
 STR_0285_CAN_T_BUILD_HERE                                       :{WHITE}不能在這裡建造 {STRING} ...
-STR_0286_MUST_BUILD_TOWN_FIRST                                  :{WHITE}...先要建造市鎮
+STR_0286_MUST_BUILD_TOWN_FIRST                                  :{WHITE}...應先建造市鎮
 STR_0287_ONLY_ONE_ALLOWED_PER_TOWN                              :{WHITE}...每個市鎮僅允許一個
 STR_0288_PLANT_TREES                                            :{BLACK}植樹
 STR_0289_PLACE_SIGN                                             :{BLACK}設置標誌
 STR_028A_RANDOM_TREES                                           :{BLACK}隨機樹種
 STR_028B_PLANT_TREES_RANDOMLY_OVER                              :{BLACK}在場景上隨機植樹
 STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE                         :{BLACK}在場景上產生岩石區
-STR_028D_PLACE_LIGHTHOUSE                                       :{BLACK}建立燈塔
-STR_028E_PLACE_TRANSMITTER                                      :{BLACK}建立發射站
+STR_028D_PLACE_LIGHTHOUSE                                       :{BLACK}放置燈塔
+STR_028E_PLACE_TRANSMITTER                                      :{BLACK}放置天線塔
 STR_028F_DEFINE_DESERT_AREA                                     :{BLACK}定義沙漠區。{}請按住 CTRL 移除
 STR_CREATE_LAKE                                                 :{BLACK}劃出湖泊範圍。{}開鑿運河。在海平面上按 CTRL 鍵則會淹沒週遭土地
 STR_CREATE_RIVER                                                :{BLACK}劃出河流範圍
@@ -743,7 +748,7 @@
 STR_QUIT_SCENARIO_QUERY                                         :{YELLOW}你要離開這個場景嗎?
 STR_029C_QUIT_EDITOR                                            :{WHITE}離開編輯器
 STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...只能在市鎮人口超過 1200 人的地方建造
-STR_029E_MOVE_THE_STARTING_DATE                                 :{BLACK}將開始時間提早一年
+STR_029E_MOVE_THE_STARTING_DATE                                 :{BLACK}將開始時間往前 1 年
 STR_029F_MOVE_THE_STARTING_DATE                                 :{BLACK}將開始時間往後一年
 STR_02A0_ENDS_OF_BRIDGE_MUST_BOTH                               :{WHITE}...橋樑的兩端應該在陸地上
 STR_02A1_SMALL                                                  :{BLACK}小型
@@ -810,9 +815,9 @@
 STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW                                :{BLACK}將主視野移到視窗視野
 STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT                             :{BLACK}將主視野移到這個視窗的視野位置
 
-STR_02E0_CURRENCY_UNITS                                         :{BLACK}貨幣單位
+STR_02E0_CURRENCY_UNITS                                         :{BLACK}幣值單位
 STR_02E1                                                        :{BLACK}{SKIP}{STRING}
-STR_02E2_CURRENCY_UNITS_SELECTION                               :{BLACK}選擇貨幣單位
+STR_02E2_CURRENCY_UNITS_SELECTION                               :{BLACK}選擇幣值單位
 STR_MEASURING_UNITS                                             :{BLACK}度量單位
 STR_02E4                                                        :{BLACK}{SKIP}{SKIP}{STRING}
 STR_MEASURING_UNITS_SELECTION                                   :{BLACK}度量單位
@@ -834,7 +839,7 @@
 STR_02FA_EVERY_12_MONTHS                                        :每十二個月
 STR_02FB_START_A_NEW_GAME                                       :{BLACK}開始新遊戲
 STR_02FC_LOAD_A_SAVED_GAME                                      :{BLACK}載入舊遊戲
-STR_02FE_CREATE_A_CUSTOMIZED_GAME                               :{BLACK}建立自訂遊戲場景
+STR_02FE_CREATE_A_CUSTOMIZED_GAME                               :{BLACK}建立自訂遊戲世界/劇本
 STR_02FF_SELECT_SINGLE_PLAYER_GAME                              :{BLACK}選擇單人單機遊戲
 STR_0300_SELECT_MULTIPLAYER_GAME                                :{BLACK}選擇 2 ~ 8 人的連線遊戲
 STR_0301_DISPLAY_GAME_OPTIONS                                   :{BLACK}顯示遊戲選項
@@ -961,8 +966,8 @@
 STR_MONTH_NOV                                                   :十一月
 STR_MONTH_DEC                                                   :十二月
 
-STR_HEADING_FOR_STATION                                         :{LTBLUE}目的地:{STATION}
-STR_HEADING_FOR_STATION_VEL                                     :{LTBLUE}目的地:{STATION},{VELOCITY}
+STR_HEADING_FOR_STATION                                         :{LTBLUE}正前往: {STATION}
+STR_HEADING_FOR_STATION_VEL                                     :{LTBLUE}正前往: {STATION}, {VELOCITY}
 STR_NO_ORDERS                                                   :{LTBLUE}沒有指令
 STR_NO_ORDERS_VEL                                               :{LTBLUE}沒有指令, {VELOCITY}
 
@@ -1011,7 +1016,7 @@
 STR_AIRCRAFT_AUTORENEW_FAILED                                   :{WHITE}飛機 {COMMA}自動翻新失敗 (金錢限制)
 STR_TRAIN_TOO_LONG_AFTER_REPLACEMENT                            :{WHITE}置換後列車 {COMMA} 過長
 
-STR_CONFIG_PATCHES                                              :{BLACK}設置修正
+STR_CONFIG_PATCHES                                              :{BLACK}設定補綴
 STR_CONFIG_PATCHES_TIP                                          :{BLACK}設置修正選項
 STR_CONFIG_PATCHES_CAPTION                                      :{WHITE}設置修正
 
@@ -1052,6 +1057,7 @@
 STR_CONFIG_PATCHES_PLANE_SPEED                                  :{LTBLUE}飛機速度比例:{ORANGE}{STRING} 分之一
 STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}可在鎮內興建路邊車站:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_ADJACENT_STATIONS                            :{LTBLUE}容許興建相鄰車站: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DYNAMIC_ENGINES                              :{LTBLUE}允許載入多重 NewGRF 車輛組: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}永遠可以興建小型機場:{ORANGE}{STRING}
 
@@ -1064,7 +1070,7 @@
 STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES                        :{LTBLUE}運輸工具永遠不會過期:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_AUTORENEW_VEHICLE                            :{LTBLUE}運輸工具自動翻新
 STR_CONFIG_PATCHES_AUTORENEW_MONTHS                             :{LTBLUE}當運具在使用年限 {ORANGE}{STRING}{LTBLUE} 個月前/後自動更新
-STR_CONFIG_PATCHES_AUTORENEW_MONEY                              :{LTBLUE}自動翻新最低費用:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTORENEW_MONEY                              :{LTBLUE}自動翻新所需最低餘額: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ERRMSG_DURATION                              :{LTBLUE}錯誤訊息顯示時間:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_POPULATION_IN_LABEL                          :{LTBLUE}於標籤顯示市鎮人口:{ORANGE}{STRING}
 
@@ -1133,35 +1139,35 @@
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}每位玩家可擁有列車數目:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}每位玩家可擁有車輛數目:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_AIRCRAFT                                 :{LTBLUE}每位玩家可擁有飛機數目:{ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAX_SHIPS                                    :{LTBLUE}每位玩家可擁有船舶數目:{ORANGE}{STRING}
-
-STR_CONFIG_PATCHES_AI_BUILDS_TRAINS                             :{LTBLUE}電腦不可擁有列車:{ORANGE}{STRING}
-STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH                            :{LTBLUE}電腦不可擁有路面車輛:{ORANGE}{STRING}
-STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT                           :{LTBLUE}電腦不可擁有飛機:{ORANGE}{STRING}
-STR_CONFIG_PATCHES_AI_BUILDS_SHIPS                              :{LTBLUE}電腦不可擁有飛機:{ORANGE}{STRING}
-
-STR_CONFIG_PATCHES_AINEW_ACTIVE                                 :{LTBLUE}使用新人工智能 (開發階段):{ORANGE}{STRING}
-STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER                            :{LTBLUE}可於連線遊戲加入電腦對手 (測試階段):{ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAX_SHIPS                                    :{LTBLUE}每位玩家可擁有船舶數目: {ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_SERVINT_TRAINS                               :{LTBLUE}列車預設檢修頻率:{ORANGE}{STRING} 日/%
-STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED                      :{LTBLUE}列車預設檢修頻率:{ORANGE}關閉
-STR_CONFIG_PATCHES_SERVINT_ROADVEH                              :{LTBLUE}路面車輛預設檢修頻率:{ORANGE}{STRING} 日/%
-STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED                     :{LTBLUE}路面車輛預設檢修頻率:{ORANGE}關閉
-STR_CONFIG_PATCHES_SERVINT_AIRCRAFT                             :{LTBLUE}飛機預設檢修頻率:{ORANGE}{STRING} 日/%
-STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED                    :{LTBLUE}飛機預設檢修頻率:{ORANGE}關閉
-STR_CONFIG_PATCHES_SERVINT_SHIPS                                :{LTBLUE}船隻預設檢修頻率:{ORANGE}{STRING} 日/%
-STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED                       :{LTBLUE}船隻預設檢修頻率:{ORANGE}關閉
-STR_CONFIG_PATCHES_NOSERVICE                                    :{LTBLUE}當故障關閉時不作定期檢查維修:{ORANGE}{STRING}
-STR_CONFIG_PATCHES_WAGONSPEEDLIMITS                             :{LTBLUE}載具速度限制:{ORANGE}{STRING}
-STR_CONFIG_PATCHES_DISABLE_ELRAILS                              :{LTBLUE}電氣化鐵路:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_TRAINS                             :{LTBLUE}不允許電腦使用鐵道: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH                            :{LTBLUE}不允許電腦使用汽車: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT                           :{LTBLUE}不允許電腦使用飛機: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_SHIPS                              :{LTBLUE}不允許電腦使用船舶: {ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_COLORED_NEWS_YEAR                            :{LTBLUE}彩色報紙出現於:{ORANGE}{STRING} 年
-STR_CONFIG_PATCHES_STARTING_YEAR                                :{LTBLUE}開始時間:{ORANGE}{STRING} 年
-STR_CONFIG_PATCHES_ENDING_YEAR                                  :{LTBLUE}終結遊戲年份:{ORANGE}{STRING} 年
-STR_CONFIG_PATCHES_SMOOTH_ECONOMY                               :{LTBLUE}平滑經濟模式 (更多而小的變化)
-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_AINEW_ACTIVE                                 :{LTBLUE}起動新 AI (早期測試中): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER                            :{LTBLUE}允許多人連線時使用 AI (實驗中): {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_SERVINT_TRAINS                               :{LTBLUE}列車預設維護間隔: {ORANGE}{STRING} 天/%
+STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED                      :{LTBLUE}列車預設維護間隔: {ORANGE}關閉
+STR_CONFIG_PATCHES_SERVINT_ROADVEH                              :{LTBLUE}汽車預設維護間隔: {ORANGE}{STRING} 天/%
+STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED                     :{LTBLUE}汽車預設維護間隔: {ORANGE}關閉
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT                             :{LTBLUE}飛機預設維護間隔: {ORANGE}{STRING} 天/%
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED                    :{LTBLUE}飛機預設維護間隔: {ORANGE}關閉
+STR_CONFIG_PATCHES_SERVINT_SHIPS                                :{LTBLUE}船舶預設維護間隔: {ORANGE}{STRING} 天/%
+STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED                       :{LTBLUE}船舶預設維護間隔: {ORANGE}關閉
+STR_CONFIG_PATCHES_NOSERVICE                                    :{LTBLUE}關閉運具故障之後也不自動維護: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_WAGONSPEEDLIMITS                             :{LTBLUE}起動列車車廂速限: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DISABLE_ELRAILS                              :{LTBLUE}關閉電氣化鐵道: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_COLORED_NEWS_YEAR                            :{LTBLUE}彩色報紙登場年份: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STARTING_YEAR                                :{LTBLUE}開始年份: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ENDING_YEAR                                  :{LTBLUE}遊戲結束年份: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_ECONOMY                               :{LTBLUE}起動平順經濟 (更多、更小變動)
+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_ENABLE_SIGNAL_GUI                            :{LTBLUE}啟用號誌介面:{ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID                          :{WHITE}在場景編輯器中,"市鎮道路不再規劃" 是不可行的
@@ -1173,12 +1179,12 @@
 STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID                         :3乘3網格
 STR_CONFIG_PATCHES_TOWN_LAYOUT_RANDOM                           :隨機
 
-STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}主工具列位置:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}主工具列位置: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :左
-STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :中
+STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :中央
 STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :右
-STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}視窗自動黏貼範圍:{ORANGE}{STRING} 像素
-STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}視窗自動黏貼範圍:{ORANGE}關閉
+STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}視窗黏接距離: {ORANGE}{STRING} px
+STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}視窗黏接距離: {ORANGE}關閉
 STR_CONFIG_PATCHES_TOWN_GROWTH                                  :{LTBLUE}城市增長速度: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOWN_GROWTH_NONE                             :不會增長
 STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW                             :慢
@@ -1191,18 +1197,18 @@
 STR_CONFIG_MODIFIED_ROAD_REBUILD                                :{LTBLUE}在鋪設道路時移除不合理的路面
 
 STR_CONFIG_PATCHES_GUI                                          :{BLACK}介面
-STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}建築
-STR_CONFIG_PATCHES_VEHICLES                                     :{BLACK}運輸工具
+STR_CONFIG_PATCHES_CONSTRUCTION                                 :{BLACK}建造
+STR_CONFIG_PATCHES_VEHICLES                                     :{BLACK}運具
 STR_CONFIG_PATCHES_STATIONS                                     :{BLACK}車站
 STR_CONFIG_PATCHES_ECONOMY                                      :{BLACK}經濟
-STR_CONFIG_PATCHES_AI                                           :{BLACK}對手
+STR_CONFIG_PATCHES_AI                                           :{BLACK}競爭對手
 
-STR_CONFIG_PATCHES_DISABLED                                     :關
+STR_CONFIG_PATCHES_DISABLED                                     :關閉
 STR_CONFIG_PATCHES_INT32                                        :{NUM}
 STR_CONFIG_PATCHES_CURRENCY                                     :{CURRENCY}
 
-STR_CONFIG_PATCHES_QUERY_CAPT                                   :{WHITE}改變設定值
-STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE                :{WHITE}以下預設檢修期與揀選項目不相容! 合法設定為 5-90% 或 30-800 日
+STR_CONFIG_PATCHES_QUERY_CAPT                                   :{WHITE}修改設定值
+STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE                :{WHITE}下面有些預設維護間隔與選定的設定不相容!5-90% 與 30-800 天是允許範圍
 
 STR_CONFIG_PATCHES_PATHFINDER_FOR_TRAINS                        :{LTBLUE}列車的路徑搜尋方式:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_PATHFINDER_FOR_TRAINS_NTP                    :NTP {RED}(不建議)
@@ -1218,78 +1224,79 @@
 STR_CONFIG_PATCHES_PATHFINDER_FOR_SHIPS_YAPF                    :YAPF {RED}(不建議)
 
 STR_TEMPERATE_LANDSCAPE                                         :溫帶
-STR_SUB_ARCTIC_LANDSCAPE                                        :亞北極帶
+STR_SUB_ARCTIC_LANDSCAPE                                        :寒帶
 STR_SUB_TROPICAL_LANDSCAPE                                      :亞熱帶
 STR_TOYLAND_LANDSCAPE                                           :玩具世界
 
 STR_CHEATS                                                      :{WHITE}作弊
-STR_CHEATS_TIP                                                  :{BLACK}被勾選的項目表示你之前用過這個作弊
-STR_CHEATS_WARNING                                              :{BLACK}注意! 你要背叛你的對手喔! 你要記住這種行為會被一輩子記著的。
+STR_CHEATS_TIP                                                  :{BLACK}勾選代表您用過這個密技
+STR_CHEATS_WARNING                                              :{BLACK}警告!您正準備背叛競爭對手。請記得這種恥辱將永傳不朽。
 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_SWITCH_CLIMATE                                        :{LTBLUE}改變氣候:{ORANGE} {STRING}
-STR_CHEAT_CHANGE_DATE                                           :{LTBLUE}改變日期:{ORANGE} {DATE_SHORT}
-STR_CHEAT_SETUP_PROD                                            :{LTBLUE}可改變產量:{ORANGE}{STRING}
+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_SWITCH_CLIMATE                                        :{LTBLUE}切換場景類型: {ORANGE} {STRING}
+STR_CHEAT_CHANGE_DATE                                           :{LTBLUE}修改日期: {ORANGE} {DATE_SHORT}
+STR_CHEAT_SETUP_PROD                                            :{LTBLUE}允許修改產量: {ORANGE}{STRING}
 
-STR_HEADING_FOR_WAYPOINT                                        :{LTBLUE}目的地:{WAYPOINT}
-STR_HEADING_FOR_WAYPOINT_VEL                                    :{LTBLUE}目的地:{WAYPOINT},{VELOCITY}
-
-STR_GO_TO_WAYPOINT                                              :經 {WAYPOINT}
-STR_GO_NON_STOP_TO_WAYPOINT                                     :經 {WAYPOINT},中途不停
+STR_HEADING_FOR_WAYPOINT                                        :{LTBLUE}正前往 {WAYPOINT}
+STR_HEADING_FOR_WAYPOINT_VEL                                    :{LTBLUE}正前往 {WAYPOINT}, {VELOCITY}
 
-STR_WAYPOINTNAME_CITY                                           :路標 {TOWN}
-STR_WAYPOINTNAME_CITY_SERIAL                                    :路標 {TOWN} #{COMMA}
-STR_LANDINFO_WAYPOINT                                           :路標
+STR_GO_TO_WAYPOINT                                              :前往 {WAYPOINT}
+STR_GO_NON_STOP_TO_WAYPOINT                                     :前往 {WAYPOINT} 不停靠
 
-STR_WAYPOINT                                                    :{WHITE}路標
-STR_WAYPOINT_GRAPHICS_TIP                                       :{BLACK}選擇路標種類
+STR_WAYPOINTNAME_CITY                                           :{TOWN} 號誌站
+STR_WAYPOINTNAME_CITY_SERIAL                                    :{TOWN} 第 {COMMA} 號誌站
+STR_LANDINFO_WAYPOINT                                           :號誌站
+
+STR_WAYPOINT                                                    :{WHITE}號誌站
+STR_WAYPOINT_GRAPHICS_TIP                                       :{BLACK}顯示號誌站種類
 
 STR_WAYPOINT_VIEWPORT                                           :{WHITE}{WAYPOINT}
 STR_WAYPOINT_VIEWPORT_TINY                                      :{TINYFONT}{WHITE}{WAYPOINT}
 STR_WAYPOINT_RAW                                                :{WAYPOINT}
-STR_EDIT_WAYPOINT_NAME                                          :{WHITE}更改路標名稱
+STR_EDIT_WAYPOINT_NAME                                          :{WHITE}編輯導航點名稱
 
-STR_CANT_CHANGE_WAYPOINT_NAME                                   :{WHITE}不能更改路標名稱
-STR_CONVERT_RAIL_TO_WAYPOINT_TIP                                :{BLACK}將路軌變為路標
-STR_CANT_BUILD_TRAIN_WAYPOINT                                   :{WHITE}不能建立鐵路路標
-STR_CANT_REMOVE_TRAIN_WAYPOINT                                  :{WHITE}不能移除鐵路路標
+STR_CANT_CHANGE_WAYPOINT_NAME                                   :{WHITE}無法修改號誌站...
+STR_CONVERT_RAIL_TO_WAYPOINT_TIP                                :{BLACK}將軌道轉成號誌站
+STR_CANT_BUILD_TRAIN_WAYPOINT                                   :{WHITE}無法在此建造列車號誌站...
+STR_CANT_REMOVE_TRAIN_WAYPOINT                                  :{WHITE}無法移除號誌站...
 
-STR_BUILD_AUTORAIL_TIP                                          :{BLACK}以自動模式鋪設路軌
+STR_BUILD_AUTORAIL_TIP                                          :{BLACK}以自動鋪軌模式建造鐵軌
 
 STR_NO_TOWN_IN_SCENARIO                                         :{WHITE}...這個場景沒有市鎮
 
-STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}你要建立一個隨機地形嗎?
-STR_MANY_RANDOM_TOWNS                                           :{BLACK}隨機產生多個市鎮
+STR_GENERATE_RANDOM_LANDSCAPE                                   :{WHITE}您確定要隨機建立地形嗎?
+STR_MANY_RANDOM_TOWNS                                           :{BLACK}許多隨機城鎮
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}以隨機放置的市鎮佈滿版圖
 STR_MANY_RANDOM_INDUSTRIES                                      :隨機產生多個工業
 STR_RANDOM_INDUSTRIES_TIP                                       :{BLACK}以隨機放置的工業佈滿版圖
-STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}隨機產生工業失敗...
+STR_CAN_T_GENERATE_INDUSTRIES                                   :{WHITE}無法產生工業...
 
-STR_LANDSCAPING_TOOLBAR_TIP                                     :{BLACK}開啟地形工具列以修改地形,植樹等等
-STR_LANDSCAPING_TOOLBAR                                         :{WHITE}地形改造
-STR_LEVEL_LAND_TOOLTIP                                          :{BLACK}移平土地
+STR_LANDSCAPING_TOOLBAR_TIP                                     :{BLACK}打開第型工具列,提升/降低地面,種樹等等。
+STR_LANDSCAPING_TOOLBAR                                         :{WHITE}地形
+STR_LEVEL_LAND_TOOLTIP                                          :{BLACK}整平地面
 
 
 STR_TREES_RANDOM_TYPE                                           :{BLACK}隨機種類樹木
 STR_TREES_RANDOM_TYPE_TIP                                       :{BLACK}種植隨機種類樹木
 
-STR_CANT_BUILD_CANALS                                           :{WHITE}不可以在這裏開鑿運河...
-STR_BUILD_CANALS_TIP                                            :{BLACK}開鑿運河。
+STR_CANT_BUILD_CANALS                                           :{WHITE}無法在此建造運河...
+STR_BUILD_CANALS_TIP                                            :{BLACK}建造運河。按住 CTRL 可在海面上建造 (僅限海平面)
 STR_LANDINFO_CANAL                                              :運河
 
-STR_CANT_BUILD_LOCKS                                            :{WHITE}不可以在這裏興建水閘...
-STR_BUILD_LOCKS_TIP                                             :{BLACK}興建水閘
+STR_CANT_BUILD_LOCKS                                            :{WHITE}無法在此建造水閘...
+STR_BUILD_LOCKS_TIP                                             :{BLACK}建造水閘
 STR_LANDINFO_LOCK                                               :水閘
 
-STR_BUOY_IS_IN_USE                                              :{WHITE}...浮標正被使用!
+
+STR_BUOY_IS_IN_USE                                              :{WHITE}...浮標正在使用!
 
 STR_LANDINFO_COORDS                                             :{BLACK}座標:{LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
 
-STR_CANT_REMOVE_PART_OF_STATION                                 :{WHITE}不能移除車站部份...
+STR_CANT_REMOVE_PART_OF_STATION                                 :{WHITE}無法移除局部車站...
 STR_CANT_CONVERT_RAIL                                           :{WHITE}無法轉換軌道種類...
 STR_CONVERT_RAIL_TIP                                            :{BLACK}轉換/升級軌道種類
 
@@ -1711,6 +1718,7 @@
 STR_1816_TREE_LINED_ROAD                                        :有行道樹的公路
 STR_1817_ROAD_VEHICLE_DEPOT                                     :車庫
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :公路/鐵道平交道
+STR_TRAMWAY                                                     :路面電車
 STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}不能從這邊移除公車站...
 STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}不能從這邊移除貨運站...
 STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION                         :{WHITE}不可移除載客電車站...
@@ -2691,6 +2699,8 @@
 STR_ORDER_GO_TO_NEAREST_HANGAR                                  :前往最近的機棚
 STR_ORDER_NEAREST_DEPOT                                         :最近的
 STR_ORDER_NEAREST_HANGAR                                        :最近的機棚
+STR_ORDER_SERVICE_AT                                            :前往維護
+STR_ORDER_SERVICE_NON_STOP_AT                                   :直接前往維護
 STR_ORDER_TRAIN_DEPOT                                           :機廠
 STR_ORDER_ROAD_DEPOT                                            :車庫
 STR_ORDER_SHIP_DEPOT                                            :船塢
@@ -2700,6 +2710,17 @@
 
 STR_ORDER_CONDITIONAL                                           :條件指令
 STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP                          :{BLACK}跳躍指令依據
+STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP                        :{BLACK}如何與指定數值比對載具資料
+STR_ORDER_CONDITIONAL_VALUE_TOOLTIP                             :{BLACK}與載具資料比對的數值
+STR_ORDER_CONDITIONAL_VALUE_CAPT                                :{WHITE}輸入想比對的數值
+STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE                           :負載比例
+STR_ORDER_CONDITIONAL_RELIABILITY                               :可靠度
+STR_ORDER_CONDITIONAL_MAX_SPEED                                 :極速
+STR_ORDER_CONDITIONAL_AGE                                       :運具年齡 (年)
+STR_ORDER_CONDITIONAL_REQUIRES_SERVICE                          :需要維護
+STR_ORDER_CONDITIONAL_UNCONDITIONALLY                           :總是
+STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS                         :等於
+STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS                     :不等於
 
 STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :漫遊 (無時刻表)
 STR_TIMETABLE_TRAVEL_FOR                                        :通行於 {STRING}
@@ -2747,6 +2768,8 @@
 STR_REFIT_ORDER                                                 :(改裝成 {STRING})
 STR_TIMETABLE_VIEW                                              :{BLACK}時刻表
 STR_TIMETABLE_VIEW_TOOLTIP                                      :{BLACK}切換至時刻表檢視模式
+STR_ORDER_VIEW                                                  :{BLACK}指令
+STR_ORDER_VIEW_TOOLTIP                                          :{BLACK}切到指令列表
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (指令)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - 指令結束 - -
 STR_SERVICE                                                     :{BLACK}維護
@@ -2755,6 +2778,7 @@
 STR_882D_VALUE                                                  :{LTBLUE}{ENGINE}{BLACK}   價值:{LTBLUE}{CURRENCY}
 STR_882E                                                        :{WHITE}{VEHICLE}
 STR_882F_LOADING_UNLOADING                                      :{LTBLUE}正在裝卸客貨
+STR_LEAVING                                                     :{LTBLUE}正在離開
 STR_TRAIN_MUST_BE_STOPPED                                       :{WHITE}列車必須停在機廠内
 STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT                              :{WHITE}無法將列車送往機廠...
 STR_8831_NO_MORE_SPACE_FOR_ORDERS                               :{WHITE}無法新增指令
@@ -2836,6 +2860,7 @@
 STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE                         :{BLACK}{STRING} 問世了! -  {ENGINE}
 
 STR_CAN_T_SELL_DESTROYED_VEHICLE                                :{WHITE}損毀的運具不能出售...
+STR_CAN_T_REFIT_DESTROYED_VEHICLE                               :{WHITE}不能改造已撞毀的載具
 
 STR_CAN_T_TIMETABLE_VEHICLE                                     :{WHITE}無法為運具加入時刻表...
 STR_TIMETABLE_ONLY_WAIT_AT_STATIONS                             :{WHITE}運具只能等待於站點。
@@ -2916,8 +2941,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}選擇車輛要運送的酬載種類
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :建造碼頭
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}建造碼頭
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}無法在此建造碼頭...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} 船塢
 STR_9804_NEW_SHIPS                                              :{BLACK}購買船舶
@@ -3151,6 +3174,9 @@
 STR_NEWGRF_DISABLED_WARNING                                     :{WHITE}找不到的 GRF 檔已被關閉
 STR_NEWGRF_NOT_FOUND_WARNING                                    :{WHITE}找不到載入遊戲所需的 GRF 檔案
 STR_NEWGRF_UNPAUSE_WARNING_TITLE                                :{YELLOW}一個或多個 GRF 檔案遺失
+STR_NEWGRF_UNPAUSE_WARNING                                      :{WHITE}取消暫停可能會讓 OpenTTD 當掉。請不要回報之後的當機情形。{}您真的要取消暫停嗎?
+
+STR_LOADGAME_REMOVED_TRAMS                                      :{WHITE}存檔版本不支援路面電車,已移除所有路面電車。
 
 STR_CURRENCY_WINDOW                                             :{WHITE}自訂幣值
 STR_CURRENCY_EXCHANGE_RATE                                      :{LTBLUE}匯率:{ORANGE}{CURRENCY} = £ {COMMA}
@@ -3277,6 +3303,9 @@
 
 ########### For showing numbers in widgets
 
+STR_NUM_1                                                       :{BLACK}{SKIP}{NUM}
+STR_NUM_2                                                       :{BLACK}{SKIP}{SKIP}{NUM}
+STR_NUM_3                                                       :{BLACK}{SKIP}{SKIP}{SKIP}{NUM}
 
 ########### String for New Landscape Generator
 
@@ -3286,6 +3315,7 @@
 STR_WORLD_GENERATION_CAPTION                                    :{WHITE}產生世界
 STR_RANDOM_SEED                                                 :{BLACK}亂數種子:
 STR_RANDOM_SEED_HELP                                            :{BLACK}點選可輸入亂數種子
+STR_RANDOM_SEED_OSKTITLE                                        :{BLACK}輸入亂數種子
 STR_LAND_GENERATOR                                              :{BLACK}地形產生器
 STR_TREE_PLACER                                                 :{BLACK}植樹演算法:
 STR_HEIGHTMAP_ROTATION                                          :{BLACK}高度圖旋轉:
@@ -3376,7 +3406,9 @@
 STR_TRANSPARENT_BUILDINGS_DESC                                  :{BLACK}將透明度套用於建物,如車站、廠棚、路標及電線
 STR_TRANSPARENT_BRIDGES_DESC                                    :{BLACK}將透明度套用於橋樑
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}將透明度套用於設施,如燈塔、天線塔等
+STR_TRANSPARENT_CATENARY_DESC                                   :{BLACK}切換供電線透明與否。CTRL+左鍵 可鎖定。
 STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}將透明度套用於運載顯示表
+STR_TRANSPARENT_INVISIBLE_DESC                                  :{BLACK}完全隱藏物件
 
 STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
 STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
@@ -3432,6 +3464,7 @@
 #### Improved sign GUI
 STR_NEXT_SIGN_TOOLTIP                                           :{BLACK}前往下一個標誌
 STR_PREVIOUS_SIGN_TOOLTIP                                       :{BLACK}前往前一個標誌
+STR_SIGN_OSKTITLE                                               :{BLACK}輸入標誌名稱
 
 ########
 
@@ -3506,4 +3539,12 @@
 ########
 
 ############ on screen keyboard
+STR_OSK_KEYBOARD_LAYOUT                                         :`1234567890-=\qwertyuiop[]asdfghjkl;'  zxcvbnm,./ .
+STR_OSK_KEYBOARD_LAYOUT_CAPS                                    :~!@#$%^&*()_+|QWERTYUIOP{{}}ASDFGHJKL:"  ZXCVBNM<>? .
 ########
+
+############ town controlled noise level
+STR_CONFIG_PATCHES_NOISE_LEVEL                                  :{LTBLUE}允許城鎮控制機場噪音: {ORANGE}{STRING}
+STR_NOISE_IN_TOWN                                               :{BLACK}城鎮噪音限制: {ORANGE}{COMMA}{BLACK}  最大: {ORANGE}{COMMA}
+STR_STATION_NOISE                                               :{BLACK}產生噪音: {GOLD}{COMMA}
+########
--- a/src/lang/turkish.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/turkish.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -2905,8 +2905,6 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Kamyonun taşıyacağı kargo türünü seçin
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :İskele yapımı
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}İskele yapımı
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Buraya iskele yapılamaz...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Tersanesi
 STR_9804_NEW_SHIPS                                              :{BLACK}Yeni gemi
--- a/src/lang/ukrainian.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/ukrainian.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -34,9 +34,8 @@
 STR_0012_OIL                                                    :нафта
 STR_0012_OIL.r                                                  :нафти
 STR_0012_OIL.z                                                  :нафту
-STR_0013_LIVESTOCK                                              :тварини
-STR_0013_LIVESTOCK.r                                            :тварин
-STR_0013_LIVESTOCK.z                                            :тварин
+STR_0013_LIVESTOCK                                              :худоба
+STR_0013_LIVESTOCK.z                                            :худобу
 STR_0014_GOODS                                                  :товари
 STR_0014_GOODS.r                                                :товарів
 STR_0014_GOODS.z                                                :товари
@@ -127,9 +126,8 @@
 STR_0032_OIL                                                    :нафта
 STR_0032_OIL.r                                                  :нафти
 STR_0032_OIL.z                                                  :нафту
-STR_0033_LIVESTOCK                                              :тварини
-STR_0033_LIVESTOCK.r                                            :тварин
-STR_0033_LIVESTOCK.z                                            :тварин
+STR_0033_LIVESTOCK                                              :худоба
+STR_0033_LIVESTOCK.z                                            :худобу
 STR_0034_GOODS                                                  :товари
 STR_0034_GOODS.r                                                :товарів
 STR_0034_GOODS.z                                                :товари
@@ -213,7 +211,7 @@
 STR_QUANTITY_COAL                                               :{WEIGHT} вугілля
 STR_QUANTITY_MAIL                                               :{COMMA} сум{P ка ки ок} пошти
 STR_QUANTITY_OIL                                                :{VOLUME} нафти
-STR_QUANTITY_LIVESTOCK                                          :{COMMA} гол{P ова ови ів} тварин{P и и ""}
+STR_QUANTITY_LIVESTOCK                                          :{COMMA} кор{P ова ови ів}
 STR_QUANTITY_GOODS                                              :{COMMA} ящи{P к ки ків} товарів
 STR_QUANTITY_GRAIN                                              :{WEIGHT} зерна
 STR_QUANTITY_WOOD                                               :{WEIGHT} деревини
@@ -395,9 +393,9 @@
 STR_012D                                                        :{WHITE}{STRING}
 STR_012E_CANCEL                                                 :{BLACK}Відміна
 STR_012F_OK                                                     :{BLACK}Так
-STR_0130_RENAME                                                 :{BLACK}Ім'я
-STR_0131_TOO_MANY_NAMES_DEFINED                                 :{WHITE}Дуже багато імен
-STR_0132_CHOSEN_NAME_IN_USE_ALREADY                             :{WHITE}Таке ім'я вже є
+STR_0130_RENAME                                                 :{BLACK}Назва
+STR_0131_TOO_MANY_NAMES_DEFINED                                 :{WHITE}Дуже багато назв
+STR_0132_CHOSEN_NAME_IN_USE_ALREADY                             :{WHITE}Така назва вже є
 
 STR_OSNAME_WINDOWS                                              :Windows
 STR_OSNAME_UNIX                                                 :Unix
@@ -492,7 +490,7 @@
 STR_SORT_BY_TYPE                                                :за типом
 STR_SORT_BY_TRANSPORTED                                         :за перевезенням
 STR_SORT_BY_NAME                                                :{BLACK}за назвою
-STR_SORT_BY_DROPDOWN_NAME                                       :Назва
+STR_SORT_BY_DROPDOWN_NAME                                       :за назвою
 STR_SORT_BY_DATE                                                :{BLACK}за датою
 STR_SORT_BY_NUMBER                                              :за номером
 STR_SORT_BY_PROFIT_LAST_YEAR                                    :за прибутком минулого року
@@ -501,19 +499,19 @@
 STR_SORT_BY_RELIABILITY                                         :за надійністю
 STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE                        :за місткістю
 STR_SORT_BY_MAX_SPEED                                           :за швидкістю
-STR_SORT_BY_MODEL                                               :Модель
+STR_SORT_BY_MODEL                                               :за моделлю
 STR_SORT_BY_VALUE                                               :за ціною
-STR_SORT_BY_LENGTH                                              :Довжина
-STR_SORT_BY_FACILITY                                            :Вид станцій
+STR_SORT_BY_LENGTH                                              :за довжиною
+STR_SORT_BY_FACILITY                                            :за типом станції
 STR_SORT_BY_WAITING                                             :за ціною вантажу
 STR_SORT_BY_RATING_MAX                                          :Рейтинг вантажів
-STR_ENGINE_SORT_ENGINE_ID                                       :ID (класичне)
-STR_ENGINE_SORT_COST                                            :Ціна
-STR_ENGINE_SORT_POWER                                           :Потужність
-STR_ENGINE_SORT_INTRO_DATE                                      :Дата випуску
-STR_ENGINE_SORT_RUNNING_COST                                    :Вартість експлуатації
-STR_ENGINE_SORT_POWER_VS_RUNNING_COST                           :Потужність/Вартість експлуатації
-STR_ENGINE_SORT_CARGO_CAPACITY                                  :Місткість
+STR_ENGINE_SORT_ENGINE_ID                                       :за ID (класичне)
+STR_ENGINE_SORT_COST                                            :за ціною
+STR_ENGINE_SORT_POWER                                           :за потужністю
+STR_ENGINE_SORT_INTRO_DATE                                      :за датою випуску
+STR_ENGINE_SORT_RUNNING_COST                                    :за вартістю експлуатації
+STR_ENGINE_SORT_POWER_VS_RUNNING_COST                           :за потужністю/вартістю експлуатації
+STR_ENGINE_SORT_CARGO_CAPACITY                                  :за місткістю
 STR_NO_WAITING_CARGO                                            :{BLACK}Звідси поки що нічого перевозити
 STR_SELECT_ALL_FACILITIES                                       :{BLACK}Вибрати весь транспорт
 STR_SELECT_ALL_TYPES                                            :{BLACK}Вибрати всі типи вантажів
@@ -728,7 +726,7 @@
 STR_MESSAGES_ALL                                                :{YELLOW}Відображати повідомлення: відкл. / коротко / повно
 STR_MESSAGE_SOUND                                               :{YELLOW}Звукове сповіщення для підсумкових новин
 STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO                       :{WHITE}...дуже далеко від попереднього пункту призначення
-STR_0211_TOP_COMPANIES_WHO_REACHED                              :{BIGFONT}{BLACK}Кращі компанії, що досягли {NUM}{}({STRING} рівень)
+STR_0211_TOP_COMPANIES_WHO_REACHED                              :{BIGFONT}{BLACK}Кращі компанії, які досягли {NUM}{}({STRING} рівень)
 STR_TOP_COMPANIES_NETWORK_GAME                                  :{BIGFONT}{BLACK}Таблиця компаній з {NUM}
 STR_0212                                                        :{BIGFONT}{COMMA}.
 STR_0213_BUSINESSMAN                                            :Бізнесмен
@@ -768,7 +766,7 @@
 STR_0239_SITE_UNSUITABLE                                        :{WHITE}...невідповідне місце
 STR_023A_TOO_MANY_TOWNS                                         :{WHITE}...забагато міст
 STR_CANNOT_GENERATE_TOWN                                        :{WHITE}Не можна створити місто
-STR_NO_SPACE_FOR_TOWN                                           :{WHITE}...На карті немає вільного місця
+STR_NO_SPACE_FOR_TOWN                                           :{WHITE}...на карті немає вільного місця
 STR_023B_INCREASE_SIZE_OF_TOWN                                  :{BLACK}Збільшити розмір міста
 STR_023C_EXPAND                                                 :{BLACK}Розширити
 STR_023D_RANDOM_TOWN                                            :{BLACK}Випадкове місто
@@ -919,7 +917,7 @@
 ############ range for menu starts
 STR_02D5_LAND_BLOCK_INFO                                        :Інформація про ділянку
 STR_02D6                                                        :
-STR_CONSOLE_SETTING                                             :Вкл/викл консоль
+STR_CONSOLE_SETTING                                             :Вкл./відкл. консоль
 STR_02D7_SCREENSHOT_CTRL_S                                      :Копія екрану (Ctrl-S)
 STR_02D8_GIANT_SCREENSHOT_CTRL_G                                :Копія всієї карти (Ctrl-G)
 STR_02D9_ABOUT_OPENTTD                                          :Про гру 'OpenTTD'
@@ -971,7 +969,7 @@
 STR_0302_DISPLAY_DIFFICULTY_OPTIONS                             :{BLACK}Показати налаштування складності
 STR_0303_START_A_NEW_GAME_USING                                 :{BLACK}Почати нову гру, використовуючи сценарій
 STR_0304_QUIT                                                   :{BLACK}Вихід
-STR_0305_QUIT_OPENTTD                                           :{BLACK}покинути 'OpenTTD'
+STR_0305_QUIT_OPENTTD                                           :{BLACK}Вийти з OpenTTD
 STR_0307_OPENTTD                                                :{WHITE}OpenTTD {REV}
 STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...можна будувати лише у містах
 STR_030E_SELECT_TEMPERATE_LANDSCAPE                             :{BLACK}Вибрати 'помірний' клімат
@@ -1098,7 +1096,7 @@
 
 STR_PASSENGERS                                                  :пасАжир
 STR_BAGS                                                        :мішків
-STR_TONS                                                        :тонИ
+STR_TONS                                                        :тони
 STR_LITERS                                                      :літрів
 STR_ITEMS                                                       :штук
 STR_CRATES                                                      :ЯщикИ
@@ -1216,7 +1214,7 @@
 STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION                           :{LTBLUE}Обертання карти висот: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE         :Проти годинникової
 STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_CLOCKWISE                 :За годинниковою
-STR_CONFIG_PATCHES_SE_FLAT_WORLD_HEIGHT                         :{LTBLUE}Рівень висоти для карт з плоским рельєфом: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SE_FLAT_WORLD_HEIGHT                         :{LTBLUE}Рівень висоти для карт з пласким рельєфом: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_STATION_SPREAD                               :{LTBLUE}Макс. довжина станції: {ORANGE}{STRING} {RED}Велике значення гальмує гру
 STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Автоматичний техогляд гелікоптерів на площадках: {ORANGE}{STRING}
@@ -1416,6 +1414,9 @@
 STR_BUILD_LOCKS_TIP                                             :{BLACK}Будувати шлюз
 STR_LANDINFO_LOCK                                               :Шлюз
 
+STR_CANT_PLACE_RIVERS                                           :{WHITE}Тут не можна зробити річку...
+STR_LANDINFO_RIVER                                              :Річка
+
 STR_BUOY_IS_IN_USE                                              :{WHITE}...бакен використовується!
 
 STR_LANDINFO_COORDS                                             :{BLACK}Координати: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
@@ -1469,7 +1470,7 @@
 STR_RAIL_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Виберіть вид вантажу для перевезення
 STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED                             :{BLACK}Переобладнати поїзд для перевезення вибраного виду вантажу
 STR_RAIL_CAN_T_REFIT_VEHICLE                                    :{WHITE}Неможливо переобладнати поїзд...
-STR_CONFIG_PATCHES_SERVINT_ISPERCENT                            :{LTBLUE}Тривалість обслуговування у відсотках: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SERVINT_ISPERCENT                            :{LTBLUE}Інтервал техогляду у відсотках: {ORANGE}{STRING}
 STR_CONFIG_GAME_PRODUCTION                                      :{WHITE}Змінити виробництво
 
 TEMP_AI_IN_PROGRESS                                             :{WHITE}Ласкаво просимо до тестування нового інтелекту. Якщо Ви помітили недолік, надішліть копію екрану у форум.
@@ -1720,8 +1721,8 @@
 
 STR_PNGMAP_ERROR                                                :{WHITE}Неможливо завантажити ландшафт з PNG...
 STR_PNGMAP_ERR_FILE_NOT_FOUND                                   :{WHITE}...файл не знайдено
-STR_PNGMAP_ERR_IMAGE_TYPE                                       :{WHITE}...неможливо конвертувати. треба 8 чи 24-bit PNG формат.
-STR_PNGMAP_ERR_MISC                                             :{WHITE}...Помилка. (можливо зіпсований файл)
+STR_PNGMAP_ERR_IMAGE_TYPE                                       :{WHITE}...неможливо конвертувати. Треба 8 чи 24-bit PNG формат.
+STR_PNGMAP_ERR_MISC                                             :{WHITE}...помилка (можливо, зіпсований файл).
 
 STR_BMPMAP_ERROR                                                :{WHITE}Не можу завантажити ландшафт з BMP...
 STR_BMPMAP_ERR_IMAGE_TYPE                                       :{WHITE}...неможливо перетворити тип зображення
@@ -1803,7 +1804,7 @@
 STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Будівництво дороги
 STR_WHITE_TRAMWAY_CONSTRUCTION                                  :{WHITE}Будівництво трамвайної колії
 STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Виберіть дорожній міст
-STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}... односторонні дороги не можуть перетинатись
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}...односторонні дороги не можуть перетинатись
 STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Неможливо тут побудувати дорогу ...
 STR_CAN_T_BUILD_TRAMWAY_HERE                                    :{WHITE}Тут не можна побудувати трамвайну колію...
 STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Неможливо прибрати дорогу звідси...
@@ -2068,6 +2069,7 @@
 STR_3804_WATER                                                  :Вода
 STR_3805_COAST_OR_RIVERBANK                                     :Берег
 STR_3806_SHIP_DEPOT                                             :Корабельне депо
+STR_AQUEDUCT                                                    :Акведук
 STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...Неможливо будувати на воді
 STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Спочатку потрібно прибрати канал
 
@@ -2339,35 +2341,35 @@
 STR_CITY_APPROVAL                                               :{LTBLUE}Відношення влади до перебудови території міста: {ORANGE}{STRING}
 ############ range for difficulty settings ends
 
-STR_NONE                                                        :Нема
+STR_NONE                                                        :нема
 STR_NUM_VERY_LOW                                                :дуже мало
-STR_6816_LOW                                                    :МалО
-STR_6817_NORMAL                                                 :Нормально
-STR_6818_HIGH                                                   :Багато
+STR_6816_LOW                                                    :мало
+STR_6817_NORMAL                                                 :нормально
+STR_6818_HIGH                                                   :багато
 STR_6819                                                        :{BLACK}{SMALLLEFTARROW}
 STR_681A                                                        :{BLACK}{SMALLRIGHTARROW}
 STR_681B_VERY_SLOW                                              :Дуже повільно
 STR_681C_SLOW                                                   :Повільно
-STR_681D_MEDIUM                                                 :Середньо
-STR_681E_FAST                                                   :Швидко
-STR_681F_VERY_FAST                                              :Дуже швидко
-STR_VERY_LOW                                                    :Дуже мало
-STR_6820_LOW                                                    :МаЛо
-STR_6821_MEDIUM                                                 :Середньо
-STR_6822_HIGH                                                   :Багато
-STR_6823_NONE                                                   :Відкл.
-STR_6824_REDUCED                                                :Знижено
-STR_6825_NORMAL                                                 :Нормально
+STR_681D_MEDIUM                                                 :середньо
+STR_681E_FAST                                                   :швидко
+STR_681F_VERY_FAST                                              :дуже швидко
+STR_VERY_LOW                                                    :дуже мало
+STR_6820_LOW                                                    :мало
+STR_6821_MEDIUM                                                 :середньо
+STR_6822_HIGH                                                   :багато
+STR_6823_NONE                                                   :відкл.
+STR_6824_REDUCED                                                :знижено
+STR_6825_NORMAL                                                 :нормально
 STR_6826_X1_5                                                   :x1.5
 STR_6827_X2                                                     :x2
 STR_6828_X3                                                     :x3
 STR_6829_X4                                                     :x4
-STR_682A_VERY_FLAT                                              :Дуже рівний
-STR_682B_FLAT                                                   :Рівнинний
-STR_682C_HILLY                                                  :Горбкуватий
-STR_682D_MOUNTAINOUS                                            :Гористий
-STR_682E_STEADY                                                 :Стабільна
-STR_682F_FLUCTUATING                                            :Нестійка
+STR_682A_VERY_FLAT                                              :плаский
+STR_682B_FLAT                                                   :рівнинний
+STR_682C_HILLY                                                  :горбкуватий
+STR_682D_MOUNTAINOUS                                            :гористий
+STR_682E_STEADY                                                 :стабільна
+STR_682F_FLUCTUATING                                            :нестійка
 STR_6830_IMMEDIATE                                              :відразу
 STR_6831_3_MONTHS_AFTER_PLAYER                                  :3 місяці після гравця
 STR_6832_6_MONTHS_AFTER_PLAYER                                  :6 місяців після гравця
@@ -2377,9 +2379,9 @@
 STR_6836_OFF                                                    :відкл.
 STR_6837_ON                                                     :вкл.
 STR_6838_SHOW_HI_SCORE_CHART                                    :{BLACK}Показати таблицю рекордів
-STR_PERMISSIVE                                                  :Допустиме
-STR_TOLERANT                                                    :Терпиме
-STR_HOSTILE                                                     :Вороже
+STR_PERMISSIVE                                                  :допустиме
+STR_TOLERANT                                                    :терпиме
+STR_HOSTILE                                                     :вороже
 
 ##id 0x7000
 STR_7000                                                        :
@@ -2583,7 +2585,7 @@
 STR_801C_MAIL_VAN                                               :Поштовий
 STR_801D_COAL_CAR                                               :Вугільний
 STR_801E_OIL_TANKER                                             :Нафтовий
-STR_801F_LIVESTOCK_VAN                                          :Вагон для тварин
+STR_801F_LIVESTOCK_VAN                                          :Вагон для худоби
 STR_8020_GOODS_VAN                                              :Товарний
 STR_8021_GRAIN_HOPPER                                           :Вагон для зерна
 STR_8022_WOOD_TRUCK                                             :Вагон для деревини
@@ -2613,7 +2615,7 @@
 STR_803A_MAIL_VAN                                               :Вагон для пошти
 STR_803B_COAL_CAR                                               :Вагон для вугілля
 STR_803C_OIL_TANKER                                             :Цистерна для нафти
-STR_803D_LIVESTOCK_VAN                                          :вантажівка для тварин
+STR_803D_LIVESTOCK_VAN                                          :вантажівка для худоби
 STR_803E_GOODS_VAN                                              :вантажівка для товарів
 STR_803F_GRAIN_HOPPER                                           :вагон для зерна
 STR_8040_WOOD_TRUCK                                             :лісовоз
@@ -2824,14 +2826,17 @@
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Поїзд на шляху
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
 STR_8805                                                        :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
+STR_ORDER_NON_STOP                                              :{BLACK}Без зупинки
 STR_ORDER_GO_TO                                                 :Прямувати до
 STR_ORDER_GO_NON_STOP_TO                                        :Прямувати без зупинок до
 STR_ORDER_GO_VIA                                                :Прямувати через
 STR_ORDER_GO_NON_STOP_VIA                                       :Прямувати без зупинок через
+STR_ORDER_TOGGLE_FULL_LOAD                                      :{BLACK}Повністю завантажити будь-який вид вантажу
 STR_ORDER_DROP_LOAD_IF_POSSIBLE                                 :Завантажитись при нагоді
 STR_ORDER_DROP_FULL_LOAD_ALL                                    :Повністю завантажити всі вантажі
 STR_ORDER_DROP_FULL_LOAD_ANY                                    :Повністю завантажити будь-який вид вантажу
 STR_ORDER_DROP_NO_LOADING                                       :Не завантажуватись
+STR_ORDER_TOGGLE_UNLOAD                                         :{BLACK}Розвантажити все
 STR_ORDER_DROP_UNLOAD_IF_ACCEPTED                               :Розвантажитись, якщо приймають
 STR_ORDER_DROP_UNLOAD                                           :Розвантажити все
 STR_ORDER_DROP_TRANSFER                                         :Передати
@@ -3112,8 +3117,9 @@
 STR_ROAD_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Оберіть тип вантажу для перевезення
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Будувати порт
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Будівництво порту
+STR_9800_WATERWAYS_CONSTRUCTION                                 :Будівництво водних шляхів
+STR_9801_WATERWAYS_CONSTRUCTION                                 :{WHITE}Будівництво водних шляхів
+STR_9801_WATERWAYS_CONSTRUCTION_SE                              :{WHITE}Водні шляхи
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Неможливо будувати порт тут...
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Док
 STR_9804_NEW_SHIPS                                              :{BLACK}Нові кораблі
@@ -3166,6 +3172,8 @@
 STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Жителі святкують . . .{}Перший корабель з'явився на {STATION}!
 STR_9834_POSITION_BUOY_WHICH_CAN                                :{BLACK}Розмістити бакен, який можна використовувати як точку маршруту
 STR_9835_CAN_T_POSITION_BUOY_HERE                               :{WHITE}Неможливо розмістити бакен тут...
+STR_BUILD_AQUEDUCT                                              :{BLACK}Побудувати акведук
+STR_CAN_T_BUILD_AQUEDUCT_HERE                                   :{WHITE}Тут не можна побудувати акведук...
 STR_9836_RENAME                                                 :{BLACK}Зміна назви
 STR_9837_RENAME_SHIP_TYPE                                       :{BLACK}Перейменувати тип корабля
 STR_9838_RENAME_SHIP_TYPE                                       :{WHITE}Перейменувати тип корабля
@@ -3318,6 +3326,7 @@
 STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER                            :{STRING} потребує версію OpenTTD не нижче {STRING}.
 STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE                          :GRF-файл, для якого це призначалось перекласти
 STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED                        :Завантажено забагато NewGRF-файлів.
+STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC                       :Завантаження {STRING} як статичного NewGRF з {STRING} може викликати десинхронізацію.
 
 STR_NEWGRF_ADD                                                  :{BLACK}Додати
 STR_NEWGRF_ADD_TIP                                              :{BLACK}Додати файли NewGRF до списку
@@ -3550,7 +3559,7 @@
 
 STR_SMALL_AIRPORTS                                              :{BLACK}Малі аеропорти
 STR_LARGE_AIRPORTS                                              :{BLACK}Великі аеропорти
-STR_HUB_AIRPORTS                                                :{BLACK}Мега-аеропорти
+STR_HUB_AIRPORTS                                                :{BLACK}Вузлові аеропорти
 STR_HELIPORTS                                                   :{BLACK}Геліко-аеропорт
 
 ############ Tooltip measurment
--- a/src/lang/unfinished/latvian.txt	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/lang/unfinished/latvian.txt	Wed Jul 09 13:32:13 2008 +0000
@@ -1828,8 +1828,6 @@
 
 
 ##id 0x9800
-STR_9800_DOCK_CONSTRUCTION                                      :Ostas uzbūve
-STR_9801_DOCK_CONSTRUCTION                                      :{WHITE}Ostas uzbūve
 STR_9802_CAN_T_BUILD_DOCK_HERE                                  :{WHITE}Nevar uzbūvēt ostu šeit
 STR_9803_SHIP_DEPOT                                             :{WHITE}{TOWN} Kuģu depo
 STR_9804_NEW_SHIPS                                              :{BLACK}Jauni kuģi
--- a/src/map.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/map.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -261,12 +261,12 @@
  * @param tile to start the search from. Upon completion, it will return the tile matching the search
  * @param size: number of tiles per side of the desired search area
  * @param proc: callback testing function pointer.
- * @param data to be passed to the callback function. Depends on the implementation
+ * @param user_data to be passed to the callback function. Depends on the implementation
  * @return result of the search
  * @pre proc != NULL
  * @pre size > 0
  */
-bool CircularTileSearch(TileIndex *tile, uint size, TestTileOnSearchProc proc, uint32 data)
+bool CircularTileSearch(TileIndex *tile, uint size, TestTileOnSearchProc proc, void *user_data)
 {
 	uint n, x, y;
 	DiagDirection dir;
@@ -281,7 +281,7 @@
 		/* If the length of the side is uneven, the center has to be checked
 		 * separately, as the pattern of uneven sides requires to go around the center */
 		n = 2;
-		if (proc(TileXY(x, y), data)) {
+		if (proc(TileXY(x, y), user_data)) {
 			*tile = TileXY(x, y);
 			return true;
 		}
@@ -304,7 +304,7 @@
 			uint j;
 			for (j = n; j != 0; j--) {
 				if (x <= MapMaxX() && y <= MapMaxY() && ///< Is the tile within the map?
-						proc(TileXY(x, y), data)) {     ///< Is the callback successful?
+						proc(TileXY(x, y), user_data)) {     ///< Is the callback successful?
 					*tile = TileXY(x, y);
 					return true;                        ///< then stop the search
 				}
--- a/src/map_func.h	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/map_func.h	Wed Jul 09 13:32:13 2008 +0000
@@ -383,15 +383,15 @@
  * A callback function type for searching tiles.
  *
  * @param tile The tile to test
- * @param data additional data for the callback function to use
+ * @param user_data additional data for the callback function to use
  * @return A boolean value, depend on the definition of the function.
  */
-typedef bool TestTileOnSearchProc(TileIndex tile, uint32 data);
+typedef bool TestTileOnSearchProc(TileIndex tile, void *user_data);
 
 /**
  * Searches for some cirumstances of a tile around a given tile with a helper function.
  */
-bool CircularTileSearch(TileIndex *tile, uint size, TestTileOnSearchProc proc, uint32 data);
+bool CircularTileSearch(TileIndex *tile, uint size, TestTileOnSearchProc proc, void *user_data);
 
 /**
  * Get a random tile out of a given seed.
--- a/src/misc_gui.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/misc_gui.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -59,12 +59,12 @@
 static const Widget _land_info_widgets[] = {
 {   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                       STR_018B_CLOSE_WINDOW},
 {    WWT_CAPTION,   RESIZE_NONE,    14,    11,   279,     0,    13, STR_01A3_LAND_AREA_INFORMATION, STR_018C_WINDOW_TITLE_DRAG_THIS},
-{      WWT_PANEL,   RESIZE_NONE,    14,     0,   279,    14,    92, 0x0,                            STR_NULL},
+{      WWT_PANEL, RESIZE_BOTTOM,    14,     0,   279,    14,    99, 0x0,                            STR_NULL},
 {    WIDGETS_END},
 };
 
 static const WindowDesc _land_info_desc = {
-	WDP_AUTO, WDP_AUTO, 280, 93, 280, 93,
+	WDP_AUTO, WDP_AUTO, 280, 100, 280, 100,
 	WC_LAND_INFO, WC_NONE,
 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
 	_land_info_widgets,
@@ -86,15 +86,15 @@
 	{
 		this->DrawWidgets();
 
-		uint y = 16;
+		uint y = 21;
 		for (uint i = 0; i < LAND_INFO_CENTERED_LINES; i++) {
-			if (StrEmpty(this->landinfo_data[i])) continue;
+			if (StrEmpty(this->landinfo_data[i])) break;
 
 			DoDrawStringCentered(140, y, this->landinfo_data[i], i == 0 ? TC_LIGHT_BLUE : TC_FROMSTRING);
-			y += 11;
+			y += i == 0 ? 16 : 12;
 		}
 
-		y += 5;
+		y += 6;
 
 		if (!StrEmpty(this->landinfo_data[LAND_INFO_MULTICENTER_LINE])) DrawStringMultiCenter(140, y, BindCString(this->landinfo_data[LAND_INFO_MULTICENTER_LINE]), this->width - 4);
 	}
@@ -181,10 +181,8 @@
 			line_nr++;
 		}
 
-		/* Remaining lines stay empty */
-		for (; line_nr < LAND_INFO_CENTERED_LINES; line_nr++) {
-			this->landinfo_data[line_nr][0] = '\0';
-		}
+		/* Mark last line empty */
+		this->landinfo_data[line_nr][0] = '\0';
 
 		/* Cargo acceptance is displayed in a extra multiline */
 		char *strp = GetString(this->landinfo_data[LAND_INFO_MULTICENTER_LINE], STR_01CE_CARGO_ACCEPTED, lastof(this->landinfo_data[LAND_INFO_MULTICENTER_LINE]));
@@ -211,6 +209,12 @@
 		}
 		if (!found) this->landinfo_data[LAND_INFO_MULTICENTER_LINE][0] = '\0';
 
+		if (found) line_nr += 2;
+
+		if (line_nr > 6) ResizeWindow(this, 0, 12 * (line_nr - 6));
+
+		this->FindWindowPlacementAndResize(&_land_info_desc);
+
 #if defined(_DEBUG)
 #	define LANDINFOD_LEVEL 0
 #else
@@ -226,8 +230,6 @@
 		DEBUG(misc, LANDINFOD_LEVEL, "m6           = %#x", _m[tile].m6);
 		DEBUG(misc, LANDINFOD_LEVEL, "m7           = %#x", _me[tile].m7);
 #undef LANDINFOD_LEVEL
-
-		this->FindWindowPlacementAndResize(&_land_info_desc);
 	}
 };
 
--- a/src/network/network.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/network/network.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -41,7 +41,6 @@
 #endif /* DEBUG_DUMP_COMMANDS */
 #include "table/strings.h"
 
-bool _network_reload_cfg;
 bool _network_server;     ///< network-server is active
 bool _network_available;  ///< is network mode available?
 bool _network_dedicated;  ///< are we a dedicated server?
--- a/src/newgrf.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/newgrf.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -235,6 +235,23 @@
 	return file;
 }
 
+/** Reset all NewGRFData that was used only while processing data */
+static void ClearTemporaryNewGRFData()
+{
+	/* Clear the GOTO labels used for GRF processing */
+	for (GRFLabel *l = _cur_grffile->label; l != NULL;) {
+		GRFLabel *l2 = l->next;
+		free(l);
+		l = l2;
+	}
+	_cur_grffile->label = NULL;
+
+	/* Clear the list of spritegroups */
+	free(_cur_grffile->spritegroups);
+	_cur_grffile->spritegroups = NULL;
+	_cur_grffile->spritegroups_count = 0;
+}
+
 
 typedef std::map<StringID *, uint32> StringIDToGRFIDMapping;
 StringIDToGRFIDMapping _string_to_grf_mapping;
@@ -3826,6 +3843,9 @@
 	c->error->data = strdup(_cur_grfconfig->name);
 	c->error->severity = STR_NEWGRF_ERROR_MSG_FATAL;
 	c->error->message  = STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC;
+
+	ClearTemporaryNewGRFData();
+	_skip_sprites = -1;
 }
 
 /* Action 0x07 */
@@ -3984,6 +4004,7 @@
 		/* If an action 8 hasn't been encountered yet, disable the grf. */
 		if (_cur_grfconfig->status != GCS_ACTIVATED) {
 			_cur_grfconfig->status = GCS_DISABLED;
+			ClearTemporaryNewGRFData();
 		}
 	}
 }
@@ -4156,7 +4177,7 @@
 		/* This is a fatal error, so make sure the GRF is deactivated and no
 		 * more of it gets loaded. */
 		_cur_grfconfig->status = GCS_DISABLED;
-
+		ClearTemporaryNewGRFData();
 		_skip_sprites = -1;
 	}
 
@@ -4339,6 +4360,7 @@
 		/* Deactivate GRF */
 		grfmsg(0, "ParamSet: GRM: Unable to allocate %d %s, deactivating", count, type);
 		_cur_grfconfig->status = GCS_DISABLED;
+		ClearTemporaryNewGRFData();
 		_skip_sprites = -1;
 		return UINT_MAX;
 	}
@@ -4417,7 +4439,7 @@
 							if (_cur_spriteid + count >= 16384) {
 								grfmsg(0, "ParamSet: GRM: Unable to allocate %d sprites; try changing NewGRF order", count);
 								_cur_grfconfig->status = GCS_DISABLED;
-
+								ClearTemporaryNewGRFData();
 								_skip_sprites = -1;
 								return;
 							}
@@ -4778,6 +4800,7 @@
 					grfmsg(0, "FeatureTownName: definition 0x%02X doesn't exist, deactivating", ref_id);
 					DelGRFTownName(grfid);
 					_cur_grfconfig->status = GCS_DISABLED;
+					ClearTemporaryNewGRFData();
 					_skip_sprites = -1;
 					return;
 				}
@@ -5068,6 +5091,7 @@
 		_cur_grfconfig->error = error;
 
 		_cur_grfconfig->status = GCS_DISABLED;
+		ClearTemporaryNewGRFData();
 		_skip_sprites = -1;
 		return;
 	}
@@ -5433,23 +5457,6 @@
 	InitializeSpriteGroupPool();
 }
 
-/** Reset all NewGRFData that was used only while processing data */
-static void ClearTemporaryNewGRFData()
-{
-	/* Clear the GOTO labels used for GRF processing */
-	for (GRFLabel *l = _cur_grffile->label; l != NULL;) {
-		GRFLabel *l2 = l->next;
-		free(l);
-		l = l2;
-	}
-	_cur_grffile->label = NULL;
-
-	/* Clear the list of spritegroups */
-	free(_cur_grffile->spritegroups);
-	_cur_grffile->spritegroups = NULL;
-	_cur_grffile->spritegroups_count = 0;
-}
-
 static void BuildCargoTranslationMap()
 {
 	memset(_cur_grffile->cargo_map, 0xFF, sizeof(_cur_grffile->cargo_map));
--- a/src/newgrf_config.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/newgrf_config.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -15,6 +15,7 @@
 #include "gamelog.h"
 #include "network/network_type.h"
 
+#include "tar_type.h"
 #include "fileio.h"
 #include "fios.h"
 #include <sys/stat.h>
--- a/src/newgrf_house.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/newgrf_house.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -201,6 +201,113 @@
 	return GetNearbyTileInformation(tile);
 }
 
+/** Structure with user-data for SearchNearbyHouseXXX - functions */
+typedef struct {
+	const HouseSpec *hs;  ///< Specs of the house, that startet the search
+	TileIndex north_tile; ///< Northern tile of the house.
+} SearchNearbyHouseData;
+
+/** Callback function to search a house by its HouseID
+ * @param tile TileIndex to be examined
+ * @param user_data SearchNearbyHouseData
+ * @return true or false, if found or not
+ */
+static bool SearchNearbyHouseID(TileIndex tile, void *user_data)
+{
+	if (IsTileType(tile, MP_HOUSE)) {
+		HouseID house = GetHouseType(tile); // tile been examined
+		const HouseSpec *hs = GetHouseSpecs(house);
+		if (hs->grffile != NULL) { // must be one from a grf file
+			SearchNearbyHouseData *nbhd = (SearchNearbyHouseData *)user_data;
+
+			TileIndex north_tile = tile + GetHouseNorthPart(house); // modifies 'house'!
+			if (north_tile == nbhd->north_tile) return false; // Always ignore origin house
+
+			return hs->local_id == nbhd->hs->local_id &&  // same local id as the one requested
+				hs->grffile->grfid == nbhd->hs->grffile->grfid;  // from the same grf
+		}
+	}
+	return false;
+}
+
+/** Callback function to search a house by its classID
+ * @param tile TileIndex to be examined
+ * @param user_data SearchNearbyHouseData
+ * @return true or false, if found or not
+ */
+static bool SearchNearbyHouseClass(TileIndex tile, void *user_data)
+{
+	if (IsTileType(tile, MP_HOUSE)) {
+		HouseID house = GetHouseType(tile); // tile been examined
+		const HouseSpec *hs = GetHouseSpecs(house);
+		if (hs->grffile != NULL) { // must be one from a grf file
+			SearchNearbyHouseData *nbhd = (SearchNearbyHouseData *)user_data;
+
+			TileIndex north_tile = tile + GetHouseNorthPart(house); // modifies 'house'!
+			if (north_tile == nbhd->north_tile) return false; // Always ignore origin house
+
+			return hs->class_id == nbhd->hs->class_id &&  // same classid as the one requested
+				hs->grffile->grfid == nbhd->hs->grffile->grfid;  // from the same grf
+		}
+	}
+	return false;
+}
+
+/** Callback function to search a house by its grfID
+ * @param tile TileIndex to be examined
+ * @param user_data SearchNearbyHouseData
+ * @return true or false, if found or not
+ */
+static bool SearchNearbyHouseGRFID(TileIndex tile, void *user_data)
+{
+	if (IsTileType(tile, MP_HOUSE)) {
+		HouseID house = GetHouseType(tile); // tile been examined
+		const HouseSpec *hs = GetHouseSpecs(house);
+		if (hs->grffile != NULL) { // must be one from a grf file
+			SearchNearbyHouseData *nbhd = (SearchNearbyHouseData *)user_data;
+
+			TileIndex north_tile = tile + GetHouseNorthPart(house); // modifies 'house'!
+			if (north_tile == nbhd->north_tile) return false; // Always ignore origin house
+
+			return hs->grffile->grfid == nbhd->hs->grffile->grfid;  // from the same grf
+		}
+	}
+	return false;
+}
+
+/** This function will activate a search around a central tile, looking for some houses
+ * that fit the requested characteristics
+ * @param parameter that is given by the callback.
+ *                  bits 0..6 radius of the search
+ *                  bits 7..8 search type i.e.: 0 = houseID/ 1 = classID/ 2 = grfID
+ * @param tile TileIndex from which to start the search
+ * @param house the HouseID that is associated to the house, the callback is called for
+ * @return the Manhattan distance from the center tile, if any, and 0 if failure
+ */
+static uint32 GetDistanceFromNearbyHouse(uint8 parameter, TileIndex tile, HouseID house)
+{
+	static TestTileOnSearchProc * const search_procs[3] = {
+		SearchNearbyHouseID,
+		SearchNearbyHouseClass,
+		SearchNearbyHouseGRFID,
+	};
+	TileIndex found_tile = tile;
+	uint8 searchtype = GB(parameter, 6, 2);
+	uint8 searchradius = GB(parameter, 0, 6);
+	if (searchtype >= lengthof(search_procs)) return 0;  // do not run on ill-defined code
+	if (searchradius < 1) return 0; // do not use a too low radius
+
+	SearchNearbyHouseData nbhd;
+	nbhd.hs = GetHouseSpecs(house);
+	nbhd.north_tile = tile + GetHouseNorthPart(house); // modifies 'house'!
+
+	/* Use a pointer for the tile to start the search. Will be required for calculating the distance*/
+	if (CircularTileSearch(&found_tile, 2 * searchradius + 1, search_procs[searchtype], &nbhd)) {
+		return DistanceManhattan(found_tile, tile);
+	}
+	return 0;
+}
+
 /**
  * HouseGetVariable():
  *
@@ -260,6 +367,12 @@
 			return IsTileType(testtile, MP_HOUSE) ? GetHouseAnimationFrame(testtile) : 0;
 		}
 
+		/* Cargo acceptance history of nearby stations */
+		/*case 0x64: not implemented yet */
+
+		/* Distance test for some house types */
+		case 0x65: return GetDistanceFromNearbyHouse(parameter, tile, object->u.house.house_id);
+
 		/* Read GRF parameter */
 		case 0x7F: return GetGRFParameter(object->u.house.house_id, parameter);
 	}
--- a/src/newgrf_industries.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/newgrf_industries.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -135,7 +135,7 @@
 
 static uint32 GetClosestIndustry(TileIndex tile, IndustryType type, const Industry *current)
 {
-	uint32 best_dist = MAX_UVALUE(uint32);
+	uint32 best_dist = UINT32_MAX;
 	const Industry *i;
 	FOR_ALL_INDUSTRIES(i) {
 		if (i->type != type || i == current) continue;
@@ -158,7 +158,7 @@
 {
 	uint32 GrfID = GetRegister(0x100);  ///< Get the GRFID of the definition to look for in register 100h
 	IndustryType ind_index;
-	uint32 closest_dist = MAX_UVALUE(uint32);
+	uint32 closest_dist = UINT32_MAX;
 	byte count = 0;
 
 	/* Determine what will be the industry type to look for */
--- a/src/news_gui.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/news_gui.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -51,7 +51,7 @@
 {
 	Player *p = GetPlayer((PlayerID)(ni->data_b));
 	DrawPlayerFace(p->face, p->player_color, 2, 23);
-	GfxFillRect(3, 23, 3 + 91, 23 + 118, PALETTE_TO_STRUCT_GREY | (1 << USE_COLORTABLE));
+	GfxFillRect(3, 23, 3 + 91, 23 + 118, PALETTE_TO_STRUCT_GREY, FILLRECT_RECOLOR);
 
 	SetDParam(0, p->index);
 
@@ -233,7 +233,7 @@
 					ViewPort *vp = this->viewport;
 					GfxFillRect(vp->left - this->left, vp->top - this->top,
 						vp->left - this->left + vp->width - 1, vp->top - this->top + vp->height - 1,
-						(this->ni->flags & NF_INCOLOR ? PALETTE_TO_TRANSPARENT : PALETTE_TO_STRUCT_GREY) | (1 << USE_COLORTABLE)
+						(this->ni->flags & NF_INCOLOR ? PALETTE_TO_TRANSPARENT : PALETTE_TO_STRUCT_GREY), FILLRECT_RECOLOR
 					);
 
 					CopyInDParam(0, this->ni->params, lengthof(this->ni->params));
--- a/src/oldloader.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/oldloader.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -867,9 +867,13 @@
 
 	if (!LoadChunk(ls, p, player_chunk)) return false;
 
+	if (_old_string_id == 0) {
+		p->is_active = false;
+		return true;
+	}
+
 	p->name_1 = RemapOldStringID(_old_string_id);
 	p->president_name_1 = RemapOldStringID(_old_string_id_2);
-	p->player_money = p->player_money;
 
 	if (num == 0) {
 		/* If the first player has no name, make sure we call it UNNAMED */
@@ -1411,7 +1415,7 @@
 
 	OCL_VAR ( OC_FILE_U32 | OC_VAR_I64,   1, &_economy.max_loan ),
 	OCL_VAR ( OC_FILE_U32 | OC_VAR_I64,   1, &_economy.max_loan_unround ),
-	OCL_VAR ( OC_FILE_U16 | OC_VAR_U32,   1, &_economy.fluct ),
+	OCL_VAR (  OC_INT16,    1, &_economy.fluct ),
 
 	OCL_VAR ( OC_UINT16,    1, &_disaster_delay ),
 
--- a/src/openttd.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/openttd.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -693,6 +693,8 @@
 
 static void MakeNewGameDone()
 {
+	SettingsDisableElrail(_settings_game.vehicle.disable_elrails);
+
 	/* In a dedicated server, the server does not play */
 	if (BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() == 0) {
 		SetLocalPlayer(PLAYER_SPECTATOR);
@@ -709,7 +711,6 @@
 	_current_player = _local_player;
 	DoCommandP(0, (_settings_client.gui.autorenew << 15 ) | (_settings_client.gui.autorenew_months << 16) | 4, _settings_client.gui.autorenew_money, NULL, CMD_SET_AUTOREPLACE);
 
-	SettingsDisableElrail(_settings_game.vehicle.disable_elrails);
 	InitializeRailGUI();
 
 #ifdef ENABLE_NETWORK
--- a/src/order_cmd.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/order_cmd.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -298,6 +298,18 @@
 	}
 }
 
+static uint GetOrderDistance(const Order *prev, const Order *cur, const Vehicle *v, int conditional_depth = 0)
+{
+	if (cur->IsType(OT_CONDITIONAL)) {
+		if (conditional_depth > v->num_orders) return 0;
+
+		conditional_depth++;
+		return max(GetOrderDistance(prev, &v->orders[cur->GetConditionSkipToOrder()], v, conditional_depth),
+				GetOrderDistance(prev, (prev + 1 == &v->orders[v->num_orders]) ? v->orders : (prev + 1), v, conditional_depth));
+	}
+
+	return DistanceManhattan(GetOrderLocation(*prev), GetOrderLocation(*cur));
+}
 
 /** Add an order to the orderlist of a vehicle.
  * @param tile unused
@@ -419,7 +431,7 @@
 			}
 
 			if (new_order.GetNonStopType() != ONSF_STOP_EVERYWHERE && v->type != VEH_TRAIN && v->type != VEH_ROAD) return CMD_ERROR;
-			if (new_order.GetDepotOrderType() & ~ODTFB_PART_OF_ORDERS) return CMD_ERROR;
+			if (new_order.GetDepotOrderType() & ~(ODTFB_PART_OF_ORDERS | ((new_order.GetDepotOrderType() & ODTFB_PART_OF_ORDERS) != 0 ? ODTFB_SERVICE : 0))) return CMD_ERROR;
 			if (new_order.GetDepotActionType() & ~ODATFB_NEAREST_DEPOT) return CMD_ERROR;
 			break;
 		}
@@ -468,10 +480,7 @@
 			if (++n == sel_ord && prev != NULL) break;
 		}
 		if (prev != NULL) {
-			uint dist = DistanceManhattan(
-				GetOrderLocation(*prev),
-				GetOrderLocation(new_order)
-			);
+			uint dist = GetOrderDistance(prev, &new_order, v);
 			if (dist >= 130) {
 				return_cmd_error(STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO);
 			}
--- a/src/players.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/players.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -672,7 +672,7 @@
  * if p1 = 2, then
  * - p2 = minimum amount of money available
  * if p1 = 3, then:
- * - p1 bits  8-15 = engine group
+ * - p1 bits 16-31 = engine group
  * - p2 bits  0-15 = old engine type
  * - p2 bits 16-31 = new engine type
  * if p1 = 4, then:
--- a/src/rail_cmd.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/rail_cmd.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -1112,6 +1112,7 @@
 
 	if (!ValParamTrackOrientation(track) ||
 			!IsTileType(tile, MP_RAILWAY) ||
+			!HasTrack(tile, track) ||
 			!EnsureNoTrainOnTrack(tile, track) ||
 			!HasSignalOnTrack(tile, track)) {
 		return CMD_ERROR;
--- a/src/rail_gui.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/rail_gui.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -1070,7 +1070,7 @@
 
 				if (statspec != NULL && statspec->name != 0) {
 					if (HasBit(statspec->callbackmask, CBM_STATION_AVAIL) && GB(GetStationCallback(CBID_STATION_AVAILABILITY, 0, 0, statspec, NULL, INVALID_TILE), 0, 8) == 0) {
-						GfxFillRect(8, y - 2, 127, y + 10, (1 << PALETTE_MODIFIER_GREYOUT));
+						GfxFillRect(8, y - 2, 127, y + 10, 0, FILLRECT_CHECKER);
 					}
 
 					DrawStringTruncated(9, y, statspec->name, i == _railstation.station_type ? TC_WHITE : TC_BLACK, 118);
@@ -1606,7 +1606,7 @@
 				if (statspec != NULL &&
 						HasBit(statspec->callbackmask, CBM_STATION_AVAIL) &&
 						GB(GetStationCallback(CBID_STATION_AVAILABILITY, 0, 0, statspec, NULL, INVALID_TILE), 0, 8) == 0) {
-					GfxFillRect(4 + i * 68, 18, 67 + i * 68, 75, (1 << PALETTE_MODIFIER_GREYOUT));
+					GfxFillRect(4 + i * 68, 18, 67 + i * 68, 75, 0, FILLRECT_CHECKER);
 				}
 			}
 		}
--- a/src/road_cmd.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/road_cmd.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -576,6 +576,7 @@
 
 		case MP_TUNNELBRIDGE:
 			if (GetTunnelBridgeTransportType(tile) != TRANSPORT_ROAD) return CMD_ERROR;
+			if (MirrorRoadBits(DiagDirToRoadBits(GetTunnelBridgeDirection(tile))) != pieces) return CMD_ERROR;
 			if (HasTileRoadType(tile, rt)) return_cmd_error(STR_1007_ALREADY_BUILT);
 			/* Don't allow adding roadtype to the bridge/tunnel when vehicles are already driving on it */
 			if (GetVehicleTunnelBridge(tile, GetOtherTunnelBridgeEnd(tile)) != NULL) return CMD_ERROR;
@@ -734,6 +735,7 @@
 		if (tile == end_tile && !HasBit(p2, 1)) bits &= ROAD_NW | ROAD_NE;
 		if (tile == start_tile && HasBit(p2, 0)) bits &= ROAD_SE | ROAD_SW;
 
+		_error_message = INVALID_STRING_ID;
 		CommandCost ret = DoCommand(tile, drd << 6 | rt << 4 | bits, 0, flags, CMD_BUILD_ROAD);
 		if (CmdFailed(ret)) {
 			if (_error_message != STR_1007_ALREADY_BUILT) return CMD_ERROR;
--- a/src/road_gui.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/road_gui.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -704,7 +704,7 @@
 
 static const WindowDesc _build_road_scen_desc = {
 	WDP_AUTO, WDP_AUTO, 197, 36, 197, 36,
-	WC_SCEN_BUILD_ROAD, WC_NONE,
+	WC_SCEN_BUILD_TOOLBAR, WC_NONE,
 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
 	_build_road_scen_widgets,
 };
--- a/src/roadveh_cmd.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/roadveh_cmd.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -730,7 +730,7 @@
 	TileIndex dest = INVALID_TILE;
 	const RoadStop *rs = GetStation(station)->GetPrimaryRoadStop(this);
 	if (rs != NULL) {
-		uint mindist = MAX_UVALUE(uint);
+		uint mindist = UINT_MAX;
 
 		for (; rs != NULL; rs = rs->GetNextRoadStop(this)) {
 			uint dist = DistanceManhattan(this->tile, rs->xy);
@@ -1724,7 +1724,7 @@
 			v->u.road.frame == RVC_DRIVE_THROUGH_STOP_FRAME))) {
 
 		RoadStop *rs = GetRoadStopByTile(v->tile, GetRoadStopType(v->tile));
-		Station* st = GetStationByTile(v->tile);
+		Station *st = GetStationByTile(v->tile);
 
 		/* Vehicle is at the stop position (at a bay) in a road stop.
 		 * Note, if vehicle is loading/unloading it has already been handled,
@@ -1759,19 +1759,13 @@
 
 			v->last_station_visited = st->index;
 
-			if (IsDriveThroughStopTile(v->tile) || v->current_order.GetDestination() == st->index) {
+			if (IsDriveThroughStopTile(v->tile) || (v->current_order.IsType(OT_GOTO_STATION) && v->current_order.GetDestination() == st->index)) {
 				RoadVehArrivesAt(v, st);
 				v->BeginLoading();
-			} else {
-				v->current_order.MakeLeaveStation();
-				InvalidateVehicleOrder(v);
+				return false;
 			}
-
-			return false;
-		}
-
-		/* Vehicle is ready to leave a bay in a road stop */
-		if (!v->current_order.IsType(OT_GOTO_DEPOT)) {
+		} else {
+			/* Vehicle is ready to leave a bay in a road stop */
 			if (rs->IsEntranceBusy()) {
 				/* Road stop entrance is busy, so wait as there is nowhere else to go */
 				v->cur_speed = 0;
--- a/src/roadveh_gui.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/roadveh_gui.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -23,7 +23,7 @@
 
 void DrawRoadVehDetails(const Vehicle *v, int x, int y)
 {
-	uint y_offset = RoadVehHasArticPart(v) ? 15 :0;
+	uint y_offset = RoadVehHasArticPart(v) ? 15 : 0;
 	StringID str;
 
 	SetDParam(0, v->engine_type);
@@ -62,6 +62,8 @@
 		DrawStringTruncated(x, y + 10 + y_offset, STR_JUST_STRING, TC_BLUE, 380 - x);
 
 		for (const Vehicle *u = v; u != NULL; u = u->Next()) {
+			if (u->cargo_cap == 0) continue;
+
 			str = STR_8812_EMPTY;
 			if (!u->cargo.Empty()) {
 				SetDParam(0, u->cargo_type);
--- a/src/settings_gui.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/settings_gui.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -27,6 +27,7 @@
 #include "widgets/dropdown_type.h"
 #include "widgets/dropdown_func.h"
 #include "station_func.h"
+#include <map>
 
 #include "table/sprites.h"
 #include "table/strings.h"
@@ -1005,7 +1006,7 @@
  */
 void DrawArrowButtons(int x, int y, int ctab, byte state, bool clickable_left, bool clickable_right)
 {
-	int color = (1 << PALETTE_MODIFIER_GREYOUT) | _colour_gradient[COLOUR_YELLOW][2];
+	int color = _colour_gradient[COLOUR_YELLOW][2];
 
 	DrawFrameRect(x,      y + 1, x +  9, y + 9, ctab, (state == 1) ? FR_LOWERED : FR_NONE);
 	DrawFrameRect(x + 10, y + 1, x + 19, y + 9, ctab, (state == 2) ? FR_LOWERED : FR_NONE);
@@ -1014,9 +1015,9 @@
 
 	/* Grey out the buttons that aren't clickable */
 	if (!clickable_left)
-		GfxFillRect(x +  1, y + 1, x +  1 + 8, y + 8, color);
+		GfxFillRect(x +  1, y + 1, x +  1 + 8, y + 8, color, FILLRECT_CHECKER);
 	if (!clickable_right)
-		GfxFillRect(x + 11, y + 1, x + 11 + 8, y + 8, color);
+		GfxFillRect(x + 11, y + 1, x + 11 + 8, y + 8, color, FILLRECT_CHECKER);
 }
 
 /** These are not, strickly speaking, widget enums,
--- a/src/spritecache.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/spritecache.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -24,10 +24,11 @@
 
 struct SpriteCache {
 	void *ptr;
+	size_t file_pos;
 	uint32 id;
-	size_t file_pos;
 	uint16 file_slot;
 	int16 lru;
+	bool real_sprite; ///< In some cases a single sprite is misused by two NewGRFs. Once as real sprite and once as non-real sprite. If the non-real sprite gets into the cache it might be drawn as real sprite which causes enormous trouble.
 };
 
 
@@ -176,6 +177,7 @@
 		byte *dest = (byte *)AllocSprite(num);
 
 		sc->ptr = dest;
+		sc->real_sprite = false;
 		FioReadBlock(dest, num);
 
 		return sc->ptr;
@@ -217,9 +219,13 @@
 			}
 		}
 
+		sc->real_sprite = false;
+
 		return sc->ptr;
 	}
 
+	sc->real_sprite = true;
+
 	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);
@@ -255,6 +261,7 @@
 	sc->ptr = NULL;
 	sc->lru = 0;
 	sc->id = file_sprite_id;
+	sc->real_sprite = false;
 
 	return true;
 }
@@ -269,6 +276,7 @@
 	scnew->file_pos = scold->file_pos;
 	scnew->ptr = NULL;
 	scnew->id = scold->id;
+	scnew->real_sprite = scold->real_sprite;
 }
 
 
@@ -453,7 +461,7 @@
 	p = sc->ptr;
 
 	/* Load the sprite, if it is not loaded, yet */
-	if (p == NULL) p = ReadSprite(sc, sprite, real_sprite);
+	if (p == NULL || sc->real_sprite != real_sprite) p = ReadSprite(sc, sprite, real_sprite);
 
 	return p;
 }
--- a/src/station_gui.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/station_gui.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -168,16 +168,15 @@
 	/** Sort stations by their waiting cargo */
 	static int CDECL StationWaitingSorter(const Station* const *a, const Station* const *b)
 	{
-		Money sum1 = 0;
-		Money sum2 = 0;
+		Money diff = 0;
 
 		for (CargoID j = 0; j < NUM_CARGO; j++) {
 			if (!HasBit(cargo_filter, j)) continue;
-			if (!(*a)->goods[j].cargo.Empty()) sum1 += GetTransportedGoodsIncome((*a)->goods[j].cargo.Count(), 20, 50, j);
-			if (!(*b)->goods[j].cargo.Empty()) sum2 += GetTransportedGoodsIncome((*b)->goods[j].cargo.Count(), 20, 50, j);
+			if (!(*a)->goods[j].cargo.Empty()) diff += GetTransportedGoodsIncome((*a)->goods[j].cargo.Count(), 20, 50, j);
+			if (!(*b)->goods[j].cargo.Empty()) diff -= GetTransportedGoodsIncome((*b)->goods[j].cargo.Count(), 20, 50, j);
 		}
 
-		return ClampToI32(sum1 - sum2);
+		return ClampToI32(diff);
 	}
 
 	/** Sort stations by their rating */
--- a/src/table/sprites.h	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/table/sprites.h	Wed Jul 09 13:32:13 2008 +0000
@@ -1471,12 +1471,6 @@
 	PALETTE_MODIFIER_TRANSPARENT  = TRANSPARENT_BIT,
 	///this bit is set when a recoloring process is in action
 	PALETTE_MODIFIER_COLOR        = RECOLOR_BIT,
-
-	//This is used for the GfxFillRect function
-	///Used to draw a "grey out" rectangle. @see GfxFillRect
-	PALETTE_MODIFIER_GREYOUT        = TRANSPARENT_BIT,
-	///Set when a colortable mode is used. @see GfxFillRect
-	USE_COLORTABLE                  = RECOLOR_BIT,
 };
 
 /** Masks needed for sprite operations.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/tar_type.h	Wed Jul 09 13:32:13 2008 +0000
@@ -0,0 +1,33 @@
+/* $Id$ */
+
+#ifndef TAR_TYPE_H
+#define TAR_TYPE_H
+
+/** @file tar_type.h Structs, typedefs and macros used for TAR file handling. */
+
+#include <map>
+#include <string>
+
+/** The define of a TarList. */
+struct TarListEntry {
+	const char *filename;
+	const char *dirname;
+};
+
+struct TarFileListEntry {
+	TarListEntry *tar;
+	size_t size;
+	size_t position;
+};
+
+typedef std::map<std::string, TarListEntry *> TarList;
+typedef std::map<std::string, TarFileListEntry> TarFileList;
+extern TarList _tar_list;
+extern TarFileList _tar_filelist;
+
+#define FOR_ALL_TARS(tar) for (tar = _tar_filelist.begin(); tar != _tar_filelist.end(); tar++)
+
+typedef bool FioTarFileListCallback(const char *filename, int size, void *userdata);
+FILE *FioTarFileList(const char *tar, const char *mode, size_t *filesize, FioTarFileListCallback *callback, void *userdata);
+
+#endif /* TAR_TYPE_H */
--- a/src/terraform_gui.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/terraform_gui.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -131,12 +131,6 @@
 		case DDSP_CREATE_DESERT:
 			GenerateDesertArea(end_tile, start_tile);
 			break;
-		case DDSP_CREATE_WATER:
-			DoCommandP(end_tile, start_tile, _ctrl_pressed, CcBuildCanal, CMD_BUILD_CANAL | CMD_MSG(STR_CANT_BUILD_CANALS));
-			break;
-		case DDSP_CREATE_RIVER:
-			DoCommandP(end_tile, start_tile, 2, CcBuildCanal, CMD_BUILD_CANAL | CMD_MSG(STR_CANT_PLACE_RIVERS));
-			break;
 		default:
 			return false;
 	}
@@ -368,8 +362,6 @@
 
 		DoCommandP(tile, SLOPE_N, (uint32)mode, CcTerraform, CMD_TERRAFORM_LAND | CMD_MSG(msg));
 	} else {
-		SndPlayTileFx(SND_1F_SPLAT, tile);
-
 		assert(_terraform_size != 0);
 		/* check out for map overflows */
 		sizex = min(MapSizeX() - TileX(tile) - 1, _terraform_size);
@@ -377,6 +369,8 @@
 
 		if (sizex == 0 || sizey == 0) return;
 
+		SndPlayTileFx(SND_1F_SPLAT, tile);
+
 		if (mode != 0) {
 			/* Raise land */
 			h = 15; // XXX - max height
@@ -443,34 +437,23 @@
 	VpStartPlaceSizing(tile, VPM_X_AND_Y, DDSP_CREATE_DESERT);
 }
 
-static void PlaceProc_WaterArea(TileIndex tile)
-{
-	VpStartPlaceSizing(tile, VPM_X_AND_Y, DDSP_CREATE_WATER);
-}
-
-static void PlaceProc_RiverArea(TileIndex tile)
-{
-	VpStartPlaceSizing(tile, VPM_X_AND_Y, DDSP_CREATE_RIVER);
-}
 
 static const Widget _scen_edit_land_gen_widgets[] = {
 {  WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                  STR_018B_CLOSE_WINDOW},                   // ETTW_CLOSEBOX
-{   WWT_CAPTION,   RESIZE_NONE,     7,    11,   191,     0,    13, STR_0223_LAND_GENERATION,  STR_018C_WINDOW_TITLE_DRAG_THIS},         // ETTW_CAPTION
-{ WWT_STICKYBOX,   RESIZE_NONE,     7,   192,   203,     0,    13, STR_NULL,                  STR_STICKY_BUTTON},                       // ETTW_STICKY
-{     WWT_PANEL,   RESIZE_NONE,     7,     0,   203,    14,   102, 0x0,                       STR_NULL},                                // ETTW_BACKGROUND
+{   WWT_CAPTION,   RESIZE_NONE,     7,    11,   150,     0,    13, STR_0223_LAND_GENERATION,  STR_018C_WINDOW_TITLE_DRAG_THIS},         // ETTW_CAPTION
+{ WWT_STICKYBOX,   RESIZE_NONE,     7,   151,   162,     0,    13, STR_NULL,                  STR_STICKY_BUTTON},                       // ETTW_STICKY
+{     WWT_PANEL,   RESIZE_NONE,     7,     0,   162,    14,   102, 0x0,                       STR_NULL},                                // ETTW_BACKGROUND
 {    WWT_IMGBTN,   RESIZE_NONE,    14,     2,    23,    16,    37, SPR_IMG_DYNAMITE,          STR_018D_DEMOLISH_BUILDINGS_ETC},         // ETTW_DEMOLISH
 {    WWT_IMGBTN,   RESIZE_NONE,    14,    24,    45,    16,    37, SPR_IMG_TERRAFORM_DOWN,    STR_018E_LOWER_A_CORNER_OF_LAND},         // ETTW_LOWER_LAND
 {    WWT_IMGBTN,   RESIZE_NONE,    14,    46,    67,    16,    37, SPR_IMG_TERRAFORM_UP,      STR_018F_RAISE_A_CORNER_OF_LAND},         // ETTW_RAISE_LAND
 {    WWT_IMGBTN,   RESIZE_NONE,    14,    68,    89,    16,    37, SPR_IMG_LEVEL_LAND,        STR_LEVEL_LAND_TOOLTIP},                  // ETTW_LEVEL_LAND
-{    WWT_IMGBTN,   RESIZE_NONE,    14,    90,   111,    16,    37, SPR_IMG_BUILD_CANAL,       STR_CREATE_LAKE},                         // ETTW_BUILD_CANAL
-{    WWT_IMGBTN,   RESIZE_NONE,    14,   112,   133,    16,    37, SPR_IMG_BUILD_RIVER,       STR_CREATE_RIVER},                        // ETTW_BUILD_RIVER
-{    WWT_IMGBTN,   RESIZE_NONE,    14,   134,   156,    16,    37, SPR_IMG_ROCKS,             STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE}, // ETTW_PLACE_ROCKS
-{    WWT_IMGBTN,   RESIZE_NONE,    14,   157,   179,    16,    37, SPR_IMG_LIGHTHOUSE_DESERT, STR_NULL},                                // ETTW_PLACE_DESERT_LIGHTHOUSE XXX - dynamic
-{    WWT_IMGBTN,   RESIZE_NONE,    14,   180,   201,    16,    37, SPR_IMG_TRANSMITTER,       STR_028E_PLACE_TRANSMITTER},              // ETTW_PLACE_TRANSMITTER
+{    WWT_IMGBTN,   RESIZE_NONE,    14,   90,    111,    16,    37, SPR_IMG_ROCKS,             STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE}, // ETTW_PLACE_ROCKS
+{    WWT_IMGBTN,   RESIZE_NONE,    14,   112,   133,    16,    37, SPR_IMG_LIGHTHOUSE_DESERT, STR_NULL},                                // ETTW_PLACE_DESERT_LIGHTHOUSE XXX - dynamic
+{    WWT_IMGBTN,   RESIZE_NONE,    14,   134,   156,    16,    37, SPR_IMG_TRANSMITTER,       STR_028E_PLACE_TRANSMITTER},              // ETTW_PLACE_TRANSMITTER
 {    WWT_IMGBTN,   RESIZE_NONE,    14,   150,   161,    45,    56, SPR_ARROW_UP,              STR_0228_INCREASE_SIZE_OF_LAND_AREA},     // ETTW_INCREASE_SIZE
 {    WWT_IMGBTN,   RESIZE_NONE,    14,   150,   161,    58,    69, SPR_ARROW_DOWN,            STR_0229_DECREASE_SIZE_OF_LAND_AREA},     // ETTW_DECREASE_SIZE
-{   WWT_TEXTBTN,   RESIZE_NONE,    14,    24,   179,    76,    87, STR_SE_NEW_WORLD,          STR_022A_GENERATE_RANDOM_LAND},           // ETTW_NEW_SCENARIO
-{   WWT_TEXTBTN,   RESIZE_NONE,    14,    24,   179,    89,   100, STR_022B_RESET_LANDSCAPE,  STR_RESET_LANDSCAPE_TOOLTIP},             // ETTW_RESET_LANDSCAPE
+{   WWT_TEXTBTN,   RESIZE_NONE,    14,    2,    161,    76,    87, STR_SE_NEW_WORLD,          STR_022A_GENERATE_RANDOM_LAND},           // ETTW_NEW_SCENARIO
+{   WWT_TEXTBTN,   RESIZE_NONE,    14,    2,    161,    89,   100, STR_022B_RESET_LANDSCAPE,  STR_RESET_LANDSCAPE_TOOLTIP},             // ETTW_RESET_LANDSCAPE
 {   WIDGETS_END},
 };
 
@@ -497,8 +480,6 @@
 	ETTW_LOWER_LAND,                       ///< Lower land button
 	ETTW_RAISE_LAND,                       ///< Raise land button
 	ETTW_LEVEL_LAND,                       ///< Level land button
-	ETTW_BUILD_CANAL,                      ///< Build canal button
-	ETTW_BUILD_RIVER,                      ///< Build river button
 	ETTW_PLACE_ROCKS,                      ///< Place rocks button
 	ETTW_PLACE_DESERT_LIGHTHOUSE,          ///< Place desert button (in tropical climate) / place lighthouse button (else)
 	ETTW_PLACE_TRANSMITTER,                ///< Place transmitter button
@@ -533,16 +514,6 @@
 	HandlePlacePushButton(w, ETTW_LEVEL_LAND, SPR_CURSOR_LEVEL_LAND, VHM_POINT, PlaceProc_LevelLand);
 }
 
-static void EditorTerraformClick_WaterArea(Window *w)
-{
-	HandlePlacePushButton(w, ETTW_BUILD_CANAL, SPR_CURSOR_CANAL, VHM_RECT, PlaceProc_WaterArea);
-}
-
-static void EditorTerraformClick_RiverArea(Window *w)
-{
-	HandlePlacePushButton(w, ETTW_BUILD_RIVER, SPR_CURSOR_RIVER, VHM_RECT, PlaceProc_RiverArea);
-}
-
 static void EditorTerraformClick_RockyArea(Window *w)
 {
 	HandlePlacePushButton(w, ETTW_PLACE_ROCKS, SPR_CURSOR_ROCKY_AREA, VHM_RECT, PlaceProc_RockyArea);
@@ -565,9 +536,7 @@
 	'E',
 	'R',
 	'T',
-	'Y',
-	'U',
-	'I'
+	'Y'
 };
 
 typedef void OnButtonClick(Window *w);
@@ -576,8 +545,6 @@
 	EditorTerraformClick_LowerBigLand,
 	EditorTerraformClick_RaiseBigLand,
 	EditorTerraformClick_LevelLand,
-	EditorTerraformClick_WaterArea,
-	EditorTerraformClick_RiverArea,
 	EditorTerraformClick_RockyArea,
 	EditorTerraformClick_DesertLightHouse,
 	EditorTerraformClick_Transmitter
@@ -708,8 +675,6 @@
 				default: NOT_REACHED();
 				case DDSP_CREATE_ROCKS:
 				case DDSP_CREATE_DESERT:
-				case DDSP_CREATE_WATER:
-				case DDSP_CREATE_RIVER:
 				case DDSP_RAISE_AND_LEVEL_AREA:
 				case DDSP_LOWER_AND_LEVEL_AREA:
 				case DDSP_LEVEL_AREA:
@@ -728,7 +693,7 @@
 };
 
 static const WindowDesc _scen_edit_land_gen_desc = {
-	WDP_AUTO, WDP_AUTO, 204, 103, 204, 103,
+	WDP_AUTO, WDP_AUTO, 163, 103, 163, 103,
 	WC_SCEN_LAND_GEN, WC_NONE,
 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
 	_scen_edit_land_gen_widgets,
--- a/src/texteff.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/texteff.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -241,7 +241,7 @@
 			_screen.height - _chatmsg_box.y - count * 13 - 2,
 			_chatmsg_box.x + _chatmsg_box.width - 1,
 			_screen.height - _chatmsg_box.y - 2,
-			PALETTE_TO_TRANSPARENT | (1 << USE_COLORTABLE) // black, but with some alpha for background
+			PALETTE_TO_TRANSPARENT, FILLRECT_RECOLOR // black, but with some alpha for background
 		);
 
 	/* Paint the chat messages starting with the lowest at the bottom */
--- a/src/tgp.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/tgp.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -173,14 +173,21 @@
 	uint     total_size; //< height map total size
 	uint     size_x;     //< MapSizeX()
 	uint     size_y;     //< MapSizeY()
+
+	/**
+	 * Height map accessor
+	 * @param x X position
+	 * @param y Y position
+	 * @return height as fixed point number
+	 */
+	inline height_t &height(uint x, uint y) {
+		return h[x + y * dim_x];
+	}
 };
 
 /** Global height map instance */
 static HeightMap _height_map = {NULL, 0, 0, 0, 0};
 
-/** Height map accessors */
-#define HeightMapXY(x, y) _height_map.h[(x) + (y) * _height_map.dim_x]
-
 /** Conversion: int to height_t */
 #define I2H(i) ((i) << height_decimal_bits)
 /** Conversion: height_t to int */
@@ -198,17 +205,21 @@
 /** Walk through all items of _height_map.h */
 #define FOR_ALL_TILES_IN_HEIGHT(h) for (h = _height_map.h; h < &_height_map.h[_height_map.total_size]; h++)
 
+/** Maximum index into array of noise amplitudes */
+static const int TGP_FREQUENCY_MAX = 6;
+
 /** Noise amplitudes (multiplied by 1024)
  * - indexed by "smoothness setting" and log2(frequency) */
-static const amplitude_t _amplitudes_by_smoothness_and_frequency[4][12] = {
+static const amplitude_t _amplitudes_by_smoothness_and_frequency[4][TGP_FREQUENCY_MAX + 1] = {
+	/* lowest frequncy....  ...highest (every corner) */
 	/* Very smooth */
-	{1000,  350,  123,   43,   15,    1,     1,    0,    0,    0,    0,    0},
+	{16000,  5600,  1968,   688,   240,    16,    16},
 	/* Smooth */
-	{1000, 1000,  403,  200,   64,    8,     1,    0,    0,    0,    0,    0},
+	{16000, 16000,  6448,  3200,  1024,   128,    16},
 	/* Rough */
-	{1000, 1200,  800,  500,  200,   16,     4,    0,    0,    0,    0,    0},
+	{16000, 19200, 12800,  8000,  3200,   256,    64},
 	/* Very Rough */
-	{1500, 1000, 1200, 1000,  500,   32,    20,    0,    0,    0,    0,    0},
+	{24000, 16000, 19200, 16000,  8000,   512,   320},
 };
 
 /** Desired water percentage (100% == 1024) - indexed by _settings_game.difficulty.quantity_sea_lakes */
@@ -233,7 +244,10 @@
 }
 
 
-/** Allocate array of (MapSizeX()+1)*(MapSizeY()+1) heights and init the _height_map structure members */
+/**
+ * Allocate array of (MapSizeX()+1)*(MapSizeY()+1) heights and init the _height_map structure members
+ * @return true on success
+ */
 static inline bool AllocHeightMap()
 {
 	height_t *h;
@@ -261,25 +275,45 @@
 	_height_map.h = NULL;
 }
 
-/** RandomHeight() generator */
+/**
+ * Generates new random height in given amplitude (generated numbers will range from - amplitude to + amplitude)
+ * @param rMax Limit of result
+ * @return generated height
+ */
 static inline height_t RandomHeight(amplitude_t rMax)
 {
 	amplitude_t ra = (Random() << 16) | (Random() & 0x0000FFFF);
 	height_t rh;
-	/* Scale the amplitude for better resolution */
-	rMax *= 16;
 	/* Spread height into range -rMax..+rMax */
 	rh = A2H(ra % (2 * rMax + 1) - rMax);
 	return rh;
 }
 
-/** One interpolation and noise round */
+/**
+ * One interpolation and noise round
+ *
+ * The heights on the map are generated in an iterative process.
+ * We start off with a frequency of 1 (log_frequency == 0), and generate heights only for corners on the most coarsly mesh
+ * (i.e. only for x/y coordinates which are multiples of the minimum edge length).
+ *
+ * After this initial step the frequency is doubled (log_frequency incremented) each iteration to generate corners on the next finer mesh.
+ * The heights of the newly added corners are first set by interpolating the heights from the previous iteration.
+ * Finally noise with the given amplitude is applied to all corners of the new mesh.
+ *
+ * Generation terminates, when the frequency has reached the map size. I.e. the mesh is as fine as the map, and every corner height
+ * has been set.
+ *
+ * @param log_frequency frequency (logarithmic) to apply noise for
+ * @param amplitude Amplitude for the noise
+ * @return false if we are finished (reached the minimal step size / highest frequency)
+ */
 static bool ApplyNoise(uint log_frequency, amplitude_t amplitude)
 {
 	uint size_min = min(_height_map.size_x, _height_map.size_y);
 	uint step = size_min >> log_frequency;
 	uint x, y;
 
+	/* Trying to apply noise to uninitialized height map */
 	assert(_height_map.h != NULL);
 
 	/* Are we finished? */
@@ -290,7 +324,7 @@
 		for (y = 0; y <= _height_map.size_y; y += step) {
 			for (x = 0; x <= _height_map.size_x; x += step) {
 				height_t height = (amplitude > 0) ? RandomHeight(amplitude) : 0;
-				HeightMapXY(x, y) = height;
+				_height_map.height(x, y) = height;
 			}
 		}
 		return true;
@@ -300,28 +334,30 @@
 	 * Interpolate height values at odd x, even y tiles */
 	for (y = 0; y <= _height_map.size_y; y += 2 * step) {
 		for (x = 0; x < _height_map.size_x; x += 2 * step) {
-			height_t h00 = HeightMapXY(x + 0 * step, y);
-			height_t h02 = HeightMapXY(x + 2 * step, y);
+			height_t h00 = _height_map.height(x + 0 * step, y);
+			height_t h02 = _height_map.height(x + 2 * step, y);
 			height_t h01 = (h00 + h02) / 2;
-			HeightMapXY(x + 1 * step, y) = h01;
+			_height_map.height(x + 1 * step, y) = h01;
 		}
 	}
 
 	/* Interpolate height values at odd y tiles */
 	for (y = 0; y < _height_map.size_y; y += 2 * step) {
 		for (x = 0; x <= _height_map.size_x; x += step) {
-			height_t h00 = HeightMapXY(x, y + 0 * step);
-			height_t h20 = HeightMapXY(x, y + 2 * step);
+			height_t h00 = _height_map.height(x, y + 0 * step);
+			height_t h20 = _height_map.height(x, y + 2 * step);
 			height_t h10 = (h00 + h20) / 2;
-			HeightMapXY(x, y + 1 * step) = h10;
+			_height_map.height(x, y + 1 * step) = h10;
 		}
 	}
 
+	/* Add noise for next higher frequency (smaller steps) */
 	for (y = 0; y <= _height_map.size_y; y += step) {
 		for (x = 0; x <= _height_map.size_x; x += step) {
-			HeightMapXY(x, y) += RandomHeight(amplitude);
+			_height_map.height(x, y) += RandomHeight(amplitude);
 		}
 	}
+
 	return (step > 1);
 }
 
@@ -332,23 +368,31 @@
 	uint iteration_round = 0;
 	amplitude_t amplitude;
 	bool continue_iteration;
-	uint log_size_min, log_frequency_min;
+	int log_size_min, log_frequency_min;
 	int log_frequency;
 
-	/* Find first power of two that fits */
-	for (log_size_min = 6; (1U << log_size_min) < size_min; log_size_min++) { }
-	log_frequency_min = log_size_min - 6;
+	/* Find first power of two that fits, so that later log_frequency == TGP_FREQUENCY_MAX in the last iteration */
+	for (log_size_min = TGP_FREQUENCY_MAX; (1U << log_size_min) < size_min; log_size_min++) { }
+	log_frequency_min = log_size_min - TGP_FREQUENCY_MAX;
 
+	/* Zero must be part of the iteration, else initialization will fail. */
+	assert(log_frequency_min >= 0);
+
+	/* Keep increasing the frequency until we reach the step size equal to one tile */
 	do {
 		log_frequency = iteration_round - log_frequency_min;
 		if (log_frequency >= 0) {
+			/* Apply noise for the next frequency */
+			assert(log_frequency <= TGP_FREQUENCY_MAX);
 			amplitude = _amplitudes_by_smoothness_and_frequency[_settings_game.game_creation.tgen_smoothness][log_frequency];
 		} else {
+			/* Amplitude for the low frequencies on big maps is 0, i.e. initialise with zero height */
 			amplitude = 0;
 		}
 		continue_iteration = ApplyNoise(iteration_round, amplitude);
 		iteration_round++;
-	} while(continue_iteration);
+	} while (continue_iteration);
+	assert(log_frequency == TGP_FREQUENCY_MAX);
 }
 
 /** Returns min, max and average height from height map */
@@ -356,7 +400,7 @@
 {
 	height_t h_min, h_max, h_avg, *h;
 	int64 h_accu = 0;
-	h_min = h_max = HeightMapXY(0, 0);
+	h_min = h_max = _height_map.height(0, 0);
 
 	/* Get h_min, h_max and accumulate heights into h_accu */
 	FOR_ALL_TILES_IN_HEIGHT(h) {
@@ -380,7 +424,7 @@
 	int *hist = hist_buf - h_min;
 	height_t *h;
 
-	/* Fill histogram */
+	/* Count the heights and fill the histogram */
 	FOR_ALL_TILES_IN_HEIGHT(h) {
 		assert(*h >= h_min);
 		assert(*h <= h_max);
@@ -544,7 +588,7 @@
 		max_x = max((smallest_size * smallest_size / 16) + max_x, (smallest_size * smallest_size / 16) + margin - max_x);
 		if (smallest_size < 8 && max_x > 5) max_x /= 1.5;
 		for (x = 0; x < max_x; x++) {
-			HeightMapXY(x, y) = 0;
+			_height_map.height(x, y) = 0;
 		}
 
 		/* Bottom left */
@@ -552,7 +596,7 @@
 		max_x = max((smallest_size * smallest_size / 16) + max_x, (smallest_size * smallest_size / 16) + margin - max_x);
 		if (smallest_size < 8 && max_x > 5) max_x /= 1.5;
 		for (x = _height_map.size_x; x > (_height_map.size_x - 1 - max_x); x--) {
-			HeightMapXY(x, y) = 0;
+			_height_map.height(x, y) = 0;
 		}
 	}
 
@@ -563,7 +607,7 @@
 		max_y = max((smallest_size * smallest_size / 16) + max_y, (smallest_size * smallest_size / 16) + margin - max_y);
 		if (smallest_size < 8 && max_y > 5) max_y /= 1.5;
 		for (y = 0; y < max_y; y++) {
-			HeightMapXY(x, y) = 0;
+			_height_map.height(x, y) = 0;
 		}
 
 
@@ -572,7 +616,7 @@
 		max_y = max((smallest_size * smallest_size / 16) + max_y, (smallest_size * smallest_size / 16) + margin - max_y);
 		if (smallest_size < 8 && max_y > 5) max_y /= 1.5;
 		for (y = _height_map.size_y; y > (_height_map.size_y - 1 - max_y); y--) {
-			HeightMapXY(x, y) = 0;
+			_height_map.height(x, y) = 0;
 		}
 	}
 }
@@ -595,21 +639,21 @@
 	/* Search for the coast (first non-water tile) */
 	for (x = org_x, y = org_y, ed = 0; IsValidXY(x, y) && ed < max_coast_dist_from_edge; x += dir_x, y += dir_y, ed++) {
 		/* Coast found? */
-		if (HeightMapXY(x, y) > 15) break;
+		if (_height_map.height(x, y) > 15) break;
 
 		/* Coast found in the neighborhood? */
-		if (IsValidXY(x + dir_y, y + dir_x) && HeightMapXY(x + dir_y, y + dir_x) > 0) break;
+		if (IsValidXY(x + dir_y, y + dir_x) && _height_map.height(x + dir_y, y + dir_x) > 0) break;
 
 		/* Coast found in the neighborhood on the other side */
-		if (IsValidXY(x - dir_y, y - dir_x) && HeightMapXY(x - dir_y, y - dir_x) > 0) break;
+		if (IsValidXY(x - dir_y, y - dir_x) && _height_map.height(x - dir_y, y - dir_x) > 0) break;
 	}
 
 	/* Coast found or max_coast_dist_from_edge has been reached.
 	 * Soften the coast slope */
 	for (depth = 0; IsValidXY(x, y) && depth <= max_coast_Smooth_depth; depth++, x += dir_x, y += dir_y) {
-		h = HeightMapXY(x, y);
+		h = _height_map.height(x, y);
 		h = min(h, h_prev + (4 + depth)); // coast softening formula
-		HeightMapXY(x, y) = h;
+		_height_map.height(x, y) = h;
 		h_prev = h;
 	}
 }
@@ -642,14 +686,14 @@
 	int x, y;
 	for (y = 1; y <= (int)_height_map.size_y; y++) {
 		for (x = 1; x <= (int)_height_map.size_x; x++) {
-			height_t h_max = min(HeightMapXY(x - 1, y), HeightMapXY(x, y - 1)) + dh_max;
-			if (HeightMapXY(x, y) > h_max) HeightMapXY(x, y) = h_max;
+			height_t h_max = min(_height_map.height(x - 1, y), _height_map.height(x, y - 1)) + dh_max;
+			if (_height_map.height(x, y) > h_max) _height_map.height(x, y) = h_max;
 		}
 	}
 	for (y = _height_map.size_y - 1; y >= 0; y--) {
 		for (x = _height_map.size_x - 1; x >= 0; x--) {
-			height_t h_max = min(HeightMapXY(x + 1, y), HeightMapXY(x, y + 1)) + dh_max;
-			if (HeightMapXY(x, y) > h_max) HeightMapXY(x, y) = h_max;
+			height_t h_max = min(_height_map.height(x + 1, y), _height_map.height(x, y + 1)) + dh_max;
+			if (_height_map.height(x, y) > h_max) _height_map.height(x, y) = h_max;
 		}
 	}
 }
@@ -677,12 +721,6 @@
 	HeightMapSmoothSlopes(16);
 }
 
-static inline int perlin_landXY(uint x, uint y)
-{
-	return HeightMapXY(x, y);
-}
-
-
 /**
  * The Perlin Noise calculation using large primes
  * The initial number is adjusted by two values; the generation_seed, and the
@@ -776,7 +814,7 @@
 }
 
 
-/** A small helper function */
+/** A small helper function to initialize the terrain */
 static void TgenSetTileHeight(TileIndex tile, int height)
 {
 	SetTileHeight(tile, height);
@@ -808,7 +846,7 @@
 	/* Transfer height map into OTTD map */
 	for (y = 2; y < _height_map.size_y - 2; y++) {
 		for (x = 2; x < _height_map.size_x - 2; x++) {
-			int height = H2I(HeightMapXY(x, y));
+			int height = H2I(_height_map.height(x, y));
 			if (height < 0) height = 0;
 			if (height > 15) height = 15;
 			TgenSetTileHeight(TileXY(x, y), height);
--- a/src/timetable_gui.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/timetable_gui.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -261,7 +261,7 @@
 		uint64 time = StrEmpty(str) ? 0 : strtoul(str, NULL, 10);
 		if (!_settings_client.gui.timetable_in_ticks) time *= DAY_TICKS;
 
-		uint32 p2 = minu(time, MAX_UVALUE(uint16));
+		uint32 p2 = minu(time, UINT16_MAX);
 
 		DoCommandP(0, p1, p2, NULL, CMD_CHANGE_TIMETABLE | CMD_MSG(STR_CAN_T_TIMETABLE_VEHICLE));
 	}
--- a/src/toolbar_gui.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/toolbar_gui.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -53,6 +53,17 @@
 RailType _last_built_railtype;
 RoadType _last_built_roadtype;
 
+/** This enum gathers properties of both toolbars */
+enum ToolBarProperties {
+	TBP_BUTTONWIDTH        =  22,  ///< width of a button
+	TBP_BUTTONHEIGHT       =  22,  ///< height of a button as well as the toolbars
+	TBP_DATEPANELWIDTH     = 130,  ///< used in scenario editor to calculate width of the toolbar.
+
+	TBP_TOOLBAR_MINBUTTON  =  14,  ///< references both toolbars
+	TBP_NORMAL_MAXBUTTON   =  19,  ///< normal toolbar has this many buttons
+	TBP_SCENARIO_MAXBUTTON =  16,  ///< while the scenario has these
+};
+
 enum ToolbarMode {
 	TB_NORMAL,
 	TB_UPPER,
@@ -96,7 +107,7 @@
 	TBSE_FASTFORWARD,
 	TBSE_SAVESCENARIO = 3,
 	TBSE_SPACERPANEL,
-	TBSE_SEPARATOR,
+	TBSE_DATEPANEL,
 	TBSE_DATEBACKWARD,
 	TBSE_DATEFORWARD,
 	TBSE_SMALLMAP,
@@ -106,13 +117,14 @@
 	TBSE_TOWNGENERATE,
 	TBSE_INDUSTRYGENERATE,
 	TBSE_BUILDROAD,
+	TBSE_BUILDDOCKS,
 	TBSE_PLANTTREES,
 	TBSE_PLACESIGNS,
 };
 
 /** The idea of this enum is to allow a separation between widget position
  * and _menu_clicked_procs's entry.  By shifting, the "action" id is extracted and
- * kept safe for usage when reuired.
+ * kept safe for usage when required.
  * @see ToolbarMenuWindow::OnMouseLoop */
 enum ScenarioEditorMenuActions {
 	SEMA_MAP_CLICK = 17 << 8,
@@ -270,7 +282,7 @@
 	PopupMainToolbMenu(w, TBSE_SAVESCENARIO, STR_0292_SAVE_SCENARIO, SLEME_MENUCOUNT);
 }
 
-static void MenuClickSaveLoad(int index)
+static void MenuClickSaveLoad(int index = 0)
 {
 	if (_game_mode == GM_EDITOR) {
 		switch (index) {
@@ -297,8 +309,8 @@
 	MME_SHOW_EXTRAVIEWPORTS,
 	MME_SHOW_SIGNLISTS,
 	MME_SHOW_TOWNDIRECTORY,    ///< This entry is only used in Editor mode
-	MME_MENUCOUNT_NORMAL = 3,
-	MME_MENUCOUNT_EDITOR = 4,
+	MME_MENUCOUNT_NORMAL     = 3,
+	MME_MENUCOUNT_EDITOR     = 4,
 };
 
 static void ToolbarMapClick(Window *w)
@@ -509,7 +521,7 @@
 static void ToolbarZoomInClick(Window *w)
 {
 	if (DoZoomInOutWindow(ZOOM_IN, FindWindowById(WC_MAIN_WINDOW, 0))) {
-		w->HandleButtonClick(TBN_ZOOMIN);
+		w->HandleButtonClick((_game_mode == GM_EDITOR) ? (byte)TBSE_ZOOMIN : (byte)TBN_ZOOMIN);
 		SndPlayFx(SND_15_BEEP);
 	}
 }
@@ -519,7 +531,7 @@
 static void ToolbarZoomOutClick(Window *w)
 {
 	if (DoZoomInOutWindow(ZOOM_OUT, FindWindowById(WC_MAIN_WINDOW, 0))) {
-		w->HandleButtonClick(TBN_ZOOMOUT);
+		w->HandleButtonClick((_game_mode == GM_EDITOR) ? (byte)TBSE_ZOOMOUT : (byte)TBN_ZOOMOUT);
 		SndPlayFx(SND_15_BEEP);
 	}
 }
@@ -557,7 +569,7 @@
 
 static void ToolbarBuildWaterClick(Window *w)
 {
-	PopupMainToolbMenu(w, TBN_WATER, STR_9800_DOCK_CONSTRUCTION, 1);
+	PopupMainToolbMenu(w, TBN_WATER, STR_9800_WATERWAYS_CONSTRUCTION, 1);
 }
 
 static void MenuClickBuildWater(int index)
@@ -694,22 +706,6 @@
 	_left_button_clicked = false;
 }
 
-static void ToolbarScenZoomIn(Window *w)
-{
-	if (DoZoomInOutWindow(ZOOM_IN, FindWindowById(WC_MAIN_WINDOW, 0))) {
-		w->HandleButtonClick(TBSE_ZOOMIN);
-		SndPlayFx(SND_15_BEEP);
-	}
-}
-
-static void ToolbarScenZoomOut(Window *w)
-{
-	if (DoZoomInOutWindow(ZOOM_OUT, FindWindowById(WC_MAIN_WINDOW, 0))) {
-		w->HandleButtonClick(TBSE_ZOOMOUT);
-		SndPlayFx(SND_15_BEEP);
-	}
-}
-
 static void ToolbarScenGenLand(Window *w)
 {
 	w->HandleButtonClick(TBSE_LANDGENERATE);
@@ -740,6 +736,13 @@
 	ShowBuildRoadScenToolbar();
 }
 
+static void ToolbarScenBuildDocks(Window *w)
+{
+	w->HandleButtonClick(TBSE_BUILDDOCKS);
+	SndPlayFx(SND_15_BEEP);
+	ShowBuildDocksScenToolbar();
+}
+
 static void ToolbarScenPlantTrees(Window *w)
 {
 	w->HandleButtonClick(TBSE_PLANTTREES);
@@ -767,15 +770,15 @@
 	uint spacing;
 	uint widgetcount = w->widget_count - 1;
 
-	if (w->width >= (int)widgetcount * 22) {
-		button_width = 22;
+	if (w->width >= (int)widgetcount * TBP_BUTTONWIDTH) {
+		button_width = TBP_BUTTONWIDTH;
 		spacing = w->width - (widgetcount * button_width);
 	} else {
 		button_width = w->width / widgetcount;
 		spacing = 0;
 	}
 
-	uint extra_spacing_at[] = { 4, 8, 13, 17, 19, 24, 0 };
+	static const uint extra_spacing_at[] = { 4, 8, 13, 17, 19, 24, 0 };
 	uint i = 0;
 	for (uint x = 0, j = 0; i < widgetcount; i++) {
 		if (extra_spacing_at[j] == i) {
@@ -826,10 +829,9 @@
 
 	static const byte *arrangements[] = { arrange14, arrange15, arrange16, arrange17, arrange18, arrange19 };
 
-	static const uint icon_size = 22;
-	uint max_icons = max(14U, (w->width + icon_size / 2) / icon_size);
+	uint max_icons = max(TBP_TOOLBAR_MINBUTTON, (ToolBarProperties)((w->width + TBP_BUTTONWIDTH / 2) / TBP_BUTTONWIDTH));
 
-	assert(max_icons >= 14 && max_icons <= 19);
+	assert(max_icons >= TBP_TOOLBAR_MINBUTTON && max_icons <= TBP_NORMAL_MAXBUTTON);
 
 	/* first hide all icons */
 	for (uint i = 0; i < w->widget_count - 1; i++) {
@@ -837,7 +839,7 @@
 	}
 
 	/* now activate them all on their proper positions */
-	for (uint i = 0, x = 0, n = max_icons - 14; i < max_icons; i++) {
+	for (uint i = 0, x = 0, n = max_icons - TBP_TOOLBAR_MINBUTTON; i < max_icons; i++) {
 		uint icon = arrangements[n][i + ((_toolbar_mode == TB_LOWER) ? max_icons : 0)];
 		w->widget[icon].type = WWT_IMGBTN;
 		w->widget[icon].left = x;
@@ -898,7 +900,7 @@
 	{
 		/* Draw brown-red toolbar bg. */
 		GfxFillRect(0, 0, this->width - 1, this->height - 1, 0xB2);
-		GfxFillRect(0, 0, this->width - 1, this->height - 1, 0xB4 | (1 << PALETTE_MODIFIER_GREYOUT));
+		GfxFillRect(0, 0, this->width - 1, this->height - 1, 0xB4, FILLRECT_CHECKER);
 
 		/* If spectator, disable all construction buttons
 		* ie : Build road, rail, ships, airports and landscaping
@@ -923,7 +925,7 @@
 		switch (keycode) {
 			case WKC_F1: case WKC_PAUSE: ToolbarPauseClick(this); break;
 			case WKC_F2: ShowGameOptions(); break;
-			case WKC_F3: MenuClickSaveLoad(0); break;
+			case WKC_F3: MenuClickSaveLoad(); break;
 			case WKC_F4: ShowSmallMap(); break;
 			case WKC_F5: ShowTownDirectory(); break;
 			case WKC_F6: ShowSubsidiesList(); break;
@@ -983,7 +985,7 @@
 
 	virtual void OnResize(Point new_size, Point delta)
 	{
-		if (this->width <= 19 * 22) {
+		if (this->width <= TBP_NORMAL_MAXBUTTON * TBP_BUTTONWIDTH) {
 			SplitToolbar(this);
 		} else {
 			ResizeToolbar(this);
@@ -1007,45 +1009,45 @@
 };
 
 static const Widget _toolb_normal_widgets[] = {
-{     WWT_IMGBTN,   RESIZE_LEFT,    14,     0,     0,     0,    21, SPR_IMG_PAUSE,           STR_0171_PAUSE_GAME},
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_FASTFORWARD,     STR_FAST_FORWARD},
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_SETTINGS,        STR_0187_OPTIONS},
-{   WWT_IMGBTN_2,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_SAVE,            STR_0172_SAVE_GAME_ABANDON_GAME},
-
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_SMALLMAP,        STR_0174_DISPLAY_MAP},
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_TOWN,            STR_0176_DISPLAY_TOWN_DIRECTORY},
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_SUBSIDIES,       STR_02DC_DISPLAY_SUBSIDIES},
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_COMPANY_LIST,    STR_0173_DISPLAY_LIST_OF_COMPANY},
-
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_COMPANY_FINANCE, STR_0177_DISPLAY_COMPANY_FINANCES},
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_COMPANY_GENERAL, STR_0178_DISPLAY_COMPANY_GENERAL},
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_GRAPHS,          STR_0179_DISPLAY_GRAPHS},
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_COMPANY_LEAGUE,  STR_017A_DISPLAY_COMPANY_LEAGUE},
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_INDUSTRY,        STR_0312_FUND_CONSTRUCTION_OF_NEW},
+{     WWT_IMGBTN,   RESIZE_LEFT,    14,     0,     0,     0,    21, SPR_IMG_PAUSE,           STR_0171_PAUSE_GAME},               // TBN_PAUSE
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_FASTFORWARD,     STR_FAST_FORWARD},                  // TBN_FASTFORWARD
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_SETTINGS,        STR_0187_OPTIONS},                  // TBN_SETTINGS
+{   WWT_IMGBTN_2,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_SAVE,            STR_0172_SAVE_GAME_ABANDON_GAME},   // TBN_SAVEGAME
 
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_TRAINLIST,       STR_017B_DISPLAY_LIST_OF_COMPANY},
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_TRUCKLIST,       STR_017C_DISPLAY_LIST_OF_COMPANY},
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_SHIPLIST,        STR_017D_DISPLAY_LIST_OF_COMPANY},
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_AIRPLANESLIST,   STR_017E_DISPLAY_LIST_OF_COMPANY},
-
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_ZOOMIN,          STR_017F_ZOOM_THE_VIEW_IN},
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_ZOOMOUT,         STR_0180_ZOOM_THE_VIEW_OUT},
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_SMALLMAP,        STR_0174_DISPLAY_MAP},              // TBN_SMALLMAP
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_TOWN,            STR_0176_DISPLAY_TOWN_DIRECTORY},   // TBN_TOWNDIRECTORY
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_SUBSIDIES,       STR_02DC_DISPLAY_SUBSIDIES},        // TBN_SUBSIDIES
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_COMPANY_LIST,    STR_0173_DISPLAY_LIST_OF_COMPANY},  // TBN_STATIONS
 
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_BUILDRAIL,       STR_0181_BUILD_RAILROAD_TRACK},
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_BUILDROAD,       STR_0182_BUILD_ROADS},
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_BUILDWATER,      STR_0183_BUILD_SHIP_DOCKS},
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_BUILDAIR,        STR_0184_BUILD_AIRPORTS},
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_LANDSCAPING,     STR_LANDSCAPING_TOOLBAR_TIP}, // tree icon is 0x2E6
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_COMPANY_FINANCE, STR_0177_DISPLAY_COMPANY_FINANCES}, // TBN_FINANCES
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_COMPANY_GENERAL, STR_0178_DISPLAY_COMPANY_GENERAL},  // TBN_PLAYERS
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_GRAPHS,          STR_0179_DISPLAY_GRAPHS},           // TBN_GRAPHICS
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_COMPANY_LEAGUE,  STR_017A_DISPLAY_COMPANY_LEAGUE},   // TBN_LEAGUE
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_INDUSTRY,        STR_0312_FUND_CONSTRUCTION_OF_NEW}, // TBN_INDUSTRIES
 
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_MUSIC,           STR_01D4_SHOW_SOUND_MUSIC_WINDOW},
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_MESSAGES,        STR_0203_SHOW_LAST_MESSAGE_NEWS},
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_QUERY,           STR_0186_LAND_BLOCK_INFORMATION},
-{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_SWITCH_TOOLBAR,      STR_EMPTY}, // switch toolbar button. only active when toolbar has been split
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_TRAINLIST,       STR_017B_DISPLAY_LIST_OF_COMPANY},  // TBN_TRAINS
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_TRUCKLIST,       STR_017C_DISPLAY_LIST_OF_COMPANY},  // TBN_ROADVEHS
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_SHIPLIST,        STR_017D_DISPLAY_LIST_OF_COMPANY},  // TBN_SHIPS
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_AIRPLANESLIST,   STR_017E_DISPLAY_LIST_OF_COMPANY},  // TBN_AIRCRAFTS
+
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_ZOOMIN,          STR_017F_ZOOM_THE_VIEW_IN},         // TBN_ZOOMIN
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_ZOOMOUT,         STR_0180_ZOOM_THE_VIEW_OUT},        // TBN_ZOOMOUT
+
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_BUILDRAIL,       STR_0181_BUILD_RAILROAD_TRACK},     // TBN_RAILS
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_BUILDROAD,       STR_0182_BUILD_ROADS},              // TBN_ROADS
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_BUILDWATER,      STR_0183_BUILD_SHIP_DOCKS},         // TBN_WATER
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_BUILDAIR,        STR_0184_BUILD_AIRPORTS},           // TBN_AIR
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_LANDSCAPING,     STR_LANDSCAPING_TOOLBAR_TIP},       // TBN_LANDSCAPE tree icon is SPR_IMG_PLANTTREES
+
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_MUSIC,           STR_01D4_SHOW_SOUND_MUSIC_WINDOW},  // TBN_MUSICSOUND
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_MESSAGES,        STR_0203_SHOW_LAST_MESSAGE_NEWS},   // TBN_NEWSREPORT
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_QUERY,           STR_0186_LAND_BLOCK_INFORMATION},   // TBN_HELP
+{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_SWITCH_TOOLBAR,      STR_EMPTY},                         // TBN_SWITCHBAR
 {   WIDGETS_END},
 };
 
 static const WindowDesc _toolb_normal_desc = {
-	0, 0, 0, 22, 640, 22,
+	0, 0, 0, TBP_BUTTONHEIGHT, 640, TBP_BUTTONHEIGHT,
 	WC_MAIN_TOOLBAR, WC_NONE,
 	WDF_STD_TOOLTIPS | WDF_DEF_WIDGET,
 	_toolb_normal_widgets,
@@ -1064,12 +1066,13 @@
 	ToolbarScenDateBackward,
 	ToolbarScenDateForward,
 	ToolbarScenMapTownDir,
-	ToolbarScenZoomIn,
-	ToolbarScenZoomOut,
+	ToolbarZoomInClick,
+	ToolbarZoomOutClick,
 	ToolbarScenGenLand,
 	ToolbarScenGenTown,
 	ToolbarScenGenIndustry,
 	ToolbarScenBuildRoad,
+	ToolbarScenBuildDocks,
 	ToolbarScenPlantTrees,
 	ToolbarScenPlaceSign,
 	NULL,
@@ -1078,7 +1081,6 @@
 	NULL,
 	NULL,
 	NULL,
-	NULL,
 	ToolbarMusicClick,
 	NULL,
 	ToolbarHelpClick,
@@ -1102,7 +1104,7 @@
 
 		/* Draw brown-red toolbar bg. */
 		GfxFillRect(0, 0, this->width - 1, this->height - 1, 0xB2);
-		GfxFillRect(0, 0, this->width - 1, this->height - 1, 0xB4 | (1 << PALETTE_MODIFIER_GREYOUT));
+		GfxFillRect(0, 0, this->width - 1, this->height - 1, 0xB4, FILLRECT_CHECKER);
 
 		this->DrawWidgets();
 
@@ -1128,15 +1130,16 @@
 		switch (keycode) {
 			case WKC_F1: case WKC_PAUSE: ToolbarPauseClick(this); break;
 			case WKC_F2: ShowGameOptions(); break;
-			case WKC_F3: MenuClickSaveLoad(0); break;
+			case WKC_F3: MenuClickSaveLoad(); break;
 			case WKC_F4: ToolbarScenGenLand(this); break;
 			case WKC_F5: ToolbarScenGenTown(this); break;
 			case WKC_F6: ToolbarScenGenIndustry(this); break;
 			case WKC_F7: ToolbarScenBuildRoad(this); break;
-			case WKC_F8: ToolbarScenPlantTrees(this); break;
-			case WKC_F9: ToolbarScenPlaceSign(this); break;
-			case WKC_F10: ShowMusicWindow(); break;
-			case WKC_F11: PlaceLandBlockInfo(); break;
+			case WKC_F8: ToolbarScenBuildDocks(this); break;
+			case WKC_F9: ToolbarScenPlantTrees(this); break;
+			case WKC_F10: ToolbarScenPlaceSign(this); break;
+			case WKC_F11: ShowMusicWindow(); break;
+			case WKC_F12: PlaceLandBlockInfo(); break;
 			case WKC_CTRL | 'S': MenuClickSmallScreenshot(); break;
 			case WKC_CTRL | 'G': MenuClickWorldScreenshot(); break;
 
@@ -1144,13 +1147,13 @@
 			case WKC_NUM_PLUS:
 			case WKC_EQUALS:
 			case WKC_SHIFT | WKC_EQUALS:
-			case WKC_SHIFT | WKC_F5: ToolbarScenZoomIn(this); break;
+			case WKC_SHIFT | WKC_F5: ToolbarZoomInClick(this); break;
 
 			/* those following are all fall through */
 			case WKC_NUM_MINUS:
 			case WKC_MINUS:
 			case WKC_SHIFT | WKC_MINUS:
-			case WKC_SHIFT | WKC_F6: ToolbarScenZoomOut(this); break;
+			case WKC_SHIFT | WKC_F6: ToolbarZoomOutClick(this); break;
 
 			case 'L': ShowEditorTerraformToolbar(); break;
 			case 'M': ShowSmallMap(); break;
@@ -1167,23 +1170,23 @@
 
 	virtual void OnResize(Point new_size, Point delta)
 	{
-		/* There are 15 buttons plus some spacings if the space allows it.
+		/* There are 16 buttons plus some spacings if the space allows it.
 		 * Furthermore there are two panels of which one is non - essential
-		 * and that one can be removed is the space is too small. */
+		 * and that one can be removed if the space is too small. */
 		uint buttons_width;
 		uint spacing;
 
-		static int normal_min_width = (15 * 22) + (2 * 130);
-		static int one_less_panel_min_width = (15 * 22) + 130;
+		static const int normal_min_width = (TBP_SCENARIO_MAXBUTTON * TBP_BUTTONWIDTH) + (2 * TBP_DATEPANELWIDTH);
+		static const int one_less_panel_min_width = (TBP_SCENARIO_MAXBUTTON * TBP_BUTTONWIDTH) + TBP_DATEPANELWIDTH;
 
 		if (this->width >= one_less_panel_min_width) {
-			buttons_width = 15 * 22;
+			buttons_width = TBP_SCENARIO_MAXBUTTON * TBP_BUTTONWIDTH;
 			spacing = this->width - ((this->width >= normal_min_width) ? normal_min_width : one_less_panel_min_width);
 		} else {
-			buttons_width = this->width - 130;
+			buttons_width = this->width - TBP_DATEPANELWIDTH;
 			spacing = 0;
 		}
-		uint extra_spacing_at[] = { 3, 4, 7, 8, 10, 16, 0 };
+		static const uint extra_spacing_at[] = { 3, 4, 7, 8, 10, 17, 0 };
 
 		for (uint i = 0, x = 0, j = 0, b = 0; i < this->widget_count; i++) {
 			switch (i) {
@@ -1195,18 +1198,18 @@
 						continue;
 					}
 
-					x += 130;
+					x += TBP_DATEPANELWIDTH;
 					this->widget[i].right = x - 1;
 					break;
 
-				case TBSE_SEPARATOR: {
+				case TBSE_DATEPANEL: {
 					int offset = x - this->widget[i].left;
 					this->widget[i + 1].left  += offset;
 					this->widget[i + 1].right += offset;
 					this->widget[i + 2].left  += offset;
 					this->widget[i + 2].right += offset;
 					this->widget[i].left = x;
-					x += 130;
+					x += TBP_DATEPANELWIDTH;
 					this->widget[i].right = x - 1;
 					i += 2;
 				} break;
@@ -1215,9 +1218,9 @@
 					if (this->widget[i].bottom == 0) continue;
 
 					this->widget[i].left = x;
-					x += buttons_width / (15 - b);
+					x += buttons_width / (TBP_SCENARIO_MAXBUTTON - b);
 					this->widget[i].right = x - 1;
-					buttons_width -= buttons_width / (15 - b);
+					buttons_width -= buttons_width / (TBP_SCENARIO_MAXBUTTON - b);
 					b++;
 					break;
 			}
@@ -1251,30 +1254,30 @@
 };
 
 static const Widget _toolb_scen_widgets[] = {
-{  WWT_IMGBTN, RESIZE_LEFT, 14,   0,   0,  0, 21, SPR_IMG_PAUSE,       STR_0171_PAUSE_GAME},
-{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_FASTFORWARD, STR_FAST_FORWARD},
+{  WWT_IMGBTN, RESIZE_LEFT, 14,   0,   0,  0, 21, SPR_IMG_PAUSE,       STR_0171_PAUSE_GAME},                  // TBSE_PAUSE
+{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_FASTFORWARD, STR_FAST_FORWARD},                     // TBSE_FASTFORWARD
 {  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_SETTINGS,    STR_0187_OPTIONS},
-{WWT_IMGBTN_2, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_SAVE,        STR_0297_SAVE_SCENARIO_LOAD_SCENARIO},
-
-{   WWT_PANEL, RESIZE_NONE, 14,   0,   0,  0, 21, 0x0,                 STR_NULL},
-
-{   WWT_PANEL, RESIZE_NONE, 14,   0, 129,  0, 21, 0x0,                 STR_NULL},
-{  WWT_IMGBTN, RESIZE_NONE, 14,   3,  14,  5, 16, SPR_ARROW_DOWN,      STR_029E_MOVE_THE_STARTING_DATE},
-{  WWT_IMGBTN, RESIZE_NONE, 14, 113, 125,  5, 16, SPR_ARROW_UP,        STR_029F_MOVE_THE_STARTING_DATE},
+{WWT_IMGBTN_2, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_SAVE,        STR_0297_SAVE_SCENARIO_LOAD_SCENARIO}, // TBSE_SAVESCENARIO
 
-{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_SMALLMAP,    STR_0175_DISPLAY_MAP_TOWN_DIRECTORY},
-
-{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_ZOOMIN,      STR_017F_ZOOM_THE_VIEW_IN},
-{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_ZOOMOUT,     STR_0180_ZOOM_THE_VIEW_OUT},
+{   WWT_PANEL, RESIZE_NONE, 14,   0,   0,  0, 21, 0x0,                 STR_NULL},                             // TBSE_SPACERPANEL
 
-{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_LANDSCAPING, STR_022E_LANDSCAPE_GENERATION},
-{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_TOWN,        STR_022F_TOWN_GENERATION},
-{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_INDUSTRY,    STR_0230_INDUSTRY_GENERATION},
-{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_BUILDROAD,   STR_0231_ROAD_CONSTRUCTION},
-{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_PLANTTREES,  STR_0288_PLANT_TREES},
-{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_SIGN,        STR_0289_PLACE_SIGN},
+{   WWT_PANEL, RESIZE_NONE, 14,   0, 129,  0, 21, 0x0,                 STR_NULL},                             // TBSE_DATEPANEL
+{  WWT_IMGBTN, RESIZE_NONE, 14,   3,  14,  5, 16, SPR_ARROW_DOWN,      STR_029E_MOVE_THE_STARTING_DATE},      // TBSE_DATEBACKWARD
+{  WWT_IMGBTN, RESIZE_NONE, 14, 113, 125,  5, 16, SPR_ARROW_UP,        STR_029F_MOVE_THE_STARTING_DATE},      // TBSE_DATEFORWARD
 
-{   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
+{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_SMALLMAP,    STR_0175_DISPLAY_MAP_TOWN_DIRECTORY},  // TBSE_SMALLMAP
+
+{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_ZOOMIN,      STR_017F_ZOOM_THE_VIEW_IN},            // TBSE_ZOOMIN
+{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_ZOOMOUT,     STR_0180_ZOOM_THE_VIEW_OUT},           // TBSE_ZOOMOUT
+
+{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_LANDSCAPING, STR_022E_LANDSCAPE_GENERATION},        // TBSE_LANDGENERATE
+{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_TOWN,        STR_022F_TOWN_GENERATION},             // TBSE_TOWNGENERATE
+{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_INDUSTRY,    STR_0230_INDUSTRY_GENERATION},         // TBSE_INDUSTRYGENERATE
+{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_BUILDROAD,   STR_0231_ROAD_CONSTRUCTION},           // TBSE_BUILDROAD
+{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_BUILDWATER,  STR_0183_BUILD_SHIP_DOCKS},            // TBSE_BUILDDOCKS
+{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_PLANTTREES,  STR_0288_PLANT_TREES},                 // TBSE_PLANTTREES
+{  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_SIGN,        STR_0289_PLACE_SIGN},                  // TBSE_PLACESIGNS
+
 {   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
 {   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
 {   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
@@ -1288,7 +1291,7 @@
 };
 
 static const WindowDesc _toolb_scen_desc = {
-	0, 0, 130, 22, 640, 22,
+	0, 0, 130, TBP_BUTTONHEIGHT, 640, TBP_BUTTONHEIGHT,
 	WC_MAIN_TOOLBAR, WC_NONE,
 	WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
 	_toolb_scen_widgets,
--- a/src/town.h	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/town.h	Wed Jul 09 13:32:13 2008 +0000
@@ -299,6 +299,8 @@
 	return &_house_specs[house_id];
 }
 
+TileIndex GetHouseNorthPart(HouseID &house);
+
 /**
  * Check if a TownID is valid.
  * @param index to inquiry in the pool of town
--- a/src/town_cmd.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/town_cmd.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -47,6 +47,7 @@
 #include "functions.h"
 #include "animated_tile_func.h"
 #include "date_func.h"
+#include <map>
 
 #include "table/strings.h"
 #include "table/sprites.h"
@@ -2010,7 +2011,7 @@
  * @param house Is changed to the HouseID of the north tile of the same house
  * @return TileDiff from the tile of the given HouseID to the north tile
  */
-static TileIndex GetHouseNorthPart(HouseID &house)
+TileIndex GetHouseNorthPart(HouseID &house)
 {
 	if (house >= 3) { // house id 0,1,2 MUST be single tile houses, or this code breaks.
 		if (GetHouseSpecs(house - 1)->building_flags & TILE_SIZE_2x1) {
@@ -2181,12 +2182,13 @@
 /**
  * Search callback function for TownActionBuildStatue
  * @param tile on which to perform the search
- * @param town_id The town_id for which we want a statue
+ * @param user_data The town_id for which we want a statue
  * @return the result of the test
  */
-static bool SearchTileForStatue(TileIndex tile, uint32 town_id)
+static bool SearchTileForStatue(TileIndex tile, void *user_data)
 {
-	return DoBuildStatueOfCompany(tile, town_id);
+	TownID *town_id = (TownID *)user_data;
+	return DoBuildStatueOfCompany(tile, *town_id);
 }
 
 /**
@@ -2198,7 +2200,7 @@
 {
 	TileIndex tile = t->xy;
 
-	if (CircularTileSearch(&tile, 9, SearchTileForStatue, t->index)) {
+	if (CircularTileSearch(&tile, 9, SearchTileForStatue, &t->index)) {
 		SetBit(t->statues, _current_player); // Once found and built, "inform" the Town
 	}
 }
--- a/src/town_gui.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/town_gui.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -113,27 +113,6 @@
 	return buttons;
 }
 
-/**
- * Get the position of the Nth set bit.
- *
- * If there is no Nth bit set return -1
- *
- * @param bits The value to search in
- * @param n The Nth set bit from which we want to know the position
- * @return The position of the Nth set bit
- */
-static int GetNthSetBit(uint32 bits, int n)
-{
-	if (n >= 0) {
-		uint i;
-		FOR_EACH_SET_BIT(i, bits) {
-			n--;
-			if (n < 0) return i;
-		}
-	}
-	return -1;
-}
-
 struct TownAuthorityWindow : Window {
 private:
 	Town *town;
@@ -149,6 +128,27 @@
 		TWA_EXECUTE,
 	};
 
+	/**
+	 * Get the position of the Nth set bit.
+	 *
+	 * If there is no Nth bit set return -1
+	 *
+	 * @param bits The value to search in
+	 * @param n The Nth set bit from which we want to know the position
+	 * @return The position of the Nth set bit
+	 */
+	static int GetNthSetBit(uint32 bits, int n)
+	{
+		if (n >= 0) {
+			uint i;
+			FOR_EACH_SET_BIT(i, bits) {
+				n--;
+				if (n < 0) return i;
+			}
+		}
+		return -1;
+	}
+
 public:
 	TownAuthorityWindow(const WindowDesc *desc, WindowNumber window_number) :
 			Window(desc, window_number), sel_index(-1)
--- a/src/tunnelbridge_cmd.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/tunnelbridge_cmd.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -160,15 +160,18 @@
 	return CommandCost(EXPENSES_CONSTRUCTION, _price.terraform);
 }
 
-bool CheckBridge_Stuff(BridgeType bridge_type, uint bridge_len)
+bool CheckBridge_Stuff(BridgeType bridge_type, uint bridge_len, uint32 flags)
 {
-	const BridgeSpec *b = GetBridgeSpec(bridge_type);
-	uint max; // max possible length of a bridge (with patch 100)
+	if (flags & DC_QUERY_COST) {
+		return bridge_len <= (_settings_game.construction.longbridges ? 100U : 16U);
+	}
 
 	if (bridge_type >= MAX_BRIDGES) return false;
+
+	const BridgeSpec *b = GetBridgeSpec(bridge_type);
 	if (b->avail_year > _cur_year) return false;
 
-	max = b->max_length;
+	uint max = b->max_length;
 	if (max >= 16 && _settings_game.construction.longbridges) max = 100;
 
 	return b->min_length <= bridge_len && bridge_len <= max;
@@ -255,7 +258,7 @@
 	bridge_len = sx + sy - x - y - 1;
 	if (transport_type != TRANSPORT_WATER) {
 		/* set and test bridge length, availability */
-		if (!CheckBridge_Stuff(bridge_type, bridge_len)) return_cmd_error(STR_5015_CAN_T_BUILD_BRIDGE_HERE);
+		if (!CheckBridge_Stuff(bridge_type, bridge_len, flags)) return_cmd_error(STR_5015_CAN_T_BUILD_BRIDGE_HERE);
 	}
 
 	/* retrieve landscape height and ensure it's on land */
--- a/src/vehicle.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/vehicle.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -1648,7 +1648,7 @@
 			if (v->u.rail.track == TRACK_BIT_DEPOT) // We'll assume the train is facing outwards
 				return DiagDirToDiagTrackdir(GetRailDepotDirection(v->tile)); // Train in depot
 
-			if (v->u.rail.track == TRACK_BIT_WORMHOLE) // train in tunnel, so just use his direction and assume a diagonal track
+			if (v->u.rail.track == TRACK_BIT_WORMHOLE) // train in tunnel or on bridge, so just use his direction and assume a diagonal track
 				return DiagDirToDiagTrackdir(DirToDiagDir(v->direction));
 
 			return TrackDirectionToTrackdir(FindFirstTrack(v->u.rail.track), v->direction);
@@ -1658,6 +1658,9 @@
 				// We'll assume the ship is facing outwards
 				return DiagDirToDiagTrackdir(GetShipDepotDirection(v->tile));
 
+			if (v->u.ship.state == TRACK_BIT_WORMHOLE) // ship on aqueduct, so just use his direction and assume a diagonal track
+				return DiagDirToDiagTrackdir(DirToDiagDir(v->direction));
+
 			return TrackDirectionToTrackdir(FindFirstTrack(v->u.ship.state), v->direction);
 
 		case VEH_ROAD:
--- a/src/vehicle_gui.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/vehicle_gui.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -219,7 +219,7 @@
 				}
 			}
 		}
-	} while (v->type == VEH_TRAIN && (u = u->Next()) != NULL && num_lines < max_lines);
+	} while ((v->type == VEH_TRAIN || v->type == VEH_ROAD) && (u = u->Next()) != NULL && num_lines < max_lines);
 
 	list->num_lines = num_lines;
 	list->items = refit;
@@ -1309,7 +1309,7 @@
 
 				/* Add space for the cargo amount for each part. */
 				for (const Vehicle *u = v; u != NULL; u = u->Next()) {
-					height_extension += 11;
+					if (u->cargo_cap != 0) height_extension += 11;
 				}
 
 				ResizeWindow(this, 0, height_extension);
--- a/src/widget.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/widget.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -162,7 +162,7 @@
 	uint light        = _colour_gradient[ctab][7];
 
 	if (flags & FR_TRANSPARENT) {
-		GfxFillRect(left, top, right, bottom, PALETTE_TO_TRANSPARENT | (1 << USE_COLORTABLE));
+		GfxFillRect(left, top, right, bottom, PALETTE_TO_TRANSPARENT, FILLRECT_RECOLOR);
 	} else {
 		uint interior;
 
@@ -317,7 +317,7 @@
 
 			/* draw "shaded" background */
 			GfxFillRect(r.left, r.top + 10, r.right, r.bottom - 10, c2);
-			GfxFillRect(r.left, r.top + 10, r.right, r.bottom - 10, c1 | (1 << PALETTE_MODIFIER_GREYOUT));
+			GfxFillRect(r.left, r.top + 10, r.right, r.bottom - 10, c1, FILLRECT_CHECKER);
 
 			/* draw shaded lines */
 			GfxFillRect(r.left + 2, r.top + 10, r.left + 2, r.bottom - 10, c1);
@@ -348,7 +348,7 @@
 
 			/* draw "shaded" background */
 			GfxFillRect(r.left, r.top + 10, r.right, r.bottom - 10, c2);
-			GfxFillRect(r.left, r.top + 10, r.right, r.bottom - 10, c1 | (1 << PALETTE_MODIFIER_GREYOUT));
+			GfxFillRect(r.left, r.top + 10, r.right, r.bottom - 10, c1, FILLRECT_CHECKER);
 
 			/* draw shaded lines */
 			GfxFillRect(r.left + 2, r.top + 10, r.left + 2, r.bottom - 10, c1);
@@ -379,7 +379,7 @@
 
 			/* draw "shaded" background */
 			GfxFillRect(r.left + 10, r.top, r.right - 10, r.bottom, c2);
-			GfxFillRect(r.left + 10, r.top, r.right - 10, r.bottom, c1 | (1 << PALETTE_MODIFIER_GREYOUT));
+			GfxFillRect(r.left + 10, r.top, r.right - 10, r.bottom, c1, FILLRECT_CHECKER);
 
 			/* draw shaded lines */
 			GfxFillRect(r.left + 10, r.top + 2, r.right - 10, r.top + 2, c1);
@@ -490,7 +490,7 @@
 		}
 
 		if (this->IsWidgetDisabled(i)) {
-			GfxFillRect(r.left + 1, r.top + 1, r.right - 1, r.bottom - 1, _colour_gradient[wi->color & 0xF][2] | (1 << PALETTE_MODIFIER_GREYOUT));
+			GfxFillRect(r.left + 1, r.top + 1, r.right - 1, r.bottom - 1, _colour_gradient[wi->color & 0xF][2], FILLRECT_CHECKER);
 		}
 	}
 
--- a/src/widgets/dropdown.cpp	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/widgets/dropdown.cpp	Wed Jul 09 13:32:13 2008 +0000
@@ -146,7 +146,7 @@
 
 					if (item->masked) {
 						GfxFillRect(x, y, x + width, y + item_height - 1,
-							(1 << PALETTE_MODIFIER_GREYOUT) | _colour_gradient[this->widget[0].color][5]
+							_colour_gradient[this->widget[0].color][5], FILLRECT_CHECKER
 						);
 					}
 				} else {
--- a/src/window_type.h	Mon Jun 30 21:31:23 2008 +0000
+++ b/src/window_type.h	Wed Jul 09 13:32:13 2008 +0000
@@ -66,7 +66,7 @@
 	WC_SCEN_LAND_GEN,
 	WC_SCEN_TOWN_GEN,
 	WC_SCEN_INDUSTRY,
-	WC_SCEN_BUILD_ROAD,
+	WC_SCEN_BUILD_TOOLBAR,
 	WC_BUILD_TREES,
 	WC_SEND_NETWORK_MSG,
 	WC_DROPDOWN_MENU,