(svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768) cpp_gui
authorKUDr
Sat, 17 Feb 2007 11:12:50 +0000
branchcpp_gui
changeset 6254 abc6ad7c035c
parent 6253 23983700e3d7
child 6255 7215bc7cb877
(svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
bin/data/roadstops.grf
config.lib
configure
docs/landscape.html
source.list
src/ai/default/default.cpp
src/ai/trolly/pathfinder.cpp
src/aircraft_cmd.cpp
src/airport.cpp
src/airport.h
src/airport_gui.cpp
src/airport_movement.h
src/build_vehicle_gui.cpp
src/command.cpp
src/command.h
src/driver.cpp
src/gfxinit.cpp
src/lang/american.txt
src/lang/brazilian_portuguese.txt
src/lang/bulgarian.txt
src/lang/catalan.txt
src/lang/czech.txt
src/lang/dutch.txt
src/lang/english.txt
src/lang/esperanto.txt
src/lang/estonian.txt
src/lang/finnish.txt
src/lang/french.txt
src/lang/german.txt
src/lang/hungarian.txt
src/lang/icelandic.txt
src/lang/italian.txt
src/lang/norwegian_bokmal.txt
src/lang/polish.txt
src/lang/portuguese.txt
src/lang/russian.txt
src/lang/simplified_chinese.txt
src/lang/slovenian.txt
src/lang/spanish.txt
src/lang/swedish.txt
src/lang/traditional_chinese.txt
src/lang/turkish.txt
src/lang/ukrainian.txt
src/lang/unfinished/afrikaans.txt
src/macros.h
src/music/libtimidity.cpp
src/music/libtimidity.h
src/newgrf.cpp
src/newgrf_engine.cpp
src/npf.cpp
src/oldloader.cpp
src/order_cmd.cpp
src/pathfind.cpp
src/road_gui.cpp
src/road_map.cpp
src/roadveh_cmd.cpp
src/saveload.cpp
src/settings.cpp
src/settings_gui.cpp
src/station.cpp
src/station.h
src/station_cmd.cpp
src/station_map.h
src/table/files.h
src/table/sprites.h
src/table/station_land.h
src/tunnelbridge_cmd.cpp
src/unix.cpp
src/variables.h
src/vehicle.cpp
src/vehicle.h
src/video/dedicated_v.cpp
src/window.h
src/yapf/follow_track.hpp
src/yapf/yapf_costrail.hpp
src/yapf/yapf_road.cpp
src/yapf/yapf_settings.h
Binary file bin/data/roadstops.grf has changed
--- a/config.lib	Wed Feb 14 10:46:38 2007 +0000
+++ b/config.lib	Sat Feb 17 11:12:50 2007 +0000
@@ -52,11 +52,12 @@
 	with_iconv="1"
 	with_midi=""
 	with_midi_arg=""
+	with_libtimidity="1"
 	with_freetype="1"
 	with_fontconfig="1"
 	with_psp_config="1"
 
-	save_params_array="build host cc_build cc_host cxx_build cxx_host windres strip lipo os revision endian config_log prefix_dir binary_dir data_dir icon_dir personal_dir install_dir custom_lang_dir second_data_dir enable_install enable_debug enable_profiling enable_dedicated enable_network enable_static enable_translator enable_assert enable_strip with_osx_sysroot enable_universal enable_osx_g5 with_application_bundle with_sdl with_cocoa with_zlib with_png with_makedepend with_direct_music with_sort with_iconv with_midi with_midi_arg with_freetype with_fontconfig with_psp_config CC CXX CFLAGS LDFLAGS"
+	save_params_array="build host cc_build cc_host cxx_build cxx_host windres strip lipo os revision endian config_log prefix_dir binary_dir data_dir icon_dir personal_dir install_dir custom_lang_dir second_data_dir enable_install enable_debug enable_profiling enable_dedicated enable_network enable_static enable_translator enable_assert enable_strip with_osx_sysroot enable_universal enable_osx_g5 with_application_bundle with_sdl with_cocoa with_zlib with_png with_makedepend with_direct_music with_sort with_iconv with_midi with_midi_arg with_libtimidity with_freetype with_fontconfig with_psp_config CC CXX CFLAGS LDFLAGS"
 }
 
 detect_params() {
@@ -184,6 +185,10 @@
 			--without-libpng)             with_png="0";;
 			--with-libpng=*)              with_png="$optarg";;
 
+			--with-libtimidity)           with_libtimidity="2";;
+			--without-libtimidity)        with_libtimidity="0";;
+			--with-libtimidity=*)         with_libtimidity="$optarg";;
+
 			--with-freetype)              with_freetype="2";;
 			--without-freetype)           with_freetype="0";;
 			--with-freetype=*)            with_freetype="$optarg";;
@@ -421,6 +426,7 @@
 	detect_fontconfig
 	detect_iconv
 	detect_pspconfig
+	detect_libtimidity
 
 	if [ "$with_direct_music" = "1" ] || [ "$with_direct_music" = "2" ]; then
 		if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then
@@ -776,6 +782,15 @@
 		CFLAGS="$CFLAGS -DWIN32_ENABLE_DIRECTMUSIC_SUPPORT"
 	fi
 
+	if [ -n "$libtimidity" ]; then
+		if [ "$enable_static" != "0" ]; then
+			LIBS="$LIBS $libtimidity"
+		else
+			LIBS="$LIBS -ltimidity"
+		fi
+		CFLAGS="$CFLAGS -DLIBTIMIDITY"
+	fi
+
 	if [ "$with_iconv" != "0" ]; then
 		CFLAGS="$CFLAGS -DWITH_ICONV"
 		LIBS="$LIBS -liconv"
@@ -1273,65 +1288,78 @@
 	log 1 "checking COCOA... found"
 }
 
-detect_zlib() {
+detect_library() {
+	# $1 - config-param ($with_zlib value)
+	# $2 - library name ('zlib', sets $zlib)
+	# $3 - static library name (libz.a)
+	# $4 - header name (zlib.h)
+
 	# 0 means no, 1 is auto-detect, 2 is force
-	if [ "$with_zlib" = "0" ]; then
-		log 1 "checking zlib... disabled"
+	if [ "$1" = "0" ]; then
+		log 1 "checking $2... disabled"
 
-		zlib=""
+		eval "$2=\"\""
 		return 0
 	fi
 
-	log 2 "detecting zlib"
+	log 2 "detecting $2"
 
-	if [ "$with_zlib" = "1" ] || [ "$with_zlib" = "" ] || [ "$with_zlib" = "2" ]; then
-		zlib=`ls -1 /usr/include/*.h 2>/dev/null | grep "\/zlib.h$"`
-		if [ -z "$zlib" ]; then
-			log 2 "  trying /usr/include/zlib.h... no"
-			zlib=`ls -1 /usr/local/include/*.h 2>/dev/null | grep "\/zlib.h$"`
+	if [ "$1" = "1" ] || [ "$1" = "" ] || [ "$1" = "2" ]; then
+		eval "$2=`ls -1 /usr/include/*.h 2>/dev/null | grep \"\/$4\$\"`"
+		eval "res=\$$2"
+		if [ -z "$res" ]; then
+			log 2 "  trying /usr/include/$4... no"
+			eval "$2=`ls -1 /usr/local/include/*.h 2>/dev/null | grep \"\/$4\$\"`"
 		fi
-		if [ -z "$zlib" ]; then
-			log 2 "  trying /usr/local/include/zlib.h... no"
+		eval "res=\$$2"
+		if [ -z "$res" ]; then
+			log 2 "  trying /usr/local/include/$4... no"
 		fi
 
-		if [ -n "$zlib" ] && [ "$enable_static" != "0" ] && [ "$os" != "OSX" ]; then
-			log 2 "  trying $zlib... found"
+		eval "res=\$$2"
+		if [ -n "$res" ] && [ "$enable_static" != "0" ] && [ "$os" != "OSX" ]; then
+			eval "res=\$$2"
+			log 2 "  trying $res... found"
 			# Now find the static lib, if needed
-			zlib=`ls /lib/*.a 2>/dev/null | grep "\/libz.a$"`
-			if [ -z "$zlib" ]; then
-				log 2 "  trying /lib/libz.a... no"
-				zlib=`ls /usr/lib/*.a 2>/dev/null | grep "\/libz.a$"`
+			eval "$2=`ls /lib/*.a 2>/dev/null | grep \"\/$3\$\"`"
+			eval "res=\$$2"
+			if [ -z "$res" ]; then
+				log 2 "  trying /lib/$3... no"
+				eval "$2=`ls /usr/lib/*.a 2>/dev/null | grep \"\/$3\$\"`"
 			fi
-			if [ -z "$zlib" ]; then
-				log 2 "  trying /usr/lib/libz.a... no"
-				zlib=`ls /usr/local/lib/*.a 2>/dev/null | grep "\/libz.a$"`
+			eval "res=\$$2"
+			if [ -z "$res" ]; then
+				log 2 "  trying /usr/lib/$3... no"
+				eval "$2=`ls /usr/local/lib/*.a 2>/dev/null | grep \"\/$3\$\"`"
 			fi
-			if [ -z "$zlib" ]; then
-				log 2 "  trying /usr/local/lib/libz.a... no"
-				log 1 "configure: error: zlib couldn't be found"
-				log 1 "configure: error: you requested a static link, but I can't find zlib.a"
+			eval "res=\$$2"
+			if [ -z "$res" ]; then
+				log 2 "  trying /usr/local/lib/$3... no"
+				log 1 "configure: error: $2 couldn't be found"
+				log 1 "configure: error: you requested a static link, but I can't find $3"
 
 				exit 1
 			fi
 		fi
 	else
 		# Make sure it exists
-		if [ -f "$with_zlib" ]; then
-			zlib=`ls $with_zlib 2>/dev/null`
+		if [ -f "$1" ]; then
+			eval "$2=`ls $1 2>/dev/null`"
 		else
-			zlib=`ls $with_zlib/libz.a 2>/dev/null`
+			eval "$2=`ls $1/$3 2>/dev/null`"
 		fi
 	fi
 
-	if [ -z "$zlib" ]; then
-		log 1 "checking zlib... not found"
-		if [ "$with_zlib" = "2" ]; then
-			log 1 "configure: error: zlib couldn't be found"
+	eval "res=\$$2"
+	if [ -z "$res" ]; then
+		log 1 "checking $2... not found"
+		if [ "$1" = "2" ]; then
+			log 1 "configure: error: $2 couldn't be found"
 
 			exit 1
-		elif [ "$with_zlib" != "1" ]; then
-			log 1 "configure: error: zlib couldn't be found"
-			log 1 "configure: error: you supplied '$with_zlib', but it seems invalid"
+		elif [ "$1" != "1" ]; then
+			log 1 "configure: error: $2 couldn't be found"
+			log 1 "configure: error: you supplied '$1', but it seems invalid"
 
 			exit 1
 		fi
@@ -1339,9 +1367,18 @@
 		return 0
 	fi
 
-	log 2 "  trying $zlib... found"
+	eval "res=\$$2"
+	log 2 "  trying $res... found"
 
-	log 1 "checking zlib... found"
+	log 1 "checking $2... found"
+}
+
+detect_zlib() {
+	detect_library "$with_zlib" "zlib" "libz.a" "zlib.h"
+}
+
+detect_libtimidity() {
+	detect_library "$with_libtimidity" "libtimidity" "libtimidity.a" "timidity.h"
 }
 
 detect_png() {
--- a/configure	Wed Feb 14 10:46:38 2007 +0000
+++ b/configure	Sat Feb 17 11:12:50 2007 +0000
@@ -82,6 +82,7 @@
 		if ($0 == "WINCE"       && "'$os'" != "WINCE")             { next; }
 		if ($0 == "MSVC"        && "'$os'" != "MSVC")              { next; }
 		if ($0 == "DIRECTMUSIC" && "'$with_direct_music'" == "0")  { next; }
+		if ($0 == "LIBTIMIDITY" && "'$libtimidity'" == "" )        { next; }
 
 		skip += 1;
 
--- a/docs/landscape.html	Wed Feb 14 10:46:38 2007 +0000
+++ b/docs/landscape.html	Sat Feb 17 11:12:50 2007 +0000
@@ -1,351 +1,426 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
+
 <head>
-<meta name="Author" content="Marcin Grzegorczyk">
-<meta name="Description" content="Structure of OpenTTD (OTTD) landscape arrays">
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<title>OpenTTD Landscape Internals</title>
+ <meta name="Author" content="Marcin Grzegorczyk">
+ <meta name="Description" content="Structure of OpenTTD (OTTD) landscape arrays">
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>OpenTTD Landscape Internals</title>
+</head>
 
-</head>
 <body>
 
-<h3><a name="Landscape">Landscape</a></h3>
-<p> Seven attributes (counting &quot;type_height&quot;) hold the informations
-  about a tile. These attributes are referred to as "<span style="font-weight: bold;">type_height</span>",
+ <h3><a name="Landscape">Landscape</a></h3>
+ <p>Seven attributes (counting &quot;type_height&quot;) hold the informations about a tile.<BR>
+  These attributes are referred to as
+  "<span style="font-weight: bold;">type_height</span>",
   "<span style="font-weight: bold;">m1</span>", "<span style="font-weight: bold;">m2</span>",
   "<span style="font-weight: bold;">m3</span>", "<span style="font-weight: bold;">m4</span>",
-  "<span style="font-weight: bold;">m5</span>" and "<span style="font-weight: bold;">m6</span>".
+  "<span style="font-weight: bold;">m5</span>" and "<span style="font-weight: bold;">m6</span>".<BR>
   The most important value is the class of a tile, stored in the upper 4 bits
   of the type_height array. The lower 4 bits are used to encode the height and
-  slope data. For a graphical representation of the tile-layout have a look at
-  <a href="landscape_grid.html">Landscape grid</a> page. </p>
-
-<p><a name="OwnershipInfo">The owner of a tile</a>, as frequently associated with attribute m1, can be either players (human or AI) or "Game entities".
-They are identified using:
-<ul>
-  <li>00 = current player</li>
-  <li>01..08 = AI or network players</li>
-  <li>0F = a town owns the tile</li>
-  <li>10 = nobody owns the tile</li>
-  <li>11 = "water" owns the tile</li>
-  <li>FF = spectator in MP or in scenario editor</li>
-</ul>
-
-<p>OTTD's class-specific periodic tile processing routine is called once every +256 ticks for each tile.</p>
-
-<table border=1 cellpadding=3>
-<tr><th align=left>Class</th><th align=left>Meaning & details of encoding</th></tr>
-
-<tr><td valign=top nowrap><a name="Class0"><tt> 0 </tt></a></td><td>
-<ul>
-<li>m5 bits 4..0: tile type:
-<table>
-<tr><td nowrap valign=top><tt>00</tt>&nbsp; </td><td align=left>bare land</td></tr>
-<tr><td nowrap valign=top><tt>01</tt>&nbsp; </td><td align=left>1/3 grass</td></tr>
-<tr><td nowrap valign=top><tt>02</tt>&nbsp; </td><td align=left>2/3 grass</td></tr>
-<tr><td nowrap valign=top><tt>03</tt>&nbsp; </td><td align=left>full grass</td></tr>
-<tr><td nowrap valign=top><tt>07</tt>&nbsp; </td><td align=left>rough land</td></tr>
-<tr><td nowrap valign=top><tt>0B</tt>&nbsp; </td><td align=left>rocks</td></tr>
-<tr><td nowrap valign=top><tt>0F</tt>&nbsp; </td><td align=left>fields; type of fields in m3 bits 3..0 (legal values: 0 through 9)<br>
-  m2: Index into the array of industries (farms), INVALID_INDUSTRY (0xFFFF) if farm has been removed </td>
-</tr>
-<tr><td nowrap valign=top><tt>10</tt>&nbsp; </td><td align=left>1/4 snow</td></tr>
-<tr><td nowrap valign=top><tt>11</tt>&nbsp; </td><td align=left>2/4 snow</td></tr>
-<tr><td nowrap valign=top><tt>12</tt>&nbsp; </td><td align=left>3/4 snow</td></tr>
-<tr><td nowrap valign=top><tt>13</tt>&nbsp; </td><td align=left>full snow</td></tr>
-<tr><td nowrap valign=top><tt>15</tt>&nbsp; </td><td align=left>partial desert</td></tr>
-<tr><td nowrap valign=top><tt>17</tt>&nbsp; </td><td align=left>full desert</td></tr>
-</table>
-</li>
-<li>m5 bits 7..5: update counter, incremented on every periodic processing for tile types other than <tt>03</tt>, <tt>07</tt>, <tt>0B</tt> and <tt>10</tt> and above, on wraparound the tile is updated (for fields, the type of fields in m3 is increased, for other types the tile type in m5 is increased)
-<br>(for snow and desert, these bits are not used, tile is updated on every periodic processing)
-</li>
-<li>m1: <a href="#OwnershipInfo">owner</a> of the tile (normally <tt>10</tt>)
-</li>
-<li>m4 bits 7..5: type of hedge on the SW border of the tile (1 through 6, or 0=none); bits 4..2: same for the SE border
-</li>
-</ul>
-</td></tr>
-
-<tr><td valign=top nowrap><a name="Class1"><tt> 1 </tt></a></td><td>
-m5 bit 7 clear: railway track
-<ul>
-<li>m5 bits 0..5: track layout: bit set = track present:
-<table>
-<tr><td nowrap valign=top>bit 0: </td><td align=left>in the X direction</td></tr>
-<tr><td nowrap valign=top>bit 1: </td><td align=left>in the Y direction</td></tr>
-<tr><td nowrap valign=top>bit 2: </td><td align=left>in the north corner (direction W-E)</td></tr>
-<tr><td nowrap valign=top>bit 3: </td><td align=left>in the south corner (direction W-E)</td></tr>
-<tr><td nowrap valign=top>bit 4: </td><td align=left>in the west corner (direction N-S)</td></tr>
-<tr><td nowrap valign=top>bit 5: </td><td align=left>in the east corner (direction N-S)</td></tr>
-</table></li>
-<li>m5 bit 6 set = with signals:
-<ul>
-<li>m3 bits 7..4: bit set = signal present:
-<ul>
-<li>For track in the X direction:
-<table>
-<tr><td nowrap valign=top>bit 6: </td><td align=left>signal in the SW direction</td></tr>
-<tr><td nowrap valign=top>bit 7: </td><td align=left>signal in the NE direction</td></tr>
-</table></li>
-<li>For track in the Y direction:
-<table>
-<tr><td nowrap valign=top>bit 6: </td><td align=left>signal in the NW direction</td></tr>
-<tr><td nowrap valign=top>bit 7: </td><td align=left>signal in the SE direction</td></tr>
-</table></li>
-<li>For tracks in the W-E direction:
-<table>
-<tr><td nowrap valign=top>bit 4: </td><td align=left>signal in the W direction on the track in the S corner</td></tr>
-<tr><td nowrap valign=top>bit 5: </td><td align=left>signal in the E direction on the track in the S corner</td></tr>
-<tr><td nowrap valign=top>bit 6: </td><td align=left>signal in the W direction on the track in the N corner</td></tr>
-<tr><td nowrap valign=top>bit 7: </td><td align=left>signal in the E direction on the track in the N corner</td></tr>
-</table></li>
-<li>For tracks in the N-S direction:
-<table>
-<tr><td nowrap valign=top>bit 4: </td><td align=left>signal in the S direction on the track in the E corner</td></tr>
-<tr><td nowrap valign=top>bit 5: </td><td align=left>signal in the N direction on the track in the E corner</td></tr>
-<tr><td nowrap valign=top>bit 6: </td><td align=left>signal in the S direction on the track in the W corner</td></tr>
-<tr><td nowrap valign=top>bit 7: </td><td align=left>signal in the N direction on the track in the W corner</td></tr>
-</table></li>
-</ul></li>
-<li>m2 bits 7..4: bit clear = signal shows red; same bits as in m3</li>
-<li>OpenTTD bits in m4:
-<table>
-<tr><td nowrap valign=top>bits 1..0: </td><td align=left>type of signal:</td></tr>
-<tr><td nowrap valign=top><tt>00</tt>: </td><td align=left>normal signals</td></tr>
-<tr><td nowrap valign=top><tt>01</tt>: </td><td align=left>pre-signals</td></tr>
-<tr><td nowrap valign=top><tt>10</tt>: </td><td align=left>exit-signals</td></tr>
-<tr><td nowrap valign=top><tt>11</tt>: </td><td align=left>combo-signals</td></tr>
-<tr><td nowrap valign=top>bit 2: </td><td align=left>set = semaphore signals, clear = light signals</td></tr>
-</table></li>
-</ul></li>
-<li>m1: <a href="#OwnershipInfo">owner</a> of the track
-</li>
-<li>m2 bits 0..3:
-<table>
-<tr><td nowrap valign=top><tt>0</tt>&nbsp; </td><td align=left>on bare land</td></tr>
-<tr><td nowrap valign=top><tt>1</tt>&nbsp; </td><td align=left>on grass, no fences</td></tr>
-<tr><td nowrap valign=top><tt>2</tt>&nbsp; </td><td align=left>fence on the NW side</td></tr>
-<tr><td nowrap valign=top><tt>3</tt>&nbsp; </td><td align=left>fence on the SE side</td></tr>
-<tr><td nowrap valign=top><tt>4</tt>&nbsp; </td><td align=left>fences on the NW and SE sides</td></tr>
-<tr><td nowrap valign=top><tt>5</tt>&nbsp; </td><td align=left>fence on the NE side</td></tr>
-<tr><td nowrap valign=top><tt>6</tt>&nbsp; </td><td align=left>fence on the SW side</td></tr>
-<tr><td nowrap valign=top><tt>7</tt>&nbsp; </td><td align=left>fences on the NE and SW sides</td></tr>
-<tr><td nowrap valign=top><tt>8</tt>&nbsp; </td><td align=left>fence on the E side (track in the W corner)</td></tr>
-<tr><td nowrap valign=top><tt>9</tt>&nbsp; </td><td align=left>fence on the W side (track in the E corner)</td></tr>
-<tr><td nowrap valign=top><tt>A</tt>&nbsp; </td><td align=left>fence on the S side (track in the N corner)</td></tr>
-<tr><td nowrap valign=top><tt>B</tt>&nbsp; </td><td align=left>fence on the N side (track in the S corner)</td></tr>
-<tr><td nowrap valign=top><tt>C</tt>&nbsp; </td><td align=left>on snow or desert</td></tr>
-</table></li>
-<li>m3 bits 0..3 = <a name="TrackType">track type</a>: <tt>0</tt> - conventional railway, <tt>1</tt> - electrified railway, <tt>2</tt> - monorail, <tt>3</tt> - maglev
-</ul>
-m5 bits 7 and 6 set: railway depot / checkpoints
-<ul>
-<li>m5 value C0..C3: railway depot
-<br>m5 bits 1..0 - direction: exit towards: <tt>00</tt> = NE, <tt>01</tt> = SE, <tt>02</tt> = SW, <tt>03</tt> = NW</li>
-<li>m5 value C4..C5: checkpoint
-<br>bit 0: clear = in X direction, set = in Y direction
-<br>
-<br>
-<li>m1: <a href="#OwnershipInfo">owner</a> of the depot / checkpoint</li>
-<li>m2: For waypoints, index into the array of waypoints.</li>
-<li>m3 bits 0..3 = <a href="#TrackType">track type</a></li>
-<li>m4 bits 0..3 = ground type, as per m2 bits 0..3 for railway tiles.</li>
-</ul>
-</td></tr>
+  slope data.<BR>
+  For a graphical representation of the tile-layout have a look at
+  <a href="landscape_grid.html">Landscape grid</a> page.
+ </p>
 
-<tr><td valign=top nowrap><a name="Class2"><tt> 2 </tt></a></td><td>
-m5 bits 7..4 clear: road
-<ul>
-<li>m5 bits 3..0: road layout: bit set = road piece present:
-<table>
-<tr><td nowrap valign=top>bit 0: </td><td align=left>NW piece</td></tr>
-<tr><td nowrap valign=top>bit 1: </td><td align=left>SW piece</td></tr>
-<tr><td nowrap valign=top>bit 2: </td><td align=left>SE piece</td></tr>
-<tr><td nowrap valign=top>bit 3: </td><td align=left>NE piece</td></tr>
-</table></li>
-<li>m1: <a href="#OwnershipInfo">owner</a> of the road</li>
-<li>m2: Index into the array of towns, 0 for non-town roads</li>
-<li>m4 bits 0..3: counter for the roadworks</li>
-<li>m4 bits 4..6: <tt>0</tt> - on bare land, <tt>1</tt> - on grass, <tt>2</tt> - paved, <tt>3</tt> - with streetlights, <tt>5</tt> - tree-lined, <tt>6</tt> - on grass with road works, <tt>7</tt> - paved with road works</li>
-<li>m4 bit 7 set = on snow or desert</li>
-</ul>
-m5 bit 4 set, bits 7..5 clear: level crossing
-<ul>
-<li>m5 bit 3: clear - road in the X direction, set - road in the Y direction (railway track always perpendicular)</li>
-<li>m5 bit 2: set if crossing lights are on</li>
-<li>m1: <a href="#OwnershipInfo">owner</a> of the railway track</li>
-<li>m2: Index into the array of towns, 0 for non-town roads</li>
-<li>m3 bits 0..7: <a href="#OwnershipInfo">owner</a> of the road</li>
-<li>m4 bits 3..0: <a href="#TrackType">track type</a></li>
-<li>m4 bits 4..6: <tt>0</tt> - on bare land, <tt>1</tt> - on grass, <tt>2</tt> or higher - paved</li>
-<li>m4 bit 7 set = on snow or desert</li>
-</ul>
-m5 bit 5 set: road depot
-<ul>
-<li>m5 bits 3..0 - direction: exit towards: <tt>0</tt> = NE, <tt>1</tt> = SE, <tt>2</tt> = SW, <tt>3</tt> = NW</li>
-<li>m1: <a href="#OwnershipInfo">owner</a> of the depot</li>
-<li>m4 bit 7 set = on snow or desert (not displayed, but set internally)</li>
-</ul>
-</td></tr>
+ <p>The <a name="OwnershipInfo">owner of a tile</a>, as frequently associated with attribute m1,
+  can be either players (human or AI) or "Game entities".
+  They are identified using:
+  <table>
+   <tr><td><tt>00</tt>&nbsp; </td><td align=left>current player</td></tr>
+   <tr><td><tt>01..08</tt>&nbsp; </td><td align=left>AI or network players</td></tr>
+   <tr><td><tt>0F</tt>&nbsp; </td><td align=left>a town owns the tile</td></tr>
+   <tr><td><tt>10</tt>&nbsp; </td><td align=left>nobody owns the tile</td></tr>
+   <tr><td><tt>11</tt>&nbsp; </td><td align=left>"water" owns the tile</td></tr>
+   <tr><td><tt>FF</tt>&nbsp; </td><td align=left>spectator in MP or in scenario editor</td></tr>
+  </table></p>
 
-<tr><td valign=top nowrap><a name="Class3"><tt> 3 </tt></a></td><td>
-Town building
-<ul>
-<li>m2: Index into the array of towns</li>
-<li>m4: <a name="HouseTypes">town building type</a>:
-<p><small>Note: In the climate list, 'sub-arctic' means below the snow line, and 'snow' means above the snow line in the sub-arctic climate.</small></p>
-<table>
-<tr><th align=left>Type&nbsp;</th><th align=left>Size&nbsp;</th><th align=left>Climates&nbsp;</th><th align=left>Description</th></tr>
-<tr><td nowrap valign=top><tt>00</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>tall office block</td></tr>
-<tr><td nowrap valign=top><tt>01</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>office block</td></tr>
-<tr><td nowrap valign=top><tt>02</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>small block of flats</td></tr>
-<tr><td nowrap valign=top><tt>03</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>church</td></tr>
-<tr><td nowrap valign=top><tt>04</tt>&nbsp; </td><td>1&times;1</td><td>temperate, sub-arctic, sub-tropical</td><td align=left>large office block</td></tr>
-<tr><td nowrap valign=top><tt>05</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>large office block</td></tr>
-<tr><td nowrap valign=top><tt>06</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>town houses</td></tr>
-<tr><td nowrap valign=top><tt>07</tt>..<tt>08</tt>&nbsp; </td><td>1&times;2</td><td>temperate</td><td align=left>hotel</td></tr>
-<tr><td nowrap valign=top><tt>09</tt>&nbsp; </td><td>1&times;1</td><td>temperate, sub-arctic, sub-tropical&nbsp;&nbsp;</td><td align=left>statue</td></tr>
-<tr><td nowrap valign=top><tt>0A</tt>&nbsp; </td><td>1&times;1</td><td>temperate, sub-arctic, sub-tropical</td><td align=left>fountain</td></tr>
-<tr><td nowrap valign=top><tt>0B</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>park (with a pond)</td></tr>
-<tr><td nowrap valign=top><tt>0C</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>park (with an alley)</td></tr>
-<tr><td nowrap valign=top><tt>0D</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>office block</td></tr>
-<tr><td nowrap valign=top><tt>0E</tt>..<tt>10</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>various types of shops and offices</td></tr>
-<tr><td nowrap valign=top><tt>11</tt>&nbsp; </td><td>1&times;1</td><td>temperate, sub-arctic, sub-tropical</td><td align=left>modern office building</td></tr>
-<tr><td nowrap valign=top><tt>12</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>warehouse</td></tr>
-<tr><td nowrap valign=top><tt>13</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>office block (with spiral stairway on the side)</td></tr>
-<tr><td nowrap valign=top><tt>14</tt>..<tt>17</tt>&nbsp; </td><td>2&times;2</td><td>temperate</td><td align=left>stadium</td></tr>
-<tr><td nowrap valign=top><tt>18</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>old houses</td></tr>
-<tr><td nowrap valign=top><tt>19</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>cottages</td></tr>
-<tr><td nowrap valign=top><tt>1A</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>houses</td></tr>
-<tr><td nowrap valign=top><tt>1B</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>flats</td></tr>
-<tr><td nowrap valign=top><tt>1C</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>tall office block</td></tr>
-<tr><td nowrap valign=top><tt>1D</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>shops and offices</td></tr>
-<tr><td nowrap valign=top><tt>1E</tt>&nbsp; </td><td>1&times;1</td><td>temperate, sub-tropical</td><td align=left>shops and offices</td></tr>
-<tr><td nowrap valign=top><tt>1F</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>theatre</td></tr>
-<tr><td nowrap valign=top><tt>20</tt>..<tt>23</tt>&nbsp; </td><td>2&times;2</td><td>temperate, sub-arctic, sub-tropical</td><td align=left>stadium (modern style)</td></tr>
-<tr><td nowrap valign=top><tt>24</tt>&nbsp; </td><td>1&times;1</td><td>temperate, sub-arctic, sub-tropical</td><td align=left>offices (the modern 'vertical tube' style)</td></tr>
-<tr><td nowrap valign=top><tt>25</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>houses</td></tr>
-<tr><td nowrap valign=top><tt>26</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>houses</td></tr>
-<tr><td nowrap valign=top><tt>27</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>cinema</td></tr>
-<tr><td nowrap valign=top><tt>28</tt>..<tt>2B</tt>&nbsp; </td><td>2&times;2</td><td>temperate</td><td align=left>shopping mall</td></tr>
-<tr><td nowrap valign=top><tt>2C</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>flats</td></tr>
-<tr><td nowrap valign=top><tt>2D</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>flats</td></tr>
-<tr><td nowrap valign=top><tt>2E</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>houses</td></tr>
-<tr><td nowrap valign=top><tt>2F</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>houses</td></tr>
-<tr><td nowrap valign=top><tt>30</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>houses</td></tr>
-<tr><td nowrap valign=top><tt>31</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>houses</td></tr>
-<tr><td nowrap valign=top><tt>32</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic, sub-tropical</td><td align=left>tall office block</td></tr>
-<tr><td nowrap valign=top><tt>33</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>tall office block</td></tr>
-<tr><td nowrap valign=top><tt>34</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>tall office block</td></tr>
-<tr><td nowrap valign=top><tt>35</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>tall office block</td></tr>
-<tr><td nowrap valign=top><tt>36</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic, sub-tropical</td><td align=left>tall office block</td></tr>
-<tr><td nowrap valign=top><tt>37</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>tall office block</td></tr>
-<tr><td nowrap valign=top><tt>38</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>houses</td></tr>
-<tr><td nowrap valign=top><tt>39</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>houses</td></tr>
-<tr><td nowrap valign=top><tt>3A</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>shops and offices</td></tr>
-<tr><td nowrap valign=top><tt>3B</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>shops and offices</td></tr>
-<tr><td nowrap valign=top><tt>3C</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>church</td></tr>
-<tr><td nowrap valign=top><tt>3D</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>church</td></tr>
-<tr><td nowrap valign=top><tt>3E</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>houses</td></tr>
-<tr><td nowrap valign=top><tt>3F</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>houses</td></tr>
-<tr><td nowrap valign=top><tt>40</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>shops and offices</td></tr>
-<tr><td nowrap valign=top><tt>41</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>shops and offices</td></tr>
-<tr><td nowrap valign=top><tt>42</tt>..<tt>43</tt>&nbsp; </td><td>1&times;2</td><td>sub-arctic</td><td align=left>hotel</td></tr>
-<tr><td nowrap valign=top><tt>44</tt>..<tt>45</tt>&nbsp; </td><td>1&times;2</td><td>snow</td><td align=left>hotel</td></tr>
-<tr><td nowrap valign=top><tt>46</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic, sub-tropical</td><td align=left>shops and offices</td></tr>
-<tr><td nowrap valign=top><tt>47</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>shops and offices</td></tr>
-<tr><td nowrap valign=top><tt>48</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>tall office block</td></tr>
-<tr><td nowrap valign=top><tt>49</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>tall office block</td></tr>
-<tr><td nowrap valign=top><tt>4A</tt>..<tt>4B</tt>&nbsp; </td><td>2&times;1</td><td>sub-arctic</td><td align=left>tall office block</td></tr>
-<tr><td nowrap valign=top><tt>4C</tt>..<tt>4D</tt>&nbsp; </td><td>2&times;1</td><td>snow</td><td align=left>tall office block</td></tr>
-<tr><td nowrap valign=top><tt>4E</tt>&nbsp; </td><td>1&times;1</td><td>sub-tropical</td><td align=left>houses (with a tree in a corner)</td></tr>
-<tr><td nowrap valign=top><tt>4F</tt>, <tt>50</tt>&nbsp; </td><td>1&times;1</td><td>sub-tropical</td><td align=left>houses</td></tr>
-<tr><td nowrap valign=top><tt>51</tt>&nbsp; </td><td>1&times;1</td><td>sub-tropical</td><td align=left>houses (suburb-type)</td></tr>
-<tr><td nowrap valign=top><tt>52</tt>&nbsp; </td><td>1&times;1</td><td>sub-tropical</td><td align=left>flats</td></tr>
-<tr><td nowrap valign=top><tt>53</tt>&nbsp; </td><td>1&times;1</td><td>sub-tropical</td><td align=left>church</td></tr>
-<tr><td nowrap valign=top><tt>54</tt>&nbsp; </td><td>1&times;1</td><td>sub-tropical</td><td align=left>houses (with two trees in front)</td></tr>
-<tr><td nowrap valign=top><tt>55</tt>, <tt>56</tt>&nbsp; </td><td>1&times;1</td><td>sub-tropical</td><td align=left>flats</td></tr>
-<tr><td nowrap valign=top><tt>57</tt>..<tt>58</tt>&nbsp; </td><td>2&times;1</td><td>sub-tropical</td><td align=left>tall office block</td></tr>
-<tr><td nowrap valign=top><tt>59</tt>&nbsp; </td><td>1&times;1</td><td>sub-tropical</td><td align=left>flats</td></tr>
-<tr><td nowrap valign=top><tt>5A</tt>&nbsp; </td><td>1&times;1</td><td>sub-tropical</td><td align=left>tall office block</td></tr>
-<tr><td nowrap valign=top><tt>5B</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>church</td></tr>
-<tr><td nowrap valign=top><tt>5C</tt>..<tt>61</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>various types of toyland houses</td></tr>
-<tr><td nowrap valign=top><tt>62</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>tall office block</td></tr>
-<tr><td nowrap valign=top><tt>63</tt>..<tt>64</tt>&nbsp; </td><td>1&times;2</td><td>toyland</td><td align=left>houses ('shoe' style)</td></tr>
-<tr><td nowrap valign=top><tt>65</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>tall office block</td></tr>
-<tr><td nowrap valign=top><tt>66</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>igloo</td></tr>
-<tr><td nowrap valign=top><tt>67</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>tepees</td></tr>
-<tr><td nowrap valign=top><tt>68</tt>, <tt>69</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>shops and offices</td></tr>
-<tr><td nowrap valign=top><tt>6A</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>tall office block</td></tr>
-<tr><td nowrap valign=top><tt>6B</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>statue</td></tr>
-<tr><td nowrap valign=top><tt>6C</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>teapot-house</td></tr>
-<tr><td nowrap valign=top><tt>6D</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>piggy-bank</td></tr>
-<tr><td colspan=2></td></tr> <!-- spacer -- -- (and I don't mean a walk) -->
-</table></li>
-<li>m3 bits 7..6: stage of construction (<tt>3</tt> = completed)</li>
-<li>m5 bits 2..0: construction counter, for buildings under construction incremented on every periodic tile processing, on wraparound the stage of construction in m3 is increased</li>
-<li>for large office blocks (types <tt>04</tt> and <tt>05</tt>):
-<ul>
-<li>m1 bits 6..0: position of the lift</li>
-<li>m1 bit 7: if set the lift is moving</li>
-<li>m5 bit 7: if set then m5 bits 5..0 hold the destination floor of the lift, which could be 0..6, except 1, so the building has 6 effective floors. This due to the fact that the first floor is 2 'normal' floors high. One 'normal' floor has a height of 6 lift positions.</li>
-</ul></li>
-</ul>
-</td></tr>
+ <p>OTTD's class-specific periodic tile processing routine is called once every +256 ticks for each tile.</p>
 
-<tr><td valign=top nowrap><a name="Class4"><tt> 4 </tt></a></td><td>
-Trees
-<ul>
-<li>m5 bits 7..6: number of trees minus one</li>
-<li>m5 bits 2..0: growth status: <tt>0</tt>..<tt>2</tt> - one of trees is growing, <tt>3</tt> - all trees are fully grown, <tt>4</tt>..<tt>6</tt> - one of trees is withering</li>
-<li>m3 bits 7..0: type of trees:
-<table>
-<tr><td nowrap valign=top><tt>00</tt>..<tt>0B</tt>&nbsp; </td><td align=left>temperate climate trees</td></tr>
-<tr><td nowrap valign=top><tt>0C</tt>..<tt>13</tt>&nbsp; </td><td align=left>sub-arctic climate trees</td></tr>
-<tr><td nowrap valign=top><tt>14</tt>..<tt>1A</tt>&nbsp; </td><td align=left>rainforest trees</td></tr>
-<tr><td nowrap valign=top><tt>1B</tt> </td><td align=left>cactus plants</td></tr>
-<tr><td nowrap valign=top><tt>1C</tt>..<tt>1F</tt>&nbsp; </td><td align=left>sub-tropical climate, non-rainforest, non-desert trees</td></tr>
-<tr><td nowrap valign=top><tt>20</tt>..<tt>28</tt>&nbsp; </td><td align=left>toyland trees</td></tr>
-</table>
-(note: the actually displayed set of trees depends on both type and number of trees)
-</li>
-<li>m4 bits 7..5: type of hedge on the SW border of the tile (1 through 6, or 0=none)</li>
-<li>m4 bits 4..2: type of hedge on the SE border of the tile (1 through 6, or 0=none)</li>
-<li>m2 bits 5..4:
-<table>
-<tr><td nowrap valign=top><tt>0</tt>&nbsp; </td><td align=left>on grass</td></tr>
-<tr><td nowrap valign=top><tt>1</tt>&nbsp; </td><td align=left>on rough land</td></tr>
-<tr><td nowrap valign=top><tt>2</tt>&nbsp; </td><td align=left>on snow or desert; m2 bits 7..6 - amount of snow or desert (for desert always set to 3 in TTD)
-</td></tr>
-</table></li>
-<li>m2 bits 3..0: update counter, incremented on every periodic processing, on wraparound the growth status is updated (or, if it's <tt>3</tt>, a random action is taken)</li>
-<li>m1: <a href="#OwnershipInfo">owner</a> (normally <tt>10</tt>)</li>
-</ul>
-</td></tr>
+ <table border=1 cellpadding=3>
+  <tr><th align=left>Class</th><th align=left>Meaning & details of encoding</th></tr>
 
-<tr><td valign=top nowrap><a name="Class5"><tt> 5 </tt></a></td><td>
-Station tile
-<ul>
-<li>m5: tile type:
-<table>
-<tr><td nowrap valign=top><tt>00</tt>..<tt>07</tt>&nbsp; </td><td align=left>railway station
-<br><tt>00</tt>..<tt>01</tt> - open platform, <tt>02</tt>..<tt>03</tt> - open platform with station building, <tt>04</tt>....<tt>07</tt> - roofed platform
-<br>bit 0: clear = in X direction, set = in Y direction
-</td></tr>
-<tr><td nowrap valign=top><tt>08</tt>..<tt>33</tt>&nbsp; </td><td align=left>large airport
-<table>
-<tr><td nowrap valign=top><tt>0B</tt>&nbsp; </td><td align=left>pad 1</td></tr>
-<tr><td nowrap valign=top><tt>16</tt>..<tt>19</tt>&nbsp; </td><td align=left>runway middle</td></tr>
-<tr><td nowrap valign=top><tt>1A</tt>&nbsp; </td><td align=left>runway ending</td></tr>
-<tr><td nowrap valign=top><tt>1C</tt>&nbsp; </td><td align=left>control tower</td></tr>
-<tr><td nowrap valign=top><tt>20</tt>&nbsp; </td><td align=left>hangar</td></tr>
-<tr><td nowrap valign=top><tt>21</tt>&nbsp; </td><td align=left>pad 3</td></tr>
-<tr><td nowrap valign=top><tt>22</tt>&nbsp; </td><td align=left>pad 2</td></tr>
-<tr><td nowrap valign=top><tt>27</tt>..<tt>32</tt>&nbsp; </td><td align=left>radar (animated)</td></tr>
-<tr><td nowrap valign=top><tt>33</tt>&nbsp; </td><td align=left>transmitter</td></tr>
-</table>
-The initial layout of a large airport is (rows in Y direction, columns in X direction):
+  <tr>
+   <td valign=top nowrap><a name="Class0"><tt> 0 </tt></a></td>
+   <td>
+    <ul>
+     <li>m5 bits 4..0: tile type:
+      <table>
+       <tr><td nowrap valign=top><tt>00</tt>&nbsp; </td><td align=left>bare land</td></tr>
+       <tr><td nowrap valign=top><tt>01</tt>&nbsp; </td><td align=left>1/3 grass</td></tr>
+       <tr><td nowrap valign=top><tt>02</tt>&nbsp; </td><td align=left>2/3 grass</td></tr>
+       <tr><td nowrap valign=top><tt>03</tt>&nbsp; </td><td align=left>full grass</td></tr>
+       <tr><td nowrap valign=top><tt>07</tt>&nbsp; </td><td align=left>rough land</td></tr>
+       <tr><td nowrap valign=top><tt>0B</tt>&nbsp; </td><td align=left>rocks</td></tr>
+       <tr><td nowrap valign=top><tt>0F</tt>&nbsp; </td><td align=left>fields; type of fields in m3 bits 3..0 (legal values: 0 through 9)<br>
+            m2: Index into the array of industries (farms), INVALID_INDUSTRY (0xFFFF) if farm has been removed</td></tr>
+       <tr><td nowrap valign=top><tt>10</tt>&nbsp; </td><td align=left>1/4 snow</td></tr>
+       <tr><td nowrap valign=top><tt>11</tt>&nbsp; </td><td align=left>2/4 snow</td></tr>
+       <tr><td nowrap valign=top><tt>12</tt>&nbsp; </td><td align=left>3/4 snow</td></tr>
+       <tr><td nowrap valign=top><tt>13</tt>&nbsp; </td><td align=left>full snow</td></tr>
+       <tr><td nowrap valign=top><tt>15</tt>&nbsp; </td><td align=left>partial desert</td></tr>
+       <tr><td nowrap valign=top><tt>17</tt>&nbsp; </td><td align=left>full desert</td></tr>
+      </table>
+     </li>
+     <li>m5 bits 7..5: update counter, incremented on every periodic processing for tile types,
+         other than <tt>03</tt>, <tt>07</tt>, <tt>0B</tt>, <tt>10</tt> and above.<BR>
+         on wraparound, the tile is updated (for fields, the type of fields in m3 is increased, for other types the tile type in m5 is increased).<BR>
+         For snow and desert, these bits are not used, tile is updated on every periodic processing.
+     </li>
+     <li>m1: <a href="#OwnershipInfo">owner</a> of the tile (normally <tt>10</tt>)</li>
+     <li>m4 bits 7..5: type of hedge on the SW border of the tile (1 through 6, or 0=none); bits 4..2: same for the SE border</li>
+    </ul>
+   </td>
+  </tr>
+
+  <tr>
+   <td valign=top nowrap><a name="Class1"><tt> 1 </tt></a></td>
+   <td>
+    <ul>
+     <li>m5 bit 7 clear: railway track
+      <ul>
+       <li>m5 bits 0..5: track layout: bit set = track present:
+        <table>
+         <tr><td nowrap valign=top>bit 0: </td><td align=left>in the X direction</td></tr>
+         <tr><td nowrap valign=top>bit 1: </td><td align=left>in the Y direction</td></tr>
+         <tr><td nowrap valign=top>bit 2: </td><td align=left>in the north corner (direction W-E)</td></tr>
+         <tr><td nowrap valign=top>bit 3: </td><td align=left>in the south corner (direction W-E)</td></tr>
+         <tr><td nowrap valign=top>bit 4: </td><td align=left>in the west corner (direction N-S)</td></tr>
+         <tr><td nowrap valign=top>bit 5: </td><td align=left>in the east corner (direction N-S)</td></tr>
+        </table>
+       </li>
+       <li>m5 bit 6 set = with signals:
+        <ul>
+         <li>m3 bits 7..4: bit set = signal present:
+          <ul>
+           <li>For track in the X direction:
+            <table>
+             <tr><td nowrap valign=top>bit 6: </td><td align=left>signal in the SW direction</td></tr>
+             <tr><td nowrap valign=top>bit 7: </td><td align=left>signal in the NE direction</td></tr>
+            </table>
+           </li>
+           <li>For track in the Y direction:
+            <table>
+             <tr><td nowrap valign=top>bit 6: </td><td align=left>signal in the NW direction</td></tr>
+             <tr><td nowrap valign=top>bit 7: </td><td align=left>signal in the SE direction</td></tr>
+            </table>
+           </li>
+           <li>For tracks in the W-E direction:
+            <table>
+             <tr><td nowrap valign=top>bit 4: </td><td align=left>signal in the W direction on the track in the S corner</td></tr>
+             <tr><td nowrap valign=top>bit 5: </td><td align=left>signal in the E direction on the track in the S corner</td></tr>
+             <tr><td nowrap valign=top>bit 6: </td><td align=left>signal in the W direction on the track in the N corner</td></tr>
+             <tr><td nowrap valign=top>bit 7: </td><td align=left>signal in the E direction on the track in the N corner</td></tr>
+            </table>
+           </li>
+           <li>For tracks in the N-S direction:
+            <table>
+             <tr><td nowrap valign=top>bit 4: </td><td align=left>signal in the S direction on the track in the E corner</td></tr>
+             <tr><td nowrap valign=top>bit 5: </td><td align=left>signal in the N direction on the track in the E corner</td></tr>
+             <tr><td nowrap valign=top>bit 6: </td><td align=left>signal in the S direction on the track in the W corner</td></tr>
+             <tr><td nowrap valign=top>bit 7: </td><td align=left>signal in the N direction on the track in the W corner</td></tr>
+            </table>
+           </li>
+          </ul>
+         </li>
+         <li>m2 bits 7..4: bit clear = signal shows red; same bits as in m3</li>
+         <li>OpenTTD bits in m4:
+          <table>
+           <tr><td nowrap valign=top>bits 1..0: </td><td align=left>type of signal:</td></tr>
+           <tr><td nowrap valign=top><tt>00</tt>: </td><td align=left>normal signals</td></tr>
+           <tr><td nowrap valign=top><tt>01</tt>: </td><td align=left>pre-signals</td></tr>
+           <tr><td nowrap valign=top><tt>10</tt>: </td><td align=left>exit-signals</td></tr>
+           <tr><td nowrap valign=top><tt>11</tt>: </td><td align=left>combo-signals</td></tr>
+           <tr><td nowrap valign=top>bit 2: </td><td align=left>set = semaphore signals, clear = light signals</td></tr>
+          </table>
+         </li>
+        </ul>
+       </li>
+       <li>m1: <a href="#OwnershipInfo">owner</a> of the track</li>
+       <li>m2 bits 0..3:
+        <table>
+         <tr><td nowrap valign=top><tt>0</tt>&nbsp; </td><td align=left>on bare land</td></tr>
+         <tr><td nowrap valign=top><tt>1</tt>&nbsp; </td><td align=left>on grass, no fences</td></tr>
+         <tr><td nowrap valign=top><tt>2</tt>&nbsp; </td><td align=left>fence on the NW side</td></tr>
+         <tr><td nowrap valign=top><tt>3</tt>&nbsp; </td><td align=left>fence on the SE side</td></tr>
+         <tr><td nowrap valign=top><tt>4</tt>&nbsp; </td><td align=left>fences on the NW and SE sides</td></tr>
+         <tr><td nowrap valign=top><tt>5</tt>&nbsp; </td><td align=left>fence on the NE side</td></tr>
+         <tr><td nowrap valign=top><tt>6</tt>&nbsp; </td><td align=left>fence on the SW side</td></tr>
+         <tr><td nowrap valign=top><tt>7</tt>&nbsp; </td><td align=left>fences on the NE and SW sides</td></tr>
+         <tr><td nowrap valign=top><tt>8</tt>&nbsp; </td><td align=left>fence on the E side (track in the W corner)</td></tr>
+         <tr><td nowrap valign=top><tt>9</tt>&nbsp; </td><td align=left>fence on the W side (track in the E corner)</td></tr>
+         <tr><td nowrap valign=top><tt>A</tt>&nbsp; </td><td align=left>fence on the S side (track in the N corner)</td></tr>
+         <tr><td nowrap valign=top><tt>B</tt>&nbsp; </td><td align=left>fence on the N side (track in the S corner)</td></tr>
+         <tr><td nowrap valign=top><tt>C</tt>&nbsp; </td><td align=left>on snow or desert</td></tr>
+        </table>
+       </li>
+       <li>m3 bits 0..3 = <a name="TrackType">track type</a>:
+        <table>
+         <tr><td><tt>0</tt>&nbsp; </td><td>conventional railway</td></tr>
+         <tr><td><tt>1</tt>&nbsp; </td><td>electrified railway</td></tr>
+         <tr><td><tt>2</tt>&nbsp; </td><td>monorail</td></tr>
+         <tr><td><tt>3</tt>&nbsp; </td><td>maglev</td></tr>
+        </table>
+       </li>
+      </ul>
+     </li>
+     <li>m5 bits 7 and 6 set: railway depot / checkpoints
+      <ul>
+       <li>m5 value C0..C3: railway depot
+        <table>
+         <tr><td colspan=2>m5 bits 1..0</td></tr>
+         <tr><td colspan=2>direction: exit towards:</td></tr>
+         <tr><td><tt>00</tt>&nbsp; </td><td>NE</td></tr>
+         <tr><td><tt>01</tt>&nbsp; </td><td>SE</td></tr>
+         <tr><td><tt>02</tt>&nbsp; </td><td>SW</td></tr>
+         <tr><td><tt>03</tt>&nbsp; </td><td>NW</td></tr>
+        </table>
+       </li>
+       <li>m5 value C4..C5: checkpoint
+        <table>
+         <tr><td colspan=2>bit 0</td></tr>
+         <tr><td>clear</td><td>in X direction</td></tr>
+         <tr><td>set</td><td>in Y direction</td></tr>
+        </table>
+       </li>
+       <li>m1: <a href="#OwnershipInfo">owner</a> of the depot / checkpoint</li>
+       <li>m2: For waypoints, index into the array of waypoints.</li>
+       <li>m3 bits 0..3 = <a href="#TrackType">track type</a></li>
+       <li>m4 bits 0..3 = ground type, as per m2 bits 0..3 for railway tiles.</li>
+      </ul>
+     </li>
+    </ul>
+   </td>
+  </tr>
+
+  <tr>
+   <td valign=top nowrap><a name="Class2"><tt> 2 </tt></a></td>
+   <td>
+   <ul>
+    <li>m5 bits 7..4 clear: road
+     <ul>
+      <li>m5 bits 3..0: road layout: bit set = road piece present:
+       <table>
+        <tr><td nowrap valign=top>bit 0: </td><td align=left>NW piece</td></tr>
+        <tr><td nowrap valign=top>bit 1: </td><td align=left>SW piece</td></tr>
+        <tr><td nowrap valign=top>bit 2: </td><td align=left>SE piece</td></tr>
+        <tr><td nowrap valign=top>bit 3: </td><td align=left>NE piece</td></tr>
+       </table>
+      </li>
+      <li>m1: <a href="#OwnershipInfo">owner</a> of the road</li>
+      <li>m2: Index into the array of towns, 0 for non-town roads</li>
+      <li>m4 bits 0..3: counter for the roadworks</li>
+      <li>m4 bits 4..6:
+       <table>
+        <tr><td><tt>0</tt>&nbsp; </td><td>on bare land</td></tr>
+        <tr><td><tt>1</tt>&nbsp; </td><td>on grass</td></tr>
+        <tr><td><tt>2</tt>&nbsp; </td><td>paved</td></tr>
+        <tr><td><tt>3</tt>&nbsp; </td><td>with streetlights</td></tr>
+        <tr><td><tt>5</tt>&nbsp; </td><td>tree-lined</td></tr>
+        <tr><td><tt>6</tt>&nbsp; </td><td>on grass with road works</td></tr>
+        <tr><td><tt>7</tt>&nbsp; </td><td>paved with road works</td></tr>
+       </table>
+      </li>
+      <li>m4 bit 7 set = on snow or desert</li>
+     </ul>
+    </li>
+    <li>m5 bit 4 set, bits 7..5 clear: level crossing
+     <ul>
+      <li>m5 bit 3: clear - road in the X direction, set - road in the Y direction (railway track always perpendicular)</li>
+      <li>m5 bit 2: set if crossing lights are on</li>
+      <li>m1: <a href="#OwnershipInfo">owner</a> of the railway track</li>
+      <li>m2: Index into the array of towns, 0 for non-town roads</li>
+      <li>m3 bits 0..7: <a href="#OwnershipInfo">owner</a> of the road</li>
+      <li>m4 bits 3..0: <a href="#TrackType">track type</a></li>
+      <li>m4 bits 4..6: <tt>0</tt> - on bare land, <tt>1</tt> - on grass, <tt>2</tt> or higher - paved</li>
+      <li>m4 bit 7 set = on snow or desert</li>
+     </ul>
+    </li>
+    <li>m5 bit 5 set: road depot
+      <ul>
+       <li>m5 bits 3..0 - direction: exit towards: <tt>0</tt> = NE, <tt>1</tt> = SE, <tt>2</tt> = SW, <tt>3</tt> = NW</li>
+       <li>m1: <a href="#OwnershipInfo">owner</a> of the depot</li>
+       <li>m4 bit 7 set = on snow or desert (not displayed, but set internally)</li>
+      </ul>
+     </li>
+    </ul>
+   </td>
+  </tr>
+
+  <tr>
+   <td valign=top nowrap><a name="Class3"><tt> 3 </tt></a></td>
+   <td>Town building
+    <ul>
+     <li>m2: Index into the array of towns</li>
+     <li>m4: <a name="HouseTypes">town building type</a>:<br>
+      <small>Note: In the climate list, 'sub-arctic' means below the snow line, and 'snow' means above the snow line in the sub-arctic climate.</small>
+      <table>
+       <tr><th align=left>Type&nbsp;</th><th align=left>Size&nbsp;</th><th align=left>Climates&nbsp;</th><th align=left>Description</th></tr>
+       <tr><td nowrap valign=top><tt>00</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>tall office block</td></tr>
+       <tr><td nowrap valign=top><tt>01</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>office block</td></tr>
+       <tr><td nowrap valign=top><tt>02</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>small block of flats</td></tr>
+       <tr><td nowrap valign=top><tt>03</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>church</td></tr>
+       <tr><td nowrap valign=top><tt>04</tt>&nbsp; </td><td>1&times;1</td><td>temperate, sub-arctic, sub-tropical</td><td align=left>large office block</td></tr>
+       <tr><td nowrap valign=top><tt>05</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>large office block</td></tr>
+       <tr><td nowrap valign=top><tt>06</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>town houses</td></tr>
+       <tr><td nowrap valign=top><tt>07</tt>..<tt>08</tt>&nbsp; </td><td>1&times;2</td><td>temperate</td><td align=left>hotel</td></tr>
+       <tr><td nowrap valign=top><tt>09</tt>&nbsp; </td><td>1&times;1</td><td>temperate, sub-arctic, sub-tropical&nbsp;&nbsp;</td><td align=left>statue</td></tr>
+       <tr><td nowrap valign=top><tt>0A</tt>&nbsp; </td><td>1&times;1</td><td>temperate, sub-arctic, sub-tropical</td><td align=left>fountain</td></tr>
+       <tr><td nowrap valign=top><tt>0B</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>park (with a pond)</td></tr>
+       <tr><td nowrap valign=top><tt>0C</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>park (with an alley)</td></tr>
+       <tr><td nowrap valign=top><tt>0D</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>office block</td></tr>
+       <tr><td nowrap valign=top><tt>0E</tt>..<tt>10</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>various types of shops and offices</td></tr>
+       <tr><td nowrap valign=top><tt>11</tt>&nbsp; </td><td>1&times;1</td><td>temperate, sub-arctic, sub-tropical</td><td align=left>modern office building</td></tr>
+       <tr><td nowrap valign=top><tt>12</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>warehouse</td></tr>
+       <tr><td nowrap valign=top><tt>13</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>office block (with spiral stairway on the side)</td></tr>
+       <tr><td nowrap valign=top><tt>14</tt>..<tt>17</tt>&nbsp; </td><td>2&times;2</td><td>temperate</td><td align=left>stadium</td></tr>
+       <tr><td nowrap valign=top><tt>18</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>old houses</td></tr>
+       <tr><td nowrap valign=top><tt>19</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>cottages</td></tr>
+       <tr><td nowrap valign=top><tt>1A</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>houses</td></tr>
+       <tr><td nowrap valign=top><tt>1B</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>flats</td></tr>
+       <tr><td nowrap valign=top><tt>1C</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>tall office block</td></tr>
+       <tr><td nowrap valign=top><tt>1D</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>shops and offices</td></tr>
+       <tr><td nowrap valign=top><tt>1E</tt>&nbsp; </td><td>1&times;1</td><td>temperate, sub-tropical</td><td align=left>shops and offices</td></tr>
+       <tr><td nowrap valign=top><tt>1F</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>theatre</td></tr>
+       <tr><td nowrap valign=top><tt>20</tt>..<tt>23</tt>&nbsp; </td><td>2&times;2</td><td>temperate, sub-arctic, sub-tropical</td><td align=left>stadium (modern style)</td></tr>
+       <tr><td nowrap valign=top><tt>24</tt>&nbsp; </td><td>1&times;1</td><td>temperate, sub-arctic, sub-tropical</td><td align=left>offices (the modern 'vertical tube' style)</td></tr>
+       <tr><td nowrap valign=top><tt>25</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>houses</td></tr>
+       <tr><td nowrap valign=top><tt>26</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>houses</td></tr>
+       <tr><td nowrap valign=top><tt>27</tt>&nbsp; </td><td>1&times;1</td><td>temperate</td><td align=left>cinema</td></tr>
+       <tr><td nowrap valign=top><tt>28</tt>..<tt>2B</tt>&nbsp; </td><td>2&times;2</td><td>temperate</td><td align=left>shopping mall</td></tr>
+       <tr><td nowrap valign=top><tt>2C</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>flats</td></tr>
+       <tr><td nowrap valign=top><tt>2D</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>flats</td></tr>
+       <tr><td nowrap valign=top><tt>2E</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>houses</td></tr>
+       <tr><td nowrap valign=top><tt>2F</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>houses</td></tr>
+       <tr><td nowrap valign=top><tt>30</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>houses</td></tr>
+       <tr><td nowrap valign=top><tt>31</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>houses</td></tr>
+       <tr><td nowrap valign=top><tt>32</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic, sub-tropical</td><td align=left>tall office block</td></tr>
+       <tr><td nowrap valign=top><tt>33</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>tall office block</td></tr>
+       <tr><td nowrap valign=top><tt>34</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>tall office block</td></tr>
+       <tr><td nowrap valign=top><tt>35</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>tall office block</td></tr>
+       <tr><td nowrap valign=top><tt>36</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic, sub-tropical</td><td align=left>tall office block</td></tr>
+       <tr><td nowrap valign=top><tt>37</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>tall office block</td></tr>
+       <tr><td nowrap valign=top><tt>38</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>houses</td></tr>
+       <tr><td nowrap valign=top><tt>39</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>houses</td></tr>
+       <tr><td nowrap valign=top><tt>3A</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>shops and offices</td></tr>
+       <tr><td nowrap valign=top><tt>3B</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>shops and offices</td></tr>
+       <tr><td nowrap valign=top><tt>3C</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>church</td></tr>
+       <tr><td nowrap valign=top><tt>3D</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>church</td></tr>
+       <tr><td nowrap valign=top><tt>3E</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>houses</td></tr>
+       <tr><td nowrap valign=top><tt>3F</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>houses</td></tr>
+       <tr><td nowrap valign=top><tt>40</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>shops and offices</td></tr>
+       <tr><td nowrap valign=top><tt>41</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>shops and offices</td></tr>
+       <tr><td nowrap valign=top><tt>42</tt>..<tt>43</tt>&nbsp; </td><td>1&times;2</td><td>sub-arctic</td><td align=left>hotel</td></tr>
+       <tr><td nowrap valign=top><tt>44</tt>..<tt>45</tt>&nbsp; </td><td>1&times;2</td><td>snow</td><td align=left>hotel</td></tr>
+       <tr><td nowrap valign=top><tt>46</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic, sub-tropical</td><td align=left>shops and offices</td></tr>
+       <tr><td nowrap valign=top><tt>47</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>shops and offices</td></tr>
+       <tr><td nowrap valign=top><tt>48</tt>&nbsp; </td><td>1&times;1</td><td>sub-arctic</td><td align=left>tall office block</td></tr>
+       <tr><td nowrap valign=top><tt>49</tt>&nbsp; </td><td>1&times;1</td><td>snow</td><td align=left>tall office block</td></tr>
+       <tr><td nowrap valign=top><tt>4A</tt>..<tt>4B</tt>&nbsp; </td><td>2&times;1</td><td>sub-arctic</td><td align=left>tall office block</td></tr>
+       <tr><td nowrap valign=top><tt>4C</tt>..<tt>4D</tt>&nbsp; </td><td>2&times;1</td><td>snow</td><td align=left>tall office block</td></tr>
+       <tr><td nowrap valign=top><tt>4E</tt>&nbsp; </td><td>1&times;1</td><td>sub-tropical</td><td align=left>houses (with a tree in a corner)</td></tr>
+       <tr><td nowrap valign=top><tt>4F</tt>, <tt>50</tt>&nbsp; </td><td>1&times;1</td><td>sub-tropical</td><td align=left>houses</td></tr>
+       <tr><td nowrap valign=top><tt>51</tt>&nbsp; </td><td>1&times;1</td><td>sub-tropical</td><td align=left>houses (suburb-type)</td></tr>
+       <tr><td nowrap valign=top><tt>52</tt>&nbsp; </td><td>1&times;1</td><td>sub-tropical</td><td align=left>flats</td></tr>
+       <tr><td nowrap valign=top><tt>53</tt>&nbsp; </td><td>1&times;1</td><td>sub-tropical</td><td align=left>church</td></tr>
+       <tr><td nowrap valign=top><tt>54</tt>&nbsp; </td><td>1&times;1</td><td>sub-tropical</td><td align=left>houses (with two trees in front)</td></tr>
+       <tr><td nowrap valign=top><tt>55</tt>, <tt>56</tt>&nbsp; </td><td>1&times;1</td><td>sub-tropical</td><td align=left>flats</td></tr>
+       <tr><td nowrap valign=top><tt>57</tt>..<tt>58</tt>&nbsp; </td><td>2&times;1</td><td>sub-tropical</td><td align=left>tall office block</td></tr>
+       <tr><td nowrap valign=top><tt>59</tt>&nbsp; </td><td>1&times;1</td><td>sub-tropical</td><td align=left>flats</td></tr>
+       <tr><td nowrap valign=top><tt>5A</tt>&nbsp; </td><td>1&times;1</td><td>sub-tropical</td><td align=left>tall office block</td></tr>
+       <tr><td nowrap valign=top><tt>5B</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>church</td></tr>
+       <tr><td nowrap valign=top><tt>5C</tt>..<tt>61</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>various types of toyland houses</td></tr>
+       <tr><td nowrap valign=top><tt>62</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>tall office block</td></tr>
+       <tr><td nowrap valign=top><tt>63</tt>..<tt>64</tt>&nbsp; </td><td>1&times;2</td><td>toyland</td><td align=left>houses ('shoe' style)</td></tr>
+       <tr><td nowrap valign=top><tt>65</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>tall office block</td></tr>
+       <tr><td nowrap valign=top><tt>66</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>igloo</td></tr>
+       <tr><td nowrap valign=top><tt>67</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>tepees</td></tr>
+       <tr><td nowrap valign=top><tt>68</tt>, <tt>69</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>shops and offices</td></tr>
+       <tr><td nowrap valign=top><tt>6A</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>tall office block</td></tr>
+       <tr><td nowrap valign=top><tt>6B</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>statue</td></tr>
+       <tr><td nowrap valign=top><tt>6C</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>teapot-house</td></tr>
+       <tr><td nowrap valign=top><tt>6D</tt>&nbsp; </td><td>1&times;1</td><td>toyland</td><td align=left>piggy-bank</td></tr>
+      </table>
+     </li>
+     <li>m3 bits 7..6: stage of construction (<tt>3</tt> = completed)</li>
+     <li>m5 bits 2..0: construction counter, for buildings under construction incremented on every periodic tile processing<br>
+         On wraparound the stage of construction in m3 is increased
+     </li>
+     <li>for large office blocks (types <tt>04</tt> and <tt>05</tt>):
+      <ul>
+       <li>m1 bits 6..0: position of the lift</li>
+       <li>m1 bit 7: if set the lift is moving</li>
+       <li>m5 bit 7: if set then m5 bits 5..0 hold the destination floor of the lift, which could be 0..6, except 1.<br>
+           So the building has 6 effective floors. This is due to the fact that the first floor is 2 'normal' floors high.<br>
+           One 'normal' floor has a height of 6 lift positions.</li>
+      </ul>
+     </li>
+    </ul>
+   </td>
+  </tr>
+
+  <tr>
+   <td valign=top nowrap><a name="Class4"><tt> 4 </tt></a></td>
+   <td>Trees
+    <ul>
+     <li>m5 bits 7..6: number of trees minus one</li>
+     <li>m5 bits 2..0: growth status: <tt>0</tt>..<tt>2</tt> - one of trees is growing, <tt>3</tt> - all trees are fully grown, <tt>4</tt>..<tt>6</tt> - one of trees is withering</li>
+     <li>m3 bits 7..0: type of trees:
+      <table>
+       <tr><td nowrap valign=top><tt>00</tt>..<tt>0B</tt>&nbsp; </td><td align=left>temperate climate trees</td></tr>
+       <tr><td nowrap valign=top><tt>0C</tt>..<tt>13</tt>&nbsp; </td><td align=left>sub-arctic climate trees</td></tr>
+       <tr><td nowrap valign=top><tt>14</tt>..<tt>1A</tt>&nbsp; </td><td align=left>rainforest trees</td></tr>
+       <tr><td nowrap valign=top><tt>1B</tt> </td><td align=left>cactus plants</td></tr>
+       <tr><td nowrap valign=top><tt>1C</tt>..<tt>1F</tt>&nbsp; </td><td align=left>sub-tropical climate, non-rainforest, non-desert trees</td></tr>
+       <tr><td nowrap valign=top><tt>20</tt>..<tt>28</tt>&nbsp; </td><td align=left>toyland trees</td></tr>
+      </table>
+      <small>Note: the actually displayed set of trees depends on both type and number of trees</small>
+     </li>
+     <li>m4 bits 7..5: type of hedge on the SW border of the tile (1 through 6, or 0=none)</li>
+     <li>m4 bits 4..2: type of hedge on the SE border of the tile (1 through 6, or 0=none)</li>
+     <li>m2 bits 5..4:
+      <table>
+       <tr><td nowrap valign=top><tt>0</tt>&nbsp; </td><td align=left>on grass</td></tr>
+       <tr><td nowrap valign=top><tt>1</tt>&nbsp; </td><td align=left>on rough land</td></tr>
+       <tr><td nowrap valign=top><tt>2</tt>&nbsp; </td><td align=left>on snow or desert; m2 bits 7..6 - amount of snow or desert (for desert always set to 3 in TTD)</td></tr>
+      </table>
+     </li>
+     <li>m2 bits 3..0: update counter, incremented on every periodic processing.<br>
+         on wraparound the growth status is updated (or, if it's <tt>3</tt>, a random action is taken)</li>
+     <li>m1: <a href="#OwnershipInfo">owner</a> (normally <tt>10</tt>)</li>
+    </ul>
+   </td>
+  </tr>
+
+ <tr>
+  <td valign=top nowrap><a name="Class5"><tt> 5 </tt></a></td>
+  <td>Station tile
+   <ul>
+    <li>m5: tile type:
+     <table>
+      <tr>
+       <td nowrap valign=top><tt>00</tt>..<tt>07</tt>&nbsp; </td><td align=left>railway station
+        <table>
+         <tr><td><tt>00</tt>..<tt>01</tt>&nbsp; </td><td align=left>open platform</td></tr>
+         <tr><td><tt>02</tt>..<tt>03</tt>&nbsp; </td><td align=left>open platform with station building</td></tr>
+         <tr><td><tt>04</tt>....<tt>07</tt>&nbsp; </td><td align=left>roofed platform</td></tr>
+         <tr><td colspan=2>bit 0: clear = in X direction, set = in Y direction</td></tr>
+        </table>
+       </td>
+      </tr>
+      <tr><td nowrap valign=top><tt>08</tt>..<tt>33</tt>&nbsp; </td><td align=left>large airport
+       <table>
+        <tr><td nowrap valign=top><tt>0B</tt>&nbsp; </td><td align=left>pad 1</td></tr>
+        <tr><td nowrap valign=top><tt>16</tt>..<tt>19</tt>&nbsp; </td><td align=left>runway middle</td></tr>
+        <tr><td nowrap valign=top><tt>1A</tt>&nbsp; </td><td align=left>runway ending</td></tr>
+        <tr><td nowrap valign=top><tt>1C</tt>&nbsp; </td><td align=left>control tower</td></tr>
+        <tr><td nowrap valign=top><tt>20</tt>&nbsp; </td><td align=left>hangar</td></tr>
+        <tr><td nowrap valign=top><tt>21</tt>&nbsp; </td><td align=left>pad 3</td></tr>
+        <tr><td nowrap valign=top><tt>22</tt>&nbsp; </td><td align=left>pad 2</td></tr>
+        <tr><td nowrap valign=top><tt>27</tt>..<tt>32</tt>&nbsp; </td><td align=left>radar (animated)</td></tr>
+        <tr><td nowrap valign=top><tt>33</tt>&nbsp; </td><td align=left>transmitter</td></tr>
+        <tr><td colspan=2>The initial layout of a large airport is (rows in Y direction, columns in X direction):
 <pre>
 1F 1B 1E 33 26 1A
 09 24 0B 0C 0D 16
@@ -354,266 +429,303 @@
 09 08 14 13 12 19
 20 0A 15 1C 27 1A
 </pre>
-</td></tr>
-<tr><td nowrap valign=top><tt>34</tt>..<tt>41</tt>&nbsp; </td><td align=left>small airport
-<table>
-<tr><td nowrap valign=top><tt>3A</tt>..<tt>3D</tt>&nbsp; </td><td align=left>field with the wind meter (animated)</td></tr>
-<tr><td nowrap valign=top><tt>3E</tt>&nbsp; </td><td align=left>runway south ending</td></tr>
-<tr><td nowrap valign=top><tt>3F</tt>&nbsp; </td><td align=left>runway middle</td></tr>
-<tr><td nowrap valign=top><tt>40</tt>&nbsp; </td><td align=left>runway north ending</td></tr>
-<tr><td nowrap valign=top><tt>41</tt>&nbsp; </td><td align=left>hangar</td></tr>
-</table>
-The initial layout of a small airport is (rows in Y direction, columns in X direction):
+       </table>
+      </td></tr>
+
+      <tr><td nowrap valign=top><tt>34</tt>..<tt>41</tt>&nbsp; </td><td align=left>small airport
+       <table>
+        <tr><td nowrap valign=top><tt>3A</tt>..<tt>3D</tt>&nbsp; </td><td align=left>field with the wind meter (animated)</td></tr>
+        <tr><td nowrap valign=top><tt>3E</tt>&nbsp; </td><td align=left>runway south ending</td></tr>
+        <tr><td nowrap valign=top><tt>3F</tt>&nbsp; </td><td align=left>runway middle</td></tr>
+        <tr><td nowrap valign=top><tt>40</tt>&nbsp; </td><td align=left>runway north ending</td></tr>
+        <tr><td nowrap valign=top><tt>41</tt>&nbsp; </td><td align=left>hangar</td></tr>
+        <tr><td colspan=2>The initial layout of a small airport is (rows in Y direction, columns in X direction):
 <pre>
 36 3A 40
 35 39 3F
 34 38 3F
 41 37 3E
 </pre>
-</td></tr>
-<tr><td nowrap valign=top><tt>42</tt> </td><td align=left>heliport</td></tr>
-<tr><td nowrap valign=top><tt>43</tt>..<tt>46</tt>&nbsp; </td><td align=left>lorry loading area;
-exit towards: <tt>43</tt> - NE, <tt>44</tt> - SE, <tt>45</tt> - SW, <tt>46</tt> - NW
-</td></tr>
-<tr><td nowrap valign=top><tt>47</tt>..<tt>4A</tt>&nbsp; </td><td align=left>bus station;
-exit towards: <tt>47</tt> - NE, <tt>48</tt> - SE, <tt>49</tt> - SW, <tt>4A</tt> - NW
-<tr><td nowrap valign=top><tt>4B</tt> </td><td align=left>oilfield</td></tr>
-<tr><td nowrap valign=top><tt>4C</tt>..<tt>51</tt>&nbsp; </td><td align=left>ship dock;
-<tt>4C</tt> - SW coast part, <tt>4D</tt> - NW coast part, <tt>4E</tt> - NE coast part, <tt>4F</tt> - SE coast part, <tt>50</tt> - X direction water part, <tt>51</tt> - Y direction water part
-<tr><td nowrap valign=top><tt>52</tt> </td><td align=left>buoy</td></tr>
-<tr><td nowrap valign=top><tt>53</tt>..<tt>A7</tt>&nbsp; </td><td align=left>used by RichK's larger airports
-</td></tr>
-<tr><td colspan=2></td></tr> <!-- spacer -->
-</table>
-</li>
-<li>m1: <a href="#OwnershipInfo">owner</a> of the station</li>
-<li>m2: index into the array of stations</li>
-<li>m3 bits 0..3: <a href="#TrackType">track type</a> for railway stations, must be 0 for all the other stations</li>
-<li>m3 bits 4..7: persistent random data for newstations</li>
-<li>m4 = custom station id; 0 means standard graphics</li>
-</ul>
-</td></tr>
-
-<tr><td valign=top nowrap><a name="Class6"><tt> 6 </tt></a></td><td>
-<ul>
-<li>m5: tile type:
-<table>
-<tr><td nowrap valign=top><tt>00</tt>&nbsp; </td><td align=left>water</td></tr>
-<tr><td nowrap valign=top><tt>01</tt>&nbsp; </td><td align=left>coast or riverbank</td></tr>
-<tr><td nowrap valign=top><tt>10</tt>..<tt>1B</tt>&nbsp; </td><td align=left>canal locks
-<table>
-<tr><td nowrap valign=top><tt>10</tt>&nbsp; </td><td align=left>middle part, (SW-NE direction)
-<tr><td nowrap valign=top><tt>11</tt>&nbsp; </td><td align=left>middle part, (NW-SE direction)
-<tr><td nowrap valign=top><tt>12</tt>&nbsp; </td><td align=left>middle part, (NE-SW direction)
-<tr><td nowrap valign=top><tt>13</tt>&nbsp; </td><td align=left>middle part, (SE-NW direction)
-<tr><td nowrap valign=top><tt>14</tt>&nbsp; </td><td align=left>lower part, (SW-NE direction)
-<tr><td nowrap valign=top><tt>15</tt>&nbsp; </td><td align=left>lower part, (NW-SE direction)
-<tr><td nowrap valign=top><tt>16</tt>&nbsp; </td><td align=left>lower part, (NE-SW direction)
-<tr><td nowrap valign=top><tt>17</tt>&nbsp; </td><td align=left>lower part, (SE-NW direction)
-<tr><td nowrap valign=top><tt>18</tt>&nbsp; </td><td align=left>upper part, (SW-NE direction)
-<tr><td nowrap valign=top><tt>19</tt>&nbsp; </td><td align=left>upper part, (NW-SE direction)
-<tr><td nowrap valign=top><tt>1A</tt>&nbsp; </td><td align=left>upper part, (NE-SW direction)
-<tr><td nowrap valign=top><tt>1B</tt>&nbsp; </td><td align=left>upper part, (SE-NW direction)
-</table>
-<tr><td nowrap valign=top><tt>80</tt>..<tt>83</tt>&nbsp; </td><td align=left>ship depots
-<table>
-<tr><td nowrap valign=top><tt>80</tt>&nbsp; </td><td align=left>ship depot, NE part (X direction)
-<tr><td nowrap valign=top><tt>81</tt>&nbsp; </td><td align=left>ship depot, SW part (X direction)
-<tr><td nowrap valign=top><tt>82</tt>&nbsp; </td><td align=left>ship depot, NW part (Y direction)
-<tr><td nowrap valign=top><tt>83</tt>&nbsp; </td><td align=left>ship depot, SE part (Y direction)
-
-</td></tr>
-
-</table>
-</td></tr>
-</table></li>
-<li>m1: <a href="#OwnershipInfo">owner</a> (for water and coasts normally <tt>11</tt>)</li>
-</ul>
-</td></tr>
-
-<tr><td valign=top nowrap><a name="Class7"><tt> 7 </tt></a></td><td>
-Void
-<p>
-Tiles of this class form an invisible, one tile wide border at the south (bottom) edges of the map, so as to protect several algorithms from the consequences of a wraparound at the edges.
-</p>
-</td></tr>
+       </table>
+      </td></tr>
 
-<tr><td valign=top nowrap><a name="Class8"><tt> 8 </tt></a></td><td>
-Industry tile
-<ul>
-<li>m5: type:
-<br><small>(note: this is not the same as the industry type, which is stored in the array of industries)</small>
-<table>
-<tr><td nowrap valign=top><tt>00</tt>..<tt>06</tt>&nbsp; </td><td align=left>coal mine
-<table>
-<tr><td nowrap valign=top><tt>00</tt>&nbsp; </td><td align=left>wheel tower when not animated</td></tr>
-<tr><td nowrap valign=top><tt>01</tt>&nbsp; </td><td align=left>wheel tower when animated; animation state in m3 bits 5..0; m3 bit 6 set = sound already generated</td></tr>
-</table>
-</td></tr>
-<tr><td nowrap valign=top><tt>07</tt>..<tt>0A</tt>&nbsp; </td><td align=left>power station
-<table>
-<tr><td nowrap valign=top><tt>08</tt>&nbsp; </td><td align=left>chimney</td></tr>
-<tr><td nowrap valign=top><tt>0A</tt>&nbsp; </td><td align=left>transformer; animation progress in m3(valid range <tt>0</tt>..<tt>7</tt>)</td></tr>
-</table>
-</td></tr>
-<tr><td nowrap valign=top><tt>0B</tt>..<tt>0F</tt>&nbsp; </td><td align=left>sawmill</td></tr>
-<tr><td nowrap valign=top><tt>10</tt>..<tt>11</tt>&nbsp; </td><td align=left>forest
-<table>
-<tr><td nowrap valign=top><tt>11</tt>&nbsp; </td><td align=left>trees cut down</td></tr>
-</table>
-</td></tr>
-<tr><td nowrap valign=top><tt>12</tt>..<tt>17</tt>&nbsp; </td><td align=left>oil refinery</td></tr>
-<tr><td nowrap valign=top><tt>18</tt>..<tt>1C</tt>&nbsp; </td><td align=left>oil rig</td></tr>
-<tr><td nowrap valign=top><tt>1D</tt>..<tt>20</tt>&nbsp; </td><td align=left>oil wells
-<table>
-<tr><td nowrap valign=top><tt>1D</tt>&nbsp; </td><td align=left>not animated</td></tr>
-<tr><td nowrap valign=top><tt>1E</tt>..<tt>20</tt>&nbsp; </td><td align=left>various stages of animation; progress of animation in m3</td></tr>
-</table>
-</td></tr>
-<tr><td nowrap valign=top><tt>21</tt>..<tt>26</tt>&nbsp; </td><td align=left>farm</td></tr>
-<tr><td nowrap valign=top><tt>27</tt>..<tt>2A</tt>&nbsp; </td><td align=left>factory (temperate climate)</td></tr>
-<tr><td nowrap valign=top><tt>2B</tt>..<tt>2E</tt>&nbsp; </td><td align=left>printing works</td></tr>
-<tr><td nowrap valign=top><tt>2F</tt>..<tt>33</tt>&nbsp; </td><td align=left>copper ore mine
-<table>
-<tr><td nowrap valign=top><tt>2F</tt>&nbsp; </td><td align=left>wheel tower when not animated</td></tr>
-<tr><td nowrap valign=top><tt>30</tt>&nbsp; </td><td align=left>wheel tower when animated; animation state in m3 bits 5..0; m3 bit 6 set = sound already generated</td></tr>
-<tr><td nowrap valign=top><tt>31</tt>&nbsp; </td><td align=left>chimney</td></tr>
-</table>
-</td></tr>
-<tr><td nowrap valign=top><tt>34</tt>..<tt>39</tt>&nbsp; </td><td align=left>steel mill</td></tr>
-<tr><td nowrap valign=top><tt>3A</tt>..<tt>3B</tt>&nbsp; </td><td align=left>bank (temperate climate)</td></tr>
-<tr><td nowrap valign=top><tt>3C</tt>..<tt>3F</tt>&nbsp; </td><td align=left>food processing plant</td></tr>
-<tr><td nowrap valign=top><tt>40</tt>..<tt>47</tt>&nbsp; </td><td align=left>paper mill</td></tr>
-<tr><td nowrap valign=top><tt>48</tt>..<tt>58</tt>&nbsp; </td><td align=left>gold mine
-<table>
-<tr><td nowrap valign=top><tt>4F</tt>&nbsp; </td><td align=left>wheel tower when not animated</td></tr>
-<tr><td nowrap valign=top><tt>58</tt>&nbsp; </td><td align=left>wheel tower when animated; animation state in m3 bits 5..0; m3 bit 6 set = sound already generated</td></tr>
-</table>
-</td></tr>
-<tr><td nowrap valign=top><tt>59</tt>..<tt>5A</tt>&nbsp; </td><td align=left>bank (sub-arctic or sub-tropical climate)</td></tr>
-<tr><td nowrap valign=top><tt>5B</tt>..<tt>63</tt>&nbsp; </td><td align=left>diamond mine</td></tr>
-<tr><td nowrap valign=top><tt>64</tt>..<tt>73</tt>&nbsp; </td><td align=left>iron ore mine</td></tr>
-<tr><td nowrap valign=top><tt>74</tt></td><td align=left>fruit plantation</td></tr>
-<tr><td nowrap valign=top><tt>75</tt></td><td align=left>rubber plantation</td></tr>
-<tr><td nowrap valign=top><tt>76</tt>..<tt>77</tt>&nbsp; </td><td align=left>water supply</td></tr>
-<tr><td nowrap valign=top><tt>78</tt></td><td align=left>water tower</td></tr>
-<tr><td nowrap valign=top><tt>79</tt>..<tt>7C</tt>&nbsp; </td><td align=left>factory (sub-tropical climate)</td></tr>
-<tr><td nowrap valign=top><tt>7D</tt>..<tt>80</tt>&nbsp; </td><td align=left>lumber mill</td></tr>
-<tr><td nowrap valign=top><tt>81</tt>..<tt>82</tt>&nbsp; </td><td align=left>candyfloss forest
-<table>
-<tr><td nowrap valign=top><tt>82</tt>&nbsp; </td><td align=left>candyfloss 'trees' cut down</td></tr>
-</table>
-</td></tr>
-<tr><td nowrap valign=top><tt>83</tt>..<tt>86</tt>&nbsp; </td><td align=left>sweet factory</td></tr>
-<tr><td nowrap valign=top><tt>87</tt>..<tt>88</tt>&nbsp; </td><td align=left>battery farm
-<table>
-<tr><td nowrap valign=top><tt>88</tt>&nbsp; </td><td align=left>batteries 'reaped'</td></tr>
-</table>
-</td></tr>
-<tr><td nowrap valign=top><tt>89</tt></td><td align=left>cola wells</td></tr>
-<tr><td nowrap valign=top><tt>8A</tt>..<tt>8D</tt>&nbsp; </td><td align=left>toy shop</td></tr>
-<tr><td nowrap valign=top><tt>8E</tt>..<tt>93</tt>&nbsp; </td><td align=left>toy factory
-<table>
-<tr><td nowrap valign=top><tt>8F</tt>&nbsp; </td>
-                    <td align=left>Animated part; animation state in m3 (valid range <tt>00</tt>..<tt>31</tt>)<br>
-                      Tile animation is started (m4 zeroed) on the periodic processing.<br>
-                      While the animation is in progress, m4 holds the number
-                      of animation cycles that have already taken place; when
-                      this number reaches 8 the animation is stopped</td>
-                  </tr>
-</table>
-</td></tr>
-<tr><td nowrap valign=top><tt>94</tt>..<tt>9B</tt>&nbsp; </td><td align=left>plastic fountains (various stages of cyclic animation)</td></tr>
-<tr><td nowrap valign=top><tt>9C</tt>..<tt>9F</tt>&nbsp; </td><td align=left>fizzy drink factory</td></tr>
-<tr><td nowrap valign=top><tt>A0</tt>..<tt>A3</tt>&nbsp; </td><td align=left>bubble generator
-<table>
-<tr><td nowrap valign=top><tt>A1</tt>&nbsp; </td><td align=left>generators</td></tr>
-<tr><td nowrap valign=top><tt>A2</tt>&nbsp; </td><td align=left>bubble capture facility; animation state in m3 (valid range <tt>00</tt>..<tt>27</tt>)</td></tr>
-</table>
-</td></tr>
-<tr><td nowrap valign=top><tt>A4</tt>..<tt>A6</tt>&nbsp; </td><td align=left>toffee quarry
-<table>
-<tr><td nowrap valign=top><tt>A5</tt>&nbsp; </td><td align=left>animated part; animation state in m3 (valid range <tt>00</tt>..<tt>45</tt>)</td></tr>
-</table>
-</td></tr>
-<tr><td nowrap valign=top><tt>A7</tt>..<tt>AE</tt>&nbsp; </td><td align=left>sugar mine
-<table>
-<tr><td nowrap valign=top><tt>AE</tt>&nbsp; </td><td align=left>animated part; animation state in m3 (valid range <tt>00</tt>..<tt>5F</tt>)</td></tr>
-</table>
-</td></tr>
-<tr><td colspan=2></td></tr> <!-- spacer -->
-</table></li>
-<li>m2: index into the array of industries
-</li>
-<li>m1 bit 7: clear = under construction
-<ul>
-<li>m1 bits 4..2: construction counter, for buildings under construction incremented on every periodic tile processing
-</li>
-<li>m1 bits 1..0: stage of construction (<tt>3</tt> = completed), incremented when the construction counter wraps around
-<br>the meaning is different for some animated tiles which are never under construction (types <tt>01</tt>, <tt>1E</tt>..<tt>20</tt>, <tt>30</tt>, <tt>58</tt>; see above)
-</li>
-</ul></li>
-</ul>
-</td></tr>
+      <tr><td nowrap valign=top><tt>42</tt> </td><td align=left>heliport</td></tr>
+      <tr><td nowrap valign=top><tt>43</tt>..<tt>46</tt>&nbsp; </td><td align=left>
+       lorry loading area : exit towards:
+       <table>
+        <tr><td><tt>43</tt>&nbsp; </td><td align=left>NE</td></tr>
+        <tr><td><tt>44</tt>&nbsp; </td><td align=left>SE</td></tr>
+        <tr><td><tt>45</tt>&nbsp; </td><td align=left>SW</td></tr>
+        <tr><td><tt>46</tt>&nbsp; </td><td align=left>NW</td></tr>
+       </table>
+      </td></tr>
+      <tr><td nowrap valign=top><tt>47</tt>..<tt>4A</tt>&nbsp; </td><td align=left>
+       bus station : exit towards:
+       <table>
+        <tr><td><tt>47</tt>&nbsp; </td><td align=left>NE</td></tr>
+        <tr><td><tt>48</tt>&nbsp; </td><td align=left>SE</td></tr>
+        <tr><td><tt>49</tt>&nbsp; </td><td align=left>SW</td></tr>
+        <tr><td><tt>4A</tt>&nbsp; </td><td align=left>NW</td></tr>
+       </table>
+      </td></tr>
+      <tr><td nowrap valign=top><tt>4B</tt> </td><td align=left>oilfield</td></tr>
+      <tr><td nowrap valign=top><tt>4C</tt>..<tt>51</tt>&nbsp; </td><td align=left>ship dock
+       <table>
+        <tr><td><tt>4C</tt>&nbsp; </td><td align=left>SW coast part</td></tr>
+        <tr><td><tt>4D</tt>&nbsp; </td><td align=left>NW coast part</td></tr>
+        <tr><td><tt>4E</tt>&nbsp; </td><td align=left>NE coast part</td></tr>
+        <tr><td><tt>4F</tt>&nbsp; </td><td align=left>SE coast part</td></tr>
+        <tr><td><tt>50</tt>&nbsp; </td><td align=left>X direction water part</td></tr>
+        <tr><td><tt>51</tt>&nbsp; </td><td align=left>Y direction water part</td></tr>
+       </table>
+      </td></tr>
+      <tr><td nowrap valign=top><tt>52</tt> </td><td align=left>buoy</td></tr>
+      <tr><td nowrap valign=top><tt>53</tt>..<tt>A7</tt>&nbsp; </td><td align=left>used by RichK's larger airports</td></tr>
+     </table>
+    </li>
+    <li>m1: <a href="#OwnershipInfo">owner</a> of the station</li>
+    <li>m2: index into the array of stations</li>
+    <li>m3 bits 0..3: <a href="#TrackType">track type</a> for railway stations, must be 0 for all the other stations</li>
+    <li>m3 bits 4..7: persistent random data for newstations</li>
+    <li>m4: custom station id; 0 means standard graphics</li>
+   </ul>
+   </td>
+  </tr>
 
-<tr><td valign=top nowrap><a name="Class9"><tt> 9 </tt></a></td><td>
-m5 bits 7..4 clear: tunnel entrance/exit
-<ul>
-<li>m5 bits 3..2: <tt>0</tt> - railway tunnel, <tt>1</tt> - road tunnel</li>
-<li>m5 bits 1..0 - direction: entrance towards: <tt>0</tt> = NE, <tt>1</tt> = SE, <tt>2</tt> = SW, <tt>3</tt> = NW</li>
-<li>m1: <a href="#OwnershipInfo">owner</a> of the tunnel</li>
-<li>m3 bits 3..0 = <a href="#TrackType">track type</a> for railway tunnel, must be 0 for road tunnel</li>
-<li>m4 bit 7 set = on snow or desert</li>
-</ul>
-m5 bit 7 set: bridge ramp
-<ul>
-<li>m1: <a href="#OwnershipInfo">owner</a> of the bridge</li>
-<li>m3 bits 3..0 = <a href="#TrackType">type of track</a> on the bridge, must be 0 for road bridge</li>
-<li>m5 bits 3..2: <tt>0</tt> - railway bridge, <tt>1</tt> - road bridge</li>
-<li>m5 bit 0..1: DiagDirection onto the bridge</li>
-<li>m2 bits 7..4: <a name="BridgeType">bridge type</a>:
-<table>
-<tr><th align=left>Type&nbsp;</th><th align=left>Max. speed (mph)&nbsp;</th><th align=left>Description</th></tr>
-<tr><td nowrap valign=top><tt>0</tt>&nbsp; </td><td align=center>20</td><td align=left>wooden</td></tr>
-<tr><td nowrap valign=top><tt>1</tt>&nbsp; </td><td align=center>30</td><td align=left>concrete</td></tr>
-<tr><td nowrap valign=top><tt>2</tt>&nbsp; </td><td align=center>40</td><td align=left>girder, steel</td></tr>
-<tr><td nowrap valign=top><tt>3</tt>&nbsp; </td><td align=center>50</td><td align=left>suspension, concrete</td></tr>
-<tr><td nowrap valign=top><tt>4</tt>&nbsp; </td><td align=center>60</td><td align=left>suspension, steel</td></tr>
-<tr><td nowrap valign=top><tt>5</tt>&nbsp; </td><td align=center>70</td><td align=left>suspension, steel</td></tr>
-<tr><td nowrap valign=top><tt>6</tt>&nbsp; </td><td align=center>100</td><td align=left>cantilever, steel</td></tr>
-<tr><td nowrap valign=top><tt>7</tt>&nbsp; </td><td align=center>130</td><td align=left>cantilever, steel</td></tr>
-<tr><td nowrap valign=top><tt>8</tt>&nbsp; </td><td align=center>150</td><td align=left>cantilever, steel</td></tr>
-<tr><td nowrap valign=top><tt>9</tt>&nbsp; </td><td align=center>160</td><td align=left>girder, steel</td></tr>
-<tr><td nowrap valign=top><tt>A</tt>&nbsp; </td><td align=center>200</td><td align=left>tubular, steel</td></tr>
-</table></li>
-<li>m4 bit 7 set = on snow or desert</li>
-</ul>
-</td></tr>
+  <tr>
+   <td valign=top nowrap><a name="Class6"><tt> 6 </tt></a></td>
+   <td>
+    <ul>
+     <li>m5: tile type:
+      <table>
+       <tr><td nowrap valign=top><tt>00</tt>&nbsp; </td><td align=left>water</td></tr>
+       <tr><td nowrap valign=top><tt>01</tt>&nbsp; </td><td align=left>coast or riverbank</td></tr>
+       <tr><td nowrap valign=top><tt>10</tt>..<tt>1B</tt>&nbsp; </td><td align=left>canal locks
+        <table>
+         <tr><td nowrap valign=top><tt>10</tt>&nbsp; </td><td align=left>middle part, (SW-NE direction)</td></tr>
+         <tr><td nowrap valign=top><tt>11</tt>&nbsp; </td><td align=left>middle part, (NW-SE direction)</td></tr>
+         <tr><td nowrap valign=top><tt>12</tt>&nbsp; </td><td align=left>middle part, (NE-SW direction)</td></tr>
+         <tr><td nowrap valign=top><tt>13</tt>&nbsp; </td><td align=left>middle part, (SE-NW direction)</td></tr>
+         <tr><td nowrap valign=top><tt>14</tt>&nbsp; </td><td align=left>lower part, (SW-NE direction)</td></tr>
+         <tr><td nowrap valign=top><tt>15</tt>&nbsp; </td><td align=left>lower part, (NW-SE direction)</td></tr>
+         <tr><td nowrap valign=top><tt>16</tt>&nbsp; </td><td align=left>lower part, (NE-SW direction)</td></tr>
+         <tr><td nowrap valign=top><tt>17</tt>&nbsp; </td><td align=left>lower part, (SE-NW direction)</td></tr>
+         <tr><td nowrap valign=top><tt>18</tt>&nbsp; </td><td align=left>upper part, (SW-NE direction)</td></tr>
+         <tr><td nowrap valign=top><tt>19</tt>&nbsp; </td><td align=left>upper part, (NW-SE direction)</td></tr>
+         <tr><td nowrap valign=top><tt>1A</tt>&nbsp; </td><td align=left>upper part, (NE-SW direction)</td></tr>
+         <tr><td nowrap valign=top><tt>1B</tt>&nbsp; </td><td align=left>upper part, (SE-NW direction)</td></tr>
+        </table>
+       </td></tr>
+       <tr><td nowrap valign=top><tt>80</tt>..<tt>83</tt>&nbsp; </td><td align=left>ship depots
+        <table>
+         <tr><td nowrap valign=top><tt>80</tt>&nbsp; </td><td align=left>ship depot, NE part (X direction)</td></tr>
+          <tr><td nowrap valign=top><tt>81</tt>&nbsp; </td><td align=left>ship depot, SW part (X direction)</td></tr>
+          <tr><td nowrap valign=top><tt>82</tt>&nbsp; </td><td align=left>ship depot, NW part (Y direction)</td></tr>
+         <tr><td nowrap valign=top><tt>83</tt>&nbsp; </td><td align=left>ship depot, SE part (Y direction)</td></tr>
+        </table>
+       </td></tr>
+      </table>
+     </li>
+     <li>m1: <a href="#OwnershipInfo">owner</a> (for water and coasts normally <tt>11</tt>)</li>
+    </ul>
+   </td>
+  </tr>
 
-<tr><td valign=top nowrap><a name="ClassA"><tt> A </tt></a></td><td>
-<ul>
-<li>m5: tile type:
-<table>
-<tr><td nowrap valign=top><tt>00</tt>&nbsp; </td><td align=left>transmitter</td></tr>
-<tr><td nowrap valign=top><tt>01</tt>&nbsp; </td><td align=left>lighthouse</td></tr>
-<tr><td nowrap valign=top><tt>02</tt>&nbsp; </td><td align=left>company statue</td></tr>
-<tr><td nowrap valign=top><tt>03</tt>&nbsp; </td><td align=left>company-owned land</td></tr>
-<tr><td nowrap valign=top><tt>80</tt>..<tt>93</tt>&nbsp; </td><td align=left>company headquarters (5 sets of 4 tiles each, updated quarterly depending on the company performance)</td></tr>
-</table>
-</li>
-<li>m1: <a href="#OwnershipInfo">owner</a> of the object (for lighthouses and transmitters normally <tt>10</tt>)</li>
-</ul>
-</td></tr>
+  <tr>
+   <td valign=top nowrap><a name="Class7"><tt> 7 </tt></a></td>
+   <td>Void
+    <p>Tiles of this class form an invisible, one tile wide border at the south (bottom) edges of the map,<br>
+       so as to protect several algorithms from the consequences of a wraparound at the edges.
+    </p>
+   </td>
+  </tr>
 
-<tr><td colspan=2>
-Classes <tt>B</tt> through <tt>F</tt> are reserved. The presence of a tile in one of the reserved classes will crash OTTD.
-</td></tr>
-</table>
+  <tr>
+   <td valign=top nowrap><a name="Class8"><tt> 8 </tt></a></td>
+   <td>Industry tile
+    <ul>
+     <li>m5: type:<br>
+      <small>(note: this is not the same as the industry type, which is stored in the array of industries)</small>
+      <table>
+       <tr><td nowrap valign=top><tt>00</tt>..<tt>06</tt>&nbsp; </td><td align=left>coal mine
+        <table>
+         <tr><td nowrap valign=top><tt>00</tt>&nbsp; </td><td align=left>wheel tower when not animated</td></tr>
+         <tr><td nowrap valign=top><tt>01</tt>&nbsp; </td><td align=left>wheel tower when animated<br>animation state in m3 bits 5..0; m3 bit 6 set = sound already generated</td></tr>
+        </table>
+       </td></tr>
+       <tr><td nowrap valign=top><tt>07</tt>..<tt>0A</tt>&nbsp; </td><td align=left>power station
+        <table>
+         <tr><td nowrap valign=top><tt>08</tt>&nbsp; </td><td align=left>chimney</td></tr>
+         <tr><td nowrap valign=top><tt>0A</tt>&nbsp; </td><td align=left>transformer; animation progress in m3(valid range <tt>0</tt>..<tt>7</tt>)</td></tr>
+        </table>
+       </td></tr>
+       <tr><td nowrap valign=top><tt>0B</tt>..<tt>0F</tt>&nbsp; </td><td align=left>sawmill</td></tr>
+       <tr><td nowrap valign=top><tt>10</tt>..<tt>11</tt>&nbsp; </td><td align=left>forest
+        <table>
+         <tr><td nowrap valign=top><tt>11</tt>&nbsp; </td><td align=left>trees cut down</td></tr>
+        </table>
+       </td></tr>
+       <tr><td nowrap valign=top><tt>12</tt>..<tt>17</tt>&nbsp; </td><td align=left>oil refinery</td></tr>
+       <tr><td nowrap valign=top><tt>18</tt>..<tt>1C</tt>&nbsp; </td><td align=left>oil rig</td></tr>
+       <tr><td nowrap valign=top><tt>1D</tt>..<tt>20</tt>&nbsp; </td><td align=left>oil wells
+        <table>
+         <tr><td nowrap valign=top><tt>1D</tt>&nbsp; </td><td align=left>not animated</td></tr>
+         <tr><td nowrap valign=top><tt>1E</tt>..<tt>20</tt>&nbsp; </td><td align=left>various stages of animation; progress of animation in m3</td></tr>
+        </table>
+       </td></tr>
+       <tr><td nowrap valign=top><tt>21</tt>..<tt>26</tt>&nbsp; </td><td align=left>farm</td></tr>
+       <tr><td nowrap valign=top><tt>27</tt>..<tt>2A</tt>&nbsp; </td><td align=left>factory (temperate climate)</td></tr>
+       <tr><td nowrap valign=top><tt>2B</tt>..<tt>2E</tt>&nbsp; </td><td align=left>printing works</td></tr>
+       <tr><td nowrap valign=top><tt>2F</tt>..<tt>33</tt>&nbsp; </td><td align=left>copper ore mine
+        <table>
+         <tr><td nowrap valign=top><tt>2F</tt>&nbsp; </td><td align=left>wheel tower when not animated</td></tr>
+         <tr><td nowrap valign=top><tt>30</tt>&nbsp; </td><td align=left>wheel tower when animated; animation state in m3 bits 5..0; m3 bit 6 set = sound already generated</td></tr>
+         <tr><td nowrap valign=top><tt>31</tt>&nbsp; </td><td align=left>chimney</td></tr>
+        </table>
+       </td></tr>
+       <tr><td nowrap valign=top><tt>34</tt>..<tt>39</tt>&nbsp; </td><td align=left>steel mill</td></tr>
+       <tr><td nowrap valign=top><tt>3A</tt>..<tt>3B</tt>&nbsp; </td><td align=left>bank (temperate climate)</td></tr>
+       <tr><td nowrap valign=top><tt>3C</tt>..<tt>3F</tt>&nbsp; </td><td align=left>food processing plant</td></tr>
+       <tr><td nowrap valign=top><tt>40</tt>..<tt>47</tt>&nbsp; </td><td align=left>paper mill</td></tr>
+       <tr><td nowrap valign=top><tt>48</tt>..<tt>58</tt>&nbsp; </td><td align=left>gold mine
+        <table>
+         <tr><td nowrap valign=top><tt>4F</tt>&nbsp; </td><td align=left>wheel tower when not animated</td></tr>
+         <tr><td nowrap valign=top><tt>58</tt>&nbsp; </td><td align=left>wheel tower when animated; animation state in m3 bits 5..0; m3 bit 6 set = sound already generated</td></tr>
+        </table>
+       </td></tr>
+       <tr><td nowrap valign=top><tt>59</tt>..<tt>5A</tt>&nbsp; </td><td align=left>bank (sub-arctic or sub-tropical climate)</td></tr>
+       <tr><td nowrap valign=top><tt>5B</tt>..<tt>63</tt>&nbsp; </td><td align=left>diamond mine</td></tr>
+       <tr><td nowrap valign=top><tt>64</tt>..<tt>73</tt>&nbsp; </td><td align=left>iron ore mine</td></tr>
+       <tr><td nowrap valign=top><tt>74</tt></td><td align=left>fruit plantation</td></tr>
+       <tr><td nowrap valign=top><tt>75</tt></td><td align=left>rubber plantation</td></tr>
+       <tr><td nowrap valign=top><tt>76</tt>..<tt>77</tt>&nbsp; </td><td align=left>water supply</td></tr>
+       <tr><td nowrap valign=top><tt>78</tt></td><td align=left>water tower</td></tr>
+       <tr><td nowrap valign=top><tt>79</tt>..<tt>7C</tt>&nbsp; </td><td align=left>factory (sub-tropical climate)</td></tr>
+       <tr><td nowrap valign=top><tt>7D</tt>..<tt>80</tt>&nbsp; </td><td align=left>lumber mill</td></tr>
+       <tr><td nowrap valign=top><tt>81</tt>..<tt>82</tt>&nbsp; </td><td align=left>candyfloss forest
+        <table>
+         <tr><td nowrap valign=top><tt>82</tt>&nbsp; </td><td align=left>candyfloss 'trees' cut down</td></tr>
+        </table>
+       </td></tr>
+       <tr><td nowrap valign=top><tt>83</tt>..<tt>86</tt>&nbsp; </td><td align=left>sweet factory</td></tr>
+       <tr><td nowrap valign=top><tt>87</tt>..<tt>88</tt>&nbsp; </td><td align=left>battery farm
+        <table>
+         <tr><td nowrap valign=top><tt>88</tt>&nbsp; </td><td align=left>batteries 'reaped'</td></tr>
+        </table>
+       </td></tr>
+       <tr><td nowrap valign=top><tt>89</tt></td><td align=left>cola wells</td></tr>
+       <tr><td nowrap valign=top><tt>8A</tt>..<tt>8D</tt>&nbsp; </td><td align=left>toy shop</td></tr>
+       <tr><td nowrap valign=top><tt>8E</tt>..<tt>93</tt>&nbsp; </td><td align=left>toy factory
+        <table>
+         <tr><td nowrap valign=top><tt>8F</tt>&nbsp; </td>
+         <td align=left>Animated part; animation state in m3 (valid range <tt>00</tt>..<tt>31</tt>)<br>
+                        Tile animation is started (m4 zeroed) on the periodic processing.<br>
+                        While the animation is in progress, m4 holds the number
+                        of animation cycles that have already taken place.<br>
+                        when this number reaches 8 the animation is stopped.
+         </td></tr>
+        </table>
+       </td></tr>
+       <tr><td nowrap valign=top><tt>94</tt>..<tt>9B</tt>&nbsp; </td><td align=left>plastic fountains (various stages of cyclic animation)</td></tr>
+       <tr><td nowrap valign=top><tt>9C</tt>..<tt>9F</tt>&nbsp; </td><td align=left>fizzy drink factory</td></tr>
+       <tr><td nowrap valign=top><tt>A0</tt>..<tt>A3</tt>&nbsp; </td><td align=left>bubble generator
+        <table>
+         <tr><td nowrap valign=top><tt>A1</tt>&nbsp; </td><td align=left>generators</td></tr>
+         <tr><td nowrap valign=top><tt>A2</tt>&nbsp; </td><td align=left>bubble capture facility; animation state in m3 (valid range <tt>00</tt>..<tt>27</tt>)</td></tr>
+        </table>
+       </td></tr>
+       <tr><td nowrap valign=top><tt>A4</tt>..<tt>A6</tt>&nbsp; </td><td align=left>toffee quarry
+        <table>
+         <tr><td nowrap valign=top><tt>A5</tt>&nbsp; </td><td align=left>animated part; animation state in m3 (valid range <tt>00</tt>..<tt>45</tt>)</td></tr>
+        </table>
+       </td></tr>
+       <tr><td nowrap valign=top><tt>A7</tt>..<tt>AE</tt>&nbsp; </td><td align=left>sugar mine
+        <table>
+         <tr><td nowrap valign=top><tt>AE</tt>&nbsp; </td><td align=left>animated part; animation state in m3 (valid range <tt>00</tt>..<tt>5F</tt>)</td></tr>
+        </table>
+       </td></tr>
+       <tr><td colspan=2>&nbsp;</td></tr> <!-- spacer -->
+      </table></li>
+     <li>m2: index into the array of industries</li>
+     <li>m1 bit 7: clear = under construction
+      <ul>
+       <li>m1 bits 4..2: construction counter, for buildings under construction incremented on every periodic tile processing</li>
+       <li>m1 bits 1..0: stage of construction (<tt>3</tt> = completed), incremented when the construction counter wraps around<br>
+           the meaning is different for some animated tiles which are never under construction (types <tt>01</tt>, <tt>1E</tt>..<tt>20</tt>, <tt>30</tt>, <tt>58</tt>; see above)</li>
+      </ul>
+     </li>
+    </ul>
+   </td>
+  </tr>
+
+  <tr>
+   <td valign=top nowrap><a name="Class9"><tt> 9 </tt></a></td>
+   <td>
+    <ul>
+     <li>m5 bits 7..4 clear: tunnel entrance/exit
+      <ul>
+       <li>m5 bits 3..2: <tt>0</tt> - railway tunnel, <tt>1</tt> - road tunnel</li>
+       <li>m5 bits 1..0 - direction: entrance towards: <tt>0</tt> = NE, <tt>1</tt> = SE, <tt>2</tt> = SW, <tt>3</tt> = NW</li>
+       <li>m1: <a href="#OwnershipInfo">owner</a> of the tunnel</li>
+       <li>m3 bits 3..0 = <a href="#TrackType">track type</a> for railway tunnel, must be 0 for road tunnel</li>
+       <li>m4 bit 7 set = on snow or desert</li>
+      </ul>
+     </li>
+     <li>m5 bit 7 set: bridge ramp
+      <ul>
+       <li>m1: <a href="#OwnershipInfo">owner</a> of the bridge</li>
+       <li>m3 bits 3..0 = <a href="#TrackType">type of track</a> on the bridge, must be 0 for road bridge</li>
+       <li>m5 bits 3..2: <tt>0</tt> - railway bridge, <tt>1</tt> - road bridge</li>
+       <li>m5 bit 0..1: DiagDirection onto the bridge</li>
+       <li>m2 bits 7..4: <a name="BridgeType">bridge type</a>:
+        <table>
+         <tr><th align=left>Type&nbsp;</th><th align=left>Max. speed (mph)&nbsp;</th><th align=left>Description</th></tr>
+         <tr><td nowrap valign=top><tt>0</tt>&nbsp; </td><td align=center>20</td><td align=left>wooden</td></tr>
+         <tr><td nowrap valign=top><tt>1</tt>&nbsp; </td><td align=center>30</td><td align=left>concrete</td></tr>
+         <tr><td nowrap valign=top><tt>2</tt>&nbsp; </td><td align=center>40</td><td align=left>girder, steel</td></tr>
+         <tr><td nowrap valign=top><tt>3</tt>&nbsp; </td><td align=center>50</td><td align=left>suspension, concrete</td></tr>
+         <tr><td nowrap valign=top><tt>4</tt>&nbsp; </td><td align=center>60</td><td align=left>suspension, steel</td></tr>
+         <tr><td nowrap valign=top><tt>5</tt>&nbsp; </td><td align=center>70</td><td align=left>suspension, steel</td></tr>
+         <tr><td nowrap valign=top><tt>6</tt>&nbsp; </td><td align=center>100</td><td align=left>cantilever, steel</td></tr>
+         <tr><td nowrap valign=top><tt>7</tt>&nbsp; </td><td align=center>130</td><td align=left>cantilever, steel</td></tr>
+         <tr><td nowrap valign=top><tt>8</tt>&nbsp; </td><td align=center>150</td><td align=left>cantilever, steel</td></tr>
+         <tr><td nowrap valign=top><tt>9</tt>&nbsp; </td><td align=center>160</td><td align=left>girder, steel</td></tr>
+         <tr><td nowrap valign=top><tt>A</tt>&nbsp; </td><td align=center>200</td><td align=left>tubular, steel</td></tr>
+        </table>
+       </li>
+       <li>m4 bit 7 set = on snow or desert</li>
+      </ul>
+     <li>
+    </ul>
+   </td>
+  </tr>
+
+  <tr>
+   <td valign=top nowrap><a name="ClassA"><tt> A </tt></a></td>
+   <td>
+    <ul>
+     <li>m5: tile type:
+      <table>
+       <tr><td nowrap valign=top><tt>00</tt>&nbsp; </td><td align=left>transmitter</td></tr>
+       <tr><td nowrap valign=top><tt>01</tt>&nbsp; </td><td align=left>lighthouse</td></tr>
+       <tr><td nowrap valign=top><tt>02</tt>&nbsp; </td><td align=left>company statue</td></tr>
+       <tr><td nowrap valign=top><tt>03</tt>&nbsp; </td><td align=left>company-owned land</td></tr>
+       <tr><td nowrap valign=top><tt>80</tt>..<tt>93</tt>&nbsp; </td><td align=left>company headquarters (5 sets of 4 tiles each, updated quarterly depending on the company performance)</td></tr>
+      </table>
+     </li>
+     <li>m1: <a href="#OwnershipInfo">owner</a> of the object (for lighthouses and transmitters normally <tt>10</tt>)</li>
+    </ul>
+   </td>
+  </tr>
+
+  <tr><td colspan=2>Classes <tt>B</tt> through <tt>F</tt> are reserved. The presence of a tile in one of the reserved classes will crash OTTD.</td></tr>
+ </table>
 
 
-<hr>
-Original Copyright &copy; 2003 by Marcin Grzegorczyk for TTDLX.<br>
-Transport Tycoon and Transport Tycoon Deluxe are Copyright &copy; by Chris Sawyer. All the other trademarks are the property of their respective owners.<br>
+ <hr>
+ Original Copyright &copy; 2003 by Marcin Grzegorczyk for TTDLX.<br>
+ Transport Tycoon and Transport Tycoon Deluxe are Copyright &copy; by Chris Sawyer.<br>
+ All the other trademarks are the property of their respective owners.<br>
+</body>
 
-</body>
 </html>
--- a/source.list	Wed Feb 14 10:46:38 2007 +0000
+++ b/source.list	Sat Feb 17 11:12:50 2007 +0000
@@ -366,12 +366,18 @@
 #else
 	#if WINCE
 	#else
-		music/extmidi.cpp
+		#if PSP
+		#else
+			music/extmidi.cpp
+		#end
 	#end
 #end
 #if BEOS
  	music/bemidi.cpp
 #end
+#if LIBTIMIDITY
+	music/libtimidity.cpp
+#end
 
 # Sound
 sound/null_s.cpp
--- a/src/ai/default/default.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/ai/default/default.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -3244,7 +3244,6 @@
 static void AiStateAirportStuff(Player *p)
 {
 	const Station* st;
-	byte acc_planes;
 	int i;
 	AiBuildRec *aib;
 	byte rule;
@@ -3268,16 +3267,11 @@
 			// Do we own the airport? (Oilrigs aren't owned, though.)
 			if (st->owner != OWNER_NONE && st->owner != _current_player) continue;
 
-			acc_planes = GetAirport(st->airport_type)->acc_planes;
-
-			// Dismiss heliports, unless we are checking an oilrig.
-			if (acc_planes == HELICOPTERS_ONLY && (p->ai.build_kind != 1 || i != 1))
+			AirportFTAClass::Flags flags = st->Airport()->flags;
+
+			if (!(flags & (p->ai.build_kind == 1 && i == 0 ? AirportFTAClass::HELICOPTERS : AirportFTAClass::AIRPLANES))) {
 				continue;
-
-			// Dismiss country airports if we are doing the other
-			// endpoint of an oilrig route.
-			if (acc_planes == AIRCRAFT_ONLY && (p->ai.build_kind == 1 && i == 0))
-				continue;
+			}
 
 			// Dismiss airports too far away.
 			if (DistanceMax(st->airport_tile, aib->spec_tile) > aib->rand_rng)
@@ -3298,7 +3292,7 @@
 			 * broken because they will probably need different
 			 * tileoff values etc), no matter that
 			 * IsHangarTile() makes no sense. --pasky */
-			if (acc_planes == HELICOPTERS_ONLY) {
+			if (!(flags & AirportFTAClass::AIRPLANES)) {
 				/* Heliports should have maybe own rulesets but
 				 * OTOH we don't want AI to pick them up when
 				 * looking for a suitable airport type to build.
@@ -3339,19 +3333,13 @@
 static bool AiCheckAirportResources(TileIndex tile, const AiDefaultBlockData *p, byte cargo)
 {
 	uint values[NUM_CARGO];
-	int rad;
-
-	if (_patches.modified_catchment) {
-		rad = CA_AIR_LARGE; // I Have NFI what airport the
-	} else { // AI is going to build here
-		rad = 4;
-	}
 
 	for (; p->mode == 0; p++) {
 		TileIndex tile2 = TILE_ADD(tile, ToTileIndexDiff(p->tileoffs));
 		const AirportFTAClass* airport = GetAirport(p->attr);
 		uint w = airport->size_x;
 		uint h = airport->size_y;
+		uint rad = _patches.modified_catchment ? airport->catchment : 4;
 
 		if (cargo & 0x80) {
 			GetProductionAroundTiles(values, tile2, w, h, rad);
@@ -3372,7 +3360,7 @@
 	for (i = 0; (p = _airport_default_block_data[i]) != NULL; i++) {
 		// If we are doing a helicopter service, avoid building
 		// airports where they can't land.
-		if (heli && GetAirport(p->attr)->acc_planes == AIRCRAFT_ONLY) continue;
+		if (heli && !(GetAirport(p->attr)->flags & AirportFTAClass::HELICOPTERS)) continue;
 
 		*cost = AiDoBuildDefaultAirportBlock(tile, p, 0);
 		if (!CmdFailed(*cost) && AiCheckAirportResources(tile, p, cargo))
@@ -3475,7 +3463,7 @@
 
 	/* XXX - Have the AI pick the hangar terminal in an airport. Eg get airport-type
 	 * and offset to the FIRST depot because the AI picks the st->xy tile */
-	tile += ToTileIndexDiff(GetAirport(GetStationByTile(tile)->airport_type)->airport_depots[0]);
+	tile += ToTileIndexDiff(GetStationByTile(tile)->Airport()->airport_depots[0]);
 	if (CmdFailed(DoCommand(tile, veh, 0, DC_EXEC, CMD_BUILD_AIRCRAFT))) return;
 	loco_id = _new_vehicle_id;
 
--- a/src/ai/trolly/pathfinder.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/ai/trolly/pathfinder.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -372,9 +372,9 @@
 extern uint GetRailFoundation(Slope tileh, TrackBits bits); // XXX function declaration in .c
 extern uint GetRoadFoundation(Slope tileh, RoadBits bits); // XXX function declaration in .c
 extern uint GetBridgeFoundation(Slope tileh, Axis); // XXX function declaration in .c
-enum {
+typedef enum BridgeFoundations{
 	BRIDGE_NO_FOUNDATION = 1 << 0 | 1 << 3 | 1 << 6 | 1 << 9 | 1 << 12,
-};
+} BridgeFoundation;
 
 // The most important function: it calculates the g-value
 static int32 AyStar_AiPathFinder_CalculateG(AyStar *aystar, AyStarNode *current, OpenListNode *parent)
--- a/src/aircraft_cmd.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/aircraft_cmd.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -74,22 +74,23 @@
 	TileIndex vtile = TileVirtXY(v->x_pos, v->y_pos);
 
 	FOR_ALL_STATIONS(st) {
-		if (st->owner == v->owner && st->facilities & FACIL_AIRPORT &&
-				GetAirport(st->airport_type)->nof_depots > 0) {
-			uint distance;
+		if (st->owner != v->owner || !(st->facilities & FACIL_AIRPORT)) continue;
 
-			// don't crash the plane if we know it can't land at the airport
-			if ((AircraftVehInfo(v->engine_type)->subtype & AIR_FAST) &&
-					(st->airport_type == AT_SMALL || st->airport_type == AT_COMMUTER) &&
-					!_cheats.no_jetcrash.value)
-				continue;
+		const AirportFTAClass *afc = st->Airport();
+		if (afc->nof_depots == 0 || (
+					/* don't crash the plane if we know it can't land at the airport */
+					afc->flags & AirportFTAClass::SHORT_STRIP &&
+					AircraftVehInfo(v->engine_type)->subtype & AIR_FAST &&
+					!_cheats.no_jetcrash.value
+				)) {
+			continue;
+		}
 
-			// v->tile can't be used here, when aircraft is flying v->tile is set to 0
-			distance = DistanceSquare(vtile, st->airport_tile);
-			if (distance < best || index == INVALID_STATION) {
-				best = distance;
-				index = st->index;
-			}
+		// v->tile can't be used here, when aircraft is flying v->tile is set to 0
+		uint distance = DistanceSquare(vtile, st->airport_tile);
+		if (distance < best || index == INVALID_STATION) {
+			best = distance;
+			index = st->index;
 		}
 	}
 	return index;
@@ -105,7 +106,7 @@
 		const Station *st = GetStation(order->station);
 		if (st->owner == v->owner && st->facilities & FACIL_AIRPORT) {
 			// If an airport doesn't have a hangar, skip it
-			if (GetAirport(st->airport_type)->nof_depots != 0)
+			if (st->Airport()->nof_depots != 0)
 				return true;
 		}
 	}
@@ -249,8 +250,8 @@
 
 	// Prevent building aircraft types at places which can't handle them
 	const Station* st = GetStationByTile(tile);
-	const AirportFTAClass* apc = GetAirport(st->airport_type);
-	if ((avi->subtype & AIR_CTOL ? HELICOPTERS_ONLY : AIRCRAFT_ONLY) == apc->acc_planes) {
+	const AirportFTAClass* apc = st->Airport();
+	if (!(apc->flags & (avi->subtype & AIR_CTOL ? AirportFTAClass::AIRPLANES : AirportFTAClass::HELICOPTERS))) {
 		return CMD_ERROR;
 	}
 
@@ -558,7 +559,7 @@
 		StationID next_airport_index = v->u.air.targetairport;
 		const Station *st = GetStation(next_airport_index);
 		/* If the station is not a valid airport or if it has no hangars */
-		if (!st->IsValid() || st->airport_tile == 0 || GetAirport(st->airport_type)->nof_depots == 0) {
+		if (!st->IsValid() || st->airport_tile == 0 || st->Airport()->nof_depots == 0) {
 			StationID station;
 
 			// the aircraft has to search for a hangar on its own
@@ -695,7 +696,7 @@
 
 	st = GetStation(v->current_order.dest);
 	// only goto depot if the target airport has terminals (eg. it is airport)
-	if (st->IsValid() && st->airport_tile != 0 && GetAirport(st->airport_type)->terminals != NULL) {
+	if (st->IsValid() && st->airport_tile != 0 && st->Airport()->terminals != NULL) {
 //		printf("targetairport = %d, st->index = %d\n", v->u.air.targetairport, st->index);
 //		v->u.air.targetairport = st->index;
 		v->current_order.type = OT_GOTO_DEPOT;
@@ -969,7 +970,8 @@
 	}
 
 	// get airport moving data
-	const AirportMovingData *amd = GetAirport(st->airport_type)->MovingData(v->u.air.pos);
+	const AirportFTAClass *afc = st->Airport();
+	const AirportMovingData *amd = afc->MovingData(v->u.air.pos);
 
 	// Helicopter raise
 	if (amd->flag & AMED_HELI_RAISE) {
@@ -1011,9 +1013,7 @@
 			v->tile = st->airport_tile;
 
 			// Find altitude of landing position.
-			z = GetSlopeZ(x, y) + 1;
-			if (st->airport_type == AT_OILRIG) z += 54;
-			if (st->airport_type == AT_HELIPORT) z += 60;
+			z = GetSlopeZ(x, y) + 1 + afc->delta_z;
 
 			if (z == v->z_pos) {
 				u = v->next->next;
@@ -1369,7 +1369,9 @@
 
 	//FIXME -- MaybeCrashAirplane -> increase crashing chances of very modern airplanes on smaller than AT_METROPOLITAN airports
 	prob = 0x10000 / 1500;
-	if (((st->airport_type == AT_SMALL) || (st->airport_type == AT_COMMUTER)) && (AircraftVehInfo(v->engine_type)->subtype & AIR_FAST) && !_cheats.no_jetcrash.value) {
+	if (st->Airport()->flags & AirportFTAClass::SHORT_STRIP &&
+			AircraftVehInfo(v->engine_type)->subtype & AIR_FAST &&
+			!_cheats.no_jetcrash.value) {
 		prob = 0x10000 / 20;
 	}
 
@@ -1441,19 +1443,52 @@
 	MaybeCrashAirplane(v);
 }
 
+/**
+ * Find the entry point to an airport depending on direction which
+ * the airport is being approached from. Each airport can have up to
+ * four entry points for its approach system so that approaching
+ * aircraft do not fly through each other or are forced to do 180
+ * degree turns during the approach. The arrivals are grouped into
+ * four sectors dependent on the DiagDirection from which the airport
+ * is approached.
+ *
+ * @param v   The vehicle that is approaching the airport
+ * @param apc The Airport Class being approached.
+ * @returns   The index of the entry point
+ */
+static byte AircraftGetEntryPoint(const Vehicle *v, const AirportFTAClass *apc)
+{
+	assert(v != NULL);
+	assert(apc != NULL);
+
+	const Station *st = GetStation(v->u.air.targetairport);
+	/* Make sure we don't go to 0,0 if the airport has been removed. */
+	TileIndex tile = (st->airport_tile != 0) ? st->airport_tile : st->xy;
+
+	int delta_x = v->x_pos - TileX(tile) * TILE_SIZE;
+	int delta_y = v->y_pos - TileY(tile) * TILE_SIZE;
+
+	DiagDirection dir;
+	if (abs(delta_y) < abs(delta_x)) {
+		/* We are northeast or southwest of the airport */
+		dir = delta_x < 0 ? DIAGDIR_NE : DIAGDIR_SW;
+	} else {
+		/* We are northwest or southeast of the airport */
+		dir = delta_y < 0 ? DIAGDIR_NW : DIAGDIR_SE;
+	}
+	return apc->entry_points[dir];
+}
+
+
 // set the right pos when heading to other airports after takeoff
 static void AircraftNextAirportPos_and_Order(Vehicle *v)
 {
-	const Station* st;
-	const AirportFTAClass *apc;
-
 	if (v->current_order.type == OT_GOTO_STATION ||
 			v->current_order.type == OT_GOTO_DEPOT)
 		v->u.air.targetairport = v->current_order.dest;
 
-	st = GetStation(v->u.air.targetairport);
-	apc = GetAirport(st->airport_type);
-	v->u.air.pos = v->u.air.previous_pos = apc->entry_point;
+	const AirportFTAClass *apc = GetStation(v->u.air.targetairport)->Airport();
+	v->u.air.pos = v->u.air.previous_pos = AircraftGetEntryPoint(v, apc);
 }
 
 static void AircraftLeaveHangar(Vehicle *v)
@@ -1637,12 +1672,8 @@
 	uint16 tcur_speed, tsubspeed;
 
 	st = GetStation(v->u.air.targetairport);
-	// flying device is accepted at this station
-	// small airport --> no helicopters (AIRCRAFT_ONLY)
-	// all other airports --> all types of flying devices (ALL)
-	// heliport/oilrig, etc --> no airplanes (HELICOPTERS_ONLY)
 	// runway busy or not allowed to use this airstation, circle
-	if (v->subtype != apc->acc_planes &&
+	if (apc->flags & (v->subtype == AIR_HELICOPTER ? AirportFTAClass::HELICOPTERS : AirportFTAClass::AIRPLANES) &&
 			st->airport_tile != 0 &&
 			(st->owner == OWNER_NONE || st->owner == v->owner)) {
 		// {32,FLYING,NOTHING_block,37}, {32,LANDING,N,33}, {32,HELILANDING,N,41},
@@ -1823,8 +1854,7 @@
 		current = current->next;
 	} while (current != NULL);
 
-	DEBUG(misc, 0, "[Ap] cannot move further on Airport! (pos %d state %d)", v->u.air.pos, v->u.air.state);
-	DEBUG(misc, 0, "[Ap] airport entry point: %d, Vehicle: %d", apc->entry_point, v->index);
+	DEBUG(misc, 0, "[Ap] cannot move further on Airport! (pos %d state %d) for vehicle %d", v->u.air.pos, v->u.air.state, v->index);
 	assert(0);
 	return false;
 }
@@ -1838,7 +1868,7 @@
 	// same block, then of course we can move
 	if (apc->layout[current_pos->position].block != next->block) {
 		const Station *st = GetStation(v->u.air.targetairport);
-		uint32 airport_flags = next->block;
+		uint64 airport_flags = next->block;
 
 		// check additional possible extra blocks
 		if (current_pos != reference && current_pos->block != NOTHING_block) {
@@ -1862,7 +1892,7 @@
 
 	// if the next position is in another block, check it and wait until it is free
 	if ((apc->layout[current_pos->position].block & next->block) != next->block) {
-		uint32 airport_flags = next->block;
+		uint64 airport_flags = next->block;
 		Station* st = GetStation(v->u.air.targetairport);
 		//search for all all elements in the list with the same state, and blocks != N
 		// this means more blocks should be checked/set
@@ -2050,10 +2080,7 @@
 
 	if (v->current_order.type >= OT_LOADING) return;
 
-	// pass the right airport structure to the functions
-	// DEREF_STATION gets target airport (Station *st), its type is passed to GetAirport
-	// that returns the correct layout depending on type
-	AirportGoToNextPosition(v, GetAirport(GetStation(v->u.air.targetairport)->airport_type));
+	AirportGoToNextPosition(v, GetStation(v->u.air.targetairport)->Airport());
 }
 
 void Aircraft_Tick(Vehicle *v)
@@ -2119,7 +2146,7 @@
 	byte takeofftype;
 	uint16 cnt;
 	// only 1 station is updated per function call, so it is enough to get entry_point once
-	const AirportFTAClass *ap = GetAirport(st->airport_type);
+	const AirportFTAClass *ap = st->Airport();
 	FOR_ALL_VEHICLES(v) {
 		if (v->type == VEH_Aircraft && IsNormalAircraft(v)) {
 			if (v->u.air.targetairport == st->index) { // if heading to this airport
@@ -2127,7 +2154,7 @@
 				 *you cannot delete airport, so it doesn't matter
 				 */
 				if (v->u.air.state >= FLYING) { // circle around
-					v->u.air.pos = v->u.air.previous_pos = ap->entry_point;
+					v->u.air.pos = v->u.air.previous_pos = AircraftGetEntryPoint(v, ap);
 					v->u.air.state = FLYING;
 					// landing plane needs to be reset to flying height (only if in pause mode upgrade,
 					// in normal mode, plane is reset in AircraftController. It doesn't hurt for FLYING
--- a/src/airport.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/airport.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -36,120 +36,140 @@
 		_airport_moving_data_country,
 		_airport_terminal_country,
 		NULL,
-		16,
-		ALL,
+		_airport_entries_country,
+		AirportFTAClass::ALL | AirportFTAClass::SHORT_STRIP,
 		_airport_fta_country,
 		_airport_depots_country,
 		lengthof(_airport_depots_country),
-		4, 3
+		4, 3,
+		0,
+		4
 	);
 
 	CityAirport = new AirportFTAClass(
 		_airport_moving_data_town,
 		_airport_terminal_city,
 		NULL,
-		19,
-		ALL,
+		_airport_entries_city,
+		AirportFTAClass::ALL,
 		_airport_fta_city,
 		_airport_depots_city,
 		lengthof(_airport_depots_city),
-		6, 6
+		6, 6,
+		0,
+		5
 	);
 
 	MetropolitanAirport = new AirportFTAClass(
 		_airport_moving_data_metropolitan,
 		_airport_terminal_metropolitan,
 		NULL,
-		20,
-		ALL,
+		_airport_entries_metropolitan,
+		AirportFTAClass::ALL,
 		_airport_fta_metropolitan,
 		_airport_depots_metropolitan,
 		lengthof(_airport_depots_metropolitan),
-		6, 6
+		6, 6,
+		0,
+		6
 	);
 
 	InternationalAirport = new AirportFTAClass(
 		_airport_moving_data_international,
 		_airport_terminal_international,
 		_airport_helipad_international,
-		37,
-		ALL,
+		_airport_entries_international,
+		AirportFTAClass::ALL,
 		_airport_fta_international,
 		_airport_depots_international,
 		lengthof(_airport_depots_international),
-		7, 7
+		7, 7,
+		0,
+		8
 	);
 
 	IntercontinentalAirport = new AirportFTAClass(
 		_airport_moving_data_intercontinental,
 		_airport_terminal_intercontinental,
 		_airport_helipad_intercontinental,
-		43,
-		ALL,
+		_airport_entries_intercontinental,
+		AirportFTAClass::ALL,
 		_airport_fta_intercontinental,
 		_airport_depots_intercontinental,
 		lengthof(_airport_depots_intercontinental),
-		9,11
+		9, 11,
+		0,
+		10
 	);
 
 	Heliport = new AirportFTAClass(
 		_airport_moving_data_heliport,
 		NULL,
 		_airport_helipad_heliport_oilrig,
-		7,
-		HELICOPTERS_ONLY,
+		_airport_entries_heliport_oilrig,
+		AirportFTAClass::HELICOPTERS,
 		_airport_fta_heliport_oilrig,
 		NULL,
 		0,
-		1, 1
+		1, 1,
+		60,
+		4
 	);
 
 	Oilrig = new AirportFTAClass(
 		_airport_moving_data_oilrig,
 		NULL,
 		_airport_helipad_heliport_oilrig,
-		7,
-		HELICOPTERS_ONLY,
+		_airport_entries_heliport_oilrig,
+		AirportFTAClass::HELICOPTERS,
 		_airport_fta_heliport_oilrig,
 		NULL,
 		0,
-		1, 1
+		1, 1,
+		54,
+		3
 	);
 
 	CommuterAirport = new AirportFTAClass(
 		_airport_moving_data_commuter,
 		_airport_terminal_commuter,
 		_airport_helipad_commuter,
-		22,
-		ALL,
+		_airport_entries_commuter,
+		AirportFTAClass::ALL | AirportFTAClass::SHORT_STRIP,
 		_airport_fta_commuter,
 		_airport_depots_commuter,
 		lengthof(_airport_depots_commuter),
-		5,4
+		5, 4,
+		0,
+		4
 	);
 
 	HeliDepot = new AirportFTAClass(
 		_airport_moving_data_helidepot,
 		NULL,
 		_airport_helipad_helidepot,
-		4,
-		HELICOPTERS_ONLY,
+		_airport_entries_helidepot,
+		AirportFTAClass::HELICOPTERS,
 		_airport_fta_helidepot,
 		_airport_depots_helidepot,
 		lengthof(_airport_depots_helidepot),
-		2,2
+		2, 2,
+		0,
+		4
 	);
 
 	HeliStation = new AirportFTAClass(
 		_airport_moving_data_helistation,
 		NULL,
 		_airport_helipad_helistation,
-		25,
-		HELICOPTERS_ONLY,
+		_airport_entries_helistation,
+		AirportFTAClass::HELICOPTERS,
 		_airport_fta_helistation,
 		_airport_depots_helistation,
 		lengthof(_airport_depots_helistation),
-		4,2
+		4, 2,
+		0,
+		4
 	);
 }
 
@@ -181,28 +201,31 @@
 	const AirportMovingData *moving_data_,
 	const byte *terminals_,
 	const byte *helipads_,
-	const byte entry_point_,
-	const AcceptPlanes acc_planes_,
+	const byte *entry_points_,
+	Flags flags_,
 	const AirportFTAbuildup *apFA,
 	const TileIndexDiffC *depots_,
 	const byte nof_depots_,
 	uint size_x_,
-	uint size_y_
+	uint size_y_,
+	byte delta_z_,
+	byte catchment_
 ) :
 	moving_data(moving_data_),
 	terminals(terminals_),
 	helipads(helipads_),
 	airport_depots(depots_),
+	flags(flags_),
 	nof_depots(nof_depots_),
 	nofelements(AirportGetNofElements(apFA)),
-	entry_point(entry_point_),
+	entry_points(entry_points_),
 	size_x(size_x_),
-	size_y(size_y_)
+	size_y(size_y_),
+	delta_z(delta_z_),
+	catchment(catchment_)
 {
 	byte nofterminalgroups, nofhelipadgroups;
 
-	acc_planes = acc_planes_; // XXX TinyEnumT has no initialisation, only assignment
-
 	/* Set up the terminal and helipad count for an airport.
 	 * TODO: If there are more than 10 terminals or 4 helipads, internal variables
 	 * need to be changed, so don't allow that for now */
@@ -221,15 +244,18 @@
 	/* Get the number of elements from the source table. We also double check this
 	 * with the entry point which must be within bounds and use this information
 	 * later on to build and validate the state machine */
-	if (entry_point >= nofelements) {
-		DEBUG(misc, 0, "[Ap] entry (%d) must be within the airport (maximum %d)", entry_point, nofelements);
-		assert(entry_point < nofelements);
+	for (DiagDirection i = DIAGDIR_BEGIN; i < DIAGDIR_END; i++) {
+		if (entry_points[i] >= nofelements) {
+			DEBUG(misc, 0, "[Ap] entry (%d) must be within the airport (maximum %d)", entry_points[i], nofelements);
+			assert(entry_points[i] < nofelements);
+		}
 	}
 
 	/* Build the state machine itself */
 	layout = AirportBuildAutomata(nofelements, apFA);
-	DEBUG(misc, 2, "[Ap] #count %3d; #term %2d (%dgrp); #helipad %2d (%dgrp); entry %3d",
-		nofelements, nofterminals, nofterminalgroups, nofhelipads, nofhelipadgroups, entry_point);
+	DEBUG(misc, 2, "[Ap] #count %3d; #term %2d (%dgrp); #helipad %2d (%dgrp); entries %3d, %3d, %3d, %3d",
+		nofelements, nofterminals, nofterminalgroups, nofhelipads, nofhelipadgroups,
+		entry_points[DIAGDIR_NE], entry_points[DIAGDIR_SE], entry_points[DIAGDIR_SW], entry_points[DIAGDIR_NW]);
 
 	/* Test if everything went allright. This is only a rude static test checking
 	 * the symantic correctness. By no means does passing the test mean that the
--- a/src/airport.h	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/airport.h	Sat Feb 17 11:12:50 2007 +0000
@@ -24,18 +24,6 @@
 	AT_OILRIG        = 15
 };
 
-// do not change unless you change v->subtype too. This aligns perfectly with its current setting
-enum AcceptPlanes {
-	ACC_BEGIN        = 0,
-	AIRCRAFT_ONLY    = 0,
-	ALL              = 1,
-	HELICOPTERS_ONLY = 2,
-	ACC_END
-};
-
-/** Define basic enum properties */
-template <> struct EnumPropsT<AcceptPlanes> : MakeEnumPropsT<AcceptPlanes, byte, ACC_BEGIN, ACC_END, ACC_END> {};
-typedef TinyEnumT<AcceptPlanes> AcceptPlanesByte;
 
 enum {
 	AMED_NOSPDCLAMP = 1 << 0,
@@ -133,17 +121,26 @@
 // Finite sTate mAchine --> FTA
 typedef struct AirportFTAClass {
 	public:
+		enum Flags {
+			AIRPLANES   = 0x1,
+			HELICOPTERS = 0x2,
+			ALL         = AIRPLANES | HELICOPTERS,
+			SHORT_STRIP = 0x4
+		};
+
 		AirportFTAClass(
 			const AirportMovingData *moving_data,
 			const byte *terminals,
 			const byte *helipads,
-			byte entry_point,
-			AcceptPlanes acc_planes,
+			const byte *entry_points,
+			Flags flags,
 			const AirportFTAbuildup *apFA,
 			const TileIndexDiffC *depots,
 			byte nof_depots,
 			uint size_x,
-			uint size_y
+			uint size_y,
+			byte delta_z,
+			byte catchment
 		);
 
 		~AirportFTAClass();
@@ -159,18 +156,23 @@
 	const byte *terminals;
 	const byte *helipads;
 	const TileIndexDiffC *airport_depots; // gives the position of the depots on the airports
+	Flags flags;
 	byte nof_depots;                      // number of depots this airport has
 	byte nofelements;                     // number of positions the airport consists of
-	byte entry_point;                     // when an airplane arrives at this airport, enter it at position entry_point
-	AcceptPlanesByte acc_planes;          // accept airplanes or helicopters or both
+	const byte *entry_points;             ///< when an airplane arrives at this airport, enter it at position entry_point, index depends on direction
 	byte size_x;
 	byte size_y;
+	byte delta_z;                         // Z adjustment for helicopter pads
+	byte catchment;
 } AirportFTAClass;
 
+DECLARE_ENUM_AS_BIT_SET(AirportFTAClass::Flags)
+
+
 // internal structure used in openttd - Finite sTate mAchine --> FTA
 typedef struct AirportFTA {
 	struct AirportFTA *next; // possible extra movement choices from this position
-	uint32 block;            // 32 bit blocks (st->airport_flags), should be enough for the most complex airports
+	uint64 block;            // 64 bit blocks (st->airport_flags), should be enough for the most complex airports
 	byte position;           // the position that an airplane is at
 	byte next_position;      // next position from this position
 	byte heading;            // heading (current orders), guiding an airplane to its target on an airport
--- a/src/airport_gui.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/airport_gui.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -150,7 +150,6 @@
 
 	case WE_PAINT: {
 		int i; // airport enabling loop
-		int rad = 4; // default catchment radious
 		uint32 avail_airports;
 		const AirportFTAClass *airport;
 
@@ -175,20 +174,7 @@
 		airport = GetAirport(_selected_airport_type);
 		SetTileSelectSize(airport->size_x, airport->size_y);
 
-		if (_patches.modified_catchment) {
-			switch (_selected_airport_type) {
-				case AT_OILRIG:        rad = CA_AIR_OILPAD;   break;
-				case AT_HELIPORT:      rad = CA_AIR_HELIPORT; break;
-				case AT_SMALL:         rad = CA_AIR_SMALL;    break;
-				case AT_LARGE:         rad = CA_AIR_LARGE;    break;
-				case AT_METROPOLITAN:  rad = CA_AIR_METRO;    break;
-				case AT_INTERNATIONAL: rad = CA_AIR_INTER;    break;
-				case AT_COMMUTER:      rad = CA_AIR_COMMUTER; break;
-				case AT_HELIDEPOT:     rad = CA_AIR_HELIDEPOT; break;
-				case AT_INTERCON:      rad = CA_AIR_INTERCON; break;
-				case AT_HELISTATION:   rad = CA_AIR_HELISTATION; break;
-			}
-		}
+		int rad = _patches.modified_catchment ? airport->catchment : 4;
 
 		if (_station_show_coverage) SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad);
 
--- a/src/airport_movement.h	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/airport_movement.h	Sat Feb 17 11:12:50 2007 +0000
@@ -373,6 +373,7 @@
  * this may be changed later when airports are moved to external file  */
 static const TileIndexDiffC _airport_depots_country[] = {{3, 0}};
 static const byte _airport_terminal_country[] = {1, 2};
+static const byte _airport_entries_country[] = {16, 16, 16, 16};
 static const AirportFTAbuildup _airport_fta_country[] = {
 	{  0, HANGAR, NOTHING_block, 1 },
 	{  1, 255, AIRPORT_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TERM1, TERM1_block, 2 }, { 1, TERM2, 0, 4 }, { 1, HELITAKEOFF, 0, 19 }, { 1, 0, 0, 6 },
@@ -405,6 +406,7 @@
 static const TileIndexDiffC _airport_depots_commuter[] = { { 4, 0 } };
 static const byte _airport_terminal_commuter[] = { 1, 3 };
 static const byte _airport_helipad_commuter[] = { 1, 2 };
+static const byte _airport_entries_commuter[] = {7, 7, 7, 7};
 static const AirportFTAbuildup _airport_fta_commuter[] = {
 	{  0, HANGAR, NOTHING_block, 1 }, { 0, HELITAKEOFF, HELIPAD2_block, 1 }, { 0, 0, 0, 1 },
 	{  1, 255, TAXIWAY_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TAKEOFF, 0, 11 }, { 1, TERM1, TAXIWAY_BUSY_block, 10 }, { 1, TERM2, TAXIWAY_BUSY_block, 10 }, { 1, TERM3, TAXIWAY_BUSY_block, 10 }, { 1, HELIPAD1, TAXIWAY_BUSY_block, 10 }, { 1, HELIPAD2, TAXIWAY_BUSY_block, 10 }, { 1, HELITAKEOFF, TAXIWAY_BUSY_block, 10 }, { 1, 0, 0, 0 },
@@ -454,6 +456,7 @@
 
 static const TileIndexDiffC _airport_depots_city[] = { { 5, 0 } };
 static const byte _airport_terminal_city[] = { 1, 3 };
+static const byte _airport_entries_city[] = {19, 19, 19, 19};
 static const AirportFTAbuildup _airport_fta_city[] = {
 	{  0, HANGAR, NOTHING_block, 1 }, { 0, TAKEOFF, OUT_WAY_block, 1 }, { 0, 0, 0, 1 },
 	{  1, 255, TAXIWAY_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TERM2, 0, 6 }, { 1, TERM3, 0, 6 }, { 1, 0, 0, 7 }, // for all else, go to 7
@@ -489,6 +492,7 @@
 
 static const TileIndexDiffC _airport_depots_metropolitan[] = { { 5, 0 } };
 static const byte _airport_terminal_metropolitan[] = { 1, 3 };
+static const byte _airport_entries_metropolitan[] = {20, 20, 20, 20};
 static const AirportFTAbuildup _airport_fta_metropolitan[] = {
 	{  0, HANGAR, NOTHING_block, 1 },
 	{  1, 255, TAXIWAY_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TERM2, 0, 6 }, { 1, TERM3, 0, 6 }, { 1, 0, 0, 7 }, // for all else, go to 7
@@ -527,6 +531,7 @@
 static const TileIndexDiffC _airport_depots_international[] = { { 0, 3 }, { 6, 1 } };
 static const byte _airport_terminal_international[] = { 2, 3, 3 };
 static const byte _airport_helipad_international[] = { 1, 2 };
+static const byte _airport_entries_international[] = { 37, 37, 37, 37 };
 static const AirportFTAbuildup _airport_fta_international[] = {
 	{  0, HANGAR, NOTHING_block, 2 }, { 0, 255, TERM_GROUP1_block, 0 }, { 0, 255, TERM_GROUP2_ENTER1_block, 1 }, { 0, HELITAKEOFF, HELIPAD1_block, 2 }, { 0, 0, 0, 2 },
 	{  1, HANGAR, NOTHING_block, 3 }, { 1, 255, HANGAR2_AREA_block, 1 }, { 1, HELITAKEOFF, HELIPAD2_block, 3 }, { 1, 0, 0, 3 },
@@ -592,6 +597,7 @@
 static const TileIndexDiffC _airport_depots_intercontinental[] = { { 0, 5 }, { 8, 4 } };
 static const byte _airport_terminal_intercontinental[] = { 2, 4, 4 };
 static const byte _airport_helipad_intercontinental[] = { 1, 2 };
+static const byte _airport_entries_intercontinental[] = { 43, 43, 43, 43 };
 static const AirportFTAbuildup _airport_fta_intercontinental[] = {
 	{  0, HANGAR, NOTHING_block, 2 }, { 0, 255, HANGAR1_AREA_block | TERM_GROUP1_block, 0 }, { 0, 255, HANGAR1_AREA_block | TERM_GROUP1_block, 1 }, { 0, TAKEOFF, HANGAR1_AREA_block | TERM_GROUP1_block, 2 }, { 0, 0, 0, 2 },
 	{  1, HANGAR, NOTHING_block, 3 }, { 1, 255, HANGAR2_AREA_block, 1 }, { 1, 255, HANGAR2_AREA_block, 0 }, { 1, 0, 0, 3 },
@@ -684,6 +690,7 @@
 
 // heliports, oilrigs don't have depots
 static const byte _airport_helipad_heliport_oilrig[] = { 1, 1 };
+static const byte _airport_entries_heliport_oilrig[] = { 7, 7, 7, 7 };
 static const AirportFTAbuildup _airport_fta_heliport_oilrig[] = {
 	{ 0, HELIPAD1, HELIPAD1_block, 1 },
 	{ 1, HELITAKEOFF, NOTHING_block, 0 }, // takeoff
@@ -701,6 +708,7 @@
 // helidepots
 static const TileIndexDiffC _airport_depots_helidepot[] = { { 1, 0 } };
 static const byte _airport_helipad_helidepot[] = { 1, 1 };
+static const byte _airport_entries_helidepot[] = { 4, 4, 4, 4 };
 static const AirportFTAbuildup _airport_fta_helidepot[] = {
 	{  0, HANGAR, NOTHING_block, 1 },
 	{  1, 255, HANGAR2_AREA_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, HELIPAD1, HELIPAD1_block, 14 }, { 1, HELITAKEOFF, 0, 15 }, { 1, 0, 0, 0 },
@@ -730,6 +738,7 @@
 // helistation
 static const TileIndexDiffC _airport_depots_helistation[] = { { 0, 0 } };
 static const byte _airport_helipad_helistation[] = { 1, 3 };
+static const byte _airport_entries_helistation[] = { 25, 25, 25, 25 };
 static const AirportFTAbuildup _airport_fta_helistation[] = {
 	{  0, HANGAR, NOTHING_block, 8 },    { 0, HELIPAD1, 0, 1 }, { 0, HELIPAD2, 0, 1 }, { 0, HELIPAD3, 0, 1 }, { 0, HELITAKEOFF, 0, 1 }, { 0, 0, 0, 0 },
 	{  1, 255, HANGAR2_AREA_block, 0 },  { 1, HANGAR, 0, 0 }, { 1, HELITAKEOFF, 0, 3 }, { 1, 0, 0, 4 },
--- a/src/build_vehicle_gui.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/build_vehicle_gui.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -224,6 +224,15 @@
 	return _internal_sort_order ? -r : r;
 }
 
+static int CDECL TrainEngineNumberSorter(const void *a, const void *b)
+{
+	const EngineID va = *(const EngineID*)a;
+	const EngineID vb = *(const EngineID*)b;
+	int r = ListPositionOfEngine(va) - ListPositionOfEngine(vb);
+
+	return _internal_sort_order ? -r : r;
+}
+
 static int CDECL TrainEnginesThenWagonsSorter(const void *a, const void *b)
 {
 	EngineID va = *(const EngineID*)a;
@@ -290,7 +299,7 @@
 
 static EngList_SortTypeFunction * const _sorter[][9] = {{
 	/* Trains */
-	&EngineNumberSorter,
+	&TrainEngineNumberSorter,
 	&TrainEngineCostSorter,
 	&TrainEngineSpeedSorter,
 	&TrainEnginePowerSorter,
@@ -922,7 +931,7 @@
 			if (e->we.sizing.diff.x != 0) w->ResizeButtons(BUILD_VEHICLE_WIDGET_BUILD, BUILD_VEHICLE_WIDGET_RENAME);
 			if (e->we.sizing.diff.y == 0) break;
 
-			w->vscroll.cap += e->we.sizing.diff.y / GetVehicleListHeight(bv->vehicle_type);
+			w->vscroll.cap += e->we.sizing.diff.y / (int)GetVehicleListHeight(bv->vehicle_type);
 			w->widget[BUILD_VEHICLE_WIDGET_LIST].data = (w->vscroll.cap << 8) + 1;
 			break;
 	}
@@ -975,8 +984,8 @@
 			w->Resize(27, 0);
 			break;
 		case VEH_Aircraft:
-			AcceptPlanes acc_planes = (tile == 0) ? ALL : GetAirport(GetStationByTile(tile)->airport_type)->acc_planes;
-			bv->filter.acc_planes = acc_planes;
+			bv->filter.flags =
+				tile == 0 ? AirportFTAClass::ALL : GetStationByTile(tile)->Airport()->flags;
 			w->Resize(12, 0);
 			break;
 	}
--- a/src/command.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/command.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -45,6 +45,7 @@
 DEF_COMMAND(CmdRemoveTrainWaypoint);
 
 DEF_COMMAND(CmdBuildRoadStop);
+DEF_COMMAND(CmdRemoveRoadStop);
 
 DEF_COMMAND(CmdBuildLongRoad);
 DEF_COMMAND(CmdRemoveLongRoad);
@@ -188,7 +189,7 @@
 	{NULL,                                   0}, /*  19 */
 	{NULL,                                   0}, /*  20 */
 	{CmdBuildRoadStop,                       0}, /*  21 */
-	{NULL,                                   0}, /*  22 */
+	{CmdRemoveRoadStop,                      0}, /*  22 */
 	{CmdBuildLongRoad,                       0}, /*  23 */
 	{CmdRemoveLongRoad,                      0}, /*  24 */
 	{CmdBuildRoad,                           0}, /*  25 */
--- a/src/command.h	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/command.h	Sat Feb 17 11:12:50 2007 +0000
@@ -27,6 +27,7 @@
 	CMD_REMOVE_TRAIN_WAYPOINT        =  18,
 
 	CMD_BUILD_ROAD_STOP              =  21,
+	CMD_REMOVE_ROAD_STOP             =  22,
 	CMD_BUILD_LONG_ROAD              =  23,
 	CMD_REMOVE_LONG_ROAD             =  24,
 	CMD_BUILD_ROAD                   =  25,
--- a/src/driver.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/driver.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -15,6 +15,7 @@
 #include "music/os2_m.h"
 #include "music/win32_m.h"
 #include "music/qtmidi.h"
+#include "music/libtimidity.h"
 
 #include "sound/null_s.h"
 #include "sound/sdl_s.h"
@@ -58,7 +59,10 @@
 	M("qt",      "QuickTime MIDI Driver",   &_qtime_music_driver),
 #endif
 #ifdef UNIX
-#if !defined(__MORPHOS__) && !defined(__AMIGA__)
+#if defined(LIBTIMIDITY)
+	M("libtimidity", "LibTimidity MIDI Driver", &_libtimidity_music_driver),
+#endif /* LIBTIMIDITY */
+#if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(PSP)
 	M("extmidi", "External MIDI Driver",    &_extmidi_music_driver),
 #endif
 #endif
--- a/src/gfxinit.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/gfxinit.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -387,6 +387,9 @@
 	assert(load_index == SPR_AIRPORTX_BASE);
 	load_index += LoadGrfFile("airports.grf", load_index, i++);
 
+	assert(load_index == SPR_ROADSTOP_BASE);
+	load_index += LoadGrfFile("roadstops.grf", load_index, i++);
+
 	/* Initialize the unicode to sprite mapping table */
 	InitializeUnicodeGlyphMap();
 
--- a/src/lang/american.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/american.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -1041,6 +1041,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Nonuniform stations: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}New global pathfinding (NPF, overrides NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Weight multiplier for freight to simulate heavy trains: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Allow drive-through road stops on town owned roads: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Always allow small airports: {ORANGE}{STRING}
 
@@ -1584,6 +1585,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Tree-lined road
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Road vehicle depot
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Road/rail grade crossing
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Can't remove bus station...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Can't remove truck station...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Towns
--- a/src/lang/brazilian_portuguese.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/brazilian_portuguese.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -1043,6 +1043,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Estações não uniformes: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Novo busca de caminho global (NPF, sobrepõe NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Multiplicador de peso para trens simulando trens pesados: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Permite dirigir em pontos de parada nas estradas particulares de cidade: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Permitir sempre aeroportos pequenos: {ORANGE}{STRING}
 
@@ -1571,7 +1572,7 @@
 STR_1806_ROAD_DEPOT_ORIENTATION                                 :{WHITE}Orientação da Garagem
 STR_1807_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}Impossível construir garagem aqui...
 STR_1808_CAN_T_BUILD_BUS_STATION                                :{WHITE}Impossível construir estação de ônibus...
-STR_1809_CAN_T_BUILD_TRUCK_STATION                              :{WHITE}Impossível construir carga de caminhões...
+STR_1809_CAN_T_BUILD_TRUCK_STATION                              :{WHITE}Impossível construir parada de caminhão
 STR_180A_ROAD_CONSTRUCTION                                      :Construir rodovias
 STR_180B_BUILD_ROAD_SECTION                                     :{BLACK}Construir trecho rodoviário
 STR_180C_BUILD_ROAD_VEHICLE_DEPOT                               :{BLACK}Construir garagem (para construção e manutenção de automóveis)
@@ -1586,6 +1587,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Rodovia arborizada
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Garagem
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Passagem de nível
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Impossível remover estação de ônibus
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Impossível remover parada de caminhões
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Cidades
@@ -1750,10 +1753,10 @@
 STR_303F_NO_LONGER_ACCEPTS_OR                                   :{WHITE}{STATION} não aceita mais {STRING} ou {STRING}
 STR_3040_NOW_ACCEPTS                                            :{WHITE}{STATION} agora aceita {STRING}
 STR_3041_NOW_ACCEPTS_AND                                        :{WHITE}{STATION} agora aceita {STRING} e {STRING}
-STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Orientação do ponto de ônibus
-STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Orientação do local de carga
-STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Precisa demolir o ponto de ônibus primeiro
-STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Precisa demolir a área de carga primeiro
+STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Orientação do estação de ônibus
+STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Orientação da parada de caminhão
+STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Precisa demolir a estação de ônibus primeiro
+STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Precisa demolir a parada de caminhão primeiro
 STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} Estações
 STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
 STR_304A_NONE                                                   :{YELLOW}- Nenhuma -
@@ -1763,7 +1766,7 @@
 STR_304E_SELECT_RAILROAD_STATION                                :{BLACK}Selecionar a orientação da estação ferroviária
 STR_304F_SELECT_NUMBER_OF_PLATFORMS                             :{BLACK}Selecionar o número de linhas da estação ferroviária
 STR_3050_SELECT_LENGTH_OF_RAILROAD                              :{BLACK}Selecionar o tamanho da estação ferroviária
-STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Selecionar orientação do ponto de ônibus
+STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Selecionar orientação do estação de ônibus
 STR_3052_SELECT_TRUCK_LOADING_BAY                               :{BLACK}Selecionar orientação da área de carga
 STR_3053_CENTER_MAIN_VIEW_ON_STATION                            :{BLACK}Centralizar visualização no local estação
 STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}Exibir avaliações da estação
@@ -1777,7 +1780,7 @@
 STR_305F_AIRCRAFT_HANGAR                                        :Hangar
 STR_3060_AIRPORT                                                :Aeroporto
 STR_3061_TRUCK_LOADING_AREA                                     :Área de carga de caminhões
-STR_3062_BUS_STATION                                            :Ponto de ônibus
+STR_3062_BUS_STATION                                            :Estação de ônibus
 STR_3063_SHIP_DOCK                                              :Doca
 STR_3064_HIGHLIGHT_COVERAGE_AREA                                :{BLACK}Destacar área de cobertura da construção proposta
 STR_3065_DON_T_HIGHLIGHT_COVERAGE                               :{BLACK}Não destacar área de cobertura da construção proposto
--- a/src/lang/bulgarian.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/bulgarian.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -297,6 +297,7 @@
 STR_0141_LOAD_GAME                                              :{BLACK}Отвори игра
 STR_SINGLE_PLAYER                                               :{BLACK}Сам играч
 STR_MULTIPLAYER                                                 :{BLACK}Много играчи
+STR_SCENARIO_EDITOR                                             :{BLACK}Редактор сценарии
 
 STR_64                                                          :64
 STR_128                                                         :128
@@ -625,6 +626,8 @@
 STR_022A_GENERATE_RANDOM_LAND                                   :{BLACK}Генерирай случаен терен
 STR_022B_RESET_LANDSCAPE                                        :{BLACK}Изчисти терена
 STR_022C_RESET_LANDSCAPE                                        :{WHITE}Изчисти терена
+STR_RESET_LANDSCAPE_TOOLTIP                                     :{BLACK}Премахни всичко, принадлежащо на играча, от картата
+STR_RESET_LANDSCAPE_CONFIRMATION_TEXT                           :{WHITE}Сигурен ли си, че искаш да премахнеш всичко, принадлежашо на играча?
 STR_022E_LANDSCAPE_GENERATION                                   :{BLACK}Създаване на терен
 STR_022F_TOWN_GENERATION                                        :{BLACK}Създаване на град
 STR_0230_INDUSTRY_GENERATION                                    :{BLACK}Създаване на индустрия
@@ -729,6 +732,7 @@
 STR_0291_DELETE_THIS_TOWN_COMPLETELY                            :{BLACK}Премахни напълно града
 STR_0292_SAVE_SCENARIO                                          :Запис на сценарий
 STR_0293_LOAD_SCENARIO                                          :Зареждане на сценарий
+STR_LOAD_HEIGHTMAP                                              :Отвори височинна карта
 STR_0294_QUIT_EDITOR                                            :Изход от редактора
 STR_0295                                                        :
 STR_0296_QUIT                                                   :Изход
@@ -1039,6 +1043,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Нестандартни станции: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Нов глобален навигатор (NPF, отменя NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Теглови множител към товарите за симулация на тежки влакове: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Преминаване през спирки на градски пътища: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Малки летища са винаги разрешени: {ORANGE}{STRING}
 
@@ -1416,6 +1421,8 @@
 STR_NETWORK_ERR_NOSERVER                                        :{WHITE} Не може да открия мрежови игри
 STR_NETWORK_ERR_NOCONNECTION                                    :{WHITE} Сървърът не отговори на заявката
 STR_NETWORK_ERR_NEWGRF_MISMATCH                                 :{WHITE} Не може да се свърже поради различие в NewGRF
+STR_NETWORK_ERR_DESYNC                                          :{WHITE} Синхронизацията на мрежовата игра се провали
+STR_NETWORK_ERR_LOSTCONNECTION                                  :{WHITE} Връзката с мрежовата игра се загуби
 STR_NETWORK_ERR_SAVEGAMEERROR                                   :{WHITE} Не може да зареди играта
 STR_NETWORK_ERR_SERVER_START                                    :{WHITE} Сървъра не може да бъде стартиран
 STR_NETWORK_ERR_CLIENT_START                                    :{WHITE} Не може да се свърже
@@ -1580,6 +1587,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Асфалтов път с дървета
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Авто депо
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :ЖП прелез
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Не може да премахне автогарата...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Не може да премахне товарната гара...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Градове
@@ -1819,6 +1828,7 @@
 STR_4800_IN_THE_WAY                                             :{WHITE}{STRING} пречи
 STR_4801                                                        :{WHITE}{INDUSTRY}
 STR_4802_COAL_MINE                                              :Мина за въглища
+STR_4803_POWER_STATION                                          :
 STR_4804_SAWMILL                                                :Дъскорезница
 STR_4805_FOREST                                                 :Гора
 STR_4806_OIL_REFINERY                                           :Нефтена рафинерия
--- a/src/lang/catalan.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/catalan.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -1041,6 +1041,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Estacions no uniformes: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Nova cerca de rutes global (NPF, anul·la NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Multiplicador de pes per contenidor per simular trens pesats: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Permet situar parades en carreteres que són propietat del poble: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Permet sempre aeroports petits: {ORANGE}{STRING}
 
@@ -1584,6 +1585,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Carretera de tres carrils
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Cotxeres
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Pas a nivell
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}No es pot treure l'estació d'autobusos...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}No es pot treure l'estació de camions...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Poblacions
--- a/src/lang/czech.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/czech.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -1099,6 +1099,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Nejednolité stanice: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Nový globální algoritmus hledání cesty (NPF, nahradí NTP): {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_STOP_ON_TOWN_ROAD                            :{LTBLUE}Povolit průjezdné zastávky na silnicích vlastněných obcemi: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Malá letiště se budou moci stále stavět: {ORANGE}{STRING}
 
@@ -1642,6 +1643,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Silnice s alejí
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Garáž
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Železniční přejezd
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Nelze odstranit autobusovou zastávku...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Nelze odstranit nakládací rampu...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Města
@@ -1805,7 +1808,7 @@
 STR_3040_NOW_ACCEPTS                                            :{WHITE}{STATION} nyní přijímá {STRING}
 STR_3041_NOW_ACCEPTS_AND                                        :{WHITE}{STATION} nyní přijímá {STRING} a {STRING}
 STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Orientace autobusové zastávky.
-STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Orientace nákladové rampy.
+STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Orientace nákladové rampy
 STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Musíš nejprve zničit autobusovou zastávku
 STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Musíš nejprve zničit nákladovou rampu
 STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} stanic{P e e ""}
--- a/src/lang/dutch.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/dutch.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -382,6 +382,9 @@
 STR_SORT_BY_MAX_SPEED                                           :Maximale snelheid
 STR_SORT_BY_MODEL                                               :Model
 STR_SORT_BY_VALUE                                               :Waarde
+STR_SORT_BY_FACILITY                                            :Station type
+STR_SORT_BY_WAITING                                             :Waarde van wachtende vracht
+STR_SORT_BY_RATING_MAX                                          :Vracht waardering
 STR_ENGINE_SORT_ENGINE_ID                                       :Motor ID (klassieke soort)
 STR_ENGINE_SORT_COST                                            :Kosten
 STR_ENGINE_SORT_POWER                                           :Kracht
@@ -1038,6 +1041,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Vrij gevormde stations: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Nieuwe globale routeplanner (NPF, voorkeur over NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Gewichtsverhouding voor vracht om zware treinen te simuleren: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Laat toe dat doorrij wegstops worden geplaatst op door stad beheerde wegen: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Altijd kleine vliegvelden toestaan: {ORANGE}{STRING}
 
@@ -1581,6 +1585,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Weg met bomenrij
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Wegvoertuigdepot
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Gelijke weg/spoorweg kruising
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Kan busstation niet verwijderen...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Kan vrachtwagenstation niet verwijderen...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Steden
--- a/src/lang/english.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/english.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -1041,6 +1041,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Nonuniform stations: {ORANGE}{STRING1}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}New global pathfinding (NPF, overrides NTP): {ORANGE}{STRING1}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Weight multiplier for freight to simulate heavy trains: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Allow drive-through road stops on town owned roads: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Always allow small airports: {ORANGE}{STRING1}
 
@@ -1584,6 +1585,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Tree-lined road
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Road vehicle depot
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Road/rail level crossing
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Can't remove bus station...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Can't remove lorry station...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Towns
--- a/src/lang/esperanto.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/esperanto.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -1042,6 +1042,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Nekonformaj stacioj: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Nova ĝenerala vojtrovado (NPF, superas NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Pezpliigo pro ŝarĝo por imiti pezajn trajnojn: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Permesu trairaj bushaltejoj sur vojoj urboposedataj: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Ĉiam permesu malgrandajn flughavenojn: {ORANGE}{STRING}
 
@@ -1585,6 +1586,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Vojo kun arboj apude
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Vojveturila deponejo
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Kruciĝo inter vojo kaj relo
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Ne povas forigi bushaltejon...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Ne povas forigi ŝarĝstacion...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Urboj
--- a/src/lang/estonian.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/estonian.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -395,6 +395,7 @@
 STR_0141_LOAD_GAME                                              :{BLACK}Laadi mängu
 STR_SINGLE_PLAYER                                               :{BLACK}Üksikmängija
 STR_MULTIPLAYER                                                 :{BLACK}Võrgumäng
+STR_SCENARIO_EDITOR                                             :{BLACK}Stsenaariumi Muutmine
 
 STR_64                                                          :64
 STR_128                                                         :128
@@ -827,6 +828,7 @@
 STR_0291_DELETE_THIS_TOWN_COMPLETELY                            :{BLACK}Hävita see linn täielikult
 STR_0292_SAVE_SCENARIO                                          :Salvesta kaart
 STR_0293_LOAD_SCENARIO                                          :Laadi kaart
+STR_LOAD_HEIGHTMAP                                              :Lae kõrguskaart
 STR_0294_QUIT_EDITOR                                            :Lahku redaktorist
 STR_0295                                                        :
 STR_0296_QUIT                                                   :Välju
@@ -1680,6 +1682,7 @@
 STR_1816_TREE_LINED_ROAD                                        :Kolmerajaline tee
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Depoo
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Raudtee ülesõit
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Bussijaama ei saa eemaldada...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Linnad
--- a/src/lang/finnish.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/finnish.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -1041,6 +1041,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Epäyhtenäiset asemat: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Uusi globaali tienhakualgor. (NPF, korvaa NTP:n): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Kerroin rahdin painolle raskaiden junien simuilointiin: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Salli pysähdyspaikkojen läpiajo kylien omistamilla teillä: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Salli aina pienet lentokentät: {ORANGE}{STRING}
 
@@ -1417,6 +1418,7 @@
 STR_NETWORK_ERR_NOTAVAILABLE                                    :{WHITE} Verkkolaitteita ei löytynyt tai käännetty ilman ENABLE_NETWORK-valintaa.
 STR_NETWORK_ERR_NOSERVER                                        :{WHITE} Verkkopelejä ei löytynyt.
 STR_NETWORK_ERR_NOCONNECTION                                    :{WHITE} Palvelin ei vastannut pyyntöön.
+STR_NETWORK_ERR_NEWGRF_MISMATCH                                 :{WHITE} Yhteyden muodostaminen epäonnistui NewGRF-virheen vuoksi
 STR_NETWORK_ERR_DESYNC                                          :{WHITE} Verkkopelin tahdistus epäonnistui.
 STR_NETWORK_ERR_LOSTCONNECTION                                  :{WHITE} Verkkopeliyhteys katkesi.
 STR_NETWORK_ERR_SAVEGAMEERROR                                   :{WHITE} Palvelimen pelitallennetta ei voi ladata.
@@ -1438,6 +1440,7 @@
 STR_NETWORK_ERR_CLIENT_SAVEGAME                                 :karttaa ei voitu ladata
 STR_NETWORK_ERR_CLIENT_CONNECTION_LOST                          :yhteys katkesi
 STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR                           :protokollavirhe
+STR_NETWORK_ERR_CLIENT_NEWGRF_MISMATCH                          :NewGRF-virhe
 STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED                           :ei valtuutettu
 STR_NETWORK_ERR_CLIENT_NOT_EXPECTED                             :vastaanotettiin omituinen paketti
 STR_NETWORK_ERR_CLIENT_WRONG_REVISION                           :väärä revisio
@@ -1582,6 +1585,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Puilla reunustettu tie
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Huoltoasema
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Tasoristeys
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Linja-autoasemaa ei voida poistaa...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Kuorma-auto asemaa ei voida poistaa...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Kaupungit
@@ -2187,6 +2192,7 @@
 STR_707F_HAS_BEEN_TAKEN_OVER_BY                                 :{BLACK}{BIGFONT}Yhtiön {COMPANY} on ottanut haltuun {COMPANY}!
 STR_7080_PROTECTED                                              :{WHITE}Tällä yhtiöllä ei ole vielä osakkeita...
 
+STR_LIVERY_DEFAULT                                              :
 STR_LIVERY_STEAM                                                :Höyryveturi
 STR_LIVERY_DIESEL                                               :Dieselveturi
 STR_LIVERY_ELECTRIC                                             :Sähköveturi
--- a/src/lang/french.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/french.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -26,7 +26,7 @@
 STR_0012_OIL                                                    :Pétrole
 STR_0013_LIVESTOCK                                              :Bétail
 STR_0014_GOODS                                                  :Marchandise
-STR_0015_GRAIN                                                  :Grain
+STR_0015_GRAIN                                                  :Céréales
 STR_0016_WOOD                                                   :Bois
 STR_0017_IRON_ORE                                               :Fer
 STR_0018_STEEL                                                  :Acier
@@ -58,7 +58,7 @@
 STR_0032_OIL                                                    :Pétrole
 STR_0033_LIVESTOCK                                              :Bétail
 STR_0034_GOODS                                                  :Marchandise
-STR_0035_GRAIN                                                  :Grain
+STR_0035_GRAIN                                                  :Céréales
 STR_0036_WOOD                                                   :Bois
 STR_0037_IRON_ORE                                               :Fer
 STR_0038_STEEL                                                  :Acier
@@ -597,7 +597,7 @@
 STR_020D_CHANGES_OF_CARGO_ACCEPTANCE                            :{YELLOW}Changements d'acceptation de marchandises
 STR_020E_SUBSIDIES                                              :{YELLOW}Subventions
 STR_020F_GENERAL_INFORMATION                                    :{YELLOW}Information génerale
-STR_MESSAGES_ALL                                                :{YELLOW}Pour tout types de messages (aucun/sommaire/complet)
+STR_MESSAGES_ALL                                                :{YELLOW}Paramétrer tous les types de messages: Aucun / Sommaire / Complet
 STR_MESSAGE_SOUND                                               :{YELLOW}Émettre son pour les bulletins sommaires
 STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO                       :{WHITE}...trop loin de la destination précédente
 STR_0211_TOP_COMPANIES_WHO_REACHED                              :{BIGFONT}{BLACK}Meilleures compagnies, qui ont atteint {NUM}{}(Niveau {STRING})
@@ -1042,6 +1042,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Gares non uniformes: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Nouvelle recherche de chemin globale (NPF, écrase NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Multiplier le poid pour les trains fret (simule des trains lourds): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Autoriser les arrêts de bus sur les routes des municipalités: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Toujours permettre les petits aéroports: {ORANGE}{STRING}
 
@@ -1231,8 +1232,8 @@
 STR_FAST_FORWARD                                                :{BLACK}Avance rapide du jeu
 STR_MESSAGE_HISTORY                                             :{WHITE}Historique des Messages
 STR_MESSAGE_HISTORY_TIP                                         :{BLACK}Liste des messages récents
-STR_MESSAGES_DISABLE_ALL                                        :{BLACK}Tous en sommaire
-STR_MESSAGES_ENABLE_ALL                                         :{BLACK}Tous en complet
+STR_MESSAGES_DISABLE_ALL                                        :{BLACK}Tous sommaires
+STR_MESSAGES_ENABLE_ALL                                         :{BLACK}Tous complets
 
 STR_CONSTRUCT_COAL_MINE_TIP                                     :{BLACK}Construire une mine de charbon
 STR_CONSTRUCT_FOREST_TIP                                        :{BLACK}Planter une forêt
@@ -1585,6 +1586,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Route avec lignée d'arbustres
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Dépôt de véhicules routiers
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Route/rail Croisement à niveau
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Impossible de supprimer la station de bus...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Impossible de supprimer la station de camions...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Villes
@@ -1624,7 +1627,7 @@
 STR_2020_LOCAL_AUTHORITY                                        :{BLACK}Municipalité
 STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Afficher des informations sur la municipalité
 STR_2022_LOCAL_AUTHORITY                                        :{WHITE}Municipalité de {TOWN}
-STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Notation de la compagnie de transport:
+STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Qualité de service des compagnies:
 STR_2024                                                        :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
 STR_2025_SUBSIDIES                                              :{WHITE}Subventions
 STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Offres de subvention pour le transport de:
@@ -1727,9 +1730,9 @@
 
 STR_3030_RENAME_STATION_LOADING                                 :Renommer la gare
 STR_3031_CAN_T_RENAME_STATION                                   :{WHITE}Impossible de renommer la gare...
-STR_3032_RATINGS                                                :{BLACK}Notations
+STR_3032_RATINGS                                                :{BLACK}Qualité
 STR_3033_ACCEPTS                                                :{BLACK}Accepte
-STR_3034_LOCAL_RATING_OF_TRANSPORT                              :{BLACK}Notation du service de transport:
+STR_3034_LOCAL_RATING_OF_TRANSPORT                              :{BLACK}Qualité du service de transport:
 
 ############ range for rating starts
 STR_3035_APPALLING                                              :Épouvantable
@@ -2149,7 +2152,7 @@
 STR_705B_WE_ARE_LOOKING_FOR_A_TRANSPORT                         :{WHITE}Nous sommes à la recherche d'un acheteur pour notre compagnie{}{}Voulez vous acheter {COMPANY} pour {CURRENCY}?
 STR_705C_BANKRUPT                                               :{BLACK}{BIGFONT}Banqueroute!
 STR_705D_HAS_BEEN_CLOSED_DOWN_BY                                :{BLACK}{BIGFONT}{COMPANY} à été fermée par ses créanciers et tous ses actifs vendus!
-STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED                         :{BLACK}{BIGFONT}Fondation d'une nouvelle compagnie de transport!
+STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED                         :{BLACK}{BIGFONT}Nouvelle compagnie de transport!
 STR_705F_STARTS_CONSTRUCTION_NEAR                               :{BLACK}{BIGFONT}{COMPANY} commence à construire près de {TOWN}!
 STR_7060_CAN_T_BUY_COMPANY                                      :{WHITE}Impossible d'acheter la compagnie...
 STR_7061_CARGO_PAYMENT_RATES                                    :{WHITE}Valeur des marchandises
@@ -2487,7 +2490,7 @@
 
 ##id 0x8800
 STR_8800_TRAIN_DEPOT                                            :{WHITE}{TOWN} Dépôt ferroviaire
-STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Les habitants célèbrent . . .{}Arrivée du premier train à {STATION}!
+STR_8801_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Les habitants célèbrent{}l'arrivée du premier train à {STATION}!
 STR_8802_DETAILS                                                :{WHITE}{STRING} (Détails)
 STR_8803_TRAIN_IN_THE_WAY                                       :{WHITE}Train présent
 STR_8804                                                        :{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2753,7 +2756,7 @@
 
 STR_9831_NAME_SHIP                                              :{WHITE}Nommer navire
 STR_9832_CAN_T_NAME_SHIP                                        :{WHITE}Impossible de nommer le navire...
-STR_9833_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Les habitants célèbrent . . .{}Arrivée du premier navire à {STATION}!
+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_9836_RENAME                                                 :{BLACK}Renommer
@@ -2827,7 +2830,7 @@
 STR_A030_NAME_AIRCRAFT                                          :{WHITE}Nommer l'aéronef
 STR_A031_CAN_T_NAME_AIRCRAFT                                    :{WHITE}Impossible de nommer l'aéronef...
 STR_A032_NAME_AIRCRAFT                                          :{BLACK}Nommer l'aéronef
-STR_A033_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Les habitants célèbrent . . .{}Arrivée du premier aéronef à {STATION}!
+STR_A033_CITIZENS_CELEBRATE_FIRST                               :{BLACK}{BIGFONT}Les habitants célèbrent{}l'arrivée du premier aéronef à {STATION}!
 STR_A034_PLANE_CRASH_DIE_IN_FIREBALL                            :{BLACK}{BIGFONT}Accident d'avion!{}{COMMA} mort{P "" s} dans un crash à {STATION}
 STR_PLANE_CRASH_OUT_OF_FUEL                                     :{BLACK}{BIGFONT}Accident d'avion!{}L'aéronef n'avait plus de carburant, {COMMA} passager{P "" s} meurent dans le crash!
 STR_A036                                                        :{TINYFONT}{BLACK}{STATION}
@@ -3114,7 +3117,7 @@
 
 STR_SMALL_AIRPORTS                                              :{BLACK}Petits aéroports
 STR_LARGE_AIRPORTS                                              :{BLACK}Grands aéroports
-STR_HUB_AIRPORTS                                                :{BLACK}Aéroports Internodaux
+STR_HUB_AIRPORTS                                                :{BLACK}Aéroports Internationaux
 STR_HELIPORTS                                                   :{BLACK}Héliports
 
 ############ Tooltip measurment
--- a/src/lang/german.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/german.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -1042,6 +1042,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Ungleichmäßige Bahnhöfe: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Neue globale Wegfindung für alle Fahrzeuge: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Frachtgewicht erhöhen um schwere Züge zu simulieren: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Erlaube Bushaltestellen an städtischen Straßen: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Kleine Flughäfen immer erlauben: {ORANGE}{STRING}
 
@@ -1585,6 +1586,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Straße mit Bäumen
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Fahrzeugdepot
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Bahnübergang
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Kann Bushaltestelle nicht entfernen...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Kann LKW-Ladestelle nicht entfernen...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Städte
--- a/src/lang/hungarian.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/hungarian.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -1107,6 +1107,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Különböző vágánytípusok engedélyezése egy állomáson: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Új útvonalkereső (NPF, felülbírálja az NTP-t): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Tömegszorzó tehervonatoknak (szimulációs célból): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Áthajtható állomások engedélyezése városi utakra: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Mindig engedélyezze a kis repülőtereket: {ORANGE}{STRING}
 
@@ -1650,6 +1651,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Fával szegélyezett út
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Garázs
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Út/vasút kereszteződés
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Nem távolíthatod el ezt a buszmegállót...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Nem távolíthatod el ezt a teherautó megállót...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Városok
--- a/src/lang/icelandic.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/icelandic.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -155,6 +155,7 @@
 STR_00B1_GAME_OPTIONS                                           :{WHITE}Stillingar
 STR_00B2_MESSAGE                                                :{YELLOW}Skilaboð
 STR_00B3_MESSAGE_FROM                                           :{YELLOW}Skilaboð frá {STRING}
+STR_POPUP_CAUTION_CAPTION                                       :{WHITE}Varúð!
 STR_00B4_CAN_T_DO_THIS                                          :{WHITE}Get ekki gert þetta....
 STR_00B5_CAN_T_CLEAR_THIS_AREA                                  :{WHITE}Get ekki hreinsað þetta svæði....
 STR_00B6_ORIGINAL_COPYRIGHT                                     :{BLACK}Upphaflegur höfundarréttur {COPYRIGHT} 1995 Chris Sawyer, Öll réttindi áskilin
@@ -287,12 +288,15 @@
 STR_013E_CAPACITIES                                             :{BLACK}Burðargeta
 STR_013E_TOTAL_CARGO                                            :{BLACK}Heildarfarmur
 STR_013F_CAPACITY                                               :{BLACK}Burðargeta: {LTBLUE}{CARGO}
+STR_CAPACITY_MULT                                               :{BLACK}Burðargeta: {LTBLUE}{CARGO} (x{NUM})
 STR_013F_TOTAL_CAPACITY_TEXT                                    :{BLACK}Farmur alls (burðargeta) þessarar lestar:
 STR_013F_TOTAL_CAPACITY                                         :{LTBLUE}- {CARGO} ({SHORTCARGO})
+STR_TOTAL_CAPACITY_MULT                                         :{LTBLUE}- {CARGO} ({SHORTCARGO}) (x{NUM})
 STR_0140_NEW_GAME                                               :{BLACK}Nýr leikur
 STR_0141_LOAD_GAME                                              :{BLACK}Opna leik
 STR_SINGLE_PLAYER                                               :{BLACK}Einspilun
 STR_MULTIPLAYER                                                 :{BLACK}Fjölspilun
+STR_SCENARIO_EDITOR                                             :{BLACK}Landslagsgerð
 
 STR_64                                                          :64
 STR_128                                                         :128
@@ -382,10 +386,26 @@
 STR_SORT_BY_FACILITY                                            :Tegund stöðvar
 STR_SORT_BY_WAITING                                             :Verðgildi farms á stöð
 STR_SORT_BY_RATING_MAX                                          :Flutningur farms
+STR_ENGINE_SORT_ENGINE_ID                                       :Einkenni (hefðbundin röðun)
+STR_ENGINE_SORT_COST                                            :Kostnaður
+STR_ENGINE_SORT_POWER                                           :Afl
+STR_ENGINE_SORT_INTRO_DATE                                      :Árgerð
+STR_ENGINE_SORT_RUNNING_COST                                    :Rekstrarkostnaður
+STR_ENGINE_SORT_POWER_VS_RUNNING_COST                           :Afl/Rekstrarkostnaður
+STR_ENGINE_SORT_CARGO_CAPACITY                                  :Burðargeta
 STR_NO_WAITING_CARGO                                            :{BLACK}Enginn farmur bíður
 STR_SELECT_ALL_FACILITIES                                       :{BLACK}Velja allar gerðir
 STR_SELECT_ALL_TYPES                                            :{BLACK}Velja allar tegundir farms (einnig þær sem ekki bíða)
+STR_AVAILABLE_TRAINS                                            :{BLACK}Lestaúrval
+STR_AVAILABLE_ROAD_VEHICLES                                     :{BLACK}Bifreiðaúrval
+STR_AVAILABLE_SHIPS                                             :{BLACK}Skipaúrval
+STR_AVAILABLE_AIRCRAFT                                          :{BLACK}Flugvélaúrval
+STR_AVAILABLE_ENGINES_TIP                                       :{BLACK}Skoða lista yfir tegundir í boði af þessari gerð farartækja
+STR_MANAGE_LIST                                                 :{BLACK}Stýra lista
+STR_MANAGE_LIST_TIP                                             :{BLACK}Senda boð til allra farartækja á listanum
 STR_REPLACE_VEHICLES                                            :Skipta út vögnum
+STR_SEND_TRAIN_TO_DEPOT                                         :Senda í skýli
+STR_SEND_ROAD_VEHICLE_TO_DEPOT                                  :Senda í skýli
 STR_SEND_SHIP_TO_DEPOT                                          :Senda í slipp
 STR_SEND_AIRCRAFT_TO_HANGAR                                     :Senda í skýli
 STR_SEND_FOR_SERVICING                                          :Senda í skoðun
@@ -825,7 +845,7 @@
 STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...aðeins hægt að byggja í bæjum
 STR_030E_SELECT_TEMPERATE_LANDSCAPE                             :{BLACK}Temprað landslag
 STR_030F_SELECT_SUB_ARCTIC_LANDSCAPE                            :{BLACK}Heimskautalandslag
-STR_0310_SELECT_SUB_TROPICAL_LANDSCAPE                          :{BLACK}Velja eyðimerkurlandslag
+STR_0310_SELECT_SUB_TROPICAL_LANDSCAPE                          :{BLACK}Eyðimerkurlandslag
 STR_0311_SELECT_TOYLAND_LANDSCAPE                               :{BLACK}Leikfangalandslag
 STR_0312_FUND_CONSTRUCTION_OF_NEW                               :{BLACK}Fjármagna byggingu nýs iðnaðars
 
@@ -994,15 +1014,15 @@
 
 STR_CONFIG_PATCHES_OFF                                          :Nei
 STR_CONFIG_PATCHES_ON                                           :Já
-STR_CONFIG_PATCHES_VEHICLESPEED                                 :{LTBLUE}Sýna hraða farartækis í upplýsingaslá: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_VEHICLESPEED                                 :{LTBLUE}Sýna hraða farartækis á upplýsingaslá: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_BUILDONSLOPES                                :{LTBLUE}Leyfilegt að byggja í halla og á strönd: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_CATCHMENT                                    :{LTBLUE}Raunverulegri stærð svæðis sem stöðvar ná yfir: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_EXTRADYNAMITE                                :{LTBLUE}Leyfa meiri eyðingu vega, brúa, gangna o.s.frv. í eigu bæjar: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAMMOTHTRAINS                                :{LTBLUE}Leyfa byggingu mjög langra lesta: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAMMOTHTRAINS                                :{LTBLUE}Leyfa mjög langar lestir: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_REALISTICACCEL                               :{LTBLUE}Raunveruleg hröðun lesta: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FORBID_90_DEG                                :{LTBLUE}Banna lestum og skipum að taka 90°  beygjur: {ORANGE}{STRING} {LTBLUE} (þarfnast NPF)
 STR_CONFIG_PATCHES_JOINSTATIONS                                 :{LTBLUE}Sameina lestarstöðvar sem byggðar eru samsíða: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_FULLLOADANY                                  :{LTBLUE}Yfirgefa stöð þegar einn farmur er fullfermdur, ef valið er 'fullferma': {ORANGE}{STRING}
+STR_CONFIG_PATCHES_FULLLOADANY                                  :{LTBLUE}'Fullferma' á við um frysta farm sem fullfermist: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_IMPROVEDLOAD                                 :{LTBLUE}Nota endurbættan algóriþma við hleðslu: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_GRADUAL_LOADING                              :{LTBLUE}Ferma farartæki smám saman: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_INFLATION                                    :{LTBLUE}Verðbólga: {ORANGE}{STRING}
@@ -1012,29 +1032,30 @@
 STR_CONFIG_PATCHES_BUILDXTRAIND                                 :{LTBLUE}Leyfa byggingu hráefnaframleiðsluiðnaðar: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MULTIPINDTOWN                                :{LTBLUE}Leyfa marga svipaða iðnaði í sama bæ: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SAMEINDCLOSE                                 :{LTBLUE}Má byggja iðnaði af sömu gerð nálægt hvor öðrum: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Sýna alltaf fulla dagsetningu í upplýsingaslá: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LONGDATE                                     :{LTBLUE}Sýna alltaf fulla dagsetningu á upplýsingaslá: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SIGNALSIDE                                   :{LTBLUE}Sýna umferðarljós akstursmegin: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SHOWFINANCES                                 :{LTBLUE}Sýna fjármálaglugga í lok árs: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_NONSTOP                                  :{LTBLUE}TTDPatch samhæfð meðhöndlun stansleysu: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ROADVEH_QUEUE                                :{LTBLUE}Bifreiðir fara í biðraðir (með stórvægilegum aukaverkunum): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ROADVEH_QUEUE                                :{LTBLUE}Bifreiðir bíða í röð (með skömmtunaráhrifum): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_AUTOSCROLL                                   :{LTBLUE}Færa sjónarhorn þegar músin nálgast brún gluggans: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_BRIBE                                        :{LTBLUE}Leyfilegt að múta bæjaryfirvöldum: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Órétthyrndar lestarstöðvar leyfðar: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Nýtt heildar-leiðarkerfi (NPF, yfirtekur NTP): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Nýtt alhliða leiðsögukerfi (NPF, yfirtekur NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Margfalda þyngd farms til að líkja eftir þyngri lestum: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Leyfa strætóstöðvar á gangstéttum bæja: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Alltaf leyfa litla flugvelli: {ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_WARN_LOST_TRAIN                              :{LTBLUE}Láta vita ef lest týnist: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ORDER_REVIEW                                 :{LTBLUE}Endurskoða skipanir farartækis: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_WARN_LOST_TRAIN                              :{LTBLUE}Gera viðvart ef lest týnist: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ORDER_REVIEW                                 :{LTBLUE}Fara yfir áætlanir farartækja: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ORDER_REVIEW_OFF                             :nei
-STR_CONFIG_PATCHES_ORDER_REVIEW_EXDEPOT                         :já, en útiloka kyrrstæð farartæki
+STR_CONFIG_PATCHES_ORDER_REVIEW_EXDEPOT                         :allra nema kyrrstæðra farartækja
 STR_CONFIG_PATCHES_ORDER_REVIEW_ON                              :allra farartækja
-STR_CONFIG_PATCHES_WARN_INCOME_LESS                             :{LTBLUE}Gera viðvart ef lest skilar tapi: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_WARN_INCOME_LESS                             :{LTBLUE}Gera viðvart ef lest skilar ekki hagnaði: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES                        :{LTBLUE}Farartæki úreldast aldrei: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AUTORENEW_VEHICLE                            :{LTBLUE}Uppfæra faratæki sjálfvirkt þegar það eldist
-STR_CONFIG_PATCHES_AUTORENEW_MONTHS                             :{LTBLUE}Uppfæra farartæki sjálfkrafa {ORANGE}{STRING}{LTBLUE} mánuðum fyrir/eftir hámarksaldur þess
-STR_CONFIG_PATCHES_AUTORENEW_MONEY                              :{LTBLUE}Lægsta upphæð peninga sem þörf er á fyrir sjálfvirka uppfæringu: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTORENEW_VEHICLE                            :{LTBLUE}Uppfæra faratæki sjálfvirkt þegar þau eldast
+STR_CONFIG_PATCHES_AUTORENEW_MONTHS                             :{LTBLUE}Sjálfvirk uppfæring {ORANGE}{STRING}{LTBLUE} {P mánuði mánuðum} fyrir/eftir hámarksaldur
+STR_CONFIG_PATCHES_AUTORENEW_MONEY                              :{LTBLUE}Lágmarks bankainnistæða fyrir sjálfvirka uppfæringu: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ERRMSG_DURATION                              :{LTBLUE}Birtingartími villuskilaboða: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_POPULATION_IN_LABEL                          :{LTBLUE}Sýna íbúafjölda í bæjarmerki: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_INVISIBLE_TREES                              :{LTBLUE}Ósýnileg tré (með gagnsæjum byggingum): {ORANGE}{STRING}
@@ -1051,8 +1072,8 @@
 STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_ROUGH              :Mjög hrjúft
 STR_CONFIG_PATCHES_TREE_PLACER                                  :{LTBLUE}Staðsetning trjáa: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TREE_PLACER_NONE                             :Hvergi
-STR_CONFIG_PATCHES_TREE_PLACER_ORIGINAL                         :Venjuleg
-STR_CONFIG_PATCHES_TREE_PLACER_IMPROVED                         :Endurbætt
+STR_CONFIG_PATCHES_TREE_PLACER_ORIGINAL                         :Venjulega
+STR_CONFIG_PATCHES_TREE_PLACER_IMPROVED                         :Nýstárlega
 STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION                           :{LTBLUE}Snúningur hæðakorts: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE         :Rangsælis
 STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_CLOCKWISE                 :Réttsælis
@@ -1060,14 +1081,14 @@
 
 STR_CONFIG_PATCHES_STATION_SPREAD                               :{LTBLUE}Dreyfing stöðva mest: {ORANGE}{STRING} {RED}Ath.: Há stilling hægir á leiknum
 STR_CONFIG_PATCHES_SERVICEATHELIPAD                             :{LTBLUE}Skoða þyrlur sjálfvirkt á þyrlupalli: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Opna landmótunarglugga samhliða lestar-, vegar-, hafnar- og flugvallarframkvæmdarglugga: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR                       :{LTBLUE}Opna landmótunarglugga samhliða öðrum framkvæmdum: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_REVERSE_SCROLLING                            :{LTBLUE}Færa sjónarhorn í öfuga átt miðað við mús: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MEASURE_TOOLTIP                              :{LTBLUE}Sýna mælstiku við byggingu: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES                                     :{LTBLUE}Sýna auka litastillingar: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_LIVERIES_NONE                                :Aldrei
 STR_CONFIG_PATCHES_LIVERIES_OWN                                 :Eigin fyrirtækis
 STR_CONFIG_PATCHES_LIVERIES_ALL                                 :Allra fyrirtækja
-STR_CONFIG_PATCHES_PREFER_TEAMCHAT                              :{LTBLUE}Not liðsspjall með <ENTER>: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PREFER_TEAMCHAT                              :{LTBLUE}Nota liðsspjall með <ENTER>: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_MAX_TRAINS                                   :{LTBLUE}Lestir á leikmann mest: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_MAX_ROADVEH                                  :{LTBLUE}Bifreiðir á leikmann mest: {ORANGE}{STRING}
@@ -1082,19 +1103,19 @@
 STR_CONFIG_PATCHES_AINEW_ACTIVE                                 :{LTBLUE}Virkja nýja gervigreind (alfa): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER                            :{LTBLUE}Leyfa gervigreind í fjölspilunarleik (á tilraunastigi): {ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_SERVINT_TRAINS                               :{LTBLUE}Bið milli skoðana á lestum: {ORANGE}{STRING} dagar/%
-STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED                      :{LTBLUE}Bið milli skoðana á lestum: {ORANGE}óvirkt
-STR_CONFIG_PATCHES_SERVINT_ROADVEH                              :{LTBLUE}Bið milli skoðana á bílum: {ORANGE}{STRING} dagar/%
-STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED                     :{LTBLUE}Bið milli skoðana á bílum: {ORANGE}óvrikt
-STR_CONFIG_PATCHES_SERVINT_AIRCRAFT                             :{LTBLUE}Bið milli skoðana á flugvélum: {ORANGE}{STRING} dagar/%
-STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED                    :{LTBLUE}Bið milli skoðana á flugvélum: {ORANGE}óvrikt
-STR_CONFIG_PATCHES_SERVINT_SHIPS                                :{LTBLUE}Bið milli skoðana á skipum: {ORANGE}{STRING} dagar/%
-STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED                       :{LTBLUE}Bið milli skoðana á skipum: {ORANGE}óvirkt
-STR_CONFIG_PATCHES_NOSERVICE                                    :{LTBLUE}Hætta skoðunum þegar bilanir eru afvirktar: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SERVINT_TRAINS                               :{LTBLUE}Tími milli viðhalds lesta: {ORANGE}{STRING} dagar/%
+STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED                      :{LTBLUE}Tími milli viðhalds lesta: {ORANGE}óvirkt
+STR_CONFIG_PATCHES_SERVINT_ROADVEH                              :{LTBLUE}Tími milli viðhalds bifreiða: {ORANGE}{STRING} dagar/%
+STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED                     :{LTBLUE}Tími milli viðhalds bifreiða: {ORANGE}óvrikt
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT                             :{LTBLUE}Tími milli viðhalds flugvéla: {ORANGE}{STRING} dagar/%
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED                    :{LTBLUE}Tími milli viðhalds flugvéla: {ORANGE}óvrikt
+STR_CONFIG_PATCHES_SERVINT_SHIPS                                :{LTBLUE}Tími milli viðhalds skipa: {ORANGE}{STRING} dagar/%
+STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED                       :{LTBLUE}Tími milli viðhalds skipa: {ORANGE}óvirkt
+STR_CONFIG_PATCHES_NOSERVICE                                    :{LTBLUE}Leggja niður viðhald þegar bilanir eru stilltar af: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_WAGONSPEEDLIMITS                             :{LTBLUE}Leyfa hraðatakmarkanir vagna: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_DISABLE_ELRAILS                              :{LTBLUE}Ekki nota rafknúnar lestir: {ORANGE}{STRING}
 
-STR_CONFIG_PATCHES_COLORED_NEWS_YEAR                            :{LTBLUE}Fréttir birtast í lit: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_COLORED_NEWS_YEAR                            :{LTBLUE}Fréttir byrja að birtast í lit árið: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_STARTING_YEAR                                :{LTBLUE}Upphafsár: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ENDING_YEAR                                  :{LTBLUE}Enda leik árið: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_SMOOTH_ECONOMY                               :{LTBLUE}Virkja jafnan efnahag (fleiri og minni breytingar)
@@ -1103,7 +1124,7 @@
 STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE                  :{LTBLUE}Nota skilti í stað ljósa fyrir: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS                                  :{LTBLUE}Staðsetning tækjasláar: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT                             :Vinstri
-STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Miðjað
+STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER                           :Miðja
 STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT                            :Hægri
 STR_CONFIG_PATCHES_SNAP_RADIUS                                  :{LTBLUE}Gluggar smella saman við: {ORANGE}{STRING} punkta radíus
 STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED                         :{LTBLUE}Gluggar smella: {ORANGE}ekki saman
@@ -1199,7 +1220,7 @@
 
 STR_CANT_REMOVE_PART_OF_STATION                                 :{WHITE}Get ekki fjarlægt hluta af stöð...
 STR_CANT_CONVERT_RAIL                                           :{WHITE}Get ekki breytt lestarteini...
-STR_CONVERT_RAIL_TIP                                            :{BLACK}Breyta/Uppfæra gerð af lestarteini
+STR_CONVERT_RAIL_TIP                                            :{BLACK}Breyta/uppfæra gerð lestarteins
 
 STR_DRAG_WHOLE_TRAIN_TO_SELL_TIP                                :{BLACK}Dragðu eimreið hingað til að selja alla lestina
 
@@ -1246,7 +1267,7 @@
 STR_RAIL_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Veldu hvernig farm lestin á að flytja
 STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED                             :{BLACK}Breyta lest svo hún flytji valinn farm
 STR_RAIL_CAN_T_REFIT_VEHICLE                                    :{WHITE}Get ekki breytt lest...
-STR_CONFIG_PATCHES_SERVINT_ISPERCENT                            :{LTBLUE}Bil milli skoðana er í hundraðshlutum: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SERVINT_ISPERCENT                            :{LTBLUE}Tími milli viðhalds farartækja sýndur í hundraðshlutum: {ORANGE}{STRING}
 STR_CONFIG_GAME_PRODUCTION                                      :{WHITE}Breyta framleiðslu
 
 TEMP_AI_IN_PROGRESS                                             :{WHITE}Velkomin/n í nýju gervigreindina, verk í vinnslu. Þú mátt búast við vandamálum, og þegar þau koma upp skaltu taktu skjámynd þegar og senda á spjallborðið. Njóttu!
@@ -1565,6 +1586,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Trjáskreyttur vegur
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Bifreiðaskýli
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Vega/lestar gatnamót
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Get ekki fjarlægt strætóstoppistöð...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Get ekki flutt vörubílastöð...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Bæir
@@ -1997,9 +2020,9 @@
 ############ range for difficulty settings ends
 
 STR_26816_NONE                                                  :Engin
-STR_6816_LOW                                                    :Lág
-STR_6817_NORMAL                                                 :Venjuleg
-STR_6818_HIGH                                                   :Há
+STR_6816_LOW                                                    :Fáir
+STR_6817_NORMAL                                                 :Miðlungs
+STR_6818_HIGH                                                   :Margir
 STR_6819                                                        :{BLACK}{SMALLLEFTARROW}
 STR_681A                                                        :{BLACK}{SMALLRIGHTARROW}
 STR_681B_VERY_SLOW                                              :Mjög hægt
@@ -2007,10 +2030,10 @@
 STR_681D_MEDIUM                                                 :Miðlungs
 STR_681E_FAST                                                   :Hratt
 STR_681F_VERY_FAST                                              :Mjög hratt
-STR_VERY_LOW                                                    :Mjög lágt
-STR_6820_LOW                                                    :Lágt
+STR_VERY_LOW                                                    :Mjög lítið
+STR_6820_LOW                                                    :Lítið
 STR_6821_MEDIUM                                                 :Miðlungs
-STR_6822_HIGH                                                   :Hátt
+STR_6822_HIGH                                                   :Mikið
 STR_6823_NONE                                                   :Ekkert
 STR_6824_REDUCED                                                :Minnkað
 STR_6825_NORMAL                                                 :Venjulegt
@@ -2018,8 +2041,8 @@
 STR_6827_X2                                                     :x2
 STR_6828_X3                                                     :x3
 STR_6829_X4                                                     :x4
-STR_682A_VERY_FLAT                                              :Mjög flatt
-STR_682B_FLAT                                                   :Flatt
+STR_682A_VERY_FLAT                                              :Mjög slétt
+STR_682B_FLAT                                                   :Slétt
 STR_682C_HILLY                                                  :Hæðótt
 STR_682D_MOUNTAINOUS                                            :Fjallótt
 STR_682E_STEADY                                                 :Stöðugur
@@ -2176,6 +2199,8 @@
 STR_LIVERY_ELECTRIC                                             :Rafmagnsvagnar
 STR_LIVERY_MONORAIL                                             :Einteingungsvagnar
 STR_LIVERY_MAGLEV                                               :Segulsvifvagnar
+STR_LIVERY_DMU                                                  :Fjölvagna dísellest
+STR_LIVERY_EMU                                                  :Fjölvagna rafmagnslest
 STR_LIVERY_PASSENGER_WAGON_STEAM                                :Farþegavagn (Gufu)
 STR_LIVERY_PASSENGER_WAGON_DIESEL                               :Farþegavagn (Dísel)
 STR_LIVERY_PASSENGER_WAGON_ELECTRIC                             :Farþegavagn (Rafmagns)
@@ -2489,12 +2514,15 @@
 
 STR_HEADING_FOR_TRAIN_DEPOT                                     :{ORANGE}Á leið í {TOWN} Lestar Byggingu
 STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{ORANGE}Á leið í {TOWN} Lestar Byggingu, {VELOCITY}
+STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Viðhald í {TOWN} lestaskýli
+STR_HEADING_FOR_TRAIN_DEPOT_SERVICE_VEL                         :{LTBLUE}Viðhald í {TOWN} lestaskýli, {VELOCITY}
 
 STR_INVALID_ORDER                                               :{RED} (Ógild Skipun)
 
 STR_UNKNOWN_DESTINATION                                         :óþekktur áfangastaður
 STR_8812_EMPTY                                                  :{LTBLUE}Tómt
 STR_8813_FROM                                                   :{LTBLUE}{CARGO} frá {STATION}
+STR_FROM_MULT                                                   :{LTBLUE}{CARGO} frá {STATION} (x{NUM})
 STR_8814_TRAIN_IS_WAITING_IN_DEPOT                              :{WHITE}Lest {COMMA} bíður í skýli
 STR_8815_NEW_VEHICLES                                           :{BLACK}Ný faratæki
 STR_8816                                                        :{BLACK}-
@@ -2506,6 +2534,7 @@
 STR_NEW_ELRAIL_VEHICLES                                         :{WHITE}Nýjir rafdrifnir lestarvagnar
 STR_881D_NEW_MONORAIL_VEHICLES                                  :{WHITE}Nýir einteingungsvagnar
 STR_881E_NEW_MAGLEV_VEHICLES                                    :{WHITE}Nýir segullestarvagnar
+STR_ALL_AVAIL_RAIL_VEHICLES                                     :{WHITE}Járnbrautarlestir
 
 STR_881F_BUILD_VEHICLE                                          :{BLACK}Smíða vagn
 STR_CLONE_ROAD_VEHICLE                                          :{BLACK}Afrita bifreið
@@ -2521,6 +2550,9 @@
 STR_8826_GO_TO                                                  :{BLACK}Fara að
 STR_8827_FULL_LOAD                                              :{BLACK}Fullferma
 STR_8828_UNLOAD                                                 :{BLACK} Afferma
+STR_REFIT                                                       :{BLACK}Breyta
+STR_REFIT_TIP                                                   :{BLACK}Veldu farm til að breyta í. CTRL smelltu til að fjarlægja breytiskipun
+STR_REFIT_ORDER                                                 :(Breyta í {STRING})
 STR_8829_ORDERS                                                 :{WHITE}{VEHICLE} (Skipanir)
 STR_882A_END_OF_ORDERS                                          :{SETX 10}- - Endi skipana - -
 STR_FULLLOAD_OR_SERVICE                                         :{SKIP}{SKIP}{STRING}
@@ -2581,6 +2613,7 @@
 STR_885C_BROKEN_DOWN                                            :{RED}Bilaður
 STR_885D_AGE_RUNNING_COST_YR                                    :{BLACK}Aldur: {LTBLUE}{STRING}{BLACK}   Rekstrarkostnaður: {LTBLUE}{CURRENCY} á ári
 STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED                         :{BLACK}Þyngd: {LTBLUE}{WEIGHT_S}  {BLACK}Afl: {LTBLUE}{POWER}{BLACK} Hámarkshraði: {LTBLUE}{VELOCITY}
+STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE                  :{BLACK}Þyngd: {LTBLUE}{WEIGHT_S} {BLACK}Afl: {LTBLUE}{POWER}{BLACK} Hámarkshraði: {LTBLUE}{VELOCITY} {BLACK}Hámarks togkraftur: {LTBLUE}{FORCE}
 STR_885F_PROFIT_THIS_YEAR_LAST_YEAR                             :{BLACK}Hagnaður á þessu ári: {LTBLUE}{CURRENCY}  (síðasta ár: {CURRENCY})
 STR_8860_RELIABILITY_BREAKDOWNS                                 :{BLACK}Áreiðanleiki: {LTBLUE}{COMMA}%  {BLACK}Bilanir frá síðustu viðgerð: {LTBLUE}{COMMA}
 STR_8861_STOPPED                                                :{RED}Stöðvaður
@@ -2600,6 +2633,8 @@
 STR_TRAIN_STOPPING                                              :{RED}Stöðva
 STR_TRAIN_STOPPING_VEL                                          :{RED}Stöðva, {VELOCITY}
 STR_INCOMPATIBLE_RAIL_TYPES                                     :Ósamstæðir lestarteinar
+STR_TRAIN_NO_POWER                                              :{RED}Ekkert afl
+STR_TRAIN_START_NO_CATENARY                                     :Á þetta lestarspor vantar rafmagnsvíra, lestin kemst ekki af stað
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Bíll fyrir
@@ -2877,9 +2912,23 @@
 STR_NEWGRF_MOVEDOWN_TIP                                         :{BLACK}Færa valda NewGRF skrá neðar á listann
 STR_NEWGRF_FILE_TIP                                             :{BLACK}Listi yfir NewGRF skrár sem eru til staðar. Smelltu á skrá til að eiga við eiginleika hennar.
 STR_NEWGRF_PARAMETER                                            :{BLACK}Eiginleikar: {SILVER}{STRING}
+STR_NEWGRF_PARAMETER_QUERY                                      :{BLACK}Sláðu inn NewGRF breytur
+STR_NEWGRF_NO_INFO                                              :{BLACK}Engar upplýsingar tiltækar
 
+STR_NEWGRF_ADD_CAPTION                                          :{WHITE}Tiltækar NewGRF skrár
+STR_NEWGRF_ADD_FILE                                             :{BLACK}Bæta á lista
+STR_NEWGRF_ADD_FILE_TIP                                         :{BLACK}Bæta valinni NewGRF skrá í stillingarnar
+STR_NEWGRF_RESCAN_FILES                                         :{BLACK}Uppfæra lista
+STR_NEWGRF_RESCAN_FILES_TIP                                     :{BLACK}Uppfæra listann yfir tiltækar NewGRF skrár
+STR_NEWGRF_DUPLICATE_GRFID                                      :{WHITE}Get ekki bætt skrá við: tvö eins GRF einkenni
 
+STR_NEWGRF_NOT_FOUND                                            :{RED}Viðeigandi skrá finnst ekki
+STR_NEWGRF_DISABLED                                             :{RED}Óvirkt
+STR_NEWGRF_COMPATIBLE_LOADED                                    :{ORANGE}Viðeigandi skrá finnst ekki (samsvarandi GRF hlaðið)
 
+STR_NEWGRF_COMPATIBLE_LOAD_WARNING                              :{WHITE}Samsvarandi GRF hlaðið í staðin týndrar skrár
+STR_NEWGRF_DISABLED_WARNING                                     :{WHITE}Týndar GRF skrár hafa verið gerðar óvirkar
+STR_NEWGRF_NOT_FOUND_WARNING                                    :{WHITE}Vantar GRF skrár til að hægt sé að hlaða leik
 
 STR_CURRENCY_WINDOW                                             :{WHITE}Sérvalinn gjaldeyrir
 STR_CURRENCY_EXCHANGE_RATE                                      :{LTBLUE}Gengi: {ORANGE}{CURRENCY} = £ {COMMA}
@@ -2907,12 +2956,31 @@
 STR_SCHEDULED_AIRCRAFT_TIP                                      :{BLACK}Sýna allar flugvélar sem hafa þessa stöð á áætlun
 STR_SCHEDULED_SHIPS_TIP                                         :{BLACK}Sýna öll skip sem hafa þessa stöð á áætlun
 
+STR_VEH_WITH_SHARED_ORDERS_LIST                                 :{WHITE}Samnýttar skipanir {COMMA} {P farartækis farartækja}
+STR_VEH_WITH_SHARED_ORDERS_LIST_TIP                             :{BLACK}Sýna öll farartæki sem deila þessari áætlun
 
 ### depot strings
-
+STR_DEPOT_SELL_CONFIRMATION_TEXT                                :{YELLOW}Þú ert í þann mund að selja öll farartækin. Viltu halda áfram?
 
+STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP                             :{BLACK}Selja allar lestir í skýli
+STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP                           :{BLACK}Selja allar bifreiðar í skýli
+STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP                              :{BLACK}Selja öll skip í slippi
+STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP                          :{BLACK}Selja allar flugvélar í skýli
 
+STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TIP                          :{BLACK}Fá lista yfir allar lestir sem hafa þetta skýli á áætlun
+STR_DEPOT_VEHICLE_ORDER_LIST_ROADVEH_TIP                        :{BLACK}Fá lista yfir allar bifreiðir sem hafa þetta skýli á áætlun
+STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TIP                           :{BLACK}Fá lista yfir öll skip sem hafa þennan slipp á áætlun
+STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TIP                       :{BLACK}Fá lista yfir allar flugvélar sem hafa flugskýli á þessum velli á áætlun
 
+STR_DEPOT_AUTOREPLACE_TRAIN_TIP                                 :{BLACK}Skipta öllum lestum í skýlinu sjálfvirkt út
+STR_DEPOT_AUTOREPLACE_ROADVEH_TIP                               :{BLACK}Skipta öllum bifreiðum í skýlinu sjálfvirkt út
+STR_DEPOT_AUTOREPLACE_SHIP_TIP                                  :{BLACK}Skipta öllum skipum í slippnum sjálfvirkt út
+STR_DEPOT_AUTOREPLACE_AIRCRAFT_TIP                              :{BLACK}Skipta öllum flugvélum í skýlinu sjálfvirkt út
+
+STR_VEHICLE_LIST_TRAIN_DEPOT                                    :{BLACK}{STRING} - {COMMA} Lest{P "" ir}
+STR_VEHICLE_LIST_ROADVEH_DEPOT                                  :{BLACK}{STRING} - {COMMA} Bifreið{P "" ar}
+STR_VEHICLE_LIST_SHIP_DEPOT                                     :{BLACK}{STRING} - {COMMA} Skip
+STR_VEHICLE_LIST_AIRCRAFT_DEPOT                                 :{BLACK}{STRING} - {COMMA} Flugvél{P "" ar}
 
 STR_REPLACE_VEHICLES_WHITE                                      :{WHITE}Endurnýja {STRING}
 STR_REPLACE_VEHICLES_START                                      :{BLACK}Hefja skipti
@@ -2935,12 +3003,23 @@
 STR_ENGINES                                                     :Dráttarvagnar
 STR_WAGONS                                                      :Vagnar
 
+STR_MASS_STOP_DEPOT_TRAIN_TIP                                   :{BLACK}Smelltu til að stöðva allar lestir í skýlinu
+STR_MASS_STOP_DEPOT_ROADVEH_TIP                                 :{BLACK}Smelltu til að stöðva allar bifreiðar í skýlinu
+STR_MASS_STOP_DEPOT_SHIP_TIP                                    :{BLACK}Smelltu til að stöðva öll skip í slippnum
+STR_MASS_STOP_HANGAR_TIP                                        :{BLACK}Smelltu til að stöðva allar flugvélar í flugskýlinu
 
+STR_MASS_START_DEPOT_TRAIN_TIP                                  :{BLACK}Smelltu til að ræsa allar lestir í skýlinu
+STR_MASS_START_DEPOT_ROADVEH_TIP                                :{BLACK}Smelltu til að ræsa allar bifreiðar í skýlinu
+STR_MASS_START_DEPOT_SHIP_TIP                                   :{BLACK}Smelltu til að ræsa öll skip í slippnum
+STR_MASS_START_HANGAR_TIP                                       :{BLACK}Smelltu til að ræsa allar flugvélar í flugskýlinu
 
+STR_MASS_STOP_LIST_TIP                                          :{BLACK}Smelltu til að stöðva öll farartæki á listanum
+STR_MASS_START_LIST_TIP                                         :{BLACK}Smelltu til að ræsa öll farartæki á listanum
 
 STR_SHORT_DATE                                                  :{WHITE}{DATE_TINY}
 STR_SIGN_LIST_CAPTION                                           :{WHITE}Merkjalisti - {COMMA} merki
 
+STR_ORDER_REFIT_FAILED                                          :{WHITE}Order refit failure stopped {STRING} {COMMA}
 
 ############ Lists rail types
 
@@ -2965,11 +3044,65 @@
 STR_PURCHASE_INFO_COST_SPEED                                    :{BLACK}Verð: {GOLD}{CURRENCY}{BLACK} Hámarkshraði: {GOLD}{VELOCITY}
 STR_PURCHASE_INFO_AIRCRAFT_CAPACITY                             :{BLACK}Burðargeta: {GOLD}{COMMA} farþegar, {COMMA} pokar af pósti
 STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT                          :{BLACK}Drifvagnar: {GOLD}+{POWER}{BLACK} Þyngd: {GOLD}+{WEIGHT_S}
+STR_PURCHASE_INFO_REFITTABLE_TO                                 :{BLACK}Hægt að breyta farmi í: {GOLD}
+STR_PURCHASE_INFO_ALL_TYPES                                     :Allar tegundir farms
+STR_PURCHASE_INFO_ALL_BUT                                       :Allt nema {GOLD}
+STR_PURCHASE_INFO_MAX_TE                                        :{BLACK}Hámarks : {GOLD}{FORCE}
 
 ########### String for New Landscape Generator
 
+STR_GENERATE                                                    :{WHITE}Mynda land
+STR_RANDOM                                                      :{BLACK}Nýtt raðnúmer
+STR_RANDOM_HELP                                                 :{BLACK}Fá tilviljanakennt raðnúmer fyrir myndun lands
+STR_WORLD_GENERATION_CAPTION                                    :{WHITE}Sköpun heims
+STR_RANDOM_SEED                                                 :{BLACK}Raðnúmer lands:
+STR_RANDOM_SEED_HELP                                            :{BLACK}Smelltu til að skrifa inn raðnúmer
+STR_LAND_GENERATOR                                              :{BLACK}Landmyndun:
+STR_TREE_PLACER                                                 :{BLACK}Planta trjám:
+STR_HEIGHTMAP_ROTATION                                          :{BLACK}Snúningur hæðarkorts:
+STR_TERRAIN_TYPE                                                :{BLACK}Gerð lands:
+STR_QUANTITY_OF_SEA_LAKES                                       :{BLACK}Magn sjávar:
+STR_SMOOTHNESS                                                  :{BLACK}Sléttleiki lands:
+STR_SNOW_LINE_HEIGHT                                            :{BLACK}Hæð snjólínu:
+STR_DATE                                                        :{BLACK}Dags.:
+STR_NUMBER_OF_TOWNS                                             :{BLACK}Fjöldi bæja:
+STR_NUMBER_OF_INDUSTRIES                                        :{BLACK}Fjöldi iðnaða:
+STR_GENERATE_DATE                                               :{BLACK}{DATE_LONG}
+STR_SNOW_LINE_UP                                                :{BLACK}Hækka snjólínu upp um eitt þrep
+STR_SNOW_LINE_DOWN                                              :{BLACK}Lækka snjólínu niður um eitt þrep
+STR_SNOW_LINE_QUERY_CAPT                                        :{WHITE}Breyta hæð snjólínu
+STR_START_DATE_QUERY_CAPT                                       :{WHITE}Breyta upphafsári
+STR_HEIGHTMAP_SCALE_WARNING_CAPTION                             :{WHITE}Stærð hæðarlínukorts
+STR_HEIGHTMAP_SCALE_WARNING_MESSAGE                             :{YELLOW}Ekki er mælt með því að breyta stærð grunnkorts of mikið. Viltu halda áfram?
+STR_SNOW_LINE_HEIGHT_NUM                                        :{NUM}
+STR_HEIGHTMAP_NAME                                              :{BLACK}Nafn hæðarlínukorts:
+STR_HEIGHTMAP_SIZE                                              :{BLACK}Stærð: {ORANGE}{NUM} x {NUM}
+STR_GENERATION_WORLD                                            :{WHITE}Skapa heim...
+STR_GENERATION_ABORT                                            :{BLACK}Hætta
+STR_GENERATION_ABORT_CAPTION                                    :{WHITE}Hætta við sköpun heims
+STR_GENERATION_ABORT_MESSAGE                                    :{YELLOW}Ertu viss um að þú viljir hætta við sköpunina?
+STR_PROGRESS                                                    :{WHITE}{NUM}% tilbúið
+STR_GENERATION_PROGRESS                                         :{BLACK}{NUM} / {NUM}
+STR_WORLD_GENERATION                                            :{BLACK}Sköpun heims
+STR_TREE_GENERATION                                             :{BLACK}Gróðursetning trjáa
+STR_UNMOVABLE_GENERATION                                        :{BLACK}Staðsetning fastra hluta
 STR_CLEARING_TILES                                              :{BLACK}Hrjúft og grýtt landslag
+STR_SETTINGUP_GAME                                              :{BLACK}Set upp leik
+STR_PREPARING_TILELOOP                                          :{BLACK}Keyri reitalykkju
+STR_PREPARING_GAME                                              :{BLACK}Undirbý leik
+STR_DIFFICULTY_TO_CUSTOM                                        :{WHITE}Þessi stilling breytti erfiðleikastigi í sérsniðið
+STR_SE_FLAT_WORLD                                               :{WHITE}Slétt land
+STR_SE_FLAT_WORLD_TIP                                           :{BLACK}Mynda slétt land
+STR_SE_RANDOM_LAND                                              :{WHITE}Handahófskennt land
+STR_SE_NEW_WORLD                                                :{BLACK}Búa til nýtt kort
+STR_SE_CAPTION                                                  :{WHITE}Tegund korts
+STR_FLAT_WORLD_HEIGHT_DOWN                                      :{BLACK}Lækka slétt land niður um eitt þrep
+STR_FLAT_WORLD_HEIGHT_UP                                        :{BLACK}Hækka slétt land upp um eitt þrep
+STR_FLAT_WORLD_HEIGHT_QUERY_CAPT                                :{WHITE}Breyta hæð á sléttu landi
+STR_FLAT_WORLD_HEIGHT                                           :{BLACK}Hæð slétts lands yfir sjávarmáli
+STR_FLAT_WORLD_HEIGHT_NUM                                       :{NUM}
 
+STR_SMALLMAP_CENTER                                             :{BLACK}Miðja heimskort á núverandi staðsetningu
 
 ########### String for new airports
 STR_SMALL_AIRPORT                                               :{BLACK}Lítill flugvöllur
@@ -2989,5 +3122,9 @@
 
 ############ Tooltip measurment
 
+STR_MEASURE_LENGTH                                              :{BLACK}Lengd: {NUM}
+STR_MEASURE_AREA                                                :{BLACK}Svæði: {NUM} x {NUM}
+STR_MEASURE_LENGTH_HEIGHTDIFF                                   :{BLACK}Lengd: {NUM}{}Hæðarmunur {NUM} m
+STR_MEASURE_AREA_HEIGHTDIFF                                     :{BLACK}Svæði: {NUM} x {NUM}{}Hæðarmunur: {NUM} m
 
 ########
--- a/src/lang/italian.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/italian.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -1041,6 +1041,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Stazioni non uniformi: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Nuovo pathfinding globale (NPF, sovrascrive NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Moltiplicatore di peso per simulare treni pesanti: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Permetti fermate passanti sulle strade pubbliche: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Consenti la costruzione di piccoli aeroporti: {ORANGE}{STRING}
 
@@ -1584,6 +1585,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Strada alberata
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Deposito veicoli
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Passaggio a livello
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Non posso togliere la fermata bus...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Non posso togliere la stazione camion...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Città
--- a/src/lang/norwegian_bokmal.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/norwegian_bokmal.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -295,6 +295,7 @@
 STR_0141_LOAD_GAME                                              :{BLACK}Last inn spill
 STR_SINGLE_PLAYER                                               :{BLACK}Énspiller
 STR_MULTIPLAYER                                                 :{BLACK}Flerspiller
+STR_SCENARIO_EDITOR                                             :{BLACK}Scenario Editor
 
 STR_64                                                          :64
 STR_128                                                         :128
@@ -394,6 +395,10 @@
 STR_NO_WAITING_CARGO                                            :{BLACK}Ingen last venter
 STR_SELECT_ALL_FACILITIES                                       :{BLACK}Velg alle anlegg
 STR_SELECT_ALL_TYPES                                            :{BLACK}Velg alle lasttyper (inkludert last som ikke venter)
+STR_AVAILABLE_TRAINS                                            :{BLACK}Tilgjengelige tog
+STR_AVAILABLE_ROAD_VEHICLES                                     :{BLACK}Tilgjengelige kjøretøy
+STR_AVAILABLE_SHIPS                                             :{BLACK}Tilgjengelige skip
+STR_AVAILABLE_AIRCRAFT                                          :{BLACK}Tilgjengelige luftfartøy
 STR_AVAILABLE_ENGINES_TIP                                       :{BLACK}Se en liste over tilgjengelige maskindesigner for dette kjøretøyet.
 STR_MANAGE_LIST                                                 :{BLACK}Behandl liste
 STR_MANAGE_LIST_TIP                                             :{BLACK}Send instruksjoner til alle kjøretøyer i denne listen
@@ -619,6 +624,8 @@
 STR_022A_GENERATE_RANDOM_LAND                                   :{BLACK}Generer tilfeldig landskap
 STR_022B_RESET_LANDSCAPE                                        :{BLACK}Tilbakestill landskap
 STR_022C_RESET_LANDSCAPE                                        :{WHITE}Tilbakestill landskap
+STR_RESET_LANDSCAPE_TOOLTIP                                     :{BLACK}Fjern all eiendom som er eid av spilleren(e) fra kartet
+STR_RESET_LANDSCAPE_CONFIRMATION_TEXT                           :{WHITE}Er du sikker på at du vil fjerne all eiendommen som er eid av spilleren(e)?
 STR_022E_LANDSCAPE_GENERATION                                   :{BLACK}Landskapsgenerering
 STR_022F_TOWN_GENERATION                                        :{BLACK}Bygenerering
 STR_0230_INDUSTRY_GENERATION                                    :{BLACK}Industrigenerering
@@ -723,6 +730,7 @@
 STR_0291_DELETE_THIS_TOWN_COMPLETELY                            :{BLACK}Slett denne byen fullstendig
 STR_0292_SAVE_SCENARIO                                          :Lagre scenario
 STR_0293_LOAD_SCENARIO                                          :Last inn scenario
+STR_LOAD_HEIGHTMAP                                              :Last høydekart
 STR_0294_QUIT_EDITOR                                            :Avslutt redigeringsprogram
 STR_0295                                                        :
 STR_0296_QUIT                                                   :Avslutt
@@ -1033,6 +1041,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Ikke-ensartede stasjoner: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Ny global rutesøking (NGR, overstyrer NTK): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Vektmultiplikator for frakt til å simulere tunge tog: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Tillat gjennomkjøring av stoppesteder på veier som er eid av byene: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Alltid tillat bygging av små flyplasser: {ORANGE}{STRING}
 
@@ -1409,6 +1418,7 @@
 STR_NETWORK_ERR_NOTAVAILABLE                                    :{WHITE} Ingen nettverksadapter funnet eller kompilert uten ENABLE_NETWORK
 STR_NETWORK_ERR_NOSERVER                                        :{WHITE} Kunne ikke finne noen nettverksspill
 STR_NETWORK_ERR_NOCONNECTION                                    :{WHITE} Tjeneren svarte ikke på forespørselen
+STR_NETWORK_ERR_NEWGRF_MISMATCH                                 :{WHITE} Kunne ikke koble til på grunn av en NewGRF som ikke stemmer
 STR_NETWORK_ERR_DESYNC                                          :{WHITE} Nettverksspill synkronisering feilet.
 STR_NETWORK_ERR_LOSTCONNECTION                                  :{WHITE} Nettverksspill tilkobling mistet
 STR_NETWORK_ERR_SAVEGAMEERROR                                   :{WHITE} Kunne ikke laste server-lagret spill
@@ -1430,6 +1440,7 @@
 STR_NETWORK_ERR_CLIENT_SAVEGAME                                 :klarte ikke å åpne kartet
 STR_NETWORK_ERR_CLIENT_CONNECTION_LOST                          :forbindelsen ble brutt
 STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR                           :protokollfeil
+STR_NETWORK_ERR_CLIENT_NEWGRF_MISMATCH                          :NewGRF stemmer ikke
 STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED                           :ikke autorisert
 STR_NETWORK_ERR_CLIENT_NOT_EXPECTED                             :mottok merkelig pakke
 STR_NETWORK_ERR_CLIENT_WRONG_REVISION                           :feil versjon
@@ -1574,6 +1585,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Aveny
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Garasje
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Jernbaneovergang
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Kan ikke fjerne busstasjonen...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Kan ikke fjerne godsstasjonen...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Byer
--- a/src/lang/polish.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/polish.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -1128,6 +1128,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Niejednolite stacje: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Nowe szukanie drogi (NPF, zastępuje NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Mnożnik wagi dla symulacji ciężkich pociągów towarowych: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Pozwól na budowę przystanków typu ro-ro na drogach miejskich: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Zawsze zezwalaj budować małe lotniska: {ORANGE}{STRING}
 
@@ -1671,6 +1672,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Droga z drzewami
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Zajezdnia samochodowa
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Przejazd kolejowy
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Nie można usunąć przystanku...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Nie można usunąć stacji załadunkowej...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Miasta
--- a/src/lang/portuguese.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/portuguese.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -1041,6 +1041,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Estações não uniformes: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Nova procura de caminho global (NPF, overrides NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Multiplicador de peso para simular comboios pesados: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Permitir estações de passagem em estradas das cidades: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Permitir sempre aeroportos pequenos: {ORANGE}{STRING}
 
@@ -1584,6 +1585,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Estrada com árvores
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Depósito de veículos de estrada
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Passagem de nível
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Impossível remover estação...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Impossível remover estação...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Cidades
--- a/src/lang/russian.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/russian.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -1043,6 +1043,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Станции могут быть разной формы: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Новый поиск пути (NPF, без NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Коэф. увеличения веса груза: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Позволять строить сквозные остановки на городских дорогах: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Всегда разрешать малые аэропорты: {ORANGE}{STRING}
 
@@ -1586,6 +1587,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Шоссе
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Гараж
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Железнодорожный переезд
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Невозможно удалить автобусную остановку...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Невозможно удалить грузовой терминал...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Города
--- a/src/lang/simplified_chinese.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/simplified_chinese.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -1041,6 +1041,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}允许异形站台:{ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}新的全局路径搜索 (NPF,替换 NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}根据装载货物的数量模拟超重列车:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}允许在城镇所有的道路上穿过禁行标志 {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}总允许建设小型机场:{ORANGE}{STRING}
 
@@ -1584,6 +1585,8 @@
 STR_1816_TREE_LINED_ROAD                                        :林荫公路
 STR_1817_ROAD_VEHICLE_DEPOT                                     :汽车车库
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :公路铁路平交路口
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}不能移除公共汽车站……
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}不能移除汽车货场
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}城镇
--- a/src/lang/slovenian.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/slovenian.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -1083,6 +1083,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Neenake postaje: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Novo skupno iskanje poti (NPF, prevlada NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Koeficient teže tovora za simulacijo težkih vlakov: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Dovoli prehodne postaje na cestah v lasti mest: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Vedno dovoli majhna letališča: {ORANGE}{STRING}
 
@@ -1626,6 +1627,8 @@
 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_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...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Mesta
@@ -1869,7 +1872,6 @@
 STR_4802_COAL_MINE.r                                            :Premogovnika
 STR_4803_POWER_STATION                                          :Termo elektrarna
 STR_4803_POWER_STATION.3sk                                      :Termo elektrarni
-STR_4803_POWER_STATION.r                                        :Termo elektrarne
 STR_4804_SAWMILL                                                :Žaga
 STR_4804_SAWMILL.r                                              :Žage
 STR_4805_FOREST                                                 :Gozd
--- a/src/lang/spanish.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/spanish.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -1042,6 +1042,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Estaciones no uniformes: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Nuevo sistema de busq. de rutas global (NPF, anula a NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Carga el multiplicador de peso para simular trenes pesados: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Permite conducir en paradas de carretera propiedad de ciudades: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Permitir siempre aeropuertos pequeños: {ORANGE}{STRING}
 
@@ -1585,6 +1586,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Carretera arbolada
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Depósito de carretera
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Paso a nivel
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}No se puede quitar la estación de bus...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}No se puede quitar la estación de camiones...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Poblaciones
@@ -1699,6 +1702,7 @@
 STR_2806                                                        :{WHITE}{STRING}
 STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...demasiadas señales
 STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}No se puede colocar una señal aquí...
+STR_280A_SIGN                                                   :Señal
 STR_280B_EDIT_SIGN_TEXT                                         :{WHITE}Editar texto de la señal
 STR_280C_CAN_T_CHANGE_SIGN_NAME                                 :{WHITE}No se puede cambiar el nombre de la señal...
 STR_280D_SELECT_TREE_TYPE_TO_PLANT                              :{BLACK}Seleccione el tipo de árboles a plantar
--- a/src/lang/swedish.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/swedish.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -1041,6 +1041,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Icke-rektangulära stationer: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Ny globalt sätt att hitta rutt (NPF, åsidosätter NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Godsfaktor för att simulera tunga tåg: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Tillåt genomfarts-stop på stadsägda vägar: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Tillåt alltid små flygplatser: {ORANGE}{STRING}
 
@@ -1584,6 +1585,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Väg med träd
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Bussgarage
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Väg-/Järnvägskorsning
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Kan inte ta bort busstation...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Kan inte ta bort lastbilsstation...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Städer
@@ -2630,6 +2633,7 @@
 STR_TRAIN_STOPPING_VEL                                          :{RED}Stannar, {VELOCITY}
 STR_INCOMPATIBLE_RAIL_TYPES                                     :Fel järnvägstyp
 STR_TRAIN_NO_POWER                                              :{RED}Ingen Kraft
+STR_TRAIN_START_NO_CATENARY                                     :Detta spår saknar kedjekurva, så tåget kan inte starta
 
 ##id 0x9000
 STR_9000_ROAD_VEHICLE_IN_THE_WAY                                :{WHITE}Vägfordon i vägen
--- a/src/lang/traditional_chinese.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/traditional_chinese.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -1041,6 +1041,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}不規則形狀車站: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}新路徑搜尋演算法 (NPF, 覆蓋 NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}貨物重量系數,以模擬較重列車: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}可在鎮內興建路邊車站: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}永遠可以興建小型機場: {ORANGE}{STRING}
 
@@ -1584,6 +1585,8 @@
 STR_1816_TREE_LINED_ROAD                                        :有行道樹的公路
 STR_1817_ROAD_VEHICLE_DEPOT                                     :車庫
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :公路/鐵道平交道
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}不能從這邊移除公車站...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}不能從這邊移除貨運站...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}城鎮
--- a/src/lang/turkish.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/turkish.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -1041,6 +1041,7 @@
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Özel istasyonlar: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Yeni evrensel yol bulma (NPF, NTP üzerinde): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Ağır yük trenleri için ağırlık çarpanı: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Şehiriçi yollara durak yapmak izinli: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Küçük havalimanı her zaman etkin: {ORANGE}{STRING}
 
@@ -1584,6 +1585,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Ağaçli yol
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Araba garı
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Hemzemin geçit
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Otobüs durağı kaldırılamaz...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Kamyon durağı kaldırılamaz...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Şehirler
--- a/src/lang/ukrainian.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/ukrainian.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -79,7 +79,7 @@
 STR_0027_COLA                                                   :кола
 STR_0027_COLA.r                                                 :коли
 STR_0027_COLA.z                                                 :колу
-STR_0028_COTTON_CANDY                                           :солодку вату
+STR_0028_COTTON_CANDY                                           :солодка вата
 STR_0028_COTTON_CANDY.r                                         :солодкої вати
 STR_0028_COTTON_CANDY.z                                         :солодку вату
 STR_0029_BUBBLES                                                :бульбашки
@@ -92,13 +92,12 @@
 STR_002B_BATTERIES.r                                            :батарейок
 STR_002B_BATTERIES.z                                            :батарейки
 STR_002C_PLASTIC                                                :пластик
-STR_002C_PLASTIC.r                                              :пластику
-STR_002C_PLASTIC.z                                              :ластик
-STR_002D_FIZZY_DRINKS                                           :газовану воду
+STR_002C_PLASTIC.z                                              :пластик
+STR_002D_FIZZY_DRINKS                                           :газована водф
 STR_002D_FIZZY_DRINKS.r                                         :газованої води
 STR_002D_FIZZY_DRINKS.z                                         :газовану воду
 STR_002E                                                        :
-STR_002F_PASSENGER                                              :пасажирів
+STR_002F_PASSENGER                                              :пасажири
 STR_002F_PASSENGER.r                                            :пасажирів
 STR_002F_PASSENGER.z                                            :пасажирів
 STR_0030_COAL                                                   :вугілля
@@ -590,9 +589,9 @@
 STR_019D_AIRCRAFT                                               :Літак
 STR_019E_SHIP                                                   :Корабель
 STR_019F_TRAIN                                                  :Поїзд
-STR_01A0_IS_GETTING_OLD                                         :{WHITE}{STRING} {COMMA} зістарився
-STR_01A1_IS_GETTING_VERY_OLD                                    :{WHITE}{STRING} {COMMA} дуже зістарився
-STR_01A2_IS_GETTING_VERY_OLD_AND                                :{WHITE}{STRING} {COMMA} зістарився і терміново потребує заміни
+STR_01A0_IS_GETTING_OLD                                         :{WHITE}{STRING} {COMMA} старіє
+STR_01A1_IS_GETTING_VERY_OLD                                    :{WHITE}{STRING} {COMMA} вже дуже старий
+STR_01A2_IS_GETTING_VERY_OLD_AND                                :{WHITE}{STRING} {COMMA} вже дуже старий і терміново потребує заміни
 STR_01A3_LAND_AREA_INFORMATION                                  :{WHITE}Інформація про ділянку
 STR_01A4_COST_TO_CLEAR_N_A                                      :{BLACK}Вартість очистки: {LTBLUE}неможливо
 STR_01A5_COST_TO_CLEAR                                          :{BLACK}Вартість очистки: {LTBLUE}{CURRENCY}
@@ -923,11 +922,11 @@
 STR_MEASURING_UNITS                                             :{BLACK}Система одиниць виміру
 STR_02E4                                                        :{BLACK}{SKIP}{SKIP}{STRING}
 STR_MEASURING_UNITS_SELECTION                                   :{BLACK}Вибір системи одиниць виміру
-STR_02E6_ROAD_VEHICLES                                          :{BLACK}Напрямок руху
+STR_02E6_ROAD_VEHICLES                                          :{BLACK}Транспорт
 STR_02E7                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{STRING}
-STR_02E8_SELECT_SIDE_OF_ROAD_FOR                                :{BLACK}Виберіть по якій стороні їхатиме транспорт
-STR_02E9_DRIVE_ON_LEFT                                          :Лівосторонній
-STR_02EA_DRIVE_ON_RIGHT                                         :Правосторонній
+STR_02E8_SELECT_SIDE_OF_ROAD_FOR                                :{BLACK}Виберіть, по якій стороні їхатиме транспорт
+STR_02E9_DRIVE_ON_LEFT                                          :Їде по лівій стороні
+STR_02EA_DRIVE_ON_RIGHT                                         :Їде по правій стороні
 STR_02EB_TOWN_NAMES                                             :{BLACK}Назви міст
 STR_02EC                                                        :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
 STR_02ED_SELECT_STYLE_OF_TOWN_NAMES                             :{BLACK}Виберіть стиль назв міст
@@ -1145,11 +1144,12 @@
 STR_CONFIG_PATCHES_SHOWFINANCES                                 :{LTBLUE}Показувати вікно фінансів в кінці року: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_NONSTOP                                  :{LTBLUE}TTDPatch сумісна команда "без зупинки": {ORANGE}{STRING}
 STR_CONFIG_PATCHES_ROADVEH_QUEUE                                :{LTBLUE}Ставати транспорту в чергу: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AUTOSCROLL                                   :{LTBLUE}Прокручувати вікно коли курсор з краю: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSCROLL                                   :{LTBLUE}Прокручувати вікно, коли курсор з краю: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_BRIBE                                        :{LTBLUE}Дозволити підкупляти місцеву владу: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NONUNIFORM_STATIONS                          :{LTBLUE}Неоднорідні станції: {ORANGE}{STRING}
 STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL                          :{LTBLUE}Новий глобальний пошук шляху(NPF, замість NTP): {ORANGE}{STRING}
 STR_CONFIG_PATCHES_FREIGHT_TRAINS                               :{LTBLUE}Множник ваги для імітації важких потягів: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD                            :{LTBLUE}Дозволити безпересадкові зупинки на муніципальних дорогах: {ORANGE}{STRING}
 
 STR_CONFIG_PATCHES_SMALL_AIRPORTS                               :{LTBLUE}Будувати малі аеропорти можна завжди: {ORANGE}{STRING}
 
@@ -1693,6 +1693,8 @@
 STR_1816_TREE_LINED_ROAD                                        :Дорога з насадженнями
 STR_1817_ROAD_VEHICLE_DEPOT                                     :Автомобільне депо
 STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Залізничний переїзд
+STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Не можна знести автобусну станцію...
+STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Не можна знести грузову станцію...
 
 ##id 0x2000
 STR_2000_TOWNS                                                  :{WHITE}Міста
--- a/src/lang/unfinished/afrikaans.txt	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/lang/unfinished/afrikaans.txt	Sat Feb 17 11:12:50 2007 +0000
@@ -82,6 +82,28 @@
 STR_004B_BATTERY                                                :Battery
 STR_004C_PLASTIC                                                :Plastiek
 STR_004D_FIZZY_DRINK                                            :Koeldrank
+STR_QUANTITY_STEEL                                              :{WEIGHT} van staal
+STR_QUANTITY_VALUABLES                                          :{COMMA} sak{P "" ke} van kosbaarhede
+STR_QUANTITY_COPPER_ORE                                         :{WEIGHT} van koper erts
+STR_QUANTITY_MAIZE                                              :{WEIGHT} van graan
+STR_QUANTITY_FRUIT                                              :{WEIGHT} van vrugte
+STR_QUANTITY_DIAMONDS                                           :{COMMA} sak{P "" ke} van diamante
+STR_QUANTITY_FOOD                                               :{WEIGHT} van kos
+STR_QUANTITY_PAPER                                              :{WEIGHT} van papier
+STR_QUANTITY_GOLD                                               :{COMMA} sak{P "" ke} van goud
+STR_QUANTITY_WATER                                              :{VOLUME} van water
+STR_QUANTITY_WHEAT                                              :{WEIGHT} van koring
+STR_QUANTITY_RUBBER                                             :{VOLUME} van gomlastiek
+STR_QUANTITY_SUGAR                                              :{WEIGHT} van suiker
+STR_QUANTITY_TOYS                                               :{COMMA} speel{P ding goed}
+STR_QUANTITY_SWEETS                                             :{COMMA} sak{P "" ke} van lekkers
+STR_QUANTITY_COLA                                               :{VOLUME} van cola
+STR_QUANTITY_CANDYFLOSS                                         :{WEIGHT} van spookasem
+STR_QUANTITY_BUBBLES                                            :{COMMA} borrel{P "" s}
+STR_QUANTITY_TOFFEE                                             :{WEIGHT} van tameletjie
+STR_QUANTITY_BATTERIES                                          :{COMMA} batter{P y ye}
+STR_QUANTITY_PLASTIC                                            :{VOLUME} van plastiek
+STR_QUANTITY_FIZZY_DRINKS                                       :{COMMA} koeldran{P k ke}
 STR_ABBREV_NOTHING                                              :
 STR_ABBREV_PASSENGERS                                           :{TINYFONT}PS
 STR_ABBREV_COAL                                                 :{TINYFONT}SK
@@ -122,11 +144,13 @@
 STR_00B1_GAME_OPTIONS                                           :{WHITE}Spel Opsies
 STR_00B2_MESSAGE                                                :{YELLOW}Boodskap
 STR_00B3_MESSAGE_FROM                                           :{YELLOW}Boodskap van {STRING}
+STR_POPUP_CAUTION_CAPTION                                       :{WHITE}Waarskuwing!
 STR_00B4_CAN_T_DO_THIS                                          :{WHITE}Kan nie dit doen nie....
 STR_00B5_CAN_T_CLEAR_THIS_AREA                                  :{WHITE}Kan nie die area reinig nie....
 STR_00B6_ORIGINAL_COPYRIGHT                                     :{BLACK}Oorspronklik kopiereg {COPYRIGHT} 1995 Chris Sawyer, Alle regte voorbehou
 STR_00B7_VERSION                                                :{BLACK}OpenTTD bewerking {REV}
 STR_00BA_COPYRIGHT_OPENTTD                                      :{BLACK}OpenTTD {COPYRIGHT}2002-2006 Die OpenTTD span
+STR_TRANSLATED_BY                                               :{BLACK}  Vertaler(s) -
 
 STR_00C5                                                        :{BLACK}{CROSS}
 STR_00C6                                                        :{SILVER}{CROSS}
@@ -253,11 +277,15 @@
 STR_013E_CAPACITIES                                             :{BLACK}Kapasiteite
 STR_013E_TOTAL_CARGO                                            :{BLACK}Totaale Vrag
 STR_013F_CAPACITY                                               :{BLACK}Kapasiteit: {LTBLUE}{CARGO}
+STR_CAPACITY_MULT                                               :{BLACK}Kapasiteit: {LTBLUE}{CARGO} (x{NUM})
 STR_013F_TOTAL_CAPACITY_TEXT                                    :{BLACK}Totaale vrag kapasitiet van die trein:
 STR_013F_TOTAL_CAPACITY                                         :{LTBLUE}- {CARGO} ({SHORTCARGO})
+STR_TOTAL_CAPACITY_MULT                                         :{LTBLUE}- {CARGO} ({SHORTCARGO}) (x{NUM})
 STR_0140_NEW_GAME                                               :{BLACK}Nuwe Spel
 STR_0141_LOAD_GAME                                              :{BLACK}Laai Spel
+STR_SINGLE_PLAYER                                               :{BLACK}Enkel speeler
 STR_MULTIPLAYER                                                 :{BLACK}Veelspeler
+STR_SCENARIO_EDITOR                                             :{BLACK}Draaiboek Redakteur
 
 STR_64                                                          :64
 STR_128                                                         :128
@@ -274,13 +302,37 @@
 STR_0152_TOWN_DIRECTORY                                         :Stad index
 STR_0153_SUBSIDIES                                              :Subsidiëe
 
-
-
+STR_UNITS_IMPERIAL                                              :Imperiaal
+STR_UNITS_METRIC                                                :Metriek
+STR_UNITS_SI                                                    :SI
 
-
+STR_UNITS_VELOCITY_IMPERIAL                                     :{COMMA} mph
+STR_UNITS_VELOCITY_METRIC                                       :{COMMA} km/h
+STR_UNITS_VELOCITY_SI                                           :{COMMA} m/s
 
+STR_UNITS_POWER_IMPERIAL                                        :{COMMA}hp
+STR_UNITS_POWER_METRIC                                          :{COMMA}hp
+STR_UNITS_POWER_SI                                              :{COMMA}kW
 
+STR_UNITS_WEIGHT_SHORT_IMPERIAL                                 :{COMMA}t
+STR_UNITS_WEIGHT_SHORT_METRIC                                   :{COMMA}t
+STR_UNITS_WEIGHT_SHORT_SI                                       :{COMMA}kg
 
+STR_UNITS_WEIGHT_LONG_IMPERIAL                                  :{COMMA} ton{P "" s}
+STR_UNITS_WEIGHT_LONG_METRIC                                    :{COMMA} tonne{P "" s}
+STR_UNITS_WEIGHT_LONG_SI                                        :{COMMA} kg
+
+STR_UNITS_VOLUME_SHORT_IMPERIAL                                 :{COMMA}gal
+STR_UNITS_VOLUME_SHORT_METRIC                                   :{COMMA}l
+STR_UNITS_VOLUME_SHORT_SI                                       :{COMMA}m³
+
+STR_UNITS_VOLUME_LONG_IMPERIAL                                  :{COMMA} gallon{P "" s}
+STR_UNITS_VOLUME_LONG_METRIC                                    :{COMMA} litre{P "" s}
+STR_UNITS_VOLUME_LONG_SI                                        :{COMMA} m³
+
+STR_UNITS_FORCE_IMPERIAL                                        :{COMMA}x10³ lbf
+STR_UNITS_FORCE_METRIC                                          :{COMMA} ton krag
+STR_UNITS_FORCE_SI                                              :{COMMA} kN
 
 ############ range for menu starts
 STR_0154_OPERATING_PROFIT_GRAPH                                 :Opereer profyt grafiek
@@ -290,6 +342,7 @@
 STR_0158_COMPANY_VALUE_GRAPH                                    :Maatskappy waarde grafiek
 STR_0159_CARGO_PAYMENT_RATES                                    :Vrag betaaling grade
 STR_015A_COMPANY_LEAGUE_TABLE                                   :Maatskappy verbond tafel
+STR_PERFORMANCE_DETAIL_MENU                                     :Omstandig prestasie gradering
 ############ range for menu ends
 
 STR_015B_OPENTTD                                                :{WHITE}Omtrent OpenTTD
@@ -299,13 +352,45 @@
 STR_015F_QUIT                                                   :Uitgang
 STR_ABANDON_GAME_QUERY                                          :{YELLOW}Is jy seker jy wil die spel verlaat?
 STR_0161_QUIT_GAME                                              :{WHITE}Verlaat Spel
+STR_SORT_ORDER_TIP                                              :{BLACK}Selekteer sorteer orde (afklimende/klimende)
+STR_SORT_CRITERIA_TIP                                           :{BLACK}Selekteer sorteer maatstaf
+STR_SORT_BY                                                     :{BLACK}Sorteer by
 
+STR_SORT_BY_POPULATION                                          :{BLACK}Populasie
+STR_SORT_BY_PRODUCTION                                          :{BLACK}Produksie
+STR_SORT_BY_TYPE                                                :{BLACK}Tipe
+STR_SORT_BY_TRANSPORTED                                         :{BLACK}Uitvervoer
+STR_SORT_BY_NAME                                                :{BLACK}Naam
+STR_SORT_BY_DROPDOWN_NAME                                       :Naam
+STR_SORT_BY_DATE                                                :{BLACK}Datum
+STR_SORT_BY_NUMBER                                              :Nommer
+STR_SORT_BY_PROFIT_LAST_YEAR                                    :Profyt verlede jaar
+STR_SORT_BY_PROFIT_THIS_YEAR                                    :Profyt die jaar
+STR_SORT_BY_AGE                                                 :Ouderdom
+STR_SORT_BY_RELIABILITY                                         :Deeglikheid
+STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE                        :Totaale kapasitiet per vrag tipe
+STR_SORT_BY_MAX_SPEED                                           :Maksimum spoed
+STR_SORT_BY_MODEL                                               :Model
+STR_SORT_BY_VALUE                                               :Waarde
+STR_SORT_BY_FACILITY                                            :Stasie tipe
+STR_SORT_BY_WAITING                                             :Wagtend vrag waarde
+STR_SORT_BY_RATING_MAX                                          :Vrag gradering
 STR_ENGINE_SORT_ENGINE_ID                                       :EngineID (klassieke sorteer)
+STR_ENGINE_SORT_COST                                            :Koste
+STR_ENGINE_SORT_POWER                                           :Krag
+STR_ENGINE_SORT_INTRO_DATE                                      :Inleiding Datum
+STR_ENGINE_SORT_RUNNING_COST                                    :Loopkoste
 STR_ENGINE_SORT_CARGO_CAPACITY                                  :Vrag Kapasiteit
 STR_NO_WAITING_CARGO                                            :{BLACK}Geen vrag van enige tipe is op wag
 STR_AVAILABLE_ENGINES_TIP                                       :{BLACK}Wys 'n lys van beskikbaare enjin tipes vir die voertiug tipe.
 STR_MANAGE_LIST                                                 :{BLACK}Bestuur lys
 STR_MANAGE_LIST_TIP                                             :{BLACK}Stuur instruksies na alle voertuie in die lys
+STR_REPLACE_VEHICLES                                            :Vervang voertuie
+STR_SEND_TRAIN_TO_DEPOT                                         :Stuur na Depot
+STR_SEND_ROAD_VEHICLE_TO_DEPOT                                  :Stuur na Depot
+STR_SEND_SHIP_TO_DEPOT                                          :Stuur na Depot
+STR_SEND_AIRCRAFT_TO_HANGAR                                     :Stuur na Hangar
+STR_SEND_FOR_SERVICING                                          :Stuur vir Diens
 
 ############ range for months starts
 STR_0162_JAN                                                    :Jan
@@ -353,6 +438,9 @@
 STR_018A_CAN_T_CHANGE_SERVICING                                 :{WHITE}kan nie tussendiens tydperk verander nie...
 STR_018B_CLOSE_WINDOW                                           :{BLACK}Maak venster toe
 STR_018C_WINDOW_TITLE_DRAG_THIS                                 :{BLACK}Venster titel - sleep die om venster te beweeg
+STR_STICKY_BUTTON                                               :{BLACK}Bemerk die venste as ontoemaakbaar by die"Sluit Alle Vensters" sleutel
+STR_RESIZE_BUTTON                                               :{BLACK}Kliek en sleep om venster te vergroot
+STR_SAVELOAD_HOME_BUTTON                                        :{BLACK}Kliek hier om na die huidige bewaar/laai leer te spring
 STR_018D_DEMOLISH_BUILDINGS_ETC                                 :{BLACK}Breek gebou af ens. op 'n landblokkie
 STR_018E_LOWER_A_CORNER_OF_LAND                                 :{BLACK}Verlaag 'n hoek van land
 STR_018F_RAISE_A_CORNER_OF_LAND                                 :{BLACK}Verhoog 'n hoek van land
@@ -495,6 +583,7 @@
 STR_MESSAGE_SOUND                                               :{YELLOW}Speel geluid vir opsommige nuus boodskappe
 STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO                       :{WHITE}...te ver van vorige destinasie
 STR_0211_TOP_COMPANIES_WHO_REACHED                              :{BIGFONT}{BLACK}Hoof maatskappye wat het {NUM}{}({STRING} Vlak) gekry
+STR_TOP_COMPANIES_NETWORK_GAME                                  :{BIGFONT}{BLACK}Maatskappy Liga Tafel in {NUM}
 STR_0212                                                        :{BIGFONT}{COMMA}.
 STR_0213_BUSINESSMAN                                            :Sakeman
 STR_0214_ENTREPRENEUR                                           :Ondernemer
@@ -515,6 +604,7 @@
 STR_022A_GENERATE_RANDOM_LAND                                   :{BLACK}Ontwikkel lukraak land
 STR_022B_RESET_LANDSCAPE                                        :{BLACK}Herstel landerye
 STR_022C_RESET_LANDSCAPE                                        :{WHITE}Herstel landerye
+STR_RESET_LANDSCAPE_CONFIRMATION_TEXT                           :{WHITE}Is jy seker jy wil alle speler-besittend eiendom verwyder?
 STR_022E_LANDSCAPE_GENERATION                                   :{BLACK}Landerye ontwikkeling
 STR_022F_TOWN_GENERATION                                        :{BLACK}Stad ontwikkeling
 STR_0230_INDUSTRY_GENERATION                                    :{BLACK}Nyweheid ontwikkeling
@@ -627,6 +717,9 @@
 STR_0298_LOAD_SCENARIO                                          :{WHITE}Laai Draaiboek
 STR_0299_SAVE_SCENARIO                                          :{WHITE}Bewaar Draaiboek
 STR_029A_PLAY_SCENARIO                                          :{BLACK}Speel Draaiboek
+STR_PLAY_HEIGHTMAP                                              :{BLACK}Speel Hoogtekaart
+STR_PLAY_HEIGHTMAP_HINT                                         :{BLACK}begin 'n nuwe spel, gebruikend 'n hoogtekaart as oStart a new game, using a heightmap as landscape
+STR_QUIT_SCENARIO_QUERY                                         :{YELLOW}Is jy seker jy wil die draaiboek verlaat?
 STR_029C_QUIT_EDITOR                                            :{WHITE}Verlaat Redakteur
 STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS                             :{WHITE}...kan slegs in stede met 'n populasie van te minste 1200 gebou word
 STR_029E_MOVE_THE_STARTING_DATE                                 :{BLACK}Beweeg die begin datum terug 1 jaar
@@ -641,6 +734,7 @@
 STR_02B6                                                        :{STRING}  -  {STRING}
 STR_02B7_SHOW_LAST_MESSAGE_OR_NEWS                              :{BLACK}Vertoon laaste boodskap of nuus verslag
 STR_OFF                                                         :Af
+STR_SUMMARY                                                     :Opsomming
 STR_FULL                                                        :Vol
 STR_02BA                                                        :{SILVER}- -  {COMPANY}  - -
 STR_02BB_TOWN_DIRECTORY                                         :Stad index
@@ -656,14 +750,17 @@
 ############ range for menu starts
 STR_02C3_GAME_OPTIONS                                           :Spel opsies
 STR_02C5_DIFFICULTY_SETTINGS                                    :Moeilikheid stellings
+STR_02C7_CONFIG_PATCHES                                         :Skep Stukke
 STR_NEWGRF_SETTINGS                                             :Newgrf stellings
 STR_GAMEOPTMENU_0A                                              :
 STR_02CA_TOWN_NAMES_DISPLAYED                                   :{SETX 12}Stad naame vertoon
 STR_02CC_STATION_NAMES_DISPLAYED                                :{SETX 12}Stasie naame vertoon
 STR_02CE_SIGNS_DISPLAYED                                        :{SETX 12}Tekens vertoon
+STR_WAYPOINTS_DISPLAYED2                                        :{SETX 12}Wegpunte vertoon
 STR_02D0_FULL_ANIMATION                                         :{SETX 12}Volle animasie
 STR_02D2_FULL_DETAIL                                            :{SETX 12}Volle aanwyse
 STR_02D4_TRANSPARENT_BUILDINGS                                  :{SETX 12}Deurskynend geboue
+STR_TRANSPARENT_SIGNS                                           :{SETX 12}Deurskynend stasie tekens
 ############ range ends here
 
 ############ range for menu starts
@@ -681,11 +778,14 @@
 STR_02DD_SUBSIDIES                                              :Subsidiee
 STR_02DE_MAP_OF_WORLD                                           :Kaart van wêreld
 STR_EXTRA_VIEW_PORT                                             :Ekstra gesigswerf
+STR_SIGN_LIST                                                   :Teken lys
 STR_02DF_TOWN_DIRECTORY                                         :Stad indeks
+STR_TOWN_POPULATION                                             :{BLACK}Wereld populasie: {COMMA}
 STR_EXTRA_VIEW_PORT_TITLE                                       :{WHITE}Gesigswerf {COMMA}
 STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN                                :{BLACK}Afskryf na gesigswerf
 STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT                             :{BLACK}Afskryf die lokasie van die wereldwerf na die gesigswerf
 STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW                                :{BLACK}Deeg van gesigswerf
+STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT                             :{BLACK}Deeg die lokasie van die gesigspunt na die hoofskerm
 
 STR_02E0_CURRENCY_UNITS                                         :{BLACK}Koers eenheide
 STR_02E1                                                        :{BLACK}{SKIP}{STRING}
@@ -744,12 +844,26 @@
 
 STR_0329_PURCHASE_LAND_FOR_FUTURE                               :{BLACK}Koop land vir toekomende gebruik
 STR_032F_AUTOSAVE                                               :{RED}OUTOBEWAAR
+STR_SAVING_GAME                                                 :{RED}*  *  BEWAAR SPEL  *  *
+STR_SAVE_STILL_IN_PROGRESS                                      :{WHITE}Bewaar nog in vorder, wag asb tot dit klaar is!
 STR_0330_SELECT_EZY_STREET_STYLE                                :{BLACK}Kies 'Ezy Straat styl musiek' musiek lys
 
 STR_0335_6                                                      :{BLACK}6
 STR_0336_7                                                      :{BLACK}7
 
 ############ start of townname region
+STR_TOWNNAME_ORIGINAL_ENGLISH                                   :Engels (Oorspronkilik)
+STR_TOWNNAME_FRENCH                                             :Frans
+STR_TOWNNAME_DUTCH                                              :Hollands
+STR_TOWNNAME_FINNISH                                            :Finnish
+STR_TOWNNAME_POLISH                                             :Polish
+STR_TOWNNAME_SLOVAKISH                                          :Slovakish
+STR_TOWNNAME_NORWEGIAN                                          :Norwegian
+STR_TOWNNAME_HUNGARIAN                                          :Hungarian
+STR_TOWNNAME_AUSTRIAN                                           :Austrian
+STR_TOWNNAME_ROMANIAN                                           :Romanian
+STR_TOWNNAME_CZECH                                              :Czech
+STR_TOWNNAME_SWISS                                              :Swiss
 ############ end of townname region
 
 STR_CURR_GBP                                                    :Pounds ()
@@ -1072,7 +1186,7 @@
 STR_NETWORK_PLAYER_NAME                                         :{BLACK}Speler naam:
 STR_NETWORK_ENTER_NAME_TIP                                      :{BLACK}Die is die naam waarmee ander spelers sal jou aanwys
 STR_NETWORK_CONNECTION                                          :{BLACK}Verbinding:
-STR_NETWORK_CONNECTION_TIP                                      :{BLACK}Kies tueen internet spel of 'n Plaaslike Area Netwerk (LAN) spel
+STR_NETWORK_CONNECTION_TIP                                      :{BLACK}Kies teen internet spel of 'n Plaaslike Area Netwerk (LAN) spel
 
 STR_NETWORK_START_SERVER                                        :{BLACK}Begin bediender
 STR_NETWORK_START_SERVER_TIP                                    :{BLACK}Begin u eie bediender
--- a/src/macros.h	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/macros.h	Sat Feb 17 11:12:50 2007 +0000
@@ -62,11 +62,30 @@
 //#define IS_INSIDE_1D(x, base, size) ((x) >= (base) && (x) < (base) + (size))
 #define IS_INSIDE_1D(x, base, size) ( (uint)((x) - (base)) < ((uint)(size)) )
 
+template <typename T>
+static inline bool HASBIT(T x, int y)
+{
+	return (x & (((T)1) << y)) != 0;
+}
 
-#define HASBIT(x,y)    (((x) & (1 << (y))) != 0)
-#define SETBIT(x,y)    ((x) |=  (1 << (y)))
-#define CLRBIT(x,y)    ((x) &= ~(1 << (y)))
-#define TOGGLEBIT(x,y) ((x) ^=  (1 << (y)))
+template <typename T>
+static inline T SETBIT(T& x, int y)
+{
+	return x |= (((T)1) << y);
+}
+
+template <typename T>
+static inline T CLRBIT(T& x, int y)
+{
+	return x &= ~(((T)1) << y);
+}
+
+template <typename T>
+static inline T TOGGLEBIT(T& x, int y)
+{
+	return x ^= (((T)1) << y);
+}
+
 
 // checking more bits. Maybe unneccessary, but easy to use
 #define HASBITS(x,y) ((x) & (y))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/music/libtimidity.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -0,0 +1,143 @@
+/* $Id: extmidi.c 4692 2006-05-02 19:09:49Z peter1138 $ */
+
+#include "../stdafx.h"
+#include "../openttd.h"
+#include "../sound.h"
+#include "../string.h"
+#include "../variables.h"
+#include "../debug.h"
+#include "libtimidity.h"
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <signal.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <timidity.h>
+#if defined(PSP)
+#include <pspaudiolib.h>
+#endif /* PSP */
+
+enum MidiState {
+	MIDI_STOPPED = 0,
+	MIDI_PLAYING = 1,
+};
+
+static struct {
+	MidIStream *stream;
+	MidSongOptions options;
+	MidSong *song;
+
+	MidiState status;
+	uint32 song_length;
+	uint32 song_position;
+} _midi;
+
+#if defined(PSP)
+static void AudioOutCallback(void *buf, unsigned int _reqn, void *userdata)
+{
+	memset(buf, 0, _reqn * PSP_NUM_AUDIO_CHANNELS);
+	if (_midi.status == MIDI_PLAYING) {
+		mid_song_read_wave(_midi.song, buf, _reqn * PSP_NUM_AUDIO_CHANNELS);
+	}
+}
+#endif /* PSP */
+
+static const char *LibtimidityMidiStart(const char *const *param)
+{
+	_midi.status = MIDI_STOPPED;
+
+	if (mid_init(param == NULL ? NULL : (char *)param[0]) < 0) {
+		/* If init fails, it can be because no configuration was found.
+		 *  If it was not forced via param, try to load it without a
+		 *  configuration. Who knows that works. */
+		if (param != NULL || mid_init_no_config() < 0) {
+			DEBUG(driver, 0, "error initializing timidity");
+			return NULL;
+		}
+	}
+	DEBUG(driver, 1, "successfully initialised timidity");
+
+	_midi.options.rate = 44100;
+	_midi.options.format = MID_AUDIO_S16LSB;
+	_midi.options.channels = 2;
+#if defined(PSP)
+	_midi.options.buffer_size = PSP_NUM_AUDIO_SAMPLES;
+#else
+	_midi.options.buffer_size = _midi.options.rate;
+#endif
+
+#if defined(PSP)
+	pspAudioInit();
+	pspAudioSetChannelCallback(_midi.options.channels, &AudioOutCallback, NULL);
+	pspAudioSetVolume(_midi.options.channels, PSP_VOLUME_MAX, PSP_VOLUME_MAX);
+#endif /* PSP */
+
+	return NULL;
+}
+
+static void LibtimidityMidiStop(void)
+{
+	if (_midi.status == MIDI_PLAYING) {
+		_midi.status = MIDI_STOPPED;
+		mid_song_free(_midi.song);
+	}
+	mid_exit();
+}
+
+static void LibtimidityMidiPlaySong(const char *filename)
+{
+	_midi.stream = mid_istream_open_file(filename);
+	if (_midi.stream == NULL) {
+		DEBUG(driver, 0, "Could not open music file");
+		return;
+	}
+
+	_midi.song = mid_song_load(_midi.stream, &_midi.options);
+	mid_istream_close(_midi.stream);
+	_midi.song_length = mid_song_get_total_time(_midi.song);
+
+	if (_midi.song == NULL) {
+		DEBUG(driver, 1, "Invalid MIDI file");
+		return;
+	}
+
+	mid_song_start(_midi.song);
+	_midi.status = MIDI_PLAYING;
+}
+
+static void LibtimidityMidiStopSong(void)
+{
+	_midi.status = MIDI_STOPPED;
+	mid_song_free(_midi.song);
+}
+
+static bool LibtimidityMidiIsPlaying(void)
+{
+	if (_midi.status == MIDI_PLAYING) {
+		_midi.song_position = mid_song_get_time(_midi.song);
+		if (_midi.song_position >= _midi.song_length) {
+			_midi.status = MIDI_STOPPED;
+			_midi.song_position = 0;
+		}
+	}
+
+	return (_midi.status == MIDI_PLAYING);
+}
+
+static void LibtimidityMidiSetVolume(byte vol)
+{
+	if (_midi.song != NULL)
+		mid_song_set_volume(_midi.song, vol);
+}
+
+const HalMusicDriver _libtimidity_music_driver = {
+	LibtimidityMidiStart,
+	LibtimidityMidiStop,
+	LibtimidityMidiPlaySong,
+	LibtimidityMidiStopSong,
+	LibtimidityMidiIsPlaying,
+	LibtimidityMidiSetVolume,
+};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/music/libtimidity.h	Sat Feb 17 11:12:50 2007 +0000
@@ -0,0 +1,10 @@
+/* $Id: extmidi.h 2704 2005-07-25 07:16:10Z tron $ */
+
+#ifndef MUSIC_LIBTIMIDITY_H
+#define MUSIC_LIBTIMIDITY_H
+
+#include "../hal.h"
+
+extern const HalMusicDriver _libtimidity_music_driver;
+
+#endif /* MUSIC_LIBTIMIDITY_H */
--- a/src/newgrf.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/newgrf.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -215,7 +215,8 @@
 
 	if (condition != 0) {
 		ei->unk2 &= ~0x80;
-		rvi->railveh_type = RAILVEH_SINGLEHEAD;
+		if (rvi->railveh_type == RAILVEH_WAGON)
+			rvi->railveh_type = RAILVEH_SINGLEHEAD;
 	} else {
 		ei->unk2 |= 0x80;
 		rvi->railveh_type = RAILVEH_WAGON;
--- a/src/newgrf_engine.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/newgrf_engine.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -288,7 +288,8 @@
 static byte MapAircraftMovementState(const Vehicle *v)
 {
 	const Station *st = GetStation(v->u.air.targetairport);
-	byte amdflag = GetAirport(st->airport_type)->MovingData(v->u.air.pos)->flag;
+	const AirportFTAClass *afc = st->Airport();
+	byte amdflag = afc->MovingData(v->u.air.pos)->flag;
 
 	switch (v->u.air.state) {
 		case HANGAR:
@@ -347,26 +348,11 @@
 			return AMS_TTDP_CLIMBING;
 
 		case HELITAKEOFF: // Helicopter is moving to take off position.
-			switch (st->airport_type) {
-				case AT_SMALL:
-				case AT_LARGE:
-				case AT_METROPOLITAN:
-				case AT_INTERNATIONAL:
-				case AT_COMMUTER:
-				case AT_INTERCON:
-				/* Note, Helidepot and Helistation are treated as airports as
-				 * helicopters are taking off from ground level. */
-				case AT_HELIDEPOT:
-				case AT_HELISTATION:
-					if (amdflag & AMED_HELI_RAISE) return AMS_TTDP_HELI_TAKEOFF_AIRPORT;
-					return AMS_TTDP_TO_JUNCTION;
-
-				case AT_HELIPORT:
-				case AT_OILRIG:
-					return AMS_TTDP_HELI_TAKEOFF_HELIPORT;
-
-				default:
-					return AMS_TTDP_HELI_TAKEOFF_AIRPORT;
+			if (afc->delta_z == 0) {
+				return amdflag & AMED_HELI_RAISE ?
+					AMS_TTDP_HELI_TAKEOFF_AIRPORT : AMS_TTDP_TO_JUNCTION;
+			} else {
+				return AMS_TTDP_HELI_TAKEOFF_HELIPORT;
 			}
 
 		case FLYING:
@@ -383,18 +369,11 @@
 		case HELILANDING:
 		case HELIENDLANDING: // Helicoptor is decending.
 			if (amdflag & AMED_HELI_LOWER) {
-				switch (st->airport_type) {
-					case AT_HELIPORT:
-					case AT_OILRIG:
-						return AMS_TTDP_HELI_LAND_HELIPORT;
-
-					default:
-						/* Note, Helidepot and Helistation are treated as airports as
-						 * helicopters are landing at ground level. */
-						return AMS_TTDP_HELI_LAND_AIRPORT;
-				}
+				return afc->delta_z == 0 ?
+					AMS_TTDP_HELI_LAND_AIRPORT : AMS_TTDP_HELI_LAND_HELIPORT;
+			} else {
+				return AMS_TTDP_FLIGHT_TO_TOWER;
 			}
-			return AMS_TTDP_FLIGHT_TO_TOWER;
 
 		default:
 			return AMS_TTDP_HANGAR;
@@ -1031,7 +1010,7 @@
 			 * i.e.), so we give them all the NEW_CARGO triggered
 			 * vehicle's portion of random bits. */
 			assert(first);
-			DoTriggerVehicle(GetFirstVehicleInChain(v), VEHICLE_TRIGGER_ANY_NEW_CARGO, new_random_bits, false);
+			DoTriggerVehicle((v->type == VEH_Train) ? GetFirstVehicleInChain(v) : v, VEHICLE_TRIGGER_ANY_NEW_CARGO, new_random_bits, false);
 			break;
 
 		case VEHICLE_TRIGGER_DEPOT:
--- a/src/npf.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/npf.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -279,6 +279,12 @@
 			if (IsLevelCrossing(tile)) cost += _patches.npf_crossing_penalty;
 			break;
 
+		case MP_STATION:
+			cost = NPF_TILE_LENGTH;
+			/* Increase the cost for drive-through road stops */
+			if (IsDriveThroughStopTile(tile)) cost += _patches.npf_road_drive_through_penalty;
+			break;
+
 		default:
 			break;
 	}
@@ -453,7 +459,7 @@
 	if (IsTileType(tile, MP_RAILWAY) ||           /* Rail tile (also rail depot) */
 			IsRailwayStationTile(tile) ||               /* Rail station tile */
 			IsTileDepotType(tile, TRANSPORT_ROAD) ||  /* Road depot tile */
-			IsRoadStopTile(tile) ||                /* Road station tile */
+			IsStandardRoadStopTile(tile) || /* Road station tile (but not drive-through stops) */
 			IsTileDepotType(tile, TRANSPORT_WATER)) { /* Water depot tile */
 		return IsTileOwner(tile, owner); /* You need to own these tiles entirely to use them */
 	}
@@ -529,8 +535,8 @@
 	} else if (IsBridgeTile(src_tile) && GetBridgeRampDirection(src_tile) == src_exitdir) {
 		dst_tile = GetOtherBridgeEnd(src_tile);
 		override_dst_check = true;
-	} else if (type != TRANSPORT_WATER && (IsRoadStopTile(src_tile) || IsTileDepotType(src_tile, type))) {
-		/* This is a road station or a train or road depot. We can enter and exit
+	} else if (type != TRANSPORT_WATER && (IsStandardRoadStopTile(src_tile) || IsTileDepotType(src_tile, type))) {
+		/* This is a road station (non drive-through) or a train or road depot. We can enter and exit
 		 * those from one side only. Trackdirs don't support that (yet), so we'll
 		 * do this here. */
 
@@ -599,7 +605,7 @@
 	}
 
 	/* Determine available tracks */
-	if (type != TRANSPORT_WATER && (IsRoadStopTile(dst_tile) || IsTileDepotType(dst_tile, type))){
+	if (type != TRANSPORT_WATER && (IsStandardRoadStopTile(dst_tile) || IsTileDepotType(dst_tile, type))){
 		/* Road stations and road and train depots return 0 on GTTS, so we have to do this by hand... */
 		DiagDirection exitdir;
 		if (IsRoadStopTile(dst_tile)) {
--- a/src/oldloader.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/oldloader.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -387,7 +387,7 @@
 	and 1 becomes 2. The rest of the values are okay */
 	if (_old_vehicle_multiplier < 2) _old_vehicle_multiplier++;
 
-	/* TTDPatch incraeses the Vehicle-part in the middle of the game,
+	/* TTDPatch increases the Vehicle-part in the middle of the game,
 	so if the multipler is anything else but 1, the assert fails..
 	bump the assert value so it doesn't!
 	(1 multipler == 850 vehicles
@@ -401,9 +401,9 @@
 	for (i = 0;       i < 17;      i++) _old_map3[i] = 0;
 	for (i = 0x1FE00; i < 0x20000; i++) _old_map3[i] = 0;
 
-	if (_new_ttdpatch_format) DEBUG(oldloader, 1, "Found TTDPatch game");
+	if (_new_ttdpatch_format) DEBUG(oldloader, 2, "Found TTDPatch game");
 
-	DEBUG(oldloader, 1, "Vehicle-multiplier is set to %d (%d vehicles)", _old_vehicle_multiplier, _old_vehicle_multiplier * 850);
+	DEBUG(oldloader, 3, "Vehicle-multiplier is set to %d (%d vehicles)", _old_vehicle_multiplier, _old_vehicle_multiplier * 850);
 }
 
 static const OldChunks town_chunk[] = {
@@ -1061,19 +1061,22 @@
 	uint temp = ls->total_read;
 	bool res;
 
+	/* We changed the offset of the vehicle types, so fix it
+	 * Basically v->type -= 0x10; would suffice, but play safely */
 	switch (v->type) {
-		case VEH_Train:    res = LoadChunk(ls, &v->u.rail,     vehicle_train_chunk);    break;
-		case VEH_Road:     res = LoadChunk(ls, &v->u.road,     vehicle_road_chunk);     break;
-		case VEH_Ship:     res = LoadChunk(ls, &v->u.ship,     vehicle_ship_chunk);     break;
-		case VEH_Aircraft: res = LoadChunk(ls, &v->u.air,      vehicle_air_chunk);      break;
-		case VEH_Special:  res = LoadChunk(ls, &v->u.special,  vehicle_special_chunk);  break;
-		case VEH_Disaster: res = LoadChunk(ls, &v->u.disaster, vehicle_disaster_chunk); break;
-		default:           res = LoadChunk(ls, NULL,           vehicle_empty_chunk);    break;
+		default: NOT_REACHED();
+		case 0x00 /*VEH_Invalid */: v->type = VEH_Invalid;  res = LoadChunk(ls, NULL,           vehicle_empty_chunk);    break;
+		case 0x10 /*VEH_Train   */: v->type = VEH_Train;    res = LoadChunk(ls, &v->u.rail,     vehicle_train_chunk);    break;
+		case 0x11 /*VEH_Road    */: v->type = VEH_Road;     res = LoadChunk(ls, &v->u.road,     vehicle_road_chunk);     break;
+		case 0x12 /*VEH_Ship    */: v->type = VEH_Ship;     res = LoadChunk(ls, &v->u.ship,     vehicle_ship_chunk);     break;
+		case 0x13 /*VEH_Aircraft*/: v->type = VEH_Aircraft; res = LoadChunk(ls, &v->u.air,      vehicle_air_chunk);      break;
+		case 0x14 /*VEH_Special */: v->type = VEH_Special;  res = LoadChunk(ls, &v->u.special,  vehicle_special_chunk);  break;
+		case 0x15 /*VEH_Disaster*/: v->type = VEH_Disaster; res = LoadChunk(ls, &v->u.disaster, vehicle_disaster_chunk); break;
 	}
 
 	/* This chunk size should always be 10 bytes */
 	if (ls->total_read - temp != 10) {
-		DEBUG(oldloader, 4, "Assert failed in Vehicle");
+		DEBUG(oldloader, 0, "Assert failed in VehicleUnion: invalid chunk size");
 		return false;
 	}
 
@@ -1198,8 +1201,7 @@
 			default:   v->spritenum >>= 1; break;
 		}
 
-		if (_old_next_ptr != 0xFFFF)
-			v->next = GetVehicle(_old_next_ptr);
+		if (_old_next_ptr != 0xFFFF) v->next = GetVehicle(_old_next_ptr);
 
 		v->string_id = RemapOldStringID(_old_string_id);
 
@@ -1467,13 +1469,13 @@
 	/* The first 49 is the name of the game + checksum, skip it */
 	fseek(ls->file, HEADER_SIZE, SEEK_SET);
 
-	DEBUG(oldloader, 4, "Reading main chunk...");
+	DEBUG(oldloader, 3, "Reading main chunk...");
 	/* Load the biggest chunk */
 	if (!LoadChunk(ls, NULL, main_chunk)) {
 		DEBUG(oldloader, 0, "Loading failed");
 		return false;
 	}
-	DEBUG(oldloader, 4, "Done, converting game data...");
+	DEBUG(oldloader, 3, "Done, converting game data...");
 
 	/* Fix some general stuff */
 	_opt.landscape = _opt.landscape & 0xF;
@@ -1488,16 +1490,29 @@
 	}
 
 	for (i = 0; i < OLD_MAP_SIZE; i ++) {
-		if (IsTileType(i, MP_RAILWAY)) {
-			/* We save presignals different from TTDPatch, convert them */
-			if (GetRailTileType(i) == RAIL_TILE_SIGNALS) {
-				/* This byte is always zero in TTD for this type of tile */
-				if (_m[i].m4) /* Convert the presignals to our own format */
-					_m[i].m4 = (_m[i].m4 >> 1) & 7;
-			}
-			/* TTDPatch stores PBS things in L6 and all elsewhere; so we'll just
-			 * clear it for ourselves and let OTTD's rebuild PBS itself */
-			_m[i].m4 &= 0xF; /* Only keep the lower four bits; upper four is PBS */
+		switch (GetTileType(i)) {
+			case MP_RAILWAY:
+				/* We save presignals different from TTDPatch, convert them */
+				if (GetRailTileType(i) == RAIL_TILE_SIGNALS) {
+					/* This byte is always zero in TTD for this type of tile */
+					if (_m[i].m4) /* Convert the presignals to our own format */
+						_m[i].m4 = (_m[i].m4 >> 1) & 7;
+				}
+				/* TTDPatch stores PBS things in L6 and all elsewhere; so we'll just
+				 * clear it for ourselves and let OTTD's rebuild PBS itself */
+				_m[i].m4 &= 0xF; /* Only keep the lower four bits; upper four is PBS */
+				break;
+			case MP_WATER: {
+				/* TTDPatch has all tiles touching water as coast (water)-type, we don't.
+				 * This is only true from a certain TTDP version, but there is no harm
+				 * in checking all the time */
+				Slope s = GetTileSlope(i, NULL);
+				if (s == SLOPE_ENW || s == SLOPE_NWS || s == SLOPE_SEN || s == SLOPE_WSE || IsSteepSlope(s)) {
+					SetTileType(i, MP_CLEAR);
+					SetTileOwner(i, OWNER_NONE);
+				}
+			} break;
+			default: break;
 		}
 	}
 
@@ -1511,7 +1526,7 @@
 	/* We have a new difficulty setting */
 	_opt.diff.town_council_tolerance = clamp(_opt.diff_level, 0, 2);
 
-	DEBUG(oldloader, 4, "Finished converting game data");
+	DEBUG(oldloader, 3, "Finished converting game data");
 	DEBUG(oldloader, 1, "TTD(Patch) savegame successfully converted");
 
 	return true;
@@ -1521,7 +1536,7 @@
 {
 	LoadgameState ls;
 
-	DEBUG(oldloader, 4, "Trying to load a TTD(Patch) savegame");
+	DEBUG(oldloader, 3, "Trying to load a TTD(Patch) savegame");
 
 	InitLoading(&ls);
 
--- a/src/order_cmd.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/order_cmd.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -259,9 +259,9 @@
 				if (!IsValidStationID(new_order.dest)) return CMD_ERROR;
 				st = GetStation(new_order.dest);
 
-				if ((st->airport_type != AT_OILRIG && !CheckOwnership(st->owner)) ||
+				if (!CheckOwnership(st->owner) ||
 						!(st->facilities & FACIL_AIRPORT) ||
-						GetAirport(st->airport_type)->nof_depots == 0) {
+						st->Airport()->nof_depots == 0) {
 					return CMD_ERROR;
 				}
 			} else {
--- a/src/pathfind.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/pathfind.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -296,7 +296,7 @@
 	if (tpf->tracktype == TRANSPORT_ROAD) {
 		// road stops and depots now have a track (r4419)
 		// don't enter road stop from the back
-		if (IsRoadStopTile(tile) && ReverseDiagDir(GetRoadStopDir(tile)) != direction) return;
+		if (IsStandardRoadStopTile(tile) && ReverseDiagDir(GetRoadStopDir(tile)) != direction) return;
 		// don't enter road depot from the back
 		if (IsTileDepotType(tile, TRANSPORT_ROAD) && ReverseDiagDir(GetRoadDepotDirection(tile)) != direction) return;
 	}
--- a/src/road_gui.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/road_gui.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -16,6 +16,7 @@
 #include "sound.h"
 #include "command.h"
 #include "variables.h"
+#include "station_map.h"
 //needed for catchments
 #include "station.h"
 
@@ -83,7 +84,7 @@
 	if (success) {
 		SndPlayTileFx(SND_1F_SPLAT, tile);
 		ResetObjectToPlace();
-		BuildRoadOutsideStation(tile, (DiagDirection)p1);
+		if (!HASBIT(p2, 1)) BuildRoadOutsideStation(tile, (DiagDirection)p1);
 	}
 }
 
@@ -92,14 +93,33 @@
 	DoCommandP(tile, _road_depot_orientation, 0, CcRoadDepot, CMD_BUILD_ROAD_DEPOT | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1807_CAN_T_BUILD_ROAD_VEHICLE));
 }
 
+static void PlaceRoadStop(TileIndex tile, uint32 p2, uint32 cmd)
+{
+	uint32 p1 = _road_station_picker_orientation;
+
+	if (p1 >= DIAGDIR_END) {
+		SETBIT(p2, 1); // It's a drive-through stop
+		p1 -= DIAGDIR_END; // Adjust picker result to actual direction
+	}
+	DoCommandP(tile, p1, p2, CcRoadDepot, cmd);
+}
+
 static void PlaceRoad_BusStation(TileIndex tile)
 {
-	DoCommandP(tile, _road_station_picker_orientation, RoadStop::BUS, CcRoadDepot, CMD_BUILD_ROAD_STOP | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1808_CAN_T_BUILD_BUS_STATION));
+	if (_remove_button_clicked) {
+		DoCommandP(tile, 0, RoadStop::BUS, CcPlaySound1D, CMD_REMOVE_ROAD_STOP | CMD_MSG(STR_CAN_T_REMOVE_BUS_STATION));
+	} else {
+		PlaceRoadStop(tile, RoadStop::BUS, CMD_BUILD_ROAD_STOP | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1808_CAN_T_BUILD_BUS_STATION));
+	}
 }
 
 static void PlaceRoad_TruckStation(TileIndex tile)
 {
-	DoCommandP(tile, _road_station_picker_orientation, RoadStop::TRUCK, CcRoadDepot, CMD_BUILD_ROAD_STOP | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1809_CAN_T_BUILD_TRUCK_STATION));
+	if (_remove_button_clicked) {
+		DoCommandP(tile, 0, RoadStop::TRUCK, CcPlaySound1D, CMD_REMOVE_ROAD_STOP | CMD_MSG(STR_CAN_T_REMOVE_TRUCK_STATION));
+	} else {
+		PlaceRoadStop(tile, RoadStop::TRUCK, CMD_BUILD_ROAD_STOP | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1809_CAN_T_BUILD_TRUCK_STATION));
+	}
 }
 
 static void PlaceRoad_DemolishArea(TileIndex tile)
@@ -195,7 +215,7 @@
 	case WE_CREATE: w->DisableWidget(RTW_REMOVE); break;
 
 	case WE_PAINT:
-		if (w->IsWidgetLowered(RTW_ROAD_X) || w->IsWidgetLowered(RTW_ROAD_Y)) {
+		if (w->IsWidgetLowered(RTW_ROAD_X) || w->IsWidgetLowered(RTW_ROAD_Y) || w->IsWidgetLowered(RTW_BUS_STATION) || w->IsWidgetLowered(RTW_TRUCK_STATION)) {
 			w->EnableWidget(RTW_REMOVE);
 		}
 		w->DrawWidgets();
@@ -428,7 +448,7 @@
 	switch (e->event) {
 	case WE_CREATE:
 		w->LowerWidget(_road_station_picker_orientation + 3);
-		w->LowerWidget(_station_show_coverage + 7);
+		w->LowerWidget(_station_show_coverage + 9);
 		break;
 
 	case WE_PAINT: {
@@ -445,13 +465,18 @@
 			SetTileSelectSize(1, 1);
 		}
 
-		image = (w->window_class == WC_BUS_STATION) ? 0x47 : 0x43;
+		image = (w->window_class == WC_BUS_STATION) ? GFX_BUS_BASE : GFX_TRUCK_BASE;
 
 		StationPickerDrawSprite(103, 35, RAILTYPE_BEGIN, image);
 		StationPickerDrawSprite(103, 85, RAILTYPE_BEGIN, image+1);
 		StationPickerDrawSprite(35, 85, RAILTYPE_BEGIN, image+2);
 		StationPickerDrawSprite(35, 35, RAILTYPE_BEGIN, image+3);
 
+		image = (w->window_class == WC_BUS_STATION) ? GFX_BUS_BASE_EXT : GFX_TRUCK_BASE_EXT;
+
+		StationPickerDrawSprite(171, 35, RAILTYPE_BEGIN, image);
+		StationPickerDrawSprite(171, 85, RAILTYPE_BEGIN, image + 1);
+
 		DrawStationCoverageAreaText(2, 146,
 			((w->window_class == WC_BUS_STATION) ? (1<<CT_PASSENGERS) : ~(1<<CT_PASSENGERS)),
 			3);
@@ -460,17 +485,17 @@
 
 	case WE_CLICK: {
 		switch (e->we.click.widget) {
-		case 3: case 4: case 5: case 6:
+		case 3: case 4: case 5: case 6: case 7: case 8:
 			w->RaiseWidget(_road_station_picker_orientation + 3);
 			_road_station_picker_orientation = (DiagDirection)(e->we.click.widget - 3);
 			w->LowerWidget(_road_station_picker_orientation + 3);
 			SndPlayFx(SND_15_BEEP);
 			w->SetDirty();
 			break;
-		case 7: case 8:
-			w->RaiseWidget(_station_show_coverage + 7);
-			_station_show_coverage = (e->we.click.widget != 7);
-			w->LowerWidget(_station_show_coverage + 7);
+		case 9: case 10:
+			w->RaiseWidget(_station_show_coverage + 9);
+			_station_show_coverage = (e->we.click.widget != 9);
+			w->LowerWidget(_station_show_coverage + 9);
 			SndPlayFx(SND_15_BEEP);
 			w->SetDirty();
 			break;
@@ -494,12 +519,14 @@
 
 static const Widget _bus_station_picker_widgets[] = {
 {   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                         STR_018B_CLOSE_WINDOW},
-{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   139,     0,    13, STR_3042_BUS_STATION_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS},
-{      WWT_PANEL,   RESIZE_NONE,     7,     0,   139,    14,   176, 0x0,                              STR_NULL},
+{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   206,     0,    13, STR_3042_BUS_STATION_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS},
+{      WWT_PANEL,   RESIZE_NONE,     7,     0,   206,    14,   176, 0x0,                              STR_NULL},
 {      WWT_PANEL,   RESIZE_NONE,    14,    71,   136,    17,    66, 0x0,                              STR_3051_SELECT_BUS_STATION_ORIENTATION},
 {      WWT_PANEL,   RESIZE_NONE,    14,    71,   136,    69,   118, 0x0,                              STR_3051_SELECT_BUS_STATION_ORIENTATION},
 {      WWT_PANEL,   RESIZE_NONE,    14,     3,    68,    69,   118, 0x0,                              STR_3051_SELECT_BUS_STATION_ORIENTATION},
 {      WWT_PANEL,   RESIZE_NONE,    14,     3,    68,    17,    66, 0x0,                              STR_3051_SELECT_BUS_STATION_ORIENTATION},
+{      WWT_PANEL,   RESIZE_NONE,    14,   139,   204,    17,    66, 0x0,                              STR_3051_SELECT_BUS_STATION_ORIENTATION},
+{      WWT_PANEL,   RESIZE_NONE,    14,   139,   204,    69,   118, 0x0,                              STR_3051_SELECT_BUS_STATION_ORIENTATION},
 {    WWT_TEXTBTN,   RESIZE_NONE,    14,    10,    69,   133,   144, STR_02DB_OFF,                     STR_3065_DON_T_HIGHLIGHT_COVERAGE},
 {    WWT_TEXTBTN,   RESIZE_NONE,    14,    70,   129,   133,   144, STR_02DA_ON,                      STR_3064_HIGHLIGHT_COVERAGE_AREA},
 {      WWT_LABEL,   RESIZE_NONE,     7,     0,   139,   120,   133, STR_3066_COVERAGE_AREA_HIGHLIGHT, STR_NULL},
@@ -507,7 +534,7 @@
 };
 
 static const WindowDesc _bus_station_picker_desc = {
-	WDP_AUTO, WDP_AUTO, 140, 177,
+	WDP_AUTO, WDP_AUTO, 207, 177,
 	WC_BUS_STATION, WC_BUILD_TOOLBAR,
 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
 	_bus_station_picker_widgets,
@@ -521,12 +548,14 @@
 
 static const Widget _truck_station_picker_widgets[] = {
 {   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                         STR_018B_CLOSE_WINDOW},
-{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   139,     0,    13, STR_3043_TRUCK_STATION_ORIENT,    STR_018C_WINDOW_TITLE_DRAG_THIS},
-{      WWT_PANEL,   RESIZE_NONE,     7,     0,   139,    14,   176, 0x0,                              STR_NULL},
+{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   206,     0,    13, STR_3043_TRUCK_STATION_ORIENT,    STR_018C_WINDOW_TITLE_DRAG_THIS},
+{      WWT_PANEL,   RESIZE_NONE,     7,     0,   206,    14,   176, 0x0,                              STR_NULL},
 {      WWT_PANEL,   RESIZE_NONE,    14,    71,   136,    17,    66, 0x0,                              STR_3052_SELECT_TRUCK_LOADING_BAY},
 {      WWT_PANEL,   RESIZE_NONE,    14,    71,   136,    69,   118, 0x0,                              STR_3052_SELECT_TRUCK_LOADING_BAY},
 {      WWT_PANEL,   RESIZE_NONE,    14,     3,    68,    69,   118, 0x0,                              STR_3052_SELECT_TRUCK_LOADING_BAY},
 {      WWT_PANEL,   RESIZE_NONE,    14,     3,    68,    17,    66, 0x0,                              STR_3052_SELECT_TRUCK_LOADING_BAY},
+{      WWT_PANEL,   RESIZE_NONE,    14,   139,   204,    17,    66, 0x0,                              STR_3052_SELECT_TRUCK_LOADING_BAY},
+{      WWT_PANEL,   RESIZE_NONE,    14,   139,   204,    69,   118, 0x0,                              STR_3052_SELECT_TRUCK_LOADING_BAY},
 {    WWT_TEXTBTN,   RESIZE_NONE,    14,    10,    69,   133,   144, STR_02DB_OFF,                     STR_3065_DON_T_HIGHLIGHT_COVERAGE},
 {    WWT_TEXTBTN,   RESIZE_NONE,    14,    70,   129,   133,   144, STR_02DA_ON,                      STR_3064_HIGHLIGHT_COVERAGE_AREA},
 {      WWT_LABEL,   RESIZE_NONE,     7,     0,   139,   120,   133, STR_3066_COVERAGE_AREA_HIGHLIGHT, STR_NULL},
@@ -534,7 +563,7 @@
 };
 
 static const WindowDesc _truck_station_picker_desc = {
-	WDP_AUTO, WDP_AUTO, 140, 177,
+	WDP_AUTO, WDP_AUTO, 207, 177,
 	WC_TRUCK_STATION, WC_BUILD_TOOLBAR,
 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
 	_truck_station_picker_widgets,
--- a/src/road_map.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/road_map.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -24,6 +24,7 @@
 
 		case MP_STATION:
 			if (!IsRoadStopTile(tile)) return ROAD_NONE;
+			if (IsDriveThroughStopTile(tile)) return (GetRoadStopDir(tile) == DIAGDIR_NE) ? ROAD_X : ROAD_Y;
 			return DiagDirToRoadBits(GetRoadStopDir(tile));
 
 		case MP_TUNNELBRIDGE:
@@ -45,7 +46,7 @@
 	uint32 r;
 
 	// Don't allow local authorities to build roads through road depots or road stops.
-	if ((IsTileType(tile, MP_STREET) && IsTileDepotType(tile, TRANSPORT_ROAD)) || IsTileType(tile, MP_STATION)) {
+	if ((IsTileType(tile, MP_STREET) && IsTileDepotType(tile, TRANSPORT_ROAD)) || (IsTileType(tile, MP_STATION) && !IsDriveThroughStopTile(tile))) {
 		return TRACK_BIT_NONE;
 	}
 
--- a/src/roadveh_cmd.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/roadveh_cmd.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -1080,7 +1080,8 @@
 			/* Road depot owned by another player or with the wrong orientation */
 			trackdirs = TRACKDIR_BIT_NONE;
 		}
-	} else if (IsTileType(tile, MP_STATION) && IsRoadStopTile(tile)) {
+	} else if (IsTileType(tile, MP_STATION) && IsStandardRoadStopTile(tile)) {
+		/* Standard road stop (drive-through stops are treated as normal road) */
 		if (!IsTileOwner(tile, v->owner) || GetRoadStopDir(tile) == enterdir) {
 			/* different station owner or wrong orientation */
 			trackdirs = TRACKDIR_BIT_NONE;
@@ -1093,7 +1094,7 @@
 				trackdirs = TRACKDIR_BIT_NONE;
 			} else {
 				/* Proper station type, check if there is free loading bay */
-				if (!_patches.roadveh_queue &&
+				if (!_patches.roadveh_queue &&  IsStandardRoadStopTile(tile) &&
 						!GetRoadStopByTile(tile, rstype)->HasFreeBay()) {
 					/* Station is full and RV queuing is off */
 					trackdirs = TRACKDIR_BIT_NONE;
@@ -1167,7 +1168,8 @@
 				goto do_it;
 			}
 		} else if (IsTileType(desttile, MP_STATION)) {
-			if (IsRoadStop(desttile)) {
+			/* For drive-through stops we can head for the actual station tile */
+			if (IsStandardRoadStopTile(desttile)) {
 				dir = GetRoadStopDir(desttile);
 do_it:;
 				/* When we are heading for a depot or station, we just
@@ -1242,9 +1244,11 @@
 	/* Start frames for when a vehicle enters a tile/changes its state.
 	 * The start frame is different for vehicles that turned around or
 	 * are leaving the depot as the do not start at the edge of the tile */
-	RVC_DEFAULT_START_FRAME     = 0,
-	RVC_TURN_AROUND_START_FRAME = 1,
-	RVC_DEPOT_START_FRAME       = 6
+	RVC_DEFAULT_START_FRAME      = 0,
+	RVC_TURN_AROUND_START_FRAME  = 1,
+	RVC_DEPOT_START_FRAME        = 6,
+	/* Stop frame for a vehicle in a drive-through stop */
+	RVC_DRIVE_THROUGH_STOP_FRAME = 7
 };
 
 typedef struct RoadDriveEntry {
@@ -1376,8 +1380,12 @@
 		return;
 	}
 
-	/* Get move position data for next frame */
-	rd = _road_drive_data[(v->u.road.state + (_opt.road_side << RVS_DRIVE_SIDE)) ^ v->u.road.overtaking][v->u.road.frame + 1];
+	/* Get move position data for next frame.
+	 * For a drive-through road stop use 'straight road' move data.
+	 * In this case v->u.road.state is masked to give the road stop entry direction. */
+	rd = _road_drive_data[(
+		(HASBIT(v->u.road.state, RVS_IN_DT_ROAD_STOP) ? v->u.road.state & RVSB_ROAD_STOP_TRACKDIR_MASK : v->u.road.state) +
+		(_opt.road_side << RVS_DRIVE_SIDE)) ^ v->u.road.overtaking][v->u.road.frame + 1];
 
 	if (rd.x & RDE_NEXT_TILE) {
 		TileIndex tile = v->tile + TileOffsByDiagDir(rd.x & 3);
@@ -1417,8 +1425,8 @@
 			goto again;
 		}
 
-		if (IS_BYTE_INSIDE(v->u.road.state, RVSB_IN_ROAD_STOP, RVSB_IN_ROAD_STOP_END) && IsTileType(v->tile, MP_STATION)) {
-			if (IsReversingRoadTrackdir(dir)) {
+		if (IS_BYTE_INSIDE(v->u.road.state, RVSB_IN_ROAD_STOP, RVSB_IN_DT_ROAD_STOP_END) && IsTileType(v->tile, MP_STATION)) {
+			if (IsReversingRoadTrackdir(dir) && IS_BYTE_INSIDE(v->u.road.state, RVSB_IN_ROAD_STOP, RVSB_IN_ROAD_STOP_END)) {
 				/* New direction is trying to turn vehicle around.
 				 * We can't turn at the exit of a road stop so wait.*/
 				v->cur_speed = 0;
@@ -1427,9 +1435,13 @@
 			if (IsRoadStop(v->tile)) {
 				RoadStop *rs = GetRoadStopByTile(v->tile, GetRoadStopType(v->tile));
 
-				/* Vehicle is leaving a road stop tile, mark bay as free */
-				rs->FreeBay(HASBIT(v->u.road.state, RVS_USING_SECOND_BAY));
-				rs->SetEntranceBusy(false);
+				/* Vehicle is leaving a road stop tile, mark bay as free
+				 * For drive-through stops, only do it if the vehicle stopped here */
+				if (IsStandardRoadStopTile(v->tile) || HASBIT(v->u.road.state, RVS_IS_STOPPING)) {
+					rs->FreeBay(HASBIT(v->u.road.state, RVS_USING_SECOND_BAY));
+					CLRBIT(v->u.road.state, RVS_IS_STOPPING);
+				}
+				if (IsStandardRoadStopTile(v->tile)) rs->SetEntranceBusy(false);
 			}
 		}
 
@@ -1523,8 +1535,18 @@
 		}
 	}
 
-	if (v->u.road.state >= RVSB_IN_ROAD_STOP &&
-			_road_veh_data_1[v->u.road.state - RVSB_IN_ROAD_STOP + (_opt.road_side << RVS_DRIVE_SIDE)] == v->u.road.frame) {
+	/* If the vehicle is in a normal road stop and the frame equals the stop frame OR
+	 * if the vehicle is in a drive-through road stop and this is the destination station
+	 * and it's the correct type of stop (bus or truck) and the frame equals the stop frame...
+	 * (the station test and stop type test ensure that other vehicles, using the road stop as
+	 * a through route, do not stop) */
+	if ((IS_BYTE_INSIDE(v->u.road.state, RVSB_IN_ROAD_STOP, RVSB_IN_ROAD_STOP_END) &&
+			_road_veh_data_1[v->u.road.state - RVSB_IN_ROAD_STOP + (_opt.road_side << RVS_DRIVE_SIDE)] == v->u.road.frame) ||
+			(IS_BYTE_INSIDE(v->u.road.state, RVSB_IN_DT_ROAD_STOP, RVSB_IN_DT_ROAD_STOP_END) &&
+			v->current_order.dest == GetStationIndex(v->tile) &&
+			GetRoadStopType(v->tile) == ((v->cargo_type == CT_PASSENGERS) ? RoadStop::BUS : RoadStop::TRUCK) &&
+			v->u.road.frame == RVC_DRIVE_THROUGH_STOP_FRAME)) {
+
 		RoadStop *rs = GetRoadStopByTile(v->tile, GetRoadStopType(v->tile));
 		Station* st = GetStationByTile(v->tile);
 
@@ -1536,6 +1558,31 @@
 			/* Vehicle has arrived at a bay in a road stop */
 			Order old_order;
 
+			if (IsDriveThroughStopTile(v->tile)) {
+				TileIndex next_tile = TILE_ADD(v->tile, TileOffsByDir(v->direction));
+				RoadStop::Type type = (v->cargo_type == CT_PASSENGERS) ? RoadStop::BUS : RoadStop::TRUCK;
+
+				assert(HASBIT(v->u.road.state, RVS_IS_STOPPING));
+
+				/* Check if next inline bay is free */
+				if (IsDriveThroughStopTile(next_tile) && (GetRoadStopType(next_tile) == type)) {
+					RoadStop *rs_n = GetRoadStopByTile(next_tile, type);
+
+					if (rs_n->IsFreeBay(HASBIT(v->u.road.state, RVS_USING_SECOND_BAY))) {
+						/* Bay in next stop along is free - use it */
+						ClearSlot(v);
+						rs_n->num_vehicles++;
+						v->u.road.slot = rs_n;
+						v->dest_tile = rs_n->xy;
+						v->u.road.slot_age = 14;
+
+						v->u.road.frame++;
+						RoadZPosAffectSpeed(v, SetRoadVehPosition(v, x, y));
+						return;
+					}
+				}
+			}
+
 			rs->SetEntranceBusy(false);
 
 			v->last_station_visited = GetStationIndex(v->tile);
@@ -1573,7 +1620,7 @@
 			ClearSlot(v);
 		}
 
-		rs->SetEntranceBusy(true);
+		if (IsStandardRoadStopTile(v->tile)) rs->SetEntranceBusy(true);
 
 		if (rs == v->u.road.slot) {
 			/* We are leaving the correct station */
--- a/src/saveload.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/saveload.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -30,7 +30,7 @@
 #include "variables.h"
 #include <setjmp.h>
 
-extern const uint16 SAVEGAME_VERSION = 46;
+extern const uint16 SAVEGAME_VERSION = 47;
 uint16 _sl_version;       /// the major savegame version identifier
 byte   _sl_minor_version; /// the minor savegame version, DO NOT USE!
 
--- a/src/settings.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/settings.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -1340,6 +1340,7 @@
 	SDT_BOOL(Patches, serviceathelipad,        0, 0,  true,        STR_CONFIG_PATCHES_SERVICEATHELIPAD,   NULL),
 	SDT_BOOL(Patches, modified_catchment,      0, 0,  true,        STR_CONFIG_PATCHES_CATCHMENT,          NULL),
 	SDT_CONDBOOL(Patches, gradual_loading, 40, SL_MAX_VERSION, 0, 0,  true, STR_CONFIG_PATCHES_GRADUAL_LOADING,    NULL),
+	SDT_CONDBOOL(Patches, road_stop_on_town_road, 47, SL_MAX_VERSION, 0, 0, false, STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD, NULL),
 
 	/***************************************************************************/
 	/* Economy section of the GUI-configure patches window */
@@ -1431,6 +1432,8 @@
 	SDT_VAR(Patches, npf_road_curve_penalty,        SLE_UINT, 0, 0, 1,                      0, 100000, 0, STR_NULL, NULL),
 	/* This is the penalty for level crossings, for both road and rail vehicles */
 	SDT_VAR(Patches, npf_crossing_penalty,          SLE_UINT, 0, 0, (3 * NPF_TILE_LENGTH),  0, 100000, 0, STR_NULL, NULL),
+	/* This is the penalty for drive-through road, stops. */
+	SDT_CONDVAR (Patches, npf_road_drive_through_penalty, SLE_UINT, 47, SL_MAX_VERSION, 0, 0,  8 * NPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
 
 
 	// The maximum number of nodes to search
@@ -1464,6 +1467,7 @@
 	SDT_CONDVAR (Patches, yapf.road_slope_penalty                    , SLE_UINT, 33, SL_MAX_VERSION, 0, 0,  2 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
 	SDT_CONDVAR (Patches, yapf.road_curve_penalty                    , SLE_UINT, 33, SL_MAX_VERSION, 0, 0,  1 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
 	SDT_CONDVAR (Patches, yapf.road_crossing_penalty                 , SLE_UINT, 33, SL_MAX_VERSION, 0, 0,  3 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
+	SDT_CONDVAR (Patches, yapf.road_stop_penalty                     , SLE_UINT, 47, SL_MAX_VERSION, 0, 0,  8 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
 
 	/***************************************************************************/
 	/* Terrain genation related patch options */
--- a/src/settings_gui.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/settings_gui.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -599,6 +599,7 @@
 	"serviceathelipad",
 	"modified_catchment",
 	"gradual_loading",
+	"road_stop_on_town_road",
 };
 
 static const char *_patches_economy[] = {
--- a/src/station.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/station.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -502,6 +502,13 @@
 	return GB(status, 0, MAX_BAY_COUNT) != 0;
 }
 
+/** Checks whether the given bay is free in this road stop */
+bool RoadStop::IsFreeBay(uint nr) const
+{
+	assert(nr < MAX_BAY_COUNT);
+	return HASBIT(status, nr);
+}
+
 /**
  * Allocates a bay
  * @return the allocated bay number
@@ -520,6 +527,16 @@
 }
 
 /**
+ * Allocates a bay in a drive-through road stop
+ * @param nr the number of the bay to allocate
+ */
+void RoadStop::AllocateDriveThroughBay(uint nr)
+{
+	assert(nr < MAX_BAY_COUNT);
+	CLRBIT(status, nr);
+}
+
+/**
  * Frees the given bay
  * @param nr the number of the bay to free
  */
--- a/src/station.h	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/station.h	Sat Feb 17 11:12:50 2007 +0000
@@ -3,6 +3,7 @@
 #ifndef STATION_H
 #define STATION_H
 
+#include "airport.h"
 #include "player.h"
 #include "oldpool.h"
 #include "sprite.h"
@@ -66,7 +67,9 @@
 
 	/* For accessing status */
 	bool HasFreeBay() const;
+	bool IsFreeBay(uint nr) const;
 	uint AllocateBay();
+	void AllocateDriveThroughBay(uint nr);
 	void FreeBay(uint nr);
 	bool IsEntranceBusy() const;
 	void SetEntranceBusy(bool busy);
@@ -110,6 +113,12 @@
 			return type == RoadStop::BUS ? bus_stops : truck_stops;
 		}
 
+		const AirportFTAClass *Airport() const
+		{
+			assert(airport_tile != 0);
+			return GetAirport(airport_type);
+		}
+
 	TileIndex xy;
 	RoadStop *bus_stops;
 	RoadStop *truck_stops;
@@ -200,18 +209,8 @@
 	CA_NONE            =  0,
 	CA_BUS             =  3,
 	CA_TRUCK           =  3,
-	CA_AIR_OILPAD      =  3,
 	CA_TRAIN           =  4,
-	CA_AIR_HELIPORT    =  4,
-	CA_AIR_SMALL       =  4,
-	CA_AIR_LARGE       =  5,
-	CA_DOCK            =  5,
-	CA_AIR_METRO       =  6,
-	CA_AIR_INTER       =  8,
-	CA_AIR_COMMUTER    =  4,
-	CA_AIR_HELIDEPOT   =  4,
-	CA_AIR_INTERCON    = 10,
-	CA_AIR_HELISTATION =  4,
+	CA_DOCK            =  5
 } CatchmentAera;
 
 void ModifyStationRatingAround(TileIndex tile, PlayerID owner, int amount, uint radius);
--- a/src/station_cmd.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/station_cmd.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -35,6 +35,7 @@
 #include "date.h"
 #include "helpers.hpp"
 #include "misc/autoptr.hpp"
+#include "road.h"
 
 /**
  * Called if a new block is added to the station-pool
@@ -109,27 +110,13 @@
  *  radius that is available within the station */
 static uint FindCatchmentRadius(const Station* st)
 {
-	CatchmentAera ret = CA_NONE;
-
-	if (st->bus_stops != NULL)   ret = max(ret, CA_BUS);
-	if (st->truck_stops != NULL) ret = max(ret, CA_TRUCK);
-	if (st->train_tile) ret = max(ret, CA_TRAIN);
-	if (st->dock_tile)  ret = max(ret, CA_DOCK);
-
-	if (st->airport_tile) {
-		switch (st->airport_type) {
-			case AT_OILRIG:        ret = max(ret, CA_AIR_OILPAD);   break;
-			case AT_SMALL:         ret = max(ret, CA_AIR_SMALL);    break;
-			case AT_HELIPORT:      ret = max(ret, CA_AIR_HELIPORT); break;
-			case AT_LARGE:         ret = max(ret, CA_AIR_LARGE);    break;
-			case AT_METROPOLITAN:  ret = max(ret, CA_AIR_METRO);    break;
-			case AT_INTERNATIONAL: ret = max(ret, CA_AIR_INTER);    break;
-			case AT_COMMUTER:      ret = max(ret, CA_AIR_COMMUTER); break;
-			case AT_HELIDEPOT:     ret = max(ret, CA_AIR_HELIDEPOT); break;
-			case AT_INTERCON:      ret = max(ret, CA_AIR_INTERCON); break;
-			case AT_HELISTATION:   ret = max(ret, CA_AIR_HELISTATION); break;
-		}
-	}
+	uint ret = CA_NONE;
+
+	if (st->bus_stops   != NULL) ret = max<uint>(ret, CA_BUS);
+	if (st->truck_stops != NULL) ret = max<uint>(ret, CA_TRUCK);
+	if (st->train_tile  != 0)    ret = max<uint>(ret, CA_TRAIN);
+	if (st->dock_tile   != 0)    ret = max<uint>(ret, CA_DOCK);
+	if (st->airport_tile)        ret = max<uint>(ret, st->Airport()->catchment);
 
 	return ret;
 }
@@ -556,7 +543,7 @@
 	}
 
 	if (st->airport_tile != 0) {
-		const AirportFTAClass* afc = GetAirport(st->airport_type);
+		const AirportFTAClass* afc = st->Airport();
 
 		MergePoint(&rect, st->airport_tile);
 		MergePoint(&rect,
@@ -1247,7 +1234,8 @@
 /** Build a bus or truck stop
  * @param tile tile to build the stop at
  * @param p1 entrance direction (DiagDirection)
- * @param p2 0 for Bus stops, 1 for truck stops
+ * @param p2 bit 0: 0 for Bus stops, 1 for truck stops
+ *           bit 1: 0 for normal, 1 for drive-through
  */
 int32 CmdBuildRoadStop(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
@@ -1255,19 +1243,32 @@
 	RoadStop *road_stop;
 	int32 cost;
 	int32 ret;
-	bool type = !!p2;
+	bool type = HASBIT(p2, 0);
+	bool is_drive_through = HASBIT(p2, 1);
+	bool build_over_road  = is_drive_through && IsTileType(tile, MP_STREET) && GetRoadTileType(tile) == ROAD_TILE_NORMAL;
+	Owner cur_owner = _current_player;
 
 	/* Saveguard the parameters */
 	if (!IsValidDiagDirection((DiagDirection)p1)) return CMD_ERROR;
+	/* If it is a drive-through stop check for valid axis */
+	if (is_drive_through && !IsValidAxis((Axis)p1)) return CMD_ERROR;
+	/* Road bits in the wrong direction */
+	if (build_over_road && (GetRoadBits(tile) & ((Axis)p1 == AXIS_X ? ROAD_Y : ROAD_X)) != 0) return CMD_ERROR;
+	/* Not allowed to build over this road */
+	if (build_over_road && !IsTileOwner(tile, _current_player) && !(IsTileOwner(tile, OWNER_TOWN) && _patches.road_stop_on_town_road)) return CMD_ERROR;
 
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 
 	if (!(flags & DC_NO_TOWN_RATING) && !CheckIfAuthorityAllows(tile))
 		return CMD_ERROR;
 
-	ret = CheckFlatLandBelow(tile, 1, 1, flags, 1 << p1, NULL);
+	if (build_over_road) flags ^= DC_AUTO;
+
+	if (build_over_road && IsTileOwner(tile, OWNER_TOWN)) _current_player = OWNER_TOWN;
+	ret = CheckFlatLandBelow(tile, 1, 1, flags, is_drive_through ? 5 << p1 : 1 << p1, NULL);
+	_current_player = cur_owner;
 	if (CmdFailed(ret)) return ret;
-	cost = ret;
+	cost = build_over_road ? 0 : ret; // Don't add cost of clearing road when overbuilding
 
 	st = GetStationAround(tile, 1, 1, INVALID_STATION);
 	if (st == CHECK_STATIONS_ERR) return CMD_ERROR;
@@ -1333,7 +1334,8 @@
 
 		st->rect.BeforeAddTile(tile, StationRect::ADD_TRY);
 
-		MakeRoadStop(tile, st->owner, st->index, type ? RoadStop::TRUCK : RoadStop::BUS, (DiagDirection)p1);
+		MakeRoadStop(tile, st->owner, st->index, type ? RoadStop::TRUCK : RoadStop::BUS, is_drive_through, (DiagDirection)p1);
+		if (is_drive_through & HASBIT(p2, 3)) SetStopBuiltOnTownRoad(tile);
 
 		UpdateStationVirtCoordDirty(st);
 		UpdateStationAcceptance(st, false);
@@ -1395,7 +1397,44 @@
 	return (is_truck) ? _price.remove_truck_station : _price.remove_bus_station;
 }
 
-
+/** Remove a bus or truck stop
+ * @param tile tile to remove the stop from
+ * @param p1 not used
+ * @param p2 bit 0: 0 for Bus stops, 1 for truck stops
+ */
+int32 CmdRemoveRoadStop(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+{
+	Station* st;
+	bool is_drive_through;
+	bool is_towns_road = false;
+	RoadBits road_bits;
+	int32 ret;
+
+	/* Make sure the specified tile is a road stop of the correct type */
+	if (!IsTileType(tile, MP_STATION) || !IsRoadStop(tile) || (uint32)GetRoadStopType(tile) != p2) return CMD_ERROR;
+	st = GetStationByTile(tile);
+	/* Save the stop info before it is removed */
+	is_drive_through = IsDriveThroughStopTile(tile);
+	road_bits = GetAnyRoadBits(tile);
+	if (is_drive_through) is_towns_road = GetStopBuiltOnTownRoad(tile);
+
+	ret = RemoveRoadStop(st, flags, tile);
+
+	/* If the stop was a drive-through stop replace the road */
+	if ((flags & DC_EXEC) && !CmdFailed(ret) && is_drive_through) {
+		uint index = 0;
+		Owner cur_owner = _current_player;
+
+		if (is_towns_road) {
+			index = ClosestTownFromTile(tile, _patches.dist_local_authority)->index;
+			_current_player = OWNER_TOWN;
+		}
+		DoCommand(tile, road_bits, index, DC_EXEC, CMD_BUILD_ROAD);
+		_current_player = cur_owner;
+	}
+
+	return ret;
+}
 
 // FIXME -- need to move to its corresponding Airport variable
 // Country Airfield (small)
@@ -1628,14 +1667,13 @@
 	TileIndex tile;
 	int w,h;
 	int32 cost;
-	const AirportFTAClass* afc;
 
 	if (_current_player != OWNER_WATER && !CheckOwnership(st->owner))
 		return CMD_ERROR;
 
 	tile = st->airport_tile;
 
-	afc = GetAirport(st->airport_type);
+	const AirportFTAClass *afc = st->Airport();
 	w = afc->size_x;
 	h = afc->size_y;
 
@@ -2227,6 +2265,27 @@
 				/* Attempt to allocate a parking bay in a road stop */
 				RoadStop *rs = GetRoadStopByTile(tile, GetRoadStopType(tile));
 
+				if (IsDriveThroughStopTile(tile)) {
+					/* Vehicles entering a drive-through stop from the 'normal' side use first bay (bay 0). */
+					byte side = ((DirToDiagDir(v->direction) == ReverseDiagDir(GetRoadStopDir(tile))) == (v->u.road.overtaking == 0)) ? 0 : 1;
+
+					if (!rs->IsFreeBay(side)) return VETSB_CANNOT_ENTER;
+
+					/* Check if the vehicle is stopping at this road stop */
+					if (GetRoadStopType(tile) == ((v->cargo_type == CT_PASSENGERS) ? RoadStop::BUS : RoadStop::TRUCK) &&
+							v->current_order.dest == GetStationIndex(tile)) {
+						SETBIT(v->u.road.state, RVS_IS_STOPPING);
+						rs->AllocateDriveThroughBay(side);
+					}
+
+					/* Indicate if vehicle is using second bay. */
+					if (side == 1) SETBIT(v->u.road.state, RVS_USING_SECOND_BAY);
+					/* Indicate a drive-through stop */
+					SETBIT(v->u.road.state, RVS_IN_DT_ROAD_STOP);
+					return VETSB_CONTINUE;
+				}
+
+				/* For normal (non drive-through) road stops */
 				/* Check if station is busy or if there are no free bays. */
 				if (rs->IsEntranceBusy() || !rs->HasFreeBay()) return VETSB_CANNOT_ENTER;
 
@@ -2693,7 +2752,13 @@
 		case STATION_RAIL:    return RemoveRailroadStation(st, tile, flags);
 		case STATION_AIRPORT: return RemoveAirport(st, flags);
 		case STATION_TRUCK:
-		case STATION_BUS:     return RemoveRoadStop(st, flags, tile);
+			if (IsDriveThroughStopTile(tile) && GetStopBuiltOnTownRoad(tile))
+				return_cmd_error(STR_3047_MUST_DEMOLISH_TRUCK_STATION);
+			return RemoveRoadStop(st, flags, tile);
+		case STATION_BUS:
+			if (IsDriveThroughStopTile(tile) && GetStopBuiltOnTownRoad(tile))
+				return_cmd_error(STR_3046_MUST_DEMOLISH_BUS_STATION);
+			return RemoveRoadStop(st, flags, tile);
 		case STATION_BUOY:    return RemoveBuoy(st, flags);
 		case STATION_DOCK:    return RemoveDock(st, flags);
 		default: break;
--- a/src/station_map.h	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/station_map.h	Sat Feb 17 11:12:50 2007 +0000
@@ -42,7 +42,9 @@
 	GFX_RADAR_DISTRICTWE_LAST     = 156,
 	GFX_WINDSACK_INTERCON_FIRST   = 164,
 	GFX_WINDSACK_INTERCON_LAST    = 167,
-	GFX_BASE_END                  = 168
+	GFX_TRUCK_BASE_EXT            = 168,
+	GFX_BUS_BASE_EXT              = 170,
+	GFX_BASE_END                  = 172
 };
 
 enum {
@@ -51,7 +53,9 @@
 	TRUCK_SIZE = GFX_BUS_BASE - GFX_TRUCK_BASE,
 	BUS_SIZE = GFX_OILRIG_BASE - GFX_BUS_BASE,
 	DOCK_SIZE_TOTAL = GFX_BUOY_BASE - GFX_DOCK_BASE,
-	AIRPORT_SIZE_EXTENDED = GFX_BASE_END - GFX_AIRPORT_BASE_EXTENDED
+	AIRPORT_SIZE_EXTENDED = GFX_TRUCK_BASE_EXT - GFX_AIRPORT_BASE_EXTENDED,
+	TRUCK_SIZE_EXT = GFX_BUS_BASE_EXT - GFX_TRUCK_BASE_EXT,
+	BUS_SIZE_EXT = GFX_BASE_END - GFX_BUS_BASE_EXT,
 };
 
 typedef enum HangarTiles {
@@ -125,12 +129,14 @@
 
 static inline bool IsTruckStop(TileIndex t)
 {
-	return IS_BYTE_INSIDE(GetStationGfx(t), GFX_TRUCK_BASE, GFX_TRUCK_BASE + TRUCK_SIZE);
+	return (IS_BYTE_INSIDE(GetStationGfx(t), GFX_TRUCK_BASE, GFX_TRUCK_BASE + TRUCK_SIZE)) ||
+		(IS_BYTE_INSIDE(GetStationGfx(t), GFX_TRUCK_BASE_EXT, GFX_TRUCK_BASE_EXT + TRUCK_SIZE_EXT));
 }
 
 static inline bool IsBusStop(TileIndex t)
 {
-	return IS_BYTE_INSIDE(GetStationGfx(t), GFX_BUS_BASE, GFX_BUS_BASE + BUS_SIZE);
+	return (IS_BYTE_INSIDE(GetStationGfx(t), GFX_BUS_BASE, GFX_BUS_BASE + BUS_SIZE)) ||
+		(IS_BYTE_INSIDE(GetStationGfx(t), GFX_BUS_BASE_EXT, GFX_BUS_BASE_EXT + BUS_SIZE_EXT));
 }
 
 static inline bool IsRoadStop(TileIndex t)
@@ -143,13 +149,44 @@
 	return IsTileType(t, MP_STATION) && IsRoadStop(t);
 }
 
+static inline bool IsStandardRoadStopTile(TileIndex t)
+{
+	return IsTileType(t, MP_STATION) &&
+		(IS_BYTE_INSIDE(GetStationGfx(t), GFX_TRUCK_BASE, GFX_TRUCK_BASE + TRUCK_SIZE) ||
+		IS_BYTE_INSIDE(GetStationGfx(t), GFX_BUS_BASE, GFX_BUS_BASE + BUS_SIZE));
+}
+
+static inline bool IsDriveThroughStopTile(TileIndex t)
+{
+	return IsTileType(t, MP_STATION) &&
+		(IS_BYTE_INSIDE(GetStationGfx(t), GFX_TRUCK_BASE_EXT, GFX_TRUCK_BASE_EXT + TRUCK_SIZE_EXT) ||
+		IS_BYTE_INSIDE(GetStationGfx(t), GFX_BUS_BASE_EXT, GFX_BUS_BASE_EXT + BUS_SIZE_EXT));
+}
+
+static inline bool GetStopBuiltOnTownRoad(TileIndex t)
+{
+	assert(IsDriveThroughStopTile(t));
+	return HASBIT(_m[t].m6, 3);
+}
+
+static inline void SetStopBuiltOnTownRoad(TileIndex t)
+{
+	assert(IsDriveThroughStopTile(t));
+	SETBIT(_m[t].m6, 3);
+}
+
 /**
  * Gets the direction the road stop entrance points towards.
  */
 static inline DiagDirection GetRoadStopDir(TileIndex t)
 {
+	StationGfx gfx = GetStationGfx(t);
 	assert(IsRoadStopTile(t));
-	return (DiagDirection)((GetStationGfx(t) - GFX_TRUCK_BASE) & 3);
+	if (gfx < GFX_TRUCK_BASE_EXT) {
+		return (DiagDirection)((gfx - GFX_TRUCK_BASE) & 3);
+	} else {
+		return (DiagDirection)((gfx - GFX_TRUCK_BASE_EXT) & 1);
+	}
 }
 
 static inline bool IsOilRig(TileIndex t)
@@ -275,9 +312,13 @@
 	SetRailType(t, rt);
 }
 
-static inline void MakeRoadStop(TileIndex t, Owner o, StationID sid, RoadStop::Type rst, DiagDirection d)
+static inline void MakeRoadStop(TileIndex t, Owner o, StationID sid, RoadStop::Type rst, bool is_drive_through, DiagDirection d)
 {
-	MakeStation(t, o, sid, (rst == RoadStop::BUS ? GFX_BUS_BASE : GFX_TRUCK_BASE) + d);
+	if (is_drive_through) {
+		MakeStation(t, o, sid, (rst == RoadStop::BUS ? GFX_BUS_BASE_EXT : GFX_TRUCK_BASE_EXT) + d);
+	} else {
+		MakeStation(t, o, sid, (rst == RoadStop::BUS ? GFX_BUS_BASE : GFX_TRUCK_BASE) + d);
+	}
 }
 
 static inline void MakeAirport(TileIndex t, Owner o, StationID sid, byte section)
--- a/src/table/files.h	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/table/files.h	Sat Feb 17 11:12:50 2007 +0000
@@ -61,4 +61,5 @@
 	{ "elrailsw.grf",  { 0x4f, 0xf9, 0xac, 0x79, 0x50, 0x28, 0x9b, 0xe2, 0x15, 0x30, 0xa8, 0x1e, 0xd5, 0xfd, 0xe1, 0xda } },
 	{ "openttd.grf",   { 0x59, 0x22, 0x19, 0xe0, 0x6e, 0xe7, 0xb6, 0xa3, 0x55, 0x53, 0xcc, 0x9e, 0xbc, 0xaf, 0xcc, 0x83 } },
 	{ "trkfoundw.grf", { 0x12, 0x33, 0x3f, 0xa3, 0xd1, 0x86, 0x8b, 0x04, 0x53, 0x18, 0x9c, 0xee, 0xf9, 0x2d, 0xf5, 0x95 } },
+	{ "roadstops.grf", { 0x8c, 0xd9, 0x45, 0x21, 0x28, 0x82, 0x96, 0x45, 0x33, 0x22, 0x7a, 0xb9, 0x0d, 0xf3, 0x67, 0x4a } },
 };
--- a/src/table/sprites.h	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/table/sprites.h	Sat Feb 17 11:12:50 2007 +0000
@@ -117,6 +117,16 @@
 	SPR_GRASS_RIGHT = SPR_AIRPORTX_BASE + 13,
 	SPR_GRASS_LEFT = SPR_AIRPORTX_BASE + 14,
 
+	SPR_ROADSTOP_BASE = SPR_AIRPORTX_BASE + 15, // The sprites used for drive-through road stops
+	SPR_BUS_STOP_DT_Y_W = SPR_ROADSTOP_BASE,
+	SPR_BUS_STOP_DT_Y_E = SPR_ROADSTOP_BASE + 1,
+	SPR_BUS_STOP_DT_X_W = SPR_ROADSTOP_BASE + 2,
+	SPR_BUS_STOP_DT_X_E = SPR_ROADSTOP_BASE + 3,
+	SPR_TRUCK_STOP_DT_Y_W = SPR_ROADSTOP_BASE + 4,
+	SPR_TRUCK_STOP_DT_Y_E = SPR_ROADSTOP_BASE + 5,
+	SPR_TRUCK_STOP_DT_X_W = SPR_ROADSTOP_BASE + 6,
+	SPR_TRUCK_STOP_DT_X_E = SPR_ROADSTOP_BASE + 7,
+
 	/* Manager face sprites */
 	SPR_GRADIENT = 874, // background gradient behind manager face
 
@@ -295,6 +305,10 @@
 	SPR_PYLON_NS_W = SPR_ELRAIL_BASE + 37,
 	SPR_PYLON_NS_E = SPR_ELRAIL_BASE + 38,
 
+	/* sprites for roads */
+	SPR_ROAD_PAVED_STRAIGHT_Y       = 1313,
+	SPR_ROAD_PAVED_STRAIGHT_X       = 1314,
+
 	/* sprites for airports and airfields*/
 	/* Small airports are AIRFIELD, everything else is AIRPORT */
 	SPR_HELIPORT                    = 2633,
--- a/src/table/station_land.h	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/table/station_land.h	Sat Feb 17 11:12:50 2007 +0000
@@ -959,6 +959,34 @@
 	TILE_SEQ_END()
 };
 
+// drive-through truck stop X
+static const DrawTileSeqStruct _station_display_datas_0168[] = {
+	{  1,  0,  0,  14,  3, 10, SPR_TRUCK_STOP_DT_X_W | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	{  1, 13,  0,  14,  1, 10, SPR_TRUCK_STOP_DT_X_E | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	TILE_SEQ_END()
+};
+
+// drive-through truck stop Y
+static const DrawTileSeqStruct _station_display_datas_0169[] = {
+	{ 13,  1,  0,  1, 14, 10, SPR_TRUCK_STOP_DT_Y_W | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	{  0,  1,  0,  3, 14, 10, SPR_TRUCK_STOP_DT_Y_E | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	TILE_SEQ_END()
+};
+
+// drive-through bus stop X
+static const DrawTileSeqStruct _station_display_datas_0170[] = {
+	{  5,  0,  0,  8,  3, 10, SPR_BUS_STOP_DT_X_W | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	{  5, 14,  0,  8,  1, 10, SPR_BUS_STOP_DT_X_E | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	TILE_SEQ_END()
+};
+
+// drive-through bus stop Y
+static const DrawTileSeqStruct _station_display_datas_0171[] = {
+	{ 13,  5,  0,  1,  8, 10, SPR_BUS_STOP_DT_Y_W | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	{  0,  5,  0,  3,  8, 10, SPR_BUS_STOP_DT_Y_E | (1 << PALETTE_MODIFIER_COLOR), PAL_NONE },
+	TILE_SEQ_END()
+};
+
 static const DrawTileSprites _station_display_datas[] = {
 	{ SPR_RAIL_TRACK_X,               PAL_NONE, _station_display_datas_0 },
 	{ SPR_RAIL_TRACK_Y,               PAL_NONE, _station_display_datas_1 },
@@ -1128,4 +1156,8 @@
 	{ SPR_FLAT_GRASS_TILE,            PAL_NONE, _station_display_datas_59 },
 	{ SPR_FLAT_GRASS_TILE,            PAL_NONE, _station_display_datas_60 },
 	{ SPR_FLAT_GRASS_TILE,            PAL_NONE, _station_display_datas_61 },
+	{ SPR_ROAD_PAVED_STRAIGHT_X,      PAL_NONE, _station_display_datas_0168 },
+	{ SPR_ROAD_PAVED_STRAIGHT_Y,      PAL_NONE, _station_display_datas_0169 },
+	{ SPR_ROAD_PAVED_STRAIGHT_X,      PAL_NONE, _station_display_datas_0170 },
+	{ SPR_ROAD_PAVED_STRAIGHT_Y,      PAL_NONE, _station_display_datas_0171 }
 };
--- a/src/tunnelbridge_cmd.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/tunnelbridge_cmd.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -77,7 +77,7 @@
 }
 
 #define M(x) (1 << (x))
-enum {
+typedef enum BridgeFoundations{
 	// foundation, whole tile is leveled up --> 3 corners raised
 	BRIDGE_FULL_LEVELED_FOUNDATION = M(SLOPE_WSE) | M(SLOPE_NWS) | M(SLOPE_ENW) | M(SLOPE_SEN),
 	// foundation, tile is partly leveled up --> 1 corner raised
@@ -85,7 +85,7 @@
 	// no foundations (X,Y direction)
 	BRIDGE_NO_FOUNDATION = M(SLOPE_FLAT) | M(SLOPE_SW) | M(SLOPE_SE) | M(SLOPE_NW) | M(SLOPE_NE),
 	BRIDGE_HORZ_RAMP = (BRIDGE_PARTLY_LEVELED_FOUNDATION | BRIDGE_NO_FOUNDATION) & ~M(SLOPE_FLAT)
-};
+} BridgeFoundataion;
 #undef M
 
 static inline const PalSpriteID *GetBridgeSpriteTable(int index, byte table)
--- a/src/unix.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/unix.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -260,13 +260,11 @@
 
 void CSleep(int milliseconds)
 {
-	#if !defined(__BEOS__) && !defined(__AMIGA__)
-		usleep(milliseconds * 1000);
-	#endif
-	#ifdef __BEOS__
+	#if defined(PSP)
+		sceKernelDelayThread(milliseconds * 1000);
+	#elif defined(__BEOS__)
 		snooze(milliseconds * 1000);
-	#endif
-	#if defined(__AMIGA__)
+	#elif defined(__AMIGA__)
 	{
 		ULONG signals;
 		ULONG TimerSigBit = 1 << TimerPort->mp_SigBit;
@@ -282,7 +280,9 @@
 		}
 		WaitIO((struct IORequest *)TimerRequest);
 	}
-	#endif // __AMIGA__
+	#else
+		usleep(milliseconds * 1000);
+	#endif
 }
 
 #ifdef WITH_ICONV
--- a/src/variables.h	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/variables.h	Sat Feb 17 11:12:50 2007 +0000
@@ -166,6 +166,7 @@
 	bool autosave_on_exit;              // save an autosave when you quit the game, but do not ask "Do you really want to quit?"
 	byte max_num_autosaves;             // controls how many autosavegames are made before the game starts to overwrite (names them 0 to max_num_autosaves - 1)
 	bool extra_dynamite;                // extra dynamite
+	bool road_stop_on_town_road;        // allow building of drive-through road stops on town owned roads
 
 	bool never_expire_vehicles;         // never expire vehicles
 	byte extend_vehicle_life;           // extend vehicle life by this many years
@@ -211,6 +212,7 @@
 	uint32 npf_water_curve_penalty;        /* The penalty for curves */
 	uint32 npf_road_curve_penalty;         /* The penalty for curves */
 	uint32 npf_crossing_penalty;           /* The penalty for level crossings */
+	uint32 npf_road_drive_through_penalty; /* The penalty for going through a drive-through road stop */
 
 	bool population_in_label; // Show the population of a town in his label?
 
--- a/src/vehicle.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/vehicle.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -515,6 +515,7 @@
 	Vehicle* u;
 
 	assert(v != NULL);
+	assert(v->type == VEH_Train);
 
 	if (v->first != NULL) {
 		if (IsFrontEngine(v->first) || IsFreeWagon(v->first)) return v->first;
@@ -2756,9 +2757,11 @@
 			if (IsRoadVehInDepot(v)) /* We'll assume the road vehicle is facing outwards */
 				return DiagdirToDiagTrackdir(GetRoadDepotDirection(v->tile));
 
-			if (IsRoadStopTile(v->tile)) /* We'll assume the road vehicle is facing outwards */
+			if (IsStandardRoadStopTile(v->tile)) /* We'll assume the road vehicle is facing outwards */
 				return DiagdirToDiagTrackdir(GetRoadStopDir(v->tile)); /* Road vehicle in a station */
 
+			if (IsDriveThroughStopTile(v->tile)) return DiagdirToDiagTrackdir(DirToDiagDir(v->direction));
+
 			/* If vehicle's state is a valid track direction (vehicle is not turning around) return it */
 			if (!IsReversingRoadTrackdir((Trackdir)v->u.road.state)) return (Trackdir)v->u.road.state;
 
--- a/src/vehicle.h	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/vehicle.h	Sat Feb 17 11:12:50 2007 +0000
@@ -45,14 +45,18 @@
 
 	/* Bit numbers */
 	RVS_USING_SECOND_BAY         =    1,                      ///< Only used while in a road stop
+	RVS_IS_STOPPING              =    2,                      ///< Only used for drive-through stops. Vehicle will stop here
 	RVS_DRIVE_SIDE               =    4,                      ///< Only used when retrieving move data and for turning vehicles
 	RVS_IN_ROAD_STOP             =    5,                      ///< The vehicle is in a road stop
+	RVS_IN_DT_ROAD_STOP          =    6,                      ///< The vehicle is in a drive-through road stop
 
 	/* Bit sets of the above specified bits */
 	RVSB_USING_SECOND_BAY        = 1 << RVS_USING_SECOND_BAY, ///< Only used while in a road stop
 	RVSB_DRIVE_SIDE              = 1 << RVS_DRIVE_SIDE,       ///< Only used when retrieving move data and for turning vehicles
 	RVSB_IN_ROAD_STOP            = 1 << RVS_IN_ROAD_STOP,     ///< The vehicle is in a road stop
 	RVSB_IN_ROAD_STOP_END        = RVSB_IN_ROAD_STOP + TRACKDIR_END,
+	RVSB_IN_DT_ROAD_STOP         = 1 << RVS_IN_DT_ROAD_STOP,  ///< The vehicle is in a drive-through road stop
+	RVSB_IN_DT_ROAD_STOP_END     = RVSB_IN_DT_ROAD_STOP + TRACKDIR_END,
 
 	RVSB_TRACKDIR_MASK           = 0x0F,                      ///< The mask used to extract track dirs
 	RVSB_ROAD_STOP_TRACKDIR_MASK = 0x09                       ///< Only bits 0 and 3 are used to encode the trackdir for road stops
--- a/src/video/dedicated_v.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/video/dedicated_v.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -45,12 +45,16 @@
 }
 #endif
 
-#ifdef UNIX
+#if defined(UNIX) || defined(PSP)
 #	include <sys/time.h> /* gettimeofday */
 #	include <sys/types.h>
 #	include <unistd.h>
 #	include <signal.h>
 #	define STDIN 0  /* file descriptor for standard input */
+#	if defined(PSP)
+#		include <sys/fd_set.h>
+#		include <sys/select.h>
+#	endif /* PSP */
 
 /* Signal handlers */
 static void DedicatedSignalHandler(int sig)
@@ -148,7 +152,7 @@
 static bool DedicatedVideoChangeRes(int w, int h) { return false; }
 static void DedicatedVideoFullScreen(bool fs) {}
 
-#if defined(UNIX) || defined(__OS2__)
+#if defined(UNIX) || defined(__OS2__) || defined(PSP)
 static bool InputWaiting(void)
 {
 	struct timeval tv;
@@ -194,7 +198,7 @@
 
 	if (_exit_game) return;
 
-#if defined(UNIX) || defined(__OS2__)
+#if defined(UNIX) || defined(__OS2__) || defined(PSP)
 	if (fgets(input_line, lengthof(input_line), stdin) == NULL) return;
 #else
 	/* Handle console input, and singal console thread, it can accept input again */
@@ -227,7 +231,7 @@
 	uint32 next_tick = cur_ticks + 30;
 
 	/* Signal handlers */
-#ifdef UNIX
+#if defined(UNIX) || defined(PSP)
 	signal(SIGTERM, DedicatedSignalHandler);
 	signal(SIGINT, DedicatedSignalHandler);
 	signal(SIGQUIT, DedicatedSignalHandler);
--- a/src/window.h	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/window.h	Sat Feb 17 11:12:50 2007 +0000
@@ -570,7 +570,7 @@
 	byte vehicle_type;
 	union {
 		RailTypeByte railtype;
-		AcceptPlanesByte acc_planes; // AIRCRAFT_ONLY, ALL, HELICOPTERS_ONLY
+		AirportFTAClass::Flags flags;
 	} filter;
 	byte sel_index;  // deprecated value, used for 'unified' ship and road
 	bool descending_sort_order;
--- a/src/yapf/follow_track.hpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/yapf/follow_track.hpp	Sat Feb 17 11:12:50 2007 +0000
@@ -121,8 +121,8 @@
 	/** return true if we can leave m_old_tile in m_exitdir */
 	FORCEINLINE bool CanExitOldTile()
 	{
-		// road stop can be left at one direction only
-		if (IsRoadTT() && IsRoadStopTile(m_old_tile)) {
+		// road stop can be left at one direction only unless it's a drive-through stop
+		if (IsRoadTT() && IsStandardRoadStopTile(m_old_tile)) {
 			DiagDirection exitdir = GetRoadStopDir(m_old_tile);
 			if (exitdir != m_exitdir)
 				return false;
@@ -140,8 +140,8 @@
 	/** return true if we can enter m_new_tile from m_exitdir */
 	FORCEINLINE bool CanEnterNewTile()
 	{
-		if (IsRoadTT() && IsRoadStopTile(m_new_tile)) {
-			// road stop can be entered from one direction only
+		if (IsRoadTT() && IsStandardRoadStopTile(m_new_tile)) {
+			// road stop can be entered from one direction only unless it's a drive-through stop
 			DiagDirection exitdir = GetRoadStopDir(m_new_tile);
 			if (ReverseDiagDir(exitdir) != m_exitdir)
 				return false;
--- a/src/yapf/yapf_costrail.hpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/yapf/yapf_costrail.hpp	Sat Feb 17 11:12:50 2007 +0000
@@ -282,13 +282,13 @@
 			// add penalty for skipped station tiles
 			if (F.m_is_station)
 			{
+				uint platform_length = F.m_tiles_skipped + 1;
 				if (target_seen) {
 					// it is our destination station
-					uint platform_length = F.m_tiles_skipped + 1;
 					segment_cost += PlatformLengthPenalty(platform_length);
 				} else {
 					// station is not our destination station, apply penalty for skipped platform tiles
-					segment_cost += Yapf().PfGetSettings().rail_station_penalty * F.m_tiles_skipped;
+					segment_cost += Yapf().PfGetSettings().rail_station_penalty * platform_length;
 				}
 			}
 
--- a/src/yapf/yapf_road.cpp	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/yapf/yapf_road.cpp	Sat Feb 17 11:12:50 2007 +0000
@@ -51,6 +51,10 @@
 					if (IsLevelCrossing(tile))
 						cost += Yapf().PfGetSettings().road_crossing_penalty;
 					break;
+				case MP_STATION:
+					if (IsDriveThroughStopTile(tile))
+						cost += Yapf().PfGetSettings().road_stop_penalty;
+					break;
 
 				default:
 					break;
@@ -76,6 +80,10 @@
 			// base tile cost depending on distance between edges
 			segment_cost += Yapf().OneTileCost(tile, trackdir);
 
+			const Vehicle* v = Yapf().GetVehicle();
+			// we have reached the vehicle's destination - segment should end here to avoid target skipping
+			if (v->current_order.type == OT_GOTO_STATION && tile == v->dest_tile) break;
+
 			// stop if we have just entered the depot
 			if (IsTileDepotType(tile, TRANSPORT_ROAD) && trackdir == DiagdirToDiagTrackdir(ReverseDiagDir(GetRoadDepotDirection(tile)))) {
 				// next time we will reverse and leave the depot
@@ -103,7 +111,6 @@
 			// add min/max speed penalties
 			int min_speed = 0;
 			int max_speed = F.GetSpeedLimit(&min_speed);
-			const Vehicle* v = Yapf().GetVehicle();
 			if (max_speed < v->max_speed) segment_cost += 1 * (v->max_speed - max_speed);
 			if (min_speed > v->max_speed) segment_cost += 10 * (min_speed - v->max_speed);
 
--- a/src/yapf/yapf_settings.h	Wed Feb 14 10:46:38 2007 +0000
+++ b/src/yapf/yapf_settings.h	Sat Feb 17 11:12:50 2007 +0000
@@ -39,6 +39,7 @@
 	YS_DEF(uint32, road_slope_penalty)         ///< penalty for up-hill slope
 	YS_DEF(uint32, road_curve_penalty)         ///< penalty for curves
 	YS_DEF(uint32, road_crossing_penalty)      ///< penalty for level crossing
+	YS_DEF(uint32, road_stop_penalty)          ///< penalty for going through a drive-through road stop
 	YS_DEF(bool  , rail_firstred_twoway_eol)   ///< treat first red two-way signal as dead end
 	YS_DEF(uint32, rail_firstred_penalty)      ///< penalty for first red signal
 	YS_DEF(uint32, rail_firstred_exit_penalty) ///< penalty for first red exit signal