[SCM] transportation simulator branch, upstream, updated. upstream/102.0-1-g10b7318

Ansgar Burchardt ansgar at 43-1.org
Sun Oct 18 06:09:41 UTC 2009


The following commit has been merged in the upstream branch:
commit 10b731828be59cee42e502558bd613245c5db19a
Author: Ansgar Burchardt <ansgar at 43-1.org>
Date:   Sun Oct 18 14:45:02 2009 +0900

    Imported Upstream version 102.2+svn2786

diff --git a/Makefile b/Makefile
index 0dd4789..c61163e 100644
--- a/Makefile
+++ b/Makefile
@@ -2,8 +2,8 @@ CONFIG ?= config.default
 -include $(CONFIG)
 
 
-BACKENDS      = allegro gdi sdl mixer_sdl x11
-COLOUR_DEPTHS = 8 16
+BACKENDS      = allegro gdi sdl mixer_sdl x11 posix
+COLOUR_DEPTHS = 0 8 16
 OSTYPES       = beos cygwin freebsd linux mingw mac
 
 ifeq ($(findstring $(BACKEND), $(BACKENDS)),)
@@ -50,6 +50,7 @@ ifeq ($(OSTYPE),cygwin)
 endif
 
 ifeq ($(OSTYPE),mingw)
+  CC ?= gcc
   SOURCES += simsys_w32_png.cc
   OS_OPT   ?= -mno-cygwin -DPNG_STATIC -DZLIB_STATIC -march=pentium
   STD_LIBS ?= -lz
@@ -96,9 +97,8 @@ ifdef DEBUG
 endif
 
 ifneq ($(PROFILE),)
-  CFLAGS   += -pg
-  CXXFLAGS += -pg
-  LDFLAGS  += -pg
+  CFLAGS   += -pg -DPROFILE -fno-inline
+  CXXFLAGS += -pg -DPROFILE -fno-inline
 endif
 
 CFLAGS   += -Wall -W -Wcast-qual -Wpointer-arith -Wcast-align -Wstrict-prototypes $(OS_INC) $(OS_OPT) $(FLAGS)
@@ -263,6 +263,8 @@ SOURCES += gui/player_frame_t.cc
 SOURCES += gui/savegame_frame.cc
 SOURCES += gui/scenario_frame.cc
 SOURCES += gui/schedule_list.cc
+SOURCES += gui/settings_frame.cc
+SOURCES += gui/settings_stats.cc
 SOURCES += gui/sound_frame.cc
 SOURCES += gui/sprachen.cc
 SOURCES += gui/stadt_info.cc
@@ -405,6 +407,12 @@ ifeq ($(BACKEND),x11)
   LIBS     += -L/usr/X11R6/lib/ -lX11 -lXext
 endif
 
+ifeq ($(BACKEND),posix)
+  SOURCES += simsys_posix.cc
+  SOURCES += music/no_midi.cc
+  SOURCES += sound/no_sound.cc
+endif
+
 
 ifneq ($(findstring $(OSTYPE), cygwin mingw),)
   SOURCES += simres.rc
diff --git a/Simutrans.sln b/Simutrans.sln
new file mode 100644
index 0000000..f94aa53
--- /dev/null
+++ b/Simutrans.sln
@@ -0,0 +1,21 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Simutrans", "Simutrans.vcproj", "{0621B295-BEB7-4767-82F1-F27995610323}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{0621B295-BEB7-4767-82F1-F27995610323}.Debug|Win32.ActiveCfg = Debug|Win32
+		{0621B295-BEB7-4767-82F1-F27995610323}.Debug|Win32.Build.0 = Debug|Win32
+		{0621B295-BEB7-4767-82F1-F27995610323}.Release|Win32.ActiveCfg = Release|Win32
+		{0621B295-BEB7-4767-82F1-F27995610323}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
+
diff --git a/Simutrans.vcproj b/Simutrans.vcproj
new file mode 100644
index 0000000..f29fdf7
--- /dev/null
+++ b/Simutrans.vcproj
@@ -0,0 +1,1085 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="Simutrans"
+	ProjectGUID="{0621B295-BEB7-4767-82F1-F27995610323}"
+	RootNamespace="Simutrans"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="&quot;G:\Projects\SDL-1.2.10\include&quot;;&quot;G:\Program Files\PlatformSDK\Include&quot;;G:\Projects\zlib\include"
+				PreprocessorDefinitions="ZLIB_WINAPI;LITTLE_ENDIAN;STEPS16;USE_C;WIN32;DEBUG=3"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				StructMemberAlignment="0"
+				BufferSecurityCheck="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+				DisableSpecificWarnings="4200;4800;4311;4996"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winmm.lib zlibstat.lib advapi32.lib $(NOINHERIT)"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="&quot;G:\Program Files\PlatformSDK\Lib&quot;;G:\Projects\zlib\lib"
+				IgnoreAllDefaultLibraries="false"
+				IgnoreDefaultLibraryNames="libcmt.lib"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="&quot;G:\Projects\SDL-1.2.10\include&quot;;&quot;G:\Program Files\PlatformSDK\Include&quot;;G:\Projects\zlib\include"
+				PreprocessorDefinitions="ZLIB_WINAPI;LITTLE_ENDIAN;STEPS16;USE_C;WIN32"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+				DisableSpecificWarnings="4200;4800;4311;4996"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winmm.lib zlibstat.lib advapi32.lib $(NOINHERIT)"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="&quot;G:\Program Files\PlatformSDK\Lib&quot;;G:\Projects\zlib\lib"
+				IgnoreDefaultLibraryNames="libcmt.lib"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath=".\player\ai.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\player\ai_goods.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\player\ai_passenger.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\banner.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dings\baum.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\baum_edit.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\bild_besch.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\boden\boden.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\bridge_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dings\bruecke.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\bruecke_besch.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\bauer\brueckenbauer.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\boden\brueckenboden.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\building_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\utils\cbuffer_t.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\citybuilding_edit.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\citycar_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\citylist_frame_t.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\citylist_stats_t.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\climates.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\colors.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\convoi_detail_t.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\convoi_filter_frame.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\convoi_frame.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\convoi_info_t.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dings\crossing.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dataobj\crossing_logic.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\crossing_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\utils\cstring_t.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\curiosity_edit.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\curiositylist_frame_t.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\curiositylist_stats_t.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\tpl\debug_helper.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\depot_frame.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dataobj\dingliste.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dataobj\einstellungen.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\enlarge_map_frame_t.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\extend_edit.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\fabrik_info.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\bauer\fabrikbauer.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\factory_edit.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\factory_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\factorylist_frame_t.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\factorylist_stats_t.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dataobj\fahrplan.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\fahrplan_gui.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dings\field.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\font.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dataobj\freelist.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\freight_list_sorter.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\boden\fundament.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dings\gebaeude.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\good_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\goods_frame_t.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\goods_stats_t.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\ground_info.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\ground_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dings\groundobj.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\groundobj_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\boden\grund.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\grund_besch.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\components\gui_button.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\components\gui_chart.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\components\gui_combobox.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\gui_container.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\gui_convoiinfo.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\components\gui_flowtext.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\gui_frame.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\components\gui_image_list.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\components\gui_label.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\components\gui_numberinput.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\components\gui_scrollbar.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\components\gui_scrolled_list.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\components\gui_scrollpane.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\components\gui_speedbar.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\components\gui_tab_panel.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\components\gui_textarea.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\components\gui_textinput.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\components\gui_world_view_t.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\halt_detail.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\halt_info.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\halt_list_filter_frame.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\halt_list_frame.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\halt_list_stats.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\haus_besch.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\bauer\hausbauer.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\help_frame.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\image_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\imagelist2d_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\imagelist_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\jump_frame.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\boden\wege\kanal.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\karte.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\kennfarbe.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dataobj\koord.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dataobj\koord3d.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dings\label.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\label_info.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\labellist_frame_t.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\labellist_stats_t.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dings\leitung2.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\line_management_gui.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\load_relief_frame.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dataobj\loadsave.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\loadsave_frame.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\utils\log.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\boden\wege\maglev.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\map_frame.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dataobj\marker.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\message_frame_t.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\message_option_t.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\message_stats_t.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\messagebox.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\money_frame.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\boden\wege\monorail.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\boden\monorailboden.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\vehicle\movingobj.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\boden\wege\narrowgauge.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\obj_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\old_blockmanager.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\optionen.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\pakselector.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\pedestrian_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dings\pillar.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\sucher\platzsucher.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\player_frame_t.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dataobj\powernet.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dataobj\ribi.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dings\roadsign.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\roadsign_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\root_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dataobj\route.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\boden\wege\runway.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\savegame_frame.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dataobj\scenario.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\scenario_frame.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\schedule_list.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\boden\wege\schiene.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\utils\searchfolder.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\settings_frame.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\settings_stats.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dings\signal.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\sim_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simcity.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simconvoi.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simdebug.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simdepot.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simdings.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simevent.cc"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						ObjectFile="$(IntDir)\$(InputName)1.obj"
+						XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						ObjectFile="$(IntDir)\$(InputName)1.obj"
+						XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath=".\simfab.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simgraph16.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simhalt.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simintr.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simio.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simline.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simlinemgmt.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simmain.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simmem.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simmenu.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simmesg.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\vehicle\simpeople.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simplan.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\player\simplay.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simskin.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simsound.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\utils\simstring.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simsys_w16.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simsys_w32_png.c"
+				>
+			</File>
+			<File
+				RelativePath=".\simticker.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simtools.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\vehicle\simvehikel.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\vehicle\simverkehr.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simview.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simware.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simwerkz.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simwin.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\simworld.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\skin_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\sound_besch.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\sound_frame.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\sound_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\sprachen.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\stadt_info.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\station_building_select.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\boden\wege\strasse.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dataobj\tabfile.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\text_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\thing_info.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dataobj\translator.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\tree_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dings\tunnel.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\tunnel_besch.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\tunnel_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\bauer\tunnelbauer.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\boden\tunnelboden.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dataobj\umgebung.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\unicode.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\vehicle_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\bauer\vehikelbauer.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\music\w32_midi.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\ware_besch.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\bauer\warenbauer.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dataobj\warenziel.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\boden\wasser.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\way_obj_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\way_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dings\wayobj.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\boden\wege\weg.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\bauer\wegbauer.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\welt.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\gui\werkzeug_waehler.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\sound\win32_sound.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dings\wolke.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\besch\reader\xref_reader.cc"
+				>
+			</File>
+			<File
+				RelativePath=".\dings\zeiger.cc"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/bauer/brueckenbauer.cc b/bauer/brueckenbauer.cc
index 911be73..dfad8ba 100644
--- a/bauer/brueckenbauer.cc
+++ b/bauer/brueckenbauer.cc
@@ -44,7 +44,7 @@
 #include "../tpl/stringhashtable_tpl.h"
 #include "../tpl/vector_tpl.h"
 
-static vector_tpl<const bruecke_besch_t*> bruecken(16);
+
 static stringhashtable_tpl<const bruecke_besch_t *> bruecken_by_name;
 
 
@@ -54,8 +54,11 @@ static stringhashtable_tpl<const bruecke_besch_t *> bruecken_by_name;
  */
 void brueckenbauer_t::register_besch(const bruecke_besch_t *besch)
 {
+	// avoid duplicates with same name
+	if(  bruecken_by_name.remove(besch->get_name())  ) {
+		dbg->warning( "brueckenbauer_t::register_besch()", "Object %s was overlaid by addon!", besch->get_name() );
+	}
 	bruecken_by_name.put(besch->get_name(), besch);
-	bruecken.append(besch);
 }
 
 
@@ -72,8 +75,9 @@ bool brueckenbauer_t::laden_erfolgreich()
 	bool strasse_da = false;
 	bool schiene_da = false;
 
-	for(unsigned int i = 0; i < bruecken.get_count(); i++) {
-		const bruecke_besch_t* besch = bruecken[i];
+	stringhashtable_iterator_tpl<const bruecke_besch_t *>iter(bruecken_by_name);
+	while(  iter.next()  ) {
+		const bruecke_besch_t* besch = iter.get_current_value();
 
 		if(besch && besch->get_waytype() == track_wt) {
 			schiene_da = true;
@@ -105,8 +109,9 @@ brueckenbauer_t::find_bridge(const waytype_t wtyp, const uint32 min_speed,const
 {
 	const bruecke_besch_t *find_besch=NULL;
 
-	for(unsigned int i = 0; i < bruecken.get_count(); i++) {
-		const bruecke_besch_t* besch = bruecken[i];
+	stringhashtable_iterator_tpl<const bruecke_besch_t *>iter(bruecken_by_name);
+	while(  iter.next()  ) {
+		const bruecke_besch_t* besch = iter.get_current_value();
 		if(besch->get_waytype() == wtyp) {
 			if(time==0  ||  (besch->get_intro_year_month()<=time  &&  besch->get_retire_year_month()>time)) {
 				if(find_besch==NULL  ||
@@ -132,16 +137,17 @@ static bool compare_bridges(const bruecke_besch_t* a, const bruecke_besch_t* b)
  * Fill menu with icons of given waytype
  * @author Hj. Malthaner
  */
-void brueckenbauer_t::fill_menu(werkzeug_waehler_t *wzw, const waytype_t wtyp, const karte_t *welt)
+void brueckenbauer_t::fill_menu(werkzeug_waehler_t *wzw, const waytype_t wtyp, sint16 sound_ok, const karte_t *welt)
 {
 	static stringhashtable_tpl<wkz_brueckenbau_t *> bruecken_tool;
 
 	const uint16 time = welt->get_timeline_year_month();
+	vector_tpl<const bruecke_besch_t*> matching(bruecken_by_name.get_count());
 
 	// list of matching types (sorted by speed)
-	vector_tpl<const bruecke_besch_t*> matching;
-	for (vector_tpl<const bruecke_besch_t*>::const_iterator i = bruecken.begin(), end = bruecken.end(); i != end; ++i) {
-		const bruecke_besch_t* b = *i;
+	stringhashtable_iterator_tpl<const bruecke_besch_t *>iter(bruecken_by_name);
+	while(  iter.next()  ) {
+		const bruecke_besch_t* b = iter.get_current_value();
 		if (b->get_waytype() == wtyp && (
 					time == 0 ||
 					(b->get_intro_year_month() <= time && time < b->get_retire_year_month())
@@ -161,6 +167,7 @@ void brueckenbauer_t::fill_menu(werkzeug_waehler_t *wzw, const waytype_t wtyp, c
 			wkz->set_icon( besch->get_cursor()->get_bild_nr(1) );
 			wkz->cursor = besch->get_cursor()->get_bild_nr(0);
 			wkz->default_param = besch->get_name();
+			wkz->ok_sound = sound_ok;
 			bruecken_tool.put(besch->get_name(),wkz);
 		}
 		wzw->add_werkzeug( (werkzeug_t*)wkz );
@@ -170,12 +177,11 @@ void brueckenbauer_t::fill_menu(werkzeug_waehler_t *wzw, const waytype_t wtyp, c
 
 
 
-koord3d brueckenbauer_t::finde_ende(karte_t *welt, koord3d pos, koord zv, const bruecke_besch_t *besch, const char *&error_msg )
+koord3d brueckenbauer_t::finde_ende(karte_t *welt, koord3d pos, koord zv, const bruecke_besch_t *besch, const char *&error_msg, bool ai_bridge )
 {
 	const grund_t *gr1; // on the level of the bridge
 	const grund_t *gr2; // the level under the bridge
 	waytype_t wegtyp = besch->get_waytype();
-	leitung_t *lt;
 	error_msg = NULL;
 	sint16 length = 0;
 	do {
@@ -236,14 +242,24 @@ koord3d brueckenbauer_t::finde_ende(karte_t *welt, koord3d pos, koord zv, const
 		if(gr2  &&  (gr2->get_typ()==grund_t::boden  ||  gr2->get_typ()==grund_t::monorailboden)) {
 			ribi_t::ribi ribi = ribi_t::keine;
 			if(wegtyp != powerline_wt) {
-				ribi = gr2->get_weg_ribi_unmasked(wegtyp);
-			} else {
-				lt = dynamic_cast<leitung_t *> (gr2->suche_obj(ding_t::leitung));
-				if(lt) {
-					ribi = lt->get_ribi();
+				if(  gr2->has_two_ways()  &&  !gr2->ist_uebergang()  ) {
+					// If road and tram, we have to check both ribis.
+					ribi = gr2->get_weg_nr(0)->get_ribi_unmasked() | gr2->get_weg_nr(1)->get_ribi_unmasked();
+					if(  besch->get_waytype()  !=  road_wt  ) {
+						// only road bridges allowed here.
+						ribi = 15;
+					}
 				}
+				else {
+					ribi = gr2->get_weg_ribi_unmasked(wegtyp);
+				}
+			} else if (leitung_t *lt = gr2->find<leitung_t>()) {
+				ribi = lt->get_ribi();
 			}
 			if(gr2->get_grund_hang()==hang_t::flach) {
+				if(  ai_bridge  &&  !gr2->hat_wege()  &&  !gr2->get_leitung()  ) {
+					return pos;
+				}
 				if(gr2->get_typ()==grund_t::boden  &&  !gr2->get_halt().is_bound()) {
 					if(ribi_t::ist_einfach(ribi) && koord(ribi) == zv) {
 						// end with ramp, end way is already built
@@ -253,7 +269,7 @@ koord3d brueckenbauer_t::finde_ende(karte_t *welt, koord3d pos, koord zv, const
 						// end with ramp, end way is already built but ribi's are missing
 						return pos;
 					}
-					if(ribi==ribi_t::keine && wegtyp==powerline_wt && gr2->suche_obj(ding_t::leitung)) {
+					if (ribi == ribi_t::keine && wegtyp == powerline_wt && gr2->find<leitung_t>()) {
 						// end with ramp, end way is already built but ribi's are missing - for powerlines
 						return pos;
 					}
@@ -270,14 +286,16 @@ koord3d brueckenbauer_t::finde_ende(karte_t *welt, koord3d pos, koord zv, const
 					if(wegtyp!=powerline_wt && (!gr2->hat_wege() || gr2->hat_weg(wegtyp))) {
 						return pos;
 					}
-					if(wegtyp==powerline_wt && (!gr2->hat_wege() || gr2->suche_obj(ding_t::leitung))) {
+					if (wegtyp == powerline_wt && (!gr2->hat_wege() || gr2->find<leitung_t>())) {
 						return pos;
 					}
 				}
 			}
 		}
-	} while(!gr1 &&                             // no bridge is crossing
-		(!gr2 || gr2->get_grund_hang()==hang_t::flach  ||  gr2->get_hoehe()<pos.z ) ); // ground stays below bridge
+	} while(  !gr1  &&  // no bridge is crossing
+		(!gr2 || gr2->get_grund_hang()==hang_t::flach  ||  gr2->get_hoehe()<pos.z )  &&  // ground stays below bridge
+		(!ai_bridge  ||  length <= welt->get_einstellungen()->way_max_bridge_len)  // not too long in case of AI
+		);
 
 	error_msg = "A bridge must start on a way!";
 	return koord3d::invalid;
@@ -328,12 +346,27 @@ const char *brueckenbauer_t::baue( karte_t *welt, spieler_t *sp, koord pos, cons
 	leitung_t *lt = NULL;
 
 	if(!weg) {
-		lt = static_cast<leitung_t *>(gr->suche_obj(ding_t::leitung));
+		lt = gr->find<leitung_t>();
 		if(lt) {
 			ribi = lt->get_ribi();
 			powerbridge = true;
 		}
 	}
+	else {
+		if(  gr->has_two_ways()  &&  !gr->ist_uebergang()  ) {
+			// If road and tram, we have to check both ribis.
+			ribi = gr->get_weg_nr(0)->get_ribi_unmasked() | gr->get_weg_nr(1)->get_ribi_unmasked();
+
+			if(  besch->get_waytype()  !=  road_wt  ) {
+				// only road bridges allowed here.
+				ribi = 0;
+			}
+		}
+		else {
+			ribi = weg->get_ribi_unmasked();
+		}
+	}
+
 	if((!lt && !weg) || !ist_ende_ok(sp, gr)) {
 		DBG_MESSAGE("brueckenbauer_t::baue()", "no way %x found",besch->get_waytype());
 		return "A bridge must start on a way!";
@@ -347,30 +380,15 @@ const char *brueckenbauer_t::baue( karte_t *welt, spieler_t *sp, koord pos, cons
 		return "Bruecke muss an\neinfachem\nHang beginnen!\n";
 	}
 
-	if(powerbridge) {
-		if(gr->get_grund_hang() == hang_t::flach) {
-			if(!ribi_t::ist_einfach(ribi)) {
-				ribi = 0;
-			}
-		}
-		else {
-			ribi = ribi_typ(gr->get_grund_hang());
-			if(lt->get_ribi() & ~ribi) {
-				ribi = 0;
-			}
-		}
-	} else {
-		if(gr->get_grund_hang() == hang_t::flach) {
-			ribi = weg->get_ribi_unmasked();
-			if(!ribi_t::ist_einfach(ribi)) {
-				ribi = 0;
-			}
+	if(gr->get_grund_hang() == hang_t::flach) {
+		if(!ribi_t::ist_einfach(ribi)) {
+			ribi = 0;
 		}
-		else {
-			ribi = ribi_typ(gr->get_grund_hang());
-			if(weg->get_ribi_unmasked() & ~ribi) {
-				ribi = 0;
-			}
+	}
+	else {
+		ribi_t::ribi hang_ribi = ribi_typ(gr->get_grund_hang());
+		if(ribi & ~hang_ribi) {
+			ribi = 0;
 		}
 	}
 
@@ -396,7 +414,8 @@ DBG_MESSAGE("brueckenbauer_t::baue()", "end not ok");
 	// Anfang und ende sind geprueft, wir konnen endlich bauen
 	if(powerbridge) {
 		baue_bruecke(welt, sp, gr->get_pos(), end, zv, besch, wegbauer_t::leitung_besch );
-	} else {
+	}
+	else {
 		baue_bruecke(welt, sp, gr->get_pos(), end, zv, besch, weg->get_besch() );
 	}
 	return NULL;
@@ -411,11 +430,8 @@ void brueckenbauer_t::baue_bruecke(karte_t *welt, spieler_t *sp, koord3d pos, ko
 	baue_auffahrt(welt, sp, pos, zv, besch, weg_besch );
 	if(besch->get_waytype() != powerline_wt) {
 		ribi = welt->lookup(pos)->get_weg_ribi_unmasked(besch->get_waytype());
-	} else {
-		leitung_t *lt = static_cast<leitung_t *>(welt->lookup(pos)->suche_obj(ding_t::leitung));
-		if(lt) {
-			ribi = lt->get_ribi();
-		}
+	} else if (leitung_t *lt = welt->lookup(pos)->find<leitung_t>()) {
+		ribi = lt->get_ribi();
 	}
 	pos = pos + zv;
 
@@ -426,7 +442,8 @@ void brueckenbauer_t::baue_bruecke(karte_t *welt, spieler_t *sp, koord3d pos, ko
 			weg = weg_t::alloc(besch->get_waytype());
 			weg->set_besch(weg_besch);
 			bruecke->neuen_weg_bauen(weg, ribi_t::doppelt(ribi), sp);
-		} else {
+		}
+		else {
 			leitung_t *lt = new leitung_t(welt, bruecke->get_pos(), sp);
 			bruecke->obj_add( lt );
 			lt->laden_abschliessen();
@@ -455,7 +472,7 @@ void brueckenbauer_t::baue_bruecke(karte_t *welt, spieler_t *sp, koord3d pos, ko
 	}
 
 	// must determine end tile: on a slope => likely need auffahrt
-	bool need_auffahrt = (pos.z==end.z);
+	bool need_auffahrt = pos.z == welt->lookup(end)->get_vmove(-zv);
 	if(need_auffahrt) {
 		grund_t *gr = welt->lookup(end);
 		weg_t *w = gr->get_weg( (waytype_t)weg_besch->get_wtyp());
@@ -482,7 +499,8 @@ void brueckenbauer_t::baue_bruecke(karte_t *welt, spieler_t *sp, koord3d pos, ko
 				weg->laden_abschliessen();
 			}
 			gr->calc_bild();
-		} else {
+		}
+		else {
 			leitung_t *lt = gr->get_leitung();
 			if(  lt==NULL  ) {
 				lt = new leitung_t( welt, end, sp );
@@ -531,12 +549,14 @@ void brueckenbauer_t::baue_auffahrt(karte_t* welt, spieler_t* sp, koord3d end, k
 			bruecke->neuen_weg_bauen( weg, ribi_neu, sp );
 		}
 		weg->set_max_speed( besch->get_topspeed() );
-	} else {
+	}
+	else {
 		leitung_t *lt = bruecke->get_leitung();
 		if(!lt) {
 			lt = new leitung_t(welt, bruecke->get_pos(), sp);
 			bruecke->obj_add( lt );
-		} else {
+		}
+		else {
 			// remove maintainance
 			spieler_t::add_maintenance( sp, -wegbauer_t::leitung_besch->get_wartung());
 		}
@@ -612,6 +632,10 @@ const char *brueckenbauer_t::remove(karte_t *welt, spieler_t *sp, koord3d pos, w
 		delete br;
 
 		gr->remove_everything_from_way(sp,wegtyp,ribi_t::keine);	// removes stop and signals correctly
+		// remove also the second way on the bridge
+		if(gr->get_weg_nr(0)!=0) {
+			gr->remove_everything_from_way(sp,gr->get_weg_nr(0)->get_waytype(),ribi_t::keine);
+		}
 
 		// we may have a second way/powerline here ...
 		gr->obj_loesche_alle(sp);
@@ -639,32 +663,36 @@ const char *brueckenbauer_t::remove(karte_t *welt, spieler_t *sp, koord3d pos, w
 				br->entferne(sp);
 				delete br;
 			}
-		} else {
+		}
+		else {
 			ribi_t::ribi ribi = gr->get_weg_ribi_unmasked(wegtyp);
+			ribi_t::ribi bridge_ribi;
 
 			if(gr->get_grund_hang() != hang_t::flach) {
-				ribi &= ~ribi_typ(hang_t::gegenueber(gr->get_grund_hang()));
+				bridge_ribi = ~ribi_typ(hang_t::gegenueber(gr->get_grund_hang()));
 			}
 			else {
-				ribi &= ~ribi_typ(gr->get_weg_hang());
+				bridge_ribi = ~ribi_typ(gr->get_weg_hang());
 			}
+			ribi &= bridge_ribi;
 
 			bruecke_t *br = gr->find<bruecke_t>();
 			br->entferne(sp);
 			delete br;
 
 			// removes single signals, bridge head, pedestrians, stops, changes catenary etc
-			gr->remove_everything_from_way(sp,wegtyp,ribi);	// removes stop and signals correctly
+			weg_t *weg=gr->get_weg_nr(1);
+			if(weg) {
+				gr->remove_everything_from_way(sp,weg->get_waytype(),bridge_ribi);
+			}
+			gr->remove_everything_from_way(sp,wegtyp,bridge_ribi);	// removes stop and signals correctly
 
 			// corrects the ways
-			weg_t *weg=gr->get_weg_nr(0);
+			weg=gr->get_weg(wegtyp);
 			if(weg) {
 				// may fail, if this was the last tile
 				weg->set_besch(weg->get_besch());
 				weg->set_ribi( ribi );
-				if(gr->get_weg_nr(1)) {
-					gr->get_weg_nr(1)->set_ribi( ribi );
-				}
 			}
 		}
 
diff --git a/bauer/brueckenbauer.h b/bauer/brueckenbauer.h
index 35c6c52..1609597 100644
--- a/bauer/brueckenbauer.h
+++ b/bauer/brueckenbauer.h
@@ -11,16 +11,13 @@
 #include "../simtypes.h"
 #include "../dataobj/koord.h"
 #include "../dataobj/koord3d.h"
-#include "../boden/wege/weg.h"
-
-// Hajo: these are needed to build the menu entries
-#include "../gui/werkzeug_waehler.h"
-#include "../besch/skin_besch.h"
 
 class bruecke_besch_t;
+class grund_t;
 class karte_t;                 // Hajo: 22-Nov-01: Added forward declaration
 class spieler_t;               // Hajo: 22-Nov-01: Added forward declaration
-class grund_t;
+class weg_besch_t;
+class werkzeug_waehler_t;
 
 /**
  * Baut Brücken. Brücken sollten nicht direct instanziiert werden
@@ -33,12 +30,16 @@ class grund_t;
 class brueckenbauer_t {
 private:
 
+	brueckenbauer_t() {} // private -> no instance please
+
+
+public:
 	/*
 	 * Grund bestimmen, auf dem die Brücke enden soll.
 	 *
 	 * @author V. Meyer
 	 */
-	static koord3d finde_ende(karte_t *welt, koord3d pos, koord zv, const bruecke_besch_t *besch, const char *&msg );
+	static koord3d finde_ende(karte_t *welt, koord3d pos, koord zv, const bruecke_besch_t *besch, const char *&msg, bool ai_bridge=false );
 
 	/*
 	 * Brückenendpunkte bei Rampen werden auf flachem Grund gebaut und müssen daher genauer
@@ -48,11 +49,6 @@ private:
 	 */
 	static bool ist_ende_ok(spieler_t *sp, const grund_t *gr);
 
-
-	brueckenbauer_t() {} // private -> no instance please
-
-
-public:
 	// built a ramp to change level
 	static void baue_auffahrt(karte_t *welt, spieler_t *sp, koord3d pos, koord zv, const bruecke_besch_t *besch, const weg_besch_t *weg_besch);
 
@@ -92,7 +88,7 @@ public:
 	 * Fill menu with icons of given waytype
 	 * @author priss
 	 */
-	static void fill_menu(werkzeug_waehler_t *wzw, const waytype_t wtyp, const karte_t *welt);
+	static void fill_menu(werkzeug_waehler_t *wzw, const waytype_t wtyp, sint16 sound_ok, const karte_t *welt);
 };
 
 #endif
diff --git a/bauer/fabrikbauer.cc b/bauer/fabrikbauer.cc
index 772723d..e9b30d0 100644
--- a/bauer/fabrikbauer.cc
+++ b/bauer/fabrikbauer.cc
@@ -192,20 +192,23 @@ DBG_MESSAGE("fabrikbauer_t::get_random_consumer()","No suitable consumer found")
 
 const fabrik_besch_t *fabrikbauer_t::get_fabesch(const char *fabtype)
 {
-    return table.get(fabtype);
+	return table.get(fabtype);
 }
 
 
 
 void fabrikbauer_t::register_besch(fabrik_besch_t *besch)
 {
- 	uint16 p=besch->get_produktivitaet();
- 	if(p&0x8000) {
- 		koord k=besch->get_haus()->get_groesse();
- 		// to be compatible with old factories, since new code only steps once per factory, not per tile
- 		besch->set_produktivitaet( (p&0x7FFF)*k.x*k.y );
+	uint16 p=besch->get_produktivitaet();
+	if(p&0x8000) {
+		koord k=besch->get_haus()->get_groesse();
+		// to be compatible with old factories, since new code only steps once per factory, not per tile
+		besch->set_produktivitaet( (p&0x7FFF)*k.x*k.y );
 DBG_DEBUG("fabrikbauer_t::register_besch()","Correction for old factory: Increase poduction from %i by %i",p&0x7FFF,k.x*k.y);
- 	}
+	}
+	if(  table.remove(besch->get_name())  ) {
+		dbg->warning( "fabrikbauer_t::register_besch()", "Object %s was overlaid by addon!", besch->get_name() );
+	}
 	table.put(besch->get_name(), besch);
 }
 
@@ -277,8 +280,7 @@ const fabrik_besch_t *fabrikbauer_t::finde_hersteller(const ware_besch_t *ware,
 
 
 
-koord3d
-fabrikbauer_t::finde_zufallsbauplatz(karte_t * welt, const koord3d pos, const int radius, koord groesse, bool wasser, const haus_besch_t *besch)
+koord3d fabrikbauer_t::finde_zufallsbauplatz(karte_t *welt, const koord3d pos, const int radius, koord groesse, bool wasser, const haus_besch_t *besch, bool ignore_climates)
 {
 	static vector_tpl<koord3d> list(10000);
 	koord k;
@@ -289,6 +291,8 @@ fabrikbauer_t::finde_zufallsbauplatz(karte_t * welt, const koord3d pos, const in
 		groesse += koord(6,6);
 	}
 
+	climate_bits climates = !ignore_climates ? besch->get_allowed_climate_bits() : ALL_CLIMATES;
+
 	// check no factory but otherwise good place
 	for(k.y=pos.y-radius; k.y<=pos.y+radius; k.y++) {
 		if(k.y<0) continue;
@@ -301,7 +305,7 @@ fabrikbauer_t::finde_zufallsbauplatz(karte_t * welt, const koord3d pos, const in
 			if(is_fabrik  &&  is_factory_at(k.x,k.y)) {
 				continue;
 			}
-			if(fabrik_t::ist_bauplatz(welt, k, groesse,wasser,besch->get_allowed_climate_bits())) {
+			if(fabrik_t::ist_bauplatz(welt, k, groesse,wasser,climates)) {
 				list.append(welt->lookup(k)->get_kartenboden()->get_pos());
 				// nicht gleich daneben nochmal suchen
 				k.x += 4;
@@ -341,7 +345,7 @@ void fabrikbauer_t::verteile_tourist(karte_t* welt, int max_number)
 	}
 
 	// very fast, so we do not bother updating progress bar
-	print("Distributing %i tourist attractions ...\n",max_number);fflush(NULL);
+	printf("Distributing %i tourist attractions ...\n",max_number);fflush(NULL);
 
 	int retrys = max_number*4;
 	while(current_number<max_number  &&  retrys-->0) {
@@ -354,7 +358,7 @@ void fabrikbauer_t::verteile_tourist(karte_t* welt, int max_number)
 		}
 
 		int	rotation=simrand(attraction->get_all_layouts()-1);
-		pos = finde_zufallsbauplatz(welt, pos, 20, attraction->get_groesse(rotation),false,attraction);	// so far -> land only
+		pos = finde_zufallsbauplatz(welt, pos, 20, attraction->get_groesse(rotation),false,attraction,false);	// so far -> land only
 		if(welt->lookup(pos)) {
 			// Platz gefunden ...
 			hausbauer_t::baue(welt, welt->get_spieler(1), pos, rotation, attraction);
@@ -364,7 +368,7 @@ void fabrikbauer_t::verteile_tourist(karte_t* welt, int max_number)
 
 	}
 	// update an open map
-	reliefkarte_t::get_karte()->calc_map();
+	reliefkarte_t::get_karte()->calc_map_groesse();
 }
 
 
@@ -400,7 +404,10 @@ fabrik_t* fabrikbauer_t::baue_fabrik(karte_t* welt, koord3d* parent, const fabri
 					if(welt->ist_in_kartengrenzen(k)) {
 						// add all water to station
 						grund_t *gr = welt->lookup(k)->get_kartenboden();
-						if(gr->ist_wasser() && gr->hat_weg(water_wt) == 0) {
+						// build only on gb, otherwise can't remove it
+						// also savegame restore only halt on gb
+						// this needs for bad fish swarm
+						if(gr->ist_wasser()  &&  gr->hat_weg(water_wt) == 0  &&  gr->find<gebaeude_t>()) {
 							halt->add_grund( gr );
 						}
 					}
@@ -562,8 +569,8 @@ DBG_MESSAGE("fabrikbauer_t::baue_hierarchie","Construction of %s at (%i,%i).",in
 	if(parent==NULL) {
 		DBG_MESSAGE("fabrikbauer_t::baue_hierarchie()","update karte");
 
-		// update an open map
-		reliefkarte_t::get_karte()->calc_map();
+		// update the map if needed
+		reliefkarte_t::get_karte()->calc_map_groesse();
 
 		INT_CHECK( "fabrikbauer 730" );
 
@@ -668,7 +675,8 @@ DBG_MESSAGE("fabrikbauer_t::baue_hierarchie","lieferanten %i, lcount %i (need %i
 									slist_tpl<fabs_to_crossconnect_t>::iterator i = std::find(factories_to_correct.begin(), factories_to_correct.end(), fabs_to_crossconnect_t(zfab, 0));
 									if (i == factories_to_correct.end()) {
 										factories_to_correct.append(fabs_to_crossconnect_t(zfab, 1));
-									} else {
+									}
+									else {
 										i->demand += 1;
 									}
 								}
@@ -736,7 +744,8 @@ DBG_MESSAGE("fabrikbauer_t::baue_hierarchie","lieferanten %i, lcount %i (need %i
 
 		int rotate = simrand(hersteller->get_haus()->get_all_layouts()-1);
 		koord3d parent_pos = our_fab->get_pos();
-		koord3d k = finde_zufallsbauplatz(welt, our_fab->get_pos()+(retry_koord[retry%25]*DISTANCE*2), DISTANCE, hersteller->get_haus()->get_groesse(rotate),hersteller->get_platzierung()==fabrik_besch_t::Wasser,hersteller->get_haus());
+		// ignore climates, when already 40 retrys occurred ...
+		koord3d k = finde_zufallsbauplatz(welt, our_fab->get_pos()+(retry_koord[retry%25]*DISTANCE*2), DISTANCE, hersteller->get_haus()->get_groesse(rotate),hersteller->get_platzierung()==fabrik_besch_t::Wasser,hersteller->get_haus(),j>40);
 
 		INT_CHECK("fabrikbauer 697");
 
@@ -788,7 +797,8 @@ DBG_MESSAGE("fabrikbauer_t::baue_hierarchie","failed to built lieferant %s aroun
 			(*i).fab->add_supplier( (*fab)->get_pos().get_2d() );
 			if (i->demand < 0) {
 				i = factories_to_correct.erase(i);
-			} else {
+			}
+			else {
 				++i;
 			}
 		}
@@ -846,12 +856,30 @@ next_ware_check:
 
 	// first: do we have to continue unfinished buissness?
 	if(last_built_consumer  &&  last_built_consumer_ware < last_built_consumer->get_besch()->get_lieferanten()) {
+		int org_rotation = -1;
+		// rotate until we can save it, if one of the factory is non-rotateable ...
+		if(welt->cannot_save()  &&  !can_factory_tree_rotate(last_built_consumer->get_besch()) ) {
+			org_rotation = welt->get_einstellungen()->get_rotation();
+			for(  int i=0;  i<3  &&  welt->cannot_save();  i++  ) {
+				welt->rotate90();
+			}
+			assert( !welt->cannot_save() );
+		}
+
 		uint32 last_suppliers = last_built_consumer->get_suppliers().get_count();
 		do {
 			nr += baue_link_hierarchie( last_built_consumer, last_built_consumer->get_besch(), last_built_consumer_ware, welt->get_spieler(1) );
 			last_built_consumer_ware ++;
 		} while(  last_built_consumer_ware < last_built_consumer->get_besch()->get_lieferanten()  &&  last_built_consumer->get_suppliers().get_count()==last_suppliers  );
 
+		// must rotate back?
+		if(org_rotation>=0) {
+			for(  int i=0;  i<4  &&  welt->get_einstellungen()->get_rotation()!=org_rotation;  i++  ) {
+				welt->rotate90();
+			}
+			welt->update_map();
+		}
+
 		// only return, if successfull
 		if(  last_built_consumer->get_suppliers().get_count() > last_suppliers  ) {
 			DBG_MESSAGE( "fabrikbauer_t::increase_industry_density()", "added ware %i to factory %s", last_built_consumer_ware, last_built_consumer->get_name() );
@@ -890,8 +918,9 @@ next_ware_check:
 	// now decide producer of electricity or normal ...
 	sint32 promille = (electric_productivity*4000l)/total_produktivity;
 	int no_electric = promille > welt->get_einstellungen()->get_electric_promille();
-	DBG_MESSAGE( "fabrikbauer_t::increase_industry_density()", "production of electricity/total production is %i/%i (%i°/oo)", electric_productivity, total_produktivity, promille );
+	DBG_MESSAGE( "fabrikbauer_t::increase_industry_density()", "production of electricity/total production is %i/%i (%i o/oo)", electric_productivity, total_produktivity, promille );
 
+	bool not_yet_too_desperate_to_ignore_climates = false;
 	while(  no_electric<2  ) {
 		for(int retrys=20;  retrys>0;  retrys--  ) {
 			const fabrik_besch_t *fab=get_random_consumer( no_electric==0, ALL_CLIMATES, welt->get_timeline_year_month() );
@@ -907,7 +936,7 @@ next_ware_check:
 
 				int	rotation=simrand(fab->get_haus()->get_all_layouts()-1);
 				if(!in_city) {
-					pos = finde_zufallsbauplatz(welt, pos, 20, fab->get_haus()->get_groesse(rotation),fab->get_platzierung()==fabrik_besch_t::Wasser,fab->get_haus());
+					pos = finde_zufallsbauplatz(welt, pos, 20, fab->get_haus()->get_groesse(rotation),fab->get_platzierung()==fabrik_besch_t::Wasser,fab->get_haus(),not_yet_too_desperate_to_ignore_climates);
 				}
 				if(welt->lookup(pos)) {
 					// Platz gefunden ...
@@ -918,7 +947,7 @@ next_ware_check:
 							last_built_consumer = our_fab;
 							last_built_consumer_ware = 1;
 						}
-						reliefkarte_t::get_karte()->calc_map();
+						reliefkarte_t::get_karte()->calc_map_groesse();
 						// tell the player
 						if(tell_me) {
 							stadt_t *s = welt->suche_naechste_stadt( pos.get_2d() );
@@ -930,6 +959,11 @@ next_ware_check:
 						return nr;
 					}
 				}
+				else if(  retrys==1  &&  not_yet_too_desperate_to_ignore_climates  ) {
+					// from now one, we will ignore climates to avoid broken chains
+					not_yet_too_desperate_to_ignore_climates = true;
+					retrys = 20;
+				}
 			}
 		}
 		// if electricity not sucess => try next
diff --git a/bauer/fabrikbauer.h b/bauer/fabrikbauer.h
index fd07fc1..ae3ebe1 100644
--- a/bauer/fabrikbauer.h
+++ b/bauer/fabrikbauer.h
@@ -9,7 +9,6 @@
 #define fabrikbauer_t_h
 
 #include "../tpl/stringhashtable_tpl.h"
-#include "../tpl/array_tpl.h"
 #include "../dataobj/koord3d.h"
 
 class haus_besch_t;
@@ -122,7 +121,7 @@ public:
 
 private:
 	// bauhilfen
-	static koord3d finde_zufallsbauplatz(karte_t *welt, koord3d pos, int radius, koord groesse,bool on_water, const haus_besch_t *besch);
+	static koord3d finde_zufallsbauplatz(karte_t *welt, koord3d pos, int radius, koord groesse,bool on_water, const haus_besch_t *besch, bool ignore_climates);
 
 	// check, if we have to rotate the factories before building this tree
 	static bool can_factory_tree_rotate( const fabrik_besch_t *besch );
diff --git a/bauer/hausbauer.cc b/bauer/hausbauer.cc
index e66da22..9b428a2 100644
--- a/bauer/hausbauer.cc
+++ b/bauer/hausbauer.cc
@@ -13,6 +13,7 @@
 #include "../besch/spezial_obj_tpl.h"
 
 #include "../boden/boden.h"
+#include "../boden/wasser.h"
 #include "../boden/fundament.h"
 
 #include "../dataobj/translator.h"
@@ -98,6 +99,64 @@ static bool compare_station_besch(const haus_besch_t* a, const haus_besch_t* b)
 
 bool hausbauer_t::alles_geladen()
 {
+	stringhashtable_iterator_tpl<const haus_besch_t *>iter(besch_names);
+	while(  iter.next()  ) {
+		const haus_besch_t* besch = iter.get_current_value();
+
+		switch(besch->get_typ()) {
+			case gebaeude_t::wohnung:
+				wohnhaeuser.append(besch);
+				break;
+			case gebaeude_t::industrie:
+				industriehaeuser.append(besch);
+				break;
+			case gebaeude_t::gewerbe:
+				gewerbehaeuser.append(besch);
+				break;
+
+			case gebaeude_t::unbekannt:
+			switch (besch->get_utyp()) {
+				case haus_besch_t::denkmal:
+					denkmaeler.append(besch);
+					break;
+				case haus_besch_t::attraction_land:
+					sehenswuerdigkeiten_land.append(besch);
+					break;
+				case haus_besch_t::firmensitz:
+					headquarter.append(besch);
+					break;
+				case haus_besch_t::rathaus:
+					rathaeuser.append(besch);
+					break;
+				case haus_besch_t::attraction_city:
+					sehenswuerdigkeiten_city.append(besch);
+					break;
+
+				case haus_besch_t::fabrik:
+					break;
+
+				case haus_besch_t::hafen:
+				case haus_besch_t::hafen_geb:
+				case haus_besch_t::depot:
+				case haus_besch_t::generic_stop:
+				case haus_besch_t::generic_extension:
+					station_building.append(besch);
+					break;
+
+				case haus_besch_t::weitere:
+					if(strcmp(besch->get_name(),"MonorailGround")==0) {
+						// foundation for elevated ways
+						elevated_foundation_besch = besch;
+						break;
+					}
+				default:
+					// obsolete object, usually such pak set will not load properly anyway (old objects should be catched before!)
+					dbg->error("hausbauer_t::alles_geladen()","unknown subtype %i of \"%s\" ignored",besch->get_utyp(),besch->get_name());
+			}
+		}
+	}
+
+	// now sort them according level
 	std::sort(wohnhaeuser.begin(),      wohnhaeuser.end(),      compare_haus_besch);
 	std::sort(gewerbehaeuser.begin(),   gewerbehaeuser.end(),   compare_haus_besch);
 	std::sort(industriehaeuser.begin(), industriehaeuser.end(), compare_haus_besch);
@@ -112,41 +171,11 @@ bool hausbauer_t::register_besch(const haus_besch_t *besch)
 {
 	::register_besch(spezial_objekte, besch);
 
-	switch(besch->get_typ()) {
-		case gebaeude_t::wohnung:   wohnhaeuser.append(besch);      break;
-		case gebaeude_t::industrie: industriehaeuser.append(besch); break;
-		case gebaeude_t::gewerbe:   gewerbehaeuser.append(besch);   break;
-
-		case gebaeude_t::unbekannt:
-		switch (besch->get_utyp()) {
-			case haus_besch_t::denkmal:         denkmaeler.append(besch);               break;
-			case haus_besch_t::attraction_land: sehenswuerdigkeiten_land.append(besch); break;
-			case haus_besch_t::firmensitz:      headquarter.append(besch);           break;
-			case haus_besch_t::rathaus:         rathaeuser.append(besch);               break;
-			case haus_besch_t::attraction_city: sehenswuerdigkeiten_city.append(besch); break;
-
-			case haus_besch_t::fabrik: break;
-
-			case haus_besch_t::hafen:
-			case haus_besch_t::hafen_geb:
-			case haus_besch_t::depot:
-			case haus_besch_t::generic_stop:
-			case haus_besch_t::generic_extension:
-				station_building.append(besch);
-DBG_DEBUG("hausbauer_t::register_besch()","Infrastructure %s",besch->get_name());
-				break;
-
-			case haus_besch_t::weitere:
-				if(strcmp(besch->get_name(),"MonorailGround")==0) {
-					// foundation for elevated ways
-					elevated_foundation_besch = besch;
-					break;
-				}
-			default:
-DBG_DEBUG("hausbauer_t::register_besch()","unknown subtype %i of %s: ignored",besch->get_utyp(),besch->get_name());
-				return false;
-		}
+	// avoid duplicates with same name
+	if(besch_names.remove(besch->get_name())) {
+		dbg->warning( "hausbauer_t::register_besch()", "Object %s was overlaid by addon!", besch->get_name() );
 	}
+	besch_names.put(besch->get_name(), besch);
 
 	/* supply the tiles with a pointer back to the matchin description
 	 * this is needed, since each building is build of seperate tiles,
@@ -157,10 +186,6 @@ DBG_DEBUG("hausbauer_t::register_besch()","unknown subtype %i of %s: ignored",be
 		const_cast<haus_tile_besch_t *>(besch->get_tile(i))->set_besch(besch);
 	}
 
-	if(besch_names.get(besch->get_name())) {
-		dbg->fatal("hausbauer_t::register_Besch()", "building %s duplicated", besch->get_name());
-	}
-	besch_names.put(besch->get_name(), besch);
 	return true;
 }
 
@@ -171,7 +196,7 @@ static stringhashtable_tpl<wkz_station_t *> station_tool;
 static stringhashtable_tpl<wkz_depot_t *> depot_tool;
 
 // all these menus will need a waytype ...
-void hausbauer_t::fill_menu(werkzeug_waehler_t* wzw, haus_besch_t::utyp utyp, waytype_t wt, const karte_t* welt)
+void hausbauer_t::fill_menu(werkzeug_waehler_t* wzw, haus_besch_t::utyp utyp, waytype_t wt, sint16 sound_ok, const karte_t* welt)
 {
 	const uint16 time = welt->get_timeline_year_month();
 DBG_DEBUG("hausbauer_t::fill_menu()","maximum %i",station_building.get_count());
@@ -189,6 +214,7 @@ DBG_DEBUG("hausbauer_t::fill_menu()","maximum %i",station_building.get_count());
 						wkz->set_icon( besch->get_cursor()->get_bild_nr(1) );
 						wkz->cursor = besch->get_cursor()->get_bild_nr(0);
 						wkz->default_param = besch->get_name();
+						wkz->ok_sound = sound_ok;
 						depot_tool.put(besch->get_name(),wkz);
 					}
 					wzw->add_werkzeug( (werkzeug_t*)wkz );
@@ -201,6 +227,7 @@ DBG_DEBUG("hausbauer_t::fill_menu()","maximum %i",station_building.get_count());
 						wkz->set_icon( besch->get_cursor()->get_bild_nr(1) );
 						wkz->cursor = besch->get_cursor()->get_bild_nr(0),
 						wkz->default_param = besch->get_name();
+						wkz->ok_sound = sound_ok;
 						station_tool.put(besch->get_name(),wkz);
 					}
 					wzw->add_werkzeug( (werkzeug_t*)wkz );
@@ -318,20 +345,32 @@ void hausbauer_t::remove( karte_t *welt, spieler_t *sp, gebaeude_t *gb )
 					// and maybe restore land below
 					if(gr->get_typ()==grund_t::fundament) {
 						const koord newk = k+pos.get_2d();
-						const uint8 new_slope = gr->get_hoehe()==welt->min_hgt(newk) ? 0 : welt->calc_natural_slope(newk);
-						if(welt->lookup(koord3d(newk,welt->min_hgt(newk)))!=gr) {
-							// there is another ground below => do not change hight, keep foundation
+						sint8 new_hgt;
+						const uint8 new_slope = welt->recalc_natural_slope(newk,new_hgt);
+						const grund_t *gr2 = welt->lookup(koord3d(newk,new_hgt));
+						bool ground_recalc = true;
+						if(gr2  &&  gr2!=gr) {
+							// there is another ground below => do not change height, keep foundation
 							welt->access(newk)->kartenboden_setzen( new boden_t(welt, gr->get_pos(), hang_t::flach ) );
+							ground_recalc = false;
+						}
+						else if(  new_hgt<=welt->get_grundwasser()  &&  new_slope==hang_t::flach  ) {
+							welt->access(newk)->kartenboden_setzen(new wasser_t(welt, koord3d(newk,new_hgt) ) );
 						}
 						else {
-							welt->access(newk)->kartenboden_setzen(new boden_t(welt, koord3d(newk,welt->min_hgt(newk) ), new_slope) );
+							if(  (gr2==NULL  ||  gr2==gr)  &&  gr->get_grund_hang()==new_slope  ) {
+								ground_recalc = false;
+							}
+							welt->access(newk)->kartenboden_setzen(new boden_t(welt, koord3d(newk,new_hgt), new_slope) );
 						}
 						// there might be walls from foundations left => thus some tiles may needs to be redraw
-						if(new_slope!=0) {
-							if(pos.x<welt->get_groesse_x()-1)
+						if(ground_recalc) {
+							if(pos.x<welt->get_groesse_x()-1) {
 								welt->lookup_kartenboden(newk+koord::ost)->calc_bild();
-							if(pos.y<welt->get_groesse_y()-1)
+							}
+							if(pos.y<welt->get_groesse_y()-1) {
 								welt->lookup_kartenboden(newk+koord::sued)->calc_bild();
+							}
 						}
 					}
 				}
@@ -387,7 +426,8 @@ gebaeude_t* hausbauer_t::baue(karte_t* welt, spieler_t* sp, koord3d pos, int org
 			} else if (besch->get_utyp() == haus_besch_t::hafen) {
 				// its a dock!
 				gr->obj_add(gb);
-			} else {
+			}
+			else {
 				// very likely remove all
 				leitung_t *lt = NULL;
 				if(!gr->hat_wege()) {
diff --git a/bauer/hausbauer.h b/bauer/hausbauer.h
index dc7500e..875558c 100644
--- a/bauer/hausbauer.h
+++ b/bauer/hausbauer.h
@@ -69,7 +69,7 @@ public:
 	 * this is only needed for stations and depots => use waytype too!
 	 * @author prissi
 	 */
-	static void fill_menu(werkzeug_waehler_t* wzw, haus_besch_t::utyp, waytype_t wt, const karte_t* welt);
+	static void fill_menu(werkzeug_waehler_t* wzw, haus_besch_t::utyp, waytype_t wt, sint16 sound_ok, const karte_t* welt);
 
 	/**
 	 * Gewerbegebäude passend zum Level liefern. Zur Zeit sind die Einträge
diff --git a/bauer/tunnelbauer.cc b/bauer/tunnelbauer.cc
index 958a128..8579346 100644
--- a/bauer/tunnelbauer.cc
+++ b/bauer/tunnelbauer.cc
@@ -46,16 +46,16 @@
 #include "../tpl/vector_tpl.h"
 
 
-static vector_tpl<tunnel_besch_t*> tunnel(16);
 static stringhashtable_tpl<tunnel_besch_t *> tunnel_by_name;
 
 
-
-void
-tunnelbauer_t::register_besch(tunnel_besch_t *besch)
+void tunnelbauer_t::register_besch(tunnel_besch_t *besch)
 {
+	// avoid duplicates with same name
+	if(  tunnel_by_name.remove(besch->get_name())  ) {
+		dbg->warning( "tunnelbauer_t::register_besch()", "Object %s was overlaid by addon!", besch->get_name() );
+	}
 	tunnel_by_name.put(besch->get_name(), besch);
-	tunnel.append(besch);
 }
 
 
@@ -64,8 +64,10 @@ tunnelbauer_t::register_besch(tunnel_besch_t *besch)
 bool
 tunnelbauer_t::laden_erfolgreich()
 {
-	for (vector_tpl<tunnel_besch_t*>::const_iterator i = tunnel.begin(), end = tunnel.end(); i != end; ++i) {
-		tunnel_besch_t* besch = *i;
+	stringhashtable_iterator_tpl<tunnel_besch_t *>iter(tunnel_by_name);
+	while(  iter.next()  ) {
+		tunnel_besch_t* besch = iter.get_current_value();
+
 		if(besch->get_topspeed()==0) {
 			// old style, need to convert
 			if(strcmp(besch->get_name(),"RoadTunnel")==0) {
@@ -108,8 +110,10 @@ tunnelbauer_t::find_tunnel(const waytype_t wtyp, const uint32 min_speed,const ui
 {
 	const tunnel_besch_t *find_besch=NULL;
 
-	for (vector_tpl<tunnel_besch_t*>::const_iterator i = tunnel.begin(), end = tunnel.end(); i != end; ++i) {
-		const tunnel_besch_t* besch = *i;
+	stringhashtable_iterator_tpl<tunnel_besch_t *>iter(tunnel_by_name);
+	while(  iter.next()  ) {
+		tunnel_besch_t* besch = iter.get_current_value();
+
 		if(besch->get_waytype() == wtyp) {
 			if(time==0  ||  (besch->get_intro_year_month()<=time  &&  besch->get_retire_year_month()>time)) {
 				if(find_besch==NULL  ||
@@ -142,14 +146,16 @@ static bool compare_tunnels(const tunnel_besch_t* a, const tunnel_besch_t* b)
  * Fill menu with icons of given waytype
  * @author Hj. Malthaner
  */
-void tunnelbauer_t::fill_menu(werkzeug_waehler_t* wzw, const waytype_t wtyp, const karte_t* welt)
+void tunnelbauer_t::fill_menu(werkzeug_waehler_t* wzw, const waytype_t wtyp, sint16 sound_ok, const karte_t* welt)
 {
 	static stringhashtable_tpl<wkz_tunnelbau_t *> tunnel_tool;
 
 	const uint16 time=welt->get_timeline_year_month();
-	vector_tpl<const tunnel_besch_t*> matching;
-	for (vector_tpl<tunnel_besch_t*>::const_iterator i = tunnel.begin(), end = tunnel.end(); i != end; ++i) {
-		const tunnel_besch_t* besch = *i;
+	vector_tpl<const tunnel_besch_t*> matching(tunnel_by_name.get_count());
+
+	stringhashtable_iterator_tpl<tunnel_besch_t *>iter(tunnel_by_name);
+	while(  iter.next()  ) {
+		tunnel_besch_t* besch = iter.get_current_value();
 		if (besch->get_waytype() == wtyp && (
 					time == 0 ||
 					(besch->get_intro_year_month() <= time && time < besch->get_retire_year_month())
@@ -169,6 +175,7 @@ void tunnelbauer_t::fill_menu(werkzeug_waehler_t* wzw, const waytype_t wtyp, con
 			wkz->set_icon( besch->get_cursor()->get_bild_nr(1) );
 			wkz->cursor = besch->get_cursor()->get_bild_nr(0);
 			wkz->default_param = besch->get_name();
+			wkz->ok_sound = sound_ok;
 			tunnel_tool.put(besch->get_name(),wkz);
 		}
 		wzw->add_werkzeug( (werkzeug_t*)wkz );
@@ -205,6 +212,10 @@ tunnelbauer_t::finde_ende(karte_t *welt, koord3d pos, koord zv, waytype_t wegtyp
 				// must end on boden_t and correct slope
 				return koord3d::invalid;
 			}
+			if(  gr->has_two_ways()  &&  wegtyp != road_wt  ) {
+				// Only road tunnels allowed here.
+				return koord3d::invalid;
+			}
 
 			ribi_t::ribi ribi = gr->get_weg_ribi_unmasked(wegtyp);
 			if(  ribi && koord(ribi) == zv  ) {
@@ -220,6 +231,12 @@ tunnelbauer_t::finde_ende(karte_t *welt, koord3d pos, koord zv, waytype_t wegtyp
 			}
 			return koord3d::invalid;  // Was im Weg (schräger Hang oder so)
 		}
+		// tunnel slope underneath?
+		gr = welt->lookup(pos +koord3d(0,0,-1));
+		if (gr && gr->get_grund_hang()!=hang_t::flach) {
+			return koord3d::invalid;
+		}
+
 		// Alles frei - weitersuchen
 	}
 }
@@ -228,7 +245,7 @@ tunnelbauer_t::finde_ende(karte_t *welt, koord3d pos, koord zv, waytype_t wegtyp
 
 const char *tunnelbauer_t::baue( karte_t *welt, spieler_t *sp, koord pos, const tunnel_besch_t *besch )
 {
-	assert( besch  &&  !grund_t::underground_mode );
+	assert( besch );
 
 	const grund_t *gr = welt->lookup_kartenboden(pos);
 	if(gr==NULL) {
@@ -248,13 +265,17 @@ const char *tunnelbauer_t::baue( karte_t *welt, spieler_t *sp, koord pos, const
 	if(weg->get_ribi_unmasked() & ~ribi_t::rueckwaerts(ribi_typ(gr->get_grund_hang()))) {
 		return "Tunnel must start on single way!";
 	}
+	if(  gr->has_two_ways()  &&  wegtyp != road_wt  ) {
+		return "Tunnel must start on single way!";
+	}
 	zv = koord(gr->get_grund_hang());
 
 	// Tunnelende suchen
 	koord3d end = koord3d::invalid;
 	if(event_get_last_control_shift()!=2) {
 		end = finde_ende(welt, gr->get_pos(), zv, wegtyp);
-	} else {
+	}
+	else {
 		end = gr->get_pos()+zv;
 		if(welt->lookup(end)  ||  welt->lookup_kartenboden(pos+zv)->get_hoehe()<=end.z) {
 			end = koord3d::invalid;
@@ -286,15 +307,25 @@ bool tunnelbauer_t::baue_tunnel(karte_t *welt, spieler_t *sp, koord3d start, koo
 DBG_MESSAGE("tunnelbauer_t::baue()","build from (%d,%d,%d) to (%d,%d,%d) ", pos.x, pos.y, pos.z, end.x, end.y, end.z );
 
 	// now we seach a matchin way for the tunnels top speed
-	const weg_besch_t *weg_besch = wegbauer_t::weg_search( wegtyp, besch->get_topspeed(), welt->get_timeline_year_month(), weg_t::type_flat );
+	const weg_besch_t *weg_besch = besch->get_weg_besch();
+	if(weg_besch==NULL) {
+		// now we seach a matchin wy for the tunnels top speed
+		weg_besch = wegbauer_t::weg_search( wegtyp, besch->get_topspeed(), welt->get_timeline_year_month(), weg_t::type_flat );
+	}
 
-	baue_einfahrt(welt, sp, pos, zv, besch, weg_besch, cost);
+	const weg_besch_t *einfahrt_weg_besch = baue_einfahrt(welt, sp, pos, zv, besch, NULL, cost);
 
 	ribi = ribi_typ(-zv);
 	// don't move on to next tile if only one tile long
-	if(  end  !=  start  ) {
+	if(  end != start  ) {
 		pos = pos + zv;
 	}
+	// calc new back image for the ground
+	if(grund_t::underground_mode) {
+		grund_t *gr = welt->lookup(pos.get_2d())->get_kartenboden();
+		gr->calc_bild();
+		gr->set_flag(grund_t::dirty);
+	}
 
 	// Now we build the invisible part
 	while(pos!=end) {
@@ -306,6 +337,8 @@ DBG_MESSAGE("tunnelbauer_t::baue()","build from (%d,%d,%d) to (%d,%d,%d) ", pos.
 		welt->access(pos.get_2d())->boden_hinzufuegen(tunnel);
 		tunnel->neuen_weg_bauen(weg, ribi_t::doppelt(ribi), sp);
 		tunnel->obj_add(new tunnel_t(welt, pos, sp, besch));
+		tunnel->calc_bild();
+		tunnel->set_flag(grund_t::dirty);
 		assert(!tunnel->ist_karten_boden());
 		spieler_t::add_maintenance( sp,  -weg->get_besch()->get_wartung() );
 		spieler_t::add_maintenance( sp,  besch->get_wartung() );
@@ -315,7 +348,13 @@ DBG_MESSAGE("tunnelbauer_t::baue()","build from (%d,%d,%d) to (%d,%d,%d) ", pos.
 
 	// if end is above ground construct an exit
 	if(welt->lookup(end.get_2d())->get_kartenboden()->get_pos().z==end.z) {
-		baue_einfahrt(welt, sp, pos, -zv, besch, weg_besch, cost);
+		baue_einfahrt(welt, sp, pos, -zv, besch, einfahrt_weg_besch, cost);
+		// calc new back image for the ground
+		if (end!=start && grund_t::underground_mode) {
+			grund_t *gr = welt->lookup(pos.get_2d()-zv)->get_kartenboden();
+			gr->calc_bild();
+			gr->set_flag(grund_t::dirty);
+		}
 	}
 	else {
 		tunnelboden_t *tunnel = new tunnelboden_t(welt, pos, 0);
@@ -325,6 +364,8 @@ DBG_MESSAGE("tunnelbauer_t::baue()","build from (%d,%d,%d) to (%d,%d,%d) ", pos.
 		welt->access(pos.get_2d())->boden_hinzufuegen(tunnel);
 		tunnel->neuen_weg_bauen(weg, ribi, sp);
 		tunnel->obj_add(new tunnel_t(welt, pos, sp, besch));
+		tunnel->calc_bild();
+		tunnel->set_flag(grund_t::dirty);
 		assert(!tunnel->ist_karten_boden());
 		spieler_t::add_maintenance( sp,  -weg->get_besch()->get_wartung() );
 		spieler_t::add_maintenance( sp,  besch->get_wartung() );
@@ -337,8 +378,7 @@ DBG_MESSAGE("tunnelbauer_t::baue()","build from (%d,%d,%d) to (%d,%d,%d) ", pos.
 
 
 
-void
-tunnelbauer_t::baue_einfahrt(karte_t *welt, spieler_t *sp, koord3d end, koord zv, const tunnel_besch_t *besch, const weg_besch_t *weg_besch, int &cost)
+const weg_besch_t *tunnelbauer_t::baue_einfahrt(karte_t *welt, spieler_t *sp, koord3d end, koord zv, const tunnel_besch_t *besch, const weg_besch_t *weg_besch, int &cost)
 {
 	grund_t *alter_boden = welt->lookup(end);
 	ribi_t::ribi ribi = alter_boden->get_weg_ribi_unmasked(besch->get_waytype()) | ribi_typ(zv);
@@ -346,28 +386,32 @@ tunnelbauer_t::baue_einfahrt(karte_t *welt, spieler_t *sp, koord3d end, koord zv
 	tunnelboden_t *tunnel = new tunnelboden_t(welt, end, alter_boden->get_grund_hang());
 	tunnel->obj_add(new tunnel_t(welt, end, sp, besch));
 
-	weg_t *weg=alter_boden->get_weg( besch->get_waytype() );
+	weg_t *weg = alter_boden->get_weg( besch->get_waytype() );
 	// take care of everything on that tile ...
 	tunnel->take_obj_from( alter_boden );
 	welt->access(end.get_2d())->kartenboden_setzen( tunnel );
 	if(weg) {
 		// has already a way
 		tunnel->weg_erweitern(besch->get_waytype(), ribi);
-		spieler_t::add_maintenance( sp,  -weg->get_besch()->get_wartung() );
 	}
 	else {
 		// needs still one
 		weg = weg_t::alloc( besch->get_waytype() );
-		weg->set_besch( weg_besch );
+		if(  weg_besch  ) {
+			weg->set_besch( weg_besch );
+		}
 		tunnel->neuen_weg_bauen( weg, ribi, sp );
 	}
+	spieler_t::add_maintenance( sp,  -weg->get_besch()->get_wartung() );
 	weg->set_max_speed( besch->get_topspeed() );
 	tunnel->calc_bild();
+	tunnel->set_flag(grund_t::dirty);
 
 	if(sp!=NULL) {
 		spieler_t::add_maintenance( sp,  besch->get_wartung() );
 	}
 	cost += besch->get_preis();
+	return weg->get_besch();
 }
 
 
@@ -429,10 +473,15 @@ tunnelbauer_t::remove(karte_t *welt, spieler_t *sp, koord3d start, waytype_t weg
 	while (!part_list.empty()) {
 		pos = part_list.remove_first();
 		grund_t *gr = welt->lookup(pos);
+		// remove the second way first in the tunnel
+		if(gr->get_weg_nr(1)) {
+			gr->remove_everything_from_way(sp,gr->get_weg_nr(1)->get_waytype(),ribi_t::keine);
+		}
 		gr->remove_everything_from_way(sp,wegtyp,ribi_t::keine);	// removes stop and signals correctly
-		// we may have a second way here ...
+		// remove everything else
 		gr->obj_loesche_alle(sp);
 		welt->access(pos.get_2d())->boden_entfernen(gr);
+		welt->access(pos.get_2d())->get_kartenboden()->set_flag(grund_t::dirty);
 		reliefkarte_t::get_karte()->calc_map_pixel( pos.get_2d() );
 		delete gr;
 	}
@@ -442,15 +491,14 @@ tunnelbauer_t::remove(karte_t *welt, spieler_t *sp, koord3d start, waytype_t weg
 		pos = end_list.remove_first();
 
 		grund_t *gr = welt->lookup(pos);
-		ribi_t::ribi ribi = gr->get_weg_ribi_unmasked(wegtyp);
-		if(gr->get_grund_hang()!=hang_t::flach) {
-			ribi &= ~ribi_typ(gr->get_grund_hang());
-		}
-		else {
-			ribi &= ~ribi_typ(hang_t::gegenueber(gr->get_weg_hang()));
-		}
+		ribi_t::ribi mask = gr->get_grund_hang()!=hang_t::flach ? ~ribi_typ(gr->get_grund_hang()) : ~ribi_typ(hang_t::gegenueber(gr->get_weg_hang()));
 
+		// remove the second way first in the tunnel
+		if(gr->get_weg_nr(1)) {
+			gr->remove_everything_from_way(sp,gr->get_weg_nr(1)->get_waytype(),gr->get_weg_nr(1)->get_ribi_unmasked() & mask);
+		}
 		// removes single signals, bridge head, pedestrians, stops, changes catenary etc
+		ribi_t::ribi ribi = gr->get_weg_ribi_unmasked(wegtyp) & mask;
 		gr->remove_everything_from_way(sp,wegtyp,ribi);	// removes stop and signals correctly
 
 		// remove tunnel portals
@@ -475,6 +523,11 @@ tunnelbauer_t::remove(karte_t *welt, spieler_t *sp, koord3d start, waytype_t weg
 		grund_t *gr_new = new boden_t(welt, pos, gr->get_grund_hang());
 		gr_new->take_obj_from( gr );
 		welt->access(pos.get_2d())->kartenboden_setzen(gr_new );
+
+		// recalc image of ground
+		grund_t *kb = welt->access(pos.get_2d()+koord(gr_new->get_grund_hang()))->get_kartenboden();
+		kb->calc_bild();
+		kb->set_flag(grund_t::dirty);
 	}
 	return NULL;
 }
diff --git a/bauer/tunnelbauer.h b/bauer/tunnelbauer.h
index 7aa20e9..e502487 100644
--- a/bauer/tunnelbauer.h
+++ b/bauer/tunnelbauer.h
@@ -11,12 +11,12 @@
 #include "../simtypes.h"
 #include "../dataobj/koord.h"
 #include "../dataobj/koord3d.h"
-#include "../besch/tunnel_besch.h"
-#include "../boden/wege/weg.h"
 #include "../simwerkz.h"
 
 class karte_t;                 // Hajo: 22-Nov-01: Added forward declaration
 class spieler_t;               // Hajo: 22-Nov-01: Added forward declaration
+class tunnel_besch_t;
+class weg_besch_t;
 class werkzeug_waehler_t;
 
 /**
@@ -29,13 +29,14 @@ class werkzeug_waehler_t;
  */
 class tunnelbauer_t {
 private:
-	static koord3d finde_ende(karte_t *welt, koord3d pos, koord zv, waytype_t wegtyp);
 	static bool baue_tunnel(karte_t *welt, spieler_t *sp, koord3d pos, koord3d end, koord zv, const tunnel_besch_t *besch);
-	static void baue_einfahrt(karte_t *welt, spieler_t *sp, koord3d end, koord zv, const tunnel_besch_t *besch, const weg_besch_t *weg_besch, int &cost);
+	static const weg_besch_t *baue_einfahrt(karte_t *welt, spieler_t *sp, koord3d end, koord zv, const tunnel_besch_t *besch, const weg_besch_t *weg_besch, int &cost);
 
 	tunnelbauer_t() {} // private -> no instance please
 
 public:
+	static koord3d finde_ende(karte_t *welt, koord3d pos, koord zv, waytype_t wegtyp);
+
 	static void register_besch(tunnel_besch_t *besch);
 	static bool laden_erfolgreich();
 
@@ -43,7 +44,7 @@ public:
 
 	static const tunnel_besch_t *find_tunnel(const waytype_t wtyp, const uint32 min_speed,const uint16 time);
 
-	static void fill_menu(werkzeug_waehler_t *wzw, const waytype_t wtyp, const karte_t *welt);
+	static void fill_menu(werkzeug_waehler_t *wzw, const waytype_t wtyp, sint16 sound_ok, const karte_t *welt);
 
 	static const char *baue( karte_t *welt, spieler_t *sp, koord pos, const tunnel_besch_t *besch );
 
diff --git a/bauer/vehikelbauer.cc b/bauer/vehikelbauer.cc
index 19659bf..806b697 100644
--- a/bauer/vehikelbauer.cc
+++ b/bauer/vehikelbauer.cc
@@ -176,6 +176,11 @@ bool vehikelbauer_t::register_besch(const vehikel_besch_t *besch)
 {
 	// printf("N=%s T=%d V=%d P=%d\n", besch->get_name(), besch->get_typ(), besch->get_geschw(), besch->get_leistung());
 
+	const vehikel_besch_t *old_besch = name_fahrzeuge.get( besch->get_name() );
+	if(  old_besch  ) {
+		dbg->warning( "vehikelbauer_t::register_besch()", "Object %s was overlaid by addon!", besch->get_name() );
+		name_fahrzeuge.remove( besch->get_name() );
+	}
 	name_fahrzeuge.put(besch->get_name(), besch);
 
 	// register waytype liste
@@ -185,6 +190,7 @@ bool vehikelbauer_t::register_besch(const vehikel_besch_t *besch)
 		typ_fahrzeuge.put(typ, slist_tpl<const vehikel_besch_t *>());
 		typ_liste = typ_fahrzeuge.access(typ);
 	}
+	typ_liste->remove(old_besch);
 	typ_liste->append(besch);
 
 	// correct for driving on left side
@@ -342,6 +348,10 @@ const vehikel_besch_t *vehikelbauer_t::vehikel_search( waytype_t wt, const uint1
 			if(wt==track_wt  &&  !test_besch->can_follow_any()  ) {
 				continue;
 			}
+			// do not buy incomplete vehicles
+			if(wt==road_wt && !test_besch->can_lead(NULL)) {
+				continue;
+			}
 
 			// engine, but not allowed to lead a convoi, or no power at all or no electrics allowed
 			if(target_weight) {
diff --git a/bauer/warenbauer.cc b/bauer/warenbauer.cc
index 6bceab3..29d7fc3 100644
--- a/bauer/warenbauer.cc
+++ b/bauer/warenbauer.cc
@@ -28,10 +28,10 @@ ware_besch_t *warenbauer_t::load_post = NULL;
 ware_besch_t *warenbauer_t::load_nichts = NULL;
 
 static spezial_obj_tpl<ware_besch_t> spezial_objekte[] = {
-    { &warenbauer_t::passagiere,    "Passagiere" },
-    { &warenbauer_t::post,	    "Post" },
-    { &warenbauer_t::nichts,	    "None" },
-    { NULL, NULL }
+	{ &warenbauer_t::passagiere,    "Passagiere" },
+	{ &warenbauer_t::post,	    "Post" },
+	{ &warenbauer_t::nichts,	    "None" },
+	{ NULL, NULL }
 };
 
 
@@ -51,10 +51,15 @@ warenbauer_t::alles_geladen()
 	waren.insert_at(0,load_post);
 	waren.insert_at(0,load_passagiere);
 
-	if(waren.get_count()>255) {
+	if(waren.get_count()>=255) {
 		dbg->fatal("warenbauer_t::alles_geladen()","Too many different goods %i>255",waren.get_count()-1 );
 	}
 
+	// assign indexes
+	for(  uint8 i=3;  i<waren.get_count();  i++  ) {
+		waren[i]->ware_index = i;
+	}
+
 	// now assign unique category indexes for unique categories
 	max_catg_index = 0;
 	// first assign special freight (which always needs an own category)
@@ -112,6 +117,13 @@ bool warenbauer_t::register_besch(ware_besch_t *besch)
 {
 	besch->value = besch->base_value;
 	::register_besch(spezial_objekte, besch);
+	// avoid duplicates with same name
+	ware_besch_t *old_besch = (ware_besch_t *)besch_names.get(besch->get_name());
+	if(  old_besch  ) {
+		dbg->warning( "warenbauer_t::register_besch()", "Object %s was overlaid by addon!", besch->get_name() );
+		besch_names.remove(besch->get_name());
+		waren.remove( old_besch );
+	}
 	besch_names.put(besch->get_name(), besch);
 
 	if(besch==passagiere) {
@@ -121,7 +133,6 @@ bool warenbauer_t::register_besch(ware_besch_t *besch)
 		besch->ware_index = 1;
 		load_post = besch;
 	} else if(besch != nichts) {
-		besch->ware_index = waren.get_count()+3;
 		waren.append(besch);
 	}
 	else {
diff --git a/bauer/warenbauer.h b/bauer/warenbauer.h
index 7f4b025..7183c01 100644
--- a/bauer/warenbauer.h
+++ b/bauer/warenbauer.h
@@ -8,8 +8,6 @@
 #ifndef warenbauer_t_h
 #define warenbauer_t_h
 
-#include "../besch/ware_besch.h"
-
 #include "../tpl/vector_tpl.h"
 #include "../tpl/stringhashtable_tpl.h"
 
diff --git a/bauer/wegbauer.cc b/bauer/wegbauer.cc
index ab30e25..0403983 100644
--- a/bauer/wegbauer.cc
+++ b/bauer/wegbauer.cc
@@ -50,6 +50,7 @@
 // sorted heap, since we only need insert and pop
 #include "../tpl/binary_heap_tpl.h" // fastest
 
+#include "../dings/field.h"
 #include "../dings/gebaeude.h"
 #include "../dings/bruecke.h"
 #include "../dings/tunnel.h"
@@ -65,17 +66,18 @@
 #include "../gui/karte.h"	// for debugging
 #include "../gui/werkzeug_waehler.h"
 
-
 #ifdef DEBUG_ROUTES
 #include "../simsys.h"
 #endif
 
-
 // built bridges automatically
-//#define AUTOMATIC_BRIDGES 1
+//#define AUTOMATIC_BRIDGES
+
+// built tunnels automatically
+//#define AUTOMATIC_TUNNELS
 
 // lookup also return route and take the better of the two
-#define REVERSE_CALC_ROUTE_TOO 1
+#define REVERSE_CALC_ROUTE_TOO
 
 const weg_besch_t *wegbauer_t::leitung_besch = NULL;
 
@@ -109,34 +111,47 @@ bool wegbauer_t::alle_wege_geladen()
 
 bool wegbauer_t::register_besch(const weg_besch_t *besch)
 {
+#ifdef DEBUG
 	DBG_DEBUG("wegbauer_t::register_besch()", besch->get_name());
+	if(  besch->has_switch_bild()  ) {
+		DBG_DEBUG("wegbauer_t::register_besch()", "with switches" );
+	}
+#endif
+	if(  alle_wegtypen.remove(besch->get_name())  ) {
+		dbg->warning( "wegbauer_t::register_besch()", "Object %s was overlaid by addon!", besch->get_name() );
+	}
 	alle_wegtypen.put(besch->get_name(), besch);
 	return true;
 }
 
-
 /**
  * Finds a way with a given speed limit for a given waytype
- * @author prissi
+ * It finds:
+ *  - the slowest way, as fast as speed limit
+ *  - if no way faster than speed limit, the fastest way.
+ * The timeline is also respected.
+ * @author prissi, gerw
  */
 const weg_besch_t* wegbauer_t::weg_search(const waytype_t wtyp, const uint32 speed_limit, const uint16 time, const weg_t::system_type system_type)
 {
 	const weg_besch_t* best = NULL;
+	bool best_allowed = false; // Does the best way fulfill the timeline?
 	for(  stringhashtable_iterator_tpl<const weg_besch_t*> iter(alle_wegtypen); iter.next();  ) {
 		const weg_besch_t* const test = iter.get_current_value();
 		if(  ((test->get_wtyp()==wtyp  &&
-			     (test->get_styp()==system_type  ||  system_type==weg_t::type_all))  ||  (test->get_wtyp()==track_wt  &&  test->get_styp()==weg_t::type_tram  &&  wtyp==tram_wt))
-			     &&  test->get_cursor()->get_bild_nr(1)!=IMG_LEER  ) {
-			if(  best==NULL  ||  time==0  ||  (test->get_intro_year_month()<=time  &&  time<test->get_retire_year_month())) {
-				if(  best==NULL  ||
-						(best->get_topspeed() < speed_limit  &&  test->get_topspeed() >= speed_limit  )  ||	// not yet there but this is ...
-						(test->get_topspeed() <=  speed_limit  &&  best->get_topspeed() < test->get_topspeed()) ||	// closer to desired speed (from the low end)
-						(best->get_topspeed() > speed_limit  &&  test->get_topspeed() < best->get_topspeed())  ||	// closer to desired speed (from the top end)
-						(time!=0  &&  (best->get_intro_year_month()>time  ||  time>=best->get_retire_year_month()))	// current choice is acutally not really allowed, timewise
-					) {
-					best = test;
+			(test->get_styp()==system_type  ||  system_type==weg_t::type_all))  ||  (test->get_wtyp()==track_wt  &&  test->get_styp()==weg_t::type_tram  &&  wtyp==tram_wt))
+			&&  test->get_cursor()->get_bild_nr(1)!=IMG_LEER  ) {
+				bool test_allowed = test->get_intro_year_month()<=time  &&  time<test->get_retire_year_month();
+				if(  !best_allowed  ||  time==0  ||  test_allowed  ) {
+					if(  best==NULL  ||
+						( best->get_topspeed() <  test->get_topspeed()  &&  test->get_topspeed() <=     speed_limit  )    || // closer to desired speed (from the low end)
+						(     speed_limit      <  best->get_topspeed()  &&  test->get_topspeed() <   best->get_topspeed()) || // respects speed_limit better
+						( time!=0  &&  !best_allowed  &&  test_allowed)                                                       // current choice is actually not really allowed, timewise
+						) {
+							best = test;
+							best_allowed = test_allowed;
+					}
 				}
-			}
 		}
 	}
 	return best;
@@ -144,11 +159,26 @@ const weg_besch_t* wegbauer_t::weg_search(const waytype_t wtyp, const uint32 spe
 
 
 
+const weg_besch_t *wegbauer_t::get_earliest_way(const waytype_t wtyp)
+{
+	uint32 start_year_month = 0x7FFFFFFFul;
+	const weg_besch_t *besch = NULL;
+	for(  stringhashtable_iterator_tpl<const weg_besch_t*> iter(alle_wegtypen); iter.next();  ) {
+		const weg_besch_t* const test = iter.get_current_value();
+		if(  test->get_wtyp()==wtyp  &&  (besch==NULL  ||  test->get_intro_year_month()<besch->get_intro_year_month())  ) {
+			besch = test;
+		}
+	}
+	return besch;
+}
+
+
+
 const weg_besch_t * wegbauer_t::get_besch(const char * way_name,const uint16 time)
 {
 //DBG_MESSAGE("wegbauer_t::get_besch","return besch for %s in (%i)",way_name, time/12);
 	const weg_besch_t *besch = alle_wegtypen.get(way_name);
-	if(time==0  ||  (besch->get_intro_year_month()<=time  &&  besch->get_retire_year_month()>time)) {
+	if(besch  &&  (time==0  ||  (besch->get_intro_year_month()<=time  &&  besch->get_retire_year_month()>time))  ) {
 		return besch;
 	}
 	return NULL;
@@ -206,7 +236,7 @@ static bool compare_ways(const weg_besch_t* a, const weg_besch_t* b)
  * Fill menu with icons of given waytype, return number of added entries
  * @author Hj. Malthaner/prissi/dariok
  */
-void wegbauer_t::fill_menu(werkzeug_waehler_t *wzw, const waytype_t wtyp, const weg_t::system_type styp, karte_t *welt)
+void wegbauer_t::fill_menu(werkzeug_waehler_t *wzw, const waytype_t wtyp, const weg_t::system_type styp, sint16 ok_sound, karte_t *welt)
 {
 	static stringhashtable_tpl<wkz_wegebau_t *> way_tool;
 	const uint16 time = welt->get_timeline_year_month();
@@ -238,6 +268,7 @@ void wegbauer_t::fill_menu(werkzeug_waehler_t *wzw, const waytype_t wtyp, const
 			wkz->set_icon( besch->get_cursor()->get_bild_nr(1) );
 			wkz->cursor = besch->get_cursor()->get_bild_nr(0);
 			wkz->default_param = besch->get_name();
+			wkz->ok_sound = ok_sound;
 			way_tool.put(besch->get_name(),wkz);
 		}
 		wzw->add_werkzeug( (werkzeug_t*)wkz );
@@ -251,22 +282,60 @@ void wegbauer_t::fill_menu(werkzeug_waehler_t *wzw, const waytype_t wtyp, const
  * @author prissi
  */
 bool
-wegbauer_t::check_crossing(const koord zv, const grund_t *bd, waytype_t wtyp, const spieler_t *sp) const
+wegbauer_t::check_crossing(const koord zv, const grund_t *bd, waytype_t wtyp0, const spieler_t *sp) const
 {
+	const waytype_t wtyp = wtyp0==tram_wt ? track_wt : wtyp0;
+	// nothing to cross here
+	if (!bd->hat_wege()) {
+		return true;
+	}
+	// no triple crossings please
+	if (bd->has_two_ways() && !bd->hat_weg(wtyp)) {
+		return false;
+	}
 	const weg_t *w = bd->get_weg_nr(0);
-	if(w  &&  w->get_waytype()==wtyp) {
+	// index of our wtype at the tile (must exists due to triple-crossing-check above)
+	const uint8 iwtyp = w->get_waytype() != wtyp;
+	// get the other way
+	if(iwtyp==0) {
 		w = bd->get_weg_nr(1);
+		// no other way here
+		if (w==NULL) {
+			return true;
+		}
 	}
-	if(w  &&  !bd->get_halt().is_bound()  &&  check_owner(w->get_besitzer(),sp)  &&  crossing_logic_t::get_crossing(wtyp,w->get_waytype())!=NULL) {
+	// right owner of the other way
+	if(!check_owner(w->get_besitzer(),sp)) {
+		return false;
+	}
+	// special case: tram track on road
+	if ( (wtyp==road_wt  &&  w->get_waytype()==track_wt  &&  w->get_besch()->get_styp()==7)  ||
+		     (wtyp0==tram_wt  &&  w->get_waytype()==road_wt) ) {
+		return true;
+	}
+	// check for existing crossing
+	crossing_t *cr = bd->find<crossing_t>();
+	if (cr) {
+		// index of the waytype in ns-direction at the crossing
+		const uint8 ns_way = cr->get_dir();
+		// only cross with the right direction
+		return (ns_way==iwtyp ? ribi_t::ist_gerade_ns(ribi_typ(zv)) : ribi_t::ist_gerade_ow(ribi_typ(zv)));
+	}
+	// no crossings in tunnels
+	if(bautyp & tunnel_flag) {
+		return false;
+	}
+	// crossing available and ribis ok
+	if(crossing_logic_t::get_crossing(wtyp,w->get_waytype())!=NULL) {
 		ribi_t::ribi w_ribi = w->get_ribi_unmasked();
 		// it is our way we want to cross: can we built a crossing here?
 		// both ways must be straight and no ends
-		return ribi_t::ist_gerade(w_ribi)
+		return  ribi_t::ist_gerade(w_ribi)
 					&&  !ribi_t::ist_einfach(w_ribi)
 					&&  ribi_t::ist_gerade(ribi_typ(zv))
-					&&  (w_ribi&ribi_typ(zv))==0;
+				&&  (w_ribi&ribi_typ(zv))==0;
 	}
-	// nothing to cross here
+	// cannot build crossing here
 	return false;
 }
 
@@ -404,8 +473,8 @@ bool wegbauer_t::check_slope( const grund_t *from, const grund_t *to )
 // allowed owner?
 bool wegbauer_t::check_owner( const spieler_t *sp1, const spieler_t *sp2 ) const
 {
-	// unowned, mine or public property?
-	return sp1==NULL  ||  sp1==sp2  ||  sp1==welt->get_spieler(1);
+	// unowned, mine or public property or superuser ... ?
+	return sp1==NULL  ||  sp1==sp2  ||  sp1==welt->get_spieler(1)  ||  sp2==welt->get_spieler(1);
 }
 
 
@@ -530,11 +599,11 @@ bool wegbauer_t::is_allowed_step( const grund_t *from, const grund_t *to, long *
 
 	// universal check for elevated things ...
 	if(bautyp&elevated_flag) {
-		if(to->hat_weg(air_wt)  ||  to->ist_wasser()  ||  !check_for_leitung(zv,to)  ||  !to->ist_karten_boden()  ||  to->get_typ()==grund_t::brueckenboden  ||  to->get_typ()==grund_t::tunnelboden) {
+		if(to->hat_weg(air_wt)  ||  to->ist_wasser()  ||  !check_for_leitung(zv,to)  || (!to->ist_karten_boden() && to->get_typ()!=grund_t::monorailboden) ||  to->get_typ()==grund_t::brueckenboden  ||  to->get_typ()==grund_t::tunnelboden) {
 			// no suitable ground below!
 			return false;
 		}
-		sint16 height = welt->lookup(to->get_pos().get_2d())->get_kartenboden()->get_hoehe()+Z_TILE_STEP;
+		sint8 height = to->get_hoehe()+Z_TILE_STEP;
 		grund_t *to2 = welt->lookup(koord3d(to->get_pos().get_2d(),height));
 		if(to2) {
 			if(to2->get_weg_nr(0)) {
@@ -564,34 +633,41 @@ DBG_MESSAGE("wegbauer_t::is_allowed_step()","wrong ground already there!");
 		ok = true;
 	}
 
-	// not jumping to other lanes on bridges or tunnels
 	if((bautyp&tunnel_flag)==0) {
-		if(to->get_typ()==grund_t::brueckenboden  ||  to->get_typ()==grund_t::tunnelboden) {
+		// not jumping to other lanes on bridges
+		if( to->get_typ()==grund_t::brueckenboden ) {
 			weg_t *weg=to->get_weg_nr(0);
 			if(weg && !ribi_t::ist_gerade(weg->get_ribi_unmasked()|ribi_typ(zv))) {
 				return false;
 			}
 		}
+		// Do not switch to tunnel through cliffs!
+		if( from->get_typ() == grund_t::tunnelboden  &&  to->get_typ() != grund_t::tunnelboden  &&  !from->ist_karten_boden() ) {
+			return false;
+		}
+		if( to->get_typ()==grund_t::tunnelboden  &&  from->get_typ() != grund_t::tunnelboden   &&  !to->ist_karten_boden() ) {
+			return false;
+		}
 	}
 
+	// universal check for crossings
+	if (to!=from  &&  (bautyp&elevated_flag)==0  &&  (bautyp&bautyp_mask)!=leitung) {
+		waytype_t wtyp = (waytype_t)(bautyp == river ? water_wt :  bautyp&bautyp_mask);
+		if(!check_crossing(zv,to,wtyp,sp)  ||  !check_crossing(-zv,from,wtyp,sp)) {
+			return false;
+		}
+	}
 	// no check way specific stuff
 	switch(bautyp&bautyp_mask) {
 
 		case strasse:
 		{
 			const weg_t *str=to->get_weg(road_wt);
-			// we allow connection to any road
-			ok =	(str  ||  !fundament)  &&  !to->ist_wasser()  &&  check_for_leitung(zv,to);
-			if(!ok) {
-				return false;
-			}
-			if(str==NULL) {
-				ok = !to->hat_wege()  ||  check_crossing(zv,to,road_wt,sp);
+			if((bautyp&elevated_flag)==0) {
+				// we allow connection to any road
+				ok =	(str  ||  !fundament)  &&  !to->ist_wasser()  &&  check_for_leitung(zv,to);
 				if(!ok) {
-					const weg_t *sch=to->get_weg(track_wt);
-					if(sch  &&  sch->get_besch()->get_styp()==7) {
-						ok = true;
-					}
+					return false;
 				}
 			}
 			if(ok) {
@@ -626,7 +702,7 @@ DBG_MESSAGE("wegbauer_t::is_allowed_step()","wrong ground already there!");
 			// ok, regular construction here
 			if((bautyp&elevated_flag)==0) {
 				ok =	!fundament  &&  !to->ist_wasser()  &&
-				  ((sch  &&  check_owner(sch->get_besitzer(),sp))  ||  !to->hat_wege()  ||  (sch==NULL  &&  check_crossing(zv,to,track_wt,sp)))  &&
+				  (!sch  ||  check_owner(sch->get_besitzer(),sp))  &&
 					check_for_leitung(zv,to);
 			}
 			if(ok) {
@@ -662,9 +738,9 @@ DBG_MESSAGE("wegbauer_t::is_allowed_step()","wrong ground already there!");
 			}
 			if((bautyp&elevated_flag)==0) {
 				// classical monorail
-				ok =	!to->ist_wasser()  &&  !fundament  &&
-					((sch  &&  check_owner(sch->get_besitzer(),sp))  ||  !to->hat_wege()  ||  (sch==NULL  &&  check_crossing(zv,to,besch->get_wtyp(),sp)))
-					&&  check_for_leitung(zv,to)  && !to->get_depot();
+				ok =	!fundament  &&  !to->ist_wasser()  &&
+				  (!sch  ||  check_owner(sch->get_besitzer(),sp))  &&
+					check_for_leitung(zv,to)  &&  !to->get_depot();
 				// check for end/start of bridge
 				if(to->get_weg_hang()!=to->get_grund_hang()  &&  (sch==NULL  ||  ribi_t::ist_kreuzung(ribi_typ(to_pos,from_pos)|sch->get_ribi_unmasked()))) {
 					return false;
@@ -689,15 +765,27 @@ DBG_MESSAGE("wegbauer_t::is_allowed_step()","wrong ground already there!");
 
 		case schiene_tram: // Dario: Tramway
 		{
-			ok =	(ok ||
-							(to->hat_weg(track_wt)  &&  check_owner(to->get_weg(track_wt)->get_besitzer(),sp))  ||
-							(to->hat_weg(road_wt)  &&  check_owner(to->get_weg(road_wt)->get_besitzer(),sp)  &&  to->get_weg_nr(1)==NULL))
-					 &&  check_for_leitung(zv,to);
+			const weg_t *sch=to->get_weg(track_wt);
+			// roads are checked in check_crossing
+			ok = (!sch  ||  check_owner(sch->get_besitzer(),sp))  &&  check_for_leitung(zv,to);
+			// tram track allowed in road tunnels, but only along existing roads / tracks
+			if(from!=to) {
+				if(from->ist_tunnel()) {
+					const ribi_t::ribi ribi = from->get_weg_ribi_unmasked(road_wt) |  from->get_weg_ribi_unmasked(track_wt) |  ribi_t::doppelt(ribi_typ(from->get_grund_hang()));
+					ok = ok && ((ribi & ribi_typ(zv))!=0);
+				}
+				if(to->ist_tunnel()) {
+					const ribi_t::ribi ribi = to->get_weg_ribi_unmasked(road_wt) |  to->get_weg_ribi_unmasked(track_wt);
+					ok = ok && ((ribi & ribi_typ(-zv))!=0);
+				}
+			}
 			if(ok) {
 				// check for depots/stops/...
-				if(  !check_building( from, zv )  ||  !check_building( to, -zv )  ) {
+				if(  fundament  ||  !check_building( from, zv )  ||  !check_building( to, -zv )  ) {
 					return false;
 				}
+				// with this check, laying tracks into road depot is still possible, althoguh we cannot drive there ...
+
 				// calculate costs
 				*costs = to->hat_weg(track_wt) ? welt->get_einstellungen()->way_count_straight : welt->get_einstellungen()->way_count_straight+1;	// only prefer existing rails a little
 				// perfer own track
@@ -730,7 +818,7 @@ DBG_MESSAGE("wegbauer_t::is_allowed_step()","wrong ground already there!");
 			}
 			// only fields are allowed
 			if(to->get_typ()!=grund_t::boden) {
-				ok &= (to->get_typ()==grund_t::fundament)  &&  (to->suche_obj(ding_t::field)!=NULL);
+				ok &= to->get_typ() == grund_t::fundament && to->find<field_t>();
 			}
 			// no bridges and monorails here in the air
 			ok &= (welt->lookup(to_pos)->get_boden_in_hoehe(to->get_pos().z+Z_TILE_STEP)==NULL);
@@ -793,215 +881,65 @@ DBG_MESSAGE("wegbauer_t::is_allowed_step()","wrong ground already there!");
 }
 
 
-void wegbauer_t::check_for_bridge(const grund_t* parent_from, const grund_t* from, koord3d ziel)
+void wegbauer_t::check_for_bridge(const grund_t* parent_from, const grund_t* from, const vector_tpl<koord3d> &ziel)
 {
-	// bridge not enabled or wrong starting slope or tile already occupied with a way ...
-	if (!hang_t::ist_wegbar(from->get_grund_hang())) return;
-
-	// since we were allowed to go there, it is ok ...
-	if(from->get_grund_hang()!=from->get_weg_hang()) {
-//		DBG_MESSAGE("wegbauer_t::check_for_bridge()","has bridge starting");
-		// now find the end ...
-		grund_t *gr=welt->lookup(from->get_pos());
-		grund_t *to=gr;
-		waytype_t wegtyp=(waytype_t)from->get_weg_nr(0)->get_besch()->get_wtyp();
-		koord zv = koord::invalid;
-		if(from->ist_karten_boden()) {
-			// Der Grund ist Brückenanfang/-ende - hier darf nur in
-			// eine Richtung getestet werden.
-			if(from->get_grund_hang() != hang_t::flach) {
-				zv = koord(hang_t::gegenueber(from->get_grund_hang()));
-			}
-			else {
-				zv = koord(from->get_weg_hang());
-			}
-		}
-		while(gr) {
-			gr->get_neighbour(to, wegtyp, zv);
-			if(to  &&  to->ist_karten_boden()) {
-				next_gr.append(next_gr_t(to, 7));
-				return;
-			}
-			gr = to;
-		}
+	// wrong starting slope or tile already occupied with a way ...
+	if (!hang_t::ist_wegbar(from->get_grund_hang())) {
 		return;
 	}
 
-	if(parent_from==NULL  ||  bruecke_besch==NULL  ||  (from->get_grund_hang()==0  &&  from->hat_wege())) {
-		return;
+	/*
+	 * now check existing ways:
+	 * no tunnels/bridges at crossings and no track tunnels/bridges on roads (bot road tunnels/bridges on tram are allowed).
+	 * (keep in mind, that our waytype isn't currently on the tile and will be built later)
+	 */
+	if(  from->has_two_ways()  ) {
+		if(  from->ist_uebergang()  ||  besch->get_wtyp() != road_wt  ) {
+			return;
+		}
+	}
+	else if(  from->hat_wege()  ) {
+		// ground has (currently) exact one way
+		weg_t *w = from->get_weg_nr(0);
+		if(  w->get_besch()->get_styp() != weg_t::type_tram  &&  w->get_besch() != besch  ) {
+			return;
+		}
 	}
 
 	const koord zv=from->get_pos().get_2d()-parent_from->get_pos().get_2d();
-	const koord to_pos=from->get_pos().get_2d()+zv;
-	bool has_reason_for_bridge=false;
 
 	// ok, so now we do a closer investigation
-	grund_t *gr, *gr2;
-	long internal_cost;
-	const long cost_difference=besch->get_wartung()>0 ? (bruecke_besch->get_wartung()*4l+3l)/besch->get_wartung() : 16;
-
-	if(from->get_grund_hang()==0) {
-		// try bridge on even ground
-		int max_lenght=bruecke_besch->get_max_length()>0 ? bruecke_besch->get_max_length()-2 : welt->get_einstellungen()->way_max_bridge_len;
-		max_lenght = min( max_lenght, welt->get_einstellungen()->way_max_bridge_len );
-
-		for(int i=0;  i<max_lenght;  i++ ) {
-			// not on map or already something there => fail
-			if (!welt->ist_in_kartengrenzen(to_pos + zv * (i + 1))) {
-				return;
-			}
-			gr = welt->lookup(to_pos+zv*i)->get_kartenboden();
-			gr2 = welt->lookup(to_pos+zv*(i+1))->get_kartenboden();
-			if (gr2->get_pos() == ziel) {
-				return;
-			}
-			if (welt->lookup(from->get_pos() + zv * i + koord3d(0, 0, Z_TILE_STEP))) {
-				// something in the way
-				return;
-			}
-			if (gr->get_pos().z == from->get_pos().z && gr->find<leitung_t>()) {
-				// powerline in the way
-				return;
-			}
-			if (gr->get_pos().z > from->get_pos().z) {
-				// some artificial tiles here?!?
-				return;
-			}
-			if (gr->hat_weg(air_wt)) {
-				// not above runways ...
-				return;
-			}
-			// check, if we need really a bridge
-			if(i<=2  &&  !has_reason_for_bridge) {
-				long dummy;
-				has_reason_for_bridge = !is_allowed_step(gr, gr2, &dummy );
-			}
-			// non-mangable slope?
-			if(gr->get_pos().z==from->get_pos().z  &&  gr->get_grund_hang()!=0) {
-#ifndef DOUBLE_GROUNDS
-				if (!hang_t::ist_wegbar(gr->get_grund_hang()) || ribi_typ(zv) != ribi_typ(gr->get_grund_hang())) return;
-#else
-				if (hang_t::ist_wegbar(gr->get_grund_hang()) || !hang_t::ist_einfach(gr->get_grund_hang()) || ribi_typ(zv) != ribi_typ(gr->get_grund_hang())) return;
-#endif
-			}
-			// make sure, the bridge is not too short
-			if(i==0) {
-				continue;
-			}
-			// here is a hang
-			if(gr->get_pos().z==from->get_pos().z  &&  gr->get_grund_hang()!=0) {
-				// ok, qualify for endpos
-				if(!gr->hat_wege()  &&  gr->ist_natur()  &&  !gr->ist_wasser()  &&  is_allowed_step(gr, gr2, &internal_cost )) {
-					// ok, here we may end
-					// we return the koord3d AFTER we came down!
-					if(has_reason_for_bridge) {
-						next_gr.append(next_gr_t(gr, i * cost_difference + welt->get_einstellungen()->way_count_slope));
-					}
-					return;
-				}
-			}
-			// check for flat landing
-			if(gr->get_pos().z==from->get_pos().z) {
-				// ok, height qualify for endpos
-				if(!gr->hat_wege()  &&  gr->ist_natur()  &&  !gr->ist_wasser()  &&  !gr2->hat_wege()  &&  is_allowed_step(gr, gr2, &internal_cost )) {
-					// ok, here we may end
-					// we return the koord3d AFTER we came down!
-					if(has_reason_for_bridge) {
-						next_gr.append(next_gr_t(gr, i * cost_difference + welt->get_einstellungen()->way_count_slope * 2));
-						return;
-					}
-				}
-			}
-		}
-		return;
-	}
-
-	// downhill hang ...
-	if(ribi_typ(from->get_grund_hang())==ribi_t::rueckwaerts(ribi_typ(zv))) {
-		// try bridge
-
-		int max_lenght=bruecke_besch->get_max_length()>0 ? bruecke_besch->get_max_length()-2 : welt->get_einstellungen()->way_max_bridge_len;
-		max_lenght = min( max_lenght, welt->get_einstellungen()->way_max_bridge_len );
-
-		for(int i=1;  i<max_lenght;  i++ ) {
-			// not on map or already something there => fail
-			if (!welt->ist_in_kartengrenzen(to_pos + zv * (i + 1))) return;
-			gr = welt->lookup(to_pos+zv*i)->get_kartenboden();
-			gr2 = welt->lookup(to_pos+zv*(i+1))->get_kartenboden();
-			// must leave one field empty ...
-			if (gr2->get_pos() == ziel) return;
-			// something in the way?
-			if (welt->lookup(from->get_pos() + zv * i)) return;
-			// powerline in the way?
-			if (gr->get_pos().z == from->get_pos().z + Z_TILE_STEP && gr->find<leitung_t>()) return;
-			// some articial tiles here?!?
-			if (gr->get_pos().z > from->get_pos().z) return;
-			// check for runways ...
-			if (gr->hat_weg(air_wt)) return;
-			// non-manable slope?
-			if(gr->get_pos().z==from->get_pos().z  &&  gr->get_grund_hang()!=0) {
-#ifndef DOUBLE_GROUNDS
-				if (!hang_t::ist_wegbar(gr->get_grund_hang()) || ribi_typ(zv) != ribi_typ(gr->get_grund_hang())) return;
-#else
-				if (hang_t::ist_wegbar(gr->get_grund_hang()) || !hang_t::ist_einfach(gr->get_grund_hang()) || ribi_typ(zv) != ribi_typ(gr->get_grund_hang())) return;
-#endif
-			}
-			// make sure, the bridge is not too short
-			if(i==1) {
-				continue;
-			}
-			// here is the uphill hang
-			if(gr->get_pos().z==from->get_pos().z  &&  gr->get_grund_hang()!=0) {
-				// ok, qualify for endpos
-				if(!gr->hat_wege()  &&  gr->ist_natur()  &&  !gr->ist_wasser()  &&  is_allowed_step(gr, gr2, &internal_cost )) {
-					// ok, here we may end
-					// we return the koord3d AFTER we came down!
-					// this make always sense, since it is a counter slope
-					next_gr.append(next_gr_t(gr, i * cost_difference));
-					return;
-				}
-			}
-			// check, if we need really a bridge
-			if(!has_reason_for_bridge) {
-				long dummy;
-				has_reason_for_bridge = !is_allowed_step(gr, gr2, &dummy );
-			}
-			// check for flat landing
-			if(gr->get_pos().z==from->get_pos().z  &&  has_reason_for_bridge) {
-				// ok, height qualify for endpos
-				if(!gr->hat_wege()  &&  gr->ist_natur()  &&  !gr->ist_wasser()  &&  !gr2->hat_wege()  &&  is_allowed_step(gr, gr2, &internal_cost )) {
-					// ok, here we may end
-					if(has_reason_for_bridge) {
-						next_gr.append(next_gr_t(gr, i * cost_difference + welt->get_einstellungen()->way_count_slope));
-					}
-				}
+	if(  bruecke_besch && (  ribi_typ(from->get_grund_hang()) == ribi_t::rueckwaerts(ribi_typ(zv))  ||  from->get_grund_hang() == 0  )
+			&&  brueckenbauer_t::ist_ende_ok(sp, from)  &&  !from->get_leitung()  ) {
+		// Try a bridge.
+		const long cost_difference=besch->get_wartung()>0 ? (bruecke_besch->get_wartung()*4l+3l)/besch->get_wartung() : 16;
+		const char *error;
+		// add long bridge (i==0) and shortest possible bridge (i==1)
+		koord3d end;
+		const grund_t* gr_end;
+		for( uint8 i = 0; i < 2; i++ ) {
+			end = brueckenbauer_t::finde_ende( welt, from->get_pos(), zv, bruecke_besch, error, i!=0 );
+			gr_end = welt->lookup(end);
+			uint32 length = koord_distance(from->get_pos(), end);
+			if(  error == NULL  &&  !ziel.is_contained(end)  &&  brueckenbauer_t::ist_ende_ok(sp, gr_end) && length <= welt->get_einstellungen()->way_max_bridge_len) {
+				// If there is a slope on the starting tile, it's taken into account in is_allowed_step, but a bridge will be flat!
+				sint8 num_slopes = (from->get_grund_hang() == hang_t::flach) ? 1 : -1;
+				// On the end tile, we haven't to subtract way_count_slope, since is_allowed_step isn't called with this tile.
+				num_slopes += (gr_end->get_grund_hang() == hang_t::flach) ? 1 : 0;
+				next_gr.append(next_gr_t(welt->lookup(end), length * cost_difference + num_slopes*welt->get_einstellungen()->way_count_slope ));
 			}
 		}
 		return;
 	}
 
+	if(  tunnel_besch  &&  ribi_typ(from->get_grund_hang()) == ribi_typ(zv)  ) {
 	// uphill hang ... may be tunnel?
-	if(ribi_typ(from->get_grund_hang())==ribi_typ(zv)) {
-
-		for(unsigned i=0;  i<(unsigned)welt->get_einstellungen()->way_max_bridge_len;  i++ ) {
-			// not on map or already something there => fail
-			if (!welt->ist_in_kartengrenzen(to_pos + zv * (i + 1))) return;
-			gr = welt->lookup(to_pos+zv*i)->get_kartenboden();
-			gr2 = welt->lookup(to_pos+zv*(i+1))->get_kartenboden();
-			// here is a hang
-			if(gr->get_pos().z==from->get_pos().z  &&  gr->get_grund_hang()!=0) {
-				if(ribi_t::rueckwaerts(ribi_typ(zv))!=ribi_typ(gr->get_grund_hang())  ||  !hang_t::ist_einfach(gr->get_grund_hang())) {
-					// non, manable slope
-					return;
-				}
-				// ok, qualify for endpos
-				if(!gr->hat_wege()  &&  gr->ist_natur()  &&  !gr->ist_wasser()  &&  is_allowed_step(gr, gr2, &internal_cost )) {
-					// ok, here we may end
-					// we return the koord3d AFTER we came down!
-					next_gr.append(next_gr_t(gr, i * welt->get_einstellungen()->way_count_tunnel));
-					return;
-				}
-			}
+		const long cost_difference=besch->get_wartung()>0 ? (tunnel_besch->get_wartung()*4l+3l)/besch->get_wartung() : 16;
+		koord3d end = tunnelbauer_t::finde_ende( welt, from->get_pos(), zv, besch->get_wtyp());
+		if(  end != koord3d::invalid  &&  !ziel.is_contained(end)  ) {
+			uint32 length = koord_distance(from->get_pos(), end);
+			next_gr.append(next_gr_t(welt->lookup(end), length * cost_difference ));
+			return;
 		}
 	}
 }
@@ -1010,7 +948,6 @@ void wegbauer_t::check_for_bridge(const grund_t* parent_from, const grund_t* fro
 wegbauer_t::wegbauer_t(karte_t* wl, spieler_t* spl) : next_gr(32)
 {
 	n      = 0;
-	max_n  = -1;
 	sp     = spl;
 	welt   = wl;
 	bautyp = strasse;   // kann mit route_fuer() gesetzt werden
@@ -1059,69 +996,72 @@ wegbauer_t::route_fuer(enum bautyp_t wt, const weg_besch_t *b, const tunnel_besc
 		bruecke_besch = NULL;
 		tunnel_besch = NULL;
 	}
-#if AUTOMATIC_BRIDGES
-	else if(bruecke_besch==NULL) {
-		bruecke_besch = brueckenbauer_t::find_bridge((waytype_t)b->get_wtyp(),25,0);
-	}
+	else if(  bautyp != river  ) {
+#ifdef AUTOMATIC_BRIDGES
+		if(  bruecke_besch == NULL  ) {
+			bruecke_besch = brueckenbauer_t::find_bridge((waytype_t)b->get_wtyp(),25,welt->get_timeline_year_month());
+		}
+#endif
+#ifdef AUTOMATIC_TUNNELS
+		if(  tunnel_besch == NULL  ) {
+			tunnel_besch = tunnelbauer_t::find_tunnel((waytype_t)b->get_wtyp(),25,welt->get_timeline_year_month());
+		}
 #endif
+	}
   DBG_MESSAGE("wegbauer_t::route_fuer()",
-         "setting way type to %d, besch=%s, bruecke_besch=%s",
+         "setting way type to %d, besch=%s, bruecke_besch=%s, tunnel_besch=%s",
          bautyp,
          besch ? besch->get_name() : "NULL",
-         bruecke_besch ? bruecke_besch->get_name() : "NULL"
+         bruecke_besch ? bruecke_besch->get_name() : "NULL",
+         tunnel_besch ? tunnel_besch->get_name() : "NULL"
          );
 }
 
-
-
-koord *
-get_next_koord(koord gr_pos, koord ziel)
+void get_mini_maxi( const vector_tpl<koord3d> &ziel, koord3d &mini, koord3d &maxi )
 {
-	static koord next_koord[4];
-	if( abs(gr_pos.x-ziel.x)>abs(gr_pos.y-ziel.y) ) {
-		next_koord[0] = (ziel.x>gr_pos.x) ? koord::ost : koord::west;
-		next_koord[1] = (ziel.y>gr_pos.y) ? koord::sued : koord::nord;
-	}
-	else {
-		next_koord[0] = (ziel.y>gr_pos.y) ? koord::sued : koord::nord;
-		next_koord[1] = (ziel.x>gr_pos.x) ? koord::ost : koord::west;
+	mini = maxi = ziel[0];
+	for( uint32 i = 1; i < ziel.get_count(); i++ ) {
+		const koord3d &current = ziel[i];
+		if( current.x < mini.x ) {
+			mini.x = current.x;
+		} else if( current.x > maxi.x ) {
+			maxi.x = current.x;
+		}
+		if( current.y < mini.y ) {
+			mini.y = current.y;
+		} else if( current.y > maxi.y ) {
+			maxi.y = current.y;
+		}
+		if( current.z < mini.z ) {
+			mini.z = current.z;
+		} else if( current.z > maxi.z ) {
+			maxi.z = current.z;
+		}
 	}
-	next_koord[2] = koord(  -next_koord[1].x, -next_koord[1].y );
-	next_koord[3] = koord(  -next_koord[0].x, -next_koord[0].y );
-	return next_koord;
 }
 
-
-
 /* this routine uses A* to calculate the best route
  * beware: change the cost and you will mess up the system!
  * (but you can try, look at simuconf.tab)
  */
 long
-wegbauer_t::intern_calc_route(const koord3d start3d, const koord3d ziel3d)
+wegbauer_t::intern_calc_route(const vector_tpl<koord3d> &start, const vector_tpl<koord3d> &ziel)
 {
-	// we assume fail
-	max_n = -1;
-
 	// we clear it here probably twice: does not hurt ...
 	route.clear();
 
 	// check for existing koordinates
-	const grund_t* gr = welt->lookup(start3d);
-	if (gr == NULL || welt->lookup(ziel3d) == NULL) {
+	bool has_target_ground = false;
+	for( uint32 i = 0; i < ziel.get_count(); i++ ) {
+		has_target_ground |= welt->lookup(ziel[i]) != NULL;
+	}
+	if( !has_target_ground ) {
 		return -1;
 	}
 
-	// some thing for the search
-	grund_t *to;
-	koord3d gr_pos;	// just the last valid pos ...
-
-	// is valid ground?
-	long dummy;
-	if(!is_allowed_step(gr,gr,&dummy)) {
-		DBG_MESSAGE("wegbauer_t::intern_calc_route()","cannot start on (%i,%i,%i)",start3d.x,start3d.y,start3d.z);
-		return false;
-	}
+	// calculate the minimal cuboid containing 'ziel'
+	koord3d mini, maxi;
+	get_mini_maxi( ziel, mini, maxi );
 
 	// memory in static list ...
 	if(route_t::nodes==NULL) {
@@ -1148,26 +1088,48 @@ wegbauer_t::intern_calc_route(const koord3d start3d, const koord3d ziel3d)
 	// nothing in lists
 	welt->unmarkiere_alle();
 
-	// get exclusively the tile list
-	route_t::GET_NODE();
+	// clear the queue (should be empty anyhow)
+	queue.clear();
 
+	// some thing for the search
+	grund_t *to;
+	koord3d gr_pos;	// just the last valid pos ...
+	route_t::ANode *tmp;
 	uint32 step = 0;
-	route_t::ANode *tmp = &(route_t::nodes[step]);
-	step ++;
+	const grund_t* gr;
 
-	tmp->parent = NULL;
-	tmp->gr = gr;
-	tmp->f = route_t::calc_distance(start3d,ziel3d);
-	tmp->g = 0;
-	tmp->dir = 0;
-	tmp->count = 0;
+	for( uint32 i = 0; i < start.get_count(); i++ ) {
+		gr = welt->lookup(start[i]);
 
-	// clear the queue (should be empty anyhow)
-	queue.clear();
-	queue.insert(tmp);
+		// is valid ground?
+		long dummy;
+		if( !gr || !is_allowed_step(gr,gr,&dummy) ) {
+			// DBG_MESSAGE("wegbauer_t::intern_calc_route()","cannot start on (%i,%i,%i)",start.x,start.y,start.z);
+			continue;
+		}
+		tmp = &(route_t::nodes[step]);
+		step ++;
+
+		tmp->parent = NULL;
+		tmp->gr = gr;
+		tmp->f = calc_distance(start[i], mini, maxi);
+		tmp->g = 0;
+		tmp->dir = 0;
+		tmp->count = 0;
+
+		queue.insert(tmp);
+	}
+
+	if( queue.empty() ) {
+		// no valid ground to start.
+		return -1;
+	}
 
 	INT_CHECK("wegbauer 347");
 
+	// get exclusively the tile list
+	route_t::GET_NODE();
+
 	// to speed up search, but may not find all shortest ways
 	uint32 min_dist = 99999999;
 
@@ -1191,7 +1153,7 @@ DBG_DEBUG("insert to close","(%i,%i,%i)  f=%i",gr->get_pos().x,gr->get_pos().y,g
 #endif
 
 		// already there
-		if(gr_pos==ziel3d  ||  tmp->g>maximum) {
+		if(  ziel.is_contained(gr_pos)  ||  tmp->g>maximum) {
 			// we added a target to the closed list: we are finished
 			break;
 		}
@@ -1202,13 +1164,11 @@ DBG_DEBUG("insert to close","(%i,%i,%i)  f=%i",gr->get_pos().x,gr->get_pos().y,g
 		// only one direction allowed ...
 		const koord bridge_nsow=tmp->parent!=NULL ? gr->get_pos().get_2d()-tmp->parent->gr->get_pos().get_2d() : koord::invalid;
 
-		const koord *next_koord = get_next_koord(gr->get_pos().get_2d(),ziel3d.get_2d());
-
 		// testing all four possible directions
 		for(int r=0; r<4; r++) {
 
 			to = NULL;
-			if(!gr->get_neighbour(to,invalid_wt,next_koord[r])) {
+			if(!gr->get_neighbour(to,invalid_wt,koord::nsow[r])) {
 				continue;
 			}
 
@@ -1220,7 +1180,7 @@ DBG_DEBUG("insert to close","(%i,%i,%i)  f=%i",gr->get_pos().x,gr->get_pos().y,g
 			long new_cost = 0;
 			bool is_ok = is_allowed_step(gr,to,&new_cost);
 
-			// we check here for 180° turns and the end of bridges ...
+			// we check here for 180 degree turns and the end of bridges ...
 			if(is_ok) {
 				if(tmp->parent) {
 
@@ -1243,14 +1203,14 @@ DBG_DEBUG("insert to close","(%i,%i,%i)  f=%i",gr->get_pos().x,gr->get_pos().y,g
 				// now add it to the array ...
 				next_gr.append(next_gr_t(to, new_cost));
 			}
-			else if(tmp->parent!=NULL  &&  !gr->hat_wege()  &&  bridge_nsow==koord::nsow[r]) {
+			else if(tmp->parent!=NULL  &&  bridge_nsow==koord::nsow[r]) {
 				// try to build a bridge or tunnel here, since we cannot go here ...
-				check_for_bridge(tmp->parent->gr,gr,ziel3d);
+				check_for_bridge(tmp->parent->gr,gr,ziel);
 			}
 		}
 
 		// now check all valid ones ...
-		for(unsigned r=0; r<next_gr.get_count(); r++) {
+		for(uint32 r=0; r<next_gr.get_count(); r++) {
 
 			to = next_gr[r].gr;
 			if(welt->ist_markiert(to)) {
@@ -1293,7 +1253,7 @@ DBG_DEBUG("insert to close","(%i,%i,%i)  f=%i",gr->get_pos().x,gr->get_pos().y,g
 				 current_dir = ribi_typ( gr->get_pos().get_2d(), to->get_pos().get_2d() );
 			}
 
-			const uint32 new_dist = abs_distance( to->get_pos().get_2d(), ziel3d.get_2d() )*welt->get_einstellungen()->way_count_straight + abs(to->get_hoehe()-ziel3d.z)*welt->get_einstellungen()->way_count_slope;
+			const uint32 new_dist = calc_distance( to->get_pos(), mini, maxi );
 
 			// special check for kinks at the end
 			if(new_dist==0  &&  current_dir!=tmp->dir) {
@@ -1338,7 +1298,7 @@ DBG_DEBUG("insert to open","(%i,%i,%i)  f=%i",to->get_pos().x,to->get_pos().y,to
 #endif
 		}
 
-	} while (!queue.empty() && step < route_t::MAX_STEP && gr->get_pos() != ziel3d);
+	} while (!queue.empty() && step < route_t::MAX_STEP);
 
 #ifdef DEBUG_ROUTES
 DBG_DEBUG("wegbauer_t::intern_calc_route()","steps=%i  (max %i) in route, open %i, cost %u",step,route_t::MAX_STEP,queue.get_count(),tmp->g);
@@ -1349,7 +1309,7 @@ DBG_DEBUG("wegbauer_t::intern_calc_route()","steps=%i  (max %i) in route, open %
 
 //DBG_DEBUG("reached","%i,%i",tmp->pos.x,tmp->pos.y);
 	// target reached?
-	if(gr->get_pos()!=ziel3d  || step >=route_t::MAX_STEP  ||  tmp->parent==NULL) {
+	if( !ziel.is_contained(gr->get_pos())  || step >=route_t::MAX_STEP  ||  tmp->parent==NULL) {
 		dbg->warning("wegbauer_t::intern_calc_route()","Too many steps (%i>=max %i) in route (too long/complex)",step,route_t::MAX_STEP);
 		return -1;
 	}
@@ -1361,9 +1321,6 @@ DBG_DEBUG("wegbauer_t::intern_calc_route()","steps=%i  (max %i) in route, open %
 //DBG_DEBUG("add","%i,%i",tmp->pos.x,tmp->pos.y);
 			tmp = tmp->parent;
 		}
-
-		// maybe here bridges should be optimized ...
-		max_n = route.get_count() - 1;
 		return cost;
 	}
 
@@ -1376,7 +1333,6 @@ void
 wegbauer_t::intern_calc_straight_route(const koord3d start, const koord3d ziel)
 {
 	bool ok=true;
-	max_n = -1;
 
 	const grund_t* test_bd = welt->lookup(start);
 	if (test_bd == NULL) {
@@ -1388,15 +1344,24 @@ wegbauer_t::intern_calc_straight_route(const koord3d start, const koord3d ziel)
 		// no legal ground to start ...
 		return;
 	}
+	if ((bautyp&tunnel_flag) && !test_bd->ist_tunnel()) {
+		// start tunnelbuilding in tunnels
+		return;
+	}
 	test_bd = welt->lookup(ziel);
 	if((bautyp&tunnel_flag)==0  &&  test_bd  &&  !is_allowed_step(test_bd,test_bd,&dummy_cost)) {
 		// ... or to end
 		return;
 	}
+	// we have to reach target height if no tunnel building or sliced mode or target ground exists.
+	const bool target_3d = (bautyp&tunnel_flag)==0  || grund_t::underground_mode==grund_t::ugm_level  ||  test_bd!=NULL;
+
+	koord3d pos=start;
 
-	koord pos=start.get_2d();
+	route.clear();
+	route.append(start);
 
-	while(pos!=ziel.get_2d()  &&  ok) {
+	while(pos.get_2d()!=ziel.get_2d()  &&  ok) {
 
 		// shortest way
 		koord diff;
@@ -1406,71 +1371,90 @@ wegbauer_t::intern_calc_straight_route(const koord3d start, const koord3d ziel)
 		else {
 			diff = (pos.y>ziel.y) ? koord(0,-1) : koord(0,1);
 		}
-
-		grund_t *bd_von = welt->lookup(pos)->get_kartenboden();
 		if(bautyp&tunnel_flag) {
-			grund_t *bd_von = welt->lookup(koord3d(pos,start.z));
-			ok = (bd_von==NULL)  ||  bd_von->get_typ()==grund_t::tunnelboden;
 #ifdef ONLY_TUNNELS_BELOW_GROUND
 			// ground must be above tunnel
-			ok &= (welt->lookup(pos)->get_kartenboden()->get_hoehe() > start.z);
+			ok &= (welt->lookup(pos.get_2d())->get_kartenboden()->get_hoehe() > pos.z);
+#else
+			// at least tunnel not in the sea
+			const grund_t *gr = welt->lookup(pos.get_2d())->get_kartenboden();
+			ok = ok && (!gr->ist_wasser()  ||  min( welt->lookup_hgt(pos.get_2d()), welt->get_grundwasser() ) > pos.z);
 #endif
-			// check for halt or crossing ...
-			if(ok  &&  bd_von  &&  (bd_von->is_halt()  ||  bd_von->has_two_ways())) {
-				// then only single dir is ok ...
-				ribi_t::ribi haltribi = bd_von->get_weg_ribi_unmasked( (waytype_t)(bautyp&(~wegbauer_t::tunnel_flag)) );
-				haltribi = ribi_t::doppelt(haltribi);
-				ribi_t::ribi diffribi = ribi_t::doppelt( ribi_typ(diff) );
-				ok = (haltribi==diffribi);
-			}
-			// and the same for the last tile
-			if(  ok  &&  pos+diff==ziel.get_2d()  ) {
-				grund_t *bd_von = welt->lookup(koord3d(ziel.get_2d(),start.z));
-				ok = (bd_von==NULL)  ||  bd_von->get_typ()==grund_t::tunnelboden;
-				// check for halt or crossing ...
-				if(ok  &&  bd_von  &&  (bd_von->is_halt()  ||  bd_von->has_two_ways())) {
-					// then only single dir is ok ...
-					ribi_t::ribi haltribi = bd_von->get_weg_ribi_unmasked( (waytype_t)(bautyp&(~wegbauer_t::tunnel_flag)) );
-					haltribi = ribi_t::doppelt(haltribi);
-					ribi_t::ribi diffribi = ribi_t::doppelt( ribi_typ(diff) );
-					ok = (haltribi==diffribi);
+			// create fake tunnel grounds if needed
+			bool bd_von_new = false, bd_nach_new = false;
+			grund_t *bd_von = welt->lookup(pos);
+			if(  bd_von == NULL ) {
+				bd_von = new tunnelboden_t(welt, pos, hang_t::flach);
+				bd_von_new = true;
+			}
+			// take care of slopes
+			pos.z = bd_von->get_vmove(diff);
+
+			// check next tile
+			grund_t *bd_nach = welt->lookup(pos + diff);
+			if(  !bd_nach  ) {
+				// check for slope down ...
+				bd_nach = welt->lookup(pos + diff + koord3d(0,0,-Z_TILE_STEP));
+				if(  bd_nach  &&  bd_nach->get_weg_hang() == hang_t::flach  ) {
+					// Don't care about _flat_ tunnels below.
+					bd_nach= NULL;
 				}
 			}
+			if(  bd_nach == NULL  ){
+				bd_nach = new tunnelboden_t(welt, pos + diff, hang_t::flach);
+				bd_nach_new = true;
+			}
+			// check for tunnel and right slope
+			ok = ok && bd_nach->ist_tunnel() && bd_nach->get_vmove(-diff)==pos.z;
+			// all other checks are done here (crossings, stations etc)
+			ok = ok && is_allowed_step(bd_von, bd_nach, &dummy_cost);
+
+			// check for last tile
+			if(  ok  &&  bd_nach->get_pos().get_2d()==ziel.get_2d()  ) {
+				// at least tunnel not in the sea
+				const grund_t *gr = welt->lookup(bd_nach->get_pos().get_2d())->get_kartenboden();
+				ok = ok  &&  (!gr->ist_wasser()  ||  min( welt->lookup_hgt(pos.get_2d()+diff), welt->get_grundwasser() ) > pos.z);
+			}
+
+			// advance position
+			pos = bd_nach->get_pos();
+
+			if (bd_von_new) {
+				delete bd_von;
+			}
+			if (bd_nach_new) {
+				delete bd_nach;
+			}
 		}
 		else {
-			grund_t *bd_nach = NULL;
-			ok = ok  &&  bd_von->get_neighbour(bd_nach, invalid_wt, diff);
+			grund_t *bd_von = welt->lookup(pos);
+			if (bd_von==NULL) {
+				ok = false;
+			}
+			else
+			{
+				grund_t *bd_nach = NULL;
+				ok = ok  &&  bd_von->get_neighbour(bd_nach, invalid_wt, diff);
 
-			// allowed ground?
-			ok = ok  &&  bd_von  &&  (!bd_nach->ist_bruecke())  &&  is_allowed_step(bd_von,bd_nach,&dummy_cost);
+				// allowed ground?
+				ok = ok  &&  bd_nach  &&  is_allowed_step(bd_von,bd_nach,&dummy_cost);
+				if (ok) {
+					pos = bd_nach->get_pos();
+				}
+			}
 		}
+
+		route.append(pos);
 DBG_MESSAGE("wegbauer_t::calc_straight_route()","step %i,%i = %i",diff.x,diff.y,ok);
-		pos += diff;
 	}
-	route.clear();
+	ok = ok && ( target_3d ? pos==ziel : pos.get_2d()==ziel.get_2d() );
+
 	// we can built a straight route?
 	if(ok) {
-		route.append(start);
-		pos = start.get_2d();
-		while(pos!=ziel.get_2d()) {
-			// shortest way
-			koord diff;
-			if(abs(pos.x-ziel.x)>=abs(pos.y-ziel.y)) {
-				diff = (pos.x>ziel.x) ? koord(-1,0) : koord(1,0);
-			}
-			else {
-				diff = (pos.y>ziel.y) ? koord(0,-1) : koord(0,1);
-			}
-			pos += diff;
-			if(bautyp&tunnel_flag) {
-				route.append(koord3d(pos, start.z));
-			}
-			else {
-				route.append(welt->lookup(pos)->get_kartenboden()->get_pos());
-			}
-		}
-		max_n = route.get_count() - 1;
-DBG_MESSAGE("wegbauer_t::intern_calc_straight_route()","found straight route max_n=%i",max_n);
+DBG_MESSAGE("wegbauer_t::intern_calc_straight_route()","found straight route max_n=%i",get_count()-1);
+	}
+	else {
+		route.clear();
 	}
 }
 
@@ -1482,8 +1466,6 @@ wegbauer_t::intern_calc_route_runways(koord3d start3d, const koord3d ziel3d)
 {
 	const koord start=start3d.get_2d();
 	const koord ziel=ziel3d.get_2d();
-	// assume, we will fail
-	max_n = -1;
 	// check for straight line!
 	const ribi_t::ribi ribi = ribi_typ( start, ziel );
 	if(!ribi_t::ist_gerade(ribi)) {
@@ -1517,7 +1499,7 @@ wegbauer_t::intern_calc_route_runways(koord3d start3d, const koord3d ziel3d)
 		return false;
 	}
 	// now try a straight line with no crossings and no curves at the end
-	const int dist=abs(ziel.x-start.x)+abs(ziel.y-start.y);
+	const int dist=koord_distance( ziel, start );
 	for(  int i=0;  i<=dist;  i++  ) {
 		gr=welt->lookup(start+zv*i)->get_kartenboden();
 		// no slopes!
@@ -1535,7 +1517,6 @@ wegbauer_t::intern_calc_route_runways(koord3d start3d, const koord3d ziel3d)
 	for(  int i=0;  i<=dist;  i++  ) {
 		route.append(welt->lookup(start + zv * i)->get_kartenboden()->get_pos());
 	}
-	max_n = dist;
 	return true;
 }
 
@@ -1555,19 +1536,25 @@ wegbauer_t::calc_straight_route(koord3d start, const koord3d ziel)
 	}
 	else {
 		intern_calc_straight_route(start,ziel);
-		if(max_n==-1) {
+		if( get_count() == 0 ) {
 			intern_calc_straight_route(ziel,start);
 		}
 	}
 }
 
 
+void wegbauer_t::calc_route(const koord3d &start, const koord3d &ziel)
+{
+	vector_tpl<koord3d> start_vec(1), ziel_vec(1);
+	start_vec.append(start);
+	ziel_vec.append(ziel);
+	calc_route(start_vec, ziel_vec);
+}
 
 /* calc_route
  *
  */
-void
-wegbauer_t::calc_route(koord3d start, koord3d ziel)
+void wegbauer_t::calc_route(const vector_tpl<koord3d> &start, const vector_tpl<koord3d> &ziel)
 {
 #ifdef DEBUG_ROUTES
 long ms=dr_time();
@@ -1575,11 +1562,13 @@ long ms=dr_time();
 	INT_CHECK("simbau 740");
 
 	if(bautyp==luft  &&  besch->get_styp()==1) {
-		intern_calc_route_runways(start, ziel);
+		assert( start.get_count() == 1  &&  ziel.get_count() == 1 );
+		intern_calc_route_runways(start[0], ziel[0]);
 	}
 	else if(bautyp==river) {
+		assert( start.get_count() == 1  &&  ziel.get_count() == 1 );
 		// river only go downards => start and end are clear ...
-		if(  start.z > ziel.z  ) {
+		if(  start[0].z > ziel[0].z  ) {
 			intern_calc_route( start, ziel );
 		}
 		else {
@@ -1589,20 +1578,8 @@ long ms=dr_time();
 			// remove leading water ...
 			route.remove_at(0);
 		}
-		// now this is the true length of the river
-		max_n = route.get_count()-1;
 	}
 	else {
-		// we need start and target for on plain ground and never on monorails!
-		grund_t *gr=welt->lookup(start);
-		if(gr  &&  gr->get_typ()==grund_t::monorailboden) {
-			start.z -= Z_TILE_STEP;
-		}
-		gr=welt->lookup(ziel);
-		if(gr  &&  gr->get_typ()==grund_t::monorailboden) {
-			ziel.z -= Z_TILE_STEP;
-		}
-
 		keep_existing_city_roads |= (bautyp&bot_flag)!=0;
 		long cost2 = intern_calc_route(start, ziel);
 		INT_CHECK("wegbauer 1165");
@@ -1619,13 +1596,11 @@ long ms=dr_time();
 		long cost = intern_calc_route(ziel, start);
 		INT_CHECK("wegbauer 1165");
 
-		// the ceaper will survive ...
-		if(cost2<cost  &&  cost>0) {
+		// the cheaper will survive ...
+		if(  cost2 < cost  ||  cost < 0  ) {
 			swap(route, route2);
 		}
 #endif
-		max_n = route.get_count() - 1;
-
 	}
 	INT_CHECK("wegbauer 778");
 #ifdef DEBUG_ROUTES
@@ -1633,55 +1608,26 @@ DBG_MESSAGE("calc_route::calc_route", "took %i ms",dr_time()-ms);
 #endif
 }
 
-
-
-ribi_t::ribi
-wegbauer_t::calc_ribi(int step)
-{
-	ribi_t::ribi ribi = ribi_t::keine;
-
-	if(step < max_n) {
-		// check distance, only neighbours
-		const koord zv = (route[step + 1] - route[step]).get_2d();
-		if(abs(zv.x) <= 1 && abs(zv.y) <= 1) {
-			ribi |= ribi_typ(zv);
-		}
-	}
-	if(step > 0) {
-		// check distance, only neighbours
-		const koord zv = (route[step - 1] - route[step]).get_2d();
-		if(abs(zv.x) <= 1 && abs(zv.y) <= 1) {
-			ribi |= ribi_typ(zv);
-		}
-	}
-	return ribi;
-}
-
-
-
 void
 wegbauer_t::baue_tunnel_und_bruecken()
 {
 	if(bruecke_besch==NULL  &&  tunnel_besch==NULL) {
 		return;
 	}
-	// tunnel pruefen
-	for(int i=1; i<max_n-1; i++) {
+	// check for bridges and tunnels (no tunnel/bridge at last/first tile)
+	for(uint32 i=1; i<get_count()-2; i++) {
 		koord d = (route[i + 1] - route[i]).get_2d();
+		koord zv = koord (sgn(d.x), sgn(d.y));
 
 		// ok, here is a gap ...
 		if(d.x > 1 || d.y > 1 || d.x < -1 || d.y < -1) {
 
 			if(d.x*d.y!=0) {
-				koord3d start = route[i];
-				koord3d end   = route[i + 1];
-				dbg->error("wegbauer_t::baue_tunnel_und_bruecken()","cannot built a bridge between %i,%i,%i (n=%i, max_n=%i) and %i,%i,%i",start.x,start.y,start.z,i,max_n,end.x,end.y,end.z);
+				dbg->error("wegbauer_t::baue_tunnel_und_bruecken()","cannot built a bridge between %s (n=%i, max_n=%i) and %s", route[i].get_str(),i,get_count()-1,route[i+1].get_str());
 				continue;
 			}
 
-			koord zv = koord (sgn(d.x), sgn(d.y));
-
-			DBG_MESSAGE("wegbauer_t::baue_tunnel_und_bruecken", "built bridge %p between %i,%i,%i and %i,%i,%i", bruecke_besch, route[i].x, route[i].y, route[i].z, route[i + 1].x, route[i + 1].y, route[i + 1].z);
+			DBG_MESSAGE("wegbauer_t::baue_tunnel_und_bruecken", "built bridge %p between %s and %s", bruecke_besch, route[i].get_str(), route[i + 1].get_str());
 
 			const grund_t* start = welt->lookup(route[i]);
 			const grund_t* end   = welt->lookup(route[i + 1]);
@@ -1696,8 +1642,8 @@ wegbauer_t::baue_tunnel_und_bruecken()
 			}
 
 			if(start->get_grund_hang()==0  ||  start->get_grund_hang()==hang_typ(zv*(-1))) {
-				// bridge here
-				brueckenbauer_t::baue( welt, sp, route[i].get_2d(), bruecke_besch);
+				// bridge here, since the route is saved backwards, we have to build it at the posterior end
+				brueckenbauer_t::baue( welt, sp, route[i+1].get_2d(), bruecke_besch);
 			}
 			else {
 				// tunnel
@@ -1705,9 +1651,14 @@ wegbauer_t::baue_tunnel_und_bruecken()
 			}
 			INT_CHECK( "wegbauer 1584" );
 		}
-		else {
+		// Don't build short tunnels/bridges if they block a bridge/tunnel behind!
+		else if(  bautyp != leitung  &&  koord_distance(route[i + 2], route[i + 1]) == 1  ) {
 			grund_t *gr_i = welt->lookup(route[i]);
 			grund_t *gr_i1 = welt->lookup(route[i+1]);
+			if(  gr_i->get_weg_hang() != gr_i->get_grund_hang()  ||  gr_i1->get_weg_hang() != gr_i1->get_grund_hang()  ) {
+				// Here is already a tunnel or a bridge.
+				continue;
+			}
 			hang_t::typ h = gr_i->get_weg_hang();
 			waytype_t wt = (waytype_t)(besch->get_wtyp());
 			if(h!=hang_t::flach  &&  hang_t::gegenueber(h)==gr_i1->get_weg_hang()) {
@@ -1717,13 +1668,15 @@ wegbauer_t::baue_tunnel_und_bruecken()
 				weg_t *wi1 = gr_i1->get_weg(wt);
 				if(wi->get_besitzer()==sp  &&  wi1->get_besitzer()==sp) {
 					// we are the owner
-					if(welt->lookup(route[i-1])->get_hoehe()>gr_i->get_hoehe()  &&  bruecke_besch) {
+					if(  h != hang_typ(zv)  ) {
 						// its a bridge
-						wi->set_ribi(ribi_typ(h));
-						wi1->set_ribi(ribi_typ(hang_t::gegenueber(h)));
-						brueckenbauer_t::baue( welt, sp, route[i].get_2d(), bruecke_besch);
+						if( bruecke_besch ) {
+							wi->set_ribi(ribi_typ(h));
+							wi1->set_ribi(ribi_typ(hang_t::gegenueber(h)));
+							brueckenbauer_t::baue( welt, sp, route[i].get_2d(), bruecke_besch);
+						}
 					}
-					else if(tunnel_besch) {
+					else if( tunnel_besch ) {
 						// make a short tunnel
 						wi->set_ribi(ribi_typ(hang_t::gegenueber(h)));
 						wi1->set_ribi(ribi_typ(h));
@@ -1736,33 +1689,87 @@ wegbauer_t::baue_tunnel_und_bruecken()
 	}
 }
 
-
-
-/* returns the amount needed to built this way
+/*
+ * returns the amount needed to built this way
  * author prissi
  */
-long
-wegbauer_t::calc_costs()
+sint64 wegbauer_t::calc_costs()
 {
-	long costs=0;
+	sint64 costs=0;
+	koord3d offset = koord3d(0,0, bautyp&elevated_flag ? 1 : 0 );
 
-	// construct city road?
-	const weg_besch_t *cityroad = welt->get_city_road();
+	sint32 single_cost;
+	sint32 new_speedlimit;
+
+	if( bautyp&tunnel_flag ) {
+		assert( tunnel_besch );
+		single_cost = tunnel_besch->get_preis();
+		new_speedlimit = tunnel_besch->get_topspeed();
+	}
+	else {
+		single_cost = besch->get_preis();
+		new_speedlimit = besch->get_topspeed();
+	}
 
-	for(int i=0; i<=max_n; i++) {
+	for(uint32 i=0; i<get_count(); i++) {
+		sint16 old_speedlimit = -1;
+
+		const grund_t* gr = welt->lookup(route[i] + offset);
+		if( gr ) {
+			if( bautyp&tunnel_flag ) {
+				const tunnel_t *tunnel = gr->find<tunnel_t>();
+				assert( tunnel );
+				if( tunnel->get_besch() == tunnel_besch ) {
+					continue; // Nothing to pay on this tile.
+				}
+				old_speedlimit = tunnel->get_besch()->get_topspeed();
+			}
+			else {
+				if(  besch->get_wtyp() == powerline_wt  ) {
+					if( gr->get_leitung() != NULL ) {
+						continue; // Allready a powerline on this tile.
+					}
+				}
+				else {
+					const weg_t *weg=gr->get_weg((waytype_t)besch->get_wtyp());
+					if( weg ) {
+						if( weg->get_besch() == besch ) {
+							continue; // Nothing to pay on this tile.
+						}
+						if(  besch->get_styp() == 0  &&  weg->get_besch()->get_styp() == 7  &&  gr->get_weg_nr(0)->get_waytype() == road_wt  ) {
+							// Don't replace a tram on a road with a normal track.
+							continue;
+						}
+						old_speedlimit = weg->get_besch()->get_topspeed();
+					}
+				}
+			}
+			// eventually we have to remove trees
+			for(  uint8 i=0;  i<gr->get_top();  i++  ) {
+				ding_t *dt = gr->obj_bei(i);
+				switch(dt->get_typ()) {
+					case ding_t::baum:
+						costs -= welt->get_einstellungen()->cst_remove_tree;
+						break;
+					case ding_t::groundobj:
+						costs += ((groundobj_t *)dt)->get_besch()->get_preis();
+						break;
+					default: break;
+				}
+			}
+		}
+		if(  !keep_existing_faster_ways  ||  old_speedlimit < new_speedlimit  ) {
+			costs += single_cost;
+		}
 
 		// last tile cannot be start of tunnel/bridge
-		if(i<max_n) {
+		if(i+1<get_count()) {
 			koord d = (route[i + 1] - route[i]).get_2d();
-
 			// ok, here is a gap ... => either bridge or tunnel
 			if(d.x > 1 || d.y > 1 || d.x < -1 || d.y < -1) {
-
 				koord zv = koord (sgn(d.x), sgn(d.y));
-
 				const grund_t* start = welt->lookup(route[i]);
 				const grund_t* end   = welt->lookup(route[i + 1]);
-
 				if(start->get_weg_hang()!=start->get_grund_hang()) {
 					// already a bridge/tunnel there ...
 					continue;
@@ -1771,56 +1778,18 @@ wegbauer_t::calc_costs()
 					// already a bridge/tunnel there ...
 					continue;
 				}
-
 				if(start->get_grund_hang()==0  ||  start->get_grund_hang()==hang_typ(zv*(-1))) {
 					// bridge
-					koord pos = route[i].get_2d();
-					while (route[i + 1].get_2d() != pos) {
-						pos += zv;
-						costs += bruecke_besch->get_preis();
-					}
+					costs += bruecke_besch->get_preis()*(koord_distance(route[i], route[i+1])+1);
 					continue;
 				}
 				else {
 					// tunnel
-					// bridge
-					koord pos = route[i].get_2d();
-					while (route[i + 1].get_2d() != pos) {
-						pos += zv;
-						costs -= welt->get_einstellungen()->cst_tunnel;
-					}
+					costs += tunnel_besch->get_preis()*(koord_distance(route[i], route[i+1])+1);
 					continue;
 				}
 			}
 		}
-
-		// no gap => normal way
-		const grund_t* gr = welt->lookup(route[i]);
-		if(gr) {
-			const weg_t *weg=gr->get_weg((waytype_t)besch->get_wtyp());
-			// keep faster ways or if it is the same way ... (@author prissi)
-			if(weg!=NULL  &&  (weg->get_besch()==besch  ||  keep_existing_ways  ||  (keep_existing_city_roads  && weg->get_besch()==cityroad)  ||  (keep_existing_faster_ways  &&  weg->get_besch()->get_topspeed()>besch->get_topspeed()))  ) {
-					//nothing to be done
-			}
-			else if(besch->get_wtyp()!=powerline_wt  ||  gr->get_leitung()==NULL) {
-				costs += besch->get_preis();
-				// eventually we have to remove trees
-				for(  uint8 i=0;  i<gr->get_top();  i++  ) {
-					ding_t *dt = gr->obj_bei(i);
-					switch(dt->get_typ()) {
-						case ding_t::baum:
-							costs -= welt->get_einstellungen()->cst_remove_tree;
-							break;
-						case ding_t::groundobj:
-							costs += ((groundobj_t *)dt)->get_besch()->get_preis();
-							break;
-
-						default: break;
-					}
-				}
-			}
-		}
-		// check next tile
 	}
 	DBG_MESSAGE("wegbauer_t::calc_costs()","construction estimate: %f",costs/100.0);
 	return costs;
@@ -1833,17 +1802,23 @@ bool
 wegbauer_t::baue_tunnelboden()
 {
 	long cost = 0;
-	for(int i=0; i<=max_n; i++) {
+	for(uint32 i=0; i<get_count(); i++) {
 
 		grund_t* gr = welt->lookup(route[i]);
 
+		const weg_besch_t *wb = tunnel_besch->get_weg_besch();
+		if(wb==NULL) {
+			// now we seach a matchin wy for the tunnels top speed
+			wb = wegbauer_t::weg_search( tunnel_besch->get_waytype(), tunnel_besch->get_topspeed(), welt->get_timeline_year_month(), weg_t::type_flat );
+		}
+
 		if(gr==NULL) {
 			// make new tunnelboden
 			tunnelboden_t* tunnel = new tunnelboden_t(welt, route[i], 0);
 			weg_t *weg = weg_t::alloc(tunnel_besch->get_waytype());
-			weg->set_besch( besch );
+			weg->set_besch( wb );
 			welt->access(route[i].get_2d())->boden_hinzufuegen(tunnel);
-			tunnel->neuen_weg_bauen(weg, calc_ribi(i), sp);
+			tunnel->neuen_weg_bauen(weg, route.get_ribi(i), sp);
 			tunnel->obj_add(new tunnel_t(welt, route[i], sp, tunnel_besch));
 			weg->set_max_speed(tunnel_besch->get_topspeed());
 			tunnel->calc_bild();
@@ -1853,16 +1828,21 @@ wegbauer_t::baue_tunnelboden()
 		}
 		else if(gr->get_typ()==grund_t::tunnelboden) {
 			// check for extension only ...
-			gr->weg_erweitern(tunnel_besch->get_waytype(),calc_ribi(i));
-			weg_t *weg = gr->get_weg(tunnel_besch->get_waytype());
+			gr->weg_erweitern( tunnel_besch->get_waytype(), route.get_ribi(i) );
+			tunnel_t *tunnel = gr->find<tunnel_t>();
+			assert( tunnel );
 			// take the faster way
-			if (!(keep_existing_ways  ||  (keep_existing_faster_ways  && (weg->get_max_speed() > tunnel_besch->get_topspeed())))) {
-				spieler_t::add_maintenance(sp, -weg->get_besch()->get_wartung());
-				weg->set_besch(besch);
+			if(  !keep_existing_faster_ways  ||  (tunnel->get_besch()->get_topspeed() < tunnel_besch->get_topspeed())  ) {
+				spieler_t::add_maintenance(sp, -tunnel->get_besch()->get_wartung());
+				spieler_t::add_maintenance(sp,  tunnel_besch->get_wartung() );
+
+				tunnel->set_besch(tunnel_besch);
+				weg_t *weg = gr->get_weg(tunnel_besch->get_waytype());
+				weg->set_besch(wb);
 				weg->set_max_speed(tunnel_besch->get_topspeed());
 				gr->calc_bild();
-				cost -= besch->get_preis();
-				spieler_t::add_maintenance( sp,  tunnel_besch->get_wartung() );
+
+				cost -= tunnel_besch->get_preis();
 			}
 		}
 	}
@@ -1875,14 +1855,18 @@ wegbauer_t::baue_tunnelboden()
 void
 wegbauer_t::baue_elevated()
 {
-	for(int i=0; i<=max_n; i++) {
+	for(  uint32 i=0;  i<get_count();  i++  ) {
 
 		planquadrat_t* plan = welt->access(route[i].get_2d());
-		route[i].z = plan->get_kartenboden()->get_pos().z + Z_TILE_STEP;
+
+		grund_t* gr0= plan->get_boden_in_hoehe(route[i].z);
+		route[i].z += Z_TILE_STEP;
 		grund_t* gr = plan->get_boden_in_hoehe(route[i].z);
+
 		if(gr==NULL) {
+			hang_t::typ hang = gr0 ? gr0->get_grund_hang() : 0;
 			// add new elevated ground
-			monorailboden_t* monorail = new monorailboden_t(welt, route[i], plan->get_kartenboden()->get_grund_hang());
+			monorailboden_t* monorail = new monorailboden_t(welt, route[i], hang);
 			plan->boden_hinzufuegen(monorail);
 			monorail->calc_bild();
 		}
@@ -1891,8 +1875,7 @@ wegbauer_t::baue_elevated()
 
 
 
-void
-wegbauer_t::baue_strasse()
+void wegbauer_t::baue_strasse()
 {
 	// construct city road?
 	const weg_besch_t *cityroad = get_besch("city_road");
@@ -1905,19 +1888,19 @@ wegbauer_t::baue_strasse()
 	// init undo
 	if(sp!=NULL) {
 		// intercity roads have no owner, so we must check for an owner
-		sp->init_undo(road_wt,max_n);
+		sp->init_undo(road_wt,get_count());
 	}
 
-	for(int i=0; i<=max_n; i++) {
+	for(  uint32 i=0;  i<get_count();  i++  ) {
 		if((i&3)==0) {
 			INT_CHECK( "wegbauer 1584" );
 		}
 
 		const koord k = route[i].get_2d();
 		grund_t* gr = welt->lookup(route[i]);
-		long cost = 0;
+		sint64 cost = 0;
 
-		bool extend = gr->weg_erweitern(road_wt, calc_ribi(i));
+		bool extend = gr->weg_erweitern(road_wt, route.get_short_ribi(i));
 
 		// bridges/tunnels have their own track type and must not upgrade
 		if(gr->get_typ()==grund_t::brueckenboden  ||  gr->get_typ()==grund_t::tunnelboden) {
@@ -1928,7 +1911,7 @@ wegbauer_t::baue_strasse()
 			weg_t * weg = gr->get_weg(road_wt);
 
 			// keep faster ways or if it is the same way ... (@author prissi)
-			if(weg->get_besch()==besch  ||  keep_existing_ways  ||  (keep_existing_city_roads  &&  weg->hat_gehweg())  ||  (keep_existing_faster_ways  &&  weg->get_besch()->get_topspeed()>besch->get_topspeed())  ||  (sp!=NULL  &&  !spieler_t::check_owner( sp, weg->get_besitzer()))) {
+			if(weg->get_besch()==besch  ||  keep_existing_ways  ||  (keep_existing_city_roads  &&  weg->hat_gehweg())  ||  (keep_existing_faster_ways  &&  weg->get_besch()->get_topspeed()>besch->get_topspeed())  ||  (sp!=NULL  &&  !spieler_t::check_owner( sp, weg->get_besitzer())) || (gr->get_typ()==grund_t::monorailboden && (bautyp&elevated_flag)==0)) {
 				//nothing to be done
 //DBG_MESSAGE("wegbauer_t::baue_strasse()","nothing to do at (%i,%i)",k.x,k.y);
 			}
@@ -1948,12 +1931,12 @@ wegbauer_t::baue_strasse()
 
 			str->set_besch(besch);
 			str->set_gehweg(add_sidewalk);
-			cost = -gr->neuen_weg_bauen(str, calc_ribi(i), sp)-besch->get_preis();
+			cost = -gr->neuen_weg_bauen(str, route.get_short_ribi(i), sp)-besch->get_preis();
 
 			// prissi: into UNDO-list, so wie can remove it later
 			if(sp!=NULL) {
 				// intercity raods have no owner, so we must check for an owner
-				sp->add_undo( position_bei(i));
+				sp->add_undo( route[i] );
 			}
 		}
 		gr->calc_bild();	// because it may be a crossing ...
@@ -1964,19 +1947,17 @@ wegbauer_t::baue_strasse()
 
 
 
-void
-wegbauer_t::baue_schiene()
+void wegbauer_t::baue_schiene()
 {
-	int i;
-	if(max_n >= 1) {
+	if(get_count() > 1) {
 		// init undo
-		sp->init_undo((waytype_t)besch->get_wtyp(),max_n);
+		sp->init_undo((waytype_t)besch->get_wtyp(),get_count());
 
 		// built tracks
-		for(i=0; i<=max_n; i++) {
-			int cost = 0;
+		for(  uint32 i=0;  i<get_count();  i++  ) {
+			sint64 cost = 0;
 			grund_t* gr = welt->lookup(route[i]);
-			ribi_t::ribi ribi = calc_ribi(i);
+			ribi_t::ribi ribi = route.get_short_ribi(i);
 
 			if(gr->get_typ()==grund_t::wasser) {
 				// not building on the sea ...
@@ -1986,7 +1967,7 @@ wegbauer_t::baue_schiene()
 			bool extend = gr->weg_erweitern((waytype_t)besch->get_wtyp(), ribi);
 
 			// bridges/tunnels have their own track type and must not upgrade
-			if((gr->get_typ()==grund_t::brueckenboden  ||  gr->get_typ()==grund_t::tunnelboden)  &&  gr->get_weg_nr(0)->get_waytype()==besch->get_wtyp()) {
+			if((gr->get_typ()==grund_t::brueckenboden ||  gr->get_typ()==grund_t::tunnelboden)  &&  gr->get_weg_nr(0)->get_waytype()==besch->get_wtyp()) {
 				continue;
 			}
 
@@ -1994,7 +1975,7 @@ wegbauer_t::baue_schiene()
 				weg_t * weg = gr->get_weg((waytype_t)besch->get_wtyp());
 
 				// keep faster ways or if it is the same way ... (@author prissi)
-				if(weg->get_besch()==besch  ||  (weg->get_besch()->get_styp()==7  &&  gr->get_weg_nr(0)!=weg)  ||  keep_existing_ways  ||  (keep_existing_faster_ways  &&  weg->get_besch()->get_topspeed()>besch->get_topspeed())  ) {
+				if(weg->get_besch()==besch  ||  (besch->get_styp()==0 && weg->get_besch()->get_styp()==7 && gr->get_weg_nr(0)!=weg) || keep_existing_ways  ||  (keep_existing_faster_ways  &&  weg->get_besch()->get_topspeed()>besch->get_topspeed()) || (gr->get_typ()==grund_t::monorailboden && (bautyp&elevated_flag)==0) ) {
 					//nothing to be done
 					cost = 0;
 				}
@@ -2015,8 +1996,9 @@ wegbauer_t::baue_schiene()
 					ribi = ribi_t::doppelt(ribi);
 				}
 				cost = -gr->neuen_weg_bauen(sch, ribi, sp)-besch->get_preis();
+
 				// prissi: into UNDO-list, so wie can remove it later
-				sp->add_undo( position_bei(i) );
+				sp->add_undo( route[i] );
 			}
 
 			gr->calc_bild();
@@ -2035,12 +2017,15 @@ wegbauer_t::baue_schiene()
 void
 wegbauer_t::baue_leitung()
 {
-	int i;
-	for(i=0; i<=max_n; i++) {
-		grund_t* gr = welt->lookup(route[i]);
+	if(  get_count() < 1  ) {
+		return;
+	}
+
+	// no undo
+	sp->init_undo(powerline_wt,get_count());
 
-		// no undo
-		sp->init_undo(road_wt,0);
+	for(  uint32 i=0;  i<get_count();  i++  ) {
+		grund_t* gr = welt->lookup(route[i]);
 
 		leitung_t* lt = gr->get_leitung();
 		// ok, really no lt here ...
@@ -2052,6 +2037,9 @@ wegbauer_t::baue_leitung()
 			lt = new leitung_t( welt, route[i], sp );
 			spieler_t::accounting(sp, -leitung_besch->get_preis(), gr->get_pos().get_2d(), COST_CONSTRUCTION);
 			gr->obj_add(lt);
+
+			// prissi: into UNDO-list, so wie can remove it later
+			sp->add_undo( route[i] );
 		}
 		else {
 			spieler_t::add_maintenance( lt->get_besitzer(),  -wegbauer_t::leitung_besch->get_wartung() );
@@ -2087,36 +2075,46 @@ wegbauer_t::baue_fluss()
 	 */
 
 	// Do we join an other river?
-	sint32 start_n = 0;
-	for(  sint32 idx=start_n;  idx<=max_n;  idx++  ) {
-		if(  welt->lookup(route[idx])->hat_weg(water_wt)  ) {
+	uint32 start_n = 0;
+	for(  uint32 idx=start_n;  idx<get_count();  idx++  ) {
+		if(  welt->lookup(route[idx])->hat_weg(water_wt)  ||  welt->lookup(route[idx])->get_hoehe()==welt->get_grundwasser() ) {
 			start_n = idx;
 		}
 	}
-	if(  start_n>= max_n  ) {
+	if(  start_n == get_count()-1  ) {
 		// completly joined another river => nothing to do
 		return;
 	}
 
-	// first lower riverbed
+	// first check then lower riverbed
 	const sint8 start_h = route[start_n].z;
-	for(  sint32 idx=start_n;  idx<=max_n;  idx++  ) {
-		koord3d pos = route[idx];
-		if(pos.z<=start_h){
-			// do not handle both joining and water ...
-			continue;
+	uint32 i = start_n;
+	while(i<get_count()) {
+		// first find all tiles that are on the same level as tile i
+		// and check whether we can lower all of them
+		bool ok = true;
+		uint32 j;
+		for(j=i; j<get_count() &&  ok; j++) {
+			// one step higher?
+			if (route[j].z > route[i].z) break;
+			// check
+			ok = welt->can_ebne_planquadrat(route[j].get_2d(), max(route[j].z-1, start_h));
 		}
-		if(  !welt->ebne_planquadrat( NULL, pos.get_2d(), pos.z-1 )  ) {
-			dbg->message( "wegbauer_t::baue_fluss()","lowering tile %s failed.", pos.get_str() );
+		// now lower all tiles that have the same height as tile i
+		if (ok) {
+			for(uint32 k=i; k<j; k++) {
+				welt->ebne_planquadrat(NULL, route[k].get_2d(), max(route[k].z-1, start_h));
+			}
 		}
+		i = ok ? j : j+1;
 	}
 
 	// now build the river
-	for(  sint32 i=start_n;  i<=max_n;  i++  ) {
+	for(  uint32 i=start_n;  i<get_count();  i++  ) {
 		grund_t* gr = welt->lookup_kartenboden(route[i].get_2d());
 		if(  gr->get_typ()!=grund_t::wasser  ) {
 			// get direction
-			ribi_t::ribi ribi = calc_ribi(i);
+			ribi_t::ribi ribi = route.get_short_ribi(i);
 			bool extend = gr->weg_erweitern(water_wt, ribi);
 			if(  !extend  ) {
 				weg_t *sch=weg_t::alloc(water_wt);
@@ -2135,8 +2133,8 @@ wegbauer_t::baue_fluss()
 		route_t to_the_sea;
 		fluss_fahrer_t ff;
 		if(  to_the_sea.find_route( welt, welt->lookup_kartenboden(route[start_n].get_2d())->get_pos(), (fahrer_t *)&ff, 0, ribi_t::alle, 0x7FFFFFFF )  ) {
-			for(  uint32 idx=0;  idx<to_the_sea.get_max_n();  idx++  ) {
-				weg_t* w = welt->lookup(to_the_sea.position_bei(idx))->get_weg(water_wt);
+			for(  uint32 idx=0;  idx<to_the_sea.get_count();  idx++  ) {
+				weg_t* w = welt->lookup(to_the_sea.get_route()[idx])->get_weg(water_wt);
 				if(w) {
 					int type;
 					for(  type=umgebung_t::river_types-1;  type>0;  type--  ) {
@@ -2162,12 +2160,12 @@ wegbauer_t::baue_fluss()
 void
 wegbauer_t::baue()
 {
-	if(max_n<0  ||  max_n>(sint32)maximum) {
+	if(get_count()<2  ||  get_count() > maximum) {
 DBG_MESSAGE("wegbauer_t::baue()","called, but no valid route.");
 		// no valid route here ...
 		return;
 	}
-	DBG_MESSAGE("wegbauer_t::baue()", "type=%d max_n=%d start=%d,%d end=%d,%d", bautyp, max_n, route[0].x, route[0].y, route[max_n].x, route[max_n].y);
+	DBG_MESSAGE("wegbauer_t::baue()", "type=%d max_n=%d start=%d,%d end=%d,%d", bautyp, get_count()-1, route[0].x, route[0].y, route[get_count()-1].x, route[get_count()-1].y);
 
 #ifdef DEBUG_ROUTES
 long ms=dr_time();
@@ -2218,3 +2216,31 @@ INT_CHECK("simbau 1072");
 DBG_MESSAGE("wegbauer_t::baue", "took %i ms",dr_time()-ms);
 #endif
 }
+
+/*
+ * This function calculates the distance of pos to the cuboid
+ * spanned up by mini and maxi.
+ * The result is already weighted according to
+ * welt->get_einstellungen()->get_way_count_{straight,slope}().
+ */
+uint32 wegbauer_t::calc_distance( const koord3d &pos, const koord3d &mini, const koord3d &maxi )
+{
+	uint32 dist = 0;
+	if( pos.x < mini.x ) {
+		dist += mini.x - pos.x;
+	} else if( pos.x > maxi.x ) {
+		dist += pos.x - maxi.x;
+	}
+	if( pos.y < mini.y ) {
+		dist += mini.y - pos.y;
+	} else if( pos.y > maxi.y ) {
+		dist += pos.y - maxi.y;
+	}
+	dist *= welt->get_einstellungen()->way_count_straight;
+	if( pos.z < mini.z ) {
+		dist += (mini.z - pos.z) * welt->get_einstellungen()->way_count_slope;
+	} else if( pos.z > maxi.z ) {
+		dist += (pos.z - maxi.z) * welt->get_einstellungen()->way_count_slope;
+	}
+	return dist;
+}
diff --git a/bauer/wegbauer.h b/bauer/wegbauer.h
index ca3508a..fcec30a 100644
--- a/bauer/wegbauer.h
+++ b/bauer/wegbauer.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997 - 2001 Hansjörg Malthaner
+ * Copyright (c) 1997 - 2001 Hj. Malthaner
  *
  * This file is part of the Simutrans project under the artistic licence.
  * (see licence.txt)
@@ -26,7 +26,7 @@ class werkzeug_parameter_waehler_t;
 
 
 /**
- * Diese Klasse übernimmt Wegsuche und Bau von Strassen, Schienen etc.
+ * way building class with its own route finding
  * @author Hj. Malthaner
  */
 class wegbauer_t
@@ -48,11 +48,13 @@ public:
 
 	static const weg_besch_t * get_besch(const char *way_name,const uint16 time=0);
 
+	static const weg_besch_t *get_earliest_way(const waytype_t wtyp);
+
 	/**
 	 * Fill menu with icons of given waytype
 	 * @author Hj. Malthaner
 	 */
-	static void fill_menu(werkzeug_waehler_t *wzw, const waytype_t wtyp, const weg_t::system_type styp, karte_t *welt );
+	static void fill_menu(werkzeug_waehler_t *wzw, const waytype_t wtyp, const weg_t::system_type styp, sint16 ok_sound, karte_t *welt );
 
 	enum bautyp_t {
 		strasse=road_wt,
@@ -123,12 +125,7 @@ private:
 	karte_t *welt;
 	uint32 maximum;    // hoechste Suchtiefe
 
-	vector_tpl<koord3d> route;
-
-	koord3d position_bei(unsigned i) const { return route[i]; }
-
-	// allowed owner?
-	bool check_owner( const spieler_t *sp1, const spieler_t *sp2 ) const;
+	koord3d_vector_t route;
 
 	// allowed slope?
 	bool check_slope( const grund_t *from, const grund_t *to );
@@ -143,16 +140,14 @@ private:
 
 	// checks, if we can built a bridge here ...
 	// may modify next_gr array!
-	void check_for_bridge(const grund_t* parent_from, const grund_t* from, koord3d ziel);
+	void check_for_bridge(const grund_t* parent_from, const grund_t* from, const vector_tpl<koord3d> &ziel);
 
-	long intern_calc_route(koord3d start, const koord3d ziel);
+	long intern_calc_route(const vector_tpl<koord3d> &start, const vector_tpl<koord3d> &ziel);
 	void intern_calc_straight_route(const koord3d start, const koord3d ziel);
 
 	// runways need to meet some special conditions enforced here
 	bool intern_calc_route_runways(koord3d start, const koord3d ziel);
 
-	ribi_t::ribi calc_ribi(int step);
-
 	void baue_tunnel_und_bruecken();
 
 	// adds the ground before underground construction (always called before the following construction routines)
@@ -166,10 +161,14 @@ private:
 	void baue_leitung();
 	void baue_fluss();
 
+	uint32 calc_distance( const koord3d &pos, const koord3d &mini, const koord3d &maxi );
+
 public:
-	koord3d get_route_bei(int i) const { return route[i]; }
+	const koord3d_vector_t &get_route() const { return route; }
+
+	uint32 get_count() const { return route.get_count(); }
 
-	sint32 n, max_n;
+	sint32 n;
 
 	/**
 	 * If a way is built on top of another way, should the type
@@ -195,16 +194,19 @@ public:
 
 	wegbauer_t(karte_t *welt, spieler_t *spl);
 
-	void calc_straight_route(koord3d start, const koord3d ziel);
-	void calc_route(koord3d start3d, koord3d ziel);
+	void calc_straight_route(const koord3d start, const koord3d ziel);
+	void calc_route(const koord3d &start3d, const koord3d &ziel);
+	void calc_route(const vector_tpl<koord3d> &start3d, const vector_tpl<koord3d> &ziel);
 
 	/* returns the amount needed to built this way
 	* author prissi
 	*/
-	long calc_costs();
+	sint64 calc_costs();
 
 	bool check_crossing(const koord zv, const grund_t *bd,waytype_t wtyp, const spieler_t *sp) const;
 	bool check_for_leitung(const koord zv, const grund_t *bd) const;
+	// allowed owner?
+	bool check_owner( const spieler_t *sp1, const spieler_t *sp2 ) const;
 
 	void baue();
 };
diff --git a/besch/bild_besch.cc b/besch/bild_besch.cc
index f75bbec..cf44dc0 100644
--- a/besch/bild_besch.cc
+++ b/besch/bild_besch.cc
@@ -12,8 +12,7 @@ typedef uint16 PIXVAL;
  * only rotates by 90 degrees or multiples thereof, and assumes a square image
  * Otherwise it will only succeed for angle=0;
 */
-bild_besch_t *
-bild_besch_t::copy_rotate(const sint16 angle) const
+bild_besch_t *bild_besch_t::copy_rotate(const sint16 angle) const
 {
 	assert(angle == 0 || (pic.w == pic.h && pic.x == 0 && pic.y == 0));
 
diff --git a/besch/bild_besch.h b/besch/bild_besch.h
index c52ad88..665f0db 100644
--- a/besch/bild_besch.h
+++ b/besch/bild_besch.h
@@ -32,22 +32,23 @@ struct bild_t {
  *  Kindknoten:
  *	(keine)
  */
-class bild_besch_t : public obj_besch_t {
-	public:
-		const bild_t* get_pic() const { return &pic; }
-		const void* get_daten() const { return pic.data; }
-		image_id get_nummer() const { return pic.bild_nr; }
-
-		/* rotate_image_data - produces a (rotated) bild_besch
-		 * only rotates by 90 degrees or multiples thereof, and assumes a square image
-		 * Otherwise it will only succeed for angle=0;
-		 */
-		bild_besch_t* copy_rotate(const sint16 angle) const;
-
-		using obj_besch_t::operator new;
-
-	private:
-		bild_t pic;
+class bild_besch_t : public obj_besch_t
+{
+public:
+	const bild_t* get_pic() const { return &pic; }
+	const void* get_daten() const { return pic.data; }
+	image_id get_nummer() const { return pic.bild_nr; }
+
+	/* rotate_image_data - produces a (rotated) bild_besch
+	 * only rotates by 90 degrees or multiples thereof, and assumes a square image
+	 * Otherwise it will only succeed for angle=0;
+	 */
+	bild_besch_t* copy_rotate(const sint16 angle) const;
+
+	using obj_besch_t::operator new;
+
+private:
+	bild_t pic;
 
 	friend class image_reader_t;
 	friend class grund_besch_t; // XXX ugly
diff --git a/besch/groundobj_besch.h b/besch/groundobj_besch.h
index e407083..ebaf893 100644
--- a/besch/groundobj_besch.h
+++ b/besch/groundobj_besch.h
@@ -29,11 +29,14 @@
 class groundobj_besch_t : public obj_besch_std_name_t {
 	friend class groundobj_writer_t;
 	friend class groundobj_reader_t;
+	friend class groundobj_t;
+	friend class movingobj_t;
 
-	climate_bits	allowed_climates;
+	climate_bits allowed_climates;
 	uint16 distribution_weight;
 	uint8  number_of_seasons;
 	uint32  speed;
+	uint16 index;
 	bool  trees_on_top;
 	waytype_t waytype;
 	sint32 cost_removal;
@@ -64,6 +67,8 @@ public:
 	waytype_t get_waytype() const { return waytype; }
 
 	sint32 get_preis() const { return cost_removal; }
+
+	uint16 get_index() const { return index; }
 };
 
 #endif
diff --git a/besch/grund_besch.cc b/besch/grund_besch.cc
index 6a67fcc..02e81b0 100644
--- a/besch/grund_besch.cc
+++ b/besch/grund_besch.cc
@@ -183,7 +183,8 @@ static bild_besch_t* create_textured_tile_mix(const bild_besch_t* bild_lightmap,
 					// ok, now we have to calculate the y coordinate ...
 					if(backborder_y<tile_y) {
 						tile_y_corrected = -((back_y-tile_y)*x)/(back_y - backborder_y);
-					} else {
+					}
+					else {
 						tile_y_corrected = -x;
 					}
 				}
@@ -204,7 +205,8 @@ static bild_besch_t* create_textured_tile_mix(const bild_besch_t* bild_lightmap,
 					// ok, now we have to calculate the y coordinate ...
 					if(frontborder_y>tile_y) {
 						tile_y_corrected = -((back_y-tile_y)*x)/(frontborder_y-back_y);
-					} else {
+					}
+					else {
 						tile_y_corrected = x;
 					}
 				}
@@ -579,6 +581,7 @@ DBG_MESSAGE("grund_besch_t::calc_water_level()","height %i: list %i vs. %i", h,
 		delete all_rotations_beach[slope];
 		delete all_rotations_slope[slope];
 	}
+	printf("done\n");
 }
 
 
diff --git a/besch/haus_besch.cc b/besch/haus_besch.cc
index 696868d..9811265 100644
--- a/besch/haus_besch.cc
+++ b/besch/haus_besch.cc
@@ -107,6 +107,9 @@ const haus_tile_besch_t *haus_besch_t::get_tile(int layout, int x, int y) const
  */
 int haus_besch_t::layout_anpassen(int layout) const
 {
+	if(layout >= 4 && layouts <= 4) {
+		layout -= 4;
+	}
 	if(layout >= 2 && layouts <= 2) {
 		// Sind Layout C und D nicht definiert, nehemen wir ersatzweise A und B
 		layout -= 2;
diff --git a/besch/reader/bridge_reader.cc b/besch/reader/bridge_reader.cc
index 8c106bf..4e425cb 100644
--- a/besch/reader/bridge_reader.cc
+++ b/besch/reader/bridge_reader.cc
@@ -138,7 +138,8 @@ obj_besch_t * bridge_reader_t::read_node(FILE *fp, obj_node_info_t &node)
 		besch->max_height = decode_uint8(p);
 		besch->number_seasons = decode_uint8(p);
 
-	} else {
+	}
+	else {
 		// old node, version 0
 
 		besch->wegtyp = (uint8)v;
diff --git a/besch/reader/building_reader.cc b/besch/reader/building_reader.cc
index 6973a08..b06e57a 100644
--- a/besch/reader/building_reader.cc
+++ b/besch/reader/building_reader.cc
@@ -73,7 +73,7 @@ void building_reader_t::register_obj(obj_besch_t *&data)
 
 	if (besch->utype == haus_besch_t::weitere && besch->enables == 0x80) {
 		// this stuff is just for compatibility
-		long checkpos=strlen(besch->get_name());
+		size_t checkpos = strlen(besch->get_name());
 		besch->enables = 0;
 		// before station buildings were identified by their name ...
 		if(  strcmp("BusStop",besch->get_name()+checkpos-7)==0  ) {
@@ -114,7 +114,7 @@ void building_reader_t::register_obj(obj_besch_t *&data)
 	}
 	// now old style depots ...
 	else if(besch->utype==haus_besch_t::weitere) {
-		long checkpos=strlen(besch->get_name());
+		size_t checkpos = strlen(besch->get_name());
 		if(  strcmp("AirDepot",besch->get_name()+checkpos-8)==0  ) {
 			besch->utype = haus_besch_t::depot;
 			besch->extra_data = (uint16)air_wt;
@@ -264,7 +264,8 @@ obj_besch_t * building_reader_t::read_node(FILE *fp, obj_node_info_t &node)
 		besch->intro_date    = DEFAULT_INTRO_DATE*12;
 		besch->obsolete_date = DEFAULT_RETIRE_DATE*12;
 		besch->animation_time = 300;
-	} else {
+	}
+	else {
 		// old node, version 0
 		besch->gtyp      = (enum gebaeude_t::typ)v;
 		decode_uint16(p);
diff --git a/besch/reader/citycar_reader.cc b/besch/reader/citycar_reader.cc
index b058431..b438fba 100644
--- a/besch/reader/citycar_reader.cc
+++ b/besch/reader/citycar_reader.cc
@@ -22,19 +22,20 @@ void citycar_reader_t::register_obj(obj_besch_t *&data)
 			besch->length[i] = 12+2;
 		} else if(i<6) {
 			besch->length[i] = 8+2;
-		} else {
+		}
+		else {
 			besch->length[i] = 16+2;
 		}
 	}
 
-    stadtauto_t::register_besch(besch);
+	stadtauto_t::register_besch(besch);
 //    printf("...Stadtauto %s geladen\n", besch->get_name());
 }
 
 
 bool citycar_reader_t::successfully_loaded() const
 {
-	return stadtauto_t::laden_erfolgreich();
+	return stadtauto_t::alles_geladen();
 }
 
 
@@ -42,44 +43,44 @@ obj_besch_t * citycar_reader_t::read_node(FILE *fp, obj_node_info_t &node)
 {
 	ALLOCA(char, besch_buf, node.size);
 
-  stadtauto_besch_t *besch = new stadtauto_besch_t();
+	stadtauto_besch_t *besch = new stadtauto_besch_t();
 	besch->node_info = new obj_besch_t*[node.children];
 
-  // Hajo: Read data
-  fread(besch_buf, node.size, 1, fp);
-
-  char * p = besch_buf;
-
-  // Hajo: old versions of PAK files have no version stamp.
-  // But we know, the higher most bit was always cleared.
-
-  const uint16 v = decode_uint16(p);
-  const int version = v & 0x8000 ? v & 0x7FFF : 0;
-
-  if(version == 2) {
-    // Versioned node, version 1
-
-    besch->gewichtung = decode_uint16(p);
-    besch->geschw = kmh_to_speed(decode_uint16(p)/16);
-    besch->intro_date = decode_uint16(p);
-    besch->obsolete_date = decode_uint16(p);
-  }
-  else if(version == 1) {
-    // Versioned node, version 1
-
-    besch->gewichtung = decode_uint16(p);
-    besch->geschw = kmh_to_speed(decode_uint16(p)/16);
-    uint16 intro_date = decode_uint16(p);
-    besch->intro_date = (intro_date/16)*12  + (intro_date%12);
-    uint16 obsolete_date = decode_uint16(p);
-    besch->obsolete_date= (obsolete_date/16)*12  + (obsolete_date%12);
-  }
-  else {
-    besch->gewichtung = v;
-    besch->geschw = kmh_to_speed(80);
-    besch->intro_date = DEFAULT_INTRO_DATE*12;
-    besch->obsolete_date = DEFAULT_RETIRE_DATE*12;
-  }
-  DBG_DEBUG("citycar_reader_t::read_node()","version=%i, weight=%i, intro=%i, retire=%i speed=%i",version,besch->gewichtung,besch->intro_date/12,besch->obsolete_date/12, speed_to_kmh(besch->geschw) );
-  return besch;
+	// Hajo: Read data
+	fread(besch_buf, node.size, 1, fp);
+
+	char * p = besch_buf;
+
+	// Hajo: old versions of PAK files have no version stamp.
+	// But we know, the higher most bit was always cleared.
+
+	const uint16 v = decode_uint16(p);
+	const int version = v & 0x8000 ? v & 0x7FFF : 0;
+
+	if(version == 2) {
+		// Versioned node, version 1
+
+		besch->gewichtung = decode_uint16(p);
+		besch->geschw = kmh_to_speed(decode_uint16(p)/16);
+		besch->intro_date = decode_uint16(p);
+		besch->obsolete_date = decode_uint16(p);
+	}
+	else if(version == 1) {
+		// Versioned node, version 1
+
+		besch->gewichtung = decode_uint16(p);
+		besch->geschw = kmh_to_speed(decode_uint16(p)/16);
+		uint16 intro_date = decode_uint16(p);
+		besch->intro_date = (intro_date/16)*12  + (intro_date%12);
+		uint16 obsolete_date = decode_uint16(p);
+		besch->obsolete_date= (obsolete_date/16)*12  + (obsolete_date%12);
+	}
+	else {
+		besch->gewichtung = v;
+		besch->geschw = kmh_to_speed(80);
+		besch->intro_date = DEFAULT_INTRO_DATE*12;
+		besch->obsolete_date = DEFAULT_RETIRE_DATE*12;
+	}
+	DBG_DEBUG("citycar_reader_t::read_node()","version=%i, weight=%i, intro=%i, retire=%i speed=%i",version,besch->gewichtung,besch->intro_date/12,besch->obsolete_date/12, speed_to_kmh(besch->geschw) );
+	return besch;
 }
diff --git a/besch/reader/factory_reader.cc b/besch/reader/factory_reader.cc
index 4064fe3..26c6a4c 100644
--- a/besch/reader/factory_reader.cc
+++ b/besch/reader/factory_reader.cc
@@ -107,7 +107,8 @@ factory_supplier_reader_t::read_node(FILE *fp, obj_node_info_t &node)
 		// Versioned node, version 1
 
 		// not there yet ...
-	} else {
+	}
+	else {
 		// old node, version 0
 		besch->kapazitaet = v;
 		besch->anzahl = decode_uint16(p);
@@ -142,7 +143,8 @@ factory_product_reader_t::read_node(FILE *fp, obj_node_info_t &node)
 		// Versioned node, version 1
 		besch->kapazitaet = decode_uint16(p);
 		besch->faktor = decode_uint16(p);
-	} else {
+	}
+	else {
 		// old node, version 0
 		decode_uint16(p);
 		besch->kapazitaet = v;
@@ -198,7 +200,8 @@ factory_reader_t::read_node(FILE *fp, obj_node_info_t &node)
 		besch->pax_level = decode_uint16(p);
 		besch->fields = 0;
 		DBG_DEBUG("factory_reader_t::read_node()","version=1, platz=%i, lieferanten=%i, pax=%i", besch->platzierung, besch->lieferanten, besch->pax_level);
-	} else {
+	}
+	else {
 		// old node, version 0, without pax_level
 		DBG_DEBUG("factory_reader_t::read_node()","version=0");
 		besch->platzierung = (enum fabrik_besch_t::platzierung)v;
diff --git a/besch/reader/good_reader.cc b/besch/reader/good_reader.cc
index d9a61fc..012e3db 100644
--- a/besch/reader/good_reader.cc
+++ b/besch/reader/good_reader.cc
@@ -71,7 +71,8 @@ obj_besch_t * good_reader_t::read_node(FILE *fp, obj_node_info_t &node)
 		besch->weight_per_unit = decode_uint16(p);
 		besch->color = decode_uint8(p);
 
-	} else {
+	}
+	else {
 		// old node, version 0
 		besch->base_value = v;
 		besch->catg = decode_uint16(p);
diff --git a/besch/reader/groundobj_reader.cc b/besch/reader/groundobj_reader.cc
index 36c573c..8f0f154 100644
--- a/besch/reader/groundobj_reader.cc
+++ b/besch/reader/groundobj_reader.cc
@@ -54,7 +54,8 @@ obj_besch_t * groundobj_reader_t::read_node(FILE *fp, obj_node_info_t &node)
 		besch->speed = kmh_to_speed( decode_uint16(p) );
 		besch->waytype = (waytype_t)decode_uint16(p);
 		besch->cost_removal = decode_sint32(p);
-	} else {
+	}
+	else {
 		// old node, version 0, never existed
 		dbg->fatal( "groundobj_reader_t::read_node()", "version %i not supported!", version );
 	}
diff --git a/besch/reader/image_reader.cc b/besch/reader/image_reader.cc
index 3524b27..3fc4112 100644
--- a/besch/reader/image_reader.cc
+++ b/besch/reader/image_reader.cc
@@ -141,7 +141,7 @@ obj_besch_t *image_reader_t::read_node(FILE *fp, obj_node_info_t &node)
 			delete besch;
 			besch = same;
 		}
-    }
+	}
 
 	return besch;
 }
diff --git a/besch/reader/obj_reader.cc b/besch/reader/obj_reader.cc
index f11b514..95611cc 100644
--- a/besch/reader/obj_reader.cc
+++ b/besch/reader/obj_reader.cc
@@ -2,12 +2,13 @@
 
 #ifndef _MSC_VER
 #include <unistd.h>
-#include <dirent.h>
 #else
 #include <sys/stat.h>
+#include <direct.h>
 #include <io.h>
 #endif
 
+
 // for the progress bar
 #include "../../simcolor.h"
 #include "../../simimg.h"
@@ -18,7 +19,13 @@
 #include "../grund_besch.h"	// for the error message!
 #include "../../simskin.h"
 
+// for init of button images
+#include "../../gui/components/gui_button.h"
+
 // normal stuff
+#include "../../dataobj/translator.h"
+#include "../../dataobj/umgebung.h"
+
 #include "../../utils/searchfolder.h"
 
 #include "../../tpl/inthashtable_tpl.h"
@@ -37,26 +44,76 @@ inthashtable_tpl<obj_type, stringhashtable_tpl<obj_besch_t *> > obj_reader_t::lo
 inthashtable_tpl<obj_type, stringhashtable_tpl< slist_tpl<obj_besch_t **> > > obj_reader_t::unresolved;
 ptrhashtable_tpl<obj_besch_t **, int> obj_reader_t::fatals;
 
-bool obj_reader_t::has_been_init = false;
-
 void obj_reader_t::register_reader()
 {
-    if(!obj_reader) {
+	if(!obj_reader) {
 		obj_reader =  new inthashtable_tpl<obj_type, obj_reader_t *>;
-    }
-    obj_reader->put(get_type(), this);
-    //printf("This program can read %s objects\n", get_type_name());
+	}
+	obj_reader->put(get_type(), this);
+	//printf("This program can read %s objects\n", get_type_name());
+}
+
+
+bool obj_reader_t::init(const char *message)
+{
+	// search for skins first
+	chdir( umgebung_t::program_dir );
+	load( "skin/", translator::translate("Loading skins ...") );
+	if(  umgebung_t::program_dir!=umgebung_t::user_dir  ) {
+		chdir( umgebung_t::user_dir );
+		load( "skin/", translator::translate("Loading skins ...") );
+	}
+	chdir( umgebung_t::program_dir );
+	button_t::init_button_images();
+	return true;
 }
 
 
-bool obj_reader_t::init(const char *liste)
+bool obj_reader_t::laden_abschliessen()
 {
-	DBG_MESSAGE("obj_reader_t::init()","reading from '%s'", liste);
-	bool drawing=is_display_init();
+	resolve_xrefs();
+
+	inthashtable_iterator_tpl<obj_type, obj_reader_t *> iter(obj_reader);
+
+	while(iter.next()) {
+DBG_MESSAGE("obj_reader_t::laden_abschliessen()","Checking %s objects...",iter.get_current_value()->get_type_name());
+
+		if(!iter.get_current_value()->successfully_loaded()) {
+			dbg->warning("obj_reader_t::laden_abschliessen()","... failed!");
+			return false;
+		}
+	}
+
+#if 0
+	// disposing would be a great idea to save additional 256kB main memory ...
+	if(skinverwaltung_t::biglogosymbol) {
+		// this will crash simutrasn at zomming, nightmode , ...
+		delete skinverwaltung_t::biglogosymbol->get_bild(0);
+		delete skinverwaltung_t::biglogosymbol->get_bild(1);
+		delete skinverwaltung_t::biglogosymbol->get_bild(2);
+		delete skinverwaltung_t::biglogosymbol->get_bild(3);
+	}
+#endif
+
+#if 0
+	// clean screen
+	if(drawing) {
+		display_fillbox_wh( 0, display_get_height()/2-20, display_get_width(), display_get_height()/2+20, COL_BLACK, true );
+	}
+#endif
+
+DBG_MESSAGE("obj_reader_t::init()", "done");
+	button_t::init_button_images();
+	return true;
+}
+
 
+bool obj_reader_t::load(const char *liste, const char *message)
+{
 	searchfolder_t find;
 	cstring_t name = find.complete(liste, "dat");
-	int i;
+	size_t i;
+	const bool drawing=is_display_init();
 
 	if(name.right(1) != "/") {
 		// very old style ... (I think unused by now)
@@ -89,6 +146,7 @@ bool obj_reader_t::init(const char *liste)
 				}
 			}
 			fclose(listfp);
+			return true;
 		}
 	}
 	else {
@@ -104,36 +162,42 @@ bool obj_reader_t::init(const char *liste)
 			teilung = 0;
 		}
 		teilung = (2<<teilung)-1;
+
 		if(drawing) {
+			display_set_progress_text(message);
+		}
+
+		if(drawing  &&  skinverwaltung_t::biglogosymbol==NULL) {
 			display_fillbox_wh( 0, 0, display_get_width(), display_get_height(), COL_BLACK, true );
-			display_set_progress_text("Loading paks ...");
 			read_file(name+"symbol.BigLogo.pak");
-DBG_MESSAGE("obj_reader_t::init()","big logo %p", skinverwaltung_t::biglogosymbol);
-			if(skinverwaltung_t::biglogosymbol) {
-				const int w = skinverwaltung_t::biglogosymbol->get_bild(0)->get_pic()->w;
-				const int h = skinverwaltung_t::biglogosymbol->get_bild(0)->get_pic()->h;
-				int x = display_get_width()/2-w;
-				int y = display_get_height()/4-w;
-				if(y<0) {
-					y = 1;
-				}
-				display_color_img(skinverwaltung_t::biglogosymbol->get_bild_nr(0), x, y, 0, false, true);
-				display_color_img(skinverwaltung_t::biglogosymbol->get_bild_nr(1), x+w, y, 0, false, true);
-				display_color_img(skinverwaltung_t::biglogosymbol->get_bild_nr(2), x, y+h, 0, false, true);
-				display_color_img(skinverwaltung_t::biglogosymbol->get_bild_nr(3), x+w, y+h, 0, false, true);
+DBG_MESSAGE("obj_reader_t::load()","big logo %p", skinverwaltung_t::biglogosymbol);
+		}
+		if(skinverwaltung_t::biglogosymbol) {
+			const int w = skinverwaltung_t::biglogosymbol->get_bild(0)->get_pic()->w;
+			const int h = skinverwaltung_t::biglogosymbol->get_bild(0)->get_pic()->h;
+			int x = display_get_width()/2-w;
+			int y = display_get_height()/4-w;
+			if(y<0) {
+				y = 1;
 			}
+			display_color_img(skinverwaltung_t::biglogosymbol->get_bild_nr(0), x, y, 0, false, true);
+			display_color_img(skinverwaltung_t::biglogosymbol->get_bild_nr(1), x+w, y, 0, false, true);
+			display_color_img(skinverwaltung_t::biglogosymbol->get_bild_nr(2), x, y+h, 0, false, true);
+			display_color_img(skinverwaltung_t::biglogosymbol->get_bild_nr(3), x+w, y+h, 0, false, true);
+#if 0
+			display_free_all_images_above( skinverwaltung_t::biglogosymbol->get_bild_nr(0) );
+#endif
 		}
 
-		// and free all slots again ...
-		display_free_all_images_above(0);
-
-		// defining the pak tile witdh ....
-		read_file(name+"ground.Outside.pak");
-		if(grund_besch_t::ausserhalb==NULL) {
-			dbg->error("obj_reader_t::init()","ground.Outside.pak not found, cannot guess tile size! (driving on left will not work!)");
+		if(  grund_besch_t::ausserhalb==NULL  ) {
+			// defining the pak tile witdh ....
+			read_file(name+"ground.Outside.pak");
+			if(grund_besch_t::ausserhalb==NULL) {
+				dbg->error("obj_reader_t::load()","ground.Outside.pak not found, cannot guess tile size! (driving on left will not work!)");
+			}
 		}
 
-DBG_MESSAGE("obj_reader_t::init()", "reading from '%s'", (const char*)name);
+DBG_MESSAGE("obj_reader_t::load()", "reading from '%s'", (const char*)name);
 		uint n = 0;
 		for (searchfolder_t::const_iterator i = find.begin(), end = find.end(); i != end; ++i, n++) {
 			read_file(*i);
@@ -141,27 +205,10 @@ DBG_MESSAGE("obj_reader_t::init()", "reading from '%s'", (const char*)name);
 				display_progress(n, max);
 			}
 		}
-	}
-	resolve_xrefs();
 
-	inthashtable_iterator_tpl<obj_type, obj_reader_t *> iter(obj_reader);
-
-	while(iter.next()) {
-DBG_MESSAGE("obj_reader_t::init()","Checking %s objects...",iter.get_current_value()->get_type_name());
-
-		if(!iter.get_current_value()->successfully_loaded()) {
-			dbg->warning("obj_reader_t::init()","... failed!");
-			return false;
-		}
+		return find.begin()!=find.end();
 	}
-
-	// clean screen
-	if(drawing) {
-		display_fillbox_wh( 0, display_get_height()/2-20, display_get_width(), display_get_height()/2+20, COL_BLACK, true );
-	}
-
-DBG_MESSAGE("obj_reader_t::init()", "done");
-	return true;
+	return false;
 }
 
 
@@ -173,7 +220,7 @@ void obj_reader_t::read_file(const char *name)
 	FILE *fp = fopen(name, "rb");
 
 	if(fp) {
-		int n = 0;
+		sint32 n = 0;
 
 		// This is the normal header reading code
 		int c;
@@ -346,9 +393,8 @@ void obj_reader_t::obj_for_xref(obj_type type, const char *name, obj_besch_t *da
 		loaded.put(type, stringhashtable_tpl<obj_besch_t *>());
 		objtype_loaded = loaded.access(type);
 	}
-	if(!objtype_loaded->get(name)) {
-		objtype_loaded->put(name, data);
-	}
+	objtype_loaded->remove(name);
+	objtype_loaded->put(name, data);
 }
 
 
diff --git a/besch/reader/obj_reader.h b/besch/reader/obj_reader.h
index 51a5b6d..3e3eb27 100644
--- a/besch/reader/obj_reader.h
+++ b/besch/reader/obj_reader.h
@@ -104,9 +104,9 @@ public:
 	virtual obj_type get_type() const = 0;
 	virtual const char *get_type_name() const = 0;
 
-	static bool init(const char *liste);
-
-	static bool has_been_init;
+	static bool init(const char *message);
+	static bool laden_abschliessen();
+	static bool load(const char *liste, const char *message);
 };
 
 #endif
diff --git a/besch/reader/pedestrian_reader.cc b/besch/reader/pedestrian_reader.cc
index e4007b0..a64816b 100644
--- a/besch/reader/pedestrian_reader.cc
+++ b/besch/reader/pedestrian_reader.cc
@@ -29,7 +29,7 @@ void pedestrian_reader_t::register_obj(obj_besch_t *&data)
 
 bool pedestrian_reader_t::successfully_loaded() const
 {
-	return fussgaenger_t::laden_erfolgreich();
+	return fussgaenger_t::alles_geladen();
 }
 
 
diff --git a/besch/reader/roadsign_reader.cc b/besch/reader/roadsign_reader.cc
index 6d6ed00..b4a0907 100644
--- a/besch/reader/roadsign_reader.cc
+++ b/besch/reader/roadsign_reader.cc
@@ -17,7 +17,6 @@ void roadsign_reader_t::register_obj(obj_besch_t *&data)
     roadsign_besch_t *besch = static_cast<roadsign_besch_t *>(data);
 
     roadsign_t::register_besch(besch);
-//    printf("...Stadtauto %s geladen\n", besch->get_name());
 }
 
 
diff --git a/besch/reader/sound_reader.cc b/besch/reader/sound_reader.cc
index b09bcd2..cbe94b2 100644
--- a/besch/reader/sound_reader.cc
+++ b/besch/reader/sound_reader.cc
@@ -34,6 +34,14 @@ obj_besch_t * sound_reader_t::read_node(FILE *fp, obj_node_info_t &node)
 		// Versioned node, version 2
 		besch->nr = decode_uint16(p);
 	}
+	else if(  version == 2  ) {
+		// Versioned node, version 2
+		besch->nr = decode_uint16(p);
+		uint16 len = decode_uint16(p);
+		if(  len>0  ) {
+			besch->nr = besch->get_sound_id(p);
+		}
+	}
 	else {
 		dbg->fatal("sound_reader_t::read_node()","version %i not supported. File corrupt?", version);
 	}
diff --git a/besch/reader/tunnel_reader.cc b/besch/reader/tunnel_reader.cc
index 1d09d64..bedd332 100644
--- a/besch/reader/tunnel_reader.cc
+++ b/besch/reader/tunnel_reader.cc
@@ -45,7 +45,7 @@ obj_besch_t * tunnel_reader_t::read_node(FILE *fp, obj_node_info_t &node)
 		const uint16 v = decode_uint16(p);
 		const int version = v & 0x8000 ? v & 0x7FFF : 0;
 
-		if(version == 2) {
+		if(version == 3) {
 	    	// versioned node, version 2 - snow image support
 			besch->topspeed = decode_uint32(p);
 			besch->preis = decode_uint32(p);
@@ -54,6 +54,18 @@ obj_besch_t * tunnel_reader_t::read_node(FILE *fp, obj_node_info_t &node)
 			besch->intro_date = decode_uint16(p);
 			besch->obsolete_date = decode_uint16(p);
 			besch->number_seasons = decode_uint8(p);
+			besch->has_way = decode_uint8(p);
+		}
+		else if(version == 2) {
+	    	// versioned node, version 2 - snow image support
+			besch->topspeed = decode_uint32(p);
+			besch->preis = decode_uint32(p);
+			besch->maintenance = decode_uint32(p);
+			besch->wegtyp = decode_uint8(p);
+			besch->intro_date = decode_uint16(p);
+			besch->obsolete_date = decode_uint16(p);
+			besch->number_seasons = decode_uint8(p);
+			besch->has_way = 0;
 		}
 		else if(version == 1) {
 	    	// first versioned node, version 1
@@ -64,6 +76,7 @@ obj_besch_t * tunnel_reader_t::read_node(FILE *fp, obj_node_info_t &node)
 			besch->intro_date = decode_uint16(p);
 			besch->obsolete_date = decode_uint16(p);
 			besch->number_seasons = 0;
+			besch->has_way = 0;
 
 		} else {
 			dbg->fatal("tunnel_reader_t::read_node()","illegal version %d",version);
diff --git a/besch/reader/way_reader.cc b/besch/reader/way_reader.cc
index 1fcf0bf..a8baa86 100644
--- a/besch/reader/way_reader.cc
+++ b/besch/reader/way_reader.cc
@@ -16,6 +16,7 @@ void way_reader_t::register_obj(obj_besch_t *&data)
 
     wegbauer_t::register_besch(besch);
 //    printf("...Weg %s geladen\n", besch->get_name());
+	obj_for_xref(get_type(), besch->get_name(), data);
 }
 
 
diff --git a/besch/reader/xref_reader.h b/besch/reader/xref_reader.h
index fb88528..d5a822a 100644
--- a/besch/reader/xref_reader.h
+++ b/besch/reader/xref_reader.h
@@ -1,16 +1,18 @@
 #include "obj_reader.h"
 
 class xref_reader_t : public obj_reader_t {
-    static xref_reader_t the_instance;
+	static xref_reader_t the_instance;
+
+	xref_reader_t() { register_reader(); }
 
-    xref_reader_t() { register_reader(); }
 protected:
-    virtual void register_obj(obj_besch_t *&data);
+	virtual void register_obj(obj_besch_t *&data);
+
 public:
-    static xref_reader_t*instance() { return &the_instance; }
+	static xref_reader_t*instance() { return &the_instance; }
 
-    virtual obj_type get_type() const { return obj_xref; }
-    virtual const char *get_type_name() const { return "reference"; }
+	virtual obj_type get_type() const { return obj_xref; }
+	virtual const char *get_type_name() const { return "reference"; }
 
-    virtual obj_besch_t *read_node(FILE *fp, obj_node_info_t &node);
+	virtual obj_besch_t *read_node(FILE *fp, obj_node_info_t &node);
 };
diff --git a/besch/sound_besch.cc b/besch/sound_besch.cc
index 2449f66..24d53aa 100644
--- a/besch/sound_besch.cc
+++ b/besch/sound_besch.cc
@@ -21,6 +21,7 @@
 
 #include "spezial_obj_tpl.h"
 #include "sound_besch.h"
+#include "grund_besch.h"
 
 /* sound of the program *
  * @author prissi
@@ -28,15 +29,11 @@
 
 class sound_ids {
 public:
-	char filename[120];
+	cstring_t filename;
 	sint16 id;
-	sound_ids() { id=NO_SOUND; filename[0]=0; }
-	sound_ids(sint16 i) { id=i;  filename[0]=0; }
-	sound_ids(sint16 i, const char* fn)
-	{
-		id = i;
-		tstrncpy(filename, fn, lengthof(filename));
-	}
+	sound_ids() { id=NO_SOUND; }
+	sound_ids(sint16 i) { id=i;  }
+	sound_ids(sint16 i, const char* fn) : filename(fn), id(i) {}
 };
 
 
@@ -52,10 +49,15 @@ sint16 sound_besch_t::compatible_sound_id[MAX_OLD_SOUNDS]=
 	NO_SOUND, NO_SOUND, NO_SOUND, NO_SOUND
 };
 
+// sound with the names of climates and "beach" and "forest" are reserved for ambient noises
+sint16 sound_besch_t::beach_sound;
+sint16 sound_besch_t::forest_sound;
+sint16 sound_besch_t::climate_sounds[MAX_CLIMATES];
+
+
 /* init sounds */
 /* standard sounds and old sounds are found in the file pak/sound/sound.tab */
-void
-sound_besch_t::init()
+void sound_besch_t::init()
 {
 	// ok, now init
 	sound_on = true;
@@ -75,9 +77,17 @@ DBG_MESSAGE("sound_besch_t::init()","successfully opened sound/sound.tab"  );
 			if(fn[0]>0) {
 DBG_MESSAGE("sound_besch_t::init()","reading sound %s", fn  );
 				compatible_sound_id[i] = get_sound_id( fn );
-DBG_MESSAGE("sound_besch_t::init()","assigned system sound %d to sound %s (id=%i)", i, fn, compatible_sound_id[i] );
+DBG_MESSAGE("sound_besch_t::init()","assigned system sound %d to sound %s (id=%i)", i, (const char *)fn, compatible_sound_id[i] );
 			}
 		}
+		// now assign special sounds for climates, beaches and forest
+		beach_sound = get_sound_id( "beaches.wav" );
+		forest_sound = get_sound_id( "forest.wav" );
+		for(  int i=0;  i<MAX_CLIMATES;  i++  ) {
+			char name[64];
+			sprintf( name, "%s.wav", grund_besch_t::get_climate_name_from_bit((climate)i) );
+			climate_sounds[i] = get_sound_id( name );
+		}
 	}
 }
 
@@ -85,8 +95,7 @@ DBG_MESSAGE("sound_besch_t::init()","assigned system sound %d to sound %s (id=%i
 
 
 /* return sound id from index */
-sint16
-sound_besch_t::get_sound_id(const char *name)
+sint16 sound_besch_t::get_sound_id(const char *name)
 {
 	if(!sound_on) {
 		return NO_SOUND;
@@ -98,13 +107,13 @@ sound_besch_t::get_sound_id(const char *name)
 		if(id!=NO_SOUND) {
 			s = new sound_ids(id,name);
 			name_sound.put(s->filename, s );
-DBG_MESSAGE("sound_besch_t::get_sound_id()","successfully loaded sound %s internal id %i", s->filename, s->id );
+DBG_MESSAGE("sound_besch_t::get_sound_id()","successfully loaded sound %s internal id %i", (const char *)s->filename, s->id );
 			return s->id;
 		}
 		dbg->warning("sound_besch_t::get_sound_id()","sound \"%s\" not found", name );
 		return NO_SOUND;
 	}
-DBG_MESSAGE("sound_besch_t::get_sound_id()","successfully retrieved sound %s internal id %i", s->filename, s->id );
+DBG_MESSAGE("sound_besch_t::get_sound_id()","successfully retrieved sound %s internal id %i", (const char *)s->filename, s->id );
 	return s->id;
 }
 
@@ -126,9 +135,9 @@ sound_besch_t::register_besch(sound_besch_t *besch)
 		if(besch->nr>=0  &&  besch->nr<=8) {
 			compatible_sound_id[besch->nr] = besch->sound_id;
 DBG_MESSAGE("sound_besch_t::get_sound_id()","successfully registered sound %s internal id %i as compatible sound %i", besch->get_name(), besch->sound_id, besch->nr );
+			delete besch;
+			return true;
 		}
-		delete besch;
-		return true;
 	}
 	dbg->warning("sound_besch_t::get_sound_id()","failed to register sound %s internal id %i", besch->get_name() );
 	delete besch;
@@ -141,3 +150,5 @@ bool sound_besch_t::alles_geladen()
 	DBG_MESSAGE("sound_besch_t::alles_geladen()","sounds");
 	return true;	// no mandatory objects here
 }
+
+
diff --git a/besch/sound_besch.h b/besch/sound_besch.h
index 0ee82b7..82b9ae7 100644
--- a/besch/sound_besch.h
+++ b/besch/sound_besch.h
@@ -13,6 +13,8 @@
 #define NO_SOUND (sint16)(0xFFFFu)
 #define LOAD_SOUND (sint8)(0xFFFEu)
 
+#define AMBIENT_SOUND_INTERVALL (13000)
+
 /*
  *  Autor:
  *      prissi
@@ -50,6 +52,11 @@ private:
 	sint16 nr;	// for old sounds/system sounds etc.
 
 public:
+	// sounds for ambient
+	static sint16 beach_sound;
+	static sint16 forest_sound;
+	static sint16 climate_sounds[MAX_CLIMATES];
+
 	static sint16 get_sound_id(const char *name);
 
 	static bool register_besch(sound_besch_t *besch);
diff --git a/besch/tunnel_besch.h b/besch/tunnel_besch.h
index 3f2458f..a1c07f9 100644
--- a/besch/tunnel_besch.h
+++ b/besch/tunnel_besch.h
@@ -21,7 +21,7 @@
 #include "obj_besch_std_name.h"
 #include "skin_besch.h"
 #include "bildliste2d_besch.h"
-
+#include "weg_besch.h"
 
 class tunnel_besch_t : public obj_besch_std_name_t {
 	friend class tunnel_writer_t;
@@ -43,6 +43,10 @@ private:
 	/* number of seasons (0 = none, 1 = no snow/snow
 	*/
 	sint8 number_seasons;
+
+	/* has underground way image ? ( 0 = no, 1 = yes
+	*/
+	uint8 has_way;
 public:
 	const bild_besch_t *get_hintergrund(hang_t::typ hang, uint8 season) const
 	{
@@ -95,6 +99,14 @@ public:
 	uint16 get_intro_year_month() const { return intro_date; }
 
 	uint16 get_retire_year_month() const { return obsolete_date; }
+
+	const weg_besch_t *get_weg_besch() const
+	{
+		if(has_way) {
+			return static_cast<const weg_besch_t *>(get_child(5 + number_seasons * 2));
+		}
+		return NULL;
+	}
 };
 
 #endif
diff --git a/besch/vehikel_besch.h b/besch/vehikel_besch.h
index 15f8946..d9198cc 100644
--- a/besch/vehikel_besch.h
+++ b/besch/vehikel_besch.h
@@ -183,11 +183,26 @@ public:
 		return static_cast<const vehikel_besch_t *>(get_child(6 + i));
 	}
 
+	/* returns true, if this veh can be before the next_veh */
+	bool can_lead(const vehikel_besch_t *next_veh) const
+	{
+		if(  nachfolger==0  ) {
+			return next_veh != 0;
+		}
+		for( int i=0;  i<nachfolger;  i++  ) {
+			const vehikel_besch_t *veh = (vehikel_besch_t *)get_child(6 + vorgaenger + i);
+			if(veh==next_veh) {
+				return true;
+			}
+		}
+		// only here if not allowed
+		return false;
+	}
 	/* returns true, if this veh can be after the prev_veh */
 	bool can_follow(const vehikel_besch_t *prev_veh) const
 	{
 		if(  vorgaenger==0  ) {
-			return prev_veh == 0;
+			return prev_veh != 0;
 		}
 		for( int i=0;  i<vorgaenger;  i++  ) {
 			const vehikel_besch_t *veh = (vehikel_besch_t *)get_child(6 + i);
diff --git a/besch/weg_besch.h b/besch/weg_besch.h
index a0060d7..1708b91 100644
--- a/besch/weg_besch.h
+++ b/besch/weg_besch.h
@@ -33,7 +33,7 @@ class weg_besch_t : public obj_besch_std_name_t {
     friend class way_reader_t;
 
 public:
-		enum { elevated=1, joined=7 /* only tram */, special=255 };
+	enum { elevated=1, joined=7 /* only tram */, special=255 };
 
 private:
 	/**
@@ -122,16 +122,32 @@ public:
 		return static_cast<const bildliste_besch_t *>(get_child(2))->get_bild_nr(ribi);
 	}
 
+	image_id get_bild_nr_switch(ribi_t::ribi ribi, uint8 season, bool nw) const
+	{
+		uint8 listen_nr = (season && number_seasons == 1) ? 6 : 2;
+		const bildliste_besch_t *bl = static_cast<const bildliste_besch_t *>(get_child(listen_nr));
+		// only do this if extended switches are there
+		if(  bl->get_anzahl()>16  ) {
+			static uint8 ribi_to_extra[16] = {
+				255, 255, 255, 255, 255, 255, 255, 0,
+				255, 255, 255, 1, 255, 2, 3, 4
+			};
+			return bl->get_bild_nr( ribi_to_extra[ribi]+16+(nw*5) );
+		}
+		// else return standard values
+		return bl->get_bild_nr( ribi );
+	}
+
 	image_id get_hang_bild_nr(hang_t::typ hang, uint8 season) const
 	{
 #ifndef DOUBLE_GROUNDS
-	if(!hang_t::ist_einfach(hang)) {
-		return IMG_LEER;
-	}
-	if(season && number_seasons == 1) {
-		return static_cast<const bildliste_besch_t *>(get_child(7))->get_bild_nr(hang / 3 - 1);
-	}
-	return static_cast<const bildliste_besch_t *>(get_child(3))->get_bild_nr(hang / 3 - 1);
+		if(!hang_t::ist_einfach(hang)) {
+			return IMG_LEER;
+		}
+		if(season && number_seasons == 1) {
+			return static_cast<const bildliste_besch_t *>(get_child(7))->get_bild_nr(hang / 3 - 1);
+		}
+		return static_cast<const bildliste_besch_t *>(get_child(3))->get_bild_nr(hang / 3 - 1);
 #else
 		int nr;
 		switch(hang) {
@@ -169,6 +185,10 @@ public:
 		return static_cast<const bildliste_besch_t *>(get_child(4))->get_bild_nr(0)!=IMG_LEER;
 	}
 
+	bool has_switch_bild() const {
+		return static_cast<const bildliste_besch_t *>(get_child(2))->get_anzahl()>16;
+	}
+
 	/**
 	* @return introduction year
 	* @author Hj. Malthaner
diff --git a/besch/writer/root_writer.cc b/besch/writer/root_writer.cc
index 656fc0c..e154585 100644
--- a/besch/writer/root_writer.cc
+++ b/besch/writer/root_writer.cc
@@ -5,6 +5,7 @@
 #include "obj_node.h"
 #include "obj_writer.h"
 #include "root_writer.h"
+#include <stdlib.h>
 
 
 cstring_t root_writer_t::inpath;
diff --git a/besch/writer/sound_writer.cc b/besch/writer/sound_writer.cc
index f6e23f7..a05ddf8 100644
--- a/besch/writer/sound_writer.cc
+++ b/besch/writer/sound_writer.cc
@@ -7,18 +7,29 @@
 
 void sound_writer_t::write_obj(FILE* fp, obj_node_t& parent, tabfileobj_t& obj)
 {
-	obj_node_t	node(this, 4, &parent);
+	// eventuall direct name input
+	cstring_t str = obj.get("sound_name");
+	uint16 len = str.len();
+
+	obj_node_t	node(this, 6+len+1, &parent);
 
 	write_head(fp, node, obj);
 
 	// Hajo: version number
 	// Hajo: Version needs high bit set as trigger -> this is required
 	//       as marker because formerly nodes were unversionend
-	uint16 uv16 = 0x8001;
+	uint16 uv16 = 0x8002;
 	node.write_uint16(fp, uv16, 0);
 
 	uv16 = obj.get_int("sound_nr", NO_SOUND);	// for compatibility reasons; the old nr of a sound
 	node.write_uint16(fp, uv16, 2);
 
+	node.write_uint16(fp, len, 4);
+	if(  len > 0  ) {
+		node.write_data_at(fp, (const char *)str, 6, len );
+	}
+	node.write_data_at(fp, (const char *)"", 6+len, 1 );
+
+
 	node.write(fp);
 }
diff --git a/besch/writer/tunnel_writer.cc b/besch/writer/tunnel_writer.cc
index 5a0f505..cb8d820 100644
--- a/besch/writer/tunnel_writer.cc
+++ b/besch/writer/tunnel_writer.cc
@@ -4,6 +4,7 @@
 #include "../tunnel_besch.h"
 #include "obj_node.h"
 #include "text_writer.h"
+#include "xref_writer.h"
 #include "imagelist_writer.h"
 #include "skin_writer.h"
 #include "get_waytype.h"
@@ -14,7 +15,7 @@ void tunnel_writer_t::write_obj(FILE* fp, obj_node_t& parent, tabfileobj_t& obj)
 {
 	int pos, i;
 
-	obj_node_t node(this, 20, &parent);
+	obj_node_t node(this, 21, &parent);
 
 	uint32 topspeed    = obj.get_int("topspeed",     999);
 	uint32 preis       = obj.get_int("cost",           0);
@@ -30,7 +31,7 @@ void tunnel_writer_t::write_obj(FILE* fp, obj_node_t& parent, tabfileobj_t& obj)
 
 	// Version uses always high bit set as trigger
 	// version 2: snow images
-	uint16 version = 0x8002;
+	uint16 version = 0x8003;
 	node.write_uint16(fp, version,        0);
 	node.write_uint32(fp, topspeed,       2);
 	node.write_uint32(fp, preis,          6);
@@ -99,6 +100,16 @@ void tunnel_writer_t::write_obj(FILE* fp, obj_node_t& parent, tabfileobj_t& obj)
 			}
 		}
 	}
+
+	str = obj.get("way");
+	if (str.len() > 0) {
+		xref_writer_t::instance()->write_obj(fp, node, obj_way, str, true);
+		node.write_sint8(fp, 1, 20);
+	}
+	else {
+		node.write_sint8(fp, 0, 20);
+	}
+
 	cursorkeys.clear();
 
 	node.write(fp);
diff --git a/besch/writer/way_writer.cc b/besch/writer/way_writer.cc
index fc48ca9..ebca0f1 100644
--- a/besch/writer/way_writer.cc
+++ b/besch/writer/way_writer.cc
@@ -15,9 +15,11 @@
  */
 void way_writer_t::write_obj(FILE* outfp, obj_node_t& parent, tabfileobj_t& obj)
 {
-	static const char* const ribi_codes[16] = {
+	static const char* const ribi_codes[26] = {
 		"-", "n",  "e",  "ne",  "s",  "ns",  "se",  "nse",
-		"w", "nw", "ew", "new", "sw", "nsw", "sew", "nsew"
+		"w", "nw", "ew", "new", "sw", "nsw", "sew", "nsew",
+		"nse1", "new1", "nsw1", "sew1", "nsew1",	// different crossings: northwest/southeast is straight
+		"nse2", "new2", "nsw2", "sew2", "nsew2",
 	};
 	int ribi, hang;
 
@@ -75,7 +77,8 @@ void way_writer_t::write_obj(FILE* outfp, obj_node_t& parent, tabfileobj_t& obj)
 		cstring_t str = obj.get(buf);
 		if(strlen(str) > 0) {
 			// way images defined without seasons
-			for (ribi = 0; ribi < 16; ribi++) {
+			const uint8 ribinr = *(obj.get("image[new2][0]"))==0 ? 16 : 26;
+			for (ribi = 0; ribi < ribinr; ribi++) {
 				char buf[40];
 
 				sprintf(buf, "image[%s]", ribi_codes[ribi]);
@@ -122,7 +125,7 @@ void way_writer_t::write_obj(FILE* outfp, obj_node_t& parent, tabfileobj_t& obj)
 		while(number_seasons < 2) {
 			sprintf(buf, "image[%s][%d]", ribi_codes[0], number_seasons+1);
 			cstring_t str = obj.get(buf);
-			if(strlen(str) > 0) {
+			if(str.len() > 0) {
 				number_seasons++;
 			} else {
 				break;
@@ -131,8 +134,11 @@ void way_writer_t::write_obj(FILE* outfp, obj_node_t& parent, tabfileobj_t& obj)
 		node.write_data_at(outfp, &number_seasons, 25, 1);
 		write_head(outfp, node, obj);
 
+		// has switch images for both directions?
+		const uint8 ribinr = *(obj.get("image[new2][0]"))==0 ? 16 : 26;
+
 		for (uint8 season = 0; season <= number_seasons ; season++) {
-			for (ribi = 0; ribi < 16; ribi++) {
+			for (ribi = 0; ribi < ribinr; ribi++) {
 				char buf[40];
 
 				sprintf(buf, "image[%s][%d]", ribi_codes[ribi], season);
diff --git a/boden/boden.cc b/boden/boden.cc
index 6c9538b..65a2d04 100644
--- a/boden/boden.cc
+++ b/boden/boden.cc
@@ -42,7 +42,8 @@ const char *boden_t::get_name() const
 		return "Kreuzung";
 	} else if(hat_wege()) {
 		return get_weg_nr(0)->get_name();
-	} else {
+	}
+	else {
 		return "Boden";
 	}
 }
@@ -50,55 +51,30 @@ const char *boden_t::get_name() const
 
 void boden_t::calc_bild_internal()
 {
-	if(ist_im_tunnel()) {
-		clear_back_bild();
-		set_bild(IMG_LEER);
-	}
-#ifdef COVER_TILES
-	else 	if(get_flag(grund_t::is_cover_tile)) {
-		grund_t::calc_back_bild(get_hoehe()/Z_TILE_STEP,0);
-
-		// this covers some other ground. MUST be flat!
-		strasse_t *weg = static_cast<strasse_t *>(get_weg(road_wt));
-		if(weg && weg->hat_gehweg()) {
-			set_bild(skinverwaltung_t::fussweg->get_bild_nr(0));
-		}
-		else {
-			set_bild( grund_besch_t::get_ground_tile(0, get_hoehe() ) );
-		}
-DBG_MESSAGE("boden_t::calc_bild()","at pos %i,%i,%i", get_pos().x,get_pos().y,get_pos().z );
-		set_flag(grund_t::draw_as_ding);
-
-		if(welt->lookup(get_pos().get_2d())->get_kartenboden()!=this) {
-dbg->fatal("boden_t::calc_bild()","covered tile not ground?!?");
-		}
-	}
-#endif
-	else {
-		uint8 slope_this =  get_grund_hang();
+		uint8 slope_this =  get_disp_slope();
 		weg_t *weg = get_weg(road_wt);
 
 #ifndef DOUBLE_GROUNDS
-		if(weg  &&  weg->hat_gehweg()) {
-			set_bild(skinverwaltung_t::fussweg->get_bild_nr(slope_this));
-		} else {
-			set_bild( grund_besch_t::get_ground_tile(slope_this,get_pos().z) );
+
+		if (is_visible()) {
+			if(weg  &&  weg->hat_gehweg()) {
+				set_bild(skinverwaltung_t::fussweg->get_bild_nr(slope_this));
+			}
+			else {
+				set_bild(grund_besch_t::get_ground_tile(slope_this,get_disp_height()) );
+			}
+		}
+		else
+		{
+			set_bild(IMG_LEER);
 		}
 #else
 		if(weg && dynamic_cast<strasse_t *>(weg)->hat_gehweg()) {
 			set_bild(skinverwaltung_t::fussweg->get_bild_nr(grund_besch_t::slopetable[slope_this]));
-		} else {
-			set_bild( grund_besch_t::get_ground_tile(slope_this,get_hoehe() ) );
 		}
-#endif
-		grund_t::calc_back_bild(get_hoehe()/Z_TILE_STEP,slope_this);
-
-#ifdef COVER_TILES
-		if(welt->lookup(get_pos().get_2d())->get_kartenboden()!=this) {
-DBG_MESSAGE("boden_t::calc_bild()","covered at pos %i,%i,%i", get_pos().x,get_pos().y,get_pos().z );
-			clear_flag(grund_t::draw_as_ding);
-			set_flag(grund_t::is_cover_tile);
+		else {
+			set_bild( grund_besch_t::get_ground_tile(slope_this,get_hoehe() ) );
 		}
 #endif
-	}
+		grund_t::calc_back_bild(get_disp_height()/Z_TILE_STEP,slope_this);
 }
diff --git a/boden/brueckenboden.cc b/boden/brueckenboden.cc
index 00f4b06..2bdf39f 100644
--- a/boden/brueckenboden.cc
+++ b/boden/brueckenboden.cc
@@ -17,6 +17,7 @@
 #include "../tpl/ptrhashtable_tpl.h"
 
 #include "brueckenboden.h"
+#include "wege/weg.h"
 
 
 brueckenboden_t::brueckenboden_t(karte_t *welt, koord3d pos, int grund_hang, int weg_hang) : grund_t(welt, pos)
@@ -28,8 +29,13 @@ brueckenboden_t::brueckenboden_t(karte_t *welt, koord3d pos, int grund_hang, int
 
 void brueckenboden_t::calc_bild_internal()
 {
-	if(ist_tunnel()) {
-		clear_back_bild();
+	if(!is_visible()) {
+		if (ist_karten_boden()) {
+			grund_t::calc_back_bild(get_disp_height()/Z_TILE_STEP, 0);
+		}
+		else {
+			clear_back_bild();
+		}
 		set_bild(IMG_LEER);
 	}
 	else {
@@ -67,21 +73,23 @@ brueckenboden_t::rdwr(loadsave_t *file)
 	file->rdwr_byte(weg_hang, "\n");
 
 	if(!find<bruecke_t>()) {
-		dbg->error( "brueckenboden_t::rdwr()","no bridge on bridgebround at (%s); try repalcement", pos.get_str()  );
+		dbg->error( "brueckenboden_t::rdwr()","no bridge on bridge ground at (%s); try replacement", pos.get_str() );
 		weg_t *w = get_weg_nr(0);
-		const bruecke_besch_t *br_besch = brueckenbauer_t::find_bridge( w->get_waytype(), w->get_max_speed(), 0 );
-		bruecke_t *br = new bruecke_t(
-			welt,
-			get_pos(),
-			welt->get_spieler(1),
-			br_besch,
-			ist_karten_boden() ?
-				(slope==hang_t::flach ?
-					br_besch->get_rampe(ribi_typ(get_weg_hang())) :
-					br_besch->get_start(ribi_typ(get_grund_hang()))) :
-				br_besch->get_simple(w->get_ribi_unmasked())
-		);
-		obj_add( br );
+		if(w) {
+			const bruecke_besch_t *br_besch = brueckenbauer_t::find_bridge( w->get_waytype(), w->get_max_speed(), 0 );
+			bruecke_t *br = new bruecke_t(
+				welt,
+				get_pos(),
+				welt->get_spieler(1),
+				br_besch,
+				ist_karten_boden() ?
+					(slope==hang_t::flach ?
+						br_besch->get_rampe(ribi_typ(get_weg_hang())) :
+						br_besch->get_start(ribi_typ(get_grund_hang()))) :
+					br_besch->get_simple(w->get_ribi_unmasked())
+			);
+			obj_add( br );
+		}
 	}
 }
 
diff --git a/boden/fundament.cc b/boden/fundament.cc
index 084dc80..0b73153 100644
--- a/boden/fundament.cc
+++ b/boden/fundament.cc
@@ -54,12 +54,11 @@ void
 fundament_t::calc_bild_internal()
 {
 	slope = 0;
-	if(ist_im_tunnel()) {
-		clear_back_bild();
-		set_bild(IMG_LEER);
+	if (is_visible()) {
+		set_bild( grund_besch_t::get_ground_tile(0,get_pos().z) );
 	}
 	else {
-		set_bild( grund_besch_t::get_ground_tile(0,get_pos().z) );
-		grund_t::calc_back_bild(get_pos().z/Z_TILE_STEP,0);
+		set_bild(IMG_LEER);
 	}
+	grund_t::calc_back_bild(get_disp_height()/Z_TILE_STEP,0);
 }
diff --git a/boden/grund.cc b/boden/grund.cc
index 5f9d269..684b6d2 100644
--- a/boden/grund.cc
+++ b/boden/grund.cc
@@ -1,7 +1,6 @@
 /*
- * Untergrund Basisklasse für Simutrans.
- * Überarbeitet Januar 2001
- * von Hj. Malthaner
+ * Base class for grounds in simutrans.
+ * by Hj. Malthaner
  */
 
 #include <string.h>
@@ -90,17 +89,34 @@ static inline uint32 get_ground_text_key(const koord3d& k)
  */
 karte_t * grund_t::welt = NULL;
 bool grund_t::show_grid = false;
-bool grund_t::underground_mode = false;
 
 uint8 grund_t::offsets[4]={0,1,2/*illegal!*/,2};
 
+sint8 grund_t::underground_level = 127;
+uint8 grund_t::underground_mode = ugm_none;
 
+void grund_t::set_underground_mode(const uint8 ugm, const sint8 level)
+{
+	underground_mode = ugm;
+	switch(ugm) {
+		case ugm_all:
+			underground_level = -128;
+			break;
+		case ugm_level:
+			underground_level = level;
+			break;
+		case ugm_none:
+		default:
+			underground_mode = ugm_none;
+			underground_level = 127;
+	}
+}
 
 void grund_t::set_text(const char *text)
 {
 	const uint32 n = get_ground_text_key(pos);
 	if(text) {
-		char* new_text = strdup(text);
+		char *new_text = strdup(text);
 		free(ground_texts.remove(n));
 		ground_texts.put(n, new_text);
 		set_flag(has_text);
@@ -117,9 +133,9 @@ void grund_t::set_text(const char *text)
 
 
 
-const char* grund_t::get_text() const
+const char *grund_t::get_text() const
 {
-	const char * result = 0;
+	const char *result = 0;
 	if(flags&has_text) {
 		result = ground_texts.get( get_ground_text_key(pos) );
 		if(result==NULL) {
@@ -148,9 +164,13 @@ void grund_t::rdwr(loadsave_t *file)
 		pos.rdwr(file);
 	}
 	else {
-		sint8 z = pos.z;
+		// water saves its correct height => no need to save grid heights anymore
+		sint8 z = (file->is_saving()  &&  ist_wasser()) ? welt->lookup_hgt(pos.get_2d()) : pos.z;
 		file->rdwr_byte( z, "" );
-		pos.z = z;
+		if(  file->is_loading()  ) {
+			welt->set_grid_hgt( pos.get_2d()+koord(1,1), z );
+		}
+		pos.z = get_typ()==grund_t::wasser ? welt->get_grundwasser() : z;
 	}
 
 	if(file->is_saving()) {
@@ -268,7 +288,7 @@ void grund_t::rdwr(loadsave_t *file)
 				}
 
 				if(weg) {
-					if(this->get_typ()==fundament) {
+					if(get_typ()==fundament) {
 						// remove this (but we can not correct the other wasy, since possibly not yet loaded)
 						dbg->error("grund_t::rdwr()","removing way from foundation at %i,%i",pos.x,pos.y);
 						// we do not delete them, to keep maitenance costs correct
@@ -557,8 +577,13 @@ static inline uint8 get_backbild_from_diff(sint8 h1, sint8 h2)
 // artifical walls from here on ...
 void grund_t::calc_back_bild(const sint8 hgt,const sint8 slope_this)
 {
+	if (underground_mode == ugm_all) {
+		this->back_bild_nr = 0;
+		return;
+	}
 	sint8 back_bild_nr=0;
 	sint8 is_building=0;
+	bool isvisible = is_visible();
 	bool fence_west=false, fence_north=false;
 	const koord k = get_pos().get_2d();
 
@@ -572,8 +597,8 @@ void grund_t::calc_back_bild(const sint8 hgt,const sint8 slope_this)
 	if(k.x>0  &&  k.y>0) {
 		const grund_t *gr=welt->lookup(k+koord(-1,-1))->get_kartenboden();
 		if(gr) {
-			const sint16 left_hgt=gr->get_hoehe()/Z_TILE_STEP;
-			const sint8 slope=gr->get_grund_hang();
+			const sint16 left_hgt=gr->get_disp_height()/Z_TILE_STEP;
+			const sint8 slope=gr->get_disp_slope();
 
 			const sint8 diff_from_ground = left_hgt+corner2(slope)-hgt-corner4(slope_this);
 			// up slope hiding something ...
@@ -590,20 +615,49 @@ void grund_t::calc_back_bild(const sint8 hgt,const sint8 slope_this)
 	if(k.x>0) {
 		const grund_t *gr=welt->lookup(k+koord(-1,0))->get_kartenboden();
 		if(gr) {
-			const sint16 left_hgt=gr->get_hoehe()/Z_TILE_STEP;
-			const sint8 slope=gr->get_grund_hang();
+			const sint16 left_hgt=gr->get_disp_height()/Z_TILE_STEP;
+			const sint8 slope=gr->get_disp_slope();
+
+			sint8 diff_from_ground_1 = left_hgt+corner2(slope)-hgt;
+			sint8 diff_from_ground_2 = left_hgt+corner3(slope)-hgt;
+
+			if (underground_mode==ugm_level) {
+				// if exactly one of (this) and (gr) is visible, show full walls
+				if ( isvisible && !gr->is_visible()){
+					diff_from_ground_1 += 1;
+					diff_from_ground_2 += 1;
+					set_flag(grund_t::draw_as_ding);
+					fence_west = corner1(slope_this)==corner4(slope_this);
+				}
+				else if ( !isvisible && gr->is_visible()){
+					diff_from_ground_1 = 1;
+					diff_from_ground_2 = 1;
+				}
+				// avoid walls that cover the tunnel mounds
+				if ( gr->is_visible() && (gr->get_typ()==grund_t::tunnelboden) && ist_karten_boden() && gr->get_pos().z==underground_level && gr->get_grund_hang()==hang_t::west) {
+					diff_from_ground_1 = 0;
+					diff_from_ground_2 = 0;
+				}
+				if ( is_visible() && (get_typ()==grund_t::tunnelboden) && ist_karten_boden() && pos.z==underground_level && get_grund_hang()==hang_t::ost) {
+					diff_from_ground_1 = 0;
+					diff_from_ground_2 = 0;
+				}
+			}
 
-			const sint8 diff_from_ground_1 = left_hgt+corner2(slope)-hgt;
-			const sint8 diff_from_ground_2 = left_hgt+corner3(slope)-hgt;
 			// up slope hiding something ...
 			if(diff_from_ground_1-corner1(slope_this)<0  ||  diff_from_ground_2-corner4(slope_this)<0)  {
 				set_flag(grund_t::draw_as_ding);
 				if(  corner1(slope_this)==corner4(slope_this)  ) {
 					// ok, we need a fence here, if there is not a vertical bridgehead
-					fence_west = (flags&has_way1)==0  ||  (static_cast<weg_t*>(obj_bei(0))->get_ribi_unmasked()&ribi_t::west)==0
-								&& ( (flags&has_way2)==0  ||  (static_cast<weg_t *>(obj_bei(1))->get_ribi_unmasked()&ribi_t::west)==0);
+					fence_west = (flags&has_way1)==0  ||
+								 ( ((static_cast<weg_t *>(obj_bei(0)))->get_ribi_unmasked()&ribi_t::west)==0 &&
+									( (flags&has_way2)==0  ||  ((static_cast<weg_t *>(obj_bei(1)))->get_ribi_unmasked()&ribi_t::west)==0) );
 				}
 			}
+			// no fences between water tiles or between invisible tiles
+			if (fence_west && ( (ist_wasser() && gr->ist_wasser()) || (!isvisible && !gr->is_visible()) ) ) {
+				fence_west = false;
+			}
 			// any height difference AND something to see?
 			if(  (diff_from_ground_1-corner1(slope_this)>0  ||  diff_from_ground_2-corner4(slope_this)>0)
 				&&  (diff_from_ground_1>0  ||  diff_from_ground_2>0)  ) {
@@ -621,20 +675,49 @@ void grund_t::calc_back_bild(const sint8 hgt,const sint8 slope_this)
 	if(k.y>0) {
 		const grund_t *gr=welt->lookup(k+koord(0,-1))->get_kartenboden();
 		if(gr) {
-			const sint16 back_hgt=gr->get_hoehe()/Z_TILE_STEP;
-			const sint8 slope=gr->get_grund_hang();
+			const sint16 back_hgt=gr->get_disp_height()/Z_TILE_STEP;
+			const sint8 slope=gr->get_disp_slope();
+
+			sint8 diff_from_ground_1 = back_hgt+corner1(slope)-hgt;
+			sint8 diff_from_ground_2 = back_hgt+corner2(slope)-hgt;
+
+			if (underground_mode==ugm_level) {
+				// if exactly one of (this) and (gr) is visible, show full walls
+				if ( isvisible && !gr->is_visible()){
+					diff_from_ground_1 += 1;
+					diff_from_ground_2 += 1;
+					set_flag(grund_t::draw_as_ding);
+					fence_north = corner4(slope_this)==corner3(slope_this);
+				}
+				else if ( !isvisible && gr->is_visible()){
+					diff_from_ground_1 = 1;
+					diff_from_ground_2 = 1;
+				}
+				// avoid walls that cover the tunnel mounds
+				if ( gr->is_visible() && (gr->get_typ()==grund_t::tunnelboden) && ist_karten_boden() && gr->get_pos().z==underground_level && gr->get_grund_hang()==hang_t::nord) {
+					diff_from_ground_1 = 0;
+					diff_from_ground_2 = 0;
+				}
+				if ( is_visible() && (get_typ()==grund_t::tunnelboden) && ist_karten_boden() && pos.z==underground_level && get_grund_hang()==hang_t::sued) {
+					diff_from_ground_1 = 0;
+					diff_from_ground_2 = 0;
+				}
+			}
 
-			const sint8 diff_from_ground_1 = back_hgt+corner1(slope)-hgt;
-			const sint8 diff_from_ground_2 = back_hgt+corner2(slope)-hgt;
 			// up slope hiding something ...
 			if(diff_from_ground_1-corner4(slope_this)<0  ||  diff_from_ground_2-corner3(slope_this)<0) {
 				set_flag(grund_t::draw_as_ding);
 				if(  corner3(slope_this)==corner4(slope_this)  ) {
 					// ok, we need a fence here, if there is not a vertical bridgehead
-					fence_north = (flags&has_way1)==0  ||  (static_cast<weg_t*>(obj_bei(0))->get_ribi_unmasked()&ribi_t::nord)==0
-								&& ( (flags&has_way2)==0  ||  (static_cast<weg_t *>(obj_bei(1))->get_ribi_unmasked()&ribi_t::nord)==0);
+					fence_north = (flags&has_way1)==0  ||
+								 ( ((static_cast<weg_t *>(obj_bei(0)))->get_ribi_unmasked()&ribi_t::nord)==0 &&
+									( (flags&has_way2)==0  ||  ((static_cast<weg_t *>(obj_bei(1)))->get_ribi_unmasked()&ribi_t::nord)==0) );
 				}
 			}
+			// no fences between water tiles or between invisible tiles
+			if (fence_north && ( (ist_wasser() && gr->ist_wasser()) || (!isvisible && !gr->is_visible()) ) ) {
+				fence_north = false;
+			}
 			// any height difference AND something to see?
 			if(  (diff_from_ground_1-corner4(slope_this)>0  ||  diff_from_ground_2-corner3(slope_this)>0)
 				&&  (diff_from_ground_1>0  ||  diff_from_ground_2>0)  ) {
@@ -705,11 +788,14 @@ void grund_t::display_boden(const sint16 xpos, const sint16 ypos) const
 	const bool dirty=get_flag(grund_t::dirty);
 	const sint16 rasterweite=get_tile_raster_width();
 
-	// walls
+	// here: we are either ground(kartenboden) or visible
+	const bool visible = !ist_karten_boden()  ||  is_karten_boden_visible();
+
+	// walls, fences, foundations etc
 	if(back_bild_nr!=0) {
 		if(abs(back_bild_nr)>121) {
 			// fence before a drop
-			const sint16 offset = corner4(slope) ? -TILE_HEIGHT_STEP : 0;
+			const sint16 offset = visible && corner4(get_grund_hang()) ? -tile_raster_scale_y( TILE_HEIGHT_STEP/Z_TILE_STEP, get_tile_raster_width()) : 0;
 			if(back_bild_nr<0) {
 				// behind a building
 				display_img(grund_besch_t::fences->get_bild(-back_bild_nr-122+3), xpos, ypos+offset, dirty);
@@ -746,13 +832,16 @@ void grund_t::display_boden(const sint16 xpos, const sint16 ypos) const
 	}
 	else {
 		if(get_typ()!=wasser) {
-			display_img(get_bild(), xpos, ypos, dirty);
-
-			// we show additionally a grid
-			if((show_grid || underground_mode) &&  get_typ()!=wasser) {
-				uint8 hang = get_grund_hang();
-				uint8 back_hang = (hang&1) + ((hang>>1)&6);
-				display_img(grund_besch_t::borders->get_bild(back_hang), xpos, ypos, dirty);
+			// show image if tile is visible
+			if (visible)  {
+				display_img(get_bild(), xpos, ypos, dirty);
+				// we show additionally a grid
+				// for undergroundmode = ugm_all the grid is plotted in display_dinge
+				if(show_grid){
+					const uint8 hang = get_grund_hang();
+					const uint8 back_hang = (hang&1) + ((hang>>1)&6);
+					display_img(grund_besch_t::borders->get_bild(back_hang), xpos, ypos, dirty);
+				}
 			}
 		}
 		else {
@@ -761,25 +850,25 @@ void grund_t::display_boden(const sint16 xpos, const sint16 ypos) const
 		}
 	}
 
-	// no ground, and underground mode => likely a bridge => do not show then
-	if(bild!=IMG_LEER  ||  !underground_mode) {
+	// display ways
+	if(visible){
 		if(  flags&has_way1  ) {
 			sint16 ynpos = ypos-tile_raster_scale_y( get_weg_yoff(), rasterweite );
 			const ding_t* d = obj_bei(0);
-			display_color_img( d->get_bild(), xpos, ynpos, d->get_player_nr(), true, dirty );
+			display_color_img( d->get_bild(), xpos, ynpos, d->get_player_nr(), true, dirty|d->get_flag(ding_t::dirty) );
 			PLAYER_COLOR_VAL pc = d->get_outline_colour();
 			if(pc) {
-				display_img_blend( d->get_bild(), xpos, ynpos, pc, true, dirty );
+				display_img_blend( d->get_bild(), xpos, ynpos, pc, true, dirty|d->get_flag(ding_t::dirty) );
 			}
 		}
 
 		if(  flags&has_way2  ){
 			sint16 ynpos = ypos-tile_raster_scale_y( get_weg_yoff(), rasterweite );
 			const ding_t* d = obj_bei(1);
-			display_color_img( d->get_bild(), xpos, ynpos, d->get_player_nr(), true, dirty );
+			display_color_img( d->get_bild(), xpos, ynpos, d->get_player_nr(), true, dirty|d->get_flag(ding_t::dirty) );
 			PLAYER_COLOR_VAL pc = d->get_outline_colour();
 			if(pc) {
-				display_img_blend( d->get_bild(), xpos, ynpos, pc, true, dirty );
+				display_img_blend( d->get_bild(), xpos, ynpos, pc, true, dirty|d->get_flag(ding_t::dirty) );
 			}
 		}
 	}
@@ -792,29 +881,53 @@ void grund_t::display_dinge(const sint16 xpos, sint16 ypos, const bool is_global
 	const bool dirty = get_flag(grund_t::dirty);
 	const uint8 start_offset=offsets[flags/has_way1];
 
-	if(!ist_im_tunnel()) {
+	// here: we are either ground(kartenboden) or visible
+	const bool visible = !ist_karten_boden()  ||  is_karten_boden_visible();
+
+	if(visible) {
 		if(is_global  &&  get_flag(grund_t::marked)) {
-			uint8 hang = get_grund_hang();
-			uint8 back_hang = (hang&1) + ((hang>>1)&6)+8;
+			const uint8 hang = get_grund_hang();
+			const uint8 back_hang = (hang&1) + ((hang>>1)&6)+8;
 			display_img(grund_besch_t::marker->get_bild(back_hang), xpos, ypos, dirty);
 			dinge.display_dinge( xpos, ypos, start_offset, is_global );
-			display_img(grund_besch_t::marker->get_bild(hang&7), xpos, ypos, dirty);
+			display_img(grund_besch_t::marker->get_bild(get_grund_hang()&7), xpos, ypos, dirty);
+			//display_img(grund_besch_t::marker->get_bild(get_weg_hang()&7), xpos, ypos, dirty);
+
+			if (!ist_karten_boden()) {
+				const grund_t *gr = welt->lookup_kartenboden(pos.get_2d());
+				const sint16 raster_tile_width = get_tile_raster_width();
+				if (pos.z > gr->get_hoehe()) {
+					//display front part of marker for grunds in between
+					for(sint8 z = pos.z-Z_TILE_STEP; z>gr->get_hoehe(); z-=Z_TILE_STEP) {
+						display_img(grund_besch_t::marker->get_bild(0), xpos, ypos - tile_raster_scale_y( (z-pos.z)*TILE_HEIGHT_STEP/Z_TILE_STEP, raster_tile_width), true);
+					}
+					//display front part of marker for ground
+					display_img(grund_besch_t::marker->get_bild(gr->get_grund_hang()&7), xpos, ypos - tile_raster_scale_y( (gr->get_hoehe()-pos.z)*TILE_HEIGHT_STEP/Z_TILE_STEP, raster_tile_width), true);
+				}
+				else if (pos.z < gr->get_disp_height()) {
+					//display back part of marker for grunds in between
+					for(sint8 z = pos.z+Z_TILE_STEP; z<gr->get_disp_height(); z+=Z_TILE_STEP) {
+						display_img(grund_besch_t::borders->get_bild(0), xpos, ypos - tile_raster_scale_y( (z-pos.z)*TILE_HEIGHT_STEP/Z_TILE_STEP, raster_tile_width), true);
+					}
+					//display back part of marker for ground
+					const uint8 hang = gr->get_grund_hang() | gr->get_weg_hang();
+					const uint8 back_hang = (hang&1) + ((hang>>1)&6);
+					display_img(grund_besch_t::borders->get_bild(back_hang), xpos, ypos - tile_raster_scale_y( (gr->get_hoehe()-pos.z)*TILE_HEIGHT_STEP/Z_TILE_STEP, raster_tile_width), true);
+				}
+			}
 		}
 		else {
 			dinge.display_dinge( xpos, ypos, start_offset, is_global );
 		}
-	} else if(grund_t::underground_mode) {
-		// only grid lines for underground mode ...
-		uint8 hang = get_grund_hang();
-		uint8 back_hang = (hang&1) + ((hang>>1)&6);
-		if(ist_karten_boden()) {
-			display_img(grund_besch_t::borders->get_bild(back_hang), xpos, ypos, dirty);
-			if(get_typ()==tunnelboden) {
-				dinge.display_dinge( xpos, ypos, start_offset, is_global );
-			}
-		}
-		if(get_flag(grund_t::marked)) {
-			display_img(grund_besch_t::marker->get_bild(back_hang)+8, xpos, ypos, dirty);
+	}
+	else { // must be karten_boden
+		// in undergroundmode: draw ground grid
+		const uint8 hang = underground_mode==ugm_all ? get_grund_hang() : hang_t::flach;
+		const uint8 back_hang = (hang&1) + ((hang>>1)&6);
+		display_img(grund_besch_t::borders->get_bild(back_hang), xpos, ypos, dirty);
+		// show marker for marked but invisible tiles
+		if(is_global  &&  get_flag(grund_t::marked)) {
+			display_img(grund_besch_t::marker->get_bild(back_hang+8), xpos, ypos, dirty);
 			display_img(grund_besch_t::marker->get_bild(hang&7), xpos, ypos, dirty);
 		}
 	}
@@ -868,10 +981,21 @@ bool grund_t::weg_erweitern(waytype_t wegtyp, ribi_t::ribi ribi)
 		weg->ribi_add(ribi);
 		weg->count_sign();
 		if(weg->is_electrified()) {
-			for(uint8 i=0;  i<get_top();  i++) {
-				ding_t *d=obj_bei(i);
-				if(d  &&  d->get_typ()==ding_t::wayobj  &&  ((wayobj_t *)d)->get_besch()->get_wtyp()==wegtyp) {
-					((wayobj_t *)d)->set_dir( ((wayobj_t *)d)->get_dir() | ribi );
+			wayobj_t *wo = get_wayobj( wegtyp );
+			if( (ribi & wo->get_dir()) == 0 ) {
+				// ribi isn't set at wayobj;
+				for( uint8 i = 0; i < 4; i++ ) {
+					// Add ribis to adjacent wayobj.
+					if( ribi_t::nsow[i] & ribi ) {
+						grund_t *next_gr;
+						if( get_neighbour( next_gr, wegtyp, ribi_t::nsow[i] ) ) {
+							wayobj_t *wo2 = next_gr->get_wayobj( wegtyp );
+							if( wo2 ) {
+								wo->set_dir( wo->get_dir() | ribi_t::nsow[i] );
+								wo2->set_dir( wo2->get_dir() | ribi_t::rueckwaerts(ribi_t::nsow[i]) );
+							}
+						}
+					}
 				}
 			}
 		}
@@ -883,9 +1007,9 @@ bool grund_t::weg_erweitern(waytype_t wegtyp, ribi_t::ribi ribi)
 }
 
 
-long grund_t::neuen_weg_bauen(weg_t *weg, ribi_t::ribi ribi, spieler_t *sp)
+sint64 grund_t::neuen_weg_bauen(weg_t *weg, ribi_t::ribi ribi, spieler_t *sp)
 {
-	long cost=0;
+	sint64 cost=0;
 
 	// not already there?
 	const weg_t * alter_weg = get_weg(weg->get_waytype());
@@ -1093,7 +1217,8 @@ grund_t::get_vmove(koord dir) const
 		h += corner1(slope)*Z_TILE_STEP;
 	} else if(dir == koord::nord) {
 		h += corner3(slope)*Z_TILE_STEP;
-	} else {
+	}
+	else {
 		// commented out: allow diagonal directions now (assume flat for these)
 		//dbg->fatal("grund_t::get_vmove()","no valid direction given (%x)",ribi_typ(dir));	// error: not a direction ...
 	}
@@ -1109,7 +1234,7 @@ int grund_t::get_max_speed() const
 		max = ((weg_t *)obj_bei(0))->get_max_speed();
 	}
 	if(flags&has_way2) {
-		max = min( max, ((weg_t *)obj_bei(0))->get_max_speed() );
+		max = min( max, ((weg_t *)obj_bei(1))->get_max_speed() );
 	}
 	return max;
 }
@@ -1124,10 +1249,31 @@ bool grund_t::remove_everything_from_way(spieler_t* sp, waytype_t wt, ribi_t::ri
 		koord here = pos.get_2d();
 
 		// stopps
-		if(flags&is_halt_flag  &&  get_halt()->get_besitzer()==sp) {
-			const char *fail;
-			if(!haltestelle_t::remove(welt, sp, pos, fail)) {
-				return false;
+		if(flags&is_halt_flag  &&  (get_halt()->get_besitzer()==sp  || sp==welt->get_spieler(1))) {
+			bool remove_halt = get_typ()!=boden;
+			// remove only if there is no other way
+			if(get_weg_nr(1)==NULL) {
+				remove_halt = true;
+			}
+			else {
+#ifdef delete_matching_stops
+				// delete halts with the same waytype ... may lead to confusing / unexpected but completely logical results ;)
+				gebaeude_t *gb = find<gebaeude_t>();
+				if (gb) {
+					waytype_t halt_wt = (waytype_t)gb->get_tile()->get_besch()->get_extra();
+					if (halt_wt == wt || (wt==track_wt && halt_wt==tram_wt) || (wt==tram_wt && halt_wt==track_wt)) {
+						remove_halt = true;
+					}
+				}
+#else
+				remove_halt = false;
+#endif
+			}
+			if (remove_halt) {
+				const char *fail;
+				if (!haltestelle_t::remove(welt, sp, pos, fail)) {
+					return false;
+				}
 			}
 		}
 
@@ -1174,36 +1320,35 @@ bool grund_t::remove_everything_from_way(spieler_t* sp, waytype_t wt, ribi_t::ri
 				delete d;
 			}
 			// remove tunnel portal, if not the last tile ...
-			else if(add==ribi_t::keine  &&  d->get_typ()==ding_t::tunnel) {
+			// must be done before weg_entfernen() to get maintenance right
+			else if(d->get_typ()==ding_t::tunnel) {
 				uint8 wt = ((tunnel_t *)d)->get_besch()->get_waytype();
-				if((flags&has_way2)==0  &&  weg->get_waytype()==wt) {
-					// last way was belonging to this tunnel
-					d->entferne(sp);
-					delete d;
-				}
-				else {
-					// we must leave the way to prevent destroying the other one
-					add = get_weg_nr(1)->get_ribi_unmasked();
-					weg->calc_bild();
+				if (weg->get_waytype()==wt) {
+					if((flags&has_way2)==0) {
+						if (add==ribi_t::keine) {
+							// last way was belonging to this tunnel
+							d->entferne(sp);
+							delete d;
+						}
+					}
+					else {
+						// we must leave the way to prevent destroying the other one
+						add |= get_weg_nr(1)->get_ribi_unmasked();
+						weg->calc_bild();
+					}
 				}
 			}
-
 		}
 
-
 		// need to remove railblocks to recalcualte connections
 		// remove all ways or just some?
 		if(add==ribi_t::keine) {
 			costs -= weg_entfernen(wt, true);
-			if(add==ribi_t::keine  &&  (flags&is_kartenboden)  &&  get_typ()==tunnelboden  &&  (flags&has_way1)==0) {
-				// remove tunnel portals
-				tunnel_t *t = find<tunnel_t>();
-				if(t) {
-					t->entferne(sp);
-					delete t;
-				}
-				// remove tunnelportal and set to normal ground
+			// make tunnel portals to normal ground
+			if((flags&is_kartenboden)  &&  get_typ()==tunnelboden  &&  (flags&has_way1)==0) {
+				// remove remaining dings
 				obj_loesche_alle( sp );
+				// set to normal ground
 				welt->access(pos.get_2d())->kartenboden_setzen( new boden_t( welt, pos, slope ) );
 			}
 		}
@@ -1232,3 +1377,27 @@ void grund_t::operator delete(void* p, size_t s)
 {
 	return freelist_t::putback_node(s, p);
 }
+
+wayobj_t *grund_t::get_wayobj( waytype_t wt ) const
+{
+	waytype_t wt1 = ( wt == tram_wt ) ? track_wt : wt;
+
+	wayobj_t *wayobj;
+	if(  find<wayobj_t>()  ) {
+		// since there might be more than one, we have to iterate through all of them
+		for(  uint8 i = 0;  i < get_top();  i++  ) {
+			ding_t *d = obj_bei(i);
+			if(  d  &&  d->get_typ() == ding_t::wayobj  ) {
+				wayobj = (wayobj_t *)d;
+				waytype_t wt2 = wayobj->get_besch()->get_wtyp();
+				if(  wt2 == tram_wt  ) {
+					wt2 = track_wt;
+				}
+				if(  wt1 == wt2  ) {
+					return wayobj;
+				}
+			}
+		}
+	}
+	return NULL;
+}
diff --git a/boden/grund.h b/boden/grund.h
index d16b842..906d637 100644
--- a/boden/grund.h
+++ b/boden/grund.h
@@ -114,10 +114,16 @@ public:
 	 */
 	static bool show_grid;
 
-	/* true, when only underground should be visible
-	 * @author kierongreen
-	 */
-	static bool underground_mode;
+	/* underground modes */
+	/* @author Dwachs    */
+	enum _underground_modes {
+		ugm_none = 0,	// normal view
+		ugm_all  = 1,   // everything underground visible, grid for grounds
+		ugm_level= 2	// overground things visible if their height  <= underground_level
+						// underground things visible if their height == underground_level
+	};
+	static uint8 underground_mode;
+	static sint8 underground_level;
 
 protected:
 	/**
@@ -213,9 +219,9 @@ public:
 	static void toggle_grid() { grund_t::show_grid = !grund_t::show_grid; }
 
 	/**
-	 * Toggle underground display (now only a flag)
+	 * Sets the undergroundmode & level
 	 */
-	static void toggle_underground_mode() { grund_t::underground_mode = !grund_t::underground_mode; }
+	static void set_underground_mode(const uint8 ugm, const sint8 level);
 
 	karte_t *get_welt() const {return welt;}
 
@@ -315,18 +321,20 @@ public:
 	inline bool ist_bruecke() const {return get_typ()==brueckenboden;}
 
 	/**
-	* This is called very often, it must be inlined and therefore
-	* cannot be virtual - subclasses must set the flags appropriately!
-	* @author Hj. Malthaner
+	* true if tunnelboden (hence true also for tunnel mouths)
+	* check for visibility in is_visible()
 	*/
-	inline bool ist_tunnel() const {return ((get_typ()==tunnelboden)^grund_t::underground_mode);}
+	inline bool ist_tunnel() const {
+		return ( (get_typ()==tunnelboden) );
+	}
 
 	/**
-	* This is called very often, it must be inlined and therefore
-	* cannot be virtual - subclasses must set the flags appropriately!
-	* @author Hj. Malthaner
+	* gives true for grounds inside tunnel (not tunnel mouths)
+	* check for visibility in is_visible()
 	*/
-	inline bool ist_im_tunnel() const {return (get_typ()==tunnelboden  &&  ist_karten_boden()==0)^grund_t::underground_mode;}
+	inline bool ist_im_tunnel() const {
+		return ( get_typ()==tunnelboden && (!ist_karten_boden())) ;
+	}
 
 	/* this will be stored locally, since it is called many, many times */
 	inline uint8 ist_karten_boden() const {return (flags&is_kartenboden);}
@@ -380,6 +388,61 @@ public:
 
 	void set_hoehe(int h) { pos.z = h;}
 
+	// Helper functions for underground modes
+	//
+	// returns the height for the use in underground-mode,
+	// heights above underground_level are cutted
+	inline sint8 get_disp_height() const {
+		return (underground_mode & ugm_level )
+			? (pos.z > underground_level ? underground_level : pos.z)
+			: pos.z ;
+	}
+
+	// returns slope
+	// if tile is not visible, 'flat' is returned
+	// special care has to be taken of tunnel mouths
+	inline hang_t::typ get_disp_slope() const {
+		return (  (underground_mode & ugm_level)  &&  (pos.z > underground_level  ||  (get_typ()==tunnelboden  &&  ist_karten_boden()  &&  pos.z == underground_level))
+							? (hang_t::typ)hang_t::flach
+							: get_grund_hang() );
+
+		/*switch(underground_mode) {// long version of the return statement above
+			case ugm_none: return(get_grund_hang());
+			case ugm_all:  return(get_grund_hang()); // get_typ()==tunnelboden && !ist_karten? hang_t::flach : get_grund_hang());
+			case ugm_level:return((pos.z > underground_level || (get_typ()==tunnelboden && ist_karten_boden() && pos.z == underground_level))
+							? hang_t::flach
+							: get_grund_hang());
+		}*/
+	}
+
+	inline bool is_visible() const {
+		if(get_typ()==tunnelboden) {
+			switch(underground_mode) {
+				case ugm_none: return ist_karten_boden();
+				case ugm_all:  return true;
+				case ugm_level:return  pos.z == underground_level  ||  (ist_karten_boden()  &&  pos.z <= underground_level);
+			}
+		}
+		else {
+			switch(underground_mode) {
+				case ugm_none: return true;
+				case ugm_all:  return false;
+				case ugm_level:return pos.z <= underground_level;
+			}
+		}
+		return(false);
+	}
+
+	// the same as above but specialized for kartenboden
+	inline bool is_karten_boden_visible() const {
+		switch(underground_mode) {
+			case ugm_none: return true;
+			case ugm_all:  return get_typ()==tunnelboden;
+			case ugm_level:return pos.z <= underground_level;
+		}
+		return(false);
+	}
+
 	/**
 	* Zeichnet Bodenbild des Grundes
 	* @author Hj. Malthaner
@@ -527,8 +590,19 @@ public:
 	*/
 	inline bool ist_uebergang() const { return (flags&has_way2)!=0  &&  ((weg_t *)dinge.bei(1))->get_besch()->get_styp()!=7; }
 
+	/**
+	* returns the vehcile of a convoi (if there)
+	* @author V. Meyer
+	*/
+	ding_t *get_convoi_vehicle() const { return dinge.get_convoi_vehicle(); }
+
 	virtual hang_t::typ get_weg_hang() const { return get_grund_hang(); }
 
+	/*
+	 * Search a matching wayobj
+	 */
+	wayobj_t *get_wayobj( waytype_t wt ) const;
+
 	/**
 	* Interface zur Bauen der Wege
 	* =============================
@@ -544,7 +618,7 @@ public:
 	 *
 	 * @author V. Meyer
 	 */
-	long neuen_weg_bauen(weg_t *weg, ribi_t::ribi ribi, spieler_t *sp);
+	sint64 neuen_weg_bauen(weg_t *weg, ribi_t::ribi ribi, spieler_t *sp);
 
 	/**
 	 * Bauhilfsfunktion - die ribis eines vorhandenen weges werden erweitert
@@ -624,6 +698,7 @@ public:
 
 	void* operator new(size_t s);
 	void  operator delete(void* p, size_t s);
+
 };
 
 
diff --git a/boden/monorailboden.cc b/boden/monorailboden.cc
index fbbf4d8..7059fc3 100644
--- a/boden/monorailboden.cc
+++ b/boden/monorailboden.cc
@@ -10,6 +10,7 @@
 
 #include "../dataobj/loadsave.h"
 #include "monorailboden.h"
+#include "wege/weg.h"
 
 
 monorailboden_t::monorailboden_t(karte_t *welt, koord3d pos,hang_t::typ slope) : grund_t(welt, pos)
@@ -42,7 +43,7 @@ void monorailboden_t::calc_bild_internal()
 	set_bild( IMG_LEER );
 	clear_back_bild();
 	if(get_weg_nr(0)) {
-		if(grund_t::underground_mode) {
+		if (!is_visible()){
 			get_weg_nr(0)->set_bild(IMG_LEER);
 		}
 		else {
diff --git a/boden/tunnelboden.cc b/boden/tunnelboden.cc
index e90513f..5fe292d 100644
--- a/boden/tunnelboden.cc
+++ b/boden/tunnelboden.cc
@@ -36,31 +36,44 @@ tunnelboden_t::tunnelboden_t(karte_t *welt, loadsave_t *file, koord pos ) : bode
 void
 tunnelboden_t::calc_bild_internal()
 {
-	if(!ist_tunnel()) {
-		// only here, when undergound_mode is true
-		clear_back_bild();
-		if(ist_karten_boden()) {
-			set_bild( IMG_LEER ); // tunnel mound
-		}
-		else {
+	// tunnel mouth
+	if (ist_karten_boden()) {
+		if (grund_t::underground_mode==grund_t::ugm_all || (grund_t::underground_mode==grund_t::ugm_level && pos.z==grund_t::underground_level)) {
+			if (grund_t::underground_mode==grund_t::ugm_all) {
+				clear_back_bild();
+			}
+			else {
+				boden_t::calc_bild_internal();
+			}
 			// default tunnel ground images
 			set_bild(skinverwaltung_t::fussweg->get_bild_nr(0));
+			clear_flag(draw_as_ding);
 		}
-	}
-	else if(ist_karten_boden()) {
-		// calculate the slope of ground
-		boden_t::calc_bild_internal();
-		set_flag(draw_as_ding);
-		if(  (get_grund_hang()==hang_t::west  &&  abs(back_bild_nr)>11)  ||  (get_grund_hang()==hang_t::nord  &&  get_back_bild(0)!=IMG_LEER)  ) {
-			// must draw as ding, since there is a slop here nearby
-			koord pos = get_pos().get_2d()+koord(get_grund_hang());
-			grund_t *gr = welt->lookup_kartenboden(pos);
-			gr->set_flag(grund_t::draw_as_ding);
+		else {
+			// calculate the ground
+			boden_t::calc_bild_internal();
+			set_flag(draw_as_ding);
+		}
+
+		if (grund_t::underground_mode == grund_t::ugm_none) {
+			if(  (get_grund_hang()==hang_t::west  &&  abs(back_bild_nr)>11)  ||  (get_grund_hang()==hang_t::nord  &&  get_back_bild(0)!=IMG_LEER)  ) {
+				// must draw as ding, since there is a slop here nearby
+				koord pos = get_pos().get_2d()+koord(get_grund_hang());
+				grund_t *gr = welt->lookup_kartenboden(pos);
+				gr->set_flag(grund_t::draw_as_ding);
+			}
 		}
 	}
+	// inside tunnel
 	else {
 		clear_back_bild();
-		set_bild(IMG_LEER);
+		if (is_visible()) {
+			// default tunnel ground images
+			set_bild(skinverwaltung_t::fussweg->get_bild_nr(get_disp_slope()));
+		}
+		else {
+			set_bild(IMG_LEER);
+		}
 	}
 }
 
diff --git a/boden/tunnelboden.h b/boden/tunnelboden.h
index 4185638..faa4779 100644
--- a/boden/tunnelboden.h
+++ b/boden/tunnelboden.h
@@ -2,6 +2,7 @@
 #define tunnelboden_h
 
 #include "boden.h"
+#include "wege/weg.h"
 
 
 class tunnelboden_t : public boden_t
@@ -15,7 +16,7 @@ public:
 
 	virtual void rdwr(loadsave_t *file);
 
-	hang_t::typ get_weg_hang() const { return hang_t::flach; }
+	hang_t::typ get_weg_hang() const { return ist_karten_boden() ? hang_t::flach : get_grund_hang(); }
 
 	const char *get_name() const {return "Tunnelboden";}
 	enum grund_t::typ get_typ() const {return tunnelboden;}
diff --git a/boden/wasser.cc b/boden/wasser.cc
index bd3c1c9..f163276 100644
--- a/boden/wasser.cc
+++ b/boden/wasser.cc
@@ -55,9 +55,17 @@ void
 wasser_t::calc_bild_internal()
 {
 	set_hoehe( welt->get_grundwasser() );
-	sint16 zpos = min( welt->lookup_hgt(get_pos().get_2d()), welt->get_grundwasser() ); // otherwise slope will fail ...
-	set_bild( grund_besch_t::get_ground_tile(0,zpos) );
 	slope = hang_t::flach;
+
+	sint16 zpos = min( welt->lookup_hgt(get_pos().get_2d()), welt->get_grundwasser() ); // otherwise slope will fail ...
+
+	if (grund_t::underground_mode==grund_t::ugm_level && grund_t::underground_level < zpos) {
+		set_bild(IMG_LEER);
+	}
+	else {
+		set_bild( grund_besch_t::get_ground_tile(0,zpos) );
+	}
+
 	// artifical walls from here on ...
 	grund_t::calc_back_bild(welt->get_grundwasser()/Z_TILE_STEP,0);
 }
diff --git a/boden/wege/kanal.h b/boden/wege/kanal.h
index d9fa55b..6ff8cd0 100644
--- a/boden/wege/kanal.h
+++ b/boden/wege/kanal.h
@@ -2,7 +2,6 @@
 #define boden_wege_dock_h
 
 #include "weg.h"
-#include "kanal.h"
 #include "../../dataobj/loadsave.h"
 #include "../../utils/cbuffer_t.h"
 
diff --git a/boden/wege/schiene.cc b/boden/wege/schiene.cc
index f1ac67b..2ff0d41 100644
--- a/boden/wege/schiene.cc
+++ b/boden/wege/schiene.cc
@@ -77,12 +77,21 @@ void schiene_t::info(cbuffer_t & buf) const
  * true, if this rail can be reserved
  * @author prissi
  */
-bool
-schiene_t::reserve(convoihandle_t c) {
+bool schiene_t::reserve(convoihandle_t c, ribi_t::ribi dir  )
+{
 	if(can_reserve(c)) {
 		reserved = c;
+		/* for threeway and forway switches we may need to alter graphic, if
+		 * direction is a diagonal (i.e. on the switching part)
+		 * and there are switching graphics
+		 */
+		if(  ribi_t::is_threeway(get_ribi_unmasked())  &&  ribi_t::ist_kurve(dir)  &&  get_besch()->has_switch_bild()  ) {
+			image_id bild = get_besch()->get_bild_nr_switch( get_ribi_unmasked(), is_snow(), (dir==ribi_t::nordost  ||  dir==ribi_t::suedwest) );
+			set_bild( bild );
+			mark_image_dirty( bild, 0 );
+		}
 		if(schiene_t::show_reservations) {
-			mark_image_dirty(get_bild(),0);
+			set_flag( ding_t::dirty );
 		}
 		return true;
 	}
@@ -104,7 +113,7 @@ schiene_t::unreserve(convoihandle_t c)
 	if(reserved.is_bound()  &&  reserved==c) {
 		reserved = convoihandle_t();
 		if(schiene_t::show_reservations) {
-			mark_image_dirty(get_bild(),0);
+			set_flag( ding_t::dirty );;
 		}
 		return true;
 	}
@@ -128,7 +137,7 @@ schiene_t::unreserve(vehikel_t *)
 //	if(!welt->lookup(get_pos())->suche_obj(v->get_typ())) {
 		reserved = convoihandle_t();
 		if(schiene_t::show_reservations) {
-			mark_image_dirty(get_bild(),0);
+			set_flag( ding_t::dirty );;
 		}
 		return true;
 //	}
diff --git a/boden/wege/schiene.h b/boden/wege/schiene.h
index 7007ca4..76d34d8 100644
--- a/boden/wege/schiene.h
+++ b/boden/wege/schiene.h
@@ -74,7 +74,7 @@ public:
 	* true, then this rail was reserved
 	* @author prissi
 	*/
-	bool reserve(convoihandle_t c);
+	bool reserve(convoihandle_t c, ribi_t::ribi dir);
 
 	/**
 	* releases previous reservation
diff --git a/boden/wege/weg.cc b/boden/wege/weg.cc
index 40d191d..0c6ccc9 100644
--- a/boden/wege/weg.cc
+++ b/boden/wege/weg.cc
@@ -116,7 +116,6 @@ const char* weg_t::waytype_to_string(waytype_t wt)
 		case air_wt:	return "air";
 		default:
 			// keep compiler happy; should never reach here anyway
-			assert(0);
 			break;
 	}
 	return "invalid waytype";
@@ -341,18 +340,80 @@ weg_t::count_sign()
 
 
 
-void
-weg_t::calc_bild()
+// much faster recalculation of season image
+bool weg_t::check_season( const long )
+{
+	// use snow image if above snowline and above ground
+	bool snow = (get_pos().z >= welt->get_snowline());
+	bool old_snow = (flags&IS_SNOW)!=0;
+	if(  !(snow ^ old_snow)  ) {
+		// season is not changing ...
+		return true;
+	}
+
+	if(  besch==NULL  ) {
+		// now way to calculate this
+		return true;
+	}
+
+	grund_t *from = welt->lookup(get_pos());
+	if(from->ist_bruecke()  &&  from->obj_bei(0)==this) {
+		// first way on a bridge (bruecke_t will set the image)
+		return true;
+	}
+
+	// set new season
+	flags &= ~IS_SNOW;
+	if(  snow  ) {
+		flags |= IS_SNOW;
+	}
+
+	hang_t::typ hang = from->get_weg_hang();
+	if(hang != hang_t::flach) {
+		set_bild( besch->get_hang_bild_nr( hang, snow ) );
+		return true;
+	}
+
+	if(  ribi_t::ist_kurve(ribi)  &&  besch->has_diagonal_bild()  ) {
+		if(  bild==besch->get_bild_nr( ribi, old_snow )  ) {
+			set_bild( besch->get_bild_nr( ribi, snow ) );
+		}
+		else {
+			set_bild( besch->get_diagonal_bild_nr( ribi, snow ) );
+		}
+	}
+	else if(  ribi_t::is_threeway(ribi)  &&  besch->has_switch_bild()  ) {
+		if(  bild==besch->get_bild_nr( ribi, old_snow )  ) {
+			set_bild( besch->get_bild_nr( ribi, snow ) );
+		}
+		else {
+			set_bild( besch->get_bild_nr( ribi+16, snow ) );
+		}
+	}
+	else {
+		set_bild( besch->get_bild_nr( ribi, snow ) );
+	}
+	return true;
+}
+
+
+
+void weg_t::calc_bild()
 {
 	// V.Meyer: weg_position_t changed to grund_t::get_neighbour()
 	grund_t *from = welt->lookup(get_pos());
 	grund_t *to;
 
-	if(from==NULL  ||  besch==NULL  ||  from->ist_tunnel()) {
+	if(from==NULL  ||  besch==NULL  ||  !from->is_visible()) {
 		// no ground, in tunnel
 		set_bild(IMG_LEER);
 		return;
 	}
+	if (from->ist_tunnel() && from->ist_karten_boden() && (grund_t::underground_mode==grund_t::ugm_none || (grund_t::underground_mode==grund_t::ugm_level && from->get_hoehe()<grund_t::underground_level))) {
+		// in tunnel mouth, no underground mode
+		set_bild(IMG_LEER);
+		return;
+	}
 	if(from->ist_bruecke()  &&  from->obj_bei(0)==this) {
 		// first way on a bridge (bruecke_t will set the image)
 		return;
@@ -360,6 +421,10 @@ weg_t::calc_bild()
 
 	// use snow image if above snowline and above ground
 	bool snow = (get_pos().z >= welt->get_snowline());
+	flags &= ~IS_SNOW;
+	if(  snow  ) {
+		flags |= IS_SNOW;
+	}
 
 	hang_t::typ hang = from->get_weg_hang();
 	if(hang != hang_t::flach) {
@@ -469,3 +534,16 @@ void weg_t::laden_abschliessen()
 		spieler_t::add_maintenance( sp,  besch->get_wartung() );
 	}
 }
+
+
+// returns NULL, if removal is allowed
+// players can remove public owned ways
+const char *weg_t::ist_entfernbar(const spieler_t *sp)
+{
+	if (get_player_nr()==1) {
+		return NULL;
+	}
+	else {
+		return ding_t::ist_entfernbar(sp);
+	}
+}
diff --git a/boden/wege/weg.h b/boden/wege/weg.h
index f3e5cfc..cfe94c8 100644
--- a/boden/wege/weg.h
+++ b/boden/wege/weg.h
@@ -62,10 +62,11 @@ public:
 		HAS_SIGN       = 0x04,
 		HAS_SIGNAL     = 0x08,
 		HAS_WAYOBJ     = 0x10,
-		HAS_CROSSING   = 0x20
+		HAS_CROSSING   = 0x20,
+		IS_SNOW = 0x80	// marker, if above snowline currently
 	};
 
-	enum system_type { type_flat=0, type_elevated=1, type_tram=7, type_all=255 };
+	enum system_type { type_flat=0, type_elevated=1, type_tram=7, type_underground=64, type_all=255 };
 
 private:
 	/**
@@ -129,7 +130,7 @@ public:
 	virtual ~weg_t();
 
 	/* seasonal image recalculation */
-	bool check_season(const long /*month*/) { calc_bild(); return true; }
+	bool check_season(const long /*month*/);
 
 	/* actual image recalculation */
 	void calc_bild();
@@ -171,6 +172,12 @@ public:
 	void zeige_info() {} // show no info
 
 	/**
+	 * @returns NULL wenn OK, ansonsten eine Fehlermeldung
+	 * @author Hj. Malthaner
+	 */
+	virtual const char *ist_entfernbar(const spieler_t *sp);
+
+	/**
 	* Wegtyp zurückliefern
 	*/
 	virtual waytype_t get_waytype() const = 0;
@@ -273,6 +280,7 @@ public:
 	inline bool has_signal() const {return flags&HAS_SIGNAL; }
 	inline bool has_wayobj() const {return flags&HAS_WAYOBJ; }
 	inline bool is_crossing() const {return flags&HAS_CROSSING; }
+	inline bool is_snow() const {return flags&IS_SNOW; }
 
 	inline void set_bild( image_id b ) { bild = b; }
 	image_id get_bild() const {return bild;}
diff --git a/dataobj/crossing_logic.cc b/dataobj/crossing_logic.cc
index a83d41b..e28d0df 100644
--- a/dataobj/crossing_logic.cc
+++ b/dataobj/crossing_logic.cc
@@ -168,15 +168,16 @@ crossing_logic_t::release_crossing( const vehikel_basis_t *v )
 void
 crossing_logic_t::set_state( crossing_state_t new_state )
 {
+	// play sound (if there and closing)
+	if(new_state==CROSSING_CLOSED  &&  besch->get_sound()>=0  &&  !welt->is_fast_forward()) {
+		struct sound_info info;
+		info.index = besch->get_sound();
+		info.volume = 255;
+		info.pri = 0;
+		welt->play_sound_area_clipped(crossings[0]->get_pos().get_2d(), info);
+	}
+
 	if(new_state!=zustand) {
-		// play sound (if there and closing)
-		if(new_state==CROSSING_CLOSED  &&  besch->get_sound()>=0) {
-			struct sound_info info;
-			info.index = besch->get_sound();
-			info.volume = 255;
-			info.pri = 0;
-			welt->play_sound_area_clipped(crossings[0]->get_pos().get_2d(), info);
-		}
 		zustand = new_state;
 		for(  uint8 i=0;  i<crossings.get_count();  i++  ) {
 			crossings[i]->state_changed();
diff --git a/dataobj/crossing_logic.h b/dataobj/crossing_logic.h
index e55e30c..775b05d 100644
--- a/dataobj/crossing_logic.h
+++ b/dataobj/crossing_logic.h
@@ -9,14 +9,14 @@
 #define crossing_logic_h
 
 #include "../simtypes.h"
-#include "../besch/kreuzung_besch.h"
-#include "../utils/cbuffer_t.h"
 #include "../tpl/minivec_tpl.h"
 #include "../tpl/slist_tpl.h"
 
-class vehikel_basis_t;
-class karte_t;
+class cbuffer_t;
 class crossing_t;
+class karte_t;
+class kreuzung_besch_t;
+class vehikel_basis_t;
 
 /**
  * road sign for traffic (one way minimum speed, traffic lights)
@@ -33,6 +33,7 @@ protected:
 	const vehikel_basis_t *request_close;
 
 	crossing_state_t zustand;
+	uint32 last_ticks_sound;
 	const kreuzung_besch_t *besch;
 	minivec_tpl<crossing_t *>crossings;
 
diff --git a/dataobj/dingliste.cc b/dataobj/dingliste.cc
index 72b3e17..1438102 100644
--- a/dataobj/dingliste.cc
+++ b/dataobj/dingliste.cc
@@ -129,7 +129,8 @@ static void dl_free(ding_t** p, uint8 size)
 	assert(size > 1);
 	if (size <= 16) {
 		freelist_t::putback_node(sizeof(*p) * size, p);
-	} else {
+	}
+	else {
 		guarded_free(p);
 	}
 }
@@ -141,7 +142,8 @@ static ding_t** dl_alloc(uint8 size)
 	ding_t** p;
 	if (size <= 16) {
 		p = static_cast<ding_t**>(freelist_t::gimme_node(size * sizeof(*p)));
-	} else {
+	}
+	else {
 		p = MALLOCN(ding_t*, size);
 	}
 	return p;
@@ -150,9 +152,9 @@ static ding_t** dl_alloc(uint8 size)
 
 dingliste_t::dingliste_t()
 {
-    obj.one = NULL;
-    capacity = 0;
-    top = 0;
+	obj.one = NULL;
+	capacity = 0;
+	top = 0;
 }
 
 
@@ -251,8 +253,8 @@ bool dingliste_t::grow_capacity()
 void
 dingliste_t::shrink_capacity(uint8 o_top)
 {
-    // strategy: avoid free'ing mem if not neccesary. Only if we hold lots
-    // of memory then free it.
+	// strategy: avoid free'ing mem if not neccesary. Only if we hold lots
+	// of memory then free it.
 	if(capacity > 16 && o_top <= 4) {
 		set_capacity(o_top);
 	}
@@ -447,7 +449,8 @@ bool dingliste_t::add(ding_t* ding)
 		// check for other ways to keep order! (maximum is two ways per tile at the moment)
 		if( obj.some[0]->get_typ()==ding_t::way  &&  ((weg_t *)ding)->get_waytype()>((weg_t *)obj.some[0])->get_waytype()) {
 			intern_insert_at(ding, 1);
-		} else {
+		}
+		else {
 			intern_insert_at(ding, 0);
 		}
 		return true;
@@ -708,6 +711,33 @@ dingliste_t::get_leitung() const
 
 
 
+ding_t *
+dingliste_t::get_convoi_vehicle() const
+{
+	if(capacity==0) {
+		return NULL;
+	}
+	else if(capacity==1) {
+		// could
+		uint8 t = obj.one->get_typ();
+		if(  t==ding_t::aircraft  ||  t==ding_t::schiff  ) {
+			return obj.one;
+		}
+	}
+	else if(top>0) {
+		// else we have to search the list
+		for(uint8 i=0; i<top; i++) {
+			uint8 typ = obj.some[i]->get_typ();
+			if(  typ>=ding_t::automobil  &&  typ<=ding_t::aircraft  ) {
+				return obj.some[i];
+			}
+		}
+	}
+	return NULL;
+}
+
+
+
 void
 dingliste_t::rdwr(karte_t *welt, loadsave_t *file, koord3d current_pos)
 {
@@ -751,7 +781,8 @@ dingliste_t::rdwr(karte_t *welt, loadsave_t *file, koord3d current_pos)
 						wo->set_flag(ding_t::not_on_map);
 						delete wo;
 						d = NULL;
-					} else {
+					}
+					else {
 						d = wo;
 					}
 					break;
@@ -768,7 +799,8 @@ dingliste_t::rdwr(karte_t *welt, loadsave_t *file, koord3d current_pos)
 						pedestrian->set_flag(ding_t::not_on_map);
 						delete pedestrian;
 						d = NULL;
-					} else {
+					}
+					else {
 						d = pedestrian;
 					}
 					break;
@@ -783,8 +815,8 @@ dingliste_t::rdwr(karte_t *welt, loadsave_t *file, koord3d current_pos)
 						// no citycars ... delete this
 						car->set_flag(ding_t::not_on_map);
 						delete car;
-						d = NULL;
-					} else {
+					}
+					else {
 						d = car;
 					}
 					break;
@@ -872,21 +904,24 @@ dingliste_t::rdwr(karte_t *welt, loadsave_t *file, koord3d current_pos)
 						// do not remove from this position, since there will be nothing
 						b->set_flag(ding_t::not_on_map);
 						delete b;
+						b = NULL;
+					}
+					else {
+						d = b;
 					}
-					d = b;
 				}
 				break;
 
 				case ding_t::groundobj:
 				{
 					groundobj_t* const groundobj = new groundobj_t(welt, file);
-					if (groundobj->get_besch() == NULL) {
+					if(groundobj->get_besch() == NULL) {
 						// do not remove from this position, since there will be nothing
 						groundobj->set_flag(ding_t::not_on_map);
 						// not use entferne, since it would try to lookup besch
 						delete groundobj;
-						d = NULL;
-					} else {
+					}
+					else {
 						d = groundobj;
 					}
 					break;
@@ -899,8 +934,8 @@ dingliste_t::rdwr(karte_t *welt, loadsave_t *file, koord3d current_pos)
 						// no citycars ... delete this
 						movingobj->set_flag(ding_t::not_on_map);
 						delete movingobj;
-						d = NULL;
-					} else {
+					}
+					else {
 						d = movingobj;
 					}
 					break;
@@ -916,9 +951,11 @@ dingliste_t::rdwr(karte_t *welt, loadsave_t *file, koord3d current_pos)
 						// do not remove from this position, since there will be nothing
 						gb->set_flag(ding_t::not_on_map);
 						delete gb;
-						gb  = 0;
+						gb = NULL;
+					}
+					else {
+						d = gb;
 					}
-					d = gb;
 				}
 				break;
 
diff --git a/dataobj/dingliste.h b/dataobj/dingliste.h
index 47e29d6..e936adc 100644
--- a/dataobj/dingliste.h
+++ b/dataobj/dingliste.h
@@ -41,6 +41,7 @@ public:
 
 	// since this is often needed, it is defined here
 	ding_t * get_leitung() const;
+	ding_t * get_convoi_vehicle() const;
 
 	// show all info about the current liste and its objects
 	void dump() const;
diff --git a/dataobj/einstellungen.cc b/dataobj/einstellungen.cc
index 306459e..b871212 100644
--- a/dataobj/einstellungen.cc
+++ b/dataobj/einstellungen.cc
@@ -15,6 +15,7 @@
 #include "../vehicle/simvehikel.h"
 #include "../player/simplay.h"
 #include "loadsave.h"
+#include "tabfile.h"
 
 einstellungen_t::einstellungen_t() :
 	filename(""),
@@ -34,9 +35,9 @@ einstellungen_t::einstellungen_t() :
 	anzahl_staedte = 16;
 	mittlere_einwohnerzahl = 1600;
 
-	station_coverage_size = 3;
+	station_coverage_size = 2;
 
-	verkehr_level = 7;
+	verkehr_level = 5;
 
 	show_pax = true;
 
@@ -57,7 +58,7 @@ einstellungen_t::einstellungen_t() :
 	use_timeline = 2;
 	starting_year = 1930;
 	starting_month = 0;
-	bits_per_month = 18;
+	bits_per_month = 20;
 
 	beginner_mode = false;
 	beginner_price_factor = 1500;
@@ -69,6 +70,21 @@ einstellungen_t::einstellungen_t() :
 	// passenger manipulation factor (=16 about old value)
 	passenger_factor = 16;
 
+	// town growth factors
+	passenger_multiplier = 40;
+	mail_multiplier = 20;
+	goods_multiplier = 20;
+	electricity_multiplier = 0;
+
+	// Also there are size dependen factors (0 causes crash !)
+	growthfactor_small = 400;
+	growthfactor_medium = 200;
+	growthfactor_large = 100;
+
+	factory_worker_percentage = 33;
+	tourist_percentage = 16;
+	factory_worker_radius = 77;
+
 	electric_promille = 330;
 
 #ifdef OTTD_LIKE
@@ -85,10 +101,10 @@ einstellungen_t::einstellungen_t() :
 	factory_spacing = 6;
 
 	/* prissi: do not distribute goods to overflowing factories */
-	just_in_time=true;
+	just_in_time = true;
 
 	fussgaenger = true;
-	stadtauto_duration = 120;	// ten years
+	stadtauto_duration = 36;	// three years
 
 	// to keep names consistent
 	numbered_stations = false;
@@ -96,8 +112,9 @@ einstellungen_t::einstellungen_t() :
 	strcpy( city_road_type, "city_road" );
 
 	max_route_steps = 1000000;
-	max_transfers = 7;
-	max_hops = 300;
+	max_transfers = 9;
+	max_hops = 2000;
+	no_routing_over_overcrowding = false;
 
 	/* multiplier for steps on diagonal:
 	 * 1024: TT-like, faktor 2, vehicle will be too long and too fast
@@ -144,9 +161,6 @@ einstellungen_t::einstellungen_t() :
 	cst_depot_road=-130000;
 	cst_depot_ship=-250000;
 	cst_depot_air=-500000;
-	cst_signal=-50000;
-	cst_tunnel=-1000000;
-	cst_third_rail=-8000;
 	// alter landscape
 	cst_buy_land=-10000;
 	cst_alter_land=-100000;
@@ -164,7 +178,7 @@ einstellungen_t::einstellungen_t() :
 	way_count_straight=1;
 	way_count_curve=2;
 	way_count_double_curve=6;
-	way_count_90_curve=50;
+	way_count_90_curve=15;
 	way_count_slope=10;
 	way_count_tunnel=8;
 	way_max_bridge_len=15;
@@ -177,6 +191,9 @@ einstellungen_t::einstellungen_t() :
 	pay_for_total_distance = TO_PREVIOUS;
 
 	avoid_overcrowding = false;
+
+	// default: load also private extensions of the pak file
+	with_private_paks = true;
 }
 
 
@@ -349,6 +366,21 @@ void einstellungen_t::rdwr(loadsave_t *file)
 			file->rdwr_short( origin_y, "oy" );
 
 			file->rdwr_long( passenger_factor, "" );
+
+			// town grow stuff
+			if(file->get_version()>102001) {
+				file->rdwr_long( passenger_multiplier, "" );
+				file->rdwr_long( mail_multiplier, "" );
+				file->rdwr_long( goods_multiplier, "" );
+				file->rdwr_long( electricity_multiplier, "" );
+				file->rdwr_long( growthfactor_small, "" );
+				file->rdwr_long( growthfactor_medium, "" );
+				file->rdwr_long( growthfactor_large, "" );
+				file->rdwr_short( factory_worker_percentage, "" );
+				file->rdwr_short( tourist_percentage, "" );
+				file->rdwr_short( factory_worker_radius, "" );
+			}
+
 			file->rdwr_long( electric_promille, "" );
 
 			file->rdwr_short( factory_spacing, "" );
@@ -391,9 +423,12 @@ void einstellungen_t::rdwr(loadsave_t *file)
 			file->rdwr_longlong( cst_depot_road, "" );
 			file->rdwr_longlong( cst_depot_ship, "" );
 			file->rdwr_longlong( cst_depot_air, "" );
-			file->rdwr_longlong( cst_signal, "" );
-			file->rdwr_longlong( cst_tunnel, "" );
-			file->rdwr_longlong( cst_third_rail, "" );
+			if(  file->get_version()<=102001  ) {
+				sint64 dummy64 = 100000;
+				file->rdwr_longlong( dummy64, "" );
+				file->rdwr_longlong( dummy64, "" );
+				file->rdwr_longlong( dummy64, "" );
+			}
 			// alter landscape
 			file->rdwr_longlong( cst_buy_land, "" );
 			file->rdwr_longlong( cst_alter_land, "" );
@@ -453,6 +488,10 @@ void einstellungen_t::rdwr(loadsave_t *file)
 		if(file->get_version()>102000) {
 			file->rdwr_bool( avoid_overcrowding, "" );
 		}
+		if(file->get_version()>102001) {
+			file->rdwr_bool( no_routing_over_overcrowding, "" );
+			file->rdwr_bool( with_private_paks, "" );
+		}
 	}
 }
 
@@ -460,75 +499,93 @@ void einstellungen_t::rdwr(loadsave_t *file)
 
 
 // read the settings from this file
-void einstellungen_t::parse_simuconf( tabfile_t &simuconf, sint16 &disp_width, sint16 &disp_height, sint16 &fullscreen, cstring_t &objfilename, bool einstellungen_only )
+void einstellungen_t::parse_simuconf( tabfile_t &simuconf, sint16 &disp_width, sint16 &disp_height, sint16 &fullscreen, cstring_t &objfilename )
 {
 	tabfileobj_t contents;
 
 	simuconf.read(contents);
 
-	if(  !einstellungen_only  ) {
-		umgebung_t::max_convoihandles = contents.get_int("convoys", umgebung_t::max_convoihandles );
-		umgebung_t::max_linehandles = contents.get_int("lines", umgebung_t::max_linehandles );
-		umgebung_t::max_halthandles = contents.get_int("stations", umgebung_t::max_halthandles );
-
-		umgebung_t::water_animation = contents.get_int("water_animation_ms", umgebung_t::water_animation);
-		umgebung_t::ground_object_probability = contents.get_int("random_grounds_probability", umgebung_t::ground_object_probability);
-		umgebung_t::moving_object_probability = contents.get_int("random_wildlife_probability", umgebung_t::moving_object_probability);
-		umgebung_t::drive_on_left = contents.get_int("drive_left", umgebung_t::drive_on_left );
-
-		umgebung_t::verkehrsteilnehmer_info = contents.get_int("pedes_and_car_info", umgebung_t::verkehrsteilnehmer_info) != 0;
-		umgebung_t::tree_info = contents.get_int("tree_info", umgebung_t::tree_info) != 0;
-		umgebung_t::ground_info = contents.get_int("ground_info", umgebung_t::ground_info) != 0;
-		umgebung_t::townhall_info = contents.get_int("townhall_info", umgebung_t::townhall_info) != 0;
-		umgebung_t::single_info = contents.get_int("only_single_info", umgebung_t::single_info);
-
-		umgebung_t::window_buttons_right = contents.get_int("window_buttons_right", umgebung_t::window_buttons_right);
-		umgebung_t::window_frame_active = contents.get_int("window_frame_active", umgebung_t::window_frame_active);
-
-		umgebung_t::show_tooltips = contents.get_int("show_tooltips", umgebung_t::show_tooltips);
-		umgebung_t::tooltip_color = contents.get_int("tooltip_background_color", umgebung_t::tooltip_color);
-		umgebung_t::tooltip_textcolor = contents.get_int("tooltip_text_color", umgebung_t::tooltip_textcolor);
-
-		// display stuff
-		umgebung_t::show_names = contents.get_int("show_names", umgebung_t::show_names);
-		umgebung_t::show_month = contents.get_int("show_month", umgebung_t::show_month);
-		umgebung_t::max_acceleration = contents.get_int("fast_forward", umgebung_t::max_acceleration);
-
-		umgebung_t::intercity_road_length = contents.get_int("intercity_road_length", umgebung_t::intercity_road_length);
-		const char *test = ltrim(contents.get("intercity_road_type"));
-		if(*test  &&  test) {
-			delete umgebung_t::intercity_road_type;
-			umgebung_t::intercity_road_type = strdup(test);
-		}
-
-		// up to ten rivers are possible
-		for(  int i = 0;  i<10;  i++  ) {
-			char name[32];
-			sprintf( name, "river_type[%i]", i );
-			const char *test = ltrim(contents.get(name));
-			if(test  &&  *test) {
-				umgebung_t::river_type[umgebung_t::river_types++] = strdup( test );
+	umgebung_t::water_animation = contents.get_int("water_animation_ms", umgebung_t::water_animation);
+	umgebung_t::ground_object_probability = contents.get_int("random_grounds_probability", umgebung_t::ground_object_probability);
+	umgebung_t::moving_object_probability = contents.get_int("random_wildlife_probability", umgebung_t::moving_object_probability);
+	umgebung_t::drive_on_left = contents.get_int("drive_left", umgebung_t::drive_on_left );
+
+	umgebung_t::verkehrsteilnehmer_info = contents.get_int("pedes_and_car_info", umgebung_t::verkehrsteilnehmer_info) != 0;
+	umgebung_t::tree_info = contents.get_int("tree_info", umgebung_t::tree_info) != 0;
+	umgebung_t::ground_info = contents.get_int("ground_info", umgebung_t::ground_info) != 0;
+	umgebung_t::townhall_info = contents.get_int("townhall_info", umgebung_t::townhall_info) != 0;
+	umgebung_t::single_info = contents.get_int("only_single_info", umgebung_t::single_info);
+
+	umgebung_t::window_buttons_right = contents.get_int("window_buttons_right", umgebung_t::window_buttons_right);
+	umgebung_t::window_frame_active = contents.get_int("window_frame_active", umgebung_t::window_frame_active);
+	umgebung_t::left_to_right_graphs = contents.get_int("left_to_right_graphs", umgebung_t::left_to_right_graphs);
+
+	umgebung_t::show_tooltips = contents.get_int("show_tooltips", umgebung_t::show_tooltips);
+	umgebung_t::tooltip_color = contents.get_int("tooltip_background_color", umgebung_t::tooltip_color);
+	umgebung_t::tooltip_textcolor = contents.get_int("tooltip_text_color", umgebung_t::tooltip_textcolor);
+	umgebung_t::cursor_overlay_color = contents.get_int("cursor_overlay_color", umgebung_t::cursor_overlay_color);
+
+	// display stuff
+	umgebung_t::show_names = contents.get_int("show_names", umgebung_t::show_names);
+	umgebung_t::show_month = contents.get_int("show_month", umgebung_t::show_month);
+	umgebung_t::max_acceleration = contents.get_int("fast_forward", umgebung_t::max_acceleration);
+
+	umgebung_t::intercity_road_length = contents.get_int("intercity_road_length", umgebung_t::intercity_road_length);
+	const char *test = ltrim(contents.get("intercity_road_type"));
+	if(*test) {
+		free( (void *)umgebung_t::intercity_road_type );
+		umgebung_t::intercity_road_type = NULL;
+		umgebung_t::intercity_road_type = strdup(test);
+	}
+
+	// up to ten rivers are possible
+	for(  int i = 0;  i<10;  i++  ) {
+		char name[32];
+		sprintf( name, "river_type[%i]", i );
+		const char *test = ltrim(contents.get(name));
+		if(*test) {
+			const int add_river = i<umgebung_t::river_types ? i : umgebung_t::river_types;
+			free( (void *)umgebung_t::river_type[add_river] );
+			umgebung_t::river_type[add_river] = NULL;
+			umgebung_t::river_type[add_river] = strdup( test );
+			if(  add_river==umgebung_t::river_types  ) {
+				umgebung_t::river_types++;
 			}
 		}
-
-		umgebung_t::autosave = (contents.get_int("autosave", umgebung_t::autosave));
-		umgebung_t::fps = contents.get_int("frames_per_second",umgebung_t::fps);
 	}
 
+	umgebung_t::autosave = (contents.get_int("autosave", umgebung_t::autosave));
+	umgebung_t::fps = contents.get_int("frames_per_second",umgebung_t::fps);
+
 	// routing stuff
 	max_route_steps = contents.get_int("max_route_steps", max_route_steps );
 	max_hops = contents.get_int("max_hops", max_hops );
 	max_transfers = contents.get_int("max_transfers", max_transfers );
 	passenger_factor = contents.get_int("passenger_factor", passenger_factor ); /* this can manipulate the passenger generation */
+	factory_worker_percentage = contents.get_int("factory_worker_percentage", factory_worker_percentage );
+	factory_worker_radius = contents.get_int("factory_worker_radius", factory_worker_radius );
+	tourist_percentage = contents.get_int("tourist_percentage", tourist_percentage );
 	seperate_halt_capacities = contents.get_int("seperate_halt_capacities", seperate_halt_capacities ) != 0;
 	pay_for_total_distance = contents.get_int("pay_for_total_distance", pay_for_total_distance );
 	avoid_overcrowding = contents.get_int("avoid_overcrowding", avoid_overcrowding )!=0;
+	no_routing_over_overcrowding = contents.get_int("no_routing_over_overcrowded", no_routing_over_overcrowding )!=0;
+
+	// city stuff
+	passenger_multiplier = contents.get_int("passenger_multiplier", passenger_multiplier );
+	mail_multiplier = contents.get_int("mail_multiplier", mail_multiplier );
+	goods_multiplier = contents.get_int("goods_multiplier", goods_multiplier );
+	electricity_multiplier = contents.get_int("electricity_multiplier", electricity_multiplier );
+
+	growthfactor_small = contents.get_int("growthfactor_villages", growthfactor_small );
+	growthfactor_medium = contents.get_int("growthfactor_cities", growthfactor_medium );
+	growthfactor_large = contents.get_int("growthfactor_capitals", growthfactor_large );
 
 	fussgaenger = contents.get_int("random_pedestrians", fussgaenger ) != 0;
 	show_pax = contents.get_int("stop_pedestrians", show_pax ) != 0;
+	verkehr_level = contents.get_int("citycar_level", verkehr_level);	// ten normal years
 	stadtauto_duration = contents.get_int("default_citycar_life", stadtauto_duration);	// ten normal years
 
-	starting_money = contents.get_int("starting_money", starting_money );
+	starting_money = contents.get_int64("starting_money", starting_money );
 	maint_building = contents.get_int("maintenance_building", maint_building);
 
 	numbered_stations = contents.get_int("numbered_stations", numbered_stations ) != 0;
@@ -562,32 +619,29 @@ void einstellungen_t::parse_simuconf( tabfile_t &simuconf, sint16 &disp_width, s
 	beginner_mode = contents.get_int("first_beginner", beginner_mode ); /* start in beginner mode */
 
 	/* now the cost section */
-	cst_multiply_dock = contents.get_int("cost_multiply_dock", cst_multiply_dock/(-100) ) * -100;
-	cst_multiply_station = contents.get_int("cost_multiply_station", cst_multiply_station/(-100) ) * -100;
-	cst_multiply_roadstop = contents.get_int("cost_multiply_roadstop", cst_multiply_roadstop/(-100) ) * -100;
-	cst_multiply_airterminal = contents.get_int("cost_multiply_airterminal", cst_multiply_airterminal/(-100) ) * -100;
-	cst_multiply_post = contents.get_int("cost_multiply_post", cst_multiply_post/(-100) ) * -100;
-	cst_multiply_headquarter = contents.get_int("cost_multiply_headquarter", cst_multiply_headquarter/(-100) ) * -100;
-	cst_depot_air = contents.get_int("cost_depot_air", cst_depot_air/(-100) ) * -100;
-	cst_depot_rail = contents.get_int("cost_depot_rail", cst_depot_rail/(-100) ) * -100;
-	cst_depot_road = contents.get_int("cost_depot_road", cst_depot_road/(-100) ) * -100;
-	cst_depot_ship = contents.get_int("cost_depot_ship", cst_depot_ship/(-100) ) * -100;
-	cst_signal = contents.get_int("cost_signal", cst_signal/(-100) ) * -100;
-	cst_tunnel = contents.get_int("cost_tunnel", cst_tunnel/(-100) ) * -100;
-	cst_third_rail = contents.get_int("cost_third_rail", cst_third_rail/(-100) ) * -100;
+	cst_multiply_dock = contents.get_int64("cost_multiply_dock", cst_multiply_dock/(-100) ) * -100;
+	cst_multiply_station = contents.get_int64("cost_multiply_station", cst_multiply_station/(-100) ) * -100;
+	cst_multiply_roadstop = contents.get_int64("cost_multiply_roadstop", cst_multiply_roadstop/(-100) ) * -100;
+	cst_multiply_airterminal = contents.get_int64("cost_multiply_airterminal", cst_multiply_airterminal/(-100) ) * -100;
+	cst_multiply_post = contents.get_int64("cost_multiply_post", cst_multiply_post/(-100) ) * -100;
+	cst_multiply_headquarter = contents.get_int64("cost_multiply_headquarter", cst_multiply_headquarter/(-100) ) * -100;
+	cst_depot_air = contents.get_int64("cost_depot_air", cst_depot_air/(-100) ) * -100;
+	cst_depot_rail = contents.get_int64("cost_depot_rail", cst_depot_rail/(-100) ) * -100;
+	cst_depot_road = contents.get_int64("cost_depot_road", cst_depot_road/(-100) ) * -100;
+	cst_depot_ship = contents.get_int64("cost_depot_ship", cst_depot_ship/(-100) ) * -100;
 
 	// alter landscape
-	cst_buy_land = contents.get_int("cost_buy_land", cst_buy_land/(-100) ) * -100;
-	cst_alter_land = contents.get_int("cost_alter_land", cst_alter_land/(-100) ) * -100;
-	cst_set_slope = contents.get_int("cost_set_slope", cst_set_slope/(-100) ) * -100;
-	cst_found_city = contents.get_int("cost_found_city", cst_found_city/(-100) ) * -100;
-	cst_multiply_found_industry = contents.get_int("cost_multiply_found_industry", cst_multiply_found_industry/(-100) ) * -100;
-	cst_remove_tree = contents.get_int("cost_remove_tree", cst_remove_tree/(-100) ) * -100;
-	cst_multiply_remove_haus = contents.get_int("cost_multiply_remove_haus", cst_multiply_remove_haus/(-100) ) * -100;
-	cst_multiply_remove_field = contents.get_int("cost_multiply_remove_field", cst_multiply_remove_field/(-100) ) * -100;
+	cst_buy_land = contents.get_int64("cost_buy_land", cst_buy_land/(-100) ) * -100;
+	cst_alter_land = contents.get_int64("cost_alter_land", cst_alter_land/(-100) ) * -100;
+	cst_set_slope = contents.get_int64("cost_set_slope", cst_set_slope/(-100) ) * -100;
+	cst_found_city = contents.get_int64("cost_found_city", cst_found_city/(-100) ) * -100;
+	cst_multiply_found_industry = contents.get_int64("cost_multiply_found_industry", cst_multiply_found_industry/(-100) ) * -100;
+	cst_remove_tree = contents.get_int64("cost_remove_tree", cst_remove_tree/(-100) ) * -100;
+	cst_multiply_remove_haus = contents.get_int64("cost_multiply_remove_haus", cst_multiply_remove_haus/(-100) ) * -100;
+	cst_multiply_remove_field = contents.get_int64("cost_multiply_remove_field", cst_multiply_remove_field/(-100) ) * -100;
 	// powerlines
-	cst_transformer = contents.get_int("cost_transformer", cst_transformer/(-100) ) * -100;
-	cst_maintain_transformer = contents.get_int("cost_maintain_transformer", cst_maintain_transformer/(-100) ) * -100;
+	cst_transformer = contents.get_int64("cost_transformer", cst_transformer/(-100) ) * -100;
+	cst_maintain_transformer = contents.get_int64("cost_maintain_transformer", cst_maintain_transformer/(-100) ) * -100;
 
 	/* now the way builder */
 	way_count_straight = contents.get_int("way_straight", way_count_straight);
@@ -600,8 +654,8 @@ void einstellungen_t::parse_simuconf( tabfile_t &simuconf, sint16 &disp_width, s
 	way_count_leaving_road = contents.get_int("way_leaving_road", way_count_leaving_road);
 
 	/*
-	* Selection of savegame format through inifile
-	*/
+	 * Selection of savegame format through inifile
+	 */
 	str = contents.get("saveformat");
 	while (*str == ' ') str++;
 	if (strcmp(str, "binary") == 0) {
@@ -621,10 +675,12 @@ void einstellungen_t::parse_simuconf( tabfile_t &simuconf, sint16 &disp_width, s
 	disp_height = contents.get_int("display_height", disp_height);
 	fullscreen = contents.get_int("fullscreen", fullscreen);
 
+	with_private_paks = contents.get_int("with_private_paks", with_private_paks)!=0;
+
 	// Default pak file path
 	objfilename = ltrim(contents.get_string("pak_file_path", "" ));
 
-	print("Reading simuconf.tab successful!\n");
+	printf("Reading simuconf.tab successful!\n");
 
 	simuconf.close();
 }
diff --git a/dataobj/einstellungen.h b/dataobj/einstellungen.h
index b5ff7f6..5bce5a6 100644
--- a/dataobj/einstellungen.h
+++ b/dataobj/einstellungen.h
@@ -4,7 +4,6 @@
 #include "../utils/cstring_t.h"
 #include "../simtypes.h"
 #include "../simconst.h"
-#include "tabfile.h"
 
 /**
  * Spieleinstellungen
@@ -15,6 +14,7 @@
  */
 
 class loadsave_t;
+class tabfile_t;
 
 class einstellungen_t
 {
@@ -33,6 +33,22 @@ private:
 	sint32 anzahl_staedte;
 	sint32 mittlere_einwohnerzahl;
 
+	// town growth factors
+	sint32 passenger_multiplier;
+	sint32 mail_multiplier;
+	sint32 goods_multiplier;
+	sint32 electricity_multiplier;
+
+	// Also there are size dependen factors (0=no growth)
+	sint32 growthfactor_small;
+	sint32 growthfactor_medium;
+	sint32 growthfactor_large;
+
+	// percentage of routing
+	sint16 factory_worker_percentage;
+	sint16 tourist_percentage;
+	sint16 factory_worker_radius;
+
 	uint16 station_coverage_size;
 
 	/**
@@ -150,6 +166,12 @@ private:
 	/* if set, goods will avoid being routed over overcrowded stops */
 	bool avoid_overcrowding;
 
+	/* if set, goods will not routed over overcroded stations but rather try detours (if possible) */
+	bool no_routing_over_overcrowding;
+
+	// true, if this pak should be used with extensions (default)
+	bool with_private_paks;
+
 public:
 	/* the big cost section */
 	sint32 maint_building;	// normal building
@@ -164,9 +186,6 @@ public:
 	sint64 cst_depot_road;
 	sint64 cst_depot_ship;
 	sint64 cst_depot_air;
-	sint64 cst_signal;
-	sint64 cst_tunnel;
-	sint64 cst_third_rail;
 
 	// alter landscape
 	sint64 cst_buy_land;
@@ -210,7 +229,7 @@ public:
 	void rdwr(loadsave_t *file);
 
 	// init form this file ...
-	void parse_simuconf( tabfile_t &simuconf, sint16 &disp_width, sint16 &disp_height, sint16 &fullscreen, cstring_t &objfilename, bool omit_umgebung );
+	void parse_simuconf( tabfile_t &simuconf, sint16 &disp_width, sint16 &disp_height, sint16 &fullscreen, cstring_t &objfilename );
 
 	void set_groesse_x(sint32 g) {groesse_x=g;}
 	void set_groesse_y(sint32 g) {groesse_y=g;}
@@ -263,6 +282,7 @@ public:
 	void set_starting_year(short n) {starting_year=n;}	// prissi, Oct-2005
 	short get_starting_year() const {return starting_year;}
 
+	void set_starting_month(short n) {starting_month=n;}
 	short get_starting_month() const {return starting_month;}
 
 	void set_bits_per_month(short n) {bits_per_month=n;}	// prissi, Oct-2005
@@ -283,7 +303,7 @@ public:
 	void set_winter_snowline(sint16 sl) { winter_snowline = sl; }
 	sint16 get_winter_snowline() const {return winter_snowline;}
 
-	void rotate90() { rotation = (rotation+1)&3; }
+	void rotate90() { rotation = (rotation+1)&3; set_groesse( groesse_y, groesse_x ); }
 	uint8 get_rotation() const { return rotation; }
 
 	void set_origin_x(sint16 x) { origin_x = x; }
@@ -295,25 +315,33 @@ public:
 	void set_freeplay( bool f ) { freeplay = f; }
 
 	sint32 get_max_route_steps() const { return max_route_steps; }
+	void set_max_route_steps(sint32 m) { max_route_steps=m; }
 	sint32 get_max_hops() const { return max_hops; }
+	void set_max_hops(sint32 m) { max_hops=m; }
 	sint32 get_max_transfers() const { return max_transfers; }
+	void set_max_transfers(sint32 m) { max_transfers=m; }
 
 	sint64 get_starting_money() const { return starting_money; }
+	void set_starting_money(sint64 s) { starting_money = s; }
 
 	bool get_random_pedestrians() const { return fussgaenger; }
-	void set_random_pedestrians( bool f ) { fussgaenger = f; }	// NETWORK!
+	void set_random_pedestrians( bool f ) { fussgaenger = f; }
 
 	sint16 get_factory_spacing() const { return factory_spacing; }
+	void set_factory_spacing(sint16 s) { factory_spacing = s; }
 	sint16 get_crossconnect_factor() const { return crossconnect_factor; }
+	void set_crossconnect_factor(sint16 s) { crossconnect_factor = s; }
 	bool is_crossconnect_factories() const { return crossconnect_factories; }
+	void set_crossconnect_factories( bool f ) { crossconnect_factories = f; }
 
-	sint32 get_passenger_factor() const { return passenger_factor; }
-
-	sint32 get_numbered_stations() const { return numbered_stations; }
+	bool get_numbered_stations() const { return numbered_stations; }
+	void set_numbered_stations(bool b) { numbered_stations = b; }
 
 	sint32 get_stadtauto_duration() const { return stadtauto_duration; }
+	void set_stadtauto_duration(sint32 d) { stadtauto_duration = d; }
 
 	sint32 get_beginner_price_factor() const { return beginner_price_factor; }
+	void set_beginner_price_factor(sint32 s) { beginner_price_factor = s; }
 
 	const char *get_city_road_type() const { return city_road_type; }
 
@@ -336,12 +364,17 @@ public:
 	void set_seperate_halt_capacities( bool b ) { seperate_halt_capacities = b; }
 
 	// allowed modes are 0,1,2
-	enum { TO_PREVIOUS, TO_TRANSFER, TO_DESTINATION };
+	enum { TO_PREVIOUS=0, TO_TRANSFER, TO_DESTINATION };
 	uint8 get_pay_for_total_distance_mode() const { return pay_for_total_distance ; }
 	void set_pay_for_total_distance_mode( uint8 b ) { pay_for_total_distance = b < 2 ? b : 0; }
 
 	// do not take people to overcrowded destinations
-	bool get_avoid_overcrowding() const { return avoid_overcrowding; }
+	bool is_avoid_overcrowding() const { return avoid_overcrowding; }
+	void set_avoid_overcrowding( bool b ) { avoid_overcrowding = b; }
+
+	// do not allow routes over overcrowded destinations
+	bool is_no_routing_over_overcrowding() const { return no_routing_over_overcrowding; }
+	void set_no_routing_over_overcrowding( bool b ) { no_routing_over_overcrowding = b; }
 
 	sint16 get_river_number() const { return river_number; }
 	void set_river_number( sint16 n ) { river_number=n; }
@@ -349,6 +382,41 @@ public:
 	void set_min_river_length( sint16 n ) { min_river_length=n; }
 	sint16 get_max_river_length() const { return max_river_length; }
 	void set_max_river_length( sint16 n ) { max_river_length=n; }
+
+	// true, if this pak should be used with extensions (default)
+	bool get_with_private_paks() const { return with_private_paks; }
+	void set_with_private_paks(bool b) { with_private_paks = b; }
+
+	sint32 get_passenger_factor() const { return passenger_factor; }
+	void set_passenger_factor(sint32 n) { passenger_factor = n; }
+
+	// town growth stuff
+	sint32 get_passenger_multiplier() const { return passenger_multiplier; }
+	void set_passenger_multiplier(sint32 n) { passenger_multiplier = n; }
+	sint32 get_mail_multiplier() const { return mail_multiplier; }
+	void set_mail_multiplier(sint32 n) { mail_multiplier = n; }
+	sint32 get_goods_multiplier() const { return goods_multiplier; }
+	void set_goods_multiplier(sint32 n) { goods_multiplier = n; }
+	sint32 get_electricity_multiplier() const { return electricity_multiplier; }
+	void set_electricity_multiplier(sint32 n) { electricity_multiplier = n; }
+
+	// Also there are size dependen factors (0=no growth)
+	sint32 get_growthfactor_small() const { return growthfactor_small; }
+	void set_growthfactor_small(sint32 n) { growthfactor_small = n; }
+	sint32 get_growthfactor_medium() const { return growthfactor_medium; }
+	void set_growthfactor_medium(sint32 n) { growthfactor_medium = n; }
+	sint32 get_growthfactor_large() const { return growthfactor_large; }
+	void set_growthfactor_large(sint32 n) { growthfactor_large = n; }
+
+	// amount of different destinations
+	sint32 get_factory_worker_percentage() const { return factory_worker_percentage; }
+	void set_factory_worker_percentage(sint32 n) { factory_worker_percentage = n; }
+	sint32 get_tourist_percentage() const { return tourist_percentage; }
+	void set_tourist_percentage(sint32 n) { tourist_percentage = n; }
+
+	// radius within factories belog to towns (usually set to 77 but 1/8 of map size may be meaningful too)
+	sint32 get_factory_worker_radius() const { return factory_worker_radius; }
+	void set_factory_worker_radius(sint32 n) { factory_worker_radius = n; }
 };
 
 #endif
diff --git a/dataobj/fahrplan.cc b/dataobj/fahrplan.cc
index ee2cb0d..ef0ab2c 100644
--- a/dataobj/fahrplan.cc
+++ b/dataobj/fahrplan.cc
@@ -57,9 +57,8 @@ void schedule_t::copy_from(const schedule_t *src)
 	for(  uint8 i=0;  i<src->eintrag.get_count();  i++  ) {
 		eintrag.append(src->eintrag[i]);
 	}
-	if(  aktuell>=eintrag.get_count()  ) {
-		aktuell = max(1,eintrag.get_count())-1;
-	}
+	set_aktuell( src->get_aktuell() );
+
 	abgeschlossen = src->ist_abgeschlossen();
 }
 
diff --git a/dataobj/freelist.cc b/dataobj/freelist.cc
index dc359fa..1a9ad51 100644
--- a/dataobj/freelist.cc
+++ b/dataobj/freelist.cc
@@ -56,14 +56,23 @@ static nodelist_node_t *all_lists[NUM_LIST] = {
 };
 
 
-void *
-freelist_t::gimme_node(int size)
+// to have this working, we need chunks at least the size of a pointer
+const size_t min_size = sizeof(void *);
+
+
+
+void *freelist_t::gimme_node(size_t size)
 {
 	nodelist_node_t ** list = NULL;
 	if(size==0) {
 		return NULL;
 	}
 
+	// all sizes should be dividable by 4 and at least as large as a pointer
+	size = max( min_size, size );
+	size = (size+3)>>2;
+	size <<= 2;
+
 	// hold return value
 	nodelist_node_t *tmp;
 	if(size>MAX_LIST_INDEX) {
@@ -85,12 +94,12 @@ freelist_t::gimme_node(int size)
 		}
 	}
 	else {
-		list = &(all_lists[(size+3)/4]);
+		list = &(all_lists[size/4]);
 	}
 
 	// need new memory?
 	if(*list==NULL) {
-		int num_elements = 32764/size;
+		int num_elements = 32764/(int)size;
 		char* p = (char*)xmalloc(num_elements * size + sizeof(p));
 		// put the memory into the chunklist for free it
 		nodelist_node_t *chunk = (nodelist_node_t *)p;
@@ -137,33 +146,37 @@ static void putback_check_node(nodelist_node_t** list, nodelist_node_t* p)
 #endif
 
 
-void
-freelist_t::putback_node(int size,void *p)
+void freelist_t::putback_node( size_t size, void *p )
 {
 	nodelist_node_t ** list = NULL;
 	if(size==0  ||  p==NULL) {
 		return;
 	}
+
+	// all sizes should be dividable by 4
+	size = max( min_size, size );
+	size = ((size+3)>>2);
+
 	if(size>MAX_LIST_INDEX) {
 		switch(size) {
 			case message_node_size:
 				list = &message_nodes;
 				break;
-			case 1220:
+			case 1220/4:
 				list = &node1220;
 				break;
-			case 1624:
+			case 1624/4:
 				list = &node1624;
 				break;
-			case 2440:
+			case 2440/4:
 				list = &node2440;
 				break;
 			default:
-				dbg->fatal("freelist_t::gimme_node()","No list with size %i! (only up to %i and %i, 1220, 1624, 2440)", size, MAX_LIST_INDEX, message_node_size );
+				dbg->fatal("freelist_t::gimme_node()","No list with size %i! (only up to %i and %i, 1220, 1624, 2440)", size*4, MAX_LIST_INDEX, message_node_size );
 		}
 	}
 	else {
-		list = &(all_lists[(size+3)/4]);
+		list = &(all_lists[size]);
 	}
 #ifdef DEBUG_MEM
 	putback_check_node(list,(nodelist_node_t *)p);
diff --git a/dataobj/freelist.h b/dataobj/freelist.h
index f817efc..06994a7 100644
--- a/dataobj/freelist.h
+++ b/dataobj/freelist.h
@@ -10,8 +10,8 @@
 class freelist_t
 {
 public:
-	static void *gimme_node(int size);
-	static void putback_node(int size,void *p);
+	static void *gimme_node( size_t size );
+	static void putback_node( size_t size, void *p );
 
 	// clears all list memories
 	static void free_all_nodes();
diff --git a/dataobj/koord.h b/dataobj/koord.h
index 737fa49..a984c6b 100644
--- a/dataobj/koord.h
+++ b/dataobj/koord.h
@@ -1,8 +1,7 @@
 #ifndef KOORD_H
 #define KOORD_H
 
-#include <cstdlib>
-#include <assert.h>
+#include <stdlib.h>
 
 #include "ribi.h"
 #include "../simtypes.h"
@@ -72,7 +71,7 @@ private:
 };
 
 
-static inline uint32 abs_distance(const koord &a, const koord &b)
+static inline uint32 koord_distance(const koord &a, const koord &b)
 {
 	return abs(a.x - b.x) + abs(a.y - b.y);
 }
@@ -121,25 +120,4 @@ static inline koord operator - (const koord &a)
 	return koord(-a.x, -a.y);
 }
 
-/**
- * Ordering based on relative distance to a fixed point `origin'.
- */
-class RelativeDistanceOrdering
-{
-private:
-	const koord m_origin;
-public:
-	RelativeDistanceOrdering(const koord& origin)
-		: m_origin(origin)
-	{ /* nothing */ }
-
-	/**
-	 * Returns true if `a' is closer to the origin than `b', otherwise false.
-	 */
-	bool operator()(const koord& a, const koord& b) const
-	{
-		return abs_distance(m_origin, a) < abs_distance(m_origin, b);
-	}
-};
-
 #endif
diff --git a/dataobj/koord3d.cc b/dataobj/koord3d.cc
index 072ceaa..dd63289 100644
--- a/dataobj/koord3d.cc
+++ b/dataobj/koord3d.cc
@@ -69,3 +69,43 @@ const char *koord3d::get_str() const
 	sprintf( pos_str, "%i,%i,%i", x, y, z );
 	return pos_str;
 }
+
+
+ribi_t::ribi koord3d_vector_t::get_ribi( uint32 index ) const
+{
+	ribi_t::ribi ribi = ribi_t::keine;
+	koord3d pos = operator[](index);
+	if( index > 0 ) {
+		ribi |= ribi_typ( operator[](index-1).get_2d()-pos.get_2d() );
+	}
+	if( index+1 < get_count() ) {
+		ribi |= ribi_typ( operator[](index+1).get_2d()-pos.get_2d() );
+	}
+	return ribi;
+}
+
+ribi_t::ribi koord3d_vector_t::get_short_ribi( uint32 index ) const
+{
+	ribi_t::ribi ribi = ribi_t::keine;
+	const koord pos = operator[](index).get_2d();
+	if( index > 0 ) {
+		const koord pos2 = operator[](index-1).get_2d();
+		if (koord_distance(pos,pos2)<=1) {
+			ribi |= ribi_typ( pos2-pos );
+		}
+	}
+	if( index+1 < get_count() ) {
+		const koord pos2 = operator[](index+1).get_2d();
+		if (koord_distance(pos,pos2)<=1) {
+			ribi |= ribi_typ( pos2-pos );
+		}
+	}
+	return ribi;
+}
+
+void koord3d_vector_t::rotate90( sint16 y_size )
+{
+	for( uint32 i = 0; i < get_count(); i++ ) {
+		operator[](i).rotate90( y_size );
+	}
+}
diff --git a/dataobj/koord3d.h b/dataobj/koord3d.h
index 5e5e2a3..0609239 100644
--- a/dataobj/koord3d.h
+++ b/dataobj/koord3d.h
@@ -2,8 +2,10 @@
 #define KOORD3D_H
 
 #include <stdlib.h>
-#include "../simtypes.h"
 #include "koord.h"
+#include "ribi.h"
+#include "../simtypes.h"
+#include "../tpl/vector_tpl.h"
 
 
 /**
@@ -108,27 +110,36 @@ static inline koord3d operator - (const koord3d& a, const koord& b)
 }
 
 
-static inline int koord_distance(koord a, koord b)
+static inline uint32 koord_distance(koord3d a, koord b)
 {
 	return abs(a.x - b.x) + abs(a.y - b.y);
 }
 
 
-static inline int koord_distance(koord3d a, koord b)
+static inline uint32 koord_distance(koord a, koord3d b)
 {
 	return abs(a.x - b.x) + abs(a.y - b.y);
 }
 
 
-static inline int koord_distance(koord a, koord3d b)
+static inline uint32 koord_distance(koord3d a, koord3d b)
 {
 	return abs(a.x - b.x) + abs(a.y - b.y);
 }
 
+/*
+ * This class defines a vector_tpl<koord3d> with some
+ * helper functions
+ * @author Gerd Wachsmuth
+ */
 
-static inline int koord_distance(koord3d a, koord3d b)
-{
-	return abs(a.x - b.x) + abs(a.y - b.y);
-}
+class koord3d_vector_t : public vector_tpl< koord3d > {
+public:
+	// computes ribi at position i
+	ribi_t::ribi get_ribi( uint32 index ) const;
+	// computes ribi at position i only if distance to previous/next is not larger than 1
+	ribi_t::ribi get_short_ribi( uint32 index ) const;
+	void rotate90( sint16 );
+};
 
 #endif
diff --git a/dataobj/loadsave.cc b/dataobj/loadsave.cc
index f84fe15..60638c6 100644
--- a/dataobj/loadsave.cc
+++ b/dataobj/loadsave.cc
@@ -218,7 +218,8 @@ int loadsave_t::lsputc(int c)
 {
 	if(is_zipped()) {
 		return gzputc(fp, c);
-	} else {
+	}
+	else {
 		return fputc(c, fp);
 	}
 }
@@ -227,25 +228,28 @@ int loadsave_t::lsgetc()
 {
 	if(is_zipped()) {
 		return gzgetc(fp);
-	} else {
+	}
+	else {
 		return fgetc(fp);
 	}
 }
 
-long loadsave_t::write(const void *buf, unsigned long len)
+long loadsave_t::write(const void *buf, size_t len)
 {
 	if(is_zipped()) {
 		return gzwrite(fp, const_cast<void *>(buf), len);
-	} else {
+	}
+	else {
 		return (long)fwrite(buf, 1, len, fp);
 	}
 }
 
-long loadsave_t::read(void *buf, unsigned long len)
+long loadsave_t::read(void *buf, size_t len)
 {
 	if(is_zipped()) {
 		return gzread(fp, buf, len);
-	} else {
+	}
+	else {
 		return (long)fread(buf, 1, len, fp);
 	}
 }
@@ -285,7 +289,8 @@ void loadsave_t::rdwr_short(sint16 &i, const char *)
 		if(saving) {
 			sint16 ii = (sint16)endian_uint16((uint16 *)&i);
 			write(&ii, sizeof(sint16));
-		} else {
+		}
+		else {
 			uint16 ii;
 			read(&ii, sizeof(sint16));
 			i = (sint16)endian_uint16(&ii);
@@ -293,7 +298,8 @@ void loadsave_t::rdwr_short(sint16 &i, const char *)
 #else
 		if(saving) {
 			write(&i, sizeof(sint16));
-		} else {
+		}
+		else {
 			read(&i, sizeof(sint16));
 		}
 #endif
@@ -321,7 +327,8 @@ void loadsave_t::rdwr_long(sint32 &l, const char *)
 		if(saving) {
 			uint32 ii = (sint32)endian_uint32((uint32 *)&l);
 			write(&ii, sizeof(uint32));
-		} else {
+		}
+		else {
 			uint32 ii;
 			read(&ii, sizeof(uint32));
 			l = (sint32)endian_uint32(&ii);
@@ -329,7 +336,8 @@ void loadsave_t::rdwr_long(sint32 &l, const char *)
 #else
 		if(saving) {
 			write(&l, sizeof(sint32));
-		} else {
+		}
+		else {
 			read(&l, sizeof(sint32));
 		}
 #endif
@@ -356,7 +364,8 @@ void loadsave_t::rdwr_longlong(sint64 &ll, const char *)
 		if(saving) {
 			sint64 ii = (sint64)endian_uint64((uint64 *)&ll);
 			write(&ii, sizeof(sint64));
-		} else {
+		}
+		else {
 			uint64 ii;
 			read(&ii, sizeof(sint64));
 			ll = (sint64)endian_uint64(&ii);
@@ -364,7 +373,8 @@ void loadsave_t::rdwr_longlong(sint64 &ll, const char *)
 #else
 		if(saving) {
 			write(&ll, sizeof(sint64));
-		} else {
+		}
+		else {
 			read(&ll, sizeof(sint64));
 		}
 #endif
@@ -381,7 +391,8 @@ void loadsave_t::rdwr_double(double &dbl)
 	if(!is_xml()) {
 		if(saving) {
 			write(&dbl, sizeof(double));
-		} else {
+		}
+		else {
 			read(&dbl, sizeof(double));
 		}
 	}
@@ -410,7 +421,8 @@ void loadsave_t::rdwr_bool(bool &i, const char *)
 		if(saving) {
 			if(is_zipped()) {
 				gzprintf(fp, "%*s<bool>%s</bool>\n", ident, "", i ? "true" : "false" );
-			} else {
+			}
+			else {
 				fprintf(fp, "%*s<bool>%s</bool>\n", ident, "", i ? "true" : "false" );
 			}
 		}
@@ -514,7 +526,7 @@ void loadsave_t::rdwr_str(const char *&s)
 	if(!is_xml()) {
 		sint16 size;
 		if(saving) {
-			size = s ? strlen(s) : 0;
+			size = s ? (sint16)min(32767,strlen(s)) : 0;
 #ifdef BIG_ENDIAN
 			{
 				uint16 ii = endian_uint16((uint16 *)&size);
@@ -555,7 +567,8 @@ void loadsave_t::rdwr_str(const char *&s)
 			const char *str = s ? s: "";
 			if(is_zipped()) {
 				gzprintf(fp, "%*s<![CDATA[%s]]>\n", ident, "", str );
-			} else {
+			}
+			else {
 				fprintf(fp, "%*s<![CDATA[%s]]>\n", ident, "", str );
 			}
 		}
@@ -578,19 +591,19 @@ void loadsave_t::rdwr_str(char *s, int size)
 	if(!is_xml()) {
 		sint16 len;
 		if(saving) {
-			len = strlen(s);
+			len = (sint16)min(32767,strlen(s));
 #ifdef BIG_ENDIAN
 			{
 				sint16 ii = (sint16)endian_uint16((uint16 *)&len);
 				write(&ii, sizeof(sint16));
 			}
 #else
-			write(&len, sizeof(short));
+			write(&len, sizeof(sint16));
 #endif
 			write(s, len);
 		}
 		else {
-			read(&len, sizeof(short));
+			read(&len, sizeof(sint16));
 #ifdef BIG_ENDIAN
 			len = (sint16)endian_uint16((uint16 *)&len);
 #endif
@@ -607,7 +620,8 @@ void loadsave_t::rdwr_str(char *s, int size)
 			const char *str = s ? s: "";
 			if(is_zipped()) {
 				gzprintf(fp, "%*s<![CDATA[%s]]>\n", ident, "", str );
-			} else {
+			}
+			else {
 				fprintf(fp, "%*s<![CDATA[%s]]>\n", ident, "", str );
 			}
 		}
@@ -721,14 +735,16 @@ void loadsave_t::wr_obj_id(const char *id_text)
 		if(  !is_xml()  ) {
 			if(is_zipped()) {
 				gzprintf(fp, "%s\n", id_text);
-			} else {
+			}
+			else {
 				fprintf(fp, "%s\n", id_text);
 			}
 		}
 		else {
 			if(is_zipped()) {
 				gzprintf(fp, "<id=\"%s\"/>\n", id_text);
-			} else {
+			}
+			else {
 				fprintf(fp, "<id=\"%s\"/>\n", id_text);
 			}
 		}
@@ -807,9 +823,11 @@ uint32 loadsave_t::int_version(const char *version_text, int *mode, char *pak_ex
 		}
 		if(!strncmp(version_text, "bin", 3)) {
 			*mode = binary;
-		} else if(!strncmp(version_text, "zip", 3)) {
+		}
+		else if(!strncmp(version_text, "zip", 3)) {
 			*mode = zipped;
-		} else {
+		}
+		else {
 			*mode = text;
 		}
 
@@ -836,14 +854,15 @@ void loadsave_t::start_tag(const char *tag)
 		if(saving) {
 			if(is_zipped()) {
 				gzprintf(fp, "%*s<%s>\n", ident, "", tag);
-			} else {
+			}
+			else {
 				fprintf(fp, "%*s<%s>\n", ident, "", tag);
 			}
 			ident ++;
 		}
 		else {
 			char buf[256];
-			const int len = strlen(tag);
+			const size_t len = strlen(tag);
 			// find start of tag
 			while(  lsgetc()!='<'  ) { /* nothing */ }
 			read( buf, len );
@@ -863,7 +882,8 @@ void loadsave_t::end_tag(const char *tag)
 			ident --;
 			if(is_zipped()) {
 				gzprintf(fp, "%*s</%s>\n", ident, "", tag);
-			} else {
+			}
+			else {
 				fprintf(fp, "%*s</%s>\n", ident, "", tag);
 			}
 		}
diff --git a/dataobj/loadsave.h b/dataobj/loadsave.h
index 7f9b82f..d2946cb 100644
--- a/dataobj/loadsave.h
+++ b/dataobj/loadsave.h
@@ -49,8 +49,8 @@ private:
 
 	// Hajo: getc got a name clash on my system
 	int lsgetc();
-	long write(const void * buf, unsigned long len);
-	long read (void *buf, unsigned long len);
+	long write(const void * buf, size_t len);
+	long read(void *buf, size_t len);
 
 	void rdwr_xml_number(sint64 &s, const char *typ);
 
diff --git a/dataobj/marker.cc b/dataobj/marker.cc
index 493f4cd..22104c3 100644
--- a/dataobj/marker.cc
+++ b/dataobj/marker.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997 - 2001 Hansjörg Malthaner
+ * Copyright (c) 1997 - 2001 Hansj�rg Malthaner
  *
  * This file is part of the Simutrans project under the artistic licence.
  * (see licence.txt)
@@ -45,8 +45,8 @@ void marker_t::unmarkiere_alle()
 void marker_t::markiere(const grund_t *gr)
 {
 	if(gr != NULL) {
-		if(gr->get_typ()<=grund_t::fundament) {
-			// these types (boden, wasser, fundament) are always at ground level
+		if(gr->ist_karten_boden()) {
+			// ground level
 			const int bit = gr->get_pos().y*cached_groesse+gr->get_pos().x;
 			bits[bit/bit_unit] |= 1 << (bit & bit_mask);
 		}
@@ -59,8 +59,8 @@ void marker_t::markiere(const grund_t *gr)
 void marker_t::unmarkiere(const grund_t *gr)
 {
 	if(gr != NULL) {
-		if(gr->get_typ()<=grund_t::fundament) {
-			// these types (boden, wasser, fundament) are always at ground level
+		if(gr->ist_karten_boden()) {
+			// ground level
 			const int bit = gr->get_pos().y*cached_groesse+gr->get_pos().x;
 			bits[bit/bit_unit] &= ~(1 << (bit & bit_mask));
 		}
@@ -75,8 +75,8 @@ bool marker_t::ist_markiert(const grund_t *gr) const
 	if(gr==NULL) {
 		return false;
 	}
-	if(gr->get_typ()<=grund_t::fundament) {
-		// these types (boden, wasser, fundament) are always at ground level
+	if(gr->ist_karten_boden()) {
+		// ground level
 		const int bit = gr->get_pos().y*cached_groesse+gr->get_pos().x;
 		return (bits[bit/bit_unit] & (1 << (bit & bit_mask))) != 0;
 	}
diff --git a/dataobj/ribi.cc b/dataobj/ribi.cc
index ad427b9..90fff5b 100644
--- a/dataobj/ribi.cc
+++ b/dataobj/ribi.cc
@@ -12,337 +12,357 @@
 #include "koord3d.h"
 
 const ribi_t::ribi ribi_t::nsow[4] = {
-    nord,
-    sued,
-    ost,
-    west
+	nord,
+	sued,
+	ost,
+	west
 };
 
 // same like the layouts of buildings
 const ribi_t::ribi ribi_t::layout_to_ribi[4] = {
-    sued,
-    ost,
-    nord,
-    west
+	sued,
+	ost,
+	nord,
+	west
 };
 
 const int ribi_t::flags[16] = {
-    0,										// keine
-    einfach | gerade_ns,	// nord
-    einfach | gerade_ow,	// ost
-    kurve | twoway,				// nordost
-    einfach | gerade_ns,	// sued
-    gerade_ns | twoway,		// nordsued
-    kurve | twoway,				// suedost
-    threeway,							// nordsuedost
-    einfach | gerade_ow,	// west
-    kurve | twoway,				// nordwest
-    gerade_ow | twoway,		// ostwest
-    threeway,							// nordostwest
-    kurve | twoway,				// suedwest
-    threeway,							// nordsuedwest
-    threeway,							// suedostwest
-    threeway,							// alle
+	0,										// keine
+	einfach | gerade_ns,	// nord
+	einfach | gerade_ow,	// ost
+	kurve | twoway,				// nordost
+	einfach | gerade_ns,	// sued
+	gerade_ns | twoway,		// nordsued
+	kurve | twoway,				// suedost
+	threeway,							// nordsuedost
+	einfach | gerade_ow,	// west
+	kurve | twoway,				// nordwest
+	gerade_ow | twoway,		// ostwest
+	threeway,							// nordostwest
+	kurve | twoway,				// suedwest
+	threeway,							// nordsuedwest
+	threeway,							// suedostwest
+	threeway,							// alle
 };
 
 const ribi_t::ribi ribi_t::rwr[16] = {
-    alle,			// keine
-    sued,			// nord
-    west,			// ost
-    suedwest,			// nordost
-    nord,			// sued
-    nordsued,			// nordsued
-    nordwest,			// suedost
-    west,			// nordsuedost
-    ost,			// west
-    suedost,			// nordwest
-    ostwest,			// ostwest
-    sued,			// nordostwest
-    nordost,			// suedwest
-    ost,			// nordsuedwest
-    nord,			// suedostwest
-    keine			// alle
+	alle,			// keine
+	sued,			// nord
+	west,			// ost
+	suedwest,			// nordost
+	nord,			// sued
+	nordsued,			// nordsued
+	nordwest,			// suedost
+	west,			// nordsuedost
+	ost,			// west
+	suedost,			// nordwest
+	ostwest,			// ostwest
+	sued,			// nordostwest
+	nordost,			// suedwest
+	ost,			// nordsuedwest
+	nord,			// suedostwest
+	keine			// alle
 };
 
 const ribi_t::ribi ribi_t::doppelr[16] = {
-    keine,			// keine
-    nordsued,			// nord
-    ostwest,			// ost
-    keine,			// nordost
-    nordsued,			// sued
-    nordsued,			// nordsued
-    keine,			// suedost
-    keine,			// nordsuedost
-    ostwest,			// west
-    keine,			// nordwest
-    ostwest,			// ostwest
-    keine,			// nordostwest
-    keine,			// suedwest
-    keine,			// nordsuedwest
-    keine,			// suedostwest
-    keine			// alle
+	keine,			// keine
+	nordsued,			// nord
+	ostwest,			// ost
+	keine,			// nordost
+	nordsued,			// sued
+	nordsued,			// nordsued
+	keine,			// suedost
+	keine,			// nordsuedost
+	ostwest,			// west
+	keine,			// nordwest
+	ostwest,			// ostwest
+	keine,			// nordostwest
+	keine,			// suedwest
+	keine,			// nordsuedwest
+	keine,			// suedostwest
+	keine			// alle
 };
 
 const ribi_t::ribi ribi_t::fwrd[16] = {
-    alle,			// keine
-    nordostwest,	// nord
-    nordsuedost,	// ost
-    nordost,			// nordost
-    suedostwest,	// sued
-    keine,				// nordsued
-    suedost,			// suedost
-    keine,				// nordsuedost
-    nordsuedwest,	// west
-    nordwest,			// nordwest
-    keine,				// ostwest
-    keine,				// nordostwest
-    suedwest,			// suedwest
-    keine,				// nordsuedwest
-    keine,				// suedostwest
-    keine			// alle
+	alle,			// keine
+	nordostwest,	// nord
+	nordsuedost,	// ost
+	nordost,			// nordost
+	suedostwest,	// sued
+	keine,				// nordsued
+	suedost,			// suedost
+	keine,				// nordsuedost
+	nordsuedwest,	// west
+	nordwest,			// nordwest
+	keine,				// ostwest
+	keine,				// nordostwest
+	suedwest,			// suedwest
+	keine,				// nordsuedwest
+	keine,				// suedostwest
+	keine			// alle
 };
 
 #ifndef DOUBLE_GROUNDS
 
 // single height hangs
 static const ribi_t::ribi from_hang[16] = {
-    ribi_t::keine,		// 0:flach
-    ribi_t::suedwest,	// 1:spitze SW
-    ribi_t::suedost,	// 2:spitze SO
-    ribi_t::sued,		// 3:nordhang
-    ribi_t::nordost,	// 4:spitze NO
-    ribi_t::alle,		// 5:spitzen SW+NO
-    ribi_t::ost,		// 6:westhang
-    ribi_t::suedost,	// 7:tal NW
-    ribi_t::nordwest,	// 8:spitze NW
-    ribi_t::west,		// 9:osthang
-    ribi_t::alle,		// 10:spitzen NW+SO
-    ribi_t::suedwest,	// 11:tal NO
-    ribi_t::nord,		// 12:suedhang
-    ribi_t::nordwest,	// 13:tal SO
-    ribi_t::nordost,	// 14:tal SW
-    ribi_t::keine		// 15:alles oben
+	ribi_t::keine,		// 0:flach
+	ribi_t::suedwest,	// 1:spitze SW
+	ribi_t::suedost,	// 2:spitze SO
+	ribi_t::sued,		// 3:nordhang
+	ribi_t::nordost,	// 4:spitze NO
+	ribi_t::alle,		// 5:spitzen SW+NO
+	ribi_t::ost,		// 6:westhang
+	ribi_t::suedost,	// 7:tal NW
+	ribi_t::nordwest,	// 8:spitze NW
+	ribi_t::west,		// 9:osthang
+	ribi_t::alle,		// 10:spitzen NW+SO
+	ribi_t::suedwest,	// 11:tal NO
+	ribi_t::nord,		// 12:suedhang
+	ribi_t::nordwest,	// 13:tal SO
+	ribi_t::nordost,	// 14:tal SW
+	ribi_t::keine		// 15:alles oben
 };
 
 const int hang_t::flags[16] = {
-    wegbar_ns|wegbar_ow,	// 0:flach
-    0,				// 1:spitze SW
-    0,				// 2:spitze SO
-    wegbar_ns|einfach,		// 3:nordhang
-    0,				// 4:spitze NO
-    0,				// 5:spitzen SW+NO
-    wegbar_ow|einfach,		// 6:westhang
-    0,				// 7:tal NW
-    0,				// 8:spitze NW
-    wegbar_ow|einfach,		// 9:osthang
-    0,				// 10:spitzen NW+SO
-    0,				// 11:tal NO
-    wegbar_ns|einfach,		// 12:suedhang
-    0,				// 13:tal SO
-    0,				// 14:tal SW
-    wegbar_ns|wegbar_ow 	// 15:alles oben
+	wegbar_ns|wegbar_ow,	// 0:flach
+	0,				// 1:spitze SW
+	0,				// 2:spitze SO
+	wegbar_ns|einfach,		// 3:nordhang
+	0,				// 4:spitze NO
+	0,				// 5:spitzen SW+NO
+	wegbar_ow|einfach,		// 6:westhang
+	0,				// 7:tal NW
+	0,				// 8:spitze NW
+	wegbar_ow|einfach,		// 9:osthang
+	0,				// 10:spitzen NW+SO
+	0,				// 11:tal NO
+	wegbar_ns|einfach,		// 12:suedhang
+	0,				// 13:tal SO
+	0,				// 14:tal SW
+	wegbar_ns|wegbar_ow 	// 15:alles oben
+};
+
+
+const hang_t::typ hang_t::hang_from_ribi[16] = {
+	0,
+	hang_t::nord,
+	hang_t::ost,
+	0,
+	hang_t::sued,
+	0,
+	0,
+	0,
+	hang_t::west,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0
 };
 
 
 #else
 //double height grounds
 static const ribi_t::ribi from_hang[81] = {
-    ribi_t::keine,	// ribi_t::keine:flach
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::sued,		// 4:nordhang
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::sued,		// 8: double height nord
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::ost,	// 12:westhang
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::ost,	// 24: double height west
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::west,	// 28:osthang
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::nord,		// 36:suedhang
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::west,	// 56:double osthang
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::nord,	// 72: double sued
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine,
-    ribi_t::keine		// 80:alles oben
+	ribi_t::keine,	// ribi_t::keine:flach
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::sued,		// 4:nordhang
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::sued,		// 8: double height nord
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::ost,	// 12:westhang
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::ost,	// 24: double height west
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::west,	// 28:osthang
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::nord,		// 36:suedhang
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::west,	// 56:double osthang
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::nord,	// 72: double sued
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine,
+	ribi_t::keine		// 80:alles oben
 };
 
 const int hang_t::flags[81] = {
-    wegbar_ns|wegbar_ow,	// 0:flach
-    0,
-    0,
-    0,
-    wegbar_ns|einfach,		// 4:nordhang
-    0,
-    0,
-    0,
-    einfach,		// 8: double height nord
-    0,
-    0,
-    0,
-    wegbar_ow|einfach,	// 12:westhang
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    einfach,		// 24: double height west
-    0,
-    0,
-    0,
-    wegbar_ow|einfach,	// 28:osthang
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    wegbar_ns|einfach,		// 36:suedhang
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    einfach,	// 56:osthang
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    einfach,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    wegbar_ns|wegbar_ow 	// 80:alles oben
+	wegbar_ns|wegbar_ow,	// 0:flach
+	0,
+	0,
+	0,
+	wegbar_ns|einfach,		// 4:nordhang
+	0,
+	0,
+	0,
+	einfach,		// 8: double height nord
+	0,
+	0,
+	0,
+	wegbar_ow|einfach,	// 12:westhang
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	einfach,		// 24: double height west
+	0,
+	0,
+	0,
+	wegbar_ow|einfach,	// 28:osthang
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	wegbar_ns|einfach,		// 36:suedhang
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	einfach,	// 56:osthang
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	einfach,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0,
+	wegbar_ns|wegbar_ow 	// 80:alles oben
 };
 #endif
 
 
 const ribi_t::dir ribi_t::dirs[16] = {
-    dir_invalid,		// keine
-    dir_nord,			// nord
-    dir_ost,			// ost
-    dir_nordost,		// nordost
-    dir_sued,			// sued
-    dir_invalid,		// nordsued
-    dir_suedost,		// suedost
-    dir_invalid,		// nordsuedost
-    dir_west,			// west
-    dir_nordwest,		// nordwest
-    dir_invalid,		// ostwest
-    dir_invalid,		// nordostwest
-    dir_suedwest,		// suedwest
-    dir_invalid,		// nordsuedwest
-    dir_invalid,		// suedostwest
-    dir_invalid			// alle
+	dir_invalid,		// keine
+	dir_nord,			// nord
+	dir_ost,			// ost
+	dir_nordost,		// nordost
+	dir_sued,			// sued
+	dir_invalid,		// nordsued
+	dir_suedost,		// suedost
+	dir_invalid,		// nordsuedost
+	dir_west,			// west
+	dir_nordwest,		// nordwest
+	dir_invalid,		// ostwest
+	dir_invalid,		// nordostwest
+	dir_suedwest,		// suedwest
+	dir_invalid,		// nordsuedwest
+	dir_invalid,		// suedostwest
+	dir_invalid			// alle
 };
 
 ribi_t::ribi ribi_typ(koord from, koord to)
 {
-    return ribi_typ(to - from);
+	return ribi_typ(to - from);
 }
 
 ribi_t::ribi ribi_typ(hang_t::typ hang)   // nordhang -> sued, ... !
 {
-    return from_hang[hang];
+	return from_hang[hang];
 }
 
 
@@ -373,6 +393,8 @@ ribi_t::ribi ribi_typ(koord3d from, koord3d to)
 	return ribi_typ(to-from);
 }
 
+
+
 ribi_t::ribi ribi_typ(koord3d dir)
 {
 	ribi_t::ribi ribi = ribi_t::keine;
@@ -435,3 +457,10 @@ hang_t::typ hang_typ(koord dir)
 	}
 	return hang_t::flach;	    // ???
 }
+
+
+
+hang_t::typ hang_typ(ribi_t::ribi r)
+{
+	return hang_t::hang_from_ribi[r];
+}
diff --git a/dataobj/ribi.h b/dataobj/ribi.h
index a130c1e..4fa3316 100644
--- a/dataobj/ribi.h
+++ b/dataobj/ribi.h
@@ -45,6 +45,8 @@ public:
 		erhoben = 15	    // Speziell für Brückenanfänge (prissi: unsued, I think)
 	};
 
+	static const hang_t::typ hang_from_ribi[16];
+
 	// Ein bischen tricky implementiert:
 	static bool ist_gegenueber(typ x, typ y) { return ist_einfach(x) && ist_einfach(y) && x + y == erhoben; }
 	static typ gegenueber(typ x) { return ist_einfach(x) ? erhoben - x : flach; }
@@ -170,6 +172,8 @@ public:
 //	-> ich denke aufwaerts, also geht es auf einem Suedhang nach Norden!
 //
 hang_t::typ  hang_typ(koord dir);   // dir:nord -> hang:sued, ...
+hang_t::typ  hang_typ(ribi_t::ribi);
+
 ribi_t::ribi ribi_typ(koord dir);
 ribi_t::ribi ribi_typ(koord from, koord to);
 ribi_t::ribi ribi_typ(koord3d dir);
diff --git a/dataobj/route.cc b/dataobj/route.cc
index 4d613fb..e670596 100644
--- a/dataobj/route.cc
+++ b/dataobj/route.cc
@@ -13,6 +13,7 @@
 #include "../simhalt.h"
 #include "../boden/wege/weg.h"
 #include "../boden/grund.h"
+#include "../ifc/fahrer.h"
 #include "loadsave.h"
 #include "route.h"
 #include "umgebung.h"
@@ -41,7 +42,7 @@ void
 route_t::kopiere(const route_t *r)
 {
 	assert(r != NULL);
-	const unsigned int hops = r->get_max_n();
+	const unsigned int hops = r->get_count()-1;
 	route.clear();
 	route.resize(hops + 1);
 	for( unsigned int i=0;  i<=hops;  i++ ) {
@@ -52,12 +53,12 @@ route_t::kopiere(const route_t *r)
 void route_t::append(const route_t *r)
 {
 	assert(r != NULL);
-	const uint32 hops = r->get_max_n();
+	const uint32 hops = r->get_count()-1;
 	route.resize(hops+1+route.get_count());
 
-	while(get_max_n()>0  &&  route[get_max_n()] == r->position_bei(0)) {
+	while(get_count()>0  &&  route[get_count()-1] == r->position_bei(0)) {
 		// skip identical end tiles
-		route.remove_at(get_max_n());
+		route.remove_at(get_count()-1);
 	}
 	// then append
 	for( unsigned int i=0;  i<=hops;  i++ ) {
@@ -72,23 +73,10 @@ void route_t::insert(koord3d k)
 }
 
 
-void route_t::append(koord3d k)
-{
-	while(  route.get_count()>1  &&  route[route.get_count()-1] == route[route.get_count()-2]  ) {
-		route.remove_at(route.get_count()-1);
-	}
-	if(  route.empty()  ||  k != route.back()  ) {
-		route.append(k);
-	}
-	route.append(k);	// the last is always double
-}
-
-
 void route_t::remove_koord_from(uint32 i) {
-	while(  i<get_max_n()  ) {
-		route.remove_at(get_max_n());
+	while(  i+1 < get_count()  ) {
+		route.remove_at(get_count()-1);
 	}
-	route.append(route[get_max_n()]); // the last is always double
 }
 
 
@@ -100,18 +88,14 @@ void route_t::remove_koord_from(uint32 i) {
  */
 bool route_t::append_straight_route(karte_t *welt, koord3d dest )
 {
-	if(route.get_count()<=1u  ||  !welt->ist_in_kartengrenzen(dest.get_2d())) {
+	if(  !welt->ist_in_kartengrenzen(dest.get_2d())  ) {
 		return false;
 	}
 
-	while(  route.get_count() > 1u  &&  route[route.get_count()-2] == route[route.get_count()-1]  ) {
-		route.remove_at(route.get_count()-1);
-	}
-
 	// then try to calculate direct route
-	koord pos = route[get_max_n()].get_2d();
+	koord pos = route[get_count()-1].get_2d();
 	const koord ziel=dest.get_2d();
-	route.resize( route.get_count()+abs_distance(pos,ziel)+2 );
+	route.resize( route.get_count()+koord_distance(pos,ziel)+2 );
 DBG_MESSAGE("route_t::append_straight_route()","start from (%i,%i) to (%i,%i)",pos.x,pos.y,dest.x,dest.y);
 	while(pos!=ziel) {
 		// shortest way
@@ -126,7 +110,6 @@ DBG_MESSAGE("route_t::append_straight_route()","start from (%i,%i) to (%i,%i)",p
 		}
 		route.append(welt->lookup(pos)->get_kartenboden()->get_pos());
 	}
-	route.append(route.back());
 	DBG_MESSAGE("route_t::append_straight_route()","to (%i,%i) found.",ziel.x,ziel.y);
 
 	return pos==ziel;
@@ -210,7 +193,7 @@ route_t::find_route(karte_t *welt,
 //DBG_DEBUG("add to close","(%i,%i,%i) f=%i",gr->get_pos().x,gr->get_pos().y,gr->get_pos().z,tmp->f);
 		// already there
 		if(fahr->ist_ziel(gr,tmp->parent==NULL?NULL:tmp->parent->gr)) {
-			// we added a target to the closed list: we are finished
+			// we added a target to the closed list: check for length
 			break;
 		}
 
@@ -220,7 +203,7 @@ route_t::find_route(karte_t *welt,
 			// a way goes here, and it is not marked (i.e. in the closed list)
 			grund_t* to;
 			if(  (ribi & ribi_t::nsow[r] & start_dir)!=0  // allowed dir (we can restrict the first step by start_dir)
-				&& abs_distance(start.get_2d(),gr->get_pos().get_2d()+koord::nsow[r])<max_depth	// not too far away
+				&& koord_distance(start.get_2d(),gr->get_pos().get_2d()+koord::nsow[r])<max_depth	// not too far away
 				&& gr->get_neighbour(to, wegtyp, koord::nsow[r])  // is connected
 				&& fahr->ist_befahrbar(to)	// can be driven on
 			) {
@@ -499,7 +482,7 @@ bool route_t::intern_calc_route(karte_t *welt, const koord3d ziel, const koord3d
 			tmp = tmp->parent;
 		}
 		ok = true;
-    }
+	}
 
 	RELEASE_NODE();
 
@@ -525,7 +508,7 @@ bool route_t::calc_route(karte_t *welt, const koord3d ziel, const koord3d start,
 #endif
 	bool ok = intern_calc_route(welt, start, ziel, fahr, max_khm,max_cost);
 #ifdef DEBUG_ROUTES
-	if(fahr->get_waytype()==water_wt) {DBG_DEBUG("route_t::calc_route()","route from %d,%d to %d,%d with %i steps in %u ms found.",start.x, start.y, ziel.x, ziel.y, route.get_count()-2, dr_time()-ms );}
+	if(fahr->get_waytype()==water_wt) {DBG_DEBUG("route_t::calc_route()","route from %d,%d to %d,%d with %i steps in %u ms found.",start.x, start.y, ziel.x, ziel.y, route.get_count()-1, dr_time()-ms );}
 #endif
 
 	INT_CHECK("route 343");
diff --git a/dataobj/route.h b/dataobj/route.h
index 8b786c2..1ca409c 100644
--- a/dataobj/route.h
+++ b/dataobj/route.h
@@ -9,14 +9,14 @@
 #define route_h
 
 #include "../simdebug.h"
-#include "../simdings.h"
 
 #include "../dataobj/koord3d.h"
 
-#include "../ifc/fahrer.h"
 #include "../tpl/vector_tpl.h"
 
 class karte_t;
+class fahrer_t;
+class grund_t;
 
 /**
  * Routen, zB für Fahrzeuge
@@ -33,7 +33,7 @@ private:
 	 */
 	bool intern_calc_route(karte_t *w, koord3d start, koord3d ziel, fahrer_t *fahr, const uint32 max_kmh, const uint32 max_cost);
 
-	vector_tpl <koord3d> route;           // Die Koordinaten fuer die Fahrtroute
+	koord3d_vector_t route;           // Die Koordinaten fuer die Fahrtroute
 
 public:
 	// this class save the nodes during route search
@@ -70,6 +70,11 @@ public:
 		return (abs(p1.x-p2.x)+abs(p1.y-p2.y)+abs(p1.z-p2.z)/16);
 	}
 
+	const koord3d_vector_t &get_route() const { return route; }
+
+	void rotate90( sint16 y_size ) { route.rotate90( y_size ); };
+
+
 	bool is_contained(const koord3d k) const { return route.is_contained(k); }
 
 	uint32 index_of(const koord3d k) const { return (uint32)(route.index_of(k)); }
@@ -81,17 +86,7 @@ public:
 	 */
 	const koord3d& position_bei(const uint16 n) const { return route[n]; }
 
-	/**
-	 * @return Koordinate an index n
-	 * @author Hj. Malthaner
-	 */
-	koord3d& access_position_bei(const uint16 n) { return route[n]; }
-
-	/**
-	 * @return letzer index in der Koordinatenliste
-	 * @author Hj. Malthaner
-	 */
-	uint32 get_max_n() const { return route.get_count() - 1; }
+	uint32 get_count() const { return route.get_count(); }
 
 	bool empty() const { return route.get_count()<2; }
 
@@ -117,7 +112,12 @@ public:
 	 * fügt k hinten in die route ein
 	 * @author prissi
 	 */
-	void append(koord3d k);
+	inline void append(koord3d k)
+	{
+		route.append(k);
+	}
+
+
 
 	/**
 	 * removes all tiles from the route
diff --git a/dataobj/tabfile.cc b/dataobj/tabfile.cc
index 2790819..f760814 100644
--- a/dataobj/tabfile.cc
+++ b/dataobj/tabfile.cc
@@ -35,7 +35,6 @@ void tabfile_t::close()
 const char *tabfileobj_t::get(const char *key)
 {
 	const char *result = objinfo.get(key);
-
 	return result ? result : "";
 }
 
@@ -109,6 +108,18 @@ int tabfileobj_t::get_int(const char *key, int def)
 	}
 }
 
+sint64 tabfileobj_t::get_int64(const char *key, sint64 def)
+{
+	const char *value = get(key);
+
+	if(!value || !*value) {
+		return def;
+	}
+	else {
+		return (sint64)(atof(value)+0.5);
+	}
+}
+
 int *tabfileobj_t::get_ints(const char *key)
 {
 	const char *value = get(key);
@@ -170,15 +181,15 @@ bool tabfile_t::read(tabfileobj_t &objinfo)
 bool tabfile_t::read_line(char *s, int size)
 {
 	char *r;
-	long l;
+	size_t l;
 
 	do {
 		r = fgets(s, size, file);
-	} while(r != NULL && (*s == '#' || *s == ' '));
+	} while(r != NULL  &&  (*s == '#' || *s == ' ')  );
 
 	if(r) {
 		l = strlen(r);
-		while(l && (r[l-1] == '\n' || r[l-1] == '\r')) {
+		while(  l  &&  (r[l-1] == '\n' || r[l-1] == '\r')  ) {
 			r[--l] = '\0';
 		}
 	}
@@ -226,7 +237,7 @@ void tabfile_t::format_key(char *key)
 
 void tabfile_t::format_value(char *value)
 {
-	long len = strlen(value);
+	size_t len = strlen(value);
 
 	// trim right
 	while(len && value[len - 1] == ' ') {
diff --git a/dataobj/tabfile.h b/dataobj/tabfile.h
index 848bf89..60e4c13 100644
--- a/dataobj/tabfile.h
+++ b/dataobj/tabfile.h
@@ -137,15 +137,18 @@ public:
 	const koord &get_koord(const char *key, koord def);
 
 	/**
-	 * Get the value for a koord key - key must be lowercase
-	 *
-	 * @return koord	returns def, if key is not found
-	 *
+	 * Get an int
 	 * @author V. Meyer
 	 */
 	int get_int(const char *key, int def);
 
 	/**
+	 * Get an sint64 (actually uses double, thus only 48 bits are retrievable)
+	 * @author prissi
+	 */
+	sint64 get_int64(const char *key, sint64 def);
+
+	/**
 	 * Parses a value with the format "<num 1>,<num 2>,..,<num N>"
 	 * and returns an allocated int[N + 1] with
 	 * N at pos. 0, <num 1> at pos 1, etc.
diff --git a/dataobj/translator.cc b/dataobj/translator.cc
index ee08112..c263449 100644
--- a/dataobj/translator.cc
+++ b/dataobj/translator.cc
@@ -28,10 +28,28 @@
 #include "../tpl/vector_tpl.h"
 
 
+// allow all kinds of line feeds
+static char *fgets_line(char *buffer, int max_len, FILE *file)
+{
+	char *result = fgets(buffer, max_len, file);
+	size_t len = strlen(buffer);
+	// remove all trailing junk
+	while(  len>1  &&  (buffer[len-1]==13  ||  buffer[len-1]==10)  ) {
+		buffer[len-1] = 0;
+		len--;
+	}
+	return result;
+}
+
+
 const char* translator::lang_info::translate(const char* text) const
 {
-	if (text    == NULL) return "(null)";
-	if (text[0] == '\0') return text;
+	if (text    == NULL) {
+		return "(null)";
+	}
+	if (text[0] == '\0') {
+		return text;
+	}
 	const char* trans = texts.get(text);
 	return trans != NULL ? trans : text;
 }
@@ -39,6 +57,7 @@ const char* translator::lang_info::translate(const char* text) const
 
 /* Made to be dynamic, allowing any number of languages to be loaded */
 static translator::lang_info langs[40];
+static translator::lang_info *current_langinfo = langs;
 static stringhashtable_tpl<const char*> compatibility;
 
 
@@ -47,7 +66,7 @@ translator translator::single_instance;
 
 const translator::lang_info* translator::get_lang()
 {
-	return &langs[single_instance.current_lang];
+	return current_langinfo;
 }
 
 
@@ -135,16 +154,20 @@ static char* recode(const char* src, bool translate_from_utf, bool translate_to_
 					dst += c = utf16_to_utf8((unsigned char)*src++, (utf8*)dst);
 				} else if (translate_from_utf) {
 					// make latin from UTF8 (ignore overflows!)
-					int len = 0;
+					size_t len = 0;
 					*dst++ = c = (uint8)utf8_to_utf16((const utf8*)src, &len);
 					src += len;
 				}
 			}
-			else {
+			else if(c>=13) {
 				// just copy
 				src ++;
 				*dst++ = c;
 			}
+			else {
+				// ignore this character
+				src ++;
+			}
 		}
 	} while (c != '\0');
 	*dst = 0;
@@ -228,7 +251,7 @@ static void init_city_names(bool is_utf_language)
 		char buf[256];
 		bool file_is_utf = is_unicode_file(file);
 		while (!feof(file)) {
-			if (fgets(buf, 128, file)) {
+			if (fgets_line(buf, 128, file)) {
 				rtrim(buf);
 				char* c = recode(buf, file_is_utf, is_utf_language);
 				namen_liste.append(c);
@@ -279,20 +302,20 @@ static void load_language_file_body(FILE* file, stringhashtable_tpl<const char*>
 	bool convert_to_unicode = language_is_utf && !file_is_utf;
 
 	do {
-		fgets(buffer1, 4095, file);
+		fgets_line(buffer1, 4095, file);
 		if (buffer1[0] == '#') {
 			// ignore comments
 			continue;
 		}
-		fgets(buffer2, 4095, file);
+		fgets_line(buffer2, 4095, file);
 
 		buffer1[4095] = 0;
 		buffer2[4095] = 0;
 
 		if (!feof(file)) {
 			// "\n" etc umsetzen
-			buffer1[strlen(buffer1) - 1] = '\0';
-			buffer2[strlen(buffer2) - 1] = '\0';
+			//buffer1[strlen(buffer1) - 1] = '\0';
+			//buffer2[strlen(buffer2) - 1] = '\0';
 			table->set(recode(buffer1, file_is_utf, false), recode(buffer2, false, convert_to_unicode));
 		}
 	} while (!feof(file));
@@ -304,8 +327,8 @@ void translator::load_language_file(FILE* file)
 	char buffer1 [256];
 	bool file_is_utf = is_unicode_file(file);
 	// Read language name
-	fgets(buffer1, 255, file);
-	buffer1[strlen(buffer1) - 1] = '\0';
+	fgets_line(buffer1, 255, file);
+	//buffer1[strlen(buffer1) - 1] = '\0';
 
 	langs[single_instance.lang_count].name = strdup(buffer1);
 	// if the language file is utf, all language strings are assumed to be unicode
@@ -334,7 +357,8 @@ bool translator::load(const cstring_t& scenario_path)
 	tstrncpy(szenario_path, scenario_path, lengthof(szenario_path));
 
 	//initialize these values to 0(ie. nothing loaded)
-	single_instance.lang_count = single_instance.current_lang = 0;
+	single_instance.current_lang = -1;
+	single_instance.lang_count = 0;
 
 	DBG_MESSAGE("translator::load()", "Loading languages...");
 	searchfolder_t folder;
@@ -409,7 +433,7 @@ bool translator::load(const cstring_t& scenario_path)
 	}
 
 	// use english if available
-	set_language( umgebung_t::language_iso );
+	current_langinfo = get_lang_by_iso("en");
 
 	// it's all ok
 	return true;
@@ -430,14 +454,16 @@ void translator::load_language_iso(cstring_t& iso)
 
 void translator::set_language(int lang)
 {
-	if (0 <= lang && lang < single_instance.lang_count) {
+	if(  0 <= lang  &&  lang < single_instance.lang_count  ) {
 		single_instance.current_lang = lang;
+		current_langinfo = langs+lang;
 		umgebung_t::language_iso = langs[lang].iso;
 		umgebung_t::default_einstellungen.set_name_language_iso( langs[lang].iso );
 		display_set_unicode(langs[lang].utf_encoded);
 		init_city_names(langs[lang].utf_encoded);
 		DBG_MESSAGE("translator::set_language()", "%s, unicode %d", langs[lang].name, langs[lang].utf_encoded);
-	} else {
+	}
+	else {
 		dbg->warning("translator::set_language()", "Out of bounds : %d", lang);
 	}
 }
diff --git a/dataobj/translator.h b/dataobj/translator.h
index 86a02e3..5e7ab68 100644
--- a/dataobj/translator.h
+++ b/dataobj/translator.h
@@ -28,7 +28,7 @@ class translator
 {
 	private:
 		//cannot be instantiated outside translator
-		translator() {}
+		translator() { current_lang = -1; }
 		~translator() {}
 
 		int current_lang;
@@ -69,8 +69,7 @@ class translator
 		 * Get/Set the currently selected language, based on the
 		 * index number
 		 */
-		static int get_language()
-		{
+		static int get_language() {
 			return single_instance.current_lang;
 		}
 
diff --git a/dataobj/umgebung.cc b/dataobj/umgebung.cc
index de60f87..2e0aede 100644
--- a/dataobj/umgebung.cc
+++ b/dataobj/umgebung.cc
@@ -13,10 +13,6 @@ const char *umgebung_t::user_dir = 0;
 
 cstring_t umgebung_t::objfilename;	// will start empty ...
 
-uint16 umgebung_t::max_convoihandles = 8192;
-uint16 umgebung_t::max_linehandles = 2048;
-uint16 umgebung_t::max_halthandles = 8192;
-
 bool umgebung_t::night_shift = false;
 
 bool umgebung_t::hide_with_transparency = true;
@@ -41,7 +37,7 @@ bool umgebung_t::verkehrsteilnehmer_info = false;
 bool umgebung_t::tree_info = true;
 bool umgebung_t::ground_info = false;
 bool umgebung_t::townhall_info = false;
-bool umgebung_t::single_info = false;
+bool umgebung_t::single_info = true;
 
 bool umgebung_t::window_buttons_right = false;
 bool umgebung_t::window_frame_active = false;
@@ -54,21 +50,18 @@ sint8 umgebung_t::default_mapmode = 0;	// show cities
 
 /**
  * show month in date?
- *
  * @author hsiegeln
  */
-uint8 umgebung_t::show_month = 0;
+uint8 umgebung_t::show_month = 3;
 
 /**
  * Max. Länge für initiale Stadtverbindungen
- *
  * @author Hj. Malthaner
  */
-sint32 umgebung_t::intercity_road_length = 8000;
+sint32 umgebung_t::intercity_road_length = 200;
 
 /**
  * Typ (Name) initiale Stadtverbindungen
- *
  * @author Hj. Malthaner
  */
 const char *umgebung_t::intercity_road_type = NULL;
@@ -90,7 +83,7 @@ bool umgebung_t::drive_on_left=false;
 uint32 umgebung_t::fps=25;
 
 // maximum speedup set to 1000 (effectively no limit)
-sint16 umgebung_t::max_acceleration=1000;
+sint16 umgebung_t::max_acceleration=50;
 
 bool umgebung_t::quit_simutrans = false;
 
@@ -98,6 +91,10 @@ bool umgebung_t::show_tooltips = true;
 uint8 umgebung_t::tooltip_color = 4;
 uint8 umgebung_t::tooltip_textcolor = COL_BLACK;
 
+uint8 umgebung_t::cursor_overlay_color = COL_ORANGE;
+
+uint8 umgebung_t::show_vehicle_states = 1;
+
 sint8 umgebung_t::daynight_level = 0;
 
 const char *umgebung_t::language_iso = "en";
@@ -109,6 +106,8 @@ bool umgebung_t::mute_sound = false;
 bool umgebung_t::mute_midi = false;
 bool umgebung_t::shuffle_midi = true;
 
+bool umgebung_t::left_to_right_graphs = false;
+
 // default settings for new games
 einstellungen_t umgebung_t::default_einstellungen;
 
@@ -182,5 +181,10 @@ void umgebung_t::rdwr(loadsave_t *file)
 	file->rdwr_bool( mute_sound, "" );
 	file->rdwr_bool( mute_midi, "" );
 	file->rdwr_bool( shuffle_midi, "" );
+
+	if(  file->get_version()>102001  ) {
+		file->rdwr_byte( show_vehicle_states, "" );
+		file->rdwr_bool( left_to_right_graphs, "" );
+	}
 }
 
diff --git a/dataobj/umgebung.h b/dataobj/umgebung.h
index 85d879e..2bd15de 100644
--- a/dataobj/umgebung.h
+++ b/dataobj/umgebung.h
@@ -10,6 +10,7 @@
 
 #include "../simtypes.h"
 #include "../simconst.h"
+#include "../simcolor.h"
 #include "einstellungen.h"
 
 class cstring_t;
@@ -34,11 +35,6 @@ public:
 
 	static cstring_t objfilename;
 
-	// maximum number of handles
-	static uint16 max_convoihandles;
-	static uint16 max_linehandles;
-	static uint16 max_halthandles;
-
 	// scrollrichtung
 	static sint16 scroll_multi;
 
@@ -209,6 +205,12 @@ public:
 	static uint8 tooltip_color;
 	static uint8 tooltip_textcolor;
 
+	// color used for cursor overlay blending
+	static uint8 cursor_overlay_color;
+
+	// show error/info tooltips over the vehicles
+	static uint8 show_vehicle_states;
+
 	// fixed day/night view level
 	static sint8 daynight_level;
 
@@ -219,6 +221,8 @@ public:
 	static sint16 global_volume, midi_volume;
 	static bool mute_sound, mute_midi, shuffle_midi;
 
+	static bool left_to_right_graphs;
+
 	static einstellungen_t default_einstellungen;
 
 	// load/saving settings from file
diff --git a/dings/baum.cc b/dings/baum.cc
index 23579ae..1aeada5 100644
--- a/dings/baum.cc
+++ b/dings/baum.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997 - 2001 Hansjörg Malthaner
+ * Copyright (c) 1997 - 2001 Hj. Malthaner
  *
  * This file is part of the Simutrans project under the artistic licence.
  * (see licence.txt)
@@ -35,7 +35,7 @@
 
 static const uint8 baum_bild_alter[12] =
 {
-    0,1,2,3,3,3,3,3,3,4,4,4
+	0,1,2,3,3,3,3,3,3,4,4,4
 };
 
 /******************************** static stuff for forest rules ****************************************************************/
@@ -129,26 +129,23 @@ DBG_MESSAGE("verteile_baeume()","creating %i forest",c_forest_count);
 /*************************** first the static function for the baum_t and baum_besch_t administration ***************/
 
 /*
- * Diese Tabelle ermöglicht das Auffinden dient zur Auswahl eines Baumtypen
+ * Diese Tabelle ermoeglicht das Auffinden dient zur Auswahl eines Baumtypen
  */
 vector_tpl<const baum_besch_t *> baum_t::baum_typen(0);
 
+// index vector into baumtypen, accessible per climate
+vector_tpl<weighted_vector_tpl<uint32> > baum_t::baum_typen_per_climate(MAX_CLIMATES);
+
 /*
- * Diese Tabelle ermöglicht das Auffinden einer Beschreibung durch ihren Namen
+ * Diese Tabelle ermoeglicht das Auffinden einer Beschreibung durch ihren Namen
  */
-stringhashtable_tpl<uint32> baum_t::besch_names;
+stringhashtable_tpl<const baum_besch_t *> baum_t::besch_names;
 
 // total number of trees
 // the same for a certain climate
 int baum_t::get_anzahl_besch(climate cl)
 {
-	uint16 total_number=0;
-	for( unsigned i=1;  i<baum_typen.get_count();  i++  ) {
-		if (baum_typen[i]->is_allowed_climate(cl)) {
-			total_number ++;
-		}
-	}
-	return total_number;
+	return baum_typen_per_climate[cl].get_count();
 }
 
 
@@ -156,18 +153,17 @@ int baum_t::get_anzahl_besch(climate cl)
 /**
  * tree planting function - it takes care of checking suitability of area
  */
-bool baum_t::plant_tree_on_coordinate(karte_t * welt, koord pos, const uint8 maximum_count)
+uint8 baum_t::plant_tree_on_coordinate(karte_t * welt, koord pos, const uint8 maximum_count, const uint8 count)
 {
-	const planquadrat_t *plan = welt->lookup(pos);
-	if(plan) {
-		grund_t * gr = plan->get_kartenboden();
-		if(gr!=NULL  &&
-			get_anzahl_besch(welt->get_climate(gr->get_pos().z))>0  &&
+	grund_t * gr = welt->lookup_kartenboden(pos);
+	if(gr) {
+		if(get_anzahl_besch(welt->get_climate(gr->get_pos().z))>0  &&
 			gr->ist_natur()  &&
 			gr->get_top()<maximum_count)
 		{
-			if(gr->get_top()>0) {
-				switch(gr->obj_bei(0)->get_typ()) {
+			ding_t *ding = gr->obj_bei(0);
+			if(ding) {
+				switch(ding->get_typ()) {
 					case ding_t::wolke:
 					case ding_t::aircraft:
 					case ding_t::baum:
@@ -177,19 +173,22 @@ bool baum_t::plant_tree_on_coordinate(karte_t * welt, koord pos, const uint8 max
 						// ok to built here
 						break;
 					case ding_t::groundobj:
-						if(((groundobj_t *)(gr->obj_bei(0)))->get_besch()->can_built_trees_here()) {
+						if(((groundobj_t *)ding)->get_besch()->can_built_trees_here()) {
 							break;
 						}
 						// leave these (and all other empty)
 					default:
-						return false;
+						return 0;
 				}
 			}
-			gr->obj_add( new baum_t(welt, gr->get_pos()) ); //plants the tree
-			return true; //tree was planted - currently unused value is not checked
+			const uint8 count_planted = min( maximum_count - gr->get_top(), count);
+			for (uint8 i=0; i<count_planted; i++) {
+				gr->obj_add( new baum_t(welt, gr->get_pos()) ); //plants the tree(s)
+			}
+			return count_planted;
 		}
 	}
-	return false;
+	return 0;
 }
 
 
@@ -199,6 +198,10 @@ bool baum_t::plant_tree_on_coordinate(karte_t * welt, koord pos, const uint8 max
  */
 bool baum_t::plant_tree_on_coordinate(karte_t * welt, koord pos, const baum_besch_t *besch, const bool check_climate, const bool random_age )
 {
+	// none there
+	if(  besch_names.empty()  ) {
+		return false;
+	}
 	grund_t *gr = welt->lookup_kartenboden(pos);
 	if(gr) {
 		if( gr->ist_natur()  &&
@@ -240,6 +243,10 @@ bool baum_t::plant_tree_on_coordinate(karte_t * welt, koord pos, const baum_besc
 
 uint32 baum_t::create_forest(karte_t *welt, koord new_center, koord wh )
 {
+	// none there
+	if(  besch_names.empty()  ) {
+		return 0;
+	}
 	const sint16 xpos_f = new_center.x;
 	const sint16 ypos_f = new_center.y;
 	uint32 number_of_new_trees = 0;
@@ -249,17 +256,23 @@ uint32 baum_t::create_forest(karte_t *welt, koord new_center, koord wh )
 			const sint32 x_tree_pos = (j-(wh.x>>1));
 			const sint32 y_tree_pos = (i-(wh.y>>1));
 
-			const uint32 distance = 1 + ((uint32) sqrt( (double)(x_tree_pos*x_tree_pos*(wh.y*wh.y) + y_tree_pos*y_tree_pos*(wh.x*wh.x))));
+			const uint64 distance = 1 + ((uint64) sqrt( ((double)x_tree_pos*x_tree_pos*(wh.y*wh.y) + (double)y_tree_pos*y_tree_pos*(wh.x*wh.x))));
 			const uint32 tree_probability = ( 8 * (uint32)((wh.x*wh.x)+(wh.y*wh.y)) ) / distance;
 
-			for (uint8 c2 = 0 ; c2<max_no_of_trees_on_square; c2++) {
+			if (tree_probability < 38) {
+				continue;
+			}
+
+			uint8 number_to_plant = 0;
+			const uint8 max_trees_here = min(max_no_of_trees_on_square,  (tree_probability - 38 +1)/2);
+			for (uint8 c2 = 0 ; c2<max_trees_here; c2++) {
 				const uint32 rating = simrand(10) + 38 + c2*2;
 				if (rating < tree_probability ) {
-					const koord pos( (sint16)(xpos_f+x_tree_pos), (sint16)(ypos_f+y_tree_pos));
-					baum_t::plant_tree_on_coordinate(welt, pos, 3 );
-					number_of_new_trees ++;
+					number_to_plant++;
 				}
 			}
+
+			number_of_new_trees += baum_t::plant_tree_on_coordinate(welt, koord( (sint16)(xpos_f+x_tree_pos), (sint16)(ypos_f+y_tree_pos)), max_no_of_trees_on_square, number_to_plant);
 		}
 	}
 	return number_of_new_trees;
@@ -268,6 +281,10 @@ uint32 baum_t::create_forest(karte_t *welt, koord new_center, koord wh )
 
 void baum_t::fill_trees(karte_t *welt, int dichte)
 {
+	// none there
+	if(  besch_names.empty()  ) {
+		return;
+	}
 DBG_MESSAGE("verteile_baeume()","distributing single trees");
 	koord pos;
 	for(pos.y=0;pos.y<welt->get_groesse_y(); pos.y++) {
@@ -286,27 +303,42 @@ DBG_MESSAGE("verteile_baeume()","distributing single trees");
 
 
 
-bool
-baum_t::alles_geladen()
+bool baum_t::alles_geladen()
 {
 	if (besch_names.empty()) {
 		DBG_MESSAGE("baum_t", "No trees found - feature disabled");
-		baum_typen.append(NULL);
+		baum_typen.append( NULL );
+	}
+	else {
+		stringhashtable_iterator_tpl<const baum_besch_t*> iter(besch_names);
+		while(  iter.next()  ) {
+			baum_typen.append( iter.get_current_value() );
+		}
+		// fill the vector with zeros
+		for (uint8 j=0; j<MAX_CLIMATES; j++) {
+			baum_typen_per_climate.append( weighted_vector_tpl<uint32>() );
+		}
+		// now register all trees for all fitting climates
+		for( uint32 i=0;  i<baum_typen.get_count();  i++  ) {
+			for (uint8 j=0; j<MAX_CLIMATES; j++) {
+				if (baum_typen[i]->is_allowed_climate((climate)j)) {
+					baum_typen_per_climate[j].append(i, baum_typen[i]->get_distribution_weight(), /*extend weighted vector if necess by*/ 4 );
+				}
+			}
+		}
 	}
 	return true;
 }
 
 
 
-bool
-baum_t::register_besch(baum_besch_t *besch)
+bool baum_t::register_besch(baum_besch_t *besch)
 {
-	if(baum_typen.get_count()==0) {
-		// NULL for empty object
-		baum_typen.append(NULL);
+	// avoid duplicates with same name
+	if(besch_names.remove(besch->get_name())) {
+		dbg->warning( "baum_t::register_besch()", "Object %s was overlaid by addon!", besch->get_name() );
 	}
-	besch_names.put(besch->get_name(), baum_typen.get_count() );
-	baum_typen.append(besch);
+	besch_names.put(besch->get_name(), besch );
 	return true;
 }
 
@@ -314,12 +346,11 @@ baum_t::register_besch(baum_besch_t *besch)
 
 // calculates tree position on a tile
 // takes care of slopes
-void
-baum_t::calc_off()
+void baum_t::calc_off()
 {
 	int liob;
 	int reob;
-	switch (welt->lookup( get_pos().get_2d())->get_kartenboden()->get_grund_hang() ) {
+	switch (welt->lookup( get_pos())->get_grund_hang() ) {
 		case 0:
 			liob=simrand(30)-15;
 			reob=simrand(30)-15;
@@ -397,8 +428,7 @@ baum_t::calc_bild()
 
 
 
-image_id
-baum_t::get_bild() const
+image_id baum_t::get_bild() const
 {
 	// alter/2048 is the age of the tree
 	if(umgebung_t::hide_trees) {
@@ -426,34 +456,25 @@ baum_t::get_outline_bild() const
  */
 uint16 baum_t::random_tree_for_climate_intern(climate cl)
 {
-	int weight = 0;
-
-	for( unsigned i=1;  i<baum_typen.get_count();  i++  ) {
-		if (baum_typen[i]->is_allowed_climate(cl)) {
-			weight += baum_typen[i]->get_distribution_weight();
-		}
-	}
+	uint32 weight = baum_typen_per_climate[cl].get_sum_weight();
 
 	// now weight their distribution
 	if (weight > 0) {
-		const int w=simrand(weight);
-		weight = 0;
-		for( unsigned i=1; i<baum_typen.get_count();  i++  ) {
-			if (baum_typen[i]->is_allowed_climate(cl)) {
-				weight += baum_typen[i]->get_distribution_weight();
-				if(weight>=w) {
-					return i;
-				}
-			}
-		}
+		return baum_typen_per_climate[cl].at_weight( simrand(weight) );
+
+	}
+	else {
+		return 0xFFFF;
 	}
-	return 0xFFFF;
 }
 
 
 
 baum_t::baum_t(karte_t *welt, loadsave_t *file) : ding_t(welt)
 {
+	season = 0;
+	geburt = welt->get_current_month();
+	baumtype = 0;
 	rdwr(file);
 }
 
@@ -464,6 +485,7 @@ baum_t::baum_t(karte_t *welt, koord3d pos) : ding_t(welt, pos)
 	// Hajo: auch aeltere Baeume erzeugen
 	geburt = welt->get_current_month() - simrand(400);
 	baumtype = random_tree_for_climate_intern(welt->get_climate(pos.z));
+	season = 0;
 	calc_off();
 	calc_bild();
 }
@@ -473,8 +495,8 @@ baum_t::baum_t(karte_t *welt, koord3d pos) : ding_t(welt, pos)
 baum_t::baum_t(karte_t *welt, koord3d pos, uint16 type) : ding_t(welt, pos)
 {
 	geburt = welt->get_current_month();
-
 	baumtype = type;
+	season = 0;
 	calc_off();
 	calc_bild();
 }
@@ -483,6 +505,7 @@ baum_t::baum_t(karte_t *welt, koord3d pos, const baum_besch_t *besch) : ding_t(w
 {
 	geburt = welt->get_current_month();
 	baumtype = baum_typen.index_of(besch);
+	season = 0;
 	calc_off();
 	calc_bild();
 }
@@ -552,10 +575,13 @@ baum_t::rdwr(loadsave_t *file)
 	if(file->is_loading()) {
 		char buf[128];
 		file->rdwr_str(buf, 128);
-		baumtype = besch_names.get(buf);
-		if(baumtype==0) {
+		const baum_besch_t *besch = besch_names.get(buf);
+		if(  baum_typen.is_contained(besch)  ) {
+			baumtype = baum_typen.index_of( besch );
+		}
+		else {
 			// replace with random tree
-			baumtype = simrand(baum_typen.get_count()-1)+1;
+			baumtype = simrand(baum_typen.get_count());
 		}
 	}
 	else {
diff --git a/dings/baum.h b/dings/baum.h
index a5c8ae0..7449838 100644
--- a/dings/baum.h
+++ b/dings/baum.h
@@ -10,6 +10,7 @@
 
 #include "../tpl/stringhashtable_tpl.h"
 #include "../tpl/vector_tpl.h"
+#include "../tpl/weighted_vector_tpl.h"
 #include "../besch/baum_besch.h"
 #include "../simcolor.h"
 #include "../dataobj/umgebung.h"
@@ -30,8 +31,9 @@ private:
 	uint32 season:3;
 
 	// static for administration
-	static stringhashtable_tpl<uint32> besch_names;
+	static stringhashtable_tpl<const baum_besch_t *> besch_names;
 	static vector_tpl<const baum_besch_t *> baum_typen;
+	static vector_tpl<weighted_vector_tpl<uint32> > baum_typen_per_climate;
 
 	// static for the forest rule set
 	static uint8 forest_base_size;
@@ -53,6 +55,7 @@ private:
 
 	static uint16 random_tree_for_climate_intern(climate cl);
 
+	static uint8 plant_tree_on_coordinate(karte_t *welt, koord pos, const uint8 maximum_count, const uint8 count=1);
 public:
 	// only the load save constructor should be called outside
 	// otherwise I suggest use the plant tree function (see below)
@@ -99,7 +102,6 @@ public:
 	// distributes trees on a map
 	static void distribute_trees(karte_t *welt, int dichte);
 
-	static bool plant_tree_on_coordinate(karte_t *welt, koord pos, const uint8 maximum_count);
 	static bool plant_tree_on_coordinate(karte_t *welt, koord pos, const baum_besch_t *besch, const bool check_climate, const bool random_age );
 
 	static bool register_besch(baum_besch_t *besch);
@@ -114,7 +116,7 @@ public:
 
 	static const baum_besch_t *random_tree_for_climate(climate cl) { uint16 b = random_tree_for_climate_intern(cl);  return b!=0xFFFF ? baum_typen[b] : NULL; }
 
-	static const baum_besch_t *find_tree( const char *tree_name ) { return baum_typen.empty() ? NULL : baum_typen[besch_names.get(tree_name)]; }
+	static const baum_besch_t *find_tree( const char *tree_name ) { return baum_typen.empty() ? NULL : besch_names.get(tree_name); }
 
 	static int get_anzahl_besch() { return baum_typen.get_count(); }
 	static int get_anzahl_besch(climate cl);
diff --git a/dings/bruecke.cc b/dings/bruecke.cc
index e4a7538..4d0f03b 100644
--- a/dings/bruecke.cc
+++ b/dings/bruecke.cc
@@ -162,3 +162,15 @@ void bruecke_t::rotate90()
 	// the rotated image parameter is just one in front/back
 	img = rotate90_img[img];
 }
+
+// returns NULL, if removal is allowed
+// players can remove public owned ways
+const char *bruecke_t::ist_entfernbar(const spieler_t *sp)
+{
+	if (get_player_nr()==1) {
+		return NULL;
+	}
+	else {
+		return ding_t::ist_entfernbar(sp);
+	}
+}
diff --git a/dings/bruecke.h b/dings/bruecke.h
index 21e2cd0..2fc8a99 100644
--- a/dings/bruecke.h
+++ b/dings/bruecke.h
@@ -44,6 +44,11 @@ public:
 	void zeige_info() {} // show no info
 
 	void rotate90();
+	/**
+	 * @returns NULL wenn OK, ansonsten eine Fehlermeldung
+	 * @author Hj. Malthaner
+	 */
+	virtual const char *ist_entfernbar(const spieler_t *sp);
 };
 
 #endif
diff --git a/dings/field.cc b/dings/field.cc
index 3ebad50..3d621b6 100644
--- a/dings/field.cc
+++ b/dings/field.cc
@@ -26,6 +26,10 @@ stringhashtable_tpl<const field_besch_t *> field_t::besch_table;
 
 void field_t::register_besch(field_besch_t *besch, const char*name)
 {
+	// remove duplicates
+	if(  besch_table.remove( name )  ) {
+		dbg->warning( "field_t::register_besch()", "Object %s was overlaid by addon!", name );
+	}
 	besch_table.put(name, besch);
 }
 
diff --git a/dings/field.h b/dings/field.h
index 167f5a8..074ff78 100644
--- a/dings/field.h
+++ b/dings/field.h
@@ -6,7 +6,6 @@
 #include "../simdings.h"
 #include "../simworld.h"
 #include "../simimg.h"
-#include "../besch/fabrik_besch.h"
 
 
 class loadsave_t;
diff --git a/dings/gebaeude.cc b/dings/gebaeude.cc
index 61cb3d9..96fcdab 100644
--- a/dings/gebaeude.cc
+++ b/dings/gebaeude.cc
@@ -131,8 +131,7 @@ gebaeude_t::~gebaeude_t()
 
 
 
-void
-gebaeude_t::rotate90()
+void gebaeude_t::rotate90()
 {
 	ding_t::rotate90();
 
@@ -142,18 +141,20 @@ gebaeude_t::rotate90()
 		uint8 layout = tile->get_layout();
 		koord new_offset = tile->get_offset();
 
-		if(haus_besch->get_all_layouts()<=4) {
-			layout = (layout+3) % haus_besch->get_all_layouts();
+		if(haus_besch->get_utyp() == haus_besch_t::unbekannt  ||  haus_besch->get_all_layouts()<=4) {
+			layout = (layout & 4) + ((layout+3) % haus_besch->get_all_layouts() & 3);
 		}
 		else {
-
 			static uint8 layout_rotate[16] = { 1, 8, 5, 10, 3, 12, 7, 14, 9, 0, 13, 2, 11, 4, 15, 6 };
 			layout = layout_rotate[layout] % haus_besch->get_all_layouts();
 		}
 		// have to rotate the tiles :(
-		if (!haus_besch->can_rotate() && haus_besch->get_all_layouts() == 1 && (welt->get_einstellungen()->get_rotation() & 1) == 0) {
-			// rotate 180 degree
-			new_offset = koord(haus_besch->get_b() - 1 - new_offset.x, haus_besch->get_h() - 1 - new_offset.y);
+		if(  !haus_besch->can_rotate()  &&  haus_besch->get_all_layouts() == 1  ) {
+			if(  (welt->get_einstellungen()->get_rotation() & 1) == 0  ) {
+				// rotate 180 degree
+				new_offset = koord(haus_besch->get_b() - 1 - new_offset.x, haus_besch->get_h() - 1 - new_offset.y);
+			}
+			// do nothing here, since we cannot fix it porperly
 		}
 		else {
 			// rotate on ...
@@ -166,15 +167,18 @@ gebaeude_t::rotate90()
 		}
 
 		// suche a tile exist?
-		if (haus_besch->get_b(layout) > new_offset.x && haus_besch->get_h(layout) > new_offset.y) {
+		if(  haus_besch->get_b(layout) > new_offset.x  &&  haus_besch->get_h(layout) > new_offset.y  ) {
 			const haus_tile_besch_t* const new_tile = haus_besch->get_tile(layout, new_offset.x, new_offset.y);
 			// add new tile: but make them old (no construction)
 			uint32 old_insta_zeit = insta_zeit;
 			set_tile( new_tile );
 			insta_zeit = old_insta_zeit;
-			if (haus_besch->get_utyp() != haus_besch_t::hafen && !tile->has_image()) {
+			if(  haus_besch->get_utyp() != haus_besch_t::hafen  &&  !tile->has_image()  ) {
 				// may have a rotation, that is not recoverable
-				if(!is_factory  ||  new_offset!=koord(0,0)  ||  ptr.fab->get_besch()->get_haus()->get_tile(0,0,0)==NULL) {
+				if(  !is_factory  &&  new_offset!=koord(0,0)  ) {
+					welt->set_nosave_warning();
+				}
+				if(  is_factory  &&  (new_offset!=koord(0,0)  ||  ptr.fab->get_besch()->get_haus()->get_tile(0,0,0)==NULL)  ) {
 					// there are factories without a valid zero tile
 					// => this map rotation cannot be reloaded!
 					welt->set_nosave();
@@ -192,8 +196,7 @@ gebaeude_t::rotate90()
 /* sets the corresponding pointer to a factory
  * @author prissi
  */
-void
-gebaeude_t::set_fab(fabrik_t *fb)
+void gebaeude_t::set_fab(fabrik_t *fb)
 {
 	// sets the pointer in non-zero
 	if(fb) {
@@ -645,15 +648,17 @@ void gebaeude_t::info(cbuffer_t & buf) const
 			buf.append(buffer);
 		}
 
-		buf.append(translator::translate("Passagierrate"));
-		buf.append(": ");
-		buf.append(get_passagier_level());
-		buf.append("\n");
+		if( get_tile()->get_besch()->get_utyp() < haus_besch_t::bahnhof ) {
+			buf.append(translator::translate("Passagierrate"));
+			buf.append(": ");
+			buf.append(get_passagier_level());
+			buf.append("\n");
 
-		buf.append(translator::translate("Postrate"));
-		buf.append(": ");
-		buf.append(get_post_level());
-		buf.append("\n");
+			buf.append(translator::translate("Postrate"));
+			buf.append(": ");
+			buf.append(get_post_level());
+			buf.append("\n");
+		}
 
 		buf.append(translator::translate("\nBauzeit von"));
 		buf.append(tile->get_besch()->get_intro_year_month()/12);
@@ -740,7 +745,8 @@ gebaeude_t::rdwr(loadsave_t *file)
 						type = gebaeude_t::wohnung;
 					} else if(strncmp(buf+3,"FAB",3)==0) {
 						type = gebaeude_t::industrie;
-					} else {
+					}
+					else {
 						type = gebaeude_t::gewerbe;
 					}
 					level --;
diff --git a/dings/groundobj.cc b/dings/groundobj.cc
index a793873..870b9aa 100644
--- a/dings/groundobj.cc
+++ b/dings/groundobj.cc
@@ -43,14 +43,20 @@ vector_tpl<const groundobj_besch_t *> groundobj_t::groundobj_typen(0);
 /*
  * Diese Tabelle ermöglicht das Auffinden einer Beschreibung durch ihren Namen
  */
-stringhashtable_tpl<uint32> groundobj_t::besch_names;
+stringhashtable_tpl<groundobj_besch_t *> groundobj_t::besch_names;
 
 
 bool groundobj_t::alles_geladen()
 {
-	if (besch_names.empty()) {
+	groundobj_typen.resize(besch_names.get_count());
+	stringhashtable_iterator_tpl<groundobj_besch_t *>iter(besch_names);
+	while(  iter.next()  ) {
+		iter.access_current_value()->index = groundobj_typen.get_count();
+		groundobj_typen.append( iter.get_current_value() );
+	}
+	if(besch_names.empty()) {
+		groundobj_typen.append( NULL );
 		DBG_MESSAGE("groundobj_t", "No groundobj found - feature disabled");
-		groundobj_typen.append(NULL);
 	}
 	return true;
 }
@@ -59,13 +65,12 @@ bool groundobj_t::alles_geladen()
 
 bool groundobj_t::register_besch(groundobj_besch_t *besch)
 {
-	if(groundobj_typen.get_count()==0) {
-		// NULL for empty object
-		groundobj_typen.append(NULL);
-	}
 	assert(besch->get_speed()==0);
-	besch_names.put(besch->get_name(), groundobj_typen.get_count() );
-	groundobj_typen.append(besch);
+	// remove duplicates
+	if(  besch_names.remove( besch->get_name() )  ) {
+		dbg->warning( "groundobj_t::register_besch()", "Object %s was overlaid by addon!", besch->get_name() );
+	}
+	besch_names.put(besch->get_name(), besch );
 	return true;
 }
 
@@ -77,19 +82,23 @@ bool groundobj_t::register_besch(groundobj_besch_t *besch)
  */
 const groundobj_besch_t *groundobj_t::random_groundobj_for_climate(climate cl, hang_t::typ slope  )
 {
-	int weight = 0;
+	// none there
+	if(  besch_names.empty()  ) {
+		return NULL;
+	}
 
-	for( unsigned i=1;  i<groundobj_typen.get_count();  i++  ) {
+	int weight = 0;
+	for(  unsigned i=0;  i<groundobj_typen.get_count();  i++  ) {
 		if(  groundobj_typen[i]->is_allowed_climate(cl)  &&  (slope==hang_t::flach  ||  groundobj_typen[i]->get_phases()==16)  ) {
 			weight += groundobj_typen[i]->get_distribution_weight();
 		}
 	}
 
 	// now weight their distribution
-	if (weight > 0) {
+	if(  weight > 0  ) {
 		const int w=simrand(weight);
 		weight = 0;
-		for( unsigned i=1; i<groundobj_typen.get_count();  i++  ) {
+		for(  unsigned i=0;  i<groundobj_typen.get_count();  i++  ) {
 			if(  groundobj_typen[i]->is_allowed_climate(cl)  &&  (slope==hang_t::flach  ||  groundobj_typen[i]->get_phases()==16)  ) {
 				weight += groundobj_typen[i]->get_distribution_weight();
 				if(weight>=w) {
@@ -188,7 +197,13 @@ void groundobj_t::rdwr(loadsave_t *file)
 	else {
 		char bname[128];
 		file->rdwr_str(bname,128);
-		groundobjtype = besch_names.get(bname);
+		groundobj_besch_t *besch = besch_names.get(bname);
+		if(  besch_names.empty()  ||  besch==NULL  ) {
+			groundobjtype = simrand(groundobj_typen.get_count());
+		}
+		else {
+			groundobjtype = besch->get_index();
+		}
 		// if not there, besch will be zero
 	}
 }
diff --git a/dings/groundobj.h b/dings/groundobj.h
index 5b5a682..4bf2537 100644
--- a/dings/groundobj.h
+++ b/dings/groundobj.h
@@ -29,7 +29,7 @@ private:
 	uint16 age;	// in month
 
 	// static for administration
-	static stringhashtable_tpl<uint32> besch_names;
+	static stringhashtable_tpl<groundobj_besch_t *> besch_names;
 	static vector_tpl<const groundobj_besch_t *> groundobj_typen;
 
 public:
diff --git a/dings/label.cc b/dings/label.cc
index b99386c..f80f5ad 100644
--- a/dings/label.cc
+++ b/dings/label.cc
@@ -18,6 +18,7 @@
 #include "../gui/label_info.h"
 
 #include "../besch/grund_besch.h"
+#include "../besch/skin_besch.h"
 
 #include "../dataobj/umgebung.h"
 
diff --git a/dings/lagerhaus.cc b/dings/lagerhaus.cc
deleted file mode 100644
index fa59025..0000000
--- a/dings/lagerhaus.cc
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (c) 1997 - 2001 Hansjörg Malthaner
- *
- * This file is part of the Simutrans project under the artistic licence.
- * (see licence.txt)
- */
-
-#include <stdio.h>
-
-#ifdef LAGER_NOT_IN_USE
-
-#include "../simdebug.h"
-#include "../simtypes.h"
-#include "../simimg.h"
-#include "../simhalt.h"
-#include "../simplay.h"
-#include "../dataobj/translator.h"
-#include "../dataobj/loadsave.h"
-#include "lagerhaus.h"
-
-int lagerhaus_t::max_lager = 500;
-
-
-lagerhaus_t::lagerhaus_t(karte_t *welt, loadsave_t *file) :
-    gebaeude_t(welt)
-{
-    for(int i=0; i<warenbauer_t::MAX_WAREN; i++) {
-	lager[i].set_typ(i);
-    }
-    rdwr(file);
-    set_bild(0, IMG_LAGERHAUS);
-}
-
-
-lagerhaus_t::lagerhaus_t(karte_t *welt, koord3d pos, spieler_t *sp) :
-    gebaeude_t(welt, pos, sp, gebaeude_t::unbekannt, 1)
-{
-    for(int i=0; i<warenbauer_t::MAX_WAREN; i++) {
-	lager[i].menge = 0;
-	lager[i].set_typ(i);
-    }
-
-    set_bild(0, IMG_LAGERHAUS);
-}
-
-lagerhaus_t::~lagerhaus_t()
-{
-    halthandle_t halt = get_besitzer()->is_my_halt(get_pos().get_2d());
-
-    if(halt.is_bound()) {
-	halt->set_lager( NULL );
-    } else {
-	printf("~lagerhaus: konnte lagerhaus nicht bei haltestelle abmelden!\n");
-    }
-}
-
-
-bool
-lagerhaus_t::nimmt_an(int wtyp) const
-{
-    // typ ungleich Passagiere
-    if(wtyp != 0) {
-	return lager[wtyp].menge < max_lager;
-    } else {
-	return false;
-    }
-}
-
-bool
-lagerhaus_t::gibt_ab(int wtyp) const
-{
-    return lager[wtyp].menge > 0;
-}
-
-/**
- * holt ware ab
- * @return abgeholte menge
- */
-int
-lagerhaus_t::hole_ab(int wtyp, int menge )
-{
-    int abgeholt = menge;
-
-    if(menge > lager[wtyp].menge) {
-	abgeholt = lager[wtyp].menge;
-    }
-    lager[wtyp].menge -= abgeholt;
-
-    return abgeholt;
-}
-
-/**
- * liefert ware an
- * @return angenommene menge
- */
-int
-lagerhaus_t::liefere_an(int wtyp, int menge )
-{
-    if(lager[wtyp].menge + menge > max_lager) {
-	menge = max_lager - lager[wtyp].menge;
-    }
-
-    lager[wtyp].menge += menge;
-
-    return menge;
-}
-
-
-char *
-lagerhaus_t::info_lagerbestand(char *buf) const
-{
-    for(int i=1; i<warenbauer_t::MAX_WAREN; i++) {
-	buf += sprintf(buf, "%s  %d %s\n",
-                       translator::translate(lager[i].name()),
-		       lager[i].menge,
-                       translator::translate(lager[i].mass())
-		      );
-    }
-    return buf;
-}
-
-void
-lagerhaus_t::rdwr(loadsave_t *file)
-{
-    gebaeude_t::rdwr(file);
-
-    for(int i=0; i<warenbauer_t::MAX_WAREN; i++) {
-	file->rdwr_long(lager[i].menge, "\n");
-    }
-}
-#endif
diff --git a/dings/lagerhaus.h b/dings/lagerhaus.h
deleted file mode 100644
index 3a29b10..0000000
--- a/dings/lagerhaus.h
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef dings_lagerhaus_h
-#define dings_lagerhaus_h
-
-#include "../simware.h"
-#include "gebaeude.h"
-
-#error "Unsupported!"
-
-class lagerhaus_t : public gebaeude_t
-{
-private:
-
-    static int max_lager;
-
-    ware_t lager [warenbauer::MAX_WAREN];
-
-public:
-
-
-    lagerhaus_t(karte_t *welt, loadsave_t *file);
-    lagerhaus_t(karte_t *welt, koord3d pos, spieler_t *sp);
-
-    ~lagerhaus_t();
-
-    /**
-     * in top-level fenstern wird der Name in der Titelzeile dargestellt
-     * @return den nicht uebersetzten Namen der Komponente
-     */
-    virtual const char* get_name() const { return "Lagerhaus"; }
-
-    enum ding_t::typ get_typ() const { return lagerhaus; }
-
-    bool nimmt_an(int wtyp) const;
-
-    bool gibt_ab(int wtyp) const;
-
-    /**
-     * holt ware ab
-     * @return abgeholte menge
-     */
-    int hole_ab(int wtyp, int menge );
-
-    /**
-     * liefert ware an
-     * @return angenommene menge
-     */
-    int liefere_an(int wtyp, int menge );
-
-    char * info_lagerbestand(char *buf) const;
-
-    void rdwr(loadsave_t *file);
-};
-
-#endif
diff --git a/dings/leitung2.cc b/dings/leitung2.cc
index 9d5ff00..5c6f42f 100644
--- a/dings/leitung2.cc
+++ b/dings/leitung2.cc
@@ -80,6 +80,7 @@ leitung_t::suche_fab_4(const koord pos)
 leitung_t::leitung_t(karte_t *welt, loadsave_t *file) : ding_t(welt)
 {
 	set_net(NULL);
+	ribi = ribi_t::keine;
 	rdwr(file);
 }
 
@@ -465,7 +466,8 @@ pumpe_t::sync_step(long /*delta_t*/)
 	image_id new_bild;
 	if (!fab->is_currently_producing()) {
 		new_bild = skinverwaltung_t::pumpe->get_bild_nr(0);
-	} else {
+	}
+	else {
 		// no input needed or has something to consume
 		get_net()->add_power(fab->get_power());
 		new_bild = skinverwaltung_t::pumpe->get_bild_nr(1);
@@ -541,7 +543,8 @@ senke_t::sync_step(long time)
 	image_id new_bild;
 	if(get_power>want_power/2) {
 		new_bild = skinverwaltung_t::senke->get_bild_nr(1);
-	} else {
+	}
+	else {
 		new_bild = skinverwaltung_t::senke->get_bild_nr(0);
 	}
 	if(bild!=new_bild) {
diff --git a/dings/roadsign.cc b/dings/roadsign.cc
index 34aa365..36b3ba3 100644
--- a/dings/roadsign.cc
+++ b/dings/roadsign.cc
@@ -12,6 +12,7 @@
 #include "../simdings.h"
 #include "../simimg.h"
 #include "../player/simplay.h"
+#include "../simwerkz.h"
 #include "../simworld.h"
 
 #include "../besch/roadsign_besch.h"
@@ -431,7 +432,13 @@ static bool compare_roadsign_besch(const roadsign_besch_t* a, const roadsign_bes
 /* static stuff from here on ... */
 bool roadsign_t::alles_geladen()
 {
-	if (liste.empty()) {
+	liste.resize(table.get_count());
+	stringhashtable_iterator_tpl<const roadsign_besch_t *>iter(table);
+	while(  iter.next()  ) {
+		liste.append( iter.get_current_value() );
+	}
+
+	if(liste.empty()) {
 		DBG_MESSAGE("roadsign_t", "No signs found - feature disabled");
 	}
 	else {
@@ -444,11 +451,16 @@ bool roadsign_t::alles_geladen()
 
 bool roadsign_t::register_besch(roadsign_besch_t *besch)
 {
+	// remove duplicates
+	if(  table.remove( besch->get_name() )  ) {
+		dbg->warning( "roadsign_t::register_besch()", "Object %s was overlaid by addon!", besch->get_name() );
+	}
 	roadsign_t::table.put(besch->get_name(), besch);
-	roadsign_t::liste.append(besch);
+
 	if(besch->get_wtyp()==track_wt  &&  besch->get_flags()==roadsign_besch_t::SIGN_SIGNAL) {
 		default_signal = besch;
 	}
+
 	if(umgebung_t::drive_on_left  &&  besch->get_wtyp()==road_wt) {
 		// correct for driving on left side
 		if(besch->is_traffic_light()) {
@@ -474,7 +486,6 @@ bool roadsign_t::register_besch(roadsign_besch_t *besch)
 			display_set_base_image_offset( besch->get_bild_nr(3), +XOFF, -YOFF );
 		}
 	}
-DBG_DEBUG( "roadsign_t::register_besch()","%s", besch->get_name() );
 	return true;
 }
 
@@ -485,7 +496,7 @@ DBG_DEBUG( "roadsign_t::register_besch()","%s", besch->get_name() );
  * Fill menu with icons of given stops from the list
  * @author Hj. Malthaner
  */
-void roadsign_t::fill_menu(werkzeug_waehler_t *wzw, waytype_t wtyp, const karte_t *welt)
+void roadsign_t::fill_menu(werkzeug_waehler_t *wzw, waytype_t wtyp, sint16 sound_ok, const karte_t *welt)
 {
 	static stringhashtable_tpl<wkz_roadsign_t *> sign_tool;
 	const uint16 time = welt->get_timeline_year_month();
@@ -503,6 +514,7 @@ void roadsign_t::fill_menu(werkzeug_waehler_t *wzw, waytype_t wtyp, const karte_
 					wkz->set_icon( besch->get_cursor()->get_bild_nr(1) );
 					wkz->cursor = besch->get_cursor()->get_bild_nr(0),
 					wkz->default_param = besch->get_name();
+					wkz->ok_sound = sound_ok;
 					sign_tool.put(besch->get_name(),wkz);
 				}
 				wzw->add_werkzeug( (werkzeug_t*)wkz );
diff --git a/dings/roadsign.h b/dings/roadsign.h
index fb7ddbf..f8514cf 100644
--- a/dings/roadsign.h
+++ b/dings/roadsign.h
@@ -10,7 +10,6 @@
 
 #include "../simdings.h"
 #include "../simtypes.h"
-#include "../simwerkz.h"
 #include "../besch/roadsign_besch.h"
 #include "../ifc/sync_steppable.h"
 #include "../tpl/vector_tpl.h"
@@ -126,7 +125,7 @@ public:
 	 * Fill menu with icons of given stops from the list
 	 * @author Hj. Malthaner
 	 */
-	static void fill_menu(werkzeug_waehler_t *wzw, waytype_t wtyp, const karte_t *welt);
+	static void fill_menu(werkzeug_waehler_t *wzw, waytype_t wtyp, sint16 sound_ok, const karte_t *welt);
 
 	static const roadsign_besch_t *roadsign_search(uint8 flag,const waytype_t wt,const uint16 time);
 
diff --git a/dings/tunnel.cc b/dings/tunnel.cc
index 1253da7..b8ff1cb 100644
--- a/dings/tunnel.cc
+++ b/dings/tunnel.cc
@@ -51,11 +51,11 @@ tunnel_t::calc_bild()
 	if(gr->ist_karten_boden()) {
 		hang_t::typ hang = gr->get_grund_hang();
 		set_bild( besch->get_hintergrund_nr(hang, get_pos().z >= welt->get_snowline()));
-		after_bild = besch->get_vordergrund_nr(hang, get_pos().z >= welt->get_snowline());
+		set_after_bild( besch->get_vordergrund_nr(hang, get_pos().z >= welt->get_snowline()) );
 	}
 	else {
 		set_bild( IMG_LEER );
-		after_bild = IMG_LEER;
+		set_after_bild( IMG_LEER );
 	}
 }
 
@@ -123,3 +123,29 @@ void tunnel_t::entferne( spieler_t *sp2 )
 	}
 	spieler_t::accounting(sp2, -besch->get_preis(), get_pos().get_2d(), COST_CONSTRUCTION );
 }
+
+void tunnel_t::set_bild( image_id b )
+{
+	mark_image_dirty( bild, get_yoff() );
+	mark_image_dirty( b, get_yoff() );
+	bild = b;
+}
+
+void tunnel_t::set_after_bild( image_id b )
+{
+	mark_image_dirty( after_bild, get_yoff() );
+	mark_image_dirty( b, get_yoff() );
+	after_bild = b;
+}
+
+// returns NULL, if removal is allowed
+// players can remove public owned ways
+const char *tunnel_t::ist_entfernbar(const spieler_t *sp)
+{
+	if (get_player_nr()==1) {
+		return NULL;
+	}
+	else {
+		return ding_t::ist_entfernbar(sp);
+	}
+}
diff --git a/dings/tunnel.h b/dings/tunnel.h
index 2ad5134..18849e3 100644
--- a/dings/tunnel.h
+++ b/dings/tunnel.h
@@ -22,12 +22,15 @@ public:
 
 	void calc_bild();
 
-	inline void set_bild( image_id b ) { bild = b; }
+	void set_bild( image_id b );
+	void set_after_bild( image_id b );
 	image_id get_bild() const {return bild;}
 	image_id get_after_bild() const { return after_bild; }
 
 	const tunnel_besch_t *get_besch() const { return besch; }
 
+	void set_besch( const tunnel_besch_t *_besch ) { besch = _besch; }
+
 	void zeige_info() {} // show no info
 
 	void rdwr(loadsave_t *file);
@@ -35,6 +38,13 @@ public:
 	void laden_abschliessen();
 
 	void entferne(spieler_t *sp);
+
+	bool check_season( const long ) { calc_bild(); return true; };
+	/**
+	 * @returns NULL wenn OK, ansonsten eine Fehlermeldung
+	 * @author Hj. Malthaner
+	 */
+	virtual const char *ist_entfernbar(const spieler_t *sp);
 };
 
 #endif
diff --git a/dings/wayobj.cc b/dings/wayobj.cc
index be5f730..4d29038 100644
--- a/dings/wayobj.cc
+++ b/dings/wayobj.cc
@@ -16,7 +16,9 @@
 #include "../simimg.h"
 #include "../simdings.h"
 #include "../player/simplay.h"
+#include "../simwerkz.h"
 
+#include "../dataobj/loadsave.h"
 #include "../dataobj/ribi.h"
 #include "../dataobj/translator.h"
 #include "../dataobj/umgebung.h"
@@ -28,6 +30,7 @@
 #include "../gui/werkzeug_waehler.h"
 
 #include "../boden/grund.h"
+#include "../boden/wege/weg.h"
 
 #include "../tpl/stringhashtable_tpl.h"
 
@@ -99,6 +102,29 @@ wayobj_t::~wayobj_t()
 			}
 		}
 	}
+
+	mark_image_dirty( get_after_bild(), 0 );
+	mark_image_dirty( get_bild(), 0 );
+	grund_t *gr = welt->lookup( get_pos() );
+	if( gr ) {
+		for( uint8 i = 0; i < 4; i++ ) {
+			// Remove ribis from adjacent wayobj.
+			if( ribi_t::nsow[i] & get_dir() ) {
+				grund_t *next_gr;
+				if( gr->get_neighbour( next_gr, besch->get_wtyp(), ribi_t::nsow[i] ) ) {
+					wayobj_t *wo2 = next_gr->get_wayobj( besch->get_wtyp() );
+					if( wo2 ) {
+						wo2->mark_image_dirty( wo2->get_after_bild(), 0 );
+						wo2->mark_image_dirty( wo2->get_bild(), 0 );
+						wo2->set_dir( wo2->get_dir() & ribi_t::get_forward(ribi_t::nsow[i]) );
+						wo2->mark_image_dirty( wo2->get_after_bild(), 0 );
+						wo2->mark_image_dirty( wo2->get_bild(), 0 );
+						wo2->set_flag(ding_t::dirty);
+					}
+				}
+			}
+		}
+	}
 }
 
 
@@ -211,7 +237,7 @@ wayobj_t::find_next_ribi(const grund_t *start, const koord dir, const waytype_t
 	grund_t *to;
 	ribi_t::ribi r1 = ribi_t::keine;
 	if(start->get_neighbour(to,wt,dir)) {
-		const wayobj_t* wo = to->find<wayobj_t>();
+		const wayobj_t* wo = to->get_wayobj( wt );
 		if(wo) {
 			r1 = wo->get_dir();
 		}
@@ -301,7 +327,7 @@ wayobj_t::calc_bild()
 					rekursion++;
 					for(int r = 0; r < 4; r++) {
 						if(gr->get_neighbour(to, wt, koord::nsow[r])) {
-							wayobj_t* wo = to->find<wayobj_t>();
+							wayobj_t* wo = to->get_wayobj( wt );
 							if(wo) {
 								wo->calc_bild();
 							}
@@ -328,41 +354,29 @@ wayobj_t::calc_bild()
 
 /* better use this constrcutor for new wayobj; it will extend a matching obj or make an new one
  */
-void
-wayobj_t::extend_wayobj_t(karte_t *welt, koord3d pos, spieler_t *besitzer, ribi_t::ribi dir, const way_obj_besch_t *besch)
+void wayobj_t::extend_wayobj_t(karte_t *welt, koord3d pos, spieler_t *besitzer, ribi_t::ribi dir, const way_obj_besch_t *besch)
 {
 	grund_t *gr=welt->lookup(pos);
-	waytype_t wt1 = besch->get_wtyp()==tram_wt ? track_wt : besch->get_wtyp();
 	if(gr) {
-		if (gr->find<wayobj_t>()) {
-			// since there might be more than one, we have to iterate through all of them
-			for( uint8 i=0;  i<gr->get_top();  i++  ) {
-				ding_t *d=gr->obj_bei(i);
-				if(d  &&  d->get_typ()==ding_t::wayobj ) {
-					waytype_t wt2 = ((wayobj_t *)d)->get_besch()->get_wtyp();
-					if(wt2==tram_wt) {
-						wt2 = track_wt;
-					}
-					if(  wt1==wt2  ) {
-						if(((wayobj_t *)d)->get_besch()->get_topspeed()<besch->get_topspeed()  &&  spieler_t::check_owner(besitzer, d->get_besitzer())) {
-							// replace slower by faster
-							gr->obj_remove(d);
-							gr->set_flag(grund_t::dirty);
-							delete d;
-							break;
-						}
-						else {
-							// extend this one instead
-							((wayobj_t *)d)->set_dir(dir|((wayobj_t *)d)->get_dir());
-							d->calc_bild();
-							d->mark_image_dirty( d->get_after_bild(), 0 );
-							d->set_flag(ding_t::dirty);
-							return;
-						}
-					}
-				}
+		wayobj_t *existing_wayobj = gr->get_wayobj( besch->get_wtyp() );
+		if( existing_wayobj ) {
+			if(existing_wayobj->get_besch()->get_topspeed()<besch->get_topspeed()  &&  spieler_t::check_owner(besitzer, existing_wayobj->get_besitzer())) {
+				// replace slower by faster
+				dir = dir | existing_wayobj->get_dir();
+				gr->obj_remove(existing_wayobj);
+				gr->set_flag(grund_t::dirty);
+				delete existing_wayobj;
+			}
+			else {
+				// extend this one instead
+				existing_wayobj->set_dir(dir|existing_wayobj->get_dir());
+				existing_wayobj->mark_image_dirty( existing_wayobj->get_after_bild(), 0 );
+				existing_wayobj->mark_image_dirty( existing_wayobj->get_bild(), 0 );
+				existing_wayobj->set_flag(ding_t::dirty);
+				return;
 			}
 		}
+
 		// nothing found => make a new one
 		wayobj_t *wo = new wayobj_t(welt,pos,besitzer,dir,besch);
 		gr->obj_add(wo);
@@ -370,6 +384,22 @@ wayobj_t::extend_wayobj_t(karte_t *welt, koord3d pos, spieler_t *besitzer, ribi_
 		wo->mark_image_dirty( wo->get_after_bild(), 0 );
 		wo->set_flag(ding_t::dirty);
 		spieler_t::accounting( besitzer,  -besch->get_preis(), pos.get_2d(), COST_CONSTRUCTION);
+
+		for( uint8 i = 0; i < 4; i++ ) {
+		// Extend wayobjects around the new one, that aren't already connected.
+			if( ribi_t::nsow[i] & ~wo->get_dir() ) {
+				grund_t *next_gr;
+				if( gr->get_neighbour( next_gr, besch->get_wtyp(), ribi_t::nsow[i] ) ) {
+					wayobj_t *wo2 = next_gr->get_wayobj( besch->get_wtyp() );
+					if( wo2 ) {
+						wo2->set_dir( wo2->get_dir() | ribi_t::rueckwaerts(ribi_t::nsow[i]) );
+						wo2->mark_image_dirty( wo2->get_after_bild(), 0 );
+						wo->set_dir( wo->get_dir() | ribi_t::nsow[i] );
+						wo->mark_image_dirty( wo->get_after_bild(), 0 );
+					}
+				}
+			}
+		}
 	}
 }
 
@@ -404,9 +434,16 @@ bool wayobj_t::alles_geladen()
 
 
 
-bool
-wayobj_t::register_besch(way_obj_besch_t *besch)
+bool wayobj_t::register_besch(way_obj_besch_t *besch)
 {
+	// avoid duplicates with same name
+	const way_obj_besch_t *old_besch = table.get(besch->get_name());
+	if(old_besch) {
+		dbg->warning( "wayobj_t::register_besch()", "Object %s was overlaid by addon!", besch->get_name() );
+		table.remove(besch->get_name());
+		liste.remove(old_besch);
+	}
+
 	table.put(besch->get_name(), besch);
 	liste.append(besch);
 	if(besch->get_own_wtyp()==overheadlines_wt  &&  besch->get_wtyp()==track_wt  &&
@@ -424,7 +461,7 @@ DBG_DEBUG( "wayobj_t::register_besch()","%s", besch->get_name() );
  * Fill menu with icons of given stops from the list
  * @author Hj. Malthaner
  */
-void wayobj_t::fill_menu(werkzeug_waehler_t *wzw, waytype_t wtyp, const karte_t *welt)
+void wayobj_t::fill_menu(werkzeug_waehler_t *wzw, waytype_t wtyp, sint16 sound_ok, const karte_t *welt)
 {
 	static stringhashtable_tpl<wkz_wayobj_t *> wayobj_tool;
 
@@ -443,6 +480,7 @@ DBG_DEBUG("wayobj_t::fill_menu()","maximum %i",liste.get_count());
 					wkz = new wkz_wayobj_t();
 					wkz->set_icon( besch->get_cursor()->get_bild_nr(1) );
 					wkz->cursor = besch->get_cursor()->get_bild_nr(0);
+					wkz->ok_sound = sound_ok;
 					wkz->default_param = besch->get_name();
 					wayobj_tool.put(besch->get_name(),wkz);
 				}
diff --git a/dings/wayobj.h b/dings/wayobj.h
index 8405b74..b4c1945 100644
--- a/dings/wayobj.h
+++ b/dings/wayobj.h
@@ -11,15 +11,15 @@
 #include "../simtypes.h"
 #include "../simimg.h"
 #include "../simdings.h"
-#include "../simworld.h"
 #include "../dataobj/ribi.h"
 #include "../besch/way_obj_besch.h"
 #include "../tpl/vector_tpl.h"
 #include "../tpl/stringhashtable_tpl.h"
-#include "../simwerkz.h"
 
 class spieler_t;
+class karte_t;
 class koord;
+class grund_t;
 class werkzeug_waehler_t;
 
 /**
@@ -130,7 +130,7 @@ public:
 	 * Fill menu with icons of given stops from the list
 	 * @author Hj. Malthaner
 	 */
-	static void fill_menu(werkzeug_waehler_t *wzw, waytype_t wtyp, const karte_t *welt);
+	static void fill_menu(werkzeug_waehler_t *wzw, waytype_t wtyp, sint16 sound_ok, const karte_t *welt);
 };
 
 #endif
diff --git a/dings/wolke.cc b/dings/wolke.cc
index f79e5f6..7b867e5 100644
--- a/dings/wolke.cc
+++ b/dings/wolke.cc
@@ -6,6 +6,7 @@
  */
 
 #include <stdio.h>
+#include <string.h>
 
 #include "../simworld.h"
 #include "../simdings.h"
@@ -22,6 +23,13 @@ vector_tpl<const skin_besch_t *>wolke_t::all_clouds(0);
 
 bool wolke_t::register_besch(const skin_besch_t* besch)
 {
+	// avoid duplicates with same name
+	for(uint8 i=0; i<all_clouds.get_count(); i++) {
+		if (strcmp(all_clouds[i]->get_name(),besch->get_name())==0) {
+			all_clouds[i] = besch;
+			return true;
+		}
+	}
 	return all_clouds.append_unique( besch );
 }
 
@@ -30,7 +38,7 @@ bool wolke_t::register_besch(const skin_besch_t* besch)
 
 
 wolke_t::wolke_t(karte_t *welt, koord3d pos, sint8 x_off, sint8 y_off, const skin_besch_t* besch ) :
-    ding_t(welt, pos)
+	ding_t(welt, pos)
 {
 	cloud_nr = all_clouds.index_of(besch);
 	base_y_off = clamp( (((sint16)y_off-8)*TILE_STEPS)/16, -128, 127 );
diff --git a/dings/wolke.h b/dings/wolke.h
index 8e48cda..72cebfb 100644
--- a/dings/wolke.h
+++ b/dings/wolke.h
@@ -5,7 +5,6 @@
 #include "../ifc/sync_steppable.h"
 #include "../tpl/vector_tpl.h"
 #include "../simimg.h"
-#include "../simimg.h"
 
 class karte_t;
 class rauch_besch_t;
diff --git a/dings/zeiger.cc b/dings/zeiger.cc
index 8da37ff..feaba57 100644
--- a/dings/zeiger.cc
+++ b/dings/zeiger.cc
@@ -19,6 +19,7 @@ zeiger_t::zeiger_t(karte_t *welt, loadsave_t *file) : ding_t(welt)
 	changed = false;
 	richtung = ribi_t::alle;
 	bild = IMG_LEER;
+	after_bild = IMG_LEER;
 	area = koord(0,0);
 	center = 0;
 	rdwr(file);
@@ -32,13 +33,13 @@ zeiger_t::zeiger_t(karte_t *welt, koord3d pos, spieler_t *sp) :
 	set_besitzer( sp );
 	richtung = ribi_t::alle;
 	bild = IMG_LEER;
+	after_bild = IMG_LEER;
 	area = koord(0,0);
 	center = 0;
 }
 
 
-void
-zeiger_t::change_pos(koord3d k )
+void zeiger_t::change_pos(koord3d k )
 {
 	if(k!=get_pos()) {
 		// remove from old position
@@ -53,7 +54,8 @@ zeiger_t::change_pos(koord3d k )
 			}
 			welt->mark_area( get_pos()-(area*center)/2, area, false );
 		}
-		mark_image_dirty( get_bild(), 0 );
+		mark_image_dirty( get_bild(), get_yoff() );
+		mark_image_dirty( get_after_bild(), get_yoff() );
 		set_flag(ding_t::dirty);
 
 		ding_t::set_pos(k);
@@ -77,8 +79,7 @@ zeiger_t::change_pos(koord3d k )
 }
 
 
-void
-zeiger_t::set_richtung(ribi_t::ribi r)
+void zeiger_t::set_richtung(ribi_t::ribi r)
 {
 	if(richtung != r) {
 		richtung = r;
@@ -86,12 +87,11 @@ zeiger_t::set_richtung(ribi_t::ribi r)
 }
 
 
-void
-zeiger_t::set_bild( image_id b )
+void zeiger_t::set_bild( image_id b )
 {
 	// mark dirty
-	mark_image_dirty( bild, 0 );
-	mark_image_dirty( b, 0 );
+	mark_image_dirty( bild, get_yoff() );
+	mark_image_dirty( b, get_yoff() );
 	bild = b;
 	if(  (area.x|area.y)>1  ) {
 		welt->mark_area( get_pos()-(area*center)/2, area, false );
@@ -103,9 +103,24 @@ zeiger_t::set_bild( image_id b )
 }
 
 
+void zeiger_t::set_after_bild( image_id b )
+{
+	// mark dirty
+	mark_image_dirty( after_bild, get_yoff() );
+	mark_image_dirty( b, get_yoff() );
+	after_bild = b;
+	if(  (area.x|area.y)>1  ) {
+		welt->mark_area( get_pos()-(area*center)/2, area, false );
+	}
+	if(!changed) {
+		area = koord(0,0);
+		center = 0;
+	}
+}
+
+
 /* change the marked area around the cursor */
-void
-zeiger_t::set_area(koord new_area, uint8 new_center)
+void zeiger_t::set_area(koord new_area, uint8 new_center)
 {
 	changed = true;
 	if(new_area==area  &&  (new_center^center)) {
diff --git a/dings/zeiger.h b/dings/zeiger.h
index 8921ba6..19f7b2b 100644
--- a/dings/zeiger.h
+++ b/dings/zeiger.h
@@ -18,7 +18,7 @@ private:
 	uint8 center;
 	bool changed;
 	ribi_t::ribi richtung;
-	image_id bild;
+	image_id bild, after_bild;
 
 public:
 	void set_richtung(ribi_t::ribi r);
@@ -42,6 +42,9 @@ public:
 
 	void set_bild( image_id b );
 	image_id get_bild() const {return bild;}
+
+	void set_after_bild( image_id b );
+	image_id get_after_bild() const {return after_bild;}
 };
 
 #endif
diff --git a/distribute.sh b/distribute.sh
new file mode 100755
index 0000000..3789b31
--- /dev/null
+++ b/distribute.sh
@@ -0,0 +1,54 @@
+#!/bin/bash
+#
+# CHANGE THIS FOR BEOS, CYGWIB, ETC!
+if [ $MSYSTEM = MINGW32 ]
+  then
+  simexe=.exe
+  simarchiv=simuwin
+  echo "Windows"
+  else
+  simexe=
+  simarchiv=simulinux
+  echo "Linux"
+fi
+
+
+
+# (otherwise there will be many .svn included under windows)
+distribute()
+{
+	# pack all files of the current release
+	FILELISTE=`find simutrans -type f "(" -name "*.tab" -o -name "*.mid" -o -name "*.bdf" -o -name "*.fnt" -o -name "*.txt"  -o -name "*.dll" ")"`
+	zip -9 $simarchiv.zip $FILELISTE simutrans/simutrans$simexe
+}
+
+# now built the archive for distribution
+cd simutrans
+cp ../sim$simexe ./simutrans$simexe
+strip simutrans$simexe
+cd text
+# get the translations for basis
+# The first file is longer, but only because it contains SQL error messages
+# - discard it after complete download (although parsing it would give us the archive's name):
+wget --post-data "version=0&choice=all&submit=Export!" --delete-after http://simutrans-germany.com/translator/script/wrap.php || {
+  echo "Error: generating file language_pack-Base+texts.zip failed (wget returned $?)" >&2;
+  exit 3;
+}
+wget -N http://simutrans-germany.com/translator/data/tab/language_pack-Base+texts.zip || {
+  echo "Error: download of file language_pack-Base+texts.zip failed (wget returned $?)" >&2
+  rm -f "language_pack-Base+texts.zip"
+  exit 4
+}
+unzip -tv "language_pack-Base+texts.zip" || {
+   echo "Error: file language_pack-Base+texts.zip seems to be defective" >&2
+   rm -f "language_pack-Base+texts.zip"
+   exit 5
+}
+unzip "language_pack-Base+texts.zip"
+rm language_pack-Base+texts.zip
+# remove Chris English (may become british ... )
+rm ce.tab
+cd ../..
+distribute
+rm simutrans/simutrans$simexe
+rm simutrans/text/*.tab
diff --git a/documentation/simutrans-palette.pal b/documentation/simutrans-palette.pal
index 0a860de..ba7643a 100644
--- a/documentation/simutrans-palette.pal
+++ b/documentation/simutrans-palette.pal
@@ -1,259 +1,259 @@
-JASC-PAL
-0100
-256
-36 75 103
-57 94 124
-76 113 145
-96 132 167
-116 151 189
-136 171 211
-156 190 233
-176 210 255
-88 88 88
-107 107 107
-125 125 125
-144 144 144
-162 162 162
-181 181 181
-200 200 200
-219 219 219
-17 55 133
-27 71 150
-37 86 167
-48 102 185
-58 117 202
-69 133 220
-79 149 237
-90 165 255
-123 88 3
-142 111 4
-161 134 5
-180 157 7
-198 180 8
-217 203 10
-236 226 11
-255 249 13
-86 32 14
-110 40 16
-134 48 18
-158 57 20
-182 65 22
-206 74 24
-230 82 26
-255 91 28
-34 59 10
-44 80 14
-53 101 18
-63 122 22
-77 143 29
-92 164 37
-106 185 44
-121 207 52
-0 86 78
-0 108 98
-0 130 118
-0 152 138
-0 174 158
-0 196 178
-0 218 198
-0 241 219
-74 7 122
-95 21 139
-116 37 156
-138 53 173
-160 69 191
-181 85 208
-203 101 225
-225 117 243
-59 41 0
-83 55 0
-107 69 0
-131 84 0
-155 98 0
-179 113 0
-203 128 0
-227 143 0
-87 0 43
-111 11 69
-135 28 92
-159 45 115
-183 62 138
-230 74 174
-245 121 194
-255 156 209
-20 48 10
-44 74 28
-68 99 45
-93 124 62
-118 149 79
-143 174 96
-168 199 113
-193 225 130
-54 19 29
-82 44 44
-110 69 58
-139 95 72
-168 121 86
-197 147 101
-226 173 115
-255 199 130
-8 11 100
-14 22 116
-20 33 139
-26 44 162
-41 74 185
-57 104 208
-76 132 231
-96 160 255
-43 30 46
-68 50 85
-93 70 110
-118 91 130
-143 111 170
-168 132 190
-193 153 210
-219 174 230
-63 18 12
-90 38 30
-117 58 42
-145 78 55
-172 98 67
-200 118 80
-227 138 92
-255 159 105
-11 68 30
-33 94 56
-54 120 81
-76 147 106
-98 174 131
-120 201 156
-142 228 181
-164 255 207
-64 0 0
-96 0 0
-128 0 0
-192 0 0
-255 0 0
-255 64 64
-255 96 96
-255 128 128
-0 128 0
-0 196 0
-0 225 0
-0 240 0
-0 255 0
-64 255 64
-94 255 94
-128 255 128
-0 0 128
-0 0 192
-0 0 224
-0 0 255
-0 64 255
-0 94 255
-0 106 255
-0 128 255
-128 64 0
-193 97 0
-215 107 0
-255 128 0
-255 128 0
-255 149 43
-255 170 85
-255 193 132
-8 52 0
-16 64 0
-32 80 4
-48 96 4
-64 112 12
-84 132 20
-104 148 28
-128 168 44
-164 164 0
-193 193 0
-215 215 0
-255 255 0
-255 255 32
-255 255 64
-255 255 128
-255 255 172
-32 4 0
-64 20 8
-84 28 16
-108 44 28
-128 56 40
-148 72 56
-168 92 76
-184 108 88
-64 0 0
-96 8 0
-112 16 0
-120 32 8
-138 64 16
-156 72 32
-174 96 48
-192 128 64
-32 32 0
-64 64 0
-96 96 0
-128 128 0
-144 144 0
-172 172 0
-192 192 0
-224 224 0
-64 96 8
-80 108 32
-96 120 48
-112 144 56
-128 172 64
-150 210 68
-172 238 80
-192 255 96
-32 32 32
-48 48 48
-64 64 64
-80 80 80
-96 96 96
-172 172 172
-236 236 236
-255 255 255
-41 41 54
-60 45 70
-75 62 108
-95 77 136
-113 105 150
-135 120 176
-165 145 218
-198 191 232
-1 221 1
-255 33 29
-255 255 83
-127 155 241
-193 177 209
-87 101 111
-227 227 255
-77 77 77
-255 1 127
-1 1 255
-0 0 0
-107 107 107
-155 155 155
-179 179 179
-201 201 201
-223 223 223
-0 0 0
-128 0 0
-0 128 0
-128 128 0
-0 0 128
-128 0 128
-0 128 128
-192 192 192
-128 128 128
-255 0 0
-0 255 0
-255 255 0
-0 0 255
-255 0 255
-0 255 255
-255 255 255
+JASC-PAL
+0100
+256
+36 75 103
+57 94 124
+76 113 145
+96 132 167
+116 151 189
+136 171 211
+156 190 233
+176 210 255
+88 88 88
+107 107 107
+125 125 125
+144 144 144
+162 162 162
+181 181 181
+200 200 200
+219 219 219
+17 55 133
+27 71 150
+37 86 167
+48 102 185
+58 117 202
+69 133 220
+79 149 237
+90 165 255
+123 88 3
+142 111 4
+161 134 5
+180 157 7
+198 180 8
+217 203 10
+236 226 11
+255 249 13
+86 32 14
+110 40 16
+134 48 18
+158 57 20
+182 65 22
+206 74 24
+230 82 26
+255 91 28
+34 59 10
+44 80 14
+53 101 18
+63 122 22
+77 143 29
+92 164 37
+106 185 44
+121 207 52
+0 86 78
+0 108 98
+0 130 118
+0 152 138
+0 174 158
+0 196 178
+0 218 198
+0 241 219
+74 7 122
+95 21 139
+116 37 156
+138 53 173
+160 69 191
+181 85 208
+203 101 225
+225 117 243
+59 41 0
+83 55 0
+107 69 0
+131 84 0
+155 98 0
+179 113 0
+203 128 0
+227 143 0
+87 0 43
+111 11 69
+135 28 92
+159 45 115
+183 62 138
+230 74 174
+245 121 194
+255 156 209
+20 48 10
+44 74 28
+68 99 45
+93 124 62
+118 149 79
+143 174 96
+168 199 113
+193 225 130
+54 19 29
+82 44 44
+110 69 58
+139 95 72
+168 121 86
+197 147 101
+226 173 115
+255 199 130
+8 11 100
+14 22 116
+20 33 139
+26 44 162
+41 74 185
+57 104 208
+76 132 231
+96 160 255
+43 30 46
+68 50 85
+93 70 110
+118 91 130
+143 111 170
+168 132 190
+193 153 210
+219 174 230
+63 18 12
+90 38 30
+117 58 42
+145 78 55
+172 98 67
+200 118 80
+227 138 92
+255 159 105
+11 68 30
+33 94 56
+54 120 81
+76 147 106
+98 174 131
+120 201 156
+142 228 181
+164 255 207
+64 0 0
+96 0 0
+128 0 0
+192 0 0
+255 0 0
+255 64 64
+255 96 96
+255 128 128
+0 128 0
+0 196 0
+0 225 0
+0 240 0
+0 255 0
+64 255 64
+94 255 94
+128 255 128
+0 0 128
+0 0 192
+0 0 224
+0 0 255
+0 64 255
+0 94 255
+0 106 255
+0 128 255
+128 64 0
+193 97 0
+215 107 0
+255 128 0
+255 128 0
+255 149 43
+255 170 85
+255 193 132
+8 52 0
+16 64 0
+32 80 4
+48 96 4
+64 112 12
+84 132 20
+104 148 28
+128 168 44
+164 164 0
+193 193 0
+215 215 0
+255 255 0
+255 255 32
+255 255 64
+255 255 128
+255 255 172
+32 4 0
+64 20 8
+84 28 16
+108 44 28
+128 56 40
+148 72 56
+168 92 76
+184 108 88
+64 0 0
+96 8 0
+112 16 0
+120 32 8
+138 64 16
+156 72 32
+174 96 48
+192 128 64
+32 32 0
+64 64 0
+96 96 0
+128 128 0
+144 144 0
+172 172 0
+192 192 0
+224 224 0
+64 96 8
+80 108 32
+96 120 48
+112 144 56
+128 172 64
+150 210 68
+172 238 80
+192 255 96
+32 32 32
+48 48 48
+64 64 64
+80 80 80
+96 96 96
+172 172 172
+236 236 236
+255 255 255
+41 41 54
+60 45 70
+75 62 108
+95 77 136
+113 105 150
+135 120 176
+165 145 218
+198 191 232
+1 221 1
+255 33 29
+255 255 83
+127 155 241
+193 177 209
+87 101 111
+227 227 255
+77 77 77
+255 1 127
+1 1 255
+0 0 0
+107 107 107
+155 155 155
+179 179 179
+201 201 201
+223 223 223
+0 0 0
+128 0 0
+0 128 0
+128 128 0
+0 0 128
+128 0 128
+0 128 128
+192 192 192
+128 128 128
+255 0 0
+0 255 0
+255 255 0
+0 0 255
+255 0 255
+0 255 255
+255 255 255
diff --git a/freight_list_sorter.cc b/freight_list_sorter.cc
index 8aafec4..abbbce3 100644
--- a/freight_list_sorter.cc
+++ b/freight_list_sorter.cc
@@ -1,13 +1,17 @@
+#include "freight_list_sorter.h"
+#include "simhalt.h"
 #include "simtypes.h"
 #include "simware.h"
-#include "simhalt.h"
 #include "simworld.h"
+
 #include "dataobj/translator.h"
-#include "freight_list_sorter.h"
 
+#include "tpl/slist_tpl.h"
+#include "tpl/vector_tpl.h"
 
-freight_list_sorter_t::sort_mode_t freight_list_sorter_t::sortby=by_name;
+#include "utils/cbuffer_t.h"
 
+freight_list_sorter_t::sort_mode_t freight_list_sorter_t::sortby=by_name;
 
 /*
  * struct hold travel details for wares that travel
@@ -48,8 +52,11 @@ int freight_list_sorter_t::compare_ware(const void *td1, const void *td2)
 	const ware_t& ware1 = td1p->ware;
 	const ware_t& ware2 = td2p->ware;
 
-	// sort according to freight
-	int index = ware1.get_besch()->get_index()-ware2.get_besch()->get_index();
+	// If the ware1 and ware2 differs, they are sorted according to catg_index and index
+	int index = ware1.get_besch()->get_catg_index()-ware2.get_besch()->get_catg_index();
+	if(index==0) {
+		index = ware1.get_besch()->get_index()-ware2.get_besch()->get_index();
+	}
 	if(index!=0) {
 		return index;
 	}
@@ -83,6 +90,10 @@ dbg->error("freight_list_sorter::compare_ware()","illegal sort mode!");
 void
 freight_list_sorter_t::add_ware_heading( cbuffer_t &buf, uint32 sum, uint32 max, const ware_t *ware, const char *what_doing )
 {
+	// buffer full, no need to proceed
+	if (buf.is_full()) {
+		return;
+	}
 	// not the first line?
 	if(buf.len()>0) {
 		buf.append("\n");
@@ -225,6 +236,11 @@ void freight_list_sorter_t::sort_freight(const vector_tpl<ware_t>* warray, cbuff
 				buf.append("\n");
 			}
 			// debug ende
+
+			// buffer full, no need to proceed
+			if (buf.is_full()) {
+				break;
+			}
 		}
 	}
 
diff --git a/freight_list_sorter.h b/freight_list_sorter.h
index 4d85a4c..d6493dc 100644
--- a/freight_list_sorter.h
+++ b/freight_list_sorter.h
@@ -1,13 +1,14 @@
 #ifndef freight_list_sorter_h
 #define freight_list_sorter_h
 
-#include "utils/cbuffer_t.h"
-#include "halthandle_t.h"
-#include "simware.h"
-
 // same sorting for stations and vehicle/convoi freight ...
 
+#include "simtypes.h"
+
+template<class T> class slist_tpl;
+template<class T> class vector_tpl;
 class ware_t;
+class cbuffer_t;
 
 class freight_list_sorter_t
 {
diff --git a/gui/banner.cc b/gui/banner.cc
index afc90ba..85ed1bd 100644
--- a/gui/banner.cc
+++ b/gui/banner.cc
@@ -8,6 +8,7 @@
  */
 
 #include "../simcolor.h"
+#include "../simevent.h"
 #include "../simimg.h"
 #include "../simworld.h"
 #include "../simskin.h"
@@ -63,7 +64,7 @@ void banner_t::zeichnen(koord /*pos*/, koord)
 		display_proportional(xoff + s + 48+30, yoff + s +  94, "under Artistic Licence.", ALIGN_LEFT, color, true);
 		display_proportional(xoff + s + 24+30, yoff + s + 112, "Please send ideas and questions to:", ALIGN_LEFT, heading, true);
 		display_proportional(xoff + s + 48+30, yoff + s + 128, "Markus Pristovsek", ALIGN_LEFT, color, true);
-		display_proportional(xoff + s + 48+30, yoff + s + 140, "<team at 64.simutrans.com>", ALIGN_LEFT, color, true);
+		display_proportional(xoff + s + 48+30, yoff + s + 140, "<team at www.simutrans.com>", ALIGN_LEFT, color, true);
 		display_proportional(xoff + s + 24+30, yoff + s + 158, "or visit the Simutrans pages on the web:", ALIGN_LEFT, heading, true);
 		display_proportional(xoff + s + 48+30, yoff + s + 174, "http://www.simutrans.com", ALIGN_LEFT, color, true);
 		display_proportional(xoff + s + 48+30, yoff + s + 186, "http://simutrans.sourceforge.net", ALIGN_LEFT, color, true);
diff --git a/gui/baum_edit.h b/gui/baum_edit.h
index d3d220b..3dc2935 100644
--- a/gui/baum_edit.h
+++ b/gui/baum_edit.h
@@ -5,13 +5,12 @@
 
 #include "components/gui_label.h"
 
-#include "../besch/baum_besch.h"
-#include "../utils/cbuffer_t.h"
-
 #include "../simwerkz.h"
 
+
 #define MAX_BUILD_TYPE (6)
 
+class baum_besch_t;
 class wkz_plant_tree_t;
 
 class baum_edit_frame_t : public extend_edit_gui_t
diff --git a/gui/citybuilding_edit.h b/gui/citybuilding_edit.h
index cc80274..5ec1628 100644
--- a/gui/citybuilding_edit.h
+++ b/gui/citybuilding_edit.h
@@ -5,12 +5,11 @@
 
 #include "components/gui_label.h"
 
-#include "../besch/haus_besch.h"
-#include "../besch/fabrik_besch.h"
-#include "../utils/cbuffer_t.h"
-
 #include "../simwerkz.h"
 
+class haus_besch_t;
+class fabrik_besch_t;
+
 #define MAX_BUILD_TYPE (6)
 
 
diff --git a/gui/citylist_frame_t.cc b/gui/citylist_frame_t.cc
index 044b728..9abc6a2 100644
--- a/gui/citylist_frame_t.cc
+++ b/gui/citylist_frame_t.cc
@@ -11,6 +11,7 @@
 #include "components/list_button.h"
 #include "../dataobj/translator.h"
 #include "../simcolor.h"
+#include "../dataobj/umgebung.h"
 
 
 /**
@@ -51,7 +52,7 @@ const char citylist_frame_t::hist_type[karte_t::MAX_WORLD_COST][20] =
 	"sended",
 	"Post",
 	"Arrived",
-	"Transported"
+	"Goods"
 };
 
 const uint8 citylist_frame_t::hist_type_color[karte_t::MAX_WORLD_COST] =
@@ -133,7 +134,7 @@ citylist_frame_t::citylist_frame_t(karte_t * welt) :
 	chart.set_visible(false);
 	chart.set_background(MN_GREY1);
 	for (int cost = 0; cost<karte_t::MAX_WORLD_COST; cost++) {
-		chart.add_curve(hist_type_color[cost], welt->get_finance_history_year(), karte_t::MAX_WORLD_COST, cost, MAX_WORLD_HISTORY_YEARS, hist_type_type[cost], false, true);
+		chart.add_curve(hist_type_color[cost], welt->get_finance_history_year(), karte_t::MAX_WORLD_COST, cost, MAX_WORLD_HISTORY_YEARS, hist_type_type[cost], false, true, (cost==1) ? 1 : 0 );
 	}
 
 	mchart.set_pos(koord(60,8));
@@ -142,7 +143,7 @@ citylist_frame_t::citylist_frame_t(karte_t * welt) :
 	mchart.set_visible(false);
 	mchart.set_background(MN_GREY1);
 	for (int cost = 0; cost<karte_t::MAX_WORLD_COST; cost++) {
-		mchart.add_curve(hist_type_color[cost], welt->get_finance_history_month(), karte_t::MAX_WORLD_COST, cost, MAX_WORLD_HISTORY_MONTHS, hist_type_type[cost], false, true);
+		mchart.add_curve(hist_type_color[cost], welt->get_finance_history_month(), karte_t::MAX_WORLD_COST, cost, MAX_WORLD_HISTORY_MONTHS, hist_type_type[cost], false, true, (cost==1) ? 1 : 0 );
 	}
 
 	for (int cost = 0; cost<karte_t::MAX_WORLD_COST; cost++) {
@@ -219,15 +220,16 @@ bool citylist_frame_t::action_triggered( gui_action_creator_t *komp,value_t /* *
  */
 void citylist_frame_t::resize(const koord delta)
 {
-  gui_frame_t::resize(delta);
-
-  koord groesse = get_fenstergroesse()-koord(0,58);	// fensterhoehe - 16(title) -42 (header)
-  if(show_stats.pressed) {
-	  // addition space for statistics
-	  groesse += koord(0,-CHART_HEIGHT);
-  }
-  scrolly.set_pos( koord(0, 42+(show_stats.pressed*CHART_HEIGHT) ) );
-  scrolly.set_groesse(groesse);
+	gui_frame_t::resize(delta);
+
+	koord groesse = get_fenstergroesse()-koord(0,58);	// fensterhoehe - 16(title) -42 (header)
+	if(show_stats.pressed) {
+		// addition space for statistics
+		groesse += koord(0,-CHART_HEIGHT);
+	}
+	scrolly.set_pos( koord(0, 42+(show_stats.pressed*CHART_HEIGHT) ) );
+	scrolly.set_groesse(groesse);
+	set_dirty();
 }
 
 
diff --git a/gui/citylist_frame_t.h b/gui/citylist_frame_t.h
index f8f66e8..41af1e2 100644
--- a/gui/citylist_frame_t.h
+++ b/gui/citylist_frame_t.h
@@ -1,8 +1,8 @@
 #ifndef citylist_frame_t_h
 #define citylist_frame_t_h
 
-#include "../gui/gui_frame.h"
-#include "../gui/citylist_stats_t.h"
+#include "gui_frame.h"
+#include "citylist_stats_t.h"
 #include "components/action_listener.h"
 #include "components/gui_button.h"
 #include "components/gui_label.h"
diff --git a/gui/citylist_stats_t.cc b/gui/citylist_stats_t.cc
index 28f6011..c0eff4a 100644
--- a/gui/citylist_stats_t.cc
+++ b/gui/citylist_stats_t.cc
@@ -6,17 +6,22 @@
  */
 
 #include <algorithm>
+
 #include "citylist_stats_t.h"
-#include "../simgraph.h"
+#include "stadt_info.h"
+
+#include "../simcity.h"
 #include "../simcolor.h"
+#include "../simgraph.h"
+#include "../simskin.h"
 #include "../simwin.h"
 #include "../simworld.h"
-#include "../simskin.h"
+
 #include "../besch/skin_besch.h"
-#include "../gui/stadt_info.h"
+
 #include "../dataobj/translator.h"
+
 #include "../utils/cbuffer_t.h"
-#include <string.h>
 
 static const char* total_bev_translation = NULL;
 char citylist_stats_t::total_bev_string[128];
@@ -103,6 +108,8 @@ void citylist_stats_t::infowin_event(const event_t * ev)
 
 void citylist_stats_t::zeichnen(koord offset)
 {
+	cbuffer_t buf(256);
+
 	image_id const arrow_right_normal = skinverwaltung_t::window_skin->get_bild(10)->get_nummer();
 	sint32 total_bev = 0;
 	sint32 total_growth = 0;
@@ -112,9 +119,13 @@ void citylist_stats_t::zeichnen(koord offset)
 		sint32 bev = stadt->get_einwohner();
 		sint32 growth = stadt->get_wachstum();
 
-		char buf[256];
-		sprintf( buf, "%s: %i (%+.1f)", stadt->get_name(), bev, growth/10.0 );
-		display_proportional_clip(offset.x + 4 + 10, offset.y + i * (LINESPACE + 1), buf, ALIGN_LEFT, COL_BLACK, true);
+		buf.clear();
+		buf.printf( "%s: ", stadt->get_name() );
+		buf.append( bev, 0 );
+		buf.append( " (" );
+		buf.append( growth/10.0, 1 );
+		buf.append( ")" );
+		display_proportional_clip(offset.x + 4 + 10, offset.y + i * (LINESPACE + 1), (const char *)buf, ALIGN_LEFT, COL_BLACK, true);
 
 		if(i!=line_select) {
 			// goto information
@@ -130,9 +141,16 @@ void citylist_stats_t::zeichnen(koord offset)
 		total_growth += growth;
 	}
 	// some cities there?
-	if (total_bev > 0) {
-		sprintf(total_bev_string,"%s %d (%+.1f)", total_bev_translation, total_bev, total_growth/10.0 );
-	} else {
+	if(  total_bev > 0  ) {
+		buf.clear();
+		buf.printf( "%s: ", total_bev_translation );
+		buf.append( total_bev, 0 );
+		buf.append( " (" );
+		buf.append( total_growth/10.0, 1 );
+		buf.append( ")" );
+		strcpy( total_bev_string, buf );
+	}
+	else {
 		total_bev_string[0] = 0;
 	}
 }
diff --git a/gui/citylist_stats_t.h b/gui/citylist_stats_t.h
index 85fc0ec..2f3707d 100644
--- a/gui/citylist_stats_t.h
+++ b/gui/citylist_stats_t.h
@@ -9,10 +9,11 @@
 #define CITYLIST_STATS_T_H
 
 #include "../ifc/gui_komponente.h"
-#include "../simcity.h"
+#include "../tpl/vector_tpl.h"
 
 
 class karte_t;
+class stadt_t;
 
 
 namespace citylist {
diff --git a/gui/climates.cc b/gui/climates.cc
index 5c3379a..3408030 100644
--- a/gui/climates.cc
+++ b/gui/climates.cc
@@ -8,11 +8,13 @@
 
 #include "climates.h"
 #include "karte.h"
+#include "welt.h"
 
 #include "../besch/grund_besch.h"
 
 #include "../simdebug.h"
 #include "../simworld.h"
+#include "../simwin.h"
 
 #include "../dataobj/einstellungen.h"
 #include "../dataobj/umgebung.h"
@@ -38,103 +40,78 @@
  * @author prissi
  */
 
-climate_gui_t::climate_gui_t(welt_gui_t* welt_gui, einstellungen_t* sets) :
+climate_gui_t::climate_gui_t(einstellungen_t* sets) :
 	gui_frame_t("Climate Control")
 {
 DBG_MESSAGE("","sizeof(stat)=%d, sizeof(tm)=%d",sizeof(struct stat),sizeof(struct tm) );
 	this->sets = sets;
-	this->welt_gui = welt_gui;
 
 	// select map stuff ..
 	int intTopOfButton = 4;
 
 	// mountian/water stuff
-	water_level[0].init( button_t::repeatarrowleft, NULL, koord(LEFT_ARROW,intTopOfButton) );
-	water_level[0].add_listener( this );
-	add_komponente( water_level+0 );
-	water_level[1].init( button_t::repeatarrowright, NULL, koord(RIGHT_ARROW,intTopOfButton) );
-	water_level[1].add_listener( this );
-	add_komponente( water_level+1 );
+	water_level.set_pos(koord(LEFT_ARROW,intTopOfButton) );
+	water_level.set_groesse(koord(RIGHT_ARROW-LEFT_ARROW+10, 12));
+	water_level.set_limits( -10, 0 );
+	water_level.set_value( sets->get_grundwasser() );
+	water_level.wrap_mode( false );
+	water_level.add_listener( this );
+	add_komponente( &water_level );
 	intTopOfButton += 12;
 
-	mountain_height[0].init( button_t::repeatarrowleft, NULL, koord(LEFT_ARROW,intTopOfButton) );
-	mountain_height[0].add_listener( this );
-	add_komponente( mountain_height+0 );
-	mountain_height[1].init( button_t::repeatarrowright, NULL, koord(RIGHT_ARROW,intTopOfButton) );
-	mountain_height[1].add_listener( this );
-	add_komponente( mountain_height+1 );
+	mountain_height.set_pos(koord(LEFT_ARROW,intTopOfButton) );
+	mountain_height.set_groesse(koord(RIGHT_ARROW-LEFT_ARROW+10, 12));
+	mountain_height.set_limits( 0, 320 );
+	mountain_height.set_increment_mode( 10 );
+	mountain_height.set_value( (int)sets->get_max_mountain_height() );
+	mountain_height.wrap_mode( false );
+	mountain_height.add_listener( this );
+	add_komponente( &mountain_height );
 	intTopOfButton += 12;
 
-	mountain_roughness[0].init( button_t::repeatarrowleft, NULL, koord(LEFT_ARROW,intTopOfButton) );
-	mountain_roughness[0].add_listener( this );
-	add_komponente( mountain_roughness+0 );
-	mountain_roughness[1].init( button_t::repeatarrowright, NULL, koord(RIGHT_ARROW,intTopOfButton) );
-	mountain_roughness[1].add_listener( this );
-	add_komponente( mountain_roughness+1 );
-	intTopOfButton += 12+5;
+	mountain_roughness.set_pos(koord(LEFT_ARROW,intTopOfButton) );
+	mountain_roughness.set_groesse(koord(RIGHT_ARROW-LEFT_ARROW+10, 12));
+#ifndef DOUBLE_GROUNDS
+	mountain_roughness.set_limits( 0, 7 );
+#else
+	mountain_roughness.set_limits( 0, 10 );
+#endif
+	mountain_roughness.set_value( (int)(sets->get_map_roughness()*20.0 + 0.5)-8 );
+	mountain_roughness.wrap_mode( false );
+	mountain_roughness.add_listener( this );
+	add_komponente( &mountain_roughness );
+	intTopOfButton += 12;
 
 	// summer snowline alsway startig above highest climate
-	intTopOfButton += 12;
+	intTopOfButton += 12+5;
 
-	snowline_winter[0].init( button_t::repeatarrowleft, NULL, koord(LEFT_ARROW,intTopOfButton) );
-	snowline_winter[0].add_listener( this );
-	add_komponente( snowline_winter+0 );
-	snowline_winter[1].init( button_t::repeatarrowright, NULL, koord(RIGHT_ARROW,intTopOfButton) );
-	snowline_winter[1].add_listener( this );
-	add_komponente( snowline_winter+1 );
+	// artic starts at maximum end of climate
+	snowline_winter.set_pos(koord(LEFT_ARROW,intTopOfButton) );
+	snowline_winter.set_groesse(koord(RIGHT_ARROW-LEFT_ARROW+10, 12));
+	snowline_winter.set_value( sets->get_winter_snowline() );
+	snowline_winter.wrap_mode( false );
+	snowline_winter.add_listener( this );
+	add_komponente( &snowline_winter );
 	intTopOfButton += 12+5;
 
 	// other climate borders ...
-	end_desert[0].init( button_t::repeatarrowleft, NULL, koord(LEFT_ARROW,intTopOfButton) );
-	end_desert[0].add_listener( this );
-	add_komponente( end_desert+0 );
-	end_desert[1].init( button_t::repeatarrowright, NULL, koord(RIGHT_ARROW,intTopOfButton) );
-	end_desert[1].add_listener( this );
-	add_komponente( end_desert+1 );
-	intTopOfButton += 12;
-
-	end_tropic[0].init( button_t::repeatarrowleft, NULL, koord(LEFT_ARROW,intTopOfButton) );
-	end_tropic[0].add_listener( this );
-	add_komponente( end_tropic+0 );
-	end_tropic[1].init( button_t::repeatarrowright, NULL, koord(RIGHT_ARROW,intTopOfButton) );
-	end_tropic[1].add_listener( this );
-	add_komponente( end_tropic+1 );
-	intTopOfButton += 12;
-
-	end_mediterran[0].init( button_t::repeatarrowleft, NULL, koord(LEFT_ARROW,intTopOfButton) );
-	end_mediterran[0].add_listener( this );
-	add_komponente( end_mediterran+0 );
-	end_mediterran[1].init( button_t::repeatarrowright, NULL, koord(RIGHT_ARROW,intTopOfButton) );
-	end_mediterran[1].add_listener( this );
-	add_komponente( end_mediterran+1 );
-	intTopOfButton += 12;
-
-	end_temperate[0].init( button_t::repeatarrowleft, NULL, koord(LEFT_ARROW,intTopOfButton) );
-	end_temperate[0].add_listener( this );
-	add_komponente( end_temperate+0 );
-	end_temperate[1].init( button_t::repeatarrowright, NULL, koord(RIGHT_ARROW,intTopOfButton) );
-	end_temperate[1].add_listener( this );
-	add_komponente( end_temperate+1 );
-	intTopOfButton += 12;
-
-	end_tundra[0].init( button_t::repeatarrowleft, NULL, koord(LEFT_ARROW,intTopOfButton) );
-	end_tundra[0].add_listener( this );
-	add_komponente( end_tundra+0 );
-	end_tundra[1].init( button_t::repeatarrowright, NULL, koord(RIGHT_ARROW,intTopOfButton) );
-	end_tundra[1].add_listener( this );
-	add_komponente( end_tundra+1 );
-	intTopOfButton += 12;
-
-	end_rocky[0].init( button_t::repeatarrowleft, NULL, koord(LEFT_ARROW,intTopOfButton) );
-	end_rocky[0].add_listener( this );
-	add_komponente( end_rocky+0 );
-	end_rocky[1].init( button_t::repeatarrowright, NULL, koord(RIGHT_ARROW,intTopOfButton) );
-	end_rocky[1].add_listener( this );
-	add_komponente( end_rocky+1 );
-	intTopOfButton += 12;
-
-	// the rocky will be alway below the snow line; no need to set this explicitely
-	intTopOfButton += 4;
+	sint16 arctic = 0;
+	for(  int i=desert_climate-1;  i<=rocky_climate-1;  i++  ) {
+
+		climate_borders_ui[i].set_pos(koord(LEFT_ARROW,intTopOfButton) );
+		climate_borders_ui[i].set_groesse(koord(RIGHT_ARROW-LEFT_ARROW+10, 12));
+		climate_borders_ui[i].set_limits( 0, 24 );
+		climate_borders_ui[i].set_value( sets->get_climate_borders()[i+1] );
+		climate_borders_ui[i].wrap_mode( false );
+		climate_borders_ui[i].add_listener( this );
+		add_komponente( climate_borders_ui+i );
+		if(sets->get_climate_borders()[i]>arctic) {
+			arctic = sets->get_climate_borders()[i];
+		}
+		intTopOfButton += 12;
+	}
+	snowline_winter.set_limits( 0, arctic );
+	intTopOfButton += 5;
 
 	no_tree.init( button_t::square, "no tree", koord(10,intTopOfButton), koord(BUTTON_WIDTH,BUTTON_HEIGHT)); // right align
 	no_tree.pressed=umgebung_t::no_tree;
@@ -153,19 +130,19 @@ DBG_MESSAGE("","sizeof(stat)=%d, sizeof(tm)=%d",sizeof(struct stat),sizeof(struc
 
 	river_min.set_pos(koord(LEFT_ARROW,intTopOfButton) );
 	river_min.set_groesse(koord(RIGHT_ARROW-LEFT_ARROW+10, 12));
-	river_min.add_listener(this);
 	river_min.set_limits(0,max(16,sets->get_max_river_length())-16);
 	river_min.set_value( sets->get_min_river_length() );
 	river_min.wrap_mode( false );
+	river_min.add_listener(this);
 	add_komponente( &river_min );
 	intTopOfButton += 12;
 
 	river_max.set_pos(koord(LEFT_ARROW,intTopOfButton) );
 	river_max.set_groesse(koord(RIGHT_ARROW-LEFT_ARROW+10, 12));
-	river_max.add_listener(this);
 	river_max.set_limits(sets->get_min_river_length()+16,1024);
 	river_max.set_value( sets->get_max_river_length() );
 	river_max.wrap_mode( false );
+	river_max.add_listener(this);
 	add_komponente( &river_max );
 	intTopOfButton += 12;
 
@@ -183,48 +160,29 @@ DBG_MESSAGE("","sizeof(stat)=%d, sizeof(tm)=%d",sizeof(struct stat),sizeof(struc
 bool
 climate_gui_t::action_triggered( gui_action_creator_t *komp, value_t v)
 {
+	welt_gui_t *welt_gui = dynamic_cast<welt_gui_t *>(win_get_magic( magic_welt_gui_t ));
 	if(komp==&no_tree) {
 		umgebung_t::no_tree ^= 1;
 		no_tree.pressed ^= 1;
-		welt_gui->update_preview();
-	}
-	else if(komp==water_level+0) {
-		if(sets->get_grundwasser() > -10*Z_TILE_STEP ) {
-			sets->set_grundwasser( sets->get_grundwasser() - Z_TILE_STEP );
-			welt_gui->update_preview();
-		}
-	}
-	else if(komp==water_level+1) {
-		if(sets->get_grundwasser() < 0 ) {
-			sets->set_grundwasser( sets->get_grundwasser() + Z_TILE_STEP );
-			welt_gui->update_preview();
-		}
-	}
-	else if(komp==mountain_height+0) {
-		if(sets->get_max_mountain_height() > 0.0 ) {
-			sets->set_max_mountain_height( sets->get_max_mountain_height() - 10 );
+		if(  welt_gui  ) {
 			welt_gui->update_preview();
 		}
 	}
-	else if(komp==mountain_height+1) {
-		if(sets->get_max_mountain_height() < 320.0 ) {
-			sets->set_max_mountain_height( sets->get_max_mountain_height() + 10 );
+	else if(komp==&water_level) {
+		sets->set_grundwasser( v.i );
+		if(  welt_gui  ) {
 			welt_gui->update_preview();
 		}
 	}
-	else if(komp==mountain_roughness+0) {
-		if(sets->get_map_roughness() > 0.4 ) {
-			sets->set_map_roughness( sets->get_map_roughness() - 0.05 );
+	else if(komp==&mountain_height) {
+		sets->set_max_mountain_height( v.i );
+		if(  welt_gui  ) {
 			welt_gui->update_preview();
 		}
 	}
-	else if(komp==mountain_roughness+1) {
-#ifndef DOUBLE_GROUNDS
-		if(sets->get_map_roughness() < 0.7 ) {
-#else
-		if(sets->get_map_roughness() < 1.00) {
-#endif
-			sets->set_map_roughness( sets->get_map_roughness() + 0.05 );
+	else if(komp==&mountain_roughness) {
+		sets->set_map_roughness( (double)(v.i+8)/20.0 );
+		if(  welt_gui  ) {
 			welt_gui->update_preview();
 		}
 	}
@@ -239,70 +197,19 @@ climate_gui_t::action_triggered( gui_action_creator_t *komp, value_t v)
 		sets->set_max_river_length( v.i );
 		river_min.set_limits(0,max(16,v.i)-16);
 	}
+	else if(komp==&snowline_winter) {
+		sets->set_winter_snowline( v.i );
+	}
 	else {
 		// all climate borders from here on
 		sint16 *climate_borders = (sint16 *)sets->get_climate_borders();
 
-		if(komp==snowline_winter+0) {
-			if(sets->get_winter_snowline()>0) {
-				sets->set_winter_snowline( sets->get_winter_snowline()-1 );
-			}
-		}
-		else if(komp==snowline_winter+1) {
-			sets->set_winter_snowline( sets->get_winter_snowline()+1 );
-		}
-		else if(komp==end_desert+0) {
-			if(climate_borders[desert_climate]>0) {
-				climate_borders[desert_climate]--;
-			}
-		}
-		else if(komp==end_desert+1) {
-			climate_borders[desert_climate]++;
-		}
-		else if(komp==end_tropic+0) {
-			if(climate_borders[tropic_climate]>0) {
-				climate_borders[tropic_climate]--;
-			}
-		}
-		else if(komp==end_tropic+1) {
-			climate_borders[tropic_climate]++;
-		}
-		else if(komp==end_mediterran+0) {
-			if(climate_borders[mediterran_climate]>0) {
-				climate_borders[mediterran_climate]--;
-			}
-		}
-		else if(komp==end_mediterran+1) {
-			climate_borders[mediterran_climate]++;
-		}
-		else if(komp==end_temperate+0) {
-			if(climate_borders[temperate_climate]>0) {
-				climate_borders[temperate_climate]--;
-			}
-		}
-		else if(komp==end_temperate+1) {
-			climate_borders[temperate_climate]++;
-		}
-		else if(komp==end_tundra+0) {
-			if(climate_borders[tundra_climate]>0) {
-				climate_borders[tundra_climate]--;
-			}
-		}
-		else if(komp==end_tundra+1) {
-			climate_borders[tundra_climate]++;
-		}
-		else if(komp==end_rocky+0) {
-			if(climate_borders[rocky_climate]>0) {
-				climate_borders[rocky_climate]--;
-			}
-		}
-		else if(komp==end_rocky+1) {
-			climate_borders[rocky_climate]++;
-		}
-
 		// artic starts at maximum end of climate
 		sint16 arctic = 0;
-		for(  int i=0;  i<MAX_CLIMATES-1;  i++  ) {
+		for(  int i=desert_climate;  i<=rocky_climate;  i++  ) {
+			if(  komp==climate_borders_ui+i-1  ) {
+				climate_borders[i] = v.i;
+			}
 			if(climate_borders[i]>arctic) {
 				arctic = climate_borders[i];
 			}
@@ -313,6 +220,7 @@ climate_gui_t::action_triggered( gui_action_creator_t *komp, value_t v)
 		if(arctic<sets->get_winter_snowline()) {
 			sets->set_winter_snowline( arctic );
 		}
+		snowline_winter.set_limits( 0, arctic );
 	}
 	return true;
 }
@@ -331,49 +239,36 @@ void climate_gui_t::zeichnen(koord pos, koord gr)
 	const int x = pos.x+10;
 	int y = pos.y+16+4;
 
-	const sint16 water_level = (sets->get_grundwasser()/Z_TILE_STEP)+6;
-	const sint16 *climate_borders = sets->get_climate_borders();
-
 	// water level       18-Nov-01       Markus W. Added
 	display_proportional_clip(x, y, translator::translate("Water level"), ALIGN_LEFT, COL_BLACK, true);
-	display_proportional_clip(x+TEXT_RIGHT, y, ntos(water_level,0), ALIGN_RIGHT, COL_WHITE, true);
 	y += 12;
 	display_proportional_clip(x, y, translator::translate("Mountain height"), ALIGN_LEFT, COL_BLACK, true);
-	display_proportional_clip(x+TEXT_RIGHT, y, ntos((int)(sets->get_max_mountain_height()), 0), ALIGN_RIGHT, COL_WHITE, true);
 	y += 12;
 	display_proportional_clip(x, y, translator::translate("Map roughness"), ALIGN_LEFT, COL_BLACK, true);
-	display_proportional_clip(x+TEXT_RIGHT, y, ntos((int)(sets->get_map_roughness()*20.0 + 0.5)-8 , 0) , ALIGN_RIGHT, COL_WHITE, true);     // x = round(roughness * 10)-4  // 0.6 * 10 - 4 = 2    //29-Nov-01     Markus W. Added
 	y += 12+5;
 
 	// season stuff
 	display_proportional_clip(x, y, translator::translate("Summer snowline"), ALIGN_LEFT, COL_BLACK, true);
-	display_proportional_clip(x+TEXT_RIGHT, y, ntos(climate_borders[arctic_climate], 0), ALIGN_RIGHT, COL_WHITE, true);
+	display_proportional_clip(x+TEXT_RIGHT, y, ntos( sets->get_climate_borders()[arctic_climate], 0) , ALIGN_RIGHT, COL_WHITE, true);     // x = round(roughness * 10)-4  // 0.6 * 10 - 4 = 2    //29-Nov-01     Markus W. Added
 	y += 12;
 	display_proportional_clip(x, y, translator::translate("Winter snowline"), ALIGN_LEFT, COL_BLACK, true);
-	display_proportional_clip(x+TEXT_RIGHT, y, ntos(sets->get_winter_snowline(),0),ALIGN_RIGHT, COL_WHITE, true);
 	y += 12+5;
 
 	// climate borders
 	display_proportional_clip(x, y, translator::translate(grund_besch_t::get_climate_name_from_bit(desert_climate)), ALIGN_LEFT, COL_BLACK, true);
-	display_proportional_clip(x+TEXT_RIGHT, y, ntos(climate_borders[desert_climate], 0), ALIGN_RIGHT, COL_WHITE, true);
 	y += 12;
 	display_proportional_clip(x, y, translator::translate(grund_besch_t::get_climate_name_from_bit(tropic_climate)), ALIGN_LEFT, COL_BLACK, true);
-	display_proportional_clip(x+TEXT_RIGHT, y, ntos(climate_borders[tropic_climate], 0), ALIGN_RIGHT, COL_WHITE, true);
 	y += 12;
 	display_proportional_clip(x, y, translator::translate(grund_besch_t::get_climate_name_from_bit(mediterran_climate)), ALIGN_LEFT, COL_BLACK, true);
-	display_proportional_clip(x+TEXT_RIGHT, y, ntos(climate_borders[mediterran_climate], 0), ALIGN_RIGHT, COL_WHITE, true);
 	y += 12;
 	display_proportional_clip(x, y, translator::translate(grund_besch_t::get_climate_name_from_bit(temperate_climate)), ALIGN_LEFT, COL_BLACK, true);
-	display_proportional_clip(x+TEXT_RIGHT, y, ntos(climate_borders[temperate_climate], 0), ALIGN_RIGHT, COL_WHITE, true);
 	y += 12;
 	display_proportional_clip(x, y, translator::translate(grund_besch_t::get_climate_name_from_bit(tundra_climate)), ALIGN_LEFT, COL_BLACK, true);
-	display_proportional_clip(x+TEXT_RIGHT, y, ntos(climate_borders[tundra_climate], 0), ALIGN_RIGHT, COL_WHITE, true);
 	y += 12;
 	display_proportional_clip(x, y, translator::translate(grund_besch_t::get_climate_name_from_bit(rocky_climate)), ALIGN_LEFT, COL_BLACK, true);
-	display_proportional_clip(x+TEXT_RIGHT, y, ntos(climate_borders[rocky_climate], 0), ALIGN_RIGHT, COL_WHITE, true);
 	y += 12;
 
-	y += 12+4+4;	// no tree
+	y += 12+5+5;	// no tree
 
 	display_proportional_clip(x, y, translator::translate("Number of rivers"), ALIGN_LEFT, COL_BLACK, true);
 	y += 12;
diff --git a/gui/climates.h b/gui/climates.h
index f296a11..34646a4 100644
--- a/gui/climates.h
+++ b/gui/climates.h
@@ -9,14 +9,15 @@
 #ifndef climate_gui_h
 #define climate_gui_h
 
-#include "welt.h"
 #include "gui_frame.h"
 #include "components/gui_button.h"
 #include "components/gui_label.h"
+#include "components/gui_numberinput.h"
 #include "components/action_listener.h"
 #include "components/gui_textinput.h"
 
 class einstellungen_t;
+class welt_gui_t;
 
 
 /**
@@ -27,29 +28,20 @@ class climate_gui_t  : public gui_frame_t, private action_listener_t
 {
 private:
 	einstellungen_t * sets;
-	welt_gui_t *welt_gui;
 
 	// since decrease/increase buttons always pair these ...
-	button_t water_level[2];
-	button_t mountain_height[2];
-	button_t mountain_roughness[2];
+	gui_numberinput_t water_level, mountain_height, mountain_roughness;
 
-	button_t snowline_summer[2];
-	button_t snowline_winter[2];
+	gui_numberinput_t snowline_winter;
 
-	button_t end_desert[2];
-	button_t end_tropic[2];
-	button_t end_mediterran[2];
-	button_t end_temperate[2];
-	button_t end_tundra[2];
-	button_t end_rocky[2];
+	gui_numberinput_t climate_borders_ui[rocky_climate];
 
 	button_t no_tree; // without tree
 
 	gui_numberinput_t river_n, river_min, river_max;
 
 public:
-	climate_gui_t(welt_gui_t* welt_gui, einstellungen_t* sets);
+	climate_gui_t(einstellungen_t* sets);
 
 	/**
 	 * Manche Fenster haben einen Hilfetext assoziiert.
diff --git a/gui/colors.cc b/gui/colors.cc
index 560b355..a6303fc 100644
--- a/gui/colors.cc
+++ b/gui/colors.cc
@@ -5,6 +5,8 @@
  * (see licence.txt)
  */
 
+#include "components/list_button.h"
+
 #include "colors.h"
 
 #include "../simdebug.h"
@@ -15,54 +17,53 @@
 #include "../dataobj/einstellungen.h"
 #include "../dataobj/umgebung.h"
 #include "../dataobj/translator.h"
+#include "../dings/zeiger.h"
 #include "../simgraph.h"
+#include "../simmenu.h"
 
 #include "../utils/simstring.h"
 
-#define MAX_BUTTONS (20)
-
 // y coordinates
-#define GRID_MODE			(0*13+6)
-#define UNDERGROUND		(1*13+6)
-#define DAY_NIGHT			(2*13+6)
-#define BRIGHTNESS		(3*13+6)
-#define SCROLL_INVERS (4*13+6)
-#define SCROLL_SPEED	(5*13+6)
+#define GRID_MODE			(6)
+#define UNDERGROUND		(GRID_MODE+13)
+#define SLICE			(UNDERGROUND+13)
+#define DAY_NIGHT			(SLICE+13)
+#define BRIGHTNESS		(DAY_NIGHT+13)
+#define SCROLL_INVERS (BRIGHTNESS+13)
+#define SCROLL_SPEED	(SCROLL_INVERS+13)
 
-#define SEPERATE1 (6*13+6)
+#define SEPERATE1 (SCROLL_SPEED+13)
 
-#define USE_TRANSPARENCY	(6*13+6+4)
-#define HIDE_TREES				(7*13+6+4)
-#define HIDE_CITY_HOUSES	(8*13+6+4)
-#define HIDE_ALL_HOUSES		(9*13+6+4)
+#define USE_TRANSPARENCY	(SEPERATE1+4)
+#define HIDE_TREES				(USE_TRANSPARENCY+13)
+#define HIDE_CITY_HOUSES	(HIDE_TREES+13)
 
-#define SEPERATE2 (10*13+6+4)
+#define SEPERATE2 (HIDE_CITY_HOUSES+13)
 
-#define USE_TRANSPARENCY_STATIONS	(10*13+6+2*4)
-#define SHOW_STATION_COVERAGE			(11*13+6+2*4)
-#define SHOW_STATION_SIGNS				(12*13+6+2*4)
-#define SHOW_STATION_GOODS				(13*13+6+2*4)
+#define USE_TRANSPARENCY_STATIONS	(SEPERATE2+4)
+#define SHOW_STATION_COVERAGE			(USE_TRANSPARENCY_STATIONS+13)
+#define SHOW_STATION_SIGNS				(SHOW_STATION_COVERAGE+13)
+#define SHOW_STATION_GOODS				(SHOW_STATION_SIGNS+13)
 
-#define SEPERATE3	(14*13+6+2*4)
+#define SEPERATE3	(SHOW_STATION_GOODS+13)
 
-#define CITY_WALKER								(14*13+6+3*4)
-#define STOP_WALKER								(15*13+6+3*4)
-#define DENS_TRAFFIC							(16*13+6+3*4)
+#define CITY_WALKER								(SEPERATE3+4)
+#define STOP_WALKER								(CITY_WALKER+13)
+#define DENS_TRAFFIC							(STOP_WALKER+13)
+#define CONVOI_TOOLTIPS							(DENS_TRAFFIC+13)
 
-#define SEPERATE4	(17*13+6+3*4)
+#define SEPERATE4	(CONVOI_TOOLTIPS+13)
 
-#define FPS_DATA (17*13+6+4*4)
-#define IDLE_DATA (18*13+6+4*4)
-#define FRAME_DATA (19*13+6+4*4)
-#define LOOP_DATA (20*13+6+4*4)
+#define FPS_DATA (SEPERATE4+4)
+#define IDLE_DATA (FPS_DATA+13)
+#define FRAME_DATA (IDLE_DATA+13)
+#define LOOP_DATA (FRAME_DATA+13)
 
-#define BOTTOM (21*13+6+12+5*4)
+#define BOTTOM (LOOP_DATA+30)
 
 // x coordinates
 #define RIGHT_WIDTH (220)
-#define ARR_LEFT (125)
-#define ARR_RIGHT (150)
-#define NUMBER (148)
+#define NUMBER_INP (170)
 
 
 
@@ -72,25 +73,28 @@ color_gui_t::color_gui_t(karte_t *welt) :
 	this->welt = welt;
 
 	// brightness
-	buttons[0].set_pos( koord(ARR_LEFT,BRIGHTNESS) );
-	buttons[0].set_typ(button_t::repeatarrowleft);
-
-	buttons[1].set_pos( koord(ARR_RIGHT,BRIGHTNESS) );
-	buttons[1].set_typ(button_t::repeatarrowright);
+	brightness.set_pos( koord(RIGHT_WIDTH-10-40,BRIGHTNESS) );
+	brightness.set_groesse( koord( 40, BUTTON_HEIGHT-1 ) );
+	brightness.set_value( umgebung_t::daynight_level );
+	brightness.set_limits( 0, 9 );
+	brightness.add_listener(this);
+	add_komponente(&brightness);
 
 	// scrollspeed
-	buttons[2].set_pos( koord(ARR_LEFT,SCROLL_SPEED) );
-	buttons[2].set_typ(button_t::repeatarrowleft);
-
-	buttons[3].set_pos( koord(ARR_RIGHT,SCROLL_SPEED) );
-	buttons[3].set_typ(button_t::repeatarrowright);
+	scrollspeed.set_pos( koord(RIGHT_WIDTH-10-40,SCROLL_SPEED) );
+	scrollspeed.set_groesse( koord( 40, BUTTON_HEIGHT-1 ) );
+	scrollspeed.set_value( abs(umgebung_t::scroll_multi) );
+	scrollspeed.set_limits( 1, 9 );
+	scrollspeed.add_listener(this);
+	add_komponente(&scrollspeed);
 
 	// traffic density
-	buttons[4].set_pos( koord(ARR_LEFT,DENS_TRAFFIC) );
-	buttons[4].set_typ(button_t::repeatarrowleft);
-
-	buttons[5].set_pos( koord(ARR_RIGHT,DENS_TRAFFIC) );
-	buttons[5].set_typ(button_t::repeatarrowright);
+	traffic_density.set_pos( koord(RIGHT_WIDTH-10-50,DENS_TRAFFIC) );
+	traffic_density.set_groesse( koord( 50, BUTTON_HEIGHT-1 ) );
+	traffic_density.set_value( welt->get_einstellungen()->get_verkehr_level() );
+	traffic_density.set_limits( 0, 16 );
+	traffic_density.add_listener(this);
+	add_komponente(&traffic_density);
 
 	// other settings
 	buttons[6].set_pos( koord(10,SCROLL_INVERS) );
@@ -122,13 +126,11 @@ color_gui_t::color_gui_t(karte_t *welt) :
 	buttons[11].set_typ(button_t::square_state);
 	buttons[11].set_text("hide trees");
 
+	// left right for hide messages
 	buttons[12].set_pos( koord(10,HIDE_CITY_HOUSES) );
-	buttons[12].set_typ(button_t::square_state);
-	buttons[12].set_text("hide city building");
-
-	buttons[13].set_pos( koord(10,HIDE_ALL_HOUSES) );
-	buttons[13].set_typ(button_t::square_state);
-	buttons[13].set_text("hide all building");
+	buttons[12].set_typ(button_t::arrowleft);
+	buttons[13].set_pos( koord(RIGHT_WIDTH-10-10,HIDE_CITY_HOUSES) );
+	buttons[13].set_typ(button_t::arrowright);
 
 	buttons[14].set_pos( koord(10,USE_TRANSPARENCY_STATIONS) );
 	buttons[14].set_typ(button_t::square_state);
@@ -157,7 +159,24 @@ color_gui_t::color_gui_t(karte_t *welt) :
 	buttons[19].set_text("show waiting bars");
 	buttons[19].pressed = umgebung_t::show_names&1;
 
-	for(int i=0;  i<MAX_BUTTONS;  i++ ) {
+	buttons[20].set_pos( koord(10,SLICE) );
+	buttons[20].set_typ(button_t::square_state);
+	buttons[20].set_text("sliced underground mode");
+
+	inp_underground_level.set_pos(koord(NUMBER_INP, SLICE) );
+	inp_underground_level.set_groesse( koord(50,12));
+	inp_underground_level.set_limits(welt->get_grundwasser()-10, 32);
+	inp_underground_level.set_value( grund_t::underground_mode==grund_t::ugm_level ? grund_t::underground_level : welt->get_zeiger()->get_pos().z);
+	add_komponente(&inp_underground_level);
+	inp_underground_level.add_listener(this);
+
+	// left/right for convoi tooltips
+	buttons[0].set_pos( koord(10,CONVOI_TOOLTIPS) );
+	buttons[0].set_typ(button_t::arrowleft);
+	buttons[1].set_pos( koord(RIGHT_WIDTH-10-10,CONVOI_TOOLTIPS) );
+	buttons[1].set_typ(button_t::arrowright);
+
+	for(int i=0;  i<COLORS_MAX_BUTTONS;  i++ ) {
 		buttons[i].add_listener(this);
 		add_komponente( buttons+i );
 	}
@@ -168,41 +187,23 @@ color_gui_t::color_gui_t(karte_t *welt) :
 
 
 bool
-color_gui_t::action_triggered( gui_action_creator_t *komp, value_t)
+color_gui_t::action_triggered( gui_action_creator_t *komp, value_t v)
 {
 	einstellungen_t * sets = welt->get_einstellungen();
 
-	if((buttons+0)==komp) {
-		if(  umgebung_t::daynight_level>0  ) {
-			umgebung_t::daynight_level--;
-		}
+	if(&brightness==komp) {
+		umgebung_t::daynight_level = v.i;
+	} else if(&traffic_density==komp) {
+		sets->set_verkehr_level( v.i );
+	} else if(&scrollspeed==komp) {
+		umgebung_t::scroll_multi = buttons[6].pressed ? -v.i : v.i;
+	} else if((buttons+0)==komp) {
+		umgebung_t::show_vehicle_states = (umgebung_t::show_vehicle_states+2)%3;
 	} else if((buttons+1)==komp) {
-		umgebung_t::daynight_level++;
-	} else if((buttons+4)==komp) {
-		if(sets->get_verkehr_level() > 0 ) {
-			sets->set_verkehr_level( sets->get_verkehr_level() - 1 );
-		}
-	} else if((buttons+5)==komp) {
-		if(sets->get_verkehr_level() < 16 ) {
-			sets->set_verkehr_level( sets->get_verkehr_level() + 1 );
-		}
-	} else if((buttons+2)==komp) {
-		if(umgebung_t::scroll_multi > 1) {
-			umgebung_t::scroll_multi --;
-		}
-		if(umgebung_t::scroll_multi < -1) {
-			umgebung_t::scroll_multi ++;
-		}
-	} else if((buttons+3)==komp) {
-		if(umgebung_t::scroll_multi >= 1) {
-			umgebung_t::scroll_multi ++;
-		}
-		if(umgebung_t::scroll_multi <= -1) {
-			umgebung_t::scroll_multi --;
-		}
+		umgebung_t::show_vehicle_states = (umgebung_t::show_vehicle_states+1)%3;
 	} else if((buttons+6)==komp) {
-		umgebung_t::scroll_multi = -umgebung_t::scroll_multi;
 		buttons[6].pressed ^= 1;
+		umgebung_t::scroll_multi = -umgebung_t::scroll_multi;
 	} else if((buttons+7)==komp) {
 		welt->get_einstellungen()->set_show_pax( !welt->get_einstellungen()->get_show_pax() );
 		buttons[7].pressed ^= 1;
@@ -218,32 +219,42 @@ color_gui_t::action_triggered( gui_action_creator_t *komp, value_t)
 	} else if((buttons+11)==komp) {
 		umgebung_t::hide_trees = !umgebung_t::hide_trees;
 	} else if((buttons+12)==komp) {
-		umgebung_t::hide_buildings = !umgebung_t::hide_buildings;
+		umgebung_t::hide_buildings = (umgebung_t::hide_buildings+2)%3;
 	} else if((buttons+13)==komp) {
-		umgebung_t::hide_buildings = umgebung_t::hide_buildings>1 ? 0 : 2;
+		umgebung_t::hide_buildings = (umgebung_t::hide_buildings+1)%3;
 	} else if((buttons+14)==komp) {
 		umgebung_t::use_transparency_station_coverage = !umgebung_t::use_transparency_station_coverage;
 		buttons[14].pressed ^= 1;
 	} else if((buttons+15)==komp) {
 		umgebung_t::station_coverage_show = umgebung_t::station_coverage_show==0 ? 0xFF : 0;
 	} else if((buttons+16)==komp) {
-		grund_t::underground_mode = !grund_t::underground_mode;
-		for(int y=0; y<welt->get_groesse_y(); y++) {
-			for(int x=0; x<welt->get_groesse_x(); x++) {
-				const planquadrat_t *plan = welt->lookup(koord(x,y));
-				const int boden_count = plan->get_boden_count();
-				for(int schicht=0; schicht<boden_count; schicht++) {
-					grund_t *gr = plan->get_boden_bei(schicht);
-					gr->calc_bild();
-				}
-			}
-		}
+		// see simwerkz.cc::wkz_show_underground_t::init
+		grund_t::set_underground_mode(buttons[16].pressed ? grund_t::ugm_none : grund_t::ugm_all, inp_underground_level.get_value());
+		buttons[16].pressed = grund_t::underground_mode == grund_t::ugm_all;
+		// calc new images
+		welt->update_map();
+		// renew toolbar
+		werkzeug_t::update_toolbars(welt);
 	} else if((buttons+17)==komp) {
 		grund_t::toggle_grid();
 	} else if((buttons+18)==komp) {
 		umgebung_t::show_names ^= 1;
 	} else if((buttons+19)==komp) {
 		umgebung_t::show_names ^= 2;
+	} else if((buttons+20)==komp) {
+		// see simwerkz.cc::wkz_show_underground_t::init
+		grund_t::set_underground_mode(buttons[20].pressed ? grund_t::ugm_none : grund_t::ugm_level, inp_underground_level.get_value());
+		buttons[20].pressed = grund_t::underground_mode == grund_t::ugm_level;
+		// calc new images
+		welt->update_map();
+		// renew toolbar
+		werkzeug_t::update_toolbars(welt);
+	} else if (komp == &inp_underground_level) {
+		if(grund_t::underground_mode==grund_t::ugm_level) {
+			grund_t::underground_level = inp_underground_level.get_value();
+			// calc new images
+			welt->update_map();
+		}
 	}
 	welt->set_dirty();
 	return true;
@@ -261,13 +272,12 @@ void color_gui_t::zeichnen(koord pos, koord gr)
 
 	// can be changed also with keys ...
 	buttons[11].pressed = umgebung_t::hide_trees;
-	buttons[12].pressed = umgebung_t::hide_buildings>0;
-	buttons[13].pressed = umgebung_t::hide_buildings>1;
 	buttons[15].pressed = umgebung_t::station_coverage_show;
-	buttons[16].pressed = grund_t::underground_mode;
+	buttons[16].pressed = grund_t::underground_mode == grund_t::ugm_all;
 	buttons[17].pressed = grund_t::show_grid;
 	buttons[18].pressed = umgebung_t::show_names&1;
 	buttons[19].pressed = (umgebung_t::show_names&2)!=0;
+	buttons[20].pressed = grund_t::underground_mode == grund_t::ugm_level;
 
 	gui_frame_t::zeichnen(pos, gr);
 
@@ -277,14 +287,17 @@ void color_gui_t::zeichnen(koord pos, koord gr)
 	display_ddd_box_clip(x+10, y+SEPERATE3, RIGHT_WIDTH-20, 0, MN_GREY0, MN_GREY4);
 	display_ddd_box_clip(x+10, y+SEPERATE4, RIGHT_WIDTH-20, 0, MN_GREY0, MN_GREY4);
 
-	display_proportional_clip(x+10, y+BRIGHTNESS, translator::translate("1LIGHT_CHOOSE"), ALIGN_LEFT, COL_BLACK, true);
-	display_proportional_clip(x+NUMBER, y+BRIGHTNESS, ntos(display_get_light(), 0), ALIGN_RIGHT, COL_WHITE, true);
+	display_proportional_clip(x+10, y+BRIGHTNESS+1, translator::translate("1LIGHT_CHOOSE"), ALIGN_LEFT, COL_BLACK, true);
+
+	display_proportional_clip(x+10, y+SCROLL_SPEED+1, translator::translate("3LIGHT_CHOOSE"), ALIGN_LEFT, COL_BLACK, true);
 
-	display_proportional_clip(x+10, y+SCROLL_SPEED, translator::translate("3LIGHT_CHOOSE"), ALIGN_LEFT, COL_BLACK, true);
-	display_proportional_clip(x+NUMBER, y+SCROLL_SPEED, ntos(abs(umgebung_t::scroll_multi), 0), ALIGN_RIGHT, COL_WHITE, true);
+	display_proportional_clip(x+10, y+DENS_TRAFFIC+1, translator::translate("6WORLD_CHOOSE"), ALIGN_LEFT, COL_BLACK, true);
 
-	display_proportional_clip(x+10, y+DENS_TRAFFIC, translator::translate("6WORLD_CHOOSE"), ALIGN_LEFT, COL_BLACK, true);
-	display_proportional_clip(x+NUMBER, y+DENS_TRAFFIC, ntos(sets->get_verkehr_level(),0), ALIGN_RIGHT, COL_WHITE, true);
+	const char *hhc = translator::translate( umgebung_t::hide_buildings==0 ? "no buildings hidden" : (umgebung_t::hide_buildings==1 ? "hide city building" : "hide all building") );
+	display_proportional_clip(x+10+16, y+HIDE_CITY_HOUSES+1, hhc, ALIGN_LEFT, COL_BLACK, true);
+
+	const char *ctc = translator::translate( umgebung_t::show_vehicle_states==0 ? "convoi error tooltips" : (umgebung_t::show_vehicle_states==1 ? "convoi mouseover tooltips" : "all convoi tooltips") );
+	display_proportional_clip(x+10+16, y+CONVOI_TOOLTIPS+1, ctc, ALIGN_LEFT, COL_BLACK, true);
 
 	int len=15+display_proportional_clip(x+10, y+FPS_DATA, translator::translate("Frame time:"), ALIGN_LEFT, COL_BLACK, true);
 	sprintf(buf,"%ld ms", get_frame_time() );
@@ -300,7 +313,7 @@ void color_gui_t::zeichnen(koord pos, koord gr)
 	uint32 target_fps = welt->is_fast_forward() ? 10 : umgebung_t::fps;
 	if(loops<(target_fps*3)/4) {
 		farbe = (loops<=target_fps/2) ? COL_RED : COL_YELLOW;
-  }
+	}
 	len = 15+display_proportional_clip(x+10, y+FRAME_DATA, translator::translate("FPS:"), ALIGN_LEFT, COL_BLACK, true);
 	sprintf(buf,"%d fps", loops );
 	display_proportional_clip(x+len, y+FRAME_DATA, buf, ALIGN_LEFT, farbe, true);
diff --git a/gui/colors.h b/gui/colors.h
index e745629..d7e8758 100644
--- a/gui/colors.h
+++ b/gui/colors.h
@@ -3,6 +3,9 @@
 
 #include "gui_frame.h"
 #include "components/gui_button.h"
+#include "components/gui_numberinput.h"
+
+#define COLORS_MAX_BUTTONS (21)
 
 /**
  * Menü zur Änderung der Anzeigeeinstellungen.
@@ -12,29 +15,30 @@ class color_gui_t : public gui_frame_t, private action_listener_t
 {
 private:
 	karte_t *welt;
-	button_t buttons[20];
+	button_t buttons[COLORS_MAX_BUTTONS];
+	gui_numberinput_t brightness, scrollspeed, traffic_density, inp_underground_level;
 
 public:
-    color_gui_t(karte_t *welt);
-
-    /**
-     * Manche Fenster haben einen Hilfetext assoziiert.
-     * @return den Dateinamen für die Hilfe, oder NULL
-     * @author Hj. Malthaner
-     */
-    const char * get_hilfe_datei() const { return "display.txt"; }
-
-    void zeichnen(koord pos, koord gr);
-
-    /**
-     * This method is called if an action is triggered
-     * @author Hj. Malthaner
-     *
-     * Returns true, if action is done and no more
-     * components should be triggered.
-     * V.Meyer
-     */
-    bool action_triggered( gui_action_creator_t *komp, value_t extra);
+	color_gui_t(karte_t *welt);
+
+	/**
+	 * Manche Fenster haben einen Hilfetext assoziiert.
+	 * @return den Dateinamen für die Hilfe, oder NULL
+	 * @author Hj. Malthaner
+	 */
+	const char * get_hilfe_datei() const { return "display.txt"; }
+
+	void zeichnen(koord pos, koord gr);
+
+	/**
+	 * This method is called if an action is triggered
+	 * @author Hj. Malthaner
+	 *
+	 * Returns true, if action is done and no more
+	 * components should be triggered.
+	 * V.Meyer
+	 */
+	bool action_triggered( gui_action_creator_t *komp, value_t extra);
 };
 
 #endif
diff --git a/gui/components/gui_button.cc b/gui/components/gui_button.cc
index fbaa045..ea30346 100644
--- a/gui/components/gui_button.cc
+++ b/gui/components/gui_button.cc
@@ -22,6 +22,7 @@
 #include "../../utils/cstring_t.h"
 
 #define STATE_MASK (127)
+#define AUTOMATIC_MASK (255)
 static const char *empty="";
 
 /*
@@ -56,9 +57,9 @@ static image_id b_cap_right_p = IMG_LEER;
  * Lazy button image number init
  * @author Hj. Malthaner
  */
-static void init_button_images()
+void button_t::init_button_images()
 {
-	if(square_button_pushed==IMG_LEER  &&  obj_reader_t::has_been_init) {
+	if(skinverwaltung_t::window_skin!=NULL) {
 
 		square_button_normal = skinverwaltung_t::window_skin->get_bild(6)->get_nummer();
 		square_button_pushed = skinverwaltung_t::window_skin->get_bild(7)->get_nummer();
@@ -190,7 +191,6 @@ button_t::button_t()
 	translated_tooltip = tooltip = NULL;
 	background = MN_GREY3;
 	b_enabled = true;
-	init_button_images();
 }
 
 
@@ -298,7 +298,11 @@ void button_t::infowin_event(const event_t *ev)
 
 	if(type<=STATE_MASK) {
 		// Hajo: check button state, if we should look depressed
-		pressed  =  (ev->button_state==1)  &&  b_enabled;
+		pressed = (ev->button_state==1);
+	}
+
+	if(  type>AUTOMATIC_MASK  &&  IS_LEFTCLICK(ev)  ) {
+		pressed = !pressed;
 	}
 
 	if(IS_LEFTRELEASE(ev)) {
diff --git a/gui/components/gui_button.h b/gui/components/gui_button.h
index 663ce4f..24f2eee 100644
--- a/gui/components/gui_button.h
+++ b/gui/components/gui_button.h
@@ -33,6 +33,7 @@ class button_t :
 public:
 	/* the button with the postfix state do not automatically change their state like the normal button do
 	 * the _state buttons must be changed by the caller!
+	 * _automatic buttons do eveything themselves, i.e. depress/release alternately
 	 *
 	 * square: button with text on the right side next to it
 	 * box:  button with is used for many selection purposes; can have colored background
@@ -41,8 +42,11 @@ public:
 	 * repeat arrows: calls the caller until the mouse is released
 	 * scrollbar: well you guess it. Not used by gui_frame_t things ...
 	 */
-	enum type { square=1, box, roundbox, arrowleft, arrowright, arrowup, arrowdown, scrollbar, repeatarrowleft, repeatarrowright, posbutton,
-					   square_state=129, box_state, roundbox_state, arrowleft_state, arrowright_state, arrowup_state, arrowdown_state, scrollbar_state, repeatarrowleft_state, repeatarrowright_state };
+	enum type {
+		square=1, box, roundbox, arrowleft, arrowright, arrowup, arrowdown, scrollbar, repeatarrowleft, repeatarrowright, posbutton,
+		square_state=129, box_state, roundbox_state, arrowleft_state, arrowright_state, arrowup_state, arrowdown_state, scrollbar_state, repeatarrowleft_state, repeatarrowright_state,
+		square_automatic=257
+	};
 
 private:
 	/**
@@ -72,6 +76,8 @@ private:
 	const char *translated_text;
 
 public:
+	static void init_button_images();	// must be called at least once after loading skins
+
 	PLAYER_COLOR_VAL background; //@author hsiegeln
 	PLAYER_COLOR_VAL foreground;
 
diff --git a/gui/components/gui_chart.cc b/gui/components/gui_chart.cc
index 5498468..0b8922b 100644
--- a/gui/components/gui_chart.cc
+++ b/gui/components/gui_chart.cc
@@ -7,6 +7,7 @@
 #include <cmath>
 
 #include "gui_chart.h"
+#include "../../dataobj/umgebung.h"
 #include "../../utils/simstring.h"
 #include "../../simdebug.h"
 #include "../../simgraph.h"
@@ -21,7 +22,7 @@ static char tooltip[64];
  */
 void gui_chart_t::set_background(int i)
 {
-  background = i;
+	background = i;
 }
 
 
@@ -37,11 +38,10 @@ gui_chart_t::gui_chart_t() : gui_komponente_t()
 
 	// Hajo: transparent by default
 	background = -1;
-};
+}
 
 
-int
-gui_chart_t::add_curve(int color, sint64 *values, int size, int offset, int elements, int type, bool show, bool show_value)
+int gui_chart_t::add_curve(int color, sint64 *values, int size, int offset, int elements, int type, bool show, bool show_value, int precision )
 {
 	curve_t new_curve;
 	new_curve.color = color;
@@ -52,29 +52,29 @@ gui_chart_t::add_curve(int color, sint64 *values, int size, int offset, int elem
 	new_curve.show = show;
 	new_curve.show_value = show_value;
 	new_curve.type = type;
+	new_curve.precision = precision;
 	curves.append(new_curve);
 	return curves.get_count();
-};
+}
 
 
 void gui_chart_t::hide_curve(unsigned int id)
 {
-  if (id <= curves.get_count()) {
-    curves.at(id).show = false;
-  }
+	if (id <= curves.get_count()) {
+		curves.at(id).show = false;
+	}
 }
 
 
 void gui_chart_t::show_curve(unsigned int id)
 {
-  if (id <= curves.get_count()) {
-    curves.at(id).show = true;
-  }
+	if (id <= curves.get_count()) {
+		curves.at(id).show = true;
+	}
 }
 
 
-void
-gui_chart_t::zeichnen(koord offset)
+void gui_chart_t::zeichnen(koord offset)
 {
 	offset += pos;
 
@@ -94,6 +94,15 @@ gui_chart_t::zeichnen(koord offset)
 	if(background != -1) {
 		display_fillbox_wh_clip(offset.x, offset.y, groesse.x, groesse.y, background, false);
 	}
+	int tmpx, factor;
+	if(umgebung_t::left_to_right_graphs) {
+		tmpx = offset.x + groesse.x - groesse.x % (x_elements - 1);
+		factor = -1;
+	}
+	else {
+		tmpx = offset.x;
+		factor = 1;
+	}
 
 	// draw zero line
 	display_direct_line(offset.x+1, offset.y+baseline, offset.x+groesse.x-2, offset.y+baseline, MN_GREY4);
@@ -118,16 +127,21 @@ gui_chart_t::zeichnen(koord offset)
 		if (show_x_axis) {
 			// display x-axis
 			sprintf(digit, "%i", abs(seed-i));
-			display_proportional_clip(offset.x+(groesse.x / (x_elements - 1))*i - (seed != i ? (int)(2*log((double)abs((seed-i)))) : 0), offset.y+groesse.y+6, digit, ALIGN_LEFT, MN_GREY4, true );
+			display_proportional_clip(tmpx+factor*(groesse.x / (x_elements - 1))*i - (seed != i ? (int)(2*log((double)abs((seed-i)))) : 0), offset.y+groesse.y+6, digit, ALIGN_LEFT, MN_GREY4, true );
 		}
 		// year's vertical lines
-		display_vline_wh_clip(offset.x+(groesse.x / (x_elements - 1))*i, offset.y+1, groesse.y-2, MN_GREY4, false);
+		display_vline_wh_clip(tmpx+factor*(groesse.x / (x_elements - 1))*i, offset.y+1, groesse.y-2, MN_GREY4, false);
 	}
 
 	// display current value?
 	int tooltip_n=-1;
 	if(tooltipkoord!=koord::invalid) {
-		tooltip_n = (tooltipkoord.x*x_elements+4)/(groesse.x|1);
+		if(umgebung_t::left_to_right_graphs) {
+			tooltip_n = x_elements-1-(tooltipkoord.x*x_elements+4)/(groesse.x|1);
+		}
+		else {
+			tooltip_n = (tooltipkoord.x*x_elements+4)/(groesse.x|1);
+		}
 	}
 
 	// draw chart's curves
@@ -139,27 +153,35 @@ gui_chart_t::zeichnen(koord offset)
 				//tmp=c.values[year*c.size+c.offset];
 				c.type == 0 ? tmp = c.values[i*c.size+c.offset] : tmp = c.values[i*c.size+c.offset] / 100;
 				// display marker(box) for financial value
-				display_fillbox_wh_clip(offset.x+(groesse.x / (x_elements - 1))*i-2, offset.y+baseline- (int)(tmp/scale)-2, 5, 5, c.color, true);
+				display_fillbox_wh_clip(tmpx+factor*(groesse.x / (x_elements - 1))*i-2, offset.y+baseline- (int)(tmp/scale)-2, 5, 5, c.color, true);
 
 				// display tooltip?
 				if(i==tooltip_n  &&  abs((int)(baseline-(int)(tmp/scale)-tooltipkoord.y))<10) {
-					number_to_string(tooltip, tmp);
+					number_to_string(tooltip, tmp, c.precision);
 					win_set_tooltip( get_maus_x()+16, get_maus_y()-16, tooltip );
 				}
 
 				// draw line between two financial markers; this is only possible from the second value on
 				if (i>0) {
-					display_direct_line(offset.x+(groesse.x / (x_elements - 1))*(i-1),
+					display_direct_line(tmpx+factor*(groesse.x / (x_elements - 1))*(i-1),
 						offset.y+baseline-(int)(last_year/scale),
-						offset.x+(groesse.x / (x_elements - 1))*i,
+						tmpx+factor*(groesse.x / (x_elements - 1))*(i),
 						offset.y+baseline-(int)(tmp/scale),
 						c.color);
-				} else {
+				}
+				else {
 					// for the first element print the current value (optionally)
 					// only print value if not too narrow to min/max/zero
-					if ((c.show_value) && (baseline-tmp/scale-8 > 0) && (baseline-tmp/scale+8 < groesse.y) && (abs((int)(tmp/scale)) > 9)) {
-						number_to_string(cmin, tmp);
-						display_proportional_clip(offset.x - 4, offset.y+baseline-(int)(tmp/scale)-4, cmin, ALIGN_RIGHT, c.color, true );
+					if(  c.show_value  ) {
+						if(  umgebung_t::left_to_right_graphs  ) {
+							number_to_string(cmin, tmp, c.precision);
+							const sint16 width = proportional_string_width(cmin)+7;
+							display_ddd_proportional( tmpx + 8, offset.y+baseline-(int)(tmp/scale)-4, width, 0, COL_GREY4, c.color, cmin, true);
+						}
+						else if(  (baseline-tmp/scale-8) > 0  &&  (baseline-tmp/scale+8) < groesse.y  &&  abs((int)(tmp/scale)) > 9  ) {
+							number_to_string(cmin, tmp, c.precision);
+							display_proportional_clip(tmpx - 4, offset.y+baseline-(int)(tmp/scale)-4, cmin, ALIGN_RIGHT, c.color, true );
+						}
 					}
 				}
 				last_year=tmp;
@@ -167,34 +189,34 @@ gui_chart_t::zeichnen(koord offset)
 		}
 		last_year=tmp=0;
 	}
-
 }
 
 
-void
-gui_chart_t::calc_gui_chart_values(sint64 *baseline, float *scale, char *cmin, char *cmax) const
+void gui_chart_t::calc_gui_chart_values(sint64 *baseline, float *scale, char *cmin, char *cmax) const
 {
 	sint64 tmp=0;
 	sint64 min = 0, max = 0;
+	int precision = 0;
 
-	for (slist_iterator_tpl<curve_t> i(curves); i.next();) {
+	for(  slist_iterator_tpl<curve_t> i(curves);  i.next();  ) {
 		const curve_t& c = i.get_current();
-		if (c.show)
-		{
-			for (int i=0; i<c.elements; i++) {
+		if(  c.show  ) {
+			for(  int i=0;  i<c.elements;  i++  ) {
 				c.type == 0 ? tmp = c.values[i*c.size+c.offset] : tmp = c.values[i*c.size+c.offset] / 100;
 				if (min > tmp) {
 					min = tmp ;
+					precision = c.precision;
 				}
 				if (max < tmp) {
 					max = tmp;
+					precision = c.precision;
 				}
 			}
 		}
 	}
 
-	number_to_string(cmin, min);
-	number_to_string(cmax, max);
+	number_to_string(cmin, min, precision);
+	number_to_string(cmax, max, precision);
 
 	// scale: factor to calculate money with, to get y-pos offset
 	*scale = (float)(max - min) / (groesse.y-2);
@@ -207,8 +229,6 @@ gui_chart_t::calc_gui_chart_values(sint64 *baseline, float *scale, char *cmin, c
 }
 
 
-
-
 /**
  * Events werden hiermit an die GUI-Komponenten
  * gemeldet
diff --git a/gui/components/gui_chart.h b/gui/components/gui_chart.h
index 9f0906c..03af505 100644
--- a/gui/components/gui_chart.h
+++ b/gui/components/gui_chart.h
@@ -46,8 +46,7 @@ public:
 	 * set dimension
 	 * @author hsiegeln
 	 */
-	void set_dimension(int x, int y)
-	{
+	void set_dimension(int x, int y) {
 		x_elements = x;
 		y_elements = y;
 	}
@@ -63,7 +62,7 @@ public:
 	 * returns curve's id
 	 * @author hsiegeln
 	 */
-	int add_curve(int color, sint64 *values, int size, int offset, int elements, int type, bool show, bool show_value);
+	int add_curve(int color, sint64 *values, int size, int offset, int elements, int type, bool show, bool show_value, int precision );
 
 	void remove_curves() { curves.clear(); }
 
@@ -108,6 +107,7 @@ private:
 		bool show;
 		bool show_value; // show first value of curve as number on chart?
 		int type; // 0 = standard, 1 = money
+		int precision;	// how many numbers ...
 	};
 
 	slist_tpl <curve_t> curves;
diff --git a/gui/components/gui_flowtext.cc b/gui/components/gui_flowtext.cc
index c7bec05..7bf1f9a 100644
--- a/gui/components/gui_flowtext.cc
+++ b/gui/components/gui_flowtext.cc
@@ -53,7 +53,8 @@ void gui_flowtext_t::set_text(const char *text)
 				if (!endtag) {
 					att = ATT_A_START;
 					param = word;
-				} else {
+				}
+				else {
 					att = ATT_A_END;
 					links.append(hyperlink_t(param.substr(8, param.len() - 1)));
 				}
@@ -85,7 +86,8 @@ void gui_flowtext_t::set_text(const char *text)
 					lead++;
 				}
 				att = ATT_UNKNOWN;
-			} else {
+			}
+			else {
 				// ignore all unknown
 				att = ATT_UNKNOWN;
 			}
diff --git a/gui/components/gui_label.cc b/gui/components/gui_label.cc
index 1035371..1ad3052 100644
--- a/gui/components/gui_label.cc
+++ b/gui/components/gui_label.cc
@@ -49,7 +49,8 @@ void gui_label_t::zeichnen(koord offset)
 				*const_cast<char *>(separator) = '\0';
 				display_proportional_clip(pos.x+offset.x, pos.y+offset.y, translator::translate(text), ALIGN_RIGHT, color, true);
 				*const_cast<char *>(separator) = ',';
-			} else {
+			}
+			else {
 				display_proportional_clip(pos.x+offset.x, pos.y+offset.y, text, ALIGN_RIGHT, color, true);
 			}
 		}
diff --git a/gui/components/gui_label.h b/gui/components/gui_label.h
index 6cc3b02..7fdb4ad 100644
--- a/gui/components/gui_label.h
+++ b/gui/components/gui_label.h
@@ -27,12 +27,12 @@
 class gui_label_t : public gui_komponente_t
 {
 public:
-    enum align_t {
+	enum align_t {
 		left,
 		centered,
 		right,
 		money
-    };
+	};
 private:
 	align_t align:4;
 
@@ -45,7 +45,7 @@ private:
 	const char * text;	// only for direct acess of non-translateable things. Do not use!
 
 public:
-	gui_label_t(const char* text, int color = COL_BLACK, align_t align = left);
+	gui_label_t(const char* text=NULL, int color=COL_BLACK, align_t align=left);
 
 	/**
 	 * setzt den Text des Labels
diff --git a/gui/components/gui_numberinput.cc b/gui/components/gui_numberinput.cc
index e2cd7ef..8e5511d 100644
--- a/gui/components/gui_numberinput.cc
+++ b/gui/components/gui_numberinput.cc
@@ -6,7 +6,6 @@
  */
 
 #include "gui_numberinput.h"
-#include <stdlib.h>
 #include "../../simwin.h"
 #include "../../simgraph.h"
 #include "../../macros.h"
@@ -62,7 +61,7 @@ void gui_numberinput_t::set_value(sint32 new_value)
 		new_value = value;
 	}
 	// To preserve cursor position if text was edited, only set new text if changed (or empty before)
-	if(  new_value != get_text_value()  ||  textbuffer[0]<=32  ) {
+	if(  textbuffer[0]<32  ||  new_value != get_text_value()  ) {
 		sprintf(textbuffer, "%d", new_value);
 		textinp.set_text(textbuffer, 20);
 	}
@@ -207,6 +206,17 @@ sint32 gui_numberinput_t::get_prev_value()
 
 
 
+// all init in one ...
+void gui_numberinput_t::init( sint32 value, sint32 min, sint32 max, sint32 mode, bool wrap )
+{
+	set_limits( min, max );
+	set_value( value );
+	set_increment_mode( mode );
+	wrap_mode( wrap );
+}
+
+
+
 void gui_numberinput_t::infowin_event(const event_t *ev)
 {
 	// buttons pressed
diff --git a/gui/components/gui_numberinput.h b/gui/components/gui_numberinput.h
index 8ea6abf..ea24d5e 100644
--- a/gui/components/gui_numberinput.h
+++ b/gui/components/gui_numberinput.h
@@ -62,6 +62,9 @@ public:
 
 	virtual void set_groesse(koord groesse);
 
+	// all init in one ...
+	void init( sint32 value, sint32 min, sint32 max, sint32 mode, bool wrap );
+
 	/**
 	 * sets and get the current value.
 	 * return current value (or min or max in currently set to outside value)
diff --git a/gui/components/gui_scrollbar.cc b/gui/components/gui_scrollbar.cc
index b05e41a..e783910 100644
--- a/gui/components/gui_scrollbar.cc
+++ b/gui/components/gui_scrollbar.cc
@@ -209,13 +209,16 @@ void scrollbar_t::infowin_event(const event_t *ev)
 			if (type == vertical) {
 				if (y < real_knob_position()+12) {
 					space_press(0);
-				} else {
+				}
+				else {
 					space_press(1);
 				}
-			} else {
+			}
+			else {
 				if (x < real_knob_position()+12) {
 					space_press(0);
-				} else {
+				}
+				else {
 					space_press(1);
 				}
 			}
diff --git a/gui/components/gui_tab_panel.h b/gui/components/gui_tab_panel.h
index ff9a013..36e024a 100644
--- a/gui/components/gui_tab_panel.h
+++ b/gui/components/gui_tab_panel.h
@@ -53,7 +53,7 @@ public:
 	 */
 	gui_komponente_t* get_aktives_tab() const { return tabs.at(active_tab).component; }
 
-	int get_active_tab_index() const { return active_tab; }
+	int get_active_tab_index() const { return min(tabs.get_count()-1,active_tab); }
 	void set_active_tab_index( int i ) { active_tab = min(tabs.get_count()-1,i); }
 
 	/**
diff --git a/gui/components/gui_textarea.cc b/gui/components/gui_textarea.cc
index cc20951..ff3bab0 100644
--- a/gui/components/gui_textarea.cc
+++ b/gui/components/gui_textarea.cc
@@ -25,7 +25,8 @@ gui_textarea_t::set_text(const char *text)
 {
 	if(text) {
 		this->text = text;
-	} else {
+	}
+	else {
 		text = "";
 	}
 }
@@ -46,7 +47,7 @@ void gui_textarea_t::recalc_size()
 
 		do {
 			next = strchr(buf, '\n');
-			const long len = next != NULL ? next - buf : -1;
+			const size_t len = next != NULL ? next - buf : -1;
 			int px_len = display_calc_proportional_string_len_width(buf, len);
 			if(px_len>x_size) {
 				x_size = px_len;
@@ -81,7 +82,7 @@ void gui_textarea_t::zeichnen(koord offset)
 		do {
 			next = strchr(buf, '\n');
 			if(pos.y+new_lines>=0) {
-				const long len = next != NULL ? next - buf : -1;
+				const int len = next != NULL ? (long)(size_t)(next - buf) : -1;
 				int px_len = display_text_proportional_len_clip(x, y + new_lines, buf, ALIGN_LEFT | DT_DIRTY | DT_CLIP, COL_BLACK, len);
 				if(px_len>x_size) {
 					x_size = px_len;
diff --git a/gui/components/gui_textinput.cc b/gui/components/gui_textinput.cc
index 5a91615..0455ebb 100644
--- a/gui/components/gui_textinput.cc
+++ b/gui/components/gui_textinput.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997 - 2001 Hansjörg Malthaner
+ * Copyright (c) 1997 - 2001 Hansjoerg Malthaner
  *
  * This file is part of the Simutrans project under the artistic licence.
  * (see licence.txt)
@@ -46,7 +46,7 @@ void gui_textinput_t::infowin_event(const event_t *ev)
 {
 	if(ev->ev_class == EVENT_KEYBOARD) {
 		if((text != NULL) && has_focus(this)) {
-			const long len = strlen(text);
+			const size_t len = strlen(text);
 
 			switch(ev->ev_code) {
 				case SIM_KEY_DOWN: // down arrow
@@ -58,12 +58,12 @@ void gui_textinput_t::infowin_event(const event_t *ev)
 					}
 					break;
 				case SIM_KEY_RIGHT: // right arrow
-					if (cursor_pos >= 0) {
-						cursor_pos = get_next_char(text, cursor_pos);
-					}
-					if (cursor_pos > (long)strlen(text)) {
+					if (cursor_pos > strlen(text)) {
 						cursor_pos = strlen(text);
 					}
+					else {
+						cursor_pos = get_next_char(text, cursor_pos);
+					}
 					break;
 				case SIM_KEY_UP: // rightarrow
 					// not used currently
@@ -78,12 +78,13 @@ void gui_textinput_t::infowin_event(const event_t *ev)
 					// backspace
 					if(cursor_pos > 0) {
 						if (cursor_pos < len) {
-							int prev_pos = cursor_pos;
+							size_t prev_pos = cursor_pos;
 							cursor_pos = get_prev_char(text, cursor_pos);
-							for (int pos = cursor_pos; pos <= len-(prev_pos-cursor_pos); pos++) {
+							for (size_t pos = cursor_pos; pos <= len-(prev_pos-cursor_pos); pos++) {
 								text[pos] = text[pos+(prev_pos-cursor_pos)];
 							}
-						} else {
+						}
+						else {
 							cursor_pos = get_prev_char(text, cursor_pos);
 							text[cursor_pos] = 0;
 						}
@@ -92,8 +93,8 @@ void gui_textinput_t::infowin_event(const event_t *ev)
 				case 127:
 					// delete
 					if (cursor_pos <= len) {
-							int next_pos = get_next_char(text, cursor_pos);
-							for (int pos = cursor_pos; pos < len; pos++) {
+							size_t next_pos = get_next_char(text, cursor_pos);
+							for (size_t pos = cursor_pos; pos < len; pos++) {
 								text[pos] = text[pos+(next_pos-cursor_pos)];
 							}
 					}
@@ -115,7 +116,7 @@ void gui_textinput_t::infowin_event(const event_t *ev)
 						// ignore special keys not handled so far
 						break;
 					}
-					// Buchstaben, Ziffern und Sonderzeichen einfügen:
+					// insert letters, numbers, and special characters
 
 					// test, if we have top convert letter
 					char letter[8];
@@ -147,7 +148,7 @@ void gui_textinput_t::infowin_event(const event_t *ev)
 						letter[1] = 0;
 					}
 
-					int num_letter = strlen(letter);
+					size_t num_letter = strlen(letter);
 
 					if(len+num_letter>=max) {
 						// too many chars ...
@@ -156,11 +157,12 @@ void gui_textinput_t::infowin_event(const event_t *ev)
 
 					// insert into text?
 					if (cursor_pos < len) {
-						for (int pos = len+num_letter; pos >= cursor_pos; pos--) {
+						for (sint64 pos = len+num_letter; pos >= (sint64)cursor_pos; pos--) {
 							text[pos] = text[pos-num_letter];
 						}
 						memcpy( text+cursor_pos, letter, num_letter );
-					} else {
+					}
+					else {
 						// append to text
 						memcpy( text+len, letter, num_letter );
 						text[len+num_letter] = 0;
@@ -179,10 +181,12 @@ void gui_textinput_t::infowin_event(const event_t *ev)
 			request_focus(this);
 		}
 		cursor_pos = 0;
-		for( int i=strlen(text); i>0;  i-- ) {
-			if(ev->cx+cursor_offset > display_calc_proportional_string_len_width(text,i)) {
-				cursor_pos = i;
-				break;
+		if (text) {
+			for( size_t i=strlen(text); i>0;  i-- ) {
+				if(ev->cx+cursor_offset > display_calc_proportional_string_len_width(text,i)) {
+					cursor_pos = i;
+					break;
+				}
 			}
 		}
 DBG_DEBUG("gui_textinput_t::gui_textinput_t()","cursor_pos=%i, cx=%i",cursor_pos,ev->cx);
@@ -206,7 +210,7 @@ void gui_textinput_t::zeichnen(koord offset)
 		int align_offset = (align == ALIGN_RIGHT) ? proportional_string_width(text) : 0;
 
 		cursor_offset = proportional_string_len_width(text, cursor_pos);
-		if (cursor_offset > groesse.x - 2) {
+		if (cursor_offset+2 > groesse.x) {
 			cursor_offset -= (groesse.x - 3);
 		}
 		else {
@@ -245,7 +249,7 @@ void gui_textinput_t::zeichnen(koord offset)
 
 
 
-void gui_textinput_t::set_text(char *text, int max)
+void gui_textinput_t::set_text(char *text, size_t max)
 {
 	this->text = text;
 	this->max = max;
diff --git a/gui/components/gui_textinput.h b/gui/components/gui_textinput.h
index 6fa91b6..41b6ed6 100644
--- a/gui/components/gui_textinput.h
+++ b/gui/components/gui_textinput.h
@@ -11,6 +11,7 @@
 #include "../../ifc/gui_action_creator.h"
 #include "../../ifc/gui_komponente.h"
 #include "../../simcolor.h"
+#include "../../simgraph.h"
 
 
 /**
@@ -38,19 +39,19 @@ protected:
 	 * Maximallänge des Stringbuffers
 	 * @author Hj. Malthaner
 	 */
-	long max;
+	size_t max;
 
 	/**
 	 * position of text cursor
 	 * @author hsiegeln
 	 */
-	long cursor_pos;
+	size_t cursor_pos;
 
 	/**
 	  * offset for drawing the cursor
 	  * Dwachs: made private to check for mouse induced cursor moves
 	  */
-	long cursor_offset;
+	KOORD_VAL cursor_offset;
 
 	/**
 	 * text alignment
@@ -70,7 +71,7 @@ public:
 	 *
 	 * @author Hj. Malthaner
 	 */
-	void set_text(char *text, int max);
+	void set_text(char *text, size_t max);
 
 	/**
 	 * Holt den Textpuffer
diff --git a/gui/components/gui_world_view_t.cc b/gui/components/gui_world_view_t.cc
index e7c4561..e9bcf41 100644
--- a/gui/components/gui_world_view_t.cc
+++ b/gui/components/gui_world_view_t.cc
@@ -89,7 +89,8 @@ world_view_t::zeichnen(koord offset)
 		int hgt;
 		if(!ding) {
 			hgt = tile_raster_scale_y( plan->get_kartenboden()->get_hoehe()*TILE_HEIGHT_STEP/Z_TILE_STEP, raster );
-		} else {
+		}
+		else {
 			hgt = tile_raster_scale_y( ding->get_pos().z*TILE_HEIGHT_STEP/Z_TILE_STEP, raster );
 			if(ding->get_typ() == ding_t::aircraft) {
 				const aircraft_t *plane =  dynamic_cast <const aircraft_t *>(ding);
@@ -153,9 +154,17 @@ world_view_t::zeichnen(koord offset)
 
 			plan = welt->lookup(k);
 			if(plan  &&  plan->get_kartenboden()) {
-				const sint16 yypos = display_off.y + (offsets[i].y + offsets[i].x) * 16 * raster / 64 - tile_raster_scale_y(plan->get_kartenboden()->get_hoehe() * TILE_HEIGHT_STEP / Z_TILE_STEP, raster);
+				const grund_t *kb = plan->get_kartenboden();
+				// minimum height: ground height for overground,
+				// for the definition of underground_level see grund_t::set_underground_mode
+				const sint8 hmin = min(kb->get_hoehe(), grund_t::underground_level);
+
+				// maximum height: 127 for overground, undergroundlevel for sliced, ground height-1 for complete underground view
+				const sint8 hmax = grund_t::underground_mode==grund_t::ugm_all ? kb->get_hoehe()-(!kb->ist_tunnel()) : grund_t::underground_level;
+
+				const sint16 yypos = display_off.y + (offsets[i].y + offsets[i].x) * 16 * raster / 64 - tile_raster_scale_y(kb->get_hoehe() * TILE_HEIGHT_STEP / Z_TILE_STEP, raster);
 				if(yypos-(raster*2)<gr.y  &&  yypos+raster>=0) {
-					plan->display_dinge(pos.x+off_x,pos.y+yypos,raster,false);
+					plan->display_dinge(pos.x+off_x,pos.y+yypos,raster,false,hmin,hmax);
 				}
 				else if(yypos>gr.y) {
 					// now we can finish
diff --git a/gui/convoi_detail_t.cc b/gui/convoi_detail_t.cc
index 869488e..2fbc039 100644
--- a/gui/convoi_detail_t.cc
+++ b/gui/convoi_detail_t.cc
@@ -27,6 +27,7 @@
 #include "messagebox.h"
 
 #include "../utils/simstring.h"
+#include "../utils/cbuffer_t.h"
 
 #include "components/gui_chart.h"
 #include "components/list_button.h"
@@ -100,9 +101,7 @@ convoi_detail_t::zeichnen(koord pos, koord gr)
 		display_proportional_clip( pos.x+10, offset_y, tmp, ALIGN_LEFT, MONEY_PLUS, true );
 		offset_y += LINESPACE;
 
-		char buf[32];
-		money_to_string( buf, cnv->calc_restwert()/100.0 );
-		sprintf( tmp, "%s %s", translator::translate("Restwert:"), buf );
+		money_to_string( tmp+sprintf( tmp, "%s ", translator::translate("Restwert:") ), cnv->calc_restwert()/100.0 );
 		display_proportional_clip( pos.x+10, offset_y, tmp, ALIGN_LEFT, MONEY_PLUS, true );
 		offset_y += LINESPACE;
 	}
diff --git a/gui/convoi_detail_t.h b/gui/convoi_detail_t.h
index eda1908..7dae04b 100644
--- a/gui/convoi_detail_t.h
+++ b/gui/convoi_detail_t.h
@@ -16,8 +16,7 @@
 #include "components/action_listener.h"
 #include "../convoihandle_t.h"
 
-#include "../dataobj/koord.h"
-
+class koord;
 
 /**
  * One element of the vehicle list display
diff --git a/gui/convoi_filter_frame.cc b/gui/convoi_filter_frame.cc
index c8811db..d363eaa 100644
--- a/gui/convoi_filter_frame.cc
+++ b/gui/convoi_filter_frame.cc
@@ -18,23 +18,24 @@
 #include "../dataobj/translator.h"
 
 koord convoi_filter_frame_t::filter_buttons_pos[FILTER_BUTTONS] = {
-    koord(5,   4),
-    koord(5,  43),
-    koord(21, 58),
-    koord(21, 74),
-    koord(21, 90),
-    koord(21, 106),
-    koord(5,  175),
-    koord(21, 191),
-    koord(21, 207),
-    koord(21, 223),
-    koord(21, 239),
-    koord(21, 255),
-    koord(21, 271),
-    koord(125, 4),
-    koord(21, 122),
-    koord(21, 138),
-    koord(21, 154)
+	koord(5,   4),
+	koord(5,  43),
+	koord(21, 58),
+	koord(21, 74),
+	koord(21, 90),
+	koord(21, 106),
+	koord(5,  191),
+	koord(21, 207),
+	koord(21, 223),
+	koord(21, 239),
+	koord(21, 255),
+	koord(21, 271),
+	koord(21, 287),
+	koord(125, 4),
+	koord(21, 122),
+	koord(21, 138),
+	koord(21, 154),
+	koord(21, 170)
 };
 
 const char *convoi_filter_frame_t::filter_buttons_text[FILTER_BUTTONS] = {
@@ -54,7 +55,8 @@ const char *convoi_filter_frame_t::filter_buttons_text[FILTER_BUTTONS] = {
 	"clf_chk_waren",
 	"clf_chk_monorail",
 	"clf_chk_maglev",
-	"clf_chk_narrowgauge"
+	"clf_chk_narrowgauge",
+	"clf_chk_trams"
 };
 
 convoi_frame_t::filter_flag_t convoi_filter_frame_t::filter_buttons_types[FILTER_BUTTONS] = {
@@ -74,7 +76,8 @@ convoi_frame_t::filter_flag_t convoi_filter_frame_t::filter_buttons_types[FILTER
     convoi_frame_t::ware_filter,
     convoi_frame_t::monorail_filter,
     convoi_frame_t::maglev_filter,
-    convoi_frame_t::narrowgauge_filter
+    convoi_frame_t::narrowgauge_filter,
+	convoi_frame_t::tram_filter
 };
 
 
@@ -135,9 +138,9 @@ convoi_filter_frame_t::convoi_filter_frame_t(spieler_t *sp, convoi_frame_t *main
 		}
 	}
 	ware_cont.set_groesse(koord(100, 16*n + 4));
-	ware_scrolly.set_groesse(koord(125, 253));
+	ware_scrolly.set_groesse(koord(125, 269));
 
-	set_fenstergroesse(koord(255, 307));
+	set_fenstergroesse(koord(255, 323));
 }
 
 
diff --git a/gui/convoi_filter_frame.h b/gui/convoi_filter_frame.h
index 89c1fe6..3f9b1ff 100644
--- a/gui/convoi_filter_frame.h
+++ b/gui/convoi_filter_frame.h
@@ -53,7 +53,7 @@ private:
      * As long we do not have resource scripts, we display make
      * some tables for the main attributes of each button.
      */
-    enum { FILTER_BUTTONS=17 };
+    enum { FILTER_BUTTONS=18 };
 
     static koord filter_buttons_pos[FILTER_BUTTONS];
     static convoi_frame_t::filter_flag_t filter_buttons_types[FILTER_BUTTONS];
diff --git a/gui/convoi_frame.cc b/gui/convoi_frame.cc
index f38e8a3..bf197ed 100644
--- a/gui/convoi_frame.cc
+++ b/gui/convoi_frame.cc
@@ -70,7 +70,13 @@ bool convoi_frame_t::passes_filter(convoihandle_t cnv)
 				}
 				break;
 			case ding_t::waggon:
-				if(!get_filter(zuege_filter)) {
+				// filter trams: a convoi is considered tram if the first vehicle is a tram vehicle
+				if(fahr->get_besch()->get_waytype()==tram_wt) {
+					if (!get_filter(tram_filter)) {
+						return false;
+					}
+				}
+				else if (!get_filter(zuege_filter)) {
 					return false;
 				}
 				break;
@@ -355,7 +361,8 @@ void convoi_frame_t::set_ware_filter(const ware_besch_t *ware, int mode)
 			if(mode != 1) {
 				waren_filter.remove(ware);
 			}
-		} else {
+		}
+		else {
 			if(mode != 0) {
 				waren_filter.append(ware);
 			}
diff --git a/gui/convoi_frame.h b/gui/convoi_frame.h
index c592a8e..9d10fae 100644
--- a/gui/convoi_frame.h
+++ b/gui/convoi_frame.h
@@ -34,7 +34,7 @@ public:
 	enum filter_flag_t { any_filter=1, name_filter=2, typ_filter=4, ware_filter=8, spezial_filter=16,
 		sub_filter=32,	// Ab hier beginnen die Unterfilter!
 		lkws_filter=32, zuege_filter=64, schiffe_filter=128, aircraft_filter=256,
-		noroute_filter=512, nofpl_filter=1024, noincome_filter=2048, indepot_filter=4096, noline_filter=8192, stucked_filter=16384, monorail_filter=32768, maglev_filter=65536, narrowgauge_filter=131072 };
+		noroute_filter=512, nofpl_filter=1024, noincome_filter=2048, indepot_filter=4096, noline_filter=8192, stucked_filter=16384, monorail_filter=32768, maglev_filter=65536, narrowgauge_filter=131072, tram_filter=131072*2 };
 
 private:
 	spieler_t *owner;
diff --git a/gui/convoi_info_t.cc b/gui/convoi_info_t.cc
index aecda42..26ffdb9 100644
--- a/gui/convoi_info_t.cc
+++ b/gui/convoi_info_t.cc
@@ -140,7 +140,7 @@ convoi_info_t::convoi_info_t(convoihandle_t cnv)
 	chart.set_visible(false);
 	chart.set_background(MN_GREY1);
 	for (int cost = 0; cost<MAX_CONVOI_COST; cost++) {
-		chart.add_curve(cost_type_color[cost], cnv->get_finance_history(), MAX_CONVOI_COST, cost, MAX_MONTHS, cost<MAX_CONVOI_NON_MONEY_TYPES ? 0 : 1, false, true);
+		chart.add_curve(cost_type_color[cost], cnv->get_finance_history(), MAX_CONVOI_COST, cost, MAX_MONTHS, cost<MAX_CONVOI_NON_MONEY_TYPES ? 0 : 1, false, true, cost<MAX_CONVOI_NON_MONEY_TYPES ? 0 : 2 );
 		filterButtons[cost].init(button_t::box_state, cost_type[cost], koord(BUTTON1_X+(BUTTON_WIDTH+BUTTON_SPACER)*(cost%4), 230+(BUTTON_HEIGHT+2)*(cost/4)), koord(BUTTON_WIDTH, BUTTON_HEIGHT));
 		filterButtons[cost].add_listener(this);
 		filterButtons[cost].background = cost_type_color[cost];
@@ -217,11 +217,13 @@ convoi_info_t::zeichnen(koord pos, koord gr)
 			}
 			button.enable();
 			go_home_button.pressed = route_search_in_progress;
+			details_button.pressed = win_get_magic( magic_convoi_detail+cnv.get_id() );
 			if(  cnv->get_schedule()->get_count() > 0  ) {
 				const grund_t* g = cnv->get_welt()->lookup(cnv->get_schedule()->get_current_eintrag().pos);
 				if (g != NULL && g->get_depot()) {
 					go_home_button.disable();
-				} else {
+				}
+				else {
 					goto enable_home;
 				}
 			}
@@ -248,7 +250,7 @@ enable_home:
 		cnv->get_freight_info(freight_info);
 		text.set_text(freight_info);
 
-		route_bar.set_base(cnv->get_route()->get_max_n());
+		route_bar.set_base(cnv->get_route()->get_count()-1);
 		cnv_route_index = cnv->get_vehikel(0)->get_route_index()-1;
 
 		// all gui stuff set => display it
@@ -270,24 +272,26 @@ enable_home:
 		int len = display_proportional(pos.x + 11, pos.y + 16 + 20 + 1 * LINESPACE, translator::translate("Gewinn"), ALIGN_LEFT, COL_BLACK, true ) + 5;
 		money_to_string( tmp, cnv->get_jahresgewinn()/100.0 );
 		len += display_proportional( pos.x+11+len, pos.y+16+20+1*LINESPACE, tmp, ALIGN_LEFT, cnv->get_jahresgewinn()>0?MONEY_PLUS:MONEY_MINUS, true )+5;
-		sprintf(tmp," (%1.2f$/km)", cnv->get_running_cost()/100.0 );
+		money_to_string( tmp+1, cnv->get_running_cost()/100.0 );
+		strcat( tmp, "/km)" );
+		tmp[0] = '(';
 		display_proportional( pos.x+11+len, pos.y+16+20+1*LINESPACE, tmp, ALIGN_LEFT, COL_BLACK, true );
 
 		// the weight entry
 		info_buf.clear();
 		info_buf.append( translator::translate("Gewicht") );
 		info_buf.append( ": " );
-		info_buf.append( cnv->get_sum_gesamtgewicht() );
-		info_buf.append( " (" );
-		info_buf.append( cnv->get_sum_gesamtgewicht()-cnv->get_sum_gewicht() );
-		info_buf.append( ") t" );
+		info_buf.append( cnv->get_sum_gesamtgewicht(), 0 );
+		info_buf.append( "t (" );
+		info_buf.append( cnv->get_sum_gesamtgewicht()-cnv->get_sum_gewicht(), 0 );
+		info_buf.append( "t)" );
 		display_proportional( pos.x+11, pos.y+16+20+2*LINESPACE, info_buf, ALIGN_LEFT, COL_BLACK, true );
 
 		// next stop
 		const schedule_t * fpl = cnv->get_schedule();
 		info_buf.clear();
 		info_buf.append(translator::translate("Fahrtziel"));
-		fahrplan_gui_t::gimme_short_stop_name(info_buf, cnv->get_welt(), fpl, fpl->get_aktuell(), 34);
+		fahrplan_gui_t::gimme_short_stop_name(info_buf, cnv->get_welt(), cnv->get_besitzer(), fpl, fpl->get_aktuell(), 34);
 		len = display_proportional_clip( pos.x+11, pos.y+16+20+3*LINESPACE, info_buf, ALIGN_LEFT, COL_BLACK, true );
 
 		// convoi load indicator
@@ -329,7 +333,7 @@ bool convoi_info_t::action_triggered( gui_action_creator_t *komp,value_t /* */)
 
 	// datails?
 	if(komp == &details_button) {
-		create_win(20, 20, new convoi_detail_t(cnv), w_info, (long)this);
+		create_win(20, 20, new convoi_detail_t(cnv), w_info, magic_convoi_detail+cnv.get_id() );
 		return true;
 	}
 
@@ -362,7 +366,7 @@ bool convoi_info_t::action_triggered( gui_action_creator_t *komp,value_t /* */)
 			return true;
 		}
 
-		if(komp == &go_home_button    &&    !route_search_in_progress) {
+		if(komp == &go_home_button  &&  !route_search_in_progress) {
 			// limit update to certain states that are considered to be save for fahrplan updates
 			int state = cnv->get_state();
 			if(state==convoi_t::FAHRPLANEINGABE) {
@@ -382,20 +386,20 @@ DBG_MESSAGE("convoi_info_t::action_triggered()","convoi state %i => cannot chang
 					continue;
 				}
 				koord3d pos = depot->get_pos();
-				if(!shortest_route->empty()    &&    abs_distance(pos.get_2d(),cnv->get_pos().get_2d())>=shortest_route->get_max_n()) {
+				if(!shortest_route->empty()    &&    koord_distance(pos.get_2d(),cnv->get_pos().get_2d())>=shortest_route->get_count()-1) {
 					// the current route is already shorter, no need to search further
 					continue;
 				}
 				bool found = cnv->get_vehikel(0)->calc_route(cnv->get_pos(), pos,    50, route); // do not care about speed
 				if (found) {
-					if(  route->get_max_n() < shortest_route->get_max_n()    ||    shortest_route->empty()  ) {
+					if(  route->get_count() < shortest_route->get_count()    ||    shortest_route->empty()  ) {
 						shortest_route->kopiere(route);
 						home = pos;
 					}
 				}
 			}
 			delete route;
-			DBG_MESSAGE("shortest route has ", "%i hops", shortest_route->get_max_n());
+			DBG_MESSAGE("shortest route has ", "%i hops", shortest_route->get_count()-1);
 
 			// if route to a depot has been found, update the convoi's schedule
 			bool b_depot_found = false;
@@ -412,7 +416,8 @@ DBG_MESSAGE("convoi_info_t::action_triggered()","convoi state %i => cannot chang
 			const char* txt;
 			if (b_depot_found) {
 				txt = "Convoi has been sent\nto the nearest depot\nof appropriate type.\n";
-			} else {
+			}
+			else {
 				txt = "Home depot not found!\nYou need to send the\nconvoi to the depot\nmanually.";
 			}
 			create_win( new news_img(txt), w_time_delete, magic_none);
@@ -439,7 +444,8 @@ DBG_MESSAGE("convoi_info_t::action_triggered()","convoi state %i => cannot chang
 			filterButtons[i].pressed = !filterButtons[i].pressed;
 			if(filterButtons[i].pressed) {
 				chart.show_curve(i);
-			} else {
+			}
+			else {
 				chart.hide_curve(i);
 			}
 
diff --git a/gui/convoi_info_t.h b/gui/convoi_info_t.h
index 8ed7e3f..153fa84 100644
--- a/gui/convoi_info_t.h
+++ b/gui/convoi_info_t.h
@@ -79,7 +79,7 @@ public:
 	 * @return den Dateinamen für die Hilfe, oder NULL
 	 * @author V. Meyer
 	 */
-	const char * get_hilfe_datei() const {return "convoiinfo.txt"; }
+	const char * get_hilfe_datei() const { return "convoiinfo.txt"; }
 
 	/**
 	 * komponente neu zeichnen. Die übergebenen Werte beziehen sich auf
diff --git a/gui/curiosity_edit.h b/gui/curiosity_edit.h
index 46f83bb..4033edf 100644
--- a/gui/curiosity_edit.h
+++ b/gui/curiosity_edit.h
@@ -5,13 +5,12 @@
 
 #include "components/gui_label.h"
 
-#include "../besch/haus_besch.h"
-
 #include "../simwerkz.h"
 
 #define MAX_BUILD_TYPE (6)
 
 class wkz_build_haus_t;
+class haus_besch_t;
 
 class curiosity_edit_frame_t : public extend_edit_gui_t
 {
diff --git a/gui/depot_frame.cc b/gui/depot_frame.cc
index 76b95cd..c267548 100644
--- a/gui/depot_frame.cc
+++ b/gui/depot_frame.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997 - 2001 Hansjörg Malthaner
+ * Copyright (c) 1997 - 2001 Hj. Malthaner
  *
  * This file is part of the Simutrans project under the artistic licence.
  * (see licence.txt)
@@ -45,15 +45,15 @@ char depot_frame_t::no_line_text[128];	// contains the current translation of "<
 
 static const char * engine_type_names [9] =
 {
-  "unknown",
-  "steam",
-  "diesel",
-  "electric",
-  "bio",
-  "sail",
-  "fuel_cell",
-  "hydrogene",
-  "battery"
+	"unknown",
+	"steam",
+	"diesel",
+	"electric",
+	"bio",
+	"sail",
+	"fuel_cell",
+	"hydrogene",
+	"battery"
 };
 
 
@@ -188,13 +188,17 @@ DBG_DEBUG("depot_frame_t::depot_frame_t()","get_max_convoi_length()=%i",depot->g
 	show_retired_vehicles = old_retired;
 	show_all = old_show_all;
 
+	bool one = false;
+
 	cont_pas.add_komponente(&pas);
 	scrolly_pas.set_show_scroll_x(false);
 	scrolly_pas.set_size_corner(false);
 	scrolly_pas.set_read_only(false);
-
-	// always add
-	tabs.add_tab(&scrolly_pas, translator::translate( depot->get_passenger_name() ) );
+	// add only if there are any
+	if(!pas_vec.empty()) {
+		tabs.add_tab(&scrolly_pas, translator::translate( depot->get_passenger_name() ) );
+		one = true;
+	}
 
 	cont_electrics.add_komponente(&electrics);
 	scrolly_electrics.set_show_scroll_x(false);
@@ -203,6 +207,7 @@ DBG_DEBUG("depot_frame_t::depot_frame_t()","get_max_convoi_length()=%i",depot->g
 	// add only if there are any trolleybuses
 	if(!electrics_vec.empty()) {
 		tabs.add_tab(&scrolly_electrics, translator::translate( depot->get_electrics_name() ) );
+		one = true;
 	}
 
 	cont_loks.add_komponente(&loks);
@@ -212,6 +217,7 @@ DBG_DEBUG("depot_frame_t::depot_frame_t()","get_max_convoi_length()=%i",depot->g
 	// add, if waggons are there ...
 	if (!loks_vec.empty() || !waggons_vec.empty()) {
 		tabs.add_tab(&scrolly_loks, translator::translate( depot->get_zieher_name() ) );
+		one = true;
 	}
 
 	cont_waggons.add_komponente(&waggons);
@@ -221,6 +227,12 @@ DBG_DEBUG("depot_frame_t::depot_frame_t()","get_max_convoi_length()=%i",depot->g
 	// only add, if there are waggons
 	if (!waggons_vec.empty()) {
 		tabs.add_tab(&scrolly_waggons, translator::translate( depot->get_haenger_name() ) );
+		one = true;
+	}
+
+	if(!one) {
+		// add passenger as default
+		tabs.add_tab(&scrolly_pas, translator::translate( depot->get_passenger_name() ) );
 	}
 
 	pas.set_player_nr(depot->get_player_nr());
@@ -702,14 +714,16 @@ void depot_frame_t::update_data()
 		case 1:
 			if(icnv == -1) {
 				sprintf(txt_convois, translator::translate("1 convoi"));
-			} else {
+			}
+			else {
 				sprintf(txt_convois, translator::translate("convoi %d of %d"), icnv + 1, depot->convoi_count());
 			}
 			break;
 		default:
 			if(icnv == -1) {
 				sprintf(txt_convois, translator::translate("%d convois"), depot->convoi_count());
-			} else {
+			}
+			else {
 				sprintf(txt_convois, translator::translate("convoi %d of %d"), icnv + 1, depot->convoi_count());
 			}
 			break;
@@ -916,6 +930,10 @@ DBG_MESSAGE("depot_frame_t::image_from_storage_list()","appended %s",info->get_n
 			// append/insert into convoi
 			convoihandle_t cnv = depot->get_convoi(icnv);
 			if(!cnv.is_bound()) {
+				if(  convoihandle_t::is_exhausted()  ) {
+					create_win( new news_img("Convoi handles exhausted!"), w_time_delete, magic_none);
+					return;
+				}
 				// create a new convoi
 				cnv = depot->add_convoi();
 				icnv = depot->convoi_count() - 1;
@@ -1049,9 +1067,14 @@ bool depot_frame_t::action_triggered( gui_action_creator_t *komp,value_t p)
 			change_line();
 			return true;
 		} else if(komp == &bt_copy_convoi) {
-			depot->copy_convoi(cnv);
-			// automatically select newly created convoi
-			icnv = depot->convoi_count()-1;
+			if(  convoihandle_t::is_exhausted()  ) {
+				create_win( new news_img("Convoi handles exhausted!"), w_time_delete, magic_none);
+			}
+			else {
+				depot->copy_convoi(cnv);
+				// automatically select newly created convoi
+				icnv = depot->convoi_count()-1;
+			}
 		} else if(komp == &bt_apply_line) {
 			apply_line();
 		} else if(komp == &line_selector) {
@@ -1138,10 +1161,16 @@ depot_frame_t::zeichnen(koord pos, koord groesse)
 		return;
 	}
 
-	const convoihandle_t cnv = depot->get_convoi(icnv);
+	convoihandle_t cnv = depot->get_convoi(icnv);
+	// check for data inconsistencies (can happen with withdraw-all and vehicle in depot)
+	if(!cnv.is_bound() && convoi_pics.get_count()>0){
+		icnv=0;
+		update_data();
+		cnv = depot->get_convoi(icnv);
+	}
+
 	if(cnv.is_bound()) {
 		if(cnv->get_vehikel_anzahl() > 0) {
-			int length=0;
 			uint32 total_power=0;
 			uint32 total_max_weight=0;
 			uint32 total_min_weight=0;
@@ -1150,7 +1179,6 @@ depot_frame_t::zeichnen(koord pos, koord groesse)
 			for( unsigned i=0;  i<cnv->get_vehikel_anzahl();  i++) {
 				const vehikel_besch_t *besch = cnv->get_vehikel(i)->get_besch();
 
-				length += besch->get_length();
 				total_power += besch->get_leistung()*besch->get_gear()/64;
 				total_min_weight += besch->get_gewicht();
 				total_max_weight += besch->get_gewicht();
@@ -1165,14 +1193,14 @@ depot_frame_t::zeichnen(koord pos, koord groesse)
 						min_weight = min(min_weight, ware->get_weight_per_unit());
 					}
 				}
-				total_max_weight += max_weight*besch->get_zuladung()/1000;
-				total_min_weight += min_weight*besch->get_zuladung()/1000;
+				total_max_weight += (max_weight*besch->get_zuladung()+499)/1000;
+				total_min_weight += (min_weight*besch->get_zuladung()+499)/1000;
 			}
 			max_speed = min(speed_to_kmh(cnv->get_min_top_speed()), (uint32) sqrt((((double)total_power/total_min_weight)-1)*2500));
 			min_speed = min(speed_to_kmh(cnv->get_min_top_speed()), (uint32) sqrt((((double)total_power/total_max_weight)-1)*2500));
 			sprintf(txt_convoi_count, "%s %d (%s %i)",
 				translator::translate("Fahrzeuge:"), cnv->get_vehikel_anzahl(),
-				translator::translate("Station tiles:"), (length+TILE_STEPS-1)/TILE_STEPS );
+				translator::translate("Station tiles:"), cnv->get_tile_length() );
 			sprintf(txt_convoi_speed,  "%s %d(%d)km/h", translator::translate("Max. speed:"), min_speed, max_speed );
 			sprintf(txt_convoi_value, "%s %ld$", translator::translate("Restwert:"), (long)(cnv->calc_restwert()/100) );
 			// just recheck if schedules match
@@ -1219,6 +1247,7 @@ depot_frame_t::zeichnen(koord pos, koord groesse)
 void depot_frame_t::new_line()
 {
 	selected_line = depot->create_line();
+	depot->set_selected_line(selected_line);
 DBG_MESSAGE("depot_frame_t::new_line()","id=%d",selected_line.get_id() );
 	layout(NULL);
 	update_data();
@@ -1269,7 +1298,7 @@ void depot_frame_t::fahrplaneingabe()
 				// Fahrplandialog oeffnen
 				create_win(new fahrplan_gui_t(fpl, cnv->get_besitzer(), convoihandle_t() ), w_info, (long)fpl);
 
-				// evtl. hat ein callback cnv gelöscht, so erneut testen
+				// maybe convoi was deleted by a callback, so test again
 				if(cnv.is_bound()  &&  fpl != NULL) {
 					cnv->set_schedule(fpl);
 				}
diff --git a/gui/enlarge_map_frame_t.cc b/gui/enlarge_map_frame_t.cc
old mode 100644
new mode 100755
index 8778426..ceaf176
--- a/gui/enlarge_map_frame_t.cc
+++ b/gui/enlarge_map_frame_t.cc
@@ -13,7 +13,6 @@
 #include "messagebox.h"
 
 #include "../simdebug.h"
-#include "../simio.h"
 #include "../simworld.h"
 #include "../simwin.h"
 #include "../simimg.h"
@@ -21,7 +20,6 @@
 #include "../simskin.h"
 
 #include "../dataobj/einstellungen.h"
-#include "../dataobj/umgebung.h"
 #include "../dataobj/translator.h"
 
 // just for their structure size ...
@@ -34,23 +32,15 @@
 
 #include "../simgraph.h"
 
-#include "load_relief_frame.h"
-
 #include "../utils/simstring.h"
-#include "components/list_button.h"
 
 #define START_HEIGHT (28)
 
 #define LEFT_ARROW (110)
 #define RIGHT_ARROW (160)
-#define TEXT_RIGHT (145) // ten are offset in routine ..
-
-#define LEFT_WIDE_ARROW (185)
-#define RIGHT_WIDE_ARROW (235)
-#define TEXT_WIDE_RIGHT (220)
 
-#include <sys/stat.h>
-#include <time.h>
+#define RIGHT_COLUMN (185)
+#define RIGHT_COLUMN_WIDTH (60)
 
 
 
@@ -70,9 +60,7 @@ koord enlarge_map_frame_t::koord_from_rotation( einstellungen_t *sets, sint16 x,
 
 enlarge_map_frame_t::enlarge_map_frame_t(spieler_t *, karte_t *welt) :
 	gui_frame_t("enlarge map"),
-	memory(memory_str),
-	xsize(xsize_str,COL_WHITE,gui_label_t::centered),
-	ysize(ysize_str,COL_WHITE,gui_label_t::centered)
+	memory(memory_str)
 {
 	this->welt = welt;
 
@@ -85,44 +73,43 @@ enlarge_map_frame_t::enlarge_map_frame_t(spieler_t *, karte_t *welt) :
 
 	memory.set_pos( koord(10,intTopOfButton) );
 	add_komponente( &memory );
-	x_size[0].init( button_t::repeatarrowleft, NULL, koord(LEFT_ARROW,intTopOfButton) );
-	x_size[0].add_listener( this );
-	add_komponente( x_size+0 );
-	xsize.set_pos( koord((LEFT_ARROW+RIGHT_ARROW+14)/2,intTopOfButton) );
-	add_komponente( &xsize );
-	x_size[1].init( button_t::repeatarrowright, NULL, koord(RIGHT_ARROW,intTopOfButton) );
-	x_size[1].add_listener( this );
-	add_komponente( x_size+1 );
 
+	inp_x_size.set_pos(koord(LEFT_ARROW,intTopOfButton) );
+	inp_x_size.set_groesse(koord(RIGHT_ARROW-LEFT_ARROW+10, 12));
+	inp_x_size.add_listener(this);
+	inp_x_size.set_value( sets->get_groesse_x() );
+	inp_x_size.set_limits( welt->get_groesse_x(), min(32766,4194304/sets->get_groesse_y()) );
+	inp_x_size.set_increment_mode( sets->get_groesse_x()>=512 ? 128 : 64 );
+	inp_x_size.wrap_mode( false );
+	add_komponente( &inp_x_size );
 	intTopOfButton += 12;
 
-	y_size[0].init( button_t::repeatarrowleft, NULL, koord(LEFT_ARROW,intTopOfButton) );
-	y_size[0].add_listener( this );
-	add_komponente( y_size+0 );
-	ysize.set_pos( koord((LEFT_ARROW+RIGHT_ARROW+14)/2,intTopOfButton) );
-	add_komponente( &ysize );
-	y_size[1].init( button_t::repeatarrowright, NULL, koord(RIGHT_ARROW,intTopOfButton) );
-	y_size[1].add_listener( this );
-	add_komponente( y_size+1 );
+	inp_y_size.set_pos(koord(LEFT_ARROW,intTopOfButton) );
+	inp_y_size.set_groesse(koord(RIGHT_ARROW-LEFT_ARROW+10, 12));
+	inp_y_size.add_listener(this);
+	inp_y_size.set_limits( welt->get_groesse_y(), min(32766,4194304/sets->get_groesse_x()) );
+	inp_y_size.set_value( sets->get_groesse_y() );
+	inp_y_size.set_increment_mode( sets->get_groesse_y()>=512 ? 128 : 64 );
+	inp_y_size.wrap_mode( false );
+	add_komponente( &inp_y_size );
 
 	// city stuff
 	intTopOfButton = 64+10;
-	number_of_towns[0].init( button_t::repeatarrowleft, NULL, koord(LEFT_WIDE_ARROW,intTopOfButton) );
-	number_of_towns[0].add_listener( this );
-	add_komponente( number_of_towns+0 );
-	number_of_towns[1].init( button_t::repeatarrowright, NULL, koord(RIGHT_WIDE_ARROW,intTopOfButton) );
-	number_of_towns[1].add_listener( this );
-	add_komponente( number_of_towns+1 );
+	inp_number_of_towns.set_pos(koord(RIGHT_COLUMN,intTopOfButton) );
+	inp_number_of_towns.set_groesse(koord(RIGHT_COLUMN_WIDTH, 12));
+	inp_number_of_towns.add_listener(this);
+	inp_number_of_towns.set_limits(0,999);
+	inp_number_of_towns.set_value(abs(sets->get_anzahl_staedte()) );
+	add_komponente( &inp_number_of_towns );
 	intTopOfButton += 12;
 
-	town_size[0].set_pos( koord(LEFT_WIDE_ARROW,intTopOfButton) );
-	town_size[0].set_typ( button_t::repeatarrowleft );
-	town_size[0].add_listener( this );
-	add_komponente( town_size+0 );
-	town_size[1].set_pos( koord(RIGHT_WIDE_ARROW,intTopOfButton) );
-	town_size[1].set_typ( button_t::repeatarrowright );
-	town_size[1].add_listener( this );
-	add_komponente( town_size+1 );
+	inp_town_size.set_pos(koord(RIGHT_COLUMN,intTopOfButton) );
+	inp_town_size.set_groesse(koord(RIGHT_COLUMN_WIDTH, 12));
+	inp_town_size.add_listener(this);
+	inp_town_size.set_limits(0,999999);
+	inp_town_size.set_increment_mode(50);
+	inp_town_size.set_value( sets->get_mittlere_einwohnerzahl() );
+	add_komponente( &inp_town_size );
 	intTopOfButton += 12+5;
 
 	// start game
@@ -142,61 +129,25 @@ enlarge_map_frame_t::enlarge_map_frame_t(spieler_t *, karte_t *welt) :
  * This method is called if an action is triggered
  * @author Hj. Malthaner
  */
-bool enlarge_map_frame_t::action_triggered( gui_action_creator_t *komp,value_t /* */)
+bool enlarge_map_frame_t::action_triggered( gui_action_creator_t *komp,value_t v)
 {
-	if(komp==x_size+0) {
-		if(sets->get_groesse_x() > max(512,this->welt->get_groesse_x()) ) {
-			sets->set_groesse_x( (sets->get_groesse_x()-1)&0x1F80 );
-			update_preview();
-		} else if(sets->get_groesse_x() > max(64,this->welt->get_groesse_x()) ) {
-			sets->set_groesse_x( (sets->get_groesse_x()-1)&0x1FC0 );
-			update_preview();
-		}
-	}
-	else if(komp==x_size+1) {
-		if(sets->get_groesse_x() < 512 ) {
-			sets->set_groesse_x( (sets->get_groesse_x()+64)&0x1FC0 );
-			update_preview();
-		} else if(sets->get_groesse_x() < 4096 ) {
-			sets->set_groesse_x( (sets->get_groesse_x()+128)&0x1F80 );
-			update_preview();
-		}
-	}
-	else if(komp==y_size+0) {
-		if(sets->get_groesse_y() > max(512,this->welt->get_groesse_y()) ) {
-			sets->set_groesse_y( (sets->get_groesse_y()-1)&0x1F80 );
-			update_preview();
-		} else if(sets->get_groesse_y() > max(64,this->welt->get_groesse_y()) ) {
-			sets->set_groesse_y( (sets->get_groesse_y()-1)&0x1FC0 );
-			update_preview();
-		}
-	}
-	else if(komp==y_size+1) {
-		if(sets->get_groesse_y() < 512 ) {
-			sets->set_groesse_y( (sets->get_groesse_y()+64)&0x1FC0 );
-			update_preview();
-		} else if(sets->get_groesse_y() < 4096 ) {
-			sets->set_groesse_y( (sets->get_groesse_y()+128)&0x1F80 );
-			update_preview();
-		}
-	}
-	else if(komp==number_of_towns+0) {
-		if(sets->get_anzahl_staedte()>0 ) {
-			sets->set_anzahl_staedte( sets->get_anzahl_staedte() - 1 );
-			changed_number_of_towns = true;
-		}
+	if(komp==&inp_x_size) {
+		sets->set_groesse_x( v.i );
+		inp_x_size.set_increment_mode( v.i>=64 ? (v.i>=512 ? 128 : 64) : 8 );
+		inp_y_size.set_limits( welt->get_groesse_y(), min(32766,16777216/sets->get_groesse_x()) );
+		update_preview();
 	}
-	else if(komp==number_of_towns+1) {
-		sets->set_anzahl_staedte( sets->get_anzahl_staedte() + 1 );
-		changed_number_of_towns = true;
+	else if(komp==&inp_y_size) {
+		sets->set_groesse_y( v.i );
+		inp_y_size.set_increment_mode( v.i>=64 ? (v.i>=512 ? 128 : 64) : 8 );
+		inp_x_size.set_limits( welt->get_groesse_x(), min(32766,16777216/sets->get_groesse_y()) );
+		update_preview();
 	}
-	else if(komp==town_size+0) {
-		if(sets->get_mittlere_einwohnerzahl()>100 ) {
-			sets->set_mittlere_einwohnerzahl( sets->get_mittlere_einwohnerzahl() - 100 );
-		}
+	else if(komp==&inp_number_of_towns) {
+		sets->set_anzahl_staedte( v.i );
 	}
-	else if(komp==town_size+1) {
-		sets->set_mittlere_einwohnerzahl( sets->get_mittlere_einwohnerzahl() + 100 );
+	else if(komp==&inp_town_size) {
+		sets->set_mittlere_einwohnerzahl( v.i );
 	}
 	else if(komp==&start_button) {
 			destroy_win(this);
@@ -233,10 +184,8 @@ void enlarge_map_frame_t::zeichnen(koord pos, koord gr)
 
 	y = pos.y+64+10+16;
 	display_proportional_clip(x, y, translator::translate("5WORLD_CHOOSE"), ALIGN_LEFT, COL_BLACK, true);
-	display_proportional_clip(x+TEXT_WIDE_RIGHT, y, ntos(sets->get_anzahl_staedte(), 0), ALIGN_RIGHT, COL_WHITE, true);
 	y += 12;
 	display_proportional_clip(x, y, translator::translate("Median Citizen per town"), ALIGN_LEFT, COL_BLACK, true);
-	display_proportional_clip(x+TEXT_WIDE_RIGHT, y, ntos(sets->get_mittlere_einwohnerzahl(),0),ALIGN_RIGHT, COL_WHITE, true);
 	y += 12+5;
 
 	display_ddd_box_clip(x, y, 240, 0, MN_GREY0, MN_GREY4);
@@ -254,15 +203,18 @@ enlarge_map_frame_t::update_preview()
 	// reset noise seed
 	setsimrand( 0xFFFFFFFF, welt->get_einstellungen()->get_karte_nummer() );
 
-	const int mx = sets->get_groesse_x()/preview_size;
-	const int my = sets->get_groesse_y()/preview_size;
-
-	// "welt" still nows the old size. The new size is saved in "sets".
+	// "welt" still knows the old size. The new size is saved in "sets".
 	sint16 old_x = welt->get_groesse_x();
 	sint16 old_y = welt->get_groesse_y();
+	sint16 pre_x = min(sets->get_groesse_x(), preview_size);
+	sint16 pre_y = min(sets->get_groesse_y(), preview_size);
 
-	for(  int j=0;  j<preview_size;  j++  ) {
-		for(  int i=0;  i<preview_size;  i++  ) {
+	const int mx = sets->get_groesse_x()/pre_x;
+	const int my = sets->get_groesse_y()/pre_y;
+
+
+	for(  int j=0;  j<pre_y;  j++  ) {
+		for(  int i=0;  i<pre_x;  i++  ) {
 			COLOR_VAL color;
 			koord pos(i*mx,j*my);
 
@@ -284,24 +236,22 @@ enlarge_map_frame_t::update_preview()
 			karte[j*preview_size+i] = color;
 		}
 	}
+	for(  int j=0;  j<preview_size;  j++  ) {
+		for(  int i=(j<pre_y ? pre_x : 0);  i<preview_size;   i++  ) {
+			karte[j*preview_size+i] = COL_GREY1;
+		}
+	}
 	sets->heightfield = "";
 
-	x_size[0].enable();
-	x_size[1].enable();
-	y_size[0].enable();
-	y_size[1].enable();
-
 	if(!changed_number_of_towns){// Interpolate number of towns.
 		sint32 new_area = sets->get_groesse_x() * sets->get_groesse_y();
 		sint32 old_area = old_x * old_y;
 		sint32 towns = welt->get_einstellungen()->get_anzahl_staedte();
 		sets->set_anzahl_staedte( towns * new_area / old_area - towns );
+		inp_number_of_towns.set_value(abs(sets->get_anzahl_staedte()) );
 	}
 
-	sprintf( xsize_str, "%i", sets->get_groesse_x() );
-	sprintf( ysize_str, "%i", sets->get_groesse_y() );
-
-	// geuss the new memory needed
+	// guess the new memory needed
 	const uint sx = sets->get_groesse_x();
 	const uint sy = sets->get_groesse_y();
 	const long memory = (
diff --git a/gui/enlarge_map_frame_t.h b/gui/enlarge_map_frame_t.h
old mode 100644
new mode 100755
index 64d99c1..51fe9eb
--- a/gui/enlarge_map_frame_t.h
+++ b/gui/enlarge_map_frame_t.h
@@ -6,10 +6,9 @@
 #define bigger_map_gui_h
 
 #include "gui_frame.h"
-#include "components/gui_button.h"
 #include "components/gui_label.h"
 #include "components/action_listener.h"
-#include "components/gui_textinput.h"
+#include "components/gui_numberinput.h"
 
 class einstellungen_t;
 
@@ -33,17 +32,11 @@ private:
 	bool changed_number_of_towns;
 	int old_lang;
 
-	// since decrease/increase buttons always pair these ...
-	button_t x_size[2];
-	button_t y_size[2];
-
-	button_t number_of_towns[2];
-	button_t town_size[2];
+	gui_numberinput_t inp_x_size, inp_y_size, inp_number_of_towns, inp_town_size;
 
 	button_t start_button;
 
-	gui_label_t memory, xsize, ysize;//, no_towns, townsize;
-	char xsize_str[16], ysize_str[16], no_towns_str[16], townsize_str[16];
+	gui_label_t memory;// memory requirement
 	char memory_str[256];
 
 	karte_t *welt;
diff --git a/gui/extend_edit.h b/gui/extend_edit.h
index bf990cd..9d29da7 100644
--- a/gui/extend_edit.h
+++ b/gui/extend_edit.h
@@ -13,12 +13,11 @@
 #include "components/gui_textarea.h"
 
 #include "gui_convoiinfo.h"
-#include "../simline.h"
-#include "../besch/haus_besch.h"
-#include "../besch/fabrik_besch.h"
 #include "../utils/cbuffer_t.h"
-#include "../dings/baum.h"
+#include "../simtypes.h"
 
+class karte_t;
+class spieler_t;
 
 #define NAME_COLUMN_WIDTH (int)(BUTTON_WIDTH*2.25)
 #define SCL_HEIGHT (170)
diff --git a/gui/factory_edit.h b/gui/factory_edit.h
index 1b10662..287f454 100644
--- a/gui/factory_edit.h
+++ b/gui/factory_edit.h
@@ -4,8 +4,8 @@
 #include "extend_edit.h"
 #include "components/gui_label.h"
 #include "components/gui_numberinput.h"
-#include "../besch/fabrik_besch.h"
 
+class fabrik_besch_t;
 
 class wkz_build_industries_land_t;
 class wkz_build_industries_city_t;
diff --git a/gui/factorylist_stats_t.cc b/gui/factorylist_stats_t.cc
index b7c11c0..0c5f3a4 100644
--- a/gui/factorylist_stats_t.cc
+++ b/gui/factorylist_stats_t.cc
@@ -107,7 +107,7 @@ void factorylist_stats_t::zeichnen(koord offset)
 			buf.append(" (");
 
 			if (!fab->get_eingang().empty()) {
-				buf.append(fab->get_total_in());
+				buf.append(fab->get_total_in(),0);
 			}
 			else {
 				buf.append("-");
@@ -115,14 +115,14 @@ void factorylist_stats_t::zeichnen(koord offset)
 			buf.append(", ");
 
 			if (!fab->get_ausgang().empty()) {
-				buf.append(fab->get_total_out());
+				buf.append(fab->get_total_out(),0);
 			}
 			else {
 				buf.append("-");
 			}
 			buf.append(", ");
 
-			buf.append(fab->get_current_production());
+			buf.append(fab->get_current_production(),0);
 			buf.append(") ");
 
 
diff --git a/gui/fahrplan_gui.cc b/gui/fahrplan_gui.cc
index 99f7fc7..2a66e47 100644
--- a/gui/fahrplan_gui.cc
+++ b/gui/fahrplan_gui.cc
@@ -39,35 +39,29 @@ char fahrplan_gui_t::no_line[128];	// contains the current translation of "<no l
  *
  * @author Hj. Malthaner
  */
-void fahrplan_gui_t::gimme_stop_name(cbuffer_t & buf, karte_t *welt, const linieneintrag_t &entry )
+void fahrplan_gui_t::gimme_stop_name(cbuffer_t & buf, karte_t *welt, const spieler_t *sp, const linieneintrag_t &entry )
 {
-	const grund_t* gr = welt->lookup(entry.pos);
-	if(gr==NULL) {
-		buf.printf("%s (%s)", translator::translate("Invalid coordinate"), entry.pos.get_str() );
+	halthandle_t halt = haltestelle_t::get_halt(welt, entry.pos, sp);
+	if(halt.is_bound()) {
+		if (entry.ladegrad != 0) {
+			buf.printf("%d%% %s (%s)", entry.ladegrad, halt->get_name(), entry.pos.get_str() );
+		}
+		else {
+			buf.printf("%s (%s)",
+				halt->get_name(),
+				entry.pos.get_str() );
+		}
 	}
 	else {
-		halthandle_t halt = gr->ist_wasser() ? haltestelle_t::get_halt(welt, entry.pos) : gr->get_halt();
-
-		if(halt.is_bound()) {
-			if (entry.ladegrad != 0) {
-				buf.printf("%d%% %s (%s)",
-					entry.ladegrad,
-					halt->get_name(),
-					entry.pos.get_str() );
-			}
-			else {
-				buf.printf("%s (%s)",
-					halt->get_name(),
-					entry.pos.get_str() );
-			}
+		const grund_t* gr = welt->lookup(entry.pos);
+		if(gr==NULL) {
+			buf.printf("%s (%s)", translator::translate("Invalid coordinate"), entry.pos.get_str() );
+		}
+		else if(gr->get_depot() != NULL) {
+			buf.printf("%s (%s)", translator::translate("Depot"), entry.pos.get_str() );
 		}
 		else {
-			if(gr->get_depot() != NULL) {
-				buf.printf("%s (%s)", translator::translate("Depot"), entry.pos.get_str() );
-			}
-			else {
-				buf.printf("%s (%s)", translator::translate("Wegpunkt"), entry.pos.get_str() );
-			}
+			buf.printf("%s (%s)", translator::translate("Wegpunkt"), entry.pos.get_str() );
 		}
 	}
 }
@@ -78,30 +72,28 @@ void fahrplan_gui_t::gimme_stop_name(cbuffer_t & buf, karte_t *welt, const linie
  * short version, without loading level and position ...
  * @author Hj. Malthaner
  */
-void fahrplan_gui_t::gimme_short_stop_name(cbuffer_t &buf, karte_t *welt, const schedule_t *fpl, int i, int max_chars)
+void fahrplan_gui_t::gimme_short_stop_name(cbuffer_t &buf, karte_t *welt, const spieler_t *sp, const schedule_t *fpl, int i, int max_chars)
 {
 	if(i<0  ||  fpl==NULL  ||  i>=fpl->get_count()) {
 		dbg->warning("void fahrplan_gui_t::gimme_stop_name()","tried to recieved unused entry %i in schedule %p.",i,fpl);
 		return;
 	}
 	const linieneintrag_t& entry = fpl->eintrag[i];
-	const grund_t* gr = welt->lookup(entry.pos);
 	const char *p;
-	if(gr==NULL) {
-		p = translator::translate("Invalid coordinate");
+	halthandle_t halt = haltestelle_t::get_halt(welt, entry.pos, sp);
+	if(halt.is_bound()) {
+		p = halt->get_name();
 	}
 	else {
-		halthandle_t halt = haltestelle_t::get_halt(welt, entry.pos);
-		if(halt.is_bound()) {
-			p = halt->get_name();
+		const grund_t* gr = welt->lookup(entry.pos);
+		if(gr==NULL) {
+			p = translator::translate("Invalid coordinate");
+		}
+		else if(gr->get_depot() != NULL) {
+			p = translator::translate("Depot");
 		}
 		else {
-			if(gr->get_depot() != NULL) {
-				p = translator::translate("Depot");
-			}
-			else {
-				p = translator::translate("Wegpunkt");
-			}
+			p = translator::translate("Wegpunkt");
 		}
 	}
 	// finally append
@@ -131,7 +123,7 @@ void fahrplan_gui_stats_t::zeichnen(koord offset)
 
 			buf.clear();
 			buf.printf( "%i) ", i+1 );
-			fahrplan_gui_t::gimme_stop_name( buf, welt, fpl->eintrag[i] );
+			fahrplan_gui_t::gimme_stop_name( buf, welt, sp, fpl->eintrag[i] );
 			sint16 w = display_proportional_clip(offset.x + 4 + 10, offset.y + i * (LINESPACE + 1) + 2, buf, ALIGN_LEFT, COL_BLACK, true);
 			if(  w>width  ) {
 				width = w;
@@ -168,7 +160,7 @@ fahrplan_gui_t::fahrplan_gui_t(schedule_t* fpl_, spieler_t* sp_, convoihandle_t
 	lb_wait("month wait time"),
 	lb_waitlevel(NULL, COL_WHITE, gui_label_t::right),
 	lb_load("Full load"),
-	stats(sp_->get_welt()),
+	stats(sp_->get_welt(),sp_),
 	scrolly(&stats),
 	fpl(fpl_),
 	sp(sp_),
@@ -176,11 +168,11 @@ fahrplan_gui_t::fahrplan_gui_t(schedule_t* fpl_, spieler_t* sp_, convoihandle_t
 {
 	stats.set_fahrplan(fpl);
 	if(!cnv.is_bound()) {
-		new_line = linehandle_t();
+		old_line = new_line = linehandle_t();
 		show_line_selector(false);
 	}
 	else {
-		new_line = cnv_->get_line();
+		old_line = new_line = cnv_->get_line();
 	}
 	this->fpl = fpl;
 	fpl->eingabe_beginnen();
@@ -333,7 +325,7 @@ void fahrplan_gui_t::update_selection()
 	if(  fpl->get_count()>0  ) {
 		fpl->set_aktuell( min(fpl->get_count()-1,fpl->get_aktuell()) );
 		const uint8 aktuell = fpl->get_aktuell();
-		if(haltestelle_t::get_halt(sp->get_welt(), fpl->eintrag[aktuell].pos).is_bound()) {
+		if(  haltestelle_t::get_halt(sp->get_welt(), fpl->eintrag[aktuell].pos, sp).is_bound()  ) {
 			lb_load.set_color( COL_BLACK );
 			numimp_load.set_value( fpl->eintrag[aktuell].ladegrad );
 			if(  fpl->eintrag[aktuell].ladegrad>0  ) {
@@ -454,9 +446,12 @@ DBG_MESSAGE("fahrplan_gui_t::action_triggered()","komp=%p combo=%p",komp,&line_s
 			if(wait>7) {
 				wait --;
 			}
-			else {
+			else if(  wait>0  ) {
 				wait = 0;
 			}
+			else {
+				wait = 16;
+			}
 			update_selection();
 		}
 	} else if(komp == &bt_wait_next) {
@@ -486,15 +481,19 @@ DBG_MESSAGE("fahrplan_gui_t::action_triggered()","komp=%p combo=%p",komp,&line_s
 			line_selector.set_selection( 0 );
 		}
 	} else if (komp == &bt_promote_to_line) {
-		this->fpl->eingabe_abschliessen();
+		fpl->eingabe_abschliessen();
 		new_line = sp->simlinemgmt.create_line(fpl->get_type(), sp, this->fpl);
-		this->fpl->eingabe_beginnen();
+		fpl->eingabe_beginnen();
 		init_line_selector();
 	}
 	// recheck lines
 	if (cnv.is_bound()) {
 		// unequal to line => remove from line ...
-		if(new_line.is_bound()  &&   !fpl->matches(sp->get_welt(),new_line->get_schedule())) {
+		if(old_line.is_bound()  &&   fpl->matches(sp->get_welt(),old_line->get_schedule())) {
+			new_line = old_line;
+			init_line_selector();
+		}
+		else if(new_line.is_bound()  &&   !fpl->matches(sp->get_welt(),new_line->get_schedule())) {
 			new_line = linehandle_t();
 			line_selector.set_selection(0);
 		}
@@ -524,9 +523,17 @@ void fahrplan_gui_t::init_line_selector()
 
 void fahrplan_gui_t::zeichnen(koord pos, koord gr)
 {
-	if(  new_line.is_bound()  &&  !new_line->get_schedule()->matches(sp->get_welt(),fpl)  ) {
-		line_selector.set_selection(0);
+	if(  new_line.is_bound()  ) {
+		if(  !new_line->get_schedule()->matches(sp->get_welt(),fpl)  ) {
+			line_selector.set_selection(0);
+			new_line = linehandle_t();
+		}
 	}
+	else if(old_line.is_bound()  &&   fpl->matches(sp->get_welt(),old_line->get_schedule())) {
+		new_line = old_line;
+		init_line_selector();
+	}
+
 	gui_frame_t::zeichnen(pos,gr);
 }
 
diff --git a/gui/fahrplan_gui.h b/gui/fahrplan_gui.h
index 62776e2..3e54f55 100644
--- a/gui/fahrplan_gui.h
+++ b/gui/fahrplan_gui.h
@@ -11,7 +11,6 @@
 
 #include "gui_frame.h"
 
-#include "../utils/cbuffer_t.h"
 #include "components/gui_label.h"
 #include "components/gui_numberinput.h"
 #include "components/gui_combobox.h"
@@ -26,7 +25,9 @@
 
 
 class schedule_t;
+struct linieneintrag_t;
 class spieler_t;
+class cbuffer_t;
 
 
 class fahrplan_gui_stats_t : public gui_komponente_t
@@ -36,9 +37,10 @@ private:
 	static cbuffer_t buf;
 
 	schedule_t* fpl;
+	spieler_t* sp;
 
 public:
-	fahrplan_gui_stats_t(karte_t* w) { welt = w; fpl = NULL; }
+	fahrplan_gui_stats_t(karte_t* w, spieler_t *s) { welt = w; fpl = NULL; sp = s; }
 
 	void set_fahrplan( schedule_t* f ) { fpl = f; }
 
@@ -62,18 +64,14 @@ class fahrplan_gui_t :	public gui_frame_t,
 	 *
 	 * @author Hj. Malthaner
 	 */
-	static void gimme_stop_name(cbuffer_t & buf, karte_t *welt, const linieneintrag_t &entry );
+	static void gimme_stop_name(cbuffer_t & buf, karte_t *welt, const spieler_t *sp, const linieneintrag_t &entry );
 
 	/**
 	 * Fuellt buf mit Beschreibung des i-ten Eintrages des Fahrplanes
 	 * short version, without loading level and position ...
 	 * @author Hj. Malthaner
 	 */
-	static void gimme_short_stop_name(cbuffer_t & buf,
-				     karte_t *welt,
-				     const schedule_t *fpl,
-				     int i,
-				     int max_chars);
+	static void gimme_short_stop_name(cbuffer_t & buf, karte_t *welt, const spieler_t *sp, const schedule_t *fpl, int i, int max_chars);
 
 private:
 	static char no_line[128];
@@ -109,7 +107,7 @@ private:
 	spieler_t *sp;
 	convoihandle_t cnv;
 
-	linehandle_t new_line;
+	linehandle_t new_line, old_line;
 
 	void init_line_selector();
 
@@ -120,7 +118,7 @@ private:
 	void update_selection();
 
 public:
-    fahrplan_gui_t(schedule_t* fpl, spieler_t* sp, convoihandle_t cnv);
+	fahrplan_gui_t(schedule_t* fpl, spieler_t* sp, convoihandle_t cnv);
 
 	~fahrplan_gui_t();
 
diff --git a/gui/goods_stats_t.cc b/gui/goods_stats_t.cc
index 0d9387c..04a5424 100644
--- a/gui/goods_stats_t.cc
+++ b/gui/goods_stats_t.cc
@@ -15,6 +15,7 @@
 #include "../besch/ware_besch.h"
 
 #include "../dataobj/translator.h"
+#include "../utils/simstring.h"
 #include "components/list_button.h"
 
 
@@ -46,7 +47,7 @@ void goods_stats_t::zeichnen(koord offset)
 		const sint32 grundwert128 = wtyp->get_preis()<<7;
 		const sint32 grundwert_bonus = wtyp->get_preis()*(1000l+(bonus-100l)*wtyp->get_speed_bonus());
 		const sint32 price = (grundwert128>grundwert_bonus ? grundwert128 : grundwert_bonus);
-		sprintf(buf, "%.2f$", price/300000.0);
+		money_to_string( buf, price/300000.0 );
 		display_proportional_clip(offset.x + 130, yoff, buf, 	ALIGN_RIGHT, 	COL_BLACK, true);
 
 		sprintf(buf, "%d%%", wtyp->get_speed_bonus());
diff --git a/gui/ground_info.h b/gui/ground_info.h
index 7c0f02d..6ec03c3 100644
--- a/gui/ground_info.h
+++ b/gui/ground_info.h
@@ -11,7 +11,8 @@
 #include "gui_frame.h"
 #include "components/gui_world_view_t.h"
 #include "components/gui_textarea.h"
-#include "../boden/grund.h"
+
+class grund_t;
 
 /**
  * An adapter class to display info windows for ground (floor) objects
diff --git a/gui/gui_container.cc b/gui/gui_container.cc
index 502eb77..fcc83de 100644
--- a/gui/gui_container.cc
+++ b/gui/gui_container.cc
@@ -24,6 +24,9 @@ gui_container_t::gui_container_t() : gui_komponente_t(), komp_focus(NULL)
  */
 void gui_container_t::add_komponente(gui_komponente_t *komp)
 {
+	/* insert builds the diologe from bottom to top:
+	 * Essential for comobo-boxes, so they overlap lower elements
+	 */
 	komponenten.insert(komp);
 	list_dirty = true;
 }
diff --git a/gui/gui_convoiinfo.cc b/gui/gui_convoiinfo.cc
index 8e65e33..4e5b7ee 100644
--- a/gui/gui_convoiinfo.cc
+++ b/gui/gui_convoiinfo.cc
@@ -72,7 +72,7 @@ void gui_convoiinfo_t::zeichnen(koord offset)
 		int max_x = display_proportional_clip(pos.x+offset.x+2,pos.y+offset.y+8+LINESPACE, translator::translate("Gewinn"), ALIGN_LEFT, COL_BLACK, true);
 
 		char buf[256];
-		money_to_string(buf, cnv->get_jahresgewinn()/100);
+		money_to_string(buf, (double)(cnv->get_jahresgewinn()/100) );
 		max_x += display_proportional_clip(pos.x+offset.x+2+max_x+5,pos.y+offset.y+8+LINESPACE, buf, ALIGN_LEFT, cnv->get_jahresgewinn()>0?MONEY_PLUS:MONEY_MINUS, true);
 
 		/*
diff --git a/gui/gui_convoiinfo.h b/gui/gui_convoiinfo.h
index b505c5b..6da1ab0 100644
--- a/gui/gui_convoiinfo.h
+++ b/gui/gui_convoiinfo.h
@@ -11,7 +11,6 @@
 #include "../dataobj/koord.h"
 #include "gui_container.h"
 #include "components/gui_speedbar.h"
-#include "../simconvoi.h"
 #include "../convoihandle_t.h"
 
 
diff --git a/gui/gui_frame.cc b/gui/gui_frame.cc
index 6b88cf7..e7c882e 100644
--- a/gui/gui_frame.cc
+++ b/gui/gui_frame.cc
@@ -137,10 +137,10 @@ void gui_frame_t::zeichnen(koord pos, koord gr)
 
 	if(opaque) {
 		// Hajo: skinned windows code
-		if(obj_reader_t::has_been_init) {
+		if(skinverwaltung_t::window_skin!=NULL) {
 			// draw background
 			PUSH_CLIP(pos.x+1,pos.y+16,gr.x-2,gr.y-16);
-			const int img = skinverwaltung_t::window_skin->get_bild(0)->get_nummer();
+			const int img = skinverwaltung_t::window_skin->get_bild_nr(0);
 
 			for(int j=0; j<gr.y; j+=64) {
 				for(int i=0; i<gr.x; i+=64) {
@@ -152,7 +152,7 @@ void gui_frame_t::zeichnen(koord pos, koord gr)
 		}
 		else {
 			// empty box
-			display_fillbox_wh(pos.x, pos.y, gr.x, gr.y, MN_GREY1, false);
+			display_fillbox_wh(pos.x+1, pos.y+16, gr.x-2, gr.y-16, MN_GREY1, false);
 		}
 
 		// Hajo: left, right
diff --git a/gui/halt_detail.cc b/gui/halt_detail.cc
index b283e02..648f0a2 100644
--- a/gui/halt_detail.cc
+++ b/gui/halt_detail.cc
@@ -45,7 +45,8 @@ halt_detail_t::halt_detail_t(halthandle_t halt_) :
 	const koord size = txt_info.get_groesse();
 	if (size.y < 400) {
 		set_fenstergroesse(koord(300, size.y + 32));
-	} else {
+	}
+	else {
 		set_fenstergroesse(koord(300, 400));
 	}
 
@@ -135,7 +136,8 @@ void halt_detail_t::halt_detail_info(cbuffer_t & buf)
 				}
 			}
 		}
-	} else {
+	}
+	else {
 		buf.append(" ");
 		buf.append(translator::translate("keine"));
 		buf.append("\n");
@@ -149,7 +151,7 @@ void halt_detail_t::halt_detail_info(cbuffer_t & buf)
 	buf.append(":\n");
 	offset_y += LINESPACE;
 
-	if (!nimmt_an.empty()) {
+	if (!nimmt_an.empty()  &&  halt->get_ware_enabled()) {
 		for(uint32 i=0; i<warenbauer_t::get_waren_anzahl(); i++) {
 			const ware_besch_t *ware = warenbauer_t::get_info(i);
 			if(nimmt_an.is_contained(ware)) {
@@ -160,7 +162,8 @@ void halt_detail_t::halt_detail_info(cbuffer_t & buf)
 				offset_y += LINESPACE;
 			}
 		}
-	} else {
+	}
+	else {
 		buf.append(" ");
 		buf.append(translator::translate("keine"));
 		buf.append("\n");
diff --git a/gui/halt_info.cc b/gui/halt_info.cc
index ce4f3a5..e6c5736 100644
--- a/gui/halt_info.cc
+++ b/gui/halt_info.cc
@@ -74,7 +74,7 @@ halt_info_t::halt_info_t(karte_t *welt, halthandle_t halt)
 		),
 		sort_label(translator::translate("Hier warten/lagern:")),
 		view(welt, halt->get_basis_pos3d()),
-		freight_info(16384),
+		freight_info(4096),
 		info_buf(256)
 {
 	this->halt = halt;
@@ -131,7 +131,7 @@ halt_info_t::halt_info_t(karte_t *welt, halthandle_t halt)
 	chart.set_background(MN_GREY1);
 
 	for (int cost = 0; cost<MAX_HALT_COST; cost++) {
-		chart.add_curve(cost_type_color[cost], halt->get_finance_history(), MAX_HALT_COST, index_of_haltinfo[cost], MAX_MONTHS, 0, false, true);
+		chart.add_curve(cost_type_color[cost], halt->get_finance_history(), MAX_HALT_COST, index_of_haltinfo[cost], MAX_MONTHS, 0, false, true, 0);
 		filterButtons[cost].init(button_t::box_state, cost_type[cost],
 			koord(BUTTON1_X+(BUTTON_WIDTH+BUTTON_SPACER)*(cost%4), 198+(BUTTON_HEIGHT+2)*(cost/4) ),
 			koord(BUTTON_WIDTH, BUTTON_HEIGHT));
@@ -166,8 +166,14 @@ halt_info_t::zeichnen(koord pos, koord gr)
 		// buffer update now only when needed by halt itself => dedicated buffer for this
 		int old_len=freight_info.len();
 		halt->get_freight_info(freight_info);
-		text.set_text(freight_info);
+		// will grow as needed
+		if (freight_info.is_full()) {
+			freight_info.extent( 1024 );
+			// tell the halt to give the info in the now larger buffer
+			halt->set_sortby((freight_list_sorter_t::sort_mode_t) umgebung_t::default_sortmode);
+		}
 		if(old_len!=freight_info.len()) {
+			text.set_text(freight_info);
 			text.recalc_size();
 		}
 
@@ -220,6 +226,10 @@ halt_info_t::zeichnen(koord pos, koord gr)
 			display_color_img(skinverwaltung_t::monorailhaltsymbol->get_bild_nr(0), pos.x+left, top, 0, false, false);
 			left += 23;
 		}
+		if (halttype & haltestelle_t::tramstop) {
+			display_color_img(skinverwaltung_t::tramhaltsymbol->get_bild_nr(0), pos.x+left, top, 0, false, false);
+			left += 23;
+		}
 		if (halttype & haltestelle_t::maglevstop) {
 			display_color_img(skinverwaltung_t::maglevhaltsymbol->get_bild_nr(0), pos.x+left, top, 0, false, false);
 			left += 23;
@@ -290,13 +300,15 @@ bool halt_info_t::action_triggered( gui_action_creator_t *comp,value_t /* */)
 		for (int i=0;i<MAX_HALT_COST;i++) {
 			filterButtons[i].set_visible(toggler.pressed);
 		}
-	} else {
+	}
+	else {
 		for( int i = 0; i<MAX_HALT_COST; i++) {
 			if (comp == &filterButtons[i]) {
 				filterButtons[i].pressed = !filterButtons[i].pressed;
 				if(filterButtons[i].pressed) {
 					chart.show_curve(i);
-				} else {
+				}
+				else {
 					chart.hide_curve(i);
 				}
 				break;
diff --git a/gui/halt_list_frame.cc b/gui/halt_list_frame.cc
index 37ce7d4..93ad71a 100644
--- a/gui/halt_list_frame.cc
+++ b/gui/halt_list_frame.cc
@@ -448,7 +448,8 @@ void halt_list_frame_t::set_ware_filter_ab(const ware_besch_t *ware, int mode)
 			if(mode != 1) {
 				waren_filter_ab.remove(ware);
 			}
-		} else {
+		}
+		else {
 			if(mode != 0) {
 				waren_filter_ab.append(ware);
 			}
@@ -463,7 +464,8 @@ void halt_list_frame_t::set_ware_filter_an(const ware_besch_t *ware, int mode)
 			if(mode != 1) {
 				waren_filter_an.remove(ware);
 			}
-		} else {
+		}
+		else {
 			if(mode != 0) {
 				waren_filter_an.append(ware);
 			}
diff --git a/gui/halt_list_stats.cc b/gui/halt_list_stats.cc
index 15c1343..e51a651 100644
--- a/gui/halt_list_stats.cc
+++ b/gui/halt_list_stats.cc
@@ -91,6 +91,9 @@ void halt_list_stats_t::zeichnen(koord offset)
 		if (halttype & haltestelle_t::monorailstop) {
 			display_color_img(skinverwaltung_t::monorailhaltsymbol->get_bild_nr(0), pos.x+left, pos_y, 0, false, true);
 		}
+		if (halttype & haltestelle_t::tramstop) {
+			display_color_img(skinverwaltung_t::tramhaltsymbol->get_bild_nr(0), pos.x+left, pos_y, 0, false, true);
+		}
 		if (halttype & haltestelle_t::maglevstop) {
 			display_color_img(skinverwaltung_t::maglevhaltsymbol->get_bild_nr(0), pos.x+left, pos_y, 0, false, true);
 		}
diff --git a/gui/help_frame.cc b/gui/help_frame.cc
index 3ed6bed..a662947 100644
--- a/gui/help_frame.cc
+++ b/gui/help_frame.cc
@@ -92,9 +92,11 @@ help_frame_t::help_frame_t(cstring_t filename) :
 				case '<': c = "&lt;"; break;
 				case '>': c = "&gt;"; break;
 				case 27:  c = "ESC"; break;
+				case SIM_KEY_HOME:	c=translator::translate( "[HOME]" ); break;
+				case SIM_KEY_END:	c=translator::translate( "[END]" ); break;
 				default:
 					if((*iter)->command_key<32) {
-						sprintf( str, "^%C", (*iter)->command_key+64 );
+						sprintf( str, "%s + %C", translator::translate( "[CTRL]" ),  (*iter)->command_key+64 );
 					}
 					else if((*iter)->command_key<256) {
 						sprintf( str, "%C", (*iter)->command_key );
@@ -166,10 +168,11 @@ bool
 help_frame_t::action_triggered( gui_action_creator_t *, value_t extra)
 {
 	const char *str = (const char *)(extra.p);
-	uint32 magic = magic_info_pointer;
+	uint32 magic = 0;
 	while(*str) {
 		magic += *str++;
 	}
+	magic = (magic % 842) + magic_info_pointer;
 	create_win(new help_frame_t((const char *)(extra.p)), w_info, magic );
 	return true;
 }
diff --git a/gui/karte.cc b/gui/karte.cc
index 472358b..b30821c 100644
--- a/gui/karte.cc
+++ b/gui/karte.cc
@@ -16,6 +16,7 @@
 #include "../boden/wege/schiene.h"
 #include "../dings/leitung2.h"
 #include "../dataobj/powernet.h"
+#include "../utils/cbuffer_t.h"
 #include "../simgraph.h"
 
 
@@ -56,12 +57,11 @@ const uint8 reliefkarte_t::severity_color[MAX_SEVERITY_COLORS] =
 
 
 // converts karte koordinates to screen corrdinates
-void
-reliefkarte_t::karte_to_screen( koord &k ) const
+void reliefkarte_t::karte_to_screen( koord &k ) const
 {
 	if(rotate45) {
 		// 45 rotate view
-		sint16 x = welt->get_groesse_y() + (k.x-k.y);
+		sint32 x = welt->get_groesse_y() + (sint32)(k.x-k.y);
 		k.y = (k.x+k.y);
 		k.x = x;
 	}
@@ -76,7 +76,7 @@ reliefkarte_t::screen_to_karte( koord &k ) const
 {
 	k = koord( (k.x*zoom_in)/zoom_out, (k.y*zoom_in)/zoom_out );
 	if(rotate45) {
-		k.x = (k.x+k.y-welt->get_groesse_y())/2;
+		k.x = (sint16)(((sint32)k.x+(sint32)k.y-(sint32)welt->get_groesse_y())/2);
 		k.y = k.y - k.x;
 	}
 }
@@ -112,20 +112,21 @@ reliefkarte_t::set_relief_farbe(koord k, const int color)
 	}
 
 	karte_to_screen(k);
+	k -= cur_off;
 
 	if(rotate45) {
 		// since isometric is distorted
-		const int xw = zoom_in>=2 ? 1 : 2*zoom_out;
-		for (int x = 0; x < xw; x++) {
-			for (int y = 0; y < zoom_out; y++) {
-				relief->at(k.x + x, k.y + y) = color;
+		const sint32 xw = zoom_in>=2 ? 1 : 2*zoom_out;
+		for(  sint32 x = max(0,k.x);  x < xw+k.x  &&  x < relief->get_width();  x++  ) {
+			for(  sint32 y = max(0,k.y);  y < zoom_out+k.y  &&  y<relief->get_height();  y++  ) {
+				relief->at(x, y) = color;
 			}
 		}
 	}
 	else {
-		for (int x = 0; x < zoom_out; x++) {
-			for (int y = 0; y < zoom_out; y++) {
-				relief->at(k.x + x, k.y + y) = color;
+		for(  sint32 x = max(0,k.x);  x < zoom_out+k.x  &&  x<relief->get_width();  x++  ) {
+			for(  sint32 y = max(0,k.y);  y < zoom_out+k.y  &&  y<relief->get_height();  y++  ) {
+				relief->at(x, y) = color;
 			}
 		}
 	}
@@ -141,22 +142,26 @@ reliefkarte_t::set_relief_farbe_area(koord k, int areasize, uint8 color)
 	areasize *= zoom_out;
 	if(rotate45) {
 		k -= koord( 0, areasize/2 );
-		k.x = clamp( k.x, areasize/2, relief->get_width()-areasize/2-1 );
-		k.y = clamp( k.y, 0, relief->get_height()-areasize-1 );
+		k.x = clamp( k.x, areasize/2, get_groesse().x-areasize/2-1 );
+		k.y = clamp( k.y, 0, get_groesse().y-areasize-1 );
+		k -= cur_off;
 		for (p.x = 0; p.x<areasize; p.x++) {
 			for (p.y = 0; p.y<areasize; p.y++) {
 				koord pos = koord( k.x+(p.x-p.y)/2, k.y+(p.x+p.y)/2 );
-				relief->at(pos.x, pos.y) = color;
+				if(  (pos.x|pos.y)>=0  &&  pos.x<relief->get_width()  &&  pos.y<relief->get_height()  ) {
+					relief->at(pos.x, pos.y) = color;
+				}
 			}
 		}
 	}
 	else {
 		k -= koord( areasize/2, areasize/2 );
-		k.x = clamp( k.x, 0, relief->get_width()-areasize-1 );
-		k.y = clamp( k.y, 0, relief->get_height()-areasize-1 );
-		for (p.x = 0; p.x<areasize; p.x++) {
-			for (p.y = 0; p.y<areasize; p.y++) {
-				relief->at(p.x+k.x, p.y+k.y) = color;
+		k.x = clamp( k.x, 0, get_groesse().x-areasize-1 );
+		k.y = clamp( k.y, 0, get_groesse().y-areasize-1 );
+		k -= cur_off;
+		for(  p.x = max(0,k.x); p.x<areasize+k.x  &&  p.x<relief->get_width();  p.x++  ) {
+			for(  p.y = max(0,k.y);  p.y<areasize+k.y  &&  p.y<relief->get_height();  p.y++  ) {
+				relief->at(p.x, p.y) = color;
 			}
 		}
 	}
@@ -287,6 +292,11 @@ reliefkarte_t::calc_map_pixel(const koord k)
 	}
 	const grund_t *gr=plan->get_boden_bei(plan->get_boden_count()-1);
 
+	if(  mode!=MAP_PAX_DEST  &&  gr->get_convoi_vehicle()  ) {
+		set_relief_farbe( k, VEHIKEL_KENN );
+		return;
+	}
+
 	// first use ground color
 	set_relief_farbe( k, calc_relief_farbe(gr) );
 
@@ -529,6 +539,20 @@ reliefkarte_t::calc_map_pixel(const koord k)
 			}
 			break;
 
+		case MAP_PAX_DEST:
+			if(  city  ) {
+				const koord p = koord(
+					((k.x * PAX_DESTINATIONS_SIZE) / welt->get_groesse_x()),
+					((k.y * PAX_DESTINATIONS_SIZE) / welt->get_groesse_y())
+				);
+				const uint8 color = city->get_pax_destinations_new()->get(p);
+				if( color != 0 ) {
+					set_relief_farbe(k, color);
+				}
+			}
+
+			break;
+
 		default:
 			break;
 	}
@@ -536,51 +560,71 @@ reliefkarte_t::calc_map_pixel(const koord k)
 
 
 
-void
-reliefkarte_t::calc_map()
+void reliefkarte_t::calc_map_groesse()
 {
-	// size cahnge due to zoom?
-	koord size = rotate45 ?
-			koord( ((welt->get_groesse_y()+zoom_in)*zoom_out)/zoom_in+((welt->get_groesse_x()+zoom_in)*zoom_out)/zoom_in+1, ((welt->get_groesse_y()+zoom_in-1)*zoom_out)/zoom_in+((welt->get_groesse_x()+zoom_in-1)*zoom_out)/zoom_in ) :
-			koord( ((welt->get_groesse_x()+zoom_in-1)*zoom_out)/zoom_in, ((welt->get_groesse_y()+zoom_in-1)*zoom_out)/zoom_in );
-	if((sint16)relief->get_width()!=size.x  ||  (sint16)relief->get_height()!=size.y) {
+	const sint32 size_x = rotate45 ? ((welt->get_groesse_y()+zoom_in)*zoom_out)/zoom_in+((welt->get_groesse_x()+zoom_in)*zoom_out)/zoom_in+1 : ((welt->get_groesse_x()+zoom_in-1)*zoom_out)/zoom_in;
+	const sint32 size_y = rotate45 ? ((welt->get_groesse_y()+zoom_in-1)*zoom_out)/zoom_in+((welt->get_groesse_x()+zoom_in-1)*zoom_out)/zoom_in : ((welt->get_groesse_y()+zoom_in-1)*zoom_out)/zoom_in;
+	set_groesse( koord( min(32767,size_x), min(32767,size_y-1) ) ); // of the gui_komponete to adjust scroll bars
+	needs_redraw = true;
+}
+
+
+
+void reliefkarte_t::calc_map()
+{
+	// size change due to zoom?
+	const sint32 size_x = rotate45 ? ((welt->get_groesse_y()+zoom_in)*zoom_out)/zoom_in+((welt->get_groesse_x()+zoom_in)*zoom_out)/zoom_in+1 : ((welt->get_groesse_x()+zoom_in-1)*zoom_out)/zoom_in;
+	const sint32 size_y = rotate45 ? ((welt->get_groesse_y()+zoom_in-1)*zoom_out)/zoom_in+((welt->get_groesse_x()+zoom_in-1)*zoom_out)/zoom_in : ((welt->get_groesse_y()+zoom_in-1)*zoom_out)/zoom_in;
+	koord relief_size = koord( min(size_x,new_size.x), min(size_y,new_size.y) );
+	// actually the following line should reduce new/deletes, but does not work properly
+	// if(  relief==NULL  ||  (sint16)relief->get_width()<relief_size.x  ||  relief->get_width()>size_x  ||  (sint16)relief->get_height()<relief_size.y  ||  relief->get_height()>size_y  ) {
+	if(  relief==NULL  ||  (sint16)relief->get_width()!=relief_size.x  ||  (sint16)relief->get_height()!=relief_size.y  ) {
 		delete relief;
-		relief = new array2d_tpl<unsigned char> (size.x,size.y);
-		set_groesse(size);	// of the gui_komponete to adjust scroll bars
-		if(rotate45) {
-			memset( (void *)(relief->to_array()), COL_BLACK, size.x*size.y );
-		}
+		relief = new array2d_tpl<unsigned char> (relief_size.x,relief_size.y);
 	}
+	set_groesse( koord( min(32767,size_x), min(32767,size_y-1) ) ); // of the gui_komponete to adjust scroll bars
+	cur_off = new_off;
+	cur_size = new_size;
+	needs_redraw = false;
+	is_visible = true;
 
 	// redraw the map
-	koord k;
-	for(k.y=0; k.y<welt->get_groesse_y(); k.y++) {
-		for(k.x=0; k.x<welt->get_groesse_x(); k.x++) {
-			calc_map_pixel(k);
+	if(  !rotate45  ) {
+		koord k;
+		koord start_off = koord( (cur_off.x*zoom_in)/zoom_out, (cur_off.y*zoom_in)/zoom_out );
+		koord end_off = start_off+koord( (relief->get_width()*zoom_in)/zoom_out+1, (relief->get_height()*zoom_in)/zoom_out+1 );
+		for(  k.y=start_off.y;  k.y<end_off.y;  k.y+=zoom_in  ) {
+			for(  k.x=start_off.x;  k.x<end_off.x;  k.x+=zoom_in  ) {
+				calc_map_pixel(k);
+			}
 		}
 	}
-
-	// mark all vehicle positions
-	for (vector_tpl<convoihandle_t>::const_iterator i = welt->convois_begin(), end = welt->convois_end(); i != end; ++i) {
-		convoihandle_t cnv = *i;
-		for (uint16 i = 0; i < cnv->get_vehikel_anzahl(); i++) {
-			set_relief_farbe(cnv->get_vehikel(i)->get_pos().get_2d(), VEHIKEL_KENN);
+	else {
+		// always the whole map ...
+		if(rotate45) {
+			memset( (void *)(relief->to_array()), COL_BLACK, relief_size.x*relief_size.y );
+		}
+		koord k;
+		for(  k.y=0;  k.y < welt->get_groesse_y();  k.y++  ) {
+			for(  k.x=0;  k.x < welt->get_groesse_x();  k.x++  ) {
+				calc_map_pixel(k);
+			}
 		}
 	}
 
 	// since we do iterate the tourist info list, this must be done here
 	// find tourist spots
 	if(mode==MAP_TOURIST) {
-		// need to init the maximum?
-		if(max_tourist_ziele==0) {
-			max_tourist_ziele = 1;
-			calc_map();
-		}
 		const weighted_vector_tpl<gebaeude_t *> &ausflugsziele = welt->get_ausflugsziele();
+		// find the current maximum
+		max_tourist_ziele = 1;
 		for (weighted_vector_tpl<gebaeude_t*>::const_iterator i = ausflugsziele.begin(), end = ausflugsziele.end(); i != end; ++i) {
 			int pax = (*i)->get_passagier_level();
-			if (max_tourist_ziele < pax) max_tourist_ziele = pax;
+			if (max_tourist_ziele < pax) {
+				max_tourist_ziele = pax;
+			}
 		}
+		// draw them
 		for (weighted_vector_tpl<gebaeude_t*>::const_iterator i = ausflugsziele.begin(), end = ausflugsziele.end(); i != end; ++i) {
 			const gebaeude_t* g = *i;
 			koord pos = g->get_pos().get_2d();
@@ -603,10 +647,12 @@ reliefkarte_t::calc_map()
 	if(mode==MAP_DEPOT) {
 		slist_iterator_tpl <depot_t *> iter (depot_t::get_depot_list());
 		while(iter.next()) {
-			koord pos = iter.get_current()->get_pos().get_2d();
-			// offset of one to avoid
-			static uint8 depot_typ_to_color[12]={ COL_ORANGE, COL_YELLOW, COL_RED, 0, 0, 0, 0, 0, 0, COL_PURPLE, COL_DARK_RED, COL_DARK_ORANGE };
-			set_relief_farbe_area(pos, 3, depot_typ_to_color[iter.get_current()->get_typ()-ding_t::bahndepot] );
+			if(iter.get_current()->get_besitzer()==welt->get_active_player()) {
+				koord pos = iter.get_current()->get_pos().get_2d();
+				// offset of one to avoid
+				static uint8 depot_typ_to_color[19]={ COL_ORANGE, COL_YELLOW, COL_RED, 0, 0, 0, 0, 0, 0, COL_PURPLE, COL_DARK_RED, COL_DARK_ORANGE, 0, 0, 0, 0, 0, 0, COL_LIGHT_RED };
+				set_relief_farbe_area(pos, 7, depot_typ_to_color[iter.get_current()->get_typ()-ding_t::bahndepot] );
+			}
 		}
 		return;
 	}
@@ -627,8 +673,11 @@ reliefkarte_t::reliefkarte_t()
 	mode = MAP_TOWN;
 	fpl = NULL;
 	fpl_player_nr = 0;
+	city = NULL;
 	is_show_schedule = false;
 	is_show_fab = false;
+	cur_off = new_off = cur_size = new_size = koord(0,0);
+	needs_redraw = true;
 }
 
 
@@ -642,8 +691,7 @@ reliefkarte_t::~reliefkarte_t()
 
 
 
-reliefkarte_t *
-reliefkarte_t::get_karte()
+reliefkarte_t *reliefkarte_t::get_karte()
 {
 	if(single_instance == NULL) {
 		single_instance = new reliefkarte_t();
@@ -653,8 +701,7 @@ reliefkarte_t::get_karte()
 
 
 
-void
-reliefkarte_t::set_welt(karte_t *welt)
+void reliefkarte_t::set_welt(karte_t *welt)
 {
 	this->welt = welt;			// Welt fuer display_win() merken
 	if(relief) {
@@ -662,12 +709,11 @@ reliefkarte_t::set_welt(karte_t *welt)
 		relief = NULL;
 	}
 	rotate45 = false;
+	needs_redraw = true;
+	is_visible = false;
 
 	if(welt) {
-		koord size = koord( (welt->get_groesse_x()*zoom_out)/zoom_in+1, (welt->get_groesse_y()*zoom_out)/zoom_in+1 );
-DBG_MESSAGE("reliefkarte_t::set_welt()","welt size %i,%i",size.x,size.y);
-		relief = new array2d_tpl<unsigned char> (size.x,size.y);
-		set_groesse(size);
+		calc_map_groesse();
 		max_capacity = max_departed = max_arrived = max_cargo = max_convoi_arrived = max_passed = max_tourist_ziele = 0;
 	}
 }
@@ -675,10 +721,10 @@ DBG_MESSAGE("reliefkarte_t::set_welt()","welt size %i,%i",size.x,size.y);
 
 
 void
-reliefkarte_t::set_mode (MAP_MODES new_mode)
+reliefkarte_t::set_mode(MAP_MODES new_mode)
 {
 	mode = new_mode;
-	calc_map();
+	needs_redraw = true;
 }
 
 
@@ -686,9 +732,7 @@ reliefkarte_t::set_mode (MAP_MODES new_mode)
 void
 reliefkarte_t::neuer_monat()
 {
-	if(mode!=MAP_TOWN) {
-		calc_map();
-	}
+	needs_redraw = true;
 }
 
 
@@ -771,12 +815,12 @@ void reliefkarte_t::draw_schedule(const koord pos) const
 			first_koord = new_koord;
 		}
 		//check, if mouse is near coordinate
-		if(abs_distance(last_world_pos,fpl->eintrag[i].pos.get_2d())<=2) {
+		if(koord_distance(last_world_pos,fpl->eintrag[i].pos.get_2d())<=2) {
 			// draw stop name with an index
 			cbuffer_t buf(256);
 			buf.clear();
 			buf.printf( translator::translate("(%i)-"), i+1 );
-			fahrplan_gui_t::gimme_short_stop_name(buf, welt, fpl, i, 240);
+			fahrplan_gui_t::gimme_short_stop_name(buf, welt, welt->get_spieler(fpl_player_nr), fpl, i, 240);
 			display_ddd_proportional_clip(new_koord.x+10, new_koord.y+7, proportional_string_width(buf)+8, 0, color, COL_WHITE, buf, true);
 		}
 		// box at station
@@ -790,15 +834,60 @@ void reliefkarte_t::draw_schedule(const koord pos) const
 
 
 // draw the map
-void
-reliefkarte_t::zeichnen(koord pos)
+void reliefkarte_t::zeichnen(koord pos)
 {
+	// sanity check, needed for overlarge maps
+	if(  (new_off.x|new_off.y)<0  ) {
+		new_off = cur_off;
+	}
+	if(  (new_size.x|new_size.y)<0  ) {
+		new_size = cur_size;
+	}
+
+	if(  needs_redraw  ||  cur_off!=new_off  ||  cur_size!=new_size  ) {
+		calc_map();
+	}
+
 	if(relief==NULL) {
 		return;
 	}
 
-	display_fillbox_wh_clip(pos.x, pos.y, 4000, 4000, COL_BLACK, true);
-	display_array_wh(pos.x, pos.y, relief->get_width(), relief->get_height(), relief->to_array());
+	if(  mode==MAP_PAX_DEST  &&  city!=NULL  ) {
+		const unsigned long current_pax_destinations = city->get_pax_destinations_new_change();
+		if(  pax_destinations_last_change > current_pax_destinations  ) {
+			// new month started.
+			calc_map();
+		}
+		else if(  pax_destinations_last_change < current_pax_destinations  ) {
+			// new pax_dest in city.
+			const sparse_tpl<uint8> *pax_dests = city->get_pax_destinations_new();
+			koord pos, min, max;
+			uint8 color;
+			for(  uint16 i = 0;  i < pax_dests->get_data_count();  i++  ) {
+				pax_dests->get_nonzero( i, pos, color );
+				min = koord((pos.x*welt->get_groesse_x())/PAX_DESTINATIONS_SIZE,
+				            (pos.y*welt->get_groesse_y())/PAX_DESTINATIONS_SIZE);
+				max = koord(((pos.x+1)*welt->get_groesse_x())/PAX_DESTINATIONS_SIZE,
+				            ((pos.y+1)*welt->get_groesse_y())/PAX_DESTINATIONS_SIZE);
+				if(  max.x >= cur_off.x  &&  max.y>=cur_off.y  &&  min.x<cur_size.x  &&  min.y<cur_size.y  ) {
+					for( pos.x = min.x;  pos.x < max.x;  pos.x++  ) {
+						for( pos.y = min.y;  pos.y < max.y;  pos.y++  ) {
+							set_relief_farbe(pos, color);
+						}
+					}
+				}
+			}
+		}
+		pax_destinations_last_change = city->get_pax_destinations_new_change();
+	}
+
+	if(  cur_size.x>relief->get_width()  ) {
+		display_fillbox_wh_clip( pos.x+cur_off.x+relief->get_width(), cur_off.y+pos.y, 32767, relief->get_height(), COL_BLACK, true);
+	}
+	if(  cur_size.y>relief->get_height()  ) {
+		display_fillbox_wh_clip( pos.x+cur_off.x, pos.y+cur_off.y+relief->get_height(), 32767, 32767, COL_BLACK, true);
+	}
+	display_array_wh( cur_off.x+pos.x, cur_off.y+pos.y, relief->get_width(), relief->get_height(), relief->to_array());
 
 	// draw city limit
 	if(mode==MAP_CITYLIMIT) {
@@ -811,8 +900,8 @@ reliefkarte_t::zeichnen(koord pos)
 		for(  weighted_vector_tpl<stadt_t*>::const_iterator i = staedte.begin(), end = staedte.end();  i != end;  ++i  ) {
 			const stadt_t* stadt = *i;
 			koord k[4];
-			k[0] =	stadt->get_linksoben(); // top left
-			k[2] =	stadt->get_rechtsunten(); // bottom right
+			k[0] = stadt->get_linksoben(); // top left
+			k[2] = stadt->get_rechtsunten(); // bottom right
 
 			// calculate and draw the rotated coordinates
 			if(rotate45) {
@@ -854,13 +943,11 @@ reliefkarte_t::zeichnen(koord pos)
 				display_direct_line(k[0].x, k[2].y, k[2].x, k[2].y, color);
 			}
 		}
-
 	}
 
-
 	// if we do not do this here, vehicles would erase the town names
 	// ADD: if CRTL key is pressed, temporary show the name
-	if( mode==MAP_TOWN  ||  event_get_last_control_shift()==2 ) {
+	if(  mode==MAP_TOWN  ||  event_get_last_control_shift()==2  ) {
 		const weighted_vector_tpl<stadt_t*>& staedte = welt->get_staedte();
 		for (weighted_vector_tpl<stadt_t*>::const_iterator i = staedte.begin(), end = staedte.end(); i != end; ++i) {
 			const stadt_t* stadt = *i;
@@ -869,7 +956,7 @@ reliefkarte_t::zeichnen(koord pos)
 
 			int w = proportional_string_width(name);
 			karte_to_screen( p );
-			p.x = clamp( p.x, 0, relief->get_width()-w );
+			p.x = clamp( p.x, 0, get_groesse().x-w );
 			p += pos;
 			display_proportional_clip( p.x, p.y, name, ALIGN_LEFT, COL_WHITE, true);
 		}
@@ -928,3 +1015,16 @@ reliefkarte_t::zeichnen(koord pos)
 		}
 	}
 }
+
+
+
+void reliefkarte_t::set_city( const stadt_t* _city )
+{
+	if(  city != _city  ) {
+		city = _city;
+		if(  _city  ) {
+			pax_destinations_last_change = _city->get_pax_destinations_new_change();
+		}
+		calc_map();
+	}
+}
diff --git a/gui/karte.h b/gui/karte.h
index cbab033..25c3e21 100644
--- a/gui/karte.h
+++ b/gui/karte.h
@@ -9,6 +9,7 @@
 class karte_t;
 class fabrik_t;
 class grund_t;
+class stadt_t;
 
 
 #define MAX_MAP_TYPE_LAND 14
@@ -28,7 +29,7 @@ class grund_t;
 class reliefkarte_t : public gui_komponente_t
 {
 public:
-	typedef enum { PLAIN=-1, MAP_TOWN=0, MAP_PASSENGER, MAP_MAIL, MAP_FREIGHT, MAP_STATUS, MAP_SERVICE, MAP_TRAFFIC, MAP_ORIGIN, MAP_DESTINATION, MAP_WAITING, MAP_TRACKS, MAX_SPEEDLIMIT, MAP_POWERLINES, MAP_TOURIST, MAP_FACTORIES, MAP_DEPOT, MAP_FOREST, MAP_CITYLIMIT } MAP_MODES;
+	typedef enum { PLAIN=-1, MAP_TOWN=0, MAP_PASSENGER, MAP_MAIL, MAP_FREIGHT, MAP_STATUS, MAP_SERVICE, MAP_TRAFFIC, MAP_ORIGIN, MAP_DESTINATION, MAP_WAITING, MAP_TRACKS, MAX_SPEEDLIMIT, MAP_POWERLINES, MAP_TOURIST, MAP_FACTORIES, MAP_DEPOT, MAP_FOREST, MAP_CITYLIMIT, MAP_PAX_DEST } MAP_MODES;
 
 private:
 	static karte_t *welt;
@@ -53,11 +54,22 @@ private:
 	// to be prepared for more than one map => nonstatic
 	void set_relief_farbe_area(koord k, int areasize, uint8 color);
 
+	// for passenger destination display
+	const stadt_t *city;
+	unsigned long pax_destinations_last_change;
+
 	const schedule_t *fpl;
 	uint8 fpl_player_nr;
 
 	koord last_world_pos;
 
+	// current and new offset and size (to avoid drawing invisible parts)
+	koord cur_off, cur_size;
+	koord new_off, new_size;
+
+	// true, if full redraw is needed
+	bool needs_redraw;
+
 	const fabrik_t* draw_fab_connections(uint8 colour, koord pos) const;
 
 	void draw_schedule(const koord pos) const;
@@ -109,11 +121,22 @@ public:
 	// we are single instance ...
 	static reliefkarte_t *get_karte();
 
+	// HACK! since we cannot get cleanly the current offset/size, we use this helper function
+	void set_xy_offset_size( koord off, koord size ) {
+		new_off = off;
+		new_size = size;
+	}
+
+	koord get_offset() const { return cur_off; };
+
 	// update color with render mode (but few are ignored ... )
 	void calc_map_pixel(const koord k);
 
 	void calc_map();
 
+	// calculates the current size of the map (but do nopt change anything else)
+	void calc_map_groesse();
+
 	~reliefkarte_t();
 
 	karte_t * get_welt() const {return welt;}
@@ -133,6 +156,10 @@ public:
 	void zeichnen(koord pos);
 
 	void set_current_fpl(const schedule_t *current_fpl, uint8 player_nr) {fpl = current_fpl; fpl_player_nr = player_nr;};
+
+	void set_city( const stadt_t* _city );
+
+	const stadt_t* get_city() const { return city; };
 };
 
 #endif
diff --git a/gui/label_info.cc b/gui/label_info.cc
index e72fa6e..07f416c 100644
--- a/gui/label_info.cc
+++ b/gui/label_info.cc
@@ -10,10 +10,11 @@
 #include "../simcolor.h"
 #include "../simwin.h"
 #include "../simskin.h"
-#include "../utils/simstring.h"
+#include "../besch/skin_besch.h"
 #include "../dataobj/umgebung.h"
 #include "../dataobj/translator.h"
-#include "../besch/skin_besch.h"
+#include "../dings/label.h"
+#include "../utils/simstring.h"
 
 
 
diff --git a/gui/label_info.h b/gui/label_info.h
index 7874a09..f454c7a 100644
--- a/gui/label_info.h
+++ b/gui/label_info.h
@@ -9,7 +9,6 @@
 #define gui_label_info_h
 
 #include "gui_frame.h"
-#include "../dings/label.h"
 #include "components/gui_label.h"
 #include "components/gui_textarea.h"
 #include "components/gui_textinput.h"
@@ -17,8 +16,7 @@
 #include "components/gui_world_view_t.h"
 #include "components/action_listener.h"
 
-#include "../utils/cbuffer_t.h"
-
+class label_t;
 
 /**
  * Dies stellt ein Fenster mit den Zielinformationen
diff --git a/gui/loadsave_frame.cc b/gui/loadsave_frame.cc
index 3d7c349..26d97e2 100644
--- a/gui/loadsave_frame.cc
+++ b/gui/loadsave_frame.cc
@@ -15,12 +15,12 @@
 #include <direct.h>
 #endif
 #include <sys/stat.h>
-#include <string.h>
 #include <time.h>
 
 #include "loadsave_frame.h"
 
 #include "../simworld.h"
+#include "../dataobj/loadsave.h"
 #include "../pathes.h"
 #include "../utils/simstring.h"
 
@@ -33,7 +33,8 @@ void loadsave_frame_t::action(const char *filename)
 {
 	if(do_load) {
 		welt->laden(filename);
-	} else {
+	}
+	else {
 		welt->speichern(filename,false);
 		welt->set_dirty();
 	}
@@ -52,7 +53,8 @@ loadsave_frame_t::loadsave_frame_t(karte_t *welt, bool do_load) : savegame_frame
 
 	if(do_load) {
 		set_name("Laden");
-	} else {
+	}
+	else {
 		set_filename(welt->get_einstellungen()->get_filename());
 		set_name("Speichern");
 	}
diff --git a/gui/map_frame.cc b/gui/map_frame.cc
index fb1db22..8c2b40e 100644
--- a/gui/map_frame.cc
+++ b/gui/map_frame.cc
@@ -12,6 +12,7 @@
 #include <stdio.h>
 #include <cmath>
 
+#include "karte.h"
 #include "map_frame.h"
 #include "components/list_button.h"
 
@@ -70,16 +71,17 @@ const char map_frame_t::map_type[MAX_BUTTON_TYPE][64] =
 	"Factories",
 	"Depots",
 	"Forest",
-	"CityLimit"
+	"CityLimit",
+	"PaxDest"
 };
 
 const uint8 map_frame_t::map_type_color[MAX_BUTTON_TYPE] =
 {
-	215, 23, 31, 157, 46, 55, 63, 133, 79, 191, 207, 11, 123, 221, 71, 135, 127, 198
+	215, 23, 31, 157, 46, 55, 63, 133, 79, 191, 207, 11, 123, 221, 71, 135, 127, 198, 23
 };
 
 
-map_frame_t::map_frame_t(const karte_t *welt) :
+map_frame_t::map_frame_t(karte_t *welt) :
 	gui_frame_t("Reliefkarte"),
 	scrolly(reliefkarte_t::get_karte()),
 	zoom_label("map zoom")
@@ -173,8 +175,9 @@ map_frame_t::map_frame_t(const karte_t *welt) :
 	set_fenstergroesse(size);
 	resize( koord(0,0) );
 
-	// Clipping geändert - max. 250 war zu knapp für grosse Karten - V.Meyer
 	reliefkarte_t *karte = reliefkarte_t::get_karte();
+	karte->set_welt( welt );
+
 	const koord gr = karte->get_groesse();
 	const koord s_gr=scrolly.get_groesse();
 	const koord ij = welt->get_world_position();
@@ -195,8 +198,6 @@ map_frame_t::map_frame_t(const karte_t *welt) :
 bool
 map_frame_t::action_triggered( gui_action_creator_t *komp,value_t /* */)
 {
-	reliefkarte_t::get_karte()->calc_map();
-
 	if(komp==&b_show_legend) {
 		if(!legend_visible) {
 			for (int type=0; type<MAX_BUTTON_TYPE; type++) {
@@ -226,11 +227,11 @@ map_frame_t::action_triggered( gui_action_creator_t *komp,value_t /* */)
 		if(reliefkarte_t::get_karte()->zoom_in>1) {
 			reliefkarte_t::get_karte()->zoom_in--;
 		}
-		else if(reliefkarte_t::get_karte()->zoom_out<4) {
+		else if(reliefkarte_t::get_karte()->zoom_out<4  ) {
 			reliefkarte_t::get_karte()->zoom_out++;
 		}
-		reliefkarte_t::get_karte()->calc_map();
 		// recalc sliders
+		reliefkarte_t::get_karte()->calc_map_groesse();
 		scrolly.set_groesse( scrolly.get_groesse() );
 	}
 	else if(komp==zoom_buttons+0) {
@@ -238,17 +239,17 @@ map_frame_t::action_triggered( gui_action_creator_t *komp,value_t /* */)
 		if(reliefkarte_t::get_karte()->zoom_out>1) {
 			reliefkarte_t::get_karte()->zoom_out--;
 		}
-		else if(reliefkarte_t::get_karte()->zoom_in<4) {
+		else if(reliefkarte_t::get_karte()->zoom_in<4  ) {
 			reliefkarte_t::get_karte()->zoom_in++;
 		}
-		reliefkarte_t::get_karte()->calc_map();
 		// recalc sliders
+		reliefkarte_t::get_karte()->calc_map_groesse();
 		scrolly.set_groesse( scrolly.get_groesse() );
 	}
 	else if(komp==&b_rotate45) {
 		// rotated/straight map
 		reliefkarte_t::get_karte()->rotate45 ^= 1;
-		reliefkarte_t::get_karte()->calc_map();
+		reliefkarte_t::get_karte()->calc_map_groesse();
 		scrolly.set_groesse( scrolly.get_groesse() );
 	}
 	else if(komp==&b_show_schedule) {
@@ -279,6 +280,30 @@ map_frame_t::action_triggered( gui_action_creator_t *komp,value_t /* */)
 	return true;
 }
 
+void map_frame_t::zoom(bool zoom_out)
+{
+	if (zoom_out) {
+		// zoom out
+		if(reliefkarte_t::get_karte()->zoom_in>1) {
+			reliefkarte_t::get_karte()->zoom_in--;
+		}
+		else if(reliefkarte_t::get_karte()->zoom_out<4  ) {
+			reliefkarte_t::get_karte()->zoom_out++;
+		}
+	}
+	else {
+		// zoom in
+		if(reliefkarte_t::get_karte()->zoom_out>1) {
+			reliefkarte_t::get_karte()->zoom_out--;
+		}
+		else if(reliefkarte_t::get_karte()->zoom_in<8  ) {
+			reliefkarte_t::get_karte()->zoom_in++;
+		}
+	}
+	// recalc sliders
+	reliefkarte_t::get_karte()->calc_map_groesse();
+	scrolly.set_groesse( scrolly.get_groesse() );
+}
 
 
 /**
@@ -290,17 +315,16 @@ void map_frame_t::infowin_event(const event_t *ev)
 {
 	if(ev->ev_class == INFOWIN) {
 		if(ev->ev_code == WIN_OPEN) {
-			reliefkarte_t::get_karte()->is_visible = true;
-			reliefkarte_t::get_karte()->calc_map();
+			reliefkarte_t::get_karte()->set_xy_offset_size( koord(0,0), koord(0,0) );
 		}
 		else if(ev->ev_code == WIN_CLOSE) {
 			reliefkarte_t::get_karte()->is_visible = false;
 		}
 	}
 
-	if(  (IS_WHEELUP(ev) || IS_WHEELDOWN(ev))  &&  reliefkarte_t::get_karte()->getroffen(ev->mx,ev->my)) {
+	if(  (IS_WHEELUP(ev) || IS_WHEELDOWN(ev))  &&  reliefkarte_t::get_karte()->getroffen(ev->mx-scrolly.get_pos().x,ev->my-scrolly.get_pos().y-16)) {
 		// otherwise these would go to the vertical scroll bar
-		reliefkarte_t::get_karte()->infowin_event(ev);
+		zoom(IS_WHEELUP(ev));
 		return;
 	}
 
@@ -366,7 +390,7 @@ DBG_MESSAGE("map_frame_t::set_fenstergroesse()","gr.x=%i, gr.y=%i",size.x,size.y
  */
 void map_frame_t::resize(const koord delta)
 {
-	karte_t *welt=reliefkarte_t::get_karte()->get_welt();
+	karte_t *welt = reliefkarte_t::get_karte()->get_welt();
 
 	koord groesse = get_fenstergroesse()+delta;
 
@@ -440,6 +464,8 @@ void map_frame_t::zeichnen(koord pos, koord gr)
 	// update our stored screen position
 	screenpos = pos;
 
+	reliefkarte_t::get_karte()->set_xy_offset_size( koord(scrolly.get_scroll_x(), scrolly.get_scroll_y()), koord(scrolly.get_groesse()-koord(12,11)) );
+
 	// first: check if cursor within map screen size
 	karte_t *welt=reliefkarte_t::get_karte()->get_welt();
 	koord ij = welt->get_world_position();
diff --git a/gui/map_frame.h b/gui/map_frame.h
index 87cfc6f..48e9c1a 100644
--- a/gui/map_frame.h
+++ b/gui/map_frame.h
@@ -17,11 +17,10 @@
 #include "components/action_listener.h"
 #include "components/gui_button.h"
 #include "components/gui_label.h"
-#include "karte.h"
 
 class karte_t;
 
-#define MAX_BUTTON_TYPE (18)
+#define MAX_BUTTON_TYPE (19)
 
 /**
  * Reliefkartenfenster für Simutrans.
@@ -35,12 +34,12 @@ class map_frame_t :
 {
 private:
 
-  /**
-   * This is kind of hack: we know there can only be one map frame
-   * at atime,and we want to save the current size for the next object
-   * so we use a static variable here.
-   * @author Hj. Malthaner
-   */
+	/**
+	 * This is kind of hack: we know there can only be one map frame
+	 * at atime,and we want to save the current size for the next object
+	 * so we use a static variable here.
+	 * @author Hj. Malthaner
+	 */
 	static koord size;
 	static koord screenpos;
 
@@ -64,6 +63,7 @@ private:
 	static const uint8 map_type_color[MAX_BUTTON_TYPE];
 	button_t filter_buttons[MAX_BUTTON_TYPE];
 
+	void zoom(bool zoom_out);
 	button_t zoom_buttons[2];
 	gui_label_t zoom_label;
 	button_t b_rotate45;
@@ -77,64 +77,64 @@ private:
 
 public:
 
-    /**
-     * Manche Fenster haben einen Hilfetext assoziiert.
-     * @return den Dateinamen für die Hilfe, oder NULL
-     * @author Hj. Malthaner
-     */
-    const char * get_hilfe_datei() const {return "map.txt";}
-
-    /**
-     * Does this window need a min size button in the title bar?
-     * @return true if such a button is needed
-     * @author Hj. Malthaner
-     */
-    bool has_min_sizer() const {return true;}
-
-    /**
-     * Konstruktor. Erzeugt alle notwendigen Subkomponenten.
-     * @author Hj. Malthaner
-     */
-    map_frame_t(const karte_t *welt);
-
-    /**
-     * Events werden hiermit an die GUI-Komponenten
-     * gemeldet
-     * @author Hj. Malthaner
-     */
-    void infowin_event(const event_t *ev);
-
-    /**
-     * Setzt die Fenstergroesse
-     * @author (Mathew Hounsell)
-     * @date   11-Mar-2003
-     */
-    void set_fenstergroesse(koord groesse);
-
-    /**
-     * resize window in response to a resize event
-     * @author Hj. Malthaner
-     * @date   01-Jun-2002
-     */
-    void resize(const koord delta);
-
-    /**
-     * komponente neu zeichnen. Die übergebenen Werte beziehen sich auf
-     * das Fenster, d.h. es sind die Bildschirkoordinaten des Fensters
-     * in dem die Komponente dargestellt wird.
-     * @author Hj. Malthaner
-     */
-    void zeichnen(koord pos, koord gr);
-
-    /**
-     * This method is called if an action is triggered
-     * @author Hj. Malthaner
-     *
-     * Returns true, if action is done and no more
-     * components should be triggered.
-     * V.Meyer
-     */
-    bool action_triggered( gui_action_creator_t *komp, value_t extra);
+	/**
+	 * Manche Fenster haben einen Hilfetext assoziiert.
+	 * @return den Dateinamen für die Hilfe, oder NULL
+	 * @author Hj. Malthaner
+	 */
+	const char * get_hilfe_datei() const {return "map.txt";}
+
+	/**
+	 * Does this window need a min size button in the title bar?
+	 * @return true if such a button is needed
+	 * @author Hj. Malthaner
+	 */
+	bool has_min_sizer() const {return true;}
+
+	/**
+	 * Konstruktor. Erzeugt alle notwendigen Subkomponenten.
+	 * @author Hj. Malthaner
+	 */
+	map_frame_t(karte_t *welt);
+
+	/**
+	 * Events werden hiermit an die GUI-Komponenten
+	 * gemeldet
+	 * @author Hj. Malthaner
+	 */
+	void infowin_event(const event_t *ev);
+
+	/**
+	 * Setzt die Fenstergroesse
+	 * @author (Mathew Hounsell)
+	 * @date   11-Mar-2003
+	 */
+	void set_fenstergroesse(koord groesse);
+
+	/**
+	 * resize window in response to a resize event
+	 * @author Hj. Malthaner
+	 * @date   01-Jun-2002
+	 */
+	void resize(const koord delta);
+
+	/**
+	 * komponente neu zeichnen. Die übergebenen Werte beziehen sich auf
+	 * das Fenster, d.h. es sind die Bildschirkoordinaten des Fensters
+	 * in dem die Komponente dargestellt wird.
+	 * @author Hj. Malthaner
+	 */
+	void zeichnen(koord pos, koord gr);
+
+	/**
+	 * This method is called if an action is triggered
+	 * @author Hj. Malthaner
+	 *
+	 * Returns true, if action is done and no more
+	 * components should be triggered.
+	 * V.Meyer
+	 */
+	bool action_triggered( gui_action_creator_t *komp, value_t extra);
 };
 
 #endif
diff --git a/gui/message_frame_t.cc b/gui/message_frame_t.cc
index 29ceffd..59fb6ad 100644
--- a/gui/message_frame_t.cc
+++ b/gui/message_frame_t.cc
@@ -30,7 +30,7 @@ message_frame_t::message_frame_t(karte_t *welt) : gui_frame_t("Mailbox"),
 	scrolly.set_pos( koord(0,BUTTON_HEIGHT) );
 	add_komponente(&scrolly);
 
-	option_bt.init(button_t::box, translator::translate("Optionen"), koord(BUTTON1_X,0), koord(BUTTON_WIDTH,BUTTON_HEIGHT));
+	option_bt.init(button_t::roundbox, translator::translate("Optionen"), koord(BUTTON1_X,0), koord(BUTTON_WIDTH,BUTTON_HEIGHT));
 	option_bt.add_listener(this);
 	add_komponente(&option_bt);
 
diff --git a/gui/message_frame_t.h b/gui/message_frame_t.h
index 9a10973..4888391 100644
--- a/gui/message_frame_t.h
+++ b/gui/message_frame_t.h
@@ -14,7 +14,6 @@
 #include "components/gui_scrollpane.h"
 
 #include "message_stats_t.h"
-#include "../simmesg.h"
 #include "components/action_listener.h"
 
 class karte_t;
diff --git a/gui/message_option_t.cc b/gui/message_option_t.cc
index 29fbd09..c54af51 100644
--- a/gui/message_option_t.cc
+++ b/gui/message_option_t.cc
@@ -9,13 +9,17 @@
 
 #include <stdio.h>
 
+#include "../simmesg.h"
 #include "../simskin.h"
+#include "../simworld.h"
+
 #include "../besch/skin_besch.h"
-#include "../simmesg.h"
 #include "../dataobj/translator.h"
 #include "../dataobj/umgebung.h"
 #include "message_option_t.h"
 
+#define BUTTON_ROW (110+20)
+
 
 karte_t *message_option_t::welt = NULL;
 
@@ -26,34 +30,40 @@ message_option_t::message_option_t(karte_t *welt) :
 	legend( skinverwaltung_t::message_options->get_bild_nr(0) )
 {
 	this->welt = welt;
-	text_label.set_pos( koord(10,-2) );
+	text_label.set_pos( koord(10+20,-2) );
 	add_komponente( &text_label );
 
-	legend.set_pos( koord(110,0) );
+	legend.set_pos( koord(BUTTON_ROW,0) );
 	add_komponente( &legend );
 
 	welt->get_message()->get_message_flags( &ticker_msg, &window_msg, &auto_msg, &ignore_msg );
 
-	for(int i=0; i<MAX_MESSAGE_TYP; i++) {
-		buttons[i*3].set_pos( koord(120,18+i*2*LINESPACE) );
-		buttons[i*3].set_typ(button_t::square_state);
-		buttons[i*3].pressed = (ticker_msg>>i)&1;
-		buttons[i*3].add_listener(this);
-		add_komponente( buttons+i*3 );
-
-		buttons[i*3+1].set_pos( koord(140,18+i*2*LINESPACE) );
-		buttons[i*3+1].set_typ(button_t::square_state);
-		buttons[i*3+1].pressed = (auto_msg>>i)&1;
-		buttons[i*3+1].add_listener(this);
-		add_komponente( buttons+i*3+1 );
-
-		buttons[i*3+2].set_pos( koord(160,18+i*2*LINESPACE) );
-		buttons[i*3+2].set_typ(button_t::square_state);
-		buttons[i*3+2].pressed = (window_msg>>i)&1;
-		buttons[i*3+2].add_listener(this);
-		add_komponente( buttons+i*3+2 );
+	for(  int i=0;  i<message_t::MAX_MESSAGE_TYPE;  i++  ) {
+		buttons[i*4].set_pos( koord(10,18+i*2*LINESPACE) );
+		buttons[i*4].set_typ(button_t::square_state);
+		buttons[i*4].pressed = ((ignore_msg>>i)&1)==0;
+		buttons[i*4].add_listener(this);
+		add_komponente( buttons+i*4 );
+
+		buttons[i*4+1].set_pos( koord(BUTTON_ROW+10,18+i*2*LINESPACE) );
+		buttons[i*4+1].set_typ(button_t::square_state);
+		buttons[i*4+1].pressed = (ticker_msg>>i)&1;
+		buttons[i*4+1].add_listener(this);
+		add_komponente( buttons+i*4+1 );
+
+		buttons[i*4+2].set_pos( koord(BUTTON_ROW+30,18+i*2*LINESPACE) );
+		buttons[i*4+2].set_typ(button_t::square_state);
+		buttons[i*4+2].pressed = (auto_msg>>i)&1;
+		buttons[i*4+2].add_listener(this);
+		add_komponente( buttons+i*4+2 );
+
+		buttons[i*4+3].set_pos( koord(BUTTON_ROW+50,18+i*2*LINESPACE) );
+		buttons[i*4+3].set_typ(button_t::square_state);
+		buttons[i*4+3].pressed = (window_msg>>i)&1;
+		buttons[i*4+3].add_listener(this);
+		add_komponente( buttons+i*4+3 );
 	}
-	set_fenstergroesse( koord(180, 248) );
+	set_fenstergroesse( koord(BUTTON_ROW+70, 248) );
 }
 
 
@@ -62,14 +72,17 @@ bool
 message_option_t::action_triggered( gui_action_creator_t *komp, value_t )
 {
 	((button_t*)komp)->pressed ^= 1;
-	for(int i=0; i<MAX_MESSAGE_TYP; i++) {
-		if(&buttons[i*3]==komp) {
+	for(  int i=0;  i<message_t::MAX_MESSAGE_TYPE;  i++  ) {
+		if(&buttons[i*4+0]==komp) {
+			ignore_msg ^= (1<<i);
+		}
+		if(&buttons[i*4+1]==komp) {
 			ticker_msg ^= (1<<i);
 		}
-		if(&buttons[i*3+1]==komp) {
+		if(&buttons[i*4+2]==komp) {
 			auto_msg ^= (1<<i);
 		}
-		if(&buttons[i*3+2]==komp) {
+		if(&buttons[i*4+3]==komp) {
 			window_msg ^= (1<<i);
 		}
 	}
diff --git a/gui/message_option_t.h b/gui/message_option_t.h
index e607256..a5ab6d0 100644
--- a/gui/message_option_t.h
+++ b/gui/message_option_t.h
@@ -1,6 +1,8 @@
 #ifndef message_option_h
 #define message_option_h
 
+#include "../simmesg.h"
+
 #include "gui_frame.h"
 #include "components/action_listener.h"
 #include "components/gui_button.h"
@@ -9,36 +11,35 @@
 
 class karte_t;
 
-#define MAX_MESSAGE_TYP (10)
-
 class message_option_t : public gui_frame_t, private action_listener_t
 {
 private:
-    gui_textarea_t text_label;
-    button_t buttons[3*MAX_MESSAGE_TYP];
-    gui_image_t legend;
-    sint32 ticker_msg, window_msg, auto_msg, ignore_msg;
+	gui_textarea_t text_label;
+	button_t buttons[4*message_t::MAX_MESSAGE_TYPE];
+	gui_image_t legend;
+	sint32 ticker_msg, window_msg, auto_msg, ignore_msg;
+
 	static karte_t *welt;
 
 public:
 	message_option_t(karte_t *welt);
 
-    /**
-     * Manche Fenster haben einen Hilfetext assoziiert.
-     * @return den Dateinamen für die Hilfe, oder NULL
-     * @author Hj. Malthaner
-     */
-    const char * get_hilfe_datei() const {return "mailbox.txt";}
-
-    /**
-     * This method is called if an action is triggered
-     * @author Hj. Malthaner
-     *
-     * Returns true, if action is done and no more
-     * components should be triggered.
-     * V.Meyer
-     */
-    bool action_triggered( gui_action_creator_t *komp, value_t extra);
+	/**
+	 * Manche Fenster haben einen Hilfetext assoziiert.
+	 * @return den Dateinamen für die Hilfe, oder NULL
+	 * @author Hj. Malthaner
+	 */
+	const char * get_hilfe_datei() const {return "mailbox.txt";}
+
+	/**
+	 * This method is called if an action is triggered
+	 * @author Hj. Malthaner
+	 *
+	 * Returns true, if action is done and no more
+	 * components should be triggered.
+	 * V.Meyer
+	 */
+	bool action_triggered( gui_action_creator_t *komp, value_t extra);
 };
 
 #endif
diff --git a/gui/message_stats_t.h b/gui/message_stats_t.h
index 8a740f8..cefbd30 100644
--- a/gui/message_stats_t.h
+++ b/gui/message_stats_t.h
@@ -9,7 +9,6 @@
 #define message_stats_t_h
 
 #include "../ifc/gui_komponente.h"
-#include "../simmesg.h"
 #include "../simimg.h"
 
 class karte_t;
diff --git a/gui/money_frame.cc b/gui/money_frame.cc
index 2517f04..b02e237 100644
--- a/gui/money_frame.cc
+++ b/gui/money_frame.cc
@@ -138,7 +138,7 @@ money_frame_t::money_frame_t(spieler_t *sp)
 	chart.set_seed(sp->get_welt()->get_last_year());
 	chart.set_background(MN_GREY1);
 	for (int i = 0; i<MAX_PLAYER_COST; i++) {
-		chart.add_curve(cost_type_color[i], sp->get_finance_history_year(), MAX_PLAYER_COST, i, 12, (i < 10) ||  i==COST_POWERLINES ? MONEY: STANDARD, false, false);
+		chart.add_curve(cost_type_color[i], sp->get_finance_history_year(), MAX_PLAYER_COST, i, 12, (i < COST_ALL_TRANSPORTED) ||  i==COST_POWERLINES ? MONEY: STANDARD, false, true, (i < COST_ALL_TRANSPORTED) ||  i==COST_POWERLINES ? 2 : 0  );
 	}
 	//CHART YEAR END
 
@@ -149,7 +149,7 @@ money_frame_t::money_frame_t(spieler_t *sp)
 	mchart.set_seed(0);
 	mchart.set_background(MN_GREY1);
 	for (int i = 0; i<MAX_PLAYER_COST; i++) {
-		mchart.add_curve(cost_type_color[i], sp->get_finance_history_month(), MAX_PLAYER_COST, i, 12, (i < 10) ||  i==COST_POWERLINES ? MONEY: STANDARD, false, false);
+		mchart.add_curve(cost_type_color[i], sp->get_finance_history_month(), MAX_PLAYER_COST, i, 12, (i < 10) ||  i==COST_POWERLINES ? MONEY: STANDARD, false, true, (i < COST_ALL_TRANSPORTED) ||  i==COST_POWERLINES ? 2 : 0 );
 	}
 	mchart.set_visible(false);
 	//CHART MONTH END
@@ -242,7 +242,7 @@ money_frame_t::money_frame_t(spieler_t *sp)
 	// easier headquarter access
 	old_level = sp->get_headquarter_level();
 	old_pos = sp->get_headquarter_pos();
-	if (!hausbauer_t::headquarter.empty()) {
+	if(!hausbauer_t::headquarter.empty()) {
 
 		headquarter.init(button_t::box, old_pos!=koord::invalid ? "upgrade HQ" : "build HQ", koord(582-12-120, 0), koord(120, BUTTONSPACE));
 		headquarter.add_listener(this);
@@ -422,7 +422,7 @@ void money_frame_t::zeichnen(koord pos, koord gr)
 	}
 
 	if(old_level!=sp->get_headquarter_level()  ||  old_pos!=sp->get_headquarter_pos()) {
-		headquarter.set_text( sp->get_headquarter_pos()!=koord::invalid ? "upgrade HQ" : "Built HQ" );
+		headquarter.set_text( sp->get_headquarter_pos()!=koord::invalid ? "upgrade HQ" : "build HQ" );
 		remove_komponente(&headquarter_view);
 		old_level = sp->get_headquarter_level();
 		old_pos = sp->get_headquarter_pos();
diff --git a/gui/money_frame.h b/gui/money_frame.h
index cee13ab..f49dded 100644
--- a/gui/money_frame.h
+++ b/gui/money_frame.h
@@ -8,8 +8,6 @@
 #ifndef money_frame_h
 #define money_frame_h
 
-#include "../player/simplay.h"
-
 #include "gui_frame.h"
 #include "components/action_listener.h"
 #include "components/gui_button.h"
@@ -18,6 +16,8 @@
 #include "components/gui_chart.h"
 #include "components/gui_world_view_t.h"
 
+class spieler_t;
+
 /**
  * Finances dialog
  *
diff --git a/gui/pakselector.cc b/gui/pakselector.cc
index 8f40cde..7c6b858 100644
--- a/gui/pakselector.cc
+++ b/gui/pakselector.cc
@@ -2,6 +2,17 @@
 #include <string.h>
 #include <stdio.h>
 
+#ifndef _MSC_VER
+#include <unistd.h>
+#include <dirent.h>
+#else
+#include <io.h>
+#include <direct.h>
+#endif
+#include <sys/stat.h>
+#include <string.h>
+#include <time.h>
+
 #include "../simdebug.h"
 #include "pakselector.h"
 #include "../dataobj/umgebung.h"
@@ -13,6 +24,7 @@
 void pakselector_t::action(const char *filename)
 {
 	umgebung_t::objfilename = (cstring_t)filename + "/";
+	umgebung_t::default_einstellungen.set_with_private_paks( false );
 }
 
 
@@ -20,6 +32,7 @@ void pakselector_t::del_action(const char *filename)
 {
 	// cannot delete set => use this for selection
 	umgebung_t::objfilename = (cstring_t)filename + "/";
+	umgebung_t::default_einstellungen.set_with_private_paks( true );
 }
 
 const char *pakselector_t::get_info(const char *)
@@ -28,13 +41,28 @@ const char *pakselector_t::get_info(const char *)
 }
 
 
+/**
+ * This method is called if an action is triggered
+ * @author Hj. Malthaner
+ */
+bool pakselector_t::action_triggered( gui_action_creator_t *komp,value_t v)
+{
+	if(komp == &savebutton) {
+		savebutton.pressed ^= 1;
+		return true;
+	}
+	else {
+		return savegame_frame_t::action_triggered( komp, v );
+	}
+}
+
+
+
 void pakselector_t::zeichnen(koord p, koord gr)
 {
 	gui_frame_t::zeichnen( p, gr );
-	display_multiline_text( p.x+10, p.y+10,
-		"You have multiple pak sets to choose from.\n", COL_BLACK );
 
-	display_multiline_text( p.x+10, p.y+gr.y-4-(LINESPACE*3),
+	display_multiline_text( p.x+6, p.y+gr.y-38,
 		"To avoid seeing this dialogue define a path by:\n"
 		" - adding 'pak_file_path = pak/' to your simuconf.tab\n"
 		" - using '-objects pakxyz/' on the command line", COL_BLACK );
@@ -64,9 +92,34 @@ bool pakselector_t::check_file( const char *filename, const char * )
 
 pakselector_t::pakselector_t() : savegame_frame_t( NULL, umgebung_t::program_dir )
 {
+	// remove unneccessary buttons
 	remove_komponente( &input );
 	remove_komponente( &savebutton );
 	remove_komponente( &cancelbutton );
 	remove_komponente( &divider1 );
+
 	fnlabel.set_text( "Choose one graphics set for playing:" );
 }
+
+
+void pakselector_t::fill_list()
+{
+	// do the search ...
+	savegame_frame_t::fill_list();
+
+	bool disable = umgebung_t::program_dir==umgebung_t::user_dir;
+
+	for(  slist_tpl<entry>::iterator iter = entries.begin(), end = entries.end();  iter != end;  ++iter  ) {
+		char path[1024];
+		sprintf(path,"%s%s", umgebung_t::user_dir, iter->button->get_text() );
+		iter->del->groesse.x += 150;
+		iter->del->set_text( "Load with addons" );
+		iter->button->set_pos( koord(150,0)+iter->button->get_pos() );
+		if(  disable  ||  chdir( path )!=0  ) {
+			// no addons for this
+			iter->del->set_visible( false );
+			iter->del->disable();
+		}
+	}
+	chdir( umgebung_t::program_dir );
+}
diff --git a/gui/pakselector.h b/gui/pakselector.h
index b7e9e34..720a655 100644
--- a/gui/pakselector.h
+++ b/gui/pakselector.h
@@ -9,6 +9,7 @@
 
 class pakselector_t : public savegame_frame_t
 {
+	button_t load_addons;
 protected:
 	/**
 	* Aktion, die nach Knopfdruck gestartet wird.
@@ -29,6 +30,8 @@ protected:
 	virtual bool check_file( const char *filename, const char *suffix );
 
 public:
+	void fill_list();	// do the search ...
+
 	bool has_pak() const { return !entries.empty(); }
 
 	const char * get_hilfe_datei() const { return ""; }
@@ -36,6 +39,16 @@ public:
 	// since we only want to see the frames ...
 	void zeichnen(koord pos, koord gr);
 
+	/**
+	 * This method is called if an action is triggered
+	 * @author Hj. Malthaner
+	 *
+	 * Returns true, if action is done and no more
+	 * components should be triggered.
+	 * V.Meyer
+	 */
+	virtual bool action_triggered( gui_action_creator_t *komp, value_t extra);
+
 	pakselector_t();
 };
 
diff --git a/gui/player_frame_t.cc b/gui/player_frame_t.cc
index 88478a5..0d74f47 100644
--- a/gui/player_frame_t.cc
+++ b/gui/player_frame_t.cc
@@ -186,14 +186,16 @@ ki_kontroll_t::zeichnen(koord pos, koord gr)
 
 		spieler_t *sp = welt->get_spieler(i);
 		if(  sp!=NULL  ) {
-			if(i!=1  &&  sp->get_finance_history_year(0, COST_NETWEALTH)<0) {
+			if(i!=1  &&  !welt->get_einstellungen()->is_freeplay()  &&  sp->get_finance_history_year(0, COST_NETWEALTH)<0) {
 				ai_income[i]->set_color( MONEY_MINUS );
+				ai_income[i]->set_pos( koord( gr.x-4, 8+i*2*LINESPACE ) );
 				tstrncpy(account_str[i], translator::translate("Company bankrupt"), 31 );
 			}
 			else {
 				double account=sp->get_konto_als_double();
 				money_to_string(account_str[i], account );
 				ai_income[i]->set_color( account>=0.0 ? MONEY_PLUS : MONEY_MINUS );
+				ai_income[i]->set_pos( koord( 225, 8+i*2*LINESPACE ) );
 			}
 		}
 		else {
diff --git a/gui/savegame_frame.cc b/gui/savegame_frame.cc
index 0b28bc0..9135b68 100644
--- a/gui/savegame_frame.cc
+++ b/gui/savegame_frame.cc
@@ -21,6 +21,8 @@
 #include "../simdebug.h"
 #include "../simwin.h"
 #include "../simintr.h"
+
+#include "../dataobj/umgebung.h"
 #include "../utils/simstring.h"
 
 #include "components/list_button.h"
@@ -147,9 +149,9 @@ void savegame_frame_t::fill_list()
 #else
 	{
 		struct _finddata_t entry;
-		long hfind;
+		size_t hfind;
 
-		hfind = _findfirst( searchpath, &entry);
+		hfind = _findfirst( searchpath, &entry );
 		if(hfind == -1) {
 			dbg->warning("savegame_frame_t::savegame_frame_t()","Couldn't read directory.");
 		}
@@ -212,7 +214,7 @@ savegame_frame_t::~savegame_frame_t()
 // sets the current filename in the input box
 void savegame_frame_t::set_filename(const char *fn)
 {
-	long len = strlen(fn);
+	size_t len = strlen(fn);
 	if(len>=4  &&  len-SAVE_PATH_X_LEN-3<128) {
 		if(strncmp(fn,SAVE_PATH_X,SAVE_PATH_X_LEN)==0) {
 			tstrncpy(ibuf, fn+SAVE_PATH_X_LEN, len-SAVE_PATH_X_LEN-3 );
@@ -232,19 +234,46 @@ void savegame_frame_t::add_file(const char *filename, const char *pak, const boo
 	char * name = new char [strlen(filename)+10];
 	char * date = new char[strlen(pak)+1];
 
-	sprintf(date, "%s", pak);
-	sprintf(name, "%s", filename);
+	strcpy( date, pak );
+	strcpy( name, filename );
 	if(!no_cutting_suffix) {
 		name[strlen(name)-4] = '\0';
 	}
 	button->set_no_translate(true);
 	button->set_text(name);	// to avoid translation
 
+	const cstring_t compare_to = umgebung_t::objfilename.len()>0  ?  umgebung_t::objfilename.left( umgebung_t::objfilename.len()-1 ) + " -"  :  "";
 	// sort by date descending:
 	slist_tpl<entry>::iterator i = entries.begin();
-	for (slist_tpl<entry>::iterator end = entries.end(); i != end; ++i) {
-		if (strcmp(i->label->get_text_pointer(), date) < 0) {
-			break;
+	slist_tpl<entry>::iterator end = entries.end();
+	if(  strncmp( compare_to, pak, compare_to.len() )!=0  ) {
+		// skip current ones
+		while(  i != end  ) {
+			// extract palname in same format than in savegames ...
+			if(  strncmp( compare_to, i->label->get_text_pointer(), compare_to.len() ) !=0  ) {
+				break;
+			}
+			++i;
+		}
+		// now just sort according time
+		while(  i != end  ) {
+			if(  strcmp(i->label->get_text_pointer(), date) < 0  ) {
+				break;
+			}
+			++i;
+		}
+	}
+	else {
+		// Insert to our games (or in front if none)
+		while(  i != end  ) {
+			if(  strcmp(i->label->get_text_pointer(), date) < 0  ) {
+				break;
+			}
+			// not our savegame any more => insert
+			if(  strncmp( compare_to, i->label->get_text_pointer(), compare_to.len() ) !=0  ) {
+				break;
+			}
+			++i;
 		}
 	}
 
diff --git a/gui/savegame_frame.h b/gui/savegame_frame.h
index 7da2217..22564c4 100644
--- a/gui/savegame_frame.h
+++ b/gui/savegame_frame.h
@@ -113,7 +113,7 @@ public:
 	 * components should be triggered.
 	 * V.Meyer
 	 */
-	bool action_triggered( gui_action_creator_t *komp, value_t extra);
+	virtual bool action_triggered( gui_action_creator_t *komp, value_t extra);
 
 	// must catch open messgae to uptade list, since I am using virtual functions
 	virtual void infowin_event(const event_t *ev);
diff --git a/gui/schedule_list.cc b/gui/schedule_list.cc
index c835649..5a781bb 100644
--- a/gui/schedule_list.cc
+++ b/gui/schedule_list.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997 - 2004 Hansjörg Malthaner
+ * Copyright (c) 1997 - 2004 Hj. Malthaner
  *
  * Line management
  *
@@ -31,6 +31,7 @@
 
 #include "../dataobj/fahrplan.h"
 #include "../dataobj/translator.h"
+#include "../dataobj/umgebung.h"
 
 #include "../boden/wege/kanal.h"
 #include "../boden/wege/maglev.h"
@@ -92,7 +93,7 @@ schedule_list_gui_t::schedule_list_gui_t(spieler_t* sp_) :
 	button_t button_def;
 
 	// init scrolled list
-	scl.set_groesse(koord(LINE_NAME_COLUMN_WIDTH-22, SCL_HEIGHT-14));
+	scl.set_groesse(koord(LINE_NAME_COLUMN_WIDTH-22, SCL_HEIGHT-18));
 	scl.set_pos(koord(0,1));
 	scl.set_highlight_color(sp->get_player_color1()+1);
 	scl.add_listener(this);
@@ -162,19 +163,25 @@ schedule_list_gui_t::schedule_list_gui_t(spieler_t* sp_) :
 
 	// halt list?
 	cont_haltestellen.set_groesse(koord(500, 28));
-	scrolly_haltestellen.set_pos(koord(0, 14 + SCL_HEIGHT+BUTTON_HEIGHT+2));
+	scrolly_haltestellen.set_pos(koord(0, 7 + SCL_HEIGHT+2*BUTTON_HEIGHT+2));
 	scrolly_haltestellen.set_visible(false);
 	add_komponente(&scrolly_haltestellen);
 
 	// normal buttons edit new remove
-	bt_new_line.set_pos(koord(11, 14 + SCL_HEIGHT));
+	bt_new_line.set_pos(koord(11, 7 + SCL_HEIGHT));
 	bt_new_line.set_groesse(koord(BUTTON_WIDTH,BUTTON_HEIGHT));
 	bt_new_line.set_typ(button_t::roundbox);
 	bt_new_line.set_text("New Line");
 	add_komponente(&bt_new_line);
 	bt_new_line.add_listener(this);
+	if (tabs.get_active_tab_index()>0) {
+		bt_new_line.enable();
+	}
+	else {
+		bt_new_line.disable();
+	}
 
-	bt_change_line.set_pos(koord(11+BUTTON_WIDTH, 14 + SCL_HEIGHT));
+	bt_change_line.set_pos(koord(11+BUTTON_WIDTH, 7 + SCL_HEIGHT));
 	bt_change_line.set_groesse(koord(BUTTON_WIDTH,BUTTON_HEIGHT));
 	bt_change_line.set_typ(button_t::roundbox);
 	bt_change_line.set_text("Update Line");
@@ -183,7 +190,7 @@ schedule_list_gui_t::schedule_list_gui_t(spieler_t* sp_) :
 	bt_change_line.add_listener(this);
 	bt_change_line.disable();
 
-	bt_delete_line.set_pos(koord(11+2*BUTTON_WIDTH, 14 + SCL_HEIGHT));
+	bt_delete_line.set_pos(koord(11+2*BUTTON_WIDTH, 7 + SCL_HEIGHT));
 	bt_delete_line.set_groesse(koord(BUTTON_WIDTH,BUTTON_HEIGHT));
 	bt_delete_line.set_typ(button_t::roundbox);
 	bt_delete_line.set_text("Delete Line");
@@ -191,6 +198,15 @@ schedule_list_gui_t::schedule_list_gui_t(spieler_t* sp_) :
 	bt_delete_line.add_listener(this);
 	bt_delete_line.disable();
 
+	bt_withdraw_line.set_pos(koord(11+0*BUTTON_WIDTH, 7 + SCL_HEIGHT+BUTTON_HEIGHT));
+	bt_withdraw_line.set_groesse(koord(BUTTON_WIDTH,BUTTON_HEIGHT));
+	bt_withdraw_line.set_typ(button_t::roundbox_state);
+	bt_withdraw_line.set_text("Withdraw All");
+	bt_withdraw_line.set_tooltip("Convoi is sold when all wagons are empty.");
+	add_komponente(&bt_withdraw_line);
+	bt_withdraw_line.add_listener(this);
+	bt_withdraw_line.disable();
+
 	//CHART
 	chart.set_dimension(12, 1000);
 	chart.set_pos( koord(LINE_NAME_COLUMN_WIDTH+50,11) );
@@ -249,18 +265,13 @@ bool schedule_list_gui_t::action_triggered( gui_action_creator_t *komp,value_t /
 		}
 	}
 	else if (komp == &bt_new_line) {
-		if (tabs.get_active_tab_index() > 0) {
-			// create typed line
-			assert(tabs.get_active_tab_index()<max_idx);
-			uint8 type=tabs_to_lineindex[tabs.get_active_tab_index()];
-			linehandle_t new_line = sp->simlinemgmt.create_line(type,sp);
-			create_win( new line_management_gui_t(new_line, sp), w_info, (long)line.get_rep());
-			update_lineinfo( new_line );
-			build_line_list( tabs.get_active_tab_index() );
-		}
-		else {
-			create_win( new news_img("Cannot create generic line!\nSelect line type by\nusing filter tabs."), w_time_delete, magic_none);
-		}
+		assert(  tabs.get_active_tab_index() > 0  &&  tabs.get_active_tab_index()<max_idx  );
+		// create typed line
+		uint8 type=tabs_to_lineindex[tabs.get_active_tab_index()];
+		linehandle_t new_line = sp->simlinemgmt.create_line(type,sp);
+		create_win( new line_management_gui_t(new_line, sp), w_info, (long)new_line.get_rep());
+		update_lineinfo( new_line );
+		build_line_list( tabs.get_active_tab_index() );
 	}
 	else if (komp == &bt_delete_line) {
 		if (line.is_bound()) {
@@ -275,22 +286,28 @@ bool schedule_list_gui_t::action_triggered( gui_action_creator_t *komp,value_t /
 			build_line_list(tabs.get_active_tab_index());
 		}
 	}
+	else if (komp == &bt_withdraw_line) {
+		bt_withdraw_line.pressed ^= 1;
+		if (line.is_bound()) {
+			line->set_withdraw( bt_withdraw_line.pressed );
+		}
+	}
 	else if (komp == &tabs) {
 		update_lineinfo( linehandle_t() );
 		build_line_list(tabs.get_active_tab_index());
+		if (tabs.get_active_tab_index()>0) {
+			bt_new_line.enable();
+		}
+		else {
+			bt_new_line.disable();
+		}
 	}
 	else if (komp == &scl) {
-		if(!line.is_bound()) {
-			bt_change_line.disable();
-			bt_delete_line.disable();
-		}
 		// get selected line
 		linehandle_t new_line = linehandle_t();
 		selection = scl.get_selection();
 		if(  (unsigned)selection < lines.get_count()  ) {
 			new_line = lines[selection];
-			bt_change_line.enable();
-			bt_delete_line.enable();
 		}
 		update_lineinfo(new_line);
 		// brute force: just recalculate whole list on each click to keep it current
@@ -373,7 +390,7 @@ schedule_list_gui_t::display(koord pos)
 	len2 += display_proportional(pos.x+LINE_NAME_COLUMN_WIDTH+len2, pos.y+16+14+SCL_HEIGHT+14+4+LINESPACE, ctmp, ALIGN_LEFT, profit>=0?MONEY_PLUS:MONEY_MINUS, true );
 
 	int rest_width = max( (get_fenstergroesse().x-LINE_NAME_COLUMN_WIDTH)/2, max(len2,len) );
-	number_to_string(ctmp, capacity);
+	number_to_string(ctmp, capacity, 2);
 	sprintf(buffer, translator::translate("Capacity: %s\nLoad: %d (%d%%)"), ctmp, load, loadfactor);
 	display_multiline_text(pos.x + LINE_NAME_COLUMN_WIDTH + rest_width, pos.y+16 + 14 + SCL_HEIGHT + 14 +4 , buffer, COL_BLACK);
 }
@@ -455,12 +472,18 @@ void schedule_list_gui_t::update_lineinfo(linehandle_t new_line)
 		}
 		cont.set_groesse(koord(500, ypos));
 
+		bt_delete_line.disable();
+		bt_withdraw_line.disable();
 		if(icnv>0) {
-			bt_delete_line.disable();
+			bt_withdraw_line.enable();
 		}
 		else {
 			bt_delete_line.enable();
 		}
+		bt_change_line.enable();
+
+		new_line->recalc_catg_index();	// update withdraw info
+		bt_withdraw_line.pressed = new_line->get_withdraw();
 
 		// fill haltestellen container with info of line's haltestellen
 		cont_haltestellen.remove_all();
@@ -468,7 +491,7 @@ void schedule_list_gui_t::update_lineinfo(linehandle_t new_line)
 //		slist_tpl<koord3d> tmp; // stores koords of stops that are allready displayed
 		for(i=0; i<new_line->get_schedule()->get_count(); i++) {
 			const koord3d fahrplan_koord = new_line->get_schedule()->eintrag[i].pos;
-			halthandle_t halt = haltestelle_t::get_halt(sp->get_welt(), fahrplan_koord);
+			halthandle_t halt = haltestelle_t::get_halt(sp->get_welt(),fahrplan_koord, sp);
 			if (halt.is_bound()) {
 //				// only add a haltestelle to the list, if it is not in the list allready
 //				if (!tmp.is_contained(fahrplan_koord)) {
@@ -486,7 +509,7 @@ void schedule_list_gui_t::update_lineinfo(linehandle_t new_line)
 		// chart
 		chart.remove_curves();
 		for(i=0; i<MAX_LINE_COST; i++)  {
-			chart.add_curve(cost_type_color[i], new_line->get_finance_history(), MAX_LINE_COST, statistic[i], MAX_MONTHS, statistic_type[i], filterButtons[i].pressed, true);
+			chart.add_curve(cost_type_color[i], new_line->get_finance_history(), MAX_LINE_COST, statistic[i], MAX_MONTHS, statistic_type[i], filterButtons[i].pressed, true, statistic_type[i]*2 );
 			if(filterButtons[i].pressed) {
 				chart.show_curve(i);
 			}
@@ -507,6 +530,8 @@ void schedule_list_gui_t::update_lineinfo(linehandle_t new_line)
 		inp_name.set_visible(false);
 		filled_bar.set_visible(false);
 		scl.set_selection(-1);
+		bt_withdraw_line.disable();
+		bt_withdraw_line.pressed = false;
 		bt_delete_line.disable();
 		bt_change_line.disable();
 		for(int i=0; i<MAX_LINE_COST; i++)  {
diff --git a/gui/schedule_list.h b/gui/schedule_list.h
index 4402fa7..06aae74 100644
--- a/gui/schedule_list.h
+++ b/gui/schedule_list.h
@@ -27,7 +27,7 @@ class schedule_list_gui_t : public gui_frame_t, public action_listener_t
 private:
 	spieler_t *sp;
 
-	button_t bt_new_line, bt_change_line, bt_delete_line;
+	button_t bt_new_line, bt_change_line, bt_delete_line, bt_withdraw_line;;
 	gui_container_t cont, cont_haltestellen;
 	gui_scrollpane_t scrolly, scrolly_haltestellen;
 	gui_scrolled_list_t scl;
diff --git a/gui/settings_frame.cc b/gui/settings_frame.cc
new file mode 100755
index 0000000..dbde41b
--- /dev/null
+++ b/gui/settings_frame.cc
@@ -0,0 +1,146 @@
+/*
+ * Copyright (c) 1997 - 2003 Hansjörg Malthaner
+ *
+ * This file is part of the Simutrans project under the artistic licence.
+ * (see licence.txt)
+ */
+
+#ifdef _MSC_VER
+#include <new.h> // for _set_new_handler
+#include <direct.h>
+#else
+#include <unistd.h>
+#endif
+
+#include "../simcity.h"
+#include "../simwin.h"
+
+#include "../dataobj/umgebung.h"
+#include "../dataobj/translator.h"
+#include "../dataobj/loadsave.h"
+#include "../dataobj/tabfile.h"
+#include "settings_frame.h"
+
+#include "components/list_button.h"
+#include "components/action_listener.h"
+
+
+settings_frame_t::settings_frame_t(einstellungen_t *s) : gui_frame_t("Setting"),
+	sets(s),
+	scrolly_general(&general),
+	scrolly_economy(&economy),
+	scrolly_routing(&routing),
+	scrolly_costs(&costs)
+{
+	revert_to_default.init( button_t::roundbox, "Simuconf.tab", koord( 0, 0), koord( BUTTON_WIDTH, BUTTON_HEIGHT ) );
+	revert_to_default.add_listener( this );
+	add_komponente( &revert_to_default );
+	revert_to_last_save.init( button_t::roundbox, "Default.sve", koord( BUTTON_WIDTH, 0), koord( BUTTON_WIDTH, BUTTON_HEIGHT ) );
+	revert_to_last_save.add_listener( this );
+	add_komponente( &revert_to_last_save );
+
+	general.init( sets );
+	economy.init( sets );
+	routing.init( sets );
+	costs.init( sets );
+
+	// tab panel
+	tabs.set_pos(koord(0,BUTTON_HEIGHT));
+	tabs.set_groesse(koord(320, 240)-koord(11,5));
+	tabs.add_tab(&scrolly_general, translator::translate("General"));
+	tabs.add_tab(&scrolly_economy, translator::translate("Economy"));
+	tabs.add_tab(&scrolly_routing, translator::translate("Routing"));
+	tabs.add_tab(&scrolly_costs, translator::translate("Costs"));
+	add_komponente(&tabs);
+
+
+	set_fenstergroesse(koord(320, 240));
+	// a min-size for the window
+	set_min_windowsize(koord(320, 80));
+
+	set_resizemode(diagonal_resize);
+	resize(koord(0,0));
+}
+
+
+
+/**
+ * resize window in response to a resize event
+ * @author Hj. Malthaner
+ * @date   16-Oct-2003
+ */
+void settings_frame_t::resize(const koord delta)
+{
+	gui_frame_t::resize(delta);
+	koord groesse = get_fenstergroesse()-koord(0,16+BUTTON_HEIGHT);
+	tabs.set_groesse(groesse);
+}
+
+
+
+
+ /* triggered, when button clicked; only single button registered, so the action is clear ... */
+bool settings_frame_t::action_triggered( gui_action_creator_t *komp, value_t )
+{
+	if(  komp==&revert_to_default  ) {
+		// reread from simucon.tab(s) the settings and apply them
+		tabfile_t simuconf;
+		*sets = einstellungen_t();
+		chdir( umgebung_t::program_dir );
+		if(simuconf.open("config/simuconf.tab")) {
+			sint16 dummy16;
+			cstring_t dummy_str;
+			sets->parse_simuconf( simuconf, dummy16, dummy16, dummy16, dummy_str );
+		}
+		stadt_t::cityrules_init(umgebung_t::objfilename);
+		chdir( umgebung_t::program_dir );
+		chdir( umgebung_t::objfilename );
+		if(simuconf.open("config/simuconf.tab")) {
+			sint16 dummy16;
+			cstring_t dummy_str;
+			sets->parse_simuconf( simuconf, dummy16, dummy16, dummy16, dummy_str );
+		}
+		chdir(  umgebung_t::user_dir  );
+		if(simuconf.open("simuconf.tab")) {
+			sint16 dummy16;
+			cstring_t dummy_str;
+			sets->parse_simuconf( simuconf, dummy16, dummy16, dummy16, dummy_str );
+		}
+		simuconf.close();
+
+		// and update ...
+		general.init( sets );
+		economy.init( sets );
+		routing.init( sets );
+		costs.init( sets );
+	}
+	else if(  komp==&revert_to_last_save  ) {
+		// load settings of last generated map
+		loadsave_t file;
+		chdir( umgebung_t::user_dir  );
+		if(  file.rd_open("default.sve")  ) {
+			sets->rdwr(&file);
+			file.close();
+		}
+
+		// and update ...
+		general.init( sets );
+		economy.init( sets );
+		routing.init( sets );
+		costs.init( sets );
+	}
+	return true;
+}
+
+
+
+void settings_frame_t::infowin_event(const event_t *ev)
+{
+	if(  ev->ev_class == INFOWIN  &&  ev->ev_code == WIN_CLOSE  ) {
+		general.read( sets );
+		routing.read( sets );
+		economy.read( sets );
+		costs.read( sets );
+	}
+	gui_frame_t::infowin_event(ev);
+}
diff --git a/gui/message_frame_t.h b/gui/settings_frame.h
old mode 100644
new mode 100755
similarity index 53%
copy from gui/message_frame_t.h
copy to gui/settings_frame.h
index 9a10973..d694d63
--- a/gui/message_frame_t.h
+++ b/gui/settings_frame.h
@@ -5,42 +5,51 @@
  * (see licence.txt)
  */
 
-#ifndef message_frame_h
-#define message_frame_h
+#ifndef settings_frame_h
+#define settings_frame_h
 
 
 #include "gui_frame.h"
+#include "components/gui_tab_panel.h"
 #include "components/gui_button.h"
 #include "components/gui_scrollpane.h"
 
-#include "message_stats_t.h"
-#include "../simmesg.h"
+#include "settings_stats.h"
 #include "components/action_listener.h"
 
-class karte_t;
+class einstellungen_t;
 
 
 /**
  * All messages since the start of the program
  * @author prissi
  */
-class message_frame_t : public gui_frame_t, private action_listener_t
+class settings_frame_t : public gui_frame_t, action_listener_t
 {
 private:
-	message_stats_t	stats;
-	gui_scrollpane_t scrolly;
-	button_t option_bt;
-	static karte_t *welt;
+	einstellungen_t	*sets;
+	gui_tab_panel_t	tabs;
+
+	settings_general_stats_t	general;
+	gui_scrollpane_t scrolly_general;
+	settings_economy_stats_t	economy;
+	gui_scrollpane_t scrolly_economy;
+	settings_routing_stats_t	routing;
+	gui_scrollpane_t scrolly_routing;
+	settings_costs_stats_t	costs;
+	gui_scrollpane_t scrolly_costs;
+
+	button_t revert_to_default, revert_to_last_save;
 
 public:
-	message_frame_t(karte_t * welt);
+	settings_frame_t(einstellungen_t *sets);
 
 	/**
 	 * Manche Fenster haben einen Hilfetext assoziiert.
 	 * @return den Dateinamen für die Hilfe, oder NULL
 	 * @author Hj. Malthaner
 	 */
-	const char * get_hilfe_datei() const {return "mailbox.txt";}
+	const char *get_hilfe_datei() const {return "settings.txt";}
 
 	/**
 	* resize window in response to a resize event
@@ -57,6 +66,13 @@ public:
      * V.Meyer
      */
     bool action_triggered( gui_action_creator_t *komp, value_t extra);
+
+	/**
+	 * Events werden hiermit an die GUI-Komponenten
+	 * gemeldet
+	 * @author V. Meyer
+	 */
+	void infowin_event(const event_t *ev);
 };
 
 #endif
diff --git a/gui/settings_stats.cc b/gui/settings_stats.cc
new file mode 100644
index 0000000..acb2f37
--- /dev/null
+++ b/gui/settings_stats.cc
@@ -0,0 +1,300 @@
+/*
+ * Copyright (c) 1997 - 2003 Hansjörg Malthaner
+ *
+ * This file is part of the Simutrans project under the artistic licence.
+ * (see licence.txt)
+ */
+
+#include "../simcity.h"
+#include "../dataobj/einstellungen.h"
+#include "../dataobj/umgebung.h"
+#include "settings_stats.h"
+
+
+/* stuff not set here ....
+INIT_NUM( "intercity_road_length", umgebung_t::intercity_road_length);
+INIT_NUM( "river_number", river_number );
+INIT_NUM( "river_min_length", min_river_length );
+INIT_NUM( "river_max_length", max_river_length );
+INIT_NUM( "diagonal_multiplier", pak_diagonal_multiplier);
+*/
+
+
+// just free memory
+void settings_stats_t::free_all()
+{
+	while(  !label.empty()  ) {
+		delete label.remove_first();
+	}
+	while(  !numinp.empty()  ) {
+		delete numinp.remove_first();
+	}
+	while(  !button.empty()  ) {
+		delete button.remove_first();
+	}
+}
+
+
+
+
+/* Nearly automatic lists with controls:
+ * BEWARE: The init exit pair MUST match in the same order or else!!!
+ */
+void settings_general_stats_t::init(einstellungen_t *sets)
+{
+	INIT_INIT
+//	INIT_BOOL( "drive_left", umgebung_t::drive_on_left );	//cannot be switched after loading paks
+	INIT_NUM( "autosave", umgebung_t::autosave, 0, 12, gui_numberinput_t::AUTOLINEAR, false );
+	INIT_NUM( "frames_per_second",umgebung_t::fps, 10, 25, gui_numberinput_t::AUTOLINEAR, false );
+	INIT_NUM( "fast_forward", umgebung_t::max_acceleration, 1, 1000, gui_numberinput_t::AUTOLINEAR, false );
+	SEPERATOR
+	INIT_BOOL( "numbered_stations", sets->get_numbered_stations() );
+	INIT_NUM( "show_names", umgebung_t::show_names, 0, 3, gui_numberinput_t::AUTOLINEAR, true );
+	INIT_NUM( "show_month", umgebung_t::show_month, 0, 4, gui_numberinput_t::AUTOLINEAR, true );
+	SEPERATOR
+	INIT_NUM( "bits_per_month", sets->get_bits_per_month(), 16, 24, gui_numberinput_t::AUTOLINEAR, false );
+	INIT_NUM( "use_timeline", sets->get_use_timeline(), 0, 2, gui_numberinput_t::AUTOLINEAR, false );
+	INIT_NUM( "starting_year", sets->get_starting_year(), 0, 2999, gui_numberinput_t::AUTOLINEAR, false );
+	INIT_NUM( "starting_month", sets->get_starting_month(), 0, 11, gui_numberinput_t::AUTOLINEAR, false );
+	SEPERATOR
+	INIT_NUM( "water_animation_ms", umgebung_t::water_animation, 0, 1000, 25, false );
+	INIT_NUM( "random_grounds_probability", umgebung_t::ground_object_probability, 0, 0x7FFFFFFFul, gui_numberinput_t::POWER2, false );
+	INIT_NUM( "random_wildlife_probability", umgebung_t::moving_object_probability, 0, 0x7FFFFFFFul, gui_numberinput_t::POWER2, false );
+	SEPERATOR
+	INIT_BOOL( "pedes_and_car_info", umgebung_t::verkehrsteilnehmer_info );
+	INIT_BOOL( "tree_info", umgebung_t::tree_info );
+	INIT_BOOL( "ground_info", umgebung_t::ground_info );
+	INIT_BOOL( "townhall_info", umgebung_t::townhall_info );
+	INIT_BOOL( "only_single_info", umgebung_t::single_info );
+	SEPERATOR
+	INIT_BOOL( "window_buttons_right", umgebung_t::window_buttons_right );
+	INIT_BOOL( "window_frame_active", umgebung_t::window_frame_active );
+	SEPERATOR
+	INIT_BOOL( "show_tooltips", umgebung_t::show_tooltips );
+	INIT_NUM( "tooltip_background_color", umgebung_t::tooltip_color, 0, 255, gui_numberinput_t::AUTOLINEAR, 0 );
+	INIT_NUM( "tooltip_text_color", umgebung_t::tooltip_textcolor, 0, 255, gui_numberinput_t::AUTOLINEAR, 0 );
+	SEPERATOR
+	INIT_NUM( "cursor_overlay_color", umgebung_t::cursor_overlay_color, 0, 255, gui_numberinput_t::AUTOLINEAR, 0 );
+	INIT_BOOL( "left_to_right_graphs", umgebung_t::left_to_right_graphs );
+
+	clear_dirty();
+	set_groesse( settings_stats_t::get_groesse() );
+}
+
+void settings_general_stats_t::read(einstellungen_t *sets)
+{
+	EXIT_INIT
+//	EXIT_BOOL_VALUE( umgebung_t::drive_on_left );	//cannot be switched after loading paks
+	EXIT_NUM_VALUE( umgebung_t::autosave );
+	EXIT_NUM_VALUE( umgebung_t::fps );
+	EXIT_NUM_VALUE( umgebung_t::max_acceleration );
+
+	EXIT_BOOL( sets->set_numbered_stations );
+	EXIT_NUM_VALUE( umgebung_t::show_names );
+	EXIT_NUM_VALUE( umgebung_t::show_month );
+
+	EXIT_NUM( sets->set_bits_per_month );
+	EXIT_NUM( sets->set_use_timeline );
+	EXIT_NUM( sets->set_starting_year );
+	EXIT_NUM( sets->set_starting_month );
+
+	EXIT_NUM_VALUE( umgebung_t::water_animation );
+	EXIT_NUM_VALUE( umgebung_t::ground_object_probability );
+	EXIT_NUM_VALUE( umgebung_t::moving_object_probability );
+
+	EXIT_BOOL_VALUE( umgebung_t::verkehrsteilnehmer_info );
+	EXIT_BOOL_VALUE( umgebung_t::tree_info );
+	EXIT_BOOL_VALUE( umgebung_t::ground_info );
+	EXIT_BOOL_VALUE( umgebung_t::townhall_info );
+	EXIT_BOOL_VALUE( umgebung_t::single_info );
+
+	EXIT_BOOL_VALUE( umgebung_t::window_buttons_right );
+	EXIT_BOOL_VALUE( umgebung_t::window_frame_active );
+
+	EXIT_BOOL_VALUE( umgebung_t::show_tooltips );
+	EXIT_NUM_VALUE( umgebung_t::tooltip_color );
+	EXIT_NUM_VALUE( umgebung_t::tooltip_textcolor );
+
+	EXIT_NUM_VALUE( umgebung_t::cursor_overlay_color );
+	EXIT_BOOL_VALUE( umgebung_t::left_to_right_graphs );
+}
+
+
+
+
+void settings_routing_stats_t::init(einstellungen_t *sets)
+{
+	INIT_INIT
+	INIT_BOOL( "seperate_halt_capacities", sets->is_seperate_halt_capacities() );
+	INIT_BOOL( "avoid_overcrowding", sets->is_avoid_overcrowding() );
+	INIT_BOOL( "no_routing_over_overcrowded", sets->is_no_routing_over_overcrowding() );
+	INIT_NUM( "station_coverage", sets->get_station_coverage(), 1, 8, gui_numberinput_t::AUTOLINEAR, false );
+	SEPERATOR
+	INIT_NUM( "max_route_steps", sets->get_max_route_steps(), 0, 0x7FFFFFFFul, gui_numberinput_t::POWER2, false );
+	INIT_NUM( "max_hops", sets->get_max_hops(), 100, 65000, gui_numberinput_t::POWER2, false );
+	INIT_NUM( "max_transfers", sets->get_max_transfers(), 1, 100, gui_numberinput_t::AUTOLINEAR, false );
+	SEPERATOR
+	INIT_NUM( "way_straight", sets->way_count_straight, 1, 1000, gui_numberinput_t::AUTOLINEAR, false );
+	INIT_NUM( "way_curve", sets->way_count_curve, 1, 1000, gui_numberinput_t::AUTOLINEAR, false );
+	INIT_NUM( "way_double_curve", sets->way_count_double_curve, 1, 1000, gui_numberinput_t::AUTOLINEAR, false );
+	INIT_NUM( "way_90_curve", sets->way_count_90_curve, 1, 1000, gui_numberinput_t::AUTOLINEAR, false );
+	INIT_NUM( "way_slope", sets->way_count_slope, 1, 1000, gui_numberinput_t::AUTOLINEAR, false );
+	INIT_NUM( "way_tunnel", sets->way_count_tunnel, 1, 1000, gui_numberinput_t::AUTOLINEAR, false );
+	INIT_NUM( "way_max_bridge_len", sets->way_max_bridge_len, 1, 1000, gui_numberinput_t::AUTOLINEAR, false );
+	INIT_NUM( "way_leaving_road", sets->way_count_leaving_road, 1, 1000, gui_numberinput_t::AUTOLINEAR, false );
+
+	clear_dirty();
+	set_groesse( settings_stats_t::get_groesse() );
+}
+
+void settings_routing_stats_t::read(einstellungen_t *sets)
+{
+	EXIT_INIT
+	EXIT_BOOL( sets->set_seperate_halt_capacities );
+	EXIT_BOOL( sets->set_avoid_overcrowding );
+	EXIT_BOOL( sets->set_no_routing_over_overcrowding );
+	EXIT_NUM( sets->set_station_coverage );
+	EXIT_NUM( sets->set_max_route_steps );
+	EXIT_NUM( sets->set_max_hops );
+	EXIT_NUM( sets->set_max_transfers );
+	EXIT_NUM_VALUE( sets->way_count_straight );
+	EXIT_NUM_VALUE( sets->way_count_curve );
+	EXIT_NUM_VALUE( sets->way_count_double_curve );
+	EXIT_NUM_VALUE( sets->way_count_90_curve );
+	EXIT_NUM_VALUE( sets->way_count_slope );
+	EXIT_NUM_VALUE( sets->way_count_tunnel );
+	EXIT_NUM_VALUE( sets->way_max_bridge_len );
+	EXIT_NUM_VALUE( sets->way_count_leaving_road );
+}
+
+
+
+
+void settings_economy_stats_t::init(einstellungen_t *sets)
+{
+	INIT_INIT
+	INIT_COST( "starting_money", sets->get_starting_money(), 1, 0x7FFFFFFFul, 10000, false );
+	INIT_NUM( "pay_for_total_distance", sets->get_pay_for_total_distance_mode(), 0, 2, gui_numberinput_t::AUTOLINEAR, true );
+	INIT_BOOL( "first_beginner", sets->get_beginner_mode() );
+	INIT_NUM( "beginner_price_factor", sets->get_beginner_price_factor(), 1, 25000, gui_numberinput_t::AUTOLINEAR, false );
+	SEPERATOR
+	INIT_BOOL( "just_in_time", sets->get_just_in_time() );
+	INIT_BOOL( "crossconnect_factories", sets->is_crossconnect_factories() );
+	INIT_NUM( "crossconnect_factories_percentage", sets->get_crossconnect_factor(), 0, 100, gui_numberinput_t::AUTOLINEAR, false );
+	INIT_NUM( "industry_increase_every", stadt_t::get_industry_increase(), 0, 100000, 100, false );
+	INIT_NUM( "factory_spacing", sets->get_factory_spacing(), 1, 32767, gui_numberinput_t::AUTOLINEAR, false );
+	INIT_NUM( "electric_promille", sets->get_electric_promille(), 0, 1000, gui_numberinput_t::AUTOLINEAR, false );
+	SEPERATOR
+	INIT_NUM( "passenger_factor",  sets->get_passenger_factor(), 0, 16, gui_numberinput_t::AUTOLINEAR, false );
+	INIT_NUM( "minimum_city_distance", stadt_t::get_minimum_city_distance(), 1, 20000, 10, false );
+	INIT_NUM( "factory_worker_radius", sets->get_factory_worker_radius(), 0, 32767, gui_numberinput_t::AUTOLINEAR, false );
+	INIT_NUM( "factory_worker_percentage", sets->get_factory_worker_percentage(), 0, 100, gui_numberinput_t::AUTOLINEAR, false );
+	INIT_NUM( "tourist_percentage", sets->get_tourist_percentage(), 0, 100, gui_numberinput_t::AUTOLINEAR, false );
+	SEPERATOR
+	INIT_NUM( "passenger_multiplier", sets->get_passenger_multiplier(), 0, 100, gui_numberinput_t::AUTOLINEAR, false );
+	INIT_NUM( "mail_multiplier", sets->get_mail_multiplier(), 0, 100, gui_numberinput_t::AUTOLINEAR, false );
+	INIT_NUM( "goods_multiplier", sets->get_goods_multiplier(), 0, 100, gui_numberinput_t::AUTOLINEAR, false );
+//	INIT_NUM( "electricity_multiplier", sets->get_electricity_multiplier(), 0, 10000, 10, false );
+	SEPERATOR
+	INIT_NUM( "growthfactor_villages", sets->get_growthfactor_small(), 1, 10000, 10, false );
+	INIT_NUM( "growthfactor_cities", sets->get_growthfactor_medium(), 1, 10000, 10, false );
+	INIT_NUM( "growthfactor_capitals", sets->get_growthfactor_large(), 1, 10000, 10, false );
+	SEPERATOR
+	INIT_BOOL( "random_pedestrians", sets->get_random_pedestrians() );
+	INIT_BOOL( "stop_pedestrians", sets->get_show_pax() );
+	INIT_NUM( "citycar_level", sets->get_verkehr_level(), 0, 16, 12, false );
+	INIT_NUM( "default_citycar_life", sets->get_stadtauto_duration(), 1, 1200, 12, false );
+
+	clear_dirty();
+	set_groesse( settings_stats_t::get_groesse() );
+}
+
+void settings_economy_stats_t::read( einstellungen_t *sets )
+{
+	EXIT_INIT
+	EXIT_COST( sets->set_starting_money );
+	EXIT_NUM( sets->set_pay_for_total_distance_mode );
+	EXIT_BOOL( sets->set_beginner_mode );
+	EXIT_NUM( sets->set_beginner_price_factor );
+	EXIT_BOOL( sets->set_just_in_time );
+	EXIT_BOOL( sets->set_crossconnect_factories );
+	EXIT_NUM( sets->set_crossconnect_factor );
+	EXIT_NUM( stadt_t::set_industry_increase );
+	EXIT_NUM( sets->set_factory_spacing );
+	EXIT_NUM( sets->set_electric_promille );
+	EXIT_NUM( sets->set_passenger_factor );
+	EXIT_NUM( stadt_t::set_minimum_city_distance );
+	EXIT_NUM( sets->set_factory_worker_radius );
+	EXIT_NUM( sets->set_factory_worker_percentage );
+	EXIT_NUM( sets->set_tourist_percentage );
+	EXIT_NUM( sets->set_passenger_multiplier );
+	EXIT_NUM( sets->set_mail_multiplier );
+	EXIT_NUM( sets->set_goods_multiplier );
+//	EXIT_NUM( sets->set_electricity_multiplier );
+	EXIT_NUM( sets->set_growthfactor_small );
+	EXIT_NUM( sets->set_growthfactor_medium );
+	EXIT_NUM( sets->set_growthfactor_large );
+	EXIT_BOOL( sets->set_random_pedestrians );
+	EXIT_BOOL( sets->set_show_pax );
+	EXIT_NUM( sets->set_verkehr_level );
+	EXIT_NUM( sets->set_stadtauto_duration );
+}
+
+
+
+void settings_costs_stats_t::init(einstellungen_t *sets)
+{
+	INIT_INIT
+	INIT_NUM( "maintenance_building", sets->maint_building/100, 1, 100000000, gui_numberinput_t::AUTOLINEAR, false );
+	INIT_COST( "cost_multiply_dock", -sets->cst_multiply_dock, 1, 100000000, 10, false );
+	INIT_COST( "cost_multiply_station", -sets->cst_multiply_station, 1, 100000000, 10, false );
+	INIT_COST( "cost_multiply_roadstop", -sets->cst_multiply_roadstop, 1, 100000000, 10, false );
+	INIT_COST( "cost_multiply_airterminal", -sets->cst_multiply_airterminal, 1, 100000000, 10, false );
+	INIT_COST( "cost_multiply_post", -sets->cst_multiply_post, 1, 100000000, 10, false );
+	INIT_COST( "cost_multiply_headquarter", -sets->cst_multiply_headquarter, 1, 100000000, 10, false );
+	INIT_COST( "cost_depot_air", -sets->cst_depot_air, 1, 100000000, 10, false );
+	INIT_COST( "cost_depot_rail", -sets->cst_depot_rail, 1, 100000000, 10, false );
+	INIT_COST( "cost_depot_road", -sets->cst_depot_road, 1, 100000000, 10, false );
+	INIT_COST( "cost_depot_ship", -sets->cst_depot_ship, 1, 100000000, 10, false );
+	INIT_COST( "cost_buy_land", -sets->cst_buy_land, 1, 100000000, 10, false );
+	INIT_COST( "cost_alter_land", -sets->cst_alter_land, 1, 100000000, 10, false );
+	INIT_COST( "cost_set_slope", -sets->cst_set_slope, 1, 100000000, 10, false );
+	INIT_COST( "cost_found_city", -sets->cst_found_city, 1, 100000000, 10, false );
+	INIT_COST( "cost_multiply_found_industry", -sets->cst_multiply_found_industry, 1, 100000000, 10, false );
+	INIT_COST( "cost_remove_tree", -sets->cst_remove_tree, 1, 100000000, 10, false );
+	INIT_COST( "cost_multiply_remove_haus", -sets->cst_multiply_remove_haus, 1, 100000000, 10, false );
+	INIT_COST( "cost_multiply_remove_field", -sets->cst_multiply_remove_field, 1, 100000000, 10, false );
+	INIT_COST( "cost_transformer", -sets->cst_transformer, 1, 100000000, 10, false );
+	INIT_COST( "cost_maintain_transformer", -sets->cst_maintain_transformer, 1, 100000000, 10, false );
+	set_groesse( settings_stats_t::get_groesse() );
+}
+
+void settings_costs_stats_t::read(einstellungen_t *sets)
+{
+	EXIT_INIT
+	EXIT_NUM_VALUE( sets->maint_building )*100;
+	EXIT_COST_VALUE( sets->cst_multiply_dock )*(-1);
+	EXIT_COST_VALUE( sets->cst_multiply_station )*(-1);
+	EXIT_COST_VALUE( sets->cst_multiply_roadstop )*(-1);
+	EXIT_COST_VALUE( sets->cst_multiply_airterminal )*(-1);
+	EXIT_COST_VALUE( sets->cst_multiply_post )*(-1);
+	EXIT_COST_VALUE( sets->cst_multiply_headquarter )*(-1);
+	EXIT_COST_VALUE( sets->cst_depot_air )*(-1);
+	EXIT_COST_VALUE( sets->cst_depot_rail )*(-1);
+	EXIT_COST_VALUE( sets->cst_depot_road )*(-1);
+	EXIT_COST_VALUE( sets->cst_depot_ship )*(-1);
+	EXIT_COST_VALUE( sets->cst_buy_land )*(-1);
+	EXIT_COST_VALUE( sets->cst_alter_land )*(-1);
+	EXIT_COST_VALUE( sets->cst_set_slope )*(-1);
+	EXIT_COST_VALUE( sets->cst_found_city )*(-1);
+	EXIT_COST_VALUE( sets->cst_multiply_found_industry )*(-1);
+	EXIT_COST_VALUE( sets->cst_remove_tree )*(-1);
+	EXIT_COST_VALUE( sets->cst_multiply_remove_haus )*(-1);
+	EXIT_COST_VALUE( sets->cst_multiply_remove_field )*(-1);
+	EXIT_COST_VALUE( sets->cst_transformer )*(-1);
+	EXIT_COST_VALUE( sets->cst_maintain_transformer )*(-1);
+
+	clear_dirty();
+	set_groesse( settings_stats_t::get_groesse() );
+}
+
diff --git a/gui/settings_stats.h b/gui/settings_stats.h
new file mode 100644
index 0000000..28daf36
--- /dev/null
+++ b/gui/settings_stats.h
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 1997 - 2003 Hansjörg Malthaner
+ *
+ * This file is part of the Simutrans project under the artistic licence.
+ * (see licence.txt)
+ */
+
+#ifndef settings_passenger_stats_h
+#define settings_passenger_stats_h
+
+#include <math.h>
+
+#include "../tpl/vector_tpl.h"
+#include "../tpl/array_tpl.h"
+
+#include "../ifc/gui_komponente.h"
+#include "gui_container.h"
+#include "components/gui_numberinput.h"
+#include "components/gui_label.h"
+#include "components/list_button.h"
+
+class einstellungen_t;
+
+/* With the following macros, elements could be added to the property lists.
+ * ATTENTION: In the init and read preocedures, the order of the item MUST be identical!
+ */
+
+// call this befor any init is done ...
+#define INIT_INIT \
+	width = 16;\
+	sint16 ypos = 4;\
+	remove_all();\
+	free_all();\
+	seperator = 0;\
+
+#define INIT_NUM(t,a,b,c,d,e) \
+{\
+	width = max(width, proportional_string_width(t)+66);\
+	gui_numberinput_t *ni = new gui_numberinput_t();\
+	ni->init( (a), (b), (c), (d), (e) );\
+	ni->set_pos( koord( 2, ypos ) );\
+	ni->set_groesse( koord( 37+7*max(1,(sint16)(log10((double)(c)+1.0)+0.5)), BUTTON_HEIGHT ) );\
+	numinp.append( ni );\
+	add_komponente( ni );\
+	gui_label_t *lb = new gui_label_t();\
+	lb->set_text_pointer(t);\
+	lb->set_pos( koord( ni->get_groesse().x+6, ypos ) );\
+	label.append( lb );\
+	add_komponente( lb );\
+	ypos += BUTTON_HEIGHT;\
+}\
+
+#define INIT_COST(t,a,b,c,d,e) \
+{\
+	width = max(width, proportional_string_width(t)+66);\
+	gui_numberinput_t *ni = new gui_numberinput_t();\
+	ni->init( (a)/(sint64)100, (b), (c), (d), (e) );\
+	ni->set_pos( koord( 2, ypos ) );\
+	ni->set_groesse( koord( 37+7*max(1,(sint16)(log10((double)(c)+1.0)+0.5)), BUTTON_HEIGHT ) );\
+	numinp.append( ni );\
+	add_komponente( ni );\
+	gui_label_t *lb = new gui_label_t();\
+	lb->set_text_pointer(t);\
+	lb->set_pos( koord( ni->get_groesse().x+6, ypos ) );\
+	label.append( lb );\
+	add_komponente( lb );\
+	ypos += BUTTON_HEIGHT;\
+}\
+
+#define INIT_LB(t) \
+{\
+	width = max(width, proportional_string_width(t)+4);\
+	gui_label_t *lb = new gui_label_t();\
+	lb->set_text_pointer(t);\
+	lb->set_pos( koord( 4, ypos ) );\
+	label.append( lb );\
+	add_komponente( lb );\
+	ypos += BUTTON_HEIGHT;\
+}\
+
+#define INIT_BOOL(t,a) \
+{\
+	width = max(width, proportional_string_width(t)+20);\
+	button_t *bt = new button_t();\
+	bt->init( button_t::square_automatic, (t), koord( 2, ypos ) );\
+	bt->pressed = (a);\
+	button.append( bt );\
+	add_komponente( bt );\
+	ypos += BUTTON_HEIGHT;\
+}\
+
+#define SEPERATOR \
+	ypos += 7;\
+	seperator += 1;\
+
+
+// call this before and EXIT_...
+#define EXIT_INIT \
+	uint32 read_numinp = 0;\
+	uint32 read_button = 0;\
+
+#define EXIT_NUM(t) (t)( numinp.at(read_numinp++)->get_value() )
+#define EXIT_COST(t) (t)( (sint64)(numinp.at(read_numinp++)->get_value())*100 )
+#define EXIT_NUM_VALUE(t) (t) = numinp.at(read_numinp++)->get_value()
+#define EXIT_COST_VALUE(t) (t) = (sint64)(numinp.at(read_numinp++)->get_value())*100
+#define EXIT_BOOL(t) (t)( button.at(read_button++)->pressed )
+#define EXIT_BOOL_VALUE(t) (t) = button.at(read_button++)->pressed
+
+
+/**
+ * Settings for property lists ...
+ * @author Hj. Malthaner
+ */
+class settings_stats_t
+{
+protected:
+	sint16 width, seperator;
+	// since the copy constructor will no copy the right action listener => pointer
+	slist_tpl<gui_label_t *> label;
+	slist_tpl<gui_numberinput_t *> numinp;
+	slist_tpl<button_t *> button;
+
+public:
+	settings_stats_t() { width = 16; }
+	~settings_stats_t() { free_all(); }
+
+	void free_all();
+
+	void init( einstellungen_t *sets );
+	void read( einstellungen_t *sets );
+
+	koord get_groesse() const {
+		return koord(width,(button.get_count()+label.get_count())*BUTTON_HEIGHT+seperator*7+6);
+	}
+};
+
+
+
+// the only task left are the respective init/reading routines
+class settings_general_stats_t : protected settings_stats_t, public gui_container_t
+{
+public:
+	void init( einstellungen_t *sets );
+	void read( einstellungen_t *sets );
+};
+
+class settings_routing_stats_t : protected settings_stats_t, public gui_container_t
+{
+public:
+	void init( einstellungen_t *sets );
+	void read( einstellungen_t *sets );
+};
+
+class settings_economy_stats_t : protected settings_stats_t, public gui_container_t
+{
+public:
+	void init( einstellungen_t *sets );
+	void read( einstellungen_t *sets );
+};
+
+class settings_costs_stats_t : protected settings_stats_t, public gui_container_t
+{
+public:
+	void init( einstellungen_t *sets );
+	void read( einstellungen_t *sets );
+};
+
+
+
+#endif
diff --git a/gui/sprachen.cc b/gui/sprachen.cc
index d06150c..83997d4 100644
--- a/gui/sprachen.cc
+++ b/gui/sprachen.cc
@@ -83,7 +83,7 @@ void sprachengui_t::init_font_from_lang()
 sprachengui_t::sprachengui_t() :
 	gui_frame_t("Sprachen"),
 	text_label(translator::translate("LANG_CHOOSE\n")),
-	flags(skinverwaltung_t::flaggensymbol->get_bild_nr(0)),
+	flags(skinverwaltung_t::flaggensymbol?skinverwaltung_t::flaggensymbol->get_bild_nr(0):IMG_LEER),
 	buttons(translator::get_language_count())
 {
 	text_label.set_pos( koord(10,0) );
@@ -136,7 +136,9 @@ sprachengui_t::sprachengui_t() :
 	}
 	chdir(umgebung_t::user_dir);
 
-	buttons[translator::get_language()].pressed = true;
+	if(  translator::get_language()>0  ) {
+		buttons[translator::get_language()].pressed = true;
+	}
 	set_fenstergroesse( koord(220, 74+(translator::get_language_count()/2)*14) );
 }
 
@@ -147,12 +149,14 @@ sprachengui_t::action_triggered( gui_action_creator_t *komp, value_t)
 {
 	for(int i=0; i<translator::get_language_count(); i++) {
 		button_t& b = buttons[i];
-		if (&b == komp) {
-			buttons[translator::get_language()].pressed = false;
+		if(&b == komp) {
 			b.pressed = true;
 			translator::set_language(i);
 			init_font_from_lang();
 		}
+		else {
+			b.pressed = false;
+		}
 	}
 	return true;
 }
diff --git a/gui/sprachen.h b/gui/sprachen.h
index 846ec80..29cf826 100644
--- a/gui/sprachen.h
+++ b/gui/sprachen.h
@@ -19,37 +19,37 @@
 class sprachengui_t : public gui_frame_t, private action_listener_t
 {
 private:
-    gui_textarea_t text_label;
-    gui_image_t flags;
-    array_tpl<button_t> buttons;
-    gui_divider_t seperator;
+	gui_textarea_t text_label;
+	gui_image_t flags;
+	array_tpl<button_t> buttons;
+	gui_divider_t seperator;
 
 public:
-    /**
-     * Causes the required fonts for currently selected
-     * language to be loaded
-     * @author Hj. Malthaner
-     */
-    static void init_font_from_lang();
-
-		sprachengui_t();
-
-    /**
-     * Manche Fenster haben einen Hilfetext assoziiert.
-     * @return den Dateinamen für die Hilfe, oder NULL
-     * @author Hj. Malthaner
-     */
-    const char * get_hilfe_datei() const {return "language.txt";}
-
-    /**
-     * This method is called if an action is triggered
-     * @author Hj. Malthaner
-     *
-     * Returns true, if action is done and no more
-     * components should be triggered.
-     * V.Meyer
-     */
-    bool action_triggered( gui_action_creator_t *komp, value_t extra);
+	/**
+	 * Causes the required fonts for currently selected
+	 * language to be loaded
+	 * @author Hj. Malthaner
+	 */
+	static void init_font_from_lang();
+
+	sprachengui_t();
+
+	/**
+	 * Manche Fenster haben einen Hilfetext assoziiert.
+	 * @return den Dateinamen für die Hilfe, oder NULL
+	 * @author Hj. Malthaner
+	 */
+	const char *get_hilfe_datei() const {return "language.txt";}
+
+	/**
+	 * This method is called if an action is triggered
+	 * @author Hj. Malthaner
+	 *
+	 * Returns true, if action is done and no more
+	 * components should be triggered.
+	 * V.Meyer
+	 */
+	bool action_triggered( gui_action_creator_t *komp, value_t extra);
 };
 
 #endif
diff --git a/gui/stadt_info.cc b/gui/stadt_info.cc
index e467b36..50027f7 100644
--- a/gui/stadt_info.cc
+++ b/gui/stadt_info.cc
@@ -11,20 +11,25 @@
 #include "../simcolor.h"
 #include "../dataobj/translator.h"
 #include "../dataobj/umgebung.h"
+#include "../utils/cbuffer_t.h"
 #include "../utils/simstring.h"
 #include "components/list_button.h"
 
 #include "stadt_info.h"
+#include "karte.h"
 
 #include "../simgraph.h"
 
+#define PAX_DEST_X (140)
+#define PAX_DEST_Y (24)
+#define PAX_DEST_MARGIN (4)
 
 // @author hsiegeln
 const char *hist_type[MAX_CITY_HISTORY] =
 {
-  "citicens", "Growth", "Buildings", "Verkehrsteilnehmer",
-  "Transported", "Passagiere", "sended", "Post",
-  "Arrived", "Goods", "Electricity"
+	"citicens", "Growth", "Buildings", "Verkehrsteilnehmer",
+	"Transported", "Passagiere", "sended", "Post",
+	"Arrived", "Goods", "Electricity"
 };
 
 
@@ -37,7 +42,7 @@ const int hist_type_color[MAX_CITY_HISTORY] =
 
 
 stadt_info_t::stadt_info_t(stadt_t* stadt_) :
-  gui_frame_t("Stadtinformation"),
+	gui_frame_t("Stadtinformation"),
 	stadt(stadt_)
 {
 	tstrncpy( name, stadt->get_name(), 256 );
@@ -48,15 +53,19 @@ stadt_info_t::stadt_info_t(stadt_t* stadt_) :
 	add_komponente(&name_input);
 	set_fenstergroesse(koord(410, 305+20+20));
 
+	allow_growth.init( button_t::square_state, "Allow city growth", koord(8,104) );;
+	allow_growth.pressed = stadt->get_citygrowth();
+	allow_growth.add_listener( this );
+	add_komponente(&allow_growth);
+
 	//CHART YEAR
 	chart.set_pos(koord(1,1));
 	chart.set_groesse(koord(360,120));
 	chart.set_dimension(MAX_CITY_HISTORY_YEARS, 10000);
 	chart.set_seed(stadt->get_welt()->get_last_year());
 	chart.set_background(MN_GREY1);
-	int i;
-	for (i = 0; i<MAX_CITY_HISTORY; i++) {
-		chart.add_curve(hist_type_color[i], stadt->get_city_history_year(), MAX_CITY_HISTORY, i, 12, STANDARD, (stadt->stadtinfo_options & (1<<i))!=0, true);
+	for(  uint32 i = 0;  i<MAX_CITY_HISTORY;  i++  ) {
+		chart.add_curve( hist_type_color[i], stadt->get_city_history_year(), MAX_CITY_HISTORY, i, 12, STANDARD, (stadt->stadtinfo_options & (1<<i))!=0, true, 0 );
 	}
 	//CHART YEAR END
 
@@ -66,8 +75,8 @@ stadt_info_t::stadt_info_t(stadt_t* stadt_) :
 	mchart.set_dimension(MAX_CITY_HISTORY_MONTHS, 10000);
 	mchart.set_seed(0);
 	mchart.set_background(MN_GREY1);
-	for (i = 0; i<MAX_CITY_HISTORY; i++) {
-		mchart.add_curve(hist_type_color[i], stadt->get_city_history_month(), MAX_CITY_HISTORY, i, 12, STANDARD, (stadt->stadtinfo_options & (1<<i))!=0, true);
+	for(  uint32 i = 0;  i<MAX_CITY_HISTORY;  i++  ) {
+		mchart.add_curve( hist_type_color[i], stadt->get_city_history_month(), MAX_CITY_HISTORY, i, 12, STANDARD, (stadt->stadtinfo_options & (1<<i))!=0, true, 0 );
 	}
 	mchart.set_visible(false);
 	//CHART MONTH END
@@ -88,11 +97,49 @@ stadt_info_t::stadt_info_t(stadt_t* stadt_) :
 		filterButtons[hist].add_listener(this);
 		add_komponente(filterButtons + hist);
 	}
+
+	pax_dest_old = new uint8[PAX_DESTINATIONS_SIZE*PAX_DESTINATIONS_SIZE];
+	pax_dest_new = new uint8[PAX_DESTINATIONS_SIZE*PAX_DESTINATIONS_SIZE];
+
+	init_pax_dest(pax_dest_old);
+	memcpy(pax_dest_new, pax_dest_old, PAX_DESTINATIONS_SIZE*PAX_DESTINATIONS_SIZE*sizeof(uint8));
+
+	add_pax_dest( pax_dest_old, stadt->get_pax_destinations_old());
+	add_pax_dest( pax_dest_new, stadt->get_pax_destinations_new());
+	pax_destinations_last_change = stadt->get_pax_destinations_new_change();
+}
+
+
+
+
+void stadt_info_t::init_pax_dest( uint8* pax_dest )
+{
+	const int gr_x = stadt_t::get_welt()->get_groesse_x();
+	const int gr_y = stadt_t::get_welt()->get_groesse_y();
+	for( uint16 i = 0; i < PAX_DESTINATIONS_SIZE; i++ ) {
+		for( uint16 j = 0; j < PAX_DESTINATIONS_SIZE; j++ ) {
+			const koord pos(i * gr_x / PAX_DESTINATIONS_SIZE, j * gr_y / PAX_DESTINATIONS_SIZE);
+			const grund_t* gr = stadt_t::get_welt()->lookup(pos)->get_kartenboden();
+			pax_dest[j*PAX_DESTINATIONS_SIZE+i] = reliefkarte_t::calc_relief_farbe(gr);
+		}
+	}
+}
+
+
+
+void stadt_info_t::add_pax_dest( uint8* pax_dest, const sparse_tpl< uint8 >* city_pax_dest )
+{
+	uint8 color;
+	koord pos;
+	for( uint16 i = 0;  i < city_pax_dest->get_data_count();  i++  ) {
+		city_pax_dest->get_nonzero(i, pos, color);
+		pax_dest[pos.y*PAX_DESTINATIONS_SIZE+pos.x] = color;
+	}
 }
 
 
-void
-stadt_info_t::zeichnen(koord pos, koord gr)
+
+void stadt_info_t::zeichnen(koord pos, koord gr)
 {
 	stadt_t* const c = stadt;
 
@@ -105,61 +152,114 @@ stadt_info_t::zeichnen(koord pos, koord gr)
 
 	gui_frame_t::zeichnen(pos, gr);
 
-	char buf[1024];
-	char* b = buf;
-	b += sprintf(b, "%s: %d (%+.1f)\n",
-		translator::translate("City size"),
-		c->get_einwohner(),
-		c->get_wachstum() / 10.0
-	);
+	static cbuffer_t buf(1024);
+	buf.clear();
 
-	b += sprintf(b, translator::translate("%d buildings\n"), c->get_buildings());
+	buf.append( translator::translate("City size") );
+	buf.append( ": " );
+	buf.append( c->get_einwohner(), 0 );
+	buf.append( " (" );
+	buf.append( c->get_wachstum() / 10.0, 1 );
+	buf.append( ") \n" );
+	buf.printf( translator::translate("%d buildings\n"), c->get_buildings() );
 
 	const koord ul = c->get_linksoben();
 	const koord lr = c->get_rechtsunten();
-	b += sprintf(b, "\n%d,%d - %d,%d\n\n", ul.x, ul.y, lr.x , lr.y);
-
-	b += sprintf(b, "%s: %d\n%s: %d\n\n",
-		translator::translate("Unemployed"),
-		c->get_unemployed(),
-		translator::translate("Homeless"),
-		c->get_homeless()
-	);
+	buf.printf( "\n%d,%d - %d,%d\n\n", ul.x, ul.y, lr.x , lr.y);
 
-	display_multiline_text(pos.x+8, pos.y+48, buf, COL_BLACK);
+	buf.append( translator::translate("Unemployed") );
+	buf.append( ": " );
+	buf.append( c->get_unemployed(), 0 );
+	buf.append( "\n" );
+	buf.append( translator::translate("Homeless") );
+	buf.append( ": " );
+	buf.append( c->get_homeless(), 0 );
 
-	display_array_wh(pos.x + 140,           pos.y + 24, 128, 128, c->get_pax_ziele_alt()->to_array());
-	display_array_wh(pos.x + 140 + 128 + 4, pos.y + 24, 128, 128, c->get_pax_ziele_neu()->to_array());
+	display_multiline_text(pos.x+8, pos.y+48, (const char *)buf, COL_BLACK);
 
-#if 0
-    sprintf(buf, "%s: %d/%d",
-            translator::translate("Passagiere"),
-            stadt->get_pax_transport(),
-            stadt->get_pax_erzeugt());
+	const unsigned long current_pax_destinations = c->get_pax_destinations_new_change();
+	if(  pax_destinations_last_change > current_pax_destinations  ) {
+		// new month started
+		sim::swap<uint8 *>( pax_dest_old, pax_dest_new );
+		init_pax_dest( pax_dest_new );
+		add_pax_dest( pax_dest_new, c->get_pax_destinations_new());
+	}
+	else if(  pax_destinations_last_change != current_pax_destinations  ) {
+		// Since there are only new colors, this is enough:
+		add_pax_dest( pax_dest_new, c->get_pax_destinations_new() );
+	}
+	pax_destinations_last_change =  current_pax_destinations;
 
-    display_proportional(pos.x+144, pos.y+180, buf, ALIGN_LEFT, COL_BLACK, true);
-#endif
+	display_array_wh(pos.x + PAX_DEST_X, pos.y + PAX_DEST_Y, PAX_DESTINATIONS_SIZE, PAX_DESTINATIONS_SIZE, pax_dest_old);
+	display_array_wh(pos.x + PAX_DEST_X + PAX_DESTINATIONS_SIZE + PAX_DEST_MARGIN, pos.y + PAX_DEST_Y, PAX_DESTINATIONS_SIZE, PAX_DESTINATIONS_SIZE, pax_dest_new);
 }
 
 
 
 bool stadt_info_t::action_triggered( gui_action_creator_t *komp,value_t /* */)
 {
-	for ( int i = 0; i<MAX_CITY_HISTORY; i++) {
-		if (komp == &filterButtons[i]) {
-			filterButtons[i].pressed ^= 1;
-			if (filterButtons[i].pressed) {
-				stadt->stadtinfo_options |= (1<<i);
-				chart.show_curve(i);
-				mchart.show_curve(i);
-			}
-			else {
-				stadt->stadtinfo_options &= ~(1<<i);
-				chart.hide_curve(i);
-				mchart.hide_curve(i);
+	if(  komp==&allow_growth  ) {
+		stadt->set_citygrowth_yesno( !stadt->get_citygrowth() );
+		allow_growth.pressed = stadt->get_citygrowth();
+		return true;
+	}
+	else {
+		for ( int i = 0; i<MAX_CITY_HISTORY; i++) {
+			if (komp == &filterButtons[i]) {
+				filterButtons[i].pressed ^= 1;
+				if (filterButtons[i].pressed) {
+					stadt->stadtinfo_options |= (1<<i);
+					chart.show_curve(i);
+					mchart.show_curve(i);
+				}
+				else {
+					stadt->stadtinfo_options &= ~(1<<i);
+					chart.hide_curve(i);
+					mchart.hide_curve(i);
+				}
+				return true;
 			}
-			return true;
 		}
 	}
 	return false;
 }
+
+
+
+void stadt_info_t::map_rotate90( sint16 )
+{
+	init_pax_dest(pax_dest_old);
+	memcpy(pax_dest_new, pax_dest_old, PAX_DESTINATIONS_SIZE*PAX_DESTINATIONS_SIZE*sizeof(uint8));
+
+	add_pax_dest( pax_dest_old, stadt->get_pax_destinations_old());
+	add_pax_dest( pax_dest_new, stadt->get_pax_destinations_new());
+	pax_destinations_last_change = stadt->get_pax_destinations_new_change();
+}
+
+
+
+
+// curretn task: just update the city pointer ...
+void stadt_info_t::infowin_event(const event_t *ev)
+{
+	if(  IS_WINDOW_TOP(ev)  ) {
+		reliefkarte_t::get_karte()->set_city( stadt );
+	}
+	if( ev->ev_code == MOUSE_LEFTBUTTON  &&  PAX_DEST_Y <= ev->my  &&  ev->my < PAX_DEST_Y + PAX_DESTINATIONS_SIZE  ) {
+		uint16 mx = ev->mx;
+		if( mx > PAX_DEST_X + PAX_DESTINATIONS_SIZE ) {
+			// Little trick to handle both maps with the same code: Just remap the x-values of the right map.
+			mx -= PAX_DESTINATIONS_SIZE + PAX_DEST_MARGIN;
+		}
+		if( PAX_DEST_X <= mx && mx < PAX_DEST_X + PAX_DESTINATIONS_SIZE ) {
+			// Clicked in a minimap.
+			mx -= PAX_DEST_X;
+			const uint16 my = ev->my - PAX_DEST_Y;
+			const koord p = koord(
+				(mx * stadt->get_welt()->get_groesse_x()) / (PAX_DESTINATIONS_SIZE),
+				(my * stadt->get_welt()->get_groesse_y()) / (PAX_DESTINATIONS_SIZE));
+			stadt->get_welt()->change_world_position( p );
+		}
+	}
+	gui_frame_t::infowin_event(ev);
+}
diff --git a/gui/stadt_info.h b/gui/stadt_info.h
index 9dcec23..a883e6d 100644
--- a/gui/stadt_info.h
+++ b/gui/stadt_info.h
@@ -19,6 +19,7 @@
 #include "components/gui_tab_panel.h"
 
 class stadt_t;
+template <class T> class sparse_tpl;
 
 /**
  * Dies stellt ein Fenster mit den Informationen
@@ -33,6 +34,8 @@ private:
 
 	stadt_t *stadt;
 
+    button_t allow_growth;
+
 	gui_textinput_t name_input;
 
 	gui_tab_panel_t year_month_tabs;
@@ -42,6 +45,14 @@ private:
 	button_t filterButtons[MAX_CITY_HISTORY];
 	bool bFilterIsActive[MAX_CITY_HISTORY];
 
+	uint8* pax_dest_old;
+	uint8* pax_dest_new;
+
+	unsigned long pax_destinations_last_change;
+
+	void init_pax_dest( uint8* pax_dest );
+	void add_pax_dest( uint8* pax_dest, const sparse_tpl< uint8 >* city_pax_dest );
+
 public:
 	stadt_info_t(stadt_t *stadt);
 
@@ -50,7 +61,7 @@ public:
 	 * @return den Dateinamen für die Hilfe, oder NULL
 	 * @author Hj. Malthaner
 	 */
-	const char * get_hilfe_datei() const {return "citywindow.txt";}
+	const char *get_hilfe_datei() const {return "citywindow.txt";}
 
 	/**
 	* komponente neu zeichnen. Die übergebenen Werte beziehen sich auf
@@ -59,15 +70,20 @@ public:
 	*/
 	void zeichnen(koord pos, koord gr);
 
-    /**
-     * This method is called if an action is triggered
-     * @author Hj. Malthaner
-     *
-     * Returns true, if action is done and no more
-     * components should be triggered.
-     * V.Meyer
-     */
-    bool action_triggered( gui_action_creator_t *komp, value_t extra);
+	/**
+	 * This method is called if an action is triggered
+	 * @author Hj. Malthaner
+	 *
+	 * Returns true, if action is done and no more
+	 * components should be triggered.
+	 * V.Meyer
+	 */
+	bool action_triggered( gui_action_creator_t *komp, value_t extra);
+
+	void map_rotate90( sint16 );
+
+	// since we need to update the city pointer when topped
+	void infowin_event(const event_t *ev);
 };
 
 #endif
diff --git a/gui/station_building_select.h b/gui/station_building_select.h
index 5afbb2b..f134d4c 100644
--- a/gui/station_building_select.h
+++ b/gui/station_building_select.h
@@ -16,10 +16,10 @@
 #include "components/gui_image.h"
 #include "components/gui_textarea.h"
 #include "components/gui_textinput.h"
-#include "../besch/haus_besch.h"
 
 #include "../simwerkz.h"
 
+class haus_besch_t;
 class karte_t;
 
 class station_building_select_t : public gui_frame_t, action_listener_t
diff --git a/gui/thing_info.cc b/gui/thing_info.cc
index a1f7185..bbe4a68 100644
--- a/gui/thing_info.cc
+++ b/gui/thing_info.cc
@@ -88,7 +88,7 @@ ding_infowin_t::calc_draw_info( koord pos, bool draw ) const
 			}
 			else {
 				// normal char: retrieve and calculate width
-				int len = 0;
+				size_t len = 0;
 				int ch_width = display_get_char_width( unicode ? utf8_to_utf16((const utf8 *)p, &len) : *p++ );
 				p += len;
 				x += ch_width;
@@ -109,7 +109,7 @@ ding_infowin_t::calc_draw_info( koord pos, bool draw ) const
 
 		// start of new line or end of text
 		if(draw  &&  (line_end-line_start)!=0) {
-			display_text_proportional_len_clip( pos.x+10, pos.y+y+16, (const char *)line_start, ALIGN_LEFT, COL_BLACK, line_end - line_start);
+			display_text_proportional_len_clip( pos.x+10, pos.y+y+16, (const char *)line_start, ALIGN_LEFT, COL_BLACK, (size_t)(line_end - line_start) );
 		}
 		y += LINESPACE;
 		// back to start of new line
diff --git a/gui/welt.cc b/gui/welt.cc
index 327c46f..a36c58a 100644
--- a/gui/welt.cc
+++ b/gui/welt.cc
@@ -18,6 +18,11 @@
 #include "../simimg.h"
 #include "../simtools.h"
 
+#include "../bauer/hausbauer.h"
+#include "../bauer/wegbauer.h"
+
+#include "../besch/haus_besch.h"
+
 #include "../dataobj/einstellungen.h"
 #include "../dataobj/umgebung.h"
 #include "../dataobj/translator.h"
@@ -37,6 +42,10 @@
 #include "../utils/simstring.h"
 #include "components/list_button.h"
 
+#include "sprachen.h"
+#include "climates.h"
+#include "settings_frame.h"
+
 #define START_HEIGHT (28)
 
 #define LEFT_ARROW (110)
@@ -60,6 +69,20 @@ DBG_MESSAGE("","sizeof(stat)=%d, sizeof(tm)=%d",sizeof(struct stat),sizeof(struc
 	this->sets = sets;
 	this->old_lang = -1;
 	this->sets->set_beginner_mode(umgebung_t::default_einstellungen.get_beginner_mode());
+
+	// find earliest start date ...
+	uint16 game_start = 2999;
+	// first townhalls
+	slist_iterator_tpl<const haus_besch_t*> iter(hausbauer_t::get_list(haus_besch_t::rathaus));
+	while(  iter.next()  ) {
+		uint16 year = (iter.get_current()->get_intro_year_month()+11)/12;
+		if(  year<game_start  ) {
+			game_start = year;
+		}
+	}
+	// then streets
+	game_start = max( game_start, (wegbauer_t::get_earliest_way(road_wt)->get_intro_year_month()+11)/12 );
+
 	loaded_heightfield = load_heightfield = false;
 	load = start = close = scenario = quit = false;
 	int intTopOfButton=START_HEIGHT;
@@ -80,7 +103,7 @@ DBG_MESSAGE("","sizeof(stat)=%d, sizeof(tm)=%d",sizeof(struct stat),sizeof(struc
 	inp_x_size.set_groesse(koord(RIGHT_ARROW-LEFT_ARROW+10, 12));
 	inp_x_size.add_listener(this);
 	inp_x_size.set_value( sets->get_groesse_x() );
-	inp_x_size.set_limits( 64, min(32766,4194304/sets->get_groesse_y()) );
+	inp_x_size.set_limits( 8, min(32766,4194304/sets->get_groesse_y()) );
 	inp_x_size.set_increment_mode( sets->get_groesse_x()>=512 ? 128 : 64 );
 	inp_x_size.wrap_mode( false );
 	add_komponente( &inp_x_size );
@@ -89,7 +112,7 @@ DBG_MESSAGE("","sizeof(stat)=%d, sizeof(tm)=%d",sizeof(struct stat),sizeof(struc
 	inp_y_size.set_pos(koord(LEFT_ARROW,intTopOfButton) );
 	inp_y_size.set_groesse(koord(RIGHT_ARROW-LEFT_ARROW+10, 12));
 	inp_y_size.add_listener(this);
-	inp_y_size.set_limits( 64, min(32766,4194304/sets->get_groesse_x()) );
+	inp_y_size.set_limits( 8, min(32766,4194304/sets->get_groesse_x()) );
 	inp_y_size.set_value( sets->get_groesse_y() );
 	inp_y_size.set_increment_mode( sets->get_groesse_y()>=512 ? 128 : 64 );
 	inp_y_size.wrap_mode( false );
@@ -129,7 +152,6 @@ DBG_MESSAGE("","sizeof(stat)=%d, sizeof(tm)=%d",sizeof(struct stat),sizeof(struc
 	add_komponente( &inp_town_size );
 	intTopOfButton += 12;
 
-
 	inp_intercity_road_len.set_pos(koord(RIGHT_COLUMN,intTopOfButton) );
 	inp_intercity_road_len.set_groesse(koord(RIGHT_COLUMN_WIDTH, 12));
 	inp_intercity_road_len.add_listener(this);
@@ -184,13 +206,12 @@ DBG_MESSAGE("","sizeof(stat)=%d, sizeof(tm)=%d",sizeof(struct stat),sizeof(struc
 	inp_intro_date.set_pos(koord(RIGHT_COLUMN,intTopOfButton) );
 	inp_intro_date.set_groesse(koord(RIGHT_COLUMN_WIDTH, 12));
 	inp_intro_date.add_listener(this);
-	inp_intro_date.set_limits(1400,2050);
+	inp_intro_date.set_limits(game_start,2999);
 	inp_intro_date.set_increment_mode(10);
 	inp_intro_date.set_value(abs(sets->get_starting_year()) );
 	add_komponente( &inp_intro_date );
 	intTopOfButton += 12;
 
-	intTopOfButton += 5;
 	allow_player_change.set_pos( koord(10,intTopOfButton) );
 	allow_player_change.set_typ( button_t::square_state );
 	allow_player_change.add_listener( this );
@@ -198,12 +219,22 @@ DBG_MESSAGE("","sizeof(stat)=%d, sizeof(tm)=%d",sizeof(struct stat),sizeof(struc
 	add_komponente( &allow_player_change );
 	intTopOfButton += 12;
 
-	intTopOfButton += 5;
-	use_beginner_mode.set_pos( koord(10,intTopOfButton) );
-	use_beginner_mode.set_typ( button_t::square_state );
-	use_beginner_mode.add_listener( this );
-	use_beginner_mode.pressed = sets->get_beginner_mode();
-	add_komponente( &use_beginner_mode );
+	intTopOfButton += 10;
+	open_setting_gui.set_pos( koord(10,intTopOfButton) );
+	open_setting_gui.set_groesse( koord(80, 14) );
+	open_setting_gui.set_typ( button_t::roundbox );
+	open_setting_gui.set_text("Setting");
+	open_setting_gui.add_listener( this );
+	open_setting_gui.pressed = win_get_magic( magic_settings_frame_t );
+	add_komponente( &open_setting_gui );
+
+	open_climate_gui.set_pos( koord(80+20,intTopOfButton) );
+	open_climate_gui.set_groesse( koord(150, 14) );
+	open_climate_gui.set_typ( button_t::roundbox );
+	open_climate_gui.add_listener( this );
+	open_climate_gui.set_text("Climate Control");
+	open_climate_gui.pressed = win_get_magic( magic_climate );
+	add_komponente( &open_climate_gui );
 	intTopOfButton += 12;
 
 	// load game
@@ -339,14 +370,14 @@ welt_gui_t::action_triggered( gui_action_creator_t *komp,value_t v)
 
 	if(komp==&inp_x_size) {
 		sets->set_groesse_x( v.i );
-		inp_x_size.set_increment_mode( v.i>=512 ? 128 : 64 );
-		inp_y_size.set_limits( 64, min(32766,16777216/sets->get_groesse_x()) );
+		inp_x_size.set_increment_mode( v.i>=64 ? (v.i>=512 ? 128 : 64) : 8 );
+		inp_y_size.set_limits( 8, min(32766,16777216/sets->get_groesse_x()) );
 		update_preview();
 	}
 	else if(komp==&inp_y_size) {
 		sets->set_groesse_y( v.i );
-		inp_y_size.set_increment_mode( v.i>=512 ? 128 : 64 );
-		inp_x_size.set_limits( 64, min(32766,16777216/sets->get_groesse_y()) );
+		inp_y_size.set_increment_mode( v.i>=64 ? (v.i>=512 ? 128 : 64) : 8 );
+		inp_x_size.set_limits( 8, min(32766,16777216/sets->get_groesse_y()) );
 		update_preview();
 	}
 	else if(komp==&inp_number_of_towns) {
@@ -396,9 +427,28 @@ welt_gui_t::action_triggered( gui_action_creator_t *komp,value_t v)
 		sets->set_allow_player_change( allow_player_change.pressed^1 );
 		allow_player_change.pressed = sets->get_allow_player_change();
 	}
-	else if(komp==&use_beginner_mode) {
-		sets->set_beginner_mode( use_beginner_mode.pressed^1 );
-		use_beginner_mode.pressed = sets->get_beginner_mode();
+	else if(komp==&open_setting_gui) {
+		gui_fenster_t *sg = win_get_magic( magic_settings_frame_t );
+		if(  sg  ) {
+			destroy_win( sg );
+			open_setting_gui.pressed = false;
+		}
+		else {
+			create_win(10, 40, new settings_frame_t(sets), w_info, magic_settings_frame_t );
+			open_setting_gui.pressed = true;
+		}
+	}
+	else if(komp==&open_climate_gui) {
+		gui_fenster_t *climate_gui = win_get_magic( magic_climate );
+		if(  climate_gui  ) {
+			destroy_win( climate_gui );
+			open_climate_gui.pressed = false;
+		}
+		else {
+			climate_gui_t *cg = new climate_gui_t(sets);
+			create_win((display_get_width() - cg->get_fenstergroesse().x-10), 40, cg, w_info, magic_climate );
+			open_climate_gui.pressed = true;
+		}
 	}
 	else if(komp==&load_game) {
 		load = true;
@@ -460,7 +510,9 @@ void welt_gui_t::zeichnen(koord pos, koord gr)
 		load_map.set_tooltip("load height data from file");
 		use_intro_dates.set_text("Use timeline start year");
 		allow_player_change.set_text("Allow player change");
-		use_beginner_mode.set_text("Beginner mode");
+//		use_beginner_mode.set_text("Beginner mode");
+		open_setting_gui.set_text("Setting");
+		open_climate_gui.set_text("Climate Control");
 		load_game.set_text("Load game");
 		load_scenario.set_text("Load scenario");
 		start_game.set_text("Starte Spiel");
@@ -469,6 +521,9 @@ void welt_gui_t::zeichnen(koord pos, koord gr)
 		welt->set_dirty();
 	}
 
+	open_climate_gui.pressed = win_get_magic( magic_climate );
+	open_setting_gui.pressed = win_get_magic( magic_settings_frame_t );
+
 	gui_frame_t::zeichnen(pos, gr);
 
 	char buf[256];
@@ -526,5 +581,7 @@ void welt_gui_t::zeichnen(koord pos, koord gr)
 	y += 12+5;
 	y += 12+5;
 
+	display_ddd_box_clip(x, y-22, 240, 0, MN_GREY0, MN_GREY4);
+
 	display_ddd_box_clip(x, y, 240, 0, MN_GREY0, MN_GREY4);
 }
diff --git a/gui/welt.h b/gui/welt.h
index e3c6866..b038498 100644
--- a/gui/welt.h
+++ b/gui/welt.h
@@ -27,7 +27,7 @@ class einstellungen_t;
 class welt_gui_t  : public gui_frame_t, private action_listener_t
 {
 private:
-	einstellungen_t * sets;
+	einstellungen_t *sets;
 
 	enum { preview_size = 64 };
 
@@ -63,7 +63,8 @@ private:
 
 	button_t use_intro_dates;
 	button_t allow_player_change;
-	button_t use_beginner_mode;
+
+	button_t open_climate_gui, open_setting_gui;
 
 	button_t load_game;
 	button_t load_scenario;
@@ -88,7 +89,7 @@ public:
 	* public, because also the climate dialog need it
 	* @author Hj. Malthaner
 	*/
-	void  update_preview();
+	void update_preview();
 	void clear_loaded_heightfield() { loaded_heightfield =0; }
 	bool get_loaded_heightfield() const { return loaded_heightfield; }
 
diff --git a/gui/werkzeug_waehler.cc b/gui/werkzeug_waehler.cc
index 3c42c1b..3131f70 100644
--- a/gui/werkzeug_waehler.cc
+++ b/gui/werkzeug_waehler.cc
@@ -64,6 +64,7 @@ DBG_DEBUG("werkzeug_waehler_t::add_tool()", "at position %i (width %i)", tools.g
 // reset the tools to empty state
 void werkzeug_waehler_t::reset_tools()
 {
+	welt->set_dirty();
 	for(  int i=tools.get_count();  i>0;  ) {
 		i--;
 		tools.remove_at(i);
@@ -131,9 +132,7 @@ void werkzeug_waehler_t::zeichnen(koord pos, koord)
 		}
 		else {
 			display_color_img(icon_img, draw_pos.x, draw_pos.y, 0, false, dirty);
-			if(  tools[i]->is_selected(welt)  ) {
-				display_img_blend( icon_img, draw_pos.x, draw_pos.y, TRANSPARENT50_FLAG|OUTLINE_FLAG|COL_BLACK, false, dirty);
-			}
+			tools[i]->draw_after( welt, draw_pos );
 		}
 	}
 
diff --git a/music/core-audio_midi.mm b/music/core-audio_midi.mm
old mode 100644
new mode 100755
diff --git a/player/ai.cc b/player/ai.cc
old mode 100644
new mode 100755
index d102211..635791f
--- a/player/ai.cc
+++ b/player/ai.cc
@@ -9,8 +9,10 @@
 
 #include "ai.h"
 
+#include "../simcity.h"
 #include "../simhalt.h"
 #include "../simmenu.h"
+#include "../simmesg.h"
 #include "../simskin.h"
 #include "../simware.h"
 
@@ -63,18 +65,6 @@ bool ai_bauplatz_mit_strasse_sucher_t::ist_platz_ok(koord pos, sint16 b, sint16
 /************************** and now the "real" helper functions ***************/
 
 
-/* return true, if my bahnhof is here
- * @author prissi
- */
-bool ai_t::is_my_halt(koord pos) const
-{
-	const halthandle_t halt = haltestelle_t::get_halt(welt, pos);
-	return
-		halt.is_bound() && check_owner(this,halt->get_besitzer());
-}
-
-
-
 /* returns true,
  * if there is already a connection
  * @author prissi
@@ -114,8 +104,7 @@ bool ai_t::is_connected( const koord start_pos, const koord dest_pos, const ware
 	ware.set_zielpos(dest_pos);
 	ware.menge = 1;
 	for (uint16 hh = 0; hh<start_plan->get_haltlist_count(); hh++) {
-		start_list[hh]->suche_route(ware, NULL);
-		if (ware.get_ziel().is_bound()) {
+		if(  start_list[hh]->suche_route( ware, NULL, false ) != haltestelle_t::NO_ROUTE  ) {
 			// ok, already connected
 			return true;
 		}
@@ -226,21 +215,21 @@ bool ai_t::suche_platz(koord &start, koord &size, koord target, koord off)
 				continue;
 			}
 			// thus now check them
-			int current_dist = abs_distance(platz,target);
+			int current_dist = koord_distance(platz,target);
 			if(  current_dist<dist  &&  suche_platz(platz,size,dir)  ){
 				// we will take the shortest route found
 				start = platz;
-				dist = abs_distance(platz,target);
+				dist = koord_distance(platz,target);
 			}
 			else {
 				koord test(x,y);
-				if(is_my_halt(test)) {
+				if(  haltestelle_t::get_halt(welt,test,this).is_bound()  ) {
 DBG_MESSAGE("ai_t::suche_platz()","Search around stop at (%i,%i)",x,y);
 
 					// we are on a station that belongs to us
 					int xneu=x-1, yneu=y-1;
 					platz = koord(xneu,y);
-					current_dist = abs_distance(platz,target);
+					current_dist = koord_distance(platz,target);
 					if(  current_dist<dist  &&  suche_platz(platz,size,dir)  ){
 						// we will take the shortest route found
 						start = platz;
@@ -248,7 +237,7 @@ DBG_MESSAGE("ai_t::suche_platz()","Search around stop at (%i,%i)",x,y);
 					}
 
 					platz = koord(x,yneu);
-					current_dist = abs_distance(platz,target);
+					current_dist = koord_distance(platz,target);
 					if(  current_dist<dist  &&  suche_platz(platz,size,dir)  ){
 						// we will take the shortest route found
 						start = platz;
@@ -259,7 +248,7 @@ DBG_MESSAGE("ai_t::suche_platz()","Search around stop at (%i,%i)",x,y);
 					xneu = x+1;
 					yneu = y+1;
 					platz = koord(xneu,y);
-					current_dist = abs_distance(platz,target);
+					current_dist = koord_distance(platz,target);
 					if(  current_dist<dist  &&  suche_platz(platz,size,dir)  ){
 						// we will take the shortest route found
 						start = platz;
@@ -267,7 +256,7 @@ DBG_MESSAGE("ai_t::suche_platz()","Search around stop at (%i,%i)",x,y);
 					}
 
 					platz = koord(x,yneu);
-					current_dist = abs_distance(platz,target);
+					current_dist = koord_distance(platz,target);
 					if(  current_dist<dist  &&  suche_platz(platz,size,dir)  ){
 						// we will take the shortest route found
 						start = platz;
@@ -452,7 +441,7 @@ bool ai_t::find_harbour(koord &start, koord &size, koord target)
 					// next place is also water
 					koord dir[2] = { zv, koord(zv.y,zv.x) };
 					koord platz = k+zv;
-					int current_dist = abs_distance(k,target);
+					int current_dist = koord_distance(k,target);
 					if(  current_dist<dist  &&  suche_platz(platz,size,dir)  ){
 						// we will take the shortest route found
 						start = k;
@@ -492,8 +481,8 @@ bool ai_t::create_simple_road_transport(koord platz1, koord size1, koord platz2,
 	vehikel_t* test_driver = vehikelbauer_t::baue(welt->lookup_kartenboden(platz1)->get_pos(), this, NULL, &test_besch);
 	route_t verbindung;
 	if (verbindung.calc_route(welt, welt->lookup_kartenboden(platz1)->get_pos(), welt->lookup_kartenboden(platz2)->get_pos(), test_driver, 0)  &&
-		verbindung.get_max_n()<2u*abs_distance(platz1,platz2))  {
-DBG_MESSAGE("ai_passenger_t::create_simple_road_transport()","Already connection between %d,%d to %d,%d is only %i",platz1.x, platz1.y, platz2.x, platz2.y, verbindung.get_max_n() );
+		verbindung.get_count()<2u*koord_distance(platz1,platz2))  {
+DBG_MESSAGE("ai_passenger_t::create_simple_road_transport()","Already connection between %d,%d to %d,%d is only %i",platz1.x, platz1.y, platz2.x, platz2.y, verbindung.get_count() );
 		// found something with the nearly same lenght
 		delete test_driver;
 		return true;
@@ -512,7 +501,7 @@ DBG_MESSAGE("ai_passenger_t::create_simple_road_transport()","Already connection
 	INT_CHECK("simplay 846");
 
 	bauigel.calc_route(welt->lookup_kartenboden(platz1)->get_pos(),welt->lookup_kartenboden(platz2)->get_pos());
-	if(bauigel.max_n > 1) {
+	if(bauigel.get_count()-1 > 1) {
 DBG_MESSAGE("ai_t::create_simple_road_transport()","building simple road from %d,%d to %d,%d",platz1.x, platz1.y, platz2.x, platz2.y);
 		bauigel.baue();
 		return true;
diff --git a/player/ai.h b/player/ai.h
old mode 100644
new mode 100755
index 790168b..5d6ac90
--- a/player/ai.h
+++ b/player/ai.h
@@ -11,10 +11,12 @@
 #define _AI_H
 
 #include "simplay.h"
-#include "../simworld.h"
 
 #include "../sucher/bauplatz_sucher.h"
 
+class karte_t;
+class ware_besch_t;
+
 /**
  * bauplatz_mit_strasse_sucher_t:
  *
@@ -36,11 +38,6 @@ class ai_t : public spieler_t
 public:
 	ai_t(karte_t *wl, uint8 nr) : spieler_t( wl, nr ) {}
 
-	/* returns true for a halt of the player at that position
-	 * @author prissi
-	 */
-	bool is_my_halt(koord pos) const;
-
 	// return true, if there is already a connection
 	bool is_connected(const koord star_pos, const koord end_pos, const ware_besch_t *wtyp) const;
 
diff --git a/player/ai_goods.cc b/player/ai_goods.cc
old mode 100644
new mode 100755
index b7a2af9..9fa631e
--- a/player/ai_goods.cc
+++ b/player/ai_goods.cc
@@ -6,6 +6,7 @@
 #include "simplay.h"
 
 #include "../simhalt.h"
+#include "../simmesg.h"
 #include "../simtools.h"
 #include "../simworld.h"
 
@@ -30,6 +31,8 @@ ai_goods_t::ai_goods_t(karte_t *wl, uint8 nr) : ai_t(wl,nr)
 {
 	state = NR_INIT;
 
+	freight = NULL;
+
 	root = NULL;
 	start = NULL;
 	ziel = NULL;
@@ -163,7 +166,7 @@ bool ai_goods_t::get_factory_tree_lowest_missing( fabrik_t *fab )
 
 
 /* recursive lookup of a tree and how many factories must be at least connected
- * returns -1, if this tree is incomplete
+ * returns -1, if this tree is can't be completed
  */
 int ai_goods_t::get_factory_tree_missing_count( fabrik_t *fab )
 {
@@ -182,33 +185,45 @@ int ai_goods_t::get_factory_tree_missing_count( fabrik_t *fab )
 		const vector_tpl <koord> & sources = fab->get_suppliers();
 		for( unsigned q=0;  q<sources.get_count();  q++  ) {
 			fabrik_t *qfab = fabrik_t::get_fab(welt,sources[q]);
-			if(!fab) {
+			if(!qfab) {
 				dbg->error( "fabrik_t::get_fab()","fab %s at %s does not find supplier at %s.", fab->get_name(), fab->get_pos().get_str(), sources[q].get_str() );
 				continue;
 			}
-			const fabrik_besch_t* const fb = qfab->get_besch();
-			for (uint qq = 0; qq < fb->get_produkte(); qq++) {
-				if (fb->get_produkt(qq)->get_ware() == ware && !is_forbidden( fabrik_t::get_fab(welt,sources[q]), fab, ware)) {
-					int n = get_factory_tree_missing_count( qfab );
-					if(n>=0) {
-						complete = true;
-						if(  !is_connected( sources[q], fab->get_pos().get_2d(), ware )  ) {
-							numbers += 1;
+			if( !is_forbidden( qfab, fab, ware ) ) {
+				const fabrik_besch_t* const fb = qfab->get_besch();
+				for (uint qq = 0; qq < fb->get_produkte(); qq++) {
+					if (fb->get_produkt(qq)->get_ware() == ware ) {
+						int n = get_factory_tree_missing_count( qfab );
+						if(n>=0) {
+							complete = true;
+							if(  !is_connected( sources[q], fab->get_pos().get_2d(), ware )  ) {
+								numbers += 1;
+							}
+							numbers += n;
 						}
-						numbers += n;
 					}
 				}
 			}
 		}
 		if(!complete) {
-			if(fab->get_besch()->get_lieferanten()==0  ||  numbers==0) {
-				return -1;
-			}
+			return -1;
 		}
 	}
 	return numbers;
 }
 
+void add_neighbourhood( vector_tpl<koord> &list, const uint16 size)
+{
+	uint32 old_size = list.get_count();
+	koord test;
+	for( uint32 i = 0; i < old_size; i++ ) {
+		for( test.x = -size; test.x < size+1; test.x++ ) {
+			for( test.y = -size; test.y < size+1; test.y++ ) {
+				list.append_unique( list[i] + test );
+			}
+		}
+	}
+}
 
 
 bool ai_goods_t::suche_platz1_platz2(fabrik_t *qfab, fabrik_t *zfab, int length )
@@ -222,17 +237,85 @@ bool ai_goods_t::suche_platz1_platz2(fabrik_t *qfab, fabrik_t *zfab, int length
 	koord ziel_size( length, 0 );
 
 	bool ok = false;
+	bool has_ziel = false;
 
 	if(qfab->get_besch()->get_platzierung()!=fabrik_besch_t::Wasser) {
-		ok = suche_platz(start, start_size, ziel, qfab->get_besch()->get_haus()->get_groesse() );
+		if( length == 0 ) {
+			vector_tpl<koord3d> tile_list[2];
+			const uint8 cov = welt->get_einstellungen()->get_station_coverage();
+			koord test;
+			for( uint8 i = 0; i < 2; i++ ) {
+				fabrik_t *fab =  i==0 ? qfab : zfab;
+				vector_tpl<koord> fab_tiles;
+				fab->get_tile_list( fab_tiles );
+				add_neighbourhood( fab_tiles, cov );
+				vector_tpl<koord> one_more( fab_tiles );
+				add_neighbourhood( one_more, 1 );
+				// Any halts here?
+				vector_tpl<koord> halts;
+				for( uint32 j = 0; j < one_more.get_count(); j++ ) {
+					halthandle_t halt = haltestelle_t::get_halt( welt, one_more[j], this );
+					if( halt.is_bound() && !halts.is_contained(halt->get_basis_pos()) ) {
+						bool halt_connected = halt->get_fab_list().is_contained( fab );
+						for( slist_tpl< haltestelle_t::tile_t >::const_iterator iter = halt->get_tiles().begin(); iter != halt->get_tiles().end(); ++iter ) {
+							koord pos = iter->grund->get_pos().get_2d();
+							if( halt_connected || fab_tiles.is_contained(pos) ) {
+								halts.append_unique( pos );
+							}
+						}
+					}
+				}
+				add_neighbourhood( halts, 1 );
+				vector_tpl<koord> *next = &halts;
+				for( uint8 k = 0; k < 2; k++ ) {
+					// On which tiles we can start?
+					for( uint32 j = 0; j < next->get_count(); j++ ) {
+						const grund_t* gr = welt->lookup_kartenboden( next->operator[](j) );
+						if(  gr  &&  gr->get_grund_hang() == hang_t::flach  &&  !gr->hat_wege()  &&  !gr->get_leitung()  ) {
+							tile_list[i].append_unique( gr->get_pos() );
+						}
+					}
+					if( !tile_list[i].empty() ) {
+						// Skip, if found tiles beneath halts.
+						break;
+					}
+					next = &fab_tiles;
+				}
+			}
+			// Test which tiles are the best:
+			wegbauer_t bauigel(welt, this);
+			bauigel.route_fuer( wegbauer_t::strasse, road_weg, tunnelbauer_t::find_tunnel(road_wt,road_weg->get_topspeed(),welt->get_timeline_year_month()), brueckenbauer_t::find_bridge(road_wt,road_weg->get_topspeed(),welt->get_timeline_year_month()) );
+			// we won't destroy cities (and save the money)
+			bauigel.set_keep_existing_faster_ways(true);
+			bauigel.set_keep_city_roads(true);
+			bauigel.set_maximum(10000);
+			bauigel.calc_route(tile_list[0], tile_list[1]);
+			if(  bauigel.get_count() > 2  ) {
+				// Sometimes reverse route is the best, so we have to change the koords.
+				if( tile_list[0].is_contained( bauigel.get_route()[0]) ) {
+					start = bauigel.get_route()[0].get_2d();
+					ziel = bauigel.get_route()[bauigel.get_count()-1].get_2d();
+				}
+				else {
+					start = bauigel.get_route()[bauigel.get_count()-1].get_2d();
+					ziel = bauigel.get_route()[0].get_2d();
+				}
+				ok = true;
+				has_ziel = true;
+			}
+		}
+		if( !ok ) {
+			ok = suche_platz(start, start_size, ziel, qfab->get_besch()->get_haus()->get_groesse(qfab->get_rotate()) );
+		}
 	}
 	else {
 		// water factory => find harbour location
 		ok = find_harbour(start, start_size, ziel );
 	}
-	if(ok) {
+
+	if( ok && !has_ziel ) {
 		// found a place, search for target
-		ok = suche_platz(ziel, ziel_size, start, zfab->get_besch()->get_haus()->get_groesse() );
+		ok = suche_platz(ziel, ziel_size, start, zfab->get_besch()->get_haus()->get_groesse(zfab->get_rotate()) );
 	}
 
 	INT_CHECK("simplay 1729");
@@ -281,6 +364,11 @@ bool ai_goods_t::create_ship_transport_vehikel(fabrik_t *qfab, int anz_vehikel)
 	}
 	DBG_MESSAGE( "ai_goods_t::create_ship_transport_vehikel()", "for %i ships", anz_vehikel );
 
+	if(  convoihandle_t::is_exhausted()  ) {
+		// too many convois => cannot do anything about this ...
+		return false;
+	}
+
 	// must remove marker
 	grund_t* gr = welt->lookup_kartenboden(platz1);
 	if (gr) gr->obj_loesche_alle(this);
@@ -291,20 +379,15 @@ bool ai_goods_t::create_ship_transport_vehikel(fabrik_t *qfab, int anz_vehikel)
 	}
 
 	// sea pos (and not on harbour ... )
-	halthandle_t halt = haltestelle_t::get_halt(welt,platz1);
+	halthandle_t halt = haltestelle_t::get_halt(welt,platz1,this);
 	koord pos1 = platz1 - koord(gr->get_grund_hang())*h->get_groesse().y;
 	koord best_pos = pos1;
 	for(  int y = pos1.y-welt->get_einstellungen()->get_station_coverage();  y<=pos1.y+welt->get_einstellungen()->get_station_coverage();  y++  ) {
 		for(  int x = pos1.x-welt->get_einstellungen()->get_station_coverage();  x<=pos1.x+welt->get_einstellungen()->get_station_coverage();  x++  ) {
 			koord p(x,y);
-			const planquadrat_t *plan = welt->lookup(p);
-			if(plan) {
-				grund_t *gr = plan->get_kartenboden();
-				if(  gr->ist_wasser()  &&  !gr->get_halt().is_bound()  ) {
-					if(plan->get_haltlist_count()>=1  &&  plan->get_haltlist()[0]==halt  &&  abs_distance(best_pos,platz2)<abs_distance(p,platz2)) {
-						best_pos = p;
-					}
-				}
+			// in water, the water tiles have no halt flag!
+			if(welt->ist_in_kartengrenzen(p)  &&  !welt->lookup(p)->get_halt().is_bound()  &&  halt == haltestelle_t::get_halt(welt,p,this)  &&  koord_distance(best_pos,platz2)<koord_distance(p,platz2)  ) {
+				best_pos = p;
 			}
 		}
 	}
@@ -319,11 +402,16 @@ bool ai_goods_t::create_ship_transport_vehikel(fabrik_t *qfab, int anz_vehikel)
 	fpl->append( welt->lookup_kartenboden(best_pos), 0 );
 	fpl->append( welt->lookup(qfab->get_pos()), 100 );
 	fpl->set_aktuell( 1 );
+	fpl->eingabe_abschliessen();
 	linehandle_t line=simlinemgmt.create_line(simline_t::shipline,this,fpl);
 	delete fpl;
 
 	// now create all vehicles as convois
 	for(int i=0;  i<anz_vehikel;  i++) {
+		if(  convoihandle_t::is_exhausted()  ) {
+			// too many convois => cannot do anything about this ...
+			return i>0;
+		}
 		vehikel_t* v = vehikelbauer_t::baue( qfab->get_pos(), this, NULL, ship_vehicle);
 		convoi_t* cnv = new convoi_t(this);
 		// V.Meyer: give the new convoi name from first vehicle
@@ -378,11 +466,16 @@ void ai_goods_t::create_road_transport_vehikel(fabrik_t *qfab, int anz_vehikel)
 		fpl->append(welt->lookup(pos1), start_location == 0 ? 100 : 0);
 		fpl->append(welt->lookup(pos2), start_location == 1 ? 100 : 0);
 		fpl->set_aktuell( start_location );
+		fpl->eingabe_abschliessen();
 		linehandle_t line=simlinemgmt.create_line(simline_t::truckline,this,fpl);
 		delete fpl;
 
 		// now create all vehicles as convois
 		for(int i=0;  i<anz_vehikel;  i++) {
+			if(  convoihandle_t::is_exhausted()  ) {
+				// too many convois => cannot do anything about this ...
+				return;
+			}
 			vehikel_t* v = vehikelbauer_t::baue(startpos, this, NULL, road_vehicle);
 			convoi_t* cnv = new convoi_t(this);
 			// V.Meyer: give the new convoi name from first vehicle
@@ -404,6 +497,10 @@ void ai_goods_t::create_road_transport_vehikel(fabrik_t *qfab, int anz_vehikel)
 void ai_goods_t::create_rail_transport_vehikel(const koord platz1, const koord platz2, int anz_vehikel, int ladegrad)
 {
 	schedule_t *fpl;
+	if(  convoihandle_t::is_exhausted()  ) {
+		// too many convois => cannot do anything about this ...
+		return;
+	}
 	convoi_t* cnv = new convoi_t(this);
 	koord3d pos1= welt->lookup(platz1)->get_kartenboden()->get_pos();
 	koord3d pos2 = welt->lookup(platz2)->get_kartenboden()->get_pos();
@@ -419,7 +516,9 @@ void ai_goods_t::create_rail_transport_vehikel(const koord platz1, const koord p
 		wkz.work( welt, this, welt->lookup_kartenboden(platz2)->get_pos() );
 		wkz.exit( welt, this );
 	}
-	vehikel_t* v = vehikelbauer_t::baue(pos2, this, NULL, rail_engine);
+
+	koord3d start_pos = welt->lookup_kartenboden(pos1.get_2d() + (abs(size1.x)>abs(size1.y) ? koord(size1.x,0) : koord(0,size1.y)))->get_pos();
+	vehikel_t* v = vehikelbauer_t::baue( start_pos, this, NULL, rail_engine);
 
 	// V.Meyer: give the new convoi name from first vehicle
 	cnv->set_name(rail_engine->get_name());
@@ -432,7 +531,7 @@ void ai_goods_t::create_rail_transport_vehikel(const koord platz1, const koord p
 	 */
 	for(int i = 0; i < anz_vehikel; i++) {
 		// use the vehicle we searched before
-		vehikel_t* v = vehikelbauer_t::baue(pos2, this, NULL, rail_vehicle);
+		vehikel_t* v = vehikelbauer_t::baue(start_pos, this, NULL, rail_vehicle);
 		cnv->add_vehikel( v );
 	}
 
@@ -441,6 +540,7 @@ void ai_goods_t::create_rail_transport_vehikel(const koord platz1, const koord p
 	fpl->set_aktuell( 0 );
 	fpl->append(welt->lookup(pos1), ladegrad);
 	fpl->append(welt->lookup(pos2), 0);
+	fpl->eingabe_abschliessen();
 
 	cnv->set_schedule(fpl);
 	welt->sync_add( cnv );
@@ -489,7 +589,12 @@ int ai_goods_t::baue_bahnhof(const koord* p, int anz_vehikel)
 	}
 	koord pos;
 	for(  pos=t-zv;  pos!=*p;  pos-=zv ) {
-		if(  make_all_bahnhof  ||  is_my_halt(pos+koord(-1,-1))  ||  is_my_halt(pos+koord(-1,1))  ||  is_my_halt(pos+koord(1,-1))  ||  is_my_halt(pos+koord(1,1))  ) {
+		if(  make_all_bahnhof  ||
+			haltestelle_t::get_halt(welt,pos+koord(-1,-1),this).is_bound()  ||
+			haltestelle_t::get_halt(welt,pos+koord(-1, 1),this).is_bound()  ||
+			haltestelle_t::get_halt(welt,pos+koord( 1,-1),this).is_bound()  ||
+			haltestelle_t::get_halt(welt,pos+koord( 1, 1),this).is_bound()
+		) {
 			// start building, if next to an existing station
 			make_all_bahnhof = true;
 			call_general_tool( WKZ_STATION, pos, besch->get_name() );
@@ -498,7 +603,7 @@ int ai_goods_t::baue_bahnhof(const koord* p, int anz_vehikel)
 	}
 	// now add the other squares (going backwards)
 	for(  pos=*p;  pos!=t;  pos+=zv ) {
-		if(  !is_my_halt(pos)  ) {
+		if(  !haltestelle_t::get_halt(welt,pos,this).is_bound()  ) {
 			call_general_tool( WKZ_STATION, pos, besch->get_name() );
 		}
 	}
@@ -519,24 +624,20 @@ bool ai_goods_t::create_simple_rail_transport()
 	clean_marker(platz1,size1);
 	clean_marker(platz2,size2);
 
+	wegbauer_t bauigel(welt, this);
+	bauigel.route_fuer( (wegbauer_t::bautyp_t)(wegbauer_t::schiene|wegbauer_t::bot_flag), rail_weg, tunnelbauer_t::find_tunnel(track_wt,rail_engine->get_geschw(),welt->get_timeline_year_month()), brueckenbauer_t::find_bridge(track_wt,rail_engine->get_geschw(),welt->get_timeline_year_month()) );
+	bauigel.set_keep_existing_ways(false);
+
 	bool ok=true;
 	// first: make plain stations tiles as intended
 	sint8 z1 = max( welt->get_grundwasser()+Z_TILE_STEP, welt->lookup_kartenboden(platz1)->get_hoehe() );
 	koord k = platz1;
 	koord diff1( sgn(size1.x), sgn(size1.y) );
 	koord perpend( sgn(size1.y), sgn(size1.x) );
-	ribi_t::ribi ribi1 = ribi_typ( diff1 );
 	while(k!=size1+platz1) {
 		if(!welt->ebne_planquadrat( this, k, z1 )) {
-			ok = false;
-			break;
+			return false;
 		}
-		grund_t *gr = welt->lookup_kartenboden(k);
-		weg_t *sch = weg_t::alloc(track_wt);
-		sch->set_besch( rail_weg );
-		int cost = -gr->neuen_weg_bauen(sch, ribi1, this) - rail_weg->get_preis();
-		buche(cost, k, COST_CONSTRUCTION);
-		ribi1 = ribi_t::doppelt( ribi1 );
 		k += diff1;
 	}
 
@@ -545,66 +646,57 @@ bool ai_goods_t::create_simple_rail_transport()
 	k = platz2;
 	perpend = koord( sgn(size2.y), sgn(size2.x) );
 	koord diff2( sgn(size2.x), sgn(size2.y) );
-	ribi_t::ribi ribi2 = ribi_typ( diff2 );
 	while(k!=size2+platz2  &&  ok) {
 		if(!welt->ebne_planquadrat(this,k,z2)) {
-			ok = false;
-			break;
+			return false;
 		}
-		grund_t *gr = welt->lookup_kartenboden(k);
-		weg_t *sch = weg_t::alloc(track_wt);
-		sch->set_besch( rail_weg );
-		int cost = -gr->neuen_weg_bauen(sch, ribi2, this) - rail_weg->get_preis();
-		buche(cost, k, COST_CONSTRUCTION);
-		ribi2 = ribi_t::doppelt( ribi2 );
 		k += diff2;
 	}
 
+	bauigel.calc_route( koord3d(platz1,z1), koord3d(platz1+size1-diff1, z1));
+	bauigel.baue();
+	bauigel.calc_route( koord3d(platz2,z2), koord3d(platz2+size2-diff2, z2));
+	bauigel.baue();
+
+	vector_tpl<koord3d> starttiles, endtiles;
 	// now calc the route
-	wegbauer_t bauigel(welt, this);
 	if(ok) {
-		bauigel.route_fuer( (wegbauer_t::bautyp_t)(wegbauer_t::schiene|wegbauer_t::bot_flag), rail_weg, tunnelbauer_t::find_tunnel(track_wt,rail_engine->get_geschw(),welt->get_timeline_year_month()), brueckenbauer_t::find_bridge(track_wt,rail_engine->get_geschw(),welt->get_timeline_year_month()) );
-		bauigel.set_keep_existing_ways(false);
-		bauigel.calc_route( koord3d(platz2+size2,z2), koord3d(platz1+size1,z1) );
+		starttiles.append(welt->lookup_kartenboden(platz1 + size1)->get_pos());
+		starttiles.append(welt->lookup_kartenboden(platz1 - diff1)->get_pos());
+		endtiles.append(welt->lookup_kartenboden(platz2 + size2)->get_pos());
+		endtiles.append(welt->lookup_kartenboden(platz2 - diff2)->get_pos());
+		bauigel.calc_route( starttiles, endtiles );
 		INT_CHECK("simplay 2478");
 	}
 
-	if(ok  &&  bauigel.max_n > 3) {
-#if 0
-/* FIX THIS! */
-		//just check, if I could not start at the other end of the station ...
-		int start=0, end=bauigel.max_n;
-		for( int j=1;  j<bauigel.max_n-1;  j++  ) {
-			if(bauigel.get_route_bei(j)==platz2-diff2) {
-				start = j;
-				platz2 = platz2+size2-diff2;
-				size2 = size2*(-1);
-				diff2 = diff2*(-1);
-			}
-			if(bauigel.get_route_bei(j)==platz1-diff1) {
-				end = j;
-				platz1 = platz1+size1-diff1;
-				size1 = size1*(-1);
-				diff1 = diff1*(-1);
-			}
-		}
-		// so found shorter route?
-		if(start!=0  ||  end!=bauigel.max_n) {
-			bauigel.calc_route( koord3d(platz2+size2,z2), koord3d(platz1+size1,z1) );
-		}
-#endif
-
+	if(ok  &&  bauigel.get_count() > 4) {
 DBG_MESSAGE("ai_goods_t::create_simple_rail_transport()","building simple track from %d,%d to %d,%d",platz1.x, platz1.y, platz2.x, platz2.y);
 		bauigel.baue();
 		// connect to track
-		ribi1 = ribi_typ(diff1);
-		assert( welt->lookup_kartenboden(platz1+size1-diff1)->weg_erweitern(track_wt, ribi1) );
-		ribi1 = ribi_t::rueckwaerts(ribi1);
-		assert( welt->lookup_kartenboden(platz1+size1)->weg_erweitern(track_wt, ribi1) );
-		ribi2 = ribi_typ(diff2);
-		assert( welt->lookup_kartenboden(platz2+size2-diff2)->weg_erweitern(track_wt, ribi2) );
-		ribi2 = ribi_t::rueckwaerts(ribi2);
-		assert( welt->lookup_kartenboden(platz2+size2)->weg_erweitern(track_wt, ribi2) );
+
+		koord3d tile1, tile2;
+		if( starttiles.is_contained( bauigel.get_route()[0] ) ) {
+			tile1 = bauigel.get_route()[0];
+			tile2 = bauigel.get_route()[bauigel.get_count()-1];
+		}
+		else {
+			tile1 = bauigel.get_route()[bauigel.get_count()-1];
+			tile2 = bauigel.get_route()[0];
+		}
+		// No botflag, since we want to connect with the station.
+		bauigel.route_fuer( wegbauer_t::schiene, rail_weg, tunnelbauer_t::find_tunnel(track_wt,rail_engine->get_geschw(),welt->get_timeline_year_month()), brueckenbauer_t::find_bridge(track_wt,rail_engine->get_geschw(),welt->get_timeline_year_month()) );
+		bauigel.calc_straight_route( koord3d(platz1,z1), tile1);
+		bauigel.baue();
+		bauigel.calc_straight_route( koord3d(platz2,z2), tile2);
+		bauigel.baue();
+		// If connection is built not at platz1/2, we must alter platz1/2, otherwise baue_bahnhof gets confused.
+		if(  tile1.get_2d() != platz1 + size1  ) {
+			platz1 = platz1 + size1 - diff1;
+			size1 = -size1;
+		}
+		if(  tile2.get_2d() != platz2 + size2  ) {
+			platz2 = platz2 + size2 - diff2;
+		}
 		return true;
 	}
 	else {
@@ -651,6 +743,7 @@ void ai_goods_t::step()
 	switch(state) {
 
 		case NR_INIT:
+
 			state = NR_SAMMLE_ROUTEN;
 			count = 0;
 			built_update_headquarter();
@@ -864,11 +957,11 @@ DBG_MESSAGE("ai_goods_t::do_ki()","No roadway possible.");
 					}
 				}
 				// if state is still NR_BAUE_ROUTE1 then there are no sutiable places
-				if(state==NR_BAUE_ROUTE1  &&  suche_platz1_platz2(start, ziel, 1)) {
+				if(state==NR_BAUE_ROUTE1  &&  (count_road != 255)  &&  suche_platz1_platz2(start, ziel, 0)) {
 					// rail was too expensive or not successfull
 					count_rail = 255;
 					state = ship_vehicle ? NR_BAUE_WATER_ROUTE : NR_BAUE_STRASSEN_ROUTE;
-					next_contruction_steps = 80;
+					next_contruction_steps += 80;
 				}
 			}
 			// no success at all?
@@ -900,13 +993,13 @@ DBG_MESSAGE("ai_goods_t::do_ki()","No roadway possible.");
 					state = CHECK_CONVOI;
 					break;
 				}
-				int ships_needed = 1 + (prod*abs_distance(harbour,start->get_pos().get_2d())) / (ship_vehicle->get_zuladung()*max(20,ship_vehicle->get_geschw()));
+				int ships_needed = 1 + (prod*koord_distance(harbour,start->get_pos().get_2d())) / (ship_vehicle->get_zuladung()*max(20,ship_vehicle->get_geschw()));
 				if(create_ship_transport_vehikel(start,ships_needed)) {
 					if(welt->lookup(harbour)->get_halt()->get_fab_list().is_contained(ziel)) {
 						// so close, so we are already connected
 						grund_t *gr = welt->lookup_kartenboden(platz2);
 						if (gr) gr->obj_loesche_alle(this);
-						state = NR_ROAD_SUCCESS;
+						state = (rail_vehicle  &&  count_rail<255) ? NR_RAIL_SUCCESS : NR_ROAD_SUCCESS;
 					}
 					else {
 						// else we need to built the second part of the route
@@ -958,10 +1051,21 @@ DBG_MESSAGE("ai_goods_t::step()","remove already constructed rail between %i,%i
 					wkz.work( welt, this, welt->lookup_kartenboden(platz1)->get_pos() );
 					wkz.work( welt, this, welt->lookup_kartenboden(platz2)->get_pos() );
 					wkz.exit( welt, this );
+					if( (count_road != 255) && suche_platz1_platz2(start, ziel, 0) ) {
+						state = NR_BAUE_STRASSEN_ROUTE;
+					}
+					else {
+						state = NR_BAUE_CLEAN_UP;
+					}
 				}
 			}
 			else {
-				state = NR_BAUE_STRASSEN_ROUTE;
+				if( (count_road != 255) && suche_platz1_platz2(start, ziel, 0) ) {
+					state = NR_BAUE_STRASSEN_ROUTE;
+				}
+				else {
+					state = NR_BAUE_CLEAN_UP;
+				}
 			}
 		break;
 
@@ -987,7 +1091,7 @@ DBG_MESSAGE("ai_goods_t::step()","remove already constructed rail between %i,%i
 				// only here, if we could built ships but no connection
 				halthandle_t start_halt;
 				for( int r=0;  r<4;  r++  ) {
-					start_halt = haltestelle_t::get_halt(welt,platz1+koord::nsow[r]);
+					start_halt = haltestelle_t::get_halt(welt,platz1+koord::nsow[r],this);
 					if(start_halt.is_bound()  &&  (start_halt->get_station_type()&haltestelle_t::dock)!=0) {
 						// delete all ships on this line
 						vector_tpl<linehandle_t> lines;
@@ -995,7 +1099,7 @@ DBG_MESSAGE("ai_goods_t::step()","remove already constructed rail between %i,%i
 						if(!lines.empty()) {
 							linehandle_t line = lines.back();
 							schedule_t *fpl=line->get_schedule();
-							if(fpl->get_count()>1  &&  haltestelle_t::get_halt(welt,fpl->eintrag[0].pos)==start_halt) {
+							if(fpl->get_count()>1  &&  haltestelle_t::get_halt(welt,fpl->eintrag[0].pos,this)==start_halt) {
 								while(line->count_convoys()>0) {
 									line->get_convoy(0)->self_destruct();
 									line->get_convoy(0)->step();
@@ -1061,7 +1165,7 @@ DBG_MESSAGE("ai_goods_t::step()","remove already constructed rail between %i,%i
 					continue;
 				}
 
-				long gewinn = 0;
+				sint64 gewinn = 0;
 				for( int j=0;  j<12;  j++  ) {
 					gewinn += cnv->get_finance_history( j, CONVOI_PROFIT );
 				}
@@ -1100,7 +1204,7 @@ DBG_MESSAGE("ai_goods_t::step()","remove already constructed rail between %i,%i
 					// last vehicle on that connection (no line => railroad)
 					if(  !line.is_bound()  ||  line->count_convoys()==0  ) {
 						// check if a conncetion boat must be removed
-						halthandle_t start_halt = haltestelle_t::get_halt(welt,start_pos);
+						halthandle_t start_halt = haltestelle_t::get_halt(welt,start_pos,this);
 						if(start_halt.is_bound()  &&  (start_halt->get_station_type()&haltestelle_t::dock)!=0) {
 							// delete all ships on this line
 							vector_tpl<linehandle_t> lines;
@@ -1109,7 +1213,7 @@ DBG_MESSAGE("ai_goods_t::step()","remove already constructed rail between %i,%i
 							for (vector_tpl<linehandle_t>::const_iterator iter2 = lines.begin(), end = lines.end(); iter2 != end; iter2++) {
 								linehandle_t line = *iter2;
 								schedule_t *fpl=line->get_schedule();
-								if(fpl->get_count()>1  &&  haltestelle_t::get_halt(welt,fpl->eintrag[0].pos)==start_halt) {
+								if(fpl->get_count()>1  &&  haltestelle_t::get_halt(welt,fpl->eintrag[0].pos,this)==start_halt) {
 									water_stop = koord( (start_pos.x+fpl->eintrag[0].pos.x)/2, (start_pos.y+fpl->eintrag[0].pos.y)/2 );
 									while(line->count_convoys()>0) {
 										line->get_convoy(0)->self_destruct();
@@ -1172,6 +1276,12 @@ DBG_MESSAGE("ai_goods_t::step()","remove already constructed rail between %i,%i
 
 void ai_goods_t::rdwr(loadsave_t *file)
 {
+	if(  file->get_version()<102002  ) {
+		// do to an error the player was never saved correctly
+		spieler_t::rdwr(file);
+		return;
+	}
+
 	xml_tag_t t( file, "ai_goods_t" );
 
 	// first: do all the administration
diff --git a/player/ai_goods.h b/player/ai_goods.h
old mode 100644
new mode 100755
index c912652..91ecc71
--- a/player/ai_goods.h
+++ b/player/ai_goods.h
@@ -111,7 +111,7 @@ private:
 	bool get_factory_tree_lowest_missing( fabrik_t *fab );
 
 	/* recursive lookup of a tree and how many factories must be at least connected
-	 * returns -1, if this tree is incomplete
+	 * returns -1, if this tree is can't be completed
 	 */
 	int get_factory_tree_missing_count( fabrik_t *fab );
 
@@ -127,7 +127,6 @@ private:
 	void create_rail_transport_vehikel(const koord pos1,const koord pos2, int anz_vehikel, int ladegrad);
 
 public:
-public:
 	ai_goods_t(karte_t *wl, uint8 nr);
 
 	virtual ~ai_goods_t() {}
@@ -135,7 +134,7 @@ public:
 	// this type of AIs identifier
 	virtual uint8 get_ai_id() { return AI_GOODS; }
 
-	void rdwr(loadsave_t *file);
+	virtual void rdwr(loadsave_t *file);
 
 	virtual void bescheid_vehikel_problem(convoihandle_t cnv,const koord3d ziel);
 
diff --git a/player/ai_passenger.cc b/player/ai_passenger.cc
old mode 100644
new mode 100755
index 8894816..3517fc5
--- a/player/ai_passenger.cc
+++ b/player/ai_passenger.cc
@@ -10,6 +10,7 @@
 #include "../simcity.h"
 #include "../simhalt.h"
 #include "../simtools.h"
+#include "../simmesg.h"
 #include "../simworld.h"
 
 #include "../bauer/brueckenbauer.h"
@@ -100,7 +101,7 @@ koord ai_passenger_t::find_area_for_hub( const koord lo, const koord ru, const k
 				// flat, solid
 				if(  gr->get_typ()==grund_t::boden  &&  gr->get_grund_hang()==hang_t::flach  ) {
 					const ding_t* thing = gr->obj_bei(0);
-					int test_dist = abs_distance( trypos, basis );
+					int test_dist = koord_distance( trypos, basis );
 					if (thing == NULL || thing->get_besitzer() == NULL || thing->get_besitzer() == this) {
 						if(gr->is_halt()  &&  check_owner( this, gr->get_halt()->get_besitzer())  &&  gr->hat_weg(road_wt)) {
 							// ok, one halt belongs already to us ... (should not really happen!) but might be a public stop
@@ -150,7 +151,7 @@ koord ai_passenger_t::find_harbour_pos(karte_t* welt, const stadt_t *s )
 	// try to find an airport place as close to the city as possible
 	for(  k.y=max(6,s->get_linksoben().y-10); k.y<=min(welt->get_groesse_y()-3-6,s->get_rechtsunten().y+10); k.y++  ) {
 		for(  k.x=max(6,s->get_linksoben().x-25); k.x<=min(welt->get_groesse_x()-3-6,s->get_rechtsunten().x+10); k.x++  ) {
-			sint32 testdist = abs_distance( k, s->get_pos() );
+			sint32 testdist = koord_distance( k, s->get_pos() );
 			if(  testdist<bestdist  ) {
 				if(  k.x+2<s->get_linksoben().x  ||  k.y+2<s->get_linksoben().y  ||  k.x>=s->get_rechtsunten().x  ||  k.y>=s->get_rechtsunten().y  ) {
 					// malus for out of town
@@ -185,6 +186,11 @@ bool ai_passenger_t::create_water_transport_vehikel(const stadt_t* start_stadt,
 		return false;
 	}
 
+	if(  convoihandle_t::is_exhausted()  ) {
+		// too many convois => cannot do anything about this ...
+		return false;
+	}
+
 	stadt_t *end_stadt = NULL;
 	grund_t *ziel = welt->lookup_kartenboden(target_pos);
 	gebaeude_t *gb = ziel->find<gebaeude_t>();
@@ -283,7 +289,7 @@ bool ai_passenger_t::create_water_transport_vehikel(const stadt_t* start_stadt,
 			bauigel.set_keep_city_roads(true);
 			bauigel.set_maximum(10000);
 			bauigel.calc_route( welt->lookup_kartenboden(bushalt)->get_pos(), welt->lookup_kartenboden(town_road)->get_pos() );
-			if(bauigel.max_n <= 1) {
+			if(bauigel.get_count()-1 <= 1) {
 				return false;
 			}
 			bauigel.baue();
@@ -301,7 +307,7 @@ bool ai_passenger_t::create_water_transport_vehikel(const stadt_t* start_stadt,
 			bauigel.set_keep_city_roads(true);
 			bauigel.set_maximum(10000);
 			bauigel.calc_route( welt->lookup_kartenboden(bushalt)->get_pos(), welt->lookup_kartenboden(town_road)->get_pos() );
-			if(bauigel.max_n <= 1) {
+			if(bauigel.get_count()-1 <= 1) {
 				return false;
 			}
 			bauigel.baue();
@@ -377,7 +383,7 @@ bool ai_passenger_t::create_water_transport_vehikel(const stadt_t* start_stadt,
 			if(plan) {
 				grund_t *gr = plan->get_kartenboden();
 				if(  gr->ist_wasser()  &&  !gr->get_halt().is_bound()  ) {
-					if(plan->get_haltlist_count()>=1  &&  plan->get_haltlist()[0]==start_hub  &&  abs_distance(start_pos,end_harbour)>abs_distance(p,end_harbour)) {
+					if(plan->get_haltlist_count()>=1  &&  plan->get_haltlist()[0]==start_hub  &&  koord_distance(start_pos,end_harbour)>koord_distance(p,end_harbour)) {
 						start_pos = p;
 					}
 				}
@@ -394,7 +400,7 @@ bool ai_passenger_t::create_water_transport_vehikel(const stadt_t* start_stadt,
 			if(plan) {
 				grund_t *gr = plan->get_kartenboden();
 				if(  gr->ist_wasser()  &&  !gr->get_halt().is_bound()  ) {
-					if(plan->get_haltlist_count()>=1  &&  plan->get_haltlist()[0]==end_hub  &&  abs_distance(end_pos,start_harbour)>abs_distance(p,start_harbour)) {
+					if(plan->get_haltlist_count()>=1  &&  plan->get_haltlist()[0]==end_hub  &&  koord_distance(end_pos,start_harbour)>koord_distance(p,start_harbour)) {
 						end_pos = p;
 					}
 				}
@@ -407,10 +413,11 @@ bool ai_passenger_t::create_water_transport_vehikel(const stadt_t* start_stadt,
 	fpl->append( welt->lookup_kartenboden(start_pos), 0, 0 );
 	fpl->append( welt->lookup_kartenboden(end_pos), 90, 0 );
 	fpl->set_aktuell( 1 );
+	fpl->eingabe_abschliessen();
 	linehandle_t line=simlinemgmt.create_line(simline_t::shipline,this,fpl);
 	delete fpl;
 
-	// now create one plane
+	// now create one ship
 	vehikel_t* v = vehikelbauer_t::baue( koord3d(start_pos,welt->get_grundwasser()), this, NULL, v_besch);
 	convoi_t* cnv = new convoi_t(this);
 	cnv->set_name(v->get_besch()->get_name());
@@ -501,11 +508,11 @@ halthandle_t ai_passenger_t::build_airport(const stadt_t* city, koord pos, int r
 	koord center=pos+dx;
 	bauigel.route_fuer( wegbauer_t::luft, taxi_besch, NULL, NULL );
 	bauigel.calc_straight_route( welt->lookup_kartenboden(center+koord::nord)->get_pos(), welt->lookup_kartenboden(center+koord::sued)->get_pos() );
-	assert(bauigel.max_n > 1);
+	assert(bauigel.get_count()-1 > 1);
 	bauigel.baue();
 	bauigel.route_fuer( wegbauer_t::luft, taxi_besch, NULL, NULL );
 	bauigel.calc_straight_route( welt->lookup_kartenboden(center+koord::west)->get_pos(), welt->lookup_kartenboden(center+koord::ost)->get_pos() );
-	assert(bauigel.max_n > 1);
+	assert(bauigel.get_count()-1 > 1);
 	bauigel.baue();
 	// now try to connect one of the corners with a road
 	koord bushalt = koord::invalid, runwaystart, runwayend;
@@ -523,9 +530,9 @@ halthandle_t ai_passenger_t::build_airport(const stadt_t* city, koord pos, int r
 		bushalt = pos+trypos[i];
 		bauigel.calc_route(welt->lookup_kartenboden(bushalt)->get_pos(),welt->lookup_kartenboden(town_road)->get_pos());
 		// no road => try next
-		if(  bauigel.max_n>=1  &&   bauigel.max_n<lenght  ) {
+		if(  bauigel.get_count()-1>=1  &&   bauigel.get_count()-1<lenght  ) {
 			rotation = i;
-			lenght = bauigel.max_n;
+			lenght = bauigel.get_count()-1;
 		}
 	}
 
@@ -562,18 +569,18 @@ halthandle_t ai_passenger_t::build_airport(const stadt_t* city, koord pos, int r
 	// built also runway now ...
 	bauigel.route_fuer( wegbauer_t::luft, runway_besch, NULL, NULL );
 	bauigel.calc_straight_route( welt->lookup_kartenboden(pos+trypos[rotation==0?3:0])->get_pos(), welt->lookup_kartenboden(pos+trypos[1+(rotation&1)])->get_pos() );
-	assert(bauigel.max_n > 1);
+	assert(bauigel.get_count()-1 > 1);
 	bauigel.baue();
 	// now the airstops (only on single tiles, this will always work
 	const haus_besch_t* airstop_besch = hausbauer_t::get_random_station(haus_besch_t::generic_stop, air_wt, welt->get_timeline_year_month(), 0 );
 	for(  int i=0;  i<4;  i++  ) {
-		if(  abs_distance(center+koord::nsow[i],bushalt)==1  &&  ribi_t::ist_einfach( welt->lookup_kartenboden(center+koord::nsow[i])->get_weg_ribi_unmasked(air_wt) )  ) {
+		if(  koord_distance(center+koord::nsow[i],bushalt)==1  &&  ribi_t::ist_einfach( welt->lookup_kartenboden(center+koord::nsow[i])->get_weg_ribi_unmasked(air_wt) )  ) {
 			call_general_tool( WKZ_STATION, center+koord::nsow[i], airstop_besch->get_name() );
 		}
 	}
 	// and now the one far away ...
 	for(  int i=0;  i<4;  i++  ) {
-		if(  abs_distance(center+koord::nsow[i],bushalt)>1  &&  ribi_t::ist_einfach( welt->lookup_kartenboden(center+koord::nsow[i])->get_weg_ribi_unmasked(air_wt) )  ) {
+		if(  koord_distance(center+koord::nsow[i],bushalt)>1  &&  ribi_t::ist_einfach( welt->lookup_kartenboden(center+koord::nsow[i])->get_weg_ribi_unmasked(air_wt) )  ) {
 			call_general_tool( WKZ_STATION, center+koord::nsow[i], airstop_besch->get_name() );
 		}
 	}
@@ -591,7 +598,7 @@ static koord find_airport_pos(karte_t* welt, const stadt_t *s )
 	// try to find an airport place as close to the city as possible
 	for(  k.y=max(6,s->get_linksoben().y-10); k.y<=min(welt->get_groesse_y()-3-6,s->get_rechtsunten().y+10); k.y++  ) {
 		for(  k.x=max(6,s->get_linksoben().x-25); k.x<=min(welt->get_groesse_x()-3-6,s->get_rechtsunten().x+10); k.x++  ) {
-			sint32 testdist = abs_distance( k, s->get_pos() );
+			sint32 testdist = koord_distance( k, s->get_pos() );
 			if(  testdist<bestdist  ) {
 				if(  k.x+2<s->get_linksoben().x  ||  k.y+2<s->get_linksoben().y  ||  k.x>=s->get_rechtsunten().x  ||  k.y>=s->get_rechtsunten().y  ) {
 					// malus for out of town
@@ -620,6 +627,11 @@ bool ai_passenger_t::create_air_transport_vehikel(const stadt_t *start_stadt, co
 		return false;
 	}
 
+	if(  convoihandle_t::is_exhausted()  ) {
+		// too many convois => cannot do anything about this ...
+		return false;
+	}
+
 	halthandle_t start_hub = get_our_hub( start_stadt );
 	halthandle_t start_connect_hub = halthandle_t();
 	koord start_airport;
@@ -731,6 +743,7 @@ bool ai_passenger_t::create_air_transport_vehikel(const stadt_t *start_stadt, co
 	fpl->append( start, 0, 0 );
 	fpl->append( end, 90, 0 );
 	fpl->set_aktuell( 1 );
+	fpl->eingabe_abschliessen();
 	linehandle_t line=simlinemgmt.create_line(simline_t::airline,this,fpl);
 	delete fpl;
 
@@ -776,12 +789,17 @@ DBG_MESSAGE("ai_passenger_t::create_bus_transport_vehikel()","bus at (%i,%i)",st
 		fpl->append(welt->lookup(stops[j])->get_kartenboden(), j == 0 || !do_wait ? 0 : 10);
 	}
 	fpl->set_aktuell( stops[0]==startpos2d );
+	fpl->eingabe_abschliessen();
 	linehandle_t line=simlinemgmt.create_line(simline_t::truckline,this,fpl);
 	delete fpl;
 
 	// now create all vehicles as convois
 	for(int i=0;  i<anz_vehikel;  i++) {
 		vehikel_t* v = vehikelbauer_t::baue(startpos, this, NULL, road_vehicle);
+		if(  convoihandle_t::is_exhausted()  ) {
+			// too many convois => cannot do anything about this ...
+			return;
+		}
 		convoi_t* cnv = new convoi_t(this);
 		// V.Meyer: give the new convoi name from first vehicle
 		cnv->set_name(v->get_besch()->get_name());
@@ -882,6 +900,11 @@ ai_passenger_t::walk_city( linehandle_t &line, grund_t *&start, const int limit
  */
 void ai_passenger_t::cover_city_with_bus_route(koord start_pos, int number_of_stops)
 {
+	if(  convoihandle_t::is_exhausted()  ) {
+		// too many convois => cannot do anything about this ...
+		return;
+	}
+
 	// nothing in lists
 	welt->unmarkiere_alle();
 
@@ -892,6 +915,7 @@ void ai_passenger_t::cover_city_with_bus_route(koord start_pos, int number_of_st
 
 	// now create a line
 	walk_city( line, start, number_of_stops );
+	line->get_schedule()->eingabe_abschliessen();
 
 	road_vehicle = vehikelbauer_t::vehikel_search( road_wt, welt->get_timeline_year_month(), 1, 50, warenbauer_t::passagiere, false, false );
 	if( line->get_schedule()->get_count()>1  ) {
@@ -1011,9 +1035,9 @@ DBG_MESSAGE("ai_passenger_t::do_passenger_ki()","searching attraction");
 						// in any case we do not want to serve this location already
 						const koord cov = koord(welt->get_einstellungen()->get_station_coverage(),welt->get_einstellungen()->get_station_coverage());
 						koord test_platz=find_area_for_hub(pos-cov,pos+size+cov,pos);
-						if(!is_my_halt(test_platz)) {
+						if(  !haltestelle_t::get_halt(welt,test_platz,this).is_bound()  ) {
 							// not served
-							dist = abs_distance(platz1,test_platz);
+							dist = koord_distance(platz1,test_platz);
 							if(dist+simrand(50)<last_dist  &&   dist>3) {
 								// but closer than the others
 								if(ausflug) {
@@ -1044,7 +1068,7 @@ DBG_MESSAGE("ai_passenger_t::do_passenger_ki()","searching town");
 					const stadt_t* cur = staedte[nr];
 					if(cur!=last_start_stadt  &&  cur!=start_stadt) {
 						halthandle_t end_halt = get_our_hub(cur);
-						int dist = abs_distance(platz1,cur->get_pos());
+						int dist = koord_distance(platz1,cur->get_pos());
 						if(  end_halt.is_bound()  &&  is_connected(platz1,end_halt->get_basis_pos(),warenbauer_t::passagiere) ) {
 							// already connected
 							continue;
@@ -1133,14 +1157,14 @@ DBG_MESSAGE("ai_passenger_t::do_passenger_ki()","using %s on %s",road_vehicle->g
 			if(bs  &&  create_simple_road_transport(platz1, koord(1,1),platz2,koord(1,1),road_weg)  ) {
 				// since the road my have led to a crossing at the indended stop position ...
 				bool ok = true;
-				if(!is_my_halt(platz1)) {
+				if(  !haltestelle_t::get_halt(welt,platz1,this).is_bound()  ) {
 					if(  !call_general_tool( WKZ_STATION, platz1, bs->get_name() )  ) {
 						platz1 = find_area_for_hub( platz1-koord(2,2), platz1+koord(2,2), platz1 );
 						ok = call_general_tool( WKZ_STATION, platz1, bs->get_name() );
 					}
 				}
 				if(  ok  ) {
-					if(!is_my_halt(platz2)) {
+					if(  !haltestelle_t::get_halt(welt,platz2,this).is_bound()  ) {
 						if(  !call_general_tool( WKZ_STATION, platz2, bs->get_name() )  ) {
 							platz2 = find_area_for_hub( platz2-koord(2,2), platz2+koord(2,2), platz2 );
 							ok = call_general_tool( WKZ_STATION, platz2, bs->get_name() );
@@ -1281,6 +1305,10 @@ DBG_MESSAGE("ai_passenger_t::do_passenger_ki()","using %s on %s",road_vehicle->g
 							if(  !v_besch->is_retired(welt->get_current_month())  &&  v_besch!=line->get_convoy(0)->get_vehikel(0)->get_besch()) {
 								// there is a newer one ...
 								for(  uint32 new_capacity=0;  capacity>new_capacity;  new_capacity+=v_besch->get_zuladung()) {
+									if(  convoihandle_t::is_exhausted()  ) {
+										// too many convois => cannot do anything about this ...
+										break;
+									}
 									vehikel_t* v = vehikelbauer_t::baue( line->get_schedule()->eintrag[0].pos, this, NULL, v_besch  );
 									convoi_t* new_cnv = new convoi_t(this);
 									new_cnv->set_name( v->get_besch()->get_name() );
@@ -1310,7 +1338,7 @@ DBG_MESSAGE("ai_passenger_t::do_passenger_ki()","using %s on %s",road_vehicle->g
 				sint32 ratio = (sint32)((free_cap*100l)/(free_cap+used_cap));
 
 				// next: check for overflowing lines, i.e. running with 3/4 of the capacity
-				if(  ratio<10  ) {
+				if(  ratio<10  &&  !convoihandle_t::is_exhausted()  ) {
 					// else add the first convoi again
 					vehikel_t* v = vehikelbauer_t::baue( line->get_schedule()->eintrag[0].pos, this, NULL, line->get_convoy(0)->get_vehikel(0)->get_besch()  );
 					convoi_t* new_cnv = new convoi_t(this);
@@ -1348,6 +1376,12 @@ DBG_MESSAGE("ai_passenger_t::do_passenger_ki()","using %s on %s",road_vehicle->g
 
 void ai_passenger_t::rdwr(loadsave_t *file)
 {
+	if(  file->get_version()<102002  ) {
+		// do to an error the player was never saved correctly
+		spieler_t::rdwr(file);
+		return;
+	}
+
 	xml_tag_t t( file, "ai_passenger_t" );
 
 	// first: do all the administration
diff --git a/player/ai_passenger.h b/player/ai_passenger.h
old mode 100644
new mode 100755
index 77cb0a4..8984581
--- a/player/ai_passenger.h
+++ b/player/ai_passenger.h
@@ -98,7 +98,7 @@ public:
 
 	virtual void bescheid_vehikel_problem(convoihandle_t cnv,const koord3d ziel);
 
-	void rdwr(loadsave_t *file);
+	virtual void rdwr(loadsave_t *file);
 
 	bool set_active( bool b );
 
diff --git a/player/simplay.cc b/player/simplay.cc
index 81626bf..51872c6 100644
--- a/player/simplay.cc
+++ b/player/simplay.cc
@@ -56,6 +56,7 @@
 #include "../dataobj/umgebung.h"
 
 #include "../dings/gebaeude.h"
+#include "../dings/leitung2.h"
 #include "../dings/wayobj.h"
 #include "../dings/zeiger.h"
 
@@ -220,10 +221,18 @@ void spieler_t::age_messages(long /*delta_t*/)
 
 
 
-void spieler_t::add_message(koord k, int betrag)
+void spieler_t::add_message(koord k, sint32 betrag)
 {
-	income_message_t *m = new income_message_t(betrag,k);
-	messages.append( m );
+	if(  !messages.empty()  &&  messages.back()->pos==k  &&  messages.back()->alter==127  ) {
+		// last message exactly at same place, not aged
+		betrag += (sint32)(100.0*atof(messages.back()->str));
+		money_to_string(messages.back()->str, betrag/100.0);
+	}
+	else {
+		// otherwise new message
+		income_message_t *m = new income_message_t(betrag,k);
+		messages.append( m );
+	}
 }
 
 
@@ -238,21 +247,11 @@ void spieler_t::set_player_color(uint8 col1, uint8 col2)
 
 
 /**
- * Wird von welt in kurzen abständen aufgerufen
+ * Any action goes here (only need for AI at the moment)
  * @author Hj. Malthaner
  */
 void spieler_t::step()
 {
-	// die haltestellen müssen die Fahrpläne rgelmaessig pruefen
-	uint8 i = (uint8)(welt->get_steps()+player_nr);
-	slist_iterator_tpl <halthandle_t> iter( halt_list );
-	while(iter.next()) {
-		if( (i & 31) == 0 ) {
-			iter.get_current()->step();
-			INT_CHECK("simplay 156");
-		}
-		i++;
-	}
 }
 
 
@@ -418,19 +417,20 @@ void spieler_t::buche(const sint64 betrag, const koord pos, enum player_cost typ
 	buche(betrag, type);
 
 	if(betrag != 0) {
-		if(  abs_distance(welt->get_world_position(),pos)<2*(uint32)(display_get_width()/get_tile_raster_width())+3  ) {
+		if(  koord_distance(welt->get_world_position(),pos)<2*(uint32)(display_get_width()/get_tile_raster_width())+3  ) {
 			// only display, if near the screen ...
 			add_message(pos, betrag);
-		}
 
-		if(  !(labs((sint32)betrag)<=10000)  &&  !welt->is_fast_forward()  ) {
-			struct sound_info info;
+			// and same for sound too ...
+			if(  betrag>=10000  &&  !welt->is_fast_forward()  ) {
+				struct sound_info info;
 
-			info.index = SFX_CASH;
-			info.volume = 255;
-			info.pri = 0;
+				info.index = SFX_CASH;
+				info.volume = 255;
+				info.pri = 0;
 
-			welt->play_sound_area_clipped(pos, info);
+				welt->play_sound_area_clipped(pos, info);
+			}
 		}
 	}
 }
@@ -472,7 +472,7 @@ void spieler_t::accounting( spieler_t *sp, const sint64 amount, koord k, enum pl
 
 bool spieler_t::check_owner( const spieler_t *owner, const spieler_t *test )
 {
-	return owner == test  ||  owner == NULL  ||  test == NULL  ||  test == welt->get_spieler(1);
+	return owner == test  ||  owner == NULL  ||  test == welt->get_spieler(1);
 }
 
 
@@ -497,7 +497,7 @@ halthandle_t spieler_t::halt_add(koord pos)
 void
 spieler_t::halt_add(halthandle_t halt)
 {
-	if (!halt_list.is_contained(halt)) {
+	if(!halt_list.is_contained(halt)) {
 		halt_list.append(halt);
 		haltcount ++;
 	}
@@ -509,8 +509,7 @@ spieler_t::halt_add(halthandle_t halt)
  * Entfernt eine Haltestelle des Spielers aus der Liste
  * @author Hj. Malthaner
  */
-void
-spieler_t::halt_remove(halthandle_t halt)
+void spieler_t::halt_remove(halthandle_t halt)
 {
 	halt_list.remove(halt);
 }
@@ -956,10 +955,17 @@ spieler_t::undo()
 
 	// ok, now remove everything last built
 	uint32 cost=0;
-	for(unsigned short i=0;  i<last_built.get_count();  i++  ) {
+	for(  uint32 i=0;  i<last_built.get_count();  i++  ) {
 		grund_t* gr = welt->lookup(last_built[i]);
-		cost += gr->weg_entfernen(undo_type,true);
-//DBG_DEBUG("spieler_t::add_undo()","undo tile %i at (%i,%i)",i,last_built.at(i).x,last_built.at(i).y);
+		if(  undo_type != powerline_wt  ) {
+			cost += gr->weg_entfernen(undo_type,true);
+		}
+		else {
+			cost = 1;
+			leitung_t* lt = gr->get_leitung();
+			lt->entferne(NULL);
+			delete lt;
+		}
 	}
 	last_built.clear();
 	return cost!=0;
diff --git a/player/simplay.h b/player/simplay.h
index 68d6b73..634df77 100644
--- a/player/simplay.h
+++ b/player/simplay.h
@@ -13,13 +13,8 @@
 #include "../halthandle_t.h"
 #include "../convoihandle_t.h"
 
-#include "../besch/weg_besch.h"
-#include "../besch/vehikel_besch.h"
-
 #include "../dataobj/koord.h"
 
-#include "../boden/wege/weg.h"
-
 #include "../tpl/slist_tpl.h"
 #include "../tpl/vector_tpl.h"
 
@@ -132,7 +127,7 @@ protected:
 
 	int last_message_index;
 
-	void add_message(koord k, int summe);
+	void add_message(koord k, sint32 summe);
 
 	/**
 	 * Kennfarbe (Fahrzeuge, Gebäude) des Speielers
@@ -294,7 +289,7 @@ public:
 	 * @param file die offene Save-Datei
 	 * @author Hj. Malthaner
 	 */
-	void rdwr(loadsave_t *file);
+	virtual void rdwr(loadsave_t *file);
 
 	/*
 	 * called after game is fully loaded;
diff --git a/scrolltext.h b/scrolltext.h
index 1d840ce..898bdd0 100644
--- a/scrolltext.h
+++ b/scrolltext.h
@@ -15,7 +15,7 @@
 "Additional Programming:","",
 "","",
 " Volker Meyer","big patches",
-" Hendrik Siegeln","patches",
+" Hendrik Siegeln","ex developer",
 " Niels Roest","GUI",
 " Markus Weber","GUI changes",
 " Markus Pristovsek","current head",
@@ -29,15 +29,18 @@
 " Christoph Mallon","Makefile, patches",
 " Kieron Green","skinned grounds",
 " z9999","misc. patches",
+" Daniel Wachsmuth", "developer",
+" Gerd Wachsmuth", "patches",
 "","",
 "","",
 "Game Design Assistance:","",
 "","",
 " Peter J. Dobrovka","",
 " Tomas Kubes","pak128",
+" Vladimir Slavik", "pak128",
 " Frank Penz","pak.german",
 " Yoshihiro Shishido","pak.japan128",
-"","",
+" Sven Osada","pak96.comic",
 "","",
 "Graphics:","",
 "","",
@@ -68,9 +71,17 @@
 " Niels Roest","Dutch",
 " Pasi Ruhanen","Finnish",
 " Rémi Denis-Courmont","French",
-" Ferencz Szekely","Hungary and Romanian",
+" Ferencz Szekely","Hungary & Romanian",
 " Alex Revo","Russian",
-" Roman Schwörer","",
+" Roman Schwörer","French & German",
+" Yannis Kaskamanid", "Greek",
+" Igor Elizer", "Portugese",
+" Joan-Josep Bargues", "Catalan",
+" Susanna Björverud", "Swedish",
+" Xavier Paz", "Spanish",
+" Wim Vreeswijk", "Dutch",
+" Paul Color", "Swedish",
+" Ignas Brasiskis", "Lithuanian",
 "","",
 "and many more","",
 "","",
@@ -91,6 +102,8 @@
 "","hosting simutrans.com",
 " Dirk Burkholz","",
 "","hosting wiki and german Forum",
+" Frank Penz", "",
+"", "Simutranslator and more",
 "","",
 "", "",
 " And many thanks to all testers and","",
diff --git a/simcity.cc b/simcity.cc
index bc3be54..492dcac 100644
--- a/simcity.cc
+++ b/simcity.cc
@@ -69,7 +69,7 @@ const uint32 stadt_t::step_bau_interval = 21000;
  * try to built cities at least this distance apart
  * @author prissi
  */
-static int minimum_city_distance = 16;
+static uint32 minimum_city_distance = 16;
 
 /*
  * chance to do renovation instead new building (in percent)
@@ -88,7 +88,7 @@ static uint32 min_building_desity = 25;
  * add a new consumer every % people increase
  * @author prissi
  */
-static int industry_increase_every[8];
+static uint32 industry_increase_every[8];
 
 
 // the following are the scores for the different building types
@@ -106,60 +106,26 @@ static int res_neighbour_score[] = {  8, 0, -8 };
  * maximum 7x7 rules
  * @author Hj. Malthaner
  */
-struct rule_t {
+class rule_entry_t {
+public:
+	uint8 x,y;
+	char flag;
+	rule_entry_t() : x(0), y(0), flag('.') {}
+	rule_entry_t(uint8 x_, uint8 y_, char f_) : x(x_), y(y_), flag(f_) {}
+};
+
+class rule_t {
+public:
 	int  chance;
-	char rule[49];
+	vector_tpl<rule_entry_t> rule;
+	rule_t() : chance(0) {}
 };
 
 // house rules
-static int num_house_rules = 0;
-static struct rule_t* house_rules = 0;
+static vector_tpl<rule_t *> house_rules;
 
 // and road rules
-static int num_road_rules = 0;
-static struct rule_t* road_rules = 0;
-
-// rotation of the rules ...
-static const uint8 rotate_rules_0[] = {
-	 0,  1,  2,  3,  4,  5,  6,
-	 7,  8,  9, 10, 11, 12, 13,
-	14, 15, 16, 17, 18, 19, 20,
-	21, 22, 23, 24, 25, 26, 27,
-	28, 29, 30, 31, 32, 33, 34,
-	35, 36, 37, 38, 39, 40, 41,
-	42, 43, 44, 45, 46, 47, 48
-};
-
-
-static const uint8 rotate_rules_90[] = {
-	6, 13, 20, 27, 34, 41, 48,
-	5, 12, 19, 26, 33, 40, 47,
-	4, 11, 18, 25, 32, 39, 46,
-	3, 10, 17, 24, 31, 38, 45,
-	2,  9, 16, 23, 30, 37, 44,
-	1,  8, 15, 22, 29, 36, 43,
-	0,  7, 14, 21, 28, 35, 42
-};
-
-static const uint8 rotate_rules_180[] = {
-	48, 47, 46, 45, 44, 43, 42,
-	41, 40, 39, 38, 37, 36, 35,
-	34, 33, 32, 31, 30, 29, 28,
-	27, 26, 25, 24, 23, 22, 21,
-	20, 19, 18, 17, 16, 15, 14,
-	13, 12, 11, 10,  9,  8,  7,
-	 6,  5,  4,  3,  2,  1,  0
-};
-
-static const uint8 rotate_rules_270[] = {
-	42, 35, 28, 21, 14,  7, 0,
-	43, 36, 29, 22, 15,  8, 1,
-	44, 37, 30, 23, 16,  9, 2,
-	45, 38, 31, 24, 17, 10, 3,
-	46, 39, 32, 25, 18, 11, 4,
-	47, 40, 33, 26, 19, 12, 5,
-	48, 41, 34, 27, 20, 13, 6
-};
+static vector_tpl<rule_t *> road_rules;
 
 /**
  * Symbols in rules:
@@ -173,73 +139,77 @@ static const uint8 rotate_rules_270[] = {
  * u = good slope for way
  * U = not a slope for ways
  * . = beliebig
- *
+ */
+
+// here '.' is ignored, since it will not be tested anyway
+const char* allowed_chars_in_rule = "SsnHhTtUu";
+
+/*
  * @param pos position to check
  * @param regel the rule to evaluate
  * @return true on match, false otherwise
  * @author Hj. Malthaner
  */
-bool stadt_t::bewerte_loc(const koord pos, const char* regel, int rotation)
+bool stadt_t::bewerte_loc(const koord pos, rule_t &regel, int rotation)
 {
+	//printf("Test for (%s) in rotation %d\n", pos.get_str(), rotation);
 	koord k;
-	const uint8* index_to_rule = 0;
-	switch (rotation) {
-		case   0: index_to_rule = rotate_rules_0;   break;
-		case  90: index_to_rule = rotate_rules_90;  break;
-		case 180: index_to_rule = rotate_rules_180; break;
-		case 270: index_to_rule = rotate_rules_270; break;
-	}
-
-	uint8 rule_index = 0;
-	for (k.y = pos.y - 3; k.y <= pos.y + 3; k.y++) {
-		for (k.x = pos.x - 3; k.x <= pos.x + 3; k.x++) {
-			const char rule = regel[index_to_rule[rule_index++]];
-			if (rule != 0) {
-				const grund_t* gr = welt->lookup_kartenboden(k);
-				if (gr == NULL) {
-					// outside of the map => cannot apply this rule
-					return false;
-				}
 
-				switch (rule) {
-					case 's':
-						// road?
-						if (!gr->hat_weg(road_wt)) return false;
-						break;
-					case 'S':
-						// not road?
-						if (gr->hat_weg(road_wt)) return false;
-						break;
-					case 'h':
-						// is house
-						if (gr->get_typ() != grund_t::fundament  ||  gr->obj_bei(0)->get_typ()!=ding_t::gebaeude) return false;
-						break;
-					case 'H':
-						// no house
-						if (gr->get_typ() == grund_t::fundament) return false;
-						break;
-					case 'n':
-						// nature/empty
-						if (!gr->ist_natur() || gr->kann_alle_obj_entfernen(NULL) != NULL) return false;
-						break;
- 					case 'u':
- 						// unbuildable for road
- 						if (!hang_t::ist_wegbar(gr->get_grund_hang())) return false;
- 						break;
- 					case 'U':
- 						// road may be buildable
- 						if (hang_t::ist_wegbar(gr->get_grund_hang())) return false;
- 						break;
-					case 't':
-						// here is a stop/extension building
-						if (!gr->is_halt()) return false;
-						break;
-					case 'T':
-						// no stop
-						if (gr->is_halt()) return false;
-						break;
-				}
-			}
+	for(uint32 i=0; i<regel.rule.get_count(); i++){
+		rule_entry_t &r = regel.rule[i];
+		uint8 x,y;
+		switch (rotation) {
+			case   0: x=r.x; y=r.y; break;
+			case  90: x=r.y; y=6-r.x; break;
+			case 180: x=6-r.x; y=6-r.y; break;
+			case 270: x=6-r.y; y=r.x; break;
+		}
+
+		const koord k(pos.x+x-3, pos.y+y-3);
+		const grund_t* gr = welt->lookup_kartenboden(k);
+		if (gr == NULL) {
+			// outside of the map => cannot apply this rule
+			return false;
+		}
+		switch (r.flag) {
+			case 's':
+				// road?
+				if (!gr->hat_weg(road_wt)) return false;
+				break;
+			case 'S':
+				// not road?
+				if (gr->hat_weg(road_wt)) return false;
+				break;
+			case 'h':
+				// is house
+				if (gr->get_typ() != grund_t::fundament  ||  gr->obj_bei(0)->get_typ()!=ding_t::gebaeude) return false;
+				break;
+			case 'H':
+				// no house
+				if (gr->get_typ() == grund_t::fundament) return false;
+				break;
+			case 'n':
+				// nature/empty
+				if (!gr->ist_natur() || gr->kann_alle_obj_entfernen(NULL) != NULL) return false;
+				break;
+			case 'U':
+				// unbuildable for road
+				if (!hang_t::ist_wegbar(gr->get_grund_hang())) return false;
+				break;
+			case 'u':
+				// road may be buildable
+				if (hang_t::ist_wegbar(gr->get_grund_hang())) return false;
+				break;
+			case 't':
+				// here is a stop/extension building
+				if (!gr->is_halt()) return false;
+				break;
+			case 'T':
+				// no stop
+				if (gr->is_halt()) return false;
+				break;
+			default: ;
+				// ignore
 		}
 	}
 	return true;
@@ -251,7 +221,7 @@ bool stadt_t::bewerte_loc(const koord pos, const char* regel, int rotation)
  * prissi: but the rules should explicitly forbid building then?!?
  * @author Hj. Malthaner
  */
-sint32 stadt_t::bewerte_pos(const koord pos, const char* regel)
+sint32 stadt_t::bewerte_pos(const koord pos, rule_t &regel)
 {
 	// will be called only a single time, so we can stop after a single match
 	if(bewerte_loc(pos, regel,   0) ||
@@ -264,7 +234,7 @@ sint32 stadt_t::bewerte_pos(const koord pos, const char* regel)
 }
 
 
-void stadt_t::bewerte_strasse(koord k, sint32 rd, const char* regel)
+void stadt_t::bewerte_strasse(koord k, sint32 rd, rule_t &regel)
 {
 	if (simrand(rd) == 0) {
 		best_strasse.check(k, bewerte_pos(k, regel));
@@ -272,7 +242,7 @@ void stadt_t::bewerte_strasse(koord k, sint32 rd, const char* regel)
 }
 
 
-void stadt_t::bewerte_haus(koord k, sint32 rd, const char* regel)
+void stadt_t::bewerte_haus(koord k, sint32 rd, rule_t &regel)
 {
 	if (simrand(rd) == 0) {
 		best_haus.check(k, bewerte_pos(k, regel));
@@ -281,6 +251,29 @@ void stadt_t::bewerte_haus(koord k, sint32 rd, const char* regel)
 
 
 
+uint32 stadt_t::get_industry_increase()
+{
+	return industry_increase_every[0];
+}
+
+void stadt_t::set_industry_increase(uint32 ind_increase)
+{
+	for (int i = 0; i < 8; i++) {
+		industry_increase_every[i] = ind_increase << i;
+	}
+}
+
+uint32 stadt_t::get_minimum_city_distance()
+{
+	return minimum_city_distance;
+}
+
+void stadt_t::set_minimum_city_distance(uint32 s)
+{
+	minimum_city_distance = s;
+}
+
+
 
 /**
  * Reads city configuration data
@@ -306,10 +299,7 @@ bool stadt_t::cityrules_init(cstring_t objfilename)
 	minimum_city_distance = contents.get_int("minimum_city_distance", 16);
 	renovation_percentage = (uint32)contents.get_int("renovation_percentage", 25);
 	min_building_desity = (uint32)contents.get_int("minimum_building_desity", 25);
-	int ind_increase = contents.get_int("industry_increase_every", 0);
-	for (int i = 0; i < 8; i++) {
-		industry_increase_every[i] = ind_increase << i;
-	}
+	set_industry_increase( contents.get_int("industry_increase_every", 0) );
 
 	// init the building value tables
 	ind_start_score = contents.get_int("ind_start_score", 0);
@@ -327,7 +317,7 @@ bool stadt_t::cityrules_init(cstring_t objfilename)
 	res_neighbour_score[1] = contents.get_int("res_near_com",  0);
 	res_neighbour_score[2] = contents.get_int("res_near_ind", -8);
 
-	num_house_rules = 0;
+	uint32 num_house_rules = 0;
 	for (;;) {
 		sprintf(buf, "house_%d", num_house_rules + 1);
 		if (contents.get_string(buf, 0)) {
@@ -338,7 +328,7 @@ bool stadt_t::cityrules_init(cstring_t objfilename)
 	}
 	DBG_MESSAGE("stadt_t::init()", "Read %d house building rules", num_house_rules);
 
-	num_road_rules = 0;
+	uint32 num_road_rules = 0;
 	for (;;) {
 		sprintf(buf, "road_%d", num_road_rules + 1);
 		if (contents.get_string(buf, 0)) {
@@ -349,62 +339,90 @@ bool stadt_t::cityrules_init(cstring_t objfilename)
 	}
 	DBG_MESSAGE("stadt_t::init()", "Read %d road building rules", num_road_rules);
 
-	house_rules = new struct rule_t[num_house_rules];
-	for (int i = 0; i < num_house_rules; i++) {
+	house_rules.clear();
+	for (uint32 i = 0; i < num_house_rules; i++) {
+		house_rules.append(new rule_t());
 		sprintf(buf, "house_%d.chance", i + 1);
-		house_rules[i].chance = contents.get_int(buf, 0);
-		memset(house_rules[i].rule, 0, sizeof(house_rules[i].rule));
+		house_rules[i]->chance = contents.get_int(buf, 0);
 
 		sprintf(buf, "house_%d", i + 1);
 		const char* rule = contents.get_string(buf, "");
 
 		// skip leading spaces (use . for padding)
-		while (*rule == ' ') rule++;
+		while (*rule == ' ') {
+			rule++;
+		}
 
 		// find out rule size
 		size_t size = 0;
 		size_t maxlen = strlen(rule);
-		while (size < maxlen  &&  rule[size]!=' ') size++;
+		while (size < maxlen  &&  rule[size]!=' ') {
+			size++;
+		}
 
-		if (size > 7 || maxlen < size * (size + 1) - 1 || (size & 1) == 0 || size <= 2) {
+		if (size > 7  ||  maxlen < size * (size + 1) - 1  ||  (size & 1) == 0  ||  size <= 2 ) {
 			dbg->fatal("stadt_t::cityrules_init()", "house rule %d has bad format!", i + 1);
 		}
 
 		// put rule into memory
-		const uint offset = (7 - size) / 2;
+		const uint8 offset = (7 - (uint)size) / 2;
 		for (uint y = 0; y < size; y++) {
 			for (uint x = 0; x < size; x++) {
-				house_rules[i].rule[(offset + y) * 7 + x + offset] = rule[x + y * (size + 1)];
+				const char flag = rule[x + y * (size + 1)];
+				// check for allowed characters; ignore '.';
+				// leave midpoint out, should be 'n', which is checked in baue() anyway
+				if ((x+offset!=3  ||  y+offset!=3)  &&  (flag!=0  &&  strchr(allowed_chars_in_rule, flag))) {
+					house_rules[i]->rule.append(rule_entry_t(x+offset,y+offset,flag));
+				}
+				else {
+					if ((x+offset!=3  ||  y+offset!=3)  &&  flag!='.') {
+						dbg->warning("stadt_t::cityrules_init()", "house rule %d entry (%d,%d) is '%c' and will be ignored", i + 1, x+offset, y+offset, flag);
+					}
+				}
 			}
 		}
 	}
 
-	road_rules = new struct rule_t[num_road_rules];
-	for (int i = 0; i < num_road_rules; i++) {
+	road_rules.clear();
+	for (uint32 i = 0; i < num_road_rules; i++) {
+		road_rules.append(new rule_t());
 		sprintf(buf, "road_%d.chance", i + 1);
-		road_rules[i].chance = contents.get_int(buf, 0);
-		memset(road_rules[i].rule, 0, sizeof(road_rules[i].rule));
+		road_rules[i]->chance = contents.get_int(buf, 0);
 
 		sprintf(buf, "road_%d", i + 1);
 		const char* rule = contents.get_string(buf, "");
 
 		// skip leading spaces (use . for padding)
-		while (*rule == ' ') rule++;
+		while (*rule == ' ') {
+			rule++;
+		}
 
 		// find out rule size
 		size_t size = 0;
 		size_t maxlen = strlen(rule);
-		while (size < maxlen && rule[size] != ' ') size++;
+		while (size < maxlen && rule[size] != ' ') {
+			size++;
+		}
 
-		if (size > 7 || maxlen < size * (size + 1) - 1 || (size & 1) == 0 || size <= 2) {
+		if (  size > 7  ||  maxlen < size * (size + 1) - 1  ||  (size & 1) == 0  ||  size <= 2  ) {
 			dbg->fatal("stadt_t::cityrules_init()", "road rule %d has bad format!", i + 1);
 		}
 
 		// put rule into memory
-		const uint8 offset = (7 - size) / 2;
+		const uint8 offset = (7 - (uint)size) / 2;
 		for (uint y = 0; y < size; y++) {
 			for (uint x = 0; x < size; x++) {
-				road_rules[i].rule[(offset + y) * 7 + x + offset] = rule[x + y * (size + 1)];
+				const char flag = rule[x + y * (size + 1)];
+				// check for allowed characters; ignore '.';
+				// leave midpoint out, should be 'n', which is checked in baue() anyway
+				if ((x+offset!=3  ||  y+offset!=3)  &&  (flag!=0  &&  strchr(allowed_chars_in_rule, flag))) {
+					road_rules[i]->rule.append(rule_entry_t(x+offset,y+offset,flag));
+				}
+				else {
+					if ((x+offset!=3  ||  y+offset!=3)  &&  flag!='.') {
+						dbg->warning("stadt_t::cityrules_init()", "road rule %d entry (%d,%d) is '%c' and will be ignored", i + 1, x+offset, y+offset, flag);
+					}
+				}
 			}
 		}
 	}
@@ -559,27 +577,6 @@ void stadt_t::update_gebaeude_from_stadt(gebaeude_t* gb)
 
 
 
-// recalculate house informations (used for target selection)
-void stadt_t::recount_houses()
-{
-	DBG_MESSAGE("stadt_t::rdwr()", "borders (%i,%i) -> (%i,%i)", lo.x, lo.y, ur.x, ur.y);
-	buildings.clear();
-	for (sint16 y = lo.y; y <= ur.y; y++) {
-		for (sint16 x = lo.x; x <= ur.x; x++) {
-			const grund_t* gr = welt->lookup_kartenboden(koord(x, y));
-			gebaeude_t* gb = dynamic_cast<gebaeude_t*>(gr->first_obj());
-			if (gb!=NULL  &&  gb->get_tile()->get_besch()->is_connected_with_town()  &&  welt->suche_naechste_stadt(koord(x, y)) == this) {
-				// no attraction, just normal buidlings or townhall
-				buildings.append(gb, gb->get_tile()->get_besch()->get_level() + 1, 16);
-				gb->set_stadt(this);
-			}
-		}
-	}
-	DBG_MESSAGE("recount_houses()", "%s has %i bev", get_name(), get_einwohner());
-}
-
-
-
 void stadt_t::pruefe_grenzen(koord k)
 {
 	if(  has_low_density  ) {
@@ -697,18 +694,11 @@ void stadt_t::recalc_city_size()
 
 
 
-void stadt_t::init_pax_ziele()
+void stadt_t::init_pax_destinations()
 {
-	const int gr_x = welt->get_groesse_x();
-	const int gr_y = welt->get_groesse_y();
-
-	for (int j = 0; j < 128; j++) {
-		for (int i = 0; i < 128; i++) {
-			const koord pos(i * gr_x / 128, j * gr_y / 128);
-			const grund_t* gr = welt->lookup(pos)->get_kartenboden();
-			pax_ziele_alt.at(i, j) = pax_ziele_neu.at(i, j) = reliefkarte_t::calc_relief_farbe(gr);
-		}
-	}
+	pax_destinations_old.clear();
+	pax_destinations_new.clear();
+	pax_destinations_new_change = 0;
 }
 
 
@@ -717,6 +707,10 @@ stadt_t::~stadt_t()
 	// close info win
 	destroy_win((long)this);
 
+	if(  reliefkarte_t::get_karte()->get_city() == this  ) {
+		reliefkarte_t::get_karte()->set_city(NULL);
+	}
+
 	// olny if there is still a world left to delete from
 	if(welt->get_groesse_x()>1) {
 
@@ -747,14 +741,15 @@ stadt_t::~stadt_t()
 
 stadt_t::stadt_t(spieler_t* sp, koord pos, sint32 citizens) :
 	buildings(16),
-	pax_ziele_alt(128, 128),
-	pax_ziele_neu(128, 128),
+	pax_destinations_old(koord(PAX_DESTINATIONS_SIZE, PAX_DESTINATIONS_SIZE)),
+	pax_destinations_new(koord(PAX_DESTINATIONS_SIZE, PAX_DESTINATIONS_SIZE)),
 	arbeiterziele(4)
 {
 	welt = sp->get_welt();
 	assert(welt->ist_in_kartengrenzen(pos));
 
 	step_count = 0;
+	pax_destinations_new_change = 0;
 	next_step = 0;
 	step_interval = 1;
 	next_bau_step = 0;
@@ -806,6 +801,7 @@ next_name:;
 	check_bau_rathaus(true);
 
 	wachstum = 0;
+	allow_citygrowth = true;
 	change_size( citizens );
 
 	// fill with start citicens ...
@@ -836,8 +832,8 @@ next_name:;
 
 stadt_t::stadt_t(karte_t* wl, loadsave_t* file) :
 	buildings(16),
-	pax_ziele_alt(128, 128),
-	pax_ziele_neu(128, 128)
+	pax_destinations_old(koord(PAX_DESTINATIONS_SIZE, PAX_DESTINATIONS_SIZE)),
+	pax_destinations_new(koord(PAX_DESTINATIONS_SIZE, PAX_DESTINATIONS_SIZE))
 {
 	welt = wl;
 	step_count = 0;
@@ -958,6 +954,14 @@ void stadt_t::rdwr(loadsave_t* file)
 		file->rdwr_long(dummy, "\n");
 	}
 
+	// since 102.2 there are static cities
+	if(file->get_version()>102001) {
+		file->rdwr_bool(allow_citygrowth,"");
+	}
+	else if(  file->is_loading()  ) {
+		allow_citygrowth = true;
+	}
+
 
 	if(file->is_loading()) {
 		// 08-Jan-03: Due to some bugs in the special buildings/town hall
@@ -991,7 +995,7 @@ void stadt_t::laden_abschliessen()
 	}
 
 	// clear the minimaps
-	init_pax_ziele();
+	init_pax_destinations();
 
 	// init step counter with meaningful value
 	step_interval = (2 << 18u) / (buildings.get_count() * 4 + 1);
@@ -1021,15 +1025,25 @@ void stadt_t::rotate90( const sint16 y_size )
 	best_strasse.reset(pos);
 	best_haus.reset(pos);
 	// rathaus position may be changed a little!
-	array2d_tpl<uint8> pax_ziele_temp( 128, 128 );
-	pax_ziele_temp.copy_from( pax_ziele_neu );
-	for( int y=0;  y<128;  y++  ) {
-		for( int x=0;  x<128;  x++  ) {
-			pax_ziele_neu.at( 127-y, x) = pax_ziele_temp.at(x, y);
-			pax_ziele_temp.at( x, y ) = pax_ziele_alt.at( 127-y, x );
-		}
+	sparse_tpl<uint8> pax_destinations_temp(koord( PAX_DESTINATIONS_SIZE, PAX_DESTINATIONS_SIZE ));
+
+	uint8 color;
+	koord pos;
+	for( uint16 i = 0; i < pax_destinations_new.get_data_count(); i++ ) {
+		pax_destinations_new.get_nonzero(i, pos, color);
+		assert( color != 0 );
+		pax_destinations_temp.set( PAX_DESTINATIONS_SIZE-1-pos.y, pos.x, color );
+	}
+	swap<uint8>( pax_destinations_temp, pax_destinations_new );
+
+	pax_destinations_temp.clear();
+	for( uint16 i = 0; i < pax_destinations_old.get_data_count(); i++ ) {
+		pax_destinations_old.get_nonzero(i, pos, color);
+		assert( color != 0 );
+		pax_destinations_temp.set( PAX_DESTINATIONS_SIZE-1-pos.y, pos.x, color );
 	}
-	pax_ziele_alt.copy_from( pax_ziele_temp );
+	pax_destinations_new_change ++;
+	swap<uint8>( pax_destinations_temp, pax_destinations_old );
 }
 
 
@@ -1063,7 +1077,7 @@ void stadt_t::add_factory_arbeiterziel(fabrik_t* fab)
 {
 	const koord k = fab->get_pos().get_2d() - pos;
 	// worker do not travel more than 50 tiles
-	if(  (k.x*k.x) + (k.y*k.y) < CONNECT_TO_TOWN_SQUARE_DISTANCE  ) {
+	if(  koord_distance( fab->get_pos(), pos ) < welt->get_einstellungen()->get_factory_worker_radius()  ) {
 		// no fish swarms ...
 		if (strcmp("fish_swarm", fab->get_besch()->get_name()) != 0) {
 //			DBG_MESSAGE("stadt_t::add_factory_arbeiterziel()", "found %s with level %i", fab->get_name(), fab->get_besch()->get_pax_level());
@@ -1105,7 +1119,7 @@ void stadt_t::change_size(long delta_citicens)
 			bev += delta_citicens;
 		}
 		else {
-//			remove_city();
+//				remove_city();
 			bev = 0;
 		}
 		step_bau();
@@ -1197,17 +1211,9 @@ void stadt_t::roll_history()
 
 void stadt_t::neuer_monat()
 {
-	const int gr_x = welt->get_groesse_x();
-	const int gr_y = welt->get_groesse_y();
-
-	pax_ziele_alt.copy_from(pax_ziele_neu);
-	for (int j = 0; j < 128; j++) {
-		for (int i = 0; i < 128; i++) {
-			const koord pos(i * gr_x / 128, j * gr_y / 128);
-			const grund_t* gr = welt->lookup(pos)->get_kartenboden();
-			pax_ziele_neu.at(i, j) = pax_ziele_neu.at(i, j) = reliefkarte_t::calc_relief_farbe(gr);
-		}
-	}
+	swap<uint8>( pax_destinations_old, pax_destinations_new );
+	pax_destinations_new.clear();
+	pax_destinations_new_change = 0;
 
 	roll_history();
 
@@ -1269,21 +1275,27 @@ void stadt_t::calc_growth()
 		}
 	}
 
+	// maybe this town should stay static
+	if(  !allow_citygrowth  ) {
+		wachstum = 0;
+		return;
+	}
+
 	/* four parts contribute to town growth:
 	 * passenger transport 40%, mail 20%, goods (30%), and electricity (10%)
 	 */
-	sint32 pas = (city_history_month[0][HIST_PAS_TRANSPORTED] * (40<<6)) / (city_history_month[0][HIST_PAS_GENERATED] + 1);
-	sint32 mail = (city_history_month[0][HIST_MAIL_TRANSPORTED] * (20<<6)) / (city_history_month[0][HIST_MAIL_GENERATED] + 1);
+	sint32 pas = (city_history_month[0][HIST_PAS_TRANSPORTED] * (welt->get_einstellungen()->get_passenger_multiplier()<<6)) / (city_history_month[0][HIST_PAS_GENERATED] + 1);
+	sint32 mail = (city_history_month[0][HIST_MAIL_TRANSPORTED] * (welt->get_einstellungen()->get_mail_multiplier()<<6)) / (city_history_month[0][HIST_MAIL_GENERATED] + 1);
 	sint32 electricity = 0;
-	sint32 goods = city_history_month[0][HIST_GOODS_NEEDED]==0 ? 0 : (city_history_month[0][HIST_GOODS_RECIEVED] * (20<<6)) / (city_history_month[0][HIST_GOODS_NEEDED]);
+	sint32 goods = city_history_month[0][HIST_GOODS_NEEDED]==0 ? 0 : (city_history_month[0][HIST_GOODS_RECIEVED] * (welt->get_einstellungen()->get_goods_multiplier()<<6)) / (city_history_month[0][HIST_GOODS_NEEDED]);
 
 	// smaller towns should growth slower to have villages for a longer time
-	sint32 weight_factor = 100;
+	sint32 weight_factor = welt->get_einstellungen()->get_growthfactor_large();
 	if(bev<1000) {
-		weight_factor = 400;
+		weight_factor = welt->get_einstellungen()->get_growthfactor_small();
 	}
 	else if(bev<10000) {
-		weight_factor = 200;
+		weight_factor = welt->get_einstellungen()->get_growthfactor_medium();
 	}
 
 	// now give the growth for this step
@@ -1363,7 +1375,7 @@ void stadt_t::step_passagiere()
 	halthandle_t start_halt = halthandle_t();
 	for (uint h = 0; h < plan->get_haltlist_count(); h++) {
 		halthandle_t halt = halt_list[h];
-		if (halt->is_enabled(wtyp)  &&  halt->get_ware_summe(wtyp)<=halt->get_capacity(wtyp->get_index())) {
+		if(  halt->is_enabled(wtyp)  &&  !halt->is_overcrowded(wtyp->get_catg_index())  ) {
 			start_halt = halt;
 			break;
 		}
@@ -1400,18 +1412,18 @@ void stadt_t::step_passagiere()
 
 			// suitable end search
 			unsigned ziel_count = 0;
-			for (uint h = 0; h < dest_plan->get_haltlist_count(); h++) {
+			for(  uint8 h = 0;  h < dest_plan->get_haltlist_count();  h++  ) {
 				halthandle_t halt = dest_list[h];
-				if (halt->is_enabled(wtyp)) {
+				if(  halt->is_enabled(wtyp)  ) {
 					ziel_count++;
-					if (halt == start_halt) {
+					if(  halt == start_halt  ) {
 						can_walk_ziel = true;
 						break; // because we found at least one valid step ...
 					}
 				}
 			}
 
-			if (ziel_count == 0) {
+			if(  ziel_count == 0  ) {
 // DBG_MESSAGE("stadt_t::step_passagiere()", "No stop near dest (%d, %d)", ziel.x, ziel.y);
 				// Thus, routing is not possible and we do not need to do a calculation.
 				// Mark ziel as destination without route and continue.
@@ -1437,13 +1449,13 @@ void stadt_t::step_passagiere()
 			// ok, they are not in walking distance
 			ware_t pax(wtyp);
 			pax.set_zielpos(ziel);
-			pax.menge = (wtyp == warenbauer_t::passagiere ? pax_left_to_do : max(1, pax_left_to_do >> 2));
+			pax.menge = (wtyp == warenbauer_t::passagiere ? pax_left_to_do : 1 );
 
 			// now, finally search a route; this consumes most of the time
 			koord return_zwischenziel = koord::invalid; // for people going back ...
-			start_halt->suche_route(pax, will_return ? &return_zwischenziel : NULL);
+			const int route_result = start_halt->suche_route( pax, will_return ? &return_zwischenziel : NULL, welt->get_einstellungen()->is_no_routing_over_overcrowding() );
 
-			if (pax.get_ziel().is_bound()) {
+			if(  route_result == haltestelle_t::ROUTE_OK  ) {
 				// so we have happy traveling passengers
 				start_halt->starte_mit_route(pax);
 				start_halt->add_pax_happy(pax.menge);
@@ -1451,7 +1463,15 @@ void stadt_t::step_passagiere()
 				merke_passagier_ziel(ziel, COL_YELLOW);
 				city_history_year[0][history_type] += pax.menge;
 				city_history_month[0][history_type] += pax.menge;
-			} else {
+			}
+			else if(  route_result==haltestelle_t::ROUTE_OVERCROWDED  ) {
+				merke_passagier_ziel(ziel, COL_ORANGE );
+				start_halt->add_pax_unhappy(pax_left_to_do);
+				if(  will_return  ) {
+					pax.get_ziel()->add_pax_unhappy(pax_left_to_do);
+				}
+			}
+			else {
 				start_halt->add_pax_no_route(pax_left_to_do);
 				merke_passagier_ziel(ziel, COL_DARK_ORANGE);
 #ifdef DESTINATION_CITYCARS
@@ -1461,13 +1481,9 @@ void stadt_t::step_passagiere()
 			}
 
 			// send them also back
-			if (will_return != no_return && pax.get_ziel().is_bound()) {
+			if(  route_result==haltestelle_t::ROUTE_OK  &&  will_return != no_return  ) {
 				// this comes most of the times for free and balances also the amounts!
 				halthandle_t ret_halt = pax.get_ziel();
-				if (will_return != town_return) {
-					// restore normal mail amount => more mail from attractions and factories than going to them
-					pax.menge = pax_left_to_do;
-				}
 
 				// we just have to ensure, the ware can be delivered at this station
 				bool found = false;
@@ -1481,12 +1497,14 @@ void stadt_t::step_passagiere()
 				}
 
 				// now try to add them to the target halt
-				uint32 max_ware =ret_halt->get_capacity(wtyp->get_index());
-				if(ret_halt->get_ware_summe(wtyp) <= max_ware) {
+				uint32 max_ware = ret_halt->get_capacity(wtyp->get_index());
+				if(  !ret_halt->is_overcrowded(wtyp->get_catg_index())  ) {
 					// prissi: not overcrowded and can recieve => add them
 					if (found) {
 						ware_t return_pax (wtyp);
 
+						// always use normal amount for return pas/mail
+						// (for mail pax.menge might have been smaller!)
 						return_pax.menge = pax_left_to_do;
 						return_pax.set_zielpos(k);
 						return_pax.set_ziel(start_halt);
@@ -1506,7 +1524,8 @@ void stadt_t::step_passagiere()
 			}
 			INT_CHECK( "simcity 1579" );
 		}
-	} else {
+	}
+	else {
 		// the unhappy passengers will be added to all crowded stops
 		// however, there might be no stop too
 		for(  uint h=0;  h<plan->get_haltlist_count(); h++  ) {
@@ -1562,23 +1581,24 @@ koord stadt_t::get_zufallspunkt() const
  */
 koord stadt_t::finde_passagier_ziel(pax_zieltyp* will_return)
 {
-	const int rand = simrand(100);
+	const sint16 rand = simrand(100);
 
 	// about 1/3 are workers
-	if (rand < FACTORY_PAX && arbeiterziele.get_sum_weight() > 0) {
+	if(  rand < welt->get_einstellungen()->get_factory_worker_percentage()  &&  arbeiterziele.get_sum_weight() > 0  ) {
 		const fabrik_t* fab = arbeiterziele.at_weight(simrand(arbeiterziele.get_sum_weight()));
 		*will_return = factoy_return;	// worker will return
 		return fab->get_pos().get_2d();
-	} else if (rand < TOURIST_PAX + FACTORY_PAX && welt->get_ausflugsziele().get_sum_weight() > 0) {
+	} else if(  rand < welt->get_einstellungen()->get_tourist_percentage() + welt->get_einstellungen()->get_factory_worker_percentage()  &&  welt->get_ausflugsziele().get_sum_weight() > 0  ) {
 		*will_return = tourist_return;	// tourists will return
 		const gebaeude_t* gb = welt->get_random_ausflugsziel();
 		return gb->get_pos().get_2d();
-	} else {
+	}
+	else {
 		// if we reach here, at least a single town existes ...
 		const stadt_t* zielstadt = welt->get_random_stadt();
 
 		// we like nearer towns more
-		if (abs(zielstadt->pos.x - pos.x) + abs(zielstadt->pos.y - pos.y) > 120) {
+		if(  koord_distance( zielstadt->pos, pos ) > 120  ) {
 			// retry once ...
 			zielstadt = welt->get_random_stadt();
 		}
@@ -1593,10 +1613,11 @@ koord stadt_t::finde_passagier_ziel(pax_zieltyp* will_return)
 void stadt_t::merke_passagier_ziel(koord k, uint8 color)
 {
 	const koord p = koord(
-		((k.x * 128) / welt->get_groesse_x()) & 127,
-		((k.y * 128) / welt->get_groesse_y()) & 127
+		((k.x * PAX_DESTINATIONS_SIZE) / welt->get_groesse_x()) & (PAX_DESTINATIONS_SIZE-1),
+		((k.y * PAX_DESTINATIONS_SIZE) / welt->get_groesse_y()) & (PAX_DESTINATIONS_SIZE-1)
 	);
-	pax_ziele_neu.at(p) = color;
+	pax_destinations_new_change ++;
+	pax_destinations_new.set(p, color);
 }
 
 
@@ -1673,7 +1694,7 @@ void stadt_t::check_bau_spezial(bool new_town)
 		if (simrand(100) < (uint)besch->get_chance()) {
 			// baue was immer es ist
 			int rotate = 0;
-			bool is_rotate = besch->get_all_layouts() > 10;
+			bool is_rotate = besch->get_all_layouts() > 1;
 			koord best_pos = bauplatz_mit_strasse_sucher_t(welt).suche_platz(pos, besch->get_b(), besch->get_h(), besch->get_allowed_climate_bits(), &is_rotate);
 
 			if (best_pos != koord::invalid) {
@@ -1795,16 +1816,16 @@ void stadt_t::check_bau_rathaus(bool new_town)
 			for (k.x = 0; k.x < groesse_alt.x; k.x++) {
 				for (k.y = 0; k.y < groesse_alt.y; k.y++) {
 					// we itereate over all tiles, since the townhalls are allowed sizes bigger than 1x1
-
-					gr = welt->lookup(pos_alt + k)->get_kartenboden();
+					const koord pos = pos_alt + k;
+					gr = welt->lookup(pos)->get_kartenboden();
 		DBG_MESSAGE("stadt_t::check_bau_rathaus()", "loesch %p", gr->first_obj());
 					gr->obj_loesche_alle(NULL);
 
-					if (umziehen) {
+					if(umziehen) {
 						DBG_MESSAGE("stadt_t::check_bau_rathaus()", "delete townhall tile %i,%i (gb=%p)", k.x, k.y, gb);
+						welt->access(pos)->boden_ersetzen( gr, new boden_t(welt,gr->get_pos(),hang_t::flach) );
 						// replace old space by normal houses level 0 (must be 1x1!)
-						gb = hausbauer_t::neues_gebaeude(welt, NULL, gr->get_pos(), 0, hausbauer_t::get_wohnhaus(0, welt->get_timeline_year_month(), welt->get_climate(welt->max_hgt(pos))), NULL);
-						add_gebaeude_to_stadt(gb);
+						baue_gebaeude(pos);
 					}
 				}
 			}
@@ -1844,7 +1865,6 @@ void stadt_t::check_bau_rathaus(bool new_town)
 				alte_str == koord::invalid;
 			}
 		}
-
 		if (umziehen  &&  alte_str != koord::invalid) {
 			// Strasse vom ehemaligen Rathaus zum neuen verlegen.
 			wegbauer_t bauer(welt, NULL);
@@ -1932,6 +1952,10 @@ static koord neighbours[] = {
 };
 
 
+// return layout
+static int gebaeude_layout[] = {0,0,1,4,2,0,5,1,3,7,1,0,6,3,2,0};
+
+
 void stadt_t::baue_gebaeude(const koord k)
 {
 	grund_t* gr = welt->lookup_kartenboden(k);
@@ -1939,10 +1963,9 @@ void stadt_t::baue_gebaeude(const koord k)
 
 	// no covered by a downgoing monorail?
 	if (gr->ist_natur() &&
-			gr->kann_alle_obj_entfernen(welt->get_spieler(1)) == NULL && (
-				gr->get_grund_hang() == hang_t::flach ||
-				welt->lookup(koord3d(k, welt->max_hgt(k))) == NULL
-			)) {
+		  gr->kann_alle_obj_entfernen(NULL) == NULL  &&
+		  (  gr->get_grund_hang() == hang_t::flach  ||  welt->lookup(koord3d(k, welt->max_hgt(k))) == NULL  )
+	) {
 		// bisher gibt es 2 Sorten Haeuser
 		// arbeit-spendende und wohnung-spendende
 
@@ -1983,18 +2006,47 @@ void stadt_t::baue_gebaeude(const koord k)
 			}
 		}
 
+		/*******************************************************
+		 * this are the layout possible for city buildings
+		********************************************************
+		dims=1,1,1
+		+---+
+		|000|
+		|0 0|
+		|000|
+		+---+
+		dims=1,1,2
+		+---+
+		|001|
+		|1 1|
+		|100|
+		+---+
+		dims=1,1,4
+		+---+
+		|221|
+		|3 1|
+		|300|
+		+---+
+		dims=1,1,8
+		+---+
+		|625|
+		|3 1|
+		|704|
+		+---+
+		********************************************************/
+
 		// we have something to built here ...
 		if (h != NULL) {
 			// check for pavement
-			int streetdir = -1;
+			int streetdir = 0;
 			for (int i = 0; i < 8; i++) {
 				gr = welt->lookup_kartenboden(k + neighbours[i]);
 				if (gr && gr->get_weg_hang() == gr->get_grund_hang()) {
 					strasse_t* weg = (strasse_t*)gr->get_weg(road_wt);
 					if (weg != NULL) {
-						if (i < 4 && streetdir == -1) {
+						if (i < 4) {
 							// update directions (SENW)
-							streetdir = i;
+							streetdir += (1 << i);
 						}
 						weg->set_gehweg(true);
 						// if not current city road standard, then replace it
@@ -2014,7 +2066,7 @@ void stadt_t::baue_gebaeude(const koord k)
 				}
 			}
 
-			const gebaeude_t* gb = hausbauer_t::baue(welt, NULL, pos, streetdir == -1 ? 0 : streetdir, h);
+			const gebaeude_t* gb = hausbauer_t::baue(welt, NULL, pos, gebaeude_layout[streetdir], h);
 			add_gebaeude_to_stadt(gb);
 		}
 	}
@@ -2141,13 +2193,13 @@ void stadt_t::renoviere_gebaeude(gebaeude_t* gb)
 		// and make sure our house is not on a neighbouring tile, to avoid boring towns
 		int streetdir = 0;
 		for (int i = 0; i < 8; i++) {
-			grund_t* gr = welt->lookup(k + neighbours[i])->get_kartenboden();
+			grund_t* gr = welt->lookup_kartenboden(k + neighbours[i]);
 			if (gr != NULL && gr->get_weg_hang() == gr->get_grund_hang()) {
 				strasse_t* weg = static_cast<strasse_t*>(gr->get_weg(road_wt));
 				if (weg != NULL) {
-					if (i < 4 && streetdir == 0) {
-						// update directions (NESW)
-						streetdir = i;
+					if (i < 4) {
+							// update directions (SENW)
+							streetdir += (1 << i);
 					}
 					weg->set_gehweg(true);
 					// if not current city road standard, then replace it
@@ -2181,7 +2233,7 @@ void stadt_t::renoviere_gebaeude(gebaeude_t* gb)
 		}
 
 		// exchange building; try to face it to street in front
-		gb->set_tile( h->get_tile(streetdir, 0, 0) );
+		gb->set_tile( h->get_tile(gebaeude_layout[streetdir], 0, 0) );
 		welt->lookup(k)->get_kartenboden()->calc_bild();
 		update_gebaeude_from_stadt(gb);
 
@@ -2217,12 +2269,12 @@ bool stadt_t::baue_strasse(const koord k, spieler_t* sp, bool forced)
 	}
 
 	// we must not built on water or runways etc.
-	if (bd->hat_wege() && !bd->hat_weg(road_wt) && !bd->hat_weg(track_wt)) {
+	if(  bd->hat_wege()  &&  !bd->hat_weg(road_wt)  &&  !bd->hat_weg(track_wt)  ) {
 		return false;
 	}
 
 	// somebody else's things on it?
-	if (bd->kann_alle_obj_entfernen(welt->get_spieler(1))) {
+	if(  bd->kann_alle_obj_entfernen(NULL)  ) {
 		return false;
 	}
 
@@ -2351,7 +2403,12 @@ bool stadt_t::baue_strasse(const koord k, spieler_t* sp, bool forced)
 void stadt_t::baue()
 {
 	// will check a single random pos in the city, then baue will be called
-	const koord k(lo + koord(simrand(ur.x - lo.x + 1), simrand(ur.y - lo.y + 1)));
+	const koord k(lo + koord(simrand(ur.x - lo.x + 2)-1, simrand(ur.y - lo.y + 2)-1));
+
+	// do not build on any border tile
+	if(  !welt->ist_in_kartengrenzen(k+koord(1,1))  ||  k.x<=0  ||  k.y<=0  ) {
+		return;
+	}
 
 	grund_t *gr = welt->lookup_kartenboden(k);
 	if(gr==NULL) {
@@ -2363,10 +2420,11 @@ void stadt_t::baue()
 
 		// since only a single location is checked, we can stop after we have found a positive rule
 		best_strasse.reset(k);
-		int offset = simrand(num_road_rules);	// start with random rule
-		for (int i = 0; i < num_road_rules  &&  !best_strasse.found(); i++) {
-			int rule = ( i+offset ) % num_road_rules;
-			bewerte_strasse(k, 8 + road_rules[rule].chance, road_rules[rule].rule);
+		const uint32 num_road_rules = road_rules.get_count();
+		uint32 offset = simrand(num_road_rules);	// start with random rule
+		for (uint32 i = 0; i < num_road_rules  &&  !best_strasse.found(); i++) {
+			uint32 rule = ( i+offset ) % num_road_rules;
+			bewerte_strasse(k, 8 + road_rules[rule]->chance, *road_rules[rule]);
 		}
 		// ok => then built road
 		if (best_strasse.found()) {
@@ -2379,10 +2437,11 @@ void stadt_t::baue()
 
 		// since only a single location is checked, we can stop after we have found a positive rule
 		best_haus.reset(k);
+		const uint32 num_house_rules = house_rules.get_count();
 		offset = simrand(num_house_rules);	// start with random rule
-		for (int i = 0; i < num_house_rules  &&  !best_haus.found(); i++) {
-			int rule = ( i+offset ) % num_house_rules;
-			bewerte_haus(k, 8 + house_rules[rule].chance, house_rules[rule].rule);
+		for (uint32 i = 0; i < num_house_rules  &&  !best_haus.found(); i++) {
+			uint32 rule = ( i+offset ) % num_house_rules;
+			bewerte_haus(k, 8 + house_rules[rule]->chance, *house_rules[rule]);
 		}
 		// one rule applied?
 		if (best_haus.found()) {
@@ -2395,19 +2454,26 @@ void stadt_t::baue()
 
 	// renovation (only done when nothing matches a certain location
 	if (!buildings.empty()  &&  simrand(100) <= renovation_percentage) {
-		renoviere_gebaeude(buildings[simrand(buildings.get_count())]);
+		gebaeude_t* gb;
+		// try to find a public owned building
+		for(uint8 i=0; i<4; i++) {
+			gb = buildings[simrand(buildings.get_count())];
+			if(  spieler_t::check_owner(gb->get_besitzer(),NULL)  ) {
+				renoviere_gebaeude(gb);
+				break;
+			}
+		}
 		INT_CHECK("simcity 876");
 	}
 }
 
 
 // geeigneten platz zur Stadtgruendung durch Zufall ermitteln
-vector_tpl<koord>* stadt_t::random_place(
-	const karte_t* wl, const sint32 anzahl, sint16 old_x, sint16 old_y)
+vector_tpl<koord>* stadt_t::random_place(const karte_t* wl, const sint32 anzahl, sint16 old_x, sint16 old_y)
 {
 	int cl = 0;
 	for (int i = 0; i < MAX_CLIMATES; i++) {
-		if (hausbauer_t::get_special(0, haus_besch_t::rathaus, 0, 0, (climate)i)) {
+		if (hausbauer_t::get_special(0, haus_besch_t::rathaus, wl->get_timeline_year_month(), false, (climate)i)) {
 			cl |= (1 << i);
 		}
 	}
@@ -2416,33 +2482,82 @@ vector_tpl<koord>* stadt_t::random_place(
 	DBG_DEBUG("karte_t::init()", "found %i places", list->get_count());
 	vector_tpl<koord>* result = new vector_tpl<koord>(anzahl);
 
+	// pre processed array: max 1 city from each square can be built
+	// each entry represents a cell of minimum_city_distance/2 length and width
+	const uint32 xmax = (2*wl->get_groesse_x())/minimum_city_distance+1;
+	const uint32 ymax = (2*wl->get_groesse_y())/minimum_city_distance+1;
+	array2d_tpl< vector_tpl<koord> > places(xmax, ymax);
+	while (!list->empty()) {
+		const koord k = list->remove_first();
+		places.at( (2*k.x)/minimum_city_distance, (2*k.y)/minimum_city_distance).append(k);
+	}
+	// weigthed index vector into places array
+	weighted_vector_tpl<koord> index_to_places(xmax*ymax);
+	for(uint32 i=0; i<xmax; i++) {
+		for(uint32 j=0; j<ymax; j++) {
+			if (!places.at(i,j).empty()) {
+				index_to_places.append( koord(i,j), places.at(i,j).get_count());
+			}
+		}
+	}
+	// post-processing array:
+	// each entry represents a cell of minimum_city_distance length and width
+	// to limit the search for neighboring cities
+	const uint32 xmax2 = wl->get_groesse_x()/minimum_city_distance+1;
+	const uint32 ymax2 = wl->get_groesse_y()/minimum_city_distance+1;
+	array2d_tpl< vector_tpl<koord> > result_places(xmax2, ymax2);
+
+	uint64 its = 0;
+
 	for (int i = 0; i < anzahl; i++) {
-		int len = list->get_count();
 		// check distances of all cities to their respective neightbours
-		while (len > 0) {
-			int minimum_dist = 0x7FFFFFFF;  // init with maximum
-			koord k;
-			const int index = simrand(len);
-			k = list->at(index);
-			list->remove(k);
-			len--;
+		while (!index_to_places.empty()) {
+			// find a random cell
+			const uint32 weight = simrand(index_to_places.get_sum_weight());
+			const koord ip = index_to_places.at_weight(weight);
+			// remove this cell from index list
+			index_to_places.remove(ip);
+			// get random place in the cell
+			if (places.at(ip).empty()) continue;
+			const uint32 j = simrand(places.at(ip).get_count());
+			const koord k = places.at(ip)[j];
 
 			// check minimum distance
-			for (int j = 0; (j < i) && minimum_dist > minimum_city_distance; j++) {
-				int dist = abs(k.x - (*result)[j].x) + abs(k.y - (*result)[j].y);
-				if (minimum_dist > dist) {
-					minimum_dist = dist;
+			bool ok = true;
+
+			const koord k2mcd = koord( k.x/minimum_city_distance, k.y/minimum_city_distance );
+			for(sint32 i=k2mcd.x-1; ok && i<=k2mcd.x+1; i++) {
+				for(sint32 j=k2mcd.y-1; ok && j<=k2mcd.y+1; j++) {
+					if (i>=0 && i<xmax2 && j>=0 && j<ymax2) {
+						for(uint32 l=0; ok && l<result_places.at(i,j).get_count(); l++) {
+							its++;
+							if (koord_distance(k, result_places.at(i,j)[l]) < minimum_city_distance){
+								ok = false;
+							}
+						}
+					}
 				}
 			}
-			if (minimum_dist > minimum_city_distance) {
+
+			if (ok){ //minimum_dist > minimum_city_distance) {
 				// all citys are far enough => ok, find next place
 				result->append(k);
+				result_places.at(k2mcd).append(k);
 				break;
 			}
+			else {
+				// remove the place from the list
+				places.at(ip).remove_at(j);
+				// re-insert in index list with new weight
+				if (!places.at(ip).empty()) {
+					index_to_places.append( ip, places.at(ip).get_count());
+				}
+			}
 			// if we reached here, the city was not far enough => try again
 		}
 
-		if (len <= 0 && i < anzahl - 1) {
+		printf("simcity::  placed city %d its= %d\n", i, its);
+		if (index_to_places.empty() && i < anzahl - 1) {
 			dbg->warning("stadt_t::random_place()", "Not enough places found!");
 			break;
 		}
@@ -2450,5 +2565,7 @@ vector_tpl<koord>* stadt_t::random_place(
 	list->clear();
 	delete list;
 
+	printf("simcity::  number of iterations %d\n", its);
+
 	return result;
 }
diff --git a/simcity.h b/simcity.h
index eab3d65..c1d7193 100644
--- a/simcity.h
+++ b/simcity.h
@@ -13,21 +13,21 @@
 
 #include "tpl/vector_tpl.h"
 #include "tpl/weighted_vector_tpl.h"
-#include "tpl/array2d_tpl.h"
+#include "tpl/sparse_tpl.h"
 
 class karte_t;
 class spieler_t;
 class cbuffer_t;
 class cstring_t;
 
-// part of passengers going to factories or toursit attractions (100% mx)
-#define FACTORY_PAX (33)	// workers
-#define TOURIST_PAX (16)		// tourists
+class rule_t;
 
 
 #define MAX_CITY_HISTORY_YEARS  (12) // number of years to keep history
 #define MAX_CITY_HISTORY_MONTHS (12) // number of months to keep history
 
+#define PAX_DESTINATIONS_SIZE (128) // size of the minimap.
+
 enum city_cost {
 	HIST_CITICENS=0,// total people
 	HIST_GROWTH,	// growth (just for convenience)
@@ -83,6 +83,11 @@ public:
 	 */
 	static bool cityrules_init(cstring_t objpathname);
 
+	static uint32 get_industry_increase();
+	static void set_industry_increase(uint32 ind_increase);
+	static uint32 get_minimum_city_distance();
+	static void set_minimum_city_distance(uint32 s);
+
 private:
 	static karte_t *welt;
 	spieler_t *besitzer_p;
@@ -90,13 +95,18 @@ private:
 
 	weighted_vector_tpl <gebaeude_t *> buildings;
 
-	array2d_tpl<uint8> pax_ziele_alt;
-	array2d_tpl<uint8> pax_ziele_neu;
+	sparse_tpl<uint8> pax_destinations_old;
+	sparse_tpl<uint8> pax_destinations_new;
+
+	// this counter will increment by one for every change => dialogs can question, if they need to update map
+	unsigned long pax_destinations_new_change;
 
 	koord pos;			// Gruendungsplanquadrat der Stadt
 	koord lo, ur;		// max size of housing area
 	bool  has_low_density;	// in this case extend borders by two
 
+	bool allow_citygrowth;	// town can be static and will grow (true by default)
+
 	// this counter indicate which building will be processed next
 	uint32 step_count;
 
@@ -176,13 +186,10 @@ private:
 	weighted_vector_tpl<fabrik_t *> arbeiterziele;
 
 	/**
-	 * allokiert pax_ziele_alt/neu und init. die werte
+	 * Initialization of pax_destinations_old/new
 	 * @author Hj. Malthaner
 	 */
-	void init_pax_ziele();
-
-	// recalculate house informations (used for target selection)
-	void recount_houses();
+	void init_pax_destinations();
 
 	// recalcs city borders (after loading and deletion)
 	void recalc_city_size();
@@ -259,16 +266,21 @@ private:
 	 * @return true on match, false otherwise
 	 * @author Hj. Malthaner
 	 */
-	bool bewerte_loc(koord pos, const char *regel, int rotation);
+	bool bewerte_loc(koord pos, rule_t &regel, int rotation);
+
+	/*
+	 * evaluates the location, tests again all rules, and caches the result
+	 */
+	uint16 bewerte_loc_cache(const koord pos, bool force=false);
 
 	/**
 	 * Check rule in all transformations at given position
 	 * @author Hj. Malthaner
 	 */
-	sint32 bewerte_pos(koord pos, const char *regel);
+	sint32 bewerte_pos(koord pos, rule_t &regel);
 
-	void bewerte_strasse(koord pos, sint32 rd, const char* regel);
-	void bewerte_haus(koord pos, sint32 rd, const char* regel);
+	void bewerte_strasse(koord pos, sint32 rd, rule_t &regel);
+	void bewerte_haus(koord pos, sint32 rd, rule_t &regel);
 
 	void pruefe_grenzen(koord pos);
 
@@ -338,13 +350,19 @@ public:
 	 * gibt das pax-statistik-array für letzten monat zurück
 	 * @author Hj. Malthaner
 	 */
-	const array2d_tpl<unsigned char>* get_pax_ziele_alt() const { return &pax_ziele_alt; }
+	const sparse_tpl<unsigned char>* get_pax_destinations_old() const { return &pax_destinations_old; }
 
 	/**
 	 * gibt das pax-statistik-array für den aktuellen monat zurück
 	 * @author Hj. Malthaner
 	 */
-	const array2d_tpl<unsigned char>* get_pax_ziele_neu() const { return &pax_ziele_neu; }
+	const sparse_tpl<unsigned char>* get_pax_destinations_new() const { return &pax_destinations_new; }
+
+	/* this counter will increment by one for every change
+	 * => dialogs can question, if they need to update map
+	 * @author prissi
+	 */
+	unsigned long get_pax_destinations_new_change() const { return pax_destinations_new_change; }
 
 	/**
 	 * Erzeugt eine neue Stadt auf Planquadrat (x,y) die dem Spieler sp
@@ -393,6 +411,10 @@ public:
 	* @author prissi */
 	void change_size( long delta_citicens );
 
+	// when ng is false, no town growth any more
+	void set_citygrowth_yesno( bool ng ) { allow_citygrowth = ng; }
+	bool get_citygrowth() const { return allow_citygrowth; }
+
 	void step(long delta_t);
 
 	void neuer_monat();
diff --git a/simconst.h b/simconst.h
index 6b32b5f..8b4e49b 100644
--- a/simconst.h
+++ b/simconst.h
@@ -11,7 +11,6 @@
 
 /* Flag for Intel byte order
  * SET THIS IN YOUR COMPILER COMMAND LINE!
- * big endian also not completely supported yet
  */
 //#define LITTLE_ENDIAN
 
@@ -24,12 +23,12 @@
 /* single height is only 8 pixel (default 16) */
 //#define HALF_HEIGHT
 
-/* normal ground can be covered by other ground (building does not work correctly yet ...) */
-//#define COVER_TILES
-
-/* construct automatic bridges also a active player */
+/* construct automatic bridges also as active player */
 //#define AUTOMATIC_BRIDGES
 
+/* construct automatic tunnels also as active player */
+//#define AUTOMATIC_TUNNELS
+
 /* citycars have a destination; if they could get near, they dissolve */
 //#define DESTINATION_CITYCARS
 
@@ -52,11 +51,6 @@
 // define this for automaticcally joining stations next to a public stop with it
 //#define AUTOJOIN_PUBLIC
 
-/******************************* obsolete stuf ******************************/
-
-/* storage shed (old implementation) LIKELY NOT WORKING */
-//#define LAGER_NOT_IN_USE
-
 /*********************** Useful things for debugging ... ********************/
 
 /* will highlite marked areas and convoi will leave traces */
@@ -68,9 +62,6 @@
 /* shows with block needed update and which not */
 //#define DEBUG_FLUSH_BUFFER
 
-/* shows reserved tiles */
-//#define DEBUG_PDS
-
 /**************************** automatic stuff ********************************/
 
 
diff --git a/simconvoi.cc b/simconvoi.cc
index c8c2cf4..5d1b2a4 100644
--- a/simconvoi.cc
+++ b/simconvoi.cc
@@ -64,6 +64,10 @@
 
 
 
+karte_t *convoi_t::welt = NULL;
+
+
+
 /*
  * Debugging helper - translate state value to human readable name
  * @author Hj- Malthaner
@@ -178,6 +182,10 @@ convoi_t::~convoi_t()
 	assert(self.is_bound());
 	assert(anz_vehikel==0);
 
+	// close windows
+	destroy_win( magic_convoi_info+self.get_id() );
+	destroy_win( magic_convoi_detail+self.get_id() );
+
 DBG_MESSAGE("convoi_t::~convoi_t()", "destroying %d, %p", self.get_id(), this);
 	// stop following
 	if(welt->get_follow_convoi()==self) {
@@ -202,14 +210,11 @@ DBG_MESSAGE("convoi_t::~convoi_t()", "destroying %d, %p", self.get_id(), this);
 	unset_line();
 
 	self.detach();
-
-	destroy_win((long)this);
 }
 
 
 
-void
-convoi_t::laden_abschliessen()
+void convoi_t::laden_abschliessen()
 {
 	if(fpl==NULL) {
 		if(  state!=INITIAL  ) {
@@ -242,8 +247,8 @@ convoi_t::laden_abschliessen()
 DBG_MESSAGE("convoi_t::laden_abschliessen()","state=%s, next_stop_index=%d", state_names[state] );
 		for( uint8 i=0;  i<anz_vehikel;  i++ ) {
 			vehikel_t* v = fahr[i];
-			v->set_erstes(i == 0u);
-			v->set_letztes(i == (anz_vehikel - 1u));
+			v->set_erstes( i==0 );
+			v->set_letztes( i+1==anz_vehikel );
 			// this sets the convoi and will renew the block reservation, if needed!
 			v->set_convoi(this);
 
@@ -349,7 +354,7 @@ DBG_MESSAGE("convoi_t::laden_abschliessen()","next_stop_index=%d", next_stop_ind
 			// airplanes may have no ground ...
 			schiene_t *sch0 = dynamic_cast<schiene_t *>( gr->get_weg(fahr[i]->get_waytype()) );
 			if(sch0) {
-				sch0->reserve(self);
+				sch0->reserve(self,ribi_t::keine);
 			}
 		}
 		fahr[0]->set_erstes(true);
@@ -363,9 +368,7 @@ void convoi_t::rotate90( const sint16 y_size )
 	last_stop_pos.rotate90( y_size );
 	record_pos.rotate90( y_size );
 	home_depot.rotate90( y_size );
-	for(  uint32 i=0;  i<route.get_max_n()+1u;  i++  ) {
-		route.access_position_bei(i).rotate90( y_size );
-	}
+	route.rotate90( y_size );
 	if(fpl) {
 		fpl->rotate90( y_size );
 	}
@@ -387,7 +390,8 @@ convoi_t::get_pos() const
 {
 	if(anz_vehikel > 0 && fahr[0]) {
 		return state==INITIAL ? home_depot : fahr[0]->get_pos();
-	} else {
+	}
+	else {
 		return koord3d::invalid;
 	}
 }
@@ -540,28 +544,6 @@ bool convoi_t::sync_step(long delta_t)
 			break;
 
 		case FAHRPLANEINGABE:
-			// schedule window closed?
-			if(fpl!=NULL  &&  fpl->ist_abgeschlossen()) {
-
-				set_schedule(fpl);
-
-				if(fpl->get_count()==0) {
-					// no entry => no route ...
-					state = NO_ROUTE;
-					wait_lock = 0;
-				}
-				else {
-					// Schedule changed at station
-					// this station? then complete loading task else drive on
-					state = (get_pos() == fpl->get_current_eintrag().pos ? LOADING : ROUTING_1);
-				}
-			}
-			else {
-				// still entring => check only each 500ms for change
-				wait_lock = 500;
-			}
-			break;
-
 		case ROUTING_1:
 		case DUMMY4:
 		case DUMMY5:
@@ -585,7 +567,7 @@ bool convoi_t::sync_step(long delta_t)
 				// now actually move the units
 				while(sp_soll>>12) {
 					uint32 sp_hat = fahr[0]->fahre_basis(1<<12);
-					int v_nr = get_vehicle_at_length((steps_driven++)>>4);
+					int v_nr = get_vehicle_at_length((++steps_driven)>>4);
 					// stop when depot reached
 					if(state==INITIAL) {
 						break;
@@ -670,17 +652,40 @@ bool convoi_t::sync_step(long delta_t)
  * Berechne route von Start- zu Zielkoordinate
  * @author Hanjsörg Malthaner
  */
-int convoi_t::drive_to(koord3d start, koord3d ziel)
+bool convoi_t::drive_to()
 {
-	INT_CHECK("simconvoi 293");
+	if(  anz_vehikel>0  ) {
+		koord3d start = fahr[0]->get_pos();
+		koord3d ziel = fpl->get_current_eintrag().pos;
+
+		// avoid stopping midhalt
+		if(  start==ziel  ) {
+			halthandle_t halt = haltestelle_t::get_halt(welt,ziel,get_besitzer());
+			if(  halt.is_bound()  &&  route.is_contained(start)  ) {
+				for(  uint32 i=route.index_of(start);  i<route.get_count();  i++  ) {
+					grund_t *gr = welt->lookup(route.position_bei(i));
+					if(  gr  && gr->get_halt()==halt  ) {
+						ziel = gr->get_pos();
+					}
+					else {
+						break;
+					}
+				}
+			}
+		}
 
-	if (anz_vehikel == 0 || !fahr[0]->calc_route(start, ziel, speed_to_kmh(min_top_speed), &route)) {
-		get_besitzer()->bescheid_vehikel_problem(self,ziel);
-		// wait 10s before next attempt
-		wait_lock = 10000;
-		return false;
+		if(  !fahr[0]->calc_route(start, ziel, speed_to_kmh(min_top_speed), &route)  ) {
+			state = NO_ROUTE;
+			get_besitzer()->bescheid_vehikel_problem(self,ziel);
+			// wait 10s before next attempt
+			wait_lock = 10000;
+		}
+		else {
+			vorfahren();
+			return true;
+		}
 	}
-	return true;
+	return false;
 }
 
 
@@ -722,6 +727,53 @@ void convoi_t::step()
 
 		case DUMMY4:
 		case DUMMY5:
+			break;
+
+		case FAHRPLANEINGABE:
+			// schedule window closed?
+			if(fpl!=NULL  &&  fpl->ist_abgeschlossen()) {
+
+				set_schedule(fpl);
+
+				if(fpl->get_count()==0) {
+					// no entry => no route ...
+					state = NO_ROUTE;
+				}
+				else {
+					// Schedule changed at station
+					// this station? then complete loading task else drive on
+					halthandle_t h = haltestelle_t::get_halt( welt, get_pos(), get_besitzer() );
+					if(  h.is_bound()  &&  h==haltestelle_t::get_halt( welt, fpl->get_current_eintrag().pos, get_besitzer() )  ) {
+						if(  h==haltestelle_t::get_halt( welt, route.position_bei(route.get_count()-1), get_besitzer() )  ){
+							state = get_pos()==route.position_bei(route.get_count()-1) ? LOADING : DRIVING;
+							break;
+						}
+						else {
+							if(  drive_to()  ) {
+								state = DRIVING;
+								break;
+							}
+						}
+					}
+
+					if(  fpl->get_current_eintrag().pos==get_pos()  ) {
+						// position in depot: waiting
+						grund_t *gr = welt->lookup(fpl->get_current_eintrag().pos);
+						if(  gr  &&  gr->get_depot()  ) {
+							state = INITIAL;
+						}
+						else {
+							state = ROUTING_1;
+						}
+					}
+					else {
+						// go to next
+						state = ROUTING_1;
+					}
+				}
+			}
+			break;
+
 		case ROUTING_1:
 			{
 				vehikel_t* v = fahr[0];
@@ -736,13 +788,7 @@ void convoi_t::step()
 						fpl->advance();
 					}
 					// Hajo: now calculate a new route
-					drive_to(v->get_pos(), fpl->get_current_eintrag().pos);
-					if(!route.empty()) {
-						vorfahren();
-					}
-					else {
-						state = NO_ROUTE;
-					}
+					drive_to();
 					// finally, was there a record last time?
 					if(max_record_speed>welt->get_record_speed(fahr[0]->get_waytype())) {
 						welt->notify_record(self, max_record_speed, record_pos);
@@ -764,10 +810,7 @@ void convoi_t::step()
 				}
 				else {
 					// Hajo: now calculate a new route
-					drive_to(v->get_pos(), fpl->get_current_eintrag().pos);
-					if(!route.empty()) {
-						vorfahren();
-					}
+					drive_to();
 				}
 			}
 			break;
@@ -782,7 +825,7 @@ void convoi_t::step()
 				if (v->ist_weg_frei(restart_speed)) {
 					// can reserve new block => drive on
 					state = (steps_driven>=0) ? LEAVING_DEPOT : DRIVING;
-					if(haltestelle_t::get_halt(welt,v->get_pos()).is_bound()) {
+					if(haltestelle_t::get_halt(welt,v->get_pos(),besitzer_p).is_bound()) {
 						v->play_sound();
 					}
 				}
@@ -915,7 +958,9 @@ convoi_t::betrete_depot(depot_t *dep)
 	}
 
 	dep->convoi_arrived(self, self->get_schedule()!=0);
-	destroy_win((long)this);
+
+	destroy_win( magic_convoi_info+self.get_id() );
+	destroy_win( magic_convoi_detail+self.get_id() );
 
 	// Hajo: since 0.81.5exp it's safe to
 	// remove the current sync object from
@@ -950,9 +995,17 @@ void convoi_t::start()
 		state = ROUTING_1;
 
 		// recalc weight and image
+		// also for any vehicle entered a depot, set_letztes is true! => reset it correctly
 		for(unsigned i=0; i<anz_vehikel; i++) {
+			fahr[i]->set_erstes( false );
+			fahr[i]->set_letztes( false );
 			fahr[i]->beladen( home_depot.get_2d(), halthandle_t() );
 		}
+		fahr[0]->set_erstes( true );
+		fahr[anz_vehikel-1]->set_letztes( true );
+		// do not show the vehicle - it will be wrong positioned -vorfahren() will correct this
+		fahr[0]->set_bild(IMG_LEER);
+
 		// calc state for convoi
 		calc_loading();
 
@@ -999,7 +1052,7 @@ void convoi_t::ziel_erreicht()
 	}
 	else {
 		// no depot reached, check for stop!
-		halthandle_t halt = gr->ist_wasser() ? haltestelle_t::get_halt(welt, v->get_pos()) : gr->get_halt();
+		halthandle_t halt = haltestelle_t::get_halt(welt, v->get_pos(),besitzer_p);
 		if(  halt.is_bound() &&  gr->get_weg_ribi(v->get_waytype())!=0  ) {
 			// seems to be a stop, so book the money for the trip
 			akt_speed = 0;
@@ -1230,7 +1283,7 @@ convoi_t::can_go_alte_richtung()
 	}
 
 	// going backwards? then recalculate all
-	ribi_t::ribi neue_richtung_rwr = ribi_t::rueckwaerts(fahr[0]->calc_richtung(route.position_bei(0).get_2d(), route.position_bei(min(2,route.get_max_n())).get_2d()));
+	ribi_t::ribi neue_richtung_rwr = ribi_t::rueckwaerts(fahr[0]->calc_richtung(route.position_bei(0).get_2d(), route.position_bei(min(2,route.get_count()-1)).get_2d()));
 //	DBG_MESSAGE("convoi_t::go_alte_richtung()","neu=%i,rwr_neu=%i,alt=%i",neue_richtung_rwr,ribi_t::rueckwaerts(neue_richtung_rwr),alte_richtung);
 	if(neue_richtung_rwr&alte_richtung) {
 		akt_speed = 8;
@@ -1239,6 +1292,7 @@ convoi_t::can_go_alte_richtung()
 
 	// now get the actual length and the tile length
 	int convoi_length = 15;
+	int tile_length = 24;
 	unsigned i;	// for visual C++
 	const vehikel_t* pred = NULL;
 	for(i=0; i<anz_vehikel; i++) {
@@ -1247,7 +1301,7 @@ convoi_t::can_go_alte_richtung()
 
 		convoi_length += v->get_besch()->get_length();
 
-		if(gr==NULL  ||  (pred!=NULL  &&  (abs(v->get_pos().x-pred->get_pos().x)>=2  ||  abs(v->get_pos().y-pred->get_pos().y)>=2))) {
+		if(gr==NULL  ||  (pred!=NULL  &&  (abs(v->get_pos().x-pred->get_pos().x)>=2  ||  abs(v->get_pos().y-pred->get_pos().y)>=2))  ) {
 			// ending here is an error!
 			// this is an already broken train => restart
 			dbg->warning("convoi_t::go_alte_richtung()","broken convoy (id %i) found => fixing!",self.get_id());
@@ -1263,9 +1317,21 @@ convoi_t::can_go_alte_richtung()
 			return false;
 		}
 
+		if(  pred  &&  pred->get_pos()!=v->get_pos()  ) {
+			tile_length += (ribi_t::ist_gerade(welt->lookup(pred->get_pos())->get_weg_ribi_unmasked(pred->get_waytype())) ? 16 : 8192/vehikel_t::get_diagonal_multiplier())*koord_distance(pred->get_pos(),v->get_pos());
+		}
+
 		pred = v;
 	}
-	int length = min((convoi_length/16)+4,route.get_max_n()-1);	// maximum length in tiles to check
+	// check if convoi is way too short (even for diagonal tracks)
+	tile_length += (ribi_t::ist_gerade(welt->lookup(fahr[anz_vehikel-1]->get_pos())->get_weg_ribi_unmasked(fahr[anz_vehikel-1]->get_waytype())) ? 16 : 8192/vehikel_t::get_diagonal_multiplier());
+	if(  convoi_length>tile_length  ) {
+		dbg->warning("convoi_t::go_alte_richtung()","convoy too short (id %i) => fixing!",self.get_id());
+		akt_speed = 8;
+		return false;
+	}
+
+	int length = min((convoi_length/16)+4,route.get_count());	// maximum length in tiles to check
 
 	// we just check, wether we go back (i.e. route tiles other than zero have convoi vehicles on them)
 	for( int index=1;  index<length;  index++ ) {
@@ -1307,7 +1373,7 @@ convoi_t::can_go_alte_richtung()
 
 	// since we need the route for every vehicle of this convoi,
 	// we must set the current route index (instead assuming 1)
-	length = min((convoi_length/8),route.get_max_n()-1);	// maximum length in tiles to check
+	length = min((convoi_length/8),route.get_count()-1);	// maximum length in tiles to check
 	bool ok=false;
 	for(i=0; i<anz_vehikel; i++) {
 		vehikel_t* v = fahr[i];
@@ -1460,7 +1526,7 @@ convoi_t::vorfahren()
 		int restart_speed=-1;
 		if(fahr[0]->ist_weg_frei(restart_speed)) {
 			// can reserve new block => drive on
-			if(haltestelle_t::get_halt(welt,k0).is_bound()) {
+			if(haltestelle_t::get_halt(welt,k0,besitzer_p).is_bound()) {
 				fahr[0]->play_sound();
 			}
 			wait_lock = 0;
@@ -1475,7 +1541,7 @@ convoi_t::vorfahren()
 			// eventually reserve this
 			schiene_t * sch0 = dynamic_cast<schiene_t *>( welt->lookup(fahr[i]->get_pos())->get_weg(fahr[i]->get_waytype()) );
 			if(sch0) {
-				sch0->reserve(this->self);
+				sch0->reserve(self,ribi_t::keine);
 			}
 			else {
 				break;
@@ -1665,7 +1731,7 @@ convoi_t::rdwr(loadsave_t *file)
 				if(v->get_waytype()==track_wt  ||  v->get_waytype()==monorail_wt  ||  v->get_waytype()==maglev_wt  ||  v->get_waytype()==narrowgauge_wt) {
 					schiene_t* sch = (schiene_t*)gr->get_weg(v->get_waytype());
 					if(sch) {
-						sch->reserve(self);
+						sch->reserve(self,ribi_t::keine);
 					}
 					// add to crossing
 					if(gr->ist_uebergang()) {
@@ -1827,7 +1893,7 @@ convoi_t::zeige_info()
 			dump();
 		}
 
-		create_win( new convoi_info_t(self), w_info, (long)this );
+		create_win( new convoi_info_t(self), w_info, magic_convoi_info+self.get_id() );
 	}
 }
 
@@ -1836,24 +1902,24 @@ void convoi_t::info(cbuffer_t & buf) const
 {
 	const vehikel_t* v = fahr[0];
 	if (v != NULL) {
-    char tmp[128];
+		char tmp[128];
 
-    sprintf(tmp, "\n %d/%dkm/h (%1.2f$/km)\n", speed_to_kmh(min_top_speed), v->get_besch()->get_geschw(), get_running_cost() / 100.0);
-    buf.append(tmp);
+		sprintf(tmp, "\n %d/%dkm/h (%1.2f$/km)\n", speed_to_kmh(min_top_speed), v->get_besch()->get_geschw(), get_running_cost() / 100.0);
+		buf.append(tmp);
 
-    sprintf(tmp," %s: %ikW\n", translator::translate("Leistung"), sum_leistung );
-    buf.append(tmp);
+		sprintf(tmp," %s: %ikW\n", translator::translate("Leistung"), sum_leistung );
+		buf.append(tmp);
 
-    sprintf(tmp," %s: %i (%i) t\n", translator::translate("Gewicht"), sum_gewicht, sum_gesamtgewicht-sum_gewicht );
-    buf.append(tmp);
+		sprintf(tmp," %s: %i (%i) t\n", translator::translate("Gewicht"), sum_gewicht, sum_gesamtgewicht-sum_gewicht );
+		buf.append(tmp);
 
-    sprintf(tmp," %s: ", translator::translate("Gewinn")  );
-    buf.append(tmp);
+		sprintf(tmp," %s: ", translator::translate("Gewinn")  );
+		buf.append(tmp);
 
-    money_to_string( tmp, (double)jahresgewinn );
-    buf.append(tmp);
-    buf.append("\n");
-  }
+		money_to_string( tmp, (double)jahresgewinn );
+		buf.append(tmp);
+		buf.append("\n");
+	}
 }
 
 
@@ -1875,8 +1941,8 @@ void convoi_t::get_freight_info(cbuffer_t & buf)
 		// rebuilt the list with goods ...
 		vector_tpl<ware_t> total_fracht;
 
-		ALLOCA(uint32, max_loaded_waren, warenbauer_t::get_waren_anzahl());
-		memset( max_loaded_waren, 0, sizeof(uint32)*warenbauer_t::get_waren_anzahl() );
+		ALLOCA(uint32, capacity_by_catg_index, warenbauer_t::get_max_catg_index());
+		memset( capacity_by_catg_index, 0, sizeof(uint32)*warenbauer_t::get_max_catg_index() );
 
 		unsigned i;
 		for(i=0; i<anz_vehikel; i++) {
@@ -1886,7 +1952,7 @@ void convoi_t::get_freight_info(cbuffer_t & buf)
 			const ware_besch_t* ware_besch = v->get_besch()->get_ware();
 			const uint16 menge = v->get_besch()->get_zuladung();
 			if(menge>0  &&  ware_besch!=warenbauer_t::nichts) {
-				max_loaded_waren[ware_besch->get_index()] += menge;
+				capacity_by_catg_index[ware_besch->get_catg_index()] += menge;
 			}
 
 			// then add the actual load
@@ -1919,24 +1985,11 @@ void convoi_t::get_freight_info(cbuffer_t & buf)
 
 		// apend info on total capacity
 		slist_tpl <ware_t>capacity;
-		for(i=0;  i<warenbauer_t::get_waren_anzahl();  i++  ) {
-			if(max_loaded_waren[i]>0  &&  i!=warenbauer_t::INDEX_NONE) {
-				ware_t ware(warenbauer_t::get_info(i));
-				ware.menge = max_loaded_waren[i];
-				if(ware.get_catg()==0) {
-					capacity.append( ware );
-				} else {
-					// append to category?
-					slist_tpl<ware_t>::iterator j   = capacity.begin();
-					slist_tpl<ware_t>::iterator end = capacity.end();
-					while (j != end && j->get_catg() < ware.get_catg()) ++j;
-					if (j != end && j->get_catg() == ware.get_catg()) {
-						j->menge += max_loaded_waren[i];
-					} else {
-						// not yet there
-						capacity.insert(j, ware);
-					}
-				}
+		for( uint8 j = 0; j < warenbauer_t::get_max_catg_index(); j ++ ) {
+			if( capacity_by_catg_index[j] > 0 ) {
+				ware_t ware( warenbauer_t::get_info_catg_index(j) );
+				ware.menge = capacity_by_catg_index[j];
+				capacity.append( ware );
 			}
 		}
 
@@ -2075,7 +2128,7 @@ void convoi_t::laden()
 		return;
 	}
 
-	halthandle_t halt = haltestelle_t::get_halt(welt, fpl->get_current_eintrag().pos);
+	halthandle_t halt = haltestelle_t::get_halt(welt, fpl->get_current_eintrag().pos,besitzer_p);
 	// eigene haltestelle ?
 	if (halt.is_bound()) {
 		const koord k = fpl->get_current_eintrag().pos.get_2d();
@@ -2168,7 +2221,7 @@ void convoi_t::hat_gehalten(koord k, halthandle_t halt)
 			pos.z += Z_TILE_STEP;
 		}
 		while(  grund  &&  grund->get_halt() == halt  ) {
-			station_lenght += TILE_STEPS;
+			station_lenght += 16;
 			pos += zv;
 			grund = welt->lookup(pos);
 			if(  grund==NULL  ) {
@@ -2200,9 +2253,13 @@ void convoi_t::hat_gehalten(koord k, halthandle_t halt)
 
 		freight_info_resort |= v->entladen(k, halt);
 		if(!no_load) {
-			// do not load anymore
+			// load
 			freight_info_resort |= v->beladen(k, halt);
 		}
+		else {
+			// do not load anymore - but call beladen() to recalculate vehikel weight
+			freight_info_resort |= v->beladen(k, halthandle_t());
+		}
 
 	}
 
@@ -2425,8 +2482,7 @@ void convoi_t::book(sint64 amount, int cost_type)
 	}
 }
 
-void
-convoi_t::init_financial_history()
+void convoi_t::init_financial_history()
 {
 	for (int j = 0; j<MAX_CONVOI_COST; j++) {
 		for (int k = MAX_MONTHS-1; k>=0; k--) {
@@ -2435,8 +2491,9 @@ convoi_t::init_financial_history()
 	}
 }
 
-sint32
-convoi_t::get_running_cost() const
+
+
+sint32 convoi_t::get_running_cost() const
 {
 	sint32 running_cost = 0;
 	for (unsigned i = 0; i<get_vehikel_anzahl(); i++) {
@@ -2450,21 +2507,113 @@ convoi_t::get_running_cost() const
 void convoi_t::check_pending_updates()
 {
 	if (line_update_pending.is_bound()  &&  line.is_bound()) {
-		destroy_win((long)fpl);	// close the schedule window, if open
 		int aktuell = fpl->get_aktuell(); // save current position of schedule
+		bool is_same = false;
+		bool is_depot = false;
+		schedule_t* new_fpl = line_update_pending->get_schedule();
+		koord3d current = koord3d::invalid, depot = koord3d::invalid;
+
+		if(fpl->get_count()==0  ||  new_fpl->get_count()==0) {
+			// was no entry or is no entry => goto  1st stop
+			aktuell = 0;
+		}
+		else {
+			// something to check for ...
+			current = fpl->get_current_eintrag().pos;
+
+			if(aktuell<new_fpl->get_count()  &&  current==new_fpl->eintrag[aktuell].pos  ) {
+				// next pos is the same => keep the convoi state
+				is_same = true;
+			}
+			else {
+				// check depot first (must also keept this state)
+				is_depot = (welt->lookup(current)  &&  welt->lookup(current)->get_depot() != NULL);
+
+				if(is_depot) {
+					// depot => aktuell+1 (depot will be restore later before this)
+					depot = current;
+					fpl->remove();
+					current = fpl->get_current_eintrag().pos;
+				}
+
+				/* there could be only one entry that matches best:
+				 * we try first same sequence as in old schedule;
+				 * if not found, we try for same nextnext station
+				 */
+				const koord3d next = fpl->eintrag[(aktuell+1)%fpl->get_count()].pos;
+				const koord3d nextnext = fpl->eintrag[(aktuell+2)%fpl->get_count()].pos;
+				const koord3d nextnextnext = fpl->eintrag[(aktuell+3)%fpl->get_count()].pos;
+				int how_good_matching = 0;
+				const uint8 new_count = new_fpl->get_count();
+
+				for(  uint8 i=0;  i<new_count;  i++  ) {
+					int quality =
+						(new_fpl->eintrag[i].pos==current)*3 +
+						(new_fpl->eintrag[(i+1)%new_count].pos==next)*4 +
+						(new_fpl->eintrag[(i+2)%new_count].pos==nextnext)*2 +
+						(new_fpl->eintrag[(i+3)%new_count].pos==nextnextnext);
+					if(  quality>how_good_matching  ) {
+						// better match than previous: but depending of distance, the next number will be different
+						if(new_fpl->eintrag[i].pos==current) {
+							aktuell = i;
+						}
+						else if(new_fpl->eintrag[(i+1)%new_count].pos==next) {
+							aktuell = i+1;
+						}
+						else if(new_fpl->eintrag[(i+2)%new_count].pos==nextnext) {
+							aktuell = i+2;
+						}
+						else if(new_fpl->eintrag[(i+3)%new_count].pos==nextnextnext) {
+							aktuell = i+3;
+						}
+						aktuell %= new_count;
+						how_good_matching = quality;
+					}
+				}
+
+				if(how_good_matching==0) {
+					// nothing matches => take the one from the line
+					aktuell = new_fpl->get_aktuell();
+				}
+				// if we go to same, then we do not need route recalculation ...
+				is_same = new_fpl->eintrag[aktuell].pos==current;
+			}
+		}
+
+		line = line_update_pending;
+		line_update_pending = linehandle_t();
+
 		// destroy old schedule and all related windows
 		if(fpl &&  !fpl->ist_abgeschlossen()) {
-			destroy_win((long)fpl);
+			fpl->copy_from( line->get_schedule() );
+			fpl->set_aktuell(aktuell); // set new schedule current position to best match
+			fpl->eingabe_beginnen();
 		}
-		delete fpl;
-		// an open window will destroy our line information, so we renew again ...
-		line = line_update_pending;
-		fpl = line->get_schedule()->copy();
-		fpl->set_aktuell(aktuell); // set new schedule current position to old schedule current position
-		if(state!=INITIAL) {
-			state = FAHRPLANEINGABE;
+		else {
+			fpl->copy_from( line->get_schedule() );
+			fpl->set_aktuell(aktuell); // set new schedule current position to one before best match
+		}
+
+		if(is_depot) {
+			// next was depot. restore it
+			fpl->insert(welt->lookup(depot));
+			fpl->set_aktuell( (fpl->get_aktuell()+fpl->get_count()-1)%fpl->get_count() );
+		}
+
+ 		if(state!=INITIAL) {
+			if(is_same  ||  is_depot) {
+				/* same destination
+				 * We are already there = adnvance & remove wrong freight and keep current state
+				 */
+				for(uint8 i=0; i<anz_vehikel; i++) {
+					fahr[i]->remove_stale_freight();
+				}
+			}
+			else {
+				// need re-routing
+				state = FAHRPLANEINGABE;
+			}
 		}
-		line_update_pending = linehandle_t();
 	}
 }
 
@@ -2500,6 +2649,36 @@ uint8 convoi_t::get_status_color() const
 
 
 
+// returns tiles needed for this convoi
+uint16 convoi_t::get_tile_length() const
+{
+	uint16 tiles=0;
+	for(uint8 i=0;  i<anz_vehikel;  i++) {
+		tiles += fahr[i]->get_besch()->get_length();
+	}
+	return (tiles+16-1)/16;
+}
+
+
+
+// if withdraw and empty, then self destruct
+void convoi_t::set_withdraw(bool new_withdraw)
+{
+	withdraw = new_withdraw;
+	if(  withdraw  &&  loading_level==0  ) {
+		// test if convoi in depot
+		grund_t *gr = welt->lookup( get_pos());
+		if (gr && gr->get_depot()) {
+			gr->get_depot()->disassemble_convoi(self, true);
+		}
+		else {
+			self_destruct();
+		}
+	}
+}
+
+
+
 /**
  * conditions for a city car to overtake another overtaker.
  * The city car is not overtaking/being overtaken.
@@ -2541,7 +2720,7 @@ bool convoi_t::can_overtake(overtaker_t *other_overtaker, int other_speed, int s
 
 	while( distance > 0 ) {
 
-		if(  route_index >= route.get_max_n()  ) {
+		if(  route_index >= route.get_count()  ) {
 			return false;
 		}
 
@@ -2612,7 +2791,7 @@ bool convoi_t::can_overtake(overtaker_t *other_overtaker, int other_speed, int s
 	time_overtaking = (time_overtaking << 16)/akt_speed;
 	while ( time_overtaking > 0 ) {
 
-		if ( route_index >= route.get_max_n() ) {
+		if ( route_index >= route.get_count() ) {
 			return false;
 		}
 
diff --git a/simconvoi.h b/simconvoi.h
index 8db4fe0..65afbad 100644
--- a/simconvoi.h
+++ b/simconvoi.h
@@ -146,7 +146,7 @@ private:
 	* Current map
 	* @author Hj. Malthaner
 	*/
-	karte_t   *welt;
+	static karte_t *welt;
 
  	/**
 	* the convoi is being withdrawn from service
@@ -280,7 +280,7 @@ private:
 	* Berechne route von Start- zu Zielkoordinate
 	* @author Hanjsörg Malthaner
 	*/
-	int drive_to(koord3d s, koord3d z);
+	bool drive_to();
 
 	/**
 	* Setup vehicles for moving in same direction than before
@@ -766,11 +766,14 @@ public:
 	/* the current state of the convoi */
 	uint8 get_status_color() const;
 
+	// returns tiles needed for this convoi
+	uint16 get_tile_length() const;
+
 	bool has_obsolete_vehicles() const { return has_obsolete; }
 
 	bool get_withdraw() const { return withdraw; }
 
-	void set_withdraw(bool new_withdraw) { withdraw = new_withdraw; }
+	void set_withdraw(bool new_withdraw);
 
 	bool get_no_load() const { return no_load; }
 
diff --git a/simdebug.h b/simdebug.h
index 46676c3..826ff0e 100644
--- a/simdebug.h
+++ b/simdebug.h
@@ -38,14 +38,6 @@ extern log_t *dbg;
  */
 void init_logging(const char *logname, bool force_flush, bool log_debug);
 
-
-/**
- * Console output, realised as a macro
- * @author Hj. Malthaner
- */
-
-#define print printf
-
 #ifndef DEBUG
 
 // nothing to debug -> then ignore
diff --git a/simdepot.cc b/simdepot.cc
index 03730d2..f5ba77a 100644
--- a/simdepot.cc
+++ b/simdepot.cc
@@ -121,13 +121,13 @@ depot_t::convoi_arrived(convoihandle_t acnv, bool fpl_adjust)
 	if(fpl_adjust) {
 		// here a regular convoi arrived
 
-		for(unsigned i=0; i< acnv->get_vehikel_anzahl(); i++) {
+		for(unsigned i=0; i<acnv->get_vehikel_anzahl(); i++) {
 			vehikel_t *v = acnv->get_vehikel(i);
-			if(v) {
-				// Hajo: reset vehikel data
-				v->loesche_fracht();
-			}
+			// Hajo: reset vehikel data
+			v->loesche_fracht();
 			v->set_pos( koord3d::invalid );
+			v->set_erstes( i==0 );
+			v->set_letztes( i+1==acnv->get_vehikel_anzahl() );
 		}
 		// Volker: remove depot from schedule
 		schedule_t *fpl = acnv->get_schedule();
@@ -418,7 +418,7 @@ depot_t::rdwr_vehikel(slist_tpl<vehikel_t *> &list, loadsave_t *file)
  */
 const char * depot_t::ist_entfernbar(const spieler_t *sp)
 {
-	if(sp!=get_besitzer()) {
+	if(sp!=get_besitzer()  &&  sp!=welt->get_spieler(1)) {
 		return "Das Feld gehoert\neinem anderen Spieler\n";
 	}
 	if (!vehicles.empty()) {
@@ -481,19 +481,13 @@ linehandle_t depot_t::get_selected_line()
 bool bahndepot_t::can_convoi_start(convoihandle_t cnv) const
 {
 	waytype_t wt=cnv->get_vehikel(0)->get_waytype();
-	uint32 tiles=0;
-	for(uint8 i=0;  i<cnv->get_vehikel_anzahl();  i++) {
-		tiles += cnv->get_vehikel(i)->get_besch()->get_length();
-	}
-	tiles = (tiles+TILE_STEPS-1)/TILE_STEPS;
-
 	schiene_t* sch0 = (schiene_t *)welt->lookup(get_pos())->get_weg(wt);
 	if(sch0==NULL) {
 		// no rail here???
 		return false;
 	}
 
-	if(!sch0->reserve(cnv)) {
+	if(!sch0->reserve(cnv,ribi_t::keine)) {
 		// could not even reserve first tile ...
 		return false;
 	}
@@ -501,8 +495,9 @@ bool bahndepot_t::can_convoi_start(convoihandle_t cnv) const
 	// reserve the next segments of the train
 	route_t *route=cnv->get_route();
 	bool success = true;
+	uint16 tiles = cnv->get_tile_length();
 	uint32 i;
-	for(  i=0;  success  &&  i<tiles  &&  i<=route->get_max_n();  i++  ) {
+	for(  i=0;  success  &&  i<tiles  &&  i<route->get_count();  i++  ) {
 		schiene_t * sch1 = (schiene_t *) welt->lookup( route->position_bei(i))->get_weg(wt);
 		if(sch1==NULL) {
 			dbg->warning("waggon_t::is_next_block_free()","invalid route");
@@ -510,7 +505,7 @@ bool bahndepot_t::can_convoi_start(convoihandle_t cnv) const
 			break;
 		}
 		// otherwise we might check one tile too much
-		if(!sch1->reserve(cnv)) {
+		if(  !sch1->reserve( cnv, ribi_typ( route->position_bei(max(1,i)-1), route->position_bei(min(route->get_count()-1,i+1)) ) )  ) {
 			success = false;
 		}
 	}
diff --git a/simdepot.h b/simdepot.h
index d490001..c5122f2 100644
--- a/simdepot.h
+++ b/simdepot.h
@@ -10,7 +10,6 @@
 
 #include "tpl/slist_tpl.h"
 #include "dings/gebaeude.h"
-#include "boden/wege/weg.h"
 #include "convoihandle_t.h"
 #include "simline.h"
 
diff --git a/simdings.cc b/simdings.cc
index ec24f9e..2d798bc 100644
--- a/simdings.cc
+++ b/simdings.cc
@@ -154,18 +154,16 @@ spieler_t *ding_t::get_besitzer() const {
 
 void ding_t::info(cbuffer_t & buf) const
 {
-	if(besitzer_n==1  ||  besitzer_n==PLAYER_UNOWNED) {
+	if(besitzer_n==1) {
 		buf.append(translator::translate("Eigenbesitz\n"));
 	}
+	else if(besitzer_n==PLAYER_UNOWNED) {
+		buf.append(translator::translate("Kein Besitzer\n"));
+	}
 	else {
-		buf.append(translator::translate("Spieler"));
-		buf.append(" ");
-		buf.append(besitzer_n);
+		buf.append(get_besitzer()->get_name());
 		buf.append("\n");
 	}
-//	else {
-//		buf.append(translator::translate("Kein Besitzer\n"));
-//	}
 }
 
 
@@ -180,7 +178,7 @@ ding_t::zeige_info()
 // returns NULL, if removal is allowed
 const char *ding_t::ist_entfernbar(const spieler_t *sp)
 {
-	if(besitzer_n==PLAYER_UNOWNED  ||  welt->get_spieler(besitzer_n) == sp) {
+	if(besitzer_n==PLAYER_UNOWNED  ||  welt->get_spieler(besitzer_n) == sp  ||  welt->get_spieler(1) == sp) {
 		return NULL;
 	}
 	else {
diff --git a/simevent.h b/simevent.h
index e309e29..61c34ea 100644
--- a/simevent.h
+++ b/simevent.h
@@ -110,6 +110,8 @@
 // This macro is to determine if the event should be also handled by children of containers.
 #define DOES_WINDOW_CHILDREN_NEED(ev) ((ev)->ev_class == INFOWIN || (ev)->ev_class == WINDOW_RESIZE || (ev)->ev_class == WINDOW_MAKE_MIN_SIZE ) // 11-Mar-03 (Mathew Hounsell) Added
 
+#define IS_WINDOW_TOP(ev) ((ev)->ev_class == INFOWIN || (ev)->ev_class == WIN_TOP )
+
 #define IS_LEFT_BUTTON_PRESSED(ev) ((ev)->button_state&1)
 #define IS_RIGHT_BUTTON_PRESSED(ev) (((ev)->button_state&2)>>1)
 #define IS_MIDDLE_BUTTON_PRESSED(ev) (((ev)->button_state&4)>>2)
diff --git a/simfab.cc b/simfab.cc
index d8355d3..3f6da3b 100644
--- a/simfab.cc
+++ b/simfab.cc
@@ -65,6 +65,27 @@
 static const int FAB_MAX_INPUT = 15000;
 
 
+/**
+ * Ordering based on relative distance to a fixed point `origin'.
+ */
+class RelativeDistanceOrdering
+{
+private:
+	const koord m_origin;
+public:
+	RelativeDistanceOrdering(const koord& origin)
+		: m_origin(origin)
+	{ /* nothing */ }
+
+	/**
+	 * Returns true if `a' is closer to the origin than `b', otherwise false.
+	 */
+	bool operator()(const koord& a, const koord& b) const
+	{
+		return koord_distance(m_origin, a) < koord_distance(m_origin, b);
+	}
+};
+
 
 
 fabrik_t *fabrik_t::get_fab(const karte_t *welt, const koord pos)
@@ -151,6 +172,7 @@ fabrik_t::fabrik_t(karte_t* wl, loadsave_t* file)
 	last_lieferziel_start = 0;
 	total_input = total_output = 0;
 	status = nothing;
+	currently_producing = false;
 }
 
 
@@ -313,6 +335,7 @@ fabrik_t::add_random_field(uint16 probability)
 		if(lt) {
 			gr2->obj_add( lt );
 		}
+		gr2->calc_bild();
 		return true;
 	}
 	return false;
@@ -991,10 +1014,8 @@ void fabrik_t::verteile_waren(const uint32 produkt)
 				// Station can only store up to a maximum amount of goods per square
 				const sint32 halt_left = (sint32)halt->get_capacity(2) - (sint32)halt->get_ware_summe(ware.get_besch());
 				// ok, still enough space
-				halt->suche_route(ware);
+				if(  halt->suche_route( ware, NULL, welt->get_einstellungen()->is_no_routing_over_overcrowding() )==haltestelle_t::ROUTE_OK  ) {
 
-//DBG_MESSAGE("verteile_waren()","searched for route for %s with result %i,%i",translator::translate(ware.get_name()),ware.get_ziel().x,ware.get_ziel().y);
-				if(ware.get_ziel().is_bound()) {
 					// if only overflown factories found => deliver to first
 					// else deliver to non-overflown factory
 					bool overflown = (ziel_fab->get_eingang()[w].menge >= ziel_fab->get_eingang()[w].max);
@@ -1106,20 +1127,6 @@ fabrik_t::neuer_monat()
 
 static void info_add_ware_description(cbuffer_t & buf, const ware_production_t & ware)
 {
-  const ware_besch_t * type = ware.get_typ();
-
-  buf.append(" -");
-  buf.append(translator::translate(type->get_name()));
-  buf.append(" ");
-  buf.append(ware.menge >> fabrik_t::precision_bits);
-  buf.append("/");
-  buf.append(ware.max >> fabrik_t::precision_bits);
-  buf.append(translator::translate(type->get_mass()));
-
-  if(type->get_catg() != 0) {
-    buf.append(", ");
-    buf.append(translator::translate(type->get_catg_name()));
-  }
 }
 
 
@@ -1275,7 +1282,10 @@ void
 fabrik_t::info(cbuffer_t& buf) const
 {
 	buf.clear();
-	buf.printf("%s %li %s\n", translator::translate("Durchsatz"), get_current_production(), translator::translate("units/day"));
+	buf.append( translator::translate("Durchsatz") );
+	buf.append( get_current_production(), 0 );
+	buf.append( translator::translate("units/day") );
+	buf.append( "\n" );
 
 	if (!lieferziele.empty()) {
 		buf.append("\n");
@@ -1355,10 +1365,23 @@ fabrik_t::info(cbuffer_t& buf) const
 		buf.append(":\n");
 
 		for (uint32 index = 0; index < ausgang.get_count(); index++) {
-			info_add_ware_description(buf, ausgang[index]);
+			const ware_besch_t * type = ausgang[index].get_typ();
+
+			buf.append(" -");
+			buf.append(translator::translate(type->get_name()));
+			buf.append(" ");
+			buf.append(ausgang[index].menge / (double)(1<<precision_bits), 0 );
+			buf.append("/");
+			buf.append(ausgang[index].max >> fabrik_t::precision_bits,0);
+			buf.append(translator::translate(type->get_mass()));
+
+			if(type->get_catg() != 0) {
+				buf.append(", ");
+				buf.append(translator::translate(type->get_catg_name()));
+			}
 
 			buf.append(", ");
-			buf.append((int)(besch->get_produkt(index)->get_faktor()*100/256));
+			buf.append((besch->get_produkt(index)->get_faktor()*100l)/256.0,0);
 			buf.append("%\n");
 		}
 	}
@@ -1374,12 +1397,12 @@ fabrik_t::info(cbuffer_t& buf) const
 			buf.append(" -");
 			buf.append(translator::translate(eingang[index].get_typ()->get_name()));
 			buf.append(" ");
-			buf.append(eingang[index].menge >> precision_bits);
+			buf.append(eingang[index].menge / (double)(1<<precision_bits), 0 );
 			buf.append("/");
-			buf.append(eingang[index].max >> precision_bits);
+			buf.append(eingang[index].max >> precision_bits,0);
 			buf.append(translator::translate(eingang[index].get_typ()->get_mass()));
 			buf.append(", ");
-			buf.append((int)(besch->get_lieferant(index)->get_verbrauch()*100/256));
+			buf.append((besch->get_lieferant(index)->get_verbrauch()*100l)/256.0,0);
 			buf.append("%\n");
 		}
 	}
@@ -1428,7 +1451,7 @@ void fabrik_t::rotate90( const sint16 y_size )
 		pos.rotate90( y_size );
 		dbg->warning( "fabrik_t::rotate90()","no tile zero form %s at (%s)", get_name(), pos.get_str() );
 	}
-	rotate = (rotate+1)%besch->get_haus()->get_all_layouts();
+	rotate = (rotate+3)%besch->get_haus()->get_all_layouts();
 
 	for( uint32 i=0;  i<lieferziele.get_count();  i++  ) {
 		lieferziele[i].rotate90( y_size );
@@ -1452,6 +1475,7 @@ void fabrik_t::rotate90( const sint16 y_size )
 
 
 
+
 void
 fabrik_t::add_supplier(koord ziel)
 {
@@ -1514,3 +1538,20 @@ bool fabrik_t::add_supplier(fabrik_t* fab)
 	}
 	return false;
 }
+
+void fabrik_t::get_tile_list( vector_tpl<koord> &tile_list ) const
+{
+	tile_list.clear();
+
+	koord pos_2d = pos.get_2d();
+	koord size = this->get_besch()->get_haus()->get_groesse(this->get_rotate());
+	koord test;
+	// Which tiles belong to the fab?
+	for( test.x = 0; test.x < size.x; test.x++ ) {
+		for( test.y = 0; test.y < size.y; test.y++ ) {
+			if( fabrik_t::get_fab( welt, pos_2d+test ) == this ) {
+				tile_list.append( pos_2d+test );
+			}
+		}
+	}
+}
diff --git a/simfab.h b/simfab.h
index 1691070..1cb0a9e 100644
--- a/simfab.h
+++ b/simfab.h
@@ -30,9 +30,6 @@ class stadt_t;
 #define MAX_PRODBASE_SHIFT (4)
 
 
-// up to this distance, factories will be connected to their towns ...
-#define CONNECT_TO_TOWN_SQUARE_DISTANCE 5000
-
 // to prepare for 64 precision ...
 class ware_production_t
 {
@@ -247,6 +244,11 @@ public:
 
 	inline koord3d get_pos() const { return pos; }
 
+	/*
+	 * Fills the vector with the koords of the tiles.
+	 */
+	void get_tile_list( vector_tpl<koord> &tile_list ) const;
+
 	/**
 	 * gibt eine NULL-Terminierte Liste von Fabrikpointern zurück
 	 *
diff --git a/simgraph.h b/simgraph.h
index 28dabe9..0a83efb 100644
--- a/simgraph.h
+++ b/simgraph.h
@@ -113,7 +113,7 @@ void display_day_night_shift(int night);
 
 
 // scrolls horizontally, will ignore clipping etc.
-void	display_scroll_band( const KOORD_VAL start_y, const KOORD_VAL x_offset, const KOORD_VAL h );
+void display_scroll_band( const KOORD_VAL start_y, const KOORD_VAL x_offset, const KOORD_VAL h );
 
 // set first and second company color for player
 void display_set_player_color_scheme(const int player, const COLOR_VAL col1, const COLOR_VAL col2 );
@@ -157,8 +157,8 @@ void display_ddd_box_clip(KOORD_VAL x1, KOORD_VAL y1, KOORD_VAL w, KOORD_VAL h,
 
 
 // unicode save moving in strings
-int get_next_char(const char* text, int pos);
-int get_prev_char(const char* text, int pos);
+size_t get_next_char(const char* text, size_t pos);
+long get_prev_char(const char* text, long pos);
 
 KOORD_VAL display_get_char_width(utf16 c);
 
@@ -166,7 +166,7 @@ KOORD_VAL display_get_char_width(utf16 c);
 #define proportional_string_width(text)          display_calc_proportional_string_len_width(text, 0x7FFF)
 #define proportional_string_len_width(text, len) display_calc_proportional_string_len_width(text, len)
 // length of a string in pixel
-int display_calc_proportional_string_len_width(const char* text, int len);
+int display_calc_proportional_string_len_width(const char* text, size_t len);
 
 /*
  * len parameter added - use -1 for previous behaviour.
@@ -184,7 +184,7 @@ enum
 	DT_CLIP      = 1 << 3
 };
 
-int display_text_proportional_len_clip(KOORD_VAL x, KOORD_VAL y, const char* txt, int flags, PLAYER_COLOR_VAL color_index, int len);
+int display_text_proportional_len_clip(KOORD_VAL x, KOORD_VAL y, const char* txt, int flags, PLAYER_COLOR_VAL color_index, long len);
 /* macro are for compatibility */
 #define display_proportional(     x,  y, txt, align, color, dirty) display_text_proportional_len_clip(x, y, txt, align | (dirty ? DT_DIRTY : 0),           color,  -1)
 #define display_proportional_clip(x,  y, txt, align, color, dirty) display_text_proportional_len_clip(x, y, txt, align | (dirty ? DT_DIRTY : 0) | DT_CLIP, color,  -1)
diff --git a/simgraph0.cc b/simgraph0.cc
new file mode 100644
index 0000000..072778a
--- /dev/null
+++ b/simgraph0.cc
@@ -0,0 +1,307 @@
+/*
+ * Copyright (c) 2001 Hansjörg Malthaner
+ * hansjoerg.malthaner at gmx.de
+ *
+ * This file is part of the Simugraph engine and may not be used
+ * in other projects without written permission of the author.
+ *
+ * Usage for Iso-Angband is granted.
+ */
+
+#include "simconst.h"
+#include "simsys.h"
+#include "simdebug.h"
+#include "besch/bild_besch.h"
+
+#ifdef _MSC_VER
+#	include <io.h>
+#	include <direct.h>
+#	define W_OK 2
+#else
+#	include <sys/stat.h>
+#	include <fcntl.h>
+#	include <unistd.h>
+#endif
+
+#include "simgraph.h"
+
+typedef uint16 PIXVAL;
+
+int large_font_height = 10;
+
+KOORD_VAL tile_raster_width = 16; // zoomed
+KOORD_VAL base_tile_raster_width = 16; // original
+
+KOORD_VAL display_set_base_raster_width(KOORD_VAL)
+{
+	return 0;
+}
+
+void set_zoom_factor(int)
+{
+}
+
+int zoom_factor_up()
+{
+	return false;
+}
+
+int zoom_factor_down()
+{
+	return false;
+}
+
+static inline void mark_tile_dirty(const int, const int)
+{
+}
+
+static inline void mark_tiles_dirty(const int, const int, const int)
+{
+}
+
+static inline int is_tile_dirty(const int, const int)
+{
+	return false;
+}
+
+void mark_rect_dirty_wc(KOORD_VAL, KOORD_VAL, KOORD_VAL, KOORD_VAL)
+{
+}
+
+int display_set_unicode(int)
+{
+	return false;
+}
+
+bool display_load_font(const char*)
+{
+	return true;
+}
+
+sint16 display_get_width(void)
+{
+	return 0;
+}
+
+sint16 display_get_height(void)
+{
+	return 0;
+}
+
+sint16 display_set_height(KOORD_VAL)
+{
+	return 0;
+}
+
+int display_get_light(void)
+{
+	return 0;
+}
+
+void display_set_light(int)
+{
+}
+
+void display_day_night_shift(int)
+{
+}
+
+void display_set_player_color_scheme(const int, const COLOR_VAL, const COLOR_VAL)
+{
+}
+
+void register_image(struct bild_t* bild)
+{
+	bild->bild_nr = 1;
+}
+
+void display_get_image_offset(unsigned, KOORD_VAL *, KOORD_VAL *, KOORD_VAL *, KOORD_VAL *)
+{
+}
+
+void display_get_base_image_offset(unsigned, KOORD_VAL *, KOORD_VAL *, KOORD_VAL *, KOORD_VAL *)
+{
+}
+
+void display_set_base_image_offset(unsigned, KOORD_VAL, KOORD_VAL)
+{
+}
+
+int get_maus_x(void)
+{
+	return sys_event.mx;
+}
+
+int get_maus_y(void)
+{
+	return sys_event.my;
+}
+
+struct clip_dimension display_get_clip_wh(void)
+{
+	struct clip_dimension clip_rect;
+	return clip_rect;
+}
+
+void display_set_clip_wh(KOORD_VAL, KOORD_VAL, KOORD_VAL, KOORD_VAL)
+{
+}
+
+void display_scroll_band(const KOORD_VAL, const KOORD_VAL, const KOORD_VAL)
+{
+}
+
+static inline void pixcopy(PIXVAL *, const PIXVAL *, const unsigned int)
+{
+}
+
+static inline void colorpixcopy(PIXVAL *, const PIXVAL *, const PIXVAL * const)
+{
+}
+
+void display_img_aux(const unsigned, KOORD_VAL, KOORD_VAL, const int, bool)
+{
+}
+
+void display_color_img(const unsigned, const KOORD_VAL, const KOORD_VAL, const sint8, const int, const int)
+{
+}
+
+void display_base_img(const unsigned, const KOORD_VAL, const KOORD_VAL, const sint8, const int, const int)
+{
+}
+
+void display_img_blend(const unsigned, KOORD_VAL, KOORD_VAL, const PLAYER_COLOR_VAL, const int, const int)
+{
+}
+
+void display_mark_img_dirty(unsigned, KOORD_VAL, KOORD_VAL)
+{
+}
+
+void display_fillbox_wh(KOORD_VAL, KOORD_VAL, KOORD_VAL, KOORD_VAL, PLAYER_COLOR_VAL, int)
+{
+}
+
+void display_fillbox_wh_clip(KOORD_VAL, KOORD_VAL, KOORD_VAL, KOORD_VAL, PLAYER_COLOR_VAL, int)
+{
+}
+
+void display_vline_wh(const KOORD_VAL, KOORD_VAL, KOORD_VAL, const PLAYER_COLOR_VAL, int)
+{
+}
+
+void display_vline_wh_clip(const KOORD_VAL, KOORD_VAL, KOORD_VAL, const PLAYER_COLOR_VAL, int)
+{
+}
+
+void display_array_wh(KOORD_VAL, KOORD_VAL, KOORD_VAL, KOORD_VAL, const COLOR_VAL *)
+{
+}
+
+size_t get_next_char(const char*, size_t pos)
+{
+	return pos + 1;
+}
+
+long get_prev_char(const char*, long pos)
+{
+	if (pos <= 0) {
+		return 0;
+	}
+	return pos - 1;
+}
+
+KOORD_VAL display_get_char_width(utf16)
+{
+	return 0;
+}
+
+int display_calc_proportional_string_len_width(const char*, size_t)
+{
+	return 0;
+}
+
+int display_text_proportional_len_clip(KOORD_VAL, KOORD_VAL, const char*, int, const PLAYER_COLOR_VAL, long)
+{
+	return 0;
+}
+
+void display_ddd_box(KOORD_VAL, KOORD_VAL, KOORD_VAL, KOORD_VAL, PLAYER_COLOR_VAL, PLAYER_COLOR_VAL)
+{
+}
+
+void display_ddd_box_clip(KOORD_VAL, KOORD_VAL, KOORD_VAL, KOORD_VAL, PLAYER_COLOR_VAL, PLAYER_COLOR_VAL)
+{
+}
+
+void display_ddd_proportional(KOORD_VAL, KOORD_VAL, KOORD_VAL, KOORD_VAL, PLAYER_COLOR_VAL, PLAYER_COLOR_VAL, const char *, int)
+{
+}
+
+void display_ddd_proportional_clip(KOORD_VAL, KOORD_VAL, KOORD_VAL, KOORD_VAL, PLAYER_COLOR_VAL, PLAYER_COLOR_VAL, const char *, int)
+{
+}
+
+void display_multiline_text(KOORD_VAL, KOORD_VAL, const char *, PLAYER_COLOR_VAL)
+{
+}
+
+void display_flush_buffer(void)
+{
+}
+
+void display_move_pointer(KOORD_VAL, KOORD_VAL)
+{
+}
+
+void display_show_pointer(int)
+{
+}
+
+void display_set_pointer(int)
+{
+}
+
+void display_show_load_pointer(int)
+{
+}
+
+int simgraph_init(KOORD_VAL, KOORD_VAL, int)
+{
+	return TRUE;
+}
+
+int is_display_init(void)
+{
+	return false;
+}
+
+void display_free_all_images_above( unsigned)
+{
+}
+
+int simgraph_exit()
+{
+	return dr_os_close();
+}
+
+void simgraph_resize(KOORD_VAL, KOORD_VAL)
+{
+}
+
+void display_snapshot()
+{
+}
+
+void display_direct_line(const KOORD_VAL, const KOORD_VAL, const KOORD_VAL, const KOORD_VAL, const PLAYER_COLOR_VAL)
+{
+}
+
+void display_set_progress_text(const char *)
+{
+}
+
+void display_progress(int, int)
+{
+}
diff --git a/simgraph16.cc b/simgraph16.cc
index ce1a957..da59972 100644
--- a/simgraph16.cc
+++ b/simgraph16.cc
@@ -851,7 +851,7 @@ static void rezoom_img(const unsigned int n)
 					} while (*sp);
 					sp++;
 				}
-				images[n].len = (sp-images[n].base_data);
+				images[n].len = (uint16)(size_t)(sp-images[n].base_data);
 			}
 			return;
 		}
@@ -1052,10 +1052,10 @@ static void rezoom_img(const unsigned int n)
 			images[n].w = newzoomwidth;
 			images[n].h = newzoomheight;
 			if(newzoomheight>0) {
-				const uint32 zoom_len = ((uint8 *)dest) - ((uint8 *)baseimage);
-				images[n].len = zoom_len/sizeof(PIXVAL);
+				const size_t zoom_len = (size_t)(((uint8 *)dest) - ((uint8 *)baseimage));
+				images[n].len = (uint16)(zoom_len/sizeof(PIXVAL));
 				images[n].zoom_data = MALLOCN(PIXVAL, images[n].len);
-				assert( zoom_len>0  &&  zoom_len<65535*sizeof(PIXVAL)  &&  images[n].zoom_data  );
+				assert( zoom_len<65535*sizeof(PIXVAL)  &&  images[n].zoom_data  );
 				memcpy( images[n].zoom_data, baseimage, zoom_len );
 			}
 		} else {
@@ -1431,7 +1431,7 @@ static int clip_wh(KOORD_VAL *x, KOORD_VAL *width, const KOORD_VAL min_width, co
 static int clip_lr(KOORD_VAL *x, KOORD_VAL *w, const KOORD_VAL left, const KOORD_VAL right)
 {
 	const KOORD_VAL l = *x;      // leftmost pixel
-	const KOORD_VAL r = *x + *w; // rightmost pixel
+	const sint32 r = (sint32)*x + (sint32)*w; // rightmost pixel
 
 	if (*w <= 0 || l >= right || r <= left) {
 		*w = 0;
@@ -1444,7 +1444,7 @@ static int clip_lr(KOORD_VAL *x, KOORD_VAL *w, const KOORD_VAL left, const KOORD
 		*x = left;
 	}
 	if (r > right) {
-		*w -= r - right;
+		*w -= (KOORD_VAL)(r - right);
 	}
 	return *w > 0;
 }
@@ -1959,7 +1959,7 @@ void display_color_img(const unsigned n, const KOORD_VAL xp, const KOORD_VAL yp,
 			}
 
 			// first test, if we can/need to build a cached version
-			if(  images[n].player_flags&(~NEED_PLAYER_RECODE)==0  ) {
+			if(  (images[n].player_flags&(~NEED_PLAYER_RECODE)) == 0  ) {
 				// we can still recoler if needed
 				recode_color_img(n, player_nr);
 			}
@@ -2441,19 +2441,22 @@ void display_array_wh(KOORD_VAL xp, KOORD_VAL yp, KOORD_VAL w, KOORD_VAL h, cons
 
 
 // unicode save moving in strings
-int get_next_char(const char* text, int pos)
+size_t get_next_char(const char* text, size_t pos)
 {
 	if (has_unicode) {
 		return utf8_get_next_char((const utf8*)text, pos);
-	} else {
+	}
+	else {
 		return pos + 1;
 	}
 }
 
 
-int get_prev_char(const char* text, int pos)
+long get_prev_char(const char* text, long pos)
 {
-	if (pos <= 0) return 0;
+	if (pos <= 0) {
+		return 0;
+	}
 	if (has_unicode) {
 		return utf8_get_prev_char((const utf8*)text, pos);
 	} else {
@@ -2477,7 +2480,7 @@ KOORD_VAL display_get_char_width(utf16 c)
  * @author prissi
  * @date 29.11.04
  */
-int display_calc_proportional_string_len_width(const char* text, int len)
+int display_calc_proportional_string_len_width(const char* text, size_t len)
 {
 	const font_type* const fnt = &large_font;
 	unsigned int c, width = 0;
@@ -2486,7 +2489,7 @@ int display_calc_proportional_string_len_width(const char* text, int len)
 #ifdef UNICODE_SUPPORT
 	if (has_unicode) {
 		unsigned short iUnicode;
-		int	iLen = 0;
+		size_t	iLen = 0;
 
 		// decode char; Unicode is always 8 pixel (so far)
 		while (iLen < len) {
@@ -2551,12 +2554,12 @@ static unsigned char get_h_mask(const int xL, const int xR, const int cL, const
  * @author Volker Meyer, prissi
  * @date  15.06.2003, 2.1.2005
  */
-int display_text_proportional_len_clip(KOORD_VAL x, KOORD_VAL y, const char* txt, int flags, const PLAYER_COLOR_VAL color_index, int len)
+int display_text_proportional_len_clip(KOORD_VAL x, KOORD_VAL y, const char* txt, int flags, const PLAYER_COLOR_VAL color_index, long len)
 {
 	const font_type* const fnt = &large_font;
 	KOORD_VAL cL, cR, cT, cB;
 	uint32 c;
-	int	iTextPos = 0; // pointer on text position: prissi
+	size_t iTextPos = 0; // pointer on text position: prissi
 	int char_width_1, char_width_2; // 1 is char only, 2 includes room
 	int screen_pos;
 	const uint8 *char_data;
@@ -2626,7 +2629,7 @@ int display_text_proportional_len_clip(KOORD_VAL x, KOORD_VAL y, const char* txt
 	}
 
 	// big loop, char by char
-	while (iTextPos < len && txt[iTextPos] != 0) {
+	while (iTextPos < (size_t)len  &&  txt[iTextPos] != 0) {
 		int h;
 		uint8 char_yoffset;
 
@@ -2816,7 +2819,7 @@ void display_multiline_text(KOORD_VAL x, KOORD_VAL y, const char *buf, PLAYER_CO
 			display_text_proportional_len_clip(
 				x, y, buf,
 				ALIGN_LEFT | DT_DIRTY | DT_CLIP, color,
-				next != NULL ? next - buf : -1
+				next != NULL ? (int)(size_t)(next - buf) : -1
 			);
 			buf = next + 1;
 			y += LINESPACE;
diff --git a/simhalt.cc b/simhalt.cc
index 7bfdae4..ed1e111 100644
--- a/simhalt.cc
+++ b/simhalt.cc
@@ -14,7 +14,8 @@
 #include <algorithm>
 
 #include "freight_list_sorter.h"
-#include "freight_list_sorter.h"
+
+#include "simcity.h"
 #include "simcolor.h"
 #include "simconvoi.h"
 #include "simdebug.h"
@@ -23,11 +24,13 @@
 #include "simhalt.h"
 #include "simintr.h"
 #include "simmem.h"
+#include "simmesg.h"
 #include "simplan.h"
 #include "simtools.h"
 #include "player/simplay.h"
 #include "simwin.h"
 #include "simworld.h"
+#include "simware.h"
 
 #include "bauer/hausbauer.h"
 #include "bauer/warenbauer.h"
@@ -57,9 +60,6 @@
 
 #include "vehicle/simpeople.h"
 
-#ifdef LAGER_NOT_IN_USE
-#include "dings/lagerhaus.h"
-#endif
 
 karte_t *haltestelle_t::welt = NULL;
 
@@ -67,42 +67,110 @@ slist_tpl<halthandle_t> haltestelle_t::alle_haltestellen;
 
 stringhashtable_tpl<halthandle_t> haltestelle_t::all_names;
 
+static uint32 halt_iterator_start = 0;
+uint8 haltestelle_t::status_step = 0;
+
+/**
+ * Markers used in suche_route() to avoid processing the same halt more than once
+ * Originally they are instance variables of haltestelle_t
+ * Now consolidated into a static array to speed up suche_route()
+ * @author Knightly
+ */
+uint8 haltestelle_t::markers[65536];
+uint8 haltestelle_t::current_mark = 0;
+
+
+void haltestelle_t::step_all()
+{
+	if(  alle_haltestellen.get_count()>0  ) {
+
+		uint32 it = halt_iterator_start;
+		slist_iterator_tpl <halthandle_t> iter( alle_haltestellen );
+		while(  it>0  &&  iter.next()  ) {
+			it--;
+		}
+		if(  it>0  ) {
+			halt_iterator_start = 0;
+		}
+		else {
+			sint16 units_remaining = 128;
+			while(  units_remaining>0  ) {
+				if(  !iter.next()  ) {
+					halt_iterator_start = 0;
+					break;
+				}
+				// iterate until the specified number of units were handled
+				if(  !iter.get_current()->step(units_remaining)  ) {
+					// too much rerouted => needs continue at next round!
+					break;
+				}
+				halt_iterator_start ++;
+			}
+		}
+	}
+	else {
+		// save reinit
+		halt_iterator_start = 0;
+	}
+}
+
 
 
-halthandle_t haltestelle_t::get_halt(karte_t *welt, const koord pos)
+halthandle_t haltestelle_t::get_halt( karte_t *welt, const koord pos, const spieler_t *sp )
 {
 	const planquadrat_t *plan = welt->lookup(pos);
 	if(plan) {
-		if(plan->get_halt().is_bound()) {
+		if(plan->get_halt().is_bound()  &&  spieler_t::check_owner(sp,plan->get_halt()->get_besitzer())  ) {
 			return plan->get_halt();
 		}
 		// no halt? => we do the water check
 		if(plan->get_kartenboden()->ist_wasser()) {
 			// may catch bus stops close to water ...
-			if(plan->get_haltlist_count()>0) {
-				return plan->get_haltlist()[0];
+			const uint8 cnt = plan->get_haltlist_count();
+			// first check for own stop
+			for(  uint8 i=0;  i<cnt;  i++  ) {
+				if(  plan->get_haltlist()[i]->get_besitzer()==sp  ) {
+					return plan->get_haltlist()[i];
+				}
+			}
+			// then for public stop
+			for(  uint8 i=0;  i<cnt;  i++  ) {
+				if(  plan->get_haltlist()[i]->get_besitzer()==welt->get_spieler(1)  ) {
+					return plan->get_haltlist()[i];
+				}
 			}
+			// so: nothing found
 		}
 	}
 	return halthandle_t();
 }
 
 
-halthandle_t
-haltestelle_t::get_halt(karte_t *welt, const koord3d pos)
+halthandle_t haltestelle_t::get_halt( karte_t *welt, const koord3d pos, const spieler_t *sp )
 {
 	const grund_t *gr = welt->lookup(pos);
 	if(gr) {
-		if(gr->get_halt().is_bound()) {
+		if(gr->get_halt().is_bound()  &&  spieler_t::check_owner(sp,gr->get_halt()->get_besitzer())  ) {
 			return gr->get_halt();
 		}
 		// no halt? => we do the water check
 		if(gr->ist_wasser()) {
 			// may catch bus stops close to water ...
 			const planquadrat_t *plan = welt->lookup(pos.get_2d());
-			if(plan->get_haltlist_count()>0) {
-				return plan->get_haltlist()[0];
+			const uint8 cnt = plan->get_haltlist_count();
+			// first check for own stop
+			for(  uint8 i=0;  i<cnt;  i++  ) {
+				if(  plan->get_haltlist()[i]->get_besitzer()==sp  ) {
+					return plan->get_haltlist()[i];
+				}
+			}
+			// then for public stop
+			for(  uint8 i=0;  i<cnt;  i++  ) {
+				if(  plan->get_haltlist()[i]->get_besitzer()==welt->get_spieler(1)  ) {
+					return plan->get_haltlist()[i];
+				}
 			}
+			// so: nothing found
 		}
 	}
 	return halthandle_t();
@@ -111,15 +179,16 @@ haltestelle_t::get_halt(karte_t *welt, const koord3d pos)
 
 koord haltestelle_t::get_basis_pos() const
 {
-	if (tiles.empty()) return koord::invalid;
-	assert(tiles.front().grund->get_pos().get_2d() == init_pos);
-	return tiles.front().grund->get_pos().get_2d();
+	return get_basis_pos3d().get_2d();
 }
 
 
 koord3d haltestelle_t::get_basis_pos3d() const
 {
-	if (tiles.empty()) return koord3d::invalid;
+	if (tiles.empty()) {
+		return koord3d::invalid;
+	}
+	assert(tiles.front().grund->get_pos().get_2d() == init_pos);
 	return tiles.front().grund->get_pos();
 }
 
@@ -139,8 +208,7 @@ halthandle_t haltestelle_t::create(karte_t *welt, koord pos, spieler_t *sp)
  * removes a ground tile from a station
  * @author prissi
  */
-bool
-haltestelle_t::remove(karte_t *welt, spieler_t *sp, koord3d pos, const char *&msg)
+bool haltestelle_t::remove(karte_t *welt, spieler_t *sp, koord3d pos, const char *&msg)
 {
 	msg = NULL;
 	grund_t *bd = welt->lookup(pos);
@@ -151,24 +219,25 @@ haltestelle_t::remove(karte_t *welt, spieler_t *sp, koord3d pos, const char *&ms
 		return false;
 	}
 
-	halthandle_t halt = get_halt(welt,pos);
+	halthandle_t halt = bd->get_halt();
 	if(!halt.is_bound()) {
 		dbg->error("haltestelle_t::remove()","no halt at %d,%d,%d", pos.x, pos.y, pos.z);
 		return false;
 	}
 
 DBG_MESSAGE("haltestelle_t::remove()","removing segment from %d,%d,%d", pos.x, pos.y, pos.z);
-
 	// otherwise there will be marked tiles left ...
 	halt->mark_unmark_coverage(false);
-	halt->rem_grund(bd);
 
-	// remove station building?
-	gebaeude_t* gb = bd->find<gebaeude_t>();
-	if(gb) {
-DBG_MESSAGE("haltestelle_t::remove()",  "removing building" );
-		hausbauer_t::remove( welt, sp, gb );
-		bd = NULL;	// no need to recalc image
+	// only try to remove connected buildings, when still in list to avoid infinite loops
+	if(  halt->rem_grund(bd)  ) {
+		// remove station building?
+		gebaeude_t* gb = bd->find<gebaeude_t>();
+		if(gb) {
+			DBG_MESSAGE("haltestelle_t::remove()",  "removing building" );
+			hausbauer_t::remove( welt, sp, gb );
+			bd = NULL;	// no need to recalc image
+		}
 	}
 
 	if(!halt->existiert_in_welt()) {
@@ -179,7 +248,7 @@ DBG_DEBUG("haltestelle_t::remove()","destroy");
 	}
 	else {
 DBG_DEBUG("haltestelle_t::remove()","not last");
-		// may have been changed ... (due to post office/dock/railways station deletion)
+		// acceptance and type may have been changed ... (due to post office/dock/railways station deletion)
 		halt->recalc_station_type();
 	}
 
@@ -210,6 +279,8 @@ halthandle_t haltestelle_t::create(karte_t *welt, loadsave_t *file)
  */
 void haltestelle_t::destroy(halthandle_t &halt)
 {
+	// jsut play save: restart iterator at zero ...
+	halt_iterator_start = 0;
 	haltestelle_t *p = halt.get_rep();
 	delete p;
 }
@@ -234,9 +305,9 @@ void haltestelle_t::destroy_all(karte_t *welt)
 haltestelle_t::haltestelle_t(karte_t* wl, loadsave_t* file)
 {
 	self = halthandle_t(this);
+	markers[ self.get_id() ] = current_mark;
 
 	welt = wl;
-	marke = 0;
 
 	pax_happy = 0;
 	pax_unhappy = 0;
@@ -244,6 +315,11 @@ haltestelle_t::haltestelle_t(karte_t* wl, loadsave_t* file)
 
 	waren = (vector_tpl<ware_t> **)calloc( warenbauer_t::get_max_catg_index(), sizeof(vector_tpl<ware_t> *) );
 	warenziele = new vector_tpl<halthandle_t>[ warenbauer_t::get_max_catg_index() ];
+	non_identical_schedules = new uint8[ warenbauer_t::get_max_catg_index() ];
+
+	for ( uint8 i = 0; i < warenbauer_t::get_max_catg_index(); i++ ) {
+		non_identical_schedules[i] = 0;
+	}
 
 	status_color = COL_YELLOW;
 
@@ -258,7 +334,7 @@ haltestelle_t::haltestelle_t(karte_t* wl, loadsave_t* file)
 
 	rdwr(file);
 
-	alle_haltestellen.insert(self);
+	alle_haltestellen.append(self);
 }
 
 
@@ -266,24 +342,28 @@ haltestelle_t::haltestelle_t(karte_t* wl, koord k, spieler_t* sp)
 {
 	self = halthandle_t(this);
 	assert( !alle_haltestellen.is_contained(self) );
-	alle_haltestellen.insert(self);
+	alle_haltestellen.append(self);
+
+	markers[ self.get_id() ] = current_mark;
 
 	welt = wl;
-	marke = 0;
 
 	this->init_pos = k;
 	besitzer_p = sp;
-#ifdef LAGER_NOT_IN_USE
-	lager = NULL;
-#endif
 
 	enables = NOT_ENABLED;
 
 	reroute_counter = welt->get_schedule_counter()-1;
 	rebuilt_destination_counter = reroute_counter;
+	last_catg_index = 255;	// force total reouting
 
 	waren = (vector_tpl<ware_t> **)calloc( warenbauer_t::get_max_catg_index(), sizeof(vector_tpl<ware_t> *) );
 	warenziele = new vector_tpl<halthandle_t>[ warenbauer_t::get_max_catg_index() ];
+	non_identical_schedules = new uint8[ warenbauer_t::get_max_catg_index() ];
+
+	for ( uint8 i = 0; i < warenbauer_t::get_max_catg_index(); i++ ) {
+		non_identical_schedules[i] = 0;
+	}
 
 	pax_happy = 0;
 	pax_unhappy = 0;
@@ -374,17 +454,17 @@ haltestelle_t::~haltestelle_t()
 	}
 	free( waren );
 	delete[] warenziele;
+	delete[] non_identical_schedules;
 
 	// routes may have changed without this station ...
 	verbinde_fabriken();
-	welt->set_schedule_counter();
 }
 
 
-void
-haltestelle_t::rotate90( const sint16 y_size )
+void haltestelle_t::rotate90( const sint16 y_size )
 {
 	init_pos.rotate90( y_size );
+
 	// rotate waren destinations
 	// iterate over all different categories
 	for(unsigned i=0; i<warenbauer_t::get_max_catg_index(); i++) {
@@ -406,6 +486,8 @@ haltestelle_t::rotate90( const sint16 y_size )
 			}
 		}
 	}
+
+	// relinking factories
 	verbinde_fabriken();
 }
 
@@ -514,7 +596,7 @@ char *haltestelle_t::create_name(const koord k, const char *typ)
 			int this_distance = 999;
 			slist_iterator_tpl<fabrik_t*> fab_iter(get_fab_list());
 			while (fab_iter.next()) {
-				int distance = abs_distance(fab_iter.get_current()->get_pos().get_2d(), k);
+				int distance = koord_distance(fab_iter.get_current()->get_pos().get_2d(), k);
 				if (distance < this_distance) {
 					fabs.insert(fab_iter.get_current());
 					distance = this_distance;
@@ -600,27 +682,27 @@ char *haltestelle_t::create_name(const koord k, const char *typ)
 				dirname = diagonal_name[(4-welt->get_einstellungen()->get_rotation())%4];
 			}
 			else if (k.x > re_gr) {
-				dirname = diagonal_name[(1-welt->get_einstellungen()->get_rotation())%4];;
+				dirname = diagonal_name[(5-welt->get_einstellungen()->get_rotation())%4];
 			}
 			else {
-				dirname = direction_name[(0-welt->get_einstellungen()->get_rotation())%4];;
+				dirname = direction_name[(4-welt->get_einstellungen()->get_rotation())%4];
 			}
 		} else if (k.y > un_gr  ||  (inside  &&  k.y*3 > (un_gr+un_gr+ob_gr))  ) {
 			if (k.x < li_gr) {
-				dirname = diagonal_name[(3-welt->get_einstellungen()->get_rotation())%4];;
+				dirname = diagonal_name[(3-welt->get_einstellungen()->get_rotation())%4];
 			}
 			else if (k.x > re_gr) {
-				dirname = diagonal_name[(2-welt->get_einstellungen()->get_rotation())%4];;
+				dirname = diagonal_name[(6-welt->get_einstellungen()->get_rotation())%4];
 			}
 			else {
-				dirname = direction_name[(2-welt->get_einstellungen()->get_rotation())%4];;
+				dirname = direction_name[(6-welt->get_einstellungen()->get_rotation())%4];
 			}
 		} else {
 			if (k.x <= stadt->get_pos().x) {
-				dirname = direction_name[(3-welt->get_einstellungen()->get_rotation())%4];;
+				dirname = direction_name[(3-welt->get_einstellungen()->get_rotation())%4];
 			}
 			else {
-				dirname = direction_name[(1-welt->get_einstellungen()->get_rotation())%4];;
+				dirname = direction_name[(5-welt->get_einstellungen()->get_rotation())%4];
 			}
 		}
 		dirname = translator::translate(dirname);
@@ -694,22 +776,29 @@ char *haltestelle_t::create_name(const koord k, const char *typ)
 
 
 
-void
-haltestelle_t::step()
+bool haltestelle_t::step(sint16 &units_remaining)
 {
 //	DBG_MESSAGE("haltestelle_t::step()","%s (cnt %i)",get_name(),reroute_counter);
 	if(rebuilt_destination_counter!=welt->get_schedule_counter()) {
 		// schedule has changed ...
-		rebuild_destinations();
+		status_step = RESCHEDULING;
+		units_remaining -= (rebuild_destinations()/256)+2;
 	}
-	else {
+	else if(reroute_counter!=welt->get_schedule_counter()) {
 		// all new connection updated => recalc routes
-		if(reroute_counter!=welt->get_schedule_counter()) {
-			reroute_goods();
-	//		DBG_MESSAGE("haltestelle_t::step()","rerouting goods at %s",get_name());
+		status_step = REROUTING;
+		if(  !reroute_goods(units_remaining)  ) {
+			return false;
 		}
 	}
+	else {
+		// nothing needs to be done
+		status_step = 0;
+		units_remaining = 0;
+	}
+
 	recalc_status();
+	return true;
 }
 
 
@@ -720,7 +809,7 @@ haltestelle_t::step()
  */
 void haltestelle_t::neuer_monat()
 {
-	if(  welt->get_active_player()==besitzer_p  &&  status_color == COL_RED  ) {
+	if(  welt->get_active_player()==besitzer_p  &&  status_color==COL_RED  ) {
 		char buf[256];
 		sprintf(buf, translator::translate("!0_STATION_CROWDED"), get_name());
 		welt->get_message()->add_message(buf, get_basis_pos(),message_t::full, PLAYER_FLAG|besitzer_p->get_player_nr(), IMG_LEER );
@@ -744,71 +833,93 @@ void haltestelle_t::neuer_monat()
 
 
 /**
- * Called every 255 steps
+ * Called after schedule calculation of all stations is finished
  * will distribute the goods to changed routes (if there are any)
+ * returns true upon completion
  * @author Hj. Malthaner
  */
-void haltestelle_t::reroute_goods()
+bool haltestelle_t::reroute_goods(sint16 &units_remaining)
 {
-	// reroute only on demand
-	reroute_counter = welt->get_schedule_counter();
+	if(  last_catg_index==255  ) {
+		last_catg_index = 0;
+		last_ware_index = 0;
+	}
 
-	for(unsigned i=0; i<warenbauer_t::get_max_catg_index(); i++) {
-		if(waren[i]) {
-			vector_tpl<ware_t> * warray = waren[i];
-			vector_tpl<ware_t> * new_warray = new vector_tpl<ware_t>(warray->get_count());
+	for(  ; last_catg_index<warenbauer_t::get_max_catg_index(); last_catg_index++) {
 
-			// Hajo:
-			// Step 1: re-route goods now and then to adapt to changes in
-			// world layout, remove all goods which destination was removed from the map
-			// prissi;
-			// also the empty entries of the array are cleared
-			for(int j=warray->get_count()-1;  j>=0;  j--  ) {
-				ware_t & ware = (*warray)[j];
+		if(waren[last_catg_index]) {
 
-				if(ware.menge==0) {
-					continue;
-				}
+			// first: clean out the array
+			if(  last_ware_index==0  ) {
+				vector_tpl<ware_t> * warray = waren[last_catg_index];
+				vector_tpl<ware_t> * new_warray = new vector_tpl<ware_t>(warray->get_count());
 
-				// since also the factory halt list is added to the ground, we can use just this ...
-				if(welt->lookup(ware.get_zielpos())->is_connected(self)) {
-					// we are already there!
-					if(ware.is_freight()) {
-						liefere_an_fabrik(ware);
+				for(int j=warray->get_count()-1;  j>=0;  j--  ) {
+					ware_t & ware = (*warray)[j];
+
+					if(ware.menge==0) {
+						continue;
+					}
+
+					// since also the factory halt list is added to the ground, we can use just this ...
+					if(welt->lookup(ware.get_zielpos())->is_connected(self)) {
+						// we are already there!
+						if(ware.is_freight()) {
+							liefere_an_fabrik(ware);
+						}
+						continue;
 					}
-					continue;
-				}
 
-				suche_route(ware);
+					// add to new array
+					new_warray->append( ware );
+				}
 
-				// check if this good can still reach its destination
-				if(!ware.get_ziel().is_bound() ||  !ware.get_zwischenziel().is_bound()) {
-					// remove invalid destinations
-					continue;
+				// delete, if nothing connects here
+				if (new_warray->empty()) {
+					if(  warenziele[last_catg_index].empty()  ) {
+						// no connections from here => delete
+						delete new_warray;
+						new_warray = NULL;
+					}
 				}
 
-				// add to new array
-				new_warray->append( ware );
+				// replace the array
+				delete waren[last_catg_index];
+				waren[last_catg_index] = new_warray;
 			}
 
-			INT_CHECK( "simhalt.cc 489" );
+			// if somtehing left
+			// re-route goods to adapt to changes in world layout,
+			// remove all goods which destination was removed from the map
+			if(waren[last_catg_index]  &&  waren[last_catg_index]->get_count()>0) {
+
+				vector_tpl<ware_t> * warray = waren[last_catg_index];
+				while(  last_ware_index<warray->get_count()  ) {
 
-			// delete, if nothing connects here
-			if (new_warray->empty()) {
-				if(  warenziele[i].empty()  ) {
-					// no connections from here => delete
-					delete new_warray;
-					new_warray = NULL;
+					if(  suche_route( (*warray)[last_ware_index], NULL, false )==NO_ROUTE  ) {
+						// remove invalid destinations
+						warray->remove_at(last_ware_index);
+					}
+					else {
+						last_ware_index++;
+					}
+					// break after a certain number of reroute actions
+					if(  --units_remaining==0  ) {
+						return false;
+					}
 				}
+				// now we are finisched with this array
+				// => reset last_ware_index for the next categorie
 			}
-
-			// replace the array
-			delete waren[i];
-			waren[i] = new_warray;
 		}
+
+		last_ware_index = 0;
 	}
 	// likely the display must be updated after this
 	resort_freight_info = true;
+	last_catg_index = 255;	// all categories are rerouted
+	reroute_counter = welt->get_schedule_counter();	// no need to reroute further
+	return true;	// all updated ...
 }
 
 
@@ -855,13 +966,13 @@ haltestelle_t::remove_fabriken(fabrik_t *fab)
 
 
 
-void haltestelle_t::hat_gehalten(const ware_besch_t *type, const schedule_t *fpl)
+void haltestelle_t::hat_gehalten(const ware_besch_t *type, const schedule_t *fpl, const spieler_t *sp )
 {
 	if(type != warenbauer_t::nichts) {
 		for(int i=0; i<fpl->get_count(); i++) {
 
 			// Hajo: Haltestelle selbst wird nicht in Zielliste aufgenommen
-			halthandle_t halt = get_halt(welt, fpl->eintrag[i].pos);
+			halthandle_t halt = get_halt(welt, fpl->eintrag[i].pos, sp);
 			// not existing, or own, or not enabled => ignore
 			if(!halt.is_bound()  ||  halt==self  ||  !halt->is_enabled(type)) {
 				continue;
@@ -887,21 +998,24 @@ void haltestelle_t::hat_gehalten(const ware_besch_t *type, const schedule_t *fpl
  *
  * @author Hj. Malthaner
  */
-void haltestelle_t::rebuild_destinations()
+sint32 haltestelle_t::rebuild_destinations()
 {
 	// Hajo: first, remove all old entries
-	for (uint8 i=0; i<warenbauer_t::get_max_catg_index(); i++){
+	for(  uint8 i=0;  i<warenbauer_t::get_max_catg_index();  i++  ){
 		warenziele[i].clear();
-	};
+		non_identical_schedules[i] = 0;
+	}
 	rebuilt_destination_counter = welt->get_schedule_counter();
 	resort_freight_info = true;	// might result in error in routing
+	last_catg_index = 255;	// must reroute everything
 
-	const bool i_am_public = get_besitzer()==welt->get_spieler(1);
+	const bool i_am_public = (get_besitzer()==welt->get_spieler(1));
 
 // DBG_MESSAGE("haltestelle_t::rebuild_destinations()", "Adding new table entries");
 
 	// first all single convois without lines
 	vector_tpl<uint8> add_catg_index(4);
+	sint32 connections_searched = 0;
 	for (vector_tpl<convoihandle_t>::const_iterator i = welt->convois_begin(), end = welt->convois_end(); i != end; ++i) {
 		convoihandle_t cnv = *i;
 		if(cnv->get_line().is_bound()) {
@@ -914,11 +1028,12 @@ void haltestelle_t::rebuild_destinations()
 			INT_CHECK("simhalt.cc 612");
 
 			schedule_t *fpl = cnv->get_schedule();
+			const spieler_t *cnv_owner = cnv->get_besitzer();
 			if(fpl) {
 				for(int i=0; i<fpl->get_count(); i++) {
 
 					// Hajo: Hält dieser convoi hier?
-					if (get_halt(welt, fpl->eintrag[i].pos) == self) {
+					if (get_halt(welt, fpl->eintrag[i].pos,cnv_owner) == self) {
 
 						// what goods can this line transport?
 						add_catg_index.clear();
@@ -930,14 +1045,21 @@ void haltestelle_t::rebuild_destinations()
 								continue;
 							}
 							const ware_besch_t *ware=cnv->get_vehikel(i)->get_fracht_typ();
-							if(ware!=warenbauer_t::nichts  &&  !add_catg_index.is_contained(ware->get_catg_index())) {
+							if(ware!=warenbauer_t::nichts  &&  is_enabled(ware)  &&  !add_catg_index.is_contained(ware->get_catg_index())) {
 								// now add the freights
-								hat_gehalten(ware, fpl );
+								uint32 old_warenzielcount = warenziele[ ware->get_catg_index() ].get_count();
+								hat_gehalten( ware, fpl, cnv_owner );
+								if(  old_warenzielcount != warenziele[ ware->get_catg_index() ].get_count()  &&  non_identical_schedules[ ware->get_catg_index() ] < 255  ) {
+									// added additional stops => might be transfer stop
+									non_identical_schedules[ ware->get_catg_index() ]++;
+								}
 								add_catg_index.append_unique(ware->get_catg_index());
 							}
 						}
+						break;	// since we found it already ...
 					}
 				}
+				connections_searched += fpl->get_count();
 			}
 		}
 	}
@@ -946,16 +1068,27 @@ void haltestelle_t::rebuild_destinations()
 	for(uint i=0; i<registered_lines.get_count(); i++) {
 		const linehandle_t line = registered_lines[i];
 		schedule_t *fpl = line->get_schedule();
+		const spieler_t *line_owner = line->get_besitzer();
 		assert(fpl);
 		// ok, now add line to the connections
-		if(line->count_convoys()>0  &&  (i_am_public  ||  line->get_convoy(0)->get_besitzer()==get_besitzer())) {
+		if(line->count_convoys()>0  &&  (i_am_public  ||  line_owner==get_besitzer())) {
 			for( uint j=0; j<line->get_goods_catg_index().get_count();  j++  ) {
-				hat_gehalten( warenbauer_t::get_info_catg_index(line->get_goods_catg_index()[j]), fpl );
+				const ware_besch_t *ware=warenbauer_t::get_info_catg_index(line->get_goods_catg_index()[j]);
+				if(is_enabled(ware)) {
+					uint32 old_warenzielcount = warenziele[ ware->get_catg_index() ].get_count();
+					hat_gehalten( ware, fpl, line_owner );
+					if(  old_warenzielcount != warenziele[ ware->get_catg_index() ].get_count()  &&  non_identical_schedules[ ware->get_catg_index() ] < 255  ) {
+						// added additional stops => might be transfer stop
+						non_identical_schedules[ ware->get_catg_index() ]++;
+					}
+				}
 			}
+			connections_searched += fpl->get_count();
 		}
 	}
-}
 
+	return connections_searched;
+}
 
 
 /* HNode is used for route search */
@@ -963,7 +1096,6 @@ struct HNode {
 	halthandle_t halt;
 	uint16 depth;
 	HNode *link;
-	HNode *next;	// for linked list
 };
 
 /**
@@ -985,7 +1117,7 @@ struct HNode {
  *
  * @author Hj. Malthaner/prissi/gerw
  */
-void haltestelle_t::suche_route(ware_t &ware, koord *next_to_ziel)
+int haltestelle_t::suche_route( ware_t &ware, koord *next_to_ziel, const bool no_routing_over_overcrowding )
 {
 	const ware_besch_t * warentyp = ware.get_besch();
 	const uint8 ware_catg_index = warentyp->get_catg_index();
@@ -1014,7 +1146,7 @@ void haltestelle_t::suche_route(ware_t &ware, koord *next_to_ziel)
 		if(  next_to_ziel != NULL  ) {
 			*next_to_ziel = koord::invalid;
 		}
-		return;
+		return NO_ROUTE;
 	}
 
 	// check, if the shortest connection is not right to us ...
@@ -1024,23 +1156,18 @@ void haltestelle_t::suche_route(ware_t &ware, koord *next_to_ziel)
 		if(  next_to_ziel != NULL  ) {
 			*next_to_ziel = koord::invalid;
 		}
+		return ROUTE_OK;
 	}
 
-	// single threading makes some things easier
-	static uint32 current_mark = 0;
-	static HNode nodes[65535];
-
-	/* Need to clean up?
-	 * Otherwise we just incease the mark => less time for cleanups
-	 */
-	if(  current_mark == 0xFFFFFFFFu  ) {
-		slist_iterator_tpl<halthandle_t > halt_iter (alle_haltestellen);
-		while(  halt_iter.next()  ) {
-			halt_iter.get_current()->marke = 0;
-		}
-		current_mark = 0;
-	}
+	// set curretn marker
 	current_mark ++;
+	if(  current_mark==0  ) {
+		memset( markers, 0, halthandle_t::get_size() );
+		current_mark = 1;
+	}
+
+	// single threading makes some things easier
+	static HNode nodes[32768];
 
 	// die Berechnung erfolgt durch eine Breitensuche fuer Graphen
 	// Warteschlange fuer Breitensuche
@@ -1049,95 +1176,102 @@ void haltestelle_t::suche_route(ware_t &ware, koord *next_to_ziel)
 	slist_tpl<HNode *> queue;
 #else
 	// we need just need to know the current bottom of the list with respect to the nodes array
-	uint32 bottom_of_the_list = 0;
+	uint32 progress_pointer = 0;
 #endif
-	uint32 step = 1;
-	HNode *tmp;
+	uint32 allocation_pointer = 1;
+	HNode *current_node;
+	HNode *new_node;
 
 	nodes[0].halt = self;
-	nodes[0].link = 0;
+	nodes[0].link = NULL;
 	nodes[0].depth = 0;
 
 #ifdef USE_ROUTE_SLIST_TPL
 	queue.insert( &nodes[0] );	// init queue mit erstem feld
 #endif
-	self->marke = current_mark;
+	markers[ self.get_id() ] = current_mark;
 
 	const uint32 max_hops = welt->get_einstellungen()->get_max_hops();
+	// here the normal routing with overcrowded stops is done
 	do {
 #ifdef USE_ROUTE_SLIST_TPL
 		tmp = queue.remove_first();
 #else
-		tmp = &nodes[bottom_of_the_list++];
+		current_node = &nodes[progress_pointer++];
 #endif
 
-		const halthandle_t halt = tmp->halt;
-
-		// we end this loop always with this jump (if sucessful)
-		if(ziel_list.is_contained(halt)) {
-			goto found;
-		}
-
 		// Hajo: check for max transfers -> don't add more stations
-		//      to queue if the limit is reached
-		if(tmp->depth < max_transfers  &&  step<64000u  ) {
-			const vector_tpl<halthandle_t> *wz = halt->get_warenziele(ware_catg_index);
-			for(  uint32 i=0;  i<wz->get_count();  i++  ) {
+		//       to queue if the limit is reached
+		if( current_node->depth < max_transfers ) {
+			const vector_tpl<halthandle_t> &wz = current_node->halt->warenziele[ware_catg_index];
+			for(  uint32 i=0;  i<wz.get_count();  i++  ) {
 
 				// since these are precalculated, they should be always pointing to a valid ground
 				// (if not, we were just under construction, and will be fine after 16 steps)
-				const halthandle_t &tmp_halt = (*wz)[i];
-				if(tmp_halt.is_bound() &&  tmp_halt->marke!=current_mark) {
-
-					HNode *node = &nodes[step++];
-					node->halt = tmp_halt;
-					node->depth = tmp->depth + 1;
-					node->link = tmp;
+				const halthandle_t &reachable_halt = wz[i];
+				if(  markers[ reachable_halt.get_id() ]<current_mark  &&  reachable_halt.is_bound()  ) {
 
+					// betretene Haltestellen markieren
+					markers[ reachable_halt.get_id() ] = current_mark;
+
+					// Knightly : Only transfer halts and destination halt are added to the HNode array
+					if(  ziel_list.is_contained(reachable_halt)  ) {
+						// Case : Destination found
+						new_node = &nodes[allocation_pointer++];
+						new_node->halt = reachable_halt;
+						// Knightly : node depth will not be used afterwards, so no need to assign a value
+						// new_node->depth = current_node->depth + 1;
+						new_node->link = current_node;
 #ifdef USE_ROUTE_SLIST_TPL
-					queue.append( node );
+						queue.append( new_node );
 #endif
-					// betretene Haltestellen markieren
-					tmp_halt->marke = current_mark;
+						current_node = new_node;
+						goto found;
+					}
+					else if(  reachable_halt->non_identical_schedules[ware_catg_index] > 1  &&  allocation_pointer < 32000u  ) {
+						// Case : Transfer halt
+						new_node = &nodes[allocation_pointer++];
+						new_node->halt = reachable_halt;
+						new_node->depth = current_node->depth + 1;
+						new_node->link = current_node;
+#ifdef USE_ROUTE_SLIST_TPL
+						queue.append( new_node );
+#endif
+					}
 				}
 			}
 		} // max transfers
 
 #ifdef USE_ROUTE_SLIST_TPL
-	} while (!queue.empty() && step < welt->get_einstellungen()->get_max_hops());
+	} while (!queue.empty() && progress_pointer < max_hops);
 #else
-	} while(  bottom_of_the_list < step  &&  step < max_hops  );
+	} while(  progress_pointer < allocation_pointer  &&  progress_pointer < max_hops  );
 #endif
 
 	// if the loop ends, nothing was found
-	tmp = 0;
+	current_node = NULL;
 
 found:
 
-	if(tmp) {
+	if(current_node) {
 		// ziel gefunden
-		ware.set_ziel( tmp->halt );
+		ware.set_ziel( current_node->halt );
 
-		if(tmp->link == NULL) {
-			// kein zwischenziel
-			ware.set_zwischenziel(ware.get_ziel());
-			if(next_to_ziel!=NULL) {
-				// for reverse route the next hop, but not hop => enter start
-				*next_to_ziel = self->get_basis_pos();
-			}
+		assert(current_node->link != NULL);
+
+		if(next_to_ziel!=NULL) {
+			// for reverse route the next hop
+			*next_to_ziel = current_node->link->halt->get_basis_pos();
 		}
-		else {
-			if(next_to_ziel!=NULL) {
-				// for reverse route the next hop
-				*next_to_ziel = tmp->link->halt->get_basis_pos();
+		// find the intermediate stops
+		while(current_node->link->link) {
+			current_node = current_node->link;
+			if(  no_routing_over_overcrowding  &&  current_node->halt->is_overcrowded(ware_catg_index)  ) {
+				return ROUTE_OVERCROWDED;
 			}
-			// zwischenziel ermitteln
-			while(tmp->link->link) {
-				tmp = tmp->link;
-			}
-			ware.set_zwischenziel(tmp->halt);
 		}
-
+		ware.set_zwischenziel(current_node->halt);
+		return ROUTE_OK;
 	}
 	else {
 		// no suitable target station found
@@ -1146,6 +1280,7 @@ found:
 		if(next_to_ziel!=NULL) {
 			*next_to_ziel = koord::invalid;
 		}
+		return NO_ROUTE;
 	}
 }
 
@@ -1246,7 +1381,7 @@ bool haltestelle_t::recall_ware( ware_t& w, uint32 menge )
 
 
 // will load something compatible with wtyp into the car which schedule is fpl
-ware_t haltestelle_t::hole_ab(const ware_besch_t *wtyp, uint32 maxi, schedule_t *fpl)
+ware_t haltestelle_t::hole_ab(const ware_besch_t *wtyp, uint32 maxi, const schedule_t *fpl, const spieler_t *sp )
 {
 	// prissi: first iterate over the next stop, then over the ware
 	// might be a little slower, but ensures that passengers to nearest stop are served first
@@ -1261,7 +1396,7 @@ ware_t haltestelle_t::hole_ab(const ware_besch_t *wtyp, uint32 maxi, schedule_t
 		for(  uint8 i=1; i<count; i++  ) {
 			const uint8 wrap_i = (i + fpl->get_aktuell()) % count;
 
-			const halthandle_t plan_halt = get_halt(welt, fpl->eintrag[wrap_i].pos);
+			const halthandle_t plan_halt = haltestelle_t::get_halt(welt, fpl->eintrag[wrap_i].pos, sp);
 			if(plan_halt == self) {
 				// we will come later here again ...
 				break;
@@ -1287,7 +1422,7 @@ ware_t haltestelle_t::hole_ab(const ware_besch_t *wtyp, uint32 maxi, schedule_t
 					if(  tmp.get_zwischenziel()==plan_halt  ) {
 
 						if(  plan_halt->is_overcrowded(wtyp->get_catg_index())  ) {
-							if(  welt->get_einstellungen()->get_avoid_overcrowding()  &&  !(tmp.get_ziel()==plan_halt)  ) {
+							if(  welt->get_einstellungen()->is_avoid_overcrowding()  &&  !(tmp.get_ziel()==plan_halt)  ) {
 								// do not go for transfer to overcrowded transfer stop
 								continue;
 							}
@@ -1370,27 +1505,6 @@ uint32 haltestelle_t::get_ware_fuer_zwischenziel(const ware_besch_t *wtyp, const
 
 
 
-/**
- * @returns the sum of all waiting goods (100t coal + 10
- * passengers + 2000 liter oil = 2110)
- * @author Markus Weber
- */
-uint32 haltestelle_t::sum_all_waiting_goods() const      //15-Feb-2002    Markus Weber    Added
-{
-	uint32 sum = 0;
-
-	for(unsigned i=0; i<warenbauer_t::get_max_catg_index(); i++) {
-		if(waren[i]) {
-			for( unsigned j=0;  j<waren[i]->get_count();  j++  ) {
-				sum += (*(waren[i]))[j].menge;
-			}
-		}
-	}
-	return sum;
-}
-
-
-
 bool haltestelle_t::vereinige_waren(const ware_t &ware)
 {
 	// pruefen ob die ware mit bereits wartender ware vereinigt werden kann
@@ -1402,6 +1516,10 @@ bool haltestelle_t::vereinige_waren(const ware_t &ware)
 			// es wird auf basis von Haltestellen vereinigt
 			// prissi: das ist aber ein Fehler für alle anderen Güter, daher Zielkoordinaten für alles, was kein passagier ist ...
 			if(ware.same_destination(tmp)) {
+				if(  ware.get_zwischenziel().is_bound()  &&  ware.get_zwischenziel()!=self  ) {
+					// update route if there is newer route
+					tmp.set_zwischenziel( ware.get_zwischenziel() );
+				}
 				tmp.menge += ware.menge;
 				resort_freight_info = true;
 				return true;
@@ -1438,7 +1556,9 @@ void haltestelle_t::add_ware_to_halt(ware_t ware)
 
 
 
-/* same as liefere an, but there will be no route calculated, since it hase be calculated just before
+/* same as liefere an, but there will be no route calculated,
+ * since it hase be calculated just before
+ * (execption: route contains us as intermediate stop)
  * @author prissi
  */
 uint32 haltestelle_t::starte_mit_route(ware_t ware)
@@ -1455,9 +1575,8 @@ uint32 haltestelle_t::starte_mit_route(ware_t ware)
 	// no valid next stops? Or we are the next stop?
 	if(ware.get_zwischenziel()==self) {
 		dbg->error("haltestelle_t::starte_mit_route()","route cannot contain us as first transfer stop => recalc route!");
-		suche_route(ware);
-		// no route found?
-		if(!ware.get_ziel().is_bound()) {
+		if(  suche_route( ware, NULL, false )==NO_ROUTE  ) {
+			// no route found?
 			dbg->error("haltestelle_t::starte_mit_route()","no route found!");
 			return ware.menge;
 		}
@@ -1504,7 +1623,6 @@ dbg->warning("haltestelle_t::liefere_an()","%d %s delivered to %s have no longer
 					grund_t* gr = i->grund;
 					menge = erzeuge_fussgaenger(welt, gr->get_pos(), menge);
 				}
-
 				INT_CHECK("simhalt 938");
 			}
 		}
@@ -1512,26 +1630,26 @@ dbg->warning("haltestelle_t::liefere_an()","%d %s delivered to %s have no longer
 	}
 
 	// do we have already something going in this direction here?
-	if(vereinige_waren(ware)) {
+	if(  vereinige_waren(ware)  ) {
 		return ware.menge;
 	}
 
 	// not near enough => we need to do a rerouting
-	suche_route(ware);
-	INT_CHECK("simhalt 1364");
+	if(  suche_route( ware, NULL, false )==NO_ROUTE  ) {
+		// target no longer there => delete
+
+		INT_CHECK("simhalt 1364");
 
-	// target no longer there => delete
-	if(!ware.get_ziel().is_bound() ||  !ware.get_zwischenziel().is_bound()) {
 		DBG_MESSAGE("haltestelle_t::liefere_an()","%s: delivered goods (%d %s) to ??? via ??? could not be routed to their destination!",get_name(), ware.menge, translator::translate(ware.get_name()) );
 		return ware.menge;
 	}
-
+#if 1
 	// passt das zu bereits wartender ware ?
 	if(vereinige_waren(ware)) {
 		// dann sind wir schon fertig;
 		return ware.menge;
 	}
-
+#endif
 	// add to internal storage
 	add_ware_to_halt(ware);
 
@@ -1651,22 +1769,6 @@ void haltestelle_t::get_short_freight_info(cbuffer_t & buf)
 
 void haltestelle_t::zeige_info()
 {
-#if 1
-	cbuffer_t buf(8192);
-	for(unsigned i=0; i<warenbauer_t::get_max_catg_index(); i++) {
-		if(waren[i]) {
-			buf.printf("\ncatg %i:",i);
-			vector_tpl<ware_t> * warray = waren[i];
-			for(int j=warray->get_count()-1;  j>=0;  j--  ) {
-				ware_t & ware = (*warray)[j];
-				if(ware.menge>0) {
-					buf.printf( "%i-(%s), ", ware.menge, ware.get_zielpos().get_str());
-				}
-			}
-		}
-	}
-	dbg->message("haltestelle_t::zeige_info()", (const char *)buf );
-#endif
 	create_win(new halt_info_t(welt, self), w_info, (long)this );
 }
 
@@ -1688,7 +1790,7 @@ sint64 haltestelle_t::calc_maintenance()
 
 
 
-// changes this to a publix transfer exchange stop
+// changes this to a public transfer exchange stop
 void haltestelle_t::make_public_and_join( spieler_t *sp )
 {
 	spieler_t *public_owner=welt->get_spieler(1);
@@ -1754,6 +1856,9 @@ void haltestelle_t::make_public_and_join( spieler_t *sp )
 			add_grund(gr);
 			// and check for existence
 			if(!halt->existiert_in_welt()) {
+				// transfer goods
+				halt->transfer_goods(self);
+
 				destroy(halt);
 			}
 		}
@@ -1763,6 +1868,23 @@ void haltestelle_t::make_public_and_join( spieler_t *sp )
 }
 
 
+void haltestelle_t::transfer_goods(halthandle_t halt)
+{
+	if (!self.is_bound() || !halt.is_bound()) {
+		return;
+	}
+	// transfer goods to halt
+	for(uint8 i=0; i<warenbauer_t::get_max_catg_index(); i++) {
+		vector_tpl<ware_t> * warray = waren[i];
+		if (warray) {
+			for(uint32 j=0; j<warray->get_count(); j++) {
+				halt->add_ware_to_halt( (*warray)[j] );
+			}
+			delete waren[i];
+			waren[i] = NULL;
+		}
+	}
+}
 
 /*
  * recalculated the station type(s)
@@ -1836,16 +1958,25 @@ void haltestelle_t::recalc_station_type()
 				}
 				break;
 
+			// two ways on ground can only happen for tram tracks on streets, there buses and trams can stop
 			case haus_besch_t::generic_stop:
 				switch (besch->get_extra()) {
 					case road_wt:
 						new_station_type |= (besch->get_enabled()&3)!=0 ? busstop : loadingbay;
+						if (gr->has_two_ways()) { // tram track on street
+							new_station_type |= tramstop;
+						}
 						break;
 					case water_wt:       new_station_type |= dock;            break;
 					case air_wt:         new_station_type |= airstop;         break;
 					case monorail_wt:    new_station_type |= monorailstop;    break;
 					case track_wt:       new_station_type |= railstation;     break;
-					case tram_wt:        new_station_type |= tramstop;        break;
+					case tram_wt:
+						new_station_type |= tramstop;
+						if (gr->has_two_ways()) { // tram track on street
+							new_station_type |= (besch->get_enabled()&3)!=0 ? busstop : loadingbay;
+						}
+						break;
 					case maglev_wt:      new_station_type |= maglevstop;      break;
 					case narrowgauge_wt: new_station_type |= narrowgaugestop; break;
 				}
@@ -1981,9 +2112,12 @@ void haltestelle_t::rdwr(loadsave_t *file)
 				for(int i = 0; i < count; i++) {
 					// add to internal storage (use this function, since the old categories were different)
 					ware_t ware(welt,file);
-					if(  ware.menge  ) {
+					if(  ware.menge  &&  welt->ist_in_kartengrenzen(ware.get_zielpos())  ) {
 						add_ware_to_halt(ware);
 					}
+					else if(  ware.menge>0  ) {
+						dbg->error( "haltestelle_t::rdwr()", "%i of %s to %s ignored!", ware.menge, ware.get_name(), ware.get_zielpos().get_str() );
+					}
 				}
 			}
 			file->rdwr_str(s,256);
@@ -2005,6 +2139,9 @@ void haltestelle_t::rdwr(loadsave_t *file)
 			file->rdwr_longlong(financial_history[k][j], " ");
 		}
 	}
+	pax_happy    = financial_history[0][HALT_HAPPY];
+	pax_unhappy  = financial_history[0][HALT_UNHAPPY];
+	pax_no_route = financial_history[0][HALT_NOROUTE];
 }
 
 
@@ -2022,23 +2159,23 @@ void haltestelle_t::laden_abschliessen()
 			for(unsigned j=0; j<warray->get_count(); j++) {
 				(*warray)[j].laden_abschliessen(welt);
 			}
+			// merge identical entries (should only happen with old games)
+			for(unsigned j=0; j<warray->get_count(); j++) {
+				if(  (*warray)[j].menge==0  ) {
+					continue;
+				}
+				for(unsigned k=j+1; k<warray->get_count(); k++) {
+					if(  (*warray)[k].menge>0  &&  (*warray)[j].same_destination( (*warray)[k] )  ) {
+						(*warray)[j].menge += (*warray)[k].menge;
+						(*warray)[k].menge = 0;
+					}
+				}
+			}
 		}
 	}
 
 	// what kind of station here?
 	recalc_station_type();
-#ifdef LAGER_NOT_IN_USE
-	for (slist_tpl<tile_t>::const_iterator i = tiles.begin(), end = tiles.end(); i != end; ++i) {
-		koord3d k(i->grund->get_pos());
-		// nach sondergebaeuden suchen
-
-		lagerhaus_t* l = welt->lookup(k)->find<lagerhaus_t>();
-		if  (l != NULL) {
-			lager = l;
-		break;
-		}
-	}
-#endif
 
 	// handle name for old stations which don't exist in kartenboden
 	grund_t* bd = welt->lookup(get_basis_pos3d());
@@ -2100,7 +2237,7 @@ void haltestelle_t::recalc_status()
 {
 	status_color = financial_history[0][HALT_CONVOIS_ARRIVED] > 0 ? COL_GREEN : COL_YELLOW;
 
-	// since the status is ored ...
+	// since the status is ordered ...
 	uint8 status_bits = 0;
 
 	memset( overcrowded, 0, 8 );
@@ -2113,8 +2250,9 @@ void haltestelle_t::recalc_status()
 			overcrowded[0] |= 1;
 		}
 		if(get_pax_unhappy() > 40 ) {
-			status_bits = (total_sum>max_ware+200 || get_pax_unhappy()>200) ? 2 : 1;
-		} else if(total_sum>max_ware) {
+			status_bits = (total_sum>max_ware+200 || (total_sum>max_ware  &&  get_pax_unhappy()>200)) ? 2 : 1;
+		}
+		else if(total_sum>max_ware) {
 			status_bits = total_sum>max_ware+200 ? 2 : 1;
 		}
 	}
@@ -2221,7 +2359,9 @@ bool haltestelle_t::add_grund(grund_t *gr)
 	assert(gr!=NULL);
 
 	// neu halt?
-	if (tiles.is_contained(gr)) return false;
+	if (tiles.is_contained(gr)) {
+		return false;
+	}
 
 	koord pos=gr->get_pos().get_2d();
 	gr->set_halt(self);
@@ -2264,7 +2404,7 @@ bool haltestelle_t::add_grund(grund_t *gr)
 					if(  !registered_lines.is_contained(check_line[j])  ) {
 						const schedule_t *fpl = check_line[j]->get_schedule();
 						for(  int k=0;  k<fpl->get_count();  k++  ) {
-							if(get_halt(welt,fpl->eintrag[k].pos)==self) {
+							if(get_halt(welt,fpl->eintrag[k].pos,check_line[j]->get_besitzer())==self) {
 								registered_lines.append(check_line[j]);
 								break;
 							}
@@ -2281,7 +2421,7 @@ bool haltestelle_t::add_grund(grund_t *gr)
 			if(  !registered_lines.is_contained(check_line[j])  ) {
 				const schedule_t *fpl = check_line[j]->get_schedule();
 				for(  int k=0;  k<fpl->get_count();  k++  ) {
-					if(get_halt(welt,fpl->eintrag[k].pos)==self) {
+					if(get_halt(welt,fpl->eintrag[k].pos,get_besitzer())==self) {
 						registered_lines.append(check_line[j]);
 						break;
 					}
@@ -2292,93 +2432,99 @@ bool haltestelle_t::add_grund(grund_t *gr)
 
 	assert(welt->lookup(pos)->get_halt() == self  &&  gr->is_halt());
 	init_pos = tiles.front().grund->get_pos().get_2d();
+	welt->set_schedule_counter();
+
 	return true;
 }
 
 
 
-void haltestelle_t::rem_grund(grund_t *gr)
+bool haltestelle_t::rem_grund(grund_t *gr)
 {
 	// namen merken
-	if(gr) {
-		slist_tpl<tile_t>::iterator i = std::find(tiles.begin(), tiles.end(), gr);
-		if (i == tiles.end()) {
-			// was not part of station => do nothing
-			dbg->error("haltestelle_t::rem_grund()","removed illegal ground from halt");
-			return;
+	if(!gr) {
+		return false;
+	}
+
+	slist_tpl<tile_t>::iterator i = std::find(tiles.begin(), tiles.end(), gr);
+	if (i == tiles.end()) {
+		// was not part of station => do nothing
+		dbg->error("haltestelle_t::rem_grund()","removed illegal ground from halt");
+		return false;
+	}
+
+	// first tile => remove name from this tile ...
+	char buf[256];
+	const char* station_name_to_transfer = NULL;
+	if (i == tiles.begin()  &&  (*i).grund->get_name()) {
+		tstrncpy(buf, get_name(), lengthof(buf));
+		station_name_to_transfer = buf;
+		set_name(NULL);
+	}
+
+	// now remove tile from list
+	tiles.erase(i);
+	welt->set_schedule_counter();
+	init_pos = tiles.empty() ? koord::invalid : tiles.front().grund->get_pos().get_2d();
+
+	// re-add name
+	if (station_name_to_transfer != NULL  &&  !tiles.empty()) {
+		label_t *lb = tiles.front().grund->find<label_t>();
+		if(lb) {
+			delete lb;
 		}
+		set_name( station_name_to_transfer );
+	}
 
-		// first tile => remove name from this tile ...
-		char buf[256];
-		const char* station_name_to_transfer = NULL;
-		if (i == tiles.begin()  &&  (*i).grund->get_name()) {
-			tstrncpy(buf, get_name(), lengthof(buf));
-			station_name_to_transfer = buf;
-			set_name(NULL);
-		}
-
-		// now remove tile from list
-		tiles.erase(i);
-		init_pos = tiles.empty() ? koord::invalid : tiles.front().grund->get_pos().get_2d();
-
-		// re-add name
-		if (station_name_to_transfer != NULL  &&  !tiles.empty()) {
-			label_t *lb = tiles.front().grund->find<label_t>();
-			if(lb) {
-				delete lb;
-			}
-			set_name( station_name_to_transfer );
-		}
-
-		planquadrat_t *pl = welt->access( gr->get_pos().get_2d() );
-		if(pl) {
-			// no longer connected (upper level)
-			gr->set_halt(halthandle_t());
-			// still connected elsewhere?
-			for(unsigned i=0;  i<pl->get_boden_count();  i++  ) {
-				if(pl->get_boden_bei(i)->get_halt().is_bound()) {
-					// still connected with other ground => do not remove from plan ...
-					DBG_DEBUG("haltestelle_t::rem_grund()", "keep floor, count=%i", tiles.get_count());
-					return;
-				}
+	planquadrat_t *pl = welt->access( gr->get_pos().get_2d() );
+	if(pl) {
+		// no longer connected (upper level)
+		gr->set_halt(halthandle_t());
+		// still connected elsewhere?
+		for(unsigned i=0;  i<pl->get_boden_count();  i++  ) {
+			if(pl->get_boden_bei(i)->get_halt()==self) {
+				// still connected with other ground => do not remove from plan ...
+				DBG_DEBUG("haltestelle_t::rem_grund()", "keep floor, count=%i", tiles.get_count());
+				return true;
 			}
-			DBG_DEBUG("haltestelle_t::rem_grund()", "remove also floor, count=%i", tiles.get_count());
-			// otherwise remove from plan ...
-			pl->set_halt(halthandle_t());
-			pl->get_kartenboden()->set_flag(grund_t::dirty);
 		}
+		DBG_DEBUG("haltestelle_t::rem_grund()", "remove also floor, count=%i", tiles.get_count());
+		// otherwise remove from plan ...
+		pl->set_halt(halthandle_t());
+		pl->get_kartenboden()->set_flag(grund_t::dirty);
+	}
 
-		int cov = welt->get_einstellungen()->get_station_coverage();
-		for (int y = -cov; y <= cov; y++) {
-			for (int x = -cov; x <= cov; x++) {
-				planquadrat_t *pl = welt->access( gr->get_pos().get_2d()+koord(x,y) );
-				if(pl) {
-					pl->remove_from_haltlist(welt,self);
-					pl->get_kartenboden()->set_flag(grund_t::dirty);
-				}
+	int cov = welt->get_einstellungen()->get_station_coverage();
+	for (int y = -cov; y <= cov; y++) {
+		for (int x = -cov; x <= cov; x++) {
+			planquadrat_t *pl = welt->access( gr->get_pos().get_2d()+koord(x,y) );
+			if(pl) {
+				pl->remove_from_haltlist(welt,self);
+				pl->get_kartenboden()->set_flag(grund_t::dirty);
 			}
 		}
+	}
 
-		// factory reach may have been changed ...
-		verbinde_fabriken();
+	// factory reach may have been changed ...
+	verbinde_fabriken();
 
-		// remove lines eventually
-		for(  int j=registered_lines.get_count()-1;  j>=0;  j--  ) {
-			const schedule_t *fpl = registered_lines[j]->get_schedule();
-			bool ok=false;
-			for(  int k=0;  k<fpl->get_count();  k++  ) {
-				if(get_halt(welt,fpl->eintrag[k].pos)==self) {
-					ok = true;
-					break;
-				}
-			}
-			// need removal?
-			if(!ok) {
-				registered_lines.remove_at(j);
+	// remove lines eventually
+	for(  int j=registered_lines.get_count()-1;  j>=0;  j--  ) {
+		const schedule_t *fpl = registered_lines[j]->get_schedule();
+		bool ok=false;
+		for(  int k=0;  k<fpl->get_count();  k++  ) {
+			if(get_halt(welt,fpl->eintrag[k].pos,registered_lines[j]->get_besitzer())==self) {
+				ok = true;
+				break;
 			}
 		}
-
+		// need removal?
+		if(!ok) {
+			registered_lines.remove_at(j);
+		}
 	}
+
+	return true;
 }
 
 
@@ -2401,7 +2547,7 @@ koord haltestelle_t::get_next_pos( koord start ) const
 		int	dist = 0x7FFF;
 		for (slist_tpl<tile_t>::const_iterator i = tiles.begin(), end = tiles.end(); i != end; ++i) {
 			koord p = i->grund->get_pos().get_2d();
-			int d = abs_distance(start, p );
+			int d = koord_distance(start, p );
 			if(d<dist) {
 				// ok, this one is closer
 				dist = d;
@@ -2541,3 +2687,14 @@ DBG_MESSAGE("haltestelle_t::is_reservable()","gr=%d,%d already reserved by cnv=%
 DBG_MESSAGE("haltestelle_t::reserve_position()","failed for gr=%i,%i, cnv=%d",gr->get_pos().x,gr->get_pos().y,cnv.get_id());
 	return false;
 }
+
+/* deletes factory references so map rotation won't segfault
+*/
+void haltestelle_t::release_factory_links()
+{
+	slist_iterator_tpl <fabrik_t *> fab_iter(fab_list);
+	while( fab_iter.next() ) {
+		fab_iter.get_current()->unlink_halt(self);
+	}
+	fab_list.clear();
+}
diff --git a/simhalt.h b/simhalt.h
index f5b19fe..1a6d307 100644
--- a/simhalt.h
+++ b/simhalt.h
@@ -10,20 +10,23 @@
 
 #include "convoihandle_t.h"
 #include "linehandle_t.h"
+#include "halthandle_t.h"
 
-#include "simdebug.h"
-#include "simtypes.h"
 #include "simdings.h"
+#include "simtypes.h"
 
 #include "bauer/warenbauer.h"
 
-#include "dataobj/koord3d.h"
+#include "besch/ware_besch.h"
+
+#include "dataobj/koord.h"
 
 #include "tpl/slist_tpl.h"
 #include "tpl/vector_tpl.h"
-#include "tpl/array_tpl.h"
 
 
+#define RESCHEDULING (1)
+#define REROUTING (2)
 
 #define MAX_HALT_COST   7 // Total number of cost items
 #define MAX_MONTHS     12 // Max history
@@ -36,18 +39,18 @@
 #define HALT_NOROUTE         5 // number of no-route passangers
 #define HALT_CONVOIS_ARRIVED             6 // number of convois arrived this month
 
-class spieler_t;
+class cbuffer_t;
+class grund_t;
 class fabrik_t;
 class karte_t;
+class koord3d;
 #ifdef LAGER_NOT_IN_USE
 class lagerhaus_t;
 #endif
-class ware_t;
-class grund_t;
+class loadsave_t;
 class schedule_t;
-class cbuffer_t;
-
-#include "halthandle_t.h"
+class spieler_t;
+class ware_t;
 
 // -------------------------- Haltestelle ----------------------------
 
@@ -65,6 +68,8 @@ class haltestelle_t
 public:
 	enum station_flags { NOT_ENABLED=0, PAX=1, POST=2, WARE=4, CROWDED=8 };
 
+	enum routine_result_flags { NO_ROUTE=0, ROUTE_OK=1, ROUTE_OVERCROWDED=8 };
+
 	//13-Jan-02     Markus Weber    Added
 	enum stationtyp {invalid=0, loadingbay=1, railstation = 2, dock = 4, busstop = 8, airstop = 16, monorailstop = 32, tramstop = 64, maglevstop=128, narrowgaugestop=256 }; //could be combined with or!
 
@@ -95,30 +100,48 @@ private:
 	void init_financial_history();
 
 	uint8 status_color;
-	uint16 capacity[3]; // passenger, post, goods
+	uint32 capacity[3]; // passenger, post, goods
 	uint8 overcrowded[8];	// bit set, when overcrowded
 	void recalc_status();
 
+	static uint8 status_step;	// NONE or SCHEDULING or REROUTING
+
+	/**
+	 * Markers used in suche_route() to avoid processing the same halt more than once
+	 * Originally they are instance variables of haltestelle_t
+	 * Now consolidated into a static array to speed up suche_route()
+	 * @author Knightly
+	 */
+	static uint8 markers[65536];
+	static uint8 current_mark;
+
 public:
 	/**
+	 * Handles changes of schedules and the resulting rerouting
+	 */
+	static void step_all();
+
+	static uint8 get_rerouting_status() { return status_step; }
+
+	/**
 	 * Tries to generate some pedestrians on the sqaure and the
 	 * adjacent sqaures. Return actual number of generated
 	 * pedestrians.
 	 *
 	 * @author Hj. Malthaner
 	 */
-	static int erzeuge_fussgaenger(karte_t *welt, koord3d pos, int anzahl);
+	static int erzeuge_fussgaenger(karte_t *welt, const koord3d pos, int anzahl);
 
 	/* searches for a stop at the given koordinate
-	 * this is called damend often, so we should think about inline it
 	 * @return halthandle_t(), if nothing found
 	 * @author prissi
 	 */
-	static halthandle_t get_halt(karte_t *welt, const koord pos);
+	static halthandle_t get_halt(karte_t *welt, const koord pos, const spieler_t *sp );
 
-	// Hajo: for future compatibility, migrate to this call
-	// but since we allow only for a single stop per planquadrat, this is as good as the above
-	static halthandle_t get_halt(karte_t *welt, const koord3d pos);
+	/* since we allow only for a single stop per planquadrat
+	 * this will always return something even if there is not stop some of the ground level
+	 */
+	static halthandle_t get_halt( karte_t *welt, const koord3d pos, const spieler_t *sp );
 
 	static const slist_tpl<halthandle_t>& get_alle_haltestellen() { return alle_haltestellen; }
 
@@ -175,6 +198,8 @@ public:
 		convoihandle_t reservation;
 	};
 
+	const slist_tpl<tile_t> &get_tiles() const { return tiles; };
+
 private:
 	slist_tpl<tile_t> tiles;
 
@@ -183,7 +208,19 @@ private:
 	// List with all reachable destinations
 	vector_tpl<halthandle_t>* warenziele;
 
-	// loest warte_menge ab
+	/**
+	 * For each schedule/line, that adds halts to a warenziel array,
+	 * this counter is incremented. Each ware category needs a separate
+	 * counter. If this counter is more than 1, this halt is a transfer
+	 * halt, i.e. contains non_identical_schedules with overlapping
+	 * destinations.
+	 * Non-transfer stops do not need to be searched for connections
+	 * => large speedup possible.
+	 * @author Knightly
+	 */
+	uint8 *non_identical_schedules;
+
+	// Array with different categries that contains all waiting goods at this stop
 	vector_tpl<ware_t> **waren;
 
 	/**
@@ -203,6 +240,9 @@ private:
 
 	uint8 rebuilt_destination_counter;	// new schedule, first rebuilt destinations asynchroniously
 	uint8 reroute_counter;						// the reroute goods
+	// since we do partial routing, we remeber the last offset
+	uint8 last_catg_index;
+	uint32 last_ware_index;
 
 	/* station flags (most what enabled) */
 	uint8 enables;
@@ -229,13 +269,6 @@ private:
 	 */
 	uint32 pax_unhappy;
 
-	/**
-	 * Haltestellen werden beim warenrouting markiert. Jeder durchgang
-	 * hat eine eindeutige marke
-	 * @author Hj. Malthaner
-	 */
-	uint32 marke;
-
 #ifdef USE_QUOTE
 	// for station rating
 	const char * quote_bezeichnung(int quote) const;
@@ -257,6 +290,13 @@ private:
 	void liefere_an_fabrik(const ware_t& ware);
 
 	/*
+	 * transfers all goods to given station
+	 *
+	 * @author Dwachs
+	 */
+	void transfer_goods(halthandle_t halt);
+
+	/*
 	* parameter to ease sorting
 	* sortierung is local and stores the sortorder for the individual station
 	* @author hsiegeln
@@ -270,11 +310,12 @@ private:
 
 public:
 	/**
-	* Called every 255 steps
+	* Called after schedule calculation of all stations is finished
 	* will distribute the goods to changed routes (if there are any)
+	* returns true upon completion
 	* @author Hj. Malthaner
 	*/
-	void reroute_goods();
+	bool reroute_goods(sint16 &units_remaining);
 
 	/**
 	 * getter/setter for sortby
@@ -305,10 +346,10 @@ public:
 
 	/**
 	 * Rebuilds the list of reachable destinations
-	 *
+	 * returns the search number of connections
 	 * @author Hj. Malthaner
 	 */
-	void rebuild_destinations();
+	sint32 rebuild_destinations();
 
 	uint8 get_rebuild_destination_counter() const  { return rebuilt_destination_counter; }
 
@@ -330,10 +371,10 @@ public:
 	const slist_tpl<fabrik_t*>& get_fab_list() const { return fab_list; }
 
 	/**
-	 * Haltestellen messen regelmaessig die Fahrplaene pruefen
+	 * called regularily to update status and reroute stuff
 	 * @author Hj. Malthaner
 	 */
-	void step();
+	bool step(sint16 &units_remaining);
 
 	/**
 	 * Called every month/every 24 game hours
@@ -351,15 +392,13 @@ public:
 	 * @author Hj. Malthaner
 	 *
 	 * for reverse routing, also the next to last stop can be added, if next_to_ziel!=NULL
+	 *
+	 * if avoid_overcrowding is set, a valid route in only found when there is no overflowing stop in between
+	 *
 	 * @author prissi
 	 */
-	void suche_route(ware_t &ware, koord *next_to_ziel=NULL);
-#if 0
-	/* true, if there is a conncetion between these places
-	 * @author prissi
-	 */
-	bool is_connected(const halthandle_t halt, const ware_besch_t * wtyp) const { return get_warenziele(wtyp->get_catg_index(halt))->is_contained(); }
-#endif
+	int suche_route( ware_t &ware, koord *next_to_ziel, const bool no_routing_over_overcrowding );
+
 	int get_pax_enabled()  const { return enables & PAX;  }
 	int get_post_enabled() const { return enables & POST; }
 	int get_ware_enabled() const { return enables & WARE; }
@@ -404,7 +443,7 @@ public:
 #endif
 
 	bool add_grund(grund_t *gb);
-	void rem_grund(grund_t *gb);
+	bool rem_grund(grund_t *gb);
 
 	uint32 get_capacity(uint8 typ) const { return capacity[typ]; }
 
@@ -440,13 +479,6 @@ public:
 	 */
 	uint32 get_ware_fuer_zwischenziel(const ware_besch_t *warentyp, const halthandle_t zwischenziel) const;
 
-	/**
-	 * @returns the sum of all waiting goods (100t coal + 10
-	 * passengers + 2000 liter oil = 2110)
-	 * @author Markus Weber
-	 */
-	uint32 sum_all_waiting_goods() const;
-
 	// true, if we accept/deliver this kind of good
 	bool gibt_ab(const ware_besch_t *warentyp) const { return waren[warentyp->get_catg_index()] != NULL; }
 
@@ -460,7 +492,7 @@ public:
 	 * @return abgeholte menge
 	 * @author Hj. Malthaner
 	 */
-	ware_t hole_ab(const ware_besch_t *warentyp, uint32 menge, schedule_t *fpl);
+	ware_t hole_ab( const ware_besch_t *warentyp, uint32 menge, const schedule_t *fpl, const spieler_t *sp );
 
 	/* liefert ware an. Falls die Ware zu wartender Ware dazugenommen
 	 * werden kann, kann ware_t gelöscht werden! D.h. man darf ware nach
@@ -481,7 +513,7 @@ public:
 	 * @param typ der beförderte warentyp
 	 * @author Hj. Malthaner
 	 */
-	void hat_gehalten(const ware_besch_t *warentyp, const schedule_t *fpl);
+	void hat_gehalten( const ware_besch_t *warentyp, const schedule_t *fpl, const spieler_t *sp );
 
 	const grund_t *find_matching_position(waytype_t wt) const;
 
@@ -595,5 +627,17 @@ public:
 	* @author prissi
 	*/
 	void mark_unmark_coverage(const bool mark) const;
+
+	/*
+	* deletes factory references so map rotation won't segfault
+	*/
+	void release_factory_links();
+
+	/**
+	 * Initialise the markers to zero
+	 * @author Knightly
+	 */
+	static void init_markers();
+
 };
 #endif
diff --git a/simintr.h b/simintr.h
index cf4cb97..940c9a2 100644
--- a/simintr.h
+++ b/simintr.h
@@ -42,10 +42,17 @@ void interrupt_force();
 void interrupt_check();
 void interrupt_check(const char* caller_info);
 
-// standard version
-#define INT_CHECK(info) interrupt_check();
-
-// debug version
-// #define INT_CHECK(info) interrupt_check(info);
+#ifndef PROFILE
+	#ifndef DEBUG
+		// standard version
+		#define INT_CHECK(info) interrupt_check();
+	#else
+		// debug version
+		#define INT_CHECK(info) interrupt_check(info);
+	#endif
+#else
+	// profile version: no interrupt_check.
+	#define INT_CHECK(info);
+#endif
 
 #endif
diff --git a/simline.cc b/simline.cc
index a2dabe2..be7128f 100644
--- a/simline.cc
+++ b/simline.cc
@@ -1,4 +1,5 @@
 #include "dataobj/translator.h"
+#include "dataobj/loadsave.h"
 #include "simtypes.h"
 #include "simline.h"
 #include "simhalt.h"
@@ -26,6 +27,7 @@ simline_t::simline_t(karte_t* welt, spieler_t* sp)
 	this->old_fpl = NULL;
 	this->fpl = NULL;
 	this->sp = sp;
+	withdraw = false;
 	state_color = COL_YELLOW;
 }
 
@@ -158,6 +160,11 @@ void simline_t::rdwr(loadsave_t *file)
 			file->rdwr_longlong(financial_history[k][j], " ");
 		}
 	}
+
+	if(file->get_version()>=102002) {
+		file->rdwr_bool( withdraw, "" );
+	}
+
 	// otherwise inintialized to zero if loading ...
 	financial_history[0][LINE_CONVOIS] = count_convoys();
 }
@@ -176,7 +183,7 @@ void simline_t::register_stops(schedule_t * fpl)
 {
 DBG_DEBUG("simline_t::register_stops()", "%d fpl entries in schedule %p", fpl->get_count(),fpl);
 	for (int i = 0; i<fpl->get_count(); i++) {
-		const halthandle_t halt = haltestelle_t::get_halt( welt, fpl->eintrag[i].pos );
+		const halthandle_t halt = haltestelle_t::get_halt( welt, fpl->eintrag[i].pos, sp );
 		if(halt.is_bound()) {
 //DBG_DEBUG("simline_t::register_stops()", "halt not null");
 			halt->add_line(self);
@@ -199,7 +206,7 @@ void simline_t::unregister_stops()
 void simline_t::unregister_stops(schedule_t * fpl)
 {
 	for (int i = 0; i<fpl->get_count(); i++) {
-		halthandle_t halt = haltestelle_t::get_halt( welt, fpl->eintrag[i].pos );
+		halthandle_t halt = haltestelle_t::get_halt( welt, fpl->eintrag[i].pos, sp );
 		if(halt.is_bound()) {
 			halt->remove_line(self);
 		}
@@ -261,6 +268,7 @@ void simline_t::recalc_status()
 	if(financial_history[0][LINE_CONVOIS]==0) {
 		// noconvois assigned to this line
 		state_color = COL_WHITE;
+		withdraw = false;
 	}
 	else if(financial_history[0][LINE_PROFIT]<0) {
 		// ok, not performing best
@@ -295,11 +303,13 @@ void simline_t::recalc_catg_index()
 		old_goods_catg_index.append( goods_catg_index[i] );
 	}
 	goods_catg_index.clear();
+	withdraw = line_managed_convoys.get_count()>0;
 	// then recreate current
 	for(unsigned i=0;  i<line_managed_convoys.get_count();  i++ ) {
 		// what goods can this line transport?
 //		const convoihandle_t cnv = line_managed_convoys[i];
 		const convoi_t *cnv = line_managed_convoys[i].get_rep();
+		withdraw &= cnv->get_withdraw();
 		for(uint i=0;  i<cnv->get_vehikel_anzahl();  i++  ) {
 			// Only consider vehicles that really transport something
 			// this helps against routing errors through passenger
@@ -329,3 +339,15 @@ void simline_t::recalc_catg_index()
 		}
 	}
 }
+
+
+
+void simline_t::set_withdraw( bool yes_no )
+{
+	withdraw = yes_no  &&  (line_managed_convoys.get_count()>0);
+	// then recreate current
+	for(unsigned i=0;  i<line_managed_convoys.get_count();  i++ ) {
+		line_managed_convoys[i]->set_withdraw(yes_no);
+		line_managed_convoys[i]->set_no_load(yes_no);
+	}
+}
diff --git a/simline.h b/simline.h
index b0473d2..8bed85d 100644
--- a/simline.h
+++ b/simline.h
@@ -6,18 +6,15 @@
 #ifndef simline_h
 #define simline_h
 
-#include <string.h>
-
+#include "convoihandle_t.h"
+#include "linehandle_t.h"
+#include "simconvoi.h"
 #include "simtypes.h"
-#include "dataobj/loadsave.h"
+
 #include "dataobj/fahrplan.h"
 
+#include "tpl/minivec_tpl.h"
 #include "tpl/vector_tpl.h"
-#include "simconvoi.h"
-
-#include "simdebug.h"
-#include "linehandle_t.h"
-#include "convoihandle_t.h"
 
 #define MAX_LINE_COST   6 // Total number of cost items
 #define MAX_MONTHS     12 // Max history
@@ -31,7 +28,9 @@
 #define LINE_PROFIT             5 // total profit of line
 
 class karte_t;
+class loadsave_t;
 class simlinemgmt_t;
+class spieler_t;
 
 class simline_t {
 
@@ -43,8 +42,10 @@ protected:
 	simline_t(karte_t* welt, spieler_t*sp);
 
 	schedule_t * fpl,  *old_fpl;
-	linetype type;
 	spieler_t *sp;
+	linetype type;
+
+	bool withdraw;
 
 private:
 	static karte_t * welt;
@@ -200,6 +201,10 @@ public:
 	// recalculates the good transported by this line and (in case of changes) will start schedule recalculation
 	void recalc_catg_index();
 
+	void set_withdraw( bool yes_no );
+
+	bool get_withdraw() const { return withdraw; }
+
 public:
 	spieler_t *get_besitzer() const {return sp;}
 
diff --git a/simlinemgmt.cc b/simlinemgmt.cc
index 86a8aec..8631711 100644
--- a/simlinemgmt.cc
+++ b/simlinemgmt.cc
@@ -14,6 +14,7 @@
 #include "simintr.h"
 
 #include "dataobj/fahrplan.h"
+#include "dataobj/loadsave.h"
 
 #include "gui/schedule_list.h"
 
@@ -33,6 +34,7 @@ void simlinemgmt_t::init_line_ids()
 simlinemgmt_t::simlinemgmt_t(karte_t* welt)
 {
 	this->welt = welt;
+	schedule_list_gui = NULL;
 }
 
 simlinemgmt_t::~simlinemgmt_t()
@@ -44,9 +46,9 @@ void
 simlinemgmt_t::zeige_info(spieler_t *sp)
 {
 	schedule_list_gui_t *slg;
-	if (create_win( slg=new schedule_list_gui_t(sp), w_info, (long)this )>0) {
+	if(  create_win( slg=new schedule_list_gui_t(sp), w_info, (long)this )>0  ) {
 		// New window created, not reused.  Update schedule_list_gui
-		schedule_list_gui=slg;
+		schedule_list_gui = slg;
 	}
 }
 
@@ -170,7 +172,13 @@ DBG_MESSAGE("simlinemgmt_t::rdwr()","number of lines=%i",totalLines);
 
 static bool compare_lines(const linehandle_t& a, const linehandle_t& b)
 {
-	int diff = strcmp(a->get_name(), b->get_name());
+	int diff = 0;
+	if(  a->get_name()[0]=='('  &&  b->get_name()[0]=='('  ) {
+		diff = atoi(a->get_name()+1)-atoi(b->get_name()+1);
+	}
+	if(  diff==0  ) {
+		diff = strcmp(a->get_name(), b->get_name());
+	}
 	if(diff==0) {
 		diff = a.get_id() - b.get_id();
 	}
diff --git a/simlinemgmt.h b/simlinemgmt.h
index a258d8e..4e66ac8 100644
--- a/simlinemgmt.h
+++ b/simlinemgmt.h
@@ -7,19 +7,15 @@
 #ifndef simlinemgmt_h
 #define simlinemgmt_h
 
-#include <string.h>
-
-#include "simtypes.h"
-#include "simline.h"
 #include "linehandle_t.h"
-#include "dataobj/loadsave.h"
-#include "simconvoi.h"
-
-#include "simdebug.h"
+#include "simtypes.h"
+#include "tpl/vector_tpl.h"
 
+class loadsave_t;
 class schedule_t;
 class spieler_t;
 class schedule_list_gui_t;
+class karte_t;
 
 #define INVALID_LINE_ID ((uint16)(-1))
 
diff --git a/simmain.cc b/simmain.cc
index 8bf6478..5fc42b9 100644
--- a/simmain.cc
+++ b/simmain.cc
@@ -193,10 +193,14 @@ static void zeige_banner(karte_t *welt)
 	do {
 		win_poll_event(&ev);
 		check_pos_win(&ev);
+		if(  ev.ev_class == EVENT_SYSTEM  &&  ev.ev_code == SYSTEM_QUIT  ) {
+			umgebung_t::quit_simutrans = true;
+		}
 		INT_CHECK("simmain 189");
 		dr_sleep(10);
 		welt->step();
-	} while(win_is_top(b));
+	} while(win_is_top(b)  &&  !umgebung_t::quit_simutrans  );
+
 
 	if (IS_LEFTCLICK(&ev)) {
 		do {
@@ -251,6 +255,43 @@ static void ask_objfilename()
 
 
 /**
+ * Show language selector
+ */
+static void ask_language()
+{
+	display_show_pointer(true);
+	show_pointer(1);
+	set_pointer(0);
+	sprachengui_t* sel = new sprachengui_t();
+	koord xy( display_get_width()/2 - sel->get_fenstergroesse().x/2, display_get_height()/2 - sel->get_fenstergroesse().y/2 );
+	event_t ev;
+
+	destroy_all_win();	// since eventually the successful load message is still there ....
+	create_win( xy.x, xy.y, sel, w_info, magic_none );
+
+	while(  translator::get_language()==-1  ) {
+		// do not move, do not close it!
+		dr_prepare_flush();
+		sel->zeichnen( xy, sel->get_fenstergroesse() );
+		display_poll_event(&ev);
+		// main window resized
+		check_pos_win(&ev);
+		dr_flush();
+		dr_sleep(50);
+		// main window resized
+		if(ev.ev_class==EVENT_SYSTEM  &&  ev.ev_code==SYSTEM_RESIZE) {
+			// main window resized
+			simgraph_resize( ev.mx, ev.my );
+			display_fillbox_wh( 0, 0, ev.mx, ev.my, COL_BLACK, true );
+		}
+	}
+	destroy_win( sel );
+	set_pointer(0);
+}
+
+
+
+/**
  * Dies wird in main mittels set_new_handler gesetzt und von der
  * Laufzeitumgebung im Falle des Speichermangels bei new() aufgerufen
  */
@@ -352,8 +393,9 @@ int simu_main(int argc, char** argv)
 	uint16 pak_diagonal_multiplier = umgebung_t::default_einstellungen.get_pak_diagonal_multiplier();
 
 	// parsing config/simuconf.tab
-	print("Reading low level config data ...\n");
-	bool found_simuconf=false;
+	printf("Reading low level config data ...\n");
+	bool found_settings = false;
+	bool found_simuconf = false;
 	bool multiuser = (gimme_arg(argc, argv, "-singleuser", 0) == NULL);
 
 	tabfile_t simuconf;
@@ -387,6 +429,7 @@ int simu_main(int argc, char** argv)
 			remove( "settings.xml" );
 		}
 		else {
+			found_settings = true;
 			umgebung_t::rdwr(&file);
 			umgebung_t::default_einstellungen.rdwr(&file);
 			file.close();
@@ -399,18 +442,18 @@ int simu_main(int argc, char** argv)
 	chdir( umgebung_t::program_dir );
 	if(  found_simuconf  ) {
 		if(simuconf.open("config/simuconf.tab")) {
-			printf("parse_simuconf() at config/simuconf.tab");
-			umgebung_t::default_einstellungen.parse_simuconf( simuconf, disp_width, disp_height, fullscreen, umgebung_t::objfilename, false );
+			printf("parse_simuconf() at config/simuconf.tab: ");
+			umgebung_t::default_einstellungen.parse_simuconf( simuconf, disp_width, disp_height, fullscreen, umgebung_t::objfilename );
 		}
 	}
 
 	// if set for multiuser, then parses the users config (if there)
 	// retrieve everything (but we must do this again once more ... )
 	if(multiuser) {
-		cstring_t obj_conf = umgebung_t::user_dir;
-		if(simuconf.open(obj_conf + "simuconf.tab")) {
-			printf("parse_simuconf() at %ssimuconf.tab", (const char *)obj_conf);
-			umgebung_t::default_einstellungen.parse_simuconf( simuconf, disp_width, disp_height, fullscreen, umgebung_t::objfilename, false );
+		cstring_t obj_conf( cstring_t(umgebung_t::user_dir) + "simuconf.tab" );
+		if(simuconf.open(obj_conf)) {
+			printf("parse_simuconf() at %s: ", (const char *)obj_conf );
+			umgebung_t::default_einstellungen.parse_simuconf( simuconf, disp_width, disp_height, fullscreen, umgebung_t::objfilename );
 		}
 	}
 
@@ -450,6 +493,9 @@ int simu_main(int argc, char** argv)
 		show_sizes();
 	}
 #endif
+
+	// prepare skins first
+	obj_reader_t::init( translator::translate("Loading skins ...") );
 	chdir( umgebung_t::program_dir );
 
 	// likely only the programm without graphics was downloaded
@@ -480,7 +526,7 @@ int simu_main(int argc, char** argv)
 
 	fullscreen |= (gimme_arg(argc, argv, "-fullscreen", 0) != NULL);
 
-	if (gimme_arg(argc, argv, "-screensize", 0) != NULL) {
+	if(gimme_arg(argc, argv, "-screensize", 0) != NULL) {
 		const char* res_str = gimme_arg(argc, argv, "-screensize", 1);
 		int n = 0;
 
@@ -516,7 +562,7 @@ int simu_main(int argc, char** argv)
 		}
 	}
 
-	print("Preparing display ...\n");
+	printf("Preparing display ...\n");
 	simgraph_init(disp_width, disp_height, fullscreen);
 
 	// if no object files given, we ask the user
@@ -538,33 +584,43 @@ int simu_main(int argc, char** argv)
 	cstring_t dummy("");
 	if(simuconf.open((const char *)obj_conf)) {
 		sint16 idummy;
-		printf("parse_simuconf() at %sconfig/simuconf.tab", (const char *)obj_conf);
-		umgebung_t::default_einstellungen.parse_simuconf( simuconf, idummy, idummy, idummy, dummy, false );
+		printf("parse_simuconf() at %s: ", (const char *)obj_conf);
+		umgebung_t::default_einstellungen.parse_simuconf( simuconf, idummy, idummy, idummy, dummy );
 		pak_diagonal_multiplier = umgebung_t::default_einstellungen.get_pak_diagonal_multiplier();
 		simuconf.close();
 	}
 	// and parse again parse the user settings
 	if(umgebung_t::user_dir!=umgebung_t::program_dir) {
-		cstring_t obj_conf = umgebung_t::user_dir;
-		if(simuconf.open(obj_conf + "simuconf.tab")) {
+		cstring_t obj_conf( cstring_t(umgebung_t::user_dir) + "simuconf.tab" );
+		if(simuconf.open(obj_conf)) {
 			sint16 idummy;
-			printf("parse_simuconf() at %ssimuconf.tab", (const char *)obj_conf);
-			umgebung_t::default_einstellungen.parse_simuconf( simuconf, idummy, idummy, idummy, dummy, false );
+			printf("parse_simuconf() at %s: ", (const char *)obj_conf);
+			umgebung_t::default_einstellungen.parse_simuconf( simuconf, idummy, idummy, idummy, dummy );
 			simuconf.close();
 		}
+		if(gimme_arg(argc, argv, "-addons", 0) != NULL) {
+			umgebung_t::default_einstellungen.set_with_private_paks( true );
+		}
+		if(gimme_arg(argc, argv, "-noaddons", 0) != NULL) {
+			umgebung_t::default_einstellungen.set_with_private_paks( false );
+		}
+	}
+	else {
+		// not possible for single user
+		umgebung_t::default_einstellungen.set_with_private_paks( false );
 	}
 
 	// now (re)set the correct length from the pak
 	umgebung_t::default_einstellungen.set_pak_diagonal_multiplier( pak_diagonal_multiplier );
 	vehikel_basis_t::set_diagonal_multiplier( pak_diagonal_multiplier, pak_diagonal_multiplier );
 
-	convoihandle_t::init( umgebung_t::max_convoihandles );
-	linehandle_t::init( umgebung_t::max_linehandles );
-	halthandle_t::init( umgebung_t::max_halthandles );
+	convoihandle_t::init( 1024 );
+	linehandle_t::init( 1024 );
+	halthandle_t::init( 1024 );
 
 	// just check before loading objects
 	if (!gimme_arg(argc, argv, "-nosound", 0)  &&  dr_init_sound()) {
-		print("Reading compatibility sound data ...\n");
+		printf("Reading compatibility sound data ...\n");
 		sound_besch_t::init();
 	}
 	else {
@@ -578,34 +634,49 @@ int simu_main(int argc, char** argv)
 		exit(11);
 	}
 
+	// use requested (if available)
+	if(  found_settings  ) {
+		translator::set_language( umgebung_t::language_iso );
+	}
+
 	// Hajo: simgraph init loads default fonts, now we need to load
 	// the real fonts for the current language
 	sprachengui_t::init_font_from_lang();
 	chdir(umgebung_t::program_dir);
 
-	print("Reading city configuration ...\n");
+	printf("Reading city configuration ...\n");
 	stadt_t::cityrules_init(umgebung_t::objfilename);
 
-	print("Reading speedbonus configuration ...\n");
+	printf("Reading speedbonus configuration ...\n");
 	vehikelbauer_t::speedbonus_init(umgebung_t::objfilename);
 
-	print("Reading forest configuration ...\n");
+	printf("Reading forest configuration ...\n");
 	baum_t::forestrules_init(umgebung_t::objfilename);
 
 	// loading all paks
-	print("Reading object data from %s...\n", (const char*)umgebung_t::objfilename);
-	if (!obj_reader_t::init(umgebung_t::objfilename)) {
-		fprintf(stderr, "reading object data failed.\n");
-		exit(11);
+	printf("Reading object data from %s...\n", (const char*)umgebung_t::objfilename);
+	obj_reader_t::load(umgebung_t::objfilename, translator::translate("Loading paks ...") );
+	if(  umgebung_t::default_einstellungen.get_with_private_paks()  ) {
+		// try to read addons from private directory
+		chdir( umgebung_t::user_dir );
+		if(!obj_reader_t::load(umgebung_t::objfilename,translator::translate("Loading addon paks ..."))) {
+			fprintf(stderr, "reading addon object data failed (disabling).\n");
+			umgebung_t::default_einstellungen.set_with_private_paks( false );
+		}
+		chdir( umgebung_t::program_dir );
 	}
-	obj_reader_t::has_been_init = true;
+	obj_reader_t::laden_abschliessen();
 
 	// set overtaking offsets
 	vehikel_basis_t::set_overtaking_offsets( umgebung_t::drive_on_left );
 
-	print("Reading menu configuration ...\n");
+	printf("Reading menu configuration ...\n");
 	werkzeug_t::init_menu(umgebung_t::objfilename);
 
+	if(  translator::get_language()==-1  ) {
+		ask_language();
+	}
+
 	bool new_world = true;
 	cstring_t loadgame = "";
 
@@ -652,10 +723,10 @@ DBG_MESSAGE("simmain","loadgame file found at %s",buffer);
 
 	// init midi before loading sounds
 	if(dr_init_midi()) {
-		print("Reading midi data ...\n");
+		printf("Reading midi data ...\n");
 		if(!midi_init(umgebung_t::user_dir)) {
 			if(!midi_init(umgebung_t::program_dir)) {
-				print("Midi disabled ...\n");
+				printf("Midi disabled ...\n");
 			}
 		}
 		if(gimme_arg(argc, argv, "-nomidi", 0)) {
@@ -663,7 +734,7 @@ DBG_MESSAGE("simmain","loadgame file found at %s",buffer);
 		}
 	}
 	else {
-		print("Midi disabled ...\n");
+		printf("Midi disabled ...\n");
 		midi_set_mute(true);
 	}
 
@@ -710,6 +781,7 @@ DBG_MESSAGE("simmain","loadgame file found at %s",buffer);
 		sets.set_map_roughness( 0.6 );
 		sets.set_groesse(64,64);
 		sets.set_anzahl_staedte(1);
+		sets.set_mittlere_einwohnerzahl( 1600 );
 		sets.set_land_industry_chains(1);
 		sets.set_tourist_attractions(1);
 		sets.set_verkehr_level(7);
@@ -733,7 +805,7 @@ DBG_MESSAGE("simmain","loadgame file found at %s",buffer);
 		werkzeug_t::toolbar_tool[0]->init(welt,welt->get_active_player());
 	}
 
-#ifdef DEBUG
+#if defined DEBUG || defined PROFILE
 	// do a render test?
 	if (gimme_arg(argc, argv, "-times", 0) != NULL) {
 		show_times(welt, view);
@@ -746,6 +818,13 @@ DBG_MESSAGE("simmain","loadgame file found at %s",buffer);
 #endif
 
 	welt->set_fast_forward(false);
+#ifdef PROFILE
+	welt->set_fast_forward(true);
+	if( loadgame == "" )
+	{
+		dbg->fatal("simmain", "no game loaden in profile mode. Use -load");
+	}
+#endif
 	view->display(true);
 	intr_refresh_display(true);
 
@@ -767,13 +846,15 @@ DBG_MESSAGE("simmain","loadgame file found at %s",buffer);
 	sprachengui_t::init_font_from_lang();
 
 	welt->get_message()->clear();
-	ticker::add_msg("Welcome to Simutrans, a game created by Hj. Malthaner and the Simutrans community.", koord::invalid, PLAYER_FLAG + 1);
 
-	zeige_banner(welt);
+#ifndef PROFILE
+		ticker::add_msg("Welcome to Simutrans, a game created by Hj. Malthaner and the Simutrans community.", koord::invalid, PLAYER_FLAG + 1);
+		zeige_banner(welt);
+#endif
 
 	intr_set(welt, view);
 
-	do {
+	while (!umgebung_t::quit_simutrans) {
 		// play next tune?
 		check_midi();
 
@@ -781,18 +862,16 @@ DBG_MESSAGE("simmain","loadgame file found at %s",buffer);
 		welt->get_message()->set_message_flags(umgebung_t::message_flags[0], umgebung_t::message_flags[1], umgebung_t::message_flags[2], umgebung_t::message_flags[3]);
 
 		if (new_world) {
-			welt_gui_t *wg = new welt_gui_t(welt, &umgebung_t::default_einstellungen);
-			sprachengui_t* sg = new sprachengui_t();
-			climate_gui_t* cg = new climate_gui_t(wg, &umgebung_t::default_einstellungen);
+			climate_gui_t *cg = new climate_gui_t(&umgebung_t::default_einstellungen);
 			event_t ev;
 
 			view->display(true);
 
-			// we want to center wg (width 260) between sg (width 220) and cg (176)
+			create_win((disp_width - cg->get_fenstergroesse().x-10), 40, cg, w_info, magic_climate );
 
-			create_win(10, 40, sg, w_info, magic_sprachengui_t );
+			// we want to center wg (width 260) between sg (width 220) and cg (176)
+			welt_gui_t *wg = new welt_gui_t(welt, &umgebung_t::default_einstellungen);
 			create_win((disp_width - 220 - cg->get_fenstergroesse().x -10 -10- 260)/2 + 220 + 10, (disp_height - 300) / 2, wg, w_do_not_delete, magic_welt_gui_t );
-			create_win((disp_width - cg->get_fenstergroesse().x-10), 40, cg, w_info, magic_climate );
 
 			setsimrand(dr_time(), dr_time());
 
@@ -801,6 +880,9 @@ DBG_MESSAGE("simmain","loadgame file found at %s",buffer);
 				win_poll_event(&ev);
 				INT_CHECK("simmain 805");
 				check_pos_win(&ev);
+				if(  ev.ev_class == EVENT_SYSTEM  &&  ev.ev_code == SYSTEM_QUIT  ) {
+					umgebung_t::quit_simutrans = true;
+				}
 				INT_CHECK("simmain 807");
 				dr_sleep(5);
 			} while(
@@ -809,7 +891,8 @@ DBG_MESSAGE("simmain","loadgame file found at %s",buffer);
 				!wg->get_load_heightfield() &&
 				!wg->get_start() &&
 				!wg->get_close() &&
-				!wg->get_quit()
+				!wg->get_quit() &&
+				!umgebung_t::quit_simutrans
 			);
 
 			if (IS_LEFTCLICK(&ev)) {
@@ -818,23 +901,18 @@ DBG_MESSAGE("simmain","loadgame file found at %s",buffer);
 				} while (!IS_LEFTRELEASE(&ev));
 			}
 
+			destroy_all_win();
 			// scenario?
 			if(wg->get_scenario()) {
 				char path[1024];
-				destroy_win( magic_climate );
-				destroy_win( magic_sprachengui_t );
-				destroy_win( magic_welt_gui_t );
-				delete wg;
 				sprintf( path, "%s%sscenario/", umgebung_t::program_dir, (const char *)umgebung_t::objfilename );
 				chdir( path );
+				delete wg;
 				create_win( new scenario_frame_t(welt), w_info, magic_load_t );
 				chdir( umgebung_t::user_dir );
 			}
 			// Neue Karte erzeugen
 			else if (wg->get_start()) {
-				destroy_win( magic_climate );
-				destroy_win( magic_sprachengui_t );
-				destroy_win( magic_welt_gui_t );
 				// since not autodelete
 				delete wg;
 
@@ -853,25 +931,22 @@ DBG_MESSAGE("simmain","loadgame file found at %s",buffer);
 				}
 				destroy_all_win();
 				welt->step_month( umgebung_t::default_einstellungen.get_starting_month() );
-			} else if(wg->get_load()) {
-				destroy_win( magic_climate );
-				destroy_win( magic_sprachengui_t );
-				destroy_win( magic_welt_gui_t );
+			}
+			else if(wg->get_load()) {
 				delete wg;
 				create_win( new loadsave_frame_t(welt, true), w_info, magic_load_t);
-			} else if(wg->get_load_heightfield()) {
-				destroy_win( magic_climate );
-				destroy_win( magic_sprachengui_t );
-				destroy_win( magic_welt_gui_t );
-				welt->load_heightfield(&umgebung_t::default_einstellungen);
+			}
+			else if(wg->get_load_heightfield()) {
 				delete wg;
-			} else {
-				destroy_win( magic_climate );
-				destroy_win( magic_sprachengui_t );
-				destroy_win( magic_welt_gui_t );
+				welt->load_heightfield(&umgebung_t::default_einstellungen);
+				welt->step_month( umgebung_t::default_einstellungen.get_starting_month() );
+			}
+			else {
 				// quit the game
-				if (wg->get_quit()) break;
-				delete wg;
+				if (wg->get_quit()  ||  umgebung_t::quit_simutrans  ) {
+					delete wg;
+					break;
+				}
 			}
 		}
 
@@ -879,7 +954,7 @@ DBG_MESSAGE("simmain","loadgame file found at %s",buffer);
 
 		// run the loop
 		while(welt->interactive()) {
-#ifdef DEBUG
+#if defined DEBUG || defined PROFILE
 			if(  welt->get_current_month() >= quit_month  ) {
 				umgebung_t::quit_simutrans = true;
 				break;
@@ -891,7 +966,7 @@ DBG_MESSAGE("simmain","loadgame file found at %s",buffer);
 		welt->get_message()->get_message_flags(&umgebung_t::message_flags[0], &umgebung_t::message_flags[1], &umgebung_t::message_flags[2], &umgebung_t::message_flags[3]);
 		welt->set_fast_forward(false);
 
-	} while (!umgebung_t::quit_simutrans);
+	}
 
 	intr_disable();
 
diff --git a/simmenu.cc b/simmenu.cc
index b9f0a9c..41d083f 100644
--- a/simmenu.cc
+++ b/simmenu.cc
@@ -35,6 +35,7 @@
 
 #include "dings/roadsign.h"
 #include "dings/wayobj.h"
+#include "dings/zeiger.h"
 
 #include "gui/werkzeug_waehler.h"
 
@@ -91,7 +92,9 @@ werkzeug_t *create_general_tool(int toolnr)
 		case WKZ_FOREST:           return new wkz_forest_t();
 		case WKZ_STOP_MOVER:       return new wkz_stop_moving_t();
 		case WKZ_MAKE_STOP_PUBLIC: return new wkz_make_stop_public_t();
-
+		case WKZ_REMOVE_WAYOBJ:    return new wkz_wayobj_remover_t();
+		case WKZ_SLICED_AND_UNDERGROUND_VIEW: return new wkz_show_underground_t();
+		case WKZ_BUY_HOUSE:        return new wkz_buy_house_t();
 	}
 	dbg->fatal("create_general_tool()","cannot satisfy request for general_tool[%i]!",toolnr);
 	return NULL;
@@ -120,6 +123,7 @@ werkzeug_t *create_simple_tool(int toolnr)
 		case WKZ_QUIT:              return new wkz_quit_t();
 		case WKZ_FILL_TREES:        return new wkz_fill_trees_t();
 		case WKZ_DAYNIGHT_LEVEL:    return new wkz_daynight_level_t();
+		case WKZ_VEHICLE_TOOLTIPS:  return new wkz_vehicle_tooltips_t();
 	}
 	dbg->fatal("create_simple_tool()","cannot satisfy request for simple_tool[%i]!",toolnr);
 	return NULL;
@@ -155,6 +159,7 @@ werkzeug_t *create_dialog_tool(int toolnr)
 		case WKZ_EDIT_TREE:      return new wkz_treebuilder_t();
 		case WKZ_ENLARGE_MAP:    return new wkz_enlarge_map_t();
 		case WKZ_LIST_LABEL:     return new wkz_list_label_t();
+		case WKZ_CLIMATES:       return new wkz_climates_t();
 	}
 	dbg->fatal("create_dialog_tool()","cannot satisfy request for dialog_tool[%i]!",toolnr);
 	return NULL;
@@ -170,7 +175,7 @@ static uint16 str_to_key( const char *str )
 	else {
 		// check for utf8
 		if(  127<(uint8)*str  ) {
-			int len=0;
+			size_t len=0;
 			uint16 c = utf8_to_utf16( (const utf8 *)str, &len );
 			if(str[len]==',') {
 				return c;
@@ -489,7 +494,7 @@ void werkzeug_t::init_menu(cstring_t objfilename)
 				while(*str==' '  &&  *str) {
 					str ++;
 				}
-				if(*str!=',') {
+				if(*str!=',' &&  *str) {
 					key_str = str;
 				}
 				while(*str!=','  &&  *str) {
@@ -621,6 +626,23 @@ void werkzeug_t::init_menu(cstring_t objfilename)
 	std::sort(char_to_tool.begin(), char_to_tool.end(), compare_werkzeug);
 }
 
+void werkzeug_t::update_toolbars(karte_t *welt)
+{
+	// renew toolbar
+	for (vector_tpl<toolbar_t *>::const_iterator i = toolbar_tool.begin(), end = toolbar_tool.end();  i != end;  ++i  ) {
+		(*i)->update(welt, welt->get_active_player());
+	}
+}
+
+void werkzeug_t::draw_after( karte_t *welt, koord pos ) const
+{
+	// default action: grey corner if selected
+	image_id id = get_icon( welt->get_active_player() );
+	if(  id!=IMG_LEER  &&  is_selected(welt)  ) {
+		display_img_blend( id, pos.x, pos.y, TRANSPARENT50_FLAG|OUTLINE_FLAG|COL_BLACK, false, true );
+	}
+}
+
 // seperator in toolbars
 class wkz_dummy_t : public werkzeug_t {
 	bool init( karte_t *, spieler_t * ) { return false; }
@@ -630,7 +652,7 @@ werkzeug_t *werkzeug_t::dummy = new wkz_dummy_t();
 
 
 
-image_id toolbar_t::get_icon(spieler_t *sp)
+image_id toolbar_t::get_icon(spieler_t *sp) const
 {
 	// no image for edit tools => do not open
 	if(sp!=NULL  &&  strcmp(default_param,"EDITTOOLS")==0  &&  sp!=sp->get_welt()->get_spieler(1)  ) {
@@ -642,12 +664,26 @@ image_id toolbar_t::get_icon(spieler_t *sp)
 
 
 // simply true, if visible
-bool toolbar_t::is_selected(karte_t *)
+bool toolbar_t::is_selected(karte_t *) const
 {
 	return win_get_magic((long)this);
 }
 
 
+// just returns sound info after bracket
+static sint16 get_sound( const char *c )
+{
+	while(  *c  &&  *c!=')'  ) {
+		c++;
+	}
+	while(  *c  &&  *c!=','  ) {
+		c++;
+	}
+	return (*c ? atoi( c+1 )-2 : NO_SOUND);
+}
+
+
+
 // fills and displays a toolbar
 void toolbar_t::update(karte_t *welt, spieler_t *sp)
 {
@@ -656,9 +692,7 @@ void toolbar_t::update(karte_t *welt, spieler_t *sp)
 		wzw = new werkzeug_waehler_t( welt, default_param, helpfile, iconsize, this!=werkzeug_t::toolbar_tool[0] );
 	}
 
-	if(  (strcmp(this->default_param,"EDITTOOLS")==0  &&  sp!=welt->get_spieler(1))  ||
-		 (grund_t::underground_mode  &&  strcmp(default_param,"SLOPETOOLS")==0)
-		) {
+	if(  (strcmp(this->default_param,"EDITTOOLS")==0  &&  sp!=welt->get_spieler(1))  ) {
 		destroy_win(wzw);
 		return;
 	}
@@ -676,24 +710,24 @@ void toolbar_t::update(karte_t *welt, spieler_t *sp)
 					while(*c  &&  *c!=','  &&  *c!=')') {
 						c++;
 					}
-					weg_t::system_type subtype = (weg_t::system_type)(*c!=0 ? atoi(c+1) : 0);
-					wegbauer_t::fill_menu( wzw, way, subtype, welt );
+					weg_t::system_type subtype = (weg_t::system_type)(*c!=0 ? atoi(++c) : 0);
+					wegbauer_t::fill_menu( wzw, way, subtype, get_sound(c), welt );
 				}
 				else if(strstr(w->default_param,"bridges(")) {
 					waytype_t way = (waytype_t)atoi(w->default_param+8);
-					brueckenbauer_t::fill_menu( wzw, way, welt );
+					brueckenbauer_t::fill_menu( wzw, way, get_sound(w->default_param+5), welt );
 				}
 				else if(strstr(w->default_param,"tunnels(")) {
 					waytype_t way = (waytype_t)atoi(w->default_param+8);
-					tunnelbauer_t::fill_menu( wzw, way, welt );
+					tunnelbauer_t::fill_menu( wzw, way, get_sound(w->default_param+8), welt );
 				}
 				else if(strstr(w->default_param,"signs(")) {
 					waytype_t way = (waytype_t)atoi(w->default_param+6);
-					roadsign_t::fill_menu( wzw, way, welt );
+					roadsign_t::fill_menu( wzw, way, get_sound(w->default_param+6), welt );
 				}
 				else if(strstr(w->default_param,"wayobjs(")) {
 					waytype_t way = (waytype_t)atoi(w->default_param+8);
-					wayobj_t::fill_menu( wzw, way, welt );
+					wayobj_t::fill_menu( wzw, way, get_sound(w->default_param+8), welt );
 				}
 				else if(strstr(w->default_param,"buildings(")) {
 					const char *c = w->default_param+10;
@@ -701,8 +735,8 @@ void toolbar_t::update(karte_t *welt, spieler_t *sp)
 					while(*c  &&  *c!=','  &&  *c!=')') {
 						c++;
 					}
-					waytype_t way = (waytype_t)(*c!=0 ? atoi(c+1) : 0);
-					hausbauer_t::fill_menu( wzw, utype, way, welt );
+					waytype_t way = (waytype_t)(*c!=0 ? atoi(++c) : 0);
+					hausbauer_t::fill_menu( wzw, utype, way, get_sound(c), welt );
 				}
 				else if(w->default_param[0]=='-') {
 					// add dummy werkzeug as seperator
@@ -723,9 +757,6 @@ bool toolbar_t::init(karte_t *welt, spieler_t *sp)
 {
 	update( welt, sp );
 	bool close = (strcmp(this->default_param,"EDITTOOLS")==0  &&  sp!=welt->get_spieler(1));
-	if(  grund_t::underground_mode  &&  strcmp(default_param,"SLOPETOOLS")==0  ) {
-		close = true;
-	}
 
 	// show/create window
 	if(win_get_magic((long)this)) {
@@ -743,3 +774,137 @@ bool toolbar_t::init(karte_t *welt, spieler_t *sp)
 	}
 	return false;
 }
+
+
+
+bool two_click_werkzeug_t::init( karte_t *welt, spieler_t * )
+{
+	first_click = true;
+	welt->show_distance = start = koord3d::invalid;
+	cleanup( welt, true );
+
+	return true;
+}
+
+const char *two_click_werkzeug_t::work( karte_t *welt, spieler_t *sp, koord3d pos )
+{
+	if( !first_click && start_marker ) {
+		start = start_marker->get_pos(); // if map was rotated.
+	}
+
+	// remove marker
+	cleanup( welt, true );
+
+	const char *error = "";	//default: nosound
+	uint8 value = is_valid_pos( welt, sp, pos, error );
+	if(  value == 0  ) {
+		init( welt, sp );
+		return error;
+	}
+
+	if(  first_click  ) {
+		if(  value & 1  ) {
+			// Work here directly.
+			DBG_MESSAGE("two_click_werkzeug_t::work", "Call tool at %s", pos.get_str() );
+			error = do_work( welt, sp, pos, koord3d::invalid );
+		}
+		else {
+			// set starting position.
+			start_at( welt, sp, pos );
+		}
+	}
+	else {
+		if( value & 2 ) {
+			DBG_MESSAGE("two_click_werkzeug_t::work", "Setting end to %s", pos.get_str() );
+			error = do_work( welt, sp, start, pos );
+		}
+		init( welt, sp ); // Do the cleanup stuff after(!) do_work (otherwise start==koord3d::invalid).
+	}
+	return error;
+}
+
+const char *two_click_werkzeug_t::move( karte_t *welt, spieler_t *sp, uint16 buttonstate, koord3d pos )
+{
+	DBG_MESSAGE("two_click_werkzeug_t::move", "Button: %d, Pos: %s", buttonstate, pos.get_str());
+	if(  buttonstate == 0  ) {
+		return "";
+	}
+	if( start == pos ) {
+		init( welt, sp );
+	}
+
+	const char *error = "";
+	uint8 value = is_valid_pos( welt, sp, pos, error );
+
+	if(  start == koord3d::invalid  ) {
+		// start dragging.
+		cleanup( welt, true );
+		if(  value == 0  ) {
+			return error;
+		}
+		if( value & 2 ) {
+			start_at( welt, sp, pos );
+		}
+	}
+	else {
+		// continue dragging.
+		cleanup( welt, false );
+
+		if( start_marker ) {
+			start = start_marker->get_pos(); // if map was rotated.
+		}
+
+		if( value & 2 ) {
+			display_show_load_pointer( true );
+			mark_tiles( welt, sp, start, pos );
+			display_show_load_pointer( false );
+		}
+	}
+	return "";
+}
+
+void two_click_werkzeug_t::start_at( karte_t *welt, spieler_t* sp, koord3d &new_start )
+{
+	first_click = false;
+	welt->show_distance = start = new_start;
+	start_marker = new zeiger_t(welt, start, sp);
+	start_marker->set_bild( get_marker_image() );
+	grund_t *gr = welt->lookup( start );
+	if( gr ) {
+		gr->obj_add(start_marker);
+	}
+	DBG_MESSAGE("two_click_werkzeug_t::start_at", "Setting start to %s", start.get_str());
+}
+
+void two_click_werkzeug_t::cleanup( karte_t *welt, bool delete_start_marker )
+{
+	// delete marker.
+	if(start_marker != NULL  &&  delete_start_marker ) {
+		start_marker->mark_image_dirty( start_marker->get_bild(), 0 );
+		delete start_marker;
+		start_marker = NULL;
+	}
+	// delete old route.
+	while(!marked.empty()) {
+		zeiger_t *z = marked.remove_first();
+		z->mark_image_dirty( z->get_bild(), 0 );
+		z->mark_image_dirty( z->get_after_bild(), 0 );
+		koord3d pos = z->get_pos();
+		grund_t *gr = welt->lookup( pos );
+		delete z;
+		// Remove dummy ground (placed by wkz_tunnelbau_t and wkz_wegebau_t):
+		if( (gr->get_typ() == grund_t::tunnelboden  ||  gr->get_typ() == grund_t::monorailboden)  &&  gr->get_weg_nr(0) == NULL ) {
+			welt->access(pos.get_2d())->boden_entfernen(gr);
+			delete gr;
+			assert( !welt->lookup(pos));
+		}
+	}
+	// delete tooltip.
+	win_set_static_tooltip( NULL );
+}
+
+image_id two_click_werkzeug_t::get_marker_image()
+{
+	return skinverwaltung_t::bauigelsymbol->get_bild_nr(0);
+}
+
diff --git a/simmenu.h b/simmenu.h
index 2ae9fdc..3f874ac 100644
--- a/simmenu.h
+++ b/simmenu.h
@@ -12,15 +12,13 @@
 #include "besch/sound_besch.h"
 
 #include "dataobj/translator.h"
-#include "dataobj/koord.h"
-#include "dataobj/koord3d.h"
-
-#include "tpl/vector_tpl.h"
-#include "tpl/slist_tpl.h"
 
 #include "simtypes.h"
 #include "simworld.h"
 
+template<class T> class vector_tpl;
+template<class T> class slist_tpl;
+
 class werkzeug_waehler_t;
 class karte_t;
 class spieler_t;
@@ -61,6 +59,9 @@ enum {
 	WKZ_FOREST,
 	WKZ_STOP_MOVER,
 	WKZ_MAKE_STOP_PUBLIC,
+	WKZ_REMOVE_WAYOBJ,
+	WKZ_SLICED_AND_UNDERGROUND_VIEW,
+	WKZ_BUY_HOUSE,
 	GENERAL_TOOL_COUNT,
 	GENERAL_TOOL = 0x1000
 };
@@ -87,6 +88,7 @@ enum {
 	WKZ_QUIT,
 	WKZ_FILL_TREES,
 	WKZ_DAYNIGHT_LEVEL,
+	WKZ_VEHICLE_TOOLTIPS,
 	SIMPLE_TOOL_COUNT,
 	SIMPLE_TOOL = 0x2000
 };
@@ -119,6 +121,7 @@ enum {
 	WKZ_EDIT_TREE,
 	WKZ_ENLARGE_MAP,
 	WKZ_LIST_LABEL,
+	WKZ_CLIMATES,
 	DIALOGE_TOOL_COUNT,
 	DIALOGE_TOOL = 0x4000
 };
@@ -147,19 +150,21 @@ public:
 	static vector_tpl<werkzeug_t *>char_to_tool;
 
 	image_id cursor;
-	int	ok_sound;
-	int failed_sound;
+	sint16 ok_sound;
+	sint16 failed_sound;
 	sint8 offset;
 	const char *default_param;
 
-	uint16	command_key;// key to toggle action for this function
-	uint16	id;			// value to trigger this command (see documentation)
+	uint16 command_key;// key to toggle action for this function
+	uint16 id;			// value to trigger this command (see documentation)
 
 	static vector_tpl<werkzeug_t *> general_tool;
 	static vector_tpl<werkzeug_t *> simple_tool;
 	static vector_tpl<werkzeug_t *> dialog_tool;
 	static vector_tpl<toolbar_t *> toolbar_tool;
 
+	static void update_toolbars(karte_t *welt);
+
 	// since only a single toolstr a time can be visible ...
 	static char toolstr[1024];
 
@@ -168,11 +173,14 @@ public:
 	werkzeug_t() { id = 0xFFFFu; cursor = icon = IMG_LEER; ok_sound = failed_sound = NO_SOUND; offset = Z_PLAN; default_param = NULL; command_key = 0; }
 	virtual ~werkzeug_t() {}
 
-	virtual image_id get_icon(spieler_t *) { return icon; }
+	virtual image_id get_icon(spieler_t *) const { return icon; }
 	void set_icon(image_id i) { icon = i; }
 
 	// this will draw the tool with some indication, if active
-	virtual bool is_selected(karte_t *welt) { return welt->get_werkzeug()==this; }
+	virtual bool is_selected(karte_t *welt) const { return welt->get_werkzeug()==this; }
+
+	// will draw a dark frame, if selected
+	virtual void draw_after( karte_t *w, koord pos ) const;
 
 	/* could be used for player dependent images
 	 * will be called, when a toolbar is opened/updated
@@ -195,6 +203,59 @@ public:
 	virtual const char *move( karte_t *, spieler_t *, uint16 /* buttonstate */, koord3d ) { return ""; }
 };
 
+/*
+ * Class for tools needing two clicks (e.g. building ways).
+ * Dragging is also possible.
+ * @author Gerd Wachsmuth
+ */
+class two_click_werkzeug_t : public werkzeug_t {
+public:
+	two_click_werkzeug_t() : werkzeug_t() { start_marker = NULL; };
+
+	virtual bool init( karte_t *, spieler_t * );
+	virtual bool exit( karte_t *welt, spieler_t *sp ) { return init( welt, sp ); }
+
+	virtual const char *work( karte_t *, spieler_t *, koord3d );
+	virtual const char *move( karte_t *, spieler_t *, uint16 /* buttonstate */, koord3d );
+
+	bool is_first_click() { return first_click; };
+	void cleanup( karte_t *, bool delete_start_marker );
+
+private:
+	/*
+	 * This routine should fill marked_tiles.
+	 */
+	virtual void mark_tiles( karte_t *, spieler_t *, const koord3d &start, const koord3d &end ) = 0;
+
+	/*
+	 * This routine is called, if the real work should be done.
+	 * If the tool supports single clicks, end is sometimes == koord3d::invalid.
+	 * Returned string is passed by work/move.
+	 */
+	virtual const char *do_work( karte_t *, spieler_t *, const koord3d &start, const koord3d &end ) = 0;
+
+	/*
+	 * Can the tool start/end on this koord3d?
+	 * 0 = no
+	 * 1 = This tool can work on this tile (with single click)
+	 * 2 = On this tile can dragging start/end
+	 * 3 = Both (1 and 2). Not used by any tool yet.
+	 * error will contain an error message (if this is != NULL, return value should be 0).
+	 */
+	virtual uint8 is_valid_pos( karte_t *, spieler_t *, const koord3d &start, const char *&error ) = 0;
+
+	virtual image_id get_marker_image();
+
+	bool first_click;
+	koord3d start;
+	void start_at( karte_t *, spieler_t *, koord3d &new_start );
+
+	zeiger_t *start_marker;
+
+protected:
+	slist_tpl< zeiger_t* > marked;
+};
+
 /* toolbar are a new overclass */
 class toolbar_t : public werkzeug_t {
 public:
@@ -214,13 +275,12 @@ public:
 	}
 	const char *get_tooltip(spieler_t *) { return translator::translate(default_param); }
 	werkzeug_waehler_t *get_werkzeug_waehler() const { return wzw; }
-	virtual image_id get_icon(spieler_t *);
-	bool is_selected(karte_t *welt);
+	virtual image_id get_icon(spieler_t *) const;
+	bool is_selected(karte_t *welt) const;
 	// show this toolbar
 	virtual bool init(karte_t *w, spieler_t *sp);
 	void update(karte_t *, spieler_t *);	// just refresh content
 	void append(werkzeug_t *w) { tools.append(w); }
 };
 
-
 #endif
diff --git a/simmesg.cc b/simmesg.cc
index 70cae48..ee6b090 100644
--- a/simmesg.cc
+++ b/simmesg.cc
@@ -14,9 +14,12 @@
 #include "simgraph.h"
 #include "simcolor.h"
 #include "simwin.h"
+#include "simworld.h"
+
 #include "utils/simstring.h"
 #include "tpl/slist_tpl.h"
 #include "gui/messagebox.h"
+#include <string.h>
 
 
 
diff --git a/simmesg.h b/simmesg.h
index f148f3d..5b8773b 100644
--- a/simmesg.h
+++ b/simmesg.h
@@ -3,11 +3,11 @@
 
 #include "simtypes.h"
 #include "simcolor.h"
-#include "simworld.h"
 #include "simimg.h"
 #include "dataobj/koord.h"
-#include "tpl/slist_tpl.h"
+#include "tpl/vector_tpl.h"
 
+class karte_t;
 
 /* class for a simple message
  * this way they are stored in a list
@@ -24,7 +24,7 @@ public:
 		long time;
 	};
 
-	enum msg_typ {general=0, ai=1, city=2, convoi=3, industry=4, tourist=5, new_vehicle=6, full=7, problems=8, warnings=9 };
+	enum msg_typ {general=0, ai=1, city=2, convoi=3, industry=4, tourist=5, new_vehicle=6, full=7, problems=8, warnings=9, MAX_MESSAGE_TYPE };
 
 	void add_message( const char *text, koord pos, msg_typ where, PLAYER_COLOR_VAL color=COL_BLACK, image_id bild=IMG_LEER );
 
@@ -41,10 +41,10 @@ private:
 	karte_t	*welt;
 
 	// bitfields that contains the messages
-	int	ticker_flags;
-	int win_flags;
-	int auto_win_flags;
-	int ignore_flags;
+	sint32 ticker_flags;
+	sint32 win_flags;
+	sint32 auto_win_flags;
+	sint32 ignore_flags;
 
 	vector_tpl<node> list;
 
diff --git a/simplan.cc b/simplan.cc
index 8b29d27..decb446 100644
--- a/simplan.cc
+++ b/simplan.cc
@@ -24,6 +24,7 @@
 #include "boden/monorailboden.h"
 
 #include "dings/zeiger.h"
+#include "dings/gebaeude.h"
 
 #include "dataobj/loadsave.h"
 #include "dataobj/umgebung.h"
@@ -194,11 +195,6 @@ planquadrat_t::kartenboden_setzen(grund_t *bd)
 void planquadrat_t::boden_ersetzen(grund_t *alt, grund_t *neu)
 {
 	assert(alt!=NULL  &&  neu!=NULL);
-#ifdef COVER_TILES
-	if(alt->get_flag(grund_t::is_cover_tile)) {
-		neu->set_flag(grund_t::is_cover_tile);
-	}
-#endif
 
 	if(ground_size<=1) {
 		assert(data.one==alt  ||  ground_size==0);
@@ -254,7 +250,7 @@ planquadrat_t::rdwr(karte_t *welt, loadsave_t *file, koord pos )
 		grund_t *gr;
 		//DBG_DEBUG("planquadrat_t::rdwr()","Reading boden");
 		do {
-			grund_t::typ gtyp = (grund_t::typ)file->rd_obj_id();
+			short gtyp = file->rd_obj_id();
 
 			switch(gtyp) {
 				case -1: gr = NULL; break;
@@ -323,16 +319,16 @@ void planquadrat_t::abgesenkt(karte_t *welt)
 {
 	grund_t *gr = get_kartenboden();
 	if(gr) {
-		koord k=gr->get_pos().get_2d();
-		uint8 slope = welt->calc_natural_slope(k);
+		const uint8 slope = gr->get_grund_hang();
 
 		gr->obj_loesche_alle(NULL);
-		gr->set_pos(koord3d(k,welt->min_hgt(k)));
-		if(welt->max_hgt(k) <= welt->get_grundwasser()  &&  gr->get_typ()!=grund_t::wasser) {
+		sint8 max_hgt = gr->get_hoehe() + (slope != 0 ? 1 : 0);
+
+		if(max_hgt <= welt->get_grundwasser()  &&  gr->get_typ()!=grund_t::wasser) {
 			kartenboden_setzen(new wasser_t(welt, gr->get_pos()) );
 		}
 		else {
-			reliefkarte_t::get_karte()->calc_map_pixel(k);
+			reliefkarte_t::get_karte()->calc_map_pixel(gr->get_pos().get_2d());
 		}
 		gr->set_grund_hang( slope );
 	}
@@ -342,17 +338,15 @@ void planquadrat_t::angehoben(karte_t *welt)
 {
 	grund_t *gr = get_kartenboden();
 	if(gr) {
-		koord k ( gr->get_pos().get_2d() );
-		uint8 slope = welt->calc_natural_slope(k);
+		const uint8 slope = gr->get_grund_hang();
 
 		gr->obj_loesche_alle(NULL);
-		gr->set_pos(koord3d(k,welt->min_hgt(k)));
-		if (welt->max_hgt(k) > welt->get_grundwasser()  &&  gr->get_typ()==grund_t::wasser) {
+		sint8 max_hgt = gr->get_hoehe() + (slope != 0 ? 1 : 0);
+		if (max_hgt > welt->get_grundwasser()  &&  gr->get_typ()==grund_t::wasser) {
 			kartenboden_setzen(new boden_t(welt, gr->get_pos(), slope ) );
 		}
 		else {
-			gr->set_grund_hang( slope );
-			reliefkarte_t::get_karte()->calc_map_pixel(k);
+			reliefkarte_t::get_karte()->calc_map_pixel(gr->get_pos().get_2d());
 		}
 	}
 }
@@ -369,7 +363,7 @@ void planquadrat_t::display_boden(const sint16 xpos, const sint16 ypos) const
 
 
 void
-planquadrat_t::display_dinge(const sint16 xpos, const sint16 ypos, const sint16 raster_tile_width, bool called_by_simview) const
+planquadrat_t::display_dinge(const sint16 xpos, const sint16 ypos, const sint16 raster_tile_width, bool called_by_simview, const sint8 hmin, const sint8 hmax) const
 {
 	grund_t *gr=get_kartenboden();
 	//const bool kartenboden_dirty = gr->get_flag(grund_t::dirty);
@@ -379,18 +373,24 @@ planquadrat_t::display_dinge(const sint16 xpos, const sint16 ypos, const sint16
 	gr->display_dinge(xpos, ypos, called_by_simview);
 
 	if(ground_size>1) {
-		const sint16 h0 = gr->get_hoehe();
+		const sint8 h0 = gr->get_disp_height();
 		for(uint8 i=1;  i<ground_size;  i++) {
-			gr=data.some[i];
-			const sint16 yypos = ypos - tile_raster_scale_y( (gr->get_hoehe()-h0)*TILE_HEIGHT_STEP/Z_TILE_STEP, raster_tile_width);
-			gr->display_boden(xpos, yypos );
-			gr->display_dinge(xpos, yypos, called_by_simview );
+			const grund_t* gr=data.some[i];
+			const sint8 h = gr->get_hoehe();
+			// too high
+			if (h > hmax) break;
+			// not too low?
+			if (h >= hmin) {
+				const sint16 yypos = ypos - tile_raster_scale_y( (h-h0)*TILE_HEIGHT_STEP/Z_TILE_STEP, raster_tile_width);
+				gr->display_boden(xpos, yypos );
+				gr->display_dinge(xpos, yypos, called_by_simview );
+			}
 		}
 	}
 }
 
 
-void planquadrat_t::display_overlay(const sint16 xpos, const sint16 ypos) const
+void planquadrat_t::display_overlay(const sint16 xpos, const sint16 ypos, const sint8 hmin, const sint8 hmax) const
 {
 	grund_t *gr=get_kartenboden();
 
@@ -400,10 +400,10 @@ void planquadrat_t::display_overlay(const sint16 xpos, const sint16 ypos) const
 		if(umgebung_t::use_transparency_station_coverage) {
 
 			// only transparent outline
-			image_id img = get_kartenboden()->get_bild();
+			image_id img = gr->get_bild();
 			if(img==IMG_LEER) {
 				// default image (since i.e. foundations do not have an image)
-				img = grund_besch_t::ausserhalb->get_bild(hang_t::flach);
+				img = grund_besch_t::get_ground_tile( gr->get_disp_slope(), gr->get_disp_height() );
 			}
 
 			for(int halt_count = 0; halt_count < halt_list_count; halt_count++) {
@@ -430,7 +430,7 @@ void planquadrat_t::display_overlay(const sint16 xpos, const sint16 ypos) const
 			// opaque boxes (
 			const sint16 r=raster_tile_width/8;
 			const sint16 x=xpos+raster_tile_width/2-r;
-			const sint16 y=ypos+(raster_tile_width*3)/4-r - (get_kartenboden()->get_grund_hang()? tile_raster_scale_y(8,raster_tile_width): 0);
+			const sint16 y=ypos+(raster_tile_width*3)/4-r - (gr->get_grund_hang()? tile_raster_scale_y(8,raster_tile_width): 0);
 			const bool kartenboden_dirty = gr->get_flag(grund_t::dirty);
 			// suitable start search
 			for(sint16 h=halt_list_count-1;  h>=0;  h--  ) {
@@ -439,17 +439,16 @@ void planquadrat_t::display_overlay(const sint16 xpos, const sint16 ypos) const
 		}
 	}
 
+	gr->display_overlay(xpos, ypos );
 	if(ground_size>1) {
-		const sint16 h0 = gr->get_hoehe();
-		for(uint8 i=0;  i<ground_size;  i++) {
-			gr=data.some[i];
-			const sint16 yypos = ypos - (gr->get_hoehe()-h0)*get_tile_raster_width()/(2*Z_TILE_STEP);
+		const sint8 h0 = gr->get_disp_height();
+		for(uint8 i=1;  i<ground_size;  i++) {
+			grund_t* gr=data.some[i];
+			const sint8 h = gr->get_disp_height();
+			const sint16 yypos = ypos - (h-h0)*get_tile_raster_width()/(2*Z_TILE_STEP);
 			gr->display_overlay(xpos, yypos );
 		}
 	}
-	else {
-		gr->display_overlay(xpos, ypos );
-	}
 }
 
 /**
@@ -530,7 +529,7 @@ void planquadrat_t::add_to_haltlist(halthandle_t halt)
 
 				// not a passenger KI or other is farer away
 				if(  halt_list[insert_pos]->get_warenziele_passenger()->get_count()+halt_list[insert_pos]->get_warenziele_mail()->get_count()==0  ||
-				     abs_distance(halt_list[insert_pos]->get_next_pos(pos), pos) > abs_distance(halt->get_next_pos(pos), pos))
+				     koord_distance(halt_list[insert_pos]->get_next_pos(pos), pos) > koord_distance(halt->get_next_pos(pos), pos))
 				{
 					halt_list_insert_at( halt, insert_pos );
 					return;
diff --git a/simplan.h b/simplan.h
index 6c5049d..450c9fd 100644
--- a/simplan.h
+++ b/simplan.h
@@ -181,9 +181,9 @@ public:
 
 	void display_boden(const sint16 xpos, const sint16 ypos) const;
 
-	void display_dinge(const sint16 xpos, const sint16 ypos, const sint16 scale, const bool dirty) const;
+	void display_dinge(const sint16 xpos, const sint16 ypos, const sint16 scale, const bool dirty, const sint8 hmin, const sint8 hmax) const;
 
-	void display_overlay(sint16 xpos, sint16 ypos) const;
+	void display_overlay(sint16 xpos, sint16 ypos, const sint8 hmin, const sint8 hmax) const;
 };
 
 #endif
diff --git a/simskin.h b/simskin.h
index 37c987b..53babaa 100644
--- a/simskin.h
+++ b/simskin.h
@@ -1,8 +1,7 @@
 #ifndef __SIMSKIN_H
 #define __SIMSKIN_H
 
-#include "tpl/slist_tpl.h"
-
+template<class T> class slist_tpl;
 class skin_besch_t;
 
 
diff --git a/simsound.cc b/simsound.cc
index 5902e69..db96d59 100644
--- a/simsound.cc
+++ b/simsound.cc
@@ -81,8 +81,7 @@ bool sound_get_mute() {
  * spielt sound ab
  * @author Hj. Malthaner
  */
-void
-sound_play(const struct sound_info info)
+void sound_play(const struct sound_info info)
 {
 	if(info.index!=(uint16)NO_SOUND  &&  !umgebung_t::mute_sound) {
 //DBG_MESSAGE("karte_t::interactive_event(event_t &ev)", "play sound %i",info.index);
@@ -92,6 +91,7 @@ sound_play(const struct sound_info info)
 
 
 
+
 bool sound_get_shuffle_midi()
 {
 	return umgebung_t::shuffle_midi;
@@ -171,7 +171,7 @@ int midi_init(const char *directory)
 		while(!feof(file)) {
 			char buf[256];
 			char title[256];
-			long len;
+			size_t len;
 
 			read_line(buf, 256, file);
 			read_line(title, 256, file);
@@ -183,7 +183,7 @@ int midi_init(const char *directory)
 
 				if(len > 1) {
 					sprintf( full_path, "%s%s", directory, buf );
-					print("  Reading MIDI file '%s' - %s", full_path, title);
+					printf("  Reading MIDI file '%s' - %s", full_path, title);
 					max_midi = dr_load_midi(full_path);
 
 					if(max_midi >= 0) {
diff --git a/simsound.h b/simsound.h
index 2cb9e28..74e4057 100644
--- a/simsound.h
+++ b/simsound.h
@@ -68,6 +68,7 @@ void sound_play(const sound_info inf);
 bool sound_get_shuffle_midi();
 void sound_set_shuffle_midi( bool shuffle );
 
+
 /**
  * setzt Lautstärke für MIDI playback
  * @param volume volume in range 0..255
@@ -88,7 +89,7 @@ int sound_get_midi_volume();
  * gets midi title
  * @author Hj. Malthaner
  */
-const char * sound_get_midi_title(int index);
+const char *sound_get_midi_title(int index);
 
 
 /**
diff --git a/simsys_posix.cc b/simsys_posix.cc
new file mode 100644
index 0000000..5b62849
--- /dev/null
+++ b/simsys_posix.cc
@@ -0,0 +1,228 @@
+/*
+ * Copyright (c) 1997 - 2001 Hansjörg Malthaner
+ *
+ * This file is part of the Simutrans project under the artistic licence.
+ */
+
+#include <SDL/SDL.h>
+
+#ifndef _MSC_VER
+#include <unistd.h>
+#include <sys/time.h>
+#endif
+
+#ifdef _WIN32
+#include <SDL/SDL_syswm.h>
+#include <windows.h>
+#else
+#include <sys/stat.h>
+#include <sys/errno.h>
+#endif
+
+#include <dirent.h>
+#include <stdio.h>
+#include <stddef.h>
+#include <string.h>
+#include <stdlib.h>
+#include <math.h>
+
+#ifndef PATH_MAX
+#define PATH_MAX (1024)
+#endif
+
+#undef min
+#undef max
+
+#include "macros.h"
+#include "simmain.h"
+#include "simsys.h"
+
+#include <time.h>
+
+struct sys_event sys_event;
+
+int dr_os_init(const int*)
+{
+	// prepare for next event
+	sys_event.type = SIM_NOEVENT;
+	sys_event.code = 0;
+	return TRUE;
+}
+
+int dr_query_screen_width()
+{
+	return 0;
+}
+
+int dr_query_screen_height()
+{
+	return 0;
+}
+
+// open the window
+int dr_os_open(int, int, int, int)
+{
+	return TRUE;
+}
+
+// shut down SDL
+int dr_os_close(void)
+{
+	return TRUE;
+}
+
+// reiszes screen
+int dr_textur_resize(unsigned short** textur, int, int, int)
+{
+	*textur = NULL;
+	return 1;
+}
+
+// query home directory
+char *dr_query_homedir(void)
+{
+	static char buffer[PATH_MAX];
+	char b2[PATH_MAX];
+#ifdef _WIN32
+	DWORD len=PATH_MAX-24;
+	HKEY hHomeDir;
+	if(RegOpenKeyExA(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", 0, KEY_READ, &hHomeDir)==ERROR_SUCCESS) {
+		RegQueryValueExA(hHomeDir,"Personal",NULL,NULL,(BYTE *)buffer,&len);
+		strcat(buffer,"\\Simutrans");
+		CreateDirectoryA( buffer, NULL);
+		strcat(buffer, "\\");
+
+		// create other subdirectories
+		sprintf(b2, "%ssave", buffer );
+		CreateDirectoryA( b2, NULL );
+		sprintf(b2, "%sscreenshot", buffer );
+		CreateDirectoryA( b2, NULL );
+		sprintf(b2, "%smaps", buffer );
+		CreateDirectoryA( b2, NULL );
+
+		return buffer;
+	}
+	return NULL;
+#else
+#ifndef __MACOS__
+	sprintf( buffer, "%s/simutrans", getenv("HOME") );
+#else
+	sprintf( buffer, "%s/Documents/simutrans", getenv("HOME") );
+#endif
+	int err = mkdir( buffer, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH );
+	if(err  &&  err!=EEXIST) {
+		// could not create directory
+		// we assume success anyway
+	}
+	strcat( buffer, "/" );
+	sprintf( b2, "%smaps", buffer );
+	mkdir( b2, 0700 );
+	sprintf( b2, "%sscreenshot", buffer );
+	mkdir( b2, 0700 );
+	sprintf( b2, "%ssave", buffer );
+	mkdir( b2, 0700 );
+	return buffer;
+#endif
+}
+
+unsigned short *dr_textur_init()
+{
+	return NULL;
+}
+
+unsigned int get_system_color(unsigned int, unsigned int, unsigned int)
+{
+	return 1;
+}
+
+void dr_setRGB8multi(int, int, unsigned char*)
+{
+}
+
+void dr_prepare_flush()
+{
+}
+
+void dr_flush(void)
+{
+}
+
+void dr_textur(int, int, int, int)
+{
+}
+
+void move_pointer(int, int)
+{
+}
+
+void set_pointer(int)
+{
+}
+
+int dr_screenshot(const char *)
+{
+	return -1;
+}
+
+static inline unsigned int ModifierKeys(void)
+{
+	return 0;
+}
+
+void GetEvents(void)
+{
+}
+
+void GetEventsNoWait(void)
+{
+}
+
+void show_pointer(int)
+{
+}
+
+void ex_ord_update_mx_my()
+{
+}
+
+unsigned long dr_time(void)
+{
+	return time(NULL);
+}
+
+void dr_sleep(uint32 usec)
+{
+	timespec sleepfor, zero;
+	sleepfor.tv_sec = usec/1000;
+	usec = usec % 1000;
+	sleepfor.tv_nsec = 1000 * usec;
+	nanosleep( &sleepfor, &zero);
+}
+
+bool dr_fatal_notify(const char* msg, int choices)
+{
+	fputs(msg, stderr);
+	return choices;
+}
+
+int main(int argc, char **argv)
+{
+#ifndef __BEOS__
+#	if defined __GLIBC__
+	/* glibc has a non-standard extension */
+	char* buffer2 = NULL;
+#	else
+	char buffer2[PATH_MAX];
+#	endif
+	char buffer[PATH_MAX];
+	int length = readlink("/proc/self/exe", buffer, lengthof(buffer) - 1);
+	if (length != -1) {
+		buffer[length] = '\0'; /* readlink() does not NUL-terminate */
+		argv[0] = buffer;
+	}
+	// no process file system => need to parse argv[0]
+	/* should work on most unix or gnu systems */
+	argv[0] = realpath(argv[0], buffer2);
+#endif
+	return simu_main(argc, argv);
+}
diff --git a/simsys_s.cc b/simsys_s.cc
index 35dea4f..e34409e 100644
--- a/simsys_s.cc
+++ b/simsys_s.cc
@@ -427,7 +427,8 @@ static void internal_GetEvents(int wait)
 			SDL_WaitEvent(&event);
 			n = SDL_PollEvent(NULL);
 		} while (n != 0 && event.type == SDL_MOUSEMOTION);
-	} else {
+	}
+	else {
 		int n;
 		int got_one = FALSE;
 
@@ -518,15 +519,66 @@ static void internal_GetEvents(int wait)
 			} else if (event.key.keysym.sym == SDLK_DELETE) {
 				sys_event.code = 127;
 			} else if (event.key.keysym.unicode > 0) {
-				// printf("Unicode ");
 				sys_event.code = event.key.keysym.unicode;
+				if(  event.key.keysym.unicode==22  /*^V*/  ) {
+#ifdef _WIN32
+					// paste
+					if(  OpenClipboard(NULL)  ) {
+						HANDLE hText = GetClipboardData( CF_UNICODETEXT );
+						SDL_Event new_event;
+						new_event.type =SDL_KEYDOWN;
+						new_event.key.keysym.sym = (SDLKey)0;
+						if(  hText  ) {
+							WCHAR *chr = (WCHAR *)hText;
+							while(  *chr!=0  ) {
+								if(  *chr!=10  ) {
+									new_event.key.keysym.unicode = (SDLKey)*chr;
+									SDL_PushEvent( &new_event );
+								}
+								chr ++;
+							}
+						}
+						CloseClipboard();
+					}
+#elif 0
+					// X11 magic ... not tested yet!
+					SDL_SysWMinfo si;
+					if(  SDL_GetWMInfo( &si )  &&  si.subsystem==SDL_SYSWM_X11  ) {
+						// clipboard under X11 ...
+						unsigned long sel_len = 0;	/* length of sel_buf */
+						unsigned char *sel_buf = 0;
+						Atom sseln = XA_CLIPBOARD(si.x11.display);
+						XEvent evt;			/* X Event Structures */
+						Atom target = XA_STRING;
+						unsigned int context = XCLIB_XCOUT_NONE;
+						xcout(si.x11.display, si.x11.window, evt, sseln, target, &sel_buf, &sel_len, &context);
+						/* fallback is needed. set XA_STRING to target and restart the loop. */
+						if (context == XCLIB_XCOUT_FALLBACK) {
+							// not sucessful?!?
+							sel_len = 0;
+						}
+						else {
+							// something in clipboard
+							SDL_Event new_event;
+							new_event.type =SDL_KEYDOWN;
+							new_event.key.keysym.sym = 0;
+							unsigned char *chr = sel_buf;
+							while(  sel_len-->=0  ) {
+								new_event.key.keysym.sym = (*chr==10 ? 13 : *chr);
+								SDL_PushEvent( &new_event );
+								chr ++;
+							}
+							free( sel_buf );
+						}
+					}
+#endif
+				}
 			} else if (event.key.keysym.sym >= SDLK_F1 && event.key.keysym.sym <= SDLK_F15) {
-				// printf("Function ");
 				sys_event.code = event.key.keysym.sym - SDLK_F1 + SIM_KEY_F1;
 			} else if (event.key.keysym.sym > 0 && event.key.keysym.sym < 127) {
-				// printf("ASCII ");
 				sys_event.code = event.key.keysym.sym;	// try with the ASCII code ...
-			} else {
+			}
+			else {
 				switch (event.key.keysym.sym) {
 					case SDLK_PAGEUP:   sys_event.code = '>';           break;
 					case SDLK_PAGEDOWN: sys_event.code = '<';           break;
@@ -548,6 +600,8 @@ static void internal_GetEvents(int wait)
 			sys_event.my   = event.motion.y;
 			sys_event.mb = event.motion.state;
 			sys_event.mb = (sys_event.mb &1) + ((sys_event.mb>>1) & 2) + ((sys_event.mb<<1) & 4);
+			sys_event.key_mod = ModifierKeys();
+			sys_event.key_mod = ModifierKeys();
 			break;
 
 		case 1:
@@ -613,11 +667,11 @@ bool dr_fatal_notify(const char* msg, int choices)
 {
 #ifdef _WIN32
 	if(choices==0) {
-		MessageBox( NULL, msg, "Fatal Error", MB_ICONEXCLAMATION|MB_OK );
+		MessageBoxA( NULL, msg, "Fatal Error", MB_ICONEXCLAMATION|MB_OK );
 		return 0;
 	}
 	else {
-		return MessageBox( NULL, msg, "Fatal Error", MB_ICONEXCLAMATION|MB_RETRYCANCEL	)==IDRETRY;
+		return MessageBoxA( NULL, msg, "Fatal Error", MB_ICONEXCLAMATION|MB_RETRYCANCEL	)==IDRETRY;
 	}
 #else
 	fputs(msg, stderr);
diff --git a/simsys_w16.cc b/simsys_w16.cc
index 0cfd32d..31c3b46 100644
--- a/simsys_w16.cc
+++ b/simsys_w16.cc
@@ -146,6 +146,9 @@ int dr_query_screen_height()
 // open the window
 int dr_os_open(int w, int h, int bpp, int fullscreen)
 {
+	MaxSize.right = (w+16)&0x7FF0;
+	MaxSize.bottom = h;
+
 	// fake fullscreen
 	if (fullscreen) {
 		// try to force display mode and size
@@ -170,8 +173,6 @@ int dr_os_open(int w, int h, int bpp, int fullscreen)
 		}
 		else {
 			ChangeDisplaySettings(&settings, CDS_FULLSCREEN);
-			MaxSize.right = w;
-			MaxSize.bottom = h;
 		}
 		is_fullscreen = fullscreen;
 	}
@@ -242,7 +243,7 @@ int dr_os_close(void)
 int dr_textur_resize(unsigned short **textur, int w, int h, int bpp)
 {
 	WAIT_FOR_SCREEN();
-	if(w>MaxSize.right+15  ||  h>MaxSize.bottom+2) {
+	if(w>MaxSize.right  ||  h>MaxSize.bottom) {
 		// since the query routines that return the desktop data do not take into account a change of resolution
 		free(AllDibData);
 		AllDibData = NULL;
@@ -378,7 +379,6 @@ int dr_screenshot(const char *filename)
 		FILE *fBmp = fopen(filename, "wb");
 		if (fBmp) {
 			BITMAPFILEHEADER bf;
-			unsigned i;
 
 			AllDib->biHeight = WindowSize.bottom + 1;
 
@@ -390,7 +390,7 @@ int dr_screenshot(const char *filename)
 			fwrite(&bf, sizeof(BITMAPFILEHEADER), 1, fBmp);
 			fwrite(AllDib, sizeof(BITMAPINFOHEADER) + sizeof(DWORD) * 3, 1, fBmp);
 
-			for (i = 0; i < AllDib->biHeight; i++) {
+			for(  LONG i = 0; i < AllDib->biHeight; i++) {
 				fwrite(AllDibData + (AllDib->biHeight - 1 - i) * AllDib->biWidth, AllDib->biWidth, 2, fBmp);
 			}
 
@@ -408,6 +408,13 @@ int dr_screenshot(const char *filename)
  * Hier sind die Funktionen zur Messageverarbeitung
  */
 
+static inline unsigned int ModifierKeys()
+{
+	return
+		(GetKeyState(VK_SHIFT)   < 0  ? 1 : 0) |
+		(GetKeyState(VK_CONTROL) < 0  ? 2 : 0); // highest bit set or return value<0 -> key is pressed
+}
+
 struct sys_event sys_event;
 
 /* Windows eventhandler: does most of the work */
@@ -483,7 +490,7 @@ LRESULT WINAPI WindowProc(HWND this_hwnd, UINT msg, WPARAM wParam, LPARAM lParam
 		case WM_LBUTTONDOWN: /* originally ButtonPress */
 			sys_event.type    = SIM_MOUSE_BUTTONS;
 			sys_event.code    = SIM_MOUSE_LEFTBUTTON;
-			sys_event.key_mod = wParam>>2;
+			sys_event.key_mod = ModifierKeys();
 			sys_event.mb = last_mb = (wParam&3);
 			sys_event.mx      = LOWORD(lParam);
 			sys_event.my      = HIWORD(lParam);
@@ -492,7 +499,7 @@ LRESULT WINAPI WindowProc(HWND this_hwnd, UINT msg, WPARAM wParam, LPARAM lParam
 		case WM_LBUTTONUP: /* originally ButtonRelease */
 			sys_event.type    = SIM_MOUSE_BUTTONS;
 			sys_event.code    = SIM_MOUSE_LEFTUP;
-			sys_event.key_mod = wParam>>2;
+			sys_event.key_mod = ModifierKeys();
 			sys_event.mb = last_mb = (wParam&3);
 			sys_event.mx      = LOWORD(lParam);
 			sys_event.my      = HIWORD(lParam);
@@ -501,7 +508,7 @@ LRESULT WINAPI WindowProc(HWND this_hwnd, UINT msg, WPARAM wParam, LPARAM lParam
 		case WM_RBUTTONDOWN: /* originally ButtonPress */
 			sys_event.type    = SIM_MOUSE_BUTTONS;
 			sys_event.code    = SIM_MOUSE_RIGHTBUTTON;
-			sys_event.key_mod = wParam>>2;
+			sys_event.key_mod = ModifierKeys();
 			sys_event.mb = last_mb = (wParam&3);
 			sys_event.mx      = LOWORD(lParam);
 			sys_event.my      = HIWORD(lParam);
@@ -510,7 +517,7 @@ LRESULT WINAPI WindowProc(HWND this_hwnd, UINT msg, WPARAM wParam, LPARAM lParam
 		case WM_RBUTTONUP: /* originally ButtonRelease */
 			sys_event.type    = SIM_MOUSE_BUTTONS;
 			sys_event.code    = SIM_MOUSE_RIGHTUP;
-			sys_event.key_mod = wParam>>2;
+			sys_event.key_mod = ModifierKeys();
 			sys_event.mb = last_mb = (wParam&3);
 			sys_event.mx      = LOWORD(lParam);
 			sys_event.my      = HIWORD(lParam);
@@ -519,7 +526,7 @@ LRESULT WINAPI WindowProc(HWND this_hwnd, UINT msg, WPARAM wParam, LPARAM lParam
 		case WM_MOUSEMOVE:
 			sys_event.type    = SIM_MOUSE_MOVE;
 			sys_event.code    = SIM_MOUSE_MOVED;
-			sys_event.key_mod = wParam>>2;
+			sys_event.key_mod = ModifierKeys();
 			sys_event.mb = last_mb = (wParam&3);
 			sys_event.mx      = LOWORD(lParam);
 			sys_event.my      = HIWORD(lParam);
@@ -572,6 +579,7 @@ LRESULT WINAPI WindowProc(HWND this_hwnd, UINT msg, WPARAM wParam, LPARAM lParam
 
 			sys_event.type = SIM_KEYBOARD;
 			sys_event.code = 0;
+			sys_event.key_mod = ModifierKeys();
 
 			if (numlock) {
 				// do low level special stuff here
@@ -607,7 +615,6 @@ LRESULT WINAPI WindowProc(HWND this_hwnd, UINT msg, WPARAM wParam, LPARAM lParam
 			// check for F-Keys!
 			if (sys_event.code == 0 && wParam >= VK_F1 && wParam <= VK_F15) {
 				sys_event.code = wParam - VK_F1 + SIM_KEY_F1;
-				sys_event.key_mod = (GetKeyState(VK_CONTROL) != 0) * 2; // control state
 				//printf("WindowsEvent: Key %i, (state %i)\n", sys_event.code, sys_event.key_mod);
 			}
 			// some result?
@@ -618,8 +625,27 @@ LRESULT WINAPI WindowProc(HWND this_hwnd, UINT msg, WPARAM wParam, LPARAM lParam
 		}
 
 		case WM_CHAR: /* originally KeyPress */
-			sys_event.type = SIM_KEYBOARD;
-			sys_event.code = wParam;
+			if(  wParam==22  /*^V*/  ) {
+				// paste
+				if(  OpenClipboard(this_hwnd)  ) {
+					HANDLE hText = GetClipboardData( CF_UNICODETEXT );
+					if(  hText  ) {
+						WCHAR *chr = (WCHAR *)hText;
+						while(  *chr!=0  ) {
+							if(  *chr!=10  ) {
+								PostMessage( this_hwnd, WM_CHAR, *chr, 0 );
+							}
+							chr ++;
+						}
+					}
+					CloseClipboard();
+				}
+			}
+			else {
+				sys_event.type = SIM_KEYBOARD;
+				sys_event.code = wParam;
+				sys_event.key_mod = ModifierKeys();
+			}
 			break;
 
 		case WM_CLOSE:
@@ -753,7 +779,17 @@ BOOL APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdL
 
 	GetWindowRect(GetDesktopWindow(), &MaxSize);
 
+	// maybe set timer to 1ms intervall on Win2k upwards ...
+	{
+		OSVERSIONINFO osinfo;
+		osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+		if (GetVersionEx(&osinfo)  &&  osinfo.dwPlatformId==VER_PLATFORM_WIN32_NT) {
+			timeBeginPeriod(1);
+		}
+	}
+
 	simu_main(argc, argv);
+	timeEndPeriod(1);
 
 #ifdef MULTI_THREAD
 	if(	hFlushThread ) {
diff --git a/simsys_w32_png.c b/simsys_w32_png.c
index 2a518ba..0e68742 100644
--- a/simsys_w32_png.c
+++ b/simsys_w32_png.c
@@ -9,19 +9,19 @@
 // structures, since we use the C-interface
 typedef struct
 {
-    CLSID Clsid;
-    GUID  FormatID;
-    const WCHAR* CodecName;
-    const WCHAR* DllName;
-    const WCHAR* FormatDescription;
-    const WCHAR* FilenameExtension;
-    const WCHAR* MimeType;
-    DWORD Flags;
-    DWORD Version;
-    DWORD SigCount;
-    DWORD SigSize;
-    const BYTE* SigPattern;
-    const BYTE* SigMask;
+	CLSID Clsid;
+	GUID  FormatID;
+	const WCHAR* CodecName;
+	const WCHAR* DllName;
+	const WCHAR* FormatDescription;
+	const WCHAR* FilenameExtension;
+	const WCHAR* MimeType;
+	DWORD Flags;
+	DWORD Version;
+	DWORD SigCount;
+	DWORD SigSize;
+	const BYTE* SigPattern;
+	const BYTE* SigMask;
 } ImageCodecInfo;
 
 #define    PixelFormatIndexed      0x00010000 // Indexes into a palette
diff --git a/simsys_w8.cc b/simsys_w8.cc
index 56fb859..6246119 100644
--- a/simsys_w8.cc
+++ b/simsys_w8.cc
@@ -146,6 +146,9 @@ int dr_query_screen_height()
 // open the window
 int dr_os_open(int w, int h, int bpp, int fullscreen)
 {
+	MaxSize.right = (w+16)&x7FF0;
+	MaxSize.bottom = h;
+
 	// fake fullscreen
 	if (fullscreen) {
 		// try to force display mode and size
@@ -166,8 +169,6 @@ int dr_os_open(int w, int h, int bpp, int fullscreen)
 		}
 		else {
 			ChangeDisplaySettings(&settings, CDS_FULLSCREEN);
-			MaxSize.right = w;
-			MaxSize.bottom = h;
 		}
 		is_fullscreen = fullscreen;
 	}
diff --git a/simticker.cc b/simticker.cc
index d6cb2fa..86fc2b5 100644
--- a/simticker.cc
+++ b/simticker.cc
@@ -6,6 +6,7 @@
  */
 
 #include <string.h>
+#include "dataobj/koord.h"
 #include "simdebug.h"
 #include "simticker.h"
 #include "simgraph.h"
diff --git a/simticker.h b/simticker.h
index ab73658..5c8928f 100644
--- a/simticker.h
+++ b/simticker.h
@@ -8,9 +8,10 @@
 #ifndef SIMTICKER_H
 #define SIMTICKER_H
 
-#include "dataobj/koord.h"
 #include "simcolor.h"
 
+class koord;
+
 /**
  * A very simple news ticker.
  * The news are displayed by karte_vollansicht_t
diff --git a/simtools.cc b/simtools.cc
index 7482065..679b8a1 100644
--- a/simtools.cc
+++ b/simtools.cc
@@ -101,8 +101,7 @@ uint32 setsimrand(uint32 seed,uint32 ns)
 }
 
 
-static double
-int_noise(const long x, const long y)
+static double int_noise(const long x, const long y)
 {
     long n = x + y*101 + noise_seed;
 
@@ -110,19 +109,59 @@ int_noise(const long x, const long y)
     return ( 1.0 - (double)((n * (n * n * 15731 + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0);
 }
 
-static double
-smoothed_noise(const int x, const int y)
+
+static float *map = 0;
+static sint32 map_w=0;
+
+void init_perlin_map( sint32 w, sint32 h )
 {
-/* this gives a very smooth world */
-    const double corners = ( int_noise(x-1, y-1)+int_noise(x+1, y-1)+
-                             int_noise(x-1, y+1)+int_noise(x+1, y+1) );
+	map_w = w+2;
+	map = new float[map_w*(h+2)];
+	for(  sint32 y=0;  y<h+2;  y++ ) {
+		for(  sint32 x=0;  x<map_w;  x++ ) {
+			map[x+(y*map_w)] = int_noise( x-1, y-1 );
+		}
+	}
+}
 
-    const double sides   = ( int_noise(x-1, y) + int_noise(x+1, y) +
-                             int_noise(x, y-1) + int_noise(x, y+1) );
 
-    const double center  =  int_noise(x, y);
 
-    return (corners + sides+sides + center*4.0) / 16.0;
+void exit_perlin_map()
+{
+	map_w = 0;
+	delete map;
+	map = 0;
+}
+
+
+#define map_noise(x,y) (map[(x)+1+((y)+1)*map_w])
+
+
+static double smoothed_noise(const int x, const int y)
+{
+	/* this gives a very smooth world */
+	if(map) {
+		const double corners =
+			map_noise(x-1, y-1)+map_noise(x+1, y-1)+map_noise(x-1, y+1)+map_noise(x+1, y+1);
+
+		const double sides =
+			map_noise(x-1, y) + map_noise(x+1, y) + map_noise(x, y-1) + map_noise(x, y+1);
+
+		const double center = map_noise(x, y);
+
+		return (corners + sides+sides + center*4.0) / 16.0;
+	}
+	else {
+		const double corners =
+			int_noise(x-1, y-1)+int_noise(x+1, y-1)+int_noise(x-1, y+1)+int_noise(x+1, y+1);
+
+		const double sides =
+			int_noise(x-1, y) + int_noise(x+1, y) + int_noise(x, y-1) + int_noise(x, y+1);
+
+		const double center = int_noise(x,y);
+
+		return (corners + sides+sides + center*4.0) / 16.0;
+	}
 
 
 /* a hilly world
@@ -138,8 +177,7 @@ smoothed_noise(const int x, const int y)
 //   return int_noise(x,y);
 }
 
-static double
-linear_interpolate(const double a, const double b, const double x)
+static double linear_interpolate(const double a, const double b, const double x)
 {
 //    return  a*(1.0-x) + b*x;
 //    return  a - a*x + b*x;
@@ -147,8 +185,7 @@ linear_interpolate(const double a, const double b, const double x)
 }
 
 
-static double
-interpolated_noise(const double x, const double y)
+static double interpolated_noise(const double x, const double y)
 {
 // The function floor is needed because (int) rounds always towards zero,
 // but we need integer_x be the biggest integer not bigger than x.
@@ -177,20 +214,19 @@ interpolated_noise(const double x, const double y)
  * x,y Koordinaten des Punktes
  * p   Persistenz
  */
-
 double perlin_noise_2D(const double x, const double y, const double p)
 {
     double total = 0.0;
-    int i;
-
-    for(i=0; i<6; i++) {
-
-	const double frequency = (double)(1 << i);
-	const double amplitude = pow(p, (double)i);
+    for(  int  i=0;  i<6;  i++  ) {
+		const double frequency = (double)(1 << i);
+		const double amplitude = pow(p, (double)i);
 
-	total += interpolated_noise((x * frequency) / 64.0,
-                                    (y * frequency) / 64.0) * amplitude;
+		total += interpolated_noise((x * frequency) / 64.0,
+										(y * frequency) / 64.0) * amplitude;
     }
 
     return total;
 }
+
+
+
diff --git a/simtools.h b/simtools.h
index 77d74cd..0f6b113 100644
--- a/simtools.h
+++ b/simtools.h
@@ -14,4 +14,8 @@ uint32 simrand_plain(void);
 
 double perlin_noise_2D(const double x, const double y, const double persistence);
 
+// just more speed with those (generate a precalculated map, which needs only smoothing)
+void init_perlin_map( sint32 w, sint32 h );
+void exit_perlin_map();
+
 #endif
diff --git a/simutrans/config/simuconf.tab b/simutrans/config/simuconf.tab
index 665820a..0125074 100644
--- a/simutrans/config/simuconf.tab
+++ b/simutrans/config/simuconf.tab
@@ -2,11 +2,13 @@
 #
 # Low-Level values and constants
 #
+# Lines starting with '#' or any non_character letter will be ignored!
+# To actually set a value, remove the leading '#'!
 #
 # This file can be found in many places:
 #
 # simutrans/config/simuconf.tab (this one)
-# ~/simutrans/simuconf.tab (in the user directory, if singleuser_install != 0 or not present, first only pak-file path will be read)
+# ~/simutrans/simuconf.tab (in the user directory, if singleuser_install == 0 or not present, first only pak-file path will be read)
 # simutrans/pakfilefolder/config/simuconf.tab
 # ~/simutrans/simuconf.tab (readed a second time, s.a.)
 #
@@ -14,10 +16,10 @@
 #
 # This simuconf.tab will be read first => we set meaningful defaults here.
 #
-# load/save the files in the users or the program directory directory? (default: 1 = user directory)
+# load/save the files in the users or the program directory directory? (default: 0 = user directory)
 # ATTENTION!
 # will be only used if this file is located in the program directory at config/simuconf.tab!
-#singleuser_install = 1
+#singleuser_install = 0
 
 # Default pak file path
 # which graphics you want to play?
@@ -35,24 +37,15 @@
 #
 #################################program stuff##################################
 
-# max number of stations (just the amount of internal handles)
-stations = 8192
-
-# max number of convoys (i.e. train or truck with trailer or single truck)
-convoys = 8192
-
-# max number of lines (all line handles)
-lines = 2048
-
 # maximum number of position tested during a way search
 # 100000 should be ok even for large maps with ships
-# 10000 is ok for everything else (consumes 16*x Bytes main  memory)
-max_route_steps = 1000000
+# 10000 is ok for everything else (consumes 16*x Bytes main memory, no further harm)
+#max_route_steps = 1000000
 
 # size of catchment area of a station (default 2)
 # older game size was 3
-# savegames with another catch area will be unloadable
-station_coverage = 2
+# savegames with another catch area will give strange results
+#station_coverage = 2
 
 # Max number of steps in goods pathfinding
 # This should be equal or greater than the biggest group
@@ -66,16 +59,11 @@ station_coverage = 2
 # Depending on your CPU power, you might want to limit the search
 # depth.
 #
-# 300 seems to be a good compromise for most games. 100 is ok for
-# small games. 8000 should suffice for even the largest maps, but
-# will take a good amount of CPU time if you have complex transport
-# networks. Max. allowed value is 9994.
-#
 # prissi: On a 512x512 map with more than 150000 people daily, the saturation
 # value for "no route" was higher, around 8000. Using 300 instead almost doubled
 # the value of "no route"
 #
-max_hops = 2000
+#max_hops = 2000
 
 # Passengers and goods will change vehicles at most "max_transfer"
 # times to reach their destination.
@@ -92,56 +80,82 @@ max_hops = 2000
 # T. Kubes: I would say 8 for now, but this definitely should be difficulty
 # dependent setting.
 #
-max_transfers = 9
+# max_transfers = 9
 
 # way builder internal weights (defaults)
 # a higher weight make it more unlikely
 # make the curves negative, and the waybuilder will built strange tracks ...
-way_straight=1
-way_curve=2
-way_double_curve=6
-way_90_curve=15
-way_slope=10
-way_tunnel=8
-way_max_bridge_len=15
-way_leaving_road=25
-
-##################################industry stuff#################################
+#
+#way_straight=1
+#way_curve=2
+#way_double_curve=6
+#way_90_curve=15
+#way_slope=10
+#way_tunnel=8
+#way_max_bridge_len=15
+#way_leaving_road=25
+
+###############################passenger stuff##############################
 # also pak dependent
 
+# town growth multiplier factors (electricity is not used at the moment)
+# A heigher factor mean faster growth
+# passenger_multiplier = 40
+# mail_multiplier = 20
+# goods_multiplier = 20
+# electricity_multiplier = 0
+
+# town growth is size dependent. There are three different sizes (<1000, 1000-10000, >10000)
+# the idea is, that area increase by square but growth is linear
+#growthfactor_villages = 400
+#growthfactor_cities = 200
+#growthfactor_capitals = 100
+
 # passenger generation (default is 16) Smaller values means less passengers
-passenger_factor=16
+#passenger_factor=16
+
+# amount of passengers that travel from/to factories or attractions
+# the ramining percentage goes to other cities
+#factory_worker_percentage = 33
+#tourist_percentage = 16
 
 # if enabled (default = 0 off) stops may have different capacities for passengers, mail, and  freight
-seperate_halt_capacities = 0
+#seperate_halt_capacities = 0
 
 # three modes (default = 0)
 # 1: the payment is only relative to the distance to next interchange, 2 to the trips destination (default 0 is distance since last stop)
-pay_for_total_distance = 0
+#pay_for_total_distance = 0
 
-# things to overcrowded destinations won't loaf if active (default off)
-avoid_overcrowding = 0
+# things to overcrowded destinations won't load if active (default off)
+#avoid_overcrowding = 0
+
+# do not create goods/passenger/mail when the only route is over an overcrowded stop
+#no_routing_over_overcrowded = 0
 
 # in beginner mode, all good prices are multiplied by a factor (default 1500=1.5)
-beginner_price_factor = 1500
+#beginner_price_factor = 1500
+
+##################################factory stuff#################################
+
+# smallest distance between two adjacent factories
+#factory_spacing = 6
 
 # allow all possible supplier to connect to your factories?
-# This will also affect savegames!
 # best to leave it in default position. (only on for simuTTD)
-crossconnect_factories = 0
+#crossconnect_factories = 0
 
 # how big is the chance for crossconnections in percent
 # (100% will give nearly the same results as crossconnect_factories=1)
-crossconnect_factories_percentage = 33
+#crossconnect_factories_percentage = 33
 
 # how much is the total electric power available (in relation to total production) in parts per thousand
-electric_promille = 330
+#electric_promille = 330
 
 # with this switch on (default), overcrowded factories will not recieve goods any more
-just_in_time = 1
+#just_in_time = 1
 
 # use beginner mode for new maps (can be switched anyway on the new map dialog)
-first_beginner = 0
+#first_beginner = 0
 
 ##################################display stuff#################################
 
@@ -152,49 +166,52 @@ first_beginner = 0
 # Do you want to have random pedestrians in town? Look nice but needs some
 # CPU time to process them. (1=on, 0=off)
 # Impact on frame time: ~10% (16 cities on a new standard map)
-random_pedestrians = 1
+#random_pedestrians = 1
 
 # there are some other grounds (like rocky, lakes etc. )
 # which could be added to the map (default 10)
 # show random objects to break uniformity (every n suited tiles)
-random_grounds_probability = 10
+#random_grounds_probability = 10
 
 # show random moving animals (n = every n suited tiles, default 1000)
-random_wildlife_probability = 1000
+#random_wildlife_probability = 1000
 
 # animate the water each intervall (if images available)
 # costs some time for the additional redraw (~1-3%)
-water_animation_ms = 250
+#water_animation_ms = 250
 
 # Show info windows for private cars and pedestrians?
 # (1=on, 0=off)
-pedes_and_car_info = 0
+#pedes_and_car_info = 0
+
+# How much citycars will be generated
+#citycar_level = 5
 
 # After how many month a citycar breaks (and will be forever gone) ...
 # default is ten years
-default_citycar_life = 120
+#default_citycar_life = 36
 
 # (=1) drive on the left side of the road
-drive_left = 0
+#drive_left = 0
 
 # Show infos on trees?
 # (1=on, 0=off)
-tree_info = 1
+#tree_info = 1
 
 # Show infos also on bare ground?
 # (1=on, 0=off)
-ground_info = 0
+#ground_info = 0
 
 # Show passenger level of townhalls?
 # (1=on, 0=off)
-townhall_info = 0
+#townhall_info = 0
 
 # always open only a single info window for the ground,
 # even if there are more objects on this tile
-only_single_info = 1
+#only_single_info = 1
 
 # Should stations get numbered names? (1=yes, 0=no)
-numbered_stations = 0
+#numbered_stations = 0
 
 # Show name signs and statistic?
 # 0 = don't show anything
@@ -202,7 +219,31 @@ numbered_stations = 0
 # 2 = statistics
 # 3 = names and statistics
 #
-show_names = 3
+#show_names = 3
+
+# Color of cursor overlay, which is blended over marked ground tiles
+# The available colors and their numbers can be found on
+#    http://simutrans-germany.com/wiki/wiki/tiki-index.php?page=en_FactoryDef#mapcolor
+# Suggested values (155 is the default)
+# -- pak64, pak.german, pak128
+#cursor_overlay_color = 155
+# -- pak128.japan
+#cursor_overlay_color = 149
+
+# show the windows close etc. buttons on the right (like windows 98)
+#window_buttons_right = 0
+
+# draw a frame with titlebar color around active window
+#window_frame_active = 0
+
+# show tooltips (default 1=show)
+#show_tooltips = 1
+
+# background color (+-1 arounf this index is used), taken from playercolor table
+#tooltip_background_color = 4
+
+# tooltip text color (240=black, 215=white)
+#tooltip_text_color = 240
 
 ###################################money stuff##################################
 #
@@ -210,6 +251,9 @@ show_names = 3
 # You can adjust all the cost in the game, that are not inside some pak file
 #
 
+# show graphs old style (right to left, default) or rather left to right
+#left_to_right_graphs  = 0
+
 # Starting money of the player. Given in Credit cents (1/100 Cr)
 #starting_money = 20000000
 
@@ -225,6 +269,7 @@ show_names = 3
 #cost_multiply_headquarter=1000
 
 # cost for depots
+#cost_depot_air=5000
 #cost_depot_rail=1000
 #cost_depot_road=1300
 #cost_depot_ship=2500
@@ -235,29 +280,30 @@ show_names = 3
 #cost_third_rail=80
 
 # other construction/destruction stuff
-#cost_alter_land=1000
 #cost_buy_land=100
+#cost_alter_land=1000
 #cost_set_slope=2500
 #cost_found_city=5000000
 #cost_multiply_found_industry=20000
 #cost_remove_tree=100
 #cost_multiply_remove_haus=1000
 #cost_multiply_remove_field=5000
+#cost_transformer=2500
+#cost_maintain_transformer=20
 
 ###################################other stuff##################################
 #
 # also pak dependent
 #
 
-# Max. length of intitial intercity road connections
-# If you want to speed up map creation, lower this value
-# If you want more initial intercity roads, raise this value
-# 8000 seems to be a good compromise between speed and road number
+# Max. length of initial intercity road connections
+# If you want to speed up map creation, lower this value.
+# If you want more initial intercity roads, raise this value.
+# If the value is too large then very long bridges might be created.
+# 200 seems to be a good compromise between speed and road number
 # note: this will slow down map creation dramatically!
 #
-# T. Kubes: 128x128 can use more roads to save player some money. => 19000
-#
-#intercity_road_length = 800
+#intercity_road_length = 200
 
 # Type of initial intercity roads - must be available
 # as PAK file. Fallback (if PAK is not found) is "asphalt_road"
@@ -290,7 +336,7 @@ show_names = 3
 # 1 = use introduction dates
 # 2 = (default) use settings during game creation
 #
-use_timeline = 2
+#use_timeline = 2
 
 # Starting year of the game:
 # Setting it below 1850 is not recommended for 64 set!
@@ -299,61 +345,48 @@ use_timeline = 2
 #
 # other recommended vaule for 64 is 1956
 #
-starting_year = 1930
+#starting_year = 1930
 
 # Starting month of the game for people who want to start in summer (default 1=January)
 #starting_month = 6
 
 # Should month be shown in date? (0=no, 1=yes, 2>=show day in japan format=2, us format=3, german=4)
 # This is most useful, if you use longer months than the default length (see below)
-#
-show_month = 4
+#show_month = 3
 
 # Global time multiplier (will be save with new games)
 # 2^bits_per_month = duration of a game month in microseconds real time
-# default is 18. For example, 21 will make the month 2^3=8 times longer in real time
+# default before 99.x was 18. For example, 21 will make the month 2^3=8 times longer in real time
 # production and maintainance cost will be adjusted accordingly.
 #
-bits_per_month = 20
+#bits_per_month = 20
 
 ###################################system stuff##################################
 
 # compress savegames?
 # "binary" means uncompressed, "zipped" means compressed
-saveformat = zipped
+# other options are "xml" and "xml_zipped"
+# xml detecht more errors of broken savegames but are much larger
+#saveformat = zipped
 
 # autosave every x months (0=off)
-autosave = 0
+#autosave = 0
 
 # display (screen/window) width
 # also see readme.txt, -screensize option
-display_width  = 704
+#display_width  = 704
 
 # display (screen/window) height
 # also see readme.txt, -screensize option
-display_height = 560
+#display_height = 560
 
 # show full screen
-fullscreen = 0
+#fullscreen = 0
 
 # How many frames per second to use? Display may look pretty until 10 or so
 # (depends very much on computer, game complexity and graphics driver)
-frames_per_second = 25
+#frames_per_second = 25
 
 # How much faster should the game proceed with fast forward (limited by your computer and size of the map)
-fast_forward = 100
+#fast_forward = 50
 
-# show the windows close etc. buttons on the right (like windows 98)
-window_buttons_right = 0
-
-# draw a frame with titlebar color around active window
-window_frame_active = 0
-
-# show tooltips (default 1=show)
-show_tooltips = 1
-
-# background color (+-1 arounf this index is used), taken from playercolor table
-tooltip_background_color = 4
-
-# tooltip text color (240=black, 215=white)
-tooltip_text_color = 240
diff --git a/simutrans/font/cyr.bdf b/simutrans/font/cyr.bdf
index 367a167..cfbf3c3 100644
--- a/simutrans/font/cyr.bdf
+++ b/simutrans/font/cyr.bdf
@@ -1,3715 +1,4832 @@
-STARTFONT 2.1
-FONT -simutrans-prop-medium-r-normal--12-120-77-75-P-80-ISO10646-1
-SIZE 12 77 75
-FONTBOUNDINGBOX 10 11 0 -2
-STARTPROPERTIES 17
-POINT_SIZE 120
-PIXEL_SIZE 12
-RESOLUTION_X 77
-RESOLUTION_Y 75
-FONT_ASCENT 9
-FONT_DESCENT 3
-AVERAGE_WIDTH 80
-SPACING "P"
-_XMBDFED_INFO "Edited with xmbdfed 4.7."
-FOUNDRY "simutrans"
-FAMILY_NAME "prop"
-WEIGHT_NAME "medium"
-SLANT "r"
-SETWIDTH_NAME "normal"
-ADD_STYLE_NAME ""
-CHARSET_REGISTRY "ISO10646"
-CHARSET_ENCODING "1"
-ENDPROPERTIES
-CHARS 257
-STARTCHAR U+001D
-ENCODING 29
-SWIDTH 701 0
-DWIDTH 9 0
-BBX 8 8 1 0
-BITMAP
-BD
-42
-A5
-99
-99
-A5
-42
-BD
-ENDCHAR
-STARTCHAR U+001E
-ENCODING 30
-SWIDTH 779 0
-DWIDTH 10 0
-BBX 8 8 1 0
-BITMAP
-3C
-42
-A5
-81
-A5
-99
-42
-3C
-ENDCHAR
-STARTCHAR U+001F
-ENCODING 31
-SWIDTH 701 0
-DWIDTH 9 0
-BBX 8 8 1 0
-BITMAP
-3C
-42
-A5
-81
-99
-A5
-42
-3C
-ENDCHAR
-STARTCHAR U+0021
-ENCODING 33
-SWIDTH 233 0
-DWIDTH 3 0
-BBX 2 8 1 0
-BITMAP
-C0
-C0
-C0
-C0
-C0
-00
-C0
-C0
-ENDCHAR
-STARTCHAR U+0022
-ENCODING 34
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 3 1 5
-BITMAP
-6C
-6C
-D8
-ENDCHAR
-STARTCHAR U+0023
-ENCODING 35
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 8 8 0 0
-BITMAP
-36
-36
-7F
-36
-36
-7F
-36
-36
-ENDCHAR
-STARTCHAR U+0024
-ENCODING 36
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 6 9 1 0
-BITMAP
-10
-78
-D4
-D0
-D0
-D0
-D4
-78
-10
-ENDCHAR
-STARTCHAR U+0025
-ENCODING 37
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 8 8 0 0
-BITMAP
-21
-53
-56
-2C
-1A
-35
-65
-42
-ENDCHAR
-STARTCHAR U+0026
-ENCODING 38
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 8 8 0 0
-BITMAP
-38
-6C
-6C
-38
-68
-67
-66
-3D
-ENDCHAR
-STARTCHAR U+0027
-ENCODING 39
-SWIDTH 311 0
-DWIDTH 4 0
-BBX 3 3 1 5
-BITMAP
-60
-60
-C0
-ENDCHAR
-STARTCHAR U+0028
-ENCODING 40
-SWIDTH 389 0
-DWIDTH 5 0
-BBX 5 8 0 0
-BITMAP
-18
-30
-60
-60
-60
-60
-30
-18
-ENDCHAR
-STARTCHAR U+0029
-ENCODING 41
-SWIDTH 389 0
-DWIDTH 5 0
-BBX 5 8 0 0
-BITMAP
-60
-30
-18
-18
-18
-18
-30
-60
-ENDCHAR
-STARTCHAR U+002A
-ENCODING 42
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 5 1 2
-BITMAP
-48
-30
-FC
-30
-48
-ENDCHAR
-STARTCHAR U+002B
-ENCODING 43
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 5 1 2
-BITMAP
-30
-30
-FC
-30
-30
-ENDCHAR
-STARTCHAR U+002C
-ENCODING 44
-SWIDTH 389 0
-DWIDTH 5 0
-BBX 5 3 0 -1
-BITMAP
-18
-18
-30
-ENDCHAR
-STARTCHAR U+002D
-ENCODING 45
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 1 1 4
-BITMAP
-FC
-ENDCHAR
-STARTCHAR U+002E
-ENCODING 46
-SWIDTH 389 0
-DWIDTH 5 0
-BBX 5 2 0 0
-BITMAP
-18
-18
-ENDCHAR
-STARTCHAR U+002F
-ENCODING 47
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 7 0 0
-BITMAP
-02
-06
-0C
-18
-30
-60
-40
-ENDCHAR
-STARTCHAR U+0030
-ENCODING 48
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-3C
-66
-66
-66
-66
-66
-66
-3C
-ENDCHAR
-STARTCHAR U+0031
-ENCODING 49
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 6 8 0 0
-BITMAP
-38
-18
-18
-18
-18
-18
-18
-3C
-ENDCHAR
-STARTCHAR U+0032
-ENCODING 50
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-3C
-66
-06
-0C
-18
-30
-60
-7E
-ENDCHAR
-STARTCHAR U+0033
-ENCODING 51
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-3C
-66
-06
-0C
-06
-06
-66
-3C
-ENDCHAR
-STARTCHAR U+0034
-ENCODING 52
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-60
-60
-6C
-CC
-CC
-FC
-0C
-0C
-ENDCHAR
-STARTCHAR U+0035
-ENCODING 53
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-F8
-C0
-C0
-F8
-0C
-0C
-CC
-78
-ENDCHAR
-STARTCHAR U+0036
-ENCODING 54
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-78
-C0
-C0
-F8
-CC
-CC
-CC
-78
-ENDCHAR
-STARTCHAR U+0037
-ENCODING 55
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-7E
-06
-0C
-0C
-0C
-18
-18
-18
-ENDCHAR
-STARTCHAR U+0038
-ENCODING 56
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-3C
-66
-66
-3C
-66
-66
-66
-3C
-ENDCHAR
-STARTCHAR U+0039
-ENCODING 57
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-78
-CC
-CC
-CC
-7C
-0C
-0C
-78
-ENDCHAR
-STARTCHAR U+003A
-ENCODING 58
-SWIDTH 233 0
-DWIDTH 3 0
-BBX 2 6 1 0
-BITMAP
-C0
-C0
-00
-00
-C0
-C0
-ENDCHAR
-STARTCHAR U+003B
-ENCODING 59
-SWIDTH 311 0
-DWIDTH 4 0
-BBX 4 7 0 -1
-BITMAP
-30
-30
-00
-00
-30
-30
-60
-ENDCHAR
-STARTCHAR U+003C
-ENCODING 60
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 1
-BITMAP
-0C
-38
-E0
-E0
-38
-0C
-ENDCHAR
-STARTCHAR U+003D
-ENCODING 61
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 4 1 2
-BITMAP
-FC
-00
-00
-FC
-ENDCHAR
-STARTCHAR U+003E
-ENCODING 62
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 1
-BITMAP
-C0
-70
-1C
-1C
-70
-C0
-ENDCHAR
-STARTCHAR U+003F
-ENCODING 63
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-3C
-66
-06
-0C
-18
-18
-00
-18
-ENDCHAR
-STARTCHAR U+0040
-ENCODING 64
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 7 8 1 0
-BITMAP
-7C
-E6
-DE
-F6
-F6
-DC
-C0
-7C
-ENDCHAR
-STARTCHAR U+0041
-ENCODING 65
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-3C
-66
-66
-66
-7E
-66
-66
-66
-ENDCHAR
-STARTCHAR U+0042
-ENCODING 66
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-F8
-CC
-CC
-F8
-CC
-CC
-CC
-F8
-ENDCHAR
-STARTCHAR U+0043
-ENCODING 67
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-3C
-66
-60
-60
-60
-60
-66
-3C
-ENDCHAR
-STARTCHAR U+0044
-ENCODING 68
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-F8
-CC
-CC
-CC
-CC
-CC
-CC
-F8
-ENDCHAR
-STARTCHAR U+0045
-ENCODING 69
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-FC
-C0
-C0
-F0
-C0
-C0
-C0
-FC
-ENDCHAR
-STARTCHAR U+0046
-ENCODING 70
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-FC
-C0
-C0
-F0
-C0
-C0
-C0
-C0
-ENDCHAR
-STARTCHAR U+0047
-ENCODING 71
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-78
-CC
-C0
-C0
-DC
-CC
-CC
-74
-ENDCHAR
-STARTCHAR U+0048
-ENCODING 72
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-66
-66
-66
-7E
-66
-66
-66
-66
-ENDCHAR
-STARTCHAR U+0049
-ENCODING 73
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 6 8 0 0
-BITMAP
-3C
-18
-18
-18
-18
-18
-18
-3C
-ENDCHAR
-STARTCHAR U+004A
-ENCODING 74
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 5 8 1 0
-BITMAP
-78
-30
-30
-30
-30
-30
-70
-E0
-ENDCHAR
-STARTCHAR U+004B
-ENCODING 75
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-62
-66
-6C
-78
-78
-6C
-66
-62
-ENDCHAR
-STARTCHAR U+004C
-ENCODING 76
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 6 8 0 0
-BITMAP
-60
-60
-60
-60
-60
-60
-60
-7C
-ENDCHAR
-STARTCHAR U+004D
-ENCODING 77
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 8 8 0 0
-BITMAP
-41
-63
-77
-7F
-6B
-63
-63
-63
-ENDCHAR
-STARTCHAR U+004E
-ENCODING 78
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-CC
-CC
-EC
-EC
-DC
-DC
-CC
-CC
-ENDCHAR
-STARTCHAR U+004F
-ENCODING 79
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-3C
-66
-66
-66
-66
-66
-66
-3C
-ENDCHAR
-STARTCHAR U+0050
-ENCODING 80
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-7C
-66
-66
-66
-7C
-60
-60
-60
-ENDCHAR
-STARTCHAR U+0051
-ENCODING 81
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-3C
-66
-66
-66
-66
-6A
-6C
-36
-ENDCHAR
-STARTCHAR U+0052
-ENCODING 82
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-7C
-66
-66
-66
-7C
-78
-6C
-66
-ENDCHAR
-STARTCHAR U+0053
-ENCODING 83
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-3C
-66
-60
-3C
-06
-06
-66
-3C
-ENDCHAR
-STARTCHAR U+0054
-ENCODING 84
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-7E
-18
-18
-18
-18
-18
-18
-18
-ENDCHAR
-STARTCHAR U+0055
-ENCODING 85
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-66
-66
-66
-66
-66
-66
-66
-3C
-ENDCHAR
-STARTCHAR U+0056
-ENCODING 86
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-CC
-CC
-CC
-78
-78
-78
-30
-30
-ENDCHAR
-STARTCHAR U+0057
-ENCODING 87
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-C6
-C6
-C6
-D6
-D6
-D6
-FE
-6C
-ENDCHAR
-STARTCHAR U+0058
-ENCODING 88
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-CC
-CC
-78
-30
-30
-78
-CC
-CC
-ENDCHAR
-STARTCHAR U+0059
-ENCODING 89
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-CC
-CC
-CC
-78
-38
-30
-60
-C0
-ENDCHAR
-STARTCHAR U+005A
-ENCODING 90
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-7E
-06
-0C
-18
-30
-60
-60
-7E
-ENDCHAR
-STARTCHAR U+005B
-ENCODING 91
-SWIDTH 389 0
-DWIDTH 5 0
-BBX 5 8 0 0
-BITMAP
-78
-60
-60
-60
-60
-60
-60
-78
-ENDCHAR
-STARTCHAR U+005C
-ENCODING 92
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 7 1 1
-BITMAP
-80
-C0
-60
-30
-18
-0C
-04
-ENDCHAR
-STARTCHAR U+005D
-ENCODING 93
-SWIDTH 389 0
-DWIDTH 5 0
-BBX 5 8 0 0
-BITMAP
-78
-18
-18
-18
-18
-18
-18
-78
-ENDCHAR
-STARTCHAR U+005E
-ENCODING 94
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 3 1 5
-BITMAP
-30
-78
-CC
-ENDCHAR
-STARTCHAR U+005F
-ENCODING 95
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 1 0 0
-BITMAP
-7E
-ENDCHAR
-STARTCHAR U+0060
-ENCODING 96
-SWIDTH 311 0
-DWIDTH 4 0
-BBX 3 3 1 5
-BITMAP
-C0
-C0
-60
-ENDCHAR
-STARTCHAR U+0061
-ENCODING 97
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 8 6 0 0
-BITMAP
-3C
-06
-3E
-66
-66
-3D
-ENDCHAR
-STARTCHAR U+0062
-ENCODING 98
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-60
-60
-6C
-76
-66
-66
-76
-6C
-ENDCHAR
-STARTCHAR U+0063
-ENCODING 99
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 6 0 0
-BITMAP
-3C
-66
-60
-60
-66
-3C
-ENDCHAR
-STARTCHAR U+0064
-ENCODING 100
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-0C
-0C
-6C
-DC
-CC
-CC
-DC
-6C
-ENDCHAR
-STARTCHAR U+0065
-ENCODING 101
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 6 6 1 0
-BITMAP
-78
-CC
-FC
-C0
-CC
-78
-ENDCHAR
-STARTCHAR U+0066
-ENCODING 102
-SWIDTH 389 0
-DWIDTH 5 0
-BBX 4 8 1 0
-BITMAP
-70
-C0
-F0
-C0
-C0
-C0
-C0
-C0
-ENDCHAR
-STARTCHAR U+0067
-ENCODING 103
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 7 1 -1
-BITMAP
-6C
-DC
-CC
-DC
-6C
-0C
-78
-ENDCHAR
-STARTCHAR U+0068
-ENCODING 104
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-C0
-C0
-D8
-EC
-CC
-CC
-CC
-CC
-ENDCHAR
-STARTCHAR U+0069
-ENCODING 105
-SWIDTH 233 0
-DWIDTH 3 0
-BBX 2 8 1 0
-BITMAP
-C0
-00
-C0
-C0
-C0
-C0
-C0
-C0
-ENDCHAR
-STARTCHAR U+006A
-ENCODING 106
-SWIDTH 311 0
-DWIDTH 4 0
-BBX 4 9 0 -1
-BITMAP
-30
-00
-30
-30
-30
-30
-30
-30
-60
-ENDCHAR
-STARTCHAR U+006B
-ENCODING 107
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 6 8 0 0
-BITMAP
-60
-60
-64
-6C
-78
-78
-6C
-64
-ENDCHAR
-STARTCHAR U+006C
-ENCODING 108
-SWIDTH 233 0
-DWIDTH 3 0
-BBX 3 8 0 0
-BITMAP
-60
-60
-60
-60
-60
-60
-60
-60
-ENDCHAR
-STARTCHAR U+006D
-ENCODING 109
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 8 6 0 0
-BITMAP
-B6
-DB
-DB
-DB
-DB
-DB
-ENDCHAR
-STARTCHAR U+006E
-ENCODING 110
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 0
-BITMAP
-B8
-CC
-CC
-CC
-CC
-CC
-ENDCHAR
-STARTCHAR U+006F
-ENCODING 111
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 0
-BITMAP
-78
-CC
-CC
-CC
-CC
-78
-ENDCHAR
-STARTCHAR U+0070
-ENCODING 112
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 7 1 -1
-BITMAP
-D8
-EC
-CC
-CC
-EC
-D8
-C0
-ENDCHAR
-STARTCHAR U+0071
-ENCODING 113
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 7 1 -1
-BITMAP
-6C
-DC
-CC
-CC
-DC
-6C
-0C
-ENDCHAR
-STARTCHAR U+0072
-ENCODING 114
-SWIDTH 389 0
-DWIDTH 5 0
-BBX 4 6 1 0
-BITMAP
-B0
-E0
-C0
-C0
-C0
-C0
-ENDCHAR
-STARTCHAR U+0073
-ENCODING 115
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 6 0 0
-BITMAP
-3C
-62
-1C
-06
-66
-3C
-ENDCHAR
-STARTCHAR U+0074
-ENCODING 116
-SWIDTH 389 0
-DWIDTH 5 0
-BBX 5 8 0 0
-BITMAP
-60
-60
-78
-60
-60
-60
-60
-38
-ENDCHAR
-STARTCHAR U+0075
-ENCODING 117
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 6 0 0
-BITMAP
-66
-66
-66
-66
-6E
-36
-ENDCHAR
-STARTCHAR U+0076
-ENCODING 118
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 0
-BITMAP
-CC
-CC
-CC
-78
-78
-30
-ENDCHAR
-STARTCHAR U+0077
-ENCODING 119
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 8 5 0 1
-BITMAP
-99
-DB
-DB
-7E
-76
-ENDCHAR
-STARTCHAR U+0078
-ENCODING 120
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 5 6 1 0
-BITMAP
-88
-D8
-70
-70
-D8
-88
-ENDCHAR
-STARTCHAR U+0079
-ENCODING 121
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 7 1 -1
-BITMAP
-CC
-CC
-CC
-6C
-38
-30
-60
-ENDCHAR
-STARTCHAR U+007A
-ENCODING 122
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 6 6 0 0
-BITMAP
-7C
-0C
-18
-30
-60
-7C
-ENDCHAR
-STARTCHAR U+007B
-ENCODING 123
-SWIDTH 389 0
-DWIDTH 5 0
-BBX 5 7 0 0
-BITMAP
-18
-30
-30
-60
-30
-30
-18
-ENDCHAR
-STARTCHAR U+007C
-ENCODING 124
-SWIDTH 233 0
-DWIDTH 3 0
-BBX 2 8 1 0
-BITMAP
-C0
-C0
-C0
-C0
-C0
-C0
-C0
-C0
-ENDCHAR
-STARTCHAR U+007D
-ENCODING 125
-SWIDTH 389 0
-DWIDTH 5 0
-BBX 4 7 1 1
-BITMAP
-C0
-60
-60
-30
-60
-60
-C0
-ENDCHAR
-STARTCHAR U+007E
-ENCODING 126
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 7 4 1 4
-BITMAP
-60
-F2
-9E
-0C
-ENDCHAR
-STARTCHAR U+007F
-ENCODING 127
-SWIDTH 389 0
-DWIDTH 5 0
-BBX 4 8 1 0
-BITMAP
-90
-30
-60
-D0
-B0
-60
-C0
-80
-ENDCHAR
-STARTCHAR U+00A1
-ENCODING 161
-SWIDTH 233 0
-DWIDTH 3 0
-BBX 2 9 1 0
-BITMAP
-C0
-C0
-00
-C0
-C0
-C0
-C0
-C0
-C0
-ENDCHAR
-STARTCHAR U+00A2
-ENCODING 162
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 -1
-BITMAP
-10
-78
-D4
-D0
-D0
-D4
-78
-10
-ENDCHAR
-STARTCHAR U+00A4
-ENCODING 164
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 1
-BITMAP
-B4
-48
-84
-84
-48
-B4
-ENDCHAR
-STARTCHAR U+00A6
-ENCODING 166
-SWIDTH 233 0
-DWIDTH 3 0
-BBX 3 9 0 0
-BITMAP
-60
-60
-60
-60
-00
-60
-60
-60
-60
-ENDCHAR
-STARTCHAR U+00A7
-ENCODING 167
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 9 2 0
-BITMAP
-38
-6C
-60
-D8
-CC
-6C
-18
-D8
-70
-ENDCHAR
-STARTCHAR U+00A8
-ENCODING 168
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 5 2 1 7
-BITMAP
-D8
-D8
-ENDCHAR
-STARTCHAR U+00A9
-ENCODING 169
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 8 8 0 0
-BITMAP
-3C
-42
-99
-A1
-A1
-99
-42
-3C
-ENDCHAR
-STARTCHAR U+00AA
-ENCODING 170
-SWIDTH 311 0
-DWIDTH 4 0
-BBX 3 5 1 4
-BITMAP
-E0
-20
-E0
-A0
-E0
-ENDCHAR
-STARTCHAR U+00AB
-ENCODING 171
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 1
-BITMAP
-24
-6C
-D8
-D8
-6C
-24
-ENDCHAR
-STARTCHAR U+00AC
-ENCODING 172
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 6 3 2 3
-BITMAP
-FC
-04
-04
-ENDCHAR
-STARTCHAR U+00AD
-ENCODING 173
-SWIDTH 389 0
-DWIDTH 5 0
-BBX 4 1 1 3
-BITMAP
-F0
-ENDCHAR
-STARTCHAR U+00AE
-ENCODING 174
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 8 8 0 0
-BITMAP
-3C
-42
-B9
-A5
-B9
-A5
-42
-3C
-ENDCHAR
-STARTCHAR U+00AF
-ENCODING 175
-SWIDTH 701 0
-DWIDTH 9 0
-BBX 8 1 1 8
-BITMAP
-FF
-ENDCHAR
-STARTCHAR U+00B0
-ENCODING 176
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 5 4 1 4
-BITMAP
-70
-D8
-D8
-70
-ENDCHAR
-STARTCHAR U+00B1
-ENCODING 177
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 5 7 1 0
-BITMAP
-20
-20
-F8
-20
-20
-00
-F8
-ENDCHAR
-STARTCHAR U+00B2
-ENCODING 178
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 5 5 1 3
-BITMAP
-70
-D8
-30
-60
-F8
-ENDCHAR
-STARTCHAR U+00B3
-ENCODING 179
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 5 5 1 3
-BITMAP
-70
-D8
-30
-D8
-70
-ENDCHAR
-STARTCHAR U+00B4
-ENCODING 180
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 3 2 5 6
-BITMAP
-60
-C0
-ENDCHAR
-STARTCHAR U+00B5
-ENCODING 181
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 7 1 -1
-BITMAP
-CC
-CC
-CC
-CC
-F4
-C0
-C0
-ENDCHAR
-STARTCHAR U+00B6
-ENCODING 182
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 9 1 0
-BITMAP
-7C
-E8
-E8
-E8
-68
-28
-28
-28
-28
-ENDCHAR
-STARTCHAR U+00B7
-ENCODING 183
-SWIDTH 233 0
-DWIDTH 3 0
-BBX 2 1 1 4
-BITMAP
-C0
-ENDCHAR
-STARTCHAR U+00BB
-ENCODING 187
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 1
-BITMAP
-90
-D8
-6C
-6C
-D8
-90
-ENDCHAR
-STARTCHAR U+00BF
-ENCODING 191
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-18
-00
-18
-18
-30
-60
-66
-3C
-ENDCHAR
-STARTCHAR U+00C0
-ENCODING 192
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 7 9 1 0
-BITMAP
-60
-30
-78
-CC
-CC
-FC
-CC
-CC
-CC
-ENDCHAR
-STARTCHAR U+00C1
-ENCODING 193
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 9 0 0
-BITMAP
-0C
-18
-3C
-66
-66
-7E
-66
-66
-66
-ENDCHAR
-STARTCHAR U+00C2
-ENCODING 194
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 9 1 0
-BITMAP
-30
-78
-84
-78
-CC
-CC
-FC
-CC
-CC
-ENDCHAR
-STARTCHAR U+00C3
-ENCODING 195
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 9 1 0
-BITMAP
-20
-7C
-08
-78
-CC
-CC
-FC
-CC
-CC
-ENDCHAR
-STARTCHAR U+00C4
-ENCODING 196
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 9 1 0
-BITMAP
-CC
-00
-78
-CC
-CC
-FC
-CC
-CC
-CC
-ENDCHAR
-STARTCHAR U+00C5
-ENCODING 197
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 9 1 0
-BITMAP
-30
-48
-30
-78
-CC
-CC
-FC
-CC
-CC
-ENDCHAR
-STARTCHAR U+00C6
-ENCODING 198
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 8 8 0 0
-BITMAP
-3F
-6C
-6C
-FF
-CC
-CC
-CC
-CF
-ENDCHAR
-STARTCHAR U+00C7
-ENCODING 199
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 10 0 -2
-BITMAP
-3C
-66
-60
-60
-60
-60
-66
-3C
-18
-30
-ENDCHAR
-STARTCHAR U+00C8
-ENCODING 200
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 5 9 1 0
-BITMAP
-60
-30
-F8
-C0
-C0
-F0
-C0
-C0
-F8
-ENDCHAR
-STARTCHAR U+00C9
-ENCODING 201
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 6 9 0 0
-BITMAP
-0C
-18
-7C
-60
-60
-78
-60
-60
-7C
-ENDCHAR
-STARTCHAR U+00CA
-ENCODING 202
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 6 9 0 0
-BITMAP
-10
-38
-44
-7C
-60
-78
-60
-60
-7C
-ENDCHAR
-STARTCHAR U+00CB
-ENCODING 203
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 6 9 0 0
-BITMAP
-6C
-00
-7C
-60
-60
-78
-60
-60
-7C
-ENDCHAR
-STARTCHAR U+00CC
-ENCODING 204
-SWIDTH 389 0
-DWIDTH 5 0
-BBX 5 9 0 0
-BITMAP
-60
-30
-78
-30
-30
-30
-30
-30
-78
-ENDCHAR
-STARTCHAR U+00CD
-ENCODING 205
-SWIDTH 389 0
-DWIDTH 5 0
-BBX 5 9 0 0
-BITMAP
-18
-30
-78
-30
-30
-30
-30
-30
-78
-ENDCHAR
-STARTCHAR U+00CE
-ENCODING 206
-SWIDTH 389 0
-DWIDTH 5 0
-BBX 4 9 1 0
-BITMAP
-60
-90
-F0
-60
-60
-60
-60
-60
-F0
-ENDCHAR
-STARTCHAR U+00CF
-ENCODING 207
-SWIDTH 389 0
-DWIDTH 5 0
-BBX 4 9 1 0
-BITMAP
-90
-00
-F0
-60
-60
-60
-60
-60
-F0
-ENDCHAR
-STARTCHAR U+00D0
-ENCODING 208
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-7C
-66
-66
-F6
-F6
-66
-66
-7C
-ENDCHAR
-STARTCHAR U+00D1
-ENCODING 209
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-36
-6C
-66
-76
-7E
-6E
-66
-66
-ENDCHAR
-STARTCHAR U+00D2
-ENCODING 210
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 9 1 0
-BITMAP
-60
-30
-78
-CC
-CC
-CC
-CC
-CC
-78
-ENDCHAR
-STARTCHAR U+00D3
-ENCODING 211
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 9 0 0
-BITMAP
-0C
-18
-3C
-66
-66
-66
-66
-66
-3C
-ENDCHAR
-STARTCHAR U+00D4
-ENCODING 212
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 9 0 0
-BITMAP
-18
-3C
-66
-3C
-66
-66
-66
-66
-3C
-ENDCHAR
-STARTCHAR U+00D5
-ENCODING 213
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 9 1 0
-BITMAP
-6C
-D8
-78
-CC
-CC
-CC
-CC
-CC
-78
-ENDCHAR
-STARTCHAR U+00D6
-ENCODING 214
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 9 0 0
-BITMAP
-66
-00
-3C
-66
-66
-66
-66
-66
-3C
-ENDCHAR
-STARTCHAR U+00D9
-ENCODING 217
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 9 0 0
-BITMAP
-30
-18
-66
-66
-66
-66
-66
-66
-3C
-ENDCHAR
-STARTCHAR U+00DA
-ENCODING 218
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 9 0 0
-BITMAP
-0C
-18
-66
-66
-66
-66
-66
-66
-3C
-ENDCHAR
-STARTCHAR U+00DB
-ENCODING 219
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 9 0 0
-BITMAP
-18
-3C
-42
-66
-66
-66
-66
-66
-3C
-ENDCHAR
-STARTCHAR U+00DC
-ENCODING 220
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 9 0 0
-BITMAP
-66
-00
-66
-66
-66
-66
-66
-66
-3C
-ENDCHAR
-STARTCHAR U+00DD
-ENCODING 221
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 9 0 0
-BITMAP
-0C
-18
-66
-66
-66
-3C
-18
-18
-18
-ENDCHAR
-STARTCHAR U+00DE
-ENCODING 222
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 9 0 0
-BITMAP
-60
-60
-7C
-66
-66
-7C
-60
-60
-60
-ENDCHAR
-STARTCHAR U+00DF
-ENCODING 223
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 10 1 -2
-BITMAP
-F8
-CC
-CC
-D8
-CC
-CC
-CC
-D8
-C0
-80
-ENDCHAR
-STARTCHAR U+00E0
-ENCODING 224
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 7 8 1 0
-BITMAP
-60
-30
-78
-0C
-7C
-CC
-CC
-72
-ENDCHAR
-STARTCHAR U+00E1
-ENCODING 225
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 1 0
-BITMAP
-18
-30
-78
-0C
-7C
-CC
-CC
-72
-ENDCHAR
-STARTCHAR U+00E2
-ENCODING 226
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 9 1 0
-BITMAP
-10
-38
-44
-78
-0C
-7C
-CC
-CC
-72
-ENDCHAR
-STARTCHAR U+00E3
-ENCODING 227
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 1 0
-BITMAP
-6C
-D8
-78
-0C
-7C
-CC
-CC
-72
-ENDCHAR
-STARTCHAR U+00E4
-ENCODING 228
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 1 0
-BITMAP
-CC
-00
-78
-0C
-7C
-CC
-CC
-72
-ENDCHAR
-STARTCHAR U+00E5
-ENCODING 229
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 9 1 0
-BITMAP
-30
-48
-30
-78
-0C
-7C
-CC
-CC
-72
-ENDCHAR
-STARTCHAR U+00E6
-ENCODING 230
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 8 6 0 0
-BITMAP
-66
-1B
-7F
-D8
-DB
-6E
-ENDCHAR
-STARTCHAR U+00E7
-ENCODING 231
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 -2
-BITMAP
-3C
-66
-60
-60
-66
-3C
-18
-30
-ENDCHAR
-STARTCHAR U+00E8
-ENCODING 232
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-60
-30
-78
-CC
-FC
-C0
-CC
-78
-ENDCHAR
-STARTCHAR U+00E9
-ENCODING 233
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 6 8 1 0
-BITMAP
-18
-30
-78
-CC
-FC
-C0
-CC
-78
-ENDCHAR
-STARTCHAR U+00EA
-ENCODING 234
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 6 9 1 0
-BITMAP
-30
-78
-84
-78
-CC
-FC
-C0
-CC
-78
-ENDCHAR
-STARTCHAR U+00EB
-ENCODING 235
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 6 8 1 0
-BITMAP
-CC
-00
-78
-CC
-FC
-C0
-CC
-78
-ENDCHAR
-STARTCHAR U+00EC
-ENCODING 236
-SWIDTH 311 0
-DWIDTH 4 0
-BBX 3 8 1 0
-BITMAP
-C0
-60
-00
-60
-60
-60
-60
-60
-ENDCHAR
-STARTCHAR U+00ED
-ENCODING 237
-SWIDTH 389 0
-DWIDTH 5 0
-BBX 5 8 0 0
-BITMAP
-18
-30
-00
-30
-30
-30
-30
-30
-ENDCHAR
-STARTCHAR U+00EE
-ENCODING 238
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 9 0 0
-BITMAP
-18
-3C
-66
-00
-18
-18
-18
-18
-18
-ENDCHAR
-STARTCHAR U+00EF
-ENCODING 239
-SWIDTH 389 0
-DWIDTH 5 0
-BBX 4 7 1 0
-BITMAP
-90
-00
-60
-60
-60
-60
-60
-ENDCHAR
-STARTCHAR U+00F0
-ENCODING 240
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 1
-BITMAP
-EC
-38
-38
-0C
-7C
-CC
-CC
-78
-ENDCHAR
-STARTCHAR U+00F1
-ENCODING 241
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-36
-6C
-5C
-66
-66
-66
-66
-66
-ENDCHAR
-STARTCHAR U+00F2
-ENCODING 242
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-30
-18
-3C
-66
-66
-66
-66
-3C
-ENDCHAR
-STARTCHAR U+00F3
-ENCODING 243
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-18
-30
-78
-CC
-CC
-CC
-CC
-78
-ENDCHAR
-STARTCHAR U+00F4
-ENCODING 244
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 6 9 1 0
-BITMAP
-30
-78
-84
-78
-CC
-CC
-CC
-CC
-78
-ENDCHAR
-STARTCHAR U+00F5
-ENCODING 245
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 6 8 1 0
-BITMAP
-6C
-D8
-78
-CC
-CC
-CC
-CC
-78
-ENDCHAR
-STARTCHAR U+00F6
-ENCODING 246
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 6 8 1 0
-BITMAP
-CC
-00
-78
-CC
-CC
-CC
-CC
-78
-ENDCHAR
-STARTCHAR U+00F9
-ENCODING 249
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 8 0 0
-BITMAP
-30
-18
-66
-66
-66
-66
-66
-3C
-ENDCHAR
-STARTCHAR U+00FA
-ENCODING 250
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 6 8 1 0
-BITMAP
-18
-30
-CC
-CC
-CC
-CC
-CC
-78
-ENDCHAR
-STARTCHAR U+00FB
-ENCODING 251
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 6 9 1 0
-BITMAP
-30
-78
-84
-CC
-CC
-CC
-CC
-CC
-78
-ENDCHAR
-STARTCHAR U+00FC
-ENCODING 252
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 6 8 1 0
-BITMAP
-CC
-00
-CC
-CC
-CC
-CC
-CC
-78
-ENDCHAR
-STARTCHAR U+00FD
-ENCODING 253
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 -2
-BITMAP
-18
-30
-CC
-CC
-78
-30
-60
-C0
-ENDCHAR
-STARTCHAR U+00FE
-ENCODING 254
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 6 9 0 -2
-BITMAP
-60
-60
-78
-6C
-6C
-78
-60
-60
-60
-ENDCHAR
-STARTCHAR U+00FF
-ENCODING 255
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 9 1 -2
-BITMAP
-CC
-00
-CC
-CC
-CC
-7C
-0C
-CC
-78
-ENDCHAR
-STARTCHAR U+0401
-ENCODING 1025
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 9 1 0
-BITMAP
-CC
-00
-FC
-C0
-C0
-F0
-C0
-C0
-FC
-ENDCHAR
-STARTCHAR U+0404
-ENCODING 1028
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-78
-CC
-C0
-F0
-C0
-C0
-CC
-78
-ENDCHAR
-STARTCHAR U+0406
-ENCODING 1030
-SWIDTH 233 0
-DWIDTH 3 0
-BBX 2 8 1 0
-BITMAP
-C0
-C0
-C0
-C0
-C0
-C0
-C0
-C0
-ENDCHAR
-STARTCHAR U+0407
-ENCODING 1031
-SWIDTH 389 0
-DWIDTH 5 0
-BBX 4 9 1 0
-BITMAP
-90
-00
-60
-60
-60
-60
-60
-60
-60
-ENDCHAR
-STARTCHAR U+040E
-ENCODING 1038
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 7 9 1 0
-BITMAP
-24
-5A
-46
-2C
-2C
-18
-18
-D0
-60
-ENDCHAR
-STARTCHAR U+0410
-ENCODING 1040
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-3C
-6C
-CC
-CC
-CC
-FC
-CC
-CC
-ENDCHAR
-STARTCHAR U+0411
-ENCODING 1041
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-FC
-C0
-C0
-F8
-CC
-CC
-CC
-F8
-ENDCHAR
-STARTCHAR U+0412
-ENCODING 1042
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-F8
-CC
-CC
-F8
-CC
-CC
-CC
-F8
-ENDCHAR
-STARTCHAR U+0413
-ENCODING 1043
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-FC
-C0
-C0
-C0
-C0
-C0
-C0
-C0
-ENDCHAR
-STARTCHAR U+0414
-ENCODING 1044
-SWIDTH 701 0
-DWIDTH 9 0
-BBX 8 9 1 -1
-BITMAP
-1E
-36
-66
-66
-66
-66
-66
-FF
-81
-ENDCHAR
-STARTCHAR U+0415
-ENCODING 1045
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-FC
-C0
-C0
-F0
-C0
-C0
-C0
-FC
-ENDCHAR
-STARTCHAR U+0416
-ENCODING 1046
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-B4
-B4
-78
-30
-30
-78
-B4
-B4
-ENDCHAR
-STARTCHAR U+0417
-ENCODING 1047
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-78
-CC
-0C
-18
-0C
-0C
-CC
-78
-ENDCHAR
-STARTCHAR U+0418
-ENCODING 1048
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-CC
-CC
-CC
-CC
-DC
-EC
-CC
-CC
-ENDCHAR
-STARTCHAR U+0419
-ENCODING 1049
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 9 1 0
-BITMAP
-48
-B4
-CC
-CC
-CC
-DC
-EC
-CC
-CC
-ENDCHAR
-STARTCHAR U+041A
-ENCODING 1050
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 5 8 1 0
-BITMAP
-C8
-D8
-F0
-E0
-E0
-F0
-D8
-C8
-ENDCHAR
-STARTCHAR U+041B
-ENCODING 1051
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 7 8 1 0
-BITMAP
-3E
-66
-66
-66
-66
-66
-66
-C6
-ENDCHAR
-STARTCHAR U+041C
-ENCODING 1052
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 7 8 1 0
-BITMAP
-C6
-EE
-FE
-D6
-C6
-C6
-C6
-C6
-ENDCHAR
-STARTCHAR U+041D
-ENCODING 1053
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-CC
-CC
-CC
-FC
-CC
-CC
-CC
-CC
-ENDCHAR
-STARTCHAR U+041E
-ENCODING 1054
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-78
-CC
-CC
-CC
-CC
-CC
-CC
-78
-ENDCHAR
-STARTCHAR U+041F
-ENCODING 1055
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-FC
-CC
-CC
-CC
-CC
-CC
-CC
-CC
-ENDCHAR
-STARTCHAR U+0420
-ENCODING 1056
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-F8
-CC
-CC
-CC
-F8
-C0
-C0
-C0
-ENDCHAR
-STARTCHAR U+0421
-ENCODING 1057
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-78
-CC
-C0
-C0
-C0
-C0
-CC
-78
-ENDCHAR
-STARTCHAR U+0422
-ENCODING 1058
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-FC
-30
-30
-30
-30
-30
-30
-30
-ENDCHAR
-STARTCHAR U+0423
-ENCODING 1059
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 7 8 1 0
-BITMAP
-46
-46
-2C
-2C
-18
-18
-D0
-60
-ENDCHAR
-STARTCHAR U+0424
-ENCODING 1060
-SWIDTH 701 0
-DWIDTH 9 0
-BBX 8 8 1 0
-BITMAP
-18
-7E
-DB
-DB
-DB
-7E
-18
-18
-ENDCHAR
-STARTCHAR U+0425
-ENCODING 1061
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-CC
-48
-78
-30
-30
-78
-48
-CC
-ENDCHAR
-STARTCHAR U+0426
-ENCODING 1062
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 7 9 1 -1
-BITMAP
-CC
-CC
-CC
-CC
-CC
-CC
-CC
-FE
-02
-ENDCHAR
-STARTCHAR U+0427
-ENCODING 1063
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-CC
-CC
-CC
-CC
-7C
-0C
-0C
-0C
-ENDCHAR
-STARTCHAR U+0428
-ENCODING 1064
-SWIDTH 701 0
-DWIDTH 9 0
-BBX 8 8 1 0
-BITMAP
-C3
-C3
-DB
-DB
-DB
-DB
-DB
-FF
-ENDCHAR
-STARTCHAR U+0429
-ENCODING 1065
-SWIDTH 779 0
-DWIDTH 10 0
-BBX 9 9 1 -1
-BITMAP
-C300
-C300
-DB00
-DB00
-DB00
-DB00
-DB00
-FF80
-0080
-ENDCHAR
-STARTCHAR U+042A
-ENCODING 1066
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 7 8 1 0
-BITMAP
-E0
-60
-60
-7C
-66
-66
-66
-7C
-ENDCHAR
-STARTCHAR U+042B
-ENCODING 1067
-SWIDTH 701 0
-DWIDTH 9 0
-BBX 8 8 1 0
-BITMAP
-C3
-C3
-C3
-FB
-CF
-CF
-CF
-FB
-ENDCHAR
-STARTCHAR U+042C
-ENCODING 1068
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-C0
-C0
-C0
-F8
-CC
-CC
-CC
-F8
-ENDCHAR
-STARTCHAR U+042D
-ENCODING 1069
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-78
-CC
-0C
-3C
-0C
-0C
-CC
-78
-ENDCHAR
-STARTCHAR U+042E
-ENCODING 1070
-SWIDTH 701 0
-DWIDTH 9 0
-BBX 8 8 1 0
-BITMAP
-CE
-DB
-DB
-FB
-DB
-DB
-DB
-CE
-ENDCHAR
-STARTCHAR U+042F
-ENCODING 1071
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-7C
-CC
-CC
-CC
-7C
-CC
-CC
-CC
-ENDCHAR
-STARTCHAR U+0430
-ENCODING 1072
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 7 6 1 0
-BITMAP
-78
-0C
-7C
-CC
-CC
-7A
-ENDCHAR
-STARTCHAR U+0431
-ENCODING 1073
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-04
-78
-C0
-F8
-CC
-CC
-CC
-78
-ENDCHAR
-STARTCHAR U+0432
-ENCODING 1074
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-70
-D8
-D8
-F0
-F8
-CC
-CC
-78
-ENDCHAR
-STARTCHAR U+0433
-ENCODING 1075
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 5 6 1 0
-BITMAP
-F8
-C0
-C0
-C0
-C0
-C0
-ENDCHAR
-STARTCHAR U+0434
-ENCODING 1076
-SWIDTH 701 0
-DWIDTH 9 0
-BBX 8 7 1 -1
-BITMAP
-3E
-66
-66
-66
-66
-FF
-81
-ENDCHAR
-STARTCHAR U+0435
-ENCODING 1077
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 0
-BITMAP
-78
-CC
-FC
-C0
-CC
-78
-ENDCHAR
-STARTCHAR U+0436
-ENCODING 1078
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 0
-BITMAP
-B4
-FC
-30
-78
-FC
-B4
-ENDCHAR
-STARTCHAR U+0437
-ENCODING 1079
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 0
-BITMAP
-78
-CC
-18
-0C
-CC
-78
-ENDCHAR
-STARTCHAR U+0438
-ENCODING 1080
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 0
-BITMAP
-CC
-CC
-CC
-CC
-CC
-74
-ENDCHAR
-STARTCHAR U+0439
-ENCODING 1081
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-48
-30
-CC
-CC
-CC
-CC
-CC
-74
-ENDCHAR
-STARTCHAR U+043A
-ENCODING 1082
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 5 6 1 0
-BITMAP
-D8
-D8
-E0
-F0
-D8
-D8
-ENDCHAR
-STARTCHAR U+043B
-ENCODING 1083
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 7 6 1 0
-BITMAP
-3E
-66
-66
-66
-66
-C6
-ENDCHAR
-STARTCHAR U+043C
-ENCODING 1084
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 8 6 0 0
-BITMAP
-63
-77
-6B
-63
-63
-63
-ENDCHAR
-STARTCHAR U+043D
-ENCODING 1085
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 0
-BITMAP
-CC
-CC
-FC
-CC
-CC
-CC
-ENDCHAR
-STARTCHAR U+043E
-ENCODING 1086
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 6 0 0
-BITMAP
-3C
-66
-66
-66
-66
-3C
-ENDCHAR
-STARTCHAR U+043F
-ENCODING 1087
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 0
-BITMAP
-F8
-CC
-CC
-CC
-CC
-CC
-ENDCHAR
-STARTCHAR U+0440
-ENCODING 1088
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 0
-BITMAP
-78
-CC
-CC
-F8
-C0
-C0
-ENDCHAR
-STARTCHAR U+0441
-ENCODING 1089
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 0
-BITMAP
-78
-CC
-C0
-C0
-CC
-78
-ENDCHAR
-STARTCHAR U+0442
-ENCODING 1090
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 0
-BITMAP
-FC
-30
-30
-30
-30
-30
-ENDCHAR
-STARTCHAR U+0443
-ENCODING 1091
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 -2
-BITMAP
-CC
-CC
-CC
-CC
-7C
-0C
-CC
-78
-ENDCHAR
-STARTCHAR U+0444
-ENCODING 1092
-SWIDTH 701 0
-DWIDTH 9 0
-BBX 8 6 1 0
-BITMAP
-18
-7E
-DB
-DB
-7E
-18
-ENDCHAR
-STARTCHAR U+0445
-ENCODING 1093
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 0
-BITMAP
-CC
-78
-30
-30
-78
-CC
-ENDCHAR
-STARTCHAR U+0446
-ENCODING 1094
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 7 7 1 -1
-BITMAP
-CC
-CC
-CC
-CC
-CC
-7E
-02
-ENDCHAR
-STARTCHAR U+0447
-ENCODING 1095
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 0
-BITMAP
-CC
-CC
-CC
-7C
-0C
-0C
-ENDCHAR
-STARTCHAR U+0448
-ENCODING 1096
-SWIDTH 701 0
-DWIDTH 9 0
-BBX 8 6 1 0
-BITMAP
-DB
-DB
-DB
-DB
-DB
-7F
-ENDCHAR
-STARTCHAR U+0449
-ENCODING 1097
-SWIDTH 701 0
-DWIDTH 9 0
-BBX 9 7 1 -1
-BITMAP
-DB00
-DB00
-DB00
-DB00
-DB00
-7F80
-0080
-ENDCHAR
-STARTCHAR U+044A
-ENCODING 1098
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 0
-BITMAP
-E0
-60
-78
-6C
-6C
-38
-ENDCHAR
-STARTCHAR U+044B
-ENCODING 1099
-SWIDTH 623 0
-DWIDTH 8 0
-BBX 7 6 1 0
-BITMAP
-C6
-C6
-F6
-DE
-DE
-76
-ENDCHAR
-STARTCHAR U+044C
-ENCODING 1100
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 5 6 1 0
-BITMAP
-C0
-C0
-F0
-D8
-D8
-70
-ENDCHAR
-STARTCHAR U+044D
-ENCODING 1101
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 5 6 1 0
-BITMAP
-70
-D8
-18
-38
-98
-70
-ENDCHAR
-STARTCHAR U+044E
-ENCODING 1102
-SWIDTH 701 0
-DWIDTH 9 0
-BBX 8 6 1 0
-BITMAP
-CE
-DB
-DB
-FB
-DB
-CE
-ENDCHAR
-STARTCHAR U+044F
-ENCODING 1103
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 0
-BITMAP
-78
-CC
-CC
-7C
-CC
-CC
-ENDCHAR
-STARTCHAR U+0451
-ENCODING 1105
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 8 1 0
-BITMAP
-48
-00
-78
-CC
-FC
-C0
-CC
-78
-ENDCHAR
-STARTCHAR U+0454
-ENCODING 1108
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 6 1 0
-BITMAP
-78
-CC
-C0
-F0
-C4
-78
-ENDCHAR
-STARTCHAR U+0456
-ENCODING 1110
-SWIDTH 233 0
-DWIDTH 3 0
-BBX 2 8 1 0
-BITMAP
-C0
-00
-C0
-C0
-C0
-C0
-C0
-C0
-ENDCHAR
-STARTCHAR U+0457
-ENCODING 1111
-SWIDTH 389 0
-DWIDTH 5 0
-BBX 4 8 1 0
-BITMAP
-90
-00
-60
-60
-60
-60
-60
-60
-ENDCHAR
-STARTCHAR U+045E
-ENCODING 1118
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 6 10 1 -2
-BITMAP
-48
-30
-CC
-CC
-CC
-CC
-7C
-0C
-CC
-78
-ENDCHAR
-STARTCHAR U+0490
-ENCODING 1168
-SWIDTH 545 0
-DWIDTH 7 0
-BBX 7 9 0 0
-BITMAP
-02
-7E
-60
-60
-60
-60
-60
-60
-60
-ENDCHAR
-STARTCHAR U+0491
-ENCODING 1169
-SWIDTH 467 0
-DWIDTH 6 0
-BBX 6 8 0 0
-BITMAP
-04
-7C
-60
-60
-60
-60
-60
-60
-ENDCHAR
-ENDFONT
+STARTFONT 2.1
+FONT -simutrans-prop-medium-r-normal--12-120-77-75-P-80-ISO10646-1
+SIZE 12 77 75
+FONTBOUNDINGBOX 10 12 0 -2
+COMMENT "Generated by fontforge, http://fontforge.sourceforge.net"
+STARTPROPERTIES 17
+POINT_SIZE 120
+PIXEL_SIZE 12
+RESOLUTION_X 77
+RESOLUTION_Y 75
+FONT_ASCENT 9
+FONT_DESCENT 3
+AVERAGE_WIDTH 80
+SPACING "P"
+_XMBDFED_INFO "Edited with xmbdfed 4.7."
+FOUNDRY "simutrans"
+FAMILY_NAME "prop"
+WEIGHT_NAME "medium"
+SLANT "r"
+SETWIDTH_NAME "normal"
+ADD_STYLE_NAME ""
+CHARSET_REGISTRY "ISO10646"
+CHARSET_ENCODING "1"
+ENDPROPERTIES
+CHARS 335
+STARTCHAR U+001D
+ENCODING 29
+SWIDTH 701 0
+DWIDTH 9 0
+BBX 8 8 1 0
+BITMAP
+BD
+42
+A5
+99
+99
+A5
+42
+BD
+ENDCHAR
+STARTCHAR U+001E
+ENCODING 30
+SWIDTH 779 0
+DWIDTH 10 0
+BBX 8 8 1 0
+BITMAP
+3C
+42
+A5
+81
+A5
+99
+42
+3C
+ENDCHAR
+STARTCHAR U+001F
+ENCODING 31
+SWIDTH 701 0
+DWIDTH 9 0
+BBX 8 8 1 0
+BITMAP
+3C
+42
+A5
+81
+99
+A5
+42
+3C
+ENDCHAR
+STARTCHAR U+0021
+ENCODING 33
+SWIDTH 233 0
+DWIDTH 3 0
+BBX 2 8 1 0
+BITMAP
+C0
+C0
+C0
+C0
+C0
+00
+C0
+C0
+ENDCHAR
+STARTCHAR U+0022
+ENCODING 34
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 3 1 5
+BITMAP
+6C
+6C
+D8
+ENDCHAR
+STARTCHAR U+0023
+ENCODING 35
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 7 8 1 0
+BITMAP
+6C
+6C
+FE
+6C
+6C
+FE
+6C
+6C
+ENDCHAR
+STARTCHAR U+0024
+ENCODING 36
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 6 9 1 0
+BITMAP
+10
+78
+D4
+D0
+D0
+D0
+D4
+78
+10
+ENDCHAR
+STARTCHAR U+0025
+ENCODING 37
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 7 8 1 0
+BITMAP
+42
+A6
+AC
+58
+34
+6A
+CA
+84
+ENDCHAR
+STARTCHAR U+0026
+ENCODING 38
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 7 8 1 0
+BITMAP
+70
+D8
+D8
+70
+D0
+CE
+CC
+7A
+ENDCHAR
+STARTCHAR U+0027
+ENCODING 39
+SWIDTH 311 0
+DWIDTH 4 0
+BBX 3 3 1 5
+BITMAP
+60
+60
+C0
+ENDCHAR
+STARTCHAR U+0028
+ENCODING 40
+SWIDTH 389 0
+DWIDTH 5 0
+BBX 4 8 1 0
+BITMAP
+30
+60
+C0
+C0
+C0
+C0
+60
+30
+ENDCHAR
+STARTCHAR U+0029
+ENCODING 41
+SWIDTH 389 0
+DWIDTH 5 0
+BBX 4 8 1 0
+BITMAP
+C0
+60
+30
+30
+30
+30
+60
+C0
+ENDCHAR
+STARTCHAR U+002A
+ENCODING 42
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 5 1 2
+BITMAP
+48
+30
+FC
+30
+48
+ENDCHAR
+STARTCHAR U+002B
+ENCODING 43
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 5 1 2
+BITMAP
+30
+30
+FC
+30
+30
+ENDCHAR
+STARTCHAR U+002C
+ENCODING 44
+SWIDTH 389 0
+DWIDTH 5 0
+BBX 3 3 2 -1
+BITMAP
+60
+60
+C0
+ENDCHAR
+STARTCHAR U+002D
+ENCODING 45
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 1 1 4
+BITMAP
+FC
+ENDCHAR
+STARTCHAR U+002E
+ENCODING 46
+SWIDTH 389 0
+DWIDTH 5 0
+BBX 2 2 3 0
+BITMAP
+C0
+C0
+ENDCHAR
+STARTCHAR U+002F
+ENCODING 47
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 7 1 0
+BITMAP
+04
+0C
+18
+30
+60
+C0
+80
+ENDCHAR
+STARTCHAR U+0030
+ENCODING 48
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+78
+CC
+CC
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+0031
+ENCODING 49
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 4 8 2 0
+BITMAP
+E0
+60
+60
+60
+60
+60
+60
+F0
+ENDCHAR
+STARTCHAR U+0032
+ENCODING 50
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+78
+CC
+0C
+18
+30
+60
+C0
+FC
+ENDCHAR
+STARTCHAR U+0033
+ENCODING 51
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+78
+CC
+0C
+18
+0C
+0C
+CC
+78
+ENDCHAR
+STARTCHAR U+0034
+ENCODING 52
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+60
+60
+6C
+CC
+CC
+FC
+0C
+0C
+ENDCHAR
+STARTCHAR U+0035
+ENCODING 53
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+F8
+C0
+C0
+F8
+0C
+0C
+CC
+78
+ENDCHAR
+STARTCHAR U+0036
+ENCODING 54
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+78
+C0
+C0
+F8
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+0037
+ENCODING 55
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+FC
+0C
+18
+18
+18
+30
+30
+30
+ENDCHAR
+STARTCHAR U+0038
+ENCODING 56
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+78
+CC
+CC
+78
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+0039
+ENCODING 57
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+78
+CC
+CC
+CC
+7C
+0C
+0C
+78
+ENDCHAR
+STARTCHAR U+003A
+ENCODING 58
+SWIDTH 233 0
+DWIDTH 3 0
+BBX 2 6 1 0
+BITMAP
+C0
+C0
+00
+00
+C0
+C0
+ENDCHAR
+STARTCHAR U+003B
+ENCODING 59
+SWIDTH 311 0
+DWIDTH 4 0
+BBX 3 7 1 -1
+BITMAP
+60
+60
+00
+00
+60
+60
+C0
+ENDCHAR
+STARTCHAR U+003C
+ENCODING 60
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 1
+BITMAP
+0C
+38
+E0
+E0
+38
+0C
+ENDCHAR
+STARTCHAR U+003D
+ENCODING 61
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 4 1 2
+BITMAP
+FC
+00
+00
+FC
+ENDCHAR
+STARTCHAR U+003E
+ENCODING 62
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 1
+BITMAP
+C0
+70
+1C
+1C
+70
+C0
+ENDCHAR
+STARTCHAR U+003F
+ENCODING 63
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+78
+CC
+0C
+18
+30
+30
+00
+30
+ENDCHAR
+STARTCHAR U+0040
+ENCODING 64
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 7 8 1 0
+BITMAP
+7C
+E6
+DE
+F6
+F6
+DC
+C0
+7C
+ENDCHAR
+STARTCHAR U+0041
+ENCODING 65
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+78
+CC
+CC
+CC
+FC
+CC
+CC
+CC
+ENDCHAR
+STARTCHAR U+0042
+ENCODING 66
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+F8
+CC
+CC
+F8
+CC
+CC
+CC
+F8
+ENDCHAR
+STARTCHAR U+0043
+ENCODING 67
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+78
+CC
+C0
+C0
+C0
+C0
+CC
+78
+ENDCHAR
+STARTCHAR U+0044
+ENCODING 68
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+F8
+CC
+CC
+CC
+CC
+CC
+CC
+F8
+ENDCHAR
+STARTCHAR U+0045
+ENCODING 69
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+FC
+C0
+C0
+F0
+C0
+C0
+C0
+FC
+ENDCHAR
+STARTCHAR U+0046
+ENCODING 70
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+FC
+C0
+C0
+F0
+C0
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR U+0047
+ENCODING 71
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+78
+CC
+C0
+C0
+DC
+CC
+CC
+74
+ENDCHAR
+STARTCHAR U+0048
+ENCODING 72
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+CC
+CC
+CC
+FC
+CC
+CC
+CC
+CC
+ENDCHAR
+STARTCHAR U+0049
+ENCODING 73
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 4 8 2 0
+BITMAP
+F0
+60
+60
+60
+60
+60
+60
+F0
+ENDCHAR
+STARTCHAR U+004A
+ENCODING 74
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 5 8 1 0
+BITMAP
+78
+30
+30
+30
+30
+30
+70
+E0
+ENDCHAR
+STARTCHAR U+004B
+ENCODING 75
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+C4
+CC
+D8
+F0
+F0
+D8
+CC
+C4
+ENDCHAR
+STARTCHAR U+004C
+ENCODING 76
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 5 8 1 0
+BITMAP
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+F8
+ENDCHAR
+STARTCHAR U+004D
+ENCODING 77
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 7 8 1 0
+BITMAP
+82
+C6
+EE
+FE
+D6
+C6
+C6
+C6
+ENDCHAR
+STARTCHAR U+004E
+ENCODING 78
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+CC
+CC
+EC
+EC
+DC
+DC
+CC
+CC
+ENDCHAR
+STARTCHAR U+004F
+ENCODING 79
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+78
+CC
+CC
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+0050
+ENCODING 80
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+F8
+CC
+CC
+CC
+F8
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR U+0051
+ENCODING 81
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+78
+CC
+CC
+CC
+CC
+D4
+D8
+6C
+ENDCHAR
+STARTCHAR U+0052
+ENCODING 82
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+F8
+CC
+CC
+CC
+F8
+F0
+D8
+CC
+ENDCHAR
+STARTCHAR U+0053
+ENCODING 83
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+78
+CC
+C0
+78
+0C
+0C
+CC
+78
+ENDCHAR
+STARTCHAR U+0054
+ENCODING 84
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+FC
+30
+30
+30
+30
+30
+30
+30
+ENDCHAR
+STARTCHAR U+0055
+ENCODING 85
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+CC
+CC
+CC
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+0056
+ENCODING 86
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+CC
+CC
+CC
+78
+78
+78
+30
+30
+ENDCHAR
+STARTCHAR U+0057
+ENCODING 87
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 7 8 0 0
+BITMAP
+C6
+C6
+C6
+D6
+D6
+D6
+FE
+6C
+ENDCHAR
+STARTCHAR U+0058
+ENCODING 88
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+CC
+CC
+78
+30
+30
+78
+CC
+CC
+ENDCHAR
+STARTCHAR U+0059
+ENCODING 89
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+CC
+CC
+CC
+78
+38
+30
+60
+C0
+ENDCHAR
+STARTCHAR U+005A
+ENCODING 90
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+FC
+0C
+18
+30
+60
+C0
+C0
+FC
+ENDCHAR
+STARTCHAR U+005B
+ENCODING 91
+SWIDTH 389 0
+DWIDTH 5 0
+BBX 4 8 1 0
+BITMAP
+F0
+C0
+C0
+C0
+C0
+C0
+C0
+F0
+ENDCHAR
+STARTCHAR U+005C
+ENCODING 92
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 7 1 1
+BITMAP
+80
+C0
+60
+30
+18
+0C
+04
+ENDCHAR
+STARTCHAR U+005D
+ENCODING 93
+SWIDTH 389 0
+DWIDTH 5 0
+BBX 4 8 1 0
+BITMAP
+F0
+30
+30
+30
+30
+30
+30
+F0
+ENDCHAR
+STARTCHAR U+005E
+ENCODING 94
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 3 1 5
+BITMAP
+30
+78
+CC
+ENDCHAR
+STARTCHAR U+005F
+ENCODING 95
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 1 1 0
+BITMAP
+FC
+ENDCHAR
+STARTCHAR U+0060
+ENCODING 96
+SWIDTH 311 0
+DWIDTH 4 0
+BBX 3 3 1 5
+BITMAP
+C0
+C0
+60
+ENDCHAR
+STARTCHAR U+0061
+ENCODING 97
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 7 6 1 0
+BITMAP
+78
+0C
+7C
+CC
+CC
+7A
+ENDCHAR
+STARTCHAR U+0062
+ENCODING 98
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+C0
+C0
+D8
+EC
+CC
+CC
+EC
+D8
+ENDCHAR
+STARTCHAR U+0063
+ENCODING 99
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 0
+BITMAP
+78
+CC
+C0
+C0
+CC
+78
+ENDCHAR
+STARTCHAR U+0064
+ENCODING 100
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+0C
+0C
+6C
+DC
+CC
+CC
+DC
+6C
+ENDCHAR
+STARTCHAR U+0065
+ENCODING 101
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 6 6 1 0
+BITMAP
+78
+CC
+FC
+C0
+CC
+78
+ENDCHAR
+STARTCHAR U+0066
+ENCODING 102
+SWIDTH 389 0
+DWIDTH 5 0
+BBX 4 8 1 0
+BITMAP
+70
+C0
+F0
+C0
+C0
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR U+0067
+ENCODING 103
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 7 1 -1
+BITMAP
+6C
+DC
+CC
+DC
+6C
+0C
+78
+ENDCHAR
+STARTCHAR U+0068
+ENCODING 104
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+C0
+C0
+D8
+EC
+CC
+CC
+CC
+CC
+ENDCHAR
+STARTCHAR U+0069
+ENCODING 105
+SWIDTH 233 0
+DWIDTH 3 0
+BBX 2 8 1 0
+BITMAP
+C0
+00
+C0
+C0
+C0
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR U+006A
+ENCODING 106
+SWIDTH 311 0
+DWIDTH 4 0
+BBX 3 9 1 -1
+BITMAP
+60
+00
+60
+60
+60
+60
+60
+60
+C0
+ENDCHAR
+STARTCHAR U+006B
+ENCODING 107
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 5 8 1 0
+BITMAP
+C0
+C0
+C8
+D8
+F0
+F0
+D8
+C8
+ENDCHAR
+STARTCHAR U+006C
+ENCODING 108
+SWIDTH 233 0
+DWIDTH 3 0
+BBX 2 8 1 0
+BITMAP
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR U+006D
+ENCODING 109
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 8 6 0 0
+BITMAP
+B6
+DB
+DB
+DB
+DB
+DB
+ENDCHAR
+STARTCHAR U+006E
+ENCODING 110
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 0
+BITMAP
+B8
+CC
+CC
+CC
+CC
+CC
+ENDCHAR
+STARTCHAR U+006F
+ENCODING 111
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 0
+BITMAP
+78
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+0070
+ENCODING 112
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 7 1 -1
+BITMAP
+D8
+EC
+CC
+CC
+EC
+D8
+C0
+ENDCHAR
+STARTCHAR U+0071
+ENCODING 113
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 7 1 -1
+BITMAP
+6C
+DC
+CC
+CC
+DC
+6C
+0C
+ENDCHAR
+STARTCHAR U+0072
+ENCODING 114
+SWIDTH 389 0
+DWIDTH 5 0
+BBX 4 6 1 0
+BITMAP
+B0
+E0
+C0
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR U+0073
+ENCODING 115
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 0
+BITMAP
+78
+CC
+60
+18
+CC
+78
+ENDCHAR
+STARTCHAR U+0074
+ENCODING 116
+SWIDTH 389 0
+DWIDTH 5 0
+BBX 4 8 1 0
+BITMAP
+C0
+C0
+F0
+C0
+C0
+C0
+C0
+70
+ENDCHAR
+STARTCHAR U+0075
+ENCODING 117
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 0
+BITMAP
+CC
+CC
+CC
+CC
+DC
+6C
+ENDCHAR
+STARTCHAR U+0076
+ENCODING 118
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 0
+BITMAP
+CC
+CC
+CC
+78
+78
+30
+ENDCHAR
+STARTCHAR U+0077
+ENCODING 119
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 8 5 0 1
+BITMAP
+99
+DB
+DB
+7E
+76
+ENDCHAR
+STARTCHAR U+0078
+ENCODING 120
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 5 6 1 0
+BITMAP
+88
+D8
+70
+70
+D8
+88
+ENDCHAR
+STARTCHAR U+0079
+ENCODING 121
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 7 1 -1
+BITMAP
+CC
+CC
+CC
+6C
+38
+30
+60
+ENDCHAR
+STARTCHAR U+007A
+ENCODING 122
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 5 6 1 0
+BITMAP
+F8
+18
+30
+60
+C0
+F8
+ENDCHAR
+STARTCHAR U+007B
+ENCODING 123
+SWIDTH 389 0
+DWIDTH 5 0
+BBX 4 7 1 0
+BITMAP
+30
+60
+60
+C0
+60
+60
+30
+ENDCHAR
+STARTCHAR U+007C
+ENCODING 124
+SWIDTH 233 0
+DWIDTH 3 0
+BBX 2 8 1 0
+BITMAP
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR U+007D
+ENCODING 125
+SWIDTH 389 0
+DWIDTH 5 0
+BBX 4 7 1 1
+BITMAP
+C0
+60
+60
+30
+60
+60
+C0
+ENDCHAR
+STARTCHAR U+007E
+ENCODING 126
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 7 4 1 4
+BITMAP
+60
+F2
+9E
+0C
+ENDCHAR
+STARTCHAR U+007F
+ENCODING 127
+SWIDTH 389 0
+DWIDTH 5 0
+BBX 4 8 1 0
+BITMAP
+90
+30
+60
+D0
+B0
+60
+C0
+80
+ENDCHAR
+STARTCHAR U+00A1
+ENCODING 161
+SWIDTH 233 0
+DWIDTH 3 0
+BBX 2 9 1 0
+BITMAP
+C0
+C0
+00
+C0
+C0
+C0
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR U+00A2
+ENCODING 162
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 -1
+BITMAP
+10
+78
+D4
+D0
+D0
+D4
+78
+10
+ENDCHAR
+STARTCHAR U+00A4
+ENCODING 164
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 1
+BITMAP
+B4
+48
+84
+84
+48
+B4
+ENDCHAR
+STARTCHAR U+00A6
+ENCODING 166
+SWIDTH 233 0
+DWIDTH 3 0
+BBX 2 9 1 0
+BITMAP
+C0
+C0
+C0
+C0
+00
+C0
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR U+00A7
+ENCODING 167
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 2 0
+BITMAP
+38
+6C
+60
+D8
+CC
+6C
+18
+D8
+70
+ENDCHAR
+STARTCHAR U+00A8
+ENCODING 168
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 5 2 1 7
+BITMAP
+D8
+D8
+ENDCHAR
+STARTCHAR U+00A9
+ENCODING 169
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 8 8 0 0
+BITMAP
+3C
+42
+99
+A1
+A1
+99
+42
+3C
+ENDCHAR
+STARTCHAR U+00AA
+ENCODING 170
+SWIDTH 311 0
+DWIDTH 4 0
+BBX 3 5 1 4
+BITMAP
+E0
+20
+E0
+A0
+E0
+ENDCHAR
+STARTCHAR U+00AB
+ENCODING 171
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 1
+BITMAP
+24
+6C
+D8
+D8
+6C
+24
+ENDCHAR
+STARTCHAR U+00AC
+ENCODING 172
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 6 3 2 3
+BITMAP
+FC
+04
+04
+ENDCHAR
+STARTCHAR U+00AD
+ENCODING 173
+SWIDTH 389 0
+DWIDTH 5 0
+BBX 4 1 1 3
+BITMAP
+F0
+ENDCHAR
+STARTCHAR U+00AE
+ENCODING 174
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 8 8 0 0
+BITMAP
+3C
+42
+B9
+A5
+B9
+A5
+42
+3C
+ENDCHAR
+STARTCHAR U+00AF
+ENCODING 175
+SWIDTH 701 0
+DWIDTH 9 0
+BBX 8 1 1 8
+BITMAP
+FF
+ENDCHAR
+STARTCHAR U+00B0
+ENCODING 176
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 5 4 1 4
+BITMAP
+70
+D8
+D8
+70
+ENDCHAR
+STARTCHAR U+00B1
+ENCODING 177
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 5 7 1 0
+BITMAP
+20
+20
+F8
+20
+20
+00
+F8
+ENDCHAR
+STARTCHAR U+00B2
+ENCODING 178
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 5 5 1 3
+BITMAP
+70
+D8
+30
+60
+F8
+ENDCHAR
+STARTCHAR U+00B3
+ENCODING 179
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 5 5 1 3
+BITMAP
+70
+D8
+30
+D8
+70
+ENDCHAR
+STARTCHAR U+00B4
+ENCODING 180
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 3 2 5 6
+BITMAP
+60
+C0
+ENDCHAR
+STARTCHAR U+00B5
+ENCODING 181
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 7 1 -1
+BITMAP
+CC
+CC
+CC
+CC
+F4
+C0
+C0
+ENDCHAR
+STARTCHAR U+00B6
+ENCODING 182
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 0
+BITMAP
+7C
+E8
+E8
+E8
+68
+28
+28
+28
+28
+ENDCHAR
+STARTCHAR U+00B7
+ENCODING 183
+SWIDTH 233 0
+DWIDTH 3 0
+BBX 2 1 1 4
+BITMAP
+C0
+ENDCHAR
+STARTCHAR U+00BB
+ENCODING 187
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 1
+BITMAP
+90
+D8
+6C
+6C
+D8
+90
+ENDCHAR
+STARTCHAR U+00BF
+ENCODING 191
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+30
+00
+30
+30
+60
+C0
+CC
+78
+ENDCHAR
+STARTCHAR U+00C0
+ENCODING 192
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 6 9 1 0
+BITMAP
+60
+30
+78
+CC
+CC
+FC
+CC
+CC
+CC
+ENDCHAR
+STARTCHAR U+00C1
+ENCODING 193
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 0
+BITMAP
+18
+30
+78
+CC
+CC
+FC
+CC
+CC
+CC
+ENDCHAR
+STARTCHAR U+00C2
+ENCODING 194
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 0
+BITMAP
+30
+78
+84
+78
+CC
+CC
+FC
+CC
+CC
+ENDCHAR
+STARTCHAR U+00C3
+ENCODING 195
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 0
+BITMAP
+20
+7C
+08
+78
+CC
+CC
+FC
+CC
+CC
+ENDCHAR
+STARTCHAR U+00C4
+ENCODING 196
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 0
+BITMAP
+CC
+00
+78
+CC
+CC
+FC
+CC
+CC
+CC
+ENDCHAR
+STARTCHAR U+00C5
+ENCODING 197
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 0
+BITMAP
+30
+48
+30
+78
+CC
+CC
+FC
+CC
+CC
+ENDCHAR
+STARTCHAR U+00C6
+ENCODING 198
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 8 8 0 0
+BITMAP
+3F
+6C
+6C
+FF
+CC
+CC
+CC
+CF
+ENDCHAR
+STARTCHAR U+00C7
+ENCODING 199
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 10 1 -2
+BITMAP
+78
+CC
+C0
+C0
+C0
+C0
+CC
+78
+30
+60
+ENDCHAR
+STARTCHAR U+00C8
+ENCODING 200
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 5 9 1 0
+BITMAP
+60
+30
+F8
+C0
+C0
+F0
+C0
+C0
+F8
+ENDCHAR
+STARTCHAR U+00C9
+ENCODING 201
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 5 9 1 0
+BITMAP
+18
+30
+F8
+C0
+C0
+F0
+C0
+C0
+F8
+ENDCHAR
+STARTCHAR U+00CA
+ENCODING 202
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 5 9 1 0
+BITMAP
+20
+70
+88
+F8
+C0
+F0
+C0
+C0
+F8
+ENDCHAR
+STARTCHAR U+00CB
+ENCODING 203
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 5 9 1 0
+BITMAP
+D8
+00
+F8
+C0
+C0
+F0
+C0
+C0
+F8
+ENDCHAR
+STARTCHAR U+00CC
+ENCODING 204
+SWIDTH 389 0
+DWIDTH 5 0
+BBX 4 9 1 0
+BITMAP
+C0
+60
+F0
+60
+60
+60
+60
+60
+F0
+ENDCHAR
+STARTCHAR U+00CD
+ENCODING 205
+SWIDTH 389 0
+DWIDTH 5 0
+BBX 4 9 1 0
+BITMAP
+30
+60
+F0
+60
+60
+60
+60
+60
+F0
+ENDCHAR
+STARTCHAR U+00CE
+ENCODING 206
+SWIDTH 389 0
+DWIDTH 5 0
+BBX 4 9 1 0
+BITMAP
+60
+90
+F0
+60
+60
+60
+60
+60
+F0
+ENDCHAR
+STARTCHAR U+00CF
+ENCODING 207
+SWIDTH 389 0
+DWIDTH 5 0
+BBX 4 9 1 0
+BITMAP
+90
+00
+F0
+60
+60
+60
+60
+60
+F0
+ENDCHAR
+STARTCHAR U+00D0
+ENCODING 208
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 7 8 0 0
+BITMAP
+7C
+66
+66
+F6
+F6
+66
+66
+7C
+ENDCHAR
+STARTCHAR U+00D1
+ENCODING 209
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+6C
+D8
+CC
+EC
+FC
+DC
+CC
+CC
+ENDCHAR
+STARTCHAR U+00D2
+ENCODING 210
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 0
+BITMAP
+60
+30
+78
+CC
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+00D3
+ENCODING 211
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 0
+BITMAP
+18
+30
+78
+CC
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+00D4
+ENCODING 212
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 0
+BITMAP
+30
+78
+CC
+78
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+00D5
+ENCODING 213
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 0
+BITMAP
+6C
+D8
+78
+CC
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+00D6
+ENCODING 214
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 0
+BITMAP
+CC
+00
+78
+CC
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+00D9
+ENCODING 217
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 0
+BITMAP
+60
+30
+CC
+CC
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+00DA
+ENCODING 218
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 0
+BITMAP
+18
+30
+CC
+CC
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+00DB
+ENCODING 219
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 0
+BITMAP
+30
+78
+84
+CC
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+00DC
+ENCODING 220
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 0
+BITMAP
+CC
+00
+CC
+CC
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+00DD
+ENCODING 221
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 0
+BITMAP
+18
+30
+CC
+CC
+CC
+78
+30
+30
+30
+ENDCHAR
+STARTCHAR U+00DE
+ENCODING 222
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 0
+BITMAP
+C0
+C0
+F8
+CC
+CC
+F8
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR U+00DF
+ENCODING 223
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 10 1 -2
+BITMAP
+78
+CC
+CC
+D8
+CC
+CC
+CC
+D8
+C0
+80
+ENDCHAR
+STARTCHAR U+00E0
+ENCODING 224
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 7 8 1 0
+BITMAP
+60
+30
+78
+0C
+7C
+CC
+CC
+72
+ENDCHAR
+STARTCHAR U+00E1
+ENCODING 225
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 7 8 1 0
+BITMAP
+18
+30
+78
+0C
+7C
+CC
+CC
+72
+ENDCHAR
+STARTCHAR U+00E2
+ENCODING 226
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 7 9 1 0
+BITMAP
+10
+38
+44
+78
+0C
+7C
+CC
+CC
+72
+ENDCHAR
+STARTCHAR U+00E3
+ENCODING 227
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 7 8 1 0
+BITMAP
+6C
+D8
+78
+0C
+7C
+CC
+CC
+72
+ENDCHAR
+STARTCHAR U+00E4
+ENCODING 228
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 7 8 1 0
+BITMAP
+CC
+00
+78
+0C
+7C
+CC
+CC
+72
+ENDCHAR
+STARTCHAR U+00E5
+ENCODING 229
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 7 9 1 0
+BITMAP
+30
+48
+30
+78
+0C
+7C
+CC
+CC
+72
+ENDCHAR
+STARTCHAR U+00E6
+ENCODING 230
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 8 6 0 0
+BITMAP
+66
+1B
+7F
+D8
+DB
+6E
+ENDCHAR
+STARTCHAR U+00E7
+ENCODING 231
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 -2
+BITMAP
+78
+CC
+C0
+C0
+CC
+78
+30
+60
+ENDCHAR
+STARTCHAR U+00E8
+ENCODING 232
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+60
+30
+78
+CC
+FC
+C0
+CC
+78
+ENDCHAR
+STARTCHAR U+00E9
+ENCODING 233
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 6 8 1 0
+BITMAP
+18
+30
+78
+CC
+FC
+C0
+CC
+78
+ENDCHAR
+STARTCHAR U+00EA
+ENCODING 234
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 6 9 1 0
+BITMAP
+30
+78
+84
+78
+CC
+FC
+C0
+CC
+78
+ENDCHAR
+STARTCHAR U+00EB
+ENCODING 235
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 6 8 1 0
+BITMAP
+CC
+00
+78
+CC
+FC
+C0
+CC
+78
+ENDCHAR
+STARTCHAR U+00EC
+ENCODING 236
+SWIDTH 311 0
+DWIDTH 4 0
+BBX 3 8 1 0
+BITMAP
+C0
+60
+00
+60
+60
+60
+60
+60
+ENDCHAR
+STARTCHAR U+00ED
+ENCODING 237
+SWIDTH 389 0
+DWIDTH 5 0
+BBX 3 8 2 0
+BITMAP
+60
+C0
+00
+C0
+C0
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR U+00EE
+ENCODING 238
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 0
+BITMAP
+30
+78
+CC
+00
+30
+30
+30
+30
+30
+ENDCHAR
+STARTCHAR U+00EF
+ENCODING 239
+SWIDTH 389 0
+DWIDTH 5 0
+BBX 4 7 1 0
+BITMAP
+90
+00
+60
+60
+60
+60
+60
+ENDCHAR
+STARTCHAR U+00F0
+ENCODING 240
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 1
+BITMAP
+EC
+38
+38
+0C
+7C
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+00F1
+ENCODING 241
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+6C
+D8
+B8
+CC
+CC
+CC
+CC
+CC
+ENDCHAR
+STARTCHAR U+00F2
+ENCODING 242
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+60
+30
+78
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+00F3
+ENCODING 243
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+18
+30
+78
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+00F4
+ENCODING 244
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 6 9 1 0
+BITMAP
+30
+78
+84
+78
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+00F5
+ENCODING 245
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 6 8 1 0
+BITMAP
+6C
+D8
+78
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+00F6
+ENCODING 246
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 6 8 1 0
+BITMAP
+CC
+00
+78
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+00F9
+ENCODING 249
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+60
+30
+CC
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+00FA
+ENCODING 250
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 6 8 1 0
+BITMAP
+18
+30
+CC
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+00FB
+ENCODING 251
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 6 9 1 0
+BITMAP
+30
+78
+84
+CC
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+00FC
+ENCODING 252
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 6 8 1 0
+BITMAP
+CC
+00
+CC
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+00FD
+ENCODING 253
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 -2
+BITMAP
+18
+30
+CC
+CC
+78
+30
+60
+C0
+ENDCHAR
+STARTCHAR U+00FE
+ENCODING 254
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 5 9 1 -2
+BITMAP
+C0
+C0
+F0
+D8
+D8
+F0
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR U+00FF
+ENCODING 255
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 -2
+BITMAP
+CC
+00
+CC
+CC
+CC
+7C
+0C
+CC
+78
+ENDCHAR
+STARTCHAR Gbreve
+ENCODING 286
+SWIDTH 1000 0
+DWIDTH 7 0
+BBX 6 10 1 0
+BITMAP
+48
+30
+00
+78
+CC
+C0
+DC
+CC
+CC
+74
+ENDCHAR
+STARTCHAR gbreve
+ENCODING 287
+SWIDTH 1000 0
+DWIDTH 7 0
+BBX 6 10 1 -1
+BITMAP
+48
+30
+00
+6C
+DC
+CC
+DC
+6C
+0C
+78
+ENDCHAR
+STARTCHAR Idotaccent
+ENCODING 304
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 4 10 2 0
+BITMAP
+60
+00
+F0
+60
+60
+60
+60
+60
+60
+F0
+ENDCHAR
+STARTCHAR dotlessi
+ENCODING 305
+SWIDTH 1000 0
+DWIDTH 3 0
+BBX 2 6 1 0
+BITMAP
+C0
+C0
+C0
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR Scedilla
+ENCODING 350
+SWIDTH 1000 0
+DWIDTH 7 0
+BBX 6 10 1 -2
+BITMAP
+78
+CC
+C0
+78
+0C
+0C
+CC
+78
+30
+E0
+ENDCHAR
+STARTCHAR scedilla
+ENCODING 351
+SWIDTH 1000 0
+DWIDTH 7 0
+BBX 6 8 1 -2
+BITMAP
+78
+C4
+60
+18
+CC
+78
+30
+60
+ENDCHAR
+STARTCHAR tonos
+ENCODING 900
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 3 2 2 7
+BITMAP
+60
+C0
+ENDCHAR
+STARTCHAR dieresistonos
+ENCODING 901
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 4 4 1 6
+BITMAP
+30
+60
+00
+D0
+ENDCHAR
+STARTCHAR Alphatonos
+ENCODING 902
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 10 0 0
+BITMAP
+18
+30
+00
+78
+CC
+CC
+FC
+CC
+CC
+CC
+ENDCHAR
+STARTCHAR anoteleia
+ENCODING 903
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 3 2 2 3
+BITMAP
+E0
+E0
+ENDCHAR
+STARTCHAR Epsilontonos
+ENCODING 904
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 10 0 0
+BITMAP
+18
+30
+00
+FC
+C0
+C0
+F8
+C0
+C0
+FC
+ENDCHAR
+STARTCHAR Etatonos
+ENCODING 905
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 10 0 0
+BITMAP
+18
+30
+00
+CC
+CC
+CC
+FC
+CC
+CC
+CC
+ENDCHAR
+STARTCHAR Iotatonos
+ENCODING 906
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 4 10 1 0
+BITMAP
+30
+60
+00
+F0
+60
+60
+60
+60
+60
+F0
+ENDCHAR
+STARTCHAR Omicrontonos
+ENCODING 908
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 10 0 0
+BITMAP
+18
+30
+00
+78
+CC
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR Upsilontonos
+ENCODING 910
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 10 0 0
+BITMAP
+18
+30
+00
+CC
+CC
+68
+30
+30
+30
+30
+ENDCHAR
+STARTCHAR Omegatonos
+ENCODING 911
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 10 0 0
+BITMAP
+18
+30
+00
+78
+CC
+CC
+CC
+CC
+68
+EC
+ENDCHAR
+STARTCHAR iotadieresistonos
+ENCODING 912
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 5 10 1 0
+BITMAP
+30
+60
+00
+D0
+00
+60
+60
+60
+68
+30
+ENDCHAR
+STARTCHAR Alpha
+ENCODING 913
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+78
+CC
+CC
+FC
+CC
+CC
+CC
+ENDCHAR
+STARTCHAR Beta
+ENCODING 914
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+F8
+CC
+CC
+F8
+CC
+CC
+F8
+ENDCHAR
+STARTCHAR Gamma
+ENCODING 915
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+FC
+C0
+C0
+C0
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR Delta
+ENCODING 916
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+30
+30
+68
+68
+CC
+CC
+FC
+ENDCHAR
+STARTCHAR Epsilon
+ENCODING 917
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+FC
+C0
+C0
+F8
+C0
+C0
+FC
+ENDCHAR
+STARTCHAR Zeta
+ENCODING 918
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+FC
+0C
+18
+30
+60
+C0
+FC
+ENDCHAR
+STARTCHAR Eta
+ENCODING 919
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+CC
+CC
+CC
+FC
+CC
+CC
+CC
+ENDCHAR
+STARTCHAR Theta
+ENCODING 920
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+78
+CC
+CC
+FC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR Iota
+ENCODING 921
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 4 7 1 0
+BITMAP
+F0
+60
+60
+60
+60
+60
+F0
+ENDCHAR
+STARTCHAR Kappa
+ENCODING 922
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+CC
+D8
+D0
+E0
+D0
+D8
+CC
+ENDCHAR
+STARTCHAR Lambda
+ENCODING 923
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+30
+30
+68
+68
+CC
+CC
+CC
+ENDCHAR
+STARTCHAR Mu
+ENCODING 924
+SWIDTH 1000 0
+DWIDTH 8 0
+BBX 7 8 1 0
+BITMAP
+82
+C6
+EE
+FE
+D6
+C6
+C6
+C6
+ENDCHAR
+STARTCHAR Nu
+ENCODING 925
+SWIDTH 1000 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+CC
+CC
+EC
+EC
+DC
+DC
+CC
+CC
+ENDCHAR
+STARTCHAR Xi
+ENCODING 926
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+FC
+00
+00
+78
+00
+00
+FC
+ENDCHAR
+STARTCHAR Omicron
+ENCODING 927
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+78
+CC
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR Pi
+ENCODING 928
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+FC
+CC
+CC
+CC
+CC
+CC
+CC
+ENDCHAR
+STARTCHAR Rho
+ENCODING 929
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+F8
+CC
+CC
+F8
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR Sigma
+ENCODING 931
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+FC
+60
+30
+18
+30
+60
+FC
+ENDCHAR
+STARTCHAR Tau
+ENCODING 932
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+FC
+30
+30
+30
+30
+30
+30
+ENDCHAR
+STARTCHAR Upsilon
+ENCODING 933
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+CC
+CC
+68
+30
+30
+30
+30
+ENDCHAR
+STARTCHAR Phi
+ENCODING 934
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+30
+78
+D4
+D4
+D4
+78
+30
+ENDCHAR
+STARTCHAR Chi
+ENCODING 935
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+CC
+CC
+68
+30
+68
+CC
+CC
+ENDCHAR
+STARTCHAR Psi
+ENCODING 936
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+D4
+D4
+D4
+D4
+78
+30
+30
+ENDCHAR
+STARTCHAR Omega
+ENCODING 937
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+78
+CC
+CC
+CC
+CC
+68
+EC
+ENDCHAR
+STARTCHAR Iotadieresis
+ENCODING 938
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 4 9 1 0
+BITMAP
+D0
+00
+F0
+60
+60
+60
+60
+60
+F0
+ENDCHAR
+STARTCHAR Upsilondieresis
+ENCODING 939
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 9 0 0
+BITMAP
+68
+00
+CC
+CC
+68
+30
+30
+30
+30
+ENDCHAR
+STARTCHAR alphatonos
+ENCODING 940
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 8 0 0
+BITMAP
+18
+30
+00
+74
+DC
+CC
+DC
+74
+ENDCHAR
+STARTCHAR epsilontonos
+ENCODING 941
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 8 0 0
+BITMAP
+18
+30
+00
+78
+CC
+70
+CC
+78
+ENDCHAR
+STARTCHAR etatonos
+ENCODING 942
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 10 0 -2
+BITMAP
+18
+30
+00
+D8
+EC
+CC
+CC
+CC
+0C
+0C
+ENDCHAR
+STARTCHAR iotatonos
+ENCODING 943
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 4 8 1 0
+BITMAP
+60
+C0
+00
+C0
+C0
+C0
+D0
+60
+ENDCHAR
+STARTCHAR upsilondieresistonos
+ENCODING 944
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 10 0 0
+BITMAP
+18
+30
+00
+68
+00
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR alpha
+ENCODING 945
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 5 0 0
+BITMAP
+74
+DC
+CC
+DC
+74
+ENDCHAR
+STARTCHAR beta
+ENCODING 946
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 9 0 -2
+BITMAP
+70
+D8
+D8
+F8
+CC
+CC
+F8
+C0
+C0
+ENDCHAR
+STARTCHAR gamma
+ENCODING 947
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 -2
+BITMAP
+CC
+CC
+68
+68
+30
+30
+30
+ENDCHAR
+STARTCHAR delta
+ENCODING 948
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+78
+C0
+78
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR epsilon
+ENCODING 949
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 5 0 0
+BITMAP
+78
+CC
+70
+CC
+78
+ENDCHAR
+STARTCHAR zeta
+ENCODING 950
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 8 0 -1
+BITMAP
+FC
+30
+60
+60
+60
+38
+0C
+38
+ENDCHAR
+STARTCHAR eta
+ENCODING 951
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 -2
+BITMAP
+D8
+EC
+CC
+CC
+CC
+0C
+0C
+ENDCHAR
+STARTCHAR theta
+ENCODING 952
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 5 7 1 0
+BITMAP
+70
+D8
+D8
+F8
+D8
+D8
+70
+ENDCHAR
+STARTCHAR iota
+ENCODING 953
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 4 5 1 0
+BITMAP
+C0
+C0
+C0
+D0
+60
+ENDCHAR
+STARTCHAR kappa
+ENCODING 954
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 5 5 1 0
+BITMAP
+D8
+D0
+E0
+D0
+D8
+ENDCHAR
+STARTCHAR lambda
+ENCODING 955
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+78
+CC
+0C
+74
+DC
+CC
+CC
+ENDCHAR
+STARTCHAR mu
+ENCODING 956
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 -2
+BITMAP
+CC
+CC
+CC
+DC
+F4
+C0
+C0
+ENDCHAR
+STARTCHAR nu
+ENCODING 957
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 5 0 0
+BITMAP
+CC
+CC
+68
+68
+30
+ENDCHAR
+STARTCHAR xi
+ENCODING 958
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 9 0 -2
+BITMAP
+FC
+30
+60
+78
+C0
+C0
+78
+0C
+18
+ENDCHAR
+STARTCHAR omicron
+ENCODING 959
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 5 0 0
+BITMAP
+78
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR pi
+ENCODING 960
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 5 0 0
+BITMAP
+FC
+68
+68
+68
+68
+ENDCHAR
+STARTCHAR rho
+ENCODING 961
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 -2
+BITMAP
+78
+CC
+CC
+EC
+D8
+C0
+C0
+ENDCHAR
+STARTCHAR sigma1
+ENCODING 962
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 -2
+BITMAP
+78
+CC
+C0
+C0
+78
+0C
+38
+ENDCHAR
+STARTCHAR sigma
+ENCODING 963
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 5 0 0
+BITMAP
+7C
+D8
+CC
+CC
+78
+ENDCHAR
+STARTCHAR tau
+ENCODING 964
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 5 0 0
+BITMAP
+FC
+30
+30
+34
+18
+ENDCHAR
+STARTCHAR upsilon
+ENCODING 965
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 5 0 0
+BITMAP
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR phi
+ENCODING 966
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 -2
+BITMAP
+18
+D4
+D4
+D4
+78
+30
+30
+ENDCHAR
+STARTCHAR chi
+ENCODING 967
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 -2
+BITMAP
+CC
+CC
+68
+30
+68
+CC
+CC
+ENDCHAR
+STARTCHAR psi
+ENCODING 968
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 -2
+BITMAP
+D4
+D4
+D4
+D4
+78
+30
+30
+ENDCHAR
+STARTCHAR omega
+ENCODING 969
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 5 0 0
+BITMAP
+68
+CC
+D4
+D4
+68
+ENDCHAR
+STARTCHAR iotadieresis
+ENCODING 970
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 5 7 1 0
+BITMAP
+D0
+00
+60
+60
+60
+68
+30
+ENDCHAR
+STARTCHAR upsilondieresis
+ENCODING 971
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 7 0 0
+BITMAP
+68
+00
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR omicrontonos
+ENCODING 972
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 8 0 0
+BITMAP
+18
+30
+00
+78
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR upsilontonos
+ENCODING 973
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 8 0 0
+BITMAP
+18
+30
+00
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR omegatonos
+ENCODING 974
+SWIDTH 1000 0
+DWIDTH 6 0
+BBX 6 8 0 0
+BITMAP
+18
+30
+00
+68
+CC
+D4
+D4
+68
+ENDCHAR
+STARTCHAR U+0401
+ENCODING 1025
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 0
+BITMAP
+CC
+00
+FC
+C0
+C0
+F0
+C0
+C0
+FC
+ENDCHAR
+STARTCHAR U+0404
+ENCODING 1028
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+78
+CC
+C0
+F0
+C0
+C0
+CC
+78
+ENDCHAR
+STARTCHAR U+0406
+ENCODING 1030
+SWIDTH 233 0
+DWIDTH 3 0
+BBX 2 8 1 0
+BITMAP
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR U+0407
+ENCODING 1031
+SWIDTH 389 0
+DWIDTH 5 0
+BBX 4 9 1 0
+BITMAP
+90
+00
+60
+60
+60
+60
+60
+60
+60
+ENDCHAR
+STARTCHAR U+040E
+ENCODING 1038
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 7 9 1 0
+BITMAP
+24
+5A
+46
+2C
+2C
+18
+18
+D0
+60
+ENDCHAR
+STARTCHAR U+0410
+ENCODING 1040
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+3C
+6C
+CC
+CC
+CC
+FC
+CC
+CC
+ENDCHAR
+STARTCHAR U+0411
+ENCODING 1041
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+FC
+C0
+C0
+F8
+CC
+CC
+CC
+F8
+ENDCHAR
+STARTCHAR U+0412
+ENCODING 1042
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+F8
+CC
+CC
+F8
+CC
+CC
+CC
+F8
+ENDCHAR
+STARTCHAR U+0413
+ENCODING 1043
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+FC
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR U+0414
+ENCODING 1044
+SWIDTH 701 0
+DWIDTH 9 0
+BBX 8 9 1 -1
+BITMAP
+1E
+36
+66
+66
+66
+66
+66
+FF
+81
+ENDCHAR
+STARTCHAR U+0415
+ENCODING 1045
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+FC
+C0
+C0
+F0
+C0
+C0
+C0
+FC
+ENDCHAR
+STARTCHAR U+0416
+ENCODING 1046
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+B4
+B4
+78
+30
+30
+78
+B4
+B4
+ENDCHAR
+STARTCHAR U+0417
+ENCODING 1047
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+78
+CC
+0C
+18
+0C
+0C
+CC
+78
+ENDCHAR
+STARTCHAR U+0418
+ENCODING 1048
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+CC
+CC
+CC
+CC
+DC
+EC
+CC
+CC
+ENDCHAR
+STARTCHAR U+0419
+ENCODING 1049
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 0
+BITMAP
+48
+B4
+CC
+CC
+CC
+DC
+EC
+CC
+CC
+ENDCHAR
+STARTCHAR U+041A
+ENCODING 1050
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 5 8 1 0
+BITMAP
+C8
+D8
+F0
+E0
+E0
+F0
+D8
+C8
+ENDCHAR
+STARTCHAR U+041B
+ENCODING 1051
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 7 8 1 0
+BITMAP
+3E
+66
+66
+66
+66
+66
+66
+C6
+ENDCHAR
+STARTCHAR U+041C
+ENCODING 1052
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 7 8 1 0
+BITMAP
+C6
+EE
+FE
+D6
+C6
+C6
+C6
+C6
+ENDCHAR
+STARTCHAR U+041D
+ENCODING 1053
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+CC
+CC
+CC
+FC
+CC
+CC
+CC
+CC
+ENDCHAR
+STARTCHAR U+041E
+ENCODING 1054
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+78
+CC
+CC
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+041F
+ENCODING 1055
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+FC
+CC
+CC
+CC
+CC
+CC
+CC
+CC
+ENDCHAR
+STARTCHAR U+0420
+ENCODING 1056
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+F8
+CC
+CC
+CC
+F8
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR U+0421
+ENCODING 1057
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+78
+CC
+C0
+C0
+C0
+C0
+CC
+78
+ENDCHAR
+STARTCHAR U+0422
+ENCODING 1058
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+FC
+30
+30
+30
+30
+30
+30
+30
+ENDCHAR
+STARTCHAR U+0423
+ENCODING 1059
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 7 8 1 0
+BITMAP
+46
+46
+2C
+2C
+18
+18
+D0
+60
+ENDCHAR
+STARTCHAR U+0424
+ENCODING 1060
+SWIDTH 701 0
+DWIDTH 9 0
+BBX 8 8 1 0
+BITMAP
+18
+7E
+DB
+DB
+DB
+7E
+18
+18
+ENDCHAR
+STARTCHAR U+0425
+ENCODING 1061
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+CC
+48
+78
+30
+30
+78
+48
+CC
+ENDCHAR
+STARTCHAR U+0426
+ENCODING 1062
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 7 9 1 -1
+BITMAP
+CC
+CC
+CC
+CC
+CC
+CC
+CC
+FE
+02
+ENDCHAR
+STARTCHAR U+0427
+ENCODING 1063
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+CC
+CC
+CC
+CC
+7C
+0C
+0C
+0C
+ENDCHAR
+STARTCHAR U+0428
+ENCODING 1064
+SWIDTH 701 0
+DWIDTH 9 0
+BBX 8 8 1 0
+BITMAP
+C3
+C3
+DB
+DB
+DB
+DB
+DB
+FF
+ENDCHAR
+STARTCHAR U+0429
+ENCODING 1065
+SWIDTH 779 0
+DWIDTH 10 0
+BBX 9 9 1 -1
+BITMAP
+C300
+C300
+DB00
+DB00
+DB00
+DB00
+DB00
+FF80
+0080
+ENDCHAR
+STARTCHAR U+042A
+ENCODING 1066
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 7 8 1 0
+BITMAP
+E0
+60
+60
+7C
+66
+66
+66
+7C
+ENDCHAR
+STARTCHAR U+042B
+ENCODING 1067
+SWIDTH 701 0
+DWIDTH 9 0
+BBX 8 8 1 0
+BITMAP
+C3
+C3
+C3
+FB
+CF
+CF
+CF
+FB
+ENDCHAR
+STARTCHAR U+042C
+ENCODING 1068
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+C0
+C0
+C0
+F8
+CC
+CC
+CC
+F8
+ENDCHAR
+STARTCHAR U+042D
+ENCODING 1069
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+78
+CC
+0C
+3C
+0C
+0C
+CC
+78
+ENDCHAR
+STARTCHAR U+042E
+ENCODING 1070
+SWIDTH 701 0
+DWIDTH 9 0
+BBX 8 8 1 0
+BITMAP
+CE
+DB
+DB
+FB
+DB
+DB
+DB
+CE
+ENDCHAR
+STARTCHAR U+042F
+ENCODING 1071
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+7C
+CC
+CC
+CC
+7C
+CC
+CC
+CC
+ENDCHAR
+STARTCHAR U+0430
+ENCODING 1072
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 7 6 1 0
+BITMAP
+78
+0C
+7C
+CC
+CC
+7A
+ENDCHAR
+STARTCHAR U+0431
+ENCODING 1073
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+04
+78
+C0
+F8
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+0432
+ENCODING 1074
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+70
+D8
+D8
+F0
+F8
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+0433
+ENCODING 1075
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 5 6 1 0
+BITMAP
+F8
+C0
+C0
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR U+0434
+ENCODING 1076
+SWIDTH 701 0
+DWIDTH 9 0
+BBX 8 7 1 -1
+BITMAP
+3E
+66
+66
+66
+66
+FF
+81
+ENDCHAR
+STARTCHAR U+0435
+ENCODING 1077
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 0
+BITMAP
+78
+CC
+FC
+C0
+CC
+78
+ENDCHAR
+STARTCHAR U+0436
+ENCODING 1078
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 0
+BITMAP
+B4
+FC
+30
+78
+FC
+B4
+ENDCHAR
+STARTCHAR U+0437
+ENCODING 1079
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 0
+BITMAP
+78
+CC
+18
+0C
+CC
+78
+ENDCHAR
+STARTCHAR U+0438
+ENCODING 1080
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 0
+BITMAP
+CC
+CC
+CC
+CC
+CC
+74
+ENDCHAR
+STARTCHAR U+0439
+ENCODING 1081
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+48
+30
+CC
+CC
+CC
+CC
+CC
+74
+ENDCHAR
+STARTCHAR U+043A
+ENCODING 1082
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 5 6 1 0
+BITMAP
+D8
+D8
+E0
+F0
+D8
+D8
+ENDCHAR
+STARTCHAR U+043B
+ENCODING 1083
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 7 6 1 0
+BITMAP
+3E
+66
+66
+66
+66
+C6
+ENDCHAR
+STARTCHAR U+043C
+ENCODING 1084
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 7 6 1 0
+BITMAP
+C6
+EE
+D6
+C6
+C6
+C6
+ENDCHAR
+STARTCHAR U+043D
+ENCODING 1085
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 0
+BITMAP
+CC
+CC
+FC
+CC
+CC
+CC
+ENDCHAR
+STARTCHAR U+043E
+ENCODING 1086
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 0
+BITMAP
+78
+CC
+CC
+CC
+CC
+78
+ENDCHAR
+STARTCHAR U+043F
+ENCODING 1087
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 0
+BITMAP
+F8
+CC
+CC
+CC
+CC
+CC
+ENDCHAR
+STARTCHAR U+0440
+ENCODING 1088
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 0
+BITMAP
+78
+CC
+CC
+F8
+C0
+C0
+ENDCHAR
+STARTCHAR U+0441
+ENCODING 1089
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 0
+BITMAP
+78
+CC
+C0
+C0
+CC
+78
+ENDCHAR
+STARTCHAR U+0442
+ENCODING 1090
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 0
+BITMAP
+FC
+30
+30
+30
+30
+30
+ENDCHAR
+STARTCHAR U+0443
+ENCODING 1091
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 -2
+BITMAP
+CC
+CC
+CC
+CC
+7C
+0C
+CC
+78
+ENDCHAR
+STARTCHAR U+0444
+ENCODING 1092
+SWIDTH 701 0
+DWIDTH 9 0
+BBX 8 6 1 0
+BITMAP
+18
+7E
+DB
+DB
+7E
+18
+ENDCHAR
+STARTCHAR U+0445
+ENCODING 1093
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 0
+BITMAP
+CC
+78
+30
+30
+78
+CC
+ENDCHAR
+STARTCHAR U+0446
+ENCODING 1094
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 7 7 1 -1
+BITMAP
+CC
+CC
+CC
+CC
+CC
+7E
+02
+ENDCHAR
+STARTCHAR U+0447
+ENCODING 1095
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 0
+BITMAP
+CC
+CC
+CC
+7C
+0C
+0C
+ENDCHAR
+STARTCHAR U+0448
+ENCODING 1096
+SWIDTH 701 0
+DWIDTH 9 0
+BBX 8 6 1 0
+BITMAP
+DB
+DB
+DB
+DB
+DB
+7F
+ENDCHAR
+STARTCHAR U+0449
+ENCODING 1097
+SWIDTH 701 0
+DWIDTH 9 0
+BBX 9 7 1 -1
+BITMAP
+DB00
+DB00
+DB00
+DB00
+DB00
+7F80
+0080
+ENDCHAR
+STARTCHAR U+044A
+ENCODING 1098
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 0
+BITMAP
+E0
+60
+78
+6C
+6C
+38
+ENDCHAR
+STARTCHAR U+044B
+ENCODING 1099
+SWIDTH 623 0
+DWIDTH 8 0
+BBX 7 6 1 0
+BITMAP
+C6
+C6
+F6
+DE
+DE
+76
+ENDCHAR
+STARTCHAR U+044C
+ENCODING 1100
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 5 6 1 0
+BITMAP
+C0
+C0
+F0
+D8
+D8
+70
+ENDCHAR
+STARTCHAR U+044D
+ENCODING 1101
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 5 6 1 0
+BITMAP
+70
+D8
+18
+38
+98
+70
+ENDCHAR
+STARTCHAR U+044E
+ENCODING 1102
+SWIDTH 701 0
+DWIDTH 9 0
+BBX 8 6 1 0
+BITMAP
+CE
+DB
+DB
+FB
+DB
+CE
+ENDCHAR
+STARTCHAR U+044F
+ENCODING 1103
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 0
+BITMAP
+78
+CC
+CC
+7C
+CC
+CC
+ENDCHAR
+STARTCHAR U+0451
+ENCODING 1105
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 8 1 0
+BITMAP
+48
+00
+78
+CC
+FC
+C0
+CC
+78
+ENDCHAR
+STARTCHAR U+0454
+ENCODING 1108
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 6 1 0
+BITMAP
+78
+CC
+C0
+F0
+C4
+78
+ENDCHAR
+STARTCHAR U+0456
+ENCODING 1110
+SWIDTH 233 0
+DWIDTH 3 0
+BBX 2 8 1 0
+BITMAP
+C0
+00
+C0
+C0
+C0
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR U+0457
+ENCODING 1111
+SWIDTH 389 0
+DWIDTH 5 0
+BBX 4 8 1 0
+BITMAP
+90
+00
+60
+60
+60
+60
+60
+60
+ENDCHAR
+STARTCHAR U+045E
+ENCODING 1118
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 10 1 -2
+BITMAP
+48
+30
+CC
+CC
+CC
+CC
+7C
+0C
+CC
+78
+ENDCHAR
+STARTCHAR U+0490
+ENCODING 1168
+SWIDTH 545 0
+DWIDTH 7 0
+BBX 6 9 1 0
+BITMAP
+04
+FC
+C0
+C0
+C0
+C0
+C0
+C0
+C0
+ENDCHAR
+STARTCHAR U+0491
+ENCODING 1169
+SWIDTH 467 0
+DWIDTH 6 0
+BBX 5 8 1 0
+BITMAP
+08
+F8
+C0
+C0
+C0
+C0
+C0
+C0
+ENDCHAR
+ENDFONT
diff --git a/simutrans/history.txt b/simutrans/history.txt
index bd94ae5..8040cb9 100644
--- a/simutrans/history.txt
+++ b/simutrans/history.txt
@@ -1,3 +1,53 @@
+Release of 102.2 (r2785)
+
+18-Oct-2009:
+	CHANGE: cursor now works with full 3d-coordinates
+	ADD: (mostly gerw) sparse data and overlay in main map for passenger destinations
+	ADD: No connections found via overcrowded stops, if overcrowded flag active
+	ADD: do not create goods/passenger/mail when the only route is over an overcrowded stop (simuconf.tab no_routing_over_overcrowded)
+	ADD: more vehicle messages show in main screen
+	CHANGE: ask for language only once (prepare for difficulty dialoge)
+	ADD: UNDO for powerlines
+	FIX: convoi details (and info- windows) were not always correctly (re)opened
+	CHANGE: convoi, station and line handles autoextent their capacity
+	FIX: chanhing schedule bz stop mover did not worked on open schedule windows
+	CHANGE: climate dialoge now completely gui_numberinput_t
+	CHANGE: convois will only choose stops that can fit their entire length
+	FIX: (mostly gerw) tunnel maintenance costs
+	ADD: (z9999) tunnel can have predefined way (new syntax, need new makeobj)
+	ADD: completly ignore message button at beginning of dialoge
+	CHANGE: faster map (non-isometric) on very large maps and no crashes with extremely large maps anymore
+	ADD: paste letters under windows with CNTRL+V
+	ADD: button "withdraw all" in line window
+	CHANGE: simuconf.tab cost values can now go up to 48 bit (should be enough for insanely high starting capital)
+	CHANGE: addons can be put now into the user folder with the same name than the main pak folder
+	CHANGE: skins are now read first from program dir/skin then from own dir/skin and then from pak set
+	ADD: (gerw) dragging of wayobj and many other tools, adding wayobj-remover
+	CHANGE: (Dwachs) better intercityroad creation
+	ADD: (Dwachs) sliced underground mode
+	ADD: (z9999) 8 layout for city buildings allow also closed corners
+	ADD: (Dwachs) buying cityhouse will protect them from renovation
+	ADD: Underground slope (in principle even compatible to older savegames) using standard slope tool
+	ADD: changing slopes now also with objects on top
+	ADD: (Dwachs) tram track can be build in road tunnels
+	ADD: (gerw) click-and-drag for tunnels
+	ADD: (Nathan Samson) allow left_to_right_graphs (=1 in simuconf.tab)
+	ADD: (z9999) better display of depots in minimap
+	ADD: (Dwachs) zooming of map with mousewheel
+	ADD: switches change graphics for diagonal going trains (only eyecandy)
+	ADD: ambient sound effects (for all grphics + forest + beaches)
+	CHANGE: less lagging updating/rerouting after schedule chnages even with large stations
+	ADD: (Dwachs) Public player can remove all
+	ADD: two switches (-addons and -noaddons) to regulate loading of addons together with pakset
+	CHANGE: (Dwachs) 2-5x faster city generation
+	CHANGE: (Knightly) even faster routing of goods due to ignoring non-transfer stations in breath search
+	ADD: switch to keep towns static
+	ADD: (gerw) minimaps in city info window are clickable
+	CHANGE: after 40 retrys, factory construction will ignore climates to avoid broken chains (if possible at all)
+	ADD: citygrowth parameter configurable in simuconf.tab
+	ADD: setting dialog allow access to all settings also found in simuconf.tab before starting a game
+
+
 Release of 102.0 (r2366)
 
 5-Mar-2009:
diff --git a/simutrans/readme.txt b/simutrans/readme.txt
index f85ebd6..8ce9de0 100644
--- a/simutrans/readme.txt
+++ b/simutrans/readme.txt
@@ -201,6 +201,12 @@ simutrans -objects winter_pak/
 "winter_pak" is the directory where the PAK files are stored. Use the
 name of your setup instead! The trailing slash is mandatory.
 
+If you have a non-portable installation (i.e. no single user mode), then
+you can have additional add-ons in your personal simutrans directory.
+That way those are kept, when updating the main pak sets.
+You can additionally specify "-addons" or "-noaddons" to force loading
+or prevent addons to be loaded with a pakset. This overrides the setting
+in simuconf.tab.
 
 
 7) Turn sound and music off (as of Simutrans 0.81.23exp)
diff --git a/simutrans/text/all-help-file-names b/simutrans/text/all-help-file-names
new file mode 100644
index 0000000..a9bfa19
--- /dev/null
+++ b/simutrans/text/all-help-file-names
@@ -0,0 +1,38 @@
+The following help file names are used in 0.99.00
+
+citylist_filter.txt
+citywindow.txt
+climates.txt
+color.txt
+convoi.txt
+convoi.txt
+convoi_filter.txt
+depot.txt
+display.txt
+finances.txt
+general.txt
+goods_filter.txt
+haltlist.txt
+haltlist_filter.txt
+industry_info.txt
+keys.txt
+language.txt
+list.txt
+load.txt
+load_relief.txt
+mailbox.txt
+mailbox.txt
+map.txt
+new_world.txt
+options.txt
+players.txt
+railtools.txt
+railtools.txt
+roadtools.txt
+save.txt
+shiptools.txt
+sound.txt
+special.txt
+station.txt
+station_details.txt
+tramtools.txt
diff --git a/simutrans/text/cz/about.txt b/simutrans/text/cz/about.txt
index 216be5f..35ba478 100644
--- a/simutrans/text/cz/about.txt
+++ b/simutrans/text/cz/about.txt
@@ -1,29 +1,29 @@
-<title>Nápovìda - o pøekladu</title>
-
-<h1>O pøekladu</h1>
-
-<p>
-O èeský pøeklad Simutrans se stará <strong>Ondøej Machulda</strong> - translation at simutrans.wz.cz.<br>
-Velkou èást nápovìdy pøelo¾il <strong>Jiøí Voseèek</strong> - Vosecek.Jirka at seznam.cz
-</p>
-
-<p>
-Oficiální stránky Simutrans naleznete na adrese <strong>http://simutrans.de</strong>.<br>
-Èeské stránky o Simutrans jsou na adrese <strong>http://simutrans.wz.cz</strong> - zde naleznete aktuální
-verzi pøekladu, informace o Simutrans, o posledních verzích, dále addons - "pøídavky" do Simutrans,
-odkazy, a dal¹í informace...
-</p>
-
-<p>
-Pokud máte k pøekladu nìjaké pøipomínky - na¹li jste chybu, ¹patnì pøelo¾ená slova, nìco nepøelo¾eného apod.,
-neváhejte nás kontaktovat na e-mailu <strong>translation at simutrans.wz.cz</strong>. Dìkujeme.
-</p>
-
-<p>
-Poslední zmìny v pøekladu: 23.7.2004<br>
-Aktualizováno pro Simutrans: 0.84.11.0<br>
-</p>
-
-<p>
-<strong>Simutrans (c) Hj. Malthaner</strong>
+<title>Nápovìda - o pøekladu</title>
+
+<h1>O pøekladu</h1>
+
+<p>
+O èeský pøeklad Simutrans se stará <strong>Ondøej Machulda</strong> - translation at simutrans.wz.cz.<br>
+Velkou èást nápovìdy pøelo¾il <strong>Jiøí Voseèek</strong> - Vosecek.Jirka at seznam.cz
+</p>
+
+<p>
+Oficiální stránky Simutrans naleznete na adrese <strong>http://simutrans.de</strong>.<br>
+Èeské stránky o Simutrans jsou na adrese <strong>http://simutrans.wz.cz</strong> - zde naleznete aktuální
+verzi pøekladu, informace o Simutrans, o posledních verzích, dále addons - "pøídavky" do Simutrans,
+odkazy, a dal¹í informace...
+</p>
+
+<p>
+Pokud máte k pøekladu nìjaké pøipomínky - na¹li jste chybu, ¹patnì pøelo¾ená slova, nìco nepøelo¾eného apod.,
+neváhejte nás kontaktovat na e-mailu <strong>translation at simutrans.wz.cz</strong>. Dìkujeme.
+</p>
+
+<p>
+Poslední zmìny v pøekladu: 23.7.2004<br>
+Aktualizováno pro Simutrans: 0.84.11.0<br>
+</p>
+
+<p>
+<strong>Simutrans (c) Hj. Malthaner</strong>
 </p>
diff --git a/simutrans/text/cz/color.txt b/simutrans/text/cz/color.txt
index e704a48..c026a45 100644
--- a/simutrans/text/cz/color.txt
+++ b/simutrans/text/cz/color.txt
@@ -1,12 +1,12 @@
-<title>Nápovìda - výbìr barev</title>
-<h1>Výbìr barev</h1>
-
-<p>
-Zde si mù¾ete vybrat barvu Va¹í spoleènosti.
-Je to barva, kterou bude mít Vá¹ majetek, jako jsou vlaky, nákladní auta, depa, stanice atd.<br>
-Ov¹em není to pravidlem, nìkterý majetek tuto barvu mít nebude.
-</p>
-
-<p>
--><a href="about.txt">Informace o pøekladu</a>
+<title>Nápovìda - výbìr barev</title>
+<h1>Výbìr barev</h1>
+
+<p>
+Zde si mù¾ete vybrat barvu Va¹í spoleènosti.
+Je to barva, kterou bude mít Vá¹ majetek, jako jsou vlaky, nákladní auta, depa, stanice atd.<br>
+Ov¹em není to pravidlem, nìkterý majetek tuto barvu mít nebude.
+</p>
+
+<p>
+-><a href="about.txt">Informace o pøekladu</a>
 </p>
diff --git a/simutrans/text/cz/convoi.txt b/simutrans/text/cz/convoi.txt
index 05f1310..d25ee46 100644
--- a/simutrans/text/cz/convoi.txt
+++ b/simutrans/text/cz/convoi.txt
@@ -1,26 +1,26 @@
-<title>Nápovìda - seznam vozidel</title>
-<h1>Seznam vozidel</h1>
-
-<p>
-<em>Seznam nabízí tyto mo¾nosti:</em>
-</p>
-
-<p>
-<em>1.) Øazení:</em><br>
-Postupným klikáním na první pøepínací tlaèítko mìníte kritéria, podle kterých bude seznam øazen.<br>
-Vedlej¹ím tlaèítkem nastavujete, zda má být øazen sestupnì nebo vzestupnì.
-</p>
-
-<p>
-<em>2.) Filtr:</em><br>
-Kliknutím na tøetí tlaèítko aktivujete, nebo deaktivujete filtr.<br>
-Mo¾nosti tohoto filtru mù¾ete mìnit po kliknutí na tlaèítko <strong>nastavení</strong>.
-</p>
-
-<p>
--><a href="convoi_filter.txt">Nápovìda pro filtr</a>
-</p>
-
-<p>
--><a href="about.txt">Informace o pøekladu</a>
+<title>Nápovìda - seznam vozidel</title>
+<h1>Seznam vozidel</h1>
+
+<p>
+<em>Seznam nabízí tyto mo¾nosti:</em>
+</p>
+
+<p>
+<em>1.) Øazení:</em><br>
+Postupným klikáním na první pøepínací tlaèítko mìníte kritéria, podle kterých bude seznam øazen.<br>
+Vedlej¹ím tlaèítkem nastavujete, zda má být øazen sestupnì nebo vzestupnì.
+</p>
+
+<p>
+<em>2.) Filtr:</em><br>
+Kliknutím na tøetí tlaèítko aktivujete, nebo deaktivujete filtr.<br>
+Mo¾nosti tohoto filtru mù¾ete mìnit po kliknutí na tlaèítko <strong>nastavení</strong>.
+</p>
+
+<p>
+-><a href="convoi_filter.txt">Nápovìda pro filtr</a>
+</p>
+
+<p>
+-><a href="about.txt">Informace o pøekladu</a>
 </p>
diff --git a/simutrans/text/cz/convoi_filter.txt b/simutrans/text/cz/convoi_filter.txt
index a6aafd7..6cc8b82 100644
--- a/simutrans/text/cz/convoi_filter.txt
+++ b/simutrans/text/cz/convoi_filter.txt
@@ -1,35 +1,35 @@
-<title>Nápovìda - filtr seznamu vozidel</title>
-<h1>Filtr seznamu vozidel</h1>
-
-<p>
-<em>Filtr nabízí tyto mo¾nosti:</em>
-</p>
-
-<p>
-<em>1.) Filtrovat jméno:</em><br>
-V seznamu budou zobrazena pouze vozidla, která se jmenují podle zadání.
-</p>
-
-<p>
-<em>2.) Filtrovat typ:</em><br>
-V seznamu budou zobrazena pouze vozidla zvoleného typu.
-</p>
-
-<p>
-<em>3.) Speciální filtrování:</em><br>
-V seznamu budou zobrazena pouze vozidla, která nemají pøíjem, nemají definován <a href='schedule.txt'>jízdní plán</a>, nemouhou nalézt trasu dle jízdního plánu, jsou v depu nebo nemají pøiøazenou ¾ádnou linku.
-</p>
-
-<p>
-<em>4.) Podle pøepravovaného zbo¾í:</em><br>
-V seznamu budou zobrazena pouze vozdila, která pøepravují zvolené komodity.
-Tlaèítko <strong>v¹e</strong> vybere v¹echny komodity, tklaèítko <strong>nic</strong> naopak v¹echny odvybere. Tlaèítkem <strong>inv</strong> obrátíte aktuální výbìr.
-</p>
-
-<p>
--><a href="convoi.txt">Nápovìda pro seznam vozidel</a>
-</p>
-
-<p>
--><a href="about.txt">Informace o pøekladu</a>
+<title>Nápovìda - filtr seznamu vozidel</title>
+<h1>Filtr seznamu vozidel</h1>
+
+<p>
+<em>Filtr nabízí tyto mo¾nosti:</em>
+</p>
+
+<p>
+<em>1.) Filtrovat jméno:</em><br>
+V seznamu budou zobrazena pouze vozidla, která se jmenují podle zadání.
+</p>
+
+<p>
+<em>2.) Filtrovat typ:</em><br>
+V seznamu budou zobrazena pouze vozidla zvoleného typu.
+</p>
+
+<p>
+<em>3.) Speciální filtrování:</em><br>
+V seznamu budou zobrazena pouze vozidla, která nemají pøíjem, nemají definován <a href='schedule.txt'>jízdní plán</a>, nemouhou nalézt trasu dle jízdního plánu, jsou v depu nebo nemají pøiøazenou ¾ádnou linku.
+</p>
+
+<p>
+<em>4.) Podle pøepravovaného zbo¾í:</em><br>
+V seznamu budou zobrazena pouze vozdila, která pøepravují zvolené komodity.
+Tlaèítko <strong>v¹e</strong> vybere v¹echny komodity, tklaèítko <strong>nic</strong> naopak v¹echny odvybere. Tlaèítkem <strong>inv</strong> obrátíte aktuální výbìr.
+</p>
+
+<p>
+-><a href="convoi.txt">Nápovìda pro seznam vozidel</a>
+</p>
+
+<p>
+-><a href="about.txt">Informace o pøekladu</a>
 </p>
diff --git a/simutrans/text/cz/depot.txt b/simutrans/text/cz/depot.txt
index 5c91aa3..d3d62b7 100644
--- a/simutrans/text/cz/depot.txt
+++ b/simutrans/text/cz/depot.txt
@@ -1,45 +1,45 @@
-<title>Nápovìda - depo</title>
-<h1>Dialog depa</h1>
-
-<p>
-V depu mù¾ete nakupovat, prodávat, spojovat èi pøepojovat do souprav v¹echna vozidla zaparkovaná v depu (¹ipkami v horní èásti lze mezi zaparkovanými konvoji pøepínat).<br>
-</p>
-
-<p>
-Dialog depa vám zobrazuje, jaká vozidla mù¾ete nakoupit a jaká jste ji¾ nakoupil.
-V tabulce dole jsou zobrazena koupitelná vozidla.
-V oblasti nahoøe je zobrazeno právì aktivní vozidlo. Seznam koupitelných vozidel má 2 karty: pohonná vozidla (vozidlaivy apod.), a pøipojitelná vozidla (vagóny a pøívìsy).
-</p>
-
-<p>
-Úplnì dole jsou zobrazeny informace o právì aktivním vozidle.
-Dopravní prostøedek je mo¾né ovládat tlaèítky pod ním.
-</p>
-
-<p>
-Úplnì nalevo je tlaèítko <strong>start</strong>, kterým vozidlo "pustíte" z depa - pokud ji¾ má nastaveno <a href="schedule.txt">jízdní plán</a>. Dal¹ím tlaèítkem <strong>rozpojit</em> mù¾ete rozpojit napøíklad vlak, èi tahaè s pøívìsem. Tlaèítkem <strong>prodat</strong>prodáte aktuální vozidlo.
-</p>
-
-<p>
-Pro informace o konkrétním dopravním prostøedku musíte najet kurzorem nad jeho obrázek. Detaily se zobrazí úplnì dole. Pro koupi vozidla je urèena støední èást dialogu. Pokud je dole na stránce nastaven mód nákupu, vozidlo koupit kliknutím. Módy se mìní pøepínacím tlaèítkem s hodnotami <strong>pøidat</strong>, co¾ je vlastnì nákup. Potom <strong>na zaèátek</strong>, co¾ je také nákup, ale vozidlo se pøidá místo na konec soupravy na zaèátek. Poslední mo¾nost je <strong>prodat</strong>, umo¾òuje prodávat vozidla umístìná ve va¹em depu.
-</p>
-
-<p>
-K vytvoøení soupravy vozidel musíte nejprve koupit lokomotivy a poté pøikupovat vagóny, èi pøívìsy. Najednou je mo¾né pracovat pouze s jedním konvojem.
-</p>
-
-<p>
-Nastavení jízdního plánu je mo¾né nìkolika zpùsoby. Ty jsou popsané v<a href="schedule.txt">tomto</a>dialogu. Nìkolik tlaèítek pod tlaèítky <strong>start a jízdní plán</strong> jsou pro nastavení <a href="schedule.txt">linek</a>. Doporuèujeme je pou¾ívat spí¹e ne¾ jízdní plány.
-</p>
-
-<p>
-Pokud chcete v budoucnu vrátit vozidlo zpìt do depa, editujte <a href="schedule.txt">jízdní plán</a> tím, ¾e na konec zastávek pøidáte depo. Potom je mo¾né vozidlo prodat, v pøípadì souprav tøeba pøeskupit.
-</p>
-
-<p>
--><a href="schedule.txt">Nápovìda k jízdnímu plánu</a>
-</p>
-
-<p>
--><a href="about.txt">Informace o pøekladu</a>
+<title>Nápovìda - depo</title>
+<h1>Dialog depa</h1>
+
+<p>
+V depu mù¾ete nakupovat, prodávat, spojovat èi pøepojovat do souprav v¹echna vozidla zaparkovaná v depu (¹ipkami v horní èásti lze mezi zaparkovanými konvoji pøepínat).<br>
+</p>
+
+<p>
+Dialog depa vám zobrazuje, jaká vozidla mù¾ete nakoupit a jaká jste ji¾ nakoupil.
+V tabulce dole jsou zobrazena koupitelná vozidla.
+V oblasti nahoøe je zobrazeno právì aktivní vozidlo. Seznam koupitelných vozidel má 2 karty: pohonná vozidla (vozidlaivy apod.), a pøipojitelná vozidla (vagóny a pøívìsy).
+</p>
+
+<p>
+Úplnì dole jsou zobrazeny informace o právì aktivním vozidle.
+Dopravní prostøedek je mo¾né ovládat tlaèítky pod ním.
+</p>
+
+<p>
+Úplnì nalevo je tlaèítko <strong>start</strong>, kterým vozidlo "pustíte" z depa - pokud ji¾ má nastaveno <a href="schedule.txt">jízdní plán</a>. Dal¹ím tlaèítkem <strong>rozpojit</em> mù¾ete rozpojit napøíklad vlak, èi tahaè s pøívìsem. Tlaèítkem <strong>prodat</strong>prodáte aktuální vozidlo.
+</p>
+
+<p>
+Pro informace o konkrétním dopravním prostøedku musíte najet kurzorem nad jeho obrázek. Detaily se zobrazí úplnì dole. Pro koupi vozidla je urèena støední èást dialogu. Pokud je dole na stránce nastaven mód nákupu, vozidlo koupit kliknutím. Módy se mìní pøepínacím tlaèítkem s hodnotami <strong>pøidat</strong>, co¾ je vlastnì nákup. Potom <strong>na zaèátek</strong>, co¾ je také nákup, ale vozidlo se pøidá místo na konec soupravy na zaèátek. Poslední mo¾nost je <strong>prodat</strong>, umo¾òuje prodávat vozidla umístìná ve va¹em depu.
+</p>
+
+<p>
+K vytvoøení soupravy vozidel musíte nejprve koupit lokomotivy a poté pøikupovat vagóny, èi pøívìsy. Najednou je mo¾né pracovat pouze s jedním konvojem.
+</p>
+
+<p>
+Nastavení jízdního plánu je mo¾né nìkolika zpùsoby. Ty jsou popsané v<a href="schedule.txt">tomto</a>dialogu. Nìkolik tlaèítek pod tlaèítky <strong>start a jízdní plán</strong> jsou pro nastavení <a href="schedule.txt">linek</a>. Doporuèujeme je pou¾ívat spí¹e ne¾ jízdní plány.
+</p>
+
+<p>
+Pokud chcete v budoucnu vrátit vozidlo zpìt do depa, editujte <a href="schedule.txt">jízdní plán</a> tím, ¾e na konec zastávek pøidáte depo. Potom je mo¾né vozidlo prodat, v pøípadì souprav tøeba pøeskupit.
+</p>
+
+<p>
+-><a href="schedule.txt">Nápovìda k jízdnímu plánu</a>
+</p>
+
+<p>
+-><a href="about.txt">Informace o pøekladu</a>
 </p>
diff --git a/simutrans/text/cz/display.txt b/simutrans/text/cz/display.txt
index d82c67c..e723ddd 100644
--- a/simutrans/text/cz/display.txt
+++ b/simutrans/text/cz/display.txt
@@ -1,31 +1,31 @@
-<title>Nápovìda - nastavení zobrazení</title>
-<h1>Nastavení zobrazení</h1>
-
-<p>
-Dialog "Nastavení zobrazení" nabízí mo¾nost zmìny zobrazování rùzných vizuálních prvkù v Simutrans.<br>
-</p>
-
-<p>
-<em>Jas</em> - Pøidá nebo ubere jas<br>
-<em>Barvy</em> - Testovací prvek, bez efektu<br>
-<em>Rychlost posuvu</em> - Velikost tohoto èísla udává rychlost posuvu obrazovky (pomocí my¹i nebo pomocí ¹ipek)
-</p>
-
-<p>
-<em>Inverze posuvu</em> - Zpùsobí, ¾e posuv nahoru posune obrazovku dolu, posuv doleva ji posune doprava atd.<br>
-<em>Zobrazovat chodce</em> - Zpùsobí, ¾e se ve mìstech nebudou na ulicích zobrazovat chodci (ti kteøí chodí do nebo ze zastávek autobusu).<br>
-Výhodné, napø. pokud máte pomalej¹í poèítaè. Náhodné chodce lze vypnout v konfiguraèním souboru simuconf.tab.<br>
-<em>Støídat den a noc</em> - Aktivuje støídání simulace dne a noci v prùbìhu hry. Pøi simulaci noci nìkteré objekty ve høe (vozidla, domy...) svítí.
-</p>
-
-<p>
-Dolní èást dialogu obsahuje rùzné informace o souèasném stavu hry, které jsou zde hlavnì z testovacích a vývojáøských dùvodù.
-</p>
-
-<p>
--><a href="options.txt">Nápovìda pro nastavení hry</a>
-</p>
-
-<p>
--><a href="about.txt">Informace o pøekladu</a>
+<title>Nápovìda - nastavení zobrazení</title>
+<h1>Nastavení zobrazení</h1>
+
+<p>
+Dialog "Nastavení zobrazení" nabízí mo¾nost zmìny zobrazování rùzných vizuálních prvkù v Simutrans.<br>
+</p>
+
+<p>
+<em>Jas</em> - Pøidá nebo ubere jas<br>
+<em>Barvy</em> - Testovací prvek, bez efektu<br>
+<em>Rychlost posuvu</em> - Velikost tohoto èísla udává rychlost posuvu obrazovky (pomocí my¹i nebo pomocí ¹ipek)
+</p>
+
+<p>
+<em>Inverze posuvu</em> - Zpùsobí, ¾e posuv nahoru posune obrazovku dolu, posuv doleva ji posune doprava atd.<br>
+<em>Zobrazovat chodce</em> - Zpùsobí, ¾e se ve mìstech nebudou na ulicích zobrazovat chodci (ti kteøí chodí do nebo ze zastávek autobusu).<br>
+Výhodné, napø. pokud máte pomalej¹í poèítaè. Náhodné chodce lze vypnout v konfiguraèním souboru simuconf.tab.<br>
+<em>Støídat den a noc</em> - Aktivuje støídání simulace dne a noci v prùbìhu hry. Pøi simulaci noci nìkteré objekty ve høe (vozidla, domy...) svítí.
+</p>
+
+<p>
+Dolní èást dialogu obsahuje rùzné informace o souèasném stavu hry, které jsou zde hlavnì z testovacích a vývojáøských dùvodù.
+</p>
+
+<p>
+-><a href="options.txt">Nápovìda pro nastavení hry</a>
+</p>
+
+<p>
+-><a href="about.txt">Informace o pøekladu</a>
 </p>
diff --git a/simutrans/text/cz/finances.txt b/simutrans/text/cz/finances.txt
index 2e71d46..2c0377c 100644
--- a/simutrans/text/cz/finances.txt
+++ b/simutrans/text/cz/finances.txt
@@ -1,35 +1,35 @@
-<title>Nápovìda - finance</title>
-<h1>Finance (klávesová zkratka: <em>f</em>)</h1>
-
-<p>
-V dialogu finance naleznete tabulku rozpisu va¹ich pøíjmù a výdajù za tento a minulý rok, a také graf vybrané polo¾ky (polo¾ek).
-Tabulka pøíjmù a výdajù je dìlena do nìkolika kategorií, jejich popis následuje.<br>
-Popis grafù naleznete ní¾e.
-</p>
-
-<p>
-<em>Stavby</em> - Souèet výdajù za v¹e co jste postavili - ¾eleznice, silnice, stanice atd.<br>
-<em>Nová vozidla</em> - Pøíjmy a výdaje za prodaná èi zakoupená vozidla<br>
-<em>Provoz vozidel</em> - Provozní náklady za v¹echna vozidla<br>
-<em>Údr¾ba</em> - Výdaje za udr¾ování va¹ich vozidel a staveb v dobrém stavu -
-opravy, úklid atd. Èím více vozidel a staveb, tím je vìt¹í tato èástka.<br>
-Jak vysoká je tato èástka na tento mìsíc, je uvedeno na posledním øádku dialogu.<br>
-Tato èástka vám bude odeètena najednou, na konci ka¾dého mìsíce.<br>
-<em>Pøíjmy</em> - Souèet penìz, vydìlaných pøepravou zbo¾í a cestujících<br>
-<em>Celkem</em> - Celkový souèet pøíjmù a výdajù za tento popø. minulý rok<br>
-<em>Zùstatek</em> - Vá¹ celkový zùstatek penìz - stav va¹eho konta.
-</p>
-
-<p>Grafy</p>
-
-<p>
-Stiskem tlaèítek v pravé horní èásti dialogu mù¾ete zobrazit vývoj zvolené hodnoty za posledních 11 let.<br>
-Význam hodnot v grafu po stisknutí patøièných tlaèítek je stejný jako v tabulce pøíjmù a výdajù. Dal¹í hodnoty:<br>
-<em>Majetek</em> - souèet cen v¹eho va¹eho majetku - vozidel a budov. Cena ka¾dého objektu postupnì èasem klesá.<br>
-<em>Jmìní</em> - souèet zùstatku a hodnot v¹ech vozidel
-<em>Zisk vozidel</em> - pøíjmy bez ceny za údr¾bu a bez ceny za provoz vozidel
-</p>
-
-<p>
--><a href="about.txt">Informace o pøekladu</a>
+<title>Nápovìda - finance</title>
+<h1>Finance (klávesová zkratka: <em>f</em>)</h1>
+
+<p>
+V dialogu finance naleznete tabulku rozpisu va¹ich pøíjmù a výdajù za tento a minulý rok, a také graf vybrané polo¾ky (polo¾ek).
+Tabulka pøíjmù a výdajù je dìlena do nìkolika kategorií, jejich popis následuje.<br>
+Popis grafù naleznete ní¾e.
+</p>
+
+<p>
+<em>Stavby</em> - Souèet výdajù za v¹e co jste postavili - ¾eleznice, silnice, stanice atd.<br>
+<em>Nová vozidla</em> - Pøíjmy a výdaje za prodaná èi zakoupená vozidla<br>
+<em>Provoz vozidel</em> - Provozní náklady za v¹echna vozidla<br>
+<em>Údr¾ba</em> - Výdaje za udr¾ování va¹ich vozidel a staveb v dobrém stavu -
+opravy, úklid atd. Èím více vozidel a staveb, tím je vìt¹í tato èástka.<br>
+Jak vysoká je tato èástka na tento mìsíc, je uvedeno na posledním øádku dialogu.<br>
+Tato èástka vám bude odeètena najednou, na konci ka¾dého mìsíce.<br>
+<em>Pøíjmy</em> - Souèet penìz, vydìlaných pøepravou zbo¾í a cestujících<br>
+<em>Celkem</em> - Celkový souèet pøíjmù a výdajù za tento popø. minulý rok<br>
+<em>Zùstatek</em> - Vá¹ celkový zùstatek penìz - stav va¹eho konta.
+</p>
+
+<p>Grafy</p>
+
+<p>
+Stiskem tlaèítek v pravé horní èásti dialogu mù¾ete zobrazit vývoj zvolené hodnoty za posledních 11 let.<br>
+Význam hodnot v grafu po stisknutí patøièných tlaèítek je stejný jako v tabulce pøíjmù a výdajù. Dal¹í hodnoty:<br>
+<em>Majetek</em> - souèet cen v¹eho va¹eho majetku - vozidel a budov. Cena ka¾dého objektu postupnì èasem klesá.<br>
+<em>Jmìní</em> - souèet zùstatku a hodnot v¹ech vozidel
+<em>Zisk vozidel</em> - pøíjmy bez ceny za údr¾bu a bez ceny za provoz vozidel
+</p>
+
+<p>
+-><a href="about.txt">Informace o pøekladu</a>
 </p>
diff --git a/simutrans/text/cz/general.txt b/simutrans/text/cz/general.txt
index 1260495..0b0a9f2 100644
--- a/simutrans/text/cz/general.txt
+++ b/simutrans/text/cz/general.txt
@@ -1,13 +1,13 @@
-<h1>Nápovìda - hlavní strana</h1>
-Odkazy na nìkolik nejdùle¾itìj¹ích témat nápovìdy:<br>
-<p>
--><a href="keys.txt">Popis klávesových zkratek</a></p>
-<p>
--><a href="schedule.txt">Jak dìlat jízdní plány</a></p>
-<p>
--><a href="depot.txt">Nápovìda pro depo</a><br>
-</p>
-
-<p>
--><a href="about.txt">Informace o èeském pøekladu</a>
+<h1>Nápovìda - hlavní strana</h1>
+Odkazy na nìkolik nejdùle¾itìj¹ích témat nápovìdy:<br>
+<p>
+-><a href="keys.txt">Popis klávesových zkratek</a></p>
+<p>
+-><a href="schedule.txt">Jak dìlat jízdní plány</a></p>
+<p>
+-><a href="depot.txt">Nápovìda pro depo</a><br>
+</p>
+
+<p>
+-><a href="about.txt">Informace o èeském pøekladu</a>
 </p>
diff --git a/simutrans/text/cz/haltlist.txt b/simutrans/text/cz/haltlist.txt
index daa479e..acaa6aa 100644
--- a/simutrans/text/cz/haltlist.txt
+++ b/simutrans/text/cz/haltlist.txt
@@ -1,26 +1,26 @@
-<title>Nápovìda - seznam stanic</title>
-<h1>Seznam stanic</h1>
-
-<p>
-<em>Seznam nabízí tyto mo¾nosti:</em>
-</p>
-
-<p>
-<em>1.) Øazení:</em><br>
-Postupným klikáním na první pøepínací tlaèítko mìníte kritéria, podle kterých bude seznam øazen.<br>
-Vedlej¹ím tlaèítkem nastavujete, zda má být øazen sestupnì nebo vzestupnì.
-</p>
-
-<p>
-<em>2.) Filtr:</em><br>
-Kliknutím na tøetí tlaèítko aktivujete, nebo deaktivujete filtr.<br>
-Mo¾nosti tohoto filtru mù¾ete mìnit po kliknutí na tlaèítko <strong>nastavení</strong>.
-</p>
-
-<p>
--><a href="haltlist_filter.txt">Nápovìda pro filtr</a>
-</p>
-
-<p>
--><a href="about.txt">Informace o pøekladu</a>
+<title>Nápovìda - seznam stanic</title>
+<h1>Seznam stanic</h1>
+
+<p>
+<em>Seznam nabízí tyto mo¾nosti:</em>
+</p>
+
+<p>
+<em>1.) Øazení:</em><br>
+Postupným klikáním na první pøepínací tlaèítko mìníte kritéria, podle kterých bude seznam øazen.<br>
+Vedlej¹ím tlaèítkem nastavujete, zda má být øazen sestupnì nebo vzestupnì.
+</p>
+
+<p>
+<em>2.) Filtr:</em><br>
+Kliknutím na tøetí tlaèítko aktivujete, nebo deaktivujete filtr.<br>
+Mo¾nosti tohoto filtru mù¾ete mìnit po kliknutí na tlaèítko <strong>nastavení</strong>.
+</p>
+
+<p>
+-><a href="haltlist_filter.txt">Nápovìda pro filtr</a>
+</p>
+
+<p>
+-><a href="about.txt">Informace o pøekladu</a>
 </p>
diff --git a/simutrans/text/cz/haltlist_filter.txt b/simutrans/text/cz/haltlist_filter.txt
index a025b97..d8c8f6e 100644
--- a/simutrans/text/cz/haltlist_filter.txt
+++ b/simutrans/text/cz/haltlist_filter.txt
@@ -1,43 +1,43 @@
-<title>Nápovìda - filtr seznamu stanic</title>
-<h1>Filtr seznamu stanic</h1>
-
-<p>
-<em>Filtr nabízí tyto mo¾nosti:</em>
-</p>
-
-<p>
-<em>1.) Filtrovat jméno:</em><br>
-V seznamu budou zobrazeny pouze stanice, které se jmenují podle zadání.
-</p>
-
-<p>
-<em>2.) Filtrovat typ:</em><br>
-V seznamu budou zobrazena pouze stanice zvoleného typu.
-</p>
-
-<p>
-<em>3.) Speciální filtrování:</em><br>
-V seznamu budou zobrazeny pouze stanice, které nemají spojení nebo jsou pøeplnìné.
-</p>
-
-<p>
-<em>4.) Podle vy¾adovaného prùmyslu:</em><br>
-Seznam zobrazí pouze stanice, které vy¾adují pro prùmysl na který jsou napojeny zvolené komodity. *
-</p>
-
-<p>
-<em>5.) Podle produkovaného prùmyslu:</em><br>
-Seznam zobrazí pouze stanice, které produkují zvolené komodity. *
-</p>
-
-<p>
-<em>*</em> Tlaèítko <strong>v¹e</strong> vybere v¹echny komodity, tlaèítko <strong>nic</strong> naopak v¹echny odvybere. Tlaèítkem <strong>inv</strong> obrátíte aktuální výbìr.
-</p>
-
-<p>
--><a href="haltlist.txt">Nápovìda pro seznam stanic</a>
-</p>
-
-<p>
--><a href="about.txt">Informace o pøekladu</a>
+<title>Nápovìda - filtr seznamu stanic</title>
+<h1>Filtr seznamu stanic</h1>
+
+<p>
+<em>Filtr nabízí tyto mo¾nosti:</em>
+</p>
+
+<p>
+<em>1.) Filtrovat jméno:</em><br>
+V seznamu budou zobrazeny pouze stanice, které se jmenují podle zadání.
+</p>
+
+<p>
+<em>2.) Filtrovat typ:</em><br>
+V seznamu budou zobrazena pouze stanice zvoleného typu.
+</p>
+
+<p>
+<em>3.) Speciální filtrování:</em><br>
+V seznamu budou zobrazeny pouze stanice, které nemají spojení nebo jsou pøeplnìné.
+</p>
+
+<p>
+<em>4.) Podle vy¾adovaného prùmyslu:</em><br>
+Seznam zobrazí pouze stanice, které vy¾adují pro prùmysl na který jsou napojeny zvolené komodity. *
+</p>
+
+<p>
+<em>5.) Podle produkovaného prùmyslu:</em><br>
+Seznam zobrazí pouze stanice, které produkují zvolené komodity. *
+</p>
+
+<p>
+<em>*</em> Tlaèítko <strong>v¹e</strong> vybere v¹echny komodity, tlaèítko <strong>nic</strong> naopak v¹echny odvybere. Tlaèítkem <strong>inv</strong> obrátíte aktuální výbìr.
+</p>
+
+<p>
+-><a href="haltlist.txt">Nápovìda pro seznam stanic</a>
+</p>
+
+<p>
+-><a href="about.txt">Informace o pøekladu</a>
 </p>
diff --git a/simutrans/text/cz/language.txt b/simutrans/text/cz/language.txt
index d9792cf..6753bfd 100644
--- a/simutrans/text/cz/language.txt
+++ b/simutrans/text/cz/language.txt
@@ -1,17 +1,17 @@
-<title>Nápovìda - výbìr jazyka</title>
-<h1>Jazyk</h1>
-
-<p>
-Simutrans je vícejazyèná hra, a tak pokud existuje pøeklad do Va¹eho jazyka, mù¾ete si jej zvolit.<br>
-Po zmìnì jazyka zaène hra vypisovat v¹echny (pøelo¾ené) texty, ve Vámi zvoleném jazyce. Stávající
-otevøená okna je tøeba znovu otevøít, aby v nich do¹lo k vypsání textù ve zvoleném jazyce.
-</p>
-
-<p>
-U stávajících mìst zùstanou jejich jména, která byla vytvoøena podle jazyka pøi generování nové mapy.
-Proto je výhodné vybrat si jazyk je¹tì pøed generováním nové mapy, abyste v nìm mìli jména mìst.<br>
-</p>
-
-<p>
--><a href="about.txt">Informace o pøekladu</a>
+<title>Nápovìda - výbìr jazyka</title>
+<h1>Jazyk</h1>
+
+<p>
+Simutrans je vícejazyèná hra, a tak pokud existuje pøeklad do Va¹eho jazyka, mù¾ete si jej zvolit.<br>
+Po zmìnì jazyka zaène hra vypisovat v¹echny (pøelo¾ené) texty, ve Vámi zvoleném jazyce. Stávající
+otevøená okna je tøeba znovu otevøít, aby v nich do¹lo k vypsání textù ve zvoleném jazyce.
+</p>
+
+<p>
+U stávajících mìst zùstanou jejich jména, která byla vytvoøena podle jazyka pøi generování nové mapy.
+Proto je výhodné vybrat si jazyk je¹tì pøed generováním nové mapy, abyste v nìm mìli jména mìst.<br>
+</p>
+
+<p>
+-><a href="about.txt">Informace o pøekladu</a>
 </p>
diff --git a/simutrans/text/cz/load.txt b/simutrans/text/cz/load.txt
index 6dd69bb..6761694 100644
--- a/simutrans/text/cz/load.txt
+++ b/simutrans/text/cz/load.txt
@@ -1,20 +1,20 @@
-<title>Nápovìda - naèíst</title>
-<h1>Naèíst</h1>
-
-<p>
-Pøes dialog naèíst mù¾ete naèíst døíve ulo¾enou hru a pokraèovat v ní.
-Ovládání dialogu je velice podobné jako u dialogu <a href="save.txt">ukládání</a>.<br>
-Jednodu¹e vyberete hru, ve které chcete pokraèovat, a kliknìte na její jméno. Dialog se zavøe, hra se naète, a pokud v¹e probìhne bez problému, zobrazí se potvrzovací zpráva.
-</p>
-
-<p>
-<em>Pozor:</em> Hry ulo¾ené z jiných verzí Simutrans nemusejí být kompatibilní s touto verzí. Pokud se takovouto nekompatibilní hru pokusíte naèíst, obdr¾íte chybové hlá¹ení.
-</p>
-
-<p>
--><a href="save.txt">Nápovìda pro ukládání</a>
-</p>
-
-<p>
--><a href="about.txt">Informace o pøekladu</a>
+<title>Nápovìda - naèíst</title>
+<h1>Naèíst</h1>
+
+<p>
+Pøes dialog naèíst mù¾ete naèíst døíve ulo¾enou hru a pokraèovat v ní.
+Ovládání dialogu je velice podobné jako u dialogu <a href="save.txt">ukládání</a>.<br>
+Jednodu¹e vyberete hru, ve které chcete pokraèovat, a kliknìte na její jméno. Dialog se zavøe, hra se naète, a pokud v¹e probìhne bez problému, zobrazí se potvrzovací zpráva.
+</p>
+
+<p>
+<em>Pozor:</em> Hry ulo¾ené z jiných verzí Simutrans nemusejí být kompatibilní s touto verzí. Pokud se takovouto nekompatibilní hru pokusíte naèíst, obdr¾íte chybové hlá¹ení.
+</p>
+
+<p>
+-><a href="save.txt">Nápovìda pro ukládání</a>
+</p>
+
+<p>
+-><a href="about.txt">Informace o pøekladu</a>
 </p>
diff --git a/simutrans/text/cz/map.txt b/simutrans/text/cz/map.txt
index 17047be..ed81447 100644
--- a/simutrans/text/cz/map.txt
+++ b/simutrans/text/cz/map.txt
@@ -1,26 +1,26 @@
-<title>Nápovìda - mapa</title>
-<h1>Mapa</h1>
-
-<p>
-V tomto oknì mù¾ete prohlí¾et va¹i mapu z ptaèí perspektivy, a to vèetnì vèetnì mìst, prùmyslu, dopravy a dal¹ích volitelných údajù.
-</p>
-
-<p>
-Ka¾dý typ prùmyslu je oznaèen jinou barvou, s vysvìtlivkami v dolní èásti okna s mapou.
-Pokud nad nìjaký objekt prùmyslu pøemístíte ukazatel my¹i, zobrazí se jeho název a vyznaèí se i s názvy odbìratelé.
-</p>
-
-<p>
-Pokud chcete vidìt více detailù, kdekoliv v oknì s mapou kliknìte pravým tlaèítkem my¹i, co¾
-zpùsobí pøiblí¾ení mapy (a¾ do 2 stupòù). Oddálení je mo¾né stisknutím tlaèítka SHIFT a pravého tlaèítka my¹i.
-</p>
-
-<p>
-V dolní èásti okna se nalézají tlaèítka, po jejich¾ stisknutí se na mapì zobrazí (barvou dle intenzity) vybraná volba.<br>
-Pøi volbách "Cestujících" a "Po¹ty" bude jednou barvou zobrazeno území, které obsluhují va¹e stanice pro cestující nebo pro po¹tu.
-Pøi volbì "Tratì" budou barevnì zvýraznìny a odli¹eny rùzné druhy ¾eleznièních tra»í - bílou normální, èervenou elektrifikované, ¾lutou budou zvýraznìny semafory.
-</p>
-
-<p>
--><a href="about.txt">Informace o pøekladu</a>
+<title>Nápovìda - mapa</title>
+<h1>Mapa</h1>
+
+<p>
+V tomto oknì mù¾ete prohlí¾et va¹i mapu z ptaèí perspektivy, a to vèetnì vèetnì mìst, prùmyslu, dopravy a dal¹ích volitelných údajù.
+</p>
+
+<p>
+Ka¾dý typ prùmyslu je oznaèen jinou barvou, s vysvìtlivkami v dolní èásti okna s mapou.
+Pokud nad nìjaký objekt prùmyslu pøemístíte ukazatel my¹i, zobrazí se jeho název a vyznaèí se i s názvy odbìratelé.
+</p>
+
+<p>
+Pokud chcete vidìt více detailù, kdekoliv v oknì s mapou kliknìte pravým tlaèítkem my¹i, co¾
+zpùsobí pøiblí¾ení mapy (a¾ do 2 stupòù). Oddálení je mo¾né stisknutím tlaèítka SHIFT a pravého tlaèítka my¹i.
+</p>
+
+<p>
+V dolní èásti okna se nalézají tlaèítka, po jejich¾ stisknutí se na mapì zobrazí (barvou dle intenzity) vybraná volba.<br>
+Pøi volbách "Cestujících" a "Po¹ty" bude jednou barvou zobrazeno území, které obsluhují va¹e stanice pro cestující nebo pro po¹tu.
+Pøi volbì "Tratì" budou barevnì zvýraznìny a odli¹eny rùzné druhy ¾eleznièních tra»í - bílou normální, èervenou elektrifikované, ¾lutou budou zvýraznìny semafory.
+</p>
+
+<p>
+-><a href="about.txt">Informace o pøekladu</a>
 </p>
diff --git a/simutrans/text/cz/new_world.txt b/simutrans/text/cz/new_world.txt
index 08274a4..009a182 100644
--- a/simutrans/text/cz/new_world.txt
+++ b/simutrans/text/cz/new_world.txt
@@ -1,71 +1,71 @@
-<title>Nápovìda - nová mapa</title>
-<h1>Nová mapa</h1>
-
-<p>
-Dialog nová mapa vám poskytuje mo¾nost vytvoøit si mapu podle vlastních pøedstav. Mù¾ete ovlivnit reliéf mapy, hustotu prùmyslu, poèet mìst aj.
-</p>
-
-<p>
-Ní¾e následuje krátký popis jednotlivých nastavení nové mapy:
-</p>
-
-<p>
-<em>Èíslo mapy</em> - Urèuje reliéf mapy - kde jsou hory, voda atp.
-</p>
-
-<p>
-<em>Velikost mapy</em> - Urèuje, jak bude mapa velká, tzn. kolik bude mít ètvereèkù. Od 128x128, a¾ po 640x640. Standardnì je nastaveno 256x256.<br>
-<em>Dùle¾ité:</em> Velké mapy jsou hodnì nároèné na pamì», zva¾te proto, zda máte dostateènì velkou operaèní pamì», aby hra fungovala plynule.
-</p>
-
-<p>
-<em>Hustota prùmyslu</em> - Urèuje, jaká bude hustota prùmyslu - továren, obchodù aj. - na generované mapì. Pokud si chcete hru ztí¾it, nastavte malé èíslo, bude potom obtí¾nìj¹í propojit prùmysl.
-</p>
-
-<p>
-<em>Poèet mìst</em> - Urèuje poèet mìst na mapì. Dostupné nastavení je od 2 a¾ do 64 mìst. Standardnì je nastaveno 8.
-</p>
-
-<p>
-<em>Hustota provozu</em> - Hustota soukromých aut ve mìstech. Standardnì je nastaveno 8. Doporuèujeme si zvolit malé èíslo, pøíli¹ná hustota není vhodná. Pozdìji mohou pøeká¾et va¹im vozidlùm.
-</p>
-
-<p>
-<em>Úroveò vody</em> - Nastavuje, jak vysoko bude voda nad dnem. Pøi nízkém èísle moho být na mapì zálivy a prùlivy.
-</p>
-
-<p>
-<em>Vý¹ka hor</em> -  Urèuje velikost nejvy¹¹ích hor na mapì. Dostupné nastavení je od 0 a¾ do 160. Nízké nastavení vytvoøí malé kopce a prùsmyky.
-</p>
-
-<p>
-<em>Zaoblení mapy</em> - Hodnota, která urèuje, jak hladké bude pøechody mezi hranami reliéfu.
-</p>
-
-<p>
-<em>Náhodná mapa</em> -  Vybere náhodnou mapu (èíslo mapy). Neovlivòuje ostatní nastavení.
-</p>
-
-<p>
-<em>Zobrazovat chodce</em> - Nastaví, zda budou zobrazováni chodci. Toto nastavení je mo¾né zmìnit bìhem hry v dialogu <a href="display.txt">zobrazení</a>.
-</p>
-
-<p>
-<em>Støídat den a noc</em> - Zapne mód støídání dne a noci. Toto nastavení je mo¾né zmìnit bìhem hry v dialogu <a href="display.txt">zobrazení</a>.
-</p>
-
-<p>
-<em>Naèíst</em> - Zobrazí dialog pro <a href="load.txt">naètení hry</a>.
-</p>
-
-<p>
-<em>Zaèít hru</em> - Vytvoøí novou mapu podle nastavení. Pokud je nastavena velká mapa èi jsou nastaveny velké hodnoty napø. poètu mìst èi husoty prùmyslu, vytváøení zabere del¹í dobu.
-</p>
-
-<p>
-<em>Konec</em> - Ukonèí hru bez dal¹ího potvrzení.
-</p>
-
-<p>
--><a href="about.txt">Informace o pøekladu</a>
+<title>Nápovìda - nová mapa</title>
+<h1>Nová mapa</h1>
+
+<p>
+Dialog nová mapa vám poskytuje mo¾nost vytvoøit si mapu podle vlastních pøedstav. Mù¾ete ovlivnit reliéf mapy, hustotu prùmyslu, poèet mìst aj.
+</p>
+
+<p>
+Ní¾e následuje krátký popis jednotlivých nastavení nové mapy:
+</p>
+
+<p>
+<em>Èíslo mapy</em> - Urèuje reliéf mapy - kde jsou hory, voda atp.
+</p>
+
+<p>
+<em>Velikost mapy</em> - Urèuje, jak bude mapa velká, tzn. kolik bude mít ètvereèkù. Od 128x128, a¾ po 640x640. Standardnì je nastaveno 256x256.<br>
+<em>Dùle¾ité:</em> Velké mapy jsou hodnì nároèné na pamì», zva¾te proto, zda máte dostateènì velkou operaèní pamì», aby hra fungovala plynule.
+</p>
+
+<p>
+<em>Hustota prùmyslu</em> - Urèuje, jaká bude hustota prùmyslu - továren, obchodù aj. - na generované mapì. Pokud si chcete hru ztí¾it, nastavte malé èíslo, bude potom obtí¾nìj¹í propojit prùmysl.
+</p>
+
+<p>
+<em>Poèet mìst</em> - Urèuje poèet mìst na mapì. Dostupné nastavení je od 2 a¾ do 64 mìst. Standardnì je nastaveno 8.
+</p>
+
+<p>
+<em>Hustota provozu</em> - Hustota soukromých aut ve mìstech. Standardnì je nastaveno 8. Doporuèujeme si zvolit malé èíslo, pøíli¹ná hustota není vhodná. Pozdìji mohou pøeká¾et va¹im vozidlùm.
+</p>
+
+<p>
+<em>Úroveò vody</em> - Nastavuje, jak vysoko bude voda nad dnem. Pøi nízkém èísle moho být na mapì zálivy a prùlivy.
+</p>
+
+<p>
+<em>Vý¹ka hor</em> -  Urèuje velikost nejvy¹¹ích hor na mapì. Dostupné nastavení je od 0 a¾ do 160. Nízké nastavení vytvoøí malé kopce a prùsmyky.
+</p>
+
+<p>
+<em>Zaoblení mapy</em> - Hodnota, která urèuje, jak hladké bude pøechody mezi hranami reliéfu.
+</p>
+
+<p>
+<em>Náhodná mapa</em> -  Vybere náhodnou mapu (èíslo mapy). Neovlivòuje ostatní nastavení.
+</p>
+
+<p>
+<em>Zobrazovat chodce</em> - Nastaví, zda budou zobrazováni chodci. Toto nastavení je mo¾né zmìnit bìhem hry v dialogu <a href="display.txt">zobrazení</a>.
+</p>
+
+<p>
+<em>Støídat den a noc</em> - Zapne mód støídání dne a noci. Toto nastavení je mo¾né zmìnit bìhem hry v dialogu <a href="display.txt">zobrazení</a>.
+</p>
+
+<p>
+<em>Naèíst</em> - Zobrazí dialog pro <a href="load.txt">naètení hry</a>.
+</p>
+
+<p>
+<em>Zaèít hru</em> - Vytvoøí novou mapu podle nastavení. Pokud je nastavena velká mapa èi jsou nastaveny velké hodnoty napø. poètu mìst èi husoty prùmyslu, vytváøení zabere del¹í dobu.
+</p>
+
+<p>
+<em>Konec</em> - Ukonèí hru bez dal¹ího potvrzení.
+</p>
+
+<p>
+-><a href="about.txt">Informace o pøekladu</a>
 </p>
diff --git a/simutrans/text/cz/options.txt b/simutrans/text/cz/options.txt
index 3dc92c3..0426a63 100644
--- a/simutrans/text/cz/options.txt
+++ b/simutrans/text/cz/options.txt
@@ -1,27 +1,27 @@
-<title>Nápovìda - nastavení hry</title>
-<h1>Nastavení hry</h1>
-
-<p>
-Dialog nastavení je branou pro nastavení rozlièných mo¾ností chování Simutrans bìhem hraní.<br>
-Následuje seznam voleb (s odkazy na detailnìj¹í informace), a krátký popis ka¾dého nastavení.
-</p>
-
-<p>
-<a href="language.txt">Jazyk</a> - Umo¾òuje nastavit jazyk pro Simutrans.<br>
-<a href="color.txt">Barva hráèe</a> - Mìní barvu va¹í spoleènosti.<br>
-<a href="display.txt">Zobrazení</a> - Zmìní nastavení obrazovky, jako denní a noèní mód aj.<br>
-<a href="sound.txt">Zvuky</a> - Nastavení voleb pro zvuky v Simutrans.<br>
-<a href="players.txt">Hráèi</a> - Nastaví va¹e poèítaèové konkurenty.<br>
-<a href="load.txt">Naèíst</a> - Naète døíve ulo¾enou hru.<br>
-<a href="save.txt">Ulo¾it</a> - Ulo¾í právì hranou hru.<br>
-<a href="new_world.txt">Nová mapa</a> - Zaèít novou hru (nemù¾e být pøeru¹eno ¾ádným dal¹ím dialogem)<br>
-<em>Konec</em> - Ukonèí hru bez dal¹ího potvrzení.
-</p>
-
-<p>
-Více informací o ka¾dé polo¾ce najdete pøímo v její nápovìdì nebo po kliknutí na odkaz vý¹e.
-</p>
-
-<p>
--><a href="about.txt">Informace o pøekladu</a>
+<title>Nápovìda - nastavení hry</title>
+<h1>Nastavení hry</h1>
+
+<p>
+Dialog nastavení je branou pro nastavení rozlièných mo¾ností chování Simutrans bìhem hraní.<br>
+Následuje seznam voleb (s odkazy na detailnìj¹í informace), a krátký popis ka¾dého nastavení.
+</p>
+
+<p>
+<a href="language.txt">Jazyk</a> - Umo¾òuje nastavit jazyk pro Simutrans.<br>
+<a href="color.txt">Barva hráèe</a> - Mìní barvu va¹í spoleènosti.<br>
+<a href="display.txt">Zobrazení</a> - Zmìní nastavení obrazovky, jako denní a noèní mód aj.<br>
+<a href="sound.txt">Zvuky</a> - Nastavení voleb pro zvuky v Simutrans.<br>
+<a href="players.txt">Hráèi</a> - Nastaví va¹e poèítaèové konkurenty.<br>
+<a href="load.txt">Naèíst</a> - Naète døíve ulo¾enou hru.<br>
+<a href="save.txt">Ulo¾it</a> - Ulo¾í právì hranou hru.<br>
+<a href="new_world.txt">Nová mapa</a> - Zaèít novou hru (nemù¾e být pøeru¹eno ¾ádným dal¹ím dialogem)<br>
+<em>Konec</em> - Ukonèí hru bez dal¹ího potvrzení.
+</p>
+
+<p>
+Více informací o ka¾dé polo¾ce najdete pøímo v její nápovìdì nebo po kliknutí na odkaz vý¹e.
+</p>
+
+<p>
+-><a href="about.txt">Informace o pøekladu</a>
 </p>
diff --git a/simutrans/text/cz/players.txt b/simutrans/text/cz/players.txt
index cd07923..cda46fa 100644
--- a/simutrans/text/cz/players.txt
+++ b/simutrans/text/cz/players.txt
@@ -1,13 +1,13 @@
-<title>Nápovìda - seznam hráèù</title>
-<h1>Seznam hráèù</h1>
-
-<p>V dialogu seznamu hráèù mù¾ete aktivovat a deaktivovat poèítaèové hráèe,
-a prohlí¾et stav jejich kont.</p>
-
-<p>K aktivaci/deaktivaci urèitého poèítaèového hráèe jednou kliknìte na tlaèítko vedle jména (barvy) hráèe.
-Pokud hráèe jednou aktivujete a pozdìji deaktivujete, tak nic co postavil se nezmìní, tzn. ¾e jeho dopravní spoje budou dále fungovat. Hráèe pouze 'uspíte', tak¾e nebude stavìt nic nového, ani zavádìt nové spoje.
-</p>
-
-<p>
--><a href="about.txt">Informace o pøekladu</a>
+<title>Nápovìda - seznam hráèù</title>
+<h1>Seznam hráèù</h1>
+
+<p>V dialogu seznamu hráèù mù¾ete aktivovat a deaktivovat poèítaèové hráèe,
+a prohlí¾et stav jejich kont.</p>
+
+<p>K aktivaci/deaktivaci urèitého poèítaèového hráèe jednou kliknìte na tlaèítko vedle jména (barvy) hráèe.
+Pokud hráèe jednou aktivujete a pozdìji deaktivujete, tak nic co postavil se nezmìní, tzn. ¾e jeho dopravní spoje budou dále fungovat. Hráèe pouze 'uspíte', tak¾e nebude stavìt nic nového, ani zavádìt nové spoje.
+</p>
+
+<p>
+-><a href="about.txt">Informace o pøekladu</a>
 </p>
diff --git a/simutrans/text/cz/railtools.txt b/simutrans/text/cz/railtools.txt
index 04e25fa..5b2dd98 100644
--- a/simutrans/text/cz/railtools.txt
+++ b/simutrans/text/cz/railtools.txt
@@ -1,46 +1,46 @@
-<title>Nápovìda - ¾eleznièní doprava</title>
-<h1>®eleznièní doprava</h1>
-
-<p>
-Tento dialog obsahuje nástroje pro stavbu kolejí, tunelù, návìstidel, stanic, dep, pøejezdù a elektrifikování trati.
-</p>
-
-<p>
-První jsou symboly rùzných druhù <em>¾eleznièních tratí</em>: Kliknutím na nìkterý z nich se kurzor zmìní v obrázek odpovídajícího druhu ¾eleznièní tratì. Rùzné druhy tratí se li¹í v max. rychlost, cenì, a cenì za údr¾bu. Parametry ka¾dého druhu se zobrazí po najetí kurzorem nad jeho obrázek. Cena v závorce je cena z údr¾bu.<br>
-Pro stavbu ¾eleznice kliknete na místo, kde má tra» zaèínat - musí být prázdné - a poté si vyberete místo, kde má tra» konèit. Nesmí být moc daleko a musí být spojitelné (nesmí napøíklad pøeká¾et silnice). Problém se silnicemi øe¹í pøejezdy.
-</p>
-
-<p>
-Symbol <em>stanice</em>: Kliknutím na nìj se kurzor zmìní v obrázek èásti stanice. Stanice jsou pou¾ívány pro nalo¾ení v¹ech druhù výrobkù a surovin, ale i cestujících a po¹ty. Nádra¾í mù¾e být jakkoliv velké, ale jeho jednotlivé èásti spolu musí sousedit a navíc nádra¾í del¹í ne¾ 8 ètvereèkù jsou zbyteèná, proto¾e takto dlouhý vlak ani nelze postavit. Stavìjte nádra¾í kdekoliv na trati, mimo stoupání, zatáèek a jiných nerovností. Kapacita èekajícího zbo¾í a lidí je neomezená, av¹ak pokud je od jednoho produktu na nádra¾í více ne¾ 1000 kusù, továrna, která jej produkuje pøestane dodávat. Zaène a¾ tehdy, kdy¾ poèet opìt klesne pod 1000 kusù.
-</p>
-
-<p>
-Symbol <em>návìstidel</em>: Ty se pou¾ívají, pokud potøebujete na jedné trati jezdit s více soupravami. Základní tvar je obousmìrný, postaví se jedním kliknutím na existující ¾eleznici. Pokud kliknete podruhé na to samé místo,semafor uèiní tra» jednosmìrnou z jedné strany. Tøetím kliknutím obrátíte semafory a tra» je jednosmìrná na druhou stranu. Takto je mo¾né urèovat, po jaké koleji pojedou vlaky z jedné strany a naopak. Kdy¾ semafory zbouráte a budete mít tra» elektrifikovanou, elektrifikace zùstane nepo¹kozená.
-</p>
-
-<p>
-Symbol <em>tunelu</em>: Kliknutím na nìj se kurzor zmìní v obrázek tunelu. Tunely se pou¾ívají pro protnutí hory v místech, kde by objí¾ïka znaènì prodlou¾ila dobu cesty vlakové soupravy. Pro stavbu tunelu musíte nìjprve postavit na místì, kde chcete zaèít ¾eleznici. Místo, kde má tunel konèit musí být pøesnì naproti zaèátku tunelu. Tunel také nemù¾e stoupat, jeho konec musí být ve stejné vý¹ce jako zaèátek.
-</p>
-
-<p>
-Symbol <em>pøejezdu</em>: Kliknutím na nìj se kurzor zmìní v obrázek ¾eleznièního pøejezdu. Pou¾ívá se v místì, kde se silnice protíná se ¾eleznicí. Pøejezd musí být postaven na ji¾ existují rovné èásti ¾eleznice nebo silnice.
-</p>
-
-<p>
-Symbol <em>¾eleznièního depa</em>: Kliknutím na nìj se kurzor zmìní v obrázek depa.
-Depa umo¾òují nakoupit v¹echna dostupná kolejová vozidla, spojovat soupravy a vytváøet èi pøiøazovat jízdní plány.
-Ke stavbì si vyberte místo, kde konèí ¾eleznice - nejlep¹í je tedy postavit si odboèku.
-</p>
-
-<p>
-<em>Pozor:</em> Ka¾dá èást nádra¾í má kapacitu dvou kusù vozidel. Pokud je vlak del¹í ne¾ nádra¾í, zadní èást vlaku nemù¾e být vylo¾ena ani nalo¾ena. Dávejte proto pozor, aby nádra¾í bylo dostateènì veliké.
-</p>
-
-<p>
--><a href="bridges.txt">Stavba mostù</a><br>
--><a href="depot.txt">Nápovìda pro depo</a>
-</p>
-
-<p>
--><a href="about.txt">Informace o pøekladu</a>
+<title>Nápovìda - ¾eleznièní doprava</title>
+<h1>®eleznièní doprava</h1>
+
+<p>
+Tento dialog obsahuje nástroje pro stavbu kolejí, tunelù, návìstidel, stanic, dep, pøejezdù a elektrifikování trati.
+</p>
+
+<p>
+První jsou symboly rùzných druhù <em>¾eleznièních tratí</em>: Kliknutím na nìkterý z nich se kurzor zmìní v obrázek odpovídajícího druhu ¾eleznièní tratì. Rùzné druhy tratí se li¹í v max. rychlost, cenì, a cenì za údr¾bu. Parametry ka¾dého druhu se zobrazí po najetí kurzorem nad jeho obrázek. Cena v závorce je cena z údr¾bu.<br>
+Pro stavbu ¾eleznice kliknete na místo, kde má tra» zaèínat - musí být prázdné - a poté si vyberete místo, kde má tra» konèit. Nesmí být moc daleko a musí být spojitelné (nesmí napøíklad pøeká¾et silnice). Problém se silnicemi øe¹í pøejezdy.
+</p>
+
+<p>
+Symbol <em>stanice</em>: Kliknutím na nìj se kurzor zmìní v obrázek èásti stanice. Stanice jsou pou¾ívány pro nalo¾ení v¹ech druhù výrobkù a surovin, ale i cestujících a po¹ty. Nádra¾í mù¾e být jakkoliv velké, ale jeho jednotlivé èásti spolu musí sousedit a navíc nádra¾í del¹í ne¾ 8 ètvereèkù jsou zbyteèná, proto¾e takto dlouhý vlak ani nelze postavit. Stavìjte nádra¾í kdekoliv na trati, mimo stoupání, zatáèek a jiných nerovností. Kapacita èekajícího zbo¾í a lidí je neomezená, av¹ak pokud je od jednoho produktu na nádra¾í více ne¾ 1000 kusù, továrna, která jej produkuje pøestane dodávat. Zaène a¾ tehdy, kdy¾ poèet opìt klesne pod 1000 kusù.
+</p>
+
+<p>
+Symbol <em>návìstidel</em>: Ty se pou¾ívají, pokud potøebujete na jedné trati jezdit s více soupravami. Základní tvar je obousmìrný, postaví se jedním kliknutím na existující ¾eleznici. Pokud kliknete podruhé na to samé místo,semafor uèiní tra» jednosmìrnou z jedné strany. Tøetím kliknutím obrátíte semafory a tra» je jednosmìrná na druhou stranu. Takto je mo¾né urèovat, po jaké koleji pojedou vlaky z jedné strany a naopak. Kdy¾ semafory zbouráte a budete mít tra» elektrifikovanou, elektrifikace zùstane nepo¹kozená.
+</p>
+
+<p>
+Symbol <em>tunelu</em>: Kliknutím na nìj se kurzor zmìní v obrázek tunelu. Tunely se pou¾ívají pro protnutí hory v místech, kde by objí¾ïka znaènì prodlou¾ila dobu cesty vlakové soupravy. Pro stavbu tunelu musíte nìjprve postavit na místì, kde chcete zaèít ¾eleznici. Místo, kde má tunel konèit musí být pøesnì naproti zaèátku tunelu. Tunel také nemù¾e stoupat, jeho konec musí být ve stejné vý¹ce jako zaèátek.
+</p>
+
+<p>
+Symbol <em>pøejezdu</em>: Kliknutím na nìj se kurzor zmìní v obrázek ¾eleznièního pøejezdu. Pou¾ívá se v místì, kde se silnice protíná se ¾eleznicí. Pøejezd musí být postaven na ji¾ existují rovné èásti ¾eleznice nebo silnice.
+</p>
+
+<p>
+Symbol <em>¾eleznièního depa</em>: Kliknutím na nìj se kurzor zmìní v obrázek depa.
+Depa umo¾òují nakoupit v¹echna dostupná kolejová vozidla, spojovat soupravy a vytváøet èi pøiøazovat jízdní plány.
+Ke stavbì si vyberte místo, kde konèí ¾eleznice - nejlep¹í je tedy postavit si odboèku.
+</p>
+
+<p>
+<em>Pozor:</em> Ka¾dá èást nádra¾í má kapacitu dvou kusù vozidel. Pokud je vlak del¹í ne¾ nádra¾í, zadní èást vlaku nemù¾e být vylo¾ena ani nalo¾ena. Dávejte proto pozor, aby nádra¾í bylo dostateènì veliké.
+</p>
+
+<p>
+-><a href="bridges.txt">Stavba mostù</a><br>
+-><a href="depot.txt">Nápovìda pro depo</a>
+</p>
+
+<p>
+-><a href="about.txt">Informace o pøekladu</a>
 </p>
diff --git a/simutrans/text/cz/roadtools.txt b/simutrans/text/cz/roadtools.txt
index 1873672..f38213e 100644
--- a/simutrans/text/cz/roadtools.txt
+++ b/simutrans/text/cz/roadtools.txt
@@ -1,42 +1,42 @@
-<title>Nápovìda - silnièní doprava</title>
-<h1>Silnièní doprava</h1>
-
-<p>
-Pøes dialog silnièní doprava mù¾ete stavìt silnice, tunely, zastávky, nakládací místa aj.
-</p>
-
-<p>
-První jsou symboly rùzných druhù <em>silnic</em>: Kliknutím na nìkterý z nich se kurzor zmìní v obrázek odpovídajícího druhu silnice. Rùzné druhy silnic se li¹í v max. rychlost, cenì, a cenì za údr¾bu. Parametry ka¾dého druhu se zobrazí po najetí kurzorem nad jeho obrázek. Cena v závorce je cena z údr¾bu.<br>
-Pro stavbu silnice kliknete na místo, kde má silnice zaèínat - musí být prázdné - a poté si vyberete místo, kde má silnice konèit. Nesmí být moc daleko a musí být spojitelné (nesmí napøíklad pøeká¾et ¾eleznice). Problém se ¾eleznicí øe¹í pøejezdy.
-</p>
-
-<p>
-Symbol <em>zastávek</em>: Kliknutím na nìj se kurzor zmìní v obrázek autobusové zastávky. Mohou zde tedy stavìt pouze autobusy a také dodávky na po¹tu. Pokud chcete pøepravovat po¹tu, musí být u zastávky postavena budova po¹ty. Kapacita zastávky je jeden autobus (po¹tovní dodávka) v ka¾dém smìru a 64 cestujících na jedno políèko zastávky (poèítá se i budova po¹ty). Pro stavbu vyberte jakékoliv rovné místo na silnici.
-</p>
-
-<p>
-Symbol <em>nakládacího depa</em>: Kliknutím na nìj se kurzor zmìní v obrázek tohoto depa. Nakládací depa jsou pou¾ívány pro nalo¾ení v¹ech druhù výrobkù a surovin. Nakládací depo má kapacitu dvou aut a 1000 kusù ka¾dého druhu zbo¾í.
-</p>
-
-<p>
-Symbol <em>tunelu</em>: Kliknutím na nìj se kurzor zmìní v obrázek tunelu. Tunely se pou¾ívají pro protnutí hory, v místech, kde by objí¾ïka znaènì prodlou¾ila dobu cesty vozidla. Pro stavbu tunelu musíte nejprve postavit silnici. Místo, kde má tunel konèit musí být pøesnì naproti zaèátku tunelu. Tunel také nemù¾e stoupat, jeho konec musí být ve stejné vý¹ce jako zaèátek.
-</p>
-
-<p>
-Symbol <em>pøejezdu</em>: Kliknutím na nìj se kurzor zmìní v obrázek ¾eleznièního pøejezdu. Pou¾ívá se v místì, kde se silnice protíná se ¾eleznicí. Pøejezd musí být postaven na ji¾ existují rovné èásti ¾eleznice nebo silnice.
-</p>
-
-<p>
-Symbol <em>silnièního depa</em>: Kliknutím na nìj se kurzor zmìní v obrázek depa.
-Depa umo¾òují nakoupit v¹echna dostupná vozidla, spojovat pøívìsy a vytváøet èi pøiøazovat jízdní plány.
-Ke stavbì si vyberte místo, kde konèí silnice - nejlep¹í je tedy postavit si odboèku.
-</p>
-
-<p>
--><a href="bridges.txt">Stavba mostù</a><br>
--><a href="depot.txt">Nápovìda pro depo</a>
-</p>
-
-<p>
--><a href="about.txt">Informace o pøekladu</a>
+<title>Nápovìda - silnièní doprava</title>
+<h1>Silnièní doprava</h1>
+
+<p>
+Pøes dialog silnièní doprava mù¾ete stavìt silnice, tunely, zastávky, nakládací místa aj.
+</p>
+
+<p>
+První jsou symboly rùzných druhù <em>silnic</em>: Kliknutím na nìkterý z nich se kurzor zmìní v obrázek odpovídajícího druhu silnice. Rùzné druhy silnic se li¹í v max. rychlost, cenì, a cenì za údr¾bu. Parametry ka¾dého druhu se zobrazí po najetí kurzorem nad jeho obrázek. Cena v závorce je cena z údr¾bu.<br>
+Pro stavbu silnice kliknete na místo, kde má silnice zaèínat - musí být prázdné - a poté si vyberete místo, kde má silnice konèit. Nesmí být moc daleko a musí být spojitelné (nesmí napøíklad pøeká¾et ¾eleznice). Problém se ¾eleznicí øe¹í pøejezdy.
+</p>
+
+<p>
+Symbol <em>zastávek</em>: Kliknutím na nìj se kurzor zmìní v obrázek autobusové zastávky. Mohou zde tedy stavìt pouze autobusy a také dodávky na po¹tu. Pokud chcete pøepravovat po¹tu, musí být u zastávky postavena budova po¹ty. Kapacita zastávky je jeden autobus (po¹tovní dodávka) v ka¾dém smìru a 64 cestujících na jedno políèko zastávky (poèítá se i budova po¹ty). Pro stavbu vyberte jakékoliv rovné místo na silnici.
+</p>
+
+<p>
+Symbol <em>nakládacího depa</em>: Kliknutím na nìj se kurzor zmìní v obrázek tohoto depa. Nakládací depa jsou pou¾ívány pro nalo¾ení v¹ech druhù výrobkù a surovin. Nakládací depo má kapacitu dvou aut a 1000 kusù ka¾dého druhu zbo¾í.
+</p>
+
+<p>
+Symbol <em>tunelu</em>: Kliknutím na nìj se kurzor zmìní v obrázek tunelu. Tunely se pou¾ívají pro protnutí hory, v místech, kde by objí¾ïka znaènì prodlou¾ila dobu cesty vozidla. Pro stavbu tunelu musíte nejprve postavit silnici. Místo, kde má tunel konèit musí být pøesnì naproti zaèátku tunelu. Tunel také nemù¾e stoupat, jeho konec musí být ve stejné vý¹ce jako zaèátek.
+</p>
+
+<p>
+Symbol <em>pøejezdu</em>: Kliknutím na nìj se kurzor zmìní v obrázek ¾eleznièního pøejezdu. Pou¾ívá se v místì, kde se silnice protíná se ¾eleznicí. Pøejezd musí být postaven na ji¾ existují rovné èásti ¾eleznice nebo silnice.
+</p>
+
+<p>
+Symbol <em>silnièního depa</em>: Kliknutím na nìj se kurzor zmìní v obrázek depa.
+Depa umo¾òují nakoupit v¹echna dostupná vozidla, spojovat pøívìsy a vytváøet èi pøiøazovat jízdní plány.
+Ke stavbì si vyberte místo, kde konèí silnice - nejlep¹í je tedy postavit si odboèku.
+</p>
+
+<p>
+-><a href="bridges.txt">Stavba mostù</a><br>
+-><a href="depot.txt">Nápovìda pro depo</a>
+</p>
+
+<p>
+-><a href="about.txt">Informace o pøekladu</a>
 </p>
diff --git a/simutrans/text/cz/save.txt b/simutrans/text/cz/save.txt
index efc6a5f..c44bf8e 100644
--- a/simutrans/text/cz/save.txt
+++ b/simutrans/text/cz/save.txt
@@ -1,27 +1,27 @@
-<title>Nápovìda - ulo¾it</title>
-<h1>Ukládání hry</h1>
-
-<p>
-Pokud chcete ulo¾it Va¹i rozehranou hru, abyste jí mohli pozdìji naèíst a pokraèovat v ní, lze tak uèinit pøes dialog ulo¾it.
-V tomto dialogu (stejnì jako v dialogu naèíst) také mù¾ete smazat døíve ulo¾ené hry.
-</p>
-
-<p>
-Hru mù¾ete ulo¾it do nového souboru, èi pøepsat soubor ji¾ existující. Pro ulo¾ení do nového souboru musíte nejprve vlo¾it jméno tohoto souboru, a poté kliknout na tlaèítko <strong>ulo¾it</strong>.
-Dialog se zavøe, hra se ulo¾í, a pokud v¹e probìhne bez problému, zobrazí se potvrzovací zpráva.
-</p>
-
-<p>
-Pøi mazání a pøepisování souborù dbejte zvý¹ené opatrnosti, proto¾e pokud soubor jednou sma¾ete (èi pøepí¹ete novou hrou), ji¾ nelze obnovit.<br>
-Ke smazání tedy kliknìte na tlaèítko <strong>X</strong>, umístìné vedle jména souboru, který chcete smazat.<br>
-Pro pøepsání døíve ulo¾ené hry pouze kliknìte na jméno souboru k pøepsání.<br>
-<em>Hra bude bez dal¹ího potvrzení smazána (nebo pøepsána).</em>
-</p>
-
-<p>
--><a href="load.txt">Nápovìda pro naèítání</a>
-</p>
-
-<p>
--><a href="about.txt">Informace o pøekladu</a>
+<title>Nápovìda - ulo¾it</title>
+<h1>Ukládání hry</h1>
+
+<p>
+Pokud chcete ulo¾it Va¹i rozehranou hru, abyste jí mohli pozdìji naèíst a pokraèovat v ní, lze tak uèinit pøes dialog ulo¾it.
+V tomto dialogu (stejnì jako v dialogu naèíst) také mù¾ete smazat døíve ulo¾ené hry.
+</p>
+
+<p>
+Hru mù¾ete ulo¾it do nového souboru, èi pøepsat soubor ji¾ existující. Pro ulo¾ení do nového souboru musíte nejprve vlo¾it jméno tohoto souboru, a poté kliknout na tlaèítko <strong>ulo¾it</strong>.
+Dialog se zavøe, hra se ulo¾í, a pokud v¹e probìhne bez problému, zobrazí se potvrzovací zpráva.
+</p>
+
+<p>
+Pøi mazání a pøepisování souborù dbejte zvý¹ené opatrnosti, proto¾e pokud soubor jednou sma¾ete (èi pøepí¹ete novou hrou), ji¾ nelze obnovit.<br>
+Ke smazání tedy kliknìte na tlaèítko <strong>X</strong>, umístìné vedle jména souboru, který chcete smazat.<br>
+Pro pøepsání døíve ulo¾ené hry pouze kliknìte na jméno souboru k pøepsání.<br>
+<em>Hra bude bez dal¹ího potvrzení smazána (nebo pøepsána).</em>
+</p>
+
+<p>
+-><a href="load.txt">Nápovìda pro naèítání</a>
+</p>
+
+<p>
+-><a href="about.txt">Informace o pøekladu</a>
 </p>
diff --git a/simutrans/text/cz/schedule.txt b/simutrans/text/cz/schedule.txt
index 41eaf2e..fecdcf4 100644
--- a/simutrans/text/cz/schedule.txt
+++ b/simutrans/text/cz/schedule.txt
@@ -1,41 +1,41 @@
-<title>Nápovìda - jízdní plán</title>
-<h1>Jízdní plán</h1>
-
-<p>
-Jízdní plán je mo¾né vytváøet tøemi zpùsoby:
-</p>
-
-<p>
-<em>1.)</em>Klasicky v nìjakém depu koupíte dopravní prostøedek a zmáèknete tlaèítko <strong>jízdní plán</strong>. Zobrazí se vám tabulka. Pøidejte si zastávky kliknutím kurzoru na po¾adované místo zastavení. Je mo¾né je zase odstraòovat tlaèítkem <strong>smazat</strong>. Kliknete na <strong>hotovo</strong> a mù¾ete dopravní prostøedek vypustit tlaèítkem <strong>start</strong>.
-</p>
-
-<p>
-<em>2.)</em>Pøes funkci <strong>Nová linka</strong>. Po kliknutí na nìj se vám zobrazí stejná tabulka jako v pøedchozím pøípadì, postup je stejný, a¾ na to, ze linka se ulo¾í a je mo¾né ji pojmenovat (tøeba Praha 456), pozdìji vyvolat (øádek nahoøe) a tlaèítkem <strong>nastavit linku</strong> pøiøadit její zastávky dal¹ímu libovolnému vozidlu.
-</p>
-
-<p>
-<em>3.)</em>Stisknìte klávesu "w", co¾ je správa linek, o tom byla trochu øeè v minulém pøípade. Tam mù¾ete pøidat novou linku, smazat linku, èi zmìnit pro v¹echna vozidla linky najednou(!).
-Postup operací je stejný, jako v pøedchozích pøípadech.
-</p>
-
-<p>
-Nastavení <strong>èekat na x%</strong> urèuje, na kolik procent musí být vozidlo plné, aby mohlo vyjet. Tímto zabráníte zbyteènému je¾dìní poloprázdných èi úplnì prázdných vozidel.
-<p>
-
-<p>
-Tlaèítkem <strong>Zpìtná jízda</strong> vlo¾íte na konec jízdního plánu aktuální zastávky, av¹ak v obráceném poøadí a bez poslední a první.
-Vozidlo se tak nebude od poslední zastávky vracet k první hned, ale pojede postupnì pøes ostatní zastávky v jízdním plánu v obráceném poøadí.
-</p>
-
-<p>
-Doporuèujeme vyu¾ívat pouze linky a ne staré formy jízdních øádù, je to neefektivní pøi pøidávání nových vozidel na stejnou trasu. Linky jsou také pøehlednìj¹í a v dialogu správy linek mù¾ete také sledovat mnoho statistických údajù.<br>
-Pokud ale neèekáte ¾e by se mohla linka pozdìji roz¹íøit na více ne¾ 1 vozidlo, v nepou¾ívání linek vám samozøejmì nic nebrání.
-</p>
-
-<p>
--><a href="depot.txt">Nápovìda pro depo</a>
-</p>
-
-<p>
--><a href="about.txt">Informace o pøekladu</a>
+<title>Nápovìda - jízdní plán</title>
+<h1>Jízdní plán</h1>
+
+<p>
+Jízdní plán je mo¾né vytváøet tøemi zpùsoby:
+</p>
+
+<p>
+<em>1.)</em>Klasicky v nìjakém depu koupíte dopravní prostøedek a zmáèknete tlaèítko <strong>jízdní plán</strong>. Zobrazí se vám tabulka. Pøidejte si zastávky kliknutím kurzoru na po¾adované místo zastavení. Je mo¾né je zase odstraòovat tlaèítkem <strong>smazat</strong>. Kliknete na <strong>hotovo</strong> a mù¾ete dopravní prostøedek vypustit tlaèítkem <strong>start</strong>.
+</p>
+
+<p>
+<em>2.)</em>Pøes funkci <strong>Nová linka</strong>. Po kliknutí na nìj se vám zobrazí stejná tabulka jako v pøedchozím pøípadì, postup je stejný, a¾ na to, ze linka se ulo¾í a je mo¾né ji pojmenovat (tøeba Praha 456), pozdìji vyvolat (øádek nahoøe) a tlaèítkem <strong>nastavit linku</strong> pøiøadit její zastávky dal¹ímu libovolnému vozidlu.
+</p>
+
+<p>
+<em>3.)</em>Stisknìte klávesu "w", co¾ je správa linek, o tom byla trochu øeè v minulém pøípade. Tam mù¾ete pøidat novou linku, smazat linku, èi zmìnit pro v¹echna vozidla linky najednou(!).
+Postup operací je stejný, jako v pøedchozích pøípadech.
+</p>
+
+<p>
+Nastavení <strong>èekat na x%</strong> urèuje, na kolik procent musí být vozidlo plné, aby mohlo vyjet. Tímto zabráníte zbyteènému je¾dìní poloprázdných èi úplnì prázdných vozidel.
+<p>
+
+<p>
+Tlaèítkem <strong>Zpìtná jízda</strong> vlo¾íte na konec jízdního plánu aktuální zastávky, av¹ak v obráceném poøadí a bez poslední a první.
+Vozidlo se tak nebude od poslední zastávky vracet k první hned, ale pojede postupnì pøes ostatní zastávky v jízdním plánu v obráceném poøadí.
+</p>
+
+<p>
+Doporuèujeme vyu¾ívat pouze linky a ne staré formy jízdních øádù, je to neefektivní pøi pøidávání nových vozidel na stejnou trasu. Linky jsou také pøehlednìj¹í a v dialogu správy linek mù¾ete také sledovat mnoho statistických údajù.<br>
+Pokud ale neèekáte ¾e by se mohla linka pozdìji roz¹íøit na více ne¾ 1 vozidlo, v nepou¾ívání linek vám samozøejmì nic nebrání.
+</p>
+
+<p>
+-><a href="depot.txt">Nápovìda pro depo</a>
+</p>
+
+<p>
+-><a href="about.txt">Informace o pøekladu</a>
 </p>
diff --git a/simutrans/text/cz/shiptools.txt b/simutrans/text/cz/shiptools.txt
index ba70a58..c26e3d9 100644
--- a/simutrans/text/cz/shiptools.txt
+++ b/simutrans/text/cz/shiptools.txt
@@ -1,22 +1,22 @@
-<title>Nápovìda - lodní doprava</title>
-<h1>Lodní doprava</h1>
-
-<p>
-Tento dialog vám umo¾òuje stavìt doky a pøístavy.
-</p>
-
-<p>
-První je symbol pøístavù. Kliknutím na nìj se vám kurzor zmìní v obrázek pøístavu. Pøístavy dovolují naloïovat cestující a zbo¾í z nedalekých továren a mìst. Ke stavbì pøístavu si vyberte místo na konci pevniny, které pøechází na vodu. Lze také stavìt velké pøístavy - musí se v¹ak navzájem dotýkat, èi být jinak spojeny - napø. ¾eleznièní zastávkou.
-</p>
-
-<p>
-K nastavení lodní zastávky musíte vybrat políèko, které je pøímo pøed pøístavem, ne v¹ak samotný pøístav!<strong>Buïte rozvá¾ní se stavbou pøístavù, odstraòování pøístavù je¹tì není zcela funkèní!</strong>
-</p>
-
-<p>
-Dva podobné symboly jsou pro stavbu doku, rozdíl je pouze v jejich orientaci, severní nebo východní. Kliknutím na jeden z nich se vám kurzor zmìní v obrázek doku. Doky jsou urèeny pro nákup v¹ech dostupných typù lodí, a pro správu lodí zde zaparkovaných (prodávání, nastavování linek a jízdního plánu aj.). Ke stavbì si vyberte místo na vodì, které chcete, mù¾e to být jakýkoliv vodní ètverec.
-</p>
-
-<p>
--><a href="about.txt">Informace o pøekladu</a>
+<title>Nápovìda - lodní doprava</title>
+<h1>Lodní doprava</h1>
+
+<p>
+Tento dialog vám umo¾òuje stavìt doky a pøístavy.
+</p>
+
+<p>
+První je symbol pøístavù. Kliknutím na nìj se vám kurzor zmìní v obrázek pøístavu. Pøístavy dovolují naloïovat cestující a zbo¾í z nedalekých továren a mìst. Ke stavbì pøístavu si vyberte místo na konci pevniny, které pøechází na vodu. Lze také stavìt velké pøístavy - musí se v¹ak navzájem dotýkat, èi být jinak spojeny - napø. ¾eleznièní zastávkou.
+</p>
+
+<p>
+K nastavení lodní zastávky musíte vybrat políèko, které je pøímo pøed pøístavem, ne v¹ak samotný pøístav!<strong>Buïte rozvá¾ní se stavbou pøístavù, odstraòování pøístavù je¹tì není zcela funkèní!</strong>
+</p>
+
+<p>
+Dva podobné symboly jsou pro stavbu doku, rozdíl je pouze v jejich orientaci, severní nebo východní. Kliknutím na jeden z nich se vám kurzor zmìní v obrázek doku. Doky jsou urèeny pro nákup v¹ech dostupných typù lodí, a pro správu lodí zde zaparkovaných (prodávání, nastavování linek a jízdního plánu aj.). Ke stavbì si vyberte místo na vodì, které chcete, mù¾e to být jakýkoliv vodní ètverec.
+</p>
+
+<p>
+-><a href="about.txt">Informace o pøekladu</a>
 </p>
diff --git a/simutrans/text/cz/sound.txt b/simutrans/text/cz/sound.txt
index 06cfa23..d11b01b 100644
--- a/simutrans/text/cz/sound.txt
+++ b/simutrans/text/cz/sound.txt
@@ -1,19 +1,19 @@
-<title>Nápovìda - zvuk a hudba</title>
-<h1>Zvuk a hudba</h1>
-
-<p>
-Zde mù¾ete podle svého pøizpùsobit zvuky, které usly¹íte, a také hudbu, která bude hrát na pozadí hry.
-</p>
-
-<p>
-Nastavení hlasitosti zvukù a hudby se provádí pomocí li¹ty, pøi pohybu doprava se zvy¹uje hlasitost, pøi posunu doleva se hlasitost sni¾uje. Hlasitost zvuku ovlivòuje hlasitost zvukù pøi stavìní a hlasitost zvukù vozidel. Hlasitost hudby ovlivòuje hlasitost právì pøehrávané písnièky.<br>
-Poslední tlaèítka slou¾í k pøevíjení hudby. Levé tlaèítko pøevine písnièku na zaèátek, pravé na konec. Pokud nejsou nakonfigurovány ¾ádné písnicky, jsou tyto tlaèítka neaktivní.<br>
-</p>
-
-<p>
-<em>Pozor:</em> Hudba není dodávána spoleènì se Simutrans, musíte si ji sami do adresáøe Music nakopírovat. Tam také najdete dal¹í nápovìdu (anglicky).
-</p>
-
-<p>
--><a href="about.txt">Informace o pøekladu</a>
+<title>Nápovìda - zvuk a hudba</title>
+<h1>Zvuk a hudba</h1>
+
+<p>
+Zde mù¾ete podle svého pøizpùsobit zvuky, které usly¹íte, a také hudbu, která bude hrát na pozadí hry.
+</p>
+
+<p>
+Nastavení hlasitosti zvukù a hudby se provádí pomocí li¹ty, pøi pohybu doprava se zvy¹uje hlasitost, pøi posunu doleva se hlasitost sni¾uje. Hlasitost zvuku ovlivòuje hlasitost zvukù pøi stavìní a hlasitost zvukù vozidel. Hlasitost hudby ovlivòuje hlasitost právì pøehrávané písnièky.<br>
+Poslední tlaèítka slou¾í k pøevíjení hudby. Levé tlaèítko pøevine písnièku na zaèátek, pravé na konec. Pokud nejsou nakonfigurovány ¾ádné písnicky, jsou tyto tlaèítka neaktivní.<br>
+</p>
+
+<p>
+<em>Pozor:</em> Hudba není dodávána spoleènì se Simutrans, musíte si ji sami do adresáøe Music nakopírovat. Tam také najdete dal¹í nápovìdu (anglicky).
+</p>
+
+<p>
+-><a href="about.txt">Informace o pøekladu</a>
 </p>
diff --git a/simutrans/text/cz/station.txt b/simutrans/text/cz/station.txt
index 0ce88d5..72ba21d 100644
--- a/simutrans/text/cz/station.txt
+++ b/simutrans/text/cz/station.txt
@@ -1,35 +1,35 @@
-<title>Nápovìda - dialog stanice</title>
-<h1>Dialog stanice</h1>
-
-<p>
-Informaèní dialog lze zobrazit po kliknutí na libovolnou stanici. Poskytuje rùzné u¾iteèné informace o stanici, vèetnì mo¾nosti zobrazení grafù. Mù¾ete také u ka¾dé va¹í stanice kdykoliv zmìnit název.
-</p>
-
-<p>
-Dialog se skládá ze seznamu, nìkolika ovládacích tlaèítek nahoøe, a popøípadì také z èásti s grafy (viz ní¾e).<br>
-Vstupní pole nahoøe vám umo¾òuje zmìnit název. Tlaèítko <strong>detaily</strong> zobrazí detaily o stanici - jaké je odsud pøímé spojení, jaké linky obsluhují tuto stanici nebo tøeba jaké zbo¾í je napojeným prùmyslem produkováno a vy¾adováno.
-</p>
-
-<p>
-Hlavní informace jsou zobrazeny uprostøed a v dolní èásti dialogu. Na seznamu se ukazují komodity, které èekají na odvezení ze stanice. Komodity lze øadit pomocí tlaèítka <strong>pøes/poèet/cíl</strong>.
-</p>
-
-<p>
-Seznam zobrazuje komodity ji¾ tøídìné podle druhu, ka¾dý druh komodit je pohromadì v jedné èásti.
-</p>
-
-<p>
-Dále jsou komodity uvnitø ka¾dé èásti tøídìny podle toho, kam má být která odvezena, pøes jakou pøestupní stanici èi dle poètu (závisí na tlaèítku <strong>pøes/poèet/cíl</strong>).
-</p>
-
-<p>
-Tlaèítkem <strong>Chart</strong> lze zapnout zobrazení grafù. Zde si pomocí tlaèítek mù¾ete vybrat, jakou statistickou informaci o stanici chcete zobrazit.
-</p>
-
-<p>
-<em>Poznámka:</em> Dialog je neustále obnovován, proto vidíte v¾dy aktuální informace o stanici, bez potøeby dialog znovu zavírat a otevírat.
-</p>
-
-<p>
--><a href="about.txt">Informace o pøekladu</a>
+<title>Nápovìda - dialog stanice</title>
+<h1>Dialog stanice</h1>
+
+<p>
+Informaèní dialog lze zobrazit po kliknutí na libovolnou stanici. Poskytuje rùzné u¾iteèné informace o stanici, vèetnì mo¾nosti zobrazení grafù. Mù¾ete také u ka¾dé va¹í stanice kdykoliv zmìnit název.
+</p>
+
+<p>
+Dialog se skládá ze seznamu, nìkolika ovládacích tlaèítek nahoøe, a popøípadì také z èásti s grafy (viz ní¾e).<br>
+Vstupní pole nahoøe vám umo¾òuje zmìnit název. Tlaèítko <strong>detaily</strong> zobrazí detaily o stanici - jaké je odsud pøímé spojení, jaké linky obsluhují tuto stanici nebo tøeba jaké zbo¾í je napojeným prùmyslem produkováno a vy¾adováno.
+</p>
+
+<p>
+Hlavní informace jsou zobrazeny uprostøed a v dolní èásti dialogu. Na seznamu se ukazují komodity, které èekají na odvezení ze stanice. Komodity lze øadit pomocí tlaèítka <strong>pøes/poèet/cíl</strong>.
+</p>
+
+<p>
+Seznam zobrazuje komodity ji¾ tøídìné podle druhu, ka¾dý druh komodit je pohromadì v jedné èásti.
+</p>
+
+<p>
+Dále jsou komodity uvnitø ka¾dé èásti tøídìny podle toho, kam má být která odvezena, pøes jakou pøestupní stanici èi dle poètu (závisí na tlaèítku <strong>pøes/poèet/cíl</strong>).
+</p>
+
+<p>
+Tlaèítkem <strong>Chart</strong> lze zapnout zobrazení grafù. Zde si pomocí tlaèítek mù¾ete vybrat, jakou statistickou informaci o stanici chcete zobrazit.
+</p>
+
+<p>
+<em>Poznámka:</em> Dialog je neustále obnovován, proto vidíte v¾dy aktuální informace o stanici, bez potøeby dialog znovu zavírat a otevírat.
+</p>
+
+<p>
+-><a href="about.txt">Informace o pøekladu</a>
 </p>
diff --git a/simutrans/text/de/airtools.txt b/simutrans/text/de/airtools.txt
index be8e198..5558f7d 100644
--- a/simutrans/text/de/airtools.txt
+++ b/simutrans/text/de/airtools.txt
@@ -1,20 +1,20 @@
-<title>Flughafenbau Hilfe</title>
-
-<h1><strong>Flughafenbauwerkzeuge</strong></h1>
-
-<p>
-Diese Werkzeugleiste dient dem Bau von Rollfeldern, Startbahnen, Hangare, Gangways und Nebengebäuden. Bei der Auswahl eines Werkzeuges verwandelt sich der Cursor in das jeweilige Symbol.
-</p>
-<p>
-<em>Rollfelder</em> und <em>Startbahnen</em> bilden die Verkehrswege des Flughafens. Sie werden wie <a href="roadtools.txt">Strassen</a> gebaut, damit ein funktionstüchtiger Flughafen entsteht, müssen folgende Regeln eingehalten werden:<br>
-- Startbahnen müssen immer gerade sein, dürfen sich aber kreuzen,<br>
-- Rollfelder müssen mit der Startbahn verbunden sein, dürfen aber nicht an das Ende einer Startbahn anschliessen, sonst finden Flugzeuge keinen Weg mehr zum Ziel.
-</p>
-<p>
-Im <em>Hangar</em> kannst Du Flugzeuge bauen sowie Linien einrichten und die Flugzeuge nach der Zuordnung zu Linien starten. Das Depot kann nur auf einem ebenen Rollfeldende platziert werden.
-</p>
-<p>
-<em>Gangways</em> stellen die Haltepunkte der Flugzeuge zum Ein- und Ausladen dar. Wie ein Hangar kann eine Gangway nur auf ein Endstück des Rollfelds gesetzt werden, und erst mit dessen Bau wird der Flughafen als <a href="station.txt">Haltestelle</a> errichtet. Soll der Flughafen an eine bestehende Haltestelle angeschlossen werden, muss die Gangway diese direkt erweitern.
-</p>
-<p>
+<title>Flughafenbau Hilfe</title>
+
+<h1><strong>Flughafenbauwerkzeuge</strong></h1>
+
+<p>
+Diese Werkzeugleiste dient dem Bau von Rollfeldern, Startbahnen, Hangare, Gangways und Nebengebäuden. Bei der Auswahl eines Werkzeuges verwandelt sich der Cursor in das jeweilige Symbol.
+</p>
+<p>
+<em>Rollfelder</em> und <em>Startbahnen</em> bilden die Verkehrswege des Flughafens. Sie werden wie <a href="roadtools.txt">Strassen</a> gebaut, damit ein funktionstüchtiger Flughafen entsteht, müssen folgende Regeln eingehalten werden:<br>
+- Startbahnen müssen immer gerade sein, dürfen sich aber kreuzen,<br>
+- Rollfelder müssen mit der Startbahn verbunden sein, dürfen aber nicht an das Ende einer Startbahn anschliessen, sonst finden Flugzeuge keinen Weg mehr zum Ziel.
+</p>
+<p>
+Im <em>Hangar</em> kannst Du Flugzeuge bauen sowie Linien einrichten und die Flugzeuge nach der Zuordnung zu Linien starten. Das Depot kann nur auf einem ebenen Rollfeldende platziert werden.
+</p>
+<p>
+<em>Gangways</em> stellen die Haltepunkte der Flugzeuge zum Ein- und Ausladen dar. Wie ein Hangar kann eine Gangway nur auf ein Endstück des Rollfelds gesetzt werden, und erst mit dessen Bau wird der Flughafen als <a href="station.txt">Haltestelle</a> errichtet. Soll der Flughafen an eine bestehende Haltestelle angeschlossen werden, muss die Gangway diese direkt erweitern.
+</p>
+<p>
 <em>Nebengebäude</em> für Flughäfen haben dieselben Funktionen wie alle anderen <a href="special.txt">Nebengebäude.</a>
diff --git a/simutrans/text/de/baum_build.txt b/simutrans/text/de/baum_build.txt
index 746e5e4..f47c526 100644
--- a/simutrans/text/de/baum_build.txt
+++ b/simutrans/text/de/baum_build.txt
@@ -1,26 +1,26 @@
-<title>Bäume pflanzen</title>
-
-<h1><strong>Bäume pflanzen</strong></h1>
-
-<p>
-Der Dialog ist in vier Bereiche aufgeteilt.
-<br>
-· oben links befindet sich die Auswahlliste mit den Bäumen<br>
-· untern links wird das Bild des ausgewählten Baums angezeigt<br>
-· oben rechts befinden sich einige Optionen<br>
-· unten rechts werden die Informationen des ausgewählten Baums angezeigt<br>
-</p>
-<p>
-<h1>Auswahlliste</h1>
-<br>
-In der Auswahlliste werden alle zur Verfügung stehenden Bäume angezeigt.
-Oben befinden sich zwei Reiter, die die Anzeige umschalten.<br>
-· <em>Übersetzung:</em> Zeigt die Namen so an, wie diese im Spiel verwendet werden. Dies ist abhängig von der eingestellten Sprache. Wenn keine Übersetzung für die eingestellte Sprache vorhanden ist, wird der Objektname angezeigt.<br>
-· <em>Objekt:</em> Zeigt die internen Objektnamen an.<br>
-<br>
-</p>
-<h1>Optionen</h1>
-<br>
-· <em>alle Klimazonen:</em> Diese Option deaktiviert die Klimazonenzuordnung beim pflanzen des Baums.<br>
-· <em>Zufallsjahr:</em> Es wird beim Pflanzen des Baums ein zufälliges Baumalter gewählt.<br>
+<title>Bäume pflanzen</title>
+
+<h1><strong>Bäume pflanzen</strong></h1>
+
+<p>
+Der Dialog ist in vier Bereiche aufgeteilt.
+<br>
+· oben links befindet sich die Auswahlliste mit den Bäumen<br>
+· untern links wird das Bild des ausgewählten Baums angezeigt<br>
+· oben rechts befinden sich einige Optionen<br>
+· unten rechts werden die Informationen des ausgewählten Baums angezeigt<br>
+</p>
+<p>
+<h1>Auswahlliste</h1>
+<br>
+In der Auswahlliste werden alle zur Verfügung stehenden Bäume angezeigt.
+Oben befinden sich zwei Reiter, die die Anzeige umschalten.<br>
+· <em>Übersetzung:</em> Zeigt die Namen so an, wie diese im Spiel verwendet werden. Dies ist abhängig von der eingestellten Sprache. Wenn keine Übersetzung für die eingestellte Sprache vorhanden ist, wird der Objektname angezeigt.<br>
+· <em>Objekt:</em> Zeigt die internen Objektnamen an.<br>
+<br>
+</p>
+<h1>Optionen</h1>
+<br>
+· <em>alle Klimazonen:</em> Diese Option deaktiviert die Klimazonenzuordnung beim pflanzen des Baums.<br>
+· <em>Zufallsjahr:</em> Es wird beim Pflanzen des Baums ein zufälliges Baumalter gewählt.<br>
 </p>
diff --git a/simutrans/text/de/citybuilding_build.txt b/simutrans/text/de/citybuilding_build.txt
index cc415bc..a5f681a 100644
--- a/simutrans/text/de/citybuilding_build.txt
+++ b/simutrans/text/de/citybuilding_build.txt
@@ -1,36 +1,36 @@
-<title>Stadtgebäude bauen</title>
-
-<h1><strong>Stadtgebäude bauen</strong></h1>
-
-<p>
-Der Dialog ist in vier Bereiche aufgeteilt.
-<br>
-· oben links befindet sich die Auswahlliste mit den Stadtgebäuden<br>
-· untern links wird das Bild des ausgewählten Stadtgebäudes angezeigt<br>
-· oben rechts befinden sich einige Optionen<br>
-· unten rechts werden die Informationen des ausgewählten Stadtgebäudes angezeigt<br>
-</p>
-<p>
-<h1>Auswahlliste</h1>
-<br>
-In der Auswahlliste werden alle zur Verfügung stehenden Stadtgebäude angezeigt, wenn die entsprechenden Optionen aktiviert (<em>Wohnhaus</em>, <em>Gewerbegebäude</em>, <em>Industriegebäude</em>) sind.
-Oben befinden sich zwei Reiter, die die Anzeige umschalten.<br>
-· <em>Übersetzung:</em> Zeigt die Namen so an, wie diese im Spiel verwendet werden. Dies ist abhängig von der eingestellten Sprache. Wenn keine Übersetzung für die eingestellte Sprache vorhanden ist, wird der Objektname angezeigt.<br>
-· <em>Objekt:</em> Zeigt die internen Objektnamen an.<br>
-<br>
-Die Schriftfarben haben folgende Bedeutung:<br>
-· <em>blaue Schrift</em> kennzeichnet Wohnhäuser.<br>
-· <em>grüne Schrift</em> kennzeichnet Gewerbegebäude.<br>
-· <em>schwarze Schrift</em> kennzeichnet Industriegebäude.<br>
-</p>
-<h1>Optionen</h1>
-<br>
-· <em>alle Klimazonen:</em> Diese Option deaktiviert die Klimazonenzuordnung beim Bau des Stadtgebäudes.<br>
-· <em>Mit Epoche ab Jahr:</em> Es werden nur die Gebäude in der Auswahlliste angezeigt, die im aktuellem Spieljahr zur Verfügung stehen.<br>
-· <em>Auch veraltete zeigen:</em> Es werden auch die Gebäude in der Auswahlliste angezeigt, die in früheren Spieljahren mal zur Verfügung standen.<br>
-· <em>Wohnhaus:</em> Es werden die Wohnhäuser in der Auswahlliste angezeigt.<br>
-· <em>Gewerbegebäude:</em> Es werden die Gewerbegebäude in der Auswahlliste angezeigt.<br>
-· <em>Industriegebäude:</em> Es werden die Industriegebäude in der Auswahlliste angezeigt.
-<br>
-· <em>Rotation:</em> Sofern das ausgewählte Stadtgebäude mehrere Ansichten hat, kann hier eine bestimmte Ansicht ausgewählt werden. Die Grafik unten links wird entsprechen gewechselt. Bei der Auswahl von <em>Zufällig</em>, wird beim Bau des Stadtgebäudes irgendeine Ansicht gewählt.<br>
+<title>Stadtgebäude bauen</title>
+
+<h1><strong>Stadtgebäude bauen</strong></h1>
+
+<p>
+Der Dialog ist in vier Bereiche aufgeteilt.
+<br>
+· oben links befindet sich die Auswahlliste mit den Stadtgebäuden<br>
+· untern links wird das Bild des ausgewählten Stadtgebäudes angezeigt<br>
+· oben rechts befinden sich einige Optionen<br>
+· unten rechts werden die Informationen des ausgewählten Stadtgebäudes angezeigt<br>
+</p>
+<p>
+<h1>Auswahlliste</h1>
+<br>
+In der Auswahlliste werden alle zur Verfügung stehenden Stadtgebäude angezeigt, wenn die entsprechenden Optionen aktiviert (<em>Wohnhaus</em>, <em>Gewerbegebäude</em>, <em>Industriegebäude</em>) sind.
+Oben befinden sich zwei Reiter, die die Anzeige umschalten.<br>
+· <em>Übersetzung:</em> Zeigt die Namen so an, wie diese im Spiel verwendet werden. Dies ist abhängig von der eingestellten Sprache. Wenn keine Übersetzung für die eingestellte Sprache vorhanden ist, wird der Objektname angezeigt.<br>
+· <em>Objekt:</em> Zeigt die internen Objektnamen an.<br>
+<br>
+Die Schriftfarben haben folgende Bedeutung:<br>
+· <em>blaue Schrift</em> kennzeichnet Wohnhäuser.<br>
+· <em>grüne Schrift</em> kennzeichnet Gewerbegebäude.<br>
+· <em>schwarze Schrift</em> kennzeichnet Industriegebäude.<br>
+</p>
+<h1>Optionen</h1>
+<br>
+· <em>alle Klimazonen:</em> Diese Option deaktiviert die Klimazonenzuordnung beim Bau des Stadtgebäudes.<br>
+· <em>Mit Epoche ab Jahr:</em> Es werden nur die Gebäude in der Auswahlliste angezeigt, die im aktuellem Spieljahr zur Verfügung stehen.<br>
+· <em>Auch veraltete zeigen:</em> Es werden auch die Gebäude in der Auswahlliste angezeigt, die in früheren Spieljahren mal zur Verfügung standen.<br>
+· <em>Wohnhaus:</em> Es werden die Wohnhäuser in der Auswahlliste angezeigt.<br>
+· <em>Gewerbegebäude:</em> Es werden die Gewerbegebäude in der Auswahlliste angezeigt.<br>
+· <em>Industriegebäude:</em> Es werden die Industriegebäude in der Auswahlliste angezeigt.
+<br>
+· <em>Rotation:</em> Sofern das ausgewählte Stadtgebäude mehrere Ansichten hat, kann hier eine bestimmte Ansicht ausgewählt werden. Die Grafik unten links wird entsprechen gewechselt. Bei der Auswahl von <em>Zufällig</em>, wird beim Bau des Stadtgebäudes irgendeine Ansicht gewählt.<br>
 </p>
diff --git a/simutrans/text/de/citylist_filter.txt b/simutrans/text/de/citylist_filter.txt
index 7382878..ed308b4 100644
--- a/simutrans/text/de/citylist_filter.txt
+++ b/simutrans/text/de/citylist_filter.txt
@@ -1,15 +1,15 @@
-<title>Stadtliste Hilfe</title>
-
-<h1><strong>Stadtliste</strong></h1>
-
-<p>
-Die Stadtliste wird mit <em>Shift</em>+<em>T</em> oder über die <a href="list.txt">Listenverwaltung</a> aufgerufen.<br/>
-Im Fenster sind alle Städte in der Reihenfolge gelistet, in welcher sie am Beginn eines Spieles entstanden sowie später gegründet wurden. Es gibt keine Sortier- oder Filterfunktionen.
-</p>
-<p>
-<em>Listeneinträge:</em> Klickst Du einen Stadtnamen an, wird die Karte auf die Stadt zentriert, das Fenster der <a href="citywindow.txt">Stadtinformation</a> öffnet sich.<br/>
-· <em>Ordnungszahl:</em> Der Wert wird fortlaufend vom Spiel vergeben.<br/>
-· <em>Stadtname:</em> Den Namen der Stadt kannst Du in der <a href="citywindow.txt">Stadtinformation</a> ändern.<br/>
-· <em>Einwohnerzahl:</em> Die Zahl der Einwohner wird angezeigt.<br/>
-· <em>Wachstumsfaktor:</em> Der Wachstumsfaktor lässt Rückschlüsse auf die Wachstumsrate der Stadt und deren Beförderungsversorgung zu. Je höher der Wert ist, desto geringer ist die Differenz zwischen Beförderungsbedarf und der erbrachten Beförderungsleistung.
+<title>Stadtliste Hilfe</title>
+
+<h1><strong>Stadtliste</strong></h1>
+
+<p>
+Die Stadtliste wird mit <em>Shift</em>+<em>T</em> oder über die <a href="list.txt">Listenverwaltung</a> aufgerufen.<br/>
+Im Fenster sind alle Städte in der Reihenfolge gelistet, in welcher sie am Beginn eines Spieles entstanden sowie später gegründet wurden. Es gibt keine Sortier- oder Filterfunktionen.
+</p>
+<p>
+<em>Listeneinträge:</em> Klickst Du einen Stadtnamen an, wird die Karte auf die Stadt zentriert, das Fenster der <a href="citywindow.txt">Stadtinformation</a> öffnet sich.<br/>
+· <em>Ordnungszahl:</em> Der Wert wird fortlaufend vom Spiel vergeben.<br/>
+· <em>Stadtname:</em> Den Namen der Stadt kannst Du in der <a href="citywindow.txt">Stadtinformation</a> ändern.<br/>
+· <em>Einwohnerzahl:</em> Die Zahl der Einwohner wird angezeigt.<br/>
+· <em>Wachstumsfaktor:</em> Der Wachstumsfaktor lässt Rückschlüsse auf die Wachstumsrate der Stadt und deren Beförderungsversorgung zu. Je höher der Wert ist, desto geringer ist die Differenz zwischen Beförderungsbedarf und der erbrachten Beförderungsleistung.
 </p>
diff --git a/simutrans/text/de/citywindow.txt b/simutrans/text/de/citywindow.txt
index 78496f5..9964f6e 100644
--- a/simutrans/text/de/citywindow.txt
+++ b/simutrans/text/de/citywindow.txt
@@ -1,53 +1,53 @@
-<title>Stadtinformation Hilfe</title>
-
-<h1><strong>Stadtinformation</strong></h1>
-
-<p>
-Die Stadtinformation zeigt Statistiken über die ausgewählte Stadt. Du kannst sie durch anklicken des Rathauses mit dem Abfragewerkzeug öffnen. Das anklicken des Stadtnamens in der <a href="citylist_filter.txt">Stadtliste</a> öffnet die Stadtinformation ebenfalls.
-</p>
-<p>
-· <em>Name der Stadt:</em> Der Stadtname wird vom Spiel vergeben. Ein Name wird per Zufall aus der <em>simutrans/text/citylist_de.txt</em> (für die deutsche Sprachauswahl) ausgewählt. Du kannst sowohl die Datei als auch den Namen der Stadt im Spiel editieren.
-</p>
-<p>
-· <em>Größe:</em> Die Einwohnerzahl der Stadt wird angezeigt. Wächst die Stadt über pak-abhängig festgelegte Schwellenwerte hinaus, werden Fabriken bzw. Stadtattraktionen gebaut.<br/>
-· <em>Wachstumsfaktor:</em> Die Zahl in Klammern hinter der Größe gibt den derzeitigen Wachstumsfaktor an. Das maximale Wachstum ist nach Stadtgrößen gestaffelt: 2 bei weniger als 1000 Einwohnern, 4 bei Einwohnerzahlen zwischen 1001 und 10.000, 8 für größere Städte. Durch die gestaffelte Regelung bleiben Dörfer länger Dörfer.
-</p>
-<p>
-· <em>Stadtgebiet:</em> Das Gebiet der Stadt umfasst das Quadrat, welches durch die beiden Koordinatenpaare (links oben und rechts unten) gebildet wird. Innerhalb der Stadtgrenzen realisiert die Stadt ihre Bauvorhaben. Mit dem Wachstum der Stadt erweitern sich deren Grenzen. Stadtgebiete können sich überlappen.<br/>
-· Die Stadt generiert Passagiere und Post zunächst für Bebauungen entsprechend den in den Gebäudeinfofenstern angegebenen Passagier- und Postraten. Reise- und Versandziele können alle Felder der Stadtgebiete (also auch der Ausflug zu den Grünflächen der Städte), der Ausflugziele und Fabriken sein.
-</p>
-<p>
-· <em>Bautätigkeit:</em> Über die Werte der <em>Arbeits-</em>, <em>Obdachlosen-</em> und Einwohnerzahl ist die Bautätigkeit der Stadt geregelt.
-</p>
-<p>
-· <em>Passagier- und Postziele:</em> Die linke Weltkarte zeigt die Ziele für den letzten Monat, die rechte Weltkarte zeigt die Ziele für den laufenden Monat. Für jede angetretene Reise und für jede abgesandte Postsendung wird das Ziel mit einem gelben Punkt markiert. Orangene Punkte werden an die beabsichtigten Ziele platziert, wenn keine Route gefunden wurde. Das Postaufkommen ist anfänglich ungefähr 1/3 des Passagieraufkommens. Mit dem Stadtwachstum kann sich das Verhältnis ändern.
-</p>
-<p>
-· <em>Statistiken:</em> Die Farben der Kurven entsprechen jenen der Statistikschalter. Werte werden je nach der Einstellung der Anzeigezeiträume jahresweise oder monatweise aufaddiert. Die neuesten Werte stehen links.<br>
-· <em>Einwohner:</em> Die Entwicklung der Einwohnerzahl wird dargestellt.<br>
-· <em>Wachstum:</em> Das Bevölkerungswachstum der Stadt wird dargestellt.<br>
-· <em>Transportiert:</em> Es wird gezeigt, wieviele Passagiere und Post ihre Reise angetreten haben.<br>
-· <em>Passagiere:</em> Alle in der Stadt generierten Passagiere und Postsendungen werden angezeigt. Je näher beieinander die Graphen für "Transportiert" und "Passagiere" liegen, desto schneller wächst die Einwohnerzahl der Stadt.
-</p>
-<p>
-In Zusammenhang mit dem Stadtwachstum, den Arbeits- und Obdachlosenzahlen sowie der Erzeugung neuer Industrieketten tauchten des öfteren Fehlmeinungen auf. Folgende Beschreibung soll diese beseitigen:
-</p>
-<p>
-Eine neue Stadt wird gegründet. Sie erreicht eine gewisse Anzahl Einwohner.<br>
-<strong>Alle neuen Einwohner einer Stadt sind zuerst arbeitslos und obdachlos. Arbeits- und Obdachlosigkeit bekämpft die Stadt (und nur sie!) mit dem Bau von Stadtgebäuden</strong> (die Titelzeile des Infofensters ist orange); wenn die Arbeits- oder Obdachlosenzahlen über 70 steigen, entstehen allmählich neue Gebäude oder Gebäude werden durch solche mit höheren Passagierraten ersetzt. Dabei sinken die Zahlen um den Passagierlevel des neuen Gebäudes.
-</p>
-<p>
-· <em>Gebäudearten:</em> Im Stadtbereich werden 3 Gebäudetypen gebaut:<br/>
-- <em>Industrie:</em> Industriegebäude dienen als Arbeitsstätten innerhalb der Stadt. Ihr Bau oder ihre Erneuerung verringert die Arbeitslosenzahl. Ihre Postrate ist halb so gross wie ihre Passagierrate.<br/>
-- <em>Wohngebäude:</em> In den Wohngebäuden leben die Einwohner. Ihr Bau oder ihre Erneuerung verringert die Obdachlosenzahl. Ihre Postrate ist gleich der Passagierrate.<br/>
-- <em>Gewerbeobjekte:</em> Zu den Gewerbeobjekten zählen u.a. Ladengeschäfte, Lokale, Freizeiteinrichtungen und Bürogebäude. Die Gebäude sind oft auch mit Wohnungen kombiniert. Ihr Bau oder ihre Erneuerung verringert sowohl die Arbeitslosen- wie Obdachlosenzahl. Ihre Postrate ist doppelt so hoch wie ihre Passagierrate.
-</p>
-<p>
-<em>Nun bist Du als Spieler gefragt:</em> Erschliesse die Stadt mit dem öffentlichen Verkehr für Personen und Post. <strong>Je grösser das Verhältnis von zufriedenen zu generierten Passagieren (und Post) ist, desto schneller wachsen die Städte.</strong> Und je schneller sie wachsen, desto schneller steigen Arbeits- und Obdachlosenzahlen an, und desto schneller muss die Stadt wieder bauen, und umso mehr Kunden wollen Deinen Service nutzen. Ein Trugschluss ist es, mit der Beförderung von Arbeitern zu einer Fabrik die Arbeitslosigkeit senken zu wollen, im Gegenteil: Viele Passagiere werden zufrieden, und über das beschleunigte Wachstum steigen die Arbeitslosenzahlen sogar noch schneller an!
-</p>
-<p>
-<strong>Wächst die Stadt über gewisse Schwellenwerte hinaus, werden zusätzlich weitere Gebäudetypen gebaut:</strong><br/>
-· <em>Öffentliche Gebäude:</em> Für die Errichtung von öffentlichen Gebäuden wie grössere Rathäuser, Denkmäler und Stadtattraktionen sind die Schwellenwerte in den paks festgelegt, ebenso eine Wahrscheinlichkeit, mit der die Attraktion gebaut wird.<br>
-· <em>Industrieketten/Fabriken:</em> Grundsätzlich kannst Du den Bau von Industrien zulassen oder verhindern sowie erreichte Bevölkerungszahlen für die Generierungen festlegen. Editiere dazu in der <em>simutrans/config/cityrules.tab</em> die Variable <em>industry_increase_every</em>. Setzt Du den Wert auf 0, werden keine Industrien generiert.<br>
-<strong>Die Errichtung dieser Gebäudetypen hat ebenfalls keine Auswirkung auf die Arbeits- oder Obdachlosenzahl.</strong>
+<title>Stadtinformation Hilfe</title>
+
+<h1><strong>Stadtinformation</strong></h1>
+
+<p>
+Die Stadtinformation zeigt Statistiken über die ausgewählte Stadt. Du kannst sie durch anklicken des Rathauses mit dem Abfragewerkzeug öffnen. Das anklicken des Stadtnamens in der <a href="citylist_filter.txt">Stadtliste</a> öffnet die Stadtinformation ebenfalls.
+</p>
+<p>
+· <em>Name der Stadt:</em> Der Stadtname wird vom Spiel vergeben. Ein Name wird per Zufall aus der <em>simutrans/text/citylist_de.txt</em> (für die deutsche Sprachauswahl) ausgewählt. Du kannst sowohl die Datei als auch den Namen der Stadt im Spiel editieren.
+</p>
+<p>
+· <em>Größe:</em> Die Einwohnerzahl der Stadt wird angezeigt. Wächst die Stadt über pak-abhängig festgelegte Schwellenwerte hinaus, werden Fabriken bzw. Stadtattraktionen gebaut.<br/>
+· <em>Wachstumsfaktor:</em> Die Zahl in Klammern hinter der Größe gibt den derzeitigen Wachstumsfaktor an. Das maximale Wachstum ist nach Stadtgrößen gestaffelt: 2 bei weniger als 1000 Einwohnern, 4 bei Einwohnerzahlen zwischen 1001 und 10.000, 8 für größere Städte. Durch die gestaffelte Regelung bleiben Dörfer länger Dörfer.
+</p>
+<p>
+· <em>Stadtgebiet:</em> Das Gebiet der Stadt umfasst das Quadrat, welches durch die beiden Koordinatenpaare (links oben und rechts unten) gebildet wird. Innerhalb der Stadtgrenzen realisiert die Stadt ihre Bauvorhaben. Mit dem Wachstum der Stadt erweitern sich deren Grenzen. Stadtgebiete können sich überlappen.<br/>
+· Die Stadt generiert Passagiere und Post zunächst für Bebauungen entsprechend den in den Gebäudeinfofenstern angegebenen Passagier- und Postraten. Reise- und Versandziele können alle Felder der Stadtgebiete (also auch der Ausflug zu den Grünflächen der Städte), der Ausflugziele und Fabriken sein.
+</p>
+<p>
+· <em>Bautätigkeit:</em> Über die Werte der <em>Arbeits-</em>, <em>Obdachlosen-</em> und Einwohnerzahl ist die Bautätigkeit der Stadt geregelt.
+</p>
+<p>
+· <em>Passagier- und Postziele:</em> Die linke Weltkarte zeigt die Ziele für den letzten Monat, die rechte Weltkarte zeigt die Ziele für den laufenden Monat. Für jede angetretene Reise und für jede abgesandte Postsendung wird das Ziel mit einem gelben Punkt markiert. Orangene Punkte werden an die beabsichtigten Ziele platziert, wenn keine Route gefunden wurde. Das Postaufkommen ist anfänglich ungefähr 1/3 des Passagieraufkommens. Mit dem Stadtwachstum kann sich das Verhältnis ändern.
+</p>
+<p>
+· <em>Statistiken:</em> Die Farben der Kurven entsprechen jenen der Statistikschalter. Werte werden je nach der Einstellung der Anzeigezeiträume jahresweise oder monatweise aufaddiert. Die neuesten Werte stehen links.<br>
+· <em>Einwohner:</em> Die Entwicklung der Einwohnerzahl wird dargestellt.<br>
+· <em>Wachstum:</em> Das Bevölkerungswachstum der Stadt wird dargestellt.<br>
+· <em>Transportiert:</em> Es wird gezeigt, wieviele Passagiere und Post ihre Reise angetreten haben.<br>
+· <em>Passagiere:</em> Alle in der Stadt generierten Passagiere und Postsendungen werden angezeigt. Je näher beieinander die Graphen für "Transportiert" und "Passagiere" liegen, desto schneller wächst die Einwohnerzahl der Stadt.
+</p>
+<p>
+In Zusammenhang mit dem Stadtwachstum, den Arbeits- und Obdachlosenzahlen sowie der Erzeugung neuer Industrieketten tauchten des öfteren Fehlmeinungen auf. Folgende Beschreibung soll diese beseitigen:
+</p>
+<p>
+Eine neue Stadt wird gegründet. Sie erreicht eine gewisse Anzahl Einwohner.<br>
+<strong>Alle neuen Einwohner einer Stadt sind zuerst arbeitslos und obdachlos. Arbeits- und Obdachlosigkeit bekämpft die Stadt (und nur sie!) mit dem Bau von Stadtgebäuden</strong> (die Titelzeile des Infofensters ist orange); wenn die Arbeits- oder Obdachlosenzahlen über 70 steigen, entstehen allmählich neue Gebäude oder Gebäude werden durch solche mit höheren Passagierraten ersetzt. Dabei sinken die Zahlen um den Passagierlevel des neuen Gebäudes.
+</p>
+<p>
+· <em>Gebäudearten:</em> Im Stadtbereich werden 3 Gebäudetypen gebaut:<br/>
+- <em>Industrie:</em> Industriegebäude dienen als Arbeitsstätten innerhalb der Stadt. Ihr Bau oder ihre Erneuerung verringert die Arbeitslosenzahl. Ihre Postrate ist halb so gross wie ihre Passagierrate.<br/>
+- <em>Wohngebäude:</em> In den Wohngebäuden leben die Einwohner. Ihr Bau oder ihre Erneuerung verringert die Obdachlosenzahl. Ihre Postrate ist gleich der Passagierrate.<br/>
+- <em>Gewerbeobjekte:</em> Zu den Gewerbeobjekten zählen u.a. Ladengeschäfte, Lokale, Freizeiteinrichtungen und Bürogebäude. Die Gebäude sind oft auch mit Wohnungen kombiniert. Ihr Bau oder ihre Erneuerung verringert sowohl die Arbeitslosen- wie Obdachlosenzahl. Ihre Postrate ist doppelt so hoch wie ihre Passagierrate.
+</p>
+<p>
+<em>Nun bist Du als Spieler gefragt:</em> Erschliesse die Stadt mit dem öffentlichen Verkehr für Personen und Post. <strong>Je grösser das Verhältnis von zufriedenen zu generierten Passagieren (und Post) ist, desto schneller wachsen die Städte.</strong> Und je schneller sie wachsen, desto schneller steigen Arbeits- und Obdachlosenzahlen an, und desto schneller muss die Stadt wieder bauen, und umso mehr Kunden wollen Deinen Service nutzen. Ein Trugschluss ist es, mit der Beförderung von Arbeitern zu einer Fabrik die Arbeitslosigkeit senken zu wollen, im Gegenteil: Viele Passagiere werden zufrieden, und über das beschleunigte Wachstum steigen die Arbeitslosenzahlen sogar noch schneller an!
+</p>
+<p>
+<strong>Wächst die Stadt über gewisse Schwellenwerte hinaus, werden zusätzlich weitere Gebäudetypen gebaut:</strong><br/>
+· <em>Öffentliche Gebäude:</em> Für die Errichtung von öffentlichen Gebäuden wie grössere Rathäuser, Denkmäler und Stadtattraktionen sind die Schwellenwerte in den paks festgelegt, ebenso eine Wahrscheinlichkeit, mit der die Attraktion gebaut wird.<br>
+· <em>Industrieketten/Fabriken:</em> Grundsätzlich kannst Du den Bau von Industrien zulassen oder verhindern sowie erreichte Bevölkerungszahlen für die Generierungen festlegen. Editiere dazu in der <em>simutrans/config/cityrules.tab</em> die Variable <em>industry_increase_every</em>. Setzt Du den Wert auf 0, werden keine Industrien generiert.<br>
+<strong>Die Errichtung dieser Gebäudetypen hat ebenfalls keine Auswirkung auf die Arbeits- oder Obdachlosenzahl.</strong>
 </p>
diff --git a/simutrans/text/de/climates.txt b/simutrans/text/de/climates.txt
index b6111c6..ead4ec8 100644
--- a/simutrans/text/de/climates.txt
+++ b/simutrans/text/de/climates.txt
@@ -1,24 +1,24 @@
-<title>Klimazonen Hilfe</title>
-
-<h1><strong>Kliamzonen Hilfe</strong></h1>
-
-<p>
-Dieser Dialog erscheint immer zusammen mit dem <a href="new_world.txt">Neue Welt</a> Dialog. Mit ihm können diverse Details zu den Klimazonen und Bergen der neuen Karte eingestellt werden.</p>
-<p>
-· <em>Grundwasser:</em> Den Pegel des Grundwassers kannst Du von 0 bis 5 festlegen. Je niedriger der Pegel ist, desto mehr Land erscheint und umgekehrt. Die Vorgabe ist 4.</p>
-<p>
-· <em>Berghöhe:</em> Der Maximalwert für die Höhe der höchsten Berge beträgt 320. Die Vorgabe ist 160.</p>
-<p>
-· <em>Bergigkeit:</em> Dieser Wert bestimmt, wieviel kleinere Hügel und Täler generiert werden. Mögliche Werte sind 0 bis 4. Die Vorgabe ist 2. Eine zu rauhe Karte wird eventuell nicht so viele Städte, Insdustrien oder Verbindungsstraßen erzeugen können, wie eingestellt.</p>
-
-<br>
-<p>
-Im folgenden werden die Grenzen der Schneezone festgelegt. Im Laufe des Jahres sinkt und steigt die Schneegrenze in Simutrans entsprechend der gewählten Einstellung.</p>
-
-· <em>Sommerschnee:</em> Ab dieser Höhe beginnt der ewige Schnee. Dort gibt es sehr wenige Städte, Industrien und Vegetation.</p>
-· <em>Winterschnee:</em> Bis zu dieser Höhe fällt im Winter Schnee. Das hat keine Auswirkungen auf das Spiel sondern dient allein der Optik.</p>
-
-<br>
-<p>
-Zum Schluss werden die Grenzen der einzelnen Klimazonen bestimmt. Diese werden in Höhenstufen ab Grundwasser gerechnet. Die Anzeige der Klimazonen geht von Null bis zur eingestellten Höhe. Höhere Klimazonen werden dabei von niedrigeren Klimazonen im unteren Bereich überdeckt. Du kannst also Wüste in Tundra und dann in Tropen übergehen lassen.</br>
+<title>Klimazonen Hilfe</title>
+
+<h1><strong>Kliamzonen Hilfe</strong></h1>
+
+<p>
+Dieser Dialog erscheint immer zusammen mit dem <a href="new_world.txt">Neue Welt</a> Dialog. Mit ihm können diverse Details zu den Klimazonen und Bergen der neuen Karte eingestellt werden.</p>
+<p>
+· <em>Grundwasser:</em> Den Pegel des Grundwassers kannst Du von 0 bis 5 festlegen. Je niedriger der Pegel ist, desto mehr Land erscheint und umgekehrt. Die Vorgabe ist 4.</p>
+<p>
+· <em>Berghöhe:</em> Der Maximalwert für die Höhe der höchsten Berge beträgt 320. Die Vorgabe ist 160.</p>
+<p>
+· <em>Bergigkeit:</em> Dieser Wert bestimmt, wieviel kleinere Hügel und Täler generiert werden. Mögliche Werte sind 0 bis 4. Die Vorgabe ist 2. Eine zu rauhe Karte wird eventuell nicht so viele Städte, Insdustrien oder Verbindungsstraßen erzeugen können, wie eingestellt.</p>
+
+<br>
+<p>
+Im folgenden werden die Grenzen der Schneezone festgelegt. Im Laufe des Jahres sinkt und steigt die Schneegrenze in Simutrans entsprechend der gewählten Einstellung.</p>
+
+· <em>Sommerschnee:</em> Ab dieser Höhe beginnt der ewige Schnee. Dort gibt es sehr wenige Städte, Industrien und Vegetation.</p>
+· <em>Winterschnee:</em> Bis zu dieser Höhe fällt im Winter Schnee. Das hat keine Auswirkungen auf das Spiel sondern dient allein der Optik.</p>
+
+<br>
+<p>
+Zum Schluss werden die Grenzen der einzelnen Klimazonen bestimmt. Diese werden in Höhenstufen ab Grundwasser gerechnet. Die Anzeige der Klimazonen geht von Null bis zur eingestellten Höhe. Höhere Klimazonen werden dabei von niedrigeren Klimazonen im unteren Bereich überdeckt. Du kannst also Wüste in Tundra und dann in Tropen übergehen lassen.</br>
 <strong>Achtung</strong></br>Gebäude, Industrien und Vegetation können bestimmten Klimazonen zugeordnet sein. In welchen Klimazonen was vorkommt, liegt in den Händen der Pakset- und Addon-Ersteller.</p>
diff --git a/simutrans/text/de/color.txt b/simutrans/text/de/color.txt
index b8c1bfa..9c84421 100644
--- a/simutrans/text/de/color.txt
+++ b/simutrans/text/de/color.txt
@@ -1,10 +1,10 @@
-<title>Farbauswahl Hilfe</title>
-
-<h1><strong>Farbauswahl</strong></h1>
-
-<p>
-Du kannst die eigene Spielerfarbe festlegen. Die Farbe wird für die meisten Fahrzeuge und Gebäude des Spielers genutzt. Es gibt zwei Farben, eine Pimäre und eine sekndäre.
-</p>
-<p>
-Die Standardfarbe ist primär hellblau und sekundär gelb.
+<title>Farbauswahl Hilfe</title>
+
+<h1><strong>Farbauswahl</strong></h1>
+
+<p>
+Du kannst die eigene Spielerfarbe festlegen. Die Farbe wird für die meisten Fahrzeuge und Gebäude des Spielers genutzt. Es gibt zwei Farben, eine Pimäre und eine sekndäre.
+</p>
+<p>
+Die Standardfarbe ist primär hellblau und sekundär gelb.
 </p>
diff --git a/simutrans/text/de/convoi.txt b/simutrans/text/de/convoi.txt
index f8202c4..53ee4b1 100644
--- a/simutrans/text/de/convoi.txt
+++ b/simutrans/text/de/convoi.txt
@@ -1,32 +1,32 @@
-<title>Fahrzeugliste Hilfe</title>
-
-<h1><strong>Fahrzeugliste</strong></h1>
-
-<p>
-Die Fahrzeugliste wird über die <a href="list.txt">Listenverwaltung</a> oder mit <em>Shift</em>+<em>V</em> aufgerufen und beinhaltet alle Fahrzeugverbände, also Züge, Busse, LKWs, Trams, Flugzeuge, Schiffe und Magnetbahnen des Spielers. In die Liste sind eine Sortier- und eine Filterfunktion eingebaut, um unter vielen Fahrzeugverbänden den gesuchten schneller auffinden zu können.<br/>
-Der <em>Filter</em> kann entweder "an" oder "aus" sein. Wenn Du einen Fahrzeugverband nicht findest, wähle die Filtereinstellung "aus". Die Voreinstellung ist "aus". Über <a href="convoi_filter.txt"><em>einstellen</em></a> können die Filterkriterien ausgewählt werden.
-</p>
-<p>
-<em>Anzeigen in der Fahrzeugliste:</em><br>
-· Eine Ordnungszahl. Diese nummeriert nur die Liste durch und hat keinen Bezug zum Fahrzeugverband dahinter.<br>
-· Der Name (per Vorgabe der Name des ersten Fahrzeugs, das in den Fahrzeugverband eingereiht wurde).<br>
-· Der Gewinn des Fahrzeugverbandes für das laufende Jahr.<br>
-· Die Linie, welche dem Fahrzeugverband zugewiesen ist. Ist dem Fahrzeugverband keine Linie zugewiesen, wird auch nichts angezeigt. Bei Fahrzeugverbänden, die sich im Depot befinden, wird hier "(in depot)" angezeigt.<br>
-· Ein Bild des Fahrzeugverbandes, mit einem Balken für den aktuellen Ladegrad (siehe <a href="convoiinfo.txt">Konvoifenster</a>).
-</p>
-<p>
-Die Farbe des Names des Fahrzeuges hat folgende Bedeutung:<br>
-- <em>schwarz:</em> alles ok.<br>
-- <em>rot:</em> Erwirtschaftet keinen Profit.<br>
-- <em>weiß:</em> Steht in einem Depot.<br>
-- <em>gelb:</em> Steht seit Jahresbeginn (vermutlich an einer Haltestelle und wartet auf Fracht).<br>
-- <em>orange:</em> Steckt fest oder findet keine Weg zum Ziel.<br>
-<p>
-<em>Sortierkriterien:</em> Die Sortierung der Fahrzeugliste kann nach 3 Sortierkriterien erfolgen. Die Anzeige-Reihenfolge wird nur beim Öffenen des Fensters und bei der Änderung der Sortierkriterien aktualisiert.
-</p>
-<p>
-· <em>Bezeichnung:</em> Die Sortierung erfolgt in der Namensreihenfolge. Sie orientiert sich am ASCII-Code der Zeichen, also Zahlen, danach Großbuchstaben, danach Kleinbuchstaben, jeweils in numerischer bzw. alphabetischer Reihenfolge.<br/>
-· <em>Gewinn:</em> Die Fahrzeugverbände werden nach ihrem im laufenden Jahr erzielten Gewinn (Einnahmen-Betriebskosten) sortiert.<br/>
-· <em>Typ:</em> Die Liste wird nach Fahrzeugtypen sortiert. Die Typreihenfolge ist: Straßenfahrzeuge, Schienenfahrzeuge, Schiffe, Flugzeuge. Gleiche Zugmaschinen werden zusammengefasst. Innerhalb einer Fahrzeugkategorie wird alphanumerisch sortiert.<br/>
-· <em>aufsteigend/absteigend:</em> Stellt die Liste auf den Kopf. Bei aufsteigend stehen die kleinsten Werte oben, bei absteigend die größten.
+<title>Fahrzeugliste Hilfe</title>
+
+<h1><strong>Fahrzeugliste</strong></h1>
+
+<p>
+Die Fahrzeugliste wird über die <a href="list.txt">Listenverwaltung</a> oder mit <em>Shift</em>+<em>V</em> aufgerufen und beinhaltet alle Fahrzeugverbände, also Züge, Busse, LKWs, Trams, Flugzeuge, Schiffe und Magnetbahnen des Spielers. In die Liste sind eine Sortier- und eine Filterfunktion eingebaut, um unter vielen Fahrzeugverbänden den gesuchten schneller auffinden zu können.<br/>
+Der <em>Filter</em> kann entweder "an" oder "aus" sein. Wenn Du einen Fahrzeugverband nicht findest, wähle die Filtereinstellung "aus". Die Voreinstellung ist "aus". Über <a href="convoi_filter.txt"><em>einstellen</em></a> können die Filterkriterien ausgewählt werden.
+</p>
+<p>
+<em>Anzeigen in der Fahrzeugliste:</em><br>
+· Eine Ordnungszahl. Diese nummeriert nur die Liste durch und hat keinen Bezug zum Fahrzeugverband dahinter.<br>
+· Der Name (per Vorgabe der Name des ersten Fahrzeugs, das in den Fahrzeugverband eingereiht wurde).<br>
+· Der Gewinn des Fahrzeugverbandes für das laufende Jahr.<br>
+· Die Linie, welche dem Fahrzeugverband zugewiesen ist. Ist dem Fahrzeugverband keine Linie zugewiesen, wird auch nichts angezeigt. Bei Fahrzeugverbänden, die sich im Depot befinden, wird hier "(in depot)" angezeigt.<br>
+· Ein Bild des Fahrzeugverbandes, mit einem Balken für den aktuellen Ladegrad (siehe <a href="convoiinfo.txt">Konvoifenster</a>).
+</p>
+<p>
+Die Farbe des Names des Fahrzeuges hat folgende Bedeutung:<br>
+- <em>schwarz:</em> alles ok.<br>
+- <em>rot:</em> Erwirtschaftet keinen Profit.<br>
+- <em>weiß:</em> Steht in einem Depot.<br>
+- <em>gelb:</em> Steht seit Jahresbeginn (vermutlich an einer Haltestelle und wartet auf Fracht).<br>
+- <em>orange:</em> Steckt fest oder findet keine Weg zum Ziel.<br>
+<p>
+<em>Sortierkriterien:</em> Die Sortierung der Fahrzeugliste kann nach 3 Sortierkriterien erfolgen. Die Anzeige-Reihenfolge wird nur beim Öffenen des Fensters und bei der Änderung der Sortierkriterien aktualisiert.
+</p>
+<p>
+· <em>Bezeichnung:</em> Die Sortierung erfolgt in der Namensreihenfolge. Sie orientiert sich am ASCII-Code der Zeichen, also Zahlen, danach Großbuchstaben, danach Kleinbuchstaben, jeweils in numerischer bzw. alphabetischer Reihenfolge.<br/>
+· <em>Gewinn:</em> Die Fahrzeugverbände werden nach ihrem im laufenden Jahr erzielten Gewinn (Einnahmen-Betriebskosten) sortiert.<br/>
+· <em>Typ:</em> Die Liste wird nach Fahrzeugtypen sortiert. Die Typreihenfolge ist: Straßenfahrzeuge, Schienenfahrzeuge, Schiffe, Flugzeuge. Gleiche Zugmaschinen werden zusammengefasst. Innerhalb einer Fahrzeugkategorie wird alphanumerisch sortiert.<br/>
+· <em>aufsteigend/absteigend:</em> Stellt die Liste auf den Kopf. Bei aufsteigend stehen die kleinsten Werte oben, bei absteigend die größten.
 </p>
diff --git a/simutrans/text/de/convoi_filter.txt b/simutrans/text/de/convoi_filter.txt
index b376831..e4155af 100644
--- a/simutrans/text/de/convoi_filter.txt
+++ b/simutrans/text/de/convoi_filter.txt
@@ -1,31 +1,31 @@
-<title>Fahrzeugliste - Einstellungen Hilfe</title>
-
-<h1><strong>Filtereinstellungen zur Fahrzeugliste</strong></h1>
-
-<p>
-Im Fenster der <em>Fahrzeugliste - Einstellungen</em> können die Filteroptionen für die Anzeige in der <a href="convoi.txt">Fahrzeugliste</a> gesetzt werden. Ein eingedrückter Knopf bedeutet, dass das Kriterium erfüllt sein muss, um durch den Filter zur Anzeige zu gelangen. Dabei werden die Eigenschaften innerhalb einer Hauptgruppe mit logischem "OR" (eines der angewählten Kriterien muss erfüllt sein) und zwischen den Hauptmenüs mit logischem "AND" (alle angewählten Kriterien müssen erfüllt sein) verknüpft. Die Wirkung der Filtereinstellungen ist positiv, es werden nur Fahrzeugverbände angezeigt, welche die eingestellten Kriterien erfüllen.</p>
-<p>
-<em>Namen filtern:</em> Im Textfeld kann der Name eines Fahrzeugverbandes bzw. mehrerer Fahrzeugverbände angegeben werden. Es werden nur diejenigen Fahrzeugverbände in die gefilterte Liste aufgenommen, deren Bezeichner mit dem Name des Filters in allen Zeichen (inkl. Leerzeichen) identisch ist. <strong>Achtung</strong>Platzhalterfunktionen wie * oder ? werden nicht unterstützt.
-</p>
-<p>
-<em>Typen filtern:</em> Die gefilterte Liste zeigt nur Fahrzeugverbände an, welche dem gefilterten Typ entsprechen. Trams und Magnetbahnen sind den Zügen zugeordnet.</p>
-<p>
-<em>Spezialfilter:</em><br>
-· <em>ohne Route:</em> Derzeit ist diese Funktion außer Betrieb.<br>
-· <em>ohne Fahrplan:</em> Fahrzeugverbände ohne Fahrplan werden gelistet.<br>
-· <em>kein Gewinn:</em> Fahrzeugverbände ohne positiven Profit im aktuellen Jahr werden gelistet.<br>
-· <em>im Depot:</em> Fahrzeugverbände, die in einem Depot stehen werden gelistet.<br>
-· <em>ohne Linie:</em> Fahrzeugverbände, die keiner Linie zugeordnet sind, werden gelistet.
-</p>
-<p>
-<em>Waren filtern:</em> Fahrzeugverbände werden nach ihrer transportierten Warenart ausgewählt. Der Filter berücksichtigt teilweise nicht das Ladegut, sondern orientiert sich nach den Fahrzeugeigenschaften. So kann etwa ein Erzzug unter Steine auftauchen, wenn er Steinwagen benutzt.
-</p>
-<p>
-<em>Filterschalter:</em><br>
-· <em>alle:</em> Alle Güterarten ausgewählt.<br>
-· <em>keine:</em> Alle Güterarten abgewählt.<br>
-· <em>inv.:</em> Bei Betätigung wird die Güterauswahl umgekehrt.
-</p>
-<p>
-<em>Warenschalter:</em> Über die Schalter der Warenarten kannst Du eine beliebige Filterauswahl treffen.
+<title>Fahrzeugliste - Einstellungen Hilfe</title>
+
+<h1><strong>Filtereinstellungen zur Fahrzeugliste</strong></h1>
+
+<p>
+Im Fenster der <em>Fahrzeugliste - Einstellungen</em> können die Filteroptionen für die Anzeige in der <a href="convoi.txt">Fahrzeugliste</a> gesetzt werden. Ein eingedrückter Knopf bedeutet, dass das Kriterium erfüllt sein muss, um durch den Filter zur Anzeige zu gelangen. Dabei werden die Eigenschaften innerhalb einer Hauptgruppe mit logischem "OR" (eines der angewählten Kriterien muss erfüllt sein) und zwischen den Hauptmenüs mit logischem "AND" (alle angewählten Kriterien müssen erfüllt sein) verknüpft. Die Wirkung der Filtereinstellungen ist positiv, es werden nur Fahrzeugverbände angezeigt, welche die eingestellten Kriterien erfüllen.</p>
+<p>
+<em>Namen filtern:</em> Im Textfeld kann der Name eines Fahrzeugverbandes bzw. mehrerer Fahrzeugverbände angegeben werden. Es werden nur diejenigen Fahrzeugverbände in die gefilterte Liste aufgenommen, deren Bezeichner mit dem Name des Filters in allen Zeichen (inkl. Leerzeichen) identisch ist. <strong>Achtung</strong>Platzhalterfunktionen wie * oder ? werden nicht unterstützt.
+</p>
+<p>
+<em>Typen filtern:</em> Die gefilterte Liste zeigt nur Fahrzeugverbände an, welche dem gefilterten Typ entsprechen. Trams und Magnetbahnen sind den Zügen zugeordnet.</p>
+<p>
+<em>Spezialfilter:</em><br>
+· <em>ohne Route:</em> Derzeit ist diese Funktion außer Betrieb.<br>
+· <em>ohne Fahrplan:</em> Fahrzeugverbände ohne Fahrplan werden gelistet.<br>
+· <em>kein Gewinn:</em> Fahrzeugverbände ohne positiven Profit im aktuellen Jahr werden gelistet.<br>
+· <em>im Depot:</em> Fahrzeugverbände, die in einem Depot stehen werden gelistet.<br>
+· <em>ohne Linie:</em> Fahrzeugverbände, die keiner Linie zugeordnet sind, werden gelistet.
+</p>
+<p>
+<em>Waren filtern:</em> Fahrzeugverbände werden nach ihrer transportierten Warenart ausgewählt. Der Filter berücksichtigt teilweise nicht das Ladegut, sondern orientiert sich nach den Fahrzeugeigenschaften. So kann etwa ein Erzzug unter Steine auftauchen, wenn er Steinwagen benutzt.
+</p>
+<p>
+<em>Filterschalter:</em><br>
+· <em>alle:</em> Alle Güterarten ausgewählt.<br>
+· <em>keine:</em> Alle Güterarten abgewählt.<br>
+· <em>inv.:</em> Bei Betätigung wird die Güterauswahl umgekehrt.
+</p>
+<p>
+<em>Warenschalter:</em> Über die Schalter der Warenarten kannst Du eine beliebige Filterauswahl treffen.
 </p>
diff --git a/simutrans/text/de/convoidetail.txt b/simutrans/text/de/convoidetail.txt
index 8df0ce3..3eee3a5 100644
--- a/simutrans/text/de/convoidetail.txt
+++ b/simutrans/text/de/convoidetail.txt
@@ -1,16 +1,16 @@
-<title>Fahrzeugdetailfenster Hilfe</title>
-
-<h1><strong>Fahrzeugdetailfenster</strong></h1>
-
-<p>
-Diese Fenster erreicht man durch Auswahl von <em>Details</em> im <a href="convoiinfo.txt">Konvoifenster</a>. Es werden weitere technische Daten angezeigt, wie z.B. der aktuelle Zeitwert.
-</p>
-<p>
-Mit dem Knopf <em>Verkaufen</em> kann der Fahrzeugverband sofort an dieser Position verkauft werden, ohne zuvor in ein Depot fahren zu müssen.
-</p>
-<p>
-Weiterhin gibt es noch <em>Außerdinststellen</em>, danach läde der Fahrzeugverband nur noch seine Waren ab und verkauft sich selbst, sobald er leer ist.
-</p>
-<p>
-Darunter folgt die Liste aller Einzelfahrzeuge mit der Anzeige von genutzte Laderaum, der verfügbare Laderaum sowie das Ladegut des Einzelfahrzeuges angegeben und weiteren Daten. Die folgenden Zeilen schlüsseln die Ladung nach ihrem Ziel auf.
+<title>Fahrzeugdetailfenster Hilfe</title>
+
+<h1><strong>Fahrzeugdetailfenster</strong></h1>
+
+<p>
+Diese Fenster erreicht man durch Auswahl von <em>Details</em> im <a href="convoiinfo.txt">Konvoifenster</a>. Es werden weitere technische Daten angezeigt, wie z.B. der aktuelle Zeitwert.
+</p>
+<p>
+Mit dem Knopf <em>Verkaufen</em> kann der Fahrzeugverband sofort an dieser Position verkauft werden, ohne zuvor in ein Depot fahren zu müssen.
+</p>
+<p>
+Weiterhin gibt es noch <em>Außerdinststellen</em>, danach läde der Fahrzeugverband nur noch seine Waren ab und verkauft sich selbst, sobald er leer ist.
+</p>
+<p>
+Darunter folgt die Liste aller Einzelfahrzeuge mit der Anzeige von genutzte Laderaum, der verfügbare Laderaum sowie das Ladegut des Einzelfahrzeuges angegeben und weiteren Daten. Die folgenden Zeilen schlüsseln die Ladung nach ihrem Ziel auf.
 </p>
diff --git a/simutrans/text/de/convoiinfo.txt b/simutrans/text/de/convoiinfo.txt
index cec8fec..b8754c7 100644
--- a/simutrans/text/de/convoiinfo.txt
+++ b/simutrans/text/de/convoiinfo.txt
@@ -1,44 +1,44 @@
-<title>Konvoifenster Hilfe</title>
-
-<h1><strong>Fahrzeugfenster</strong></h1>
-
-<p>
-Wählst Du mit dem Lupenwerkzeug einen Fahrzeugverband an, wird dessen Infofenster geöffnet. Du kannst das Fenster auch aus der <a href="linelist.txt">Linienverwaltung</a> oder <a href="convoi_list.txt">Fahrzeugliste</a> heraus aufrufen. Wähle dazu einen Eintrag in der Liste an. Das Fenster zeigt Dir einige technische Daten, eine Statistik und die Beladeliste.
-</p>
-<p>
-<em>Namensfeld:</em> Der Name des Fahrzeugverbandes entspricht per Vorgabe der Bezeichnung des Fahrzeugs, das als erstes in den Konvoi aufgenommen wurde.
-</p>
-<p>
-<em>Aktuelle Daten:</em><br/>
-· <em>Geschwindigkeit, Wartungskosten:</em> Die erste Geschwindigkeitsangabe ist die Höchstgeschwindigheit des Fahrzeugverbandes, die zweite die des Zugfahrzeugs. Der Wert in Klammern stellt die Laufkosten pro zurückgelegtem Feld des gesamten Fahrzeugverbandes dar. Die grüne Säule rechts daneben gibt die aktuelle Geschwindigkeit in relativ zur Höchstgeschwindigkeit an. Wird die aktuelle Geschwindigkeit nie erreicht, ist der Fahrzeugverband eventuell überladen oder der Weg lässt gerade keine höhere Geschwindigkeit zu.<br/>
-· <em>Leistung:</em> Mit der Leistung wird die gesamte Antriebsleistung der aller Zugfahrzeuge in kW angegeben.<br/>
-· <em>Gewicht:</em> Die erste Angabe stellt das Leergewicht des Fahrzeugverbandes dar, der Wert in Klammern ist das Gewicht der Ladung. Für das Gesamtgewicht müssen beide Werte zusammengezählt werden.<br/>
-· <em>Gewinn:</em> Der Gewinn seit dem 1. Januar des Jahres wird angegeben. Ist der Wert negativ, fährt der Fahrzeugverband mit Verlust.<br/>
-· <em>Ladegrad:</em> Der grüne Farbbalken gibt Dir Aufschluss über die aktuelle prozentuale Beladung des Fahrzeugverbandes. Ein (teil)gelber Balken bedeutet, dass der Fahrzeugverband auf die im <a href="schedule.txt">Fahrplan</a> eingestellte Mindestbeladung wartet.<br/>
-· <em>Fahrtziel:</em> Das aktuelle Fahrplanziel wird angezeigt. Ist das Ziel eine Haltestelle, gibt Dir der erste Wert in Klammer darüber Auskunft, auf welchen minimalen Beladegrad der Fahrzeugverband warten wird. Du kannst den Wert für den Fahrzeugverband im <a href="schedule.txt">Fahrplan</a> ändern. Sollen alle Fahrzeuge der Linie von der Änderung betroffen sein, suche die Linie in der<a href="linelist.txt">Linienverwaltung</a> auf. Der farbige Balken dahinter gibt die Entfernung bis zum nächsten Halt an.<br/>
-· <em>Bedient Linie:</em> Der Fahrzeugverband fährt nach dem Plan der angegebenen Linie. Weicht der Fahrplan nach einer Änderung vom Linienplan ab, oder fährt der Fahrzeugverband in keiner Linie, wird die Zeile nicht angezeigt.
-</p>
-<p>
-<em>Fahrplan:</em> Über die Schaltfläche kannst Du den <a href="schedule.txt">Fahrplan</a> des Fahrzeugverbandes aufrufen.
-</p>
-<p>
-<em>Sichtfenster:</em> Den Fahrzeugverbandes siehts Du im Kartenausschnitt rechts daneben. Klickst Du ins Sichtfenster, springt die Kartenansicht und zentriert die aktuelle Position. Soll der Fahrzeugverband dauerhaft in Bildmitte zu sehen sein, benutze den Knopf <em>verfolgen</em> unter dem Kartenausschnitt.
-</p>
-<p>
-<em>nach Hause:</em> Bedienst Du den Schalter, bricht der Fahrzeugverband seinen Weg im Fahrplan ab und steuert auf dem kürzesten Weg das nächstgelegene geeignete <a href="depot.txt">Depot</a> an. Beim Erreichen des Depots geht sämtliche Fracht verloren; immerhin wird Dir der Ertrag für die geleistete Strecke ausbezahlt. Die Linie bzw. der Fahrplan sowie der letzte angesteuerte Fahrplanpunkt bleiben weiterhin gültig.
-</p>
-<p>
-<em>nach laden:</em> Der Fahrzeugverband wird ab sofort alle Mindestladung ignorieren und nur noch Fracht abladen.
-</p>
-<p>
-<em>Chart:</em> Nach der Bedienung des Schalters öffnet bzw. schließt sich ein Statistikbereich mit grafischer Anzeige. Die Kurven entsprechen in den Farben jenen der selektierten Schalter und gewähren eine statistische Übersicht (monatsweise) über die letzten 12 Monate. Der aktuelle Monat steht links.<br/>
-· <em>Freie Kapazität:</em> Der nicht genutzte Laderaum. Addiert für jeden Fahrplanabschnitt.<br/>
-· <em>Beförderungen:</em> Der genutzte Laderaum. Addiert für jeden Fahrplanabschnitt.<br/>
-· <em>Einnahmen:</em> Die Transporterlöse des Fahrzeugverbandes.<br/>
-· <em>Betriebskosten:</em> Die anfallenden Kosten für den Betrieb des Fahrzeugverbandes. Die Schwankungen entstehen durch die unterschiedliche Laufleistung des Fahrzeugverbandes im Monat. Es entstehen nur Kosten, wenn der Fahrzeugverband sich bewegt.<br/>
-· <em>Profit:</em> Der Profit ergibt sich aus Einnahmen minus Betriebskosten.<br/>
-</p>
-<p>
-<em>Beladeliste:</em>
-Zeigt die Anzahl aller geladen Güter/Passagiere auf, geordnet nach Art. Diese Liste kann sortiert werden, nach <em>Zielort</em>, <em>via</em> (nächstes Ziel), <em>via Menge</em> (wieviel hat insgesamt den nächsten Halt als Ziel) oder <em>Menge</em> (am meisten zuerst). Diese Einstellung wird dann beim nächsten Öffnen für alle Fahrzeugverbände gemerkt.
+<title>Konvoifenster Hilfe</title>
+
+<h1><strong>Fahrzeugfenster</strong></h1>
+
+<p>
+Wählst Du mit dem Lupenwerkzeug einen Fahrzeugverband an, wird dessen Infofenster geöffnet. Du kannst das Fenster auch aus der <a href="linelist.txt">Linienverwaltung</a> oder <a href="convoi_list.txt">Fahrzeugliste</a> heraus aufrufen. Wähle dazu einen Eintrag in der Liste an. Das Fenster zeigt Dir einige technische Daten, eine Statistik und die Beladeliste.
+</p>
+<p>
+<em>Namensfeld:</em> Der Name des Fahrzeugverbandes entspricht per Vorgabe der Bezeichnung des Fahrzeugs, das als erstes in den Konvoi aufgenommen wurde.
+</p>
+<p>
+<em>Aktuelle Daten:</em><br/>
+· <em>Geschwindigkeit, Wartungskosten:</em> Die erste Geschwindigkeitsangabe ist die Höchstgeschwindigheit des Fahrzeugverbandes, die zweite die des Zugfahrzeugs. Der Wert in Klammern stellt die Laufkosten pro zurückgelegtem Feld des gesamten Fahrzeugverbandes dar. Die grüne Säule rechts daneben gibt die aktuelle Geschwindigkeit in relativ zur Höchstgeschwindigkeit an. Wird die aktuelle Geschwindigkeit nie erreicht, ist der Fahrzeugverband eventuell überladen oder der Weg lässt gerade keine höhere Geschwindigkeit zu.<br/>
+· <em>Leistung:</em> Mit der Leistung wird die gesamte Antriebsleistung der aller Zugfahrzeuge in kW angegeben.<br/>
+· <em>Gewicht:</em> Die erste Angabe stellt das Leergewicht des Fahrzeugverbandes dar, der Wert in Klammern ist das Gewicht der Ladung. Für das Gesamtgewicht müssen beide Werte zusammengezählt werden.<br/>
+· <em>Gewinn:</em> Der Gewinn seit dem 1. Januar des Jahres wird angegeben. Ist der Wert negativ, fährt der Fahrzeugverband mit Verlust.<br/>
+· <em>Ladegrad:</em> Der grüne Farbbalken gibt Dir Aufschluss über die aktuelle prozentuale Beladung des Fahrzeugverbandes. Ein (teil)gelber Balken bedeutet, dass der Fahrzeugverband auf die im <a href="schedule.txt">Fahrplan</a> eingestellte Mindestbeladung wartet.<br/>
+· <em>Fahrtziel:</em> Das aktuelle Fahrplanziel wird angezeigt. Ist das Ziel eine Haltestelle, gibt Dir der erste Wert in Klammer darüber Auskunft, auf welchen minimalen Beladegrad der Fahrzeugverband warten wird. Du kannst den Wert für den Fahrzeugverband im <a href="schedule.txt">Fahrplan</a> ändern. Sollen alle Fahrzeuge der Linie von der Änderung betroffen sein, suche die Linie in der<a href="linelist.txt">Linienverwaltung</a> auf. Der farbige Balken dahinter gibt die Entfernung bis zum nächsten Halt an.<br/>
+· <em>Bedient Linie:</em> Der Fahrzeugverband fährt nach dem Plan der angegebenen Linie. Weicht der Fahrplan nach einer Änderung vom Linienplan ab, oder fährt der Fahrzeugverband in keiner Linie, wird die Zeile nicht angezeigt.
+</p>
+<p>
+<em>Fahrplan:</em> Über die Schaltfläche kannst Du den <a href="schedule.txt">Fahrplan</a> des Fahrzeugverbandes aufrufen.
+</p>
+<p>
+<em>Sichtfenster:</em> Den Fahrzeugverbandes siehts Du im Kartenausschnitt rechts daneben. Klickst Du ins Sichtfenster, springt die Kartenansicht und zentriert die aktuelle Position. Soll der Fahrzeugverband dauerhaft in Bildmitte zu sehen sein, benutze den Knopf <em>verfolgen</em> unter dem Kartenausschnitt.
+</p>
+<p>
+<em>nach Hause:</em> Bedienst Du den Schalter, bricht der Fahrzeugverband seinen Weg im Fahrplan ab und steuert auf dem kürzesten Weg das nächstgelegene geeignete <a href="depot.txt">Depot</a> an. Beim Erreichen des Depots geht sämtliche Fracht verloren; immerhin wird Dir der Ertrag für die geleistete Strecke ausbezahlt. Die Linie bzw. der Fahrplan sowie der letzte angesteuerte Fahrplanpunkt bleiben weiterhin gültig.
+</p>
+<p>
+<em>nach laden:</em> Der Fahrzeugverband wird ab sofort alle Mindestladung ignorieren und nur noch Fracht abladen.
+</p>
+<p>
+<em>Chart:</em> Nach der Bedienung des Schalters öffnet bzw. schließt sich ein Statistikbereich mit grafischer Anzeige. Die Kurven entsprechen in den Farben jenen der selektierten Schalter und gewähren eine statistische Übersicht (monatsweise) über die letzten 12 Monate. Der aktuelle Monat steht links.<br/>
+· <em>Freie Kapazität:</em> Der nicht genutzte Laderaum. Addiert für jeden Fahrplanabschnitt.<br/>
+· <em>Beförderungen:</em> Der genutzte Laderaum. Addiert für jeden Fahrplanabschnitt.<br/>
+· <em>Einnahmen:</em> Die Transporterlöse des Fahrzeugverbandes.<br/>
+· <em>Betriebskosten:</em> Die anfallenden Kosten für den Betrieb des Fahrzeugverbandes. Die Schwankungen entstehen durch die unterschiedliche Laufleistung des Fahrzeugverbandes im Monat. Es entstehen nur Kosten, wenn der Fahrzeugverband sich bewegt.<br/>
+· <em>Profit:</em> Der Profit ergibt sich aus Einnahmen minus Betriebskosten.<br/>
+</p>
+<p>
+<em>Beladeliste:</em>
+Zeigt die Anzahl aller geladen Güter/Passagiere auf, geordnet nach Art. Diese Liste kann sortiert werden, nach <em>Zielort</em>, <em>via</em> (nächstes Ziel), <em>via Menge</em> (wieviel hat insgesamt den nächsten Halt als Ziel) oder <em>Menge</em> (am meisten zuerst). Diese Einstellung wird dann beim nächsten Öffnen für alle Fahrzeugverbände gemerkt.
 </p>
diff --git a/simutrans/text/de/curiosity_build.txt b/simutrans/text/de/curiosity_build.txt
index 3873bfa..bc8e606 100644
--- a/simutrans/text/de/curiosity_build.txt
+++ b/simutrans/text/de/curiosity_build.txt
@@ -1,36 +1,36 @@
-<title>Sehenswürdigkeiten bauen</title>
-
-<h1><strong>Sehenswürdigkeiten bauen</strong></h1>
-
-<p>
-Der Dialog ist in vier Bereiche aufgeteilt.
-<br>
-· oben links befindet sich die Auswahlliste mit den Sehenswürdigkeiten<br>
-· untern links wird das Bild der ausgewählten Sehenswürdigkeit angezeigt<br>
-· oben rechts befinden sich einige Optionen<br>
-· unten rechts werden die Informationen der ausgewählten Sehenswürdigkeit angezeigt<br>
-</p>
-<p>
-<h1>Auswahlliste</h1>
-<br>
-In der Auswahlliste werden alle zur Verfügung stehenden Sehenswürdigkeit angezeigt, wenn die entsprechenden Optionen aktiviert (<em>Stadtattraktionen</em>, <em> Ausflugsziel</em>, <em>Denkmal</em>) sind.
-Oben befinden sich zwei Reiter, die die Anzeige umschalten.<br>
-· <em>Übersetzung:</em> Zeigt die Namen so an, wie diese im Spiel verwendet werden. Dies ist abhängig von der eingestellten Sprache. Wenn keine Übersetzung für die eingestellte Sprache vorhanden ist, wird der Objektname angezeigt.<br>
-· <em>Objekt:</em> Zeigt die internen Objektnamen an.<br>
-<br>
-Die Schriftfarben haben folgende Bedeutung:<br>
-· <em>grüne Schrift</em> kennzeichnet Sehenswürdigkeiten, deren Standort sich außerhalb von Städten befindet.<br>
-· <em>blaue Schrift</em> kennzeichnet Sehenswürdigkeiten, deren Standort sich innerhalb von Städten befindet.<br>
-· <em>schwarze Schrift</em> kennzeichnet Denkmäler. Denkmäler können nur einmal pro Karte gebaut werden.<br>
-</p>
-<h1>Optionen</h1>
-<br>
-· <em>alle Klimazonen:</em> Diese Option deaktiviert die Klimazonenzuordnung beim Bau der Sehenswürdigkeit.<br>
-· <em>Mit Epoche ab Jahr:</em> Es werden nur die Sehenswürdigkeiten in der Auswahlliste angezeigt, die im aktuellem Spieljahr zur Verfügung stehen.<br>
-· <em>Auch veraltete zeigen:</em> Es werden auch die Sehenswürdigkeiten in der Auswahlliste angezeigt, die in früheren Spieljahren mal zur Verfügung standen.<br>
-· <em>Stadtattraktionen:</em> Es werden die Sehenswürdigkeiten in der Auswahlliste angezeigt, deren Standort sich in Städten befindet.<br>
-· <em>Ausflugsziel:</em> Es werden die Sehenswürdigkeiten in der Auswahlliste angezeigt, deren Standort sich außerhalb von Städten befindet.<br>
-· <em>Denmal:</em> Es werden die Denkmäler in der Auswahlliste angezeigt.
-<br>
-· <em>Rotation:</em> Sofern die ausgewählte Sehenswürdigkeit mehrere Ansichten hat, kann hier eine bestimmte Ansicht ausgewählt werden. Die Grafik unten links wird entsprechen gewechselt. Bei der Auswahl von <em>Zufällig</em>, wird beim Bau der Sehenswürdigkeit irgendeine Ansicht gewählt.<br>
+<title>Sehenswürdigkeiten bauen</title>
+
+<h1><strong>Sehenswürdigkeiten bauen</strong></h1>
+
+<p>
+Der Dialog ist in vier Bereiche aufgeteilt.
+<br>
+· oben links befindet sich die Auswahlliste mit den Sehenswürdigkeiten<br>
+· untern links wird das Bild der ausgewählten Sehenswürdigkeit angezeigt<br>
+· oben rechts befinden sich einige Optionen<br>
+· unten rechts werden die Informationen der ausgewählten Sehenswürdigkeit angezeigt<br>
+</p>
+<p>
+<h1>Auswahlliste</h1>
+<br>
+In der Auswahlliste werden alle zur Verfügung stehenden Sehenswürdigkeit angezeigt, wenn die entsprechenden Optionen aktiviert (<em>Stadtattraktionen</em>, <em> Ausflugsziel</em>, <em>Denkmal</em>) sind.
+Oben befinden sich zwei Reiter, die die Anzeige umschalten.<br>
+· <em>Übersetzung:</em> Zeigt die Namen so an, wie diese im Spiel verwendet werden. Dies ist abhängig von der eingestellten Sprache. Wenn keine Übersetzung für die eingestellte Sprache vorhanden ist, wird der Objektname angezeigt.<br>
+· <em>Objekt:</em> Zeigt die internen Objektnamen an.<br>
+<br>
+Die Schriftfarben haben folgende Bedeutung:<br>
+· <em>grüne Schrift</em> kennzeichnet Sehenswürdigkeiten, deren Standort sich außerhalb von Städten befindet.<br>
+· <em>blaue Schrift</em> kennzeichnet Sehenswürdigkeiten, deren Standort sich innerhalb von Städten befindet.<br>
+· <em>schwarze Schrift</em> kennzeichnet Denkmäler. Denkmäler können nur einmal pro Karte gebaut werden.<br>
+</p>
+<h1>Optionen</h1>
+<br>
+· <em>alle Klimazonen:</em> Diese Option deaktiviert die Klimazonenzuordnung beim Bau der Sehenswürdigkeit.<br>
+· <em>Mit Epoche ab Jahr:</em> Es werden nur die Sehenswürdigkeiten in der Auswahlliste angezeigt, die im aktuellem Spieljahr zur Verfügung stehen.<br>
+· <em>Auch veraltete zeigen:</em> Es werden auch die Sehenswürdigkeiten in der Auswahlliste angezeigt, die in früheren Spieljahren mal zur Verfügung standen.<br>
+· <em>Stadtattraktionen:</em> Es werden die Sehenswürdigkeiten in der Auswahlliste angezeigt, deren Standort sich in Städten befindet.<br>
+· <em>Ausflugsziel:</em> Es werden die Sehenswürdigkeiten in der Auswahlliste angezeigt, deren Standort sich außerhalb von Städten befindet.<br>
+· <em>Denmal:</em> Es werden die Denkmäler in der Auswahlliste angezeigt.
+<br>
+· <em>Rotation:</em> Sofern die ausgewählte Sehenswürdigkeit mehrere Ansichten hat, kann hier eine bestimmte Ansicht ausgewählt werden. Die Grafik unten links wird entsprechen gewechselt. Bei der Auswahl von <em>Zufällig</em>, wird beim Bau der Sehenswürdigkeit irgendeine Ansicht gewählt.<br>
 </p>
diff --git a/simutrans/text/de/curiositylist_filter.txt b/simutrans/text/de/curiositylist_filter.txt
index 50ded3c..f4f37a8 100644
--- a/simutrans/text/de/curiositylist_filter.txt
+++ b/simutrans/text/de/curiositylist_filter.txt
@@ -1,27 +1,27 @@
-<title>Touristenzielliste Hilfe</title>
-
-<h1><strong>Touristenzielliste</strong></h1>
-<p>
-Die Touristenzielliste wird über die <a href="list.txt">Listenverwaltung</a> geöffnet.<br/>
-In der Touristenzielliste sind alle Sehenswürdigkeiten aufgeführt. Geplant ist die Erweiterung um Denkmäler. Ein Klick auf einen Eintrag öffnet den Gebäudetext (wir hoffen, sie haben Spaß daran) und stellt die Karte dar. Es gibt keine Sortierfunktionen.
-</p>
-<p>
-· <em>Status:</em> Die Statusfarben sind<br>
-- <em>Grün:</em> Die Attraktion ist für den Passagierverkehr erschlossen.<br>
-- <em>Blau:</em> Die Attraktion ist für den Postverkehr erschlossen.<br>
-- <em>Türkis:</em> Die Attraktion ist für den Passagier- und Postverkehr erschlossen.<br>
-- <em>Orange:</em> Eine Haltestelle, die die Attraktion erschließt, ist überfüllt.<br>
-- <em>Rot:</em> Alle Haltestellen, die die Attraktion erschließen, sind überfüllt.<br>
-· Ein <em>Gebäude</em> neben dem Statusquadrat bedeutet, dass es sich um eine Stadtattraktion handelt.
-</p>
-<p>
-· <em>Name:</em> Die Bezeichnung der Attraktion, gefolgt von den Kartenkoordinaten
-</p>
-<p>
-· <em>Passagierlevel:</em> Nach dem Bindestrich folgen noch Passagier- und Postlevel. Attraktionen erzeugen von sich aus keine Passagiere, doch jeder Tourist, der dorthin will, erzeugt gleichzeitig seine Rückreise. Post wird ebenfalls nicht von sich aus erzeugt, doch eine geringe Anregung genügt, und die Touristen senden massenweise Ansichtskarten in die Welt hinaus.
-</p>
-<p>
-· <em>Erschliessung der Touristenziele:</em> Einige Touristenziele bedecken eine grosse Landfläche.
-Um eine Fabrik anzuschließen reicht es aus, dass ein einziges Fabrikfeld im Bereich einer Haltestelle liegt.
-Im Gegensatz dazu werden von Attraktionen nur die Felder erschlossenen, die tatsächlich im Einzugsbereich von Haltestellen liegen. Um das Passagieraufkommen einer Attraktion vollständig zu nutzen, müssen also alle zugehörigen Felder durch den Einzugsbereich von Haltestellen abgedeckt werden. Touristen, deren Ziel auf einem nicht erschlossenen Feld liegt, finden sonst keine Route.
+<title>Touristenzielliste Hilfe</title>
+
+<h1><strong>Touristenzielliste</strong></h1>
+<p>
+Die Touristenzielliste wird über die <a href="list.txt">Listenverwaltung</a> geöffnet.<br/>
+In der Touristenzielliste sind alle Sehenswürdigkeiten aufgeführt. Geplant ist die Erweiterung um Denkmäler. Ein Klick auf einen Eintrag öffnet den Gebäudetext (wir hoffen, sie haben Spaß daran) und stellt die Karte dar. Es gibt keine Sortierfunktionen.
+</p>
+<p>
+· <em>Status:</em> Die Statusfarben sind<br>
+- <em>Grün:</em> Die Attraktion ist für den Passagierverkehr erschlossen.<br>
+- <em>Blau:</em> Die Attraktion ist für den Postverkehr erschlossen.<br>
+- <em>Türkis:</em> Die Attraktion ist für den Passagier- und Postverkehr erschlossen.<br>
+- <em>Orange:</em> Eine Haltestelle, die die Attraktion erschließt, ist überfüllt.<br>
+- <em>Rot:</em> Alle Haltestellen, die die Attraktion erschließen, sind überfüllt.<br>
+· Ein <em>Gebäude</em> neben dem Statusquadrat bedeutet, dass es sich um eine Stadtattraktion handelt.
+</p>
+<p>
+· <em>Name:</em> Die Bezeichnung der Attraktion, gefolgt von den Kartenkoordinaten
+</p>
+<p>
+· <em>Passagierlevel:</em> Nach dem Bindestrich folgen noch Passagier- und Postlevel. Attraktionen erzeugen von sich aus keine Passagiere, doch jeder Tourist, der dorthin will, erzeugt gleichzeitig seine Rückreise. Post wird ebenfalls nicht von sich aus erzeugt, doch eine geringe Anregung genügt, und die Touristen senden massenweise Ansichtskarten in die Welt hinaus.
+</p>
+<p>
+· <em>Erschliessung der Touristenziele:</em> Einige Touristenziele bedecken eine grosse Landfläche.
+Um eine Fabrik anzuschließen reicht es aus, dass ein einziges Fabrikfeld im Bereich einer Haltestelle liegt.
+Im Gegensatz dazu werden von Attraktionen nur die Felder erschlossenen, die tatsächlich im Einzugsbereich von Haltestellen liegen. Um das Passagieraufkommen einer Attraktion vollständig zu nutzen, müssen also alle zugehörigen Felder durch den Einzugsbereich von Haltestellen abgedeckt werden. Touristen, deren Ziel auf einem nicht erschlossenen Feld liegt, finden sonst keine Route.
 </p>
diff --git a/simutrans/text/de/depot.txt b/simutrans/text/de/depot.txt
index 4e19880..acc9820 100644
--- a/simutrans/text/de/depot.txt
+++ b/simutrans/text/de/depot.txt
@@ -1,114 +1,114 @@
-<title>Depotfenster Hilfe</title>
-
-<h1><strong>Depotfenster</strong></h1>
-<p>
-<em>Depotarten:</em> Die Depots für Züge, Straßenfahrzeuge, Schiffe, Trams, Flugzeuge und Magnetschwebebahnen halten die jeweiligen Fahrzeugarten bereit. Im Depotfenster kannst Du Fahrzeuge kaufen und verkaufen sowie Fahrzeugverbände zusammenstellen, Zusammenstellungen ändern und auflösen. Im Aufbau unterscheiden sich die Depotfenster nicht.
-<br/> <br/>
-<em>Fenstertitelleiste:</em> Rechts neben dem Fragezeichen befinden sich 2 Pfeilschaltflächen. Mit den Pfeilen kannst Du nacheinander zu den anderen Depots des gleichen Typs wechseln.
-<br/> <br/>
-<em>Fahrzeuglisten:</em> Fahrzeugverbände, die sich im Depot befinden, werden in Fahrzeuglisten erfasst. Die Zeile gibt Aufschluss darüber, wieviele Fahrzeugverbände sich im Depot befinden. Sie zeigt auch an, welche Liste gerade ausgewählt ist.
-<br/> <br/>
-<em>Auswahl eines Fahrzeugverbandes:</em> Mit den beiden Pfeilschaltflächen links und rechts des Edit-Feldes kannst Du allen Fahrzeugverbände durchschalten, die sich derzeit im Depot befinden. Möchtest Du einen neuen zusammenstellen, schalte bis zum Eintrag "Neuer Fahrzeugverband".
-<br/>Im editierbaren Feld kannst Du den Namen des Fahrzeugverbandes nach Belieben ändern. Klicke mit der Maus in das Feld. Bestätige den Abschluss der Arbeit mit <em>RETURN</em>.
-</p>
-<p>
-<em>Linienauswahl:</em> Du kannst eine bestehende Linie auswählen. Für die Durchschaltung der Linien stehen Dir die Pfeilschalter links und rechts der Linienauswahl zur Verfügung. Ein Klick in das Anzeigefeld öffnet ein Auswahlliste. In ihr kannst Du mit der Maus den gewünschten Eintrag auswählen. Es ist auch möglich, dort den Liniennamen zu editieren; aus eigener Erfahrung des Autors wird empfohlen, dies in der <a href="linemanagement.txt">Linienverwaltung</a> zu machen.
-</p>
-<p>
-<em>Fahrzeugansicht:</em> Ein Fahrzeugverband besteht aus mindestens einem Einzelfahrzeug. Flugzeuge erlauben sind immer solo, Straßen- und Schiffsfahrzeugverbände können bis zu 4 Fahrzeuge, Schienenfahrzeugverbände bis zu 24 Einzelfahrzeuge enthalten. Der ausgewählte Fahrzeugverband wird in dem Feld darunter grafisch dargestellt.<br/>
-· Wenn Du die Maus über ein Einzelfahrzeug führst, werden im unteren Bereich des Fensters dessen <a href="depot.txt">Fahrzeugdaten</a> angezeigt.<br/>
-· Klickst Du ein Einzelfahrzeug an, wird es aus dem Fahrzeugverband entfernt und im Depot eingelagert. Eine Ordnungszahl im Einzelfahrzeugdepot zeigt an, wie viele Fahrzeuge des Typs Du eingelagert hast.<br/>
-· Unter der grafischen Ansicht des Fahrzeugverbandes werden die Anzahl der Fahrzeuge, die benötigte Haltenstellenlänge, der Verkaufswert und die bediente Linie angezeigt.
-</p>
-<p>
-<strong>Die Funktionen der gruppierten Schaltflächen:</strong><br/>
-<em>Start:</em> Schicke einen Fahrzeugverband mit Fahrplan auf die Reise, es wird der im Fahrplan ausgewählte Halt angefahren.<br/>
-<em>Fahrplan:</em> Das <a href="schedule.txt">Fahrplan-Fenster</a> wird geöffnet, in welchem Du einen individuellen Fahrplan erstellen kannst.<br/>
-<em>Auflösen:</em> Der aktuelle Fahrzeugverbandes wird aufgelöst, alle Fahrzeuge werden ins Depot eingelagert.<br/>
-<em>Verkauf:</em> Der aktuelle Fahrzeugverbandes wird zum aktuellen Verkaufswert verkauft.<br/><br/>
-<em>Neue Linie:</em>Das <a href="schedule.txt">Linienplan-Fenster</a> wird geöffnet, in welchem Du die Haltepunkte einer neuen Linie eintragen kannst.<br/>
-<em>Linie zuweisen:</em> Weise dem Fahrzeugverbandes die aktuelle Linie der Linienauswahl zu.<br/>
-<em>Linie ändern:</em> Im <a href="schedule.txt">Linienplan-Fenster</a> kannst Du die oben angezeigte Linie bearbeiten.<br/>
-<em>Kopieren:</em> Kaufe einen Fahrzeugverbandes, der in seiner Zusammenstellung dem aktuellen Fahrzeugverbandes entspricht. Der Name und ein zugewiesener Fahrplan/Linie werden übernommen.
-</p>
-<p>
-<em>Einzelfahrzeugdepot:</em> Im Depot sind alle derzeit verfügbaren Fahrzeuge des Depottyps nach ihrem Ladevermögen sortiert abgebildet. Mittels der Tab-Reiter sind sie nach Personen- und Postbeförderung, angetriebene und nicht angetriebene Fahrzeuge eingeteilt.<br/>
-· Elektrisch betriebene Fahrzeuge werden nur angezeigt, wenn das Feld, auf welchem das Depot steht, elektrifiziert ist.<br/>
-· Wenn Du die Maus über ein Fahrzeug führst, werden im unteren Bereich des Fensters dessen <a href="depot.txt">Fahrzeugdaten</a> angezeigt.<br/>
-· Fahrzeuge werden erst ab einem bestimmten Datum verfügbar. Einige Fahrzeuge veralten und werden außer Dienst gestellt. Du kannst sie, über den Knopf <em>Auch veraltete Fahrzeuge zeigen</em>, rechts unten, anzeigen lassen und sie kaufen.<br/>
-· Möchtest Du, dass alle Fahrzeuge unabhängig von deren Einführungs-Datum verfügbar sind, dann wähle die <a href="new_world.txt">Einführungsdaten</a> bei der Welterstellung ab.
-</p>
-<p>
-<strong>Depotaktionen</strong><br/><br/>
-<em>Aktionsschalter:</em> Der Schalter rechts unten wechselt bei der Betätigung zwischen 3 Funktionseinstellungen.<br/>
-· <em>anhängen:</em> Das angeklickte Einzelfahrzeug wird am Schluss des Fahrzeugverbandes angehängt.<br/>
-· <em>voranstellen:</em> Das angewählte Einzelfahrzeug wird an der Spitze des Fahrzeugverbandes vorangestellt.<br/>
-· <em>verkaufen:</em> Verkaufe ein eingelagertes Einzelfahrzeug. Der Verkaufswert aller eingelagerter Einzelfahrzeug des Typs ist bei den <a href="depot.txt">Fahrzeugdaten</a> ersichtlich.
-</p>
-<p>
-Die <em>Farbbalken</em> unter den Einzelfahrzeug im Depot ändern sich je nach Schalterstellung. Wenn der Farbbalken auf einer Seite <em>gelb</em> ist, gehört ein weiteres Einzelfahrzeug zur betriebsfähigen Zusammenstellung. Wird dieses Einzelfahrzeug gekauft, wird auch das zugehörige Einzelfahrzeug dazugekauft.<br/><br/>
-Die Farben bedeuten:<br/>
-· <em>grün:</em> Das Einzelfahrzeug kann verwendet werden.<br/>
-· <em>rot:</em> Das Einzelfahrzeug ist für die Aktion nicht verwendbar.<br/>
-· <em>gelb links:</em> Ein anderes Einzelfahrzeug muss vorangestellt werden.<br/>
-· <em>gelb rechts:</em> Ein anderes Einzelfahrzeug muss folgen.<br/>
-· <em>blau:</em> Das aktuelle Jahr liegt außerhalb der Einsatzzeit des Einzelfahrzeug. Das Einzelfahrzeug kann verwendet werden.
-</p>
-<p>
-Ein Fahrzeugverband ist einsatzbereit, wenn er für alle Einzelfahrzeug grüne Balken zeigt. Verbleiben teilgelbe Balken, sind noch Einzelfahrzeug beizustellen, etwa Zugmaschine, Tender oder Schlussfahrzeug.
-</p>
-<p>
-<strong>Achtung</strong> Beachte bei Schienenfahrzeugverbänden, dass alle Fahrzeuge des Fahrzeugverbandes in die angefahrenen Haltestellen passen, sonst werden nur die Fahrzeuge beladen, die in der Haltestelle stehen. Das bedeutet, wenn eine Mindestbeladung eingestellt ist, die größer ist als die Ladekapazität der in der Haltestelle stehenden Einzelfahrzeuge ist, fährt der Fahrzeugverband niemals ab. An jedes Haltestellensegment passen in der Regel 2 Fahrzeuge.
-</p>
-<p>
-Die Anzahl von eingelagerten Einzelfahrzeugen eines Typs ist an einer weißen Zahl links über dem Einzelfahrzeuge ersichtlich. Du kannst die Einzelfahrzeuge verkaufen oder in diesem Depot zu neuen Fahrzeugverbänden wiederverwenden.<br/>
-</p>
-<p>
-Unter dem Einzelfahrzeugdepot wird die Anzahl aller hier eingelagerter Einzelfahrzeuge angezeigt.
-</p>
-<p>
-<em>Einzelfahrzeugdaten:</em> Führst Du die Maus über ein Einzelfahrzeugen im Fahrzeugverband (oben) oder im Einzelfahrzeugdepot (mittig), werden dessen Daten im unteren Teil des Fensters eingeblendet:
-</p>
-<p>
-<em>Linke Spalte angetriebene Fahrzeuge:</em><br/>
-· Typbezeichnung und in Klammern die Betriebsart (Dampf, Diesel, Elektrisch).<br/>
-· Neupreis und in Klammern die Betriebskosten je Streckenkilometer.<br/>
-· Leistung in KW und die Höchstgeschwindigkeit.<br/>
-· Fahrzeuggewicht.<br/>
-· Zuladung (wenn möglich) mit Transporteinheiten und Art des Gutes.<br/>
-<em>Linke Spalte antriebsloser Fahrzeuge:</em><br/>
-· Typbezeichnung .<br/>
-· Neupreis und in Klammern die Betriebskosten je Streckenkilometer.<br/>
-· Zuladung mit Transporteinheiten und Art des Gutes.<br/>
-· Fahrzeuggewicht.<br/>
-· Höchstgeschwindigkeit.
-</p>
-<p>
-<em>Rechte Spalte:</em><br/>
-· Einführungsdatum.<br/>
-· Außerdienststellungsdatum (nicht bei allen Fahrzeugen).<br/>
-· Bei angetriebenen Fahrzeugen das Übersetzungsverhältnis.<br/>
-· Bei gekauften Fahrzeugen der Verkaufspreis.
-</p>
-<p>
-<em>Frachteinheiten:</em><br/>
-Den Warenarten sind 5 Beladeeinheiten zugeordnet:<br/>
-· Flüssigkeiten: m³<br/>
-· Lose Güter: Tonnen (t)<br/>
-· Größere Objekte: Stück<br/>
-· Palettierte Güter: Paletten<br/>
-· Lose Gebindeeinheiten: Sack<br/>
-Bei Passagieren wird die Anzahl angegeben.
-</p>
-<p>
-<em>Güterarten:</em><br/>
-Güter sind bei Simutrans nach 6 Kategorien klassifiziert:<br/>
-· Gefriergut, Öl/Benzin, Schüttgut, Sonderfracht, Langholz und Stückgut.
-</p>
-<p>
-· Einigen Güterarten können in den verschiedenen Paks unterschiedliche Frachteinheiten und Güterarten zugewiesen sein.<br/>
-· Sonderfrachten benötigen zum Transport immer spezielle Fahrzeuge.<br/>
-· Andere Fahrzeuge können jedes Gut aus ihrer Kategorie laden.<br/>
-· Aus historischen Gründen haben einige Fahrzeuge immer noch irreführende Bezeichnungen. Das Kohleschiff kann heute nicht nur für Kohle, sondern für jegliches Schüttgut verwendet werden.<br/>
-· Die Fabriken- und Lagerinfos zeigen an, welche Güter zu welcher Kategorie zählen und welche Fahrzeuge dafür geeignet sind. Ist keine Kategorie angegeben sondern ein Spezialfahrzeugtyp, wird ein Spezialfahrzeug benötigt.
+<title>Depotfenster Hilfe</title>
+
+<h1><strong>Depotfenster</strong></h1>
+<p>
+<em>Depotarten:</em> Die Depots für Züge, Straßenfahrzeuge, Schiffe, Trams, Flugzeuge und Magnetschwebebahnen halten die jeweiligen Fahrzeugarten bereit. Im Depotfenster kannst Du Fahrzeuge kaufen und verkaufen sowie Fahrzeugverbände zusammenstellen, Zusammenstellungen ändern und auflösen. Im Aufbau unterscheiden sich die Depotfenster nicht.
+<br/> <br/>
+<em>Fenstertitelleiste:</em> Rechts neben dem Fragezeichen befinden sich 2 Pfeilschaltflächen. Mit den Pfeilen kannst Du nacheinander zu den anderen Depots des gleichen Typs wechseln.
+<br/> <br/>
+<em>Fahrzeuglisten:</em> Fahrzeugverbände, die sich im Depot befinden, werden in Fahrzeuglisten erfasst. Die Zeile gibt Aufschluss darüber, wieviele Fahrzeugverbände sich im Depot befinden. Sie zeigt auch an, welche Liste gerade ausgewählt ist.
+<br/> <br/>
+<em>Auswahl eines Fahrzeugverbandes:</em> Mit den beiden Pfeilschaltflächen links und rechts des Edit-Feldes kannst Du allen Fahrzeugverbände durchschalten, die sich derzeit im Depot befinden. Möchtest Du einen neuen zusammenstellen, schalte bis zum Eintrag "Neuer Fahrzeugverband".
+<br/>Im editierbaren Feld kannst Du den Namen des Fahrzeugverbandes nach Belieben ändern. Klicke mit der Maus in das Feld. Bestätige den Abschluss der Arbeit mit <em>RETURN</em>.
+</p>
+<p>
+<em>Linienauswahl:</em> Du kannst eine bestehende Linie auswählen. Für die Durchschaltung der Linien stehen Dir die Pfeilschalter links und rechts der Linienauswahl zur Verfügung. Ein Klick in das Anzeigefeld öffnet ein Auswahlliste. In ihr kannst Du mit der Maus den gewünschten Eintrag auswählen. Es ist auch möglich, dort den Liniennamen zu editieren; aus eigener Erfahrung des Autors wird empfohlen, dies in der <a href="linemanagement.txt">Linienverwaltung</a> zu machen.
+</p>
+<p>
+<em>Fahrzeugansicht:</em> Ein Fahrzeugverband besteht aus mindestens einem Einzelfahrzeug. Flugzeuge erlauben sind immer solo, Straßen- und Schiffsfahrzeugverbände können bis zu 4 Fahrzeuge, Schienenfahrzeugverbände bis zu 24 Einzelfahrzeuge enthalten. Der ausgewählte Fahrzeugverband wird in dem Feld darunter grafisch dargestellt.<br/>
+· Wenn Du die Maus über ein Einzelfahrzeug führst, werden im unteren Bereich des Fensters dessen <a href="depot.txt">Fahrzeugdaten</a> angezeigt.<br/>
+· Klickst Du ein Einzelfahrzeug an, wird es aus dem Fahrzeugverband entfernt und im Depot eingelagert. Eine Ordnungszahl im Einzelfahrzeugdepot zeigt an, wie viele Fahrzeuge des Typs Du eingelagert hast.<br/>
+· Unter der grafischen Ansicht des Fahrzeugverbandes werden die Anzahl der Fahrzeuge, die benötigte Haltenstellenlänge, der Verkaufswert und die bediente Linie angezeigt.
+</p>
+<p>
+<strong>Die Funktionen der gruppierten Schaltflächen:</strong><br/>
+<em>Start:</em> Schicke einen Fahrzeugverband mit Fahrplan auf die Reise, es wird der im Fahrplan ausgewählte Halt angefahren.<br/>
+<em>Fahrplan:</em> Das <a href="schedule.txt">Fahrplan-Fenster</a> wird geöffnet, in welchem Du einen individuellen Fahrplan erstellen kannst.<br/>
+<em>Auflösen:</em> Der aktuelle Fahrzeugverbandes wird aufgelöst, alle Fahrzeuge werden ins Depot eingelagert.<br/>
+<em>Verkauf:</em> Der aktuelle Fahrzeugverbandes wird zum aktuellen Verkaufswert verkauft.<br/><br/>
+<em>Neue Linie:</em>Das <a href="schedule.txt">Linienplan-Fenster</a> wird geöffnet, in welchem Du die Haltepunkte einer neuen Linie eintragen kannst.<br/>
+<em>Linie zuweisen:</em> Weise dem Fahrzeugverbandes die aktuelle Linie der Linienauswahl zu.<br/>
+<em>Linie ändern:</em> Im <a href="schedule.txt">Linienplan-Fenster</a> kannst Du die oben angezeigte Linie bearbeiten.<br/>
+<em>Kopieren:</em> Kaufe einen Fahrzeugverbandes, der in seiner Zusammenstellung dem aktuellen Fahrzeugverbandes entspricht. Der Name und ein zugewiesener Fahrplan/Linie werden übernommen.
+</p>
+<p>
+<em>Einzelfahrzeugdepot:</em> Im Depot sind alle derzeit verfügbaren Fahrzeuge des Depottyps nach ihrem Ladevermögen sortiert abgebildet. Mittels der Tab-Reiter sind sie nach Personen- und Postbeförderung, angetriebene und nicht angetriebene Fahrzeuge eingeteilt.<br/>
+· Elektrisch betriebene Fahrzeuge werden nur angezeigt, wenn das Feld, auf welchem das Depot steht, elektrifiziert ist.<br/>
+· Wenn Du die Maus über ein Fahrzeug führst, werden im unteren Bereich des Fensters dessen <a href="depot.txt">Fahrzeugdaten</a> angezeigt.<br/>
+· Fahrzeuge werden erst ab einem bestimmten Datum verfügbar. Einige Fahrzeuge veralten und werden außer Dienst gestellt. Du kannst sie, über den Knopf <em>Auch veraltete Fahrzeuge zeigen</em>, rechts unten, anzeigen lassen und sie kaufen.<br/>
+· Möchtest Du, dass alle Fahrzeuge unabhängig von deren Einführungs-Datum verfügbar sind, dann wähle die <a href="new_world.txt">Einführungsdaten</a> bei der Welterstellung ab.
+</p>
+<p>
+<strong>Depotaktionen</strong><br/><br/>
+<em>Aktionsschalter:</em> Der Schalter rechts unten wechselt bei der Betätigung zwischen 3 Funktionseinstellungen.<br/>
+· <em>anhängen:</em> Das angeklickte Einzelfahrzeug wird am Schluss des Fahrzeugverbandes angehängt.<br/>
+· <em>voranstellen:</em> Das angewählte Einzelfahrzeug wird an der Spitze des Fahrzeugverbandes vorangestellt.<br/>
+· <em>verkaufen:</em> Verkaufe ein eingelagertes Einzelfahrzeug. Der Verkaufswert aller eingelagerter Einzelfahrzeug des Typs ist bei den <a href="depot.txt">Fahrzeugdaten</a> ersichtlich.
+</p>
+<p>
+Die <em>Farbbalken</em> unter den Einzelfahrzeug im Depot ändern sich je nach Schalterstellung. Wenn der Farbbalken auf einer Seite <em>gelb</em> ist, gehört ein weiteres Einzelfahrzeug zur betriebsfähigen Zusammenstellung. Wird dieses Einzelfahrzeug gekauft, wird auch das zugehörige Einzelfahrzeug dazugekauft.<br/><br/>
+Die Farben bedeuten:<br/>
+· <em>grün:</em> Das Einzelfahrzeug kann verwendet werden.<br/>
+· <em>rot:</em> Das Einzelfahrzeug ist für die Aktion nicht verwendbar.<br/>
+· <em>gelb links:</em> Ein anderes Einzelfahrzeug muss vorangestellt werden.<br/>
+· <em>gelb rechts:</em> Ein anderes Einzelfahrzeug muss folgen.<br/>
+· <em>blau:</em> Das aktuelle Jahr liegt außerhalb der Einsatzzeit des Einzelfahrzeug. Das Einzelfahrzeug kann verwendet werden.
+</p>
+<p>
+Ein Fahrzeugverband ist einsatzbereit, wenn er für alle Einzelfahrzeug grüne Balken zeigt. Verbleiben teilgelbe Balken, sind noch Einzelfahrzeug beizustellen, etwa Zugmaschine, Tender oder Schlussfahrzeug.
+</p>
+<p>
+<strong>Achtung</strong> Beachte bei Schienenfahrzeugverbänden, dass alle Fahrzeuge des Fahrzeugverbandes in die angefahrenen Haltestellen passen, sonst werden nur die Fahrzeuge beladen, die in der Haltestelle stehen. Das bedeutet, wenn eine Mindestbeladung eingestellt ist, die größer ist als die Ladekapazität der in der Haltestelle stehenden Einzelfahrzeuge ist, fährt der Fahrzeugverband niemals ab. An jedes Haltestellensegment passen in der Regel 2 Fahrzeuge.
+</p>
+<p>
+Die Anzahl von eingelagerten Einzelfahrzeugen eines Typs ist an einer weißen Zahl links über dem Einzelfahrzeuge ersichtlich. Du kannst die Einzelfahrzeuge verkaufen oder in diesem Depot zu neuen Fahrzeugverbänden wiederverwenden.<br/>
+</p>
+<p>
+Unter dem Einzelfahrzeugdepot wird die Anzahl aller hier eingelagerter Einzelfahrzeuge angezeigt.
+</p>
+<p>
+<em>Einzelfahrzeugdaten:</em> Führst Du die Maus über ein Einzelfahrzeugen im Fahrzeugverband (oben) oder im Einzelfahrzeugdepot (mittig), werden dessen Daten im unteren Teil des Fensters eingeblendet:
+</p>
+<p>
+<em>Linke Spalte angetriebene Fahrzeuge:</em><br/>
+· Typbezeichnung und in Klammern die Betriebsart (Dampf, Diesel, Elektrisch).<br/>
+· Neupreis und in Klammern die Betriebskosten je Streckenkilometer.<br/>
+· Leistung in KW und die Höchstgeschwindigkeit.<br/>
+· Fahrzeuggewicht.<br/>
+· Zuladung (wenn möglich) mit Transporteinheiten und Art des Gutes.<br/>
+<em>Linke Spalte antriebsloser Fahrzeuge:</em><br/>
+· Typbezeichnung .<br/>
+· Neupreis und in Klammern die Betriebskosten je Streckenkilometer.<br/>
+· Zuladung mit Transporteinheiten und Art des Gutes.<br/>
+· Fahrzeuggewicht.<br/>
+· Höchstgeschwindigkeit.
+</p>
+<p>
+<em>Rechte Spalte:</em><br/>
+· Einführungsdatum.<br/>
+· Außerdienststellungsdatum (nicht bei allen Fahrzeugen).<br/>
+· Bei angetriebenen Fahrzeugen das Übersetzungsverhältnis.<br/>
+· Bei gekauften Fahrzeugen der Verkaufspreis.
+</p>
+<p>
+<em>Frachteinheiten:</em><br/>
+Den Warenarten sind 5 Beladeeinheiten zugeordnet:<br/>
+· Flüssigkeiten: m³<br/>
+· Lose Güter: Tonnen (t)<br/>
+· Größere Objekte: Stück<br/>
+· Palettierte Güter: Paletten<br/>
+· Lose Gebindeeinheiten: Sack<br/>
+Bei Passagieren wird die Anzahl angegeben.
+</p>
+<p>
+<em>Güterarten:</em><br/>
+Güter sind bei Simutrans nach 6 Kategorien klassifiziert:<br/>
+· Gefriergut, Öl/Benzin, Schüttgut, Sonderfracht, Langholz und Stückgut.
+</p>
+<p>
+· Einigen Güterarten können in den verschiedenen Paks unterschiedliche Frachteinheiten und Güterarten zugewiesen sein.<br/>
+· Sonderfrachten benötigen zum Transport immer spezielle Fahrzeuge.<br/>
+· Andere Fahrzeuge können jedes Gut aus ihrer Kategorie laden.<br/>
+· Aus historischen Gründen haben einige Fahrzeuge immer noch irreführende Bezeichnungen. Das Kohleschiff kann heute nicht nur für Kohle, sondern für jegliches Schüttgut verwendet werden.<br/>
+· Die Fabriken- und Lagerinfos zeigen an, welche Güter zu welcher Kategorie zählen und welche Fahrzeuge dafür geeignet sind. Ist keine Kategorie angegeben sondern ein Spezialfahrzeugtyp, wird ein Spezialfahrzeug benötigt.
 </p>
diff --git a/simutrans/text/de/display.txt b/simutrans/text/de/display.txt
index 223c052..c2e9339 100644
--- a/simutrans/text/de/display.txt
+++ b/simutrans/text/de/display.txt
@@ -1,42 +1,42 @@
-<title>Anzeigeeinstellungen Hilfe</title>
-
-<h1><strong>Anzeigeeinstellungen</strong></h1>
-
-<p>
-· <em>Untergrundansicht</em>: In diesem Modus kann man Tunnelstrecken bauen, sofern schon eine Strecke unter der Erde besteht.<br>
-· <em>Tag und Nacht wechseln</em>: Soll es nachts dunkel werden in Simutrans? Gebäudefenster, Fahrzeuge und Signalmittel zeigen sich in Nachtbeleuchtung.
-· <em>Helligkeit</em>: Lege mit den Pfeiltasten die Helligkeit des Spiels fest. Nutze auch die Tasten <em>+</em> (heller) und <em>-</em> (dunkler). Werte über 0 lassen sich nur über die Tastatur einstellen. Die Einstellbarkeit ist nach oben und unten nicht begrenzt, es kommt aber sehr bald zu einer Falschfarbenanzeige.<br>
-· <em>Inverses Scrolling</em>: Kehre die Scrollrichtung bei Bedarf um, die Karte bewegt sich dann in Mausrichtung.<br>
-· <em>Scrollgeschwindigkeit</em>: Die Einstellung liefert den Multiplikator für die Kartenscrollgeschwindigkeit.
-</p>
-
-<p>
-· <em>Transparent statt minimieren</em>: Wählt den Modus aus, der benutzt werden soll, um Häuser oder Bäume zur besseren Übersicht zu verstecken.<br>
-· <em>Bäume minimieren</em>: Zeigt nur ganz kleine bzw. transparent Bäume an.<br>
-· <em>Stadtgebäude minimieren</em>: Zeigt nur ganz Fundamente bzw. schwarze Schatte der Stadtgebäude an.<br>
-· <em>alle Gebäude minimieren</em>: Zeigt nur ganz Fundamente bzw. schwarze Schatte bei Stadtgebäuden an. Andere Gebäude haben farbige Schatten, z.B. rot für Industrie.<br>
-</p>
-
-<p>
-· <em>transparent Stationsabdeckung</em>: Wählt den Modus aus, der benutzt werden soll, um die Reichweite von Halten anzuzeigen. Transparent färbt den Boden entsprechen des Besitzers, während ausgeschaltet nur ein Kästchen zu sehen ist..<br>
-· <em>Stationsabdeckung zeigen</em>: Zeigt die Stationsabdeckung an.<br>
-</p>
-
-<p>
-· <em>Fußgänger (an Halten)</em>: Sollen Fußgänger angezeigt werden, wenn Passagiere aus einem Fahrzeug aussteigen?<br>
-· <em>Fußgänger (Stadt)</em>: Sollen weitere Fußgänger zur Belebung des Stadtbildes angezeigt werden?<br>
-· <em>Verkehrsdichte:</em> Dieser Wert beeinflusst die Anzahl der privaten PKWs in den Städten.
-<br>
-</p>
-
-<p>
-<strong>Auslastungsanzeigen</strong>
-<br/>
-Im unteren Teil des Dialogs werden einige Information zur Auslastung des Computers angezeigt:
-</p>
-<p>
-· <em>Bildfrequenz</em>: zeigt die tatsächliche Zeit zwischen zwei Frames.<br>
-· <em>Untätig</em>: Zeigt an, wie lange der Computer zwischen zwei Bildschirmupdates pausiert.<br>
-· <em>Bildrate</em>: Je höher der Wert, desto ruckfreier bewegen sich die Fahrzeuge. Der Wert stellt die Bildfolgen pro Spielsekunde. Den Wert kann man mit dem Kommandzeilenparameter <strong>-fps</strong> oder in der <strong>simuconf.tab</strong> einstellen.<br>
-· <em>Simloops</em>: Anzahl der Simulationsschleifen pro Spielsekunde. Wenn der Wert dauerhaft unter 5 fällt, ist der Computer voll ausgelastet. Einige Funktionen in Simutrans können aussetzen, zum Beispiel fahren Züge nicht mehr ab. In dem Fall sollte eine kleinere Karte mit weniger Städten gespielt werden.
+<title>Anzeigeeinstellungen Hilfe</title>
+
+<h1><strong>Anzeigeeinstellungen</strong></h1>
+
+<p>
+· <em>Untergrundansicht</em>: In diesem Modus kann man Tunnelstrecken bauen, sofern schon eine Strecke unter der Erde besteht.<br>
+· <em>Tag und Nacht wechseln</em>: Soll es nachts dunkel werden in Simutrans? Gebäudefenster, Fahrzeuge und Signalmittel zeigen sich in Nachtbeleuchtung.
+· <em>Helligkeit</em>: Lege mit den Pfeiltasten die Helligkeit des Spiels fest. Nutze auch die Tasten <em>+</em> (heller) und <em>-</em> (dunkler). Werte über 0 lassen sich nur über die Tastatur einstellen. Die Einstellbarkeit ist nach oben und unten nicht begrenzt, es kommt aber sehr bald zu einer Falschfarbenanzeige.<br>
+· <em>Inverses Scrolling</em>: Kehre die Scrollrichtung bei Bedarf um, die Karte bewegt sich dann in Mausrichtung.<br>
+· <em>Scrollgeschwindigkeit</em>: Die Einstellung liefert den Multiplikator für die Kartenscrollgeschwindigkeit.
+</p>
+
+<p>
+· <em>Transparent statt minimieren</em>: Wählt den Modus aus, der benutzt werden soll, um Häuser oder Bäume zur besseren Übersicht zu verstecken.<br>
+· <em>Bäume minimieren</em>: Zeigt nur ganz kleine bzw. transparent Bäume an.<br>
+· <em>Stadtgebäude minimieren</em>: Zeigt nur ganz Fundamente bzw. schwarze Schatte der Stadtgebäude an.<br>
+· <em>alle Gebäude minimieren</em>: Zeigt nur ganz Fundamente bzw. schwarze Schatte bei Stadtgebäuden an. Andere Gebäude haben farbige Schatten, z.B. rot für Industrie.<br>
+</p>
+
+<p>
+· <em>transparent Stationsabdeckung</em>: Wählt den Modus aus, der benutzt werden soll, um die Reichweite von Halten anzuzeigen. Transparent färbt den Boden entsprechen des Besitzers, während ausgeschaltet nur ein Kästchen zu sehen ist..<br>
+· <em>Stationsabdeckung zeigen</em>: Zeigt die Stationsabdeckung an.<br>
+</p>
+
+<p>
+· <em>Fußgänger (an Halten)</em>: Sollen Fußgänger angezeigt werden, wenn Passagiere aus einem Fahrzeug aussteigen?<br>
+· <em>Fußgänger (Stadt)</em>: Sollen weitere Fußgänger zur Belebung des Stadtbildes angezeigt werden?<br>
+· <em>Verkehrsdichte:</em> Dieser Wert beeinflusst die Anzahl der privaten PKWs in den Städten.
+<br>
+</p>
+
+<p>
+<strong>Auslastungsanzeigen</strong>
+<br/>
+Im unteren Teil des Dialogs werden einige Information zur Auslastung des Computers angezeigt:
+</p>
+<p>
+· <em>Bildfrequenz</em>: zeigt die tatsächliche Zeit zwischen zwei Frames.<br>
+· <em>Untätig</em>: Zeigt an, wie lange der Computer zwischen zwei Bildschirmupdates pausiert.<br>
+· <em>Bildrate</em>: Je höher der Wert, desto ruckfreier bewegen sich die Fahrzeuge. Der Wert stellt die Bildfolgen pro Spielsekunde. Den Wert kann man mit dem Kommandzeilenparameter <strong>-fps</strong> oder in der <strong>simuconf.tab</strong> einstellen.<br>
+· <em>Simloops</em>: Anzahl der Simulationsschleifen pro Spielsekunde. Wenn der Wert dauerhaft unter 5 fällt, ist der Computer voll ausgelastet. Einige Funktionen in Simutrans können aussetzen, zum Beispiel fahren Züge nicht mehr ab. In dem Fall sollte eine kleinere Karte mit weniger Städten gespielt werden.
 </p>
diff --git a/simutrans/text/de/edittools.txt b/simutrans/text/de/edittools.txt
index 2b7bd61..4eb00c8 100644
--- a/simutrans/text/de/edittools.txt
+++ b/simutrans/text/de/edittools.txt
@@ -1,47 +1,47 @@
-<title>Karteneditor Hilfe</title>
-
-<h1><strong>Karteneditor</strong></h1>
-<p>
-Mit den Werkzeugen des Karteneditors kannst Du in den natürlichen Wachstumsprozess von Städten und Industrien eingegreifen. Das Menü lässt sich über einen Button im Menü <a href="special.txt">Spezialwerkzeuge</a> öffnen.
-</p>
-<p>
-Eine zu leicht spielbar organisierte Welt wird Dir bereits mit wenig Spielerfahrung jeden Anreiz und jeden Spielspaß rauben. Setze die Werkzeuge gar nicht oder überlegt ein. Realisiere bauliche Situationen, wie sie bei der Autogenerierung praktisch nicht erreicht werden können. Ein dichtes und schwer handhabbares Industrierevier auf einer Insel, der Fremdenverkehrsort mit seiner Attraktion in der schwer zugänglichen Gebirgslage, der Erlebnispark in der Nähe einer kleinen Stadt, die Erdölförderung nur an ausgewählten Küstenstreifen oder die Landwirtschaft als Schwerpunkt in einer ländlichen Umgebung stellen nur einige Beispiele aus der reichen Möglichkeitenpalette dar.
-</p>
-<p>
-· <em>Stadtwachstum:</em> Setze eines der beiden Werkzeuge in dem Gebiet der Stadt ein, deren Einwohnerzahl Du ändern möchtest. Nutzt Du das Werkzeug im Überschneidungsgebiet von Städten, wirkt sich die Aktion nur auf eine Stadt aus.<br/>
-- <em>Einwohnerzahl erhöhen:</em> Das Wachstumswerkzeug stellt einen nach oben weisen Pfeil dar. Bei jeder Werkzeugnutzung wird die Stadt um 100 Einwohner wachsen. Es werden sofort Gebäude erneuert oder frisch gebaut, da mit der Aktion die Arbeits- und Obdachlosenzahlen steigen.<br>
-- <em>Einwohnerzahl verringern:</em> Das Wachstumswerkzeug stellt einen nach unten weisen Pfeil dar. Die Einwohnerzahl der Stadt wird bei jeder Werkzeugnutzung um 100 schrumpfen. Alle Gebäude bleiben erhalten. Die Werte für Arbeitslose und Obdachlose geraten in negative Bereiche. Die Stadt wird erst wieder bauliche Entwicklung zeigen, wenn durch Wachstum Bedarf an Baumaßnahmen entstanden ist.
-</p>
-<p>
-· <em>Gründe neue Stadt:</em> Hast Du zu wenige Städte auf Deiner Karte, kannst Du mit diesem Werkzeug neue Städte gründen. Die Stadt entsteht dort, wo Dumit dem Werkzeug hinklickst. Aber <strong>Vorsicht</strong>, jede Stadtgründung kostet Dich eine Menge Geld.
-</p>
-<p>
-· <em>Stadtstraße bauen:</em> Das Bauwerkzeug stellt eine Straße dar. Straßen, die Du mit dem Werkzeug baust, können von allen Spielern kostenlos genutzt werden.
-</p>
-<p>
-· <em>Industriedichte erhöhen:</em> Es wird eine zufällige Industriekette gebaut.
-</p>
-<p>
-· <em>Industrieanlagen bauen:</em> Öffnet den Dialog <a href="factory_build.txt">Industrieanlagen bauen</a>.
-</p>
-<p>
-· <em>Industrieanlagen verbinden:</em> Mit diesem Werkzeug können Industrien verbunden werden. Dies funktioniert nur dann, wenn eine Warenverbindung möglich ist.
-</p>
-<p>
-· <em>Sehenswürdigkeiten bauen:</em> Öffnet den Dialog <a href="curiosity_build.txt">Sehenswürdigkeiten bauen</a>.
-</p>
-<p>
-· <em>Stadtgebäude bauen:</em> Öffnet den Dialog <a href="citybuilding_build.txt">Stadtgebäude bauen</a>.
-</p>
-<p>
-· <em>Pflanze Baum:</em> Öffnet den Dialog <a href="baum_build.txt">Pflanze Baum</a>.
-</p>
-<p>
-· <em>Wald aufforsten:</em> Markiere eine Fläche, auf die kreisförmig ein Wald aufgeforstet wird.
-</p>
-<p>
-· <em>Jahr überspringen:</em>Die Simutrans-Zeit wird um ein Jahr nach vorne gestellt. Neue Fahrzeuge werden verfügbar, wenn ihr Einführungsjahr erreicht wird.
-</p>
-<p>
-· <em>Spielerwechsel sperren:</em> Klicke mit dem Werkzeug auf eine beliebigen Kartenposition. Dadurch ist der Wechsel zur öffentlichen Hand oder zu den Computerspielern nicht mehr möglich.
+<title>Karteneditor Hilfe</title>
+
+<h1><strong>Karteneditor</strong></h1>
+<p>
+Mit den Werkzeugen des Karteneditors kannst Du in den natürlichen Wachstumsprozess von Städten und Industrien eingegreifen. Das Menü lässt sich über einen Button im Menü <a href="special.txt">Spezialwerkzeuge</a> öffnen.
+</p>
+<p>
+Eine zu leicht spielbar organisierte Welt wird Dir bereits mit wenig Spielerfahrung jeden Anreiz und jeden Spielspaß rauben. Setze die Werkzeuge gar nicht oder überlegt ein. Realisiere bauliche Situationen, wie sie bei der Autogenerierung praktisch nicht erreicht werden können. Ein dichtes und schwer handhabbares Industrierevier auf einer Insel, der Fremdenverkehrsort mit seiner Attraktion in der schwer zugänglichen Gebirgslage, der Erlebnispark in der Nähe einer kleinen Stadt, die Erdölförderung nur an ausgewählten Küstenstreifen oder die Landwirtschaft als Schwerpunkt in einer ländlichen Umgebung stellen nur einige Beispiele aus der reichen Möglichkeitenpalette dar.
+</p>
+<p>
+· <em>Stadtwachstum:</em> Setze eines der beiden Werkzeuge in dem Gebiet der Stadt ein, deren Einwohnerzahl Du ändern möchtest. Nutzt Du das Werkzeug im Überschneidungsgebiet von Städten, wirkt sich die Aktion nur auf eine Stadt aus.<br/>
+- <em>Einwohnerzahl erhöhen:</em> Das Wachstumswerkzeug stellt einen nach oben weisen Pfeil dar. Bei jeder Werkzeugnutzung wird die Stadt um 100 Einwohner wachsen. Es werden sofort Gebäude erneuert oder frisch gebaut, da mit der Aktion die Arbeits- und Obdachlosenzahlen steigen.<br>
+- <em>Einwohnerzahl verringern:</em> Das Wachstumswerkzeug stellt einen nach unten weisen Pfeil dar. Die Einwohnerzahl der Stadt wird bei jeder Werkzeugnutzung um 100 schrumpfen. Alle Gebäude bleiben erhalten. Die Werte für Arbeitslose und Obdachlose geraten in negative Bereiche. Die Stadt wird erst wieder bauliche Entwicklung zeigen, wenn durch Wachstum Bedarf an Baumaßnahmen entstanden ist.
+</p>
+<p>
+· <em>Gründe neue Stadt:</em> Hast Du zu wenige Städte auf Deiner Karte, kannst Du mit diesem Werkzeug neue Städte gründen. Die Stadt entsteht dort, wo Dumit dem Werkzeug hinklickst. Aber <strong>Vorsicht</strong>, jede Stadtgründung kostet Dich eine Menge Geld.
+</p>
+<p>
+· <em>Stadtstraße bauen:</em> Das Bauwerkzeug stellt eine Straße dar. Straßen, die Du mit dem Werkzeug baust, können von allen Spielern kostenlos genutzt werden.
+</p>
+<p>
+· <em>Industriedichte erhöhen:</em> Es wird eine zufällige Industriekette gebaut.
+</p>
+<p>
+· <em>Industrieanlagen bauen:</em> Öffnet den Dialog <a href="factory_build.txt">Industrieanlagen bauen</a>.
+</p>
+<p>
+· <em>Industrieanlagen verbinden:</em> Mit diesem Werkzeug können Industrien verbunden werden. Dies funktioniert nur dann, wenn eine Warenverbindung möglich ist.
+</p>
+<p>
+· <em>Sehenswürdigkeiten bauen:</em> Öffnet den Dialog <a href="curiosity_build.txt">Sehenswürdigkeiten bauen</a>.
+</p>
+<p>
+· <em>Stadtgebäude bauen:</em> Öffnet den Dialog <a href="citybuilding_build.txt">Stadtgebäude bauen</a>.
+</p>
+<p>
+· <em>Pflanze Baum:</em> Öffnet den Dialog <a href="baum_build.txt">Pflanze Baum</a>.
+</p>
+<p>
+· <em>Wald aufforsten:</em> Markiere eine Fläche, auf die kreisförmig ein Wald aufgeforstet wird.
+</p>
+<p>
+· <em>Jahr überspringen:</em>Die Simutrans-Zeit wird um ein Jahr nach vorne gestellt. Neue Fahrzeuge werden verfügbar, wenn ihr Einführungsjahr erreicht wird.
+</p>
+<p>
+· <em>Spielerwechsel sperren:</em> Klicke mit dem Werkzeug auf eine beliebigen Kartenposition. Dadurch ist der Wechsel zur öffentlichen Hand oder zu den Computerspielern nicht mehr möglich.
 </p>
diff --git a/simutrans/text/de/enlarge_map.txt b/simutrans/text/de/enlarge_map.txt
index 66b589f..8b111ff 100644
--- a/simutrans/text/de/enlarge_map.txt
+++ b/simutrans/text/de/enlarge_map.txt
@@ -1,6 +1,6 @@
-<title>Hilfe zum Dialog Kartenfläche vergrößern</title>
-
-<h1><strong>Kartefläche vergrößern</strong></h1>
-
-<p>In diesem Dialog kann die bestehende Spielkarte nach Rechts und Unten vergrößert werden.
+<title>Hilfe zum Dialog Kartenfläche vergrößern</title>
+
+<h1><strong>Kartefläche vergrößern</strong></h1>
+
+<p>In diesem Dialog kann die bestehende Spielkarte nach Rechts und Unten vergrößert werden.
 </p>
diff --git a/simutrans/text/de/factory_build.txt b/simutrans/text/de/factory_build.txt
index 3da5c3f..8857035 100644
--- a/simutrans/text/de/factory_build.txt
+++ b/simutrans/text/de/factory_build.txt
@@ -1,36 +1,36 @@
-<title>Industrieanlagen bauen</title>
-
-<h1><strong>Industrieanlagen bauen</strong></h1>
-
-<p>
-Der Dialog ist in vier Bereiche aufgeteilt.
-<br>
-· oben links befindet sich die Auswahlliste mit den Industrien<br>
-· untern links wird das Bild der ausgewählten Industrie angezeigt<br>
-· oben rechts befinden sich einige Optionen<br>
-· unten rechts werden die Informationen der ausgewählten Industrie angezeigt<br>
-</p>
-<p>
-<h1>Auswahlliste</h1>
-<br>
-In der Auswahlliste werden alle zur Verfügung stehenden Industrien angezeigt.
-Oben befinden sich zwei Reiter, die die Anzeige umschalten.<br>
-· <em>Übersetzung:</em> Zeigt die Namen so an, wie diese im Spiel verwendet werden. Dies ist abhängig von der eingestellten Sprache. Wenn keine Übersetzung für die eingestellte Sprache vorhanden ist, wird der Objektname angezeigt.<br>
-· <em>Objekt:</em> Zeigt die internen Objektnamen an.<br>
-<br>
-Die Schriftfarben haben folgende Bedeutung:<br>
-· <em>grüne Schrift</em> kennzeichnet Industrien, die Waren nur erzeugen<br>
-· <em>schwarze Schrift</em> kennzeichnet Industrien, die Waren benötigen und daraus neue Waren produzieren<br>
-· <em>blaue Schrift</em> kennzeichnet Industrien, die Waren nur benötigen<br>
-</p>
-<h1>Optionen</h1>
-<br>
-· <em>alle Klimazonen:</em> Diese Option deaktiviert die Klimazonenzuordnung beim Bau der Industrie.<br>
-· <em>Mit Epoche ab Jahr:</em> Es werden nur die Industrien in der Auswahlliste angezeigt, die im aktuellem Spieljahr zur Verfügung stehen.<br>
-· <em>Auch veraltete zeigen:</em> Es werden auch die Industrien in der Auswahlliste angezeigt, die in früheren Spieljahren mal zur Verfügung standen.<br>
-· <em>Nur Stadtgewerbe:</em> Es werden nur die Industrien in der Auswahlliste angezeigt, deren Standort sich in Städten befindet.<br>
-· <em>Nur Fabriken außerhalb der Stadt:</em> Es werden nur die Industrien in der Auswahlliste angezeigt, deren Standort sich außerhalb von Städten befindet.<br>
-<br>
-· <em>Rotation:</em> Sofern die ausgewählte Industrie mehrere Ansichten hat, kann hier eine bestimmte Ansicht ausgewählt werden. Die Grafik unten links wird entsprechen gewechselt. Bei der Auswahl von <em>Zufällig</em>, wird beim Bau der Industrie irgendeine Ansicht gewählt.<br>
-· <em>Produktion:</em> Hier kann die vordefinierte Produktionsrate der ausgewählten Industrie geändert werden.
+<title>Industrieanlagen bauen</title>
+
+<h1><strong>Industrieanlagen bauen</strong></h1>
+
+<p>
+Der Dialog ist in vier Bereiche aufgeteilt.
+<br>
+· oben links befindet sich die Auswahlliste mit den Industrien<br>
+· untern links wird das Bild der ausgewählten Industrie angezeigt<br>
+· oben rechts befinden sich einige Optionen<br>
+· unten rechts werden die Informationen der ausgewählten Industrie angezeigt<br>
+</p>
+<p>
+<h1>Auswahlliste</h1>
+<br>
+In der Auswahlliste werden alle zur Verfügung stehenden Industrien angezeigt.
+Oben befinden sich zwei Reiter, die die Anzeige umschalten.<br>
+· <em>Übersetzung:</em> Zeigt die Namen so an, wie diese im Spiel verwendet werden. Dies ist abhängig von der eingestellten Sprache. Wenn keine Übersetzung für die eingestellte Sprache vorhanden ist, wird der Objektname angezeigt.<br>
+· <em>Objekt:</em> Zeigt die internen Objektnamen an.<br>
+<br>
+Die Schriftfarben haben folgende Bedeutung:<br>
+· <em>grüne Schrift</em> kennzeichnet Industrien, die Waren nur erzeugen<br>
+· <em>schwarze Schrift</em> kennzeichnet Industrien, die Waren benötigen und daraus neue Waren produzieren<br>
+· <em>blaue Schrift</em> kennzeichnet Industrien, die Waren nur benötigen<br>
+</p>
+<h1>Optionen</h1>
+<br>
+· <em>alle Klimazonen:</em> Diese Option deaktiviert die Klimazonenzuordnung beim Bau der Industrie.<br>
+· <em>Mit Epoche ab Jahr:</em> Es werden nur die Industrien in der Auswahlliste angezeigt, die im aktuellem Spieljahr zur Verfügung stehen.<br>
+· <em>Auch veraltete zeigen:</em> Es werden auch die Industrien in der Auswahlliste angezeigt, die in früheren Spieljahren mal zur Verfügung standen.<br>
+· <em>Nur Stadtgewerbe:</em> Es werden nur die Industrien in der Auswahlliste angezeigt, deren Standort sich in Städten befindet.<br>
+· <em>Nur Fabriken außerhalb der Stadt:</em> Es werden nur die Industrien in der Auswahlliste angezeigt, deren Standort sich außerhalb von Städten befindet.<br>
+<br>
+· <em>Rotation:</em> Sofern die ausgewählte Industrie mehrere Ansichten hat, kann hier eine bestimmte Ansicht ausgewählt werden. Die Grafik unten links wird entsprechen gewechselt. Bei der Auswahl von <em>Zufällig</em>, wird beim Bau der Industrie irgendeine Ansicht gewählt.<br>
+· <em>Produktion:</em> Hier kann die vordefinierte Produktionsrate der ausgewählten Industrie geändert werden.
 </p>
diff --git a/simutrans/text/de/factorylist_filter.txt b/simutrans/text/de/factorylist_filter.txt
index 576060d..838b0d1 100644
--- a/simutrans/text/de/factorylist_filter.txt
+++ b/simutrans/text/de/factorylist_filter.txt
@@ -1,32 +1,32 @@
-<title>Fabrikliste Hilfe</title>
-
-<h1><strong>Fabrikliste</strong></h1>
-
-<p>
-Die Fabrikliste wird über die <a href="list.txt">Listenverwaltung</a> geöffnet.<br/>
-In der Fabrikliste sind alle Fabriken des Welt gelistet. Die Sortierung ist nach allen aufgeführten Kriterien möglich; klicke zum Wechseln auf den Button. Ein Klick auf einen Eintrag öffnet das Infofenster zur Fabrik und zentriert die Karte diese.
-</p>
-<p>
-· <em>Status:</em> Zeigt den Status der Fabrik an.<br/>
-Die Farben bedeuten:<br/>
-- <em>Weiss:</em> Industrie produziert nicht<br/>
-- <em>Gelb:</em> Industrie ist nicht angeschlossen<br/>
-- <em>Grün:</em> Industrie hat Optimum<br/>
-- <em>Orange:</em> Industrie funktioniert, aber Verbesserungen sind möglich<br/>
-- <em>Rot:</em> Industrie muß überprüft werden
-</p>
-<p>
-· <em>Strom:</em> Zeigt an, ob die Fabrik ans Stromnetz angeschlossen ist. Dies wird durch einen roten Blitz dargestellt.
-</p>
-<p>
-· <em>Fabrikname:</em> Die Bezeichnung für die Fabrik.
-</p>
-<p>
-· <em>Eingang:</em> Die Summe aller im Rohstofflager der Fabrik wartenden Güter.
-</p>
-<p>
-· <em>Ausgang:</em> Die Summe aller im Fertigwarenlager transportbereiter Güter.
-</p>
-<p>
-· <em>Produktion:</em> Die Produktionsrate der Fabrik.
+<title>Fabrikliste Hilfe</title>
+
+<h1><strong>Fabrikliste</strong></h1>
+
+<p>
+Die Fabrikliste wird über die <a href="list.txt">Listenverwaltung</a> geöffnet.<br/>
+In der Fabrikliste sind alle Fabriken des Welt gelistet. Die Sortierung ist nach allen aufgeführten Kriterien möglich; klicke zum Wechseln auf den Button. Ein Klick auf einen Eintrag öffnet das Infofenster zur Fabrik und zentriert die Karte diese.
+</p>
+<p>
+· <em>Status:</em> Zeigt den Status der Fabrik an.<br/>
+Die Farben bedeuten:<br/>
+- <em>Weiss:</em> Industrie produziert nicht<br/>
+- <em>Gelb:</em> Industrie ist nicht angeschlossen<br/>
+- <em>Grün:</em> Industrie hat Optimum<br/>
+- <em>Orange:</em> Industrie funktioniert, aber Verbesserungen sind möglich<br/>
+- <em>Rot:</em> Industrie muß überprüft werden
+</p>
+<p>
+· <em>Strom:</em> Zeigt an, ob die Fabrik ans Stromnetz angeschlossen ist. Dies wird durch einen roten Blitz dargestellt.
+</p>
+<p>
+· <em>Fabrikname:</em> Die Bezeichnung für die Fabrik.
+</p>
+<p>
+· <em>Eingang:</em> Die Summe aller im Rohstofflager der Fabrik wartenden Güter.
+</p>
+<p>
+· <em>Ausgang:</em> Die Summe aller im Fertigwarenlager transportbereiter Güter.
+</p>
+<p>
+· <em>Produktion:</em> Die Produktionsrate der Fabrik.
 </p>
diff --git a/simutrans/text/de/finances.txt b/simutrans/text/de/finances.txt
index 48ee403..2ba5dbc 100644
--- a/simutrans/text/de/finances.txt
+++ b/simutrans/text/de/finances.txt
@@ -1,49 +1,49 @@
-<title>Finanzen Hilfe</title>
-
-<h1><strong>Finanzen</strong></h1>
-
-<p>
-Die Finanzen können im Finanzfenster betrachtet werden. Dieses kann durch Drücken von <em>f</em> oder über die <a href="mainmenu2.txt">Hauptmenüleiste</a> geöffnet werden.<br>
-Dort sind die Informationen über die Finanzen zusammengefaßt.
-</p>
-<p>
-Im unteren Teil des Fensters ist ein Grafenfenster untergebracht. Wenn Du auf eine der farbigen Schaltflächen klickst, wird dort der Verlauf der Position, in der entsprechenden Farbe, angezeigt. Du kannst die Ansicht zwischen Jahren und Monaten umschalten. Die neuesten Werte stehen links.
-</p>
-<p>
-Mit der Schaltfläche <em>Firmensitzbau</em> kann ein Firmensitzgebäude gebaut werden.<br>
-Nach dem Bau eines Firmensitzes, heist die Schaltfläche <em>Firmensitzumbau</em>. Unterhalb der Schaltfläche wird ein Kartenausschnitt mit dem Standort des Firmensitzes angezeigt.<br>
-Der Firmensitzbau/-umbau steht nur zur Verfügung, wenn das verwendete Pakset Firmensitzgebäude enthält.
-</p>
-<p>
-Die Positionen und Schaltflächen der linken Hälfte sind wie folgt:
-</p>
-<p>
-<em>Umsatz</em> - Die gesamten Einnahmen aus dem Transport von Passagieren, Gütern und der Stromübertragung.<br>
-<em>Betriebskosten</em> - Die Kosten für den Betrieb aller Fahrzeue. Die Betriebskosten pro gefahrenem Kilometer je Fahrzeugtyp können im <a href="depot.txt">Depot</a> eingesehen werden, für Fahrzeugverbände im <a href="convoiinfo.txt">Fahrzeugfenster</a>.<br>
-<em>Instandhaltung</em> - Die angefallenen Kosten für die Instandhaltung der Infrastruktur. Die Kosten der <em>Instandhaltung pro Monat</em> werden rechts angezeigt und jeweils am letzten des Monats fällig, also dann immer soviel auf dem Konto vorrätig haben!<br>
-<em>Betriebsgewinn</em> - Der operative Gewinn (exkl. Abschreibungen auf Fahrzeuge), also was mit der Transporttätigkeit an sich verdient wird. Summe der obigen 3 Positionen.
-</p>
-<p>
-<em>Neue Fahrzeuge</em> - Alle Ausgaben (Einnahmen) für den Kauf (Verkauf) von Fahrzeugen.<br>
-<em>Ausgaben Bau</em> - Hier steht der Betrag, der für den Bau von Schienen, Strassen, Signalen usw. ausgegeben wurde. Auch Abrisskosten zählen zu den Baukosten.<br>
-<em>Jahresgewinn</em> - Die Summe aller Einnahmen (Geldzuflüsse) und Ausgaben (Geldabflüsse), der sogenannte Cash-Flow.
-<br><br>
-<em>Freileitungen</em> - Die Menge der transportierten Stromeinheiten.<br>
-<em>Transportmenge</em> - Die Summe aller Einheiten, die transportiert worden sind.
-</p>
-<p>
-Die Positionen und Schaltflächen der rechten Hälfte sind wie folgt:
-</p>
-<p>
-<em>Kontostand</em> - Der aktuelle Kontostand. Dieses Geld steht zur Verfügung, um zu bauen oder Fahrzeuge und Züge zu kaufen. Der Kontostand steht auch in der Statusleiste unten in der Mitte. Ist er an drei aufeinanderfolgenden Monatsenden im Minus, bist Du <strong>bankrott</strong> und hast das Spiel verloren.<br>
-<em>Fahrzeugwert</em> - Der Wert Deiner Fahrzeugflotte per Ende des letzten Monats.<br>
-<em>Gesamtvermögen</em> -Die Summe obiger beider Werte per Ende des letzten Monats.
-</p>
-<p>
-<em>Marge</em> - Die erzielte Nettomarge (Betriebsgewinn/Kosten). Je höher diese ist, desto mehr wird aus den angefallenen Kosten herausgeholt. Die Werte werden laufend aktualisiert, sind aber unter dem Monat wegen fehlender Unterhaltskosten zu hoch. Aussagekräftiger sind Zahlen des Vormonats oder Vorjahres. Achtung: Im Netzwerk kann die Aufgabe von Linien mit geringer Marge insgesamt einen ungünstigen Effekt auf die Marge selbst wie auch auf andere Grössen haben, z.B. auf das Stadtwachstum.
-</p>
-<br>
-<h1><strong>Szenario-Spiele</strong></h1>
-<p>
-Bei Szenario-Spielen wird zusätzlich der Szenario-Auftrag und der erreichte Szenario-Status (in %) angezeigt.
+<title>Finanzen Hilfe</title>
+
+<h1><strong>Finanzen</strong></h1>
+
+<p>
+Die Finanzen können im Finanzfenster betrachtet werden. Dieses kann durch Drücken von <em>f</em> oder über die <a href="mainmenu2.txt">Hauptmenüleiste</a> geöffnet werden.<br>
+Dort sind die Informationen über die Finanzen zusammengefaßt.
+</p>
+<p>
+Im unteren Teil des Fensters ist ein Grafenfenster untergebracht. Wenn Du auf eine der farbigen Schaltflächen klickst, wird dort der Verlauf der Position, in der entsprechenden Farbe, angezeigt. Du kannst die Ansicht zwischen Jahren und Monaten umschalten. Die neuesten Werte stehen links.
+</p>
+<p>
+Mit der Schaltfläche <em>Firmensitzbau</em> kann ein Firmensitzgebäude gebaut werden.<br>
+Nach dem Bau eines Firmensitzes, heist die Schaltfläche <em>Firmensitzumbau</em>. Unterhalb der Schaltfläche wird ein Kartenausschnitt mit dem Standort des Firmensitzes angezeigt.<br>
+Der Firmensitzbau/-umbau steht nur zur Verfügung, wenn das verwendete Pakset Firmensitzgebäude enthält.
+</p>
+<p>
+Die Positionen und Schaltflächen der linken Hälfte sind wie folgt:
+</p>
+<p>
+<em>Umsatz</em> - Die gesamten Einnahmen aus dem Transport von Passagieren, Gütern und der Stromübertragung.<br>
+<em>Betriebskosten</em> - Die Kosten für den Betrieb aller Fahrzeue. Die Betriebskosten pro gefahrenem Kilometer je Fahrzeugtyp können im <a href="depot.txt">Depot</a> eingesehen werden, für Fahrzeugverbände im <a href="convoiinfo.txt">Fahrzeugfenster</a>.<br>
+<em>Instandhaltung</em> - Die angefallenen Kosten für die Instandhaltung der Infrastruktur. Die Kosten der <em>Instandhaltung pro Monat</em> werden rechts angezeigt und jeweils am letzten des Monats fällig, also dann immer soviel auf dem Konto vorrätig haben!<br>
+<em>Betriebsgewinn</em> - Der operative Gewinn (exkl. Abschreibungen auf Fahrzeuge), also was mit der Transporttätigkeit an sich verdient wird. Summe der obigen 3 Positionen.
+</p>
+<p>
+<em>Neue Fahrzeuge</em> - Alle Ausgaben (Einnahmen) für den Kauf (Verkauf) von Fahrzeugen.<br>
+<em>Ausgaben Bau</em> - Hier steht der Betrag, der für den Bau von Schienen, Strassen, Signalen usw. ausgegeben wurde. Auch Abrisskosten zählen zu den Baukosten.<br>
+<em>Jahresgewinn</em> - Die Summe aller Einnahmen (Geldzuflüsse) und Ausgaben (Geldabflüsse), der sogenannte Cash-Flow.
+<br><br>
+<em>Freileitungen</em> - Die Menge der transportierten Stromeinheiten.<br>
+<em>Transportmenge</em> - Die Summe aller Einheiten, die transportiert worden sind.
+</p>
+<p>
+Die Positionen und Schaltflächen der rechten Hälfte sind wie folgt:
+</p>
+<p>
+<em>Kontostand</em> - Der aktuelle Kontostand. Dieses Geld steht zur Verfügung, um zu bauen oder Fahrzeuge und Züge zu kaufen. Der Kontostand steht auch in der Statusleiste unten in der Mitte. Ist er an drei aufeinanderfolgenden Monatsenden im Minus, bist Du <strong>bankrott</strong> und hast das Spiel verloren.<br>
+<em>Fahrzeugwert</em> - Der Wert Deiner Fahrzeugflotte per Ende des letzten Monats.<br>
+<em>Gesamtvermögen</em> -Die Summe obiger beider Werte per Ende des letzten Monats.
+</p>
+<p>
+<em>Marge</em> - Die erzielte Nettomarge (Betriebsgewinn/Kosten). Je höher diese ist, desto mehr wird aus den angefallenen Kosten herausgeholt. Die Werte werden laufend aktualisiert, sind aber unter dem Monat wegen fehlender Unterhaltskosten zu hoch. Aussagekräftiger sind Zahlen des Vormonats oder Vorjahres. Achtung: Im Netzwerk kann die Aufgabe von Linien mit geringer Marge insgesamt einen ungünstigen Effekt auf die Marge selbst wie auch auf andere Grössen haben, z.B. auf das Stadtwachstum.
+</p>
+<br>
+<h1><strong>Szenario-Spiele</strong></h1>
+<p>
+Bei Szenario-Spielen wird zusätzlich der Szenario-Auftrag und der erreichte Szenario-Status (in %) angezeigt.
 </p>
diff --git a/simutrans/text/de/game_control.txt b/simutrans/text/de/game_control.txt
index a0f1a5c..c508d8d 100644
--- a/simutrans/text/de/game_control.txt
+++ b/simutrans/text/de/game_control.txt
@@ -1,50 +1,50 @@
-<title>Spielsteuerung Hilfe</title>
-
-<h1><strong>Spielsteuerung</strong></h1>
-
-<p>
-<em>Allgemeines</em>
-<br/>Simutrans lässt sich über die Maus und teilweise auch über die <em>Tastatur</em> steuern; die <a href="keys.txt">Tastaturbelegung</a> ist über den gleichnamigen Menüpunkt im Hilfemenü (Taste <em>F1</em>) verfügbar und erscheint auch jedesmal, wenn eine Taste ohne Funktion gedrückt wird (z. B. 5).<br/>
-Die Tasten sind in der Hilfe weiß hervorgehoben. <em>Achtung</em> es wird zwischen Groß- und Kleinschreibung unterschieden.
-</p>
-<p>
-<em>Auswahlen und Platzierungen</em>
-<br/>Die Nutzung der Schaltflächen und Objektauswahlen sowie Objektplazierungen im Spiel erfolgen über Klicken mit der linken Maustaste. In der Hilfe werden die Begriffe "auswählen" und "platzieren" bzw. Begriffe mit vergleichbarem Sinn benutzt.
-</p>
-<p>
-<em>Bewegen der Spielkarte</em>
-<br/><em>·</em> Halte die rechte Maustaste gedrückt und verschiebe die Karte in beliebiger Richtung zu Deiner Wunschposition. In der Grundeinstellung verschiebt sich die Karte entgegen der Mausbewegung. Du kannst das Verhalten über die <a href="options.txt">Einstellungen</a> ändern.
-<br/><em>·</em> Die Karte lässt sich auch über die Tastatur (Ziffern auf dem Nummernblock) bewegen.
-<br/><em>·</em> Du hast auch die Möglichkeit, den gewünschten Kartenausschnitt durch Anwahl des entsprechenden Punktes auf der <a href="map.txt">Reliefkarte</a> direkt anzuspringen.
-</p>
-<p>
-<em>Ändern der Kartenansicht (zoomen)</em>
-<br/>Die Ansicht der Karte lässt sich in 4 Größenstufen darstellen. Verfügt Deine Maus über ein Mausrad, kannst Du die Größenstufe durch drehen des Mausrades einstellen. Mit den Tasten <em>Page Up</em> und <em>Page Down</em> erreichst Du den gleichen Effekt.
-</p>
-<p>
-<em>Spielgeschwindigkeit</em>
-<br/>Die in der Statusleiste angezeigte Spielgeschwindigkeit (T=1.00) entspricht der Standardgeschwindigkeit. Alle Aktivitäten im Spiel laufen wirklichkeitskonform.
-</p>
-<p>
-Mitunter mag Dir eine höhere Geschwindigkeit sinnvoll erscheinen, vor allem, wenn der Kassenbestand knapp wird und Du auf Belieferung und das Kassieren der Frachten wartest. Ändere die Geschwindigkeit bei Bedarf mit den Tasten <em>.</em> (schneller) und <em>,</em> (langsamer).
-Einiges an Tempo wird das Spiel problemlos umsetzen. Bei Geschwindigkeiten, die die Leistung Deines Computers überschreiten, sind Unregelmäßigkeiten im Spielablauf, wie etwa in den Bahnhöfen stehenbleibende Züge, zu geringe Passagiererzeugung oder fehlerhafte Beladung bis hin zum Einfrieren des Spiels, nicht ausgeschlossen. Bei den<a href="display.txt">Anzeigeeinstellungen</a> befinden sich diesbezügliche Kontrollmöglichkeiten. Ein automatischer schneller Vorlauf lässt sich über die Taste <em>W</em> oder das Vorlaufsymbol in der <a href="mainmenu2.txt">Hauptenüleiste</a> ein- und ausschalten.
-</p>
-<p>
-<em>Einstellung der Helligkeit</em>
-<br/>Zur Regulierung der Helligkeit siehe <a href="display.txt">Anzeigeeinstellungen</a>.
-</p>
-<p>
-<em>Editieren von Namen</em>
-<br/>
-Die Namensfelder in einigen Fenstern, wie Haltestellen-, Fahrzeug- und Liniennamen, sind editierbar. Sie sind von der Fensteroberfläche zurückgesetzt und zeigen glatte Beschriftungsflächen. Zum editieren, klicke mit der Maus in das Namensfeld. Bearbeite nun den Text. Editierungen werden unmittelbar wirksam. Drücke zum Verlassen des Feldes die Taste <em>RETURN</em>.
-</p>
-<p>
-<em>Pfeilschalter</em>
-<br/>
-In vielen Fenstern findest Du Wertangaben zwischen zwei Pfeilschaltern. Mit einem Klick auf den linken Schalter verringerst Du den Wert, mit einem Klick auf den rechten erhöhst Du den Wert. Halte die linke Maustaste gedrückt, wenn Du größere Wertebereiche durchlaufen möchtest.
-</p>
-<p>
-<em>Auswahlmenüs</em>
-<br/>
-Linienauswahlmenüs in den Depotfenstern und in den Fahrplanfenstern sind wie die Namensfelder zurückgesetzt und zusätzlich mit Pfeilschaltern versehen. Wenn Du auf eine Menüfläche klickst, wird das Auswahlmenü geöffnet. Wählst Du einen Eintrag aus, springt er in die Anzeigezeile und stellt nun die neue Auswahl dar. Die Zeile kann auch editiert werden, aus eigener Erfahrung rät der Autor, Editierungen bevorzugt in speziell dafür vorgesehenen Fenstern vorzunehmen.
+<title>Spielsteuerung Hilfe</title>
+
+<h1><strong>Spielsteuerung</strong></h1>
+
+<p>
+<em>Allgemeines</em>
+<br/>Simutrans lässt sich über die Maus und teilweise auch über die <em>Tastatur</em> steuern; die <a href="keys.txt">Tastaturbelegung</a> ist über den gleichnamigen Menüpunkt im Hilfemenü (Taste <em>F1</em>) verfügbar und erscheint auch jedesmal, wenn eine Taste ohne Funktion gedrückt wird (z. B. 5).<br/>
+Die Tasten sind in der Hilfe weiß hervorgehoben. <em>Achtung</em> es wird zwischen Groß- und Kleinschreibung unterschieden.
+</p>
+<p>
+<em>Auswahlen und Platzierungen</em>
+<br/>Die Nutzung der Schaltflächen und Objektauswahlen sowie Objektplazierungen im Spiel erfolgen über Klicken mit der linken Maustaste. In der Hilfe werden die Begriffe "auswählen" und "platzieren" bzw. Begriffe mit vergleichbarem Sinn benutzt.
+</p>
+<p>
+<em>Bewegen der Spielkarte</em>
+<br/><em>·</em> Halte die rechte Maustaste gedrückt und verschiebe die Karte in beliebiger Richtung zu Deiner Wunschposition. In der Grundeinstellung verschiebt sich die Karte entgegen der Mausbewegung. Du kannst das Verhalten über die <a href="options.txt">Einstellungen</a> ändern.
+<br/><em>·</em> Die Karte lässt sich auch über die Tastatur (Ziffern auf dem Nummernblock) bewegen.
+<br/><em>·</em> Du hast auch die Möglichkeit, den gewünschten Kartenausschnitt durch Anwahl des entsprechenden Punktes auf der <a href="map.txt">Reliefkarte</a> direkt anzuspringen.
+</p>
+<p>
+<em>Ändern der Kartenansicht (zoomen)</em>
+<br/>Die Ansicht der Karte lässt sich in 4 Größenstufen darstellen. Verfügt Deine Maus über ein Mausrad, kannst Du die Größenstufe durch drehen des Mausrades einstellen. Mit den Tasten <em>Page Up</em> und <em>Page Down</em> erreichst Du den gleichen Effekt.
+</p>
+<p>
+<em>Spielgeschwindigkeit</em>
+<br/>Die in der Statusleiste angezeigte Spielgeschwindigkeit (T=1.00) entspricht der Standardgeschwindigkeit. Alle Aktivitäten im Spiel laufen wirklichkeitskonform.
+</p>
+<p>
+Mitunter mag Dir eine höhere Geschwindigkeit sinnvoll erscheinen, vor allem, wenn der Kassenbestand knapp wird und Du auf Belieferung und das Kassieren der Frachten wartest. Ändere die Geschwindigkeit bei Bedarf mit den Tasten <em>.</em> (schneller) und <em>,</em> (langsamer).
+Einiges an Tempo wird das Spiel problemlos umsetzen. Bei Geschwindigkeiten, die die Leistung Deines Computers überschreiten, sind Unregelmäßigkeiten im Spielablauf, wie etwa in den Bahnhöfen stehenbleibende Züge, zu geringe Passagiererzeugung oder fehlerhafte Beladung bis hin zum Einfrieren des Spiels, nicht ausgeschlossen. Bei den<a href="display.txt">Anzeigeeinstellungen</a> befinden sich diesbezügliche Kontrollmöglichkeiten. Ein automatischer schneller Vorlauf lässt sich über die Taste <em>W</em> oder das Vorlaufsymbol in der <a href="mainmenu2.txt">Hauptenüleiste</a> ein- und ausschalten.
+</p>
+<p>
+<em>Einstellung der Helligkeit</em>
+<br/>Zur Regulierung der Helligkeit siehe <a href="display.txt">Anzeigeeinstellungen</a>.
+</p>
+<p>
+<em>Editieren von Namen</em>
+<br/>
+Die Namensfelder in einigen Fenstern, wie Haltestellen-, Fahrzeug- und Liniennamen, sind editierbar. Sie sind von der Fensteroberfläche zurückgesetzt und zeigen glatte Beschriftungsflächen. Zum editieren, klicke mit der Maus in das Namensfeld. Bearbeite nun den Text. Editierungen werden unmittelbar wirksam. Drücke zum Verlassen des Feldes die Taste <em>RETURN</em>.
+</p>
+<p>
+<em>Pfeilschalter</em>
+<br/>
+In vielen Fenstern findest Du Wertangaben zwischen zwei Pfeilschaltern. Mit einem Klick auf den linken Schalter verringerst Du den Wert, mit einem Klick auf den rechten erhöhst Du den Wert. Halte die linke Maustaste gedrückt, wenn Du größere Wertebereiche durchlaufen möchtest.
+</p>
+<p>
+<em>Auswahlmenüs</em>
+<br/>
+Linienauswahlmenüs in den Depotfenstern und in den Fahrplanfenstern sind wie die Namensfelder zurückgesetzt und zusätzlich mit Pfeilschaltern versehen. Wenn Du auf eine Menüfläche klickst, wird das Auswahlmenü geöffnet. Wählst Du einen Eintrag aus, springt er in die Anzeigezeile und stellt nun die neue Auswahl dar. Die Zeile kann auch editiert werden, aus eigener Erfahrung rät der Autor, Editierungen bevorzugt in speziell dafür vorgesehenen Fenstern vorzunehmen.
 </p>
diff --git a/simutrans/text/de/general.txt b/simutrans/text/de/general.txt
index acc25f1..8ea010f 100644
--- a/simutrans/text/de/general.txt
+++ b/simutrans/text/de/general.txt
@@ -1,65 +1,65 @@
-<title>Simutrans Hilfe</title>
-
-<h1><strong>Simutrans Hilfe</strong></h1>
-
-<p>
-<strong>Hilfe zum Spiel</strong>
-<br/>·<a href="simutrans.txt">Simutrans</a>
-<br/>·<a href="use.txt">Nutzung der Hilfe</a>
-<br/>·<a href="game_control.txt">Spielsteuerung</a>
-<br/>·<a href="keys.txt">Tastaturbelegung</a>
-<br/>·<a href="mainmenu.txt">Hauptmenü</a>
-<br/>·<a href="new_world.txt">Neue Welt</a>
-</p>
-<p>
-<strong>Hauptmenü</strong> (siehe auch <a href="mainmenu.txt">Hauptmenü</a>)
-<br/>·<a href="map.txt">Reliefkarte</a>
-<br/>·<a href="options.txt">Optionen</a> (s.u.)
-<br/>· Abfragewerkzeug
-<br/>·<a href="slopetools.txt">Geländewerkzeuge</a>
-<br/>·<a href="railtools.txt">Eisenbahnbauwerkzeuge</a>
-<br/>·<a href="monorailtools.txt">Monorailbauwerkzeuge</a>
-<br/>·<a href="tramtools.txt">Trambauwerkzeuge</a>
-<br/>·<a href="roadtools.txt">Straßenbauwerkzeug</a>
-<br/>·<a href="shiptools.txt">Häfen und Werft</a>
-<br/>·<a href="airtools.txt">Flughafenbauwerkzeuge</a>
-<br/>·<a href="special.txt">Spezialbauwerkzeuge</a>
-<br/>· Löschwerkzeug
-<br/>
-<br/>·<a href="linelist.txt">Linienverwaltung</a>
-<br/>·<a href="list.txt">Listenverwaltung</a>
-<br/>· ·<a href="haltlist.txt">Haltestellenliste</a> mit <a href="haltlist_filter.txt">Filtereinstellungen</a>
-<br/>· · öffnet <a href="station.txt">Haltestellenfenster</a> und <a href="station_details.txt">Haltestellen Detailinformation</a>
-<br/>· ·<a href="convoi.txt">Fahrzeugliste</a> mit <a href="convoi_filter.txt">Filtereinstellungen zur Fahrzeugliste</a>
-<br/>· · öffnet <a href="convoiinfo.txt">Fahrzeugfenster</a> und <a href="convoidetail.txt">Fahrzeugdetailfenster</a>
-<br/>· ·<a href="citylist_filter.txt">Stadtliste</a>
-<br/>· · öffnet <a href="citywindow.txt">Stadtinformation</a>
-<br/>· ·<a href="goods_filter.txt">Warenliste</a>
-<br/>· · öffnet <a href="industry_info.txt">Fabrikfenster</a>
-<br/>· ·<a href="factorylist_filter.txt">Fabrikliste</a>
-<br/>· ·<a href="curiositylist_filter.txt">Touristenzielliste</a>
-<br/>·<a href="mailbox.txt">Mailbox und Mailbox Optionen</a>
-<br/>·<a href="finances.txt">Finanzen</a>
-<br/>
-<br/>· Bildschirm speichern
-<br/>· Pause
-<br/>· Simulation maximal beschleunigen <strong>(kann zu ruckeln führen)!</strong>
-</p>
-<p>
-<strong>Dialoge unter Optionen</strong>
-<br/>·<a href="options.txt">Einstellungen</a>
-<br/>·<a href="language.txt">Sprachauswahl</a>
-<br/>·<a href="color.txt">Farbauswahl</a>
-<br/>·<a href="display.txt">Anzeigeeinstellungen</a>
-<br/>·<a href="sound.txt">Sound- & Musikeinstellungen</a>
-<br/>·<a href="players.txt">Spieler Menü</a>
-<br/>·<a href="load.txt">Lade Menü</a>
-<br/>·<a href="save.txt">Speichern Menü</a>
-<br/>·<a href="new_world.txt">Neue Welt</a> und <a href="load_relief.txt">Lade Relief Menü</a>
-</p>
-<p>
-<strong>Weitere Dialoge</strong>
-<br/>·<a href="edittools.txt">Karteneditor</a>
-<br/>·<a href="depot.txt">Depotfenster</a>
-<br/>·<a href="schedule.txt">Fahr- und Linienplanfenster</a>
+<title>Simutrans Hilfe</title>
+
+<h1><strong>Simutrans Hilfe</strong></h1>
+
+<p>
+<strong>Hilfe zum Spiel</strong>
+<br/>·<a href="simutrans.txt">Simutrans</a>
+<br/>·<a href="use.txt">Nutzung der Hilfe</a>
+<br/>·<a href="game_control.txt">Spielsteuerung</a>
+<br/>·<a href="keys.txt">Tastaturbelegung</a>
+<br/>·<a href="mainmenu.txt">Hauptmenü</a>
+<br/>·<a href="new_world.txt">Neue Welt</a>
+</p>
+<p>
+<strong>Hauptmenü</strong> (siehe auch <a href="mainmenu.txt">Hauptmenü</a>)
+<br/>·<a href="map.txt">Reliefkarte</a>
+<br/>·<a href="options.txt">Optionen</a> (s.u.)
+<br/>· Abfragewerkzeug
+<br/>·<a href="slopetools.txt">Geländewerkzeuge</a>
+<br/>·<a href="railtools.txt">Eisenbahnbauwerkzeuge</a>
+<br/>·<a href="monorailtools.txt">Monorailbauwerkzeuge</a>
+<br/>·<a href="tramtools.txt">Trambauwerkzeuge</a>
+<br/>·<a href="roadtools.txt">Straßenbauwerkzeug</a>
+<br/>·<a href="shiptools.txt">Häfen und Werft</a>
+<br/>·<a href="airtools.txt">Flughafenbauwerkzeuge</a>
+<br/>·<a href="special.txt">Spezialbauwerkzeuge</a>
+<br/>· Löschwerkzeug
+<br/>
+<br/>·<a href="linelist.txt">Linienverwaltung</a>
+<br/>·<a href="list.txt">Listenverwaltung</a>
+<br/>· ·<a href="haltlist.txt">Haltestellenliste</a> mit <a href="haltlist_filter.txt">Filtereinstellungen</a>
+<br/>· · öffnet <a href="station.txt">Haltestellenfenster</a> und <a href="station_details.txt">Haltestellen Detailinformation</a>
+<br/>· ·<a href="convoi.txt">Fahrzeugliste</a> mit <a href="convoi_filter.txt">Filtereinstellungen zur Fahrzeugliste</a>
+<br/>· · öffnet <a href="convoiinfo.txt">Fahrzeugfenster</a> und <a href="convoidetail.txt">Fahrzeugdetailfenster</a>
+<br/>· ·<a href="citylist_filter.txt">Stadtliste</a>
+<br/>· · öffnet <a href="citywindow.txt">Stadtinformation</a>
+<br/>· ·<a href="goods_filter.txt">Warenliste</a>
+<br/>· · öffnet <a href="industry_info.txt">Fabrikfenster</a>
+<br/>· ·<a href="factorylist_filter.txt">Fabrikliste</a>
+<br/>· ·<a href="curiositylist_filter.txt">Touristenzielliste</a>
+<br/>·<a href="mailbox.txt">Mailbox und Mailbox Optionen</a>
+<br/>·<a href="finances.txt">Finanzen</a>
+<br/>
+<br/>· Bildschirm speichern
+<br/>· Pause
+<br/>· Simulation maximal beschleunigen <strong>(kann zu ruckeln führen)!</strong>
+</p>
+<p>
+<strong>Dialoge unter Optionen</strong>
+<br/>·<a href="options.txt">Einstellungen</a>
+<br/>·<a href="language.txt">Sprachauswahl</a>
+<br/>·<a href="color.txt">Farbauswahl</a>
+<br/>·<a href="display.txt">Anzeigeeinstellungen</a>
+<br/>·<a href="sound.txt">Sound- & Musikeinstellungen</a>
+<br/>·<a href="players.txt">Spieler Menü</a>
+<br/>·<a href="load.txt">Lade Menü</a>
+<br/>·<a href="save.txt">Speichern Menü</a>
+<br/>·<a href="new_world.txt">Neue Welt</a> und <a href="load_relief.txt">Lade Relief Menü</a>
+</p>
+<p>
+<strong>Weitere Dialoge</strong>
+<br/>·<a href="edittools.txt">Karteneditor</a>
+<br/>·<a href="depot.txt">Depotfenster</a>
+<br/>·<a href="schedule.txt">Fahr- und Linienplanfenster</a>
 </p>
diff --git a/simutrans/text/de/goods_filter.txt b/simutrans/text/de/goods_filter.txt
index 8140c6b..31af75b 100644
--- a/simutrans/text/de/goods_filter.txt
+++ b/simutrans/text/de/goods_filter.txt
@@ -1,23 +1,23 @@
-<title>Warenliste Hilfe</title>
-
-<h1><strong>Warenliste</strong></h1>
-
-<p>
-Die Warenliste wird mit <em>Shift</em>+<em>G</em> oder über die <a href="list.txt">Listenverwaltung</a> aufgerufen.<br/>
-In der Warenliste sind Pssagiere sowie alle Güter, die Dir im gespielten pak zum Transport anvertraut werden können, gelistet.
-</p>
-<p>
-· <em>Fracht:</em> Passagiere und alle Güterarten in Simutrans werden nach einer internen Sortierung gelistet. Vor jeder Frachtart befindet sich ein <em>Farbquadrat</em>. Die gleichen Farben findest Du auch an den Säulen über den Haltestellennamen wieder. Sie zeigen dort an, wieviel Einheiten je Güterart an den Haltestellen gelagert sind. Die Anzeige läßt sich über die Taste <em>!</em> ein- und ausblenden.
-</p>
-<p>
-· <em>Preis:</em> Der Transporterlös pro Einheit eines Gutes für ein zurückgelegtes Feld.
-</p>
-<p>
-· <em>Bonus:</em> Werden Güter, und vor allem Passagiere und Post auf einem Verkehrsträger schneller als oben angezeigt befördert, wird auf den Grundumsatz pro weitere 10 km/h der Bonus aufgerechnet; ist das Fahrzeug langsamer, kann der Umsatz auch sinken. Die Berechnungsformel ist komplex. Maßgebend für die Höhe des Bonus ist die zulässige Höchstgeschwindigkeit des Konvois. Die Höchstgeschwindigkeit der befahrenen Strecke und die tatsächliche Beförderungszeit finden keine Berücksichtigung.
-</p>
-<p>
-· <em>Kategorie:</em>  Jede Frachtart ist einer Güterkategorie zugeordnet. Für jede Güterkategorie ist ein bestimmter Fahrzeugtyp vorgesehen. Alle Sonderfrachten können nur mit spezifischen Fahrzeugen transportiert werden. Im <a href="depot3.txt">Depotfenster</a> kannst Du die Güterarten unter "Zuladung" einsehen.
-</p>
-<p>
-· <em>Gewicht:</em> Das Gewicht einer Einheit eines Gutes in kg.
+<title>Warenliste Hilfe</title>
+
+<h1><strong>Warenliste</strong></h1>
+
+<p>
+Die Warenliste wird mit <em>Shift</em>+<em>G</em> oder über die <a href="list.txt">Listenverwaltung</a> aufgerufen.<br/>
+In der Warenliste sind Pssagiere sowie alle Güter, die Dir im gespielten pak zum Transport anvertraut werden können, gelistet.
+</p>
+<p>
+· <em>Fracht:</em> Passagiere und alle Güterarten in Simutrans werden nach einer internen Sortierung gelistet. Vor jeder Frachtart befindet sich ein <em>Farbquadrat</em>. Die gleichen Farben findest Du auch an den Säulen über den Haltestellennamen wieder. Sie zeigen dort an, wieviel Einheiten je Güterart an den Haltestellen gelagert sind. Die Anzeige läßt sich über die Taste <em>!</em> ein- und ausblenden.
+</p>
+<p>
+· <em>Preis:</em> Der Transporterlös pro Einheit eines Gutes für ein zurückgelegtes Feld.
+</p>
+<p>
+· <em>Bonus:</em> Werden Güter, und vor allem Passagiere und Post auf einem Verkehrsträger schneller als oben angezeigt befördert, wird auf den Grundumsatz pro weitere 10 km/h der Bonus aufgerechnet; ist das Fahrzeug langsamer, kann der Umsatz auch sinken. Die Berechnungsformel ist komplex. Maßgebend für die Höhe des Bonus ist die zulässige Höchstgeschwindigkeit des Konvois. Die Höchstgeschwindigkeit der befahrenen Strecke und die tatsächliche Beförderungszeit finden keine Berücksichtigung.
+</p>
+<p>
+· <em>Kategorie:</em>  Jede Frachtart ist einer Güterkategorie zugeordnet. Für jede Güterkategorie ist ein bestimmter Fahrzeugtyp vorgesehen. Alle Sonderfrachten können nur mit spezifischen Fahrzeugen transportiert werden. Im <a href="depot3.txt">Depotfenster</a> kannst Du die Güterarten unter "Zuladung" einsehen.
+</p>
+<p>
+· <em>Gewicht:</em> Das Gewicht einer Einheit eines Gutes in kg.
 </p>
diff --git a/simutrans/text/de/haltlist.txt b/simutrans/text/de/haltlist.txt
index 9738dca..9acb246 100644
--- a/simutrans/text/de/haltlist.txt
+++ b/simutrans/text/de/haltlist.txt
@@ -1,29 +1,29 @@
-<title>Haltestellenliste Hilfe</title>
-
-<h1><strong>Haltestellenliste</strong></h1>
-
-<p>
-Die Haltestellenliste beinhaltet alle Haltestellen, also Bahnhöfe, Frachthöfe, Bus- und Tramhaltestellen, Anlegestellen sowie Flughäfen des aktiven Spielers. In die Liste ist eine Sortierfunktion eingebaut. Über einen Filter kannst Du Haltestellen nach definierten Kriterien anzeigen lassen.<br/>
-Der <em>Filter</em> kann entweder "an" oder "aus" sein. Wenn Du eine Haltestelle nicht findest, prüfe, ob der Filter "aus" ist. Die Voreinstellung ist "an". Über <em>einstellen</em> können die <a href="haltlist_filter.txt">Filterkriterien</a> ausgewählt werden.
-</p>
-<p>
-<em>Sortieren nach:</em> Der Schalter verfügt über 4 Stellungen, welche Du nacheinander wählen kannst.<br/>
-· <em>Bezeichnung:</em> Die Liste wird in der Namensreihenfolge alphanumerisch sortiert.<br>
-· <em>Wartend:</em> Die Haltestellen werden nach der Anzahl wartender Personen und Güter sortiert. Dabei werden die Werte aller wartenden Einheiten addiert.<br>
-· <em>Typ:</em> Die Sortierung der Liste erfolgt nach Fahrzeugtypen in folgender Reihenfolge: Lastwagen, Schienenfahrzeuge, Schiffe, Busse und Flugzeuge. Bohrinseln haben keinen Typ.<br>
-· <em>Nr.:</em> Die Liste wird nach den Ordnungszahlen der Haltestellen sortiert.<br>
-· <em>aufsteigend/absteigend:</em> Die Liste wird bei jeder Schalterbedienung in umgedrehter Reihenfolge dargestellt.
-</p>
-<p>
-<em>Listeneinträge</em><br>
-· <em>Ordnungszahl:</em> Vom Spiel werden für alle Haltestellen Ordnungszahlen vergebenen.<br>
-· <em>Name der Haltestelle:</em> Die Namen entsprechen jenen, welche über den Haltestellen angezeigt werden. Mit einem klick auf den Haltestellennamen öffnet sich das <a href="station.txt">Haltestellenfenster</a> und die Hauptkarte zentriert auf die Haltestelle. Im Haltestellenfenster kannst Du den Namen der Haltestelle ändern.<br>
-· <em>Angenommene Kategorien:</em> Unter der Ordnungsnummer können drei Symbole für Passagiere, Post und Güter erscheinen. Fehlen Symbole, so werden die entsprechenden Kategorien nicht angenommen. Dies kann durch Erweiterung der Haltestelle mit zusätzlichen Haltestellengrafiken oder Nebengebäuden geändert werden.<br>
-· <em>Wartende Güter und Passagiere:</em> Personen und jede Güterart sind in einer Zeile gelistet.<br>
-· <em>Statusanzeige der Haltestelle:</em><br/>
-- Grün: Bei der Haltestelle ist alles in Ordnung.<br/>
-- Gelb: Die Haltestelle ist nicht erschlossen (kein Fahrzeug kam vorbei, nichts warted).<br>
-- Orange: Die Haltestelle ist mäßig überfüllt mit Umsteigepassagieren/Waren.
-- Rot: Die Haltestelle ist völlig überfüllt (mehr als 1,5fache Kapaziät) bzw. mehr als 200 Personen/Briefe haben ihre Reise wegen Überfüllung nicht angetreten oder eine Fabrik konnte ihre Waren nicht loswerden und musste deswegen die Produktion einstellen.<br>
-<br/>· <em>Symbol des Haltestellelentyps:</em> Die Symbole ermöglichen Dir eine schnelle Orientierung über die Fahrzeugtypen der Haltestellen. Die Symbole sind Bus, Lastwagen, Lok, Schiff, Flugzeug, Magnetbahn. Liegt eine Tram-Haltestelle auf einer Straße, ist deren Symbol ein Bus, ansonsten ist es eine Lok.
+<title>Haltestellenliste Hilfe</title>
+
+<h1><strong>Haltestellenliste</strong></h1>
+
+<p>
+Die Haltestellenliste beinhaltet alle Haltestellen, also Bahnhöfe, Frachthöfe, Bus- und Tramhaltestellen, Anlegestellen sowie Flughäfen des aktiven Spielers. In die Liste ist eine Sortierfunktion eingebaut. Über einen Filter kannst Du Haltestellen nach definierten Kriterien anzeigen lassen.<br/>
+Der <em>Filter</em> kann entweder "an" oder "aus" sein. Wenn Du eine Haltestelle nicht findest, prüfe, ob der Filter "aus" ist. Die Voreinstellung ist "an". Über <em>einstellen</em> können die <a href="haltlist_filter.txt">Filterkriterien</a> ausgewählt werden.
+</p>
+<p>
+<em>Sortieren nach:</em> Der Schalter verfügt über 4 Stellungen, welche Du nacheinander wählen kannst.<br/>
+· <em>Bezeichnung:</em> Die Liste wird in der Namensreihenfolge alphanumerisch sortiert.<br>
+· <em>Wartend:</em> Die Haltestellen werden nach der Anzahl wartender Personen und Güter sortiert. Dabei werden die Werte aller wartenden Einheiten addiert.<br>
+· <em>Typ:</em> Die Sortierung der Liste erfolgt nach Fahrzeugtypen in folgender Reihenfolge: Lastwagen, Schienenfahrzeuge, Schiffe, Busse und Flugzeuge. Bohrinseln haben keinen Typ.<br>
+· <em>Nr.:</em> Die Liste wird nach den Ordnungszahlen der Haltestellen sortiert.<br>
+· <em>aufsteigend/absteigend:</em> Die Liste wird bei jeder Schalterbedienung in umgedrehter Reihenfolge dargestellt.
+</p>
+<p>
+<em>Listeneinträge</em><br>
+· <em>Ordnungszahl:</em> Vom Spiel werden für alle Haltestellen Ordnungszahlen vergebenen.<br>
+· <em>Name der Haltestelle:</em> Die Namen entsprechen jenen, welche über den Haltestellen angezeigt werden. Mit einem klick auf den Haltestellennamen öffnet sich das <a href="station.txt">Haltestellenfenster</a> und die Hauptkarte zentriert auf die Haltestelle. Im Haltestellenfenster kannst Du den Namen der Haltestelle ändern.<br>
+· <em>Angenommene Kategorien:</em> Unter der Ordnungsnummer können drei Symbole für Passagiere, Post und Güter erscheinen. Fehlen Symbole, so werden die entsprechenden Kategorien nicht angenommen. Dies kann durch Erweiterung der Haltestelle mit zusätzlichen Haltestellengrafiken oder Nebengebäuden geändert werden.<br>
+· <em>Wartende Güter und Passagiere:</em> Personen und jede Güterart sind in einer Zeile gelistet.<br>
+· <em>Statusanzeige der Haltestelle:</em><br/>
+- Grün: Bei der Haltestelle ist alles in Ordnung.<br/>
+- Gelb: Die Haltestelle ist nicht erschlossen (kein Fahrzeug kam vorbei, nichts warted).<br>
+- Orange: Die Haltestelle ist mäßig überfüllt mit Umsteigepassagieren/Waren.
+- Rot: Die Haltestelle ist völlig überfüllt (mehr als 1,5fache Kapaziät) bzw. mehr als 200 Personen/Briefe haben ihre Reise wegen Überfüllung nicht angetreten oder eine Fabrik konnte ihre Waren nicht loswerden und musste deswegen die Produktion einstellen.<br>
+<br/>· <em>Symbol des Haltestellelentyps:</em> Die Symbole ermöglichen Dir eine schnelle Orientierung über die Fahrzeugtypen der Haltestellen. Die Symbole sind Bus, Lastwagen, Lok, Schiff, Flugzeug, Magnetbahn. Liegt eine Tram-Haltestelle auf einer Straße, ist deren Symbol ein Bus, ansonsten ist es eine Lok.
 </p>
diff --git a/simutrans/text/de/haltlist_filter.txt b/simutrans/text/de/haltlist_filter.txt
index 3ab1a92..3c40ed2 100644
--- a/simutrans/text/de/haltlist_filter.txt
+++ b/simutrans/text/de/haltlist_filter.txt
@@ -1,30 +1,30 @@
-<title>Haltestellenliste - Einstellungen Hilfe</title>
-
-<h1><strong>Filtereinstellungen zur Haltestellenliste</strong></h1>
-
-<p>
-Im Fenster für die Einstellungen zur Haltestellenliste können die Filteroptionen für die Anzeige der Haltestellen gesetzt werden. Ein eingedrückter Knopf bedeutet, das Kriterium muss erfüllt sein, um durch den Filter zur Anzeige zu gelangen. Dabei werden die Eigenschaften innerhalb eines Hauptmenüs mit logisch "OR" (eines der angewählten Kriterien muss erfüllt sein) und zwischen den Hauptmenüs mit logisch "AND" (alle angewählten Kriterien müssen erfüllt sein) verknüpft.
-</p>
-<p>
-<em>Namen filtern:</em> Du kannst im Textfeld einen Name angeben. Es werden nur diejenigen Stationen in die gefilterte Liste aufgenommen, deren Namen dem Eintrag genau entsprechen. <strong>Achtung</strong> Platzhalterfunktionen wie * oder ? werden nicht unterstützt.
-</p>
-<p>
-<em>Typen filtern:</em> Es gelangen nur Haltestellen in die gefilterten Liste, welche mindestens ein Element des selektierten Typs enthalten. Haltestellen von Industrien im Wasser sind keinem Typ zugeordnet. Sie werden durch den Filter nicht erfasst, werden also auch nicht unter Anlegestelle angezeigt.
-</p>
-<p>
-<em>Spezialfilter:</em>
-<br>· <em>überfüllt:</em> Die Funktion ist derzeit außer Betrieb.
-<br>· <em>keine Verbindung:</em> Unter die Kategorie fallen Haltestellen, die an keine Linie angeschlossen sind.
-</p>
-<p>
-<em>Güterarten:</em><br>
-· <em>Nimmt an:</em> Alle Haltestellen werden gelistet, welche die selektierten Güterarten annehmen können.<br>
-· <em>Gibt ab:</em> Alle Haltestellen werden gelistet, von welchen aus die selektierten Güterarten abfahren können.<br>
-Umladehaltestellen werden in beiden Spalten nicht berücksichtigt!
-</p>
-<p>
-<em>Auswahlschalter:</em><br>
-· <em>alle:</em> Alle Güterarten werden ausgewählt.<br>
-· <em>keine:</em> Alle Güterarten werden abgewählt.<br>
-· <em>inv.:</em> Bei Betätigung wird die Güterauswahl umgekehrt.
+<title>Haltestellenliste - Einstellungen Hilfe</title>
+
+<h1><strong>Filtereinstellungen zur Haltestellenliste</strong></h1>
+
+<p>
+Im Fenster für die Einstellungen zur Haltestellenliste können die Filteroptionen für die Anzeige der Haltestellen gesetzt werden. Ein eingedrückter Knopf bedeutet, das Kriterium muss erfüllt sein, um durch den Filter zur Anzeige zu gelangen. Dabei werden die Eigenschaften innerhalb eines Hauptmenüs mit logisch "OR" (eines der angewählten Kriterien muss erfüllt sein) und zwischen den Hauptmenüs mit logisch "AND" (alle angewählten Kriterien müssen erfüllt sein) verknüpft.
+</p>
+<p>
+<em>Namen filtern:</em> Du kannst im Textfeld einen Name angeben. Es werden nur diejenigen Stationen in die gefilterte Liste aufgenommen, deren Namen dem Eintrag genau entsprechen. <strong>Achtung</strong> Platzhalterfunktionen wie * oder ? werden nicht unterstützt.
+</p>
+<p>
+<em>Typen filtern:</em> Es gelangen nur Haltestellen in die gefilterten Liste, welche mindestens ein Element des selektierten Typs enthalten. Haltestellen von Industrien im Wasser sind keinem Typ zugeordnet. Sie werden durch den Filter nicht erfasst, werden also auch nicht unter Anlegestelle angezeigt.
+</p>
+<p>
+<em>Spezialfilter:</em>
+<br>· <em>überfüllt:</em> Die Funktion ist derzeit außer Betrieb.
+<br>· <em>keine Verbindung:</em> Unter die Kategorie fallen Haltestellen, die an keine Linie angeschlossen sind.
+</p>
+<p>
+<em>Güterarten:</em><br>
+· <em>Nimmt an:</em> Alle Haltestellen werden gelistet, welche die selektierten Güterarten annehmen können.<br>
+· <em>Gibt ab:</em> Alle Haltestellen werden gelistet, von welchen aus die selektierten Güterarten abfahren können.<br>
+Umladehaltestellen werden in beiden Spalten nicht berücksichtigt!
+</p>
+<p>
+<em>Auswahlschalter:</em><br>
+· <em>alle:</em> Alle Güterarten werden ausgewählt.<br>
+· <em>keine:</em> Alle Güterarten werden abgewählt.<br>
+· <em>inv.:</em> Bei Betätigung wird die Güterauswahl umgekehrt.
 </p>
diff --git a/simutrans/text/de/industry_info.txt b/simutrans/text/de/industry_info.txt
index 4e364d6..b4bb0f8 100644
--- a/simutrans/text/de/industry_info.txt
+++ b/simutrans/text/de/industry_info.txt
@@ -1,18 +1,18 @@
-<title>Fabrikfenster Hilfe</title>
-
-<h1><strong>Fabrikfenster</strong></h1>
-
-<p>
-Das <strong>Fabrikfenster</strong> erscheint, sobald auf eine Fabrik geklickt wird. Es enthält verschiedene Informationen über diese Farbik.<br>
-Fabriken können Verbraucher,  Produzenten oder verarbeitende Industrie sein. Reine Verbraucher sind zum Beispiel Kraftwerke oder der Supermarkt, reine Produzenten eine Kohlegrube oder eine Müllhalde und ein Stahlwerk oder eine Raffinerie sind eine verarbeitende Fabrik.
-</p><p>
-Da in Simutrans eine Fabrik feste Verträge mit anderen Fabriken hat, sind in dem Dialog als erstes die Verbraucher aufgelistet. Nur diese nehmen Produkte von hier an. Ein Klick auf das Dreieck springt zu der jeweiligen Fabrik. Bei reinen Verbrauchern fehlt dieses Feld.
-</p><p>
-Als nächstes kommen die Produzenten, die diese Fabrik mit Rohstoffen versorgen. Nur von diesen Fabriken werden Waren verarbeitet. Auch hier kann man mit dem Dreieck wieder zu der jeweiligen Fabrik springen.
-</p><p>
-Darunter findet man die Städte, aus denen die Arbeiter für dieese Fabrik kommen mit dem Passagier- und Postaufkommen der Fabrik. Ist die Liste leer, dann sind die Städte zu weit entfernt.
-</p><p>
-Als vorletztes findet man die aktuellen Lagermengen. Stauen sich produzierte Waren, dann sind alle Abnehmer überfüllt oder es gibt keine Verbindung. Ist das Lager für ankommende Waren überfüllt, dann fordert die Fabrik auch keine neuen Waren mehr an. (Diese Verhalten kann mit dem Eintrag "just_in_time" in der simuconf.tab angepasst werden.)
-</p><p>
-Als letztes findet man noch eine Liste der Stationen, die mit dieser Fabrik verbunden sind.
+<title>Fabrikfenster Hilfe</title>
+
+<h1><strong>Fabrikfenster</strong></h1>
+
+<p>
+Das <strong>Fabrikfenster</strong> erscheint, sobald auf eine Fabrik geklickt wird. Es enthält verschiedene Informationen über diese Farbik.<br>
+Fabriken können Verbraucher,  Produzenten oder verarbeitende Industrie sein. Reine Verbraucher sind zum Beispiel Kraftwerke oder der Supermarkt, reine Produzenten eine Kohlegrube oder eine Müllhalde und ein Stahlwerk oder eine Raffinerie sind eine verarbeitende Fabrik.
+</p><p>
+Da in Simutrans eine Fabrik feste Verträge mit anderen Fabriken hat, sind in dem Dialog als erstes die Verbraucher aufgelistet. Nur diese nehmen Produkte von hier an. Ein Klick auf das Dreieck springt zu der jeweiligen Fabrik. Bei reinen Verbrauchern fehlt dieses Feld.
+</p><p>
+Als nächstes kommen die Produzenten, die diese Fabrik mit Rohstoffen versorgen. Nur von diesen Fabriken werden Waren verarbeitet. Auch hier kann man mit dem Dreieck wieder zu der jeweiligen Fabrik springen.
+</p><p>
+Darunter findet man die Städte, aus denen die Arbeiter für dieese Fabrik kommen mit dem Passagier- und Postaufkommen der Fabrik. Ist die Liste leer, dann sind die Städte zu weit entfernt.
+</p><p>
+Als vorletztes findet man die aktuellen Lagermengen. Stauen sich produzierte Waren, dann sind alle Abnehmer überfüllt oder es gibt keine Verbindung. Ist das Lager für ankommende Waren überfüllt, dann fordert die Fabrik auch keine neuen Waren mehr an. (Diese Verhalten kann mit dem Eintrag "just_in_time" in der simuconf.tab angepasst werden.)
+</p><p>
+Als letztes findet man noch eine Liste der Stationen, die mit dieser Fabrik verbunden sind.
 </p>
diff --git a/simutrans/text/de/labellist_filter.txt b/simutrans/text/de/labellist_filter.txt
index 526e060..416962b 100644
--- a/simutrans/text/de/labellist_filter.txt
+++ b/simutrans/text/de/labellist_filter.txt
@@ -1,3 +1,3 @@
-<title>Markerliste Hilfe</title>
-
+<title>Markerliste Hilfe</title>
+
 <h1><strong>Markerliste</strong></h1>
diff --git a/simutrans/text/de/language.txt b/simutrans/text/de/language.txt
index 55002a9..bd17e31 100644
--- a/simutrans/text/de/language.txt
+++ b/simutrans/text/de/language.txt
@@ -1,10 +1,10 @@
-<title>Sprachauswahl Hilfe</title>
-
-<h1><strong>Sprachauswahl</strong></h1>
-
-<p>
-Über die Sprachauswahl kannst Du die Sprache einstellen, in der Simutrans angezeigt wird. Wenn die Sprache vor dem Erzeugen einer neuen Karte ausgewählt wird, werden auch die Ortsnamen in der entsprechenden Sprache erstellt.
-</p>
-<p>
-Die Sprache kann jederzeit geändert werden. Geöffnete Dialoge behalten teilweise die alte Sprache bei und werden erst nach erneutem Öffnen in der neuen Sprache angezeigt.
+<title>Sprachauswahl Hilfe</title>
+
+<h1><strong>Sprachauswahl</strong></h1>
+
+<p>
+Über die Sprachauswahl kannst Du die Sprache einstellen, in der Simutrans angezeigt wird. Wenn die Sprache vor dem Erzeugen einer neuen Karte ausgewählt wird, werden auch die Ortsnamen in der entsprechenden Sprache erstellt.
+</p>
+<p>
+Die Sprache kann jederzeit geändert werden. Geöffnete Dialoge behalten teilweise die alte Sprache bei und werden erst nach erneutem Öffnen in der neuen Sprache angezeigt.
 </p>
diff --git a/simutrans/text/de/linemanagement.txt b/simutrans/text/de/linemanagement.txt
index 7c06d1f..76758b9 100644
--- a/simutrans/text/de/linemanagement.txt
+++ b/simutrans/text/de/linemanagement.txt
@@ -1,60 +1,60 @@
-<title>Linienverwaltung Hilfe</title>
-
-<h1><strong>Linienverwaltung</strong></h1>
-
-<p>
-Die Linienverwaltung wird über die <a href="mainmenu2.txt">Hauptmenüleiste</a> oder mit der Taste <em>w</em>  aufgerufen.<br/>
-In der Linienverwaltung sind alle Daten zu eingerichteten Linien zusammengefaßt.
-Du hast Zugriff auf die Linienfahrpläne, die Fahrzeugverbände der jeweils ausgewählten Linie, kannst die Linien bearbeiten und Statistiken der Linien einsehen.
-</p>
-<p>
-<em>Linienfenster:</em> Im Linienfenster sind die Linien mit ihren Bezeichnungen alphanumerisch gelistet. Zum auswählen einer Linie auf diese klicken.<br/>
-Über die Reiter lässt sich die Liste filtern:<br/>
-· <em>Alle:</em> Alle Linien werden angezeigt.<br/>
-· <em>Zug:</em> Alle Zug-Linien (Bahn, Trams und Magnetbahnen) werden angezeigt.<br/>
-· <em>Monorail:</em> Alle Magnetbahnen-Linien werden angezeigt.<br/>
-· <em>Tram:</em> Alle Straßenbahn-Linien werden angezeigt.<br/>
-· <em>Straße:</em> Alle LKW-Linien (Busse, Posttransporter, LKW) werden angezeigt.<br/>
-· <em>Schiff:</em> Alle Schiffslinien werden angezeigt.<br>
-· <em>Flug:</em> Alle Fluglinien werden angezeigt.
-</p>
-<p>
-Die Farbe des Linientext hat folgende Bedeutung:<br>
-· <em>scharz</em> Alles ok.<br/>
-· <em>weiß:</em> Dieser Linie sind keine Fahrzeugverbände zugeordnet.<br/>
-· <em>gelb:</em> Auf dieser Linie hat sich kein Fahrzeugverband bewegt (Betriebskosten gleich 0).<br/>
-· <em>rot:</em> Der Profit dieser Linie ist negativ.<br/>
-· <em>blau:</em> Mindestens ein Fahrzeugverband auf dieser Linie ist veraltet.<br/>
-
-<p>
-Darunter können <em>Linienaktionen</em> ausgeführt werden:<br/>
-· <em>Neue Linie:</em> Ein leeres <a href="schedule.txt">Linienplanfenster</a> öffnet sich, wenn eine Linienart (Zug, Monorail, Tram, Straße, Schiff, Flug) ausgewählt ist.<br/>
-· <em>Linie ändern:</em> Das <a href="schedule.txt">Linienplanfenster</a> der markierten Linie öffnet sich.<br/>
-· <em>Linie löschen:</em> Die markierte Linie wird ohne Rückfrage gelöscht. (Geht nur, wenn keine Fahrzeuge zugewiesen sind.)
-</p>
-<p>
-<em>Grafische Linienstatistik:</em> Nach dem Auswählen der Statistikschalter werden Statistiken der Linie (monatsweise) innerhalb der letzten 12 Monate grafisch dargestellt. Der aktuelle Monat steht links. Die Farben der Kurven entsprechen den Farben der Schalter.<br/>
-· <em>Freie Kapazität:</em> Der nicht genutzte Laderaum aller Fahrzeugverbände der Linie, summiert für jeden Fahrplanabschnitt.<br/>
-· <em>Beförderungen:</em> Der genutzte Laderaum alle Fahrzeugverbände der Linie, summiert für jeden Fahrplanabschnitt.<br/>
-· <em>Einnahmen:</em> Die Erlöse aller Fahrzeugverbände dieser Linie.<br/>
-· <em>Betriebskosten:</em> Die anfallenden Kosten für den Betrieb aller Fahrzeugverbände der Linie.<br/>
-· <em>Profit:</em> Der Profit ergibt sich aus Einnahmen minus Betriebskosten.
-· <em>Fahrezuge:</em> Die Anzahl der Fahrzeugverbände, welche die Linie befahren.<br/>
-</p>
-<p>
-· <em>Liniennamen ändern:</em> Der Name der Linie wird angezeigt. Klicke zum Editieren des Namens ins Namensfeld und bestätige die Änderung mit <em>RETURN</em>.
-</p>
-<p>
-<em>Linienstatistik:</em> Die wichtigsten statistischen Daten der Linie werden unterhalb des Linien-Namens angezeigt.<br/>
-· <em>Fahrzeuge:</em> Anzahl der Fahrzeugverbände der Linie.<br/>
-· <em>Kapazität:</em> Die Ladekapazität aller Fahrzeugverbände der Linie.<br/>
-· <em>Profit:</em> Der Profit der Linie im aktuellen Monat.<br/>
-· <em>Kapazität:</em> Die genutzte Ladekapazität der Linie, in Klammern die prozentuale Auslastung.<br/>
-· <em>Auslastungsbalken:</em> Im Balken wird die prozentuale Auslastung der Linie grafisch dargestellt.
-</p>
-<p>
-<em>Linienhaltepunkte:</em> Alle angefahrenen Haltestellen der Linie sind in einer <a href="haltlist.txt">Haltestellenliste</a> aufgeführt. Jeweils nur einmal, auch wenn sie im Fahrplan mehrmals angefahren werden. Freie Wegpunkte werden nicht angezeigt, allenfalls wird in der Liste eine Ordnungsnummer übersprungen.
-</p>
-<p>
-<em>Fahrzeugliste:</em> Die Fahrzeugverbände der Linie sind in einer <a href="convoi.txt">Fahrzeugliste</a> aufgeführt. Fehlt ein dort vermuteter Fahrzeugverband, ist es möglich, dass sein Fahrplan geändert worden ist und er dadurch aus der Linienzugehörigkeit gefallen ist. Zum auswählen eines Fahrzeugverbandes auf diesen klicken.
+<title>Linienverwaltung Hilfe</title>
+
+<h1><strong>Linienverwaltung</strong></h1>
+
+<p>
+Die Linienverwaltung wird über die <a href="mainmenu2.txt">Hauptmenüleiste</a> oder mit der Taste <em>w</em>  aufgerufen.<br/>
+In der Linienverwaltung sind alle Daten zu eingerichteten Linien zusammengefaßt.
+Du hast Zugriff auf die Linienfahrpläne, die Fahrzeugverbände der jeweils ausgewählten Linie, kannst die Linien bearbeiten und Statistiken der Linien einsehen.
+</p>
+<p>
+<em>Linienfenster:</em> Im Linienfenster sind die Linien mit ihren Bezeichnungen alphanumerisch gelistet. Zum auswählen einer Linie auf diese klicken.<br/>
+Über die Reiter lässt sich die Liste filtern:<br/>
+· <em>Alle:</em> Alle Linien werden angezeigt.<br/>
+· <em>Zug:</em> Alle Zug-Linien (Bahn, Trams und Magnetbahnen) werden angezeigt.<br/>
+· <em>Monorail:</em> Alle Magnetbahnen-Linien werden angezeigt.<br/>
+· <em>Tram:</em> Alle Straßenbahn-Linien werden angezeigt.<br/>
+· <em>Straße:</em> Alle LKW-Linien (Busse, Posttransporter, LKW) werden angezeigt.<br/>
+· <em>Schiff:</em> Alle Schiffslinien werden angezeigt.<br>
+· <em>Flug:</em> Alle Fluglinien werden angezeigt.
+</p>
+<p>
+Die Farbe des Linientext hat folgende Bedeutung:<br>
+· <em>scharz</em> Alles ok.<br/>
+· <em>weiß:</em> Dieser Linie sind keine Fahrzeugverbände zugeordnet.<br/>
+· <em>gelb:</em> Auf dieser Linie hat sich kein Fahrzeugverband bewegt (Betriebskosten gleich 0).<br/>
+· <em>rot:</em> Der Profit dieser Linie ist negativ.<br/>
+· <em>blau:</em> Mindestens ein Fahrzeugverband auf dieser Linie ist veraltet.<br/>
+
+<p>
+Darunter können <em>Linienaktionen</em> ausgeführt werden:<br/>
+· <em>Neue Linie:</em> Ein leeres <a href="schedule.txt">Linienplanfenster</a> öffnet sich, wenn eine Linienart (Zug, Monorail, Tram, Straße, Schiff, Flug) ausgewählt ist.<br/>
+· <em>Linie ändern:</em> Das <a href="schedule.txt">Linienplanfenster</a> der markierten Linie öffnet sich.<br/>
+· <em>Linie löschen:</em> Die markierte Linie wird ohne Rückfrage gelöscht. (Geht nur, wenn keine Fahrzeuge zugewiesen sind.)
+</p>
+<p>
+<em>Grafische Linienstatistik:</em> Nach dem Auswählen der Statistikschalter werden Statistiken der Linie (monatsweise) innerhalb der letzten 12 Monate grafisch dargestellt. Der aktuelle Monat steht links. Die Farben der Kurven entsprechen den Farben der Schalter.<br/>
+· <em>Freie Kapazität:</em> Der nicht genutzte Laderaum aller Fahrzeugverbände der Linie, summiert für jeden Fahrplanabschnitt.<br/>
+· <em>Beförderungen:</em> Der genutzte Laderaum alle Fahrzeugverbände der Linie, summiert für jeden Fahrplanabschnitt.<br/>
+· <em>Einnahmen:</em> Die Erlöse aller Fahrzeugverbände dieser Linie.<br/>
+· <em>Betriebskosten:</em> Die anfallenden Kosten für den Betrieb aller Fahrzeugverbände der Linie.<br/>
+· <em>Profit:</em> Der Profit ergibt sich aus Einnahmen minus Betriebskosten.
+· <em>Fahrezuge:</em> Die Anzahl der Fahrzeugverbände, welche die Linie befahren.<br/>
+</p>
+<p>
+· <em>Liniennamen ändern:</em> Der Name der Linie wird angezeigt. Klicke zum Editieren des Namens ins Namensfeld und bestätige die Änderung mit <em>RETURN</em>.
+</p>
+<p>
+<em>Linienstatistik:</em> Die wichtigsten statistischen Daten der Linie werden unterhalb des Linien-Namens angezeigt.<br/>
+· <em>Fahrzeuge:</em> Anzahl der Fahrzeugverbände der Linie.<br/>
+· <em>Kapazität:</em> Die Ladekapazität aller Fahrzeugverbände der Linie.<br/>
+· <em>Profit:</em> Der Profit der Linie im aktuellen Monat.<br/>
+· <em>Kapazität:</em> Die genutzte Ladekapazität der Linie, in Klammern die prozentuale Auslastung.<br/>
+· <em>Auslastungsbalken:</em> Im Balken wird die prozentuale Auslastung der Linie grafisch dargestellt.
+</p>
+<p>
+<em>Linienhaltepunkte:</em> Alle angefahrenen Haltestellen der Linie sind in einer <a href="haltlist.txt">Haltestellenliste</a> aufgeführt. Jeweils nur einmal, auch wenn sie im Fahrplan mehrmals angefahren werden. Freie Wegpunkte werden nicht angezeigt, allenfalls wird in der Liste eine Ordnungsnummer übersprungen.
+</p>
+<p>
+<em>Fahrzeugliste:</em> Die Fahrzeugverbände der Linie sind in einer <a href="convoi.txt">Fahrzeugliste</a> aufgeführt. Fehlt ein dort vermuteter Fahrzeugverband, ist es möglich, dass sein Fahrplan geändert worden ist und er dadurch aus der Linienzugehörigkeit gefallen ist. Zum auswählen eines Fahrzeugverbandes auf diesen klicken.
 </p>
diff --git a/simutrans/text/de/list.txt b/simutrans/text/de/list.txt
index c3ed252..6b786fd 100644
--- a/simutrans/text/de/list.txt
+++ b/simutrans/text/de/list.txt
@@ -1,17 +1,17 @@
-<title>Listenverwaltung Hilfe</title>
-
-<h1><strong>Listenverwaltung</strong></h1>
-
-<p>
-Die Listenverwaltung wird über die <a href="mainmenu2.txt">Hauptmenüleiste</a> aufgerufen.<br/>
-Im Listenverwaltungsmenü gibt es sechs Einträge. <br/>
-Von links nach rechts:
-</p>
-<p>
-<a href="haltlist.txt">Haltestellenliste</a><br/>
-<a href="convoi.txt">Fahrzeugliste</a><br/>
-<a href="citylist_filter.txt">Stadtliste</a><br/>
-<a href="goods_filter.txt">Warenliste</a><br/>
-<a href="factorylist_filter.txt">Fabrikliste</a><br/>
-<a href="curiositylist_filter.txt">Touristenzielliste</a><br/>
+<title>Listenverwaltung Hilfe</title>
+
+<h1><strong>Listenverwaltung</strong></h1>
+
+<p>
+Die Listenverwaltung wird über die <a href="mainmenu2.txt">Hauptmenüleiste</a> aufgerufen.<br/>
+Im Listenverwaltungsmenü gibt es sechs Einträge. <br/>
+Von links nach rechts:
+</p>
+<p>
+<a href="haltlist.txt">Haltestellenliste</a><br/>
+<a href="convoi.txt">Fahrzeugliste</a><br/>
+<a href="citylist_filter.txt">Stadtliste</a><br/>
+<a href="goods_filter.txt">Warenliste</a><br/>
+<a href="factorylist_filter.txt">Fabrikliste</a><br/>
+<a href="curiositylist_filter.txt">Touristenzielliste</a><br/>
 </p>
diff --git a/simutrans/text/de/load.txt b/simutrans/text/de/load.txt
index 7e57395..20dae17 100644
--- a/simutrans/text/de/load.txt
+++ b/simutrans/text/de/load.txt
@@ -1,16 +1,16 @@
-<title>Lademenü Hilfe</title>
-
-<h1><strong>Lademenü</strong></h1>
-
-<p>
-Wenn Du das Lademenü öffnest, erscheint eine Liste aller verfügbaren gespeicherten Spielstände. Nach der Anwahl eines Eintrages wird der Spielstand ohne weitere Rückfrage geladen.
-</p>
-<p>
-Spielstände, die durch die autosave-Option gespeichert wurden, tragen den Namen 'autosave' mit 2 angehängten Ziffern. Die Ziffern geben den gespeicherten Monat an.
-</p>
-<p>
-<em>Achtung!</em> Das aktuelle Spiel wird verworfen und nicht automatisch gesichert!
-</p>
-<p>
-<strong>Warnung!</strong> Ein Klick auf das mit X bezeichnete Feld vor dem Dateinamen führt zur umgehenden Löschung des Spielstands!
+<title>Lademenü Hilfe</title>
+
+<h1><strong>Lademenü</strong></h1>
+
+<p>
+Wenn Du das Lademenü öffnest, erscheint eine Liste aller verfügbaren gespeicherten Spielstände. Nach der Anwahl eines Eintrages wird der Spielstand ohne weitere Rückfrage geladen.
+</p>
+<p>
+Spielstände, die durch die autosave-Option gespeichert wurden, tragen den Namen 'autosave' mit 2 angehängten Ziffern. Die Ziffern geben den gespeicherten Monat an.
+</p>
+<p>
+<em>Achtung!</em> Das aktuelle Spiel wird verworfen und nicht automatisch gesichert!
+</p>
+<p>
+<strong>Warnung!</strong> Ein Klick auf das mit X bezeichnete Feld vor dem Dateinamen führt zur umgehenden Löschung des Spielstands!
 </p>
diff --git a/simutrans/text/de/load_relief.txt b/simutrans/text/de/load_relief.txt
index 88d8e48..dea8fe7 100644
--- a/simutrans/text/de/load_relief.txt
+++ b/simutrans/text/de/load_relief.txt
@@ -1,10 +1,10 @@
-<title>Lademenü Hilfe</title>
-
-<h1><strong>Relief-Lademenü</strong></h1>
-
-<p>
-Im Relief-Lademenü werden alle Relief-Karten gelistet, welche sich im Verzeichnis <em>simutrans/save</em> befinden. Es handelt sich um Graustufenbilder, die Du in verschiedenen Grafik- und Bildbetrachtungsprogrammen aus farbigen Bitmapdateien oder aus Graustufenbitmaps erstellen kannst. Sie werden im Format <em>.ppm</em> gespeichert.
-</p>
-<p>
-Weitere Details zur Nutzung von Lade-Menüs findest Du in der Hilfe zum <a href="load.txt">Lademenü</a>.
+<title>Lademenü Hilfe</title>
+
+<h1><strong>Relief-Lademenü</strong></h1>
+
+<p>
+Im Relief-Lademenü werden alle Relief-Karten gelistet, welche sich im Verzeichnis <em>simutrans/save</em> befinden. Es handelt sich um Graustufenbilder, die Du in verschiedenen Grafik- und Bildbetrachtungsprogrammen aus farbigen Bitmapdateien oder aus Graustufenbitmaps erstellen kannst. Sie werden im Format <em>.ppm</em> gespeichert.
+</p>
+<p>
+Weitere Details zur Nutzung von Lade-Menüs findest Du in der Hilfe zum <a href="load.txt">Lademenü</a>.
 </p>
diff --git a/simutrans/text/de/mailbox.txt b/simutrans/text/de/mailbox.txt
index 7abdbca..79ff6ed 100644
--- a/simutrans/text/de/mailbox.txt
+++ b/simutrans/text/de/mailbox.txt
@@ -1,29 +1,29 @@
-<title>Mailbox und Mailbox Optionen Hilfe</title>
-
-<h1><strong>Mailbox und Mailbox Optionen</strong></h1>
-
-<p>
-In der Mailbox sammeln sich alle Meldungen, die seit dem Spielstart bzw. dem letzten Laden eines Spielstandes angefallen sind.<br/>
-Bei einigen Meldungen kannst Du den Bildschirm auf den Ort zentrieren, welcher die Meldung ausgelöst hat. Klicke dazu die Meldung an.
-</p>
-<p>
-<em>Optionen:</em> Über den Optionen-Schalter gelangst Du zum Dialog mit den Mailboxeinstellungen. Dort kannst Du für jede Mitteilung einstellen, ob und wie sie angezeigt werden soll. Anzeigekombinationen sind möglich.
-</p>
-<p>
-<em>Mitteilungen:</em><br>
-· <em>Neues Jahr:</em> Ein neues Jahr hat begonnen.<br>
-· <em>KI baut:</em> Ein Computergegner hat eine neue Linie in Betrieb genommen.<br>
-· <em>Stadtnachrichten:</em> Die Stadt baut ein größeres Rathaus.<br>
-· <em>Keine Route:</em> Das in der Meldung angegebene Fahrzeug findet keinen Weg mehr.<br>
-· <em>Neue Industrie:</em> Durch das Stadtwachstum wurde eine neue Industriekette mit Stadtgeschäft gebaut.<br>
-· <em>Neue Attraktion:</em> Ein neues Touristenziel oder Denkmal wurde errichtet.<br>
-· <em>Neue Fahrzeuge:</em> Ein neues Fahrzeug ist verfügbar, oder ein Fahrzeug ist veraltet.<br>
-· <em>Bahnhof voll:</em> Die angegebene Haltestelle ist überfüllt.<br>
-· <em>Warnungen:</em> Du hast 3 Monate Zeit, deine Schulden zurückzuzahlen, etc.
-</p>
-<p>
-<em>Bedeutungen der Schalter:</em><br/>
-· <em>linke Spalte:</em> Die Meldung wird im Ticker (Lauftext über der Statusleiste) ausgegeben.<br/>
-· <em>mittlere  Spalte:</em> Ein Dialog erscheint für kurze Zeit und beendet sich dann selbst.<br/>
-· <em>rechte  Spalte:</em> Ein Dialog informiert Dich. Er wird solange angezeigt, bis Du ihn schließt.
+<title>Mailbox und Mailbox Optionen Hilfe</title>
+
+<h1><strong>Mailbox und Mailbox Optionen</strong></h1>
+
+<p>
+In der Mailbox sammeln sich alle Meldungen, die seit dem Spielstart bzw. dem letzten Laden eines Spielstandes angefallen sind.<br/>
+Bei einigen Meldungen kannst Du den Bildschirm auf den Ort zentrieren, welcher die Meldung ausgelöst hat. Klicke dazu die Meldung an.
+</p>
+<p>
+<em>Optionen:</em> Über den Optionen-Schalter gelangst Du zum Dialog mit den Mailboxeinstellungen. Dort kannst Du für jede Mitteilung einstellen, ob und wie sie angezeigt werden soll. Anzeigekombinationen sind möglich.
+</p>
+<p>
+<em>Mitteilungen:</em><br>
+· <em>Neues Jahr:</em> Ein neues Jahr hat begonnen.<br>
+· <em>KI baut:</em> Ein Computergegner hat eine neue Linie in Betrieb genommen.<br>
+· <em>Stadtnachrichten:</em> Die Stadt baut ein größeres Rathaus.<br>
+· <em>Keine Route:</em> Das in der Meldung angegebene Fahrzeug findet keinen Weg mehr.<br>
+· <em>Neue Industrie:</em> Durch das Stadtwachstum wurde eine neue Industriekette mit Stadtgeschäft gebaut.<br>
+· <em>Neue Attraktion:</em> Ein neues Touristenziel oder Denkmal wurde errichtet.<br>
+· <em>Neue Fahrzeuge:</em> Ein neues Fahrzeug ist verfügbar, oder ein Fahrzeug ist veraltet.<br>
+· <em>Bahnhof voll:</em> Die angegebene Haltestelle ist überfüllt.<br>
+· <em>Warnungen:</em> Du hast 3 Monate Zeit, deine Schulden zurückzuzahlen, etc.
+</p>
+<p>
+<em>Bedeutungen der Schalter:</em><br/>
+· <em>linke Spalte:</em> Die Meldung wird im Ticker (Lauftext über der Statusleiste) ausgegeben.<br/>
+· <em>mittlere  Spalte:</em> Ein Dialog erscheint für kurze Zeit und beendet sich dann selbst.<br/>
+· <em>rechte  Spalte:</em> Ein Dialog informiert Dich. Er wird solange angezeigt, bis Du ihn schließt.
 </p>
diff --git a/simutrans/text/de/mainmenu.txt b/simutrans/text/de/mainmenu.txt
index 2f33a33..dd24f15 100644
--- a/simutrans/text/de/mainmenu.txt
+++ b/simutrans/text/de/mainmenu.txt
@@ -1,74 +1,74 @@
-<title>Hauptmenü Hilfe</title>
-
-<h1><strong>Hauptmenü, die Buttonleiste</strong></h1>
-
-<p>
-<em>Einstellungen:</em> Über die Diskette gelangst Du zu den <a href="options.txt">Einstellungen</a> sowie zum Laden und Speichern. Du kannst auch eine neue Karte generieren lassen bzw. das Spiel beenden.
-</p>
-<p>
-<a href="map.txt"><em>Reliefkarte:</em></a> Die Übersichtskarte über die Welt mit ihren Objekten zeigt die Bewegungen der Spielerfahrzeuge an und gestattet Dir einige statistische Ansichten. Wenn Du einen Punkt auf der Reliefkarte anwählst, springt die Spielkarte zum entsprechenden Bildausschnitt.
-</p>
-<p>
-<em>Lupe:</em> Die Lupe symbolisiert das Abfragewerkzeug. Ist es aktiv, wird der Cursor ebenfalls zur Lupe. Wählst Du mit ihr ein Objekt an (Gebäude, Fahrzeug), werden Angaben (Infofenster) darüber eingeblendet. Empfehlenswert ist es, immer wieder zu der Abfrage zurückzuwechseln, vor allem, wenn Du gerade mit dem Abrisswerkzeug gearbeitet hast. So vermeidest Du, ein Objekt aus Versehen abzureissen, anstatt die Objektinformationen aufzurufen.
-</p>
-<p>
-<a href="slopetools.txt"><em>Geländewerkzeuge:</em></a> Die Rampe öffnet ein Menü, mit welchem Du die Höhen- und Hanglagen in der Karte verändern kannst. Gelände anheben/absenken sind links auch im Hauptmenü verfügbar.
-</p>
-<p>
-<em>Bauwerkzeugmenüs:</em> Hinter den Werkzeugen verbergen sich die jeweiligen Baumenüs.
-<br/>· <a href="railtools.txt"><em>Eisenbahnen</em></a>
-<br/>· <a href="monorailtools.txt"><em>Magnetbahnen/Monorails</em></a>
-<br/>· <a href="tramtools.txt"><em>Straßenbahnen</em></a>
-<br/>· <a href="roadtools.txt"><em>Straßen</em></a>
-<br/>· <a href="shiptools.txt"><em>Häfen und Werften</em></a>
-<br/>· <a href="airtools.txt"><em>Flughäfen</em></a>
-</p>
-<p>
-<em>An Fahrzeuge gelangen:</em> Jedes der Baumenüs enthält ein Depotwerkzeug (s. Hilfen zu den Baumenüs). Nach dem Bau eines Depots wird bei dessen Anwahl das <a href="depot.txt">Depotfenster</a> geöffnet. </p>
-<p>
-<a href="special.txt"><em>Spezialbauwerkzeuge:</em></a> Das sich öffnende Menü enthält verschiedene Bauwerkzeuge, die den Aufbau der Transportnetze ergänzen.
-</p>
-<p>
-<em>Abrisswerkzeug:</em> Nach der Auswahl des Werkzeuges wird der Cursor zur durchkreuzten Wolke. Ein mit dem Werkzeug angewähltes Objekt wird ohne weitere Warnung von der Karte entfernt, sofern Du zu dessen Abriss berechtigt bist. Bei Abrissarbeiten entstehen unterschiedliche Kosten, die sofort von Deinem Kassenbestand abgebucht werden.
-<br/><em>·</em> Eigene Bauwerke sowie Stadtstraßen und private Gebäude wie Wohn- , Büro- und Gewerbeliegenschaften (oranger Fensterbalken im Infofenster) können abgerissen werden. Beachte, dass beim Gebäudeabriss auch die Gebäudekosten als Unkosten anfallen.
-<br/><em>·</em> Spezielle Gebäude wie Rathäuser oder Sehenswürdigkeiten sowie Einrichtungen anderer Spieler können nur durch den jeweiligen Eigentümer abgerissen werden (Vorsicht bei erschlossenen Industrien und Rathäusern).
-<br/><em>·</em> Auf Schienen und Straßen sind bestimmte Abrissreihenfolgen festgelegt. Sofern auf der Abrisskachel vorhanden, werden zuerst Signale, danach Haltestellen, schliesslich eine ggf. vorhandene Fahrleitung, und zuletzt der Betriebsweg selbst abgerissen.
-<br/><em>·</em> Sollen Abrissarbeiten auf Brücken oder Schwebebahnen durchgeführt werden, muss beim Abreissen die <em>Ctrl</em>(<em>Strg</em>)-Taste gedrückt gehalten werden. Sonst werden die Objekte auf der unteren Ebene, z.B. ein Haus unter einer Brücke, entfernt.
-</p>
-<p>
-<a href="lines.txt"><em>Linienverwaltung:</em></a> Linien können eingerichtet, geändert und gelöscht werden, sowie Informationen über die Linien eingesehen werden.
-</p>
-<p>
-<em>Listenverwaltung:</em> Das Symbol des Listenblattes führt zu einem Untermenü mit sechs Listen:
-<br/>· <a href="haltlist.txt"><em>Haltestellenliste</em></a>
-<br/>· <a href="convoi.txt"><em>Fahrzeugliste</em></a>
-<br/>· <a href="citylist_filter.txt"><em>Stadtliste</em></a>
-<br/>· <a href="goods_filter.txt"><em>Warenliste</em></a>
-<br/>· <a href="factorylist_filter.txt"><em>Fabrikliste</em></a>
-<br/>· <a href="curiositylist_filter.txt"><em>Touristenzielliste</em></a>
-</p>
-<p>
-<a href="mailbox.txt"><em>Briefkasten:</em></a> Alle Meldungen, die seit dem Spielstart bzw. seit dem letzten Laden eines Spielstandes angefallen sind, werden in einer Liste aufgeführt.
-</p>
-<p>
-<a href="finances.txt"><em>Finanzfenster:</em></a> Das Kontefei von Hajo, dem Initiator von Simutrans, schmückt die Geldnote, welche in Simutrans die Finanzkraft repräsentiert. Das sich öffnender Fenster zeigt alles Wissenswerte über Deine momentane Finanzlage.
-</p>
-<p>
-<em>Screenshot:</em> Bei der Nutzung des Kamera-Buttons wird ein Schnappschuss des aktuellen Kartenausschnittes als Bitmap-Datei im Verzeichnis simutrans/screenshot gespeichert.
-</p>
-<p>
-<em>Pause:</em> Falls Du Dir eine Pause vom harten Alltag des Transportunternehmers gönnen möchtest, bestelle über den Button ruhig eine heiße Tasse Tee oder Kaffee. Der Service ist in Simutrans natürlich gratis.<br>
-<em>Vorlauf:</em>Falls Dir Simutrans zu langsam läuft, kannst Du hier beschleunigen. Es kann auch zu ruckeln führen, speziell mit Schiffen!
-</p>
-<p>
-<strong>Statusleiste</strong>
-</p>
-<p>
-Über der Statuszeile, am unteren Hauptfensterrand, werden gelegentlich Nachrichten angezeigt. Welche Meldungen erscheinen sollen, lässt sich in den Mailbox-Optionen festlegen. Die Statusleiste enthält Anzeigen, die sich im Spielverlauf permanent aktualisieren:
-<br/>· <em>Datum und Uhrzeit:</em> In Simutrans ist ein Jahr in 12 Monate und ein Monat in 24 Stunden unterteilt. Über das Datum wird die Verfügbarkeit von Fahrzeugen und Gebäuden gesteuert, wenn die 'timeline' aktiviert ist (siehe unten). Vor der Jahreszahl werden die meteorologischen Jahreszeiten angezeigt. In einigen Szenarien kann sich der Untergrund mit den Jahreszeiten ändern.
-<br/>· <em>Spieler:</em> Der Name des aktuellen Spielers wird in dessen Spielerfarbe angezeigt, sofern es ein Computerspieler ist.
-<br/>· <em>Kasse:</em> Der Kassenbestand des aktuell agierenden Spielers wird angezeigt und permanent aktualisiert.
-<br/>· <em>Positionskoordinaten:</em> In der Klammer werden die X- und Y-Koordinaten sowie die Höhenebene der Kachel angezeigt, über welcher sich der Cursor gerade befindet.
-<br/>· <em>Spielgeschwindigkeit:</em> Der Wert (T=1.00) gibt die momentane Spielgeschwindigkeit an, siehe unter <a href="game_control.txt">Spielsteuerung</a>, Abschnitt Spielgeschwindigkeit. Bei Vorlauf wird die T-Anzeige durch zwei Pfeile ersetzt.
-<br/>· <em>(no) timeline:</em> Zeigt an, ob die timeline aktiviert ist oder nicht, siehe <a href="new_world.txt">Neue Welt erstellen</a>.
+<title>Hauptmenü Hilfe</title>
+
+<h1><strong>Hauptmenü, die Buttonleiste</strong></h1>
+
+<p>
+<em>Einstellungen:</em> Über die Diskette gelangst Du zu den <a href="options.txt">Einstellungen</a> sowie zum Laden und Speichern. Du kannst auch eine neue Karte generieren lassen bzw. das Spiel beenden.
+</p>
+<p>
+<a href="map.txt"><em>Reliefkarte:</em></a> Die Übersichtskarte über die Welt mit ihren Objekten zeigt die Bewegungen der Spielerfahrzeuge an und gestattet Dir einige statistische Ansichten. Wenn Du einen Punkt auf der Reliefkarte anwählst, springt die Spielkarte zum entsprechenden Bildausschnitt.
+</p>
+<p>
+<em>Lupe:</em> Die Lupe symbolisiert das Abfragewerkzeug. Ist es aktiv, wird der Cursor ebenfalls zur Lupe. Wählst Du mit ihr ein Objekt an (Gebäude, Fahrzeug), werden Angaben (Infofenster) darüber eingeblendet. Empfehlenswert ist es, immer wieder zu der Abfrage zurückzuwechseln, vor allem, wenn Du gerade mit dem Abrisswerkzeug gearbeitet hast. So vermeidest Du, ein Objekt aus Versehen abzureissen, anstatt die Objektinformationen aufzurufen.
+</p>
+<p>
+<a href="slopetools.txt"><em>Geländewerkzeuge:</em></a> Die Rampe öffnet ein Menü, mit welchem Du die Höhen- und Hanglagen in der Karte verändern kannst. Gelände anheben/absenken sind links auch im Hauptmenü verfügbar.
+</p>
+<p>
+<em>Bauwerkzeugmenüs:</em> Hinter den Werkzeugen verbergen sich die jeweiligen Baumenüs.
+<br/>· <a href="railtools.txt"><em>Eisenbahnen</em></a>
+<br/>· <a href="monorailtools.txt"><em>Magnetbahnen/Monorails</em></a>
+<br/>· <a href="tramtools.txt"><em>Straßenbahnen</em></a>
+<br/>· <a href="roadtools.txt"><em>Straßen</em></a>
+<br/>· <a href="shiptools.txt"><em>Häfen und Werften</em></a>
+<br/>· <a href="airtools.txt"><em>Flughäfen</em></a>
+</p>
+<p>
+<em>An Fahrzeuge gelangen:</em> Jedes der Baumenüs enthält ein Depotwerkzeug (s. Hilfen zu den Baumenüs). Nach dem Bau eines Depots wird bei dessen Anwahl das <a href="depot.txt">Depotfenster</a> geöffnet. </p>
+<p>
+<a href="special.txt"><em>Spezialbauwerkzeuge:</em></a> Das sich öffnende Menü enthält verschiedene Bauwerkzeuge, die den Aufbau der Transportnetze ergänzen.
+</p>
+<p>
+<em>Abrisswerkzeug:</em> Nach der Auswahl des Werkzeuges wird der Cursor zur durchkreuzten Wolke. Ein mit dem Werkzeug angewähltes Objekt wird ohne weitere Warnung von der Karte entfernt, sofern Du zu dessen Abriss berechtigt bist. Bei Abrissarbeiten entstehen unterschiedliche Kosten, die sofort von Deinem Kassenbestand abgebucht werden.
+<br/><em>·</em> Eigene Bauwerke sowie Stadtstraßen und private Gebäude wie Wohn- , Büro- und Gewerbeliegenschaften (oranger Fensterbalken im Infofenster) können abgerissen werden. Beachte, dass beim Gebäudeabriss auch die Gebäudekosten als Unkosten anfallen.
+<br/><em>·</em> Spezielle Gebäude wie Rathäuser oder Sehenswürdigkeiten sowie Einrichtungen anderer Spieler können nur durch den jeweiligen Eigentümer abgerissen werden (Vorsicht bei erschlossenen Industrien und Rathäusern).
+<br/><em>·</em> Auf Schienen und Straßen sind bestimmte Abrissreihenfolgen festgelegt. Sofern auf der Abrisskachel vorhanden, werden zuerst Signale, danach Haltestellen, schliesslich eine ggf. vorhandene Fahrleitung, und zuletzt der Betriebsweg selbst abgerissen.
+<br/><em>·</em> Sollen Abrissarbeiten auf Brücken oder Schwebebahnen durchgeführt werden, muss beim Abreissen die <em>Ctrl</em>(<em>Strg</em>)-Taste gedrückt gehalten werden. Sonst werden die Objekte auf der unteren Ebene, z.B. ein Haus unter einer Brücke, entfernt.
+</p>
+<p>
+<a href="lines.txt"><em>Linienverwaltung:</em></a> Linien können eingerichtet, geändert und gelöscht werden, sowie Informationen über die Linien eingesehen werden.
+</p>
+<p>
+<em>Listenverwaltung:</em> Das Symbol des Listenblattes führt zu einem Untermenü mit sechs Listen:
+<br/>· <a href="haltlist.txt"><em>Haltestellenliste</em></a>
+<br/>· <a href="convoi.txt"><em>Fahrzeugliste</em></a>
+<br/>· <a href="citylist_filter.txt"><em>Stadtliste</em></a>
+<br/>· <a href="goods_filter.txt"><em>Warenliste</em></a>
+<br/>· <a href="factorylist_filter.txt"><em>Fabrikliste</em></a>
+<br/>· <a href="curiositylist_filter.txt"><em>Touristenzielliste</em></a>
+</p>
+<p>
+<a href="mailbox.txt"><em>Briefkasten:</em></a> Alle Meldungen, die seit dem Spielstart bzw. seit dem letzten Laden eines Spielstandes angefallen sind, werden in einer Liste aufgeführt.
+</p>
+<p>
+<a href="finances.txt"><em>Finanzfenster:</em></a> Das Kontefei von Hajo, dem Initiator von Simutrans, schmückt die Geldnote, welche in Simutrans die Finanzkraft repräsentiert. Das sich öffnender Fenster zeigt alles Wissenswerte über Deine momentane Finanzlage.
+</p>
+<p>
+<em>Screenshot:</em> Bei der Nutzung des Kamera-Buttons wird ein Schnappschuss des aktuellen Kartenausschnittes als Bitmap-Datei im Verzeichnis simutrans/screenshot gespeichert.
+</p>
+<p>
+<em>Pause:</em> Falls Du Dir eine Pause vom harten Alltag des Transportunternehmers gönnen möchtest, bestelle über den Button ruhig eine heiße Tasse Tee oder Kaffee. Der Service ist in Simutrans natürlich gratis.<br>
+<em>Vorlauf:</em>Falls Dir Simutrans zu langsam läuft, kannst Du hier beschleunigen. Es kann auch zu ruckeln führen, speziell mit Schiffen!
+</p>
+<p>
+<strong>Statusleiste</strong>
+</p>
+<p>
+Über der Statuszeile, am unteren Hauptfensterrand, werden gelegentlich Nachrichten angezeigt. Welche Meldungen erscheinen sollen, lässt sich in den Mailbox-Optionen festlegen. Die Statusleiste enthält Anzeigen, die sich im Spielverlauf permanent aktualisieren:
+<br/>· <em>Datum und Uhrzeit:</em> In Simutrans ist ein Jahr in 12 Monate und ein Monat in 24 Stunden unterteilt. Über das Datum wird die Verfügbarkeit von Fahrzeugen und Gebäuden gesteuert, wenn die 'timeline' aktiviert ist (siehe unten). Vor der Jahreszahl werden die meteorologischen Jahreszeiten angezeigt. In einigen Szenarien kann sich der Untergrund mit den Jahreszeiten ändern.
+<br/>· <em>Spieler:</em> Der Name des aktuellen Spielers wird in dessen Spielerfarbe angezeigt, sofern es ein Computerspieler ist.
+<br/>· <em>Kasse:</em> Der Kassenbestand des aktuell agierenden Spielers wird angezeigt und permanent aktualisiert.
+<br/>· <em>Positionskoordinaten:</em> In der Klammer werden die X- und Y-Koordinaten sowie die Höhenebene der Kachel angezeigt, über welcher sich der Cursor gerade befindet.
+<br/>· <em>Spielgeschwindigkeit:</em> Der Wert (T=1.00) gibt die momentane Spielgeschwindigkeit an, siehe unter <a href="game_control.txt">Spielsteuerung</a>, Abschnitt Spielgeschwindigkeit. Bei Vorlauf wird die T-Anzeige durch zwei Pfeile ersetzt.
+<br/>· <em>(no) timeline:</em> Zeigt an, ob die timeline aktiviert ist oder nicht, siehe <a href="new_world.txt">Neue Welt erstellen</a>.
 </p>
diff --git a/simutrans/text/de/map.txt b/simutrans/text/de/map.txt
index 3c17c3b..8ec8c69 100644
--- a/simutrans/text/de/map.txt
+++ b/simutrans/text/de/map.txt
@@ -1,59 +1,59 @@
-<title>Kartenfenster Hilfe</title>
-
-<h1><strong>Kartenfenster</strong></h1>
-
-<p>
-Das Kartenfenster öffnest Du entweder mit dem <em>m</em> auf der Tastatur oder über das <em>Kartensymbol</em> in der Hauptmenüleiste.</p>
-<p>
-Die Reliefkarte zeigt die Welt mit allen Objekten wie Industrien, Verkehrswegen, Städten und Fahrzeugen. Du kannst schnell zu jedem beliebigen Ort auf der Karte springen, indem Du die Position in der Reliefkarte anklickst.</p>
-<p></p>
-<strong>Auswahl</strong>
-<p>
-Blendet die farbigen Schaltflächen ein, mit denen verschiedene Informationen in der Karte hervorgehoben werden können. Wenn nicht anders beschrieben, werden Anzeigen nach einem Farbschema von rot bis blau relativ zueinander eingefärbt.</p>
-<p>
-<em>Städtenamen</em> blendet die Städtenamen weiss in der Karte ein. (Kann auch durch Drücken der <em>Strg</em>-Taste erreicht werden.<br/>
-<em>Passagiere</em> markiert grob alle Gebiete in Spielerfarbe, welche im Einzugsgebiet von Haltestellen mit Personenverkehr liegen. Eine genaue Anzeige auf der Hauptkarte liefert die Taste <em>v</em>.<br/>
-<em>Post</em>markiert grob alle Gebiete in Spielerfarbe, welche im Einzugsgebiet von Haltestellen mit Briefkästen bzw. Postämtern liegen.<br/>
-<em>Fracht</em> zeigt, wieviel Fracht (Einheiten von Passagieren und Gütern) auf den Verkehrswegen transportiert wird.<br/>
-<em>Haltstatus</em> zeigt an, ob an einer Haltestelle unzufriedene Passagiere erzeugt werden. Die gleiche Anzeigefarbe wird auch in der <a href="haltlist.txt">Haltestellenliste</a> und im Statusbalken beim <a href="station.txt">Haltestellennamen</a> verwendet.<br/>
-<em>An-/Abfahrten</em> zeigt an, wieviele Fahrten zu und ab einer Haltestelle gegangen sind.<br/>
-<em>Verkehr</em> zeigt die Auslastung einer Strecke an.<br/>
-<em>Abfahrtsort</em> zeigt an, wieviele Waren und Personen diese Haltestelle als Ausgangspunkt haben.<br/>
-<em>Zielort</em> zeigt an, wieviele Waren und Personen diese Haltestelle als Endpunkt haben.<br/>
-<em>Wartend</em> zeigt an, wieviele Waren und Personen an einer Haltestelle auf Beförderung warten.<br/>
-<em>Gleistrassen</em> hebt Eisenbahnlinien weiß hervor; elektrifizierte Bahnstrecken werden braun hervorgehoben. Signale werden mit gelben Punkten markiert.<br/>
-<em>Tempolimit</em> zeigt Höchstgeschwindigkeiten auf Straßen und Schienen an.<br/>
-<em>Freileitungen</em> trägt die Hochspannungsleitungen in die Karte ein. Die Farbe kodiert die aktuelle Stromleistung beim öffnen der Karte (wird nicht automatisch aktualisiert!).<br/>
-<em>Attraktionen</em> vergrößert die eingetragenen Touristenattraktionen in der Karte und färbt sie nach ihrem Passagieraufkommen ein.<br/>
-<em>Fabriken</em> vergrößert die Anzeige der Industrien in der Karte.
-</p>
-<em>Depots</em> Hebt alle Depots in orange, gelb, rot und rosa hevor, je nach Wegtyp.
-<br/>
-<em>Wälder</em> Geschlossene Waldgebiete (mit mehr als zwei Bäumen pro Kachel) werden hellgrün hervorgehoben.
-<br/>
-<em>Stadtgrenzen:</em> Umrahmungen der Stadtgebiete, d.h. alle Gebiete, die zu einer Stadt direkt gehören.
-</p>
-<br/>
-<strong>Werteskala</strong>
-<p>
-Blendet den Balken ein, der die Farben zeigt, nach denen einige Objektauswahlen bestimmte Kartenbereiche entsprechend dem dargestellten Wert einfärben.</p>
-<br/>
-<strong>Industrieliste</strong>
-<p>
-Farbskala der Industrien.</p>
-<br/>
-<strong>Vergrößerung</strong>
-<p>Anzeige der Reliefkarte in 4 Stufen <em>Pfeilschalter</em> oder <em>Mausrad</em>.</p>
-<br/>
-<strong>Isometrische Anzeige:</strong>
-<p>
-Die Reliefkarte wird analog zur Spielfeld-Ausrichtung ausgerichtet.</p>
-<br/>
-<strong>Fabrikverbindungen:</strong>
-<p>
-<em>Abnehmer der Industrien</em> Mit der <em>Maus</em> auf eine Industrie zeigen (weisse Linien).<br/>
-<em>Zulieferer der Industrien</em> <em>Shift + mit der Maus</em> auf eine Industrie zeigen (rote Linien).<br/>
-Hinweis: Sollte nichts angezeigt werden, dann einmal in das Kartenfenster klicken.</p>
-<br/>
-<strong>Linienpläne</strong>
+<title>Kartenfenster Hilfe</title>
+
+<h1><strong>Kartenfenster</strong></h1>
+
+<p>
+Das Kartenfenster öffnest Du entweder mit dem <em>m</em> auf der Tastatur oder über das <em>Kartensymbol</em> in der Hauptmenüleiste.</p>
+<p>
+Die Reliefkarte zeigt die Welt mit allen Objekten wie Industrien, Verkehrswegen, Städten und Fahrzeugen. Du kannst schnell zu jedem beliebigen Ort auf der Karte springen, indem Du die Position in der Reliefkarte anklickst.</p>
+<p></p>
+<strong>Auswahl</strong>
+<p>
+Blendet die farbigen Schaltflächen ein, mit denen verschiedene Informationen in der Karte hervorgehoben werden können. Wenn nicht anders beschrieben, werden Anzeigen nach einem Farbschema von rot bis blau relativ zueinander eingefärbt.</p>
+<p>
+<em>Städtenamen</em> blendet die Städtenamen weiss in der Karte ein. (Kann auch durch Drücken der <em>Strg</em>-Taste erreicht werden.<br/>
+<em>Passagiere</em> markiert grob alle Gebiete in Spielerfarbe, welche im Einzugsgebiet von Haltestellen mit Personenverkehr liegen. Eine genaue Anzeige auf der Hauptkarte liefert die Taste <em>v</em>.<br/>
+<em>Post</em>markiert grob alle Gebiete in Spielerfarbe, welche im Einzugsgebiet von Haltestellen mit Briefkästen bzw. Postämtern liegen.<br/>
+<em>Fracht</em> zeigt, wieviel Fracht (Einheiten von Passagieren und Gütern) auf den Verkehrswegen transportiert wird.<br/>
+<em>Haltstatus</em> zeigt an, ob an einer Haltestelle unzufriedene Passagiere erzeugt werden. Die gleiche Anzeigefarbe wird auch in der <a href="haltlist.txt">Haltestellenliste</a> und im Statusbalken beim <a href="station.txt">Haltestellennamen</a> verwendet.<br/>
+<em>An-/Abfahrten</em> zeigt an, wieviele Fahrten zu und ab einer Haltestelle gegangen sind.<br/>
+<em>Verkehr</em> zeigt die Auslastung einer Strecke an.<br/>
+<em>Abfahrtsort</em> zeigt an, wieviele Waren und Personen diese Haltestelle als Ausgangspunkt haben.<br/>
+<em>Zielort</em> zeigt an, wieviele Waren und Personen diese Haltestelle als Endpunkt haben.<br/>
+<em>Wartend</em> zeigt an, wieviele Waren und Personen an einer Haltestelle auf Beförderung warten.<br/>
+<em>Gleistrassen</em> hebt Eisenbahnlinien weiß hervor; elektrifizierte Bahnstrecken werden braun hervorgehoben. Signale werden mit gelben Punkten markiert.<br/>
+<em>Tempolimit</em> zeigt Höchstgeschwindigkeiten auf Straßen und Schienen an.<br/>
+<em>Freileitungen</em> trägt die Hochspannungsleitungen in die Karte ein. Die Farbe kodiert die aktuelle Stromleistung beim öffnen der Karte (wird nicht automatisch aktualisiert!).<br/>
+<em>Attraktionen</em> vergrößert die eingetragenen Touristenattraktionen in der Karte und färbt sie nach ihrem Passagieraufkommen ein.<br/>
+<em>Fabriken</em> vergrößert die Anzeige der Industrien in der Karte.
+</p>
+<em>Depots</em> Hebt alle Depots in orange, gelb, rot und rosa hevor, je nach Wegtyp.
+<br/>
+<em>Wälder</em> Geschlossene Waldgebiete (mit mehr als zwei Bäumen pro Kachel) werden hellgrün hervorgehoben.
+<br/>
+<em>Stadtgrenzen:</em> Umrahmungen der Stadtgebiete, d.h. alle Gebiete, die zu einer Stadt direkt gehören.
+</p>
+<br/>
+<strong>Werteskala</strong>
+<p>
+Blendet den Balken ein, der die Farben zeigt, nach denen einige Objektauswahlen bestimmte Kartenbereiche entsprechend dem dargestellten Wert einfärben.</p>
+<br/>
+<strong>Industrieliste</strong>
+<p>
+Farbskala der Industrien.</p>
+<br/>
+<strong>Vergrößerung</strong>
+<p>Anzeige der Reliefkarte in 4 Stufen <em>Pfeilschalter</em> oder <em>Mausrad</em>.</p>
+<br/>
+<strong>Isometrische Anzeige:</strong>
+<p>
+Die Reliefkarte wird analog zur Spielfeld-Ausrichtung ausgerichtet.</p>
+<br/>
+<strong>Fabrikverbindungen:</strong>
+<p>
+<em>Abnehmer der Industrien</em> Mit der <em>Maus</em> auf eine Industrie zeigen (weisse Linien).<br/>
+<em>Zulieferer der Industrien</em> <em>Shift + mit der Maus</em> auf eine Industrie zeigen (rote Linien).<br/>
+Hinweis: Sollte nichts angezeigt werden, dann einmal in das Kartenfenster klicken.</p>
+<br/>
+<strong>Linienpläne</strong>
 <p>Bei geöffneter <a href="linemanagement.txt">Linienverwaltung</a> wird die dort markierte Linie in der Reliefkarte angezeigt.</p>
diff --git a/simutrans/text/de/monorailtools.txt b/simutrans/text/de/monorailtools.txt
index 76f588d..83822d2 100644
--- a/simutrans/text/de/monorailtools.txt
+++ b/simutrans/text/de/monorailtools.txt
@@ -1,15 +1,15 @@
-<title>Monorailbau Hilfe</title>
-
-<h1><strong>Monorailbauwerkzeuge</strong></h1>
-
-<p>
-Diese Werkzeugleiste dient dem Bau von Monorailgleisen, Brücken, usw. Wird Simutrans in einem kleineren Fenster gespielt, können die letzten Symbole auf die nächste Zeile umgebrochen sein.
-Bei der Auswahl eines Werkzeuges verwandelt sich der Cursor in das jeweilige Symbol.
-</p>
-<p>
-<p>
-<em>Monorails</em> gibt es im Unterschied zur normalen <a href="railtools.txt">Eisenbahn</a> auch als Hochbahn. Sie lässt sich über einstöckige Häuser und oberhalb von Straßen bis in die Innenstädte legen.
-Um ein Hochbahngleis mit einem ebenerdigen zu verbinden, baut man eine Brücke. <em>Hinweis:</em> Die Possitionierung der Maus bei Hochbahnen erfolgt auf dem Feld darunter.</p>
-<p>
-Für die weiteren Erläuterungen siehe die <a href="railrools.txt">Eisenbahnbauwerkzeuge</a>.
+<title>Monorailbau Hilfe</title>
+
+<h1><strong>Monorailbauwerkzeuge</strong></h1>
+
+<p>
+Diese Werkzeugleiste dient dem Bau von Monorailgleisen, Brücken, usw. Wird Simutrans in einem kleineren Fenster gespielt, können die letzten Symbole auf die nächste Zeile umgebrochen sein.
+Bei der Auswahl eines Werkzeuges verwandelt sich der Cursor in das jeweilige Symbol.
+</p>
+<p>
+<p>
+<em>Monorails</em> gibt es im Unterschied zur normalen <a href="railtools.txt">Eisenbahn</a> auch als Hochbahn. Sie lässt sich über einstöckige Häuser und oberhalb von Straßen bis in die Innenstädte legen.
+Um ein Hochbahngleis mit einem ebenerdigen zu verbinden, baut man eine Brücke. <em>Hinweis:</em> Die Possitionierung der Maus bei Hochbahnen erfolgt auf dem Feld darunter.</p>
+<p>
+Für die weiteren Erläuterungen siehe die <a href="railrools.txt">Eisenbahnbauwerkzeuge</a>.
 </p>
diff --git a/simutrans/text/de/new_world.txt b/simutrans/text/de/new_world.txt
index fc38b08..66220b3 100644
--- a/simutrans/text/de/new_world.txt
+++ b/simutrans/text/de/new_world.txt
@@ -1,84 +1,84 @@
-<title>Neue Welt Hilfe</title>
-
-<h1><strong>Erstelle eine neue Welt</strong></h1>
-
-<p>
-Der Neue Welt-Dialog erscheint bei jedem Spielstart. Im laufenden Spiel kann man ihn nach dem Anwählen der Schaltfläche <em>Neue Karte</em> im Dialog <a href="options.txt">Einstellungen</a> aufrufen.
-Dieser wird mit dem <em>Diskettensymbol</em> in der <a href="mainmenu.txt">Hauptmenüleiste</a> geöffnet.
-</p>
-<p>
-Im Dialog werden die Parameter eingestellt, die für die Generierung der Karte gelten sollen.
-Die Einstellungen erfolgen über die Pfeilschaltflächen der Einstelloptionen.
-Ein Klick auf einen Pfeil nach links verringert, ein Klick auf einen Pfeil nach rechts erhöht den entsprechenden Wert.
-</p>
-<p>
-<strong>Einstellungen für neue Karte:</strong>
-</p>
-<p>
-· <em>Kartennummer: </em> Es stehen 10.000 Simutrans-Karten zur Auswahl. Über sie werden die groben Strukturen der Welt festgelegt.
-</p>
-<p>
-· <em>Vorschaubild:</em> Das Bild zeigt die ausgewählte Karte und aktualisiert sich bei jeder Änderung der Kartenparameter.
-</p>
-<p>
-· <em>Kartengröße:</em> Wähle mit den Pfeilschalter, welche Abmessungen die Karte haben soll. Die obere Zahl gibt die Breite (x-Richtung), die untere die Höhe (y-Richtung) der Karte an. Die Einstellbereiche liegen zwischen 64 bis 4096. Der Vorgabewert ist 256x256. Unterscheiden sich die Werte, wird das Vorschaubild verzerrt dargestellt.
-<br/>Die Angabe in Klammern zeigt Dir, wieviel Arbeitsspeicher ein Spiel der eingestellten Kartengröße mindestens belegen wird.
-</p>
-<p>
-· <em>Zufallskarte:</em> Wähle eine zufällige Karte aus. Die oben gemachten Einstellungen werden nicht verändert.
-</p>
-<p>
-· <em>Lade Relief:</em> Die getroffenen Einstellungen werden anstatt auf die angezeigte Karte auf ein im Verzeichnis <em>simutrans/save</em> gespeichertes Relief übertragen. Der <a href="load_relief.txt">Relief laden</a> Dialog wird eingeblendet.
-</p>
-<p>
-· <em>Anzahl Städte:</em> Bestimmt die Anzahl der Städte auf der Karte. Der Vorgabewert ist 16. Ist eine Karte zu rauh, oder ist die Zahl der Städte zu hoch, werden weniger als die eingestellte Anzahl von Städten generiert. (Der Mindestabstand der Städte ist in der Datei <em>simutrans/config/cityrules.tab</em> als Wert der Variablen <em>minimum_city_distance</em> angegeben).
-</p>
-<p>
-· <em>Mittlere Stadtgröße:</em> Der Wert stellt eine mittlere Bezugsgröße dar. Beim Vorgabewert von 1600 bei 16 Städten werden ca. eine Stadt mit 8000-16000 Einwohnern, ein oder zwei mit 1000-5000 und die übrigen mit 200-600 generiert. Es ist durchaus erwünscht, dass immer mal wieder auch einige sehr große Städte erzeugt werden.
-</p>
-<p>
-· <em>Verbindungsstraßenlänge:</em> An Anfang werden alle Städte miteinander verbunden, wenn dies mit einer Straße kleiner als die angegebenen Zahl möglich ist. Dabei ist eine gerade Straße 2 Einheiten teuer, Kurven und Steigungen mehr.
-</p>
-<p>
-· <em>Verkehrsdichte:</em> Dieser Wert beeinflusst die Anzahl der privaten PKWs in den Städten.
-</p>
-<p>
-· <em>Industriezweige:</em> Der Wert gibt an, wieviele Industriezweige beim Kartenstart  erzeugt werden sollen. Durch das Wachstum von Städten werden weitere Industriezweige erzeugt. Wann jeweils ein neuer Industriezweige erzeugt wird, regelt der Wert der Variablen <em>industry_increase_every</em> in der <em>simutrans/config/cityrules.tab</em>. Der dortige Vorgabewert 2000 bedeutet, dass jeweils, wenn eine Stadt die Grösse von 2000, 4000, 8000 usw. Einwohnern erreicht, ein neuer Industriezweig entsteht. Mit dem Wert 0 wird die Errichtung neuer Industriezweige ausgeschaltet.
-</p>
-<p>
-· <em>Anteil Kraftwerke (%):</em> Der Wert gibt an, wieviel Prozent der Industriezweige aus Kraftwerken bestehen.
-<br />
-Die Vielfalt an Industriezweigen kann durch Ergänzungspaks erhöht werden.
-</p>
-<p>
-· <em>Touristenattraktionen:</em> Stelle die Anzahl von Ausflugszielen wie Burgen, Jahrmarktattraktionen usw. ein.
-</p>
-<p>
-· <em>Mit Einführungsdaten ab:</em> Drücke den Schalter ein, wenn Fahrzeuge und Gebäude erst ab ihrem Entwicklungsjahr verfügbar sein sollen. Das Startjahr wird mit den beiden Pfeilschaltern geändern. Die Vorgabe ist in der <em>simutrans/config/simuconf.tab</em> als Wert der Variablen <em>starting_year</em> eingetragen. Sinnvolle Werte sind z.B. 1910, 1930, 1950. Vor 1835 gibt es nur Pferdefuhrwerke.
-</p>
-<p>
-· <em>Erlaube Spielerwechsel:</em> Bestimme, ob während des Spiels der Spieler gewechselt werden darf. Diese Einstellung ist nachher nicht mehr zu ändern!
-</p>
-<p>
-· <em>Anfängermodus:</em> In diesem Modus liefern alle Fabriken an alle geeigneten Abnehmer für diese Waren. Außerdem sind die Frachtgewinne um den Faktor 1,5 erhöht.
-</p>
-<p>
-· <em>Lade Spiel:</em> Lade einen bereits vorhandenen Spielstand. (siehe <a href="load.txt">Lade Menü</a>)
-<br/>
-<strong>Achtung:</strong> Der laufende Spielstand wird nicht gespeichert und geht verloren.
-</p>
-<p>
-· <em>Lade Szenario:</em> Es stehen verschiedene Szenarien zur Auswahl. (siehe <a href="scenario.txt">Szenario Menü</a>)
-<br/>
-<strong>Achtung:</strong> Der laufende Spielstand wird nicht gespeichert und geht verloren.
-</p>
-<p>
-· <em>Starte Spiel:</em> Eine neue Karte wird entsprechend den Einstellungen generiert, und ein neues Spiel startet.
-<br/>
-<strong>Achtung:</strong> Der laufende Spielstand wird nicht gespeichert und geht verloren.
-</p>
-<p>
-· <em>Beenden:</em> Das Spiel wird beendet.
-<br/>
-<strong>Achtung:</strong> Der laufende Spielstand wird nicht gespeichert und geht verloren.
+<title>Neue Welt Hilfe</title>
+
+<h1><strong>Erstelle eine neue Welt</strong></h1>
+
+<p>
+Der Neue Welt-Dialog erscheint bei jedem Spielstart. Im laufenden Spiel kann man ihn nach dem Anwählen der Schaltfläche <em>Neue Karte</em> im Dialog <a href="options.txt">Einstellungen</a> aufrufen.
+Dieser wird mit dem <em>Diskettensymbol</em> in der <a href="mainmenu.txt">Hauptmenüleiste</a> geöffnet.
+</p>
+<p>
+Im Dialog werden die Parameter eingestellt, die für die Generierung der Karte gelten sollen.
+Die Einstellungen erfolgen über die Pfeilschaltflächen der Einstelloptionen.
+Ein Klick auf einen Pfeil nach links verringert, ein Klick auf einen Pfeil nach rechts erhöht den entsprechenden Wert.
+</p>
+<p>
+<strong>Einstellungen für neue Karte:</strong>
+</p>
+<p>
+· <em>Kartennummer: </em> Es stehen 10.000 Simutrans-Karten zur Auswahl. Über sie werden die groben Strukturen der Welt festgelegt.
+</p>
+<p>
+· <em>Vorschaubild:</em> Das Bild zeigt die ausgewählte Karte und aktualisiert sich bei jeder Änderung der Kartenparameter.
+</p>
+<p>
+· <em>Kartengröße:</em> Wähle mit den Pfeilschalter, welche Abmessungen die Karte haben soll. Die obere Zahl gibt die Breite (x-Richtung), die untere die Höhe (y-Richtung) der Karte an. Die Einstellbereiche liegen zwischen 64 bis 4096. Der Vorgabewert ist 256x256. Unterscheiden sich die Werte, wird das Vorschaubild verzerrt dargestellt.
+<br/>Die Angabe in Klammern zeigt Dir, wieviel Arbeitsspeicher ein Spiel der eingestellten Kartengröße mindestens belegen wird.
+</p>
+<p>
+· <em>Zufallskarte:</em> Wähle eine zufällige Karte aus. Die oben gemachten Einstellungen werden nicht verändert.
+</p>
+<p>
+· <em>Lade Relief:</em> Die getroffenen Einstellungen werden anstatt auf die angezeigte Karte auf ein im Verzeichnis <em>simutrans/save</em> gespeichertes Relief übertragen. Der <a href="load_relief.txt">Relief laden</a> Dialog wird eingeblendet.
+</p>
+<p>
+· <em>Anzahl Städte:</em> Bestimmt die Anzahl der Städte auf der Karte. Der Vorgabewert ist 16. Ist eine Karte zu rauh, oder ist die Zahl der Städte zu hoch, werden weniger als die eingestellte Anzahl von Städten generiert. (Der Mindestabstand der Städte ist in der Datei <em>simutrans/config/cityrules.tab</em> als Wert der Variablen <em>minimum_city_distance</em> angegeben).
+</p>
+<p>
+· <em>Mittlere Stadtgröße:</em> Der Wert stellt eine mittlere Bezugsgröße dar. Beim Vorgabewert von 1600 bei 16 Städten werden ca. eine Stadt mit 8000-16000 Einwohnern, ein oder zwei mit 1000-5000 und die übrigen mit 200-600 generiert. Es ist durchaus erwünscht, dass immer mal wieder auch einige sehr große Städte erzeugt werden.
+</p>
+<p>
+· <em>Verbindungsstraßenlänge:</em> An Anfang werden alle Städte miteinander verbunden, wenn dies mit einer Straße kleiner als die angegebenen Zahl möglich ist. Dabei ist eine gerade Straße 2 Einheiten teuer, Kurven und Steigungen mehr.
+</p>
+<p>
+· <em>Verkehrsdichte:</em> Dieser Wert beeinflusst die Anzahl der privaten PKWs in den Städten.
+</p>
+<p>
+· <em>Industriezweige:</em> Der Wert gibt an, wieviele Industriezweige beim Kartenstart  erzeugt werden sollen. Durch das Wachstum von Städten werden weitere Industriezweige erzeugt. Wann jeweils ein neuer Industriezweige erzeugt wird, regelt der Wert der Variablen <em>industry_increase_every</em> in der <em>simutrans/config/cityrules.tab</em>. Der dortige Vorgabewert 2000 bedeutet, dass jeweils, wenn eine Stadt die Grösse von 2000, 4000, 8000 usw. Einwohnern erreicht, ein neuer Industriezweig entsteht. Mit dem Wert 0 wird die Errichtung neuer Industriezweige ausgeschaltet.
+</p>
+<p>
+· <em>Anteil Kraftwerke (%):</em> Der Wert gibt an, wieviel Prozent der Industriezweige aus Kraftwerken bestehen.
+<br />
+Die Vielfalt an Industriezweigen kann durch Ergänzungspaks erhöht werden.
+</p>
+<p>
+· <em>Touristenattraktionen:</em> Stelle die Anzahl von Ausflugszielen wie Burgen, Jahrmarktattraktionen usw. ein.
+</p>
+<p>
+· <em>Mit Einführungsdaten ab:</em> Drücke den Schalter ein, wenn Fahrzeuge und Gebäude erst ab ihrem Entwicklungsjahr verfügbar sein sollen. Das Startjahr wird mit den beiden Pfeilschaltern geändern. Die Vorgabe ist in der <em>simutrans/config/simuconf.tab</em> als Wert der Variablen <em>starting_year</em> eingetragen. Sinnvolle Werte sind z.B. 1910, 1930, 1950. Vor 1835 gibt es nur Pferdefuhrwerke.
+</p>
+<p>
+· <em>Erlaube Spielerwechsel:</em> Bestimme, ob während des Spiels der Spieler gewechselt werden darf. Diese Einstellung ist nachher nicht mehr zu ändern!
+</p>
+<p>
+· <em>Anfängermodus:</em> In diesem Modus liefern alle Fabriken an alle geeigneten Abnehmer für diese Waren. Außerdem sind die Frachtgewinne um den Faktor 1,5 erhöht.
+</p>
+<p>
+· <em>Lade Spiel:</em> Lade einen bereits vorhandenen Spielstand. (siehe <a href="load.txt">Lade Menü</a>)
+<br/>
+<strong>Achtung:</strong> Der laufende Spielstand wird nicht gespeichert und geht verloren.
+</p>
+<p>
+· <em>Lade Szenario:</em> Es stehen verschiedene Szenarien zur Auswahl. (siehe <a href="scenario.txt">Szenario Menü</a>)
+<br/>
+<strong>Achtung:</strong> Der laufende Spielstand wird nicht gespeichert und geht verloren.
+</p>
+<p>
+· <em>Starte Spiel:</em> Eine neue Karte wird entsprechend den Einstellungen generiert, und ein neues Spiel startet.
+<br/>
+<strong>Achtung:</strong> Der laufende Spielstand wird nicht gespeichert und geht verloren.
+</p>
+<p>
+· <em>Beenden:</em> Das Spiel wird beendet.
+<br/>
+<strong>Achtung:</strong> Der laufende Spielstand wird nicht gespeichert und geht verloren.
 </p>
diff --git a/simutrans/text/de/options.txt b/simutrans/text/de/options.txt
index 9cb3232..4329835 100644
--- a/simutrans/text/de/options.txt
+++ b/simutrans/text/de/options.txt
@@ -1,30 +1,30 @@
-<title>Einstellungen Hilfe</title>
-
-<h1><strong>Einstellungen, Laden, Speichern</strong></h1>
-
-<p>
-Der Dialog Einstellungen ist zweigeteilt. Auf der linken Seite befinden sich die Spieleinstellungen.
-Auf der rechten Seite kannst Du Spielstände laden, speichern, eine neue Karte starten sowie das Spiel beenden.
-</p>
-<p>
-·<a href="language.txt"><em>Sprache</em></a>: Wähle die Sprache, welche Simutrans nutzen soll. Die Sprachdateien befinden sich im Verzeichnis simutrans/text. In den Unterverzeichnissen sind die Hilfetexte der Sprachen abgelegt.
-<br>
-·<a href="color.txt"><em>Spielerfarbe</em></a>: Einstellen der eigenen Spielerfarbe.
-<br>
-·<a href="display.txt"><em>Anzeige</em></a>: Einstellungen für Grafik und Maus sowie Angaben über die Auslastung des Computers.
-<br>
-·<a href="sound.txt"><em>Sound</em></a>: Einstellungen für Sound und Musik.
-<br>
-·<a href="players.txt"><em>Spieler</em></a>: Stelle die Anzahl der Computerspieler ein.
-</p>
-<p>
-·<a href="load.txt"><em>Laden</em></a>: Spielstand laden.
-<br>
-·<a href="save.txt"><em>Speichern</em></a>: Spielstand speichern.
-<br>
-·<a href="new_world.txt"><em>Neue Karte</em></a>: Starte eine neue Karte.
-</p>
-<p>
-· <em>Beenden</em>: Das Spiel wird beendet (ohne den Spielstand zu sichern).
-<br>
+<title>Einstellungen Hilfe</title>
+
+<h1><strong>Einstellungen, Laden, Speichern</strong></h1>
+
+<p>
+Der Dialog Einstellungen ist zweigeteilt. Auf der linken Seite befinden sich die Spieleinstellungen.
+Auf der rechten Seite kannst Du Spielstände laden, speichern, eine neue Karte starten sowie das Spiel beenden.
+</p>
+<p>
+·<a href="language.txt"><em>Sprache</em></a>: Wähle die Sprache, welche Simutrans nutzen soll. Die Sprachdateien befinden sich im Verzeichnis simutrans/text. In den Unterverzeichnissen sind die Hilfetexte der Sprachen abgelegt.
+<br>
+·<a href="color.txt"><em>Spielerfarbe</em></a>: Einstellen der eigenen Spielerfarbe.
+<br>
+·<a href="display.txt"><em>Anzeige</em></a>: Einstellungen für Grafik und Maus sowie Angaben über die Auslastung des Computers.
+<br>
+·<a href="sound.txt"><em>Sound</em></a>: Einstellungen für Sound und Musik.
+<br>
+·<a href="players.txt"><em>Spieler</em></a>: Stelle die Anzahl der Computerspieler ein.
+</p>
+<p>
+·<a href="load.txt"><em>Laden</em></a>: Spielstand laden.
+<br>
+·<a href="save.txt"><em>Speichern</em></a>: Spielstand speichern.
+<br>
+·<a href="new_world.txt"><em>Neue Karte</em></a>: Starte eine neue Karte.
+</p>
+<p>
+· <em>Beenden</em>: Das Spiel wird beendet (ohne den Spielstand zu sichern).
+<br>
 </p>
diff --git a/simutrans/text/de/players.txt b/simutrans/text/de/players.txt
index d2e27fc..6744ae2 100644
--- a/simutrans/text/de/players.txt
+++ b/simutrans/text/de/players.txt
@@ -1,24 +1,24 @@
-<title>Spieler Hilfe</title>
-
-<h1><strong>Spieler Menü</strong></h1>
-
-<p>
-Im Spieler-Menü kannst Du bestimmen, wie viele Computergegner mitspielen sollen.
-Drücke für jeden KI-Spieler, der am Spiel beteiligt sein soll, den Schalter ein.
-Er wird sich alsbald auf die Suche nach neuen Transportmöglichkeiten machen und eigene Linien eröffnen.
-Wenn Du den KI-Spieler wieder deaktivierst, wird er keine neuen Verbindungen mehr suchen, den bisherigen Betrieb aber weiterführen.<br>
-Die öffentliche Hand kümmert sich nur um den Ausbau der Städte.<br>
-<em>KI-Spieler:</em> Die Firmennamen der KI-Spieler stehen auf Schaltflächen, die die Spielerfarben des entsprechenden KI-Spielers tragen.
-Drücke eine dieser Schaltflächen, um dessen <a href="finances.txt">Finanzfenster</a> einzusehen.
-Das aktuelle Barvermögen der KI-Spieler wird rechts angezeigt.
-</p>
-
-<p>
-<strong>Taktiken der KI-Spieler:</strong>
-<br/>· <em>KI 1, Napik 128 AS</em> wird nie die Eisenbahn nutzen.
-<br/>· <em>KI 2, Tikky Transport</em> befördert ausschließlich Passagiere.
-<br/>· <em>KI 3, Meyer Moving Co.</em> transportiert Güter mit maximaler Effizienz.
-<br/>· <em>KI 4, Spedition VM</em> transportiert Güter mit maximaler Effizienz.
-<br/>· <em>KI 5, H-Trans GmbH</em> transportiert Güter mit maximaler Effizienz.
-<br/>· <em>KI 6, PSK & Co KG</em> nutzt niemals den Straßentransport.
+<title>Spieler Hilfe</title>
+
+<h1><strong>Spieler Menü</strong></h1>
+
+<p>
+Im Spieler-Menü kannst Du bestimmen, wie viele Computergegner mitspielen sollen.
+Drücke für jeden KI-Spieler, der am Spiel beteiligt sein soll, den Schalter ein.
+Er wird sich alsbald auf die Suche nach neuen Transportmöglichkeiten machen und eigene Linien eröffnen.
+Wenn Du den KI-Spieler wieder deaktivierst, wird er keine neuen Verbindungen mehr suchen, den bisherigen Betrieb aber weiterführen.<br>
+Die öffentliche Hand kümmert sich nur um den Ausbau der Städte.<br>
+<em>KI-Spieler:</em> Die Firmennamen der KI-Spieler stehen auf Schaltflächen, die die Spielerfarben des entsprechenden KI-Spielers tragen.
+Drücke eine dieser Schaltflächen, um dessen <a href="finances.txt">Finanzfenster</a> einzusehen.
+Das aktuelle Barvermögen der KI-Spieler wird rechts angezeigt.
+</p>
+
+<p>
+<strong>Taktiken der KI-Spieler:</strong>
+<br/>· <em>KI 1, Napik 128 AS</em> wird nie die Eisenbahn nutzen.
+<br/>· <em>KI 2, Tikky Transport</em> befördert ausschließlich Passagiere.
+<br/>· <em>KI 3, Meyer Moving Co.</em> transportiert Güter mit maximaler Effizienz.
+<br/>· <em>KI 4, Spedition VM</em> transportiert Güter mit maximaler Effizienz.
+<br/>· <em>KI 5, H-Trans GmbH</em> transportiert Güter mit maximaler Effizienz.
+<br/>· <em>KI 6, PSK & Co KG</em> nutzt niemals den Straßentransport.
 </p>
diff --git a/simutrans/text/de/railtools.txt b/simutrans/text/de/railtools.txt
index 5f4df9b..7e8479b 100644
--- a/simutrans/text/de/railtools.txt
+++ b/simutrans/text/de/railtools.txt
@@ -1,64 +1,64 @@
-<title>Eisenbahnbau Hilfe</title>
-
-<h1><strong>Eisenbahnbauwerkzeuge</strong></h1>
-
-<p>
-Diese Werkzeugleiste dient dem Bau von Eisenbahngleisen, Fahrleitungen, Brücken, Tunneln, Signalen, Depots und Bahnhöfen. Wird Simutrans in einem kleineren Fenster gespielt, können die letzten Symbole auf die nächste Zeile umgebrochen sein. Bei der Auswahl eines Werkzeuges verwandelt sich der Cursor in das jeweilige Symbol.
-</p>
-<p>
-<em>Gleise</em> können mit unterschiedlichen Höchstgeschwindigkeiten befahren werden. Ist die Timeline aktiviert, werden Gleise mit schnellerer Höchstgeschwindigkeit erst nach und nach verfügbar. Höchstgeschwindigkeit und Baukosten werden in den Tooltips angezeigt. Der Abriss kostet genausoviel wie das Bauen; einzige Ausname ist, wenn direkt nach einer Bauaktion, die Taste z für Rückgängigmachen betätigt wurde (siehe weiter unten).<br/>
-Simutrans benutzt nur leere Felder oder bereits vorhandene Gleise. Brücken, Tunnel, Straßen usw. werden nicht benutzt. Allerdings werden automatisch Bahnübergänge gebaut. Am Hang kann nur in Neigungsrichtung gebaut werden.<br/>
-Beim ersten Platzieren des Gleisbauwerkzeuges in der Weltkarte wird der Anfang der Strecke festgelegt, beim zweiten der Endpunkt. Das Spiel baut zwischen beiden Punkten die kürzestmögliche Strecke.
-Wenn keine Verbindung gefunden wird, passiert nach dem Anklicken des Endpunktes nichts.
-Eine Bauaktion lässt sich mittels <em>z</em> gratis rückgängig machen (ohne Baukostenerstattung), solange nichts anderes gebaut wurde.<br/>
-<em>Hinweis:</em> Um eine diagonale Strecke oder parallel zu einem bestehenden Gleis zu bauen, beim zweiten Klick die <em>Ctrl</em>(<em>Strg</em>)-Taste gedrückt halten.
-</p>
-<p>
-<em>Fahrleitungen</em> sind zum Betrieb von E-Loks und Trams notwendig. Im <a href="depot.txt">Depotfenster</a> werden verfügbare E-Loks bzw. Trams nur angezeigt, wenn der Block des Depots elektrifiziert ist.
-Die Linienstrecken, welche von E-Loks bzw. Trams befahren werden sollen, musst Du komplett elektrifizieren, da die E-Konvois ansonsten keinen Weg finden. Sie verlassen dann das Depot nicht oder bleiben am letzten Linienpunkt vor der Fehlersituation stehen. </br>
-Das Fahrleitungswerkzeug funktioniert ähnlich wie das Gleisbauwerkzeug. Der erste Klick definierte den Startpunkt und der zweite Klick den Endpunkt. (Dabei beachtet das Werkzeug allerdings alle Einrichtungssignale!)
-</p>
-<p>
-<em>Eisenbahnbrücken</em> beginnen immer an Gleisenden. Für das Brückenende sucht Simutrans in der geraden Weiterführung des Gleisendes ein vorhandenes Gleisende, welches in die Richtung des Anfangspunktes weist.
-Wird eine passende Hanglage vorgefunden, so wird die Brücke an sie angelehnt.
-Das weiter führende Gleis kann in dem Fall auch nachträglich gebaut werden, muss aber bis auf das Brückenende gebaut werden.
-Um eine Brücke an einem Hang beginnen zu lassen, das Gleis bis auf den Hang bauen und dann das Brückenbauwerkzeug benutzen. (In neueren Versionen kann eine Brücke auch an einer senkrechten Wand enden. Dazu sollte vorher dort schon eine Schiene gelegt worden sein.)
-</p>
-<p>
-<em>Eisenbahntunnel</em> können nur gerade und nur in einer Höhenebene gebaut werden.
-Als Startpunkt des Tunnels muss das Gleisende in einer Hanglage enden. Setze das Tunnelbauwerkzeug auf das Gleisstück in der Hanglage. Der Tunnel wird komplett gebaut, wenn Simutrans in der gegenüberliegneden Bergflanke eine gerade Hanglage vorfindet. Der Gleisbau ist dann auf dem Tunnelausgang fortzusetzen.
-Erhältst Du eine Hinweismeldung, war das gegenüberliegende Hangstück nicht gerade oder ist bebaut.
-Eine wichtige Bauhilfe stellt die Nutzung des Gitternetzes dar (in der größten Kartenansicht schaltet die Taste <em>#</em> es ein und aus); mit ihm lässt sich der Durchstoßpunkt besser finden.<br>
-Willst du nur ein Tunnelportal bauen, dann kannst du einen Ctrl (Strg)+Mausklick machen. Danach kann du dann in den Untergrundmodus wechseln (mit <em>U</em> oder unter <a href="display.txt">Anzeigeeinstellungen</a>) und mit dem Tunnelwerkzeug weitere Strecken bauen.
-</p>
-<p>
-<em>Signale</em> werden genutzt, um die Bewegungen der Züge zu kontrollieren. Erreicht ein Zug ein Signal, dann bekommt er nur grün, wenn die Strecke bis zum nächsten Signal auf seiner Route frei ist und auch kein Zug dort hinfahren wird. Ein anderer Zug kann aber durchaus parallel dazu fahren. <strong>ACHTUNG:</strong> Wegpunkte und Bahnhöfe sind damit sozusagen unsichtbare Signale, denn ein Zug reserviert die Strecke nur bis zu diesen. Soll tatsächlich wirklich die Strecke bis zum nächsten Signal reserviert werden, müssen Langstreckensignale (s.u.) verwendet werden!
-<br> <br/>
-<em>Signalbau</em> Signale können nur auf Gleisen gebaut werden, aber nicht auf Kreuzungen. Beim Bau eines Signals wird auf jeder Gleisseite ein Signal aufgestellt. Die Strecke kann in beiden Richtungen befahren werden. Klickst Du die Platzierungsstelle erneut mit dem Signalwerkzeug an, wird ein Signal entfernt, die Strecke kann nur in Signalrichtung befahren werden.
-In der Regel befinden sich die Signale in Simutrans rechts vom Gleis. Beim nächsten Klick auf die Positionierungsstelle wird ein Signal auf der Gegenseite plaziert. Die Strecke kann nun nur in der Gegenrichtung befahren werden. Beim nächsten Klick erscheinen wieder beide Signale, die Strecke ist wieder in beide Richtungen befahrbar.
-<br/> <br/>
-<em>Wegfindung</em> Wurden auf einer Strecke Richtungssignale in der verkehrten Richtung aufgestellt, können die Züge der Linie keinen Weg finden und verlassen das Depot oder den Bahnhof nicht bzw. bleiben am letzten Linienpunkt vor dem nicht passierbaren Signal stehen. Es ist somit empfehlenswert, dem Verhalten der Züge auf neu eingerichteten Strecken anfänglich etwas erhöhte Aufmerksamkeit zu widmen.
-<br/> <br/>
-<em>Blocksicherung</em> Die Grundstellung von Signalen bei Simutrans ist "Halt" (rotes Signal).
-Fährt ein Zug in einen Blockabschnitt ein, schalten die Signale auf "Fahrt" (Grünes Licht) wenn die Strecke frei ist. Ein nachfolgender Zug bleibt vor dem Halt zeigenden Signal stehen. Hat der letzte Wagen das Signal passiert, gibt der Achszähler den Block wieder frei, das rückliegende Signal schaltet wieder auf "Halt". Der nächste Zug kann den Block befahren.
-<br/> <br/>
-<em>Zweiblocksicherung</em> Zwei-Block-Signale (Streckenabschnittssignale) geben die Fahrt erst frei, wenn für einen Zug die nächsten 2 Signale frei sind. Sie sind prädestiniert für verschiedene Deckungsaufgaben.
-Als Einfahrsignale regeln sie, dass ankommende Züge den Weichenbereich nicht befahren, solange sich noch ein Zug im Bahnhofsblock befindet. Bei mehrgleisigen Kreuzungen kannst Du durch Zwei-Block-Signalen erreichen, dass Züge erst dann den Kreuzungsbereich befahren, wenn danach noch 1 Block frei ist. So vermeidest Du Situationen, in denen Züge auf Kreuzungen stehen bleiben.
-<br/> <br/>
-<em>Auswahlsignale</em> Auswahlsignale (Einfahrtsignale) geben die Fahrt erst frei, wenn sie für einen Zug einen freien Weg bis zum nächsten Bahnhof reservieren konnte. Dabei wählt er aus allen erreichbaren Bahnsteigen den nächsten aus, wenn der ausgewählte besetzt ist. ACHTUNG: Ein Zug bleibt solange vor einem Auswahlsignal stehen, bis seine ganze Strecke bis zum nächsten Ziel frei ist! Man kann das umgehen, indem man für Züge, wo dies nicht erwünscht ist, einen Wegpunkt hinter das Auswahlsignal setzt.
-<br/> <br/>
-<em>Langstreckensignale</em> geben die Fahrt erst frei, wenn sie für einen Zug einen freien Weg bis zum nächsten Signal (auch durch mehrere Bahnhöfe hinweg) reservieren konnten. Dies ist z.B. für lange eingleisige Abschnitte nötig.
-</p>
-<p>
-Im <em>Depot</em> kannst Du Züge zusammenstellen sowie Linien einrichten und die Züge nach der Zuordnung zu Linien starten. Das Depot kann nur auf einem ebenen Gleisende platziert werden.
-Für E-Loks muss das Gleis zudem elektrifiziert sein. (siehe <a href="depot.txt">Depotfenster</a>)
-</p>
-<p>
-<em>Bahnhöfe</em> sind detailiert in der Hilfe zum <a href="station.txt">Haltestellenfenster</a> beschrieben. Die verschiedenen Haltestellengrafiken können die Haltestelle veranlassen, Passagiere, Post oder Güter umzuschlagen; es macht später jedoch keinen Unterschied mehr, auf welcher Grafik welcher Zug hält, er wird immer be- und entladen, wenn die Station für den Umschlag eingerichtet ist.
-</p>
-<p>
-<em>Bahnhofseingang und -vorpatz</em> können verwendet werden, wenn der Bahnhof auf erhöhtem Gelände mit Mauer gebaut ist. Sie werden vor die Mauer gebaut. Sie gehören zu den Nebengebäuden.
-</p>
-<p>
-<em>Nebengebäude</em> siehe <a href="special.txt">Spezialbauwerkzeuge</a>
+<title>Eisenbahnbau Hilfe</title>
+
+<h1><strong>Eisenbahnbauwerkzeuge</strong></h1>
+
+<p>
+Diese Werkzeugleiste dient dem Bau von Eisenbahngleisen, Fahrleitungen, Brücken, Tunneln, Signalen, Depots und Bahnhöfen. Wird Simutrans in einem kleineren Fenster gespielt, können die letzten Symbole auf die nächste Zeile umgebrochen sein. Bei der Auswahl eines Werkzeuges verwandelt sich der Cursor in das jeweilige Symbol.
+</p>
+<p>
+<em>Gleise</em> können mit unterschiedlichen Höchstgeschwindigkeiten befahren werden. Ist die Timeline aktiviert, werden Gleise mit schnellerer Höchstgeschwindigkeit erst nach und nach verfügbar. Höchstgeschwindigkeit und Baukosten werden in den Tooltips angezeigt. Der Abriss kostet genausoviel wie das Bauen; einzige Ausname ist, wenn direkt nach einer Bauaktion, die Taste z für Rückgängigmachen betätigt wurde (siehe weiter unten).<br/>
+Simutrans benutzt nur leere Felder oder bereits vorhandene Gleise. Brücken, Tunnel, Straßen usw. werden nicht benutzt. Allerdings werden automatisch Bahnübergänge gebaut. Am Hang kann nur in Neigungsrichtung gebaut werden.<br/>
+Beim ersten Platzieren des Gleisbauwerkzeuges in der Weltkarte wird der Anfang der Strecke festgelegt, beim zweiten der Endpunkt. Das Spiel baut zwischen beiden Punkten die kürzestmögliche Strecke.
+Wenn keine Verbindung gefunden wird, passiert nach dem Anklicken des Endpunktes nichts.
+Eine Bauaktion lässt sich mittels <em>z</em> gratis rückgängig machen (ohne Baukostenerstattung), solange nichts anderes gebaut wurde.<br/>
+<em>Hinweis:</em> Um eine diagonale Strecke oder parallel zu einem bestehenden Gleis zu bauen, beim zweiten Klick die <em>Ctrl</em>(<em>Strg</em>)-Taste gedrückt halten.
+</p>
+<p>
+<em>Fahrleitungen</em> sind zum Betrieb von E-Loks und Trams notwendig. Im <a href="depot.txt">Depotfenster</a> werden verfügbare E-Loks bzw. Trams nur angezeigt, wenn der Block des Depots elektrifiziert ist.
+Die Linienstrecken, welche von E-Loks bzw. Trams befahren werden sollen, musst Du komplett elektrifizieren, da die E-Konvois ansonsten keinen Weg finden. Sie verlassen dann das Depot nicht oder bleiben am letzten Linienpunkt vor der Fehlersituation stehen. </br>
+Das Fahrleitungswerkzeug funktioniert ähnlich wie das Gleisbauwerkzeug. Der erste Klick definierte den Startpunkt und der zweite Klick den Endpunkt. (Dabei beachtet das Werkzeug allerdings alle Einrichtungssignale!)
+</p>
+<p>
+<em>Eisenbahnbrücken</em> beginnen immer an Gleisenden. Für das Brückenende sucht Simutrans in der geraden Weiterführung des Gleisendes ein vorhandenes Gleisende, welches in die Richtung des Anfangspunktes weist.
+Wird eine passende Hanglage vorgefunden, so wird die Brücke an sie angelehnt.
+Das weiter führende Gleis kann in dem Fall auch nachträglich gebaut werden, muss aber bis auf das Brückenende gebaut werden.
+Um eine Brücke an einem Hang beginnen zu lassen, das Gleis bis auf den Hang bauen und dann das Brückenbauwerkzeug benutzen. (In neueren Versionen kann eine Brücke auch an einer senkrechten Wand enden. Dazu sollte vorher dort schon eine Schiene gelegt worden sein.)
+</p>
+<p>
+<em>Eisenbahntunnel</em> können nur gerade und nur in einer Höhenebene gebaut werden.
+Als Startpunkt des Tunnels muss das Gleisende in einer Hanglage enden. Setze das Tunnelbauwerkzeug auf das Gleisstück in der Hanglage. Der Tunnel wird komplett gebaut, wenn Simutrans in der gegenüberliegneden Bergflanke eine gerade Hanglage vorfindet. Der Gleisbau ist dann auf dem Tunnelausgang fortzusetzen.
+Erhältst Du eine Hinweismeldung, war das gegenüberliegende Hangstück nicht gerade oder ist bebaut.
+Eine wichtige Bauhilfe stellt die Nutzung des Gitternetzes dar (in der größten Kartenansicht schaltet die Taste <em>#</em> es ein und aus); mit ihm lässt sich der Durchstoßpunkt besser finden.<br>
+Willst du nur ein Tunnelportal bauen, dann kannst du einen Ctrl (Strg)+Mausklick machen. Danach kann du dann in den Untergrundmodus wechseln (mit <em>U</em> oder unter <a href="display.txt">Anzeigeeinstellungen</a>) und mit dem Tunnelwerkzeug weitere Strecken bauen.
+</p>
+<p>
+<em>Signale</em> werden genutzt, um die Bewegungen der Züge zu kontrollieren. Erreicht ein Zug ein Signal, dann bekommt er nur grün, wenn die Strecke bis zum nächsten Signal auf seiner Route frei ist und auch kein Zug dort hinfahren wird. Ein anderer Zug kann aber durchaus parallel dazu fahren. <strong>ACHTUNG:</strong> Wegpunkte und Bahnhöfe sind damit sozusagen unsichtbare Signale, denn ein Zug reserviert die Strecke nur bis zu diesen. Soll tatsächlich wirklich die Strecke bis zum nächsten Signal reserviert werden, müssen Langstreckensignale (s.u.) verwendet werden!
+<br> <br/>
+<em>Signalbau</em> Signale können nur auf Gleisen gebaut werden, aber nicht auf Kreuzungen. Beim Bau eines Signals wird auf jeder Gleisseite ein Signal aufgestellt. Die Strecke kann in beiden Richtungen befahren werden. Klickst Du die Platzierungsstelle erneut mit dem Signalwerkzeug an, wird ein Signal entfernt, die Strecke kann nur in Signalrichtung befahren werden.
+In der Regel befinden sich die Signale in Simutrans rechts vom Gleis. Beim nächsten Klick auf die Positionierungsstelle wird ein Signal auf der Gegenseite plaziert. Die Strecke kann nun nur in der Gegenrichtung befahren werden. Beim nächsten Klick erscheinen wieder beide Signale, die Strecke ist wieder in beide Richtungen befahrbar.
+<br/> <br/>
+<em>Wegfindung</em> Wurden auf einer Strecke Richtungssignale in der verkehrten Richtung aufgestellt, können die Züge der Linie keinen Weg finden und verlassen das Depot oder den Bahnhof nicht bzw. bleiben am letzten Linienpunkt vor dem nicht passierbaren Signal stehen. Es ist somit empfehlenswert, dem Verhalten der Züge auf neu eingerichteten Strecken anfänglich etwas erhöhte Aufmerksamkeit zu widmen.
+<br/> <br/>
+<em>Blocksicherung</em> Die Grundstellung von Signalen bei Simutrans ist "Halt" (rotes Signal).
+Fährt ein Zug in einen Blockabschnitt ein, schalten die Signale auf "Fahrt" (Grünes Licht) wenn die Strecke frei ist. Ein nachfolgender Zug bleibt vor dem Halt zeigenden Signal stehen. Hat der letzte Wagen das Signal passiert, gibt der Achszähler den Block wieder frei, das rückliegende Signal schaltet wieder auf "Halt". Der nächste Zug kann den Block befahren.
+<br/> <br/>
+<em>Zweiblocksicherung</em> Zwei-Block-Signale (Streckenabschnittssignale) geben die Fahrt erst frei, wenn für einen Zug die nächsten 2 Signale frei sind. Sie sind prädestiniert für verschiedene Deckungsaufgaben.
+Als Einfahrsignale regeln sie, dass ankommende Züge den Weichenbereich nicht befahren, solange sich noch ein Zug im Bahnhofsblock befindet. Bei mehrgleisigen Kreuzungen kannst Du durch Zwei-Block-Signalen erreichen, dass Züge erst dann den Kreuzungsbereich befahren, wenn danach noch 1 Block frei ist. So vermeidest Du Situationen, in denen Züge auf Kreuzungen stehen bleiben.
+<br/> <br/>
+<em>Auswahlsignale</em> Auswahlsignale (Einfahrtsignale) geben die Fahrt erst frei, wenn sie für einen Zug einen freien Weg bis zum nächsten Bahnhof reservieren konnte. Dabei wählt er aus allen erreichbaren Bahnsteigen den nächsten aus, wenn der ausgewählte besetzt ist. ACHTUNG: Ein Zug bleibt solange vor einem Auswahlsignal stehen, bis seine ganze Strecke bis zum nächsten Ziel frei ist! Man kann das umgehen, indem man für Züge, wo dies nicht erwünscht ist, einen Wegpunkt hinter das Auswahlsignal setzt.
+<br/> <br/>
+<em>Langstreckensignale</em> geben die Fahrt erst frei, wenn sie für einen Zug einen freien Weg bis zum nächsten Signal (auch durch mehrere Bahnhöfe hinweg) reservieren konnten. Dies ist z.B. für lange eingleisige Abschnitte nötig.
+</p>
+<p>
+Im <em>Depot</em> kannst Du Züge zusammenstellen sowie Linien einrichten und die Züge nach der Zuordnung zu Linien starten. Das Depot kann nur auf einem ebenen Gleisende platziert werden.
+Für E-Loks muss das Gleis zudem elektrifiziert sein. (siehe <a href="depot.txt">Depotfenster</a>)
+</p>
+<p>
+<em>Bahnhöfe</em> sind detailiert in der Hilfe zum <a href="station.txt">Haltestellenfenster</a> beschrieben. Die verschiedenen Haltestellengrafiken können die Haltestelle veranlassen, Passagiere, Post oder Güter umzuschlagen; es macht später jedoch keinen Unterschied mehr, auf welcher Grafik welcher Zug hält, er wird immer be- und entladen, wenn die Station für den Umschlag eingerichtet ist.
+</p>
+<p>
+<em>Bahnhofseingang und -vorpatz</em> können verwendet werden, wenn der Bahnhof auf erhöhtem Gelände mit Mauer gebaut ist. Sie werden vor die Mauer gebaut. Sie gehören zu den Nebengebäuden.
+</p>
+<p>
+<em>Nebengebäude</em> siehe <a href="special.txt">Spezialbauwerkzeuge</a>
 </p>
diff --git a/simutrans/text/de/roadtools.txt b/simutrans/text/de/roadtools.txt
index 551fad4..0349fa2 100644
--- a/simutrans/text/de/roadtools.txt
+++ b/simutrans/text/de/roadtools.txt
@@ -1,59 +1,59 @@
-<title>Straßenbau Hilfe</title>
-
-<h1><strong>Straßenbauwerkzeuge</strong></h1>
-
-<p>
-Diese Werkzeugleiste dient dem Bau von Straßen, Brücken, Tunneln, Signalisationen, Depots und Haltestellen.
-Bei der Auswahl eines Wergzeuges verwandelt sich der Cursor in das jeweilige Symbol.
-</p>
-<p>
-<em>Wege und Straßen</em> können mit unterschiedlichen Höchstgeschwindigkeiten befahren werden. Ist die Timeline aktiviert, werden Strassen mit schnellerer Höchstgeschwindigkeit erst nach und nach verfügbar. Höchstgeschwindigkeit und Baukosten werden in den blauen Tooltips angezeigt.
-Der Abriss kostet für alle Straßen genausoviel wie deren Bau.
-<br/> <br/>
-Simutrans benutzt nur leere Felder bzw. bereits vorhandene Straßen.
-Brücken, Tunnel, Eisenbahnstrecken usw. werden nicht in die Bauaktion mit einbezogen.
-Allerdings werden automatisch Bahnübergänge gebaut. Am Hang kann nur in Neigungsrichtung gebaut werden.
-<br/><br/>
-Beim ersten Platzieren des Strassenbauwerkzeuges in der Weltkarte wird der Anfang der Strecke festgelegt, beim zweiten der Endpunkt. Das Spiel baut zwischen beiden Punkten die kürzestmögliche Strecke.
-Wenn keine Verbindung gefunden wird, passiert nach dem Anklicken des Endpunktes nichts.
-Eine Bauaktion lässt sich mittels <em>z</em> gratis rückgängig machen (ohne Baukostenerstattung), solange nichts anderes gebaut wurde.
-</p>
-<p>
-<em>Straßenbrücken</em> beginnen immer an Straßenenden.
-Für das Brückenende sucht Simutrans in der geraden Weiterführung des Straßenendes ein vorhandenes Straßenende, welches in die Richtung des Anfangspunktes weist.
-Wird eine passende Hanglage vorgefunden, so wird die Brücke an sie angelehnt.
-Die weiter führende Straße kann in dem Fall auch nachträglich gebaut werden, muss aber bis auf die Brücke fortgebaut werden.
-Um eine Brücke an einem Hang beginnen zu lassen, die Straße bis auf den Hang bauen und dann das Brückenbauwerkzeug benutzen. (In neueren Versionen kann eine Brücke auch an einer senkrechten Wand enden. Dazu sollte vorher dort schon eine Straße gebaut worden sein.)
-</p>
-<p>
-<em>Straßentunnel</em> können nur gerade und nur in einer Höhenebene gebaut werden.
-Als Startpunkt des Tunnels muss ein Straßenende in einer Hanglage verbaut sein.
-Setze das Tunnelbauwerkzeug auf das Straßenstück. Der Tunnel wird komplett gebaut, wenn Simutrans in der gegenüberliegneden Bergflanke eine gerade Hanglage vorfindet.
-Erhältst Du eine Hinweismeldung, war das gegenüberliegende Hangstück nicht gerade.
-Eine wichtige Bauhilfe stellt die Nutzung des Gitternetzes dar
-(in der größten Kartenansicht schaltet die Taste <em>#</em> es ein und aus); mit ihm lässt sich der Durchstoßpunkt besser finden.<br>
-Willst du nur ein Tunnelportal bauen, dann kannst du einen Ctrl (Strg)+Mausklick machen. Danach kann du dann in den Untergrundmodus wechseln (mit <em>U</em> oder unter <a href="display.txt">Anzeigeeinstellungen</a>) und mit dem Tunnelwerkzeug weitere Strecken bauen.
-</p>
-<p>
-Die <em>Verkehrssignalisation</em> wird genutzt, um die Bewegungen der Strassenfahrzeuge zu kontrollieren.
-</p>
-<p>
-Der <em>Wegweiser</em> dient zur Verteilung von Fahrzeugen auf gleichartige Halteplätze an der selben Haltestelle, wenn (bei Vorbeifahrt am Wegweiser) der vom Fahrplan festgelegte Halteplatz besetzt ist.
-Er wird in Fahrtrichtung vor der Haltestelle aufgestellt.<br/>
-Die <em>Ampeln</em> können an Kreuzungen und Einmündungen aufgestellt werden und regeln den Verkehr.<br/>
-Die <em>Baustellenabschrankung</em> sorgt dafür, dass kein Fahrzeug mehr ein Strassenstück befährt.
-Die Straße wird ganz oder einseitig gesperrt. Bei der einseitigen Sperrung mehrmals klicken um die Straßenseite zu wechseln.<br/>
-Das <em>Einfahrt verboten</em> Schild macht eine Strasse zur Einbahnstrasse, der Verkehr rollt dort nur noch in Gegenrichtung.<br/>
-Das Schild <em>Mindestgeschwindigkeit</em> lässt auf einem Strassenstück nur noch Fahrzeuge fahren, die mehr als 80 km/h erreichen können.
-</p>
-<p>
-Mit den beiden letzten Signalen zusammen kann man Autobahnen nachbilden.
-</p>
-<p>
-Im <em>Depot</em> kannst Du Bus-, Post- und Güterkonvois zusammenstellen sowie Linien einrichten und die Konvois nach der Zuordnung von Linien starten. Das Depot kann nur auf einem ebenen Straßenende platziert werden.
-</p>
-<p>
-<em>Haltestellen</em> sind detailiert in der Hilfe zum <a href="station.txt">Haltestellenfenster</a> beschrieben.
-Es gibt unterschiedliche Typen von Haltestellen: Bushaltestellen ermöglichen den Passagierverkehr;
-Frachthöfe den Güterverkehr;  Posthaltestellen (wenn vorhanden) den Postverkehr, diese können das Postgebäude ersetzen. Wo welches Fahrzeug letztlich hält, macht keinen Unterschied.<br/>
+<title>Straßenbau Hilfe</title>
+
+<h1><strong>Straßenbauwerkzeuge</strong></h1>
+
+<p>
+Diese Werkzeugleiste dient dem Bau von Straßen, Brücken, Tunneln, Signalisationen, Depots und Haltestellen.
+Bei der Auswahl eines Wergzeuges verwandelt sich der Cursor in das jeweilige Symbol.
+</p>
+<p>
+<em>Wege und Straßen</em> können mit unterschiedlichen Höchstgeschwindigkeiten befahren werden. Ist die Timeline aktiviert, werden Strassen mit schnellerer Höchstgeschwindigkeit erst nach und nach verfügbar. Höchstgeschwindigkeit und Baukosten werden in den blauen Tooltips angezeigt.
+Der Abriss kostet für alle Straßen genausoviel wie deren Bau.
+<br/> <br/>
+Simutrans benutzt nur leere Felder bzw. bereits vorhandene Straßen.
+Brücken, Tunnel, Eisenbahnstrecken usw. werden nicht in die Bauaktion mit einbezogen.
+Allerdings werden automatisch Bahnübergänge gebaut. Am Hang kann nur in Neigungsrichtung gebaut werden.
+<br/><br/>
+Beim ersten Platzieren des Strassenbauwerkzeuges in der Weltkarte wird der Anfang der Strecke festgelegt, beim zweiten der Endpunkt. Das Spiel baut zwischen beiden Punkten die kürzestmögliche Strecke.
+Wenn keine Verbindung gefunden wird, passiert nach dem Anklicken des Endpunktes nichts.
+Eine Bauaktion lässt sich mittels <em>z</em> gratis rückgängig machen (ohne Baukostenerstattung), solange nichts anderes gebaut wurde.
+</p>
+<p>
+<em>Straßenbrücken</em> beginnen immer an Straßenenden.
+Für das Brückenende sucht Simutrans in der geraden Weiterführung des Straßenendes ein vorhandenes Straßenende, welches in die Richtung des Anfangspunktes weist.
+Wird eine passende Hanglage vorgefunden, so wird die Brücke an sie angelehnt.
+Die weiter führende Straße kann in dem Fall auch nachträglich gebaut werden, muss aber bis auf die Brücke fortgebaut werden.
+Um eine Brücke an einem Hang beginnen zu lassen, die Straße bis auf den Hang bauen und dann das Brückenbauwerkzeug benutzen. (In neueren Versionen kann eine Brücke auch an einer senkrechten Wand enden. Dazu sollte vorher dort schon eine Straße gebaut worden sein.)
+</p>
+<p>
+<em>Straßentunnel</em> können nur gerade und nur in einer Höhenebene gebaut werden.
+Als Startpunkt des Tunnels muss ein Straßenende in einer Hanglage verbaut sein.
+Setze das Tunnelbauwerkzeug auf das Straßenstück. Der Tunnel wird komplett gebaut, wenn Simutrans in der gegenüberliegneden Bergflanke eine gerade Hanglage vorfindet.
+Erhältst Du eine Hinweismeldung, war das gegenüberliegende Hangstück nicht gerade.
+Eine wichtige Bauhilfe stellt die Nutzung des Gitternetzes dar
+(in der größten Kartenansicht schaltet die Taste <em>#</em> es ein und aus); mit ihm lässt sich der Durchstoßpunkt besser finden.<br>
+Willst du nur ein Tunnelportal bauen, dann kannst du einen Ctrl (Strg)+Mausklick machen. Danach kann du dann in den Untergrundmodus wechseln (mit <em>U</em> oder unter <a href="display.txt">Anzeigeeinstellungen</a>) und mit dem Tunnelwerkzeug weitere Strecken bauen.
+</p>
+<p>
+Die <em>Verkehrssignalisation</em> wird genutzt, um die Bewegungen der Strassenfahrzeuge zu kontrollieren.
+</p>
+<p>
+Der <em>Wegweiser</em> dient zur Verteilung von Fahrzeugen auf gleichartige Halteplätze an der selben Haltestelle, wenn (bei Vorbeifahrt am Wegweiser) der vom Fahrplan festgelegte Halteplatz besetzt ist.
+Er wird in Fahrtrichtung vor der Haltestelle aufgestellt.<br/>
+Die <em>Ampeln</em> können an Kreuzungen und Einmündungen aufgestellt werden und regeln den Verkehr.<br/>
+Die <em>Baustellenabschrankung</em> sorgt dafür, dass kein Fahrzeug mehr ein Strassenstück befährt.
+Die Straße wird ganz oder einseitig gesperrt. Bei der einseitigen Sperrung mehrmals klicken um die Straßenseite zu wechseln.<br/>
+Das <em>Einfahrt verboten</em> Schild macht eine Strasse zur Einbahnstrasse, der Verkehr rollt dort nur noch in Gegenrichtung.<br/>
+Das Schild <em>Mindestgeschwindigkeit</em> lässt auf einem Strassenstück nur noch Fahrzeuge fahren, die mehr als 80 km/h erreichen können.
+</p>
+<p>
+Mit den beiden letzten Signalen zusammen kann man Autobahnen nachbilden.
+</p>
+<p>
+Im <em>Depot</em> kannst Du Bus-, Post- und Güterkonvois zusammenstellen sowie Linien einrichten und die Konvois nach der Zuordnung von Linien starten. Das Depot kann nur auf einem ebenen Straßenende platziert werden.
+</p>
+<p>
+<em>Haltestellen</em> sind detailiert in der Hilfe zum <a href="station.txt">Haltestellenfenster</a> beschrieben.
+Es gibt unterschiedliche Typen von Haltestellen: Bushaltestellen ermöglichen den Passagierverkehr;
+Frachthöfe den Güterverkehr;  Posthaltestellen (wenn vorhanden) den Postverkehr, diese können das Postgebäude ersetzen. Wo welches Fahrzeug letztlich hält, macht keinen Unterschied.<br/>
 </p>
diff --git a/simutrans/text/de/save.txt b/simutrans/text/de/save.txt
index f972a1b..d4dadcb 100644
--- a/simutrans/text/de/save.txt
+++ b/simutrans/text/de/save.txt
@@ -1,13 +1,13 @@
-<title>Speichern Menü Hilfe</title>
-
-<h1><strong>Speichern Menü</strong></h1>
-
-<p>
-Gib zum Speichern des Spielstandes einen Namen in das Textfeld ein und bestätige mit <em>ENTER</em>.
-<br/>
-Wählst Du einen bereits bestehenden Eintrag an, wird der vorhandene Spielstand ohne weitere Meldung überschrieben.
-<br/> Autosave-Spielstände werden bei aktivierten Autosave automatisch überschrieben.
-</p>
-<p>
-<strong>Warnung!</strong> Ein Klick auf das mit X bezeichnete Feld vor dem Dateinamen führt zur umgehenden Löschung des Spielstands!
+<title>Speichern Menü Hilfe</title>
+
+<h1><strong>Speichern Menü</strong></h1>
+
+<p>
+Gib zum Speichern des Spielstandes einen Namen in das Textfeld ein und bestätige mit <em>ENTER</em>.
+<br/>
+Wählst Du einen bereits bestehenden Eintrag an, wird der vorhandene Spielstand ohne weitere Meldung überschrieben.
+<br/> Autosave-Spielstände werden bei aktivierten Autosave automatisch überschrieben.
+</p>
+<p>
+<strong>Warnung!</strong> Ein Klick auf das mit X bezeichnete Feld vor dem Dateinamen führt zur umgehenden Löschung des Spielstands!
 </p>
diff --git a/simutrans/text/de/scenario.txt b/simutrans/text/de/scenario.txt
index 0b3e653..0f4011d 100644
--- a/simutrans/text/de/scenario.txt
+++ b/simutrans/text/de/scenario.txt
@@ -1,22 +1,22 @@
-<title>Spielzieldialog Hilfe</title>
-
-<h1><strong>Spielziele</strong></h1>
-
-<p>
-Simutrans hat normalerweise kein bestimmtes Ziel. Es gibt jedoch die Möglichkeit, Spiele mit Spielziel zu definieren. Im Spielzieldialog werden Spiele mit einem Spielziel aufgelistet. Nach der Anwahl eines Eintrages wird eine neue Karte mit Spielziel ohne weitere Rückfrage geladen.
-</p>
-<p>
-<em>Achtung!</em> Das aktuelle Spiel wird verworfen und nicht automatisch gesichert!
-</p>
-<p>
-Der aktuelle Stand in Prozent kann im Finanzdialog eingesehen werden. Wird das Spielziel am Ende eines Monates erreicht (also 100%) und das Konto ist nicht überzogen, erscheint eine Mitteilung. Das Spiel kann aber trotzdem normal fortgesetzt werden. Folgende Spielziele gibt es:
-</p>
-<p>
-<br/>· Beliefere eine Fabrik (und alle ihre Zulieferer).</li>
-<br/>· Erreiche den vorgegebenen Kontostand.</li>
-<br/>· Baue ein Hauptquartier und die vorgegebene Anzahl profitabler Züge.</li>
-<br/>· Transportiere mondestens die vorgegebene Anzahl von Reisenden pro Monat.</li>
-</p>
-<p>
-Weitere Spielziele können hinzugefügt werden. Die Dateien befinden sich im Verzeichnis <em>scenario</em>. Dieses befindet sich im Verzeichnis des verwendeten Paksets. Die Szenarios bestehen jeweils aus einem Spielstand und einer Beschreibungsdatei mit dem Spielziel.
+<title>Spielzieldialog Hilfe</title>
+
+<h1><strong>Spielziele</strong></h1>
+
+<p>
+Simutrans hat normalerweise kein bestimmtes Ziel. Es gibt jedoch die Möglichkeit, Spiele mit Spielziel zu definieren. Im Spielzieldialog werden Spiele mit einem Spielziel aufgelistet. Nach der Anwahl eines Eintrages wird eine neue Karte mit Spielziel ohne weitere Rückfrage geladen.
+</p>
+<p>
+<em>Achtung!</em> Das aktuelle Spiel wird verworfen und nicht automatisch gesichert!
+</p>
+<p>
+Der aktuelle Stand in Prozent kann im Finanzdialog eingesehen werden. Wird das Spielziel am Ende eines Monates erreicht (also 100%) und das Konto ist nicht überzogen, erscheint eine Mitteilung. Das Spiel kann aber trotzdem normal fortgesetzt werden. Folgende Spielziele gibt es:
+</p>
+<p>
+<br/>· Beliefere eine Fabrik (und alle ihre Zulieferer).</li>
+<br/>· Erreiche den vorgegebenen Kontostand.</li>
+<br/>· Baue ein Hauptquartier und die vorgegebene Anzahl profitabler Züge.</li>
+<br/>· Transportiere mondestens die vorgegebene Anzahl von Reisenden pro Monat.</li>
+</p>
+<p>
+Weitere Spielziele können hinzugefügt werden. Die Dateien befinden sich im Verzeichnis <em>scenario</em>. Dieses befindet sich im Verzeichnis des verwendeten Paksets. Die Szenarios bestehen jeweils aus einem Spielstand und einer Beschreibungsdatei mit dem Spielziel.
 </p>
diff --git a/simutrans/text/de/schedule.txt b/simutrans/text/de/schedule.txt
index 8f03c2d..72aa28e 100644
--- a/simutrans/text/de/schedule.txt
+++ b/simutrans/text/de/schedule.txt
@@ -1,39 +1,39 @@
-<title>Fahrplanfenster Hilfe</title>
-
-<h1><strong>Fahrplanfenster</strong></h1>
-
-<p>
-Im Fahrplanfenster kannst Du den Fahrplan für den ausgewählten Fahrzeugverband oder den Linienfahrplan für die ausgewählte Linie bearbeiten. Ein Fahrzeugverband, dessen Fahrplan aufgerufen wurde, hält an und wartet, bis das Fahrplanfenster wieder geschlossen ist.
-</p>
-<p>
-<em>Bedient Linie</em> (nur bei Fahrzeugverbänden ausserhalb des Depots): Das Textfeld zeigt die Linie an, in welcher der Fahrzeugverband fährt. Klicke zum Ändern der Linie ins Feld. Es öffnet sich eine Auswahlliste, in welcher alle verfügbaren Linien gelistet sind. Du kannst auch den Eintrag "keine Linie" wählen und den Fahrzeugverband nach einem individuellen Fahrplan fahren lassen.<br>
-Die Schaltfläche <em>Neue Linie</em> erstellt eine neue Linie mit dem aktuellen Fahrplan.
-</p>
-<p>
-<em>Wartezeit:</em> Die Wartezeit ist nur aktiv, wenn das Fahrzeug auf eine Mindestbeladung in diesem Fahrplanhalt warten soll. Die Wartezeit ist in Teilen pro Monat angegeben, also von ganzer Monat (1/1), halber Monat (1/2), ... 1 Tag (1/32), ... usw. Ist die Wartezeit überschirtten, fährt das Fahrzeug weiter, auch wenn die Mindestbeladung noch nicht erreicht wurde.
-</p>
-<p>
-<em>Mindestbeladung:</em> Die Mindestbeladung wird nur in Fahrplanhalten abgefragt. Du kannst mittels der Pfeilschalter für jede Haltestelle des Fahrplans einen der verfügbaren Werte zwischen 0% und 100% einstellen. Der Fahrzeugverband wartet an der Haltestelle, bis der eingestellte Wert der Mindestbeladung erreicht ist. Zum Auswählen der Haltestelle klicke auf diese, achte aber darauf das der Schalter "Löschen" nicht eingedrückt ist.
-</p>
-<p>
-<em>Fahrplanhalte:</em> Die gelisteten Haltestellen und freien Wegpunkte werden vom Konvoi der Reihe nach angefahren. Die Fahrplanhalte sind durchnummeriert. Der <strong>eingedrückte Pfeil</strong> vor einer Zeile zeigt an, zu welchem Fahrplanhalt der Fahrzeugverband momentan unterwegs ist. Wartet er auf Beladung, zeigt der Pfeil auf die aktuelle Haltestelle. Beim Verlassen des letzten Fahrplanhaltes wird wieder der erste Fahrplanhalt angesteuert.
-</p><br>
-<h1><strong>Fahrplanbearbeitung</strong></h1>
-<p>
-Die <em>Schaltfächen</em> haben folgende Bedeutung:<br/>
-· <em>Hinzufügen:</em> Der neue Fahrplanhalt wird am Ende der Liste angefügt.<br>
-· <em>Einfügen:</em> Der neue Fahrplanhalt wird vor dem mit <strong>eingedrücktem Pfeil</strong> gekennzeichneten Fahrplanhalt eingefügt.<br>
-· <em>Löschen:</em> Der per Mausklick angewählte Fahrplanhalt wird aus der Liste gelöscht. Nach löschen eines Fahrplanhaltes wird die Schaltfläche <em>Hinzufügen</em> wider aktiviert.
-</p>
-<p>
-· <em>Rückfahrkarte:</em> Alle Fahrplanhalte werden bis zum Maximum von 32 Gesamteinträgen in umgekehrter Reihenfolge (ohne 1. und letzten Halt) an den bestehenden Fahrplan angefügt. Bei Verwendung von Richtungsstrecken (einseitige Signale bei Eisen-, Straßen- und Einschienenbahnen) wird die Rückfahrkarte allerdings nicht einsetzbar sein, da der Haltepunkt bei der Rückfahrt nicht direkt angefahren werden kann. Wenn ein Weg gefunden wird, erfolgt dieser dann mit einem großen Umweg.
-</p>
-<p>
-Bei der Nutzung einer der Schaltflächen "Hinzufügen" oder "Einfügen" ändert sich der Cursor in einen Haltepunktmarker. Klickst Du mit dem Werkzeug auf ein Haltestellenfeld oder auf einen freien Wegpunkt, welcher vom Fahrzeugverband befahren werden kann (je nach Fahrzeugart zBsp. Straßen-, Wasser-, oder Gleisfeld), wird der Punkt als Fahrplanhalt in die Liste der Fahrplanhalte aufgenommen.<br>
-· Haltepunkte werden mit dem Namen der Haltestelle, der eingestellten Mindestbeladung und den Koordinaten des Feldes in die Liste eingetragen.<br>
-· Freie Wegpunkte werden mit der Bezeichnung "freier Wegpunkt" und den Koordinaten des Feldes in die Liste eingetragen. Ein Halt erfolgt nicht. Die Strecke bis zum nächsten Fahrplanhalt wird eingelesen, ein kurzes Abbremsen des Konvois ist möglich. Vermeide nach Möglichkeit die Platzierung von Wegpunkten in Kurven. Es wird zwar keine Störung verursacht, doch ordentliches Fahrverhalten kann nicht gewährleistet werden.<br/>
-· Bis zu 254 Fahrplanhalte können je Fahrplan eingerichtet werden.
-</p>
-<p>
-· Wenn du fertig bist, dann schließe einfach das Fahrplanfenster. Der Fahrzeugverband liest den Fahrplan neu ein und setzt die Reise zum dann als nächsten Halt markierten Punkt fort. Wird eine Linie als ganzes geändert, halten alle ihr zugewiesenen Fahrzeuge an, lesen den neuen Fahrplan ein und fahren weiter. Sind Zwischenhalte eingefügt worden, kann dies dazu führen, dass einige Konvois umkehren, da an derselben Position ihres Fahrplans nach der Änderung ein anderer Fahrplanhalt steht.
+<title>Fahrplanfenster Hilfe</title>
+
+<h1><strong>Fahrplanfenster</strong></h1>
+
+<p>
+Im Fahrplanfenster kannst Du den Fahrplan für den ausgewählten Fahrzeugverband oder den Linienfahrplan für die ausgewählte Linie bearbeiten. Ein Fahrzeugverband, dessen Fahrplan aufgerufen wurde, hält an und wartet, bis das Fahrplanfenster wieder geschlossen ist.
+</p>
+<p>
+<em>Bedient Linie</em> (nur bei Fahrzeugverbänden ausserhalb des Depots): Das Textfeld zeigt die Linie an, in welcher der Fahrzeugverband fährt. Klicke zum Ändern der Linie ins Feld. Es öffnet sich eine Auswahlliste, in welcher alle verfügbaren Linien gelistet sind. Du kannst auch den Eintrag "keine Linie" wählen und den Fahrzeugverband nach einem individuellen Fahrplan fahren lassen.<br>
+Die Schaltfläche <em>Neue Linie</em> erstellt eine neue Linie mit dem aktuellen Fahrplan.
+</p>
+<p>
+<em>Wartezeit:</em> Die Wartezeit ist nur aktiv, wenn das Fahrzeug auf eine Mindestbeladung in diesem Fahrplanhalt warten soll. Die Wartezeit ist in Teilen pro Monat angegeben, also von ganzer Monat (1/1), halber Monat (1/2), ... 1 Tag (1/32), ... usw. Ist die Wartezeit überschirtten, fährt das Fahrzeug weiter, auch wenn die Mindestbeladung noch nicht erreicht wurde.
+</p>
+<p>
+<em>Mindestbeladung:</em> Die Mindestbeladung wird nur in Fahrplanhalten abgefragt. Du kannst mittels der Pfeilschalter für jede Haltestelle des Fahrplans einen der verfügbaren Werte zwischen 0% und 100% einstellen. Der Fahrzeugverband wartet an der Haltestelle, bis der eingestellte Wert der Mindestbeladung erreicht ist. Zum Auswählen der Haltestelle klicke auf diese, achte aber darauf das der Schalter "Löschen" nicht eingedrückt ist.
+</p>
+<p>
+<em>Fahrplanhalte:</em> Die gelisteten Haltestellen und freien Wegpunkte werden vom Konvoi der Reihe nach angefahren. Die Fahrplanhalte sind durchnummeriert. Der <strong>eingedrückte Pfeil</strong> vor einer Zeile zeigt an, zu welchem Fahrplanhalt der Fahrzeugverband momentan unterwegs ist. Wartet er auf Beladung, zeigt der Pfeil auf die aktuelle Haltestelle. Beim Verlassen des letzten Fahrplanhaltes wird wieder der erste Fahrplanhalt angesteuert.
+</p><br>
+<h1><strong>Fahrplanbearbeitung</strong></h1>
+<p>
+Die <em>Schaltfächen</em> haben folgende Bedeutung:<br/>
+· <em>Hinzufügen:</em> Der neue Fahrplanhalt wird am Ende der Liste angefügt.<br>
+· <em>Einfügen:</em> Der neue Fahrplanhalt wird vor dem mit <strong>eingedrücktem Pfeil</strong> gekennzeichneten Fahrplanhalt eingefügt.<br>
+· <em>Löschen:</em> Der per Mausklick angewählte Fahrplanhalt wird aus der Liste gelöscht. Nach löschen eines Fahrplanhaltes wird die Schaltfläche <em>Hinzufügen</em> wider aktiviert.
+</p>
+<p>
+· <em>Rückfahrkarte:</em> Alle Fahrplanhalte werden bis zum Maximum von 32 Gesamteinträgen in umgekehrter Reihenfolge (ohne 1. und letzten Halt) an den bestehenden Fahrplan angefügt. Bei Verwendung von Richtungsstrecken (einseitige Signale bei Eisen-, Straßen- und Einschienenbahnen) wird die Rückfahrkarte allerdings nicht einsetzbar sein, da der Haltepunkt bei der Rückfahrt nicht direkt angefahren werden kann. Wenn ein Weg gefunden wird, erfolgt dieser dann mit einem großen Umweg.
+</p>
+<p>
+Bei der Nutzung einer der Schaltflächen "Hinzufügen" oder "Einfügen" ändert sich der Cursor in einen Haltepunktmarker. Klickst Du mit dem Werkzeug auf ein Haltestellenfeld oder auf einen freien Wegpunkt, welcher vom Fahrzeugverband befahren werden kann (je nach Fahrzeugart zBsp. Straßen-, Wasser-, oder Gleisfeld), wird der Punkt als Fahrplanhalt in die Liste der Fahrplanhalte aufgenommen.<br>
+· Haltepunkte werden mit dem Namen der Haltestelle, der eingestellten Mindestbeladung und den Koordinaten des Feldes in die Liste eingetragen.<br>
+· Freie Wegpunkte werden mit der Bezeichnung "freier Wegpunkt" und den Koordinaten des Feldes in die Liste eingetragen. Ein Halt erfolgt nicht. Die Strecke bis zum nächsten Fahrplanhalt wird eingelesen, ein kurzes Abbremsen des Konvois ist möglich. Vermeide nach Möglichkeit die Platzierung von Wegpunkten in Kurven. Es wird zwar keine Störung verursacht, doch ordentliches Fahrverhalten kann nicht gewährleistet werden.<br/>
+· Bis zu 254 Fahrplanhalte können je Fahrplan eingerichtet werden.
+</p>
+<p>
+· Wenn du fertig bist, dann schließe einfach das Fahrplanfenster. Der Fahrzeugverband liest den Fahrplan neu ein und setzt die Reise zum dann als nächsten Halt markierten Punkt fort. Wird eine Linie als ganzes geändert, halten alle ihr zugewiesenen Fahrzeuge an, lesen den neuen Fahrplan ein und fahren weiter. Sind Zwischenhalte eingefügt worden, kann dies dazu führen, dass einige Konvois umkehren, da an derselben Position ihres Fahrplans nach der Änderung ein anderer Fahrplanhalt steht.
 </p>
diff --git a/simutrans/text/de/shiptools.txt b/simutrans/text/de/shiptools.txt
index 0d864ce..6ac0483 100644
--- a/simutrans/text/de/shiptools.txt
+++ b/simutrans/text/de/shiptools.txt
@@ -1,23 +1,23 @@
-<title>Häfen und Werften Hilfe</title>
-
-<h1><strong>Häfen und Werften</strong></h1>
-
-<p>
-Diese Werkzeugleiste dient dem Bau von Kanälen, Hafenanlagen und Werften. Bei der Auswahl eines Werkzeuges verwandelt sich der Cursor in das jeweilige Symbol.
-</p>
-<p>
-<em>Kanäle</em> erlauben es Schiffen, ins Binnenland vorzudringen. Simutrans benutzt nur leere Felder oder bereits vorhandene Kanalstücke. Am Hang kann nur in Neigungsrichtung gebaut werden, Schleusengrafiken werden automatisch erstellt.<br/>
-Beim ersten Platzieren des Kanalbauwerkzeuges in der Weltkarte wird der Anfang der Strecke festgelegt, beim zweiten der Endpunkt. Das Spiel baut zwischen beiden Punkten die kürzestmögliche Strecke. Wenn keine Verbindung gefunden wird, passiert nach dem Anklicken des Endpunktes nichts. Eine Bauaktion lässt sich mittels <em>z</em> gratis rückgängig machen (ohne Baukostenerstattung), solange nichts anderes gebaut wurde.
-</p>
-<p>
-<em>Hafenanlagen</em> dienen als Schiffsanlegestellen. An Häfen werden Schiffe be- und entladen.
-<br> <br/>
-<em>Hafenbau</em> Binnenhäfen können auf geraden Kanalstücken, Meerhäfen nur an geraden Stränden gebaut werden. Plaziere zur Errichtung eines Meerhafens das Hafenbauwerkzeug auf einer Strandkachel. Zur Errichtung größerer Hafenanlagen ist es möglich, mehrere Häfen direkt aneinander zu bauen. In einigen Simutrans-Versionen stehen Dir mehrteilige Hafenanlagen zur verfügung, welche Du in beliebiger Anordnung platzieren kannst.
-<br> <br/>
-<em>Fahrplanhalte</em> Schiffe gehen im Wasser vor Anker. Bei Binnenhäfen ist der Haltepunkt im Kanal, Setze die Fahrplanhalte bei Meerhäfen nicht auf den Hafen, sondern auf Wasserfelder, die an den Hafen direkt angrenzen.
-<br> <br/>
-<em>Haltestelle</em> Weiteres zum Aufbau von Haltestellen ist detailiert in der Hilfe zum <a href="station.txt">Haltestellenfenster</a> beschrieben.
-</p>
-<p>
-<em>Werften</em> dienen zum Bau von Schiffen. Die angebotenen Schiffstypen stehen Dir zum Kauf zur Verfügung. Richte Schifflinien ein, weise sie den georderten Schiffen zu, lasse die Schiffe auslaufen. Die verschiedenen Werfttypen unterscheiden sich lediglich in ihrer Ausrichtung. Platziere sie im freien Wasser, Es ist nicht möglich, eine Werft auf dem Strand oder in einem Kanal zu bauen. Auch weit draußen auf See kannst Du Werften errichten. Berücksichtige bei der Plazierung aber die Kartengrenzen. Deine Spielwelt ist immer von Wasser umgeben. Die Ränder stehen der Nutzung allerdings nicht zur Verfügung. Sie dienen dem gefälligen Kartenabschluss.
+<title>Häfen und Werften Hilfe</title>
+
+<h1><strong>Häfen und Werften</strong></h1>
+
+<p>
+Diese Werkzeugleiste dient dem Bau von Kanälen, Hafenanlagen und Werften. Bei der Auswahl eines Werkzeuges verwandelt sich der Cursor in das jeweilige Symbol.
+</p>
+<p>
+<em>Kanäle</em> erlauben es Schiffen, ins Binnenland vorzudringen. Simutrans benutzt nur leere Felder oder bereits vorhandene Kanalstücke. Am Hang kann nur in Neigungsrichtung gebaut werden, Schleusengrafiken werden automatisch erstellt.<br/>
+Beim ersten Platzieren des Kanalbauwerkzeuges in der Weltkarte wird der Anfang der Strecke festgelegt, beim zweiten der Endpunkt. Das Spiel baut zwischen beiden Punkten die kürzestmögliche Strecke. Wenn keine Verbindung gefunden wird, passiert nach dem Anklicken des Endpunktes nichts. Eine Bauaktion lässt sich mittels <em>z</em> gratis rückgängig machen (ohne Baukostenerstattung), solange nichts anderes gebaut wurde.
+</p>
+<p>
+<em>Hafenanlagen</em> dienen als Schiffsanlegestellen. An Häfen werden Schiffe be- und entladen.
+<br> <br/>
+<em>Hafenbau</em> Binnenhäfen können auf geraden Kanalstücken, Meerhäfen nur an geraden Stränden gebaut werden. Plaziere zur Errichtung eines Meerhafens das Hafenbauwerkzeug auf einer Strandkachel. Zur Errichtung größerer Hafenanlagen ist es möglich, mehrere Häfen direkt aneinander zu bauen. In einigen Simutrans-Versionen stehen Dir mehrteilige Hafenanlagen zur verfügung, welche Du in beliebiger Anordnung platzieren kannst.
+<br> <br/>
+<em>Fahrplanhalte</em> Schiffe gehen im Wasser vor Anker. Bei Binnenhäfen ist der Haltepunkt im Kanal, Setze die Fahrplanhalte bei Meerhäfen nicht auf den Hafen, sondern auf Wasserfelder, die an den Hafen direkt angrenzen.
+<br> <br/>
+<em>Haltestelle</em> Weiteres zum Aufbau von Haltestellen ist detailiert in der Hilfe zum <a href="station.txt">Haltestellenfenster</a> beschrieben.
+</p>
+<p>
+<em>Werften</em> dienen zum Bau von Schiffen. Die angebotenen Schiffstypen stehen Dir zum Kauf zur Verfügung. Richte Schifflinien ein, weise sie den georderten Schiffen zu, lasse die Schiffe auslaufen. Die verschiedenen Werfttypen unterscheiden sich lediglich in ihrer Ausrichtung. Platziere sie im freien Wasser, Es ist nicht möglich, eine Werft auf dem Strand oder in einem Kanal zu bauen. Auch weit draußen auf See kannst Du Werften errichten. Berücksichtige bei der Plazierung aber die Kartengrenzen. Deine Spielwelt ist immer von Wasser umgeben. Die Ränder stehen der Nutzung allerdings nicht zur Verfügung. Sie dienen dem gefälligen Kartenabschluss.
 </p>
diff --git a/simutrans/text/de/simutrans.txt b/simutrans/text/de/simutrans.txt
index 3d6a7b0..3fde412 100644
--- a/simutrans/text/de/simutrans.txt
+++ b/simutrans/text/de/simutrans.txt
@@ -1,28 +1,28 @@
-<title>Prolog</title>
-
-<h1><strong>Simutrans</strong></h1>
-
-<p>
-Versetze Dich in die Situation eines jungen Transportunternehmers. Du startest mit einem geringen, jedoch ausreichenden Grundkapital. Wähle eine der 10'000 verfügbaren Simutrans-Karten oder lade eine Reliefkarte. Die gleiche Ausgangskarte wird sich bei mehrmaligem Laden immer wieder mit einem anderen Szenario generieren. Als Basis der Generierungen dienen Deine getroffenen Grundeinstellungen.
-</p>
-<p>
-Beurteile die angetroffene Situation. Die Entwicklung der kleinen Welt liegt nun in Deiner Hand. Du kannst etwa den einen oder den anderen Industriezweig erschließen, also Fertigungsbetriebe mit den Produkten der vertragsverbundenen Rohstoffproduzenten beliefern. Baue die benötigten Transportverbindungen. Dir stehen Schiene, Straße und Schifffahrt als Verkehrsträger zur Verfügung. Natürlich können Passagiere und Güter zwischen Verkehrsträgern umsteigen bzw. umgeladen werden.
-</p>
-<p>
-Der Vorteil der Strategie des anfänglichen Gütertransportes besteht darin, mit oft wenig Aufwand nach kurzer Zeit die Mittel für kostenträchtigere Vorhaben zur Verfügung zu haben. Der Nachteil soll nicht verschwiegen werden: Die Städte zeigen derzeit keinerlei Wachstum.
-</p>
-<p>
-Eine andere Strategie besteht darin, vom Spielbeginn an das Wachstum der Städte anzuregen. Werden den Stadtbewohnern Beförderungsmöglichkeiten zur Verfügung gestellt, können sie nun ihre Reiselust ausleben. Doch jeder potentielle Reisende interessiert sich unabhängig von Deinen Linienangeboten für ein ganz bestimmtes Reiseziel. Versuche also, so viele Städte wie möglich zu erschließen, sorge für Verbindungen der Städte untereinander. Achte auch auf die Erschließung der öffentlichen Einrichtungen wie Vergnügungseinrichtungen, Ruinen und sagenumwobene Königschlösser. Viele Touristen werden zu den Sehenswürdigkeiten strömen, ohne die Mären und die Legenden, welche um die oft düsteren Gemäuer ranken, je zerstören zu können. Transportiere auch die anfallende Post der Einwohner.
-</p>
-<p>
-Guter Service spricht sich rum. Je mehr Reisende mit deinem Service zufrieden waren und je mehr Post Du befördern konntest, desto zügiger werden die Städte wachsen. Neuer Wohnraum wird gebaut. Komplette Produktionsketten werden aus dem Boden schießen, als bestände die ganze Welt nur aus Maurern und Polieren. Die Betriebe handeln untereinander Abnahmeverträge aus. Für den expansionsbereiten Transportunternehmer und erfahrenen Logisten entwickeln sich ungeahnte Möglichkeiten.
-</p>
-<p>
-Eine gute Wegeplanung wird Dich bei der optimalen Nutzung der Straßen- und Schienennetze unterstützen. Lass nicht mehr Fahrzeuge in einer Linie fahren, als Bedarf besteht. Knauser aber auch nicht. Vermeide nach Kräften Angebotsengpässe im Reiseverkehr. Ein zur Hälfte ausgelastetes Fahrzeug fährt immer noch profitabel.
-</p>
-<p>
-Es besteht keine zeitliche Beschränkung. Spiele, bis Deine gesteckten Ziele auch wirklich erreicht sind. Du kannst mit bis zu 6 KI-Spielern im Kampf um Märkte und Transportaufträge wetteifern. Schnappe anderen Spielern Passagiere und Güter vor der Nase weg. Vielleicht magst Du auch ganz auf KI-Spieler verzichten? Die Entscheidungen liegen bei Dir. Doch verausgab Dich vor allem in der Frühphase Deines aufstrebenden Unternehmens nicht. Auch Transportunternehmern droht der Konkurs, wenn sie Schulden nicht fristgerecht tilgen können.
-</p>
-<p>
-Das <strong>Simutrans-Team</strong> und die nach Kräften mitwirkende Community wünschen Dir viel Langzeitspaß und grauzellen-trainierende Knobelkuren bei der Erkundung und der Erschließung völlig individueller Welten.
+<title>Prolog</title>
+
+<h1><strong>Simutrans</strong></h1>
+
+<p>
+Versetze Dich in die Situation eines jungen Transportunternehmers. Du startest mit einem geringen, jedoch ausreichenden Grundkapital. Wähle eine der 10'000 verfügbaren Simutrans-Karten oder lade eine Reliefkarte. Die gleiche Ausgangskarte wird sich bei mehrmaligem Laden immer wieder mit einem anderen Szenario generieren. Als Basis der Generierungen dienen Deine getroffenen Grundeinstellungen.
+</p>
+<p>
+Beurteile die angetroffene Situation. Die Entwicklung der kleinen Welt liegt nun in Deiner Hand. Du kannst etwa den einen oder den anderen Industriezweig erschließen, also Fertigungsbetriebe mit den Produkten der vertragsverbundenen Rohstoffproduzenten beliefern. Baue die benötigten Transportverbindungen. Dir stehen Schiene, Straße und Schifffahrt als Verkehrsträger zur Verfügung. Natürlich können Passagiere und Güter zwischen Verkehrsträgern umsteigen bzw. umgeladen werden.
+</p>
+<p>
+Der Vorteil der Strategie des anfänglichen Gütertransportes besteht darin, mit oft wenig Aufwand nach kurzer Zeit die Mittel für kostenträchtigere Vorhaben zur Verfügung zu haben. Der Nachteil soll nicht verschwiegen werden: Die Städte zeigen derzeit keinerlei Wachstum.
+</p>
+<p>
+Eine andere Strategie besteht darin, vom Spielbeginn an das Wachstum der Städte anzuregen. Werden den Stadtbewohnern Beförderungsmöglichkeiten zur Verfügung gestellt, können sie nun ihre Reiselust ausleben. Doch jeder potentielle Reisende interessiert sich unabhängig von Deinen Linienangeboten für ein ganz bestimmtes Reiseziel. Versuche also, so viele Städte wie möglich zu erschließen, sorge für Verbindungen der Städte untereinander. Achte auch auf die Erschließung der öffentlichen Einrichtungen wie Vergnügungseinrichtungen, Ruinen und sagenumwobene Königschlösser. Viele Touristen werden zu den Sehenswürdigkeiten strömen, ohne die Mären und die Legenden, welche um die oft düsteren Gemäuer ranken, je zerstören zu können. Transportiere auch die anfallende Post der Einwohner.
+</p>
+<p>
+Guter Service spricht sich rum. Je mehr Reisende mit deinem Service zufrieden waren und je mehr Post Du befördern konntest, desto zügiger werden die Städte wachsen. Neuer Wohnraum wird gebaut. Komplette Produktionsketten werden aus dem Boden schießen, als bestände die ganze Welt nur aus Maurern und Polieren. Die Betriebe handeln untereinander Abnahmeverträge aus. Für den expansionsbereiten Transportunternehmer und erfahrenen Logisten entwickeln sich ungeahnte Möglichkeiten.
+</p>
+<p>
+Eine gute Wegeplanung wird Dich bei der optimalen Nutzung der Straßen- und Schienennetze unterstützen. Lass nicht mehr Fahrzeuge in einer Linie fahren, als Bedarf besteht. Knauser aber auch nicht. Vermeide nach Kräften Angebotsengpässe im Reiseverkehr. Ein zur Hälfte ausgelastetes Fahrzeug fährt immer noch profitabel.
+</p>
+<p>
+Es besteht keine zeitliche Beschränkung. Spiele, bis Deine gesteckten Ziele auch wirklich erreicht sind. Du kannst mit bis zu 6 KI-Spielern im Kampf um Märkte und Transportaufträge wetteifern. Schnappe anderen Spielern Passagiere und Güter vor der Nase weg. Vielleicht magst Du auch ganz auf KI-Spieler verzichten? Die Entscheidungen liegen bei Dir. Doch verausgab Dich vor allem in der Frühphase Deines aufstrebenden Unternehmens nicht. Auch Transportunternehmern droht der Konkurs, wenn sie Schulden nicht fristgerecht tilgen können.
+</p>
+<p>
+Das <strong>Simutrans-Team</strong> und die nach Kräften mitwirkende Community wünschen Dir viel Langzeitspaß und grauzellen-trainierende Knobelkuren bei der Erkundung und der Erschließung völlig individueller Welten.
 </p>
diff --git a/simutrans/text/de/slopetools.txt b/simutrans/text/de/slopetools.txt
index 0bd6ee0..dccb4e2 100644
--- a/simutrans/text/de/slopetools.txt
+++ b/simutrans/text/de/slopetools.txt
@@ -1,16 +1,16 @@
-<title>Geländewerkzeuge Hilfe</title>
-
-<h1><strong>Geländewerkzeuge Hilfe</strong></h1>
-
-<p>
-Wenn eine Bahnlinie/Straße durch unwegsames Gelände geführt werden soll, empfehlen sich die Erdbewegungswerkzeuge. Sie können nur eingesetzt werden, wenn alle betroffenen Felder unbebaut sind.
-</p>
-<p>
-<em> Gelände anheben/absenken</em> Der Cursor verwandelt sich in einen nach oben/unten zeigenden Pfeil. Mit dem Werkzeug wird das Gelände am Gitterpunkt unter dem Cursor angehoben/abgesenkt. Das Gitternetz (nur in der größten Kartenansicht) lässt sich mittels der Taste <em>#</em> ein- und ausschalten.<br><br>
-<em>Rampen legen</em>Die nächsten vier Werkzeuge legen Rampen in südlicher, nördlicher, westlicher und östlicher Richtung an. Mit einem fünften Tool werden Hangfelder eingeebnet. Über so bearbeitetes Gelände können dann normal Wege gebaut werden.<br>
-Beim Einsatz der Geländewerkzeuge können senkrechte Böschungen entstehen. Über diese Klippen können keine Wege gebaut werden, sie können auch nicht Endpunkte von Tunnels oder Brücken sein.<br><br>
-<em>Niveau absenken/anheben</em> Senkt oder hebt das Grundniveau eines Feldes. Das Grundniveau ist die Höhe des tiefstliegenden Eckpunktes eines Feldes. Beim Senken oder Heben des Niveaus wird das Feld zugleich eingeebnet, Rampen oder Kanten verschwinden.<br>
-<strong>Achtung:</strong> Absenken auf das neue Niveau des Meeresspiegel bildet einen Kanal.
-<br/><br>
-<em>Renaturierung</em> Stellt den ursprünglichen Zustand wieder her.
+<title>Geländewerkzeuge Hilfe</title>
+
+<h1><strong>Geländewerkzeuge Hilfe</strong></h1>
+
+<p>
+Wenn eine Bahnlinie/Straße durch unwegsames Gelände geführt werden soll, empfehlen sich die Erdbewegungswerkzeuge. Sie können nur eingesetzt werden, wenn alle betroffenen Felder unbebaut sind.
+</p>
+<p>
+<em> Gelände anheben/absenken</em> Der Cursor verwandelt sich in einen nach oben/unten zeigenden Pfeil. Mit dem Werkzeug wird das Gelände am Gitterpunkt unter dem Cursor angehoben/abgesenkt. Das Gitternetz (nur in der größten Kartenansicht) lässt sich mittels der Taste <em>#</em> ein- und ausschalten.<br><br>
+<em>Rampen legen</em>Die nächsten vier Werkzeuge legen Rampen in südlicher, nördlicher, westlicher und östlicher Richtung an. Mit einem fünften Tool werden Hangfelder eingeebnet. Über so bearbeitetes Gelände können dann normal Wege gebaut werden.<br>
+Beim Einsatz der Geländewerkzeuge können senkrechte Böschungen entstehen. Über diese Klippen können keine Wege gebaut werden, sie können auch nicht Endpunkte von Tunnels oder Brücken sein.<br><br>
+<em>Niveau absenken/anheben</em> Senkt oder hebt das Grundniveau eines Feldes. Das Grundniveau ist die Höhe des tiefstliegenden Eckpunktes eines Feldes. Beim Senken oder Heben des Niveaus wird das Feld zugleich eingeebnet, Rampen oder Kanten verschwinden.<br>
+<strong>Achtung:</strong> Absenken auf das neue Niveau des Meeresspiegel bildet einen Kanal.
+<br/><br>
+<em>Renaturierung</em> Stellt den ursprünglichen Zustand wieder her.
 </p>
diff --git a/simutrans/text/de/sound.txt b/simutrans/text/de/sound.txt
index 060ec3c..a31241e 100644
--- a/simutrans/text/de/sound.txt
+++ b/simutrans/text/de/sound.txt
@@ -1,13 +1,13 @@
-<title>Sound- und Musikeinstellungen Hilfe</title>
-
-<h1><strong>Sound- & Musikeinstellungen</strong></h1>
-
-<p>
-Zum Abspielen von Sounds und Musik muss die SDL-Version von Simutrans installiert sein. Unter Windows wird die sdl.dll benötigt. Sounds (WAV-Format) und Musikstücke (MIDI-Format) werden im Verzeichnis simutrans/sound abgelegt.
-</p>
-<p>
-Durch Verschieben der Regler nach links oder rechts kannst Du die Lautstärke der Musik und der Geräusche festlegen. Je weiter rechts die Regler stehen, desto lauter erfolgt die Ausgabe.
-</p>
-<p>
-Das Musikstück, das gespielt werden soll, kannst Du mit den Pfeilknöpfen auswählen, sofern Musik verfügbar ist.
+<title>Sound- und Musikeinstellungen Hilfe</title>
+
+<h1><strong>Sound- & Musikeinstellungen</strong></h1>
+
+<p>
+Zum Abspielen von Sounds und Musik muss die SDL-Version von Simutrans installiert sein. Unter Windows wird die sdl.dll benötigt. Sounds (WAV-Format) und Musikstücke (MIDI-Format) werden im Verzeichnis simutrans/sound abgelegt.
+</p>
+<p>
+Durch Verschieben der Regler nach links oder rechts kannst Du die Lautstärke der Musik und der Geräusche festlegen. Je weiter rechts die Regler stehen, desto lauter erfolgt die Ausgabe.
+</p>
+<p>
+Das Musikstück, das gespielt werden soll, kannst Du mit den Pfeilknöpfen auswählen, sofern Musik verfügbar ist.
 </p>
diff --git a/simutrans/text/de/special.txt b/simutrans/text/de/special.txt
index 1a3d48f..5e1682f 100644
--- a/simutrans/text/de/special.txt
+++ b/simutrans/text/de/special.txt
@@ -1,35 +1,35 @@
-<title>Spezialbauwerkzeuge Hilfe</title>
-
-<h1><strong>Spezialbauwerkzeuge</strong></h1>
-
-<p>
-In dieser Werkzeugleiste sind Bauwerkzeuge zusammengefasst, die nicht direkt mit den Transportnetzen zu tun haben. Bei der Auswahl eines Wergzeuges verwandelt sich der Cursor in das jeweilige Symbol.
-</p>
-<p>
-<em>Nebengebäude</em> Für die Gestaltung der Haltestellen stehen Dir verschiedene Nebengebäude zur Verfügung. Platziere sie entsprechend Deinen kreativen Vorstellungen direkt neben beliebige Haltestellenobjekte.
-Mit ihnen kannst Du auch flächige Haltestellenverbünde erreichen.
-Sie erweitern das Einzugsgebiet und das Fassungsvermögen der Haltestelle.
-Die meisten Nebengebäude bringen Haltestellen auch dazu, Passagiere, Post oder Güter umzuschlagen, besonders seien die Postgebäude erwähnt.
-Einige Nebengebäude sind auch in den anderen Bauwerkzeugen zu finden, unterscheiden sich aber in ihrer Funktion nicht von denen in diesem Menü.
-</p>
-<p>
-<em>Spielerwechsel</em> Bei der Betätigung der Schaltfläche <strong>P+</strong> oder der Tastenkombination <em>Shift</em>+<em>P</em> wechselst Du zunächst zum Spieler "öffentliche Hand". Das Menü <a href="edittools.txt">Karteneditor</a> wird geöffnet. Beim Weiterschalten gelangst Du nacheinander zu den KI-Spielern, danach wieder zum menschlichen Spieler. Hattest Du das Menü des Karteneditors geöffnet gelassen, kannst Du es nun auch als Spieler nutzen. Du erhältst weitreichende Gestaltungsmöglichkeiten des Spiels. Kreative Aspekte werden Dich mit etwas Übung sehr interessante Aufgabenstellungen finden und verwirklichen lassen.
-</p>
-<p>
-<em>Stadtgründungswerkzeug</em> Wo immer auf der Karte Du das Werkzeug platzierst, wird eine neue Stadt entstehen. Doch Vorsicht, von Deinem Kassenbestand werden ohne Vorwarnung 5.000.000 Credits abgezogen.
-</p>
-<p>
-<em>Aufforstwerkzeug</em> Während Rodungsarbeiten mit Unkosten verbunden sind, stellt Dir Simutrans Setzlinge für Aufforstungen gratis zur Verfügung. Die Landschaftsverschönerung kann eine reizvolle Aufgabe sein. Ökologische Aspekte sind derzeit aber nicht im Spiel implementiert.
-</p>
-<p>
-<em>Überlandleitungen</em> Einige der Produktionsstätten könnten ruhig mehr produzieren? Versorge sie mit Strom, und sie werden es tun. Platziere je ein <em>Umspannwerk</em> neben dem Kraftwerk und neben dem Betrieb, den Du versorgen möchtest.
-Durch die Verbindung der beiden Umspannwerke durch eine Überlandleitung wird der Betrieb mit Strom versorgt. Der Stromtransport stellt auch eine interessante Einnahmequelle dar.
-Solange Strom fließt, verdoppelt sich die Produktion jedes versorgten Betriebs.
-Ob eine Fabrik genug Strom erhält, sieht man im Spiel an einem roten Blitz auf dem Umspannwerk.
-</p>
-<p>
-<em>Marker</em> Den Marker kannst Du für die Einrichtung von Gedächtnisstützen nutzen.
-Plaziere ihn auf einer beliebigen Kachel. Editiere das sich öffnende Textfeld, bestätige dann mit "OK".
-Bei wiederholter Plazierung des Markers auf dem gleichen Feld kannst Du dich auch für die Entfernung des Markers entscheiden.<br/>
-Ein markiertes Feld geht in das Spielereigentum über. Es bleibt Dein Eigentum, auch wenn Du den Marker wieder entfernst. So ist es möglich, Felder vor der Bebauung zu schützen.
+<title>Spezialbauwerkzeuge Hilfe</title>
+
+<h1><strong>Spezialbauwerkzeuge</strong></h1>
+
+<p>
+In dieser Werkzeugleiste sind Bauwerkzeuge zusammengefasst, die nicht direkt mit den Transportnetzen zu tun haben. Bei der Auswahl eines Wergzeuges verwandelt sich der Cursor in das jeweilige Symbol.
+</p>
+<p>
+<em>Nebengebäude</em> Für die Gestaltung der Haltestellen stehen Dir verschiedene Nebengebäude zur Verfügung. Platziere sie entsprechend Deinen kreativen Vorstellungen direkt neben beliebige Haltestellenobjekte.
+Mit ihnen kannst Du auch flächige Haltestellenverbünde erreichen.
+Sie erweitern das Einzugsgebiet und das Fassungsvermögen der Haltestelle.
+Die meisten Nebengebäude bringen Haltestellen auch dazu, Passagiere, Post oder Güter umzuschlagen, besonders seien die Postgebäude erwähnt.
+Einige Nebengebäude sind auch in den anderen Bauwerkzeugen zu finden, unterscheiden sich aber in ihrer Funktion nicht von denen in diesem Menü.
+</p>
+<p>
+<em>Spielerwechsel</em> Bei der Betätigung der Schaltfläche <strong>P+</strong> oder der Tastenkombination <em>Shift</em>+<em>P</em> wechselst Du zunächst zum Spieler "öffentliche Hand". Das Menü <a href="edittools.txt">Karteneditor</a> wird geöffnet. Beim Weiterschalten gelangst Du nacheinander zu den KI-Spielern, danach wieder zum menschlichen Spieler. Hattest Du das Menü des Karteneditors geöffnet gelassen, kannst Du es nun auch als Spieler nutzen. Du erhältst weitreichende Gestaltungsmöglichkeiten des Spiels. Kreative Aspekte werden Dich mit etwas Übung sehr interessante Aufgabenstellungen finden und verwirklichen lassen.
+</p>
+<p>
+<em>Stadtgründungswerkzeug</em> Wo immer auf der Karte Du das Werkzeug platzierst, wird eine neue Stadt entstehen. Doch Vorsicht, von Deinem Kassenbestand werden ohne Vorwarnung 5.000.000 Credits abgezogen.
+</p>
+<p>
+<em>Aufforstwerkzeug</em> Während Rodungsarbeiten mit Unkosten verbunden sind, stellt Dir Simutrans Setzlinge für Aufforstungen gratis zur Verfügung. Die Landschaftsverschönerung kann eine reizvolle Aufgabe sein. Ökologische Aspekte sind derzeit aber nicht im Spiel implementiert.
+</p>
+<p>
+<em>Überlandleitungen</em> Einige der Produktionsstätten könnten ruhig mehr produzieren? Versorge sie mit Strom, und sie werden es tun. Platziere je ein <em>Umspannwerk</em> neben dem Kraftwerk und neben dem Betrieb, den Du versorgen möchtest.
+Durch die Verbindung der beiden Umspannwerke durch eine Überlandleitung wird der Betrieb mit Strom versorgt. Der Stromtransport stellt auch eine interessante Einnahmequelle dar.
+Solange Strom fließt, verdoppelt sich die Produktion jedes versorgten Betriebs.
+Ob eine Fabrik genug Strom erhält, sieht man im Spiel an einem roten Blitz auf dem Umspannwerk.
+</p>
+<p>
+<em>Marker</em> Den Marker kannst Du für die Einrichtung von Gedächtnisstützen nutzen.
+Plaziere ihn auf einer beliebigen Kachel. Editiere das sich öffnende Textfeld, bestätige dann mit "OK".
+Bei wiederholter Plazierung des Markers auf dem gleichen Feld kannst Du dich auch für die Entfernung des Markers entscheiden.<br/>
+Ein markiertes Feld geht in das Spielereigentum über. Es bleibt Dein Eigentum, auch wenn Du den Marker wieder entfernst. So ist es möglich, Felder vor der Bebauung zu schützen.
 </p>
diff --git a/simutrans/text/de/station.txt b/simutrans/text/de/station.txt
index 28b50f2..9c31c65 100644
--- a/simutrans/text/de/station.txt
+++ b/simutrans/text/de/station.txt
@@ -1,81 +1,81 @@
-<title>Haltestellenfenster Hilfe</title>
-
-<h1><strong>Haltestellenfenster</strong></h1>
-<p>
-Das Haltestellenfenster wird angezeigt, wenn Du mit dem Abfragewerkzeug (Lupe) auf ein Feld mit einer Haltestelle oder einem Erweiterungsgebäude klickst. Haltestellen sind Ausgangs-, Ziel- oder Umschlagplätze für Passagiere, Post und Güter. Hält ein Fahrzeug an einer Haltestelle, dann werden automatisch Passagiere, Post und Güter aus, um- bzw. eingladen. Haltestellen können aus einem oder mehreren Elementen wie Bahnhöfen, Bus- oder Tramhalten, Häfen, Flughäfen sowie Erweiterungsgebäuden bestehen.</p>
-<p>
-Baust Du eine Bushaltestelle auf einer Straße, Hafen im Kanal oder an der Küste, Bahnhofshalle auf der Schiene oder ein Terminal für ein Flugzeug, so entsteht dort automatisch eine neue Haltestelle. Baust Du ein Element auf eine Kachel unmittelbar neben oder über eine bestehende Haltestelle (auch schräg über Eck) wird die bereits bestehende Haltestelle erweitert. Auf diese Weise können U-Bahn-Station, ebenerdiger Bahnhof, Hochbahn, Anlegestellen für Schiffe oder auch Flughafenterminals in einer einzigen Haltestelle vereinigt werden, an der Passagiere von einem Verkehrsmittel ins andere umsteigen können. Der Weg muss im Bereich der Haltestelle gerade, kreuzungsfrei und eben sein, darf aber auch auf Brücken, Hochstrecken oder in Tunnels liegen. Einige Elemente können zusätzliche Einschränkungen haben und zum Beispiel nur auf Wegenden gebaut werden.</p>
-<p>
-An einer Haltestelle dürfen nur Fahrzeuge halten, die den gleichen <em>Besitzer</em> wie die Haltestelle haben. Eine Ausnahme sind Haltestellen, die der öffentlichen Hand gehören. Hier können alle Spieler halten und so gegenseitig Passagiere, Post und Güter austauschen.</p>
-<p>
-Auf der rechten Seite des Haltestellenfensters siehst Du ein <em>Bild der Haltestelle</em>. Klicke darauf, um das Hauptfenster auf die Haltestelle zu zentrieren.
-</p>
-<p>
-Jede Haltestelle hat drei wesentliche Eigenschaften: <em>Kapazität</em>, <em>Einzugsgebiet</em> und <em>Akzeptanz</em>. Neben den Halten gibt es Erweiterungsgebäude die die Kapazität der Haltestelle erhöhen, das Einzugsgebiet vergrößern, und/oder den Umschlag weiterer Kategorien (Passagiere, Post, Güter) ermöglichen.</p>
-<p>
-Haltestellen haben ein begrenztes <em>Einzugsgebiet</em>. Du kannst es mittels <em>v</em> oder unter <a href="display.txt">Anzeigeeinstellungen</a> ein- oder ausblenden. Passagiere, Post und Güter werden nur für Ziele innerhalb dieses Gebietes angenommen. Sehenswürdigkeiten müssen über ihre ganze Baufläche von Haltestellen erschlossen sein, sonst wird ein Teil der Passagiere, die einen Ausflug dorthin planen, unzufrieden. (s.u.)</p>
-<p>
-Der Name einer Haltestelle kann in dem Feld oben direkt geändert werden. Jede Änderung erscheint sofort auf der Karte. Unter dem Namensfeld befindet sich eine Reihe von <em>Icons</em>. Links ist der Statusbalken (s. u.). Die Icons daneben zeigen Dir, welche Kategorien (Passagiere, Post, Güter) die Station akzeptiert. Damit eine dieser drei Kategorien akzeptiert wird, muss mindestens ein Element der Haltestelle diese akzeptieren. Welche Akzeptanz ein Haltestellenelement ermöglicht, kannst Du an den Symbolen auf den Icons in den entsprechenden Baumenüs erkennen. Die folgenden Symbole zeigen an, welche Verkehrsmittel (Straßenfahrzeug, Zug, Schiff, etc.) die Haltestelle anfahren.</p>
-<p>
-Rechts davon steht die <em>Lagerkapazität</em> für Passagiere, Post und Fracht. Sind an einer Station mehr Einheiten eines Gutes vorhanden als die Kapazität, werden keine neuen mehr angenommen, die Haltestelle ist überfüllt. Die Kapazität steigt mit jedem Element, das an die Haltestelle angebaut wird. Welche Kapazität ein bestimmtes Element hat, wird in den Baumenus angezeigt. Die Auslastung der Haltestelle zeigt der Statusbalken ganz links an (derselbe, der auch auf der Karte über dem Namen steht). Er hat folgende Bedeutung:<br/>
-- Grün: Bei der Haltestelle ist alles in Ordnung.<br/>
-- Gelb: Die Haltestelle ist nicht erschlossen (kein Fahrzeug kam vorbei, nichts wartet).<br/>
-- Orange: Die Haltestelle ist mäßig überfüllt.<br/>
-- Rot: Die Haltestelle ist völlig überfüllt (mehr als 200 Einheiten über Limit) oder mehr als 200 Passagiere/Post haben ihre Reise wegen Überfüllung nicht angetreten oder eine Fabrik konnte ihre Waren nicht loswerden und musste deswegen die Produktion einstellen. In der <a href="mailbox.txt">Mailbox</a> kannst Du einrichten, ob und wie Simutrans Dich jeweils am Monatsersten über solche Haltestellen informieren soll.</p>
-<p>
-Akzeptiert eine Haltestelle Passagiere oder Post, stehen unterhalb der Symbole weitere Informationen. Das zufriedene Gesicht (&#31;) gibt an, wieviel Passagiere/Post von dieser Haltestelle aus ihre geplante Reise angetreten haben. Das unzufriedenen Gesicht (&#31;) zählt die Passagiere/Post, die wegen Überfüllung ihre Reisepläne fallengelassen haben. <em>ohne Route</em> zählt die, die keine Verbindung zu ihrem Ziel gefunden und die Reise somit nicht angetreten haben. Es gibt mehrere mögliche Ursachen:<br/>
-- Das Reiseziel liegt nicht im Einzugsbereich einer Haltestelle, oder diese nimmt keine Passagiere/Post an;<br/>
-- Es besteht keine Verbindung zum Ziel;<br/>
-- Es wären mehr Umstiege notwendig, um das Ziel zu erreichen, als sich die Passagiere gefallen lassen. Die maximale Zahl der Umstiege, die für die Passagiere (und auch Güter) zumutbar ist, ist in der Variablen <em>max_transfers</em> in der Datei <em>simutrans/config/simuconf.tab</em> festgelegt.</p>
-<p>
-Je mehr zufriedene Passagiere pro Monat befördert wurden, umso schneller werden die Städte auf der Karte wachsen. Für weitere Information siehe <a href="citywindow.txt">Stadtinformation</a>.</p>
-
-<p>
-Im unteren Bereich des Haltestellenfensters befindet sich die <em>Passagier- und Warenliste</em>. Hier sind sämtliche Passagiere und Güter aufgelistet, die an der Haltestelle auf den Weitertransport warten.<br>
-Zuerst wird die Gesammtmenge der Ware angezeigt, z.B.</p>
-<p>
-<em>·</em>83 Passagiere warten
-</p>
-<p>
-Diese wird dann weiter aufgeschlüsselt nach den einzelnen Zielen. Ist zum Erreichen des Ziels einer oder mehrere Umstiege notwendig, wird die nächste Umsteigehaltestelle angehängt.
-</p>
-<p>
-<em>··</em>27 Passagiere > Berlin Mitte H über Berlin Hauptbahnhof<br>
-<em>··</em>11 Passagiere > Stuttgart Bahnhof
-</p>
-<p>
-Es gibt verschiedene Arten der Auflistung und Sortierung. Du kannst sie über die linke der drei Schaltflächen oberhalb der Liste ändern. Die Einstellung wird gespeichert und für alle anderen Haltestellenfenster übernommen.<br>
-<em>via</em>:<br>
-Die Liste wird nach den ersten Transferhaltestellen alphabetisch sortiert.<br>
-<em>via Menge</em>:<br>
-Die Aufschlüsselung erfolgt nach der ersten Transferhaltestelle. Die Liste wird nach der Menge sortiert.<br>
-<em>Menge</em>:<br>
-Die Listensortierung erfolgt nach der Menge der Passagiere/Güterarten, die das gleiche Ziel haben.<br>
-<em>Zielort</em>:<br>
-Die Einträge werden alphabetisch nach Zielorten sortiert.
-</p>
-<p>
-Die Schaltfläche <em>Details</em> öffnet das Fenster <a href="station_details.txt">Haltestellendetails</a>. Dort findest Du zusätzliche Informationen über die Haltestelle.
-</p>
-<p>
-Über die Schaltfläche <em>Statistik</em> kannst Du einen grafischen Statistikbereich ein- und ausblenden. Die Statistik zeigt die Entwicklung einiger Werte über die letzten 12 Monate. Über die Schaltflächen unter der Statistik lassen sich die entsprechenden Werte ein- und ausblenden.<br>
-<em>Zufrieden / Unzufrieden / Keine Route</em>:<br/>
-Alle zufriedenen / unzufriedenen Passagiere, bzw. Passagiere, die keine Route gefunden haben.<br>
-<em>Angekommen / Abgefahren</em>:<br/>
-Alle angekommenen / abgefahrenen Passagiere und Güter, unabhängig davon, ob die Haltestelle das Endziel oder Umsteigepunkt war.<br/>
-<em>Wartend</em>:<br/>
-Die Gesammtzahl aller wartenden Passagiere und Güter.<br/>
-<em>Fahrzeuge</em>:<br/>
-Die Zahl aller Fahrzeuge, welche die Haltestelle angefahren haben.
-</p>
-<br/>
-<br/>
-<p>
-Über einer Haltestelle in der Welt befinden sich mehrere Anzeigeelemente. Unter <a href="display.txt">Anzeigeeinstellungen</a> oder durch mehrmalige Betätigung von <em>!</em> kannst Du die einzelnen Elemente ein- oder ausblenden.</p>
-<p>
-Der <em>Name der Haltestelle</em> steht in einem Kasten in der Farbe des Spielers, dem sie gehört. Er kann im Haltestellenfenster geändert werden.</p>
-<p>
-Über dem Haltestellennamen befindet sich ein waagrechter <em>Statusbalken</em>. Hier kannst Du den Status der Haltestelle erkennen (s.o).</p>
-<p>
-Über dem Statusbalken befinden sich senkrechte <em>Farbsäulen</em>. Jede Säule steht für eine bestimmte Ware. Die Farben der Säulen entsprechen jenen der Farbquadrate in der <a href="goods_filter.txt">Warenliste</a>. Je höher die Säule, desto mehr Einheiten dieser Ware warten auf den Weitertransport. Befindet sich ein kleiner weißer Pfeil über der Säule, warten mehr Einheiten des Gutes als die Haltestelle aufnehmen kann. Es werden nur Säulen von Waren (bzw. Warengruppen) angezeigt, die auch tatsächlich umgeschlagen werden.
+<title>Haltestellenfenster Hilfe</title>
+
+<h1><strong>Haltestellenfenster</strong></h1>
+<p>
+Das Haltestellenfenster wird angezeigt, wenn Du mit dem Abfragewerkzeug (Lupe) auf ein Feld mit einer Haltestelle oder einem Erweiterungsgebäude klickst. Haltestellen sind Ausgangs-, Ziel- oder Umschlagplätze für Passagiere, Post und Güter. Hält ein Fahrzeug an einer Haltestelle, dann werden automatisch Passagiere, Post und Güter aus, um- bzw. eingladen. Haltestellen können aus einem oder mehreren Elementen wie Bahnhöfen, Bus- oder Tramhalten, Häfen, Flughäfen sowie Erweiterungsgebäuden bestehen.</p>
+<p>
+Baust Du eine Bushaltestelle auf einer Straße, Hafen im Kanal oder an der Küste, Bahnhofshalle auf der Schiene oder ein Terminal für ein Flugzeug, so entsteht dort automatisch eine neue Haltestelle. Baust Du ein Element auf eine Kachel unmittelbar neben oder über eine bestehende Haltestelle (auch schräg über Eck) wird die bereits bestehende Haltestelle erweitert. Auf diese Weise können U-Bahn-Station, ebenerdiger Bahnhof, Hochbahn, Anlegestellen für Schiffe oder auch Flughafenterminals in einer einzigen Haltestelle vereinigt werden, an der Passagiere von einem Verkehrsmittel ins andere umsteigen können. Der Weg muss im Bereich der Haltestelle gerade, kreuzungsfrei und eben sein, darf aber auch auf Brücken, Hochstrecken oder in Tunnels liegen. Einige Elemente können zusätzliche Einschränkungen haben und zum Beispiel nur auf Wegenden gebaut werden.</p>
+<p>
+An einer Haltestelle dürfen nur Fahrzeuge halten, die den gleichen <em>Besitzer</em> wie die Haltestelle haben. Eine Ausnahme sind Haltestellen, die der öffentlichen Hand gehören. Hier können alle Spieler halten und so gegenseitig Passagiere, Post und Güter austauschen.</p>
+<p>
+Auf der rechten Seite des Haltestellenfensters siehst Du ein <em>Bild der Haltestelle</em>. Klicke darauf, um das Hauptfenster auf die Haltestelle zu zentrieren.
+</p>
+<p>
+Jede Haltestelle hat drei wesentliche Eigenschaften: <em>Kapazität</em>, <em>Einzugsgebiet</em> und <em>Akzeptanz</em>. Neben den Halten gibt es Erweiterungsgebäude die die Kapazität der Haltestelle erhöhen, das Einzugsgebiet vergrößern, und/oder den Umschlag weiterer Kategorien (Passagiere, Post, Güter) ermöglichen.</p>
+<p>
+Haltestellen haben ein begrenztes <em>Einzugsgebiet</em>. Du kannst es mittels <em>v</em> oder unter <a href="display.txt">Anzeigeeinstellungen</a> ein- oder ausblenden. Passagiere, Post und Güter werden nur für Ziele innerhalb dieses Gebietes angenommen. Sehenswürdigkeiten müssen über ihre ganze Baufläche von Haltestellen erschlossen sein, sonst wird ein Teil der Passagiere, die einen Ausflug dorthin planen, unzufrieden. (s.u.)</p>
+<p>
+Der Name einer Haltestelle kann in dem Feld oben direkt geändert werden. Jede Änderung erscheint sofort auf der Karte. Unter dem Namensfeld befindet sich eine Reihe von <em>Icons</em>. Links ist der Statusbalken (s. u.). Die Icons daneben zeigen Dir, welche Kategorien (Passagiere, Post, Güter) die Station akzeptiert. Damit eine dieser drei Kategorien akzeptiert wird, muss mindestens ein Element der Haltestelle diese akzeptieren. Welche Akzeptanz ein Haltestellenelement ermöglicht, kannst Du an den Symbolen auf den Icons in den entsprechenden Baumenüs erkennen. Die folgenden Symbole zeigen an, welche Verkehrsmittel (Straßenfahrzeug, Zug, Schiff, etc.) die Haltestelle anfahren.</p>
+<p>
+Rechts davon steht die <em>Lagerkapazität</em> für Passagiere, Post und Fracht. Sind an einer Station mehr Einheiten eines Gutes vorhanden als die Kapazität, werden keine neuen mehr angenommen, die Haltestelle ist überfüllt. Die Kapazität steigt mit jedem Element, das an die Haltestelle angebaut wird. Welche Kapazität ein bestimmtes Element hat, wird in den Baumenus angezeigt. Die Auslastung der Haltestelle zeigt der Statusbalken ganz links an (derselbe, der auch auf der Karte über dem Namen steht). Er hat folgende Bedeutung:<br/>
+- Grün: Bei der Haltestelle ist alles in Ordnung.<br/>
+- Gelb: Die Haltestelle ist nicht erschlossen (kein Fahrzeug kam vorbei, nichts wartet).<br/>
+- Orange: Die Haltestelle ist mäßig überfüllt.<br/>
+- Rot: Die Haltestelle ist völlig überfüllt (mehr als 200 Einheiten über Limit) oder mehr als 200 Passagiere/Post haben ihre Reise wegen Überfüllung nicht angetreten oder eine Fabrik konnte ihre Waren nicht loswerden und musste deswegen die Produktion einstellen. In der <a href="mailbox.txt">Mailbox</a> kannst Du einrichten, ob und wie Simutrans Dich jeweils am Monatsersten über solche Haltestellen informieren soll.</p>
+<p>
+Akzeptiert eine Haltestelle Passagiere oder Post, stehen unterhalb der Symbole weitere Informationen. Das zufriedene Gesicht (&#31;) gibt an, wieviel Passagiere/Post von dieser Haltestelle aus ihre geplante Reise angetreten haben. Das unzufriedenen Gesicht (&#31;) zählt die Passagiere/Post, die wegen Überfüllung ihre Reisepläne fallengelassen haben. <em>ohne Route</em> zählt die, die keine Verbindung zu ihrem Ziel gefunden und die Reise somit nicht angetreten haben. Es gibt mehrere mögliche Ursachen:<br/>
+- Das Reiseziel liegt nicht im Einzugsbereich einer Haltestelle, oder diese nimmt keine Passagiere/Post an;<br/>
+- Es besteht keine Verbindung zum Ziel;<br/>
+- Es wären mehr Umstiege notwendig, um das Ziel zu erreichen, als sich die Passagiere gefallen lassen. Die maximale Zahl der Umstiege, die für die Passagiere (und auch Güter) zumutbar ist, ist in der Variablen <em>max_transfers</em> in der Datei <em>simutrans/config/simuconf.tab</em> festgelegt.</p>
+<p>
+Je mehr zufriedene Passagiere pro Monat befördert wurden, umso schneller werden die Städte auf der Karte wachsen. Für weitere Information siehe <a href="citywindow.txt">Stadtinformation</a>.</p>
+
+<p>
+Im unteren Bereich des Haltestellenfensters befindet sich die <em>Passagier- und Warenliste</em>. Hier sind sämtliche Passagiere und Güter aufgelistet, die an der Haltestelle auf den Weitertransport warten.<br>
+Zuerst wird die Gesammtmenge der Ware angezeigt, z.B.</p>
+<p>
+<em>·</em>83 Passagiere warten
+</p>
+<p>
+Diese wird dann weiter aufgeschlüsselt nach den einzelnen Zielen. Ist zum Erreichen des Ziels einer oder mehrere Umstiege notwendig, wird die nächste Umsteigehaltestelle angehängt.
+</p>
+<p>
+<em>··</em>27 Passagiere > Berlin Mitte H über Berlin Hauptbahnhof<br>
+<em>··</em>11 Passagiere > Stuttgart Bahnhof
+</p>
+<p>
+Es gibt verschiedene Arten der Auflistung und Sortierung. Du kannst sie über die linke der drei Schaltflächen oberhalb der Liste ändern. Die Einstellung wird gespeichert und für alle anderen Haltestellenfenster übernommen.<br>
+<em>via</em>:<br>
+Die Liste wird nach den ersten Transferhaltestellen alphabetisch sortiert.<br>
+<em>via Menge</em>:<br>
+Die Aufschlüsselung erfolgt nach der ersten Transferhaltestelle. Die Liste wird nach der Menge sortiert.<br>
+<em>Menge</em>:<br>
+Die Listensortierung erfolgt nach der Menge der Passagiere/Güterarten, die das gleiche Ziel haben.<br>
+<em>Zielort</em>:<br>
+Die Einträge werden alphabetisch nach Zielorten sortiert.
+</p>
+<p>
+Die Schaltfläche <em>Details</em> öffnet das Fenster <a href="station_details.txt">Haltestellendetails</a>. Dort findest Du zusätzliche Informationen über die Haltestelle.
+</p>
+<p>
+Über die Schaltfläche <em>Statistik</em> kannst Du einen grafischen Statistikbereich ein- und ausblenden. Die Statistik zeigt die Entwicklung einiger Werte über die letzten 12 Monate. Über die Schaltflächen unter der Statistik lassen sich die entsprechenden Werte ein- und ausblenden.<br>
+<em>Zufrieden / Unzufrieden / Keine Route</em>:<br/>
+Alle zufriedenen / unzufriedenen Passagiere, bzw. Passagiere, die keine Route gefunden haben.<br>
+<em>Angekommen / Abgefahren</em>:<br/>
+Alle angekommenen / abgefahrenen Passagiere und Güter, unabhängig davon, ob die Haltestelle das Endziel oder Umsteigepunkt war.<br/>
+<em>Wartend</em>:<br/>
+Die Gesammtzahl aller wartenden Passagiere und Güter.<br/>
+<em>Fahrzeuge</em>:<br/>
+Die Zahl aller Fahrzeuge, welche die Haltestelle angefahren haben.
+</p>
+<br/>
+<br/>
+<p>
+Über einer Haltestelle in der Welt befinden sich mehrere Anzeigeelemente. Unter <a href="display.txt">Anzeigeeinstellungen</a> oder durch mehrmalige Betätigung von <em>!</em> kannst Du die einzelnen Elemente ein- oder ausblenden.</p>
+<p>
+Der <em>Name der Haltestelle</em> steht in einem Kasten in der Farbe des Spielers, dem sie gehört. Er kann im Haltestellenfenster geändert werden.</p>
+<p>
+Über dem Haltestellennamen befindet sich ein waagrechter <em>Statusbalken</em>. Hier kannst Du den Status der Haltestelle erkennen (s.o).</p>
+<p>
+Über dem Statusbalken befinden sich senkrechte <em>Farbsäulen</em>. Jede Säule steht für eine bestimmte Ware. Die Farben der Säulen entsprechen jenen der Farbquadrate in der <a href="goods_filter.txt">Warenliste</a>. Je höher die Säule, desto mehr Einheiten dieser Ware warten auf den Weitertransport. Befindet sich ein kleiner weißer Pfeil über der Säule, warten mehr Einheiten des Gutes als die Haltestelle aufnehmen kann. Es werden nur Säulen von Waren (bzw. Warengruppen) angezeigt, die auch tatsächlich umgeschlagen werden.
 </p>
diff --git a/simutrans/text/de/station_details.txt b/simutrans/text/de/station_details.txt
index f27a112..bb8d0ee 100644
--- a/simutrans/text/de/station_details.txt
+++ b/simutrans/text/de/station_details.txt
@@ -1,14 +1,14 @@
-<title>Haltestellen Detailinformation Hilfe</title>
-
-<h1><strong>Haltestellen Detailinformation</strong></h1>
-
-<p>
-<em>Angeschlossene Fabriken:</em> Alle im Einzugsgebiet der Haltestelle befindlichen Fabriken werden alphabetisch gelistet. Die Einzugsgebiete kannst Du mittels der Taste <em>v</em> anzeigen lassen.
-</p>
-<p>
-<em>Angenommene Waren:</em> Alle Warenarten, welche von an die Haltestelle angeschlossenen Fabriken benötigt werden, sind alphabetisch gelistet.</p>
-<p>
-<em>Linien, die diesen Stop anfahren:</em> Alle Linien, welche die Haltestelle anfahren, sind alphanumerisch gelistet. Ein Klick auf den Pfeil öffnet die <a href="linemanagement.txt">Linienverwaltung</a>.</p>
-<p>
-<em>Verkehrsverbindungen (direkt):</em> Alle Haltestellen sind gelistet, welche direkt über Linien von der Haltestelle aus angefahren werden. Dem Namen der Haltestelle folgt jeweils in einer weiteren Zeile nach einem Bindestrich die Beförderungsart. Über den Pfeil vor dem Haltestellennamen kannst du direkt zu dieser Haltestelle springen.
+<title>Haltestellen Detailinformation Hilfe</title>
+
+<h1><strong>Haltestellen Detailinformation</strong></h1>
+
+<p>
+<em>Angeschlossene Fabriken:</em> Alle im Einzugsgebiet der Haltestelle befindlichen Fabriken werden alphabetisch gelistet. Die Einzugsgebiete kannst Du mittels der Taste <em>v</em> anzeigen lassen.
+</p>
+<p>
+<em>Angenommene Waren:</em> Alle Warenarten, welche von an die Haltestelle angeschlossenen Fabriken benötigt werden, sind alphabetisch gelistet.</p>
+<p>
+<em>Linien, die diesen Stop anfahren:</em> Alle Linien, welche die Haltestelle anfahren, sind alphanumerisch gelistet. Ein Klick auf den Pfeil öffnet die <a href="linemanagement.txt">Linienverwaltung</a>.</p>
+<p>
+<em>Verkehrsverbindungen (direkt):</em> Alle Haltestellen sind gelistet, welche direkt über Linien von der Haltestelle aus angefahren werden. Dem Namen der Haltestelle folgt jeweils in einer weiteren Zeile nach einem Bindestrich die Beförderungsart. Über den Pfeil vor dem Haltestellennamen kannst du direkt zu dieser Haltestelle springen.
 </p>
diff --git a/simutrans/text/de/tramtools.txt b/simutrans/text/de/tramtools.txt
index 2593d14..e82cb88 100644
--- a/simutrans/text/de/tramtools.txt
+++ b/simutrans/text/de/tramtools.txt
@@ -1,19 +1,19 @@
-<title>Trambau Hilfe</title>
-
-<h1><strong>Trambauwerkzeuge</strong></h1>
-
-<p>
-Diese Werkzeugleiste dient dem Bau von Tramgleisen, Fahrleitungen, Depots und Haltestellen. Bei der Auswahl eines Werkzeuges verwandelt sich der Cursor in das jeweilige Symbol.
-</p>
-<p>
-<em>Tramschienen:</em> Der Bau von Schienennetzen ist in der Hilfe zu den <a href="railtools.txt">Eisenbahnbauwerkzeugen</a> beschrieben. Tramgleise können auch auf Straßen und durch Straßentunnel und über Straßenbrücken gebaut werden. (Falls das Verlegen durch Tunnel/über Brücken nicht klappt, hilft evt. beim Bauen die Ctrl-Taste gedrückt zu halten.) Die Benutzung von Eisenbahngleisen neben Straßen ist möglich.
-</p>
-<p>
-<em>Fahrleitungen und Signale:</em> Entsprechen denen in den <a href="railtools.txt">Eisenbahnbauwerkzeugen</a>.
-</p>
-<p>
-Im <em>Depot</em> kannst Du Straßenbahnen zusammenstellen sowie Linien einrichten und die Fahrzeuge nach der Zuordnung von Linien starten. Das Depot kann nur auf einem ebenen Gleisende platziert werden.
-</p>
-<p>
-<em>Tramhaltestellen:</em> Der Bau von Haltestellen ist in der Hilfe zum <a href="station.txt">Haltestellenfenster</a> beschrieben. Auf Straßen ist die Bushaltestelle zu verwenden, neben Straßen benutzt Du die Bahnhöfe.
+<title>Trambau Hilfe</title>
+
+<h1><strong>Trambauwerkzeuge</strong></h1>
+
+<p>
+Diese Werkzeugleiste dient dem Bau von Tramgleisen, Fahrleitungen, Depots und Haltestellen. Bei der Auswahl eines Werkzeuges verwandelt sich der Cursor in das jeweilige Symbol.
+</p>
+<p>
+<em>Tramschienen:</em> Der Bau von Schienennetzen ist in der Hilfe zu den <a href="railtools.txt">Eisenbahnbauwerkzeugen</a> beschrieben. Tramgleise können auch auf Straßen und durch Straßentunnel und über Straßenbrücken gebaut werden. (Falls das Verlegen durch Tunnel/über Brücken nicht klappt, hilft evt. beim Bauen die Ctrl-Taste gedrückt zu halten.) Die Benutzung von Eisenbahngleisen neben Straßen ist möglich.
+</p>
+<p>
+<em>Fahrleitungen und Signale:</em> Entsprechen denen in den <a href="railtools.txt">Eisenbahnbauwerkzeugen</a>.
+</p>
+<p>
+Im <em>Depot</em> kannst Du Straßenbahnen zusammenstellen sowie Linien einrichten und die Fahrzeuge nach der Zuordnung von Linien starten. Das Depot kann nur auf einem ebenen Gleisende platziert werden.
+</p>
+<p>
+<em>Tramhaltestellen:</em> Der Bau von Haltestellen ist in der Hilfe zum <a href="station.txt">Haltestellenfenster</a> beschrieben. Auf Straßen ist die Bushaltestelle zu verwenden, neben Straßen benutzt Du die Bahnhöfe.
 </p>
diff --git a/simutrans/text/de/use.txt b/simutrans/text/de/use.txt
index 12063b5..fd62d10 100644
--- a/simutrans/text/de/use.txt
+++ b/simutrans/text/de/use.txt
@@ -1,33 +1,33 @@
-<title>Nutzung der Hilfe</title>
-
-<h1><strong>Nutzung der Hilfe</strong></h1>
-
-<p>
-<strong>· </strong><em>Aufruf der Hilfe:</em> Die Liste der Hilfethemen ist im Spiel über die Taste <em>F1</em> verfügbar. Die deutschen Textdateien der Hilfe liegen im Simutrans-Verzeichnis simutrans/text/de. (Die Verzeichnispfade sind nach dem UNIX-Standard notiert. Unter WINDOWS werden die "/" gegen "\" ersetzt).
-</p>
-<p>
-Tastaturbelegungen sind in der Hilfe weiß hervorgehoben. <em>Achtung</em> es wird zwischen Groß- und Kleinschreibung unterschieden.
-</p>
-<p>
-Für Fahrzeugzusammenstellungen wird der Begriff Konvoi verwendet.
-</p>
-<p>
-<strong>· </strong><em>Beschreibungsreihenfolge:</em> Die Beschreibungen der Buttons/Schaltflächen und ihrer Funktionen erfolgen in der Reihenfolge ihrer Platzierung von links nach rechts und von oben nach unten.
-</p>
-<p>
-<strong>· </strong><em>Rechtschreibung:</em> Das "ß" wird nicht im gesamten deutschen Sprachraum (Schweiz) genutzt. In der Simutrans-Hilfe kann das "ß" durch "ss" ersetzt sein, wenn der Autor aus diesem Raum stammt.
-</p>
-<p>
-<strong>· </strong><em>Links:</em> Die unterstrichenen weißen und blauen Einträge (Links) führen zu weiteren Hilfeseiten.
-</p>
-<p>
-<strong>· </strong><em>Betrieb/Verkehr:</em>  Innerbetriebliches Geschehen wie die Bewegungen von Transportfahrzeugen und -Schiffen werden als Betrieb bezeichnet. Die Bewegungen von Personen und Cityfahrzeugen representieren den Verkehr.
-</p>
-<p>
-<strong>· </strong><em>pak:</em> Simutrans kannst Du in verschiedenen Grafikversionen (paks) spielen. Die Standardversion heist "pak" und hat ein Kachelmaß von 64px mal 64px. Andere Versionen sind in der Form "pak.name" bezeichnet. Ressourcen dieser Paks sind häufig untereinander austauschbar.
-<br/>
-<strong>Warnung:</strong> Das Pak "pak128" ist nur allein spielbar, da bei ihm das Kachelmaß auf 128px mal 128px vergrößert wurde.
-</p>
-<p>
-<strong>· </strong><em>pak-Erweiterungen/Addon:</em> Zu den einzelnen Paks kann es Erweiterungen geben. Dadurch können weitere Industrieketten und Fahrzeuge hinzugefügt werden.
+<title>Nutzung der Hilfe</title>
+
+<h1><strong>Nutzung der Hilfe</strong></h1>
+
+<p>
+<strong>· </strong><em>Aufruf der Hilfe:</em> Die Liste der Hilfethemen ist im Spiel über die Taste <em>F1</em> verfügbar. Die deutschen Textdateien der Hilfe liegen im Simutrans-Verzeichnis simutrans/text/de. (Die Verzeichnispfade sind nach dem UNIX-Standard notiert. Unter WINDOWS werden die "/" gegen "\" ersetzt).
+</p>
+<p>
+Tastaturbelegungen sind in der Hilfe weiß hervorgehoben. <em>Achtung</em> es wird zwischen Groß- und Kleinschreibung unterschieden.
+</p>
+<p>
+Für Fahrzeugzusammenstellungen wird der Begriff Konvoi verwendet.
+</p>
+<p>
+<strong>· </strong><em>Beschreibungsreihenfolge:</em> Die Beschreibungen der Buttons/Schaltflächen und ihrer Funktionen erfolgen in der Reihenfolge ihrer Platzierung von links nach rechts und von oben nach unten.
+</p>
+<p>
+<strong>· </strong><em>Rechtschreibung:</em> Das "ß" wird nicht im gesamten deutschen Sprachraum (Schweiz) genutzt. In der Simutrans-Hilfe kann das "ß" durch "ss" ersetzt sein, wenn der Autor aus diesem Raum stammt.
+</p>
+<p>
+<strong>· </strong><em>Links:</em> Die unterstrichenen weißen und blauen Einträge (Links) führen zu weiteren Hilfeseiten.
+</p>
+<p>
+<strong>· </strong><em>Betrieb/Verkehr:</em>  Innerbetriebliches Geschehen wie die Bewegungen von Transportfahrzeugen und -Schiffen werden als Betrieb bezeichnet. Die Bewegungen von Personen und Cityfahrzeugen representieren den Verkehr.
+</p>
+<p>
+<strong>· </strong><em>pak:</em> Simutrans kannst Du in verschiedenen Grafikversionen (paks) spielen. Die Standardversion heist "pak" und hat ein Kachelmaß von 64px mal 64px. Andere Versionen sind in der Form "pak.name" bezeichnet. Ressourcen dieser Paks sind häufig untereinander austauschbar.
+<br/>
+<strong>Warnung:</strong> Das Pak "pak128" ist nur allein spielbar, da bei ihm das Kachelmaß auf 128px mal 128px vergrößert wurde.
+</p>
+<p>
+<strong>· </strong><em>pak-Erweiterungen/Addon:</em> Zu den einzelnen Paks kann es Erweiterungen geben. Dadurch können weitere Industrieketten und Fahrzeuge hinzugefügt werden.
 </p>
diff --git a/simutrans/text/dk/color.txt b/simutrans/text/dk/color.txt
index d42a14c..f1a1632 100644
--- a/simutrans/text/dk/color.txt
+++ b/simutrans/text/dk/color.txt
@@ -1,17 +1,17 @@
-<title>Farve vælger hjælp</title>
-
-<h1>Farve vælger</h1>
-
-<p>
-<em>Udseende:</em><br>
-Dialogen består af en tekst med tilhørende farvepalette, hvor en farve vælges
-ved at venstreklikke på farven.
-</p>
-
-<p>
-<em>Beskrivelse:</em><br>
-Her kan du vælge din firmafarve. Firmafarven er den farve, som alle dine
-besiddelser såsom toge, bygninger etc. vil have. Bemærk venligst, at ikke alle
-objekter vil være "farvekodet". Det er et valg, der er overladt til den
-respektive designer.
+<title>Farve vælger hjælp</title>
+
+<h1>Farve vælger</h1>
+
+<p>
+<em>Udseende:</em><br>
+Dialogen består af en tekst med tilhørende farvepalette, hvor en farve vælges
+ved at venstreklikke på farven.
+</p>
+
+<p>
+<em>Beskrivelse:</em><br>
+Her kan du vælge din firmafarve. Firmafarven er den farve, som alle dine
+besiddelser såsom toge, bygninger etc. vil have. Bemærk venligst, at ikke alle
+objekter vil være "farvekodet". Det er et valg, der er overladt til den
+respektive designer.
 </p>
diff --git a/simutrans/text/dk/convoi.txt b/simutrans/text/dk/convoi.txt
index cdfcafa..00e3657 100644
--- a/simutrans/text/dk/convoi.txt
+++ b/simutrans/text/dk/convoi.txt
@@ -1,59 +1,59 @@
-<title>Køretøjsliste dialog hjælp</title>
-
-<h1>Køretøjsliste dialog</h1>
-
-<p>
-<em>Beskrivelse:</em><br>
-Køretøjsliste dialogen giver et overblik over samtlige køretøjer (lastbiler,
-busser, hestevogne, toge og skibe) med mulighed for at sortere og/eller
-filtrere disse efter parametre såsom navn, indtægt og type.
-</p>
-
-<p>
-<em>Udseende:</em><br>
-Øverst i dialogen er overskrifterne: 'Sorteret efter:' og 'Filter:'.<br>
-Til 'Sorteret efter:' er knyttet to "tilstands-knapper", der som default
-indstilling henholdsvis har tilstandende 'navn' samt 'stigende'.<br>
-Til 'Filter:' er der knyttet en 'tilstands-knap' med default tilstanden
-'inaktiv' samt en knap med titlen 'indstil filter'. <br>
-Resten af dialogen består af en liste indeholdende samtlige dine
-køretøjer. For alle køretøjer er angivet dets nummer, navn og fortjeneste.
-</p>
-
-<p>
-Ved at venstreklikke på et køretøj i listen kan man få dets<br>
-<a href="vehicle.txt">køretøj dialog</a> frem.
-</p>
-
-<p>
-Køretøjerne i listen kan sorteres ved hjælp af "tilstandsknapperne"
-under 'Sorteret efter:' overskriften.<br>
-Knappen til venstre giver sorteringstypen og knappen til højre angiver, om
-denne sortering skal foretages 'stigende' eller 'faldende'.<br>
-De tre sorteringstyper er:
-</p>
-
-<p>
-<em>Navn</em> - Sorterer køretøjerne efter navn. Enten alfabetisk eller
-omvendt alfabetisk alt efter indstillingen af knappen til venstre.
-</p>
-
-<p>
-<em>Indtægt</em> - Sorterer køretøjerne efter størrelsen af køretøjets
-indtjening. Stigende eller faldende alt efter højre-knappens tilstand.
-</p>
-
-<p>
-<em>Type</em> - Sorterer køretøjerne efter deres type, hvor rækkefølgen:
-biler, toge, skibe anses for stigende.
-</p>
-
-<p>
-For at lette overblikket af listen kan køretøjerne filtreres efter
-forskellige kriterier. Dette sker ved hjælp af knapperne under 'Filter:'
-overskriften.<br>
-Knappen til venstre er en "tilstands-knap". Denne knap kontrollerer
-filteranvendeksen med tilstandene 'inaktivt' og 'aktivt'. Knappen til højre
-med teksten 'indstil filter'<br>
-åbner for<a href="convoi_filter.txt">filter dialogen</a>
+<title>Køretøjsliste dialog hjælp</title>
+
+<h1>Køretøjsliste dialog</h1>
+
+<p>
+<em>Beskrivelse:</em><br>
+Køretøjsliste dialogen giver et overblik over samtlige køretøjer (lastbiler,
+busser, hestevogne, toge og skibe) med mulighed for at sortere og/eller
+filtrere disse efter parametre såsom navn, indtægt og type.
+</p>
+
+<p>
+<em>Udseende:</em><br>
+Øverst i dialogen er overskrifterne: 'Sorteret efter:' og 'Filter:'.<br>
+Til 'Sorteret efter:' er knyttet to "tilstands-knapper", der som default
+indstilling henholdsvis har tilstandende 'navn' samt 'stigende'.<br>
+Til 'Filter:' er der knyttet en 'tilstands-knap' med default tilstanden
+'inaktiv' samt en knap med titlen 'indstil filter'. <br>
+Resten af dialogen består af en liste indeholdende samtlige dine
+køretøjer. For alle køretøjer er angivet dets nummer, navn og fortjeneste.
+</p>
+
+<p>
+Ved at venstreklikke på et køretøj i listen kan man få dets<br>
+<a href="vehicle.txt">køretøj dialog</a> frem.
+</p>
+
+<p>
+Køretøjerne i listen kan sorteres ved hjælp af "tilstandsknapperne"
+under 'Sorteret efter:' overskriften.<br>
+Knappen til venstre giver sorteringstypen og knappen til højre angiver, om
+denne sortering skal foretages 'stigende' eller 'faldende'.<br>
+De tre sorteringstyper er:
+</p>
+
+<p>
+<em>Navn</em> - Sorterer køretøjerne efter navn. Enten alfabetisk eller
+omvendt alfabetisk alt efter indstillingen af knappen til venstre.
+</p>
+
+<p>
+<em>Indtægt</em> - Sorterer køretøjerne efter størrelsen af køretøjets
+indtjening. Stigende eller faldende alt efter højre-knappens tilstand.
+</p>
+
+<p>
+<em>Type</em> - Sorterer køretøjerne efter deres type, hvor rækkefølgen:
+biler, toge, skibe anses for stigende.
+</p>
+
+<p>
+For at lette overblikket af listen kan køretøjerne filtreres efter
+forskellige kriterier. Dette sker ved hjælp af knapperne under 'Filter:'
+overskriften.<br>
+Knappen til venstre er en "tilstands-knap". Denne knap kontrollerer
+filteranvendeksen med tilstandene 'inaktivt' og 'aktivt'. Knappen til højre
+med teksten 'indstil filter'<br>
+åbner for<a href="convoi_filter.txt">filter dialogen</a>
 </p>
diff --git a/simutrans/text/dk/convoi_filter.txt b/simutrans/text/dk/convoi_filter.txt
index c63ec67..758d2a3 100644
--- a/simutrans/text/dk/convoi_filter.txt
+++ b/simutrans/text/dk/convoi_filter.txt
@@ -1,71 +1,71 @@
-<title>Køretøjsliste filter dialog hjælp</title>
-
-<h1>Køretøjsliste filter dialog</h1>
-
-<p>
-<em>Beskrivelse:</em><br>
-Denne filter dialog anvendes til at udvælge (filtrere) de køretøjer, som du
-ønsker at betragte i<br>
-<a href="convoi.txt">Køretøjsliste dialogen</a>
-</p>
-
-<p>
-<em>Udseende:</em><br>
-Til venstre findes tre filteroverskrifter, henholdsvis 'Filtrer på navn:',
-'Filtrer på type:' og 'Specialfilter:'. Til højre for disse findes en liste med
-overskriften 'Filtrer på varer:'. Under denne overskrifter findes tre knapper
-med teksterne 'alle', 'ingen' og 'inv.'. Listen består af en trykknap for
-samtlige varetyper.
-</p>
-
-<p>
-Samtlige fire overskrifter har en chechbox-knap tilknyttet.
-</p>
-
-<p>
-<strong>Bemærk - For at få foretaget en filtrering med en eller flere af de fire
-filtrerings muligheder skal:<br>
-a) Chechbox-knappen til venstre for overskriften trykkes ned.<br>
-b) Tilstandsknappen under overskriften 'Filter:' i</strong>
-<a href="convoi.txt">Køretøjsliste dialogen</a><strong> sættes til
-'aktivt'</strong>
-</p>
-
-<p>
-De tre filtreringsmuligheder til venstre er:
-</p>
-
-<p>
-<em>Filtrer på navn:</em><br>
-Her er der mulighed for at udvælge køretøjer med et fælles navn. Dette gøres
-ved at skrive en del af eller hele det ønskede navn i listboksen under
-overskriften. F.eks vil en indtastning af 'Ben' give alle toge, hvis navn
-begynder med Bennhardt. <strong>Bemærk at søgningen er
-"case-sensitive"</strong>
-</p>
-
-<p>
-<em>Filtrer på type:</em><br>
-Her er der mulighed for at udvælge køretøjer efter deres type. De mulige typer
-er Busser/lastbiler, tog, og skibe.
-</p>
-
-<p>
-<em>Special filter:</em><br>
-
-Her er der mulighed for at udvælge køretøjer, der opfylder følgende:<br>
-- Ingen rute (ikke kan finde en forbindelse)<br>
-- Ingen ruteplan har (ikke har fået en ruteplan tilknyttet)<br>
-- Ingen indtægt (i indeværende år)
-</p>
-
-<p>
-Listen til højre giver mulighed for at udvælge køretøjer udfra de varer, der
-transporteres på køretøjet. <strong>Bemærk at dette filter ikke er helt
-up-to-date, idet der for bulkgods og stykgodsvarer filtreres efter
-køretøjsbetegnelsen fremfor varetypen. Dvs. hvis der transporteres kul i en
-stenvogn, vil køretøjet fremgå under varetypen "sten" i stedet for
-"kul".</strong> De tre knapper under overskriften anvendes til at vælge
-henholdsvis alle eller ingen af de mulige varetyper samt til at foretage den
-"inverse" trykknap udvælgelse.
+<title>Køretøjsliste filter dialog hjælp</title>
+
+<h1>Køretøjsliste filter dialog</h1>
+
+<p>
+<em>Beskrivelse:</em><br>
+Denne filter dialog anvendes til at udvælge (filtrere) de køretøjer, som du
+ønsker at betragte i<br>
+<a href="convoi.txt">Køretøjsliste dialogen</a>
+</p>
+
+<p>
+<em>Udseende:</em><br>
+Til venstre findes tre filteroverskrifter, henholdsvis 'Filtrer på navn:',
+'Filtrer på type:' og 'Specialfilter:'. Til højre for disse findes en liste med
+overskriften 'Filtrer på varer:'. Under denne overskrifter findes tre knapper
+med teksterne 'alle', 'ingen' og 'inv.'. Listen består af en trykknap for
+samtlige varetyper.
+</p>
+
+<p>
+Samtlige fire overskrifter har en chechbox-knap tilknyttet.
+</p>
+
+<p>
+<strong>Bemærk - For at få foretaget en filtrering med en eller flere af de fire
+filtrerings muligheder skal:<br>
+a) Chechbox-knappen til venstre for overskriften trykkes ned.<br>
+b) Tilstandsknappen under overskriften 'Filter:' i</strong>
+<a href="convoi.txt">Køretøjsliste dialogen</a><strong> sættes til
+'aktivt'</strong>
+</p>
+
+<p>
+De tre filtreringsmuligheder til venstre er:
+</p>
+
+<p>
+<em>Filtrer på navn:</em><br>
+Her er der mulighed for at udvælge køretøjer med et fælles navn. Dette gøres
+ved at skrive en del af eller hele det ønskede navn i listboksen under
+overskriften. F.eks vil en indtastning af 'Ben' give alle toge, hvis navn
+begynder med Bennhardt. <strong>Bemærk at søgningen er
+"case-sensitive"</strong>
+</p>
+
+<p>
+<em>Filtrer på type:</em><br>
+Her er der mulighed for at udvælge køretøjer efter deres type. De mulige typer
+er Busser/lastbiler, tog, og skibe.
+</p>
+
+<p>
+<em>Special filter:</em><br>
+
+Her er der mulighed for at udvælge køretøjer, der opfylder følgende:<br>
+- Ingen rute (ikke kan finde en forbindelse)<br>
+- Ingen ruteplan har (ikke har fået en ruteplan tilknyttet)<br>
+- Ingen indtægt (i indeværende år)
+</p>
+
+<p>
+Listen til højre giver mulighed for at udvælge køretøjer udfra de varer, der
+transporteres på køretøjet. <strong>Bemærk at dette filter ikke er helt
+up-to-date, idet der for bulkgods og stykgodsvarer filtreres efter
+køretøjsbetegnelsen fremfor varetypen. Dvs. hvis der transporteres kul i en
+stenvogn, vil køretøjet fremgå under varetypen "sten" i stedet for
+"kul".</strong> De tre knapper under overskriften anvendes til at vælge
+henholdsvis alle eller ingen af de mulige varetyper samt til at foretage den
+"inverse" trykknap udvælgelse.
 </p>
diff --git a/simutrans/text/dk/depot.txt b/simutrans/text/dk/depot.txt
index 90a657f..85f9915 100644
--- a/simutrans/text/dk/depot.txt
+++ b/simutrans/text/dk/depot.txt
@@ -1,122 +1,122 @@
-<title>Depot dialog hjælp</title>
-
-<h1>Depot Dialog</h1>
-
-<p>
-<strong>I det følgende benyttes betegnelsen "køretøj" som samlebetegnelse for
-såvel enkeltkøretøjer som sammensatte køretøjer, toge og skibe.</strong>
-</p>
-
-<p>
-<em>Beskrivelse:</em><br>
-I et depot har du mulighed for at købe, sælge og lave ruteplaner for diverse
-køretøjer alt efter depottype. F.eks vejkøretøjer og anhængere i et vejdepot,
-toge og togvogne i et togdepot samt skibe i et skibsdepot.<br>
-Depot dialogen indeholder information om de køretøjer, du er i færd med at købe
-samt de køretøjer, som du allerede har købt, men endnu ikke har startet.
-</p>
-
-<p>
-<em>Udseende:</em><br>
-Øverst er en liste, der indeholder alle de købte køretøjer, som endnu ikke er
-blevet sendt ud af depotet (har fået tildelt ruteplan og er blevet
-startet). Det aktuelle køretøj er vist og de andre køretøjer fås frem ved at
-benytte scroll-knapperne ved siden af listen<br>
-Herunder er en analog liste, der indeholder alle de ruter, der er defineret.
-Den aktuelle rute er vist og de øvrige ruter fås ved at benytte
-scroll-knapperne<br>
-Dernæst følger et areal, hvor et billede af det aktuelle køretøj er vist.<br>
-Herunder er fire knapper, der er tilknyttet køretøjslisten: 'Start'
-'Ruteplan', 'Adskil' og 'Sælg'. Disse knapper giver mulighed for at starte, at
-lave ruteplan til, at adskille samt at sælge det aktuelle køretøj.<br>
-Derunder er fire knapper, der er tilknyttet rutelisten: 'Ny rute' 'Tilnyt
-rute', 'Opdater rute' og 'Slet rute'. Disse knapper giver mulighed for at
-oprette en ny rute, at tilknytte den aktuelle rute til det aktuelle køretøj,
-at opdatere samt at slette den aktuelle rute. Derunder er to faneblade der
-indeholder de køretøjer og anhængere (Lokomotiver/togvogne, skibe), der kan
-købes<br>
-Herunder er et areal, der bruges til visning af oplysninger for køretøjerne på
-fanebladene. For at se oplysningerne om et køretøj, skal musen holdes over det
-pågældende køretøj på fanebladet.<br>
-Til højre på visningsarealet er en tilstands-knap, der ved tryk skifter
-imellem tre tilstande, henholdsvis: 'koble på', 'sætte foran' og 'sælge'.
-</p>
-
-<p>
-<em>Køb køretøj:</em><br>
-For at købe et køretøj, må der ikke være valgt et aktuelt køretøj -
-køretøjslisten "klikkes fremad" indtil den viser 'vælg nyt køretøj'. Derefter
-købes køretøjet ved at venstreklikke på det i fanebladet. Køretøjet vil
-derefter være vist som det aktuelle køretøj i det øverste visningsareal. Ved
-at anvende tilstands-knappen nederst til højre er det muligt at se hvilke
-køretøjer/anhængere, der henholdsvis kan "sættes foran/kobles på" det købte
-køretøj (dette markeres ved grønne bjælker i fanebladet under de mulige
-køretøjer)<br>
-Når det aktuelle køretøj er færdigsammensat, kan det tildeles en ruteplan og
-startes, eller du kan købe og sammensætte et nyt køretøj ved at "klikke
-fremad" på køretøjslisten foroven i dialogen.
-</p>
-
-<p>
-<em>Start køretøj:</em><br>
-Efter tildeling af ruteplan kan det aktuelle køretøj startes ved at trykke på
-'Start' knappen.
-</p>
-
-<p>
-<em>Tildel ruteplan:</em><br>
-
-For at tildele det aktuelle køretøj en "individuel "ruteplan trykkes på
-'Ruteplan' knappen, hvorefter ruteplanen defineres vha. den fremkomne
-<a href='schedule.txt'>ruteplansdialog.</a> Dette er kun fordelagtigt, hvis du
-ved, at køretøjet er det eneste, der vil benytte denne rute. Ifald du vil
-indsætte flere køretøjer på den samme rute, er det bedre først at definere
-ruten ved et trykke på 'Ny rute' og udfylde den fremkomne
-<a href='schedule.txt'>ruteplansdialog</a>. Derefter figurerer ruten, som den
-aktuelle rute i rutelisten og kan tilknyttes det aktuelle køretøj ved at
-trykke på 'Tilknyt rute' knappen.
-</p>
-
-<p>
-<em>Adskil køretøj:</em><br>
-Det er muligt at adskille det aktuelle køretøj ved at trykke på 'Adskil'
-knappen. Køretøjet vil blive opdelt (f.eks i en lastbil og en anhænger) og
-derefter optræde som til rådighed stående enkeltkøretøjer på
-fanebladene. Disse enkeltkøretøjer kan benyttes til nye
-køretøjssammensætninger eller sælges ved at vælge "sælge-tilstanden" på
-tilstandsknappen nederst til højre og venstreklikke på enkeltkøretøjet i
-fanebladet.
-</p>
-
-<p>
-<em>Sælg køretøj:</em><br>
-For at sælge (hele) det aktuelle køretøj trykkes på 'Sælg' knappen.
-</p>
-
-<p>
-<em>Opret ny rute:</em><br>
-For at oprette en ny rute trykkes på 'Ny rute' knappen og derefter benyttes
-<a href='schedule.txt'>ruteplansdialogen</a>.
-</p>
-
-<p>
-<em>Tilknyt rute til køretøj:</em><br>
-For at tilknytte en rute til et køretøj vælges køretøjet som det aktuelle
-køretøj i køretøjslisten. Dernæst vælges den ønskede rute i rutelisten (eventuelt oprettes den
-først som nævnt ovenfor) og herefter trykkes på 'Tilknyt rute' knappen.
-</p>
-
-<p>
-<em>Opdater eller slet rute:</em><br>
-For at opdatere eller slette en rute vælges den ønskede rute i rutelisten og
-herefter trykkes enten på Opdater rute' knappen, hvorefter
-<a href='schedule.txt'>ruteplansdialogen</a> fremkommer eller på 'Slet rute'
-knappen, hvorefter ruten slettes fra rutelisten.
-</p>
-
-<p>
-For senere at sende et køretøj tilbage i depotet, skal du indføje depotet i
-køretøjets ruteplan - f.eks som næste rutemål. Efter køretøjet er kommet
-tilbage i depotet figurerer det i køretøjslisten og kan efter behag udbygges,
-adskilles, tildeles rute eller sælges.
+<title>Depot dialog hjælp</title>
+
+<h1>Depot Dialog</h1>
+
+<p>
+<strong>I det følgende benyttes betegnelsen "køretøj" som samlebetegnelse for
+såvel enkeltkøretøjer som sammensatte køretøjer, toge og skibe.</strong>
+</p>
+
+<p>
+<em>Beskrivelse:</em><br>
+I et depot har du mulighed for at købe, sælge og lave ruteplaner for diverse
+køretøjer alt efter depottype. F.eks vejkøretøjer og anhængere i et vejdepot,
+toge og togvogne i et togdepot samt skibe i et skibsdepot.<br>
+Depot dialogen indeholder information om de køretøjer, du er i færd med at købe
+samt de køretøjer, som du allerede har købt, men endnu ikke har startet.
+</p>
+
+<p>
+<em>Udseende:</em><br>
+Øverst er en liste, der indeholder alle de købte køretøjer, som endnu ikke er
+blevet sendt ud af depotet (har fået tildelt ruteplan og er blevet
+startet). Det aktuelle køretøj er vist og de andre køretøjer fås frem ved at
+benytte scroll-knapperne ved siden af listen<br>
+Herunder er en analog liste, der indeholder alle de ruter, der er defineret.
+Den aktuelle rute er vist og de øvrige ruter fås ved at benytte
+scroll-knapperne<br>
+Dernæst følger et areal, hvor et billede af det aktuelle køretøj er vist.<br>
+Herunder er fire knapper, der er tilknyttet køretøjslisten: 'Start'
+'Ruteplan', 'Adskil' og 'Sælg'. Disse knapper giver mulighed for at starte, at
+lave ruteplan til, at adskille samt at sælge det aktuelle køretøj.<br>
+Derunder er fire knapper, der er tilknyttet rutelisten: 'Ny rute' 'Tilnyt
+rute', 'Opdater rute' og 'Slet rute'. Disse knapper giver mulighed for at
+oprette en ny rute, at tilknytte den aktuelle rute til det aktuelle køretøj,
+at opdatere samt at slette den aktuelle rute. Derunder er to faneblade der
+indeholder de køretøjer og anhængere (Lokomotiver/togvogne, skibe), der kan
+købes<br>
+Herunder er et areal, der bruges til visning af oplysninger for køretøjerne på
+fanebladene. For at se oplysningerne om et køretøj, skal musen holdes over det
+pågældende køretøj på fanebladet.<br>
+Til højre på visningsarealet er en tilstands-knap, der ved tryk skifter
+imellem tre tilstande, henholdsvis: 'koble på', 'sætte foran' og 'sælge'.
+</p>
+
+<p>
+<em>Køb køretøj:</em><br>
+For at købe et køretøj, må der ikke være valgt et aktuelt køretøj -
+køretøjslisten "klikkes fremad" indtil den viser 'vælg nyt køretøj'. Derefter
+købes køretøjet ved at venstreklikke på det i fanebladet. Køretøjet vil
+derefter være vist som det aktuelle køretøj i det øverste visningsareal. Ved
+at anvende tilstands-knappen nederst til højre er det muligt at se hvilke
+køretøjer/anhængere, der henholdsvis kan "sættes foran/kobles på" det købte
+køretøj (dette markeres ved grønne bjælker i fanebladet under de mulige
+køretøjer)<br>
+Når det aktuelle køretøj er færdigsammensat, kan det tildeles en ruteplan og
+startes, eller du kan købe og sammensætte et nyt køretøj ved at "klikke
+fremad" på køretøjslisten foroven i dialogen.
+</p>
+
+<p>
+<em>Start køretøj:</em><br>
+Efter tildeling af ruteplan kan det aktuelle køretøj startes ved at trykke på
+'Start' knappen.
+</p>
+
+<p>
+<em>Tildel ruteplan:</em><br>
+
+For at tildele det aktuelle køretøj en "individuel "ruteplan trykkes på
+'Ruteplan' knappen, hvorefter ruteplanen defineres vha. den fremkomne
+<a href='schedule.txt'>ruteplansdialog.</a> Dette er kun fordelagtigt, hvis du
+ved, at køretøjet er det eneste, der vil benytte denne rute. Ifald du vil
+indsætte flere køretøjer på den samme rute, er det bedre først at definere
+ruten ved et trykke på 'Ny rute' og udfylde den fremkomne
+<a href='schedule.txt'>ruteplansdialog</a>. Derefter figurerer ruten, som den
+aktuelle rute i rutelisten og kan tilknyttes det aktuelle køretøj ved at
+trykke på 'Tilknyt rute' knappen.
+</p>
+
+<p>
+<em>Adskil køretøj:</em><br>
+Det er muligt at adskille det aktuelle køretøj ved at trykke på 'Adskil'
+knappen. Køretøjet vil blive opdelt (f.eks i en lastbil og en anhænger) og
+derefter optræde som til rådighed stående enkeltkøretøjer på
+fanebladene. Disse enkeltkøretøjer kan benyttes til nye
+køretøjssammensætninger eller sælges ved at vælge "sælge-tilstanden" på
+tilstandsknappen nederst til højre og venstreklikke på enkeltkøretøjet i
+fanebladet.
+</p>
+
+<p>
+<em>Sælg køretøj:</em><br>
+For at sælge (hele) det aktuelle køretøj trykkes på 'Sælg' knappen.
+</p>
+
+<p>
+<em>Opret ny rute:</em><br>
+For at oprette en ny rute trykkes på 'Ny rute' knappen og derefter benyttes
+<a href='schedule.txt'>ruteplansdialogen</a>.
+</p>
+
+<p>
+<em>Tilknyt rute til køretøj:</em><br>
+For at tilknytte en rute til et køretøj vælges køretøjet som det aktuelle
+køretøj i køretøjslisten. Dernæst vælges den ønskede rute i rutelisten (eventuelt oprettes den
+først som nævnt ovenfor) og herefter trykkes på 'Tilknyt rute' knappen.
+</p>
+
+<p>
+<em>Opdater eller slet rute:</em><br>
+For at opdatere eller slette en rute vælges den ønskede rute i rutelisten og
+herefter trykkes enten på Opdater rute' knappen, hvorefter
+<a href='schedule.txt'>ruteplansdialogen</a> fremkommer eller på 'Slet rute'
+knappen, hvorefter ruten slettes fra rutelisten.
+</p>
+
+<p>
+For senere at sende et køretøj tilbage i depotet, skal du indføje depotet i
+køretøjets ruteplan - f.eks som næste rutemål. Efter køretøjet er kommet
+tilbage i depotet figurerer det i køretøjslisten og kan efter behag udbygges,
+adskilles, tildeles rute eller sælges.
 </p>
diff --git a/simutrans/text/dk/display.txt b/simutrans/text/dk/display.txt
index 1cf637a..570d540 100644
--- a/simutrans/text/dk/display.txt
+++ b/simutrans/text/dk/display.txt
@@ -1,65 +1,65 @@
-<title>Udseende dialog hjælp</title>
-
-<h1>Udseende dialog</h1>
-
-<p>
-<em>Beskrivelse:</em><br>
-Udseende dialogen giver mulighed for at ændre diverser indstillinger
-vedrørende Simutrans' udseende.<br>
-</p>
-
-<p>
-<em>Udseende:</em><br>
-Øverst i dialogen er tre lister med teksterne 'Lysstyrke:', 'Farver:' og
-'Scrolltempo:'. Hver liste har "scroll-knapper" tilknyttet. Herunder er tre
-"checkbokse" med tilhørende tekster 'Omvendt scrollning', 'Vis fodgængere' og
-Dag og nat indstilling. Nederst er en række aktuelle belastningsoplysninger
-vist.
-</p>
-
-<p>
-Følgende indstillinger er mulige:
-</p>
-
-<p>
-<em>Lysstyrke:</em><br>
-Gør kortet lysere eller mørkere.
-</p>
-
-<p>
-<em>Farver:</em><br>
-Ingen effekt
-</p>
-
-<p>
-<em>Scrolltempo:</em><br>
-Jo højere indstilling, desto hurtigere vil skærmenbilledet scrolle.
-</p>
-
-<p>
-<em>Omvendt scrollning</em><br>
-Her kan indstilles om kortet skal bevæge sig op eller ned, når der scrolles
-opad og analogt med hensyn til venstre og højre. (fly-lignende
-kontroller). Det er nemmere at afprøve, end at skulle forklare :-)
-</p>
-
-<p>
-<em>Vis fodgængere</em><br>
-Her kan indstilles om computeren skal skabe og vise fodgængere i byerne og
-omkring rutemål. Hvis din makine døjer med at opdatere skærmbilledet, så slå
-denne indstilling fra.
-</p>
-
-<p>
-<em>Dag og nat indstilling</em><br>
-Her indstilles om der alt efter tidspunktet skal skiftes imellem dag (lyst) og
-nat (mørkt) indstilling. Prøv det af !
-</p>
-
-<p>
-Den nederste halvdel af dialogen indeholder information omkring hvorledes din
-computer klarer den aktuelle belastning. Disse værdier er ikke interessante
-med mindre du ved, hvad de står for.<br>
-<strong>Vigtigt</strong>Du kan blive bedt om at nævne disse værdier, når du
-diskuterer performance problemer og andre bugs.
+<title>Udseende dialog hjælp</title>
+
+<h1>Udseende dialog</h1>
+
+<p>
+<em>Beskrivelse:</em><br>
+Udseende dialogen giver mulighed for at ændre diverser indstillinger
+vedrørende Simutrans' udseende.<br>
+</p>
+
+<p>
+<em>Udseende:</em><br>
+Øverst i dialogen er tre lister med teksterne 'Lysstyrke:', 'Farver:' og
+'Scrolltempo:'. Hver liste har "scroll-knapper" tilknyttet. Herunder er tre
+"checkbokse" med tilhørende tekster 'Omvendt scrollning', 'Vis fodgængere' og
+Dag og nat indstilling. Nederst er en række aktuelle belastningsoplysninger
+vist.
+</p>
+
+<p>
+Følgende indstillinger er mulige:
+</p>
+
+<p>
+<em>Lysstyrke:</em><br>
+Gør kortet lysere eller mørkere.
+</p>
+
+<p>
+<em>Farver:</em><br>
+Ingen effekt
+</p>
+
+<p>
+<em>Scrolltempo:</em><br>
+Jo højere indstilling, desto hurtigere vil skærmenbilledet scrolle.
+</p>
+
+<p>
+<em>Omvendt scrollning</em><br>
+Her kan indstilles om kortet skal bevæge sig op eller ned, når der scrolles
+opad og analogt med hensyn til venstre og højre. (fly-lignende
+kontroller). Det er nemmere at afprøve, end at skulle forklare :-)
+</p>
+
+<p>
+<em>Vis fodgængere</em><br>
+Her kan indstilles om computeren skal skabe og vise fodgængere i byerne og
+omkring rutemål. Hvis din makine døjer med at opdatere skærmbilledet, så slå
+denne indstilling fra.
+</p>
+
+<p>
+<em>Dag og nat indstilling</em><br>
+Her indstilles om der alt efter tidspunktet skal skiftes imellem dag (lyst) og
+nat (mørkt) indstilling. Prøv det af !
+</p>
+
+<p>
+Den nederste halvdel af dialogen indeholder information omkring hvorledes din
+computer klarer den aktuelle belastning. Disse værdier er ikke interessante
+med mindre du ved, hvad de står for.<br>
+<strong>Vigtigt</strong>Du kan blive bedt om at nævne disse værdier, når du
+diskuterer performance problemer og andre bugs.
 </p>
diff --git a/simutrans/text/dk/finances.txt b/simutrans/text/dk/finances.txt
index 6672fd8..14c5348 100644
--- a/simutrans/text/dk/finances.txt
+++ b/simutrans/text/dk/finances.txt
@@ -1,83 +1,83 @@
-<title>Finanser dialog hjælp</title>
-
-<h1>Finanser <em>(f)</em></h1>
-
-<p>
-<em>Beskrivelse:</em><br>
-Finanser dialogen viser dig såvel din aktuelle finansielle status som din
-status for sidste år. Dette giver dig indblik i din samlede profit eller tab
-!<br>
-Dialogen indeholder forskellige kategorier og viser den finansielle status for
-hver enkelt.
-</p>
-
-<p>
-<em>Udseende:</em><br>
-Øverst til venstre er for kategorierne: Byggeudgifter, Nye køretøjer,
-Driftsomkostninger, Vedligeholdelse, Indkomst og Overskud vist to kolonner med
-resultaterne for henholdsvis dette år og sidste år.<br>
-Herunder er to linier, der henholdvis viser Kassebeholdning og
-vedligeholdelsesudgifterne pr. måned.<br>
-Nederst i dialogen er et grafisk visningsareal, hvor en enkelt, flere eller
-alle kategorier kan afbildes grafisk. Dette gøres for hver enkelt kategori ved
-at vælge kategorien på knapperne øverst til højre i dialogen.
-</p>
-
-<p>
-Kategorierne er følgende:
-</p>
-
-<p>
-<em>Byggeudgifter:</em><br>
-De samlede udgifter for alt du har bygget: Jernbaner, bygninger, veje,
-signaler, havne etc.
-</p>
-
-<p>
-<em>Nye køretøjer:</em><br>
-De samlede udgifter for alle køretøjer: Toge, togvogne, lastbiler/busser,
-anhængere eller skibe, som du har købt.
-</p>
-
-<p>
-<em>Driftsomkostninger:</em><br>
-De samlede kørselsomkostninger for alle dine køretøjer.<br>
-For hvert enkelt køretøj kan omkostninger pr. kørt km. ses under oplysningerne
-for køretøjet i <a href="depot.txt">depotdialogen.</a>
-</p>
-
-<p>
-<em>Vedligeholdelse:</em><br>
-Det beløb du skal betale for at vedligeholde dine jernbaner/veje/bygninger.
-</p>
-
-<p>
-<em>Indkomst:</em><br>
-Den samlede indtjening for alle køretøjer.<br>
-Fortjenesten (indtjening - driftsomkostninger) for hvert enkelt køretøj kan
-ses i menuen: Køretøjsliste.
-</p>
-
-<p>
-<em>Overskud:</em><br>
-Det samlede overskud. Udregnes som summen af de ovennævnte kategorier.
-</p>
-
-<p>
-<em>Kassebeholdning:</em><br>
-Din kontante kassebeholdning.<br>
-<strong>Hvis dette beløb ved udgangen af en måned er negativt tre (3) gange i
-træk, er du bankerot og har "tabt" spillet.<br>
-Bemærk at vedligeholdelsesudgifter betales pr. måned ved udgangen af
-måneden</strong>
-</p>
-
-<p>
-<em>Aktiver:</em><br>
-Dette udregnes som den samlede salgsværdi af alle dine køretøjer.
-</p>
-
-<p>
-<em>Samlet formue:</em><br>
-Dette udregnes som summen af aktiver og kassebeholdning.
+<title>Finanser dialog hjælp</title>
+
+<h1>Finanser <em>(f)</em></h1>
+
+<p>
+<em>Beskrivelse:</em><br>
+Finanser dialogen viser dig såvel din aktuelle finansielle status som din
+status for sidste år. Dette giver dig indblik i din samlede profit eller tab
+!<br>
+Dialogen indeholder forskellige kategorier og viser den finansielle status for
+hver enkelt.
+</p>
+
+<p>
+<em>Udseende:</em><br>
+Øverst til venstre er for kategorierne: Byggeudgifter, Nye køretøjer,
+Driftsomkostninger, Vedligeholdelse, Indkomst og Overskud vist to kolonner med
+resultaterne for henholdsvis dette år og sidste år.<br>
+Herunder er to linier, der henholdvis viser Kassebeholdning og
+vedligeholdelsesudgifterne pr. måned.<br>
+Nederst i dialogen er et grafisk visningsareal, hvor en enkelt, flere eller
+alle kategorier kan afbildes grafisk. Dette gøres for hver enkelt kategori ved
+at vælge kategorien på knapperne øverst til højre i dialogen.
+</p>
+
+<p>
+Kategorierne er følgende:
+</p>
+
+<p>
+<em>Byggeudgifter:</em><br>
+De samlede udgifter for alt du har bygget: Jernbaner, bygninger, veje,
+signaler, havne etc.
+</p>
+
+<p>
+<em>Nye køretøjer:</em><br>
+De samlede udgifter for alle køretøjer: Toge, togvogne, lastbiler/busser,
+anhængere eller skibe, som du har købt.
+</p>
+
+<p>
+<em>Driftsomkostninger:</em><br>
+De samlede kørselsomkostninger for alle dine køretøjer.<br>
+For hvert enkelt køretøj kan omkostninger pr. kørt km. ses under oplysningerne
+for køretøjet i <a href="depot.txt">depotdialogen.</a>
+</p>
+
+<p>
+<em>Vedligeholdelse:</em><br>
+Det beløb du skal betale for at vedligeholde dine jernbaner/veje/bygninger.
+</p>
+
+<p>
+<em>Indkomst:</em><br>
+Den samlede indtjening for alle køretøjer.<br>
+Fortjenesten (indtjening - driftsomkostninger) for hvert enkelt køretøj kan
+ses i menuen: Køretøjsliste.
+</p>
+
+<p>
+<em>Overskud:</em><br>
+Det samlede overskud. Udregnes som summen af de ovennævnte kategorier.
+</p>
+
+<p>
+<em>Kassebeholdning:</em><br>
+Din kontante kassebeholdning.<br>
+<strong>Hvis dette beløb ved udgangen af en måned er negativt tre (3) gange i
+træk, er du bankerot og har "tabt" spillet.<br>
+Bemærk at vedligeholdelsesudgifter betales pr. måned ved udgangen af
+måneden</strong>
+</p>
+
+<p>
+<em>Aktiver:</em><br>
+Dette udregnes som den samlede salgsværdi af alle dine køretøjer.
+</p>
+
+<p>
+<em>Samlet formue:</em><br>
+Dette udregnes som summen af aktiver og kassebeholdning.
 </p>
diff --git a/simutrans/text/dk/general.txt b/simutrans/text/dk/general.txt
index ab77c53..e662188 100644
--- a/simutrans/text/dk/general.txt
+++ b/simutrans/text/dk/general.txt
@@ -1,13 +1,13 @@
-<h1>Simutrans almen hjælp</h1>
-
-<p>
-Skal skrives
-</p>
-
-<p>
-<a href="keys.txt">Tastatur hjælp</a>
-</p>
-
-<p>
-(c) Hj. Malthaner
+<h1>Simutrans almen hjælp</h1>
+
+<p>
+Skal skrives
+</p>
+
+<p>
+<a href="keys.txt">Tastatur hjælp</a>
+</p>
+
+<p>
+(c) Hj. Malthaner
 </p>
diff --git a/simutrans/text/dk/haltlist.txt b/simutrans/text/dk/haltlist.txt
index c8224f1..dd1a3c4 100644
--- a/simutrans/text/dk/haltlist.txt
+++ b/simutrans/text/dk/haltlist.txt
@@ -1,70 +1,70 @@
-<title>Rutemålsliste dialog hjælp</title>
-
-<h1>Rutemålsliste dialog</h1>
-
-<p>
-<em>Beskrivelse:</em><br>
-Rutemålsliste dialogen giver et overblik over samtlige rutemål (lastepladser,
-jernbanestationer og busstoppesteder) med mulighed for at sortere og/eller
-filtrere disse efter parametre såsom type, varer og varelager.
-</p>
-
-<p>
-<em>Udseende:</em><br>
-Øverst i dialogen er overskrifterne: 'Sorteret efter:' og 'Filter:'.<br>
-Til 'Sorteret efter:' er knyttet to "tilstands-knapper", der som default
-indstilling henholdsvis har tilstandende 'navn' samt 'stigende'.<br>
-Til 'Filter:' er der knyttet en "tilstands-knap" med default tilstanden
-'inaktiv' samt en knap med titlen 'indstil filter'. <br>
-Resten af dialogen består af en liste indeholdende samtlige dine rutemål. For
-alle rutemål er angivet dets nummer, navn, type (markeret ved et lastbil-,
-bus-, tog- eller skibssymbol) samt hvilket varelager, der afventer afhentning.
-</p>
-
-<p>
-Ved at venstreklikke på et rutemål i listen kan man få dets
-<a href="station.txt">rutemåls dialog</a> frem.
-</p>
-
-<p>
-Rutemålene i listen kan sorteres ved hjælp af "tilstandsknapperne"
-under 'Sorteret efter:' overskriften.<br>
-Knappen til venstre giver sorteringstypen og knappen til højre angiver, om
-denne sortering skal foretages 'stigende' eller 'faldende'.
-</p>
-
-<p>
-De fire sorteringstyper er:
-</p>
-
-<p>
-<em>Navn</em><br>
-Sorterer rutemålene efter navn. Enten alfabetisk eller
-omvendt alfabetisk alt efter indstillingen af knappen til venstre.
-</p>
-
-<p>
-<em>Varelager</em><br>
-Sorterer rutemålene efter størrelsen af rutemålets
-varelager. Stigende eller faldende alt efter højre-knappens tilstand.
-</p>
-
-<p>
-<em>Type</em><br>
-Sorterer rutemålene efter deres type, hvor rækkefølgen: Biler, busser, toge,
-skibe anses for stigende.
-</p>
-
-<p>
-<em>Nummer</em><br>
-Sorterer rutemålene efter deres nummer.
-</p>
-
-<p>
-For at lette overblikket af listen kan rutemålene filtreres efter
-forskellige kriterier. Dette sker ved hjælp af knapperne under 'Filter'
-overskriften.<br>
-Knappen til venstre er en "tilstands-knap". Denne knap kontrollerer
-filteranvendeksen med tilstandene 'inaktivt' og 'aktivt'. Knappen til højre
-med teksten 'indstil filter'<br>
+<title>Rutemålsliste dialog hjælp</title>
+
+<h1>Rutemålsliste dialog</h1>
+
+<p>
+<em>Beskrivelse:</em><br>
+Rutemålsliste dialogen giver et overblik over samtlige rutemål (lastepladser,
+jernbanestationer og busstoppesteder) med mulighed for at sortere og/eller
+filtrere disse efter parametre såsom type, varer og varelager.
+</p>
+
+<p>
+<em>Udseende:</em><br>
+Øverst i dialogen er overskrifterne: 'Sorteret efter:' og 'Filter:'.<br>
+Til 'Sorteret efter:' er knyttet to "tilstands-knapper", der som default
+indstilling henholdsvis har tilstandende 'navn' samt 'stigende'.<br>
+Til 'Filter:' er der knyttet en "tilstands-knap" med default tilstanden
+'inaktiv' samt en knap med titlen 'indstil filter'. <br>
+Resten af dialogen består af en liste indeholdende samtlige dine rutemål. For
+alle rutemål er angivet dets nummer, navn, type (markeret ved et lastbil-,
+bus-, tog- eller skibssymbol) samt hvilket varelager, der afventer afhentning.
+</p>
+
+<p>
+Ved at venstreklikke på et rutemål i listen kan man få dets
+<a href="station.txt">rutemåls dialog</a> frem.
+</p>
+
+<p>
+Rutemålene i listen kan sorteres ved hjælp af "tilstandsknapperne"
+under 'Sorteret efter:' overskriften.<br>
+Knappen til venstre giver sorteringstypen og knappen til højre angiver, om
+denne sortering skal foretages 'stigende' eller 'faldende'.
+</p>
+
+<p>
+De fire sorteringstyper er:
+</p>
+
+<p>
+<em>Navn</em><br>
+Sorterer rutemålene efter navn. Enten alfabetisk eller
+omvendt alfabetisk alt efter indstillingen af knappen til venstre.
+</p>
+
+<p>
+<em>Varelager</em><br>
+Sorterer rutemålene efter størrelsen af rutemålets
+varelager. Stigende eller faldende alt efter højre-knappens tilstand.
+</p>
+
+<p>
+<em>Type</em><br>
+Sorterer rutemålene efter deres type, hvor rækkefølgen: Biler, busser, toge,
+skibe anses for stigende.
+</p>
+
+<p>
+<em>Nummer</em><br>
+Sorterer rutemålene efter deres nummer.
+</p>
+
+<p>
+For at lette overblikket af listen kan rutemålene filtreres efter
+forskellige kriterier. Dette sker ved hjælp af knapperne under 'Filter'
+overskriften.<br>
+Knappen til venstre er en "tilstands-knap". Denne knap kontrollerer
+filteranvendeksen med tilstandene 'inaktivt' og 'aktivt'. Knappen til højre
+med teksten 'indstil filter'<br>
 åbner for<a href="haltlist_filter.txt">filter dialogen</a>
diff --git a/simutrans/text/dk/haltlist_filter.txt b/simutrans/text/dk/haltlist_filter.txt
index c69ae3a..fffed64 100644
--- a/simutrans/text/dk/haltlist_filter.txt
+++ b/simutrans/text/dk/haltlist_filter.txt
@@ -1,63 +1,63 @@
-<title>Rutemålsliste filter dialog hjælp</title>
-
-<h1>Rutemålsliste filter dialog</h1>
-
-<p>
-<em>Beskrivelse:</em><br>
-Denne filter dialog anvendes til at udvælge (filtrere) de rutemål, som du
-ønsker at betragte i<br>
-<a href="haltlist.txt">Rutemålsliste dialogen</a>
-</p>
-
-<p>
-<em>Udseende:</em><br>
-Til venstre findes tre filteroverskrifter, henholdsvis 'Filtrer på navn:',
-'Filtrer på type:' og 'Specialfilter:'. Til højre for disse findes to lister med
-overskrifterne 'Forbruger:' og 'Producerer:'. Under begge disse overskrifter
-findes tre knapper med teksterne 'alle', 'ingen' og 'inv.'. Listerne består af
-en trykknap for samtlige varetyper.
-</p>
-
-<p>
-Samtlige fem overskrifter har en checkbox-knap tilknyttet.
-</p>
-
-<p>
-<strong>Bemærk - For at få foretaget en filtrering med en eller flere af de fem
-filtrerings muligheder skal:<br>
-a) Checkbox-knappen til venstre for overskriften trykkes ned.<br>
-b) Tilstandsknappen under overskriften 'Filter:' i</strong>
-<a href="haltlist.txt">Rutemålsliste dialogen</a><strong> sættes til
-'aktivt'</strong>
-</p>
-
-<p>
-De tre filtreringsmuligheder til venstre er:
-</p>
-
-<p>
-<em>Filtrer på navn:</em><br>
-Her er der mulighed for at udvælge rutemål med et fælles navn. Dette gøres ved
-at skrive en del af eller hele det ønskede navn i listboksen under
-overskriften. F.eks vil en indtastning af 'Gam' give alle rutemål, hvis navn
-begynder med Gammel. <strong>Bemærk at søgningen er "case-sensitive"</strong>
-</p>
-
-<p>
-<em>Filtrer på type:</em><br>
-Her er der mulighed for at udvælge rutemål efter deres type. De mulige
-typer er lastepladser, busstoppesteder, jernbanestationer og havne.
-</p>
-
-<p>
-<em>Special filter:</em><br>
-Her er der mulighed for at udvælge rutemål, der er overfyldte og
-rutemål, der ikke er forbundne.
-</p>
-
-<p>
-De to lister giver mulighed for at udvælge rutemål udfra de varer, der
-forbruges eller produceres på rutemålet. De tre knapper under overskriften
-anvendes til at vælge henholdsvis alle eller ingen af de mulige varetyper samt
-til at foretage den "inverse" trykknap udvælgelse.
+<title>Rutemålsliste filter dialog hjælp</title>
+
+<h1>Rutemålsliste filter dialog</h1>
+
+<p>
+<em>Beskrivelse:</em><br>
+Denne filter dialog anvendes til at udvælge (filtrere) de rutemål, som du
+ønsker at betragte i<br>
+<a href="haltlist.txt">Rutemålsliste dialogen</a>
+</p>
+
+<p>
+<em>Udseende:</em><br>
+Til venstre findes tre filteroverskrifter, henholdsvis 'Filtrer på navn:',
+'Filtrer på type:' og 'Specialfilter:'. Til højre for disse findes to lister med
+overskrifterne 'Forbruger:' og 'Producerer:'. Under begge disse overskrifter
+findes tre knapper med teksterne 'alle', 'ingen' og 'inv.'. Listerne består af
+en trykknap for samtlige varetyper.
+</p>
+
+<p>
+Samtlige fem overskrifter har en checkbox-knap tilknyttet.
+</p>
+
+<p>
+<strong>Bemærk - For at få foretaget en filtrering med en eller flere af de fem
+filtrerings muligheder skal:<br>
+a) Checkbox-knappen til venstre for overskriften trykkes ned.<br>
+b) Tilstandsknappen under overskriften 'Filter:' i</strong>
+<a href="haltlist.txt">Rutemålsliste dialogen</a><strong> sættes til
+'aktivt'</strong>
+</p>
+
+<p>
+De tre filtreringsmuligheder til venstre er:
+</p>
+
+<p>
+<em>Filtrer på navn:</em><br>
+Her er der mulighed for at udvælge rutemål med et fælles navn. Dette gøres ved
+at skrive en del af eller hele det ønskede navn i listboksen under
+overskriften. F.eks vil en indtastning af 'Gam' give alle rutemål, hvis navn
+begynder med Gammel. <strong>Bemærk at søgningen er "case-sensitive"</strong>
+</p>
+
+<p>
+<em>Filtrer på type:</em><br>
+Her er der mulighed for at udvælge rutemål efter deres type. De mulige
+typer er lastepladser, busstoppesteder, jernbanestationer og havne.
+</p>
+
+<p>
+<em>Special filter:</em><br>
+Her er der mulighed for at udvælge rutemål, der er overfyldte og
+rutemål, der ikke er forbundne.
+</p>
+
+<p>
+De to lister giver mulighed for at udvælge rutemål udfra de varer, der
+forbruges eller produceres på rutemålet. De tre knapper under overskriften
+anvendes til at vælge henholdsvis alle eller ingen af de mulige varetyper samt
+til at foretage den "inverse" trykknap udvælgelse.
 </p>
diff --git a/simutrans/text/dk/language.txt b/simutrans/text/dk/language.txt
index 3a6026e..07483ea 100644
--- a/simutrans/text/dk/language.txt
+++ b/simutrans/text/dk/language.txt
@@ -1,47 +1,47 @@
-<title>Sprog dialog hjælp</title>
-
-<h1>Sprog dialog</h1>
-
-<p>
-<em>Beskrivelse:</em><br>
-Simutrans er et multilingualt spil, der tillader spilleren at vælge sit
-foretrukne sprog for alle viste tekster. (forudsat en oversættelse
-eksisterer)
-</p>
-
-<p>
-<em>Udseende:</em><br>
-Dialogen består af en række radio-knapper. En radioknap for hvert muligt sprog.
-<p>
-
-<p>
-Når du vælger et sprog i radioknap-menuen vil samtlige tekster blive vist på
-dette sprog - med to undtagelser:
-</p>
-
-<p>
-1) De fleste åbne dialoger skifter først sprog, når de genåbnes.
-</p>
-
-<p>
-2) Eksisterende byer vil ikke ændre navn.
-</p>
-
-<p>
-For at give byer navne på dit foretrukne sprog, skal du vælge sprog før du
-skaber et nyt kort.
-</p>
-
-<p>
-Hvis dit foretrukne sprog skulle mangle, findes der et par oversættelser på:
-</p>
-
-<p>
-http://www.simustation.de.vu og<br>
-http://www.simutrans.de<br>
-Disse oversættelser er dog ikke altid fuldstændige og up-to-date.
-</p>
-
-<p>
-En anden mulighed ville selvfølgelig være, at du selv lavede en oversættelse ;-)
+<title>Sprog dialog hjælp</title>
+
+<h1>Sprog dialog</h1>
+
+<p>
+<em>Beskrivelse:</em><br>
+Simutrans er et multilingualt spil, der tillader spilleren at vælge sit
+foretrukne sprog for alle viste tekster. (forudsat en oversættelse
+eksisterer)
+</p>
+
+<p>
+<em>Udseende:</em><br>
+Dialogen består af en række radio-knapper. En radioknap for hvert muligt sprog.
+<p>
+
+<p>
+Når du vælger et sprog i radioknap-menuen vil samtlige tekster blive vist på
+dette sprog - med to undtagelser:
+</p>
+
+<p>
+1) De fleste åbne dialoger skifter først sprog, når de genåbnes.
+</p>
+
+<p>
+2) Eksisterende byer vil ikke ændre navn.
+</p>
+
+<p>
+For at give byer navne på dit foretrukne sprog, skal du vælge sprog før du
+skaber et nyt kort.
+</p>
+
+<p>
+Hvis dit foretrukne sprog skulle mangle, findes der et par oversættelser på:
+</p>
+
+<p>
+http://www.simustation.de.vu og<br>
+http://www.simutrans.de<br>
+Disse oversættelser er dog ikke altid fuldstændige og up-to-date.
+</p>
+
+<p>
+En anden mulighed ville selvfølgelig være, at du selv lavede en oversættelse ;-)
 </p>
diff --git a/simutrans/text/dk/load.txt b/simutrans/text/dk/load.txt
index 1b21072..2df05a2 100644
--- a/simutrans/text/dk/load.txt
+++ b/simutrans/text/dk/load.txt
@@ -1,35 +1,35 @@
-<title>Indlæs hjælp</title>
-
-<h1>Indlæs dialog</h1>
-
-<p>
-<em>Beskrivelse:</em><br>
-Indlæs dialogen giver mulighed for at fortsætte et tidligere gemt spil.
-Indlæs dialogen er opbygget analogt til<br>
-<a href="save.txt">Gem dialogen</a>
-</p>
-
-<p>
-<em>Udseende:</em><br>
-Øverst i dialogen er overskriften 'Filnavn:' med en tilhørende tekstboks. Denne
-tekstboks giver mulighed for at indtaste navnet på et tidligere gemt
-spil. Derunder er en liste bestående af de spil, der befinder sig i
-simutrans/save mappen. For alle spil er vist en slet-knap, spillets navn samt
-"gem-tidspunktet".<br>
-Nederst er en 'OK' og en 'Fortryd' knap.
-</p>
-
-<p>
-Et spil indlæses enten ved at taste navnet på spillet i tekstboksen og trykke
-på 'OK' knappen eller ved at trykke på spillets navn i listen. Hvis du prøver
-at indlæse et gemt spil, som ikke eksisterer vil du få en fejlmeddelelse, der
-fortæller dette.
-</p>
-
-<p>
-<strong>Vigtigt !</strong><br>
-Gamle gemte spil fra tidligere Simutrans versioner kan være inkompatible.<br>
-Læs venligst "release notes" for hver ny version, du anvender for at se, om
-dette er tilfældet.<br>
-Imellem "major versions" vil inkompabilitet højst sandsynlig være tilfældet.
+<title>Indlæs hjælp</title>
+
+<h1>Indlæs dialog</h1>
+
+<p>
+<em>Beskrivelse:</em><br>
+Indlæs dialogen giver mulighed for at fortsætte et tidligere gemt spil.
+Indlæs dialogen er opbygget analogt til<br>
+<a href="save.txt">Gem dialogen</a>
+</p>
+
+<p>
+<em>Udseende:</em><br>
+Øverst i dialogen er overskriften 'Filnavn:' med en tilhørende tekstboks. Denne
+tekstboks giver mulighed for at indtaste navnet på et tidligere gemt
+spil. Derunder er en liste bestående af de spil, der befinder sig i
+simutrans/save mappen. For alle spil er vist en slet-knap, spillets navn samt
+"gem-tidspunktet".<br>
+Nederst er en 'OK' og en 'Fortryd' knap.
+</p>
+
+<p>
+Et spil indlæses enten ved at taste navnet på spillet i tekstboksen og trykke
+på 'OK' knappen eller ved at trykke på spillets navn i listen. Hvis du prøver
+at indlæse et gemt spil, som ikke eksisterer vil du få en fejlmeddelelse, der
+fortæller dette.
+</p>
+
+<p>
+<strong>Vigtigt !</strong><br>
+Gamle gemte spil fra tidligere Simutrans versioner kan være inkompatible.<br>
+Læs venligst "release notes" for hver ny version, du anvender for at se, om
+dette er tilfældet.<br>
+Imellem "major versions" vil inkompabilitet højst sandsynlig være tilfældet.
 </p>
diff --git a/simutrans/text/dk/map.txt b/simutrans/text/dk/map.txt
index c17ac3d..620d003 100644
--- a/simutrans/text/dk/map.txt
+++ b/simutrans/text/dk/map.txt
@@ -1,19 +1,19 @@
-<title>Reliefkort dialog hjælp</title>
-
-<h1>Reliefkort dialog</h1>
-
-<p>
-<em>Beskrivelse:</em><br>
-Reliefkort dialoget giver et fugleperspektivs overblik over verden, med
-informationer om byer, industrier, veje, jernbanespor o.l.
-</p>
-
-<p>
-Hver industritype er markeret med sin egen farve. Et overblik over denne
-farvekodning findes nedenunder kortet.
-</p>
-
-<p>
-Hvis du ønsker at "se nærmere" på verden, kan du højreklikke på kortet,
-hvorved der skiftes imellem to forskellige zoom niveauer.
+<title>Reliefkort dialog hjælp</title>
+
+<h1>Reliefkort dialog</h1>
+
+<p>
+<em>Beskrivelse:</em><br>
+Reliefkort dialoget giver et fugleperspektivs overblik over verden, med
+informationer om byer, industrier, veje, jernbanespor o.l.
+</p>
+
+<p>
+Hver industritype er markeret med sin egen farve. Et overblik over denne
+farvekodning findes nedenunder kortet.
+</p>
+
+<p>
+Hvis du ønsker at "se nærmere" på verden, kan du højreklikke på kortet,
+hvorved der skiftes imellem to forskellige zoom niveauer.
 </p>
diff --git a/simutrans/text/dk/new_world.txt b/simutrans/text/dk/new_world.txt
index 3ff9d18..5b0f37d 100644
--- a/simutrans/text/dk/new_world.txt
+++ b/simutrans/text/dk/new_world.txt
@@ -1,120 +1,120 @@
-<title>Skab verden dialog hjælp</title>
-
-<h1>Skab verden dialog <em>(X/Q)</em></h1>
-
-<p>
-<em>Beskrivelse:</em><br>
-Skab verden dialogen giver mulighed for at skabe et nyt kort (spil) med
-indstillinger, der vil influere på, hvorledes den nye verden vil se ud.
-Disse indstillinger kan være alt fra kortstørrelse til industritæthed.
-</p>
-
-<p>
-<em>Udseende:</em><br>
-Øverst til venstre findes otte indstillingsmuligheder for det nye kort.<br>
-Til højre herfor er et "preview" areal, der viser, hvorledes det nye kort
-vil se ud.<br>
-Under disse indstillinger er en knap til valg af tilfældigt kortnummer.<br>
-Nederst i dialogen findes fire knapper til indlæsning af gemte spil eller
-reliefkort, til at starte et nyt spil og til at afslutte Simutrans.
-</p>
-
-<p>
-Indstillingsmulighederne for et nye kort er følgende:
-</p>
-
-<p>
-<em>Kortnummer:</em><br>
-Bestemmer hvordan verden vil se ud inklusiv beliggenheden af byer, vand og
-land. I "preview" arealet kan hvert enkelt kort ses (opdateret med de andre
-valgte indstillinger).
-</p>
-
-<p>
-<em>Størrelse:</em><br>
-Bestemmer hvor mange kvadrater kortet vil bestå af. Størrelsen varierer fra
-128*128 til 640*640 kvadrater. Default størrelsen er 256*256.<br>
-<strong>Vigtigt</strong> - Jo større et kort desto mere memory bliver
-benyttet. Vær opmærksom på om du har tilstrækkelig memory til at spille et
-spil med den valgte kortstørrelse.
-</p>
-
-<p>
-<em>Industritæthed:</em><br>
-Tætheden af industrier. Jo lavere tæthedesværdi desto sværere vil spillet
-blive, da der bliver færre industrier at transportere imellem. Default værdien
-er 125.
-</p>
-
-<p>
-<em>Antal byer:</em><br>
-Bestemmer hvor mange byer, der placeres på kortet. Værdierne går fra 2 til 64
-med 32 som default værdi.
-</p>
-
-<p>
-<em>Trafiktæthed:</em><br>
-Tætheden af private biler i byerne. Default værdien er 8.
-</p>
-
-<p>
-<em>Vand niveau:</em><br>
-Afspejler hvor højt grundvandsspejlet er (hvor mange vandfelter, der vil
-være). Jo lavere værdi desto flere landfelter vil kortet indeholde. Default
-værdien er 4
-</p>
-
-<p>
-<em>Kuperet terræn:</em><br>
-Bestemmer højden af det højeste bjerg. Jo lavere værdi desto færre og lavere
-bjerge og dale. Værdierne går fra 0 til 160 med default værdi 160.
-</p>
-
-<p>
-<em>Bjergstejlhed:</em><br>
-Angiver hvor stejle bjergene vil være. Jo lavere værdi desto "jævnere" vil
-bjergstigningerne være.
-</p>
-
-<p>
-<em>Tilfældigt kort:</em><br>
-Vælger et tilfældigt kortnummer (opdateret med de valgte indstillinger)
-</p>
-
-<p>
-<em>Vis fodgængere</em><br>
-Bestemmer om fodgængere skal være synlige eller ej. Indstillingen kan ændres
-under spillet<br>
-ved at benytte <a href="display.txt">Udseende dialogen.</a>
-</p>
-
-<p>
-<em>Dag og nat indstilling</em><br>
-Bestemmer om der alt efter klokkeslet skal skiftes imellem dag og nat
-belysning. Denne indstilling kan ligeledes ændres under spillet<br>
-ved at benytte <a href="display.txt">Udseende dialogen.</a>
-</p>
-
-<p>
-De fire knapper er:
-</p>
-
-<p>
-<em>Indlæs spil:</em><br>
-Indlæser et tidligere gemt spil.<br>
-Se <a href="load.txt">Indlæs dialogen</a> for nærmere information
-</p>
-
-<p>
-<em>Indlæs reliefkort:</em>
-</p>
-
-<p>
-<em>Start spil</em><br>
-Starter et nyt spil med de valgte indstillinger.
-</p>
-
-<p>
-<em>Afslut</em><br>
-Afslutter Simutrans - "no questions asked".
+<title>Skab verden dialog hjælp</title>
+
+<h1>Skab verden dialog <em>(X/Q)</em></h1>
+
+<p>
+<em>Beskrivelse:</em><br>
+Skab verden dialogen giver mulighed for at skabe et nyt kort (spil) med
+indstillinger, der vil influere på, hvorledes den nye verden vil se ud.
+Disse indstillinger kan være alt fra kortstørrelse til industritæthed.
+</p>
+
+<p>
+<em>Udseende:</em><br>
+Øverst til venstre findes otte indstillingsmuligheder for det nye kort.<br>
+Til højre herfor er et "preview" areal, der viser, hvorledes det nye kort
+vil se ud.<br>
+Under disse indstillinger er en knap til valg af tilfældigt kortnummer.<br>
+Nederst i dialogen findes fire knapper til indlæsning af gemte spil eller
+reliefkort, til at starte et nyt spil og til at afslutte Simutrans.
+</p>
+
+<p>
+Indstillingsmulighederne for et nye kort er følgende:
+</p>
+
+<p>
+<em>Kortnummer:</em><br>
+Bestemmer hvordan verden vil se ud inklusiv beliggenheden af byer, vand og
+land. I "preview" arealet kan hvert enkelt kort ses (opdateret med de andre
+valgte indstillinger).
+</p>
+
+<p>
+<em>Størrelse:</em><br>
+Bestemmer hvor mange kvadrater kortet vil bestå af. Størrelsen varierer fra
+128*128 til 640*640 kvadrater. Default størrelsen er 256*256.<br>
+<strong>Vigtigt</strong> - Jo større et kort desto mere memory bliver
+benyttet. Vær opmærksom på om du har tilstrækkelig memory til at spille et
+spil med den valgte kortstørrelse.
+</p>
+
+<p>
+<em>Industritæthed:</em><br>
+Tætheden af industrier. Jo lavere tæthedesværdi desto sværere vil spillet
+blive, da der bliver færre industrier at transportere imellem. Default værdien
+er 125.
+</p>
+
+<p>
+<em>Antal byer:</em><br>
+Bestemmer hvor mange byer, der placeres på kortet. Værdierne går fra 2 til 64
+med 32 som default værdi.
+</p>
+
+<p>
+<em>Trafiktæthed:</em><br>
+Tætheden af private biler i byerne. Default værdien er 8.
+</p>
+
+<p>
+<em>Vand niveau:</em><br>
+Afspejler hvor højt grundvandsspejlet er (hvor mange vandfelter, der vil
+være). Jo lavere værdi desto flere landfelter vil kortet indeholde. Default
+værdien er 4
+</p>
+
+<p>
+<em>Kuperet terræn:</em><br>
+Bestemmer højden af det højeste bjerg. Jo lavere værdi desto færre og lavere
+bjerge og dale. Værdierne går fra 0 til 160 med default værdi 160.
+</p>
+
+<p>
+<em>Bjergstejlhed:</em><br>
+Angiver hvor stejle bjergene vil være. Jo lavere værdi desto "jævnere" vil
+bjergstigningerne være.
+</p>
+
+<p>
+<em>Tilfældigt kort:</em><br>
+Vælger et tilfældigt kortnummer (opdateret med de valgte indstillinger)
+</p>
+
+<p>
+<em>Vis fodgængere</em><br>
+Bestemmer om fodgængere skal være synlige eller ej. Indstillingen kan ændres
+under spillet<br>
+ved at benytte <a href="display.txt">Udseende dialogen.</a>
+</p>
+
+<p>
+<em>Dag og nat indstilling</em><br>
+Bestemmer om der alt efter klokkeslet skal skiftes imellem dag og nat
+belysning. Denne indstilling kan ligeledes ændres under spillet<br>
+ved at benytte <a href="display.txt">Udseende dialogen.</a>
+</p>
+
+<p>
+De fire knapper er:
+</p>
+
+<p>
+<em>Indlæs spil:</em><br>
+Indlæser et tidligere gemt spil.<br>
+Se <a href="load.txt">Indlæs dialogen</a> for nærmere information
+</p>
+
+<p>
+<em>Indlæs reliefkort:</em>
+</p>
+
+<p>
+<em>Start spil</em><br>
+Starter et nyt spil med de valgte indstillinger.
+</p>
+
+<p>
+<em>Afslut</em><br>
+Afslutter Simutrans - "no questions asked".
 </p>
diff --git a/simutrans/text/dk/options.txt b/simutrans/text/dk/options.txt
index 4444b2c..6053d75 100644
--- a/simutrans/text/dk/options.txt
+++ b/simutrans/text/dk/options.txt
@@ -1,68 +1,68 @@
-<title>Indstillinger dialog hjælp</title>
-
-<h1>Indstillinger dialog</h1>
-
-<p>
-<em>Beskrivelse:</em><br>
-Denne dialog er en indgang til alle andre dialoger i Simutrans.
-</p>
-
-<p>
-<em>Udseende:</em><br>
-Dialogen består af ni (9) knapper, der hver aktiverer en ny dialog.
-</p>
-
-<p>
-Nedenfor er en liste over de mulige dialoger med en kort beskrivelser af, hvad
-den aktiverede dialog indeholder.
-</p>
-
-<p>
-<em>Sprog</em><br>
-Tillader valg af hvilket sprog Simutrans benytter til tekster og navne.
-</p>
-
-<p>
-<em>Spillerfarve</em><br>
-Giver mulighed for valg af firmafarve.
-</p>
-
-<p>
-<em>Udseende</em><br>
-Ændr udseende indstillinger såsom "dag og nat indstilling"
-</p>
-
-<p>
-<em>Lyd</em><br>
-Vælg dine lyd- og musikpræferencer.
-</p>
-
-<p>
-<em>Spillerliste</em><br>
-Kontroller AI-spillerne i spillet.
-</p>
-
-<p>
-<em>Indlæs</em><br>
-Indlæs et tidligere gemt spil.
-</p>
-
-<p>
-<em>Gem</em><br>
-Gem det aktuelle spil.
-</p>
-
-<p>
-<em>Nyt kort</em><br>
-Start et nyt spil.
-</p>
-
-<p>
-<em>Afslut</em><br>
-Afslut spillet. Bemærk at der <strong>ikke</strong> først bliver spurgt om det
-aktuelle spil skal gemmes.
-</p>
-
-<p>
-For en mere detaljeret beskrivelse, vælg venligst "hjælp" i den enkelte dialog.
+<title>Indstillinger dialog hjælp</title>
+
+<h1>Indstillinger dialog</h1>
+
+<p>
+<em>Beskrivelse:</em><br>
+Denne dialog er en indgang til alle andre dialoger i Simutrans.
+</p>
+
+<p>
+<em>Udseende:</em><br>
+Dialogen består af ni (9) knapper, der hver aktiverer en ny dialog.
+</p>
+
+<p>
+Nedenfor er en liste over de mulige dialoger med en kort beskrivelser af, hvad
+den aktiverede dialog indeholder.
+</p>
+
+<p>
+<em>Sprog</em><br>
+Tillader valg af hvilket sprog Simutrans benytter til tekster og navne.
+</p>
+
+<p>
+<em>Spillerfarve</em><br>
+Giver mulighed for valg af firmafarve.
+</p>
+
+<p>
+<em>Udseende</em><br>
+Ændr udseende indstillinger såsom "dag og nat indstilling"
+</p>
+
+<p>
+<em>Lyd</em><br>
+Vælg dine lyd- og musikpræferencer.
+</p>
+
+<p>
+<em>Spillerliste</em><br>
+Kontroller AI-spillerne i spillet.
+</p>
+
+<p>
+<em>Indlæs</em><br>
+Indlæs et tidligere gemt spil.
+</p>
+
+<p>
+<em>Gem</em><br>
+Gem det aktuelle spil.
+</p>
+
+<p>
+<em>Nyt kort</em><br>
+Start et nyt spil.
+</p>
+
+<p>
+<em>Afslut</em><br>
+Afslut spillet. Bemærk at der <strong>ikke</strong> først bliver spurgt om det
+aktuelle spil skal gemmes.
+</p>
+
+<p>
+For en mere detaljeret beskrivelse, vælg venligst "hjælp" i den enkelte dialog.
 </p>
diff --git a/simutrans/text/dk/players.txt b/simutrans/text/dk/players.txt
index 12b1412..9605de2 100644
--- a/simutrans/text/dk/players.txt
+++ b/simutrans/text/dk/players.txt
@@ -1,27 +1,27 @@
-<title>AI-spillerliste dialog hjælp</title>
-
-<h1>AI-spillerliste dialog</h1>
-
-<p>
-<em>Beskrivelse:</em><br>
-AI-spillerliste dialogen giver mulighed for at bestemme antallet af
-computerstyrede spillere i spillet.
-</p>
-
-<p>
-<em>Udseende:</em><br>
-Dialogen består af seks (6) checkbox-knapper med angivelse af den enkelte
-spillers firmafarve.
-</p>
-
-<p>
-For at aktivere/stoppe en AI-spiller skal den pågældende checkbox
-markeres. Bemærk at selvom en AI-spiller "deaktiveres" vil vedkommendes
-eksisterende ruter fortsat modtage indtægter. Deaktivering af en AI-spiller
-får blot vedkommende "til at sove".
-</p>
-
-<p>
-Dialogen giver ligeledes et overblik over kassebeholdningen for hver enkelt
-konkurrent.
+<title>AI-spillerliste dialog hjælp</title>
+
+<h1>AI-spillerliste dialog</h1>
+
+<p>
+<em>Beskrivelse:</em><br>
+AI-spillerliste dialogen giver mulighed for at bestemme antallet af
+computerstyrede spillere i spillet.
+</p>
+
+<p>
+<em>Udseende:</em><br>
+Dialogen består af seks (6) checkbox-knapper med angivelse af den enkelte
+spillers firmafarve.
+</p>
+
+<p>
+For at aktivere/stoppe en AI-spiller skal den pågældende checkbox
+markeres. Bemærk at selvom en AI-spiller "deaktiveres" vil vedkommendes
+eksisterende ruter fortsat modtage indtægter. Deaktivering af en AI-spiller
+får blot vedkommende "til at sove".
+</p>
+
+<p>
+Dialogen giver ligeledes et overblik over kassebeholdningen for hver enkelt
+konkurrent.
 </p>
diff --git a/simutrans/text/dk/railtools.txt b/simutrans/text/dk/railtools.txt
index a8a1ac3..9a49152 100644
--- a/simutrans/text/dk/railtools.txt
+++ b/simutrans/text/dk/railtools.txt
@@ -1,114 +1,114 @@
-<title>Jernbaneanlæg dialog hjælp</title>
-
-<h1>Jernbaneanlæg dialog</h1>
-
-<p>
-<em>Beskrivelse:</em><br>
-Denne dialog indeholder værktøjer til at bygge jernbanespor, signaler,
-tunneller, el-master, stationer, depoter og jernbaneovergange.
-</p>
-
-<p>
-<em>Udseende:</em><br>
-Dialogen består af syv (7) symboler, der hver repræsenterer et byggeværktøj.
-</p>
-
-<p>
-Gående fra venstre mod højre samt oppefra og ned er de forskellige symboler:
-</p>
-
-<p>
-<em>Byg jernbaneanlæg:</em><br>
-Dette værktøj vil bygge et jernbanespor imellem to kort-kvadrater. Ved
-venstreklik på symbolet forandres cursoren til et jernbanekryds-symbol. For at
-bygge et jernbanespor venstreklikkes på start-kvadratet. Cursoren forandres
-derved til en bulldozer. Venstreklik derefter på slut-kvadratet. Simutrans vil
-nu bygge et jernbanespor imellem de to kvadrater.<br>
-Der bliver kun bygget på frie kvadrater. Veje og andre spilleres jernbanespor
-vil ikke blive krydset. Benyt jernbaneovergange, broer eller tunneller til at
-krydse disse "forhindringer".<br>
-Hvis der ikke kan findes en forbindelse imellem de to kvadrater vil der ikke
-blive bygget noget overhovedet.
-</p>
-
-<p>
-<em>Byg jernbanesignal:</em><br>
-Dette værktøj benyttes til at bygge jernbanesignaler på jernbanespor. Ved
-venstreklik på symbolet forandres cursoren til et signalsymbol.<br>
-For at bygge et signal venstreklikkes på et jernbanespor, hvor signalet skal
-placeres. Signaler bygges på kvadrat-grænser, men faktisk bygges et signal på
-begge tilstødende kvadrater. Der kan kun bygges et signal på et kvadrat.<br>
-For at fjerne et signal benyttes "Fjern/riv ned" menuen. Dette vil fjerne
-signalet men lade jernbanesporet intakt.<br>
-Signaler benyttes til at begrænse toges rutemuligheder. De kan f.eks benyttes
-til at tillade to toge at benytte den samme sporstrækning.<br>
-Ensrettede signaler kan benyttes til at tvinge tog i en bestemt retning.<br>
-Et ensrettet signal fås ved at placere et normalt signal og derefter
-venstreklikke på signalet igen. Ved et yderligere venstreklik bliver retningen
-for det ensrettede signal ændret og endnu et venstreklik får signalet tilbage
-til et normalt "tovejs-signal"<br>
-Check omhyggelig om et ensrettet signal vender rigtigt, da togene i modsat
-fald ikke vil kunne finde en rute.
-</p>
-
-<p>
-<em>Byg jernbanetunnel:</em><br>
-Dette værktøj benyttes til at bygge jernbanetuneller. Ved venstreklik på
-symbolet ændres cursoren til et tunnelsymbol.<br>
-Tunneller benyttes til at lave <strong>lige</strong> jernbanestrækninger
-igennem et bjerg. Benyt tunneller til at undgå at skulle bygge udenom eller
-over bjerget.<br>
-For at bygge en tunnel skal jernbanesporene, der skal forbindes, bygges først.
-Byg de to jernbanespor så de ender overfor hinanden og opad en skråning på det
-bjerg, tunnellen skal gå igennnem. Det er vigtigt, at sporene er på samme
-niveau på hver side af bjerget.<br>
-Venstreklik derefter på en af spor-enderne, hvorefter de vil blive forbundet
-med en tunnel.
-</p>
-
-<p>
-<em>Byg el-master:</em><br>
-Dette værktøj benyttes til at bygge el-master på en jernbanestrækning.
-Ved venstreklik på symbolet ændres cursoren til et el-mastsymbol.<br>
-For at elektrificere en jernbanestrækning venstreklikkes på et vilkårligt
-jernbanespor på strækningen.<br>
-El-master er nødvendige for at kunne benytte toge, der har el som
-drivmiddel. Hvis der mangler el-master, vil et sådant tog ikke kunne finde en
-rute.
-</p>
-
-<p>
-<em>Byg jernbanestation:</em><br>
-Dette værktøj benyttes til at bygge en jernbanestation på en
-jernbanestrækning. Ved venstreklik på symbolet ændres cursoren til et
-stationssymbol.<br>
-Stationer benyttes af toge til at hente eller aflevere varer. Stationer bygges
-af stationselementer og kan være af vilkårlig størrelse.<br>
-For at bygge et stationselement venstreklikkes på det jernbanespor-kvadrat,
-hvor elementet skal placeres. Stationselementer kan ikke bygges på skråninger,
-i kurver eller på sporkryds.<br>
-Ethvert stationselement, der placeres ved siden af en eksisterende station,
-vil blive en del af denne station. Ethvert element kan indeholde to (2)
-togvogne.<br>
-Kontroller at en station kan indeholde det længste tog, der skal stoppe der.
-Togvogne, der ikke er inde i stationer vil ikke blive lastet eller losset.
-</p>
-
-<p>
-<em>Byg togdepot:</em><br>
-Dette værktøj benyttes til at bygge et <a href="depot.txt">togdepot</a> på en
-jernbanestrækning. Ved venstreklik på symbolet ændres cursoren til et
-depotsymbol.<br>
-Depoter benyttes til at købe, sælge og opdatere toge og togvogne.<br>
-For at bygge et depot venstreklikkes på et eksisterende
-<strong>jernbanespor-afslutning</strong>, hvor depotet ønskes placeret.
-</p>
-
-<p>
-<em>Byg jernbaneovergang:</em><br>
-Dette værktøj benyttes til at bygge en jernbaneovergang over en vej. Ved
-venstreklik på symbolet ændres cursoren til et jernbaneovergangssymbol.<br>
-For at bygge en jernbaneovergang venstreklikkes på et <strong>lige</strong>
-vejstykke.  Jernbaneovergange benyttes til at krydse <strong>egne</strong>
-veje. For at krydse andre spilleres veje skal benyttes tuneller eller broer.
+<title>Jernbaneanlæg dialog hjælp</title>
+
+<h1>Jernbaneanlæg dialog</h1>
+
+<p>
+<em>Beskrivelse:</em><br>
+Denne dialog indeholder værktøjer til at bygge jernbanespor, signaler,
+tunneller, el-master, stationer, depoter og jernbaneovergange.
+</p>
+
+<p>
+<em>Udseende:</em><br>
+Dialogen består af syv (7) symboler, der hver repræsenterer et byggeværktøj.
+</p>
+
+<p>
+Gående fra venstre mod højre samt oppefra og ned er de forskellige symboler:
+</p>
+
+<p>
+<em>Byg jernbaneanlæg:</em><br>
+Dette værktøj vil bygge et jernbanespor imellem to kort-kvadrater. Ved
+venstreklik på symbolet forandres cursoren til et jernbanekryds-symbol. For at
+bygge et jernbanespor venstreklikkes på start-kvadratet. Cursoren forandres
+derved til en bulldozer. Venstreklik derefter på slut-kvadratet. Simutrans vil
+nu bygge et jernbanespor imellem de to kvadrater.<br>
+Der bliver kun bygget på frie kvadrater. Veje og andre spilleres jernbanespor
+vil ikke blive krydset. Benyt jernbaneovergange, broer eller tunneller til at
+krydse disse "forhindringer".<br>
+Hvis der ikke kan findes en forbindelse imellem de to kvadrater vil der ikke
+blive bygget noget overhovedet.
+</p>
+
+<p>
+<em>Byg jernbanesignal:</em><br>
+Dette værktøj benyttes til at bygge jernbanesignaler på jernbanespor. Ved
+venstreklik på symbolet forandres cursoren til et signalsymbol.<br>
+For at bygge et signal venstreklikkes på et jernbanespor, hvor signalet skal
+placeres. Signaler bygges på kvadrat-grænser, men faktisk bygges et signal på
+begge tilstødende kvadrater. Der kan kun bygges et signal på et kvadrat.<br>
+For at fjerne et signal benyttes "Fjern/riv ned" menuen. Dette vil fjerne
+signalet men lade jernbanesporet intakt.<br>
+Signaler benyttes til at begrænse toges rutemuligheder. De kan f.eks benyttes
+til at tillade to toge at benytte den samme sporstrækning.<br>
+Ensrettede signaler kan benyttes til at tvinge tog i en bestemt retning.<br>
+Et ensrettet signal fås ved at placere et normalt signal og derefter
+venstreklikke på signalet igen. Ved et yderligere venstreklik bliver retningen
+for det ensrettede signal ændret og endnu et venstreklik får signalet tilbage
+til et normalt "tovejs-signal"<br>
+Check omhyggelig om et ensrettet signal vender rigtigt, da togene i modsat
+fald ikke vil kunne finde en rute.
+</p>
+
+<p>
+<em>Byg jernbanetunnel:</em><br>
+Dette værktøj benyttes til at bygge jernbanetuneller. Ved venstreklik på
+symbolet ændres cursoren til et tunnelsymbol.<br>
+Tunneller benyttes til at lave <strong>lige</strong> jernbanestrækninger
+igennem et bjerg. Benyt tunneller til at undgå at skulle bygge udenom eller
+over bjerget.<br>
+For at bygge en tunnel skal jernbanesporene, der skal forbindes, bygges først.
+Byg de to jernbanespor så de ender overfor hinanden og opad en skråning på det
+bjerg, tunnellen skal gå igennnem. Det er vigtigt, at sporene er på samme
+niveau på hver side af bjerget.<br>
+Venstreklik derefter på en af spor-enderne, hvorefter de vil blive forbundet
+med en tunnel.
+</p>
+
+<p>
+<em>Byg el-master:</em><br>
+Dette værktøj benyttes til at bygge el-master på en jernbanestrækning.
+Ved venstreklik på symbolet ændres cursoren til et el-mastsymbol.<br>
+For at elektrificere en jernbanestrækning venstreklikkes på et vilkårligt
+jernbanespor på strækningen.<br>
+El-master er nødvendige for at kunne benytte toge, der har el som
+drivmiddel. Hvis der mangler el-master, vil et sådant tog ikke kunne finde en
+rute.
+</p>
+
+<p>
+<em>Byg jernbanestation:</em><br>
+Dette værktøj benyttes til at bygge en jernbanestation på en
+jernbanestrækning. Ved venstreklik på symbolet ændres cursoren til et
+stationssymbol.<br>
+Stationer benyttes af toge til at hente eller aflevere varer. Stationer bygges
+af stationselementer og kan være af vilkårlig størrelse.<br>
+For at bygge et stationselement venstreklikkes på det jernbanespor-kvadrat,
+hvor elementet skal placeres. Stationselementer kan ikke bygges på skråninger,
+i kurver eller på sporkryds.<br>
+Ethvert stationselement, der placeres ved siden af en eksisterende station,
+vil blive en del af denne station. Ethvert element kan indeholde to (2)
+togvogne.<br>
+Kontroller at en station kan indeholde det længste tog, der skal stoppe der.
+Togvogne, der ikke er inde i stationer vil ikke blive lastet eller losset.
+</p>
+
+<p>
+<em>Byg togdepot:</em><br>
+Dette værktøj benyttes til at bygge et <a href="depot.txt">togdepot</a> på en
+jernbanestrækning. Ved venstreklik på symbolet ændres cursoren til et
+depotsymbol.<br>
+Depoter benyttes til at købe, sælge og opdatere toge og togvogne.<br>
+For at bygge et depot venstreklikkes på et eksisterende
+<strong>jernbanespor-afslutning</strong>, hvor depotet ønskes placeret.
+</p>
+
+<p>
+<em>Byg jernbaneovergang:</em><br>
+Dette værktøj benyttes til at bygge en jernbaneovergang over en vej. Ved
+venstreklik på symbolet ændres cursoren til et jernbaneovergangssymbol.<br>
+For at bygge en jernbaneovergang venstreklikkes på et <strong>lige</strong>
+vejstykke.  Jernbaneovergange benyttes til at krydse <strong>egne</strong>
+veje. For at krydse andre spilleres veje skal benyttes tuneller eller broer.
 </p>
diff --git a/simutrans/text/dk/readme b/simutrans/text/dk/readme
new file mode 100644
index 0000000..c956d6c
--- /dev/null
+++ b/simutrans/text/dk/readme
@@ -0,0 +1,12 @@
+Danish translation for Simutrans.
+Author: Finn R jensen: finnrj at ofir.dk
+
+These help dialog textfiles are updated to Simutrans version 0_83_7_1
+With the present version release intervals they'll probably be up-to-date for
+a couple of days ;-)
+
+Af for mig ukendte årsager kan Simutrans dialogerne ikke benytte bogstaverne
+'ø' og 'Ø' (mens der ingen problemer er med 'æ' og 'å' !?). Af denne grund er
+'ö'og Ö benyttet overalt istedet for henholdsvis 'ø' og 'Ø'
+
+Enhver form for kommentarer og forbedringsforslag er hjerteligt velkomne
diff --git a/simutrans/text/dk/roadtools.txt b/simutrans/text/dk/roadtools.txt
index ce0387a..7ba9930 100644
--- a/simutrans/text/dk/roadtools.txt
+++ b/simutrans/text/dk/roadtools.txt
@@ -1,84 +1,84 @@
-<title>Vejanlæg dialog hjælp </title>
-
-<h1>Vejanlæg dialog</h1>
-
-<p>
-<em>Beskrivelse:</em><br>
-Denne dialog indeholder værktøjer til at bygge veje, busstoppesteder,
-tunneller, lastepladser, vejdepoter og jernbaneovergange.
-</p>
-
-<p>
-<em>Udseende:</em><br>
-Dialogen består af seks (6) symboler, der hver repræsenterer et byggeværktøj.
-</p>
-
-<p>
-Gående fra venstre mod højre samt oppefra og ned er de forskellige symboler:
-</p>
-
-<p>
-<em>Byg vejanlæg:</em><br>
-
-Dette værktøj vil bygge en vej imellem to kort-kvadrater. Ved venstreklik på
-symbolet forandres cursoren til et vej-symbol. For at bygge en vej
-venstreklikkes på start-kvadratet. Cursoren forandres derved til en
-bulldozer. Venstreklik derefter på slut-kvadratet. Simutrans vil nu bygge en
-vej imellem de to kvadrater.<br>
-Der bliver kun bygget på frie kvadrater og over egne og andre spilleres veje.
-Andre spilleres jernbanespor vil ikke blive krydset. Benyt jernbaneovergange,
-broer eller tunneller til at krydse disse "forhindringer".<br>
-Hvis der ikke kan findes en forbindelse imellem de to kvadrater vil der ikke
-blive bygget noget overhovedet.
-</p>
-
-<p>
-<em>Byg busstoppested:</em><br>
-Dette værktøj benyttes til at bygge busstoppesteder på veje. Ved venstreklik
-på symbolet forandres cursoren til et stoppestedssymbol. Venstreklik derefter
-på en vej, hvor du vil have stoppestedet placeret.
-</p>
-
-<p>
-<em>Byg tunneller:</em><br>
-Dette værktøj benyttes til at bygge tuneller. Ved venstreklik på symbolet
-ændres cursoren til et tunnelsymbol. Tunneller benyttes til at lave
-<strong>lige</strong> vejstrækninger igennem et bjerg. Benyt tunneller til at
-undgå at skulle bygge udenom eller over bjerget.<br>
-For at bygge en tunnel skal vejene, der skal forbindes, bygges først. Byg de
-to veje så de ender overfor hinanden og opad en skråning på det bjerg,
-tunnellen skal gå igennnem. Det er vigtigt, at vejene er på samme niveau på
-hver side af bjerget.<br>
-Venstreklik derefter på en af vejafslutningerne, hvorefter de vil blive
-forbundet med en tunnel.
-</p>
-
-<p>
-<em>Byg lasteplads:</em><br>
-Dette værktøj benyttes til at bygge lastepladser. Lastepladser benyttes af
-dine lastbiler til at laste eller aflevere varer. En lasteplads bygges ved at
-venstreklikke på symbolet, hvorved cursoren forandres til et lastepladssymbol,
-og derefter venstreklikke på en <strong>vejafslutning</strong>, hvor du vil
-have lastepladsen placeret. <strong>Bemærk at der højest kan være to køretøjer
-på en lastplads af gangen</strong>
-</p>
-
-<p>
-<em>Byg vejdepot:</em><br>
-Dette værktøj benyttes til at bygge<br>
-<a href="depot.txt">vejdepoter.</a> Depoter benyttes til at købe, sælge og
-opdatere dine køretøjer. Depoter bygges, ligesom lastepladser på
-<strong>vejafslutninger</strong> ved at venstreklikke på symbolet, hvorved cursoren
-forandres til et depotsymbol, og derefter venstreklikke, hvor depotet skal
-placeres,
-</p>
-
-<p>
-<em>Byg jernbaneovergang:</em><br>
-Dette værktøj benyttes til at bygge en jernbaneovergang over et
-jernbanespor. Ved venstreklik på symbolet ændres cursoren til et
-jernbaneovergangssymbol. Jernbaneovergange benyttes til at krydse
-jernbanespor. For at bygge en jernbaneovergang venstreklikkes på et
-<strong>lige</strong> sporstykke, hvorefter veje via jernbaneovergangen kan
-krydse jernbanesporet.
+<title>Vejanlæg dialog hjælp </title>
+
+<h1>Vejanlæg dialog</h1>
+
+<p>
+<em>Beskrivelse:</em><br>
+Denne dialog indeholder værktøjer til at bygge veje, busstoppesteder,
+tunneller, lastepladser, vejdepoter og jernbaneovergange.
+</p>
+
+<p>
+<em>Udseende:</em><br>
+Dialogen består af seks (6) symboler, der hver repræsenterer et byggeværktøj.
+</p>
+
+<p>
+Gående fra venstre mod højre samt oppefra og ned er de forskellige symboler:
+</p>
+
+<p>
+<em>Byg vejanlæg:</em><br>
+
+Dette værktøj vil bygge en vej imellem to kort-kvadrater. Ved venstreklik på
+symbolet forandres cursoren til et vej-symbol. For at bygge en vej
+venstreklikkes på start-kvadratet. Cursoren forandres derved til en
+bulldozer. Venstreklik derefter på slut-kvadratet. Simutrans vil nu bygge en
+vej imellem de to kvadrater.<br>
+Der bliver kun bygget på frie kvadrater og over egne og andre spilleres veje.
+Andre spilleres jernbanespor vil ikke blive krydset. Benyt jernbaneovergange,
+broer eller tunneller til at krydse disse "forhindringer".<br>
+Hvis der ikke kan findes en forbindelse imellem de to kvadrater vil der ikke
+blive bygget noget overhovedet.
+</p>
+
+<p>
+<em>Byg busstoppested:</em><br>
+Dette værktøj benyttes til at bygge busstoppesteder på veje. Ved venstreklik
+på symbolet forandres cursoren til et stoppestedssymbol. Venstreklik derefter
+på en vej, hvor du vil have stoppestedet placeret.
+</p>
+
+<p>
+<em>Byg tunneller:</em><br>
+Dette værktøj benyttes til at bygge tuneller. Ved venstreklik på symbolet
+ændres cursoren til et tunnelsymbol. Tunneller benyttes til at lave
+<strong>lige</strong> vejstrækninger igennem et bjerg. Benyt tunneller til at
+undgå at skulle bygge udenom eller over bjerget.<br>
+For at bygge en tunnel skal vejene, der skal forbindes, bygges først. Byg de
+to veje så de ender overfor hinanden og opad en skråning på det bjerg,
+tunnellen skal gå igennnem. Det er vigtigt, at vejene er på samme niveau på
+hver side af bjerget.<br>
+Venstreklik derefter på en af vejafslutningerne, hvorefter de vil blive
+forbundet med en tunnel.
+</p>
+
+<p>
+<em>Byg lasteplads:</em><br>
+Dette værktøj benyttes til at bygge lastepladser. Lastepladser benyttes af
+dine lastbiler til at laste eller aflevere varer. En lasteplads bygges ved at
+venstreklikke på symbolet, hvorved cursoren forandres til et lastepladssymbol,
+og derefter venstreklikke på en <strong>vejafslutning</strong>, hvor du vil
+have lastepladsen placeret. <strong>Bemærk at der højest kan være to køretøjer
+på en lastplads af gangen</strong>
+</p>
+
+<p>
+<em>Byg vejdepot:</em><br>
+Dette værktøj benyttes til at bygge<br>
+<a href="depot.txt">vejdepoter.</a> Depoter benyttes til at købe, sælge og
+opdatere dine køretøjer. Depoter bygges, ligesom lastepladser på
+<strong>vejafslutninger</strong> ved at venstreklikke på symbolet, hvorved cursoren
+forandres til et depotsymbol, og derefter venstreklikke, hvor depotet skal
+placeres,
+</p>
+
+<p>
+<em>Byg jernbaneovergang:</em><br>
+Dette værktøj benyttes til at bygge en jernbaneovergang over et
+jernbanespor. Ved venstreklik på symbolet ændres cursoren til et
+jernbaneovergangssymbol. Jernbaneovergange benyttes til at krydse
+jernbanespor. For at bygge en jernbaneovergang venstreklikkes på et
+<strong>lige</strong> sporstykke, hvorefter veje via jernbaneovergangen kan
+krydse jernbanesporet.
 </p>
diff --git a/simutrans/text/dk/save.txt b/simutrans/text/dk/save.txt
index 23f059b..6f6f61e 100644
--- a/simutrans/text/dk/save.txt
+++ b/simutrans/text/dk/save.txt
@@ -1,34 +1,34 @@
-<title>Gem Help</title>
-
-<h1>Gem dialog hjælp</h1>
-
-<p>
-<em>Beskrivelse:</em><br>
-Hvis du ønsker at spille et spil over et længere tidsrum, bliver du nødt til
-at gemmme det på et tidspunkt. Simutrans giver mulighed for at gemme alle
-aktuelle data i en fil, der kan indlæses på et senere tidspunkt.
-</p>
-
-<p>
-<em>Udseende:</em><br>
-Øverst i dialogen er overskriften 'Filnavn:' med en tilhørende tekstboks. Denne
-tekstboks giver mulighed for at indtaste et navn, som spillet skal gemmes
-under. Derunder er en liste bestående af de spil, der befinder sig i
-simutrans/save mappen. For alle spil er vist en-slet knap, spillets navn samt
-"gem-tidspunktet".<br>
-Nederst er en 'OK' og en 'Fortryd' knap.
-</p>
-
-<p>
-Et spil gemmes enten ved at taste et navn for spillet i tekstboksen og trykke
-på 'OK' knappen eller ved at gemme under et tidligere navn. Det sidste gøres
-ved trykke på spillets navn i listen, hvorved det tidligere gemte spil
-overskrives.
-</p>
-
-<p>
-Det er muligt at slette gemte spil ved at trykke på
-slet-knappen. <strong>Bemærk at dette sletter spillet uden mulighed for at
-genskabe det !!</strong> Efter der er trykket på slet-knappen lukkes dialogen
-uden yderligere meddelelser.
+<title>Gem Help</title>
+
+<h1>Gem dialog hjælp</h1>
+
+<p>
+<em>Beskrivelse:</em><br>
+Hvis du ønsker at spille et spil over et længere tidsrum, bliver du nødt til
+at gemmme det på et tidspunkt. Simutrans giver mulighed for at gemme alle
+aktuelle data i en fil, der kan indlæses på et senere tidspunkt.
+</p>
+
+<p>
+<em>Udseende:</em><br>
+Øverst i dialogen er overskriften 'Filnavn:' med en tilhørende tekstboks. Denne
+tekstboks giver mulighed for at indtaste et navn, som spillet skal gemmes
+under. Derunder er en liste bestående af de spil, der befinder sig i
+simutrans/save mappen. For alle spil er vist en-slet knap, spillets navn samt
+"gem-tidspunktet".<br>
+Nederst er en 'OK' og en 'Fortryd' knap.
+</p>
+
+<p>
+Et spil gemmes enten ved at taste et navn for spillet i tekstboksen og trykke
+på 'OK' knappen eller ved at gemme under et tidligere navn. Det sidste gøres
+ved trykke på spillets navn i listen, hvorved det tidligere gemte spil
+overskrives.
+</p>
+
+<p>
+Det er muligt at slette gemte spil ved at trykke på
+slet-knappen. <strong>Bemærk at dette sletter spillet uden mulighed for at
+genskabe det !!</strong> Efter der er trykket på slet-knappen lukkes dialogen
+uden yderligere meddelelser.
 </p>
diff --git a/simutrans/text/dk/schedule.txt b/simutrans/text/dk/schedule.txt
index 81e9f09..b71fd7d 100644
--- a/simutrans/text/dk/schedule.txt
+++ b/simutrans/text/dk/schedule.txt
@@ -1,52 +1,52 @@
-<title>Ruteplan dialog hjælp</title>
-
-<h1>Ruteplan dialog</h1>
-
-<p>
-<em>Beskrivelse:</em><br>
-Ruteplan dialogen benyttes til at definere ruter imellem bustoppesteder,
-lastepladser, jernbanestationer, havne eller olieplatforme. Til en rute kan et
-eller flere køretøjer tilknyttes og startes, hvorefter de vil blive med at
-gennemkøre ruten, indtil de sendes tilbage i depot.
-</p>
-
-<p>
-<em>Udseende:</em><br>
-Øverst i dialogen er en liste med overskriften 'Min. last'. Til listen er to
-scroll-knapper tilknyttet.<br>
-Derunder følger et visningsareal, der viser navne, nummer, Min. lastningsgrad
-samt koordinater for de forskellige rutemål. <br>
-Nederst er fire knapper med teksterne 'Tilføj', 'Indføj', 'Fjern' og 'Færdig'.
-Som default indstilling er knappen 'Tilføj' trykket ned.
-</p>
-
-<p>
-<em>Opret en rute:</em><br>
-For at oprette en rute trykkes på 'Tilføj' knappen, hvorved cursoren forandres
-til et rutemål-symbol. Derefter venstreklikkes på de ønskede rutemål (ved en
-havn klikkes i vandet lige ved havnen) i den ønskede
-rækkefølge. <strong>Bemærk at der pt. er en maksimusgrænse på seksten (16)
-rutemål</strong><br>
-For samtlige rutemål kan der indstilles en "Minimums lastgrad". Minimum
-lastgraden er den procentsats af den samlede lastevne, som mindst skal være
-fyldt på køretøjet, før det fortsætter til næste rutemål. For at foretage
-denne indstilling klikkes til venstre for rutemålet i visningsarealet. Herved
-bliver rutemålet markeret som det aktuelle rutemål. Den ønskede minimums
-lastgrad indstilles derefter ved at bruge listens
-scroll-knapper. <strong>Bemærk at et køretøj, der endnu ikke har fået påfyldt
-den ønskede minimums lastgrad, vil vente til dette er tilfældet og kan derved
-spærre rutemålet for andre køretøjer.</strong> Tilsidst trykkes på 'Færdig'
-knappen, hvorved ruten er defineret og dialogen lukkes.
-</p>
-
-<p>
-<em>Opdater en rute:</em><br>
-En rute kan opdateres på følgende måde:<br>
-- Ved at trykke på 'Tilføj' knappen og tilføje yderligere rutemål bagest i
-  rækkefølgen af rutemål<br>
-- Ved at trykke på 'Indføj' knappen hvorefter en nyt rutemål indføjes før
-  det aktuelt markerede rutemål i listen. Dette er den nemmeste måde at sende
-  køretøjer tilbage i depot på.<br>
-- Ved at trykke på 'Fjern' knappen, hvorefter det aktuelt markerede rutemål
-  kan fjernes fra listen ved at klikke på det.
+<title>Ruteplan dialog hjælp</title>
+
+<h1>Ruteplan dialog</h1>
+
+<p>
+<em>Beskrivelse:</em><br>
+Ruteplan dialogen benyttes til at definere ruter imellem bustoppesteder,
+lastepladser, jernbanestationer, havne eller olieplatforme. Til en rute kan et
+eller flere køretøjer tilknyttes og startes, hvorefter de vil blive med at
+gennemkøre ruten, indtil de sendes tilbage i depot.
+</p>
+
+<p>
+<em>Udseende:</em><br>
+Øverst i dialogen er en liste med overskriften 'Min. last'. Til listen er to
+scroll-knapper tilknyttet.<br>
+Derunder følger et visningsareal, der viser navne, nummer, Min. lastningsgrad
+samt koordinater for de forskellige rutemål. <br>
+Nederst er fire knapper med teksterne 'Tilføj', 'Indføj', 'Fjern' og 'Færdig'.
+Som default indstilling er knappen 'Tilføj' trykket ned.
+</p>
+
+<p>
+<em>Opret en rute:</em><br>
+For at oprette en rute trykkes på 'Tilføj' knappen, hvorved cursoren forandres
+til et rutemål-symbol. Derefter venstreklikkes på de ønskede rutemål (ved en
+havn klikkes i vandet lige ved havnen) i den ønskede
+rækkefølge. <strong>Bemærk at der pt. er en maksimusgrænse på seksten (16)
+rutemål</strong><br>
+For samtlige rutemål kan der indstilles en "Minimums lastgrad". Minimum
+lastgraden er den procentsats af den samlede lastevne, som mindst skal være
+fyldt på køretøjet, før det fortsætter til næste rutemål. For at foretage
+denne indstilling klikkes til venstre for rutemålet i visningsarealet. Herved
+bliver rutemålet markeret som det aktuelle rutemål. Den ønskede minimums
+lastgrad indstilles derefter ved at bruge listens
+scroll-knapper. <strong>Bemærk at et køretøj, der endnu ikke har fået påfyldt
+den ønskede minimums lastgrad, vil vente til dette er tilfældet og kan derved
+spærre rutemålet for andre køretøjer.</strong> Tilsidst trykkes på 'Færdig'
+knappen, hvorved ruten er defineret og dialogen lukkes.
+</p>
+
+<p>
+<em>Opdater en rute:</em><br>
+En rute kan opdateres på følgende måde:<br>
+- Ved at trykke på 'Tilføj' knappen og tilføje yderligere rutemål bagest i
+  rækkefølgen af rutemål<br>
+- Ved at trykke på 'Indføj' knappen hvorefter en nyt rutemål indføjes før
+  det aktuelt markerede rutemål i listen. Dette er den nemmeste måde at sende
+  køretøjer tilbage i depot på.<br>
+- Ved at trykke på 'Fjern' knappen, hvorefter det aktuelt markerede rutemål
+  kan fjernes fra listen ved at klikke på det.
 </p>
diff --git a/simutrans/text/dk/shiptools.txt b/simutrans/text/dk/shiptools.txt
index 244d1f2..6c25627 100644
--- a/simutrans/text/dk/shiptools.txt
+++ b/simutrans/text/dk/shiptools.txt
@@ -1,39 +1,39 @@
-<title>Havneanlæg dialog hjælp</title>
-
-<h1>Havneanlæg dialog</h1>
-
-<p>
-<em>Beskrivelse:</em><br>
-Denne dialog indeholder værktøjer til at bygge havne og skibsdepoter.
-</p>
-
-<p>
-<em>Udseende:</em><br>
-Dialogen består af tre (3) symboler, hvoraf et repræsenterer havnebygning og
-de to andre skibsdepoter.
-</p>
-
-<p>
-Gående fra venstre mod højre samt oppefra og ned er de forskellige symboler:
-</p>
-
-<p>
-<em>Byg havn:</em><br>
-Dette værktøj benyttes til at bygge havne. Ved venstreklik på symbolet
-forandres cursoren til et havnesymbol. Herefter kan der bygges en havn ved at
-venstreklikke på en <strong>lige</strong> kyststrækning. Havne benyttes af
-skibe til at laste eller losse varer.<br>
-<strong>Bemærk at havne pt. ikke kan fjernes direkte. Det kan gøres ved fjerne
-havnen, hæve landniveauet og derefter sænke landniveauet.</strong>
-<p>
-
-<p>
-<em>Byg skibsdepot:</em><br>
-Et <a href="depot.txt">skibsdepot</a> benyttes til at bygge, sælge og
-tilknytte ruter til skibe. Der er to symboler til bygning af
-skibsdepoter. Disse er dog pånær udseendet fuldstændig ens. Et skibsdepot
-bygges ved at venstreklikke på symbolet, hvorved cursoren forandres til et
-skibsdepot symbol, og derefter venstreklikke på et hvilket som helst vandfelt,
-hvor depotet ønskes placeret. Som regel er det en fordel at placere depotet i
-nærheden af et eller flere fremtidige rutemål.
+<title>Havneanlæg dialog hjælp</title>
+
+<h1>Havneanlæg dialog</h1>
+
+<p>
+<em>Beskrivelse:</em><br>
+Denne dialog indeholder værktøjer til at bygge havne og skibsdepoter.
+</p>
+
+<p>
+<em>Udseende:</em><br>
+Dialogen består af tre (3) symboler, hvoraf et repræsenterer havnebygning og
+de to andre skibsdepoter.
+</p>
+
+<p>
+Gående fra venstre mod højre samt oppefra og ned er de forskellige symboler:
+</p>
+
+<p>
+<em>Byg havn:</em><br>
+Dette værktøj benyttes til at bygge havne. Ved venstreklik på symbolet
+forandres cursoren til et havnesymbol. Herefter kan der bygges en havn ved at
+venstreklikke på en <strong>lige</strong> kyststrækning. Havne benyttes af
+skibe til at laste eller losse varer.<br>
+<strong>Bemærk at havne pt. ikke kan fjernes direkte. Det kan gøres ved fjerne
+havnen, hæve landniveauet og derefter sænke landniveauet.</strong>
+<p>
+
+<p>
+<em>Byg skibsdepot:</em><br>
+Et <a href="depot.txt">skibsdepot</a> benyttes til at bygge, sælge og
+tilknytte ruter til skibe. Der er to symboler til bygning af
+skibsdepoter. Disse er dog pånær udseendet fuldstændig ens. Et skibsdepot
+bygges ved at venstreklikke på symbolet, hvorved cursoren forandres til et
+skibsdepot symbol, og derefter venstreklikke på et hvilket som helst vandfelt,
+hvor depotet ønskes placeret. Som regel er det en fordel at placere depotet i
+nærheden af et eller flere fremtidige rutemål.
 </p>
diff --git a/simutrans/text/dk/sound.txt b/simutrans/text/dk/sound.txt
index 80dd4f8..5dcba1e 100644
--- a/simutrans/text/dk/sound.txt
+++ b/simutrans/text/dk/sound.txt
@@ -1,38 +1,38 @@
-<title>Lydindstillinger dialog hjælp</title>
-
-<h1>Lydindstillinger dialog</h1>
-
-<p>
-<em>Beskrivelse:</em><br>
-I denne dialog kan du såvel ændre indstillingerne for lyden og musikken, der
-afspilles under spillet, som det musikstykke, der aktuelt afspilles.
-</p>
-
-<p>
-<em>Udseende:</em><br>
-Øverst i dialogen er to scrollbars med overskrifterne: 'Lydstyrke:' og 'Musik
-lydstyrke:'<br>
-Derunder er overskriften 'Afspiller aktuelt:' med to scroll-knapper
-tilknyttet.
-</p>
-
-<p>
-Lydstyrken for diverse lydeffekter (toge, bulldozers ol.) indstilles med den
-øverste scrollbar. Lydstyrken for baggrundsmusikken indstilles med den
-nederste scrollbar.
-</p>
-
-<p>
-Nederst i dialogen vises det aktuelt afspillede musikstykke. Der kan vælges
-tidligere eller senere musiknumre ved at benytte scroll-knapperne.
-</p>
-
-<p>
-<strong>Bemærk at Simutrans ikke inkluderer baggrundsmusik. Denne må tilføjes
-manuelt. Oplysninger om hvorledes dette gøres, kan findes på Simutrans
-hjemmesiden : www.simutrans.org</strong>
-</p>
-
-<p>
-For helt at slå lyden fra kan Simutrans startes med en -nosound option.
+<title>Lydindstillinger dialog hjælp</title>
+
+<h1>Lydindstillinger dialog</h1>
+
+<p>
+<em>Beskrivelse:</em><br>
+I denne dialog kan du såvel ændre indstillingerne for lyden og musikken, der
+afspilles under spillet, som det musikstykke, der aktuelt afspilles.
+</p>
+
+<p>
+<em>Udseende:</em><br>
+Øverst i dialogen er to scrollbars med overskrifterne: 'Lydstyrke:' og 'Musik
+lydstyrke:'<br>
+Derunder er overskriften 'Afspiller aktuelt:' med to scroll-knapper
+tilknyttet.
+</p>
+
+<p>
+Lydstyrken for diverse lydeffekter (toge, bulldozers ol.) indstilles med den
+øverste scrollbar. Lydstyrken for baggrundsmusikken indstilles med den
+nederste scrollbar.
+</p>
+
+<p>
+Nederst i dialogen vises det aktuelt afspillede musikstykke. Der kan vælges
+tidligere eller senere musiknumre ved at benytte scroll-knapperne.
+</p>
+
+<p>
+<strong>Bemærk at Simutrans ikke inkluderer baggrundsmusik. Denne må tilføjes
+manuelt. Oplysninger om hvorledes dette gøres, kan findes på Simutrans
+hjemmesiden : www.simutrans.org</strong>
+</p>
+
+<p>
+For helt at slå lyden fra kan Simutrans startes med en -nosound option.
 </p>
diff --git a/simutrans/text/dk/station.txt b/simutrans/text/dk/station.txt
index db06bb5..0aabd57 100644
--- a/simutrans/text/dk/station.txt
+++ b/simutrans/text/dk/station.txt
@@ -1,74 +1,74 @@
-<title>Rutemål dialog hjælp</title>
-
-<h1>Rutemål dialog</h1>
-
-<p>
-<em>Beskrivelse:</em><br>
-For alle rutemål (busstoppesteder, lastepladser, jernbanestationer og havne)
-på kortet kan denne dialog åbnes ved at klikke på rutemålet. <strong>Bemærk,
-hvis der er køretøjer på rutemålet, vil en</strong>
-<a href="vehicle.txt">køretøjs dialog</a><strong>ligeledes blive åbnet for hvert
-køretøj.</strong> Dialogen giver nyttig information om rutemålet, dets
-forbindelser og den aktuelle varesituation.
-</p>
-
-<p>
-<em>Udseende:</em><br>
-Øverst i dialogen er rutemålets navn og nummer. Derefter følger en oversigt
-over passagerer befordret fra rutemålet denne dag. Dernæst kommer en oversigt
-over aktuelt ventende varer (og passagerer). Hertil er knyttet to knapper med
-teksten 'Statistik' og 'Destination' samt et visningsareal, der giver
-oplysninger om mængden af og destinationen for de ventende varer.<br> Øverst
-til højre i dialogen er en knap med teksten 'Detaljer' og herunder et
-billedudsnit af rutemålet. Ved at klikke på dette billedudsnit, vil rutemålet
-blive centreret på kortet.
-</p>
-
-<p>
-De tre knapper har følgende funktion:
-</p>
-
-<p>
-<em>Statistik:</em><br>
-Statistik knappen udvider dialogen med et grafisk visningsareal og en række
-trykknapper, der hver repræsenterer et rutemålsnøgletal. Ved at trykke på en
-knap bliver udviklingen af det ønskede nøgletal illustreret grafisk i
-visningsarealet.
-</p>
-
-<p>
-<em>Destination:</em><br>
-Dette er en "tilstandsknap" til sortering af oplysningerne om ventende varer i
-visningsarealet. De mulige sorteringsmuligheder (tilstande) er efter 'Destination',
-'via' og 'Mængde'
-</p>
-
-<p>
-<em>Detaljer:</em><br>
-Denne knap åbner en ny dialog med følgende yderligere rutemålsoplysninger:
-</p>
-
-<p>
-<em> - Forbundne industrier:</em><br>
-Angiver hvilke nærliggende industrier, der benytter dette rutemål til at
-modtage eller aflevere varer. Denne oplysning er et glimrende check for, om et
-rutemål "er placeret tæt nok" på en industri til at kunne betjene denne. Et
-rutemål kan udmærket betjene flere industrier samtidigt
-</p>
-
-<p>
-<em> - Modtager følgende varer:</em><br>
-Angiver hvilke varer, der kan leveres til rutemålet.
-</p>
-
-<p>
-<em> - Direkte ruter herfra:</em><br>
-Angiver hvilke andre rutemål, der er direkte forbindelse til samt hvilke
-varer, der leveres til eller fra dette rutemål.
-</p>
-
-<p>
-<em> - Stoppested for rute:</em><br>
-Angiver hvilke definerede (nummererede) ruter, der har dette rutemål som
-stoppested.
+<title>Rutemål dialog hjælp</title>
+
+<h1>Rutemål dialog</h1>
+
+<p>
+<em>Beskrivelse:</em><br>
+For alle rutemål (busstoppesteder, lastepladser, jernbanestationer og havne)
+på kortet kan denne dialog åbnes ved at klikke på rutemålet. <strong>Bemærk,
+hvis der er køretøjer på rutemålet, vil en</strong>
+<a href="vehicle.txt">køretøjs dialog</a><strong>ligeledes blive åbnet for hvert
+køretøj.</strong> Dialogen giver nyttig information om rutemålet, dets
+forbindelser og den aktuelle varesituation.
+</p>
+
+<p>
+<em>Udseende:</em><br>
+Øverst i dialogen er rutemålets navn og nummer. Derefter følger en oversigt
+over passagerer befordret fra rutemålet denne dag. Dernæst kommer en oversigt
+over aktuelt ventende varer (og passagerer). Hertil er knyttet to knapper med
+teksten 'Statistik' og 'Destination' samt et visningsareal, der giver
+oplysninger om mængden af og destinationen for de ventende varer.<br> Øverst
+til højre i dialogen er en knap med teksten 'Detaljer' og herunder et
+billedudsnit af rutemålet. Ved at klikke på dette billedudsnit, vil rutemålet
+blive centreret på kortet.
+</p>
+
+<p>
+De tre knapper har følgende funktion:
+</p>
+
+<p>
+<em>Statistik:</em><br>
+Statistik knappen udvider dialogen med et grafisk visningsareal og en række
+trykknapper, der hver repræsenterer et rutemålsnøgletal. Ved at trykke på en
+knap bliver udviklingen af det ønskede nøgletal illustreret grafisk i
+visningsarealet.
+</p>
+
+<p>
+<em>Destination:</em><br>
+Dette er en "tilstandsknap" til sortering af oplysningerne om ventende varer i
+visningsarealet. De mulige sorteringsmuligheder (tilstande) er efter 'Destination',
+'via' og 'Mængde'
+</p>
+
+<p>
+<em>Detaljer:</em><br>
+Denne knap åbner en ny dialog med følgende yderligere rutemålsoplysninger:
+</p>
+
+<p>
+<em> - Forbundne industrier:</em><br>
+Angiver hvilke nærliggende industrier, der benytter dette rutemål til at
+modtage eller aflevere varer. Denne oplysning er et glimrende check for, om et
+rutemål "er placeret tæt nok" på en industri til at kunne betjene denne. Et
+rutemål kan udmærket betjene flere industrier samtidigt
+</p>
+
+<p>
+<em> - Modtager følgende varer:</em><br>
+Angiver hvilke varer, der kan leveres til rutemålet.
+</p>
+
+<p>
+<em> - Direkte ruter herfra:</em><br>
+Angiver hvilke andre rutemål, der er direkte forbindelse til samt hvilke
+varer, der leveres til eller fra dette rutemål.
+</p>
+
+<p>
+<em> - Stoppested for rute:</em><br>
+Angiver hvilke definerede (nummererede) ruter, der har dette rutemål som
+stoppested.
 </p>
diff --git a/simutrans/text/dk/vehicle.txt b/simutrans/text/dk/vehicle.txt
index 5152b1b..26891db 100644
--- a/simutrans/text/dk/vehicle.txt
+++ b/simutrans/text/dk/vehicle.txt
@@ -1,39 +1,39 @@
-<title>Køretøj dialog hjælp</title>
-
-<h1>Køretøj dialog</h1>
-
-<p>
-<em>Beskrivelse:</em><br>
-For alle køretøjer (busser, lastbiler, toge og skibe) kan denne dialog åbnes
-ved at klikke på køretøjet. Dialogen giver nyttig information om køretøjet,
-dets forbindelser og dets aktuelle lastgrad.
-</p>
-
-<p>
-<em>Udseende:</em><br>
-Øverst i dialogen er køretøjets navn. Derefter følger en række oplysninger om
-køretøjet. Under disse oplysninger er en knap med teksten 'Statistik'. Herefter
-er et visningsareal, hvor oplysninger om den aktuelle last såsom mængde og
-destination fremgår.<br>
-Øverst til højre i dialogen er en knap med teksten 'Ruteplan' og herunder et
-billedudsnit med køretøjet. Ved at klikke på dette billedudsnit, vil køretøjet
-blive centreret på kortet. Sluttelig er der en slet-knap, der vil fjerne
-køretøjet <strong>uden</strong> at spørge først.
-</p>
-
-<p>
-De to knapper har følgende funktion:
-</p>
-
-<p>
-<em>Statistik</em><br>
-Statistik knappen udvider dialogen med et grafisk visningsareal og en række
-trykknapper, der hver repræsenterer et køretøjsnøgletal. Ved at trykke på en
-knap bliver udviklingen af det ønskede nøgletal illustreret grafisk i
-visningsarealet.
-</p>
-
-<p>
-<em>Ruteplan</em><br>
-Denne knap åbner en køretøjets <a href="schedule.txt">ruteplan dialog.</a>
+<title>Køretøj dialog hjælp</title>
+
+<h1>Køretøj dialog</h1>
+
+<p>
+<em>Beskrivelse:</em><br>
+For alle køretøjer (busser, lastbiler, toge og skibe) kan denne dialog åbnes
+ved at klikke på køretøjet. Dialogen giver nyttig information om køretøjet,
+dets forbindelser og dets aktuelle lastgrad.
+</p>
+
+<p>
+<em>Udseende:</em><br>
+Øverst i dialogen er køretøjets navn. Derefter følger en række oplysninger om
+køretøjet. Under disse oplysninger er en knap med teksten 'Statistik'. Herefter
+er et visningsareal, hvor oplysninger om den aktuelle last såsom mængde og
+destination fremgår.<br>
+Øverst til højre i dialogen er en knap med teksten 'Ruteplan' og herunder et
+billedudsnit med køretøjet. Ved at klikke på dette billedudsnit, vil køretøjet
+blive centreret på kortet. Sluttelig er der en slet-knap, der vil fjerne
+køretøjet <strong>uden</strong> at spørge først.
+</p>
+
+<p>
+De to knapper har følgende funktion:
+</p>
+
+<p>
+<em>Statistik</em><br>
+Statistik knappen udvider dialogen med et grafisk visningsareal og en række
+trykknapper, der hver repræsenterer et køretøjsnøgletal. Ved at trykke på en
+knap bliver udviklingen af det ønskede nøgletal illustreret grafisk i
+visningsarealet.
+</p>
+
+<p>
+<em>Ruteplan</em><br>
+Denne knap åbner en køretøjets <a href="schedule.txt">ruteplan dialog.</a>
 </p>
diff --git a/simutrans/text/en/airtools.txt b/simutrans/text/en/airtools.txt
index fb0ae3f..e008c5a 100644
--- a/simutrans/text/en/airtools.txt
+++ b/simutrans/text/en/airtools.txt
@@ -1,53 +1,53 @@
-<title>Airport Tools Help</title>
-
-<h1><strong>Airport Tools</strong></h1>
-
-<p>
-<strong>Airport Tools</strong> contain tools to construct an air transport network. Tools may build or remove: taxiways & runways for aircraft, Airstops (used to pick-up & drop-off, cargo or passengers), aircraft depots (to purchase and manage air transport vehicles) and and various airport buildings. If playing with <a href="new_world.txt">timeline</a>, then as time passes in Simutrans more tool-options may appear.
-</p>
-<p>
-Click airplane-icon at top of game-view to open toolbar.<br>
-Hover mouse-cursor over tool-option (after opening or clicking on toolbar) to see name & where appropriate: construction <a href="finances.txt">cost</a>, maintenance cost in brackets, and maximum speed limit.
-</p>
-<p>
-{Tips: One way to build a simple airport is:<br>
-i) construct and connect Taxiway(s) and Runway(s);<br>
-ii) place airstop(s) on end(s) of taxiway(s);<br>
-iii) add airport buildings as required.}
-</p>
-<p>
-Tools may include, from left to right:
-</p>
-<p>
-<em>Taxiway:</em> tool builds ground movement areas for aircraft to go from an Airstop to a Runway. Taxiways are built on level ground in game-view.<br>
-IMPORTANT: If Taxiways are connected to the end of Runways aircraft may not take-off and land.<br>
-To build a Taxiway: click on tool to select (changes cursor to taxiway), then click on terrain for start-point (shows a bulldozer in game-view and displays map co-ordinates at bottom right of display), & finally click on terrain or runway for end-point.<br>
-{Tips: Use Destroy/Remove to remove individual pieces of Taxiway. Undo <a href="keys.txt">[z]</a> does not refund constructions costs.}
-</p>
-<p>
-<em>Runway:</em> tools build an airstrip, used by aircraft to take-off and land. Runways are built on level ground in game-view and may cross each other.<br>
-To build a Runway: click on tool to select (changes cursor to way), then click on terrain for start-point (shows a bulldozer in game-view), & finally click on terrain for end-point.<br>
-{Tips: Leave ends of Runways unconnected otherwise aircraft may not take-off or land. Use Destroy/Remove to remove individual pieces of Runway. Undo [z] does not refund constructions costs.}
-</p>
-<p>
-<em>Remove airstrips:</em> tool removes a segment of Taxiway or Runway, when no aircraft are present, between two points in game-view. Use of tool incurs a <a href="finances.txt">construction cost</a>.<br>
-To remove an airstrip: click on tool (changes cursor to a red-cross); then click on strip that is to be deleted (selects deletion-point shown by a red-cross in game-view); & finally click at another point on strip, to remove portion up to first deletion-point.
-{Tips: Leave end of Runways unconnected otherwise planes may not take-off or land. Use Destroy/Remove to remove individual pieces of airstrips.}
-</p>
-<p>
-<em>Air <a href="depot.txt"><em>Depot:</em></a></em> tools build hangars for purchasing & managing aircraft. Hangars have a maintenance cost & are built on the end of a piece taxiway.<br>
-To build a Hangar: click on tool (changes cursor to a depot), then click on an end of a taxiway.<br>
-{Tips: Remove depots with Destroy/Remove.}
-</p>
-<p>
-<em>Airstops</em>&<em>boarding bridge:</em> tools build Stops in game-view, for aircraft to pick-up and drop-off passengers or cargo.<br>
-An Airstop when not built adjacent to an existing <a href="station.txt">Stop</a> will create a new Stop.<br>
-Airstops are built on the end of a piece taxiway; and have a maintenance cost and catchment area for goods, passengers & mail. An aircraft will only land at an airport if there is an free Airstop available.<br>
-To build an Airstop: click on tool to select and then click on an end of a taxiway.<br>
-{Tips: Remove Airstops with Destroy/Remove. Press [v] to show/hide catchment area for goods & passengers in game-view.}
-</p>
-<p>
-<em>Airport buildings:</em> tools construct extensions for <a href="station.txt">Stops</em></a> which may increase maintenance costs and the capacity & catchment area for goods & passengers. In the corner of some tool-options an icon (used in <a href="haltlist.txt">Station List</a> & Stop Information) shows which items the extension enables the Stop to handle.<br>
-To build an extension: click on tool to select extension (changes cursor to extension), then click required position, next to an existing Stop in game-view. The new extension is now considered to be part of the Stop.<br>
-{Tips: Remove extensions with the Destroy/Remove. Press [v] to show/hide catchment area for goods & passengers in game-view.}
+<title>Airport Tools Help</title>
+
+<h1><strong>Airport Tools</strong></h1>
+
+<p>
+<strong>Airport Tools</strong> contain tools to construct an air transport network. Tools may build or remove: taxiways & runways for aircraft, Airstops (used to pick-up & drop-off, cargo or passengers), aircraft depots (to purchase and manage air transport vehicles) and and various airport buildings. If playing with <a href="new_world.txt">timeline</a>, then as time passes in Simutrans more tool-options may appear.
+</p>
+<p>
+Click airplane-icon at top of game-view to open toolbar.<br>
+Hover mouse-cursor over tool-option (after opening or clicking on toolbar) to see name & where appropriate: construction <a href="finances.txt">cost</a>, maintenance cost in brackets, and maximum speed limit.
+</p>
+<p>
+{Tips: One way to build a simple airport is:<br>
+i) construct and connect Taxiway(s) and Runway(s);<br>
+ii) place airstop(s) on end(s) of taxiway(s);<br>
+iii) add airport buildings as required.}
+</p>
+<p>
+Tools may include, from left to right:
+</p>
+<p>
+<em>Taxiway:</em> tool builds ground movement areas for aircraft to go from an Airstop to a Runway. Taxiways are built on level ground in game-view.<br>
+IMPORTANT: If Taxiways are connected to the end of Runways aircraft may not take-off and land.<br>
+To build a Taxiway: click on tool to select (changes cursor to taxiway), then click on terrain for start-point (shows a bulldozer in game-view and displays map co-ordinates at bottom right of display), & finally click on terrain or runway for end-point.<br>
+{Tips: Use Destroy/Remove to remove individual pieces of Taxiway. Undo <a href="keys.txt">[z]</a> does not refund constructions costs.}
+</p>
+<p>
+<em>Runway:</em> tools build an airstrip, used by aircraft to take-off and land. Runways are built on level ground in game-view and may cross each other.<br>
+To build a Runway: click on tool to select (changes cursor to way), then click on terrain for start-point (shows a bulldozer in game-view), & finally click on terrain for end-point.<br>
+{Tips: Leave ends of Runways unconnected otherwise aircraft may not take-off or land. Use Destroy/Remove to remove individual pieces of Runway. Undo [z] does not refund constructions costs.}
+</p>
+<p>
+<em>Remove airstrips:</em> tool removes a segment of Taxiway or Runway, when no aircraft are present, between two points in game-view. Use of tool incurs a <a href="finances.txt">construction cost</a>.<br>
+To remove an airstrip: click on tool (changes cursor to a red-cross); then click on strip that is to be deleted (selects deletion-point shown by a red-cross in game-view); & finally click at another point on strip, to remove portion up to first deletion-point.
+{Tips: Leave end of Runways unconnected otherwise planes may not take-off or land. Use Destroy/Remove to remove individual pieces of airstrips.}
+</p>
+<p>
+<em>Air <a href="depot.txt"><em>Depot:</em></a></em> tools build hangars for purchasing & managing aircraft. Hangars have a maintenance cost & are built on the end of a piece taxiway.<br>
+To build a Hangar: click on tool (changes cursor to a depot), then click on an end of a taxiway.<br>
+{Tips: Remove depots with Destroy/Remove.}
+</p>
+<p>
+<em>Airstops</em>&<em>boarding bridge:</em> tools build Stops in game-view, for aircraft to pick-up and drop-off passengers or cargo.<br>
+An Airstop when not built adjacent to an existing <a href="station.txt">Stop</a> will create a new Stop.<br>
+Airstops are built on the end of a piece taxiway; and have a maintenance cost and catchment area for goods, passengers & mail. An aircraft will only land at an airport if there is an free Airstop available.<br>
+To build an Airstop: click on tool to select and then click on an end of a taxiway.<br>
+{Tips: Remove Airstops with Destroy/Remove. Press [v] to show/hide catchment area for goods & passengers in game-view.}
+</p>
+<p>
+<em>Airport buildings:</em> tools construct extensions for <a href="station.txt">Stops</em></a> which may increase maintenance costs and the capacity & catchment area for goods & passengers. In the corner of some tool-options an icon (used in <a href="haltlist.txt">Station List</a> & Stop Information) shows which items the extension enables the Stop to handle.<br>
+To build an extension: click on tool to select extension (changes cursor to extension), then click required position, next to an existing Stop in game-view. The new extension is now considered to be part of the Stop.<br>
+{Tips: Remove extensions with the Destroy/Remove. Press [v] to show/hide catchment area for goods & passengers in game-view.}
 </p>
diff --git a/simutrans/text/en/citylist_filter.txt b/simutrans/text/en/citylist_filter.txt
index 8e70bdf..f466449 100644
--- a/simutrans/text/en/citylist_filter.txt
+++ b/simutrans/text/en/citylist_filter.txt
@@ -1,37 +1,37 @@
-<title>City List Help</title>
-
-<h1><strong>City List</strong></h1>
-
-<p>
-<strong>City List</strong> shows details about <a href="citywindow.txt">urban areas</a> (villages, towns and cities) and populations.
-</p>
-<p>
-To open: click on city-list-tool in <a href="list.txt">List Management</a> or press <a href="keys.txt">[T]</a>.<br>
-<strong>City List</strong> has two option buttons which determine the order that urban areas (and their populations) are shown.<br>
-{Tips: If items in list are only partially visible, then <a href="mouse.txt">re-size</a> <strong>City List</strong> or scroll list using slider-bar.}
-</p>
-<p>
-<em>Total inhabitants:</em> is the total number of citizens in the game (the total population of all urban areas). The recent increase in population is shown in brackets.
-</p>
-<p>
-<em>Sorted by:</em> has options to determine the order of urban areas shown in list.<br>
-Click on option-buttons to cycle through options (changes name of option-button):
-</p>
-<p>
-- <em>Name</em> lists alphanumerically within ASCII-code order (capital letters before lower case letters) of assigned <a href="convoi_info.txt">names</a>.<br>
-- <em>Citizens</em> orders by size of population.<br>
-- <em>Town growth</em> orders by growth rate (which is dependant on size of urban area and number of passengers transported).
-</p>
-<p>
-- <em>ascending</em> / <em>descending</em> reverses order of list.
-</p>
-<p>
-Click on a item listed in<strong>City List</strong>to see more <a href="citywindow.txt">information</a> about that urban area.<br>
-Items listed for each urban area include:
-</p>
-<p>
-<em>name</em> assigned to urban area (can be changed in City Information)..
-</p>
-<p>
-<em>number of inhabitants</em> of urban area, in brackets is the recent increase in population.
+<title>City List Help</title>
+
+<h1><strong>City List</strong></h1>
+
+<p>
+<strong>City List</strong> shows details about <a href="citywindow.txt">urban areas</a> (villages, towns and cities) and populations.
+</p>
+<p>
+To open: click on city-list-tool in <a href="list.txt">List Management</a> or press <a href="keys.txt">[T]</a>.<br>
+<strong>City List</strong> has two option buttons which determine the order that urban areas (and their populations) are shown.<br>
+{Tips: If items in list are only partially visible, then <a href="mouse.txt">re-size</a> <strong>City List</strong> or scroll list using slider-bar.}
+</p>
+<p>
+<em>Total inhabitants:</em> is the total number of citizens in the game (the total population of all urban areas). The recent increase in population is shown in brackets.
+</p>
+<p>
+<em>Sorted by:</em> has options to determine the order of urban areas shown in list.<br>
+Click on option-buttons to cycle through options (changes name of option-button):
+</p>
+<p>
+- <em>Name</em> lists alphanumerically within ASCII-code order (capital letters before lower case letters) of assigned <a href="convoi_info.txt">names</a>.<br>
+- <em>Citizens</em> orders by size of population.<br>
+- <em>Town growth</em> orders by growth rate (which is dependant on size of urban area and number of passengers transported).
+</p>
+<p>
+- <em>ascending</em> / <em>descending</em> reverses order of list.
+</p>
+<p>
+Click on a item listed in<strong>City List</strong>to see more <a href="citywindow.txt">information</a> about that urban area.<br>
+Items listed for each urban area include:
+</p>
+<p>
+<em>name</em> assigned to urban area (can be changed in City Information)..
+</p>
+<p>
+<em>number of inhabitants</em> of urban area, in brackets is the recent increase in population.
 </p>
diff --git a/simutrans/text/en/citywindow.txt b/simutrans/text/en/citywindow.txt
index b3521e8..03e8768 100644
--- a/simutrans/text/en/citywindow.txt
+++ b/simutrans/text/en/citywindow.txt
@@ -1,56 +1,56 @@
-<title>City Information Help</title>
-
-<h1><strong>City Information</strong></h1>
-
-<p>
-<strong>City Information</strong> shows statistics about a selected urban area (village, town or city) and can be used to change the name of the urban area.
-</p>
-<p>
-Each urban area has its own Town Hall around which it grows. Transportation of passengers and mail helps growth, which involves: roads built and taken over by the <a href="players.txt">public service player</a>; new city buildings and <a href="industry_info.txt">industries</a> appear; and city limits extend.
-</p>
-<p>
-Click on a Town Hall in game-view with the <a href="inspection_tool.txt">Inspection Tool</a> or an urban area listed in <a href="citylist_filter.txt">City List</a> to open <strong>?City Information</strong>, which contains: a name-box; statistics; two mini-maps; and a graph for the urban area.
-</p>
-<p>
-<em>name:</em> assigned name of urban area appears in a name-box at top of <strong>?City Information</strong>. <br>
-Names of urban areas are used in the default names of Stops.<br>
-To change name: click on name-box and type new name.<br>
-{Tips: Use <a href="keys.txt">[!]</a> to toggle view of name of urban area, above a Town Hall, in game-view. See readme_citylist.txt (in ...simutrans/text/) for help on name generation of urban areas}.
-</p>
-<p>
-Under the name-box statistics are provided on urban area:<br>
-<em>City size:</em> is number of citizens (population of urban area). The recent increase in population is shown in brackets.<br>
-<em>buildings:</em> number of buildings in urban area.<br>
-<em>map co-ordinates:</em> indicate boundary of city limits (changes as urban area grows).
-<p>
-</p>
-Counters increase with growth of urban area and decrease with construction of new city buildings:<br>
-<em>unemployed:</em> counter determines which type of city building (residential/commerical/industrial) may be constructed.<br>
-<em>homeless:</em> counter determines which type of city building (residential/commerical/industrial) may be constructed.
-</p>
-<p>
-<em>mini-maps</em> of the game world in <strong>?City Information</strong> indicate destinations of passengers and mail.<br>
-Destinations are shown by coloured dots for the current game-calendar-month (right mini-map) and last game-calendar-month (left mini-map). Colour of destination dots indicate details about passengers and mail:<br>
-- yellow: found a route and an uncrowded <a href="station.txt">Stop</a> to start journey (happy face shown in Stop Information).<br>
-- orange: did not find a route to this destination.<br>
-- red: found a route but Stop at start of journey was overcrowded (unhappy face in Stop Information).
-</p>
-<p>
-<em>Graph</em> shows statistics for the urban area. <br>
-The y-axis is quantity, the x-axis is time.<br>
-Click on graph index-tab to change scale of x-axis:<br>
-<em>Years:</em> shows annual values for last ten game calendar years.<br>
-<em>Months:</em> shows monthly values for last 12 game months
-</p>
-
-<p>
-Click on graph-option-button to see information on graph (button is indented when option selected).<br>
-Colours of lines on graph correspond to colours of graph-option-buttons:<br>
-<em>Citizens:</em> population.<br>
-<em>Town growth:</em> change in population (dependent on city size and transport service provided for passengers and mail).<br>
-<em>Travel?ed:</em> passengers and mail that entered transport network (shown as a <a href="station.txt">happy face</a> in Stop Information) <br>
-<em>Passengers:</em> Total number of passengers and mail generated in urban area.
-</p>
-<p>
-{Tips: Settings related to urban areas can be changed in simuconf.tab and cityrules.tab}.
+<title>City Information Help</title>
+
+<h1><strong>City Information</strong></h1>
+
+<p>
+<strong>City Information</strong> shows statistics about a selected urban area (village, town or city) and can be used to change the name of the urban area.
+</p>
+<p>
+Each urban area has its own Town Hall around which it grows. Transportation of passengers and mail helps growth, which involves: roads built and taken over by the <a href="players.txt">public service player</a>; new city buildings and <a href="industry_info.txt">industries</a> appear; and city limits extend.
+</p>
+<p>
+Click on a Town Hall in game-view with the <a href="inspection_tool.txt">Inspection Tool</a> or an urban area listed in <a href="citylist_filter.txt">City List</a> to open <strong>?City Information</strong>, which contains: a name-box; statistics; two mini-maps; and a graph for the urban area.
+</p>
+<p>
+<em>name:</em> assigned name of urban area appears in a name-box at top of <strong>?City Information</strong>. <br>
+Names of urban areas are used in the default names of Stops.<br>
+To change name: click on name-box and type new name.<br>
+{Tips: Use <a href="keys.txt">[!]</a> to toggle view of name of urban area, above a Town Hall, in game-view. See readme_citylist.txt (in ...simutrans/text/) for help on name generation of urban areas}.
+</p>
+<p>
+Under the name-box statistics are provided on urban area:<br>
+<em>City size:</em> is number of citizens (population of urban area). The recent increase in population is shown in brackets.<br>
+<em>buildings:</em> number of buildings in urban area.<br>
+<em>map co-ordinates:</em> indicate boundary of city limits (changes as urban area grows).
+<p>
+</p>
+Counters increase with growth of urban area and decrease with construction of new city buildings:<br>
+<em>unemployed:</em> counter determines which type of city building (residential/commerical/industrial) may be constructed.<br>
+<em>homeless:</em> counter determines which type of city building (residential/commerical/industrial) may be constructed.
+</p>
+<p>
+<em>mini-maps</em> of the game world in <strong>?City Information</strong> indicate destinations of passengers and mail.<br>
+Destinations are shown by coloured dots for the current game-calendar-month (right mini-map) and last game-calendar-month (left mini-map). Colour of destination dots indicate details about passengers and mail:<br>
+- yellow: found a route and an uncrowded <a href="station.txt">Stop</a> to start journey (happy face shown in Stop Information).<br>
+- orange: did not find a route to this destination.<br>
+- red: found a route but Stop at start of journey was overcrowded (unhappy face in Stop Information).
+</p>
+<p>
+<em>Graph</em> shows statistics for the urban area. <br>
+The y-axis is quantity, the x-axis is time.<br>
+Click on graph index-tab to change scale of x-axis:<br>
+<em>Years:</em> shows annual values for last ten game calendar years.<br>
+<em>Months:</em> shows monthly values for last 12 game months
+</p>
+
+<p>
+Click on graph-option-button to see information on graph (button is indented when option selected).<br>
+Colours of lines on graph correspond to colours of graph-option-buttons:<br>
+<em>Citizens:</em> population.<br>
+<em>Town growth:</em> change in population (dependent on city size and transport service provided for passengers and mail).<br>
+<em>Travel?ed:</em> passengers and mail that entered transport network (shown as a <a href="station.txt">happy face</a> in Stop Information) <br>
+<em>Passengers:</em> Total number of passengers and mail generated in urban area.
+</p>
+<p>
+{Tips: Settings related to urban areas can be changed in simuconf.tab and cityrules.tab}.
 </p>
diff --git a/simutrans/text/en/climates.txt b/simutrans/text/en/climates.txt
index 25aab0a..e8632e0 100644
--- a/simutrans/text/en/climates.txt
+++ b/simutrans/text/en/climates.txt
@@ -1,66 +1,66 @@
-<title>Climate Control Help</title>
-
-<h1><strong>Climate Control</strong></h1>
-
-<p>
-<strong>Climate Control</strong> sets options for topograhical and meterological aspects of the game world<br>
-<p>
-<strong>Climate Control</strong> opens with <a href="new_world.txt">Create a New Game</a>.
-</p>
-<p>
-Arrow-buttons adjust settings:
-</p>
-<p>
-<it> options:</it>
-</p>
-<p>
-
-<em>Water level:</em> sets how high water is on map.
-</p>
-<p>
-
-<em>Mountain height:</em> sets maximum height of terrain.
-</p>
-<p>
-
-
-<em>Map roughness:</em> sets roughness of terrain; a larger number creates more undulations.<br>
-</p>
-<p>
-<it>snowline options:</it>
-</p>
-<p>
-
-<em>summer snowline:</em> ?sets height of snowline in summer
-</p>
-<p>
-
-<em>winter snowline:</em> ?sets height of snowline in winter.<br>
-</p>
-<p>
-?<it>climate options:</it>
-</p>
-<p>
-
-<em>desert climate:</em>  ? very little precipitation, extremes in temperature
-</p>
-<p>
-
-<em>tropical climate:</em> ? typical of non-arid areas around equator, constant high temperature at sea level and low elevations).
-</p>
-<p>
-
-<em>mediterranean climate:</em> ?moderate changeable wet weather
-</p>
-<p>
-
-<em>temperate:</em> ?found in areas between tropics and polar caps, changeable weather.
-</p>
-<p>
-
-<em>tundra:</em> ?low temperatures, edges of polar caps
-</p>
-<p>
-
-<em>rocky:</em> sets ?.
+<title>Climate Control Help</title>
+
+<h1><strong>Climate Control</strong></h1>
+
+<p>
+<strong>Climate Control</strong> sets options for topograhical and meterological aspects of the game world<br>
+<p>
+<strong>Climate Control</strong> opens with <a href="new_world.txt">Create a New Game</a>.
+</p>
+<p>
+Arrow-buttons adjust settings:
+</p>
+<p>
+<it> options:</it>
+</p>
+<p>
+
+<em>Water level:</em> sets how high water is on map.
+</p>
+<p>
+
+<em>Mountain height:</em> sets maximum height of terrain.
+</p>
+<p>
+
+
+<em>Map roughness:</em> sets roughness of terrain; a larger number creates more undulations.<br>
+</p>
+<p>
+<it>snowline options:</it>
+</p>
+<p>
+
+<em>summer snowline:</em> ?sets height of snowline in summer
+</p>
+<p>
+
+<em>winter snowline:</em> ?sets height of snowline in winter.<br>
+</p>
+<p>
+?<it>climate options:</it>
+</p>
+<p>
+
+<em>desert climate:</em>  ? very little precipitation, extremes in temperature
+</p>
+<p>
+
+<em>tropical climate:</em> ? typical of non-arid areas around equator, constant high temperature at sea level and low elevations).
+</p>
+<p>
+
+<em>mediterranean climate:</em> ?moderate changeable wet weather
+</p>
+<p>
+
+<em>temperate:</em> ?found in areas between tropics and polar caps, changeable weather.
+</p>
+<p>
+
+<em>tundra:</em> ?low temperatures, edges of polar caps
+</p>
+<p>
+
+<em>rocky:</em> sets ?.
 </p>
diff --git a/simutrans/text/en/color.txt b/simutrans/text/en/color.txt
index 9951032..5db91b4 100644
--- a/simutrans/text/en/color.txt
+++ b/simutrans/text/en/color.txt
@@ -1,21 +1,21 @@
-<title>Player Colour Help</title>
-
-<h1><strong>Player Colour</strong></h1>
-
-<p>
-<strong>Player Colour</strong> sets the colour of the company.<br>
-Vehicles, buildings & other items show company colour.
-</p>
-<p>
-<strong>Player Colour</strong> opens from <a href="options.txt">Game Options</a>.
-</p>
-<p>Click on colour-bar to change company colour.<br>
-Titlebar of <strong>Player Colour</strong> changes (not to new company colour) to indicate new colour is selected.
-</p>
-<p>
-Default human player colour is light blue.<br>
-Some items are not colour-coded & may not display chosen colour.
-</p>
-<p>
-{Tips: To change AI player colour use <a href="players.txt">Player List</a> or <a href="special.txt">P+ Change Player</a> to select AI player first}.
+<title>Player Colour Help</title>
+
+<h1><strong>Player Colour</strong></h1>
+
+<p>
+<strong>Player Colour</strong> sets the colour of the company.<br>
+Vehicles, buildings & other items show company colour.
+</p>
+<p>
+<strong>Player Colour</strong> opens from <a href="options.txt">Game Options</a>.
+</p>
+<p>Click on colour-bar to change company colour.<br>
+Titlebar of <strong>Player Colour</strong> changes (not to new company colour) to indicate new colour is selected.
+</p>
+<p>
+Default human player colour is light blue.<br>
+Some items are not colour-coded & may not display chosen colour.
+</p>
+<p>
+{Tips: To change AI player colour use <a href="players.txt">Player List</a> or <a href="special.txt">P+ Change Player</a> to select AI player first}.
 </p>
diff --git a/simutrans/text/en/convoi.txt b/simutrans/text/en/convoi.txt
index 0438493..1b51cc7 100644
--- a/simutrans/text/en/convoi.txt
+++ b/simutrans/text/en/convoi.txt
@@ -1,56 +1,56 @@
-<title>Vehicle List Help</title>
-
-<h1><strong>Vehicle List</strong></h1>
-
-<p>
-<strong>Vehicle List</strong> shows information and has controls to filter and list different <a href="convoiinfo.txt">Convoys</a> (a Convoy is made up of an operational vehicle or combination of vehicle units).
-</p>
-<p>
-To open: click on vehicle-list-tool in <a href="list.txt">List Management</a> or press <a href="keys.txt">[V]</a>. <strong>Vehicle List</strong> has four option buttons, two are used to order items in a list and two are used to apply options to select items to show in list.<br>
-Below buttons is a list of <a href="convoiinfo.txt">Convoys</a> that fit criteria for filter options.<br>
-{Tips: If no Convoys are listed change <em>Filter</em> options. If items in list are only partially visible, then <a href="mouse.txt">re-size</a> <strong>Vehicle List</strong> or scroll list using slider-bar.}
-</p>
-<p>
-Click on option-buttons to cycle through options (changes name of option-button) or open Filter Settings controls :
-</p>
-<p>
-<em>Sorted by:</em> Two option buttons determine the order of <a href="convoiinfo.txt">Convoys</a> shown in list.
-</p>
-<p>
-- <em>Type</em> orders by type of transport (in ascending order of road vehicle , rail vehicle, boat and aircraft) <br>
-- <em>Name</em> orders by assigned name, alphanumerically within ASCII-code order: capital letters before lower case letters (by default this is make of first vehicle unit <a href="depot.txt">purchased</a> or assembled for Convoy).<br>
-- <em>Income</em> orders by profit (income generated less operating costs).
-- <em>Internal ID</em> orders by unique ID number of convoy (assigned by default when Convoy is first purchased or assembled in a <a href=depot.txt">depot</a> and shown in titlebar of <a href="convoiinfo.txt">Convoy Information</a>).
-</p>
-<p>
-- <em>ascending</em> / <em>descending</em> reverses order of list.
-</p>
-<p>
-<em>Filter:</em> Two option buttons, switch on/off selection criteria for list and access controls to change criteria.
-</p>
-<p>
-- <em>enabled</em> / <em>disabled</em> click to toggle filter criteria for <a href="convoiinfo.txt">Convoys</a> in list.
-</p>
-<p>
-- <a href="convoi_filter.txt"><em>Settings</em></a> opens controls to change filter criteria.
-</p>
-<p>
-Click on a item listed to see more information about that <a href="convoiinfo.txt">Convoy</a>.
-</p>
-<p>
-Items listed for each Convoy include:
-</p>
-<em>Internal ID</em>: a unique ID number of convoy (assigned by default when Convoy is first purchased or assembled in a <a href=depot.txt">depot</a> and shown in titlebar of <a href="convoiinfo.txt">Convoy Information</a>).
-</p>
-<p>
-<em>name</em> that has been assigned (by default this is make of first vehicle when Convoy is purchased or assembled).
-</p>
-<p>
-<em>income</em> shows profit (income generated less operation costs when in transit).
-</p>
-<p>
-<em>Line:</em> shows assigned <a href="linemanagement.txt">Line</a> and indicates if the Convoy is in a <a href="depot.txt">depot</a>.
-</p>
-<p>
-<em>graphics</em> show the compostion and the current load level .
+<title>Vehicle List Help</title>
+
+<h1><strong>Vehicle List</strong></h1>
+
+<p>
+<strong>Vehicle List</strong> shows information and has controls to filter and list different <a href="convoiinfo.txt">Convoys</a> (a Convoy is made up of an operational vehicle or combination of vehicle units).
+</p>
+<p>
+To open: click on vehicle-list-tool in <a href="list.txt">List Management</a> or press <a href="keys.txt">[V]</a>. <strong>Vehicle List</strong> has four option buttons, two are used to order items in a list and two are used to apply options to select items to show in list.<br>
+Below buttons is a list of <a href="convoiinfo.txt">Convoys</a> that fit criteria for filter options.<br>
+{Tips: If no Convoys are listed change <em>Filter</em> options. If items in list are only partially visible, then <a href="mouse.txt">re-size</a> <strong>Vehicle List</strong> or scroll list using slider-bar.}
+</p>
+<p>
+Click on option-buttons to cycle through options (changes name of option-button) or open Filter Settings controls :
+</p>
+<p>
+<em>Sorted by:</em> Two option buttons determine the order of <a href="convoiinfo.txt">Convoys</a> shown in list.
+</p>
+<p>
+- <em>Type</em> orders by type of transport (in ascending order of road vehicle , rail vehicle, boat and aircraft) <br>
+- <em>Name</em> orders by assigned name, alphanumerically within ASCII-code order: capital letters before lower case letters (by default this is make of first vehicle unit <a href="depot.txt">purchased</a> or assembled for Convoy).<br>
+- <em>Income</em> orders by profit (income generated less operating costs).
+- <em>Internal ID</em> orders by unique ID number of convoy (assigned by default when Convoy is first purchased or assembled in a <a href=depot.txt">depot</a> and shown in titlebar of <a href="convoiinfo.txt">Convoy Information</a>).
+</p>
+<p>
+- <em>ascending</em> / <em>descending</em> reverses order of list.
+</p>
+<p>
+<em>Filter:</em> Two option buttons, switch on/off selection criteria for list and access controls to change criteria.
+</p>
+<p>
+- <em>enabled</em> / <em>disabled</em> click to toggle filter criteria for <a href="convoiinfo.txt">Convoys</a> in list.
+</p>
+<p>
+- <a href="convoi_filter.txt"><em>Settings</em></a> opens controls to change filter criteria.
+</p>
+<p>
+Click on a item listed to see more information about that <a href="convoiinfo.txt">Convoy</a>.
+</p>
+<p>
+Items listed for each Convoy include:
+</p>
+<em>Internal ID</em>: a unique ID number of convoy (assigned by default when Convoy is first purchased or assembled in a <a href=depot.txt">depot</a> and shown in titlebar of <a href="convoiinfo.txt">Convoy Information</a>).
+</p>
+<p>
+<em>name</em> that has been assigned (by default this is make of first vehicle when Convoy is purchased or assembled).
+</p>
+<p>
+<em>income</em> shows profit (income generated less operation costs when in transit).
+</p>
+<p>
+<em>Line:</em> shows assigned <a href="linemanagement.txt">Line</a> and indicates if the Convoy is in a <a href="depot.txt">depot</a>.
+</p>
+<p>
+<em>graphics</em> show the compostion and the current load level .
 </p>
diff --git a/simutrans/text/en/convoi_filter.txt b/simutrans/text/en/convoi_filter.txt
index d5539a6..2b1a5ee 100644
--- a/simutrans/text/en/convoi_filter.txt
+++ b/simutrans/text/en/convoi_filter.txt
@@ -1,36 +1,36 @@
-<title>Vehicle List Filter Help</title>
-
-<h1><strong>Vehicle List Filter</strong></h1>
-
-<p>
-<strong>Vehicle List Filter</strong> has options to determine which <a href="convoiinfo.txt">Convoys</a>, are shown in <a href="convoi.txt">Vehicle List</a>.
-</p>
-<p>
-Click on Settings in Vehicle List to open <strong>Vehicle List Filter</strong>.
-</p>
-<p>
-Option-buttons select Convoys to be listed in Vehicle List when filter option is <a href="convoi.txt">enabled</a>. Only Convoys that fit all criteria set, are listed.
-</p>
-<p>
-Click on a square-button to set criteria for filter (button is indented when selected):
-</p>
-<p>
-<em>Filter names:</em> selects <a href="convoiinfo.txt">Convoy</a> by name. To use: click on button to select, then click on name-box and type required name exactly (option is case sensitive).
-</p>
-<p>
-<em>Filter types:</em> will list Convoys by type of transport if selected. To use: click on button to select, then click on transport type(s): road, rail, water and air.
-</p>
-<p>
-<em>Special filter:</em> selects <a href="convoiinfo.txt">Convoys</a> to list by following criteria (click on button to select, then click on):<br>
-- <em>no route</em> - cannot find a path to next destination.<br>
-- <em>no schedule</em> - not assigned a <a href="schedule.txt">route</a>.<br>
-- <em>no income</em> - not generating profit.<br>
-- <em>in a depot</em> - those in a <a href="depot.txt">depot</a>.<br>
-- <em>no line</em> - not assigned a <a href="linemanagement.txt">Line</a>.
-</p>
-<p>
-<em>Filter goods:</em> selects Convoys by ability to transport different goods & passengers. Click on button next to name to select item(s). Use <a href="mouse.txt">slider-bar</a> to scroll item(s) in list. Options include:<br>
-- <em>all</em> selects all items.<br>
-- <em>none</em> no items are selected.<br>
-- <em>inv.</em> inverses current selection of items.
+<title>Vehicle List Filter Help</title>
+
+<h1><strong>Vehicle List Filter</strong></h1>
+
+<p>
+<strong>Vehicle List Filter</strong> has options to determine which <a href="convoiinfo.txt">Convoys</a>, are shown in <a href="convoi.txt">Vehicle List</a>.
+</p>
+<p>
+Click on Settings in Vehicle List to open <strong>Vehicle List Filter</strong>.
+</p>
+<p>
+Option-buttons select Convoys to be listed in Vehicle List when filter option is <a href="convoi.txt">enabled</a>. Only Convoys that fit all criteria set, are listed.
+</p>
+<p>
+Click on a square-button to set criteria for filter (button is indented when selected):
+</p>
+<p>
+<em>Filter names:</em> selects <a href="convoiinfo.txt">Convoy</a> by name. To use: click on button to select, then click on name-box and type required name exactly (option is case sensitive).
+</p>
+<p>
+<em>Filter types:</em> will list Convoys by type of transport if selected. To use: click on button to select, then click on transport type(s): road, rail, water and air.
+</p>
+<p>
+<em>Special filter:</em> selects <a href="convoiinfo.txt">Convoys</a> to list by following criteria (click on button to select, then click on):<br>
+- <em>no route</em> - cannot find a path to next destination.<br>
+- <em>no schedule</em> - not assigned a <a href="schedule.txt">route</a>.<br>
+- <em>no income</em> - not generating profit.<br>
+- <em>in a depot</em> - those in a <a href="depot.txt">depot</a>.<br>
+- <em>no line</em> - not assigned a <a href="linemanagement.txt">Line</a>.
+</p>
+<p>
+<em>Filter goods:</em> selects Convoys by ability to transport different goods & passengers. Click on button next to name to select item(s). Use <a href="mouse.txt">slider-bar</a> to scroll item(s) in list. Options include:<br>
+- <em>all</em> selects all items.<br>
+- <em>none</em> no items are selected.<br>
+- <em>inv.</em> inverses current selection of items.
 </p>
diff --git a/simutrans/text/en/convoidetail.txt b/simutrans/text/en/convoidetail.txt
index a61e8d5..9c49b5a 100644
--- a/simutrans/text/en/convoidetail.txt
+++ b/simutrans/text/en/convoidetail.txt
@@ -1,40 +1,40 @@
-<title>Convoy Details Help</title>
-
-<h1><strong>Convoy Details</strong></h1>
-
-<p>
-<strong>Convoy Details</strong> provides more information about a Convoy (an operational vehicle or combination of vehicle-units) and can be used to sell the Convoy immediately.
-</p>
-<p>
-
-<strong>Convoy Details</strong> open from
-<a href="convoiinfo.txt">
-Details</a> option-button in Convoy Information</strong>.
-<br>
-If all items are not visible <a href="mouse.txt">re-size</a> <strong>Convoy Details</strong> or use slider-bars to scroll items.
-</p>
-<p>
-At the top of
-
-<strong>Convoy Details</strong> information shown includes:
-</p>
-<p>
-<em>Power:</em> of Convoy (combined power of all motorised vehicle-units in Convoy).
-</p>
-<p>
-<em>Resale Value:</em> money received if Convoy is sold (purchase price of Convoy less any depreciation).
-</p>
-<p>
-WARNING: Click on <em>Sell mode</em> option-button to sell Convoy immediately. No further confirmation is required. The Convoy is removed from the game and the player balnce credited with the selling price .
-</p>
-<p>
-<strong>Convoy Details</strong> lists all vehicle-units in Convoy.<br>
-Information listed for all vehicle-units includes:<br>
-- <em>vehicle-unit-graphic</em> a picture of vehicle-unit (also used in <a href="depot.txt">depots</a>).<br>
-- <em>Manufactured:</em> month and year of manufacture and introduction date if playing with <a href="new_world.txt">timeline</a>.<br>
-- <em>Resale Value:</em> amount received if sold.<br>
-- <em>Power:</em> power generated (by motorised vehicle units).<br>
-- <em>Friction:</em> current friction level.<br>
-- <em>Max income:</em> ?income of vehicle-unit by type of item transported by Convoy.<br>
-- <em>items on board</em> amount and destination of items currently carried by vehicle-unit.
+<title>Convoy Details Help</title>
+
+<h1><strong>Convoy Details</strong></h1>
+
+<p>
+<strong>Convoy Details</strong> provides more information about a Convoy (an operational vehicle or combination of vehicle-units) and can be used to sell the Convoy immediately.
+</p>
+<p>
+
+<strong>Convoy Details</strong> open from
+<a href="convoiinfo.txt">
+Details</a> option-button in Convoy Information</strong>.
+<br>
+If all items are not visible <a href="mouse.txt">re-size</a> <strong>Convoy Details</strong> or use slider-bars to scroll items.
+</p>
+<p>
+At the top of
+
+<strong>Convoy Details</strong> information shown includes:
+</p>
+<p>
+<em>Power:</em> of Convoy (combined power of all motorised vehicle-units in Convoy).
+</p>
+<p>
+<em>Resale Value:</em> money received if Convoy is sold (purchase price of Convoy less any depreciation).
+</p>
+<p>
+WARNING: Click on <em>Sell mode</em> option-button to sell Convoy immediately. No further confirmation is required. The Convoy is removed from the game and the player balnce credited with the selling price .
+</p>
+<p>
+<strong>Convoy Details</strong> lists all vehicle-units in Convoy.<br>
+Information listed for all vehicle-units includes:<br>
+- <em>vehicle-unit-graphic</em> a picture of vehicle-unit (also used in <a href="depot.txt">depots</a>).<br>
+- <em>Manufactured:</em> month and year of manufacture and introduction date if playing with <a href="new_world.txt">timeline</a>.<br>
+- <em>Resale Value:</em> amount received if sold.<br>
+- <em>Power:</em> power generated (by motorised vehicle units).<br>
+- <em>Friction:</em> current friction level.<br>
+- <em>Max income:</em> ?income of vehicle-unit by type of item transported by Convoy.<br>
+- <em>items on board</em> amount and destination of items currently carried by vehicle-unit.
 </p>
diff --git a/simutrans/text/en/convoiinfo.txt b/simutrans/text/en/convoiinfo.txt
index 8f594fd..d5777cd 100644
--- a/simutrans/text/en/convoiinfo.txt
+++ b/simutrans/text/en/convoiinfo.txt
@@ -1,94 +1,94 @@
-<title>Convoy Information Help</title>
-
-<h1><strong>Convoy Information</strong></h1>
-
-<p>
-<strong>Convoy Information</strong> provides information about a Convoy (an operational vehicle or combination of vehicle-units) which is used to transport goods and passengers.<br>
-It lists items carried by a Convoy and also has controls to access further details and sell the Convoy; follow the Convoy in game-view; and change the name and <a href="schedule.txt">Schedule</a> of Convoy.
-</p>
-
-<p>
-A Convoy is composed of at least one powered (motorised) vehicle-unit and any attached trailers/carriages.<br>
-Examples of Convoys include: a team of horses pulling a carriage; or a train engine attached to a tender and carriages; or a bus; or a van; or a truck attached to a trailer; or connected tram cars; or a ship; or a tugboat pulling a barge; or an aircraft.<br>
-Convoys are assembled and purchased from the <a href="depot.txt">depot</a> for their type of transport.<br>
-{Tips: ?A Convoy has maximum limit to number of vehicle-units in its composition: trains, 24; road vehicles, 4 .}
-</p>
-<p>
-Click on a Convoy in game-view with the <a href="inspection_tool.txt">Inspection Tool</a> or click on a Convoy listed in <a href="convoi.txt">Vehicle List</a> or <a href="linemanagement.txt">Line Management</a> to open <strong>Convoy Information</strong><br>
-The title-bar of <strong>Convoy Information</strong> shows a unique ID number and name of Convoy (by default this is make of first vehicle unit purchased or assembled in a <a href="depot.txt">depot</a>).<br>
-<strong>Convoy Information</strong> contains a name-box; a mini-view and information about the Convoy; option buttons; and a list of all items currently carried (if all items are not visible <a href="mouse.txt">re-size</a> <strong>Convoy Information</strong> or use slider-bars to scroll items).
-</p>
-<p>
-Information shown at top of <strong>Convoy Information</strong> includes:
-</p>
-<p>
-<em>Internal ID</em>: a unique ID number for Convoy (assigned by default when Convoy is first purchased or assembled in a <a href=depot.txt">depot</a>).
-</p>
-<p>
-- <em>name</em>: shows assigned name of Convoy (by default this is make of first vehicle-unit purchased or assembled in a <a href="depot.txt">depot</a> for Convoy).<br>
-Click on name-box and type new name to change name of Convoy.
-</p>
-<p>
-- <em>speed:</em> current speed is shown in km/h.<br>
-In brackets is maximum speed limit of Convoy (determined by slowest vehicle unit in Convoy).<br>
-A green-progress-bar indicates current speed relative to maximum speed limit.
-</p>
-<p>
-- <em>Income:</em> profit made by vehicle (income generated less operation costs) in current game-calendar-year.<br>
-In brackets is operational cost of Convoy in Hajo Credits per game square.
-</p>
-<p>
-- <em>Weight:</em> current combined weight of Convoy and items carried in tonnes.<br>
-In brackets is current weight of items carried.<br>
-A green-progress-bar indicates capacity used, to carry goods and passengers.<br>
-A yellow-bar indicates <a href="schedule.txt">Wait For</a> level (minimum quantity of goods and passengers required by Convoy to proceed) set in Schedule Controls.<br>
-{Tips: To set or change Wait For levels for all Convoys on a Line, use Update Line option-button in <a href="linemanagement.txt">Line Management</a> or <a href="depot.txt">Depot Controls</a>. To set or change the Wait For level for a Convoy and no other Convoy on assigned Line, use <em>Schedule</em> option-button in <strong>Convoy Information</strong> or Depot Controls.}
-</p>
-<p>
-- <em>Destination:</em> The next <a href="station.txt">Stop</a> or waypoint in the Convoy's <a href="schedule.txt">Schedule</a>.<br>
-A green-progress-bar indicates progress by Convoy to next destination.
-</p>
-<p>
-- <em>Serves line:</em> indicates any <a href="linemanagement.txt">Line</a> assigned to Convoy.
-</p>
-<p>
-- <em>mini-view</em> shows Convoy.<br>
-Click on mini-view to centre game-view on Convoy.
-</p>
-<p>
-Click on buttons in <strong>Convoy Information</strong> to open controls or select options:
-</p>
-<p>
-<a href="schedule.txt"><em>Schedule:</em></a> opens controls to change the route and minimum quantity of goods and passengers required by Convoy to proceed.
-</p>
-<p>
-<em>go to depot:</em> sends Convoy to nearest appropriate <a href="depot.txt">depot</a>. Any items being carried are lost, though income is received for transportation to depot.<br>
-In the depot the Convoy keeps its <a href="schedule.txt">Schedule</a> and assigned <a href="linemanagement.txt">Line</a>.
-</p>
-<p>
-<em>follow me:</em> button when indented moves game-view with Convoy.<br>
-To deselect option, click on button again or left-click on <a href="map.txt">Map</a>.
-</p>
-<p>
-<em>Chart:</em> click option-button to toggle graph (button is indentented when graph is visible) in <strong>Convoy Information</strong>.<br>
-The graph shows statistics for the last 12 months (x-axis) when a graph-option is selected.<br>
-Click on graph-option-button to see information on graph (button is indented when option selected).<br>
-Colours of lines on graph correspond to colours of graph-option-buttons:<br>
-- <em>Free Capacity</em> indicates unused space on Convoy.<br>
-- <em>Travel?ed</em> indicates number of goods, passengers and mail transported.<br>
-- <em>Proceeds</em> indicates income generated by transportation.<br>
-- <em>Operation Costs</em> indicates costs incurred by Convoy when in transit.<br>
-- <em>Profit</em> indicates profit received from transportation (Proceeds less Operation Costs).
-</p>
-<p>
-<em>Details</em> opens <a href="convoidetail.txt">Convoy Details</a> which contains more information and option to sell Convoy.
-</p>
-<p>
-<em>Sort Passengers/freight by:</em> lists items currently carried by Convoy.<br>
-Information shown includes quantity carried and capacity of Convoy, type of item, final destination and first transit <a href="station.txt">Stop</a>.<br>
-Option-button (changes name with selection) sorts of items carried in groups of passengers, mail and goods:<br>
- - <em>destination:</em> sorts items carried, alphanumerically within ASCII-code order (capital letters before lower case letters), by assigned name of final destination Stop.<br>
- - <em>via (detail):</em> sorts items carried, alphanumerically within ASCII-code order (capital letters before lower case letters), by assigned name of first transfer Stop.<br>
- - <em>via (amount):</em> sorts items carried by quantity headed to first transfer Stop.<br>
- - <em>amount:</em> sorts items carried by quantity in descending order.
+<title>Convoy Information Help</title>
+
+<h1><strong>Convoy Information</strong></h1>
+
+<p>
+<strong>Convoy Information</strong> provides information about a Convoy (an operational vehicle or combination of vehicle-units) which is used to transport goods and passengers.<br>
+It lists items carried by a Convoy and also has controls to access further details and sell the Convoy; follow the Convoy in game-view; and change the name and <a href="schedule.txt">Schedule</a> of Convoy.
+</p>
+
+<p>
+A Convoy is composed of at least one powered (motorised) vehicle-unit and any attached trailers/carriages.<br>
+Examples of Convoys include: a team of horses pulling a carriage; or a train engine attached to a tender and carriages; or a bus; or a van; or a truck attached to a trailer; or connected tram cars; or a ship; or a tugboat pulling a barge; or an aircraft.<br>
+Convoys are assembled and purchased from the <a href="depot.txt">depot</a> for their type of transport.<br>
+{Tips: ?A Convoy has maximum limit to number of vehicle-units in its composition: trains, 24; road vehicles, 4 .}
+</p>
+<p>
+Click on a Convoy in game-view with the <a href="inspection_tool.txt">Inspection Tool</a> or click on a Convoy listed in <a href="convoi.txt">Vehicle List</a> or <a href="linemanagement.txt">Line Management</a> to open <strong>Convoy Information</strong><br>
+The title-bar of <strong>Convoy Information</strong> shows a unique ID number and name of Convoy (by default this is make of first vehicle unit purchased or assembled in a <a href="depot.txt">depot</a>).<br>
+<strong>Convoy Information</strong> contains a name-box; a mini-view and information about the Convoy; option buttons; and a list of all items currently carried (if all items are not visible <a href="mouse.txt">re-size</a> <strong>Convoy Information</strong> or use slider-bars to scroll items).
+</p>
+<p>
+Information shown at top of <strong>Convoy Information</strong> includes:
+</p>
+<p>
+<em>Internal ID</em>: a unique ID number for Convoy (assigned by default when Convoy is first purchased or assembled in a <a href=depot.txt">depot</a>).
+</p>
+<p>
+- <em>name</em>: shows assigned name of Convoy (by default this is make of first vehicle-unit purchased or assembled in a <a href="depot.txt">depot</a> for Convoy).<br>
+Click on name-box and type new name to change name of Convoy.
+</p>
+<p>
+- <em>speed:</em> current speed is shown in km/h.<br>
+In brackets is maximum speed limit of Convoy (determined by slowest vehicle unit in Convoy).<br>
+A green-progress-bar indicates current speed relative to maximum speed limit.
+</p>
+<p>
+- <em>Income:</em> profit made by vehicle (income generated less operation costs) in current game-calendar-year.<br>
+In brackets is operational cost of Convoy in Hajo Credits per game square.
+</p>
+<p>
+- <em>Weight:</em> current combined weight of Convoy and items carried in tonnes.<br>
+In brackets is current weight of items carried.<br>
+A green-progress-bar indicates capacity used, to carry goods and passengers.<br>
+A yellow-bar indicates <a href="schedule.txt">Wait For</a> level (minimum quantity of goods and passengers required by Convoy to proceed) set in Schedule Controls.<br>
+{Tips: To set or change Wait For levels for all Convoys on a Line, use Update Line option-button in <a href="linemanagement.txt">Line Management</a> or <a href="depot.txt">Depot Controls</a>. To set or change the Wait For level for a Convoy and no other Convoy on assigned Line, use <em>Schedule</em> option-button in <strong>Convoy Information</strong> or Depot Controls.}
+</p>
+<p>
+- <em>Destination:</em> The next <a href="station.txt">Stop</a> or waypoint in the Convoy's <a href="schedule.txt">Schedule</a>.<br>
+A green-progress-bar indicates progress by Convoy to next destination.
+</p>
+<p>
+- <em>Serves line:</em> indicates any <a href="linemanagement.txt">Line</a> assigned to Convoy.
+</p>
+<p>
+- <em>mini-view</em> shows Convoy.<br>
+Click on mini-view to centre game-view on Convoy.
+</p>
+<p>
+Click on buttons in <strong>Convoy Information</strong> to open controls or select options:
+</p>
+<p>
+<a href="schedule.txt"><em>Schedule:</em></a> opens controls to change the route and minimum quantity of goods and passengers required by Convoy to proceed.
+</p>
+<p>
+<em>go to depot:</em> sends Convoy to nearest appropriate <a href="depot.txt">depot</a>. Any items being carried are lost, though income is received for transportation to depot.<br>
+In the depot the Convoy keeps its <a href="schedule.txt">Schedule</a> and assigned <a href="linemanagement.txt">Line</a>.
+</p>
+<p>
+<em>follow me:</em> button when indented moves game-view with Convoy.<br>
+To deselect option, click on button again or left-click on <a href="map.txt">Map</a>.
+</p>
+<p>
+<em>Chart:</em> click option-button to toggle graph (button is indentented when graph is visible) in <strong>Convoy Information</strong>.<br>
+The graph shows statistics for the last 12 months (x-axis) when a graph-option is selected.<br>
+Click on graph-option-button to see information on graph (button is indented when option selected).<br>
+Colours of lines on graph correspond to colours of graph-option-buttons:<br>
+- <em>Free Capacity</em> indicates unused space on Convoy.<br>
+- <em>Travel?ed</em> indicates number of goods, passengers and mail transported.<br>
+- <em>Proceeds</em> indicates income generated by transportation.<br>
+- <em>Operation Costs</em> indicates costs incurred by Convoy when in transit.<br>
+- <em>Profit</em> indicates profit received from transportation (Proceeds less Operation Costs).
+</p>
+<p>
+<em>Details</em> opens <a href="convoidetail.txt">Convoy Details</a> which contains more information and option to sell Convoy.
+</p>
+<p>
+<em>Sort Passengers/freight by:</em> lists items currently carried by Convoy.<br>
+Information shown includes quantity carried and capacity of Convoy, type of item, final destination and first transit <a href="station.txt">Stop</a>.<br>
+Option-button (changes name with selection) sorts of items carried in groups of passengers, mail and goods:<br>
+ - <em>destination:</em> sorts items carried, alphanumerically within ASCII-code order (capital letters before lower case letters), by assigned name of final destination Stop.<br>
+ - <em>via (detail):</em> sorts items carried, alphanumerically within ASCII-code order (capital letters before lower case letters), by assigned name of first transfer Stop.<br>
+ - <em>via (amount):</em> sorts items carried by quantity headed to first transfer Stop.<br>
+ - <em>amount:</em> sorts items carried by quantity in descending order.
 </p>
diff --git a/simutrans/text/en/curiositylist_filter.txt b/simutrans/text/en/curiositylist_filter.txt
index 1d90d50..cc81230 100644
--- a/simutrans/text/en/curiositylist_filter.txt
+++ b/simutrans/text/en/curiositylist_filter.txt
@@ -1,50 +1,50 @@
-<title>Attraction List Help</title>
-
-<h1><strong>Attraction List</strong></h1>
-
-<p>
-<strong>Attraction List</strong> has information about all tourist attractions that are both a destination and an origin for passengers and mail.
-</p>
-<p>
-To open <strong>Attraction List</strong>: click on attraction-list-tool in <a href="list.txt">List Management</a>.<br>
-{Tips: If items in list are only partially visible, then <a href="mouse.txt">re-size</a> <strong>Attraction List</strong> or scroll list using slider-bar.}
-</p>
-<p>
-<em>Sorted by:</em> has options to determine the order of tourist attractions shown.<br>
-Click on buttons to cycle through options (changes name of option-button):
-</p>
-<p>
-- <em>Name</em> orders alphabetically by name.<br>
-- <em>Passenger level</em> orders by relative popularity as a destination for passengers and mail.
-</p>
-<p>
-- <em>ascending</em> / <em>descending</em> reverses order of list.
-</p>
-<p>
-Click on a item listed in<strong>Attraction List</strong>to see more information about that tourist attraction.<br>
-{Tips: click on picture of tourist attraction in more information to move game-view to that attraction.}
-</p>
-<p>
-Items listed for each tourist attraction include:
-</p>
-<p>
-<em>status-colour-bar</em> colours indicate the rating of the attraction:<br>
-- <em>yellow:</em>does not fall in the catchment area of a <a href="station.txt">Stop</a>.<br>
-- <em>green:</em> has associated Stop(s) for passengers.<br>
-- <em>blue:</em> has associated Stop(s) for mail.<br>
-- <em>turquoise:</em> has associated Stop(s) for passengers and mail.<br>
-- <em>orange:</em> an associated Stop is overcrowded.<br>
-- <em>red:</em> all associated Stops are overcrowded.
-</p>
-<p>
-<em>building-graphic</em> indicates if it is a <a href="citywindow.txt">city</a> attraction.
-</p>
-<p>
-<em>name</em> of the tourist attraction.
-</p>
-<p>
-<em>passenger level</em> in brackets is a value that indicates the relative popularity as a destination for passengers and mail.
-</p>
-<p>
-{Tips: For provision of an optimum service the whole tourist attraction must fall within the catchment area of either one or several Stops.}
+<title>Attraction List Help</title>
+
+<h1><strong>Attraction List</strong></h1>
+
+<p>
+<strong>Attraction List</strong> has information about all tourist attractions that are both a destination and an origin for passengers and mail.
+</p>
+<p>
+To open <strong>Attraction List</strong>: click on attraction-list-tool in <a href="list.txt">List Management</a>.<br>
+{Tips: If items in list are only partially visible, then <a href="mouse.txt">re-size</a> <strong>Attraction List</strong> or scroll list using slider-bar.}
+</p>
+<p>
+<em>Sorted by:</em> has options to determine the order of tourist attractions shown.<br>
+Click on buttons to cycle through options (changes name of option-button):
+</p>
+<p>
+- <em>Name</em> orders alphabetically by name.<br>
+- <em>Passenger level</em> orders by relative popularity as a destination for passengers and mail.
+</p>
+<p>
+- <em>ascending</em> / <em>descending</em> reverses order of list.
+</p>
+<p>
+Click on a item listed in<strong>Attraction List</strong>to see more information about that tourist attraction.<br>
+{Tips: click on picture of tourist attraction in more information to move game-view to that attraction.}
+</p>
+<p>
+Items listed for each tourist attraction include:
+</p>
+<p>
+<em>status-colour-bar</em> colours indicate the rating of the attraction:<br>
+- <em>yellow:</em>does not fall in the catchment area of a <a href="station.txt">Stop</a>.<br>
+- <em>green:</em> has associated Stop(s) for passengers.<br>
+- <em>blue:</em> has associated Stop(s) for mail.<br>
+- <em>turquoise:</em> has associated Stop(s) for passengers and mail.<br>
+- <em>orange:</em> an associated Stop is overcrowded.<br>
+- <em>red:</em> all associated Stops are overcrowded.
+</p>
+<p>
+<em>building-graphic</em> indicates if it is a <a href="citywindow.txt">city</a> attraction.
+</p>
+<p>
+<em>name</em> of the tourist attraction.
+</p>
+<p>
+<em>passenger level</em> in brackets is a value that indicates the relative popularity as a destination for passengers and mail.
+</p>
+<p>
+{Tips: For provision of an optimum service the whole tourist attraction must fall within the catchment area of either one or several Stops.}
 </p>
diff --git a/simutrans/text/en/depot.txt b/simutrans/text/en/depot.txt
index e71af1e..16826d3 100644
--- a/simutrans/text/en/depot.txt
+++ b/simutrans/text/en/depot.txt
@@ -1,103 +1,103 @@
-<title>Depot Controls Help</title>
-
-<h1><strong>Depot Controls</strong></h1>
-
-<p>
-Depots are used to purchase and manage vehicles. Different types of transport have their own depot. Depots only show electric vehicle-units if on electric tracks.<br>
-If playing with <a href="new_world.txt">timeline</a>, then as time passes in Simutrans more vehicle-units may appear.
-</p>
-<p>
-Tools for the construction of different depots are available from the construction toolbar for the type of transport: <a href="railtools.txt">Train Depot</a>; <a href="monorailtools.txt">Monorail Depot</a>; <a href="tramtools.txt">Tram Depot</a>; <a href="roadtools.txt">Road Depot</a>; <a href="shiptools.txt">Ship Depot</a>
-; and <a href="airtools.txt">Aircraft Hangar</a>.
-</p>
-<p>
-Click on a depot in game-view with the <a href="inspection_tool.txt">Inspection Tool</a> to open <strong>Depot Controls</strong> that give information about and allow the purchase and management of <a href="convoiinfo.txt">Convoys</a> (an operational vehicle or combination of vehicle-units).<br>
-The titlebar of <strong>Depot Controls</strong> indicates which type of vehicle transport the depot serves.
-</p>
-<p>
-<strong>Depot Controls</strong> can be <a href="mouse.txt">re-sized</a> (click on down-arrow on titlebar of controls to return to original size).<br>
-Click on left/right-arrows on titlebar to cycle through depots of the same transport type (centres game-view on depot).
-</p>
-<p>
-At the top of <strong>Depot Controls</strong> the number of <a href="convoiinfo.txt">Convoys</a> in depot, Convoy name and <a href="linemanagement.txt">Line</a> is shown.
-</p>
-<p>
-<a href="convoiinfo.txt"><em>Convoy</em></a> <em>Name:</em> Click on left/right-arrow-buttons by Convoy Name to cycle through Convoys in depot.<br>
-To change Convoy Name: click on convoy-name-box and type new name (by default this is make of first vehicle-unit purchased or assembled for a new Convoy).
-</p>
-<p>
-<a href="linemanagement.txt"><em>Line</em></a> <em>Name:</em> Click on left/right-arrow buttons by name to select Lines for transport type of depot or click on line-name-box to open a drop-down-list of Lines (click on Line in drop-down-list to select).<br>
-To change Line Name: click on line-name-box and type new name. (by default this is assigned number when Line is created).
-</p>
-<p>
-<em>convoy-graphic</em> Below the Convoy and Line name-boxes, a graphic of any selected Convoy is shown.<br>
-Move mouse over a vehicle-unit-graphic in the selected Convoy to see details about the vehicle-unit (shown at bottom of <strong>Depot Controls</strong>).<br>
-Click on a vehicle-unit in the convoy-graphic to remove it from the selected Convoy and store it in the depot.
-</p>
-<p>
-Below the graphic the number of vehicle-units in the selected Convoy, length of tiles of the Convoy (all vehicle-units must fit into an appropriate <a href="station.txt"><em>Stop</em> to pick-up and drop-off goods and passengers), and assigned Line are shown.
-</p>
-<p>
-Option-buttons (click to use) for <strong>Depot Controls</strong> include:
-</p>
-<p>
-<em>Start:</em> sends the selected <a href="convoiinfo.txt">Convoy</a> out of the depot if a route can be found.
-</p>
-<p>
-<a href="schedule.txt"><em>Schedule:</em></a> opens controls to change the route and quantity of items that a <a href="convoiinfo.txt">Convoy</a> will wait for at a <a href="station.txt">Stop</a>.
-</p>
-<p>
-<em>Disassemble:</em> puts the vehicle unit(s) in selected <a href="convoiinfo.txt">Convoy</a> into storage.
-</p>
-<p>
-<em>Sell:</em> sells the current <a href="convoiinfo.txt">Convoy</a>, account balance is credited with <em>Resale Value</em>.
-</p>
-<p>
-<a href="linemanagement.txt"><em>New Line:</em></a> opens controls to define a <a href="schedule.txt">Schedule</a> (a route and minimum quantity of items that a Convoy will wait for at a Stop), which may be used for multiple <a href="convoiinfo.txt">Convoys</a>.
-</p>
-<p>
-<em>Apply Line:</em> assigns <a href="linemanagement.txt">Line</a> displayed in line-name-box at top of <strong>Depot Controls</strong> to selected <a href="convoiinfo.txt">Convoy</a>.
-</p>
-<p>
-<a href="linemanagement.txt"><em>Update Line:</em></a> opens controls to change the <a href="schedule.txt">Schedule</a> (a route and minimum quantity of items that a Convoy will wait for at a Stop) of selected Line.
-</p>
-<p>
-<em>Copy</em> <a href="convoiinfo.txt"><em>Convoy:</em></a> purchases and assembles another Convoy with the same compostion, <a href="schedule.txt">Schedule</a> and <a href="linemanagement.txt">Line</a> as the selected Convoy.
-</p>
-<p>
-Below option-buttons graphics of all vehicle-units available for purchase are shown.<br>
-<em>vehicle-unit-graphics:</em> vehicle units are split into categories, which can be viewed by clicking on the index-tabs. Index-tabs divide vehicle-units into following groups: vehicle-units for passengers and mail, other powered (motorised) vehicle-units, and other trailers/carriages.<br>
-A white number over vehicle-unit-graphic indicates quantity stored if a Convoy has been disassembled. Stored vehicle-units can be sold or are used when a new Convoy is assembled.
-</p>
-<p>
-Move mouse over a vehicle-unit-graphic to see information about vehicle:<br>
-<em>Name:</em> and in brackets type of power used for motorised vehicles.<br>
-<em>Cost:</em> purchase price and in brackets operation cost per kilometre<br>
-<em>Power:</em> engine power and maximum speed for motorised vehicle-units.<br>
-<em>Capacity:</em> quantity and <a href="goods_filter.txt">goods category</a> that can be carried by vehicle-unit.<br>
-<em>Weight:</em> in tonnes.<br>
-<em>top speed:</em> of non-motorised vehicle-units.<br>
-<em>Intro. date:</em> date when vehicle unit becomes available if <a href="new_world.txt">timeline</a> is on.<br>
-<em>Retire date:</em> date vehicle-unit becomes obsolete.<br>
-<em>Constructed by:</em> person who created vehicle-unit for Simutrans.<br>
-<em>Gear:</em> ? power ratio.<br>
-<em>Resale Value:</em> amount of money received if a previously purchased vehicle-unit is sold.
-</p>
-<p>
-Click on a vehicle-unit-graphic under index-tabs to either purchase or sell it depending on setting of vehicles-option-button which is found at bottom-left of <strong>Depot Controls</strong>. The vehicles-option-button cycles through three options:<br>
-<em>Append:</em> purchases a vehicle-unit and adds it to a selected Convoy, or creates a new Convoy.<br>
-<em>Put in front:</em> purchases a vehicle-unit and adds it to front of current Convoy, or creates a new Convoy.<br>
-<em>Sell Mode:</em> sells stored vehicle units.<br>
-</p>
-<p>
-<em>color bars</em> under the vehicle-unit-graphics indicate which vehicle-units and the order vehicle-units can be attached to each other, to form an operational <a href="convoiinfo.txt">Convoy</a> (colour bars may change with different settings of the vehicle-option button).<br>
-Colours indicate:<br>
-- <em>green:</em> vehicle-unit can be used.<br>
-- <em>red:</em> vehicle-unit can not be used<br>
-- <em>yellow</em> another vehicle-unit must be placed in front or behind to make an operational Convoy.<br>
-- <em>blue:</em> vehicle-unit can be used but is obsolete.<br>
-{Tips: a Convoy is operational, if it shows green-bars for all vehicle-units; if a part-yellow-bar remains then a missing component vehicle-unit is required.}
-</p>
-<p>
-<em>Show obsolete:</em> if playing with <a href="new_world.txt">timeline</a>, square-button when indented (click to use) displays vehicle-units that have been retired.
+<title>Depot Controls Help</title>
+
+<h1><strong>Depot Controls</strong></h1>
+
+<p>
+Depots are used to purchase and manage vehicles. Different types of transport have their own depot. Depots only show electric vehicle-units if on electric tracks.<br>
+If playing with <a href="new_world.txt">timeline</a>, then as time passes in Simutrans more vehicle-units may appear.
+</p>
+<p>
+Tools for the construction of different depots are available from the construction toolbar for the type of transport: <a href="railtools.txt">Train Depot</a>; <a href="monorailtools.txt">Monorail Depot</a>; <a href="tramtools.txt">Tram Depot</a>; <a href="roadtools.txt">Road Depot</a>; <a href="shiptools.txt">Ship Depot</a>
+; and <a href="airtools.txt">Aircraft Hangar</a>.
+</p>
+<p>
+Click on a depot in game-view with the <a href="inspection_tool.txt">Inspection Tool</a> to open <strong>Depot Controls</strong> that give information about and allow the purchase and management of <a href="convoiinfo.txt">Convoys</a> (an operational vehicle or combination of vehicle-units).<br>
+The titlebar of <strong>Depot Controls</strong> indicates which type of vehicle transport the depot serves.
+</p>
+<p>
+<strong>Depot Controls</strong> can be <a href="mouse.txt">re-sized</a> (click on down-arrow on titlebar of controls to return to original size).<br>
+Click on left/right-arrows on titlebar to cycle through depots of the same transport type (centres game-view on depot).
+</p>
+<p>
+At the top of <strong>Depot Controls</strong> the number of <a href="convoiinfo.txt">Convoys</a> in depot, Convoy name and <a href="linemanagement.txt">Line</a> is shown.
+</p>
+<p>
+<a href="convoiinfo.txt"><em>Convoy</em></a> <em>Name:</em> Click on left/right-arrow-buttons by Convoy Name to cycle through Convoys in depot.<br>
+To change Convoy Name: click on convoy-name-box and type new name (by default this is make of first vehicle-unit purchased or assembled for a new Convoy).
+</p>
+<p>
+<a href="linemanagement.txt"><em>Line</em></a> <em>Name:</em> Click on left/right-arrow buttons by name to select Lines for transport type of depot or click on line-name-box to open a drop-down-list of Lines (click on Line in drop-down-list to select).<br>
+To change Line Name: click on line-name-box and type new name. (by default this is assigned number when Line is created).
+</p>
+<p>
+<em>convoy-graphic</em> Below the Convoy and Line name-boxes, a graphic of any selected Convoy is shown.<br>
+Move mouse over a vehicle-unit-graphic in the selected Convoy to see details about the vehicle-unit (shown at bottom of <strong>Depot Controls</strong>).<br>
+Click on a vehicle-unit in the convoy-graphic to remove it from the selected Convoy and store it in the depot.
+</p>
+<p>
+Below the graphic the number of vehicle-units in the selected Convoy, length of tiles of the Convoy (all vehicle-units must fit into an appropriate <a href="station.txt"><em>Stop</em> to pick-up and drop-off goods and passengers), and assigned Line are shown.
+</p>
+<p>
+Option-buttons (click to use) for <strong>Depot Controls</strong> include:
+</p>
+<p>
+<em>Start:</em> sends the selected <a href="convoiinfo.txt">Convoy</a> out of the depot if a route can be found.
+</p>
+<p>
+<a href="schedule.txt"><em>Schedule:</em></a> opens controls to change the route and quantity of items that a <a href="convoiinfo.txt">Convoy</a> will wait for at a <a href="station.txt">Stop</a>.
+</p>
+<p>
+<em>Disassemble:</em> puts the vehicle unit(s) in selected <a href="convoiinfo.txt">Convoy</a> into storage.
+</p>
+<p>
+<em>Sell:</em> sells the current <a href="convoiinfo.txt">Convoy</a>, account balance is credited with <em>Resale Value</em>.
+</p>
+<p>
+<a href="linemanagement.txt"><em>New Line:</em></a> opens controls to define a <a href="schedule.txt">Schedule</a> (a route and minimum quantity of items that a Convoy will wait for at a Stop), which may be used for multiple <a href="convoiinfo.txt">Convoys</a>.
+</p>
+<p>
+<em>Apply Line:</em> assigns <a href="linemanagement.txt">Line</a> displayed in line-name-box at top of <strong>Depot Controls</strong> to selected <a href="convoiinfo.txt">Convoy</a>.
+</p>
+<p>
+<a href="linemanagement.txt"><em>Update Line:</em></a> opens controls to change the <a href="schedule.txt">Schedule</a> (a route and minimum quantity of items that a Convoy will wait for at a Stop) of selected Line.
+</p>
+<p>
+<em>Copy</em> <a href="convoiinfo.txt"><em>Convoy:</em></a> purchases and assembles another Convoy with the same compostion, <a href="schedule.txt">Schedule</a> and <a href="linemanagement.txt">Line</a> as the selected Convoy.
+</p>
+<p>
+Below option-buttons graphics of all vehicle-units available for purchase are shown.<br>
+<em>vehicle-unit-graphics:</em> vehicle units are split into categories, which can be viewed by clicking on the index-tabs. Index-tabs divide vehicle-units into following groups: vehicle-units for passengers and mail, other powered (motorised) vehicle-units, and other trailers/carriages.<br>
+A white number over vehicle-unit-graphic indicates quantity stored if a Convoy has been disassembled. Stored vehicle-units can be sold or are used when a new Convoy is assembled.
+</p>
+<p>
+Move mouse over a vehicle-unit-graphic to see information about vehicle:<br>
+<em>Name:</em> and in brackets type of power used for motorised vehicles.<br>
+<em>Cost:</em> purchase price and in brackets operation cost per kilometre<br>
+<em>Power:</em> engine power and maximum speed for motorised vehicle-units.<br>
+<em>Capacity:</em> quantity and <a href="goods_filter.txt">goods category</a> that can be carried by vehicle-unit.<br>
+<em>Weight:</em> in tonnes.<br>
+<em>top speed:</em> of non-motorised vehicle-units.<br>
+<em>Intro. date:</em> date when vehicle unit becomes available if <a href="new_world.txt">timeline</a> is on.<br>
+<em>Retire date:</em> date vehicle-unit becomes obsolete.<br>
+<em>Constructed by:</em> person who created vehicle-unit for Simutrans.<br>
+<em>Gear:</em> ? power ratio.<br>
+<em>Resale Value:</em> amount of money received if a previously purchased vehicle-unit is sold.
+</p>
+<p>
+Click on a vehicle-unit-graphic under index-tabs to either purchase or sell it depending on setting of vehicles-option-button which is found at bottom-left of <strong>Depot Controls</strong>. The vehicles-option-button cycles through three options:<br>
+<em>Append:</em> purchases a vehicle-unit and adds it to a selected Convoy, or creates a new Convoy.<br>
+<em>Put in front:</em> purchases a vehicle-unit and adds it to front of current Convoy, or creates a new Convoy.<br>
+<em>Sell Mode:</em> sells stored vehicle units.<br>
+</p>
+<p>
+<em>color bars</em> under the vehicle-unit-graphics indicate which vehicle-units and the order vehicle-units can be attached to each other, to form an operational <a href="convoiinfo.txt">Convoy</a> (colour bars may change with different settings of the vehicle-option button).<br>
+Colours indicate:<br>
+- <em>green:</em> vehicle-unit can be used.<br>
+- <em>red:</em> vehicle-unit can not be used<br>
+- <em>yellow</em> another vehicle-unit must be placed in front or behind to make an operational Convoy.<br>
+- <em>blue:</em> vehicle-unit can be used but is obsolete.<br>
+{Tips: a Convoy is operational, if it shows green-bars for all vehicle-units; if a part-yellow-bar remains then a missing component vehicle-unit is required.}
+</p>
+<p>
+<em>Show obsolete:</em> if playing with <a href="new_world.txt">timeline</a>, square-button when indented (click to use) displays vehicle-units that have been retired.
 </p>
diff --git a/simutrans/text/en/display.txt b/simutrans/text/en/display.txt
index 8e9012b..4f0e33d 100644
--- a/simutrans/text/en/display.txt
+++ b/simutrans/text/en/display.txt
@@ -1,62 +1,62 @@
-<title>Display Settings Help</title>
-
-<h1><strong>Display Settings</strong></h1>
-
-<p>
-<strong>Display Settings</strong>has controls for how the game appears; & provides information on computer performance.
-</p>
-<p>
-Click on Display-button in <a href="options.txt">Game Options</a> to open <strong>Display Settings</strong>.
-</p>
-<p>
-Click on square-buttons to select options (button is indented when option is selected), or use <a href="mouse.txt">arrow-buttons</a> to adjust settings:
-</p>
-<p>
-<em>day and night change:</em> view of night-time in game.
-</p>
-<p>
-<em>
-Brightness:</em>sets how light/dark view of game appears; lower number to darken; too low or high values produce problems; use <a href="keys.txt">[+]</a> to increase value over 0.
-</p>
-<p>
-<em>Scroll Inverse:</em> reverses direction of scroll for game-view in <a href="window.txt">?Game Window</a>.
-</p>
-<p>
-<em>
-Scroll Speed:</em> sets speed of scroll for game-view in Game Window.
-</p>
-<p>
-<em>Pedestrians in towns:</em> view of pedestrians that appear in <a href="citywindow.txt">urban areas</a>.
-</p>
-<p>
-<em>Pedestrians at stops:</em> view of pedestrians that appear when a vehicle arrives at a <a href="station.txt">Stop</a>.
-</p>
-<p>
-<em>Traffic density:</em> sets number of private cars in <a href="citywindow.txt">urban areas</a>.<br>
-Number of new private cars that appear as urban areas grow is dependent on size of urban area and traffic density. Higher values create more private traffic, 0 generates none.
-</p>
-<p>
-{Tips: More options and default values for when Simutrans starts can be changed in simuconf.tab}.
-</p>
-<br>
-<p>
-<strong>Display Information:</strong>
-</p>
-<p>
-Below these settings, information is shown on computer performance when running Simutrans.<br>
-If numbers (usually white) are red or ?yellow you may need to change your settings.<br>
-Changes in rate that time passes in game, <a href="window.txt">T</a>, (using Fast Forward  >> icon at top of game-view, or [,]/ [.]) may change number colour.
-</p>
-<p>
-<em>Frame Time:</em> ?First number is intended time between frames; second number is actual time between frames.
-</p>
-<p>
-<em>Idle:</em> When above 0, the computer has capacity to run other software.
-</p>
-<p>
-<em>
-FPS:</em> Higher values mean vehicles appear to move more smoothly. If number remains red, the computer is too slow for current settings (?try reducing the size of the game-view window).
-</p>
-<p>
-<em>Simloops:</em> If number remains red, the computer is too slow for current settings - try a smaller map with fewer urban areas.
+<title>Display Settings Help</title>
+
+<h1><strong>Display Settings</strong></h1>
+
+<p>
+<strong>Display Settings</strong>has controls for how the game appears; & provides information on computer performance.
+</p>
+<p>
+Click on Display-button in <a href="options.txt">Game Options</a> to open <strong>Display Settings</strong>.
+</p>
+<p>
+Click on square-buttons to select options (button is indented when option is selected), or use <a href="mouse.txt">arrow-buttons</a> to adjust settings:
+</p>
+<p>
+<em>day and night change:</em> view of night-time in game.
+</p>
+<p>
+<em>
+Brightness:</em>sets how light/dark view of game appears; lower number to darken; too low or high values produce problems; use <a href="keys.txt">[+]</a> to increase value over 0.
+</p>
+<p>
+<em>Scroll Inverse:</em> reverses direction of scroll for game-view in <a href="window.txt">?Game Window</a>.
+</p>
+<p>
+<em>
+Scroll Speed:</em> sets speed of scroll for game-view in Game Window.
+</p>
+<p>
+<em>Pedestrians in towns:</em> view of pedestrians that appear in <a href="citywindow.txt">urban areas</a>.
+</p>
+<p>
+<em>Pedestrians at stops:</em> view of pedestrians that appear when a vehicle arrives at a <a href="station.txt">Stop</a>.
+</p>
+<p>
+<em>Traffic density:</em> sets number of private cars in <a href="citywindow.txt">urban areas</a>.<br>
+Number of new private cars that appear as urban areas grow is dependent on size of urban area and traffic density. Higher values create more private traffic, 0 generates none.
+</p>
+<p>
+{Tips: More options and default values for when Simutrans starts can be changed in simuconf.tab}.
+</p>
+<br>
+<p>
+<strong>Display Information:</strong>
+</p>
+<p>
+Below these settings, information is shown on computer performance when running Simutrans.<br>
+If numbers (usually white) are red or ?yellow you may need to change your settings.<br>
+Changes in rate that time passes in game, <a href="window.txt">T</a>, (using Fast Forward  >> icon at top of game-view, or [,]/ [.]) may change number colour.
+</p>
+<p>
+<em>Frame Time:</em> ?First number is intended time between frames; second number is actual time between frames.
+</p>
+<p>
+<em>Idle:</em> When above 0, the computer has capacity to run other software.
+</p>
+<p>
+<em>
+FPS:</em> Higher values mean vehicles appear to move more smoothly. If number remains red, the computer is too slow for current settings (?try reducing the size of the game-view window).
+</p>
+<p>
+<em>Simloops:</em> If number remains red, the computer is too slow for current settings - try a smaller map with fewer urban areas.
 </p>
diff --git a/simutrans/text/en/edittools.txt b/simutrans/text/en/edittools.txt
index 9f03ce4..2f90c57 100644
--- a/simutrans/text/en/edittools.txt
+++ b/simutrans/text/en/edittools.txt
@@ -1,52 +1,52 @@
-<title>?Game (map) edit tools Help</title>
-
-<h1><strong>?Game (map) edit tools</strong></h1>
-
-<p>
-<strong>Game edit tools</strong> allow further customisation of the current game world.<br>
-Tools can: change populations of urban areas; build urban roads, attractions, power plants & industry; remove option to operate as another player company; and also advance the game by one year.
-</p>
-<p>
-The toolbar opens when option to operate as public service player is selected from either <a href="players.txt">Players</a> or <a href="special.txt">P+</a> in Special Contruction Tools (or by keypress <a href="keys.txt">[P]</a>). The toolbar remains open even if option to change player is used again.<br>
-Hover mouse-cursor over tool-option (after opening or clicking on toolbar) to see name & more information for some tool-options.
-</p>
-<p>
-Tool-options include, from left to right:
-</p>
-<p>
-<em>Grow city:</em> tool increases the population of an <a href="citywindow.txt">urban area</a> by 100, constructing new roads and buildings if necessary.<br>
-To use: click on tool to select, changes cursor to an red-up-arrow, then click on urban area.
-</p>
-<p>
-<em>Shrink city:</em> tool reduces the population of an <a href="citywindow.txt">urban area</a> by 100. Urban areas will only continue to grow if homeless and unemployment levels rise.<br>
-To use: click on tool to select, changes cursor to an red-down-arrow, then click on urban area.
-</p>
-<p>
-<em>City road:</em>tool builds an urban road between two points, as the public service player that every player may use. City-roads may not be built on areas occupied by other buildings, & may not find a path across rough terrain, water and obstructions. City-road built between points, may use existing road in its path.<br>
-Hover mouse-cursor over tool-option (after opening or clicking on toolbar) to see name, construction and maintenance cost incurred by public service player and maximum speed limit.
-To build a City-road: click on tool to select (changes cursor to city-road), then click on game-view for start-point of road (shows a bulldozer in game-view and map co-ordinates on right of bottom-bar under game-view), & finally click on terrain for end-point for road.<br>
-{Tips: Different types of roads may connect. Use bridges & tunnels to connect roads across rough terrain, or to avoid obstructions. Use <a href="slopetools.txt">?Landscape tools</a> to change terrain, to enable paths for road. Use Destroy/Remove to remove city-road & some obstructions. Use <a href="keys.txt">[Ctrl]</a> at same time for extra functions.}
-</p>
-<p>
-<em>Build a random attraction:</em> tool constructs an attraction that passengers will want to visit. Different attractions also generate diffferent amounts of passengers and mail. The type of attraction built is random and only appears if suitable space free of obstructions is found.<br>
-To build an attraction: click on tool to select (changes cursor to red-drop-in-yellow-circle-icon), then click on required position on terrain in game-view.<br>
-{Tips: Use Destroy/Remove as the public service player to remove attractions. Use Destroy/Remove and/or Landscape tools to create suitable places for attractions.}
-</p>
-<p>
-<em>Build a new power station:</em> tool constructs a power station (and possible suppliers). The type of power plant built is random and only appears if suitable space free of obstructions is found.<br>
-To build a power plant: click on tool or press [I] to select (changes cursor to red-drop-in-yellow-circle-icon), then click on required position on terrain in game-view.<br>
-{Tips: Use Destroy/Remove as the public service player to remove power stations. Use Destroy/Remove and/or Landscape tools to create suitable places for power stations.}
-</p>
-<p>
-<em>Build a new market in the nearest city:</em> tool constructs an end-consumer of goods in an <a href="citywindow.txt">urban area</a> (and possible suppliers not necessarily in the urban area). The type of industry built is random and only appears if suitable space free of obstructions is found.<br>
-To use: click on tool to select (changes cursor to red-drop-in-yellow-circle-icon), then click in game-view to build consumer in nearest urban area.<br>
-{Tips: Use Destroy/Remove as the public service player to remove power stations. Use Destroy/Remove and/or ?Landscape tools to create suitable places for industry.}
-</p>
-<p>
-<em>?Disallow further player change:</em> tool removes option to operate as other <a href="players.txt">player</a> companies and open<strong>Game (map) edit tools</strong>.<br>
-To use: click on tool to select (changes cursor to a padlock), then click anywhere in game-view, no confirmation is required.
-</p>
-<p>
-<em>Step time-line by a year:</em> advances date in game by one year. If playing with <a href="new_world.txt">timeline</a>, as time passes more transport and construction options may become available and slower vehicles are not as profitable (as income is calculated by average speed of available transport) .<br>
-To use: click on tool, no further confirmation is required (date changes on left of bottom-bar under game-view).
+<title>?Game (map) edit tools Help</title>
+
+<h1><strong>?Game (map) edit tools</strong></h1>
+
+<p>
+<strong>Game edit tools</strong> allow further customisation of the current game world.<br>
+Tools can: change populations of urban areas; build urban roads, attractions, power plants & industry; remove option to operate as another player company; and also advance the game by one year.
+</p>
+<p>
+The toolbar opens when option to operate as public service player is selected from either <a href="players.txt">Players</a> or <a href="special.txt">P+</a> in Special Contruction Tools (or by keypress <a href="keys.txt">[P]</a>). The toolbar remains open even if option to change player is used again.<br>
+Hover mouse-cursor over tool-option (after opening or clicking on toolbar) to see name & more information for some tool-options.
+</p>
+<p>
+Tool-options include, from left to right:
+</p>
+<p>
+<em>Grow city:</em> tool increases the population of an <a href="citywindow.txt">urban area</a> by 100, constructing new roads and buildings if necessary.<br>
+To use: click on tool to select, changes cursor to an red-up-arrow, then click on urban area.
+</p>
+<p>
+<em>Shrink city:</em> tool reduces the population of an <a href="citywindow.txt">urban area</a> by 100. Urban areas will only continue to grow if homeless and unemployment levels rise.<br>
+To use: click on tool to select, changes cursor to an red-down-arrow, then click on urban area.
+</p>
+<p>
+<em>City road:</em>tool builds an urban road between two points, as the public service player that every player may use. City-roads may not be built on areas occupied by other buildings, & may not find a path across rough terrain, water and obstructions. City-road built between points, may use existing road in its path.<br>
+Hover mouse-cursor over tool-option (after opening or clicking on toolbar) to see name, construction and maintenance cost incurred by public service player and maximum speed limit.
+To build a City-road: click on tool to select (changes cursor to city-road), then click on game-view for start-point of road (shows a bulldozer in game-view and map co-ordinates on right of bottom-bar under game-view), & finally click on terrain for end-point for road.<br>
+{Tips: Different types of roads may connect. Use bridges & tunnels to connect roads across rough terrain, or to avoid obstructions. Use <a href="slopetools.txt">?Landscape tools</a> to change terrain, to enable paths for road. Use Destroy/Remove to remove city-road & some obstructions. Use <a href="keys.txt">[Ctrl]</a> at same time for extra functions.}
+</p>
+<p>
+<em>Build a random attraction:</em> tool constructs an attraction that passengers will want to visit. Different attractions also generate diffferent amounts of passengers and mail. The type of attraction built is random and only appears if suitable space free of obstructions is found.<br>
+To build an attraction: click on tool to select (changes cursor to red-drop-in-yellow-circle-icon), then click on required position on terrain in game-view.<br>
+{Tips: Use Destroy/Remove as the public service player to remove attractions. Use Destroy/Remove and/or Landscape tools to create suitable places for attractions.}
+</p>
+<p>
+<em>Build a new power station:</em> tool constructs a power station (and possible suppliers). The type of power plant built is random and only appears if suitable space free of obstructions is found.<br>
+To build a power plant: click on tool or press [I] to select (changes cursor to red-drop-in-yellow-circle-icon), then click on required position on terrain in game-view.<br>
+{Tips: Use Destroy/Remove as the public service player to remove power stations. Use Destroy/Remove and/or Landscape tools to create suitable places for power stations.}
+</p>
+<p>
+<em>Build a new market in the nearest city:</em> tool constructs an end-consumer of goods in an <a href="citywindow.txt">urban area</a> (and possible suppliers not necessarily in the urban area). The type of industry built is random and only appears if suitable space free of obstructions is found.<br>
+To use: click on tool to select (changes cursor to red-drop-in-yellow-circle-icon), then click in game-view to build consumer in nearest urban area.<br>
+{Tips: Use Destroy/Remove as the public service player to remove power stations. Use Destroy/Remove and/or ?Landscape tools to create suitable places for industry.}
+</p>
+<p>
+<em>?Disallow further player change:</em> tool removes option to operate as other <a href="players.txt">player</a> companies and open<strong>Game (map) edit tools</strong>.<br>
+To use: click on tool to select (changes cursor to a padlock), then click anywhere in game-view, no confirmation is required.
+</p>
+<p>
+<em>Step time-line by a year:</em> advances date in game by one year. If playing with <a href="new_world.txt">timeline</a>, as time passes more transport and construction options may become available and slower vehicles are not as profitable (as income is calculated by average speed of available transport) .<br>
+To use: click on tool, no further confirmation is required (date changes on left of bottom-bar under game-view).
 </p>
diff --git a/simutrans/text/en/factorylist_filter.txt b/simutrans/text/en/factorylist_filter.txt
index e3c95af..3004c68 100644
--- a/simutrans/text/en/factorylist_filter.txt
+++ b/simutrans/text/en/factorylist_filter.txt
@@ -1,49 +1,49 @@
-<title>?Industry/factory List Help</title>
-
-<h1><strong>?Industry/factory List</strong></h1>
-
-<p>
-<strong>?Industry/factory List</strong> shows information about all <a href="industry_info.txt">industry</a> (suppliers and consumers of goods) in the current game.
-</p>
-<p>
-To open <strong>?Industry/factory List</strong>: click on factory-list-tool in <a href="list.txt">List Management</a>.<br>
-{Tips: If items in list are only partially visible, then <a href="mouse.txt">re-size</a> <strong>Industry/factory List</strong> or scroll list using slider-bar.}
-</p>
-<p>
-<em>Sorted by:</em> has options to determine the order of Industry listed.<br>
-Click on buttons to cycle through options (changes name of option-button):
-</p>
-<p>
-- <em>factory name</em> orders alphabetically by name.<br>
-- <em>input</em> orders by input storage capacity.<br>
-- <em>output</em> orders by output storage capacity.<br>
-- <em>Production</em> orders Industry by production capability.<br>
-- <em>Rating</em> orders Industry by status-colour-bar (see below).<br>
-- <em>Power</em> orders Industry by electricity supplied.
-</p>
-<p>
-- <em>ascending</em> / <em>descending</em> reverses order of list.
-</p>
-<p>
-Click on a item listed in<strong>Factory List</strong>to see more <a href="industry_info.txt">information</a> about that Industry.
-<br>Items listed for each Industry include:
-</p>
-<p>
-<em>status-colour-bar</em> colours indicate operation of the Industry (also used in <a href="industry_info.txt">Industry Information</a>):<br>
-- <em>white:</em> does not require input.<br>
-- <em>yellow:</em> connected by transport, but Industry Supply Chain has poor supply.<br>
-- <em>green:</em> at optimum status.<br>
-- <em>orange:</em> operational but improvements possible.<br>
-- <em>red:</em> operational but part of Industry Supply chain has excess supply.
-</p>
-<p>
-<em>red-lightning-strike-icon</em> is shown if the Industry has electricity supplied through <a href="special.txt">transformer stations</a>.
-</p>
-<p><em>factory name:</em> name of the <a href="industry_info.txt">industry</a>.
-</p>
-<p>
-In brackets 3 values represent:<br>
-<em>current input:</em> amount of goods stored ready to be processed.<br>
-<em>current output:</em> amount of goods that are ready for transportation.<br>
-<em>total production:</em> production rate of the factory (maximum amount of goods produced per month/?day)
+<title>?Industry/factory List Help</title>
+
+<h1><strong>?Industry/factory List</strong></h1>
+
+<p>
+<strong>?Industry/factory List</strong> shows information about all <a href="industry_info.txt">industry</a> (suppliers and consumers of goods) in the current game.
+</p>
+<p>
+To open <strong>?Industry/factory List</strong>: click on factory-list-tool in <a href="list.txt">List Management</a>.<br>
+{Tips: If items in list are only partially visible, then <a href="mouse.txt">re-size</a> <strong>Industry/factory List</strong> or scroll list using slider-bar.}
+</p>
+<p>
+<em>Sorted by:</em> has options to determine the order of Industry listed.<br>
+Click on buttons to cycle through options (changes name of option-button):
+</p>
+<p>
+- <em>factory name</em> orders alphabetically by name.<br>
+- <em>input</em> orders by input storage capacity.<br>
+- <em>output</em> orders by output storage capacity.<br>
+- <em>Production</em> orders Industry by production capability.<br>
+- <em>Rating</em> orders Industry by status-colour-bar (see below).<br>
+- <em>Power</em> orders Industry by electricity supplied.
+</p>
+<p>
+- <em>ascending</em> / <em>descending</em> reverses order of list.
+</p>
+<p>
+Click on a item listed in<strong>Factory List</strong>to see more <a href="industry_info.txt">information</a> about that Industry.
+<br>Items listed for each Industry include:
+</p>
+<p>
+<em>status-colour-bar</em> colours indicate operation of the Industry (also used in <a href="industry_info.txt">Industry Information</a>):<br>
+- <em>white:</em> does not require input.<br>
+- <em>yellow:</em> connected by transport, but Industry Supply Chain has poor supply.<br>
+- <em>green:</em> at optimum status.<br>
+- <em>orange:</em> operational but improvements possible.<br>
+- <em>red:</em> operational but part of Industry Supply chain has excess supply.
+</p>
+<p>
+<em>red-lightning-strike-icon</em> is shown if the Industry has electricity supplied through <a href="special.txt">transformer stations</a>.
+</p>
+<p><em>factory name:</em> name of the <a href="industry_info.txt">industry</a>.
+</p>
+<p>
+In brackets 3 values represent:<br>
+<em>current input:</em> amount of goods stored ready to be processed.<br>
+<em>current output:</em> amount of goods that are ready for transportation.<br>
+<em>total production:</em> production rate of the factory (maximum amount of goods produced per month/?day)
 </p>
diff --git a/simutrans/text/en/finances.txt b/simutrans/text/en/finances.txt
index fc4272d..d9948ae 100644
--- a/simutrans/text/en/finances.txt
+++ b/simutrans/text/en/finances.txt
@@ -1,68 +1,68 @@
-<title>Finances Help</title>
-
-<h1><strong>Finances</strong></h1>
-
-<p>
-<strong>Finances</strong> provides an overview of the financial status of the player company.
-</p>
-<p>
-Click money-icon at top of game-view, or press <a href="keys.txt">[f]</a>, or click on player name in <a href="players.txt">Players</a>, to open <strong>Finances</strong>.
-</p>
-<p>
-Values (in Hajo Credits) are listed for present and previous calendar years.<br>
-<em>This Year:</em> current game calendar year.<br>
-<em>Last Year:</em> previous game calendar year.
-</p>
-<p>
-Annual values can also be seen in a graph for the last ten years, or monthly values for the last year.<br>
-Click on value name-button to toggle details on the graph: The y-axis is quantity, the x-axis is time.<br>
-Click on graph index-tab to change scale of x-axis:<br>
-<em>Years:</em> shows annual values for last ten game calendar years.<br>
-<em>Months:</em> shows monthly values for last 12 game months
-</p>
-<p>
-Values (click on name-button to view details on graph), include:
-</p>
-<p>
-<em>Proceeds</em> - total income from the transport of passengers, goods, mail and from <a href="special.txt">high power transmission</a>.
-</p>
-<p>
-<em>Operation Costs</em> - total cost incurred by all <a href="convoiinfo.txt">Convoys</a> when in transit.<br>
-{Tips: The operation cost per kilometer for vehicles can be seen in a <a href="depot.txt">depot</a> and from Convoy Information.}
-</p>
-<p>
-<em>Maintenance</em> - total cost incurred maintaining the transportation network.<br>
-{Tips: The cost per month for maintaining the network (<em>Maintenance (monthly)</em> shown on the right of <strong>Finances</strong>) is deducted at the end of the game calendar month.}
-</p>
-<p>
-<em>Operational Profit</em> - profit from transportation of goods, passengers and mail and high power transmission (Proceeds less Operation Costs and Maintenance).
-</p>
-<p>
-<em>New Vehicles</em> - expenditure on and income received from the purchase and sale of vehicles.
-</p>
-<p>
-<em>Construction site</em> - total cost incurred by construction of transport networks, landscaping, high power transmission lines, and using <a href="removal_tool.txt">Destroy/Remove</a> and other removal tools for ways (tracks, road, canals and airstrips).
-</p>
-<p>
-<em>Cash Flow</em> - total income less total expenditure (costs).
-</p>
-<p>
-<em>Account Balance</em> - the current cash available for construction or purchasing vehicles (also shown in the centre of bottom-bar under game-view.<br>
-{Tips: If human player is in the red (negative account balance) for three consecutive months, the player is bankrupt and the game is over}.
-</p>
-<p>
-<em>Assets</em> - the value of all company vehicles at the end of the last calendar month.<br>
-{Tips: each month the value of operational vehicles depreciate slightly, current selling value for vehicles can be seen in <a href="convoidetail.txt">Convoy Details</a> or when vehicle is in a depot.}
-</p>
-<p>
-<em>Net Wealth</em> - Account Balance plus Assets.
-</p>
-<p>
-<em>Margin</em> - is the ratio of Operational Profit to Proceeds.
-</p>
-<p>
-<em>Travel?led</em> - total number of goods, passengers and mail transported.
-</p>
-<p>
-{Tips: Some costs, starting balance and finances in game can be changed in simuconf.tab}
+<title>Finances Help</title>
+
+<h1><strong>Finances</strong></h1>
+
+<p>
+<strong>Finances</strong> provides an overview of the financial status of the player company.
+</p>
+<p>
+Click money-icon at top of game-view, or press <a href="keys.txt">[f]</a>, or click on player name in <a href="players.txt">Players</a>, to open <strong>Finances</strong>.
+</p>
+<p>
+Values (in Hajo Credits) are listed for present and previous calendar years.<br>
+<em>This Year:</em> current game calendar year.<br>
+<em>Last Year:</em> previous game calendar year.
+</p>
+<p>
+Annual values can also be seen in a graph for the last ten years, or monthly values for the last year.<br>
+Click on value name-button to toggle details on the graph: The y-axis is quantity, the x-axis is time.<br>
+Click on graph index-tab to change scale of x-axis:<br>
+<em>Years:</em> shows annual values for last ten game calendar years.<br>
+<em>Months:</em> shows monthly values for last 12 game months
+</p>
+<p>
+Values (click on name-button to view details on graph), include:
+</p>
+<p>
+<em>Proceeds</em> - total income from the transport of passengers, goods, mail and from <a href="special.txt">high power transmission</a>.
+</p>
+<p>
+<em>Operation Costs</em> - total cost incurred by all <a href="convoiinfo.txt">Convoys</a> when in transit.<br>
+{Tips: The operation cost per kilometer for vehicles can be seen in a <a href="depot.txt">depot</a> and from Convoy Information.}
+</p>
+<p>
+<em>Maintenance</em> - total cost incurred maintaining the transportation network.<br>
+{Tips: The cost per month for maintaining the network (<em>Maintenance (monthly)</em> shown on the right of <strong>Finances</strong>) is deducted at the end of the game calendar month.}
+</p>
+<p>
+<em>Operational Profit</em> - profit from transportation of goods, passengers and mail and high power transmission (Proceeds less Operation Costs and Maintenance).
+</p>
+<p>
+<em>New Vehicles</em> - expenditure on and income received from the purchase and sale of vehicles.
+</p>
+<p>
+<em>Construction site</em> - total cost incurred by construction of transport networks, landscaping, high power transmission lines, and using <a href="removal_tool.txt">Destroy/Remove</a> and other removal tools for ways (tracks, road, canals and airstrips).
+</p>
+<p>
+<em>Cash Flow</em> - total income less total expenditure (costs).
+</p>
+<p>
+<em>Account Balance</em> - the current cash available for construction or purchasing vehicles (also shown in the centre of bottom-bar under game-view.<br>
+{Tips: If human player is in the red (negative account balance) for three consecutive months, the player is bankrupt and the game is over}.
+</p>
+<p>
+<em>Assets</em> - the value of all company vehicles at the end of the last calendar month.<br>
+{Tips: each month the value of operational vehicles depreciate slightly, current selling value for vehicles can be seen in <a href="convoidetail.txt">Convoy Details</a> or when vehicle is in a depot.}
+</p>
+<p>
+<em>Net Wealth</em> - Account Balance plus Assets.
+</p>
+<p>
+<em>Margin</em> - is the ratio of Operational Profit to Proceeds.
+</p>
+<p>
+<em>Travel?led</em> - total number of goods, passengers and mail transported.
+</p>
+<p>
+{Tips: Some costs, starting balance and finances in game can be changed in simuconf.tab}
 </p>
diff --git a/simutrans/text/en/general.txt b/simutrans/text/en/general.txt
index f98cc25..4bab310 100644
--- a/simutrans/text/en/general.txt
+++ b/simutrans/text/en/general.txt
@@ -1,106 +1,106 @@
-<title>Simutrans Help</title>
-
-<h1><strong>General Help</strong></h1>
-<br>
-- <a href="simutrans.txt">Welcome</a>
-<br>
-- <a href="window.txt">Game Interface</a><br>
-- <a href="mouse.txt">Mouse Help</a> (to be written)<br>
-- <a href="keys.txt">Keyboard Help</a>
-<br>
-<p>
-<a href="options.txt">
-<strong>Game Options</strong></a>
-<br>
-- <a href="language.txt">Language</a><br>
-- <a href="color.txt">Player Colour</a>
-<br>
-- <a href="display.txt">Display Settings</a><br>
-- <a href="sound.txt">Sound & Music</a>
-<br>
-- <a href="players.txt">Players</a>
-<br>
-- <a href="load.txt">Load Game</a>
-<br>
-- <a href="save.txt">Save Game</a>
-<br>
-- <a href="new_world.txt">New Game</a><br>
-- - <a href="climates.txt">Climate Control</a><br>
-- - <a href="load_relief.txt">Load Height Map</a>
-</p>
-
-<p>
-<a href="window.txt"><strong>Main Menu</strong></a><br>
-- <a href="options.txt">
-Game Options</a><br>
-- <a href="map.txt">Map</a>
-<br>
-- <a href="inspection_tool.txt">Inspection Tool</a><br>
-- <a href="slopetools.txt">Landscaping Tools Tools</a><br>
-- <a href="railtools.txt">Railroad/Train Tools</a>
-<br>
-- <a href="monorailtools.txt">Monorail Tools</a><br>
-- <a href="tramtools.txt">Tram Tools</a>
-<br>
-- <a href="roadtools.txt">Road Tools</a><br>
-- <a href="shiptools.txt">Harbour Tools</a>
-<br>
-- <a href="airtools.txt">Airport Tools</a>
-<br>
-- <a href="special.txt">Special Construction Tools</a><br>
-- <a href="edittools.txt">Game Edit Tools</a><br>
-- <a href="removal_tool.txt">Destroy/Remove</a>
-</p>
-<p>
-<a href="window.txt"><strong>?Management Menu</strong></a><br>
-- <a href="linemanagement.txt">Line Management</a>
-<br>
-- <a href="list.txt">Lists</a>
-<br>
-- - <a href="haltlist.txt">Stops/Station List</a><br>
-- - - <a href="haltlist_filter.txt">Stops/Station List Filter</a><br>
-- - <a href="convoi.txt">Vehicle List</a><br>
-- - - <a href="convoi_filter.txt">Vehicle List Filter</a>
-<br>
-- - <a href="citylist_filter.txt">City List</a><br>
-- - <a href="goods_filter.txt">Goods List</a>
-<br>
-- - <a href="factorylist_filter.txt">Industry List</a>
-<br>
-- - <a href="curiositylist_filter.txt">Attractions List</a>
-<br>
-- <a href="mailbox.txt">Message Centre</a>
-<br>
-- <a href="finances.txt">Finances</a>
-</p>
-<p>
-<a href="window.txt"><strong>Other Options</strong></a><br>
-- <a href="window.txt">Save Screenshot
-</a><br>
-- <a href="window.txt">Pause</a>
-<br>
-- <a href="window.txt">Fast Forward</a><br>
-- <a href="window.txt">Help</a>
-</p>
-
-<p>
-<a href="inspection_tool.txt"><strong>Other Dialogs</strong></a><br>
--<a href="depot.txt">Depot Controls</a>
-<br>
--<a href="schedule.txt">Schedule Controls</a>
-<br>
-- <a href="station.txt">Stop Information</a><br>
-- - <a href="station_details.txt">Stop Details</a><br>
-- <a href="convoiinfo.txt">Convoy/Vehicle Information</a><br>
-- - <a href="convoidetail.txt">Convoy/Vehicle Details</a><br>
-- <a href="citywindow.txt">City ?Information</a><br>
-- <a href="industry_info.txt">Industry Information</a>
-</p>
-
-<p>
-If no help is found here, try<br>
-<em>http://guide.simutrans.com</em>, or<br>
-<em>http://wiki.simutrans.com</em>, or<br>
-<em>http://simutrans-tips.com</em>, or<br>
-<em>http://forum.simutrans.com</em>.
+<title>Simutrans Help</title>
+
+<h1><strong>General Help</strong></h1>
+<br>
+- <a href="simutrans.txt">Welcome</a>
+<br>
+- <a href="window.txt">Game Interface</a><br>
+- <a href="mouse.txt">Mouse Help</a> (to be written)<br>
+- <a href="keys.txt">Keyboard Help</a>
+<br>
+<p>
+<a href="options.txt">
+<strong>Game Options</strong></a>
+<br>
+- <a href="language.txt">Language</a><br>
+- <a href="color.txt">Player Colour</a>
+<br>
+- <a href="display.txt">Display Settings</a><br>
+- <a href="sound.txt">Sound & Music</a>
+<br>
+- <a href="players.txt">Players</a>
+<br>
+- <a href="load.txt">Load Game</a>
+<br>
+- <a href="save.txt">Save Game</a>
+<br>
+- <a href="new_world.txt">New Game</a><br>
+- - <a href="climates.txt">Climate Control</a><br>
+- - <a href="load_relief.txt">Load Height Map</a>
+</p>
+
+<p>
+<a href="window.txt"><strong>Main Menu</strong></a><br>
+- <a href="options.txt">
+Game Options</a><br>
+- <a href="map.txt">Map</a>
+<br>
+- <a href="inspection_tool.txt">Inspection Tool</a><br>
+- <a href="slopetools.txt">Landscaping Tools Tools</a><br>
+- <a href="railtools.txt">Railroad/Train Tools</a>
+<br>
+- <a href="monorailtools.txt">Monorail Tools</a><br>
+- <a href="tramtools.txt">Tram Tools</a>
+<br>
+- <a href="roadtools.txt">Road Tools</a><br>
+- <a href="shiptools.txt">Harbour Tools</a>
+<br>
+- <a href="airtools.txt">Airport Tools</a>
+<br>
+- <a href="special.txt">Special Construction Tools</a><br>
+- <a href="edittools.txt">Game Edit Tools</a><br>
+- <a href="removal_tool.txt">Destroy/Remove</a>
+</p>
+<p>
+<a href="window.txt"><strong>?Management Menu</strong></a><br>
+- <a href="linemanagement.txt">Line Management</a>
+<br>
+- <a href="list.txt">Lists</a>
+<br>
+- - <a href="haltlist.txt">Stops/Station List</a><br>
+- - - <a href="haltlist_filter.txt">Stops/Station List Filter</a><br>
+- - <a href="convoi.txt">Vehicle List</a><br>
+- - - <a href="convoi_filter.txt">Vehicle List Filter</a>
+<br>
+- - <a href="citylist_filter.txt">City List</a><br>
+- - <a href="goods_filter.txt">Goods List</a>
+<br>
+- - <a href="factorylist_filter.txt">Industry List</a>
+<br>
+- - <a href="curiositylist_filter.txt">Attractions List</a>
+<br>
+- <a href="mailbox.txt">Message Centre</a>
+<br>
+- <a href="finances.txt">Finances</a>
+</p>
+<p>
+<a href="window.txt"><strong>Other Options</strong></a><br>
+- <a href="window.txt">Save Screenshot
+</a><br>
+- <a href="window.txt">Pause</a>
+<br>
+- <a href="window.txt">Fast Forward</a><br>
+- <a href="window.txt">Help</a>
+</p>
+
+<p>
+<a href="inspection_tool.txt"><strong>Other Dialogs</strong></a><br>
+-<a href="depot.txt">Depot Controls</a>
+<br>
+-<a href="schedule.txt">Schedule Controls</a>
+<br>
+- <a href="station.txt">Stop Information</a><br>
+- - <a href="station_details.txt">Stop Details</a><br>
+- <a href="convoiinfo.txt">Convoy/Vehicle Information</a><br>
+- - <a href="convoidetail.txt">Convoy/Vehicle Details</a><br>
+- <a href="citywindow.txt">City ?Information</a><br>
+- <a href="industry_info.txt">Industry Information</a>
+</p>
+
+<p>
+If no help is found here, try<br>
+<em>http://guide.simutrans.com</em>, or<br>
+<em>http://wiki.simutrans.com</em>, or<br>
+<em>http://simutrans-tips.com</em>, or<br>
+<em>http://forum.simutrans.com</em>.
 </p>
diff --git a/simutrans/text/en/goods_filter.txt b/simutrans/text/en/goods_filter.txt
index 9bdc34c..d27c398 100644
--- a/simutrans/text/en/goods_filter.txt
+++ b/simutrans/text/en/goods_filter.txt
@@ -1,54 +1,54 @@
-<title>Goods List Help</title>
-
-<h1><strong>Goods List</strong></h1>
-
-<p>
-<strong>Goods List</strong> contains information on the different items that can be transported in game and has controls to change income received from transportation.
-</p>
-<p>
-To open: click on goods-list-tool in <a href="list.txt">List Management</a> or press <a href="keys.txt">[G]</a>.
-</p>
-<p>
-A list of items available for transport in the game indicates: revenue received, % speed bonus, goods category, weight.<br>
-{Tips: If items in list are only partially visible, then <a href="mouse.txt">re-size</a> <strong>Goods List</strong> or scroll list using slider-bar.}
-</p>
-<p>
-<em>Speedbonus</em>: shows necessary required speed for different transport types, that a <a href="convoiinfo.txt">Convoy</a> must be capable of, to receive extra income for rapid transit of goods and passengers (or in some cases incur a penalty if too slow).<br>
-If playing with <a href="new_world.txt">timeline</a>, as time passes in Simutrans necessary required speeds change with the introduction of new vehicles.<br>
-Arrow-buttons adjust income received and the speed a Convoy must be capable of to receive a speed-bonus (or incur a penalty if Convoy is too slow).
-</p>
-<p>
-<em>Sorted by:</em> has options to determine the order of items shown in list.<br>
-Click on option-buttons to cycle through options (changes name of option-button):
-</p>
-<p>
-- <em>unsorted</em> ?is a random order.<br>
-- <em>by name</em> ?in alphabetical order.<br>
-- <em>by revenue</em> orders by income received for transport of one unit by one game-square.<br>
-- <em>by bonus</em> orders by % speed bonus (% extra income if <a href="convoiinfo.txt">Convoy</a> used is capable of necessary required speed to qualify).
-</p>
-<p>
-- <em>ascending</em> / <em>descending</em> reverses order of list.
-</p>
-<p>
-Details listed for each item include:
-</p>
-<p>
-<em>colour square</em> is the same colour displayed in goods-colour-bars in game-view above a <a href="station.txt">Stop</a> to indicate quantity of items that wait for transport.<br>
-{Tips: Use [!] to toggle goods-colour-bars above a Stop in game-view.}
-</p>
-<p>
-<em>revenue</em> is the income received for transporting one unit a distance of one game-square.<br>
-{Tips: Use <a href="new_world.txt">Beginners mode</a> to increase revenue to 150% (can be changed in simuconf.tab)}
-</p>
-<p>
-<em>% bonus</em> is % extra income received if <a href="convoiinfo.txt">Convoy</a> used is capable of necessary required speed to qualify (in some cases incur a penalty if a vehicle is too slow).<br>
-The calculation formula for income is complex and considers the maximum speed of Convoy with the average maximum speed of available vehicles (and not the speed of vehicle seen in game).
-</p>
-<p>
-<em>goods category</em> indicates type of vehicle needed for transport. Special freight requires specific vehicles.<br>
-{Tips: The <a href="depot.txt">capacity</a> of vehicles shows which items a vehicle can transport}.
-</p>
-<p>
-<em>Weight</em> shown is one unit in kilogrammes.
+<title>Goods List Help</title>
+
+<h1><strong>Goods List</strong></h1>
+
+<p>
+<strong>Goods List</strong> contains information on the different items that can be transported in game and has controls to change income received from transportation.
+</p>
+<p>
+To open: click on goods-list-tool in <a href="list.txt">List Management</a> or press <a href="keys.txt">[G]</a>.
+</p>
+<p>
+A list of items available for transport in the game indicates: revenue received, % speed bonus, goods category, weight.<br>
+{Tips: If items in list are only partially visible, then <a href="mouse.txt">re-size</a> <strong>Goods List</strong> or scroll list using slider-bar.}
+</p>
+<p>
+<em>Speedbonus</em>: shows necessary required speed for different transport types, that a <a href="convoiinfo.txt">Convoy</a> must be capable of, to receive extra income for rapid transit of goods and passengers (or in some cases incur a penalty if too slow).<br>
+If playing with <a href="new_world.txt">timeline</a>, as time passes in Simutrans necessary required speeds change with the introduction of new vehicles.<br>
+Arrow-buttons adjust income received and the speed a Convoy must be capable of to receive a speed-bonus (or incur a penalty if Convoy is too slow).
+</p>
+<p>
+<em>Sorted by:</em> has options to determine the order of items shown in list.<br>
+Click on option-buttons to cycle through options (changes name of option-button):
+</p>
+<p>
+- <em>unsorted</em> ?is a random order.<br>
+- <em>by name</em> ?in alphabetical order.<br>
+- <em>by revenue</em> orders by income received for transport of one unit by one game-square.<br>
+- <em>by bonus</em> orders by % speed bonus (% extra income if <a href="convoiinfo.txt">Convoy</a> used is capable of necessary required speed to qualify).
+</p>
+<p>
+- <em>ascending</em> / <em>descending</em> reverses order of list.
+</p>
+<p>
+Details listed for each item include:
+</p>
+<p>
+<em>colour square</em> is the same colour displayed in goods-colour-bars in game-view above a <a href="station.txt">Stop</a> to indicate quantity of items that wait for transport.<br>
+{Tips: Use [!] to toggle goods-colour-bars above a Stop in game-view.}
+</p>
+<p>
+<em>revenue</em> is the income received for transporting one unit a distance of one game-square.<br>
+{Tips: Use <a href="new_world.txt">Beginners mode</a> to increase revenue to 150% (can be changed in simuconf.tab)}
+</p>
+<p>
+<em>% bonus</em> is % extra income received if <a href="convoiinfo.txt">Convoy</a> used is capable of necessary required speed to qualify (in some cases incur a penalty if a vehicle is too slow).<br>
+The calculation formula for income is complex and considers the maximum speed of Convoy with the average maximum speed of available vehicles (and not the speed of vehicle seen in game).
+</p>
+<p>
+<em>goods category</em> indicates type of vehicle needed for transport. Special freight requires specific vehicles.<br>
+{Tips: The <a href="depot.txt">capacity</a> of vehicles shows which items a vehicle can transport}.
+</p>
+<p>
+<em>Weight</em> shown is one unit in kilogrammes.
 </p>
diff --git a/simutrans/text/en/haltlist.txt b/simutrans/text/en/haltlist.txt
index 03f38ff..e2f5ec3 100644
--- a/simutrans/text/en/haltlist.txt
+++ b/simutrans/text/en/haltlist.txt
@@ -1,62 +1,62 @@
-<title>Station List Help</title>
-
-<h1><strong>Station List</strong></h1>
-
-<p>
-<strong>Station List</strong> shows information and has controls to filter and list different <a href="station.txt">Stops</a> (but not Stops just for water transport vehicles), where vehicles pick-up and drop-off goods & passengers.
-</p>
-<p>
-To open: click on station-list-tool in <a href="list.txt">List Management</a>. <strong>Station List</strong> has four option buttons, two are used to order items in a list and two are used to apply options to select items to show in list. Below buttons is a list of <a href="station.txt">Stops</a> that fit criteria for filter options.<br>
-{Tips: If no Stops are listed change <em>Filter</em> options. If items in list are only partially visible, then <a href="mouse.txt">re-size</a> <strong>Station List</strong> or scroll list with slider-bar.}
-</p>
-<p>
-Click on buttons to cycle through options (changes name of option-button) or open Filter Settings controls:
-</p>
-<p>
-<em>Sorted by:</em> two option-buttons determine the order of <a href="station.txt">Stops</a> shown in list:
-</p>
-<p>
-- <em>Type</em> orders by type of vehicle that is accepted.<br>
-- <em>unsorted</em> ?orders in random order.<br>
-- <em>Name</em> orders alphanumerically within ASCII-code order (capital letters before lower case letters) of assigned <a href="station.txt">name</a>.<br>
-- <em>waiting</em>orders by amount of goods & passengers present in relation to waiting capacity and transport service provided.
-</p>
-<p>
-- <em>ascending</em> / <em>descending</em> reverses order of list.
-</p>
-<p>
-<em>Filter:</em> Two option buttons, switch on/off selection criteria for list and access controls to change criteria.
-</p>
-<p>
-- <em>enabled</em> / <em>disabled</em> click to toggle filter criteria.
-</p>
-<p>
-- <a href="haltlist_filter.txt"><em>Settings</em></a> click to open controls to change filter criteria.
-</p>
-<p>
-Click on a item listed in<strong>Station List</strong>to see more <a href="station.txt">information</a> about that Stop.<br>
-Items listed for each Stop include:
-</p>
-<p>
-<em>status-colour-bar:</em> colours indicate operation of <a href="station.txt">Stop</a> with regards to how overcrowded it is. The colour-bar is also used in Stop Information and <a href="linemanagement.txt">Line Management</a> and is the same colour displayed in the colour-bar above Stop in game-display:<br>
-- <em>yellow:</em> no service and nothing waitung.<br>
-- <em>green:</em> no improvements necessary.<br>
-- <em>orange:</em> stop is slightly overcrowded (with transfer goods mostly).<br>
-- <em>red:</em> stop hold more than 1.5 of its capacity, or more than 200 unhappy passengers, or a factory must stop its production because the station is overcrowded.<br>
-{Tips: Use [!] to toggle colour-bar above Stop in game display.}
-</p>
-<p>
-<em>name</em> that has been assigned
-{Tips: Option to assign numbers in Stop name available in simuconf.tab}.
-</p>
-<p>
-<em>vehicle icon(s)</em> indicate which types of vehicle can use <a href="station.txt">Stop</a> (also used in Stop Information and Line Management).<br>
-Icons include: bus (for road passenger vehicles), truck (for road goods vehicles), train, boat and airplane. Trams can be indicated by a bus-icon or a train-icon depending on type of Stop.
-</p>
-<p>
-<em>freight icon(s)</em> indicate which items (passengers, goods and/or mail) the <a href="station.txt">Stop</a> can handle (also used in Stop Information and Line Management).<br>
-{Tips: adding appropriate extensions changes the category of items a stop can handle. <a href="special.txt">Post offices</a> may be added to Stops to enable handling of mail}.
-</p>
-<p>
-<em>waiting</em> details of different goods and passengers at <a href="station.txt">Stop</a>.
+<title>Station List Help</title>
+
+<h1><strong>Station List</strong></h1>
+
+<p>
+<strong>Station List</strong> shows information and has controls to filter and list different <a href="station.txt">Stops</a> (but not Stops just for water transport vehicles), where vehicles pick-up and drop-off goods & passengers.
+</p>
+<p>
+To open: click on station-list-tool in <a href="list.txt">List Management</a>. <strong>Station List</strong> has four option buttons, two are used to order items in a list and two are used to apply options to select items to show in list. Below buttons is a list of <a href="station.txt">Stops</a> that fit criteria for filter options.<br>
+{Tips: If no Stops are listed change <em>Filter</em> options. If items in list are only partially visible, then <a href="mouse.txt">re-size</a> <strong>Station List</strong> or scroll list with slider-bar.}
+</p>
+<p>
+Click on buttons to cycle through options (changes name of option-button) or open Filter Settings controls:
+</p>
+<p>
+<em>Sorted by:</em> two option-buttons determine the order of <a href="station.txt">Stops</a> shown in list:
+</p>
+<p>
+- <em>Type</em> orders by type of vehicle that is accepted.<br>
+- <em>unsorted</em> ?orders in random order.<br>
+- <em>Name</em> orders alphanumerically within ASCII-code order (capital letters before lower case letters) of assigned <a href="station.txt">name</a>.<br>
+- <em>waiting</em>orders by amount of goods & passengers present in relation to waiting capacity and transport service provided.
+</p>
+<p>
+- <em>ascending</em> / <em>descending</em> reverses order of list.
+</p>
+<p>
+<em>Filter:</em> Two option buttons, switch on/off selection criteria for list and access controls to change criteria.
+</p>
+<p>
+- <em>enabled</em> / <em>disabled</em> click to toggle filter criteria.
+</p>
+<p>
+- <a href="haltlist_filter.txt"><em>Settings</em></a> click to open controls to change filter criteria.
+</p>
+<p>
+Click on a item listed in<strong>Station List</strong>to see more <a href="station.txt">information</a> about that Stop.<br>
+Items listed for each Stop include:
+</p>
+<p>
+<em>status-colour-bar:</em> colours indicate operation of <a href="station.txt">Stop</a> with regards to how overcrowded it is. The colour-bar is also used in Stop Information and <a href="linemanagement.txt">Line Management</a> and is the same colour displayed in the colour-bar above Stop in game-display:<br>
+- <em>yellow:</em> no service and nothing waitung.<br>
+- <em>green:</em> no improvements necessary.<br>
+- <em>orange:</em> stop is slightly overcrowded (with transfer goods mostly).<br>
+- <em>red:</em> stop hold more than 1.5 of its capacity, or more than 200 unhappy passengers, or a factory must stop its production because the station is overcrowded.<br>
+{Tips: Use [!] to toggle colour-bar above Stop in game display.}
+</p>
+<p>
+<em>name</em> that has been assigned
+{Tips: Option to assign numbers in Stop name available in simuconf.tab}.
+</p>
+<p>
+<em>vehicle icon(s)</em> indicate which types of vehicle can use <a href="station.txt">Stop</a> (also used in Stop Information and Line Management).<br>
+Icons include: bus (for road passenger vehicles), truck (for road goods vehicles), train, boat and airplane. Trams can be indicated by a bus-icon or a train-icon depending on type of Stop.
+</p>
+<p>
+<em>freight icon(s)</em> indicate which items (passengers, goods and/or mail) the <a href="station.txt">Stop</a> can handle (also used in Stop Information and Line Management).<br>
+{Tips: adding appropriate extensions changes the category of items a stop can handle. <a href="special.txt">Post offices</a> may be added to Stops to enable handling of mail}.
+</p>
+<p>
+<em>waiting</em> details of different goods and passengers at <a href="station.txt">Stop</a>.
 </p>
diff --git a/simutrans/text/en/haltlist_filter.txt b/simutrans/text/en/haltlist_filter.txt
index 374cb89..1055961 100644
--- a/simutrans/text/en/haltlist_filter.txt
+++ b/simutrans/text/en/haltlist_filter.txt
@@ -1,38 +1,38 @@
-<title>Station List Filter Help</title>
-
-<h1><strong>Station List Filter</strong></h1>
-
-<p>
-<strong>Station List Filter</strong> has options to determine which <a href="station.txt">Stops</a> (but not Stops just for water transport vehicles), where vehicles drop-off and pick up passengers, are shown in <a href="haltlist.txt">Station List</a> .
-</p>
-<p>
-Click on <a href="haltlist.txt">Settings</a> in Station List to open <strong>Station List Filter</strong>.
-</p>
-<p>
-Option-buttons select <a href="station.txt">Stops</a> to be listed in Station List when filter option is <a href="haltlist.txt">enabled</a>. Only Stops that fit all criteria set, are listed.
-</p>
-<p>
-Click on a button to select/deselect criteria for filter (button is indented when selected):
-</p>
-<p>
-<em>Filter names:</em> selects <a href="station.txt">Stops</a> by name. To use: click on button to select, then click on name-box and type required name exactly (option is case sensitive).
-</p>
-<p>
-<em>Filter types:</em> will list <a href="station.txt">Stops</a> that have at least one of the following items if selected. To use: click on button(s). (Stops just for water transport vehicles are not listed in Station List)
-</p>
-<p><em>Special filter:</em><br>
-- <em>overflowing</em> ?not in use.<br>
-- <em>no connection</em> selects <a href="station.txt">Stops</a> with no transport service.
-</p>
-<p>
-<em>Goods needed:</em> refers to <a href="station.txt">Stops</a> where selected item(s) end their journey. Click on button next to name to select item(s). Use <a href="mouse.txt">slider-bar</a> to scroll items list. Options include:<br>
-- <em>all</em> selects all items.<br>
-- <em>none</em> no items are selected.<br>
-- <em>inv.</em> inverses current selection of items.
-</p>
-<p>
-<em>Production:</em> refers to <a href="station.txt">Stops</a> where the selected item(s) start their journey. Click on button next to name to select item(s). Use slider-bar to scroll items list. Options include:<br>
-- <em>all</em> selects all items.<br>
-- <em>none</em> no items are selected.<br>
-- <em>inv.</em> inverses current selection of items.
+<title>Station List Filter Help</title>
+
+<h1><strong>Station List Filter</strong></h1>
+
+<p>
+<strong>Station List Filter</strong> has options to determine which <a href="station.txt">Stops</a> (but not Stops just for water transport vehicles), where vehicles drop-off and pick up passengers, are shown in <a href="haltlist.txt">Station List</a> .
+</p>
+<p>
+Click on <a href="haltlist.txt">Settings</a> in Station List to open <strong>Station List Filter</strong>.
+</p>
+<p>
+Option-buttons select <a href="station.txt">Stops</a> to be listed in Station List when filter option is <a href="haltlist.txt">enabled</a>. Only Stops that fit all criteria set, are listed.
+</p>
+<p>
+Click on a button to select/deselect criteria for filter (button is indented when selected):
+</p>
+<p>
+<em>Filter names:</em> selects <a href="station.txt">Stops</a> by name. To use: click on button to select, then click on name-box and type required name exactly (option is case sensitive).
+</p>
+<p>
+<em>Filter types:</em> will list <a href="station.txt">Stops</a> that have at least one of the following items if selected. To use: click on button(s). (Stops just for water transport vehicles are not listed in Station List)
+</p>
+<p><em>Special filter:</em><br>
+- <em>overflowing</em> ?not in use.<br>
+- <em>no connection</em> selects <a href="station.txt">Stops</a> with no transport service.
+</p>
+<p>
+<em>Goods needed:</em> refers to <a href="station.txt">Stops</a> where selected item(s) end their journey. Click on button next to name to select item(s). Use <a href="mouse.txt">slider-bar</a> to scroll items list. Options include:<br>
+- <em>all</em> selects all items.<br>
+- <em>none</em> no items are selected.<br>
+- <em>inv.</em> inverses current selection of items.
+</p>
+<p>
+<em>Production:</em> refers to <a href="station.txt">Stops</a> where the selected item(s) start their journey. Click on button next to name to select item(s). Use slider-bar to scroll items list. Options include:<br>
+- <em>all</em> selects all items.<br>
+- <em>none</em> no items are selected.<br>
+- <em>inv.</em> inverses current selection of items.
 </p>
diff --git a/simutrans/text/en/industry_info.txt b/simutrans/text/en/industry_info.txt
index a54105a..0f8180b 100644
--- a/simutrans/text/en/industry_info.txt
+++ b/simutrans/text/en/industry_info.txt
@@ -1,68 +1,68 @@
-<title>Industry Information Help</title>
-
-<h1><strong>Industry Information</strong></h1>
-
-<p>
-<strong>Industry Information</strong> shows details about a selected Industry (a supplier or consumer of goods) and allows game-view to be moved to related positions in game-world.
-</p>
-<p>
-Suppliers and consumers of goods link to provide an Industry Supply Chain which terminates in an end-consumer. Some Industry is both a consumer and supplier and lies in the middle of an Industry Supply Chain. If not playing in <a href="new_world.txt">beginners mode</a>, Industry will cease supply if consumer has excess supply.<br>
-Industries may also be a destination for and origin of passengers and mail. Vehicles collect and deliver goods and passengers to an Industry through <a href="station.txt">Stops</a> if the catchment area of the Stop covers any portion of the Industry building and if the Stop can handle the item.
-{Tips: Off-shorestops/Oil rigs/fish farms/catchment area/oil/mail/passengers/not listed in station list}
-</p>
-<p>
-The intial number of Industry Supply Chains can be set in <a href="new_world.txt">Create New World</a>.
-As <a href="citywindow.txt">urban areas</a> grow more industry may appear. New industry appears each time the population of an urban area doubles from about 2000 onwards.<br>
-{Tips: Add Industry to an urban area using <a href="edittools.txt">Build a new market in the nearest city</a> tool in ?Game Edit Tools. Change when new industries are generated in cityrules.tab (industry_increase_every = 0 generates no new industry)}.
-</p>
-<p>
-Click on an Industry in game-view with the <a href="inspection_tool.txt">Inspection Tool</a> or an Industry listed in <a href="factorylist_filter.txt">?Industry List</a> to open <strong>Industry Information</strong>.<br>
-Use <a href="mouse.txt">slider-bar</a> to scroll items if all are not visible.
-</p>
-<p>
-Name of selected Industry is shown in the titlebar of <strong>Industry Information</strong>.<br>
-Other information about selected Industry and options include:
-</p>
-<p>
-Production: maximum rate of goods the Industry will supply (if a supplier) or consume (if it is an end-consumer) in units per ?month/day.<br>
-{Tips: Adding <a href="special.txt">transformer stations</a> and adding supplying electricity to an Industry increases rate of goods produced/consumed}.
-</p>
-<p>
-<em>Industry picture</em> shows a view of Industry building. Click on picture to move game-view to Industry building.
-</p>
-<p>
-<em>status-colour-bar</em> under picture indicates operation of Industry (also used in <a href="factorylist_filter.txt">?Industry List</a>):<br>
-- <em>white:</em> does not require input.<br>
-- <em>yellow:</em> connected by transport, but Industry Supply Chain has poor supply.<br>
-- <em>green:</em> at optimum status.<br>
-- <em>orange:</em> operational but improvements possible.<br>
-- <em>red:</em> operational but part of Industry Supply chain has excess supply.
-</p>
-<p>
-<em>Consumer:</em> lists destinations in Industry Supply Chain for goods produced by selected Industry. <br>
-Destination industries and their map co-ordinates are listed by an arrow-button. Click on arrow-button to move game-view to destination.
-</p>
-<p>
-<em>Suppliers:</em> shows origin of goods in Industry Supply Chain required by selected Industry.<br>
-Supplier industries and their map co-ordinates are listed by an arrow-button. Click on arrow-button to move game-view to supplier.
-</p>
-<p>
-<em>Workers live in:</em> shows in which nearby <a href="citywindow.txt">urban areas</a> employees live. Passengers and mail from these urban areas will need to reach the selected Industry.<br>
-Urban areas and their map co-ordinates are listed by an arrow-button. Click on arrow-button to move game-view to supplier.
-</p>
-<p>
-<em>Passenger level:</em> is the relative popularity as a destination for passengers .<br>
-<em>Mail level:</em> is the relative popularity as a destination for mail.<br>
-{Tips: only one square of an Industry building need fall in the catchement area of a Stop to provide an optimum service for passengers and mail}.
-</p>
-<p>
-<em>Production:</em> gives details on output of Industry.<br>
-Information shown includes: name of item; quantity currently stored by maximum storage capacity for item; <a href="goods_filter.txt">goods category</a>; and percentage level of output compared to input.
-</p>
-<p>
-<em>Consumption:</em> gives details on input of industry.<br>
-Information shown includes: name of item; quantity currently stored by maximum storage capacity for item; <a href="goods_filter.txt">goods category</a>; and percentage level of input compared to output.
-</p>
-<p>
-<a href="station.txt"><em>Stops</em></a> which serve the Industry are listed at the bottom of <strong>Industry Information</strong>.
+<title>Industry Information Help</title>
+
+<h1><strong>Industry Information</strong></h1>
+
+<p>
+<strong>Industry Information</strong> shows details about a selected Industry (a supplier or consumer of goods) and allows game-view to be moved to related positions in game-world.
+</p>
+<p>
+Suppliers and consumers of goods link to provide an Industry Supply Chain which terminates in an end-consumer. Some Industry is both a consumer and supplier and lies in the middle of an Industry Supply Chain. If not playing in <a href="new_world.txt">beginners mode</a>, Industry will cease supply if consumer has excess supply.<br>
+Industries may also be a destination for and origin of passengers and mail. Vehicles collect and deliver goods and passengers to an Industry through <a href="station.txt">Stops</a> if the catchment area of the Stop covers any portion of the Industry building and if the Stop can handle the item.
+{Tips: Off-shorestops/Oil rigs/fish farms/catchment area/oil/mail/passengers/not listed in station list}
+</p>
+<p>
+The intial number of Industry Supply Chains can be set in <a href="new_world.txt">Create New World</a>.
+As <a href="citywindow.txt">urban areas</a> grow more industry may appear. New industry appears each time the population of an urban area doubles from about 2000 onwards.<br>
+{Tips: Add Industry to an urban area using <a href="edittools.txt">Build a new market in the nearest city</a> tool in ?Game Edit Tools. Change when new industries are generated in cityrules.tab (industry_increase_every = 0 generates no new industry)}.
+</p>
+<p>
+Click on an Industry in game-view with the <a href="inspection_tool.txt">Inspection Tool</a> or an Industry listed in <a href="factorylist_filter.txt">?Industry List</a> to open <strong>Industry Information</strong>.<br>
+Use <a href="mouse.txt">slider-bar</a> to scroll items if all are not visible.
+</p>
+<p>
+Name of selected Industry is shown in the titlebar of <strong>Industry Information</strong>.<br>
+Other information about selected Industry and options include:
+</p>
+<p>
+Production: maximum rate of goods the Industry will supply (if a supplier) or consume (if it is an end-consumer) in units per ?month/day.<br>
+{Tips: Adding <a href="special.txt">transformer stations</a> and adding supplying electricity to an Industry increases rate of goods produced/consumed}.
+</p>
+<p>
+<em>Industry picture</em> shows a view of Industry building. Click on picture to move game-view to Industry building.
+</p>
+<p>
+<em>status-colour-bar</em> under picture indicates operation of Industry (also used in <a href="factorylist_filter.txt">?Industry List</a>):<br>
+- <em>white:</em> does not require input.<br>
+- <em>yellow:</em> connected by transport, but Industry Supply Chain has poor supply.<br>
+- <em>green:</em> at optimum status.<br>
+- <em>orange:</em> operational but improvements possible.<br>
+- <em>red:</em> operational but part of Industry Supply chain has excess supply.
+</p>
+<p>
+<em>Consumer:</em> lists destinations in Industry Supply Chain for goods produced by selected Industry. <br>
+Destination industries and their map co-ordinates are listed by an arrow-button. Click on arrow-button to move game-view to destination.
+</p>
+<p>
+<em>Suppliers:</em> shows origin of goods in Industry Supply Chain required by selected Industry.<br>
+Supplier industries and their map co-ordinates are listed by an arrow-button. Click on arrow-button to move game-view to supplier.
+</p>
+<p>
+<em>Workers live in:</em> shows in which nearby <a href="citywindow.txt">urban areas</a> employees live. Passengers and mail from these urban areas will need to reach the selected Industry.<br>
+Urban areas and their map co-ordinates are listed by an arrow-button. Click on arrow-button to move game-view to supplier.
+</p>
+<p>
+<em>Passenger level:</em> is the relative popularity as a destination for passengers .<br>
+<em>Mail level:</em> is the relative popularity as a destination for mail.<br>
+{Tips: only one square of an Industry building need fall in the catchement area of a Stop to provide an optimum service for passengers and mail}.
+</p>
+<p>
+<em>Production:</em> gives details on output of Industry.<br>
+Information shown includes: name of item; quantity currently stored by maximum storage capacity for item; <a href="goods_filter.txt">goods category</a>; and percentage level of output compared to input.
+</p>
+<p>
+<em>Consumption:</em> gives details on input of industry.<br>
+Information shown includes: name of item; quantity currently stored by maximum storage capacity for item; <a href="goods_filter.txt">goods category</a>; and percentage level of input compared to output.
+</p>
+<p>
+<a href="station.txt"><em>Stops</em></a> which serve the Industry are listed at the bottom of <strong>Industry Information</strong>.
 </p>
diff --git a/simutrans/text/en/inspection_tool.txt b/simutrans/text/en/inspection_tool.txt
index bdae527..766496f 100644
--- a/simutrans/text/en/inspection_tool.txt
+++ b/simutrans/text/en/inspection_tool.txt
@@ -1,91 +1,91 @@
-<title>Inspection Tool Help</title>
-
-<h1><strong>Inspection Tool</strong></h1>
-
-<p>
-<strong>Inspection Tool</strong> is used to open dialogues that provide information or option-controls for various items.
-</p>
-<p>
-Click magnifying-glass-icon at top of game-view or press <a href="keys.txt">[a]</a> to open <strong>Inspection Tool</strong> (changes cursor to a magnifying-glass).
-</p>
-<p>
-To use Inspection Tool: position magnifying-glass-cursor in game-view at required postion and click to open dialogue. If more than one item is at required postion, a further click will open a second dialogue.
-{Tips: Option to open one dialogue or all dialogues for a given cursor position available in simuconf.tab}
-</p>
-<p>
-Click on following items in game-view with tool to open various dialogues:
-</p>
-<p>
-<em>Depots
-</em> - opens <a href="depot.txt">controls</a> to purchase and manage vehicles at that depot.
-</p>
-<p>
-<em>Stops</em> - opens <a href="station.txt">Stop Information</a> for that Stop.
-</p>
-<p>
-<em>Vehicles</em> - opens <a href="convoiinfo.txt">?Convoy/Vehicle Information</a> for that vehicle.
-</p>
-<p>
-<em>Town Hall</em> - opens <a href="citywindow.txt">City ?Information</a> for that urban area.
-{Tips: Option to open dialogue providing information about Town Hall available in simuconf.tab}
-</p>
-<p>
-<em>Industry</em> - opens <a href="industry_info.txt">Industry Information</a> for that industry.
-</p>
-<p>
-<em>City Buildings</em> opens a dialogue that gives information about the building (titlebar of dialogue is 'Building'). Information contained in the dialogue includes:<br>
-- <em>description</em> provides information about the building. If no description is available then either 'residential house', or 'industrial building', or 'shops and stores' (for commercial buildings) is shown. <br>
-- <em>City of</em>: indicates which urban area the City Building is part of.<br>
-- <em>Passenger level:</em> is the relative popularity as a destination for passengers .<br>
-- <em>Mail level:</em> is the relative popularity as a destination for mail.<br>
-- <em>Appears from</em>: indicates year the building appears if playing with <a href="new_world.txt">timeline</a>.<br>
-- <em>Value:</em>: indicates cost incurred if building is removed with <a href="window.txt">Destroy/Remove Tool</a>.<br>
-- <em>Painted by</em>: name of person who drew building for Simutrans
-</p>
-<p>
-<em>Monuments</em> / <a href="curiositylist_filter.txt"><em>Tourist Attractions</em></a> opens a dialogue that gives information about the attraction (titlebar of dialogue indicates whether it is a monument, or tourist attraction). Information contained in the dialogue includes:<br>
-- <em>Public property</em> indicates that item is not owned by a player company.<br>
-- <em>description</em> provides information about the attraction.<br>
-- <em>Passenger level:</em> is the relative popularity as a destination for passengers .<br>
-- <em>Mail level:</em> is the relative popularity as a destination for mail.<br>
-- <em>Appears from</em>: indicates year the building appears if playing with <a href="new_world.txt">timeline</a>.<br>
-- <em>Painted by</em>: name of person who drew attraction for Simutrans
-</p>
-<p>
-<em>Roads and Tracks</em> opens a dialogue that gives information about the Road or Track (titlebar of dialogue indicates what type of way it is - in the case of tram tracks built on road titlebar indicates type of Road).<br>
-Information contained in dialogue:<br>
-- <em>Max Speed</em>: maximum speed limit allowed on road or track.<br>
-- <em>Ribi (unmasked)</em>:<br> is an internal counter that indicates direction of way.<br>
-- <em>Ribi (masked)</em>: is an internal counter that indicates direction of way taking into consideration any signals or signs.<br>
-- <em>with sign/signal</em> is shown if there is a signal or sign present.<br>
-- <em>electrified</em>/<em>not electrified</em> indicates whether way is electrified.<br>
-- <em>convoi passed last month</em> indicates number of <a href="convoiinfo.txt">Vehicles</a> that used way in the previous game-calendar-month.<br>
-- <em>reserved by</em> indicates which vehicle has reserved a track for use till it has passed.<br>
-- <em>wayslope</em> indicates direction of slope if any<br>
-- <em>map-coordinates</em> as shown on bottom-bar <a href="window.txt"><br>
-In the case of tram tracks constructed on road: information is shown twice, first for the road and then for the tram track.
-</p>
-<p>
-<em>Signals</em>/<em>Signs</em> opens a dialogue, the titlebar of the dialogue indicates whether it is a signal or a road sign.
-Information contained in dialogue includes:<br>
-- <em>direction</em> ?is an internal counter that indicates direction to which signal applies.
-</p>
-<p>
-<a href="special.txt"><em>Powerlines</em></a> / <em>Transformer stations</em> opens dialogue that provides information about electricity supply grid (titlebar of dialogue is 'Power Lines'). Information shown includes:<br>
-- <em>Power:</em> ?value indicates amount of power supplied.<br>
-- <em>Available:</em>: ?value is shown for <a href="special.txt">Transformer Stations</a> at <a href="industry_info.txt">Industry</a> and indicates relative amount of power supplied.<br>
-- <em>Net:</em> is ID number of supply grid. Two points with the same ID number are connected.
-</p>
-<p>
-<it>Trees</it> opens a dialogue (the titlebar is 'Tree'). Information shown includes:<br>
-- <em>name</em> which provides species of tree.<br>
-- <em>age</em> age of tree in months.
-</p>
-<p>
-<em>Land</em> opens a dialogue (the titlebar is 'Land'). Information shown includes:<br>
-- <it>slope</it> which provides species of tree.<br>
-- <it>map co-ordinates</it> as shown in <a href="window.txt">bottom-bar</a>.
-</p>
-<p>
-{Tips: Option to open dialogues on private road users and pedestrians available in simunconf.tab}.
+<title>Inspection Tool Help</title>
+
+<h1><strong>Inspection Tool</strong></h1>
+
+<p>
+<strong>Inspection Tool</strong> is used to open dialogues that provide information or option-controls for various items.
+</p>
+<p>
+Click magnifying-glass-icon at top of game-view or press <a href="keys.txt">[a]</a> to open <strong>Inspection Tool</strong> (changes cursor to a magnifying-glass).
+</p>
+<p>
+To use Inspection Tool: position magnifying-glass-cursor in game-view at required postion and click to open dialogue. If more than one item is at required postion, a further click will open a second dialogue.
+{Tips: Option to open one dialogue or all dialogues for a given cursor position available in simuconf.tab}
+</p>
+<p>
+Click on following items in game-view with tool to open various dialogues:
+</p>
+<p>
+<em>Depots
+</em> - opens <a href="depot.txt">controls</a> to purchase and manage vehicles at that depot.
+</p>
+<p>
+<em>Stops</em> - opens <a href="station.txt">Stop Information</a> for that Stop.
+</p>
+<p>
+<em>Vehicles</em> - opens <a href="convoiinfo.txt">?Convoy/Vehicle Information</a> for that vehicle.
+</p>
+<p>
+<em>Town Hall</em> - opens <a href="citywindow.txt">City ?Information</a> for that urban area.
+{Tips: Option to open dialogue providing information about Town Hall available in simuconf.tab}
+</p>
+<p>
+<em>Industry</em> - opens <a href="industry_info.txt">Industry Information</a> for that industry.
+</p>
+<p>
+<em>City Buildings</em> opens a dialogue that gives information about the building (titlebar of dialogue is 'Building'). Information contained in the dialogue includes:<br>
+- <em>description</em> provides information about the building. If no description is available then either 'residential house', or 'industrial building', or 'shops and stores' (for commercial buildings) is shown. <br>
+- <em>City of</em>: indicates which urban area the City Building is part of.<br>
+- <em>Passenger level:</em> is the relative popularity as a destination for passengers .<br>
+- <em>Mail level:</em> is the relative popularity as a destination for mail.<br>
+- <em>Appears from</em>: indicates year the building appears if playing with <a href="new_world.txt">timeline</a>.<br>
+- <em>Value:</em>: indicates cost incurred if building is removed with <a href="window.txt">Destroy/Remove Tool</a>.<br>
+- <em>Painted by</em>: name of person who drew building for Simutrans
+</p>
+<p>
+<em>Monuments</em> / <a href="curiositylist_filter.txt"><em>Tourist Attractions</em></a> opens a dialogue that gives information about the attraction (titlebar of dialogue indicates whether it is a monument, or tourist attraction). Information contained in the dialogue includes:<br>
+- <em>Public property</em> indicates that item is not owned by a player company.<br>
+- <em>description</em> provides information about the attraction.<br>
+- <em>Passenger level:</em> is the relative popularity as a destination for passengers .<br>
+- <em>Mail level:</em> is the relative popularity as a destination for mail.<br>
+- <em>Appears from</em>: indicates year the building appears if playing with <a href="new_world.txt">timeline</a>.<br>
+- <em>Painted by</em>: name of person who drew attraction for Simutrans
+</p>
+<p>
+<em>Roads and Tracks</em> opens a dialogue that gives information about the Road or Track (titlebar of dialogue indicates what type of way it is - in the case of tram tracks built on road titlebar indicates type of Road).<br>
+Information contained in dialogue:<br>
+- <em>Max Speed</em>: maximum speed limit allowed on road or track.<br>
+- <em>Ribi (unmasked)</em>:<br> is an internal counter that indicates direction of way.<br>
+- <em>Ribi (masked)</em>: is an internal counter that indicates direction of way taking into consideration any signals or signs.<br>
+- <em>with sign/signal</em> is shown if there is a signal or sign present.<br>
+- <em>electrified</em>/<em>not electrified</em> indicates whether way is electrified.<br>
+- <em>convoi passed last month</em> indicates number of <a href="convoiinfo.txt">Vehicles</a> that used way in the previous game-calendar-month.<br>
+- <em>reserved by</em> indicates which vehicle has reserved a track for use till it has passed.<br>
+- <em>wayslope</em> indicates direction of slope if any<br>
+- <em>map-coordinates</em> as shown on bottom-bar <a href="window.txt"><br>
+In the case of tram tracks constructed on road: information is shown twice, first for the road and then for the tram track.
+</p>
+<p>
+<em>Signals</em>/<em>Signs</em> opens a dialogue, the titlebar of the dialogue indicates whether it is a signal or a road sign.
+Information contained in dialogue includes:<br>
+- <em>direction</em> ?is an internal counter that indicates direction to which signal applies.
+</p>
+<p>
+<a href="special.txt"><em>Powerlines</em></a> / <em>Transformer stations</em> opens dialogue that provides information about electricity supply grid (titlebar of dialogue is 'Power Lines'). Information shown includes:<br>
+- <em>Power:</em> ?value indicates amount of power supplied.<br>
+- <em>Available:</em>: ?value is shown for <a href="special.txt">Transformer Stations</a> at <a href="industry_info.txt">Industry</a> and indicates relative amount of power supplied.<br>
+- <em>Net:</em> is ID number of supply grid. Two points with the same ID number are connected.
+</p>
+<p>
+<it>Trees</it> opens a dialogue (the titlebar is 'Tree'). Information shown includes:<br>
+- <em>name</em> which provides species of tree.<br>
+- <em>age</em> age of tree in months.
+</p>
+<p>
+<em>Land</em> opens a dialogue (the titlebar is 'Land'). Information shown includes:<br>
+- <it>slope</it> which provides species of tree.<br>
+- <it>map co-ordinates</it> as shown in <a href="window.txt">bottom-bar</a>.
+</p>
+<p>
+{Tips: Option to open dialogues on private road users and pedestrians available in simunconf.tab}.
 </p>
diff --git a/simutrans/text/en/language.txt b/simutrans/text/en/language.txt
index 59ed94c..f23c13e 100644
--- a/simutrans/text/en/language.txt
+++ b/simutrans/text/en/language.txt
@@ -1,20 +1,20 @@
-<title>Language Help</title>
-
-<h1><strong>Language</strong></h1>
-
-<p>
-<strong>Language</strong> changes the language used in the game.
-</p>
-<p>
-<strong>Language</strong> opens from <a href="options.txt">Game Options</a> & with <a href="new_world.txt">Create a New Game</a>.
-</p>
-<p>
-For the game in other languages: click button to select new language; before start of game, for place names in new language.
-</p>
-<p>
-New language may only appear in new or re-opened toolbars, options & texts in the game.<br>
-If a translation is not available in the selected language, it may appear in English.
-</p>
-<p>
-Visit http://simutranslator.simutrans-germany.com to help with translating.
+<title>Language Help</title>
+
+<h1><strong>Language</strong></h1>
+
+<p>
+<strong>Language</strong> changes the language used in the game.
+</p>
+<p>
+<strong>Language</strong> opens from <a href="options.txt">Game Options</a> & with <a href="new_world.txt">Create a New Game</a>.
+</p>
+<p>
+For the game in other languages: click button to select new language; before start of game, for place names in new language.
+</p>
+<p>
+New language may only appear in new or re-opened toolbars, options & texts in the game.<br>
+If a translation is not available in the selected language, it may appear in English.
+</p>
+<p>
+Visit http://simutranslator.simutrans-germany.com to help with translating.
 </p>
diff --git a/simutrans/text/en/linemanagement.txt b/simutrans/text/en/linemanagement.txt
index ec36827..2189793 100644
--- a/simutrans/text/en/linemanagement.txt
+++ b/simutrans/text/en/linemanagement.txt
@@ -1,104 +1,104 @@
-<title>Line Management Help</title>
-
-<h1><strong>Line Management</strong></h1>
-
-<p>
-<strong>Line Management</strong>provides information and controls to manage Lines (routes and minimum quantity of goods & passengers required by a <a href="convoiinfo.txt">Convoy</a> to proceed) for a Convoy or multiple Convoys with the same route.
-</p>
-<p>
-Lines consist of <a href="station.txt">Stops</a> where vehicles pick-up and drop-off goods & passengers (water-transport vehicles may use any square of water in the catchment area of a dock) and waypoints (used to direct vehicles if more than one option is possible or provide interim destination points).
-</p>
-<p>
-Click on network-icon at top of game-view or press <a href="keys.txt">[w]</a> to open <strong>Line Management</strong>, which can be <a href="mouse.txt">re-sized</a> (click on down-arrow in titlebar to return to original size).
-</p>
-<p>
-The left hand side of <strong>Line Management</strong> lists existing Lines (to scroll list: use slider-bar on right of list), which can be filtered by transport type, click on a index-tab above list to select:<br>
-<em>All</em>: lists Lines for all vehicles.<br>
-<em>Train</em>: lists Lines for all railroad vehicles.<br>
-<em>Monorail</em>: lists Lines for all Monrail/maglev vehicles.<br>
-<em>Tram</em>: lists Lines for all trams.<br>
-<em>Truck</em>: lists Lines for all road vehicles.<br>
-<em>Ship</em>: lists Lines for all water transport vehicles.<br>
-<em>Air</em>: lists Lines for all aircraft.
-</p>
-<p>
-Colour of name of Line that appears in List indicates following:<br>
-<it>white</it> - no vehicle assigned to Line<br>
-<it>yellow</it> - ?not operational, not generating profit or loss<br>
-<it>black</it> - ?making profit, ?spare capacity, ?improvements possible<br>
-<it>blue</it> - ?making profit, little spare capapcity <br>
-<it>red</it> - line making loss<br>
-<p>
-Under the list of existing Lines are option-buttons for managing Lines.<br>
-Click on a Line in list to select (highlights name) and see information about <a href="station.txt">Stops</a>, income, and Convoys on selected Line.<br>
-If details about Stops or Convoys are only partially visible then re-size <strong>Line Management</strong> or use slider-bars to scroll information.
-</p>
-<p>
-The option-buttons, on the left, include (click to select):
-</p>
-<p>
-<em>New Line:</em>option opens controls to define a <a href="schedule.txt">Schedule</a> (a route and minimum quantity of goods and passengers required by a <a href="convoiinfo.txt">Convoy</a> to proceed) for a new Line .<br>
-Add as many <a href="station.txt">Stops</a> or waypoints required, set Wait For levels as required, then close Schedule Controls to create new Line (click x in top-left-hand corner of controls or use keyboard). The new Line will be assigned a number and listed in <strong>Line Management</strong>.<br>
-{Tips: Select transport type using index-tab before creating new line. Vehicles do not pick-up or drop-off goods & passengers at waypoints.}
-</p>
-<p>
-<em>Update Line:</em> opens controls to alter and manage the existing <a href="schedule.txt">Schedule</a> (route and minimum quantity of goods and passengers required by a <a href="convoiinfo.txt">Convoy</a> to proceed) of a Line. Changes will affect vehicles on line, once Schedule Controls have been closed (click x in top-left-hand corner).<br>
-Click on a Line name in list to select (highlights name) then click on option-button to open Schedule Controls.
-</p>
-<p>
-<em>Delete Line:</em> deletes the selected Line (a route and minimum quantity of goods and passengers required by a <a href="convoiinfo.txt">Convoy</a> to proceed).<br>
-Click on Line name in list to select (highlights name), then click on option-button to remove. No further confirmation will be required.
-</p>
-<p>
-When a Line is selected, the <a href="station.txt">Stops</a> are shown on bottom-left of <strong>Line Management</strong>. Click on a Stop listed to open its Stop Information.<br>
-Items listed for each Stop include:<br>
-<em>status-colour-bar:</em> colours indicate operation of <a href="station.txt">Stop</a> with regards to how overcrowded it is. The status-colour-bar is also used in <a href="haltlist.txt">Station List</a> and Stop Information and is the same colour displayed in the colour-bar above a Stop in game-display:<br>
-- <em>yellow:</em> not in service.<br>
-- <em>green:</em> no improvemments required.<br>
-- <em>orange:</em> improvements possible.<br>
-- <em>red:</em> improvements recommended.<br>
-{Tips: Use [!] to toggle colour-bar above Stop in game-view.} <br>
-<em>name</em> that has been assigned to Stop.<br>
-<em>number</em> of Stop (Stops are numbered if option is selected in simuconf.tab).<br>
-<em>vehicle icon(s)</em> indicate which types of vehicles can use Stop (also used in Stop Information and Station List). Icons include: bus (for road passenger vehicles), truck (for road goods vehicles), train, boat and airplane. Trams can be indicated by a bus-icon or a train-icon depending on type of station.<br>
-<em>freight icon(s)</em> indicate which items (passengers, goods and mail) a Stop can handle (also used in Stop Information and Station List).<br>
-{Tips: adding appropriate extensions can change the category of items a Stop can handle. <a href="special.txt">Post offices</a> can be added to Stops to enable handling of mail}.<br>
-<em>waiting</em> details of different goods and passengers.
-</p>
-<p>
-On the right of <strong>Line Management</strong> information on a graph, a name-box and a <a href="convoiinfo.txt">Convoy</a> list is shown for a selected Line.
-</p>
-<p>
-Click on Line name in list to select (highlights name). Click on option-buttons to toggle information, about selected Line and the vehicles assigned to it, on graph (the x-axis is time in months):
-</p>
-<p>
-- <em>Free Capacity</em> - amount of spare space in vehicle(s) for goods & passengers.
-</p>
-<p>
-- <em>Travel?ed</em> - amount of goods and passengers that used Line.
-</p>
-<p>
-- <em>Proceeds</em> - amount of income generated by vehicles.
-</p>
-<p>
-- <em>Operation Costs</em> - cost incurred by vehicles when in transit.
-</p>
-<p>
-- <a href="finances.txt"><em>Profit</em></a> - income generated less costs incurred (Proceeds less Operational Costs).
-</p>
-<p>
-- <a href="convoiinfo.txt"><em>Convoys</em></a> - number of Convoys assigned to Line.
-</p>
-<p>
-To rename Line: Click on Line name in list to select (highlights name), then click on name-box (under graph options, above listed Convoys) and type new name.
-</p>
-<p>
-When a Line is selected (click on Line name in list to highlight), the <a href="convoiinfo.txt">Convoys</a> assigned to Line are listed below the graph.<br>
-At the top of the list of vehicles: the total number of Convoys assigned to Line; income (proceeds less operation costs), capacity, and current quantity of  goods and passengers carried (% of full capacity in brackets) of all Convoys on Line is shown.<br>
-Click on a item listed to see more information about that Convoy (use slider-bar to scroll list).<br>
-Items listed for each Convoy include:<br>
-<em>name</em> that has been assigned (by default this is make of first vehicle unit <a href="depot.txt">purchased</a> or assembled for Convoy).<br>
-<em>income</em> shows profit (income generated less operation costs).<br>
-<em>Line:</em> shows the name of Line assigned to Convoy and indicates if it is in a <a href="depot.txt">depot</a>.<br>
-<em>graphics</em> show the compostion and the current level of items on board.
+<title>Line Management Help</title>
+
+<h1><strong>Line Management</strong></h1>
+
+<p>
+<strong>Line Management</strong>provides information and controls to manage Lines (routes and minimum quantity of goods & passengers required by a <a href="convoiinfo.txt">Convoy</a> to proceed) for a Convoy or multiple Convoys with the same route.
+</p>
+<p>
+Lines consist of <a href="station.txt">Stops</a> where vehicles pick-up and drop-off goods & passengers (water-transport vehicles may use any square of water in the catchment area of a dock) and waypoints (used to direct vehicles if more than one option is possible or provide interim destination points).
+</p>
+<p>
+Click on network-icon at top of game-view or press <a href="keys.txt">[w]</a> to open <strong>Line Management</strong>, which can be <a href="mouse.txt">re-sized</a> (click on down-arrow in titlebar to return to original size).
+</p>
+<p>
+The left hand side of <strong>Line Management</strong> lists existing Lines (to scroll list: use slider-bar on right of list), which can be filtered by transport type, click on a index-tab above list to select:<br>
+<em>All</em>: lists Lines for all vehicles.<br>
+<em>Train</em>: lists Lines for all railroad vehicles.<br>
+<em>Monorail</em>: lists Lines for all Monrail/maglev vehicles.<br>
+<em>Tram</em>: lists Lines for all trams.<br>
+<em>Truck</em>: lists Lines for all road vehicles.<br>
+<em>Ship</em>: lists Lines for all water transport vehicles.<br>
+<em>Air</em>: lists Lines for all aircraft.
+</p>
+<p>
+Colour of name of Line that appears in List indicates following:<br>
+<it>white</it> - no vehicle assigned to Line<br>
+<it>yellow</it> - ?not operational, not generating profit or loss<br>
+<it>black</it> - ?making profit, ?spare capacity, ?improvements possible<br>
+<it>blue</it> - ?making profit, little spare capapcity <br>
+<it>red</it> - line making loss<br>
+<p>
+Under the list of existing Lines are option-buttons for managing Lines.<br>
+Click on a Line in list to select (highlights name) and see information about <a href="station.txt">Stops</a>, income, and Convoys on selected Line.<br>
+If details about Stops or Convoys are only partially visible then re-size <strong>Line Management</strong> or use slider-bars to scroll information.
+</p>
+<p>
+The option-buttons, on the left, include (click to select):
+</p>
+<p>
+<em>New Line:</em>option opens controls to define a <a href="schedule.txt">Schedule</a> (a route and minimum quantity of goods and passengers required by a <a href="convoiinfo.txt">Convoy</a> to proceed) for a new Line .<br>
+Add as many <a href="station.txt">Stops</a> or waypoints required, set Wait For levels as required, then close Schedule Controls to create new Line (click x in top-left-hand corner of controls or use keyboard). The new Line will be assigned a number and listed in <strong>Line Management</strong>.<br>
+{Tips: Select transport type using index-tab before creating new line. Vehicles do not pick-up or drop-off goods & passengers at waypoints.}
+</p>
+<p>
+<em>Update Line:</em> opens controls to alter and manage the existing <a href="schedule.txt">Schedule</a> (route and minimum quantity of goods and passengers required by a <a href="convoiinfo.txt">Convoy</a> to proceed) of a Line. Changes will affect vehicles on line, once Schedule Controls have been closed (click x in top-left-hand corner).<br>
+Click on a Line name in list to select (highlights name) then click on option-button to open Schedule Controls.
+</p>
+<p>
+<em>Delete Line:</em> deletes the selected Line (a route and minimum quantity of goods and passengers required by a <a href="convoiinfo.txt">Convoy</a> to proceed).<br>
+Click on Line name in list to select (highlights name), then click on option-button to remove. No further confirmation will be required.
+</p>
+<p>
+When a Line is selected, the <a href="station.txt">Stops</a> are shown on bottom-left of <strong>Line Management</strong>. Click on a Stop listed to open its Stop Information.<br>
+Items listed for each Stop include:<br>
+<em>status-colour-bar:</em> colours indicate operation of <a href="station.txt">Stop</a> with regards to how overcrowded it is. The status-colour-bar is also used in <a href="haltlist.txt">Station List</a> and Stop Information and is the same colour displayed in the colour-bar above a Stop in game-display:<br>
+- <em>yellow:</em> not in service.<br>
+- <em>green:</em> no improvemments required.<br>
+- <em>orange:</em> improvements possible.<br>
+- <em>red:</em> improvements recommended.<br>
+{Tips: Use [!] to toggle colour-bar above Stop in game-view.} <br>
+<em>name</em> that has been assigned to Stop.<br>
+<em>number</em> of Stop (Stops are numbered if option is selected in simuconf.tab).<br>
+<em>vehicle icon(s)</em> indicate which types of vehicles can use Stop (also used in Stop Information and Station List). Icons include: bus (for road passenger vehicles), truck (for road goods vehicles), train, boat and airplane. Trams can be indicated by a bus-icon or a train-icon depending on type of station.<br>
+<em>freight icon(s)</em> indicate which items (passengers, goods and mail) a Stop can handle (also used in Stop Information and Station List).<br>
+{Tips: adding appropriate extensions can change the category of items a Stop can handle. <a href="special.txt">Post offices</a> can be added to Stops to enable handling of mail}.<br>
+<em>waiting</em> details of different goods and passengers.
+</p>
+<p>
+On the right of <strong>Line Management</strong> information on a graph, a name-box and a <a href="convoiinfo.txt">Convoy</a> list is shown for a selected Line.
+</p>
+<p>
+Click on Line name in list to select (highlights name). Click on option-buttons to toggle information, about selected Line and the vehicles assigned to it, on graph (the x-axis is time in months):
+</p>
+<p>
+- <em>Free Capacity</em> - amount of spare space in vehicle(s) for goods & passengers.
+</p>
+<p>
+- <em>Travel?ed</em> - amount of goods and passengers that used Line.
+</p>
+<p>
+- <em>Proceeds</em> - amount of income generated by vehicles.
+</p>
+<p>
+- <em>Operation Costs</em> - cost incurred by vehicles when in transit.
+</p>
+<p>
+- <a href="finances.txt"><em>Profit</em></a> - income generated less costs incurred (Proceeds less Operational Costs).
+</p>
+<p>
+- <a href="convoiinfo.txt"><em>Convoys</em></a> - number of Convoys assigned to Line.
+</p>
+<p>
+To rename Line: Click on Line name in list to select (highlights name), then click on name-box (under graph options, above listed Convoys) and type new name.
+</p>
+<p>
+When a Line is selected (click on Line name in list to highlight), the <a href="convoiinfo.txt">Convoys</a> assigned to Line are listed below the graph.<br>
+At the top of the list of vehicles: the total number of Convoys assigned to Line; income (proceeds less operation costs), capacity, and current quantity of  goods and passengers carried (% of full capacity in brackets) of all Convoys on Line is shown.<br>
+Click on a item listed to see more information about that Convoy (use slider-bar to scroll list).<br>
+Items listed for each Convoy include:<br>
+<em>name</em> that has been assigned (by default this is make of first vehicle unit <a href="depot.txt">purchased</a> or assembled for Convoy).<br>
+<em>income</em> shows profit (income generated less operation costs).<br>
+<em>Line:</em> shows the name of Line assigned to Convoy and indicates if it is in a <a href="depot.txt">depot</a>.<br>
+<em>graphics</em> show the compostion and the current level of items on board.
 </p>
diff --git a/simutrans/text/en/list.txt b/simutrans/text/en/list.txt
index 533b79a..7c88bad 100644
--- a/simutrans/text/en/list.txt
+++ b/simutrans/text/en/list.txt
@@ -1,35 +1,35 @@
-<title>Lists Help</title>
-
-<h1><strong>Lists</strong></h1>
-
-<p>
-<strong>Lists</strong> has options to open controls for information about the current status of the game (and also a control to adjust relative income recieved from the transport of different <a href="goods_filter.txt">goods, passengers & mail</a>).
-</p>
-<p>
-Information is available for a player in lists about: <a href="station.txt">Stops</a>; <a href="convoiinfo.txt">Convoys</a>; <a href="citywindow.txt">urban areas</a>; incomes received from different <a href="goods_filter.txt">goods</a>, passengers & mail; <a href="industry_info.txt">industry</a>; and tourist attractions.
-</p>
-<p>
-Click on list-icon at top of game-view to open <strong>Lists</strong>.<br>
-Hover mouse-cursor, after opening or clicking on toolbar, over list-tool-option to see name.
-</p>
-<p>
-Click on tool-option to open controls for information, from left to right, about:
-</p>
-<p>
-<a href="haltlist.txt"><em>Station List:</em></a> <a href="station.txt">Stops</a>, where vehicles pick-up and drop-off goods & passengers (but not Stops just for water-transport-vehicles).
-</p>
-<p>
-<a href="convoi.txt"><em>Vehicle List:</em></a> road and rail <a href="convoiinfo.txt">vehicles</a>, aircraft and boats.
-</p>
-<p>
-<a href="citylist_filter.txt"><em>List of all towns:</em></a> <a href="citywindow.txt">urban areas</a> (villages, towns and cities).
-</p>
-<p>
-<a href="goods_filter.txt"><em>List of all goods:</em></a> incomes received from different goods, passengers & mail (includes control to adjust relative income).
-</p>
-<p>
-<a href="factorylist_filter.txt"><em>Factory List:</em></a> <a href="industry_info.txt">industry</a> (consumers and suppliers of goods).
-</p>
-<p>
-<a href="curiositylist_filter.txt"><em>Attraction List:</em></a> tourist attractions.
+<title>Lists Help</title>
+
+<h1><strong>Lists</strong></h1>
+
+<p>
+<strong>Lists</strong> has options to open controls for information about the current status of the game (and also a control to adjust relative income recieved from the transport of different <a href="goods_filter.txt">goods, passengers & mail</a>).
+</p>
+<p>
+Information is available for a player in lists about: <a href="station.txt">Stops</a>; <a href="convoiinfo.txt">Convoys</a>; <a href="citywindow.txt">urban areas</a>; incomes received from different <a href="goods_filter.txt">goods</a>, passengers & mail; <a href="industry_info.txt">industry</a>; and tourist attractions.
+</p>
+<p>
+Click on list-icon at top of game-view to open <strong>Lists</strong>.<br>
+Hover mouse-cursor, after opening or clicking on toolbar, over list-tool-option to see name.
+</p>
+<p>
+Click on tool-option to open controls for information, from left to right, about:
+</p>
+<p>
+<a href="haltlist.txt"><em>Station List:</em></a> <a href="station.txt">Stops</a>, where vehicles pick-up and drop-off goods & passengers (but not Stops just for water-transport-vehicles).
+</p>
+<p>
+<a href="convoi.txt"><em>Vehicle List:</em></a> road and rail <a href="convoiinfo.txt">vehicles</a>, aircraft and boats.
+</p>
+<p>
+<a href="citylist_filter.txt"><em>List of all towns:</em></a> <a href="citywindow.txt">urban areas</a> (villages, towns and cities).
+</p>
+<p>
+<a href="goods_filter.txt"><em>List of all goods:</em></a> incomes received from different goods, passengers & mail (includes control to adjust relative income).
+</p>
+<p>
+<a href="factorylist_filter.txt"><em>Factory List:</em></a> <a href="industry_info.txt">industry</a> (consumers and suppliers of goods).
+</p>
+<p>
+<a href="curiositylist_filter.txt"><em>Attraction List:</em></a> tourist attractions.
 </p>
diff --git a/simutrans/text/en/load.txt b/simutrans/text/en/load.txt
index 3ad5f59..c18c820 100644
--- a/simutrans/text/en/load.txt
+++ b/simutrans/text/en/load.txt
@@ -1,25 +1,25 @@
-<title>Load Help</title>
-
-<h1><strong>Load</strong></h1>
-
-<p>
-<strong>Load</strong> re-starts a <a href="save.txt">saved</a> game (to continue play) & can be used to delete these games. A game that is re-started replaces the current world which is lost.
-</p>
-<p>
-<strong>Load</strong> opens from <a href="new_world.txt">Create New World</a> & <a href="options.txt">Game Options</a> or by pressing <a href="keys.txt">[L]</a>; & list names, date & time (of save) of available games.<br>
-If all games are not visible: use <a href="mouse.txt">slider-bar</a> on right-side of list to scroll names.
-</p>
-<p>
-Click on name in list to re-start game; or enter name into box at top of Load: click on box, type name, & press [Enter] or [Return] or click on <em>OK</em>.<br>
-An incorrect name will receive an error message: close message, try again.
-</p>
-<p>
-WARNING: Click x-button by name to DELETE game immediately & permanently.<br>
-The name is removed from list and <strong>Load</strong> closes. Use this function carefully.
-</p>
-<p>
-IMPORTANT: New releases of Simutrans appear regularly & games from previous releases of Simutrans may not work with later versions; please read release notes for later version to see if old games are compatible.
-</p>
-<p>
-Click on <em>Cancel</em> to close <strong>Load</strong>; or x in top-left-corner; or use keyboard.
+<title>Load Help</title>
+
+<h1><strong>Load</strong></h1>
+
+<p>
+<strong>Load</strong> re-starts a <a href="save.txt">saved</a> game (to continue play) & can be used to delete these games. A game that is re-started replaces the current world which is lost.
+</p>
+<p>
+<strong>Load</strong> opens from <a href="new_world.txt">Create New World</a> & <a href="options.txt">Game Options</a> or by pressing <a href="keys.txt">[L]</a>; & list names, date & time (of save) of available games.<br>
+If all games are not visible: use <a href="mouse.txt">slider-bar</a> on right-side of list to scroll names.
+</p>
+<p>
+Click on name in list to re-start game; or enter name into box at top of Load: click on box, type name, & press [Enter] or [Return] or click on <em>OK</em>.<br>
+An incorrect name will receive an error message: close message, try again.
+</p>
+<p>
+WARNING: Click x-button by name to DELETE game immediately & permanently.<br>
+The name is removed from list and <strong>Load</strong> closes. Use this function carefully.
+</p>
+<p>
+IMPORTANT: New releases of Simutrans appear regularly & games from previous releases of Simutrans may not work with later versions; please read release notes for later version to see if old games are compatible.
+</p>
+<p>
+Click on <em>Cancel</em> to close <strong>Load</strong>; or x in top-left-corner; or use keyboard.
 </p>
diff --git a/simutrans/text/en/load_relief.txt b/simutrans/text/en/load_relief.txt
index 87159e0..71b2ee4 100644
--- a/simutrans/text/en/load_relief.txt
+++ b/simutrans/text/en/load_relief.txt
@@ -1,26 +1,26 @@
-<title>Load Height Map Help</title>
-
-<h1><strong>Load Height Map</strong></h1>
-
-<p>
-<strong>Load Height Map</strong> is used to open a file of a custom-made terrain (to use for a new game) & can be used to delete these files.<br>
-<p>
-<strong>Load Height Map</strong> opens from <a href="new_world.txt">Create a New Game</a>; & list names, date & time (of save) of available custom-terrains.<br>
-If all files are not visible: use <a href="mouse.txt">slider-bar</a> on the right side of list, to scroll through the names.
-</p>
-<p>
-Click on name in list to use a custom-terrain; or enter name into box at top of window: click on box, type name, & press <a href="keys.txt">[Enter]</a> or [Return] or click on<em>OK</em>(an incorrect name will have no effect, try again).
-</p>
-<p>
-WARNING: Click x-button by left of name to DELETE file immediately & permanently, the filename is removed from list and <strong>Load Height Map</strong> closes. Use this function carefully.
-</p>
-<p>
-Some custom-made terrains are available online at http://maps.simutrans.com.<br>
-The new file must be in .ppm or .bmp format (best 256 colors RLE compressed) and placed in the personal directory (or folder) named simutrans/maps/
-</p>
-<p>
-Information on how to create custom terrains is available online at http://wiki.simutrans.com
-</p>
-<p>
-Click on <em>Cancel</em> to close <strong>Load Height Map</strong>; or x in top-left-corner; or use keyboard.
+<title>Load Height Map Help</title>
+
+<h1><strong>Load Height Map</strong></h1>
+
+<p>
+<strong>Load Height Map</strong> is used to open a file of a custom-made terrain (to use for a new game) & can be used to delete these files.<br>
+<p>
+<strong>Load Height Map</strong> opens from <a href="new_world.txt">Create a New Game</a>; & list names, date & time (of save) of available custom-terrains.<br>
+If all files are not visible: use <a href="mouse.txt">slider-bar</a> on the right side of list, to scroll through the names.
+</p>
+<p>
+Click on name in list to use a custom-terrain; or enter name into box at top of window: click on box, type name, & press <a href="keys.txt">[Enter]</a> or [Return] or click on<em>OK</em>(an incorrect name will have no effect, try again).
+</p>
+<p>
+WARNING: Click x-button by left of name to DELETE file immediately & permanently, the filename is removed from list and <strong>Load Height Map</strong> closes. Use this function carefully.
+</p>
+<p>
+Some custom-made terrains are available online at http://maps.simutrans.com.<br>
+The new file must be in .ppm or .bmp format (best 256 colors RLE compressed) and placed in the personal directory (or folder) named simutrans/maps/
+</p>
+<p>
+Information on how to create custom terrains is available online at http://wiki.simutrans.com
+</p>
+<p>
+Click on <em>Cancel</em> to close <strong>Load Height Map</strong>; or x in top-left-corner; or use keyboard.
 </p>
diff --git a/simutrans/text/en/mailbox.txt b/simutrans/text/en/mailbox.txt
index 6455232..610ca1d 100644
--- a/simutrans/text/en/mailbox.txt
+++ b/simutrans/text/en/mailbox.txt
@@ -1,56 +1,56 @@
-<title>Message Centre & Message Centre Options Help</title>
-
-<h1><strong>Message Centre</strong></h1>
-
-<p>
-<strong>Message Centre</strong> lists messages from game and opens controls to select how messages are shown in game.
-</p>
-<p>
-Click on mailbox-icon at top of game-view or press <a href="keys.txt">[B]</a> to open <strong>Message Centre</strong>, which lists messages from game.<br>
-Click on a message to move game-view to a related position.
-</p>
-<p>
-<em>Options</em> button (click to use) opens <strong>Message Centre Options</strong> which has controls to determine how messages are displayed.
-</p>
-<br>
-<p>
-<strong>Message Centre Options</strong>
-</p>
-<p>
-<strong>Message Centre Options</strong> has three columns of square-buttons which select how messages are displayed.
-</p>
-<p>
-From left to right, the columns select whether messages are shown as: a scroll-text at bottom of game-view; a temporary message; or a permanent message.<br>
-{Tips: Click on x in top-left-corner of message or use keyboard to close permanent messages.}
-</p>
-<p>
-Click on square-buttons to select message options (buttons are indented when selected) for following messages:
-</p>
-<p>
-<em>New Year:</em> a new year has started.
-</p>
-<p>
-<em>AI News:</em> an <a href="players.txt">AI player</a>
- has opened a new line.
-</p>
-<p>
-<em>City News:</em> an <a href="citywindow.txt">urban area</a> is building a bigger townhall.
-</p>
-<p>
-<em>No Route:</em> a vehicle can not find a route to its next <a href="schedule.txt">destination</a> (a <a href="station.txt">Stop</a> or waypoint).
-</p>
-<p>
-<em>New Industries:</em> a new <a href="industryinfo.txt">industry</a> chain (an end-consumer and any necessary suppliers) has been built due to <a href="citywindow.txt">town</a> growth.
-</p>
-<p>
-<em>Tourist:</em> a city <a href="curiositylist_filter.txt">attraction</a> or memorial has been built.
-</p>
-<p>
-<em>New Vehicles:</em> a new vehicle becomes available, or a vehicle is retired (if <a href="new_world.txt">timeline</a> is used).
-</p>
-<p>
-<em>Station full:</em> a <a href="station.txt">Stop</a> is overcrowded.
-</p>
-<p>
-<em>Problems:</em> player company is in debt and other critical messages.
+<title>Message Centre & Message Centre Options Help</title>
+
+<h1><strong>Message Centre</strong></h1>
+
+<p>
+<strong>Message Centre</strong> lists messages from game and opens controls to select how messages are shown in game.
+</p>
+<p>
+Click on mailbox-icon at top of game-view or press <a href="keys.txt">[B]</a> to open <strong>Message Centre</strong>, which lists messages from game.<br>
+Click on a message to move game-view to a related position.
+</p>
+<p>
+<em>Options</em> button (click to use) opens <strong>Message Centre Options</strong> which has controls to determine how messages are displayed.
+</p>
+<br>
+<p>
+<strong>Message Centre Options</strong>
+</p>
+<p>
+<strong>Message Centre Options</strong> has three columns of square-buttons which select how messages are displayed.
+</p>
+<p>
+From left to right, the columns select whether messages are shown as: a scroll-text at bottom of game-view; a temporary message; or a permanent message.<br>
+{Tips: Click on x in top-left-corner of message or use keyboard to close permanent messages.}
+</p>
+<p>
+Click on square-buttons to select message options (buttons are indented when selected) for following messages:
+</p>
+<p>
+<em>New Year:</em> a new year has started.
+</p>
+<p>
+<em>AI News:</em> an <a href="players.txt">AI player</a>
+ has opened a new line.
+</p>
+<p>
+<em>City News:</em> an <a href="citywindow.txt">urban area</a> is building a bigger townhall.
+</p>
+<p>
+<em>No Route:</em> a vehicle can not find a route to its next <a href="schedule.txt">destination</a> (a <a href="station.txt">Stop</a> or waypoint).
+</p>
+<p>
+<em>New Industries:</em> a new <a href="industryinfo.txt">industry</a> chain (an end-consumer and any necessary suppliers) has been built due to <a href="citywindow.txt">town</a> growth.
+</p>
+<p>
+<em>Tourist:</em> a city <a href="curiositylist_filter.txt">attraction</a> or memorial has been built.
+</p>
+<p>
+<em>New Vehicles:</em> a new vehicle becomes available, or a vehicle is retired (if <a href="new_world.txt">timeline</a> is used).
+</p>
+<p>
+<em>Station full:</em> a <a href="station.txt">Stop</a> is overcrowded.
+</p>
+<p>
+<em>Problems:</em> player company is in debt and other critical messages.
 </p>
diff --git a/simutrans/text/en/map.txt b/simutrans/text/en/map.txt
index e5f7703..f6746d2 100644
--- a/simutrans/text/en/map.txt
+++ b/simutrans/text/en/map.txt
@@ -1,76 +1,76 @@
-<title>Map Help</title>
-
-<h1><strong>Map</strong></h1>
-
-<p>
-<strong>Map</strong> provides a map of the current world giving information on terrain, important locations, & transport networks. It also provides a way to move game-view around world.
-</p>
-<p>
-Click on map-icon at top of game-view or press <a href="keys.txt">[m]</a> to open <strong>Map</strong>, which can be <a href="mouse.txt">re-sized</a> or minimised. The left/right-arrows, on the titlebar, close/open in stages: map options, a min-max colour scale that shows activity level for some of the options, & a key to colours of <a href="industry_info.txt">industry</a> seen on the map.
-</p>
-<p>
-The map has three different scales: right-click on Map (or point cursor & use mouse-wheel) to cycle through scales. If whole map is not visible then change the map scale, or re-size <strong>Map</strong>, or move map to see required portion: right-click-drag map (or use slider-bars at sides).
-<p>
-</p>
-On the map, water is blue & lower land is darker than higher land. Part of world in game-view, is shown by a white-square outline in <strong>Map</strong>: top of game-view corresponds to top-left-side of white-square (North is at top of map, North-West is at top of game-view). If the white-square falls off the map, water is seen in game-view for corresponding area.
-</p>
-<p>
-To move game-view across large distances in world, left-click on map at required point or left-click-drag white-square.
-</p>
-<p>
-Point mouse-cursor at an <a href="industry_info.txt">industry</a> on map, to see name & a white line linking customer(s) which flash; hold down [Shift] first to show a red line to supplier(s).
-</p>
-<p>
-On the map (when not using the options): <a href="citywindow.txt">urban areas</a>, attractions, tunnels, ?canals appear dark grey; roads, black; rail & tram tracks, medium grey; bridges, light grey; <a href="station.txt">Stops</a>,?red/yellow; ; monorail/maglev track, ?orange; airport areas, ?off-white; & vehicles, yellow.
-</p>
-<p>
-Click option-buttons to show/hide details on map of:
-</p>
-<p>
-<em>Cities:</em> names of <a href="citywindow.txt">urban areas</a>.
-</p>
-<p>
-<em>passengers:</em> catchment area for passengers by <a href="station.txt">Stops</a>.
-</p>
-<p>
-<em>Mail:</em> catchment area for mail by <a href="station.txt">Stops</a>.
-</p>
-<p>
-<em>Freight:</em>level of goods & passengers on roads & track (use min-max scale).
-</p>
-<p>
-<a href="station.txt"><em>Stop</em></a> <em>status:</em> colours indicate operation of Stop with regards to how overcrowded it is. The same colour is shown in status-colour-bars in <a href="haltlist.txt">Station List</a> & <a href="station.txt">Stop Information</a> & <a href="linemanagement.txt">Line Management</a> and is the same colour displayed in the colour-bar above the name of a Stop in game-display).
-</p>
-<p>
-<em>Service:</em> level of goods & passengers using a <a href="station.txt">Stop</a>(use min-max scale).
-</p>
-<p>
-<em>Traffic:</em> level of <a href="convoiinfo.txt">vehicles</a> on roads & track (use min-max scale).
-</p>
-<p>
-<em>Origin:</em> level of goods & passengers that start journey at <a href="station.txt">Stop</a> (use min-max scale).
-</p>
-<p>
-<em>Destination:</em> level of goods & passengers terminating journey at a <a href="station.txt">Stop</a> (use min-max scale).
-</p>
-<p>
-<em>Waiting:</em> level of goods & passengers waiting for transport at a <a href="station.txt">Stop</a> (use min-max scale).
-</p>
-<p>
-<em>Tracks:</em> rail & tram tracks & signals; tracks, bridges & tunnels are shown as white (red if electric) & signals are shown as yellow.
-</p>
-<p>
-<em>Speed Limit:</em> road & track is shown by maximum speed allowed (use min-max scale).
-</p>
-<p>
-<em>Powerlines:</em> <a href="special.txt">power transmission lines</a> (use min-max scale to see supply level at time Map was opened).
-</p>
-<p>
-<em>Attractions:</em> level of passengers that tourist attractions generate (use min-max scale), option also emphasizes attraction on map.
-</p>
-<p>
-<em>Factories:</em> emphasized <a href="industry_info.txt">industry</a>; highlights consumers & suppliers on map.
-</p>
-<p>
-<em>Depots:</em> emphasized <a href="depot.txt">depots</a>. ?Colours indicate transport type: ship, yellow; road, orange; rail, red; aircraft, green; trams, blue; and monorail, grey.
+<title>Map Help</title>
+
+<h1><strong>Map</strong></h1>
+
+<p>
+<strong>Map</strong> provides a map of the current world giving information on terrain, important locations, & transport networks. It also provides a way to move game-view around world.
+</p>
+<p>
+Click on map-icon at top of game-view or press <a href="keys.txt">[m]</a> to open <strong>Map</strong>, which can be <a href="mouse.txt">re-sized</a> or minimised. The left/right-arrows, on the titlebar, close/open in stages: map options, a min-max colour scale that shows activity level for some of the options, & a key to colours of <a href="industry_info.txt">industry</a> seen on the map.
+</p>
+<p>
+The map has three different scales: right-click on Map (or point cursor & use mouse-wheel) to cycle through scales. If whole map is not visible then change the map scale, or re-size <strong>Map</strong>, or move map to see required portion: right-click-drag map (or use slider-bars at sides).
+<p>
+</p>
+On the map, water is blue & lower land is darker than higher land. Part of world in game-view, is shown by a white-square outline in <strong>Map</strong>: top of game-view corresponds to top-left-side of white-square (North is at top of map, North-West is at top of game-view). If the white-square falls off the map, water is seen in game-view for corresponding area.
+</p>
+<p>
+To move game-view across large distances in world, left-click on map at required point or left-click-drag white-square.
+</p>
+<p>
+Point mouse-cursor at an <a href="industry_info.txt">industry</a> on map, to see name & a white line linking customer(s) which flash; hold down [Shift] first to show a red line to supplier(s).
+</p>
+<p>
+On the map (when not using the options): <a href="citywindow.txt">urban areas</a>, attractions, tunnels, ?canals appear dark grey; roads, black; rail & tram tracks, medium grey; bridges, light grey; <a href="station.txt">Stops</a>,?red/yellow; ; monorail/maglev track, ?orange; airport areas, ?off-white; & vehicles, yellow.
+</p>
+<p>
+Click option-buttons to show/hide details on map of:
+</p>
+<p>
+<em>Cities:</em> names of <a href="citywindow.txt">urban areas</a>.
+</p>
+<p>
+<em>passengers:</em> catchment area for passengers by <a href="station.txt">Stops</a>.
+</p>
+<p>
+<em>Mail:</em> catchment area for mail by <a href="station.txt">Stops</a>.
+</p>
+<p>
+<em>Freight:</em>level of goods & passengers on roads & track (use min-max scale).
+</p>
+<p>
+<a href="station.txt"><em>Stop</em></a> <em>status:</em> colours indicate operation of Stop with regards to how overcrowded it is. The same colour is shown in status-colour-bars in <a href="haltlist.txt">Station List</a> & <a href="station.txt">Stop Information</a> & <a href="linemanagement.txt">Line Management</a> and is the same colour displayed in the colour-bar above the name of a Stop in game-display).
+</p>
+<p>
+<em>Service:</em> level of goods & passengers using a <a href="station.txt">Stop</a>(use min-max scale).
+</p>
+<p>
+<em>Traffic:</em> level of <a href="convoiinfo.txt">vehicles</a> on roads & track (use min-max scale).
+</p>
+<p>
+<em>Origin:</em> level of goods & passengers that start journey at <a href="station.txt">Stop</a> (use min-max scale).
+</p>
+<p>
+<em>Destination:</em> level of goods & passengers terminating journey at a <a href="station.txt">Stop</a> (use min-max scale).
+</p>
+<p>
+<em>Waiting:</em> level of goods & passengers waiting for transport at a <a href="station.txt">Stop</a> (use min-max scale).
+</p>
+<p>
+<em>Tracks:</em> rail & tram tracks & signals; tracks, bridges & tunnels are shown as white (red if electric) & signals are shown as yellow.
+</p>
+<p>
+<em>Speed Limit:</em> road & track is shown by maximum speed allowed (use min-max scale).
+</p>
+<p>
+<em>Powerlines:</em> <a href="special.txt">power transmission lines</a> (use min-max scale to see supply level at time Map was opened).
+</p>
+<p>
+<em>Attractions:</em> level of passengers that tourist attractions generate (use min-max scale), option also emphasizes attraction on map.
+</p>
+<p>
+<em>Factories:</em> emphasized <a href="industry_info.txt">industry</a>; highlights consumers & suppliers on map.
+</p>
+<p>
+<em>Depots:</em> emphasized <a href="depot.txt">depots</a>. ?Colours indicate transport type: ship, yellow; road, orange; rail, red; aircraft, green; trams, blue; and monorail, grey.
 </p>
diff --git a/simutrans/text/en/monorailtools.txt b/simutrans/text/en/monorailtools.txt
index 104579e..3457919 100644
--- a/simutrans/text/en/monorailtools.txt
+++ b/simutrans/text/en/monorailtools.txt
@@ -1,56 +1,56 @@
-<title>Monorail/maglev Tools Help</title>
-
-<h1><strong>Monorail/maglev Tools</strong></h1>
-
-<p>
-<strong>Monorail/maglev Tools</strong> construct a Monorail/maglev transport network. Tools may build or remove: monorail and maglev track; bridges; tunnels; signals; depots; station-platforms; & extensions. If playing with <a href="new_world.txt">timeline</a>, then as time passes in Simutrans more tool-options may appear.
-</p>
-<p>
-Click monorail/maglev-icon at top of game-view to open toolbar.<br>
-Hover mouse-cursor over tool-option (after opening or clicking on toolbar) to see name & where appropriate: construction <a href="finances.txt">cost</a>, maintenance cost in brackets, maximum speed limit & maximum length.
-</p>
-<p>
-<strong>Monorail/maglev Tools</strong> include, from left to right:
-</p>
-<p>
-<em>Monorail/maglev Track:</em> tools build Tracks, for monorail/maglev vehicles between two points. Tracks can only be built on slopes in the direction of the slope & may not find a path across rough terrain, water and obstructions. New Track built may use existing Track in its path.<br>
-To build Track: click on tool to select Track (changes cursor to track), then click on game-view for start-point of Track (shows a bulldozer in game-view and map co-ordinates at on right of bottom-bar under game-view), & finally click on game-view for end-point for Track.<br>
-{Tips: Different types of Tracks may connect (however not when built by some other <a href="players.txt">players</a>). Use <a href="slopetools.txt"> Landscape tools</a> to change terrain, to enable paths for Track. Use Destroy/Remove to remove individual pieces of Track & some obstructions. Use <a href="keys.txt">[Ctrl]</a> at same time for extra functions. Undo last route construction, [z], does not refund constructions costs.}
-</p>
-<p>
-<em>Remove monorails:</em> tool removes monorail/maglev Track, when no vehicles are present, between two points in game-view (platforms and signals in path are removed too).<br>
-Use of tool incurs a <a href="finances.txt">construction cost</a>.<br>
-To remove Track: click on tool (changes cursor to a red-cross); then click on Track that is to be deleted (selects deletion point shown by a red cross in game-view); & finally click at another point on track, to remove portion up to first deletion point.<br>
-{Tips: Operate as another player to remove their Tracks.}
-</p>
-<p>
-<em>Ramps</em> and <em>Bridges:</em> tools build straight bridges, for monorail/maglev vehicles to pass, between two pieces of monorail/maglev Track in game-view. Bridges have a maximum span. Tools build bridges from an end of a Track to a suitable place (another Track-end or slightly higher land, within span).<br>
-To build a ramp or bridge: click on tool to select (changes cursor to bridge), then click on the end of a Track (start-point of bridge) to build. Some obstructions or lack of a suitable place for bridge-ends will prevent bridge being built: place Track at both sides that is to be bridged, & try again.<br>
-{Tips: Use Destroy/Remove to remove bridges (click on bridge-end) & some obstructions to bridge building. Use Track tools to connect bridge-ends to Track.}
-</p>
-<p>
-<em>Monorail Signals:</em> tools build signals for monorail and maglev vehicles on a Track in game-view. Signals direct & regulate flow of vehicles on Tracks & bridges, junctions & <a href="station.txt">Stops</a> (where vehicles pick-up and drop off passengers).<br>
-Two-way & one-way versions of signals can be built. To build a two-way signal on Track: click on tool to select signal (changes cursor to signals); then click on Track. To build a one-way signal: click again at same point, with signals-cursor, to cycle through one-way signals, back to a two-way signal.<br>
-IMPORTANT: Take care not to place one-way signals that prevent vehicles reaching their destination, by default vehicles drive on the right (can be changed in simuconf.tab).<br>
-- <em>Signals:</em> vehicles proceed only if Track ahead up to next signal or destination in <a href="schedule.txt">Schedule</a> (a <a href="station.txt">Stop</a> or waypoint) is not occupied by another vehicle. In one-way mode vehicles pass in one direction only.<br>
-- <em>PreSignals:</em> vehicles proceed if area of Track ahead (either between three consecutive signals or to next destination in <a href="schedule.txt">Schedule</a>) is not occupied by another vehicle. In one-way mode they let vehicles pass in one direction only.<br>
-- <em>ChooseSignals:</em> direct vehicles to an empty station-platform, at a multi-platform <a href="station.txt">Stop</a>: a vehicle passing this signal may use any empty platform at its next destination, and not just the one assigned in its <a href="schedule.txt">schedule</a>. If no empty platform or clear route to next destination is found, then vehicles wait at signal.<br>
-{Tips:  Remove signals with Destroy/Remove. Hold down [Ctrl] to place signals on bridges over lower Tracks.}
-</p>
-<p>
-<em>Monorail</em> <a href="depot.txt"><em>Depot:</em></a> tool builds a depot for purchasing & managing monrail/maglev vehicles and carriages. Depots have a maintenance cost & are built on the end of monorail/maglev Track in game-view.<br>
-To build a monorail depot: click on tool (changes cursor to a depot), then click on end of Track.
-</p>
-<p>
-<em>Train-stops:</em> tools build station-platforms, used by monorail/maglev vehicles to pick-up and drop-off passengers & mail.<br>
-A station-platform when not built adjacent to an existing <a href="station.txt">Stop</a> will create a new Stop.<br>
-Train-stops have a maintenance cost & are built on track (but not at bends and junctions in track).<br>
-Train-stops have a catchment area for goods, passengers & mail. Different station-platforms may have different capacities for goods, passengers & mail. . In the corner of some tool-options an icon (used in <a href="haltlist.txt">Station List</a> & <a href="station.txt">Stop Information</a>) shows which items the station-platform allows a Stop to handle.<br>
-To build a a station-platform: click on tool to select (changes cursor to a platform), then click on Track.<br>
-{Tips: Remove train-stops with Destroy/Remove. Extend station-platforms & build multi-platform Stops (by building more platform sections on adjacent track) to accommodate longer and more vehicles, increase capacity & catchment area. Press [v] to show/hide catchment area for goods & passengers in game-view. Hold down [Ctrl] to build on bridges or elevated Track above lower Tracks.}
-</p>
-<p>
-<em>Monorail Foundation:</em>tool constructs ?an extension to a <a href="station.txt">Stop</a> and increases the capacity of the Stop. Monorail foundations are built on ends of monorail/maglev Track and have a maintenance cost.<br>
-To build an monorail foundation: click on tool to select (changes cursor to foundation), then click required position on the end of a track.<br>
-{Tips: Remove monorail foundations with Destroy/Remove.}
+<title>Monorail/maglev Tools Help</title>
+
+<h1><strong>Monorail/maglev Tools</strong></h1>
+
+<p>
+<strong>Monorail/maglev Tools</strong> construct a Monorail/maglev transport network. Tools may build or remove: monorail and maglev track; bridges; tunnels; signals; depots; station-platforms; & extensions. If playing with <a href="new_world.txt">timeline</a>, then as time passes in Simutrans more tool-options may appear.
+</p>
+<p>
+Click monorail/maglev-icon at top of game-view to open toolbar.<br>
+Hover mouse-cursor over tool-option (after opening or clicking on toolbar) to see name & where appropriate: construction <a href="finances.txt">cost</a>, maintenance cost in brackets, maximum speed limit & maximum length.
+</p>
+<p>
+<strong>Monorail/maglev Tools</strong> include, from left to right:
+</p>
+<p>
+<em>Monorail/maglev Track:</em> tools build Tracks, for monorail/maglev vehicles between two points. Tracks can only be built on slopes in the direction of the slope & may not find a path across rough terrain, water and obstructions. New Track built may use existing Track in its path.<br>
+To build Track: click on tool to select Track (changes cursor to track), then click on game-view for start-point of Track (shows a bulldozer in game-view and map co-ordinates at on right of bottom-bar under game-view), & finally click on game-view for end-point for Track.<br>
+{Tips: Different types of Tracks may connect (however not when built by some other <a href="players.txt">players</a>). Use <a href="slopetools.txt"> Landscape tools</a> to change terrain, to enable paths for Track. Use Destroy/Remove to remove individual pieces of Track & some obstructions. Use <a href="keys.txt">[Ctrl]</a> at same time for extra functions. Undo last route construction, [z], does not refund constructions costs.}
+</p>
+<p>
+<em>Remove monorails:</em> tool removes monorail/maglev Track, when no vehicles are present, between two points in game-view (platforms and signals in path are removed too).<br>
+Use of tool incurs a <a href="finances.txt">construction cost</a>.<br>
+To remove Track: click on tool (changes cursor to a red-cross); then click on Track that is to be deleted (selects deletion point shown by a red cross in game-view); & finally click at another point on track, to remove portion up to first deletion point.<br>
+{Tips: Operate as another player to remove their Tracks.}
+</p>
+<p>
+<em>Ramps</em> and <em>Bridges:</em> tools build straight bridges, for monorail/maglev vehicles to pass, between two pieces of monorail/maglev Track in game-view. Bridges have a maximum span. Tools build bridges from an end of a Track to a suitable place (another Track-end or slightly higher land, within span).<br>
+To build a ramp or bridge: click on tool to select (changes cursor to bridge), then click on the end of a Track (start-point of bridge) to build. Some obstructions or lack of a suitable place for bridge-ends will prevent bridge being built: place Track at both sides that is to be bridged, & try again.<br>
+{Tips: Use Destroy/Remove to remove bridges (click on bridge-end) & some obstructions to bridge building. Use Track tools to connect bridge-ends to Track.}
+</p>
+<p>
+<em>Monorail Signals:</em> tools build signals for monorail and maglev vehicles on a Track in game-view. Signals direct & regulate flow of vehicles on Tracks & bridges, junctions & <a href="station.txt">Stops</a> (where vehicles pick-up and drop off passengers).<br>
+Two-way & one-way versions of signals can be built. To build a two-way signal on Track: click on tool to select signal (changes cursor to signals); then click on Track. To build a one-way signal: click again at same point, with signals-cursor, to cycle through one-way signals, back to a two-way signal.<br>
+IMPORTANT: Take care not to place one-way signals that prevent vehicles reaching their destination, by default vehicles drive on the right (can be changed in simuconf.tab).<br>
+- <em>Signals:</em> vehicles proceed only if Track ahead up to next signal or destination in <a href="schedule.txt">Schedule</a> (a <a href="station.txt">Stop</a> or waypoint) is not occupied by another vehicle. In one-way mode vehicles pass in one direction only.<br>
+- <em>PreSignals:</em> vehicles proceed if area of Track ahead (either between three consecutive signals or to next destination in <a href="schedule.txt">Schedule</a>) is not occupied by another vehicle. In one-way mode they let vehicles pass in one direction only.<br>
+- <em>ChooseSignals:</em> direct vehicles to an empty station-platform, at a multi-platform <a href="station.txt">Stop</a>: a vehicle passing this signal may use any empty platform at its next destination, and not just the one assigned in its <a href="schedule.txt">schedule</a>. If no empty platform or clear route to next destination is found, then vehicles wait at signal.<br>
+{Tips:  Remove signals with Destroy/Remove. Hold down [Ctrl] to place signals on bridges over lower Tracks.}
+</p>
+<p>
+<em>Monorail</em> <a href="depot.txt"><em>Depot:</em></a> tool builds a depot for purchasing & managing monrail/maglev vehicles and carriages. Depots have a maintenance cost & are built on the end of monorail/maglev Track in game-view.<br>
+To build a monorail depot: click on tool (changes cursor to a depot), then click on end of Track.
+</p>
+<p>
+<em>Train-stops:</em> tools build station-platforms, used by monorail/maglev vehicles to pick-up and drop-off passengers & mail.<br>
+A station-platform when not built adjacent to an existing <a href="station.txt">Stop</a> will create a new Stop.<br>
+Train-stops have a maintenance cost & are built on track (but not at bends and junctions in track).<br>
+Train-stops have a catchment area for goods, passengers & mail. Different station-platforms may have different capacities for goods, passengers & mail. . In the corner of some tool-options an icon (used in <a href="haltlist.txt">Station List</a> & <a href="station.txt">Stop Information</a>) shows which items the station-platform allows a Stop to handle.<br>
+To build a a station-platform: click on tool to select (changes cursor to a platform), then click on Track.<br>
+{Tips: Remove train-stops with Destroy/Remove. Extend station-platforms & build multi-platform Stops (by building more platform sections on adjacent track) to accommodate longer and more vehicles, increase capacity & catchment area. Press [v] to show/hide catchment area for goods & passengers in game-view. Hold down [Ctrl] to build on bridges or elevated Track above lower Tracks.}
+</p>
+<p>
+<em>Monorail Foundation:</em>tool constructs ?an extension to a <a href="station.txt">Stop</a> and increases the capacity of the Stop. Monorail foundations are built on ends of monorail/maglev Track and have a maintenance cost.<br>
+To build an monorail foundation: click on tool to select (changes cursor to foundation), then click required position on the end of a track.<br>
+{Tips: Remove monorail foundations with Destroy/Remove.}
 </p>
diff --git a/simutrans/text/en/new_world.txt b/simutrans/text/en/new_world.txt
index 58736f0..3f9eb91 100644
--- a/simutrans/text/en/new_world.txt
+++ b/simutrans/text/en/new_world.txt
@@ -1,82 +1,82 @@
-<title>Create a New Game Help</title>
-
-<h1><strong>Create a New Game</strong></h1>
-
-<p>
-<strong>Create a New Game</strong> sets options for a new game, with a new map & settings.<br>
-Many variables include: size of terrain, initial number of urban areas & industries.<br>
-A preview of the terrain, settings generate, is shown.
-</p>
-<p>
-<strong>Create a New Game</strong> opens with <a href="language.txt">Language</a> and <a href="climates.txt">Climate Control</a> when Simutrans starts (other game-options are disabled) & also opens from <a href="options.txt">Game Options</a> (other toolbars, texts & options in current game close).<br>
-Keyboard shortcuts to open <strong>Create a New Game</strong> include keypress <a href="keys.txt">[Q]</a> and [X].
-</p>
-<p>
-To return to current game, close <strong>Create a New Game</strong>: click x in top-left-corner; or use keyboard.
-</p>
-<p>
-Arrow-buttons adjust settings and buttons switch on/off options or open new controls:
-</p>
-<p>
-<em>Map Number:</em> selects a terrain to use for game.<br>
-Click on number-box and type required number or use arrow-buttons to cycle through many terrains.<br>
-The preview shows terrain selected (water is blue, lower land is darker than higher land).
-</p>
-<p>
-<em>Size:</em> sets size of map (top number is width, bottom is height).<br>
-Number in brackets is memory required by the map<br>
-IMPORTANT: Large maps need more memory & take more time to generate. The game & other graphics require about a further 88MB in pak64 and 144MB in pak128. As a general rule of thumb, on a computer with 256MB RAM do not try maps much larger than 512 x 512 squares.
-</p>
-<p>
-<em>Random map:</em> selects new terrain i.e. a random map number, other settings remain.
-</p>
-<p>
-<a href="load_relief.txt"><em>Load Height Map:</em></a> opens controls to use available custom terrains.
-</p>
-<p>
-<em>Nr. of cities:</em> sets initial number of <a href="citywindow.txt">urban areas</a> in game.
-</p>
-<p>
-<em>Median Citizens per City:</em> sets initial population of urban areas.<br>
-The setting is an average value, Simutrans will try to generate more small villages than large cities.
-</p>
-<p>
-<em>Intercity Road Length:</em> sets initial length of roads, between urban areas, for a new game.
-</p>
-<p>
-<em>Traffic density:</em> sets number of private cars in urban areas.<br>
-Higher values create more private traffic, 0 generates none. New cars appear as urban areas grow.
-</p>
-<p>
-<em>Factories outside Cities:</em> sets initial number of <a href="industry_info.txt">Industry Supply Chains</a> outside urban areas.<br>
-If the terrain is very hilly suitable space may not be found and less industry will appear.
-</p>
-<p>
-<em>Markets in cities:</em>sets initial number of <a href="industry_info.txt">end-consumers</a> of goods in urban areas.<br>
-New consumers (and possibly suppliers, not necessarily in urban areas) appear each time the population doubles from about 2000 inhabitants onwards.
-</p>
-<p>
-<a href="curiositylist_filter.txt"><em>Tourist attractions:</em></a> sets inital number of sites outside of urban areas that attract passengers and mail.<br>
-These appear outside of urban areas and in addtion to any attractions generated with new towns or cities at the start of the game. Attractions also generate passengers and mail.
-</p>
-<p>
-<em>Use a Timeline from Year:</em> sets start year for game-world.
-When square-button is indented timeline is selected and as time passes in game more vehicles and construction options may appear.<br>
-When not selected: game-world still starts in chosen year but all vehicles & construction options appear immediately; urban areas appear with buildings from all periods; & slower vehicles are not as profitable (as income is calculated by average speed of available transport).
-</p>
-<p>
-<em>Allow player change:</em> option to play game as an AI or public service <a href="players.txt">player</a> company (option can not be accessed after new game has started).
-</p>
-<p>
-<em>Beginner mode:</em> option allows a higher level of income to be received in game-play from transporting goods and passengers (by default: 150% of values received in normal mode). Furthermore, <a href="industry_info.txt">Industry</a> will not cease supply when consumer(s) have excess supply.
-</p>
-<p>
-<a href="load.txt">
-<em>Load game:</em></a> opens controls to re-start a previously <a href="save.txt">saved</a> game, replacing the current world which is lost.
-</p>
-<p>
-<em>Start Game:</em> creates a new world, using the settings displayed. Click to start playing - Good Luck and Enjoy!
-</p>
-<p>
-{Tips: Default values when Simutrans starts and other properties can be changed in simuconf.tab}
+<title>Create a New Game Help</title>
+
+<h1><strong>Create a New Game</strong></h1>
+
+<p>
+<strong>Create a New Game</strong> sets options for a new game, with a new map & settings.<br>
+Many variables include: size of terrain, initial number of urban areas & industries.<br>
+A preview of the terrain, settings generate, is shown.
+</p>
+<p>
+<strong>Create a New Game</strong> opens with <a href="language.txt">Language</a> and <a href="climates.txt">Climate Control</a> when Simutrans starts (other game-options are disabled) & also opens from <a href="options.txt">Game Options</a> (other toolbars, texts & options in current game close).<br>
+Keyboard shortcuts to open <strong>Create a New Game</strong> include keypress <a href="keys.txt">[Q]</a> and [X].
+</p>
+<p>
+To return to current game, close <strong>Create a New Game</strong>: click x in top-left-corner; or use keyboard.
+</p>
+<p>
+Arrow-buttons adjust settings and buttons switch on/off options or open new controls:
+</p>
+<p>
+<em>Map Number:</em> selects a terrain to use for game.<br>
+Click on number-box and type required number or use arrow-buttons to cycle through many terrains.<br>
+The preview shows terrain selected (water is blue, lower land is darker than higher land).
+</p>
+<p>
+<em>Size:</em> sets size of map (top number is width, bottom is height).<br>
+Number in brackets is memory required by the map<br>
+IMPORTANT: Large maps need more memory & take more time to generate. The game & other graphics require about a further 88MB in pak64 and 144MB in pak128. As a general rule of thumb, on a computer with 256MB RAM do not try maps much larger than 512 x 512 squares.
+</p>
+<p>
+<em>Random map:</em> selects new terrain i.e. a random map number, other settings remain.
+</p>
+<p>
+<a href="load_relief.txt"><em>Load Height Map:</em></a> opens controls to use available custom terrains.
+</p>
+<p>
+<em>Nr. of cities:</em> sets initial number of <a href="citywindow.txt">urban areas</a> in game.
+</p>
+<p>
+<em>Median Citizens per City:</em> sets initial population of urban areas.<br>
+The setting is an average value, Simutrans will try to generate more small villages than large cities.
+</p>
+<p>
+<em>Intercity Road Length:</em> sets initial length of roads, between urban areas, for a new game.
+</p>
+<p>
+<em>Traffic density:</em> sets number of private cars in urban areas.<br>
+Higher values create more private traffic, 0 generates none. New cars appear as urban areas grow.
+</p>
+<p>
+<em>Factories outside Cities:</em> sets initial number of <a href="industry_info.txt">Industry Supply Chains</a> outside urban areas.<br>
+If the terrain is very hilly suitable space may not be found and less industry will appear.
+</p>
+<p>
+<em>Markets in cities:</em>sets initial number of <a href="industry_info.txt">end-consumers</a> of goods in urban areas.<br>
+New consumers (and possibly suppliers, not necessarily in urban areas) appear each time the population doubles from about 2000 inhabitants onwards.
+</p>
+<p>
+<a href="curiositylist_filter.txt"><em>Tourist attractions:</em></a> sets inital number of sites outside of urban areas that attract passengers and mail.<br>
+These appear outside of urban areas and in addtion to any attractions generated with new towns or cities at the start of the game. Attractions also generate passengers and mail.
+</p>
+<p>
+<em>Use a Timeline from Year:</em> sets start year for game-world.
+When square-button is indented timeline is selected and as time passes in game more vehicles and construction options may appear.<br>
+When not selected: game-world still starts in chosen year but all vehicles & construction options appear immediately; urban areas appear with buildings from all periods; & slower vehicles are not as profitable (as income is calculated by average speed of available transport).
+</p>
+<p>
+<em>Allow player change:</em> option to play game as an AI or public service <a href="players.txt">player</a> company (option can not be accessed after new game has started).
+</p>
+<p>
+<em>Beginner mode:</em> option allows a higher level of income to be received in game-play from transporting goods and passengers (by default: 150% of values received in normal mode). Furthermore, <a href="industry_info.txt">Industry</a> will not cease supply when consumer(s) have excess supply.
+</p>
+<p>
+<a href="load.txt">
+<em>Load game:</em></a> opens controls to re-start a previously <a href="save.txt">saved</a> game, replacing the current world which is lost.
+</p>
+<p>
+<em>Start Game:</em> creates a new world, using the settings displayed. Click to start playing - Good Luck and Enjoy!
+</p>
+<p>
+{Tips: Default values when Simutrans starts and other properties can be changed in simuconf.tab}
 </p>
diff --git a/simutrans/text/en/options.txt b/simutrans/text/en/options.txt
index fca26ec..232439c 100644
--- a/simutrans/text/en/options.txt
+++ b/simutrans/text/en/options.txt
@@ -1,41 +1,41 @@
-<title>Game Options Help</title>
-
-<h1><strong>Game Options</strong></h1>
-
-<p>
-<strong>Game Options</strong> opens controls for the operation & presentation of the game; exit Simutrans from <strong>Game Options</strong>.
-</p>
-<p>
-Click on floppydisc-icon at top of game-view to open <strong>Game Options</strong>.
-</p>
-<p>
-Click on button to open new controls:
-</p>
-<p>
-<a href="language.txt"><em>Language:</em></a> sets language used in game.
-</p>
-<p>
-<a href="color.txt"><em>Player Colour:</em></a> sets colour of Player company.
-</p>
-<p>
-<a href="display.txt"><em>Display:</em></a> settings for how game appears in Simutrans.
-</p>
-<p>
-<a href="sound.txt"><em>
-Sound:</em></a> settings for sound & music in game.
-</p>
-<p>
-<a href="players.txt"><em>Players:</em></a> opens controls for different Player companies.
-</p>
-<p>
-<a href="load.txt"><em>Load:</em></a> opens controls to re-start a saved game.
-</p>
-<p>
-<a href="save.txt"><em>Save:</em></a> opens controls to store the current game, to continue play later.
-</p>
-<p>
-<a href="new_world.txt"><em>New ?Game/Map:</em></a> opens controls to start a new game (closes other toolbars, texts & options in current game).
-</p>
-<p>
-<em>Quit:</em>exits Simutrans, current game is not saved.
+<title>Game Options Help</title>
+
+<h1><strong>Game Options</strong></h1>
+
+<p>
+<strong>Game Options</strong> opens controls for the operation & presentation of the game; exit Simutrans from <strong>Game Options</strong>.
+</p>
+<p>
+Click on floppydisc-icon at top of game-view to open <strong>Game Options</strong>.
+</p>
+<p>
+Click on button to open new controls:
+</p>
+<p>
+<a href="language.txt"><em>Language:</em></a> sets language used in game.
+</p>
+<p>
+<a href="color.txt"><em>Player Colour:</em></a> sets colour of Player company.
+</p>
+<p>
+<a href="display.txt"><em>Display:</em></a> settings for how game appears in Simutrans.
+</p>
+<p>
+<a href="sound.txt"><em>
+Sound:</em></a> settings for sound & music in game.
+</p>
+<p>
+<a href="players.txt"><em>Players:</em></a> opens controls for different Player companies.
+</p>
+<p>
+<a href="load.txt"><em>Load:</em></a> opens controls to re-start a saved game.
+</p>
+<p>
+<a href="save.txt"><em>Save:</em></a> opens controls to store the current game, to continue play later.
+</p>
+<p>
+<a href="new_world.txt"><em>New ?Game/Map:</em></a> opens controls to start a new game (closes other toolbars, texts & options in current game).
+</p>
+<p>
+<em>Quit:</em>exits Simutrans, current game is not saved.
 </p>
diff --git a/simutrans/text/en/players.txt b/simutrans/text/en/players.txt
index 3ecfad6..1f16e1d 100644
--- a/simutrans/text/en/players.txt
+++ b/simutrans/text/en/players.txt
@@ -1,32 +1,32 @@
-<title>Player List Help</title>
-
-<h1><strong>Player List</strong></h1>
-
-<p>
-<strong>Player List</strong> provides information & has controls for different player companies.
-</p>
-<p>
-Click on Players-button in <a href="options.txt">Game Options</a> or press <a href="keys.txt">[k]</a> to open <strong>Player List</strong> which shows player names & <a href="finances.txt">Account Balances</a>.
-</p>
-<p>
-There are eight players: human, public service and six AI players. Controls enable game-play as different player companies if <a href="new_world.txt">Allow player change</a> was selected at the start of the game.
-</p>
-<p>
-Click on arrow-button to operate as that player company in the current game. A confirmation message appears that player has been changed: click on x in top-left corner of message or use keyboard to close.
-</p>
-<p>
-Click on player name to see their <a href="finances.txt">Finances</a>.
-</p>
-<p>
-Click square-button by AI player name to switch on/off AI player (button is indented when player is selected).
-</p>
-<p>
-AI players do not go bankrupt & run vehicles with maximum efficiency.<br>
-Switching off an AI player during a game will not remove its transport network.<br>
-Some AI players may use just road or rail vehicles, some may transport just goods or passengers.
-</p>
-<p>
-{Tips: Vehicles may not use another players tracks or <a href="station.txt">Stops</a> (however vehicles from all players may use items built by the public service player).<br>
-Players may not build items or place waypoints on another player's track or <a href="roadtools.txt">road</a>, or remove items built by another player (however some items built by the public service player may be removed using <a href="removal_tool.txt">Destroy/Remove</a>).<br>
-Disable player-change option and access extra <a href="edittools.txt">tools</a> as the public service player.}
+<title>Player List Help</title>
+
+<h1><strong>Player List</strong></h1>
+
+<p>
+<strong>Player List</strong> provides information & has controls for different player companies.
+</p>
+<p>
+Click on Players-button in <a href="options.txt">Game Options</a> or press <a href="keys.txt">[k]</a> to open <strong>Player List</strong> which shows player names & <a href="finances.txt">Account Balances</a>.
+</p>
+<p>
+There are eight players: human, public service and six AI players. Controls enable game-play as different player companies if <a href="new_world.txt">Allow player change</a> was selected at the start of the game.
+</p>
+<p>
+Click on arrow-button to operate as that player company in the current game. A confirmation message appears that player has been changed: click on x in top-left corner of message or use keyboard to close.
+</p>
+<p>
+Click on player name to see their <a href="finances.txt">Finances</a>.
+</p>
+<p>
+Click square-button by AI player name to switch on/off AI player (button is indented when player is selected).
+</p>
+<p>
+AI players do not go bankrupt & run vehicles with maximum efficiency.<br>
+Switching off an AI player during a game will not remove its transport network.<br>
+Some AI players may use just road or rail vehicles, some may transport just goods or passengers.
+</p>
+<p>
+{Tips: Vehicles may not use another players tracks or <a href="station.txt">Stops</a> (however vehicles from all players may use items built by the public service player).<br>
+Players may not build items or place waypoints on another player's track or <a href="roadtools.txt">road</a>, or remove items built by another player (however some items built by the public service player may be removed using <a href="removal_tool.txt">Destroy/Remove</a>).<br>
+Disable player-change option and access extra <a href="edittools.txt">tools</a> as the public service player.}
 </p>
diff --git a/simutrans/text/en/railtools.txt b/simutrans/text/en/railtools.txt
index 0bf79a3..3c86bb0 100644
--- a/simutrans/text/en/railtools.txt
+++ b/simutrans/text/en/railtools.txt
@@ -1,73 +1,73 @@
-<title>?Railroad Tools Help</title>
-
-<h1><strong>>?Railroad/Train/Rail Tools</strong></h1>
-
-<p>
-<strong>?Railroad Tools</strong> construct a train transport network. Tools may build: railtrack (and electrify or remove it); bridges; tunnels; signals; depots; station platforms; & extensions. If playing with <a href="new_world.txt">timeline</a>, then as time passes in Simutrans more tool-options may appear.
-</p>
-<p>
-Click train-icon at top of game-view to open toolbar. Hover mouse-cursor over tool-option (after opening or clicking on toolbar) to see name & where appropriate: construction <a href="finances.txt">cost</a>, maintenance cost in brackets, maximum speed limit & maximum length.
-</p>
-<p>
-<strong>?Railroad Tools</strong> include, from left to right:
-</p>
-<p>
-<em>Rail Track:</em> tools build Tracks for rail vehicles between two points. Tracks can only be built on slopes in the direction of the slope & may not find a path across rough terrain, water and obstructions. New Track built, may use existing Track in its path.<br>
-To build Track: click on tool to select Track (changes cursor to Track), then click on game-view for start-point of Track (shows a bulldozer in game-view and map co-ordinates on right of bottom-bar under game-view), & finally click on game-view for end-point for Track.<br>
-{Tips: Different types of Tracks may connect (however not when built by some other <a href="players.txt">players</a>). Use bridges & tunnels to connect tracks across rough terrain, or to avoid obstructions. Use <a href="slopetools.txt"> Landscape tools</a> to change terrain, to enable paths for Track. Use Destroy/Remove to remove individual pieces of Track & some obstructions. Use <a href="keys.txt">[Ctrl]</a> at same time for extra functions. Press [t] to select last Track tool used.}
-</p>
-<p>
-<em>
-Electrify Track:</em> tools electrify Track, bridges and tunnels between two points in game-view, for electric vehicles.<br>
-To electrify Track: click on tool or press [e] (changes cursor to electric-track-icon) to select, then click on Track in game-view for start-point of electrification (places a electric-track-icon in game-view), & finally click on a second point on track, to electrify portion of track up to start-point.<br>
-{Tips: Use Destroy/Remove to change back to non-electric tracks.}
-</p>
-<p>
-<em>Remove Tracks:</em> tool removes Track & electric Track, when no vehicles are present, between two points in game-view (Please note: platforms, signals, tunnels & bridges in path are removed too). Use of tool incurs a <a href="finances.txt">construction cost</a>.<br>
-To remove Track: click on tool (changes cursor to a red-cross); then click on Track (selects deletion-point shown by a red-cross in game-view); & finally click at second point on track, to remove portion up to first deletion-point.<br>
-{Tips: Operate as another player to remove their Tracks.}
-</p>
-<p>
-<em>Rail Bridge:</em> tools build straight bridges, for rail vehicles to pass, between two pieces of Track in game-view. Bridges have a maximum span.<br>
-Tools build bridges from an end of a Track to a suitable place (another Track-end or slightly higher land, within span).<br>
-To build a bridge: click on tool to select (changes cursor to bridge), then click on the end of a Track (start-point of bridge) to build.<br>
-Some obstructions or lack of a suitable place for bridge-ends will prevent bridge being built: place Track at both sides that is to be bridged, & try again.<br>
-{Tips: Use Destroy/Remove to remove bridges (click on bridge-end) & some obstructions to bridge building. Use Track tools to connect bridge-ends to Track.}
-</p>
-<p>
-<em>Rail Tunnel:</em>
-tool builds a straight tunnel, for rail vehicles to pass through land, between two pieces of Track in game-view. Tunnels cannot incline: vehicles enter & leave at the same height.<br>
-The tool builds a tunnel, on an end of Track placed on a slope. To build a tunnel: click on tool (changes cursor to a tunnel), then click on Track-end on slope for the tunnel entrance.<br>
-If a tunnel cannot find a suitable exit (a slope free from obstructions), it will not be built: place Track on both sides that is to be connected, & try again.<br>
-{Tips: Use Landscape tools & Destroy/Remove to create suitable places for tunnel entrances and exits. Use Track tools to connect tunnel-exits to Track.}
-</p>
-
-<p>
-<em>Rail Signals:</em> tools build signals for rail vehicles on a Track in game-view. Signals direct & regulate flow of vehicles on Tracks & bridges, junctions & <a href="station.txt">Stops</a>.<br>
-Two-way & one-way versions of signals can be built. To build a two-way signal on Track: click on tool to select signal (changes cursor to signals); then click on Track. To build a one-way signal: click again at same point, with signals-cursor, to cycle through one-way signals, back to a two-way signal.<br>
-IMPORTANT: Take care not to place one-way signals that prevent vehicles reaching their destination, by default vehicles drive on the right (can be changed in simuconf.tab).<br>
-- <em>Signals:</em> vehicles proceed only if Track ahead up to next signal or destination in <a href="schedule.txt">Schedule</a> (a <a href="station.txt">Stop</a> or waypoint) is not occupied by another vehicle. In one-way mode vehicles pass in one direction only.<br>
-- <em>RailClose:</em> vehicles do not proceed beyond signal (available in one-way mode only).<br>
-- <em>PreSignals:</em> vehicles proceed if area of Track ahead (either between three consecutive signals or to next destination in <a href="schedule.txt">Schedule</a>) is not occupied by another vehicle. In one-way mode they let vehicles pass in one direction only.<br>
-- <em>ChooseSignals:</em> direct vehicles to an empty station-platform, at a multi-platform Stop: a vehicle passing this signal may use any empty platform at its next destination, and not just the one assigned in its <a href="schedule.txt">schedule</a>. If no empty platform or clear route to next destination is found, then vehicles wait at signal.<br>
-{Tips:  Remove signals with Destroy/Remove. Hold down [Ctrl] to place signals on bridges over lower Tracks.}
-</p>
-<p>
-<em>Train</em> <a href="depot.txt"><em>Depot:</em></a> tool builds a depot for purchasing & managing trains and carriages. Depots have a maintenance cost & are built on the end of Track in game-view.<br>
-To build a train depot: click on tool (changes cursor to a depot), then click on end of track.<br>
-{Tips: Remove depots with Destroy/Remove. Depots show electric vehicles only if on electric track.}
-</p>
-<p>
-<em>?Rail-stops:</em> tools build station-platforms, used by rail vehicles to pick-up and drop-off goods, passengers & mail.<br>
-A station-platform when not built adjacent to an existing <a href="station.txt">Stop</a> will create a new Stop. <br>
-Rail-stops have a maintenance cost & are built on Track (but not at bends and junctions in Track). <br>
-Rail-stops have a catchment area for goods, passengers & mail. Different station-platforms may have different capacities for goods, passengers & mail. In the corner of some tool-options an icon (used in <a href="haltlist.txt">Station List</a> & Stop Information) shows which items the station-platform allows a Stop to handle.<br>
-To build a station-platform: click on tool to select (changes cursor to a platform), then click on Track.<br>
-{Tips: Remove Rail-stops with Destroy/Remove. Extend station-platforms & build multi-platform Stops (by building more platform sections on adjacent track) to accommodate longer and more vehicles, increase capacity & catchment area. Press [v] to show/hide catchment area for goods & passengers in game-view. Hold down [Ctrl] to build on bridges above lower Tracks.}
-</p>
-<p>
-<em>Extensions:</em>tools construct extensions & buildings for <a href="station.txt">Stops</a> which may increase capacity, catchment area and maintenance cost.<br>
-In the corner of some tool-options an icon (also used in Station List & Stop Information) shows which items the extension allows the Stop to handle.<br>
-To build an extension: click on tool to select (changes cursor to extension), then click required position, beside an existing Stop, in game-view. The new extension is now considered to be part of the Stop.<br>
-{Tips: Remove extensions with Destroy/Remove.}
+<title>?Railroad Tools Help</title>
+
+<h1><strong>>?Railroad/Train/Rail Tools</strong></h1>
+
+<p>
+<strong>?Railroad Tools</strong> construct a train transport network. Tools may build: railtrack (and electrify or remove it); bridges; tunnels; signals; depots; station platforms; & extensions. If playing with <a href="new_world.txt">timeline</a>, then as time passes in Simutrans more tool-options may appear.
+</p>
+<p>
+Click train-icon at top of game-view to open toolbar. Hover mouse-cursor over tool-option (after opening or clicking on toolbar) to see name & where appropriate: construction <a href="finances.txt">cost</a>, maintenance cost in brackets, maximum speed limit & maximum length.
+</p>
+<p>
+<strong>?Railroad Tools</strong> include, from left to right:
+</p>
+<p>
+<em>Rail Track:</em> tools build Tracks for rail vehicles between two points. Tracks can only be built on slopes in the direction of the slope & may not find a path across rough terrain, water and obstructions. New Track built, may use existing Track in its path.<br>
+To build Track: click on tool to select Track (changes cursor to Track), then click on game-view for start-point of Track (shows a bulldozer in game-view and map co-ordinates on right of bottom-bar under game-view), & finally click on game-view for end-point for Track.<br>
+{Tips: Different types of Tracks may connect (however not when built by some other <a href="players.txt">players</a>). Use bridges & tunnels to connect tracks across rough terrain, or to avoid obstructions. Use <a href="slopetools.txt"> Landscape tools</a> to change terrain, to enable paths for Track. Use Destroy/Remove to remove individual pieces of Track & some obstructions. Use <a href="keys.txt">[Ctrl]</a> at same time for extra functions. Press [t] to select last Track tool used.}
+</p>
+<p>
+<em>
+Electrify Track:</em> tools electrify Track, bridges and tunnels between two points in game-view, for electric vehicles.<br>
+To electrify Track: click on tool or press [e] (changes cursor to electric-track-icon) to select, then click on Track in game-view for start-point of electrification (places a electric-track-icon in game-view), & finally click on a second point on track, to electrify portion of track up to start-point.<br>
+{Tips: Use Destroy/Remove to change back to non-electric tracks.}
+</p>
+<p>
+<em>Remove Tracks:</em> tool removes Track & electric Track, when no vehicles are present, between two points in game-view (Please note: platforms, signals, tunnels & bridges in path are removed too). Use of tool incurs a <a href="finances.txt">construction cost</a>.<br>
+To remove Track: click on tool (changes cursor to a red-cross); then click on Track (selects deletion-point shown by a red-cross in game-view); & finally click at second point on track, to remove portion up to first deletion-point.<br>
+{Tips: Operate as another player to remove their Tracks.}
+</p>
+<p>
+<em>Rail Bridge:</em> tools build straight bridges, for rail vehicles to pass, between two pieces of Track in game-view. Bridges have a maximum span.<br>
+Tools build bridges from an end of a Track to a suitable place (another Track-end or slightly higher land, within span).<br>
+To build a bridge: click on tool to select (changes cursor to bridge), then click on the end of a Track (start-point of bridge) to build.<br>
+Some obstructions or lack of a suitable place for bridge-ends will prevent bridge being built: place Track at both sides that is to be bridged, & try again.<br>
+{Tips: Use Destroy/Remove to remove bridges (click on bridge-end) & some obstructions to bridge building. Use Track tools to connect bridge-ends to Track.}
+</p>
+<p>
+<em>Rail Tunnel:</em>
+tool builds a straight tunnel, for rail vehicles to pass through land, between two pieces of Track in game-view. Tunnels cannot incline: vehicles enter & leave at the same height.<br>
+The tool builds a tunnel, on an end of Track placed on a slope. To build a tunnel: click on tool (changes cursor to a tunnel), then click on Track-end on slope for the tunnel entrance.<br>
+If a tunnel cannot find a suitable exit (a slope free from obstructions), it will not be built: place Track on both sides that is to be connected, & try again.<br>
+{Tips: Use Landscape tools & Destroy/Remove to create suitable places for tunnel entrances and exits. Use Track tools to connect tunnel-exits to Track.}
+</p>
+
+<p>
+<em>Rail Signals:</em> tools build signals for rail vehicles on a Track in game-view. Signals direct & regulate flow of vehicles on Tracks & bridges, junctions & <a href="station.txt">Stops</a>.<br>
+Two-way & one-way versions of signals can be built. To build a two-way signal on Track: click on tool to select signal (changes cursor to signals); then click on Track. To build a one-way signal: click again at same point, with signals-cursor, to cycle through one-way signals, back to a two-way signal.<br>
+IMPORTANT: Take care not to place one-way signals that prevent vehicles reaching their destination, by default vehicles drive on the right (can be changed in simuconf.tab).<br>
+- <em>Signals:</em> vehicles proceed only if Track ahead up to next signal or destination in <a href="schedule.txt">Schedule</a> (a <a href="station.txt">Stop</a> or waypoint) is not occupied by another vehicle. In one-way mode vehicles pass in one direction only.<br>
+- <em>RailClose:</em> vehicles do not proceed beyond signal (available in one-way mode only).<br>
+- <em>PreSignals:</em> vehicles proceed if area of Track ahead (either between three consecutive signals or to next destination in <a href="schedule.txt">Schedule</a>) is not occupied by another vehicle. In one-way mode they let vehicles pass in one direction only.<br>
+- <em>ChooseSignals:</em> direct vehicles to an empty station-platform, at a multi-platform Stop: a vehicle passing this signal may use any empty platform at its next destination, and not just the one assigned in its <a href="schedule.txt">schedule</a>. If no empty platform or clear route to next destination is found, then vehicles wait at signal.<br>
+{Tips:  Remove signals with Destroy/Remove. Hold down [Ctrl] to place signals on bridges over lower Tracks.}
+</p>
+<p>
+<em>Train</em> <a href="depot.txt"><em>Depot:</em></a> tool builds a depot for purchasing & managing trains and carriages. Depots have a maintenance cost & are built on the end of Track in game-view.<br>
+To build a train depot: click on tool (changes cursor to a depot), then click on end of track.<br>
+{Tips: Remove depots with Destroy/Remove. Depots show electric vehicles only if on electric track.}
+</p>
+<p>
+<em>?Rail-stops:</em> tools build station-platforms, used by rail vehicles to pick-up and drop-off goods, passengers & mail.<br>
+A station-platform when not built adjacent to an existing <a href="station.txt">Stop</a> will create a new Stop. <br>
+Rail-stops have a maintenance cost & are built on Track (but not at bends and junctions in Track). <br>
+Rail-stops have a catchment area for goods, passengers & mail. Different station-platforms may have different capacities for goods, passengers & mail. In the corner of some tool-options an icon (used in <a href="haltlist.txt">Station List</a> & Stop Information) shows which items the station-platform allows a Stop to handle.<br>
+To build a station-platform: click on tool to select (changes cursor to a platform), then click on Track.<br>
+{Tips: Remove Rail-stops with Destroy/Remove. Extend station-platforms & build multi-platform Stops (by building more platform sections on adjacent track) to accommodate longer and more vehicles, increase capacity & catchment area. Press [v] to show/hide catchment area for goods & passengers in game-view. Hold down [Ctrl] to build on bridges above lower Tracks.}
+</p>
+<p>
+<em>Extensions:</em>tools construct extensions & buildings for <a href="station.txt">Stops</a> which may increase capacity, catchment area and maintenance cost.<br>
+In the corner of some tool-options an icon (also used in Station List & Stop Information) shows which items the extension allows the Stop to handle.<br>
+To build an extension: click on tool to select (changes cursor to extension), then click required position, beside an existing Stop, in game-view. The new extension is now considered to be part of the Stop.<br>
+{Tips: Remove extensions with Destroy/Remove.}
 </p>
diff --git a/simutrans/text/en/removal_tool.txt b/simutrans/text/en/removal_tool.txt
index 8230252..82cbf44 100644
--- a/simutrans/text/en/removal_tool.txt
+++ b/simutrans/text/en/removal_tool.txt
@@ -1,27 +1,27 @@
-<title>Destroy/Remove Help</title>
-
-<h1><strong>Removal Tool</strong></h1>
-
-<p>
-<strong>Removal Tool</strong> is used to destroy and remove unwanted items and obstructions to construction on a single ?game-square in <a href="window.txt">game-view</a>.
-</p>
-<p>
-To Use: Click red-cross-icon (<it>bulldozer-icon</it> in pak128) at top of game-view or press <a href="keys.txt">[a]</a> to open <strong>Removal Tool</strong> (changes cursor to a red-cross-over-dust-cloud).<br>
-Position cursor in game view, a yellow outline indicates position on which Tool will operate (map cordinates are indicated in bottom-bar). Then click on item in game-view to remove.
-</p>
-<p>
-Cost incurred displayed in game-view and appears as under <a href="finances.txt">Construction site</a>. The cost of removal is equivalent to cost of construction for player items.<br>
-The cost of destroying <a href="inspection_tool.txt">city buildings</a> is shown as its value in dialogue opened with <it>Inspection Tool</it>. ?The cost of destroying trees is 100 Hajo credits.
-</p>
-<p>
-<strong>Removal Tool</strong> can be used to remove individual pedestrians and private citycars.
-</p>
-<p>
-Order items are removed from a single ?game-square: pedestrian or private citycar, signals, stop or station-platform, electrification of way, bridge or tunnel, way (track first if on roadway).
-</p>
-{Tips: To remove a player vehicle, sell vehicle from <a href="convoidetail.txt">Convoy Details</a>.<br>
-To remove Industry, Attractions and Town Hall switch to public service player first. <it>Please Note:</it> Use of <strong>Removal Tool</strong> on a  Town Hall removes all city buildings from urban area.<br>
-Use <a href="keys.txt">[Ctrl]</a> to use tool on upper level.<br>
-To destroy/remove another players items select to play as other <a href="players.txt">player</a> first.<br>
-To remove segments of track or road use <a href="railtools.txt">Remove Tracks</a> (also found in <a href="tramtools.txt">Tram Tools</a>) or <a href="roadtools.txt">Remove roads</a>.}
+<title>Destroy/Remove Help</title>
+
+<h1><strong>Removal Tool</strong></h1>
+
+<p>
+<strong>Removal Tool</strong> is used to destroy and remove unwanted items and obstructions to construction on a single ?game-square in <a href="window.txt">game-view</a>.
+</p>
+<p>
+To Use: Click red-cross-icon (<it>bulldozer-icon</it> in pak128) at top of game-view or press <a href="keys.txt">[a]</a> to open <strong>Removal Tool</strong> (changes cursor to a red-cross-over-dust-cloud).<br>
+Position cursor in game view, a yellow outline indicates position on which Tool will operate (map cordinates are indicated in bottom-bar). Then click on item in game-view to remove.
+</p>
+<p>
+Cost incurred displayed in game-view and appears as under <a href="finances.txt">Construction site</a>. The cost of removal is equivalent to cost of construction for player items.<br>
+The cost of destroying <a href="inspection_tool.txt">city buildings</a> is shown as its value in dialogue opened with <it>Inspection Tool</it>. ?The cost of destroying trees is 100 Hajo credits.
+</p>
+<p>
+<strong>Removal Tool</strong> can be used to remove individual pedestrians and private citycars.
+</p>
+<p>
+Order items are removed from a single ?game-square: pedestrian or private citycar, signals, stop or station-platform, electrification of way, bridge or tunnel, way (track first if on roadway).
+</p>
+{Tips: To remove a player vehicle, sell vehicle from <a href="convoidetail.txt">Convoy Details</a>.<br>
+To remove Industry, Attractions and Town Hall switch to public service player first. <it>Please Note:</it> Use of <strong>Removal Tool</strong> on a  Town Hall removes all city buildings from urban area.<br>
+Use <a href="keys.txt">[Ctrl]</a> to use tool on upper level.<br>
+To destroy/remove another players items select to play as other <a href="players.txt">player</a> first.<br>
+To remove segments of track or road use <a href="railtools.txt">Remove Tracks</a> (also found in <a href="tramtools.txt">Tram Tools</a>) or <a href="roadtools.txt">Remove roads</a>.}
 <p>
diff --git a/simutrans/text/en/roadtools.txt b/simutrans/text/en/roadtools.txt
index 770cb74..b2fdd14 100644
--- a/simutrans/text/en/roadtools.txt
+++ b/simutrans/text/en/roadtools.txt
@@ -1,66 +1,66 @@
-<title>Road Tools Help</title>
-
-<h1><strong>Road Tools</strong></h1>
-
-<p>
-<strong>Road Tools</strong> construct a road transportation network for goods and passengers. Tools may build or remove: roads, bridges, tunnels, signals, depots, extensions, & <a href="station.txt">Stops</a>. If playing with <a href="new_world.txt">timeline</a>, then as time passes in Simutrans more tool-options may appear.
-</p>
-<p>
-Click truck-icon at top of game-view to open toolbar.<br>
-Hover mouse-cursor over tool-option (after opening or clicking on toolbar) to see name & where appropriate: construction <a href="finances.txt">cost,</a> maintenance cost in brackets, maximum speed limit & maximum length.
-</p>
-<p>
-<strong>Road Tools</strong> include, from left to right:
-</p>
-<p>
-<em>?Roadway:</em> tools build road between two points for road vehicles. Roads may not be built on areas occupied by other buildings. Roads can only be built on slopes in the direction of the slope & may not be built across rough terrain or water. New road built may use existing road in its path.<br>
-To build road: click on tool to select road type (changes cursor to road), then click on  in game-view for start-point of road (shows a bulldozer in game-view and map co-ordinates on right of bottom-bar under game-view), & finally click on game-view for end-point for road.<br>
-{Tips: Different types of roads may connect even when built by different <a href="players.txt">players</a> . Use bridges & tunnels to connect roads across rough terrain, or to avoid obstructions. Use <a href="slopetools.txt">?Landscape tools</a> to change terrain, to enable paths for road. Use Destroy/Remove to remove individual pieces of road & some obstructions. Use <a href="keys.txt">[Ctrl]</a> at same time for extra functions. Undo [z] does not refund constructions costs. Press [s] to select last roadway tool used.}
-</p>
-<p>
-<em>Remove roads:</em> tool removes road, when no vehicles are present, between two points in game-view (Road-stops, signals, tunnels in bridges in path are removed too). Use of tool incurs a <a href="finances.txt">construction cost</a>.<br>
-To remove road: click on tool (changes cursor to a red-cross); then click on track that is to be deleted (selects deletion point shown by a red-cross in game-view); & finally click at another point on track, to remove portion of track up to first deletion point.<br>
-{Tips: Operate as another <a href="players.txt">player</a> to remove their roads.}
-</p>
-<p>
-<em>Road Bridge:</em> tools build straight bridges, for vehicles to pass, between two pieces of road in game-view. Bridges have a maximum span. Tools build bridges from an end of a road to a suitable place (another road-end or slightly higher land, within span).<br>
-To build bridge: click on tool to select bridge (changes cursor to bridge), then click on the end of a road, (starting-point of bridge). Some obstructions or lack of a suitable place for bridge-ends may stop bridge being built: build road at both sides that is to be bridged, & try again.<br>
-{Tips: Use Destroy/Remove to remove bridges (click on bridge-end) & some obstructions to bridge building. Use <em>Roadway</em> tools to connect bridge-ends to road.}
-</p>
-<p>
-<em>Road Tunnel:</em>
-tool builds a straight tunnel, for vehicles to pass through land, between two pieces of road in game-view.
-Tunnels cannot incline: vehicles enter & leave at the same height.<br>
-Tool builds a tunnel, on an end of a road placed on a slope. To build a tunnel: click on tool (changes cursor to a tunnel), then click on road-end on slope for the tunnel entrance. If a tunnel cannot find a suitable exit (a slope free from obstructions), it will not be built: place road on both sides that is to be connected, & try again.<br>
-{Tips: Use Landscape tools & Destroy/Remove to create suitable places for tunnel entrances and exits. Use Roadway tools to connect tunnel-exits to roads.}
-</p>
-<p>
-<em>Road signals & barriers:</em> tools build signals & barriers, for road vehicles, in game-view. Signals & barriers direct & regulate flow of vehicles on roads & bridges, and at junctions & stops (where goods and passengers are picked-up and dropped-off). Two-way & one-way versions of some signals can be built.<br>
-IMPORTANT: Take care signals not place signals that prevent vehicles reaching their destination, by default vehicles drive on the right (can be changed in simuconf.tab).<br>
-- <em>Traffic lights:</em> tool builds signals in game-view to regulate the flow of road vehicles at junctions, either allowing them to proceed or making them wait for a while. Click on tool to select (changes cursor to signal), then click on road to build. Click again at junctions to change orientation of signals.<br>
-- <em>single barrier:</em> tool builds a barrier to prevent road vehicles using one side of a road. Click on tool to select (changes cursor to barrier), then click on road to build, click again at same position to change side of road to which barrier applies.<br>
-- <em>road closed:</em> tool builds a barrier to prevent road vehicles proceeding. Click on tool to select (changes cursor to barriers), then click on road to build.<br>
-- <em>no entry:</em> tool builds a signal to prevent road vehicles proceeding on one side of a road (similar to a <em>single barrier</em>. Click on tool to select (changes cursor to signal), then click on road to build, click again at same position to change side on road that signal is placed.<br>
-- <em>minimum 80km/h</em> tool builds a signal to prevent road vehicles proceeding if their maximum speed is below 80km/h. Click on tool to select (changes cursor to signal), then click on road to build, click again at same position to change side of road to which signal applies.<br>
-- <em>Choose Point:</em> tool builds a signal to direct a road vehicle to an empty Road-stop to pick-up or drop-off goods and passengers at a <a href="station.txt">Stop</a> with mulitple Road-stops: a vehicle passing this signal may use any free Road-stop at its next destination, and not just the one assigned in its <a href="schedule.txt">schedule</a>. If no empty Road-stop or clear route to next destination is found, then vehicles wait at signal. Click on tool to select (changes cursor to signal), then click on road to build, click again at same position to change side of road to which signal applies.<br>
-- <em>highways:</em> (available only in pak128) tools build a signal that only allow vehicles to proceed in one direction on a road if their maximum speed limit is over 80km/h.<br>
-Click on tool to select (changes cursor to signal), then click on road to build, click again at same position to change direction on road to which signal applies.<br>
-{Tips:  Remove signals with Destroy/Remove. Use [Ctrl] to place signals on bridges over lower roads.}
-</p>
-<p>
-<em>Road</em> <a href="depot.txt"><em>Depot:</em></a> tool builds a depot for purchasing & managing road vehicle and trailers. Depots have a maintenance cost & are built on the end of road in game-view.<br>
-To build a Road Depot: click on tool (changes cursor to a depot), then click on end of road.<br>
-{Tips: Remove depots with Destroy/Remove.}
-</p>
-<p>
-<em>Car Parking:</em> (available only in pak 128) tools construct extensions for <a href="station.txt">Stops</a> which increase capacity & catchment area for goods & passengers, and maintenance cost.<br>
-To build an extension: click on tool to select extension (changes cursor to extension), then click required position on a road, beside an existing Stop in game-view. The new extension is now considered to be part of the Stop.<br>
-{Tips: Remove extensions with the Destroy/Remove.}
-</p>
-<p>
-<em>?Road-Stops:</em> tools build places for road vehicles to pick-up and drop-off goods & passengers.<br>
-A Road-stop when not built adjacent to an existing <a href="station.txt">Stop</a> will create a new Stop.<br>
-Road-stops are built on<a href="roadtools.txt">road</a>& have a maintenance cost and a catchment area for goods, passengers & mail. In the corner of some tool-options an icon (used in Station List & Stop Information) shows which items the Road-stop allows a Stop to handle. Different Road-stops may have different capacities for goods, passengers & mail.<br>
-To build a Road-stop: click on tool to select (changes cursor to roadstop), then click required position on a road in game-view.<br>
-{Tips: Remove Road-stops with Destroy/Remove. Press [v] to toggle catchment area for goods & passengers in game-view.  Roadstops cannot be placed on road built by some other players. Use [Ctrl] to build on bridges over lower roads. Create Stops with multiple places for vehicles to increase capacity and catchment area.}
+<title>Road Tools Help</title>
+
+<h1><strong>Road Tools</strong></h1>
+
+<p>
+<strong>Road Tools</strong> construct a road transportation network for goods and passengers. Tools may build or remove: roads, bridges, tunnels, signals, depots, extensions, & <a href="station.txt">Stops</a>. If playing with <a href="new_world.txt">timeline</a>, then as time passes in Simutrans more tool-options may appear.
+</p>
+<p>
+Click truck-icon at top of game-view to open toolbar.<br>
+Hover mouse-cursor over tool-option (after opening or clicking on toolbar) to see name & where appropriate: construction <a href="finances.txt">cost,</a> maintenance cost in brackets, maximum speed limit & maximum length.
+</p>
+<p>
+<strong>Road Tools</strong> include, from left to right:
+</p>
+<p>
+<em>?Roadway:</em> tools build road between two points for road vehicles. Roads may not be built on areas occupied by other buildings. Roads can only be built on slopes in the direction of the slope & may not be built across rough terrain or water. New road built may use existing road in its path.<br>
+To build road: click on tool to select road type (changes cursor to road), then click on  in game-view for start-point of road (shows a bulldozer in game-view and map co-ordinates on right of bottom-bar under game-view), & finally click on game-view for end-point for road.<br>
+{Tips: Different types of roads may connect even when built by different <a href="players.txt">players</a> . Use bridges & tunnels to connect roads across rough terrain, or to avoid obstructions. Use <a href="slopetools.txt">?Landscape tools</a> to change terrain, to enable paths for road. Use Destroy/Remove to remove individual pieces of road & some obstructions. Use <a href="keys.txt">[Ctrl]</a> at same time for extra functions. Undo [z] does not refund constructions costs. Press [s] to select last roadway tool used.}
+</p>
+<p>
+<em>Remove roads:</em> tool removes road, when no vehicles are present, between two points in game-view (Road-stops, signals, tunnels in bridges in path are removed too). Use of tool incurs a <a href="finances.txt">construction cost</a>.<br>
+To remove road: click on tool (changes cursor to a red-cross); then click on track that is to be deleted (selects deletion point shown by a red-cross in game-view); & finally click at another point on track, to remove portion of track up to first deletion point.<br>
+{Tips: Operate as another <a href="players.txt">player</a> to remove their roads.}
+</p>
+<p>
+<em>Road Bridge:</em> tools build straight bridges, for vehicles to pass, between two pieces of road in game-view. Bridges have a maximum span. Tools build bridges from an end of a road to a suitable place (another road-end or slightly higher land, within span).<br>
+To build bridge: click on tool to select bridge (changes cursor to bridge), then click on the end of a road, (starting-point of bridge). Some obstructions or lack of a suitable place for bridge-ends may stop bridge being built: build road at both sides that is to be bridged, & try again.<br>
+{Tips: Use Destroy/Remove to remove bridges (click on bridge-end) & some obstructions to bridge building. Use <em>Roadway</em> tools to connect bridge-ends to road.}
+</p>
+<p>
+<em>Road Tunnel:</em>
+tool builds a straight tunnel, for vehicles to pass through land, between two pieces of road in game-view.
+Tunnels cannot incline: vehicles enter & leave at the same height.<br>
+Tool builds a tunnel, on an end of a road placed on a slope. To build a tunnel: click on tool (changes cursor to a tunnel), then click on road-end on slope for the tunnel entrance. If a tunnel cannot find a suitable exit (a slope free from obstructions), it will not be built: place road on both sides that is to be connected, & try again.<br>
+{Tips: Use Landscape tools & Destroy/Remove to create suitable places for tunnel entrances and exits. Use Roadway tools to connect tunnel-exits to roads.}
+</p>
+<p>
+<em>Road signals & barriers:</em> tools build signals & barriers, for road vehicles, in game-view. Signals & barriers direct & regulate flow of vehicles on roads & bridges, and at junctions & stops (where goods and passengers are picked-up and dropped-off). Two-way & one-way versions of some signals can be built.<br>
+IMPORTANT: Take care signals not place signals that prevent vehicles reaching their destination, by default vehicles drive on the right (can be changed in simuconf.tab).<br>
+- <em>Traffic lights:</em> tool builds signals in game-view to regulate the flow of road vehicles at junctions, either allowing them to proceed or making them wait for a while. Click on tool to select (changes cursor to signal), then click on road to build. Click again at junctions to change orientation of signals.<br>
+- <em>single barrier:</em> tool builds a barrier to prevent road vehicles using one side of a road. Click on tool to select (changes cursor to barrier), then click on road to build, click again at same position to change side of road to which barrier applies.<br>
+- <em>road closed:</em> tool builds a barrier to prevent road vehicles proceeding. Click on tool to select (changes cursor to barriers), then click on road to build.<br>
+- <em>no entry:</em> tool builds a signal to prevent road vehicles proceeding on one side of a road (similar to a <em>single barrier</em>. Click on tool to select (changes cursor to signal), then click on road to build, click again at same position to change side on road that signal is placed.<br>
+- <em>minimum 80km/h</em> tool builds a signal to prevent road vehicles proceeding if their maximum speed is below 80km/h. Click on tool to select (changes cursor to signal), then click on road to build, click again at same position to change side of road to which signal applies.<br>
+- <em>Choose Point:</em> tool builds a signal to direct a road vehicle to an empty Road-stop to pick-up or drop-off goods and passengers at a <a href="station.txt">Stop</a> with mulitple Road-stops: a vehicle passing this signal may use any free Road-stop at its next destination, and not just the one assigned in its <a href="schedule.txt">schedule</a>. If no empty Road-stop or clear route to next destination is found, then vehicles wait at signal. Click on tool to select (changes cursor to signal), then click on road to build, click again at same position to change side of road to which signal applies.<br>
+- <em>highways:</em> (available only in pak128) tools build a signal that only allow vehicles to proceed in one direction on a road if their maximum speed limit is over 80km/h.<br>
+Click on tool to select (changes cursor to signal), then click on road to build, click again at same position to change direction on road to which signal applies.<br>
+{Tips:  Remove signals with Destroy/Remove. Use [Ctrl] to place signals on bridges over lower roads.}
+</p>
+<p>
+<em>Road</em> <a href="depot.txt"><em>Depot:</em></a> tool builds a depot for purchasing & managing road vehicle and trailers. Depots have a maintenance cost & are built on the end of road in game-view.<br>
+To build a Road Depot: click on tool (changes cursor to a depot), then click on end of road.<br>
+{Tips: Remove depots with Destroy/Remove.}
+</p>
+<p>
+<em>Car Parking:</em> (available only in pak 128) tools construct extensions for <a href="station.txt">Stops</a> which increase capacity & catchment area for goods & passengers, and maintenance cost.<br>
+To build an extension: click on tool to select extension (changes cursor to extension), then click required position on a road, beside an existing Stop in game-view. The new extension is now considered to be part of the Stop.<br>
+{Tips: Remove extensions with the Destroy/Remove.}
+</p>
+<p>
+<em>?Road-Stops:</em> tools build places for road vehicles to pick-up and drop-off goods & passengers.<br>
+A Road-stop when not built adjacent to an existing <a href="station.txt">Stop</a> will create a new Stop.<br>
+Road-stops are built on<a href="roadtools.txt">road</a>& have a maintenance cost and a catchment area for goods, passengers & mail. In the corner of some tool-options an icon (used in Station List & Stop Information) shows which items the Road-stop allows a Stop to handle. Different Road-stops may have different capacities for goods, passengers & mail.<br>
+To build a Road-stop: click on tool to select (changes cursor to roadstop), then click required position on a road in game-view.<br>
+{Tips: Remove Road-stops with Destroy/Remove. Press [v] to toggle catchment area for goods & passengers in game-view.  Roadstops cannot be placed on road built by some other players. Use [Ctrl] to build on bridges over lower roads. Create Stops with multiple places for vehicles to increase capacity and catchment area.}
 </p>
diff --git a/simutrans/text/en/save.txt b/simutrans/text/en/save.txt
index fd6be02..91ef347 100644
--- a/simutrans/text/en/save.txt
+++ b/simutrans/text/en/save.txt
@@ -1,35 +1,35 @@
-<title>Save Help</title>
-
-<h1><strong>Save</strong></h1>
-
-<p>
-<strong>Save</strong> stores the current game to a file (to continue play at a later time) & can be used to delete these files.
-</p>
-<p>
-<strong>Save</strong> opens from <a href="options.txt">Game Options</a> or by pressing <a href="keys.txt">[S]</a>; & list names, date & time of previous games.<br>
-If all games are not visible: use <a href="mouse.txt">slider-bar</a> on right-side of list to scroll names.
-</p>
-<p>
-The current game can be saved to a new file or over an existing game.<br>
-To save game to new file, enter new name into box at top of
- <strong>Save</strong>: click on box, type name & press [Enter] or [Return] or click on <em>OK</em>; the new filename is listed.<br>
-IMPORTANT: If a listed filename is used: old game is replaced, by current game, & lost.
-</p>
-<p>
-By default the current game appears in filename box, to save to this file: click <em>OK</em> (old data is lost and replaced with current data).<br>
-To save game to file over an old game: click on a name in list (old game is replaced by current game).
-</p>
-<p>
-Filenames can be a combination of letters, numbers & symbols to a maximum length of 57 characters; after save, only 20 (approx.) characters are shown in <strong>Save</strong> &
-<a href="load.txt">Load</a>.
-</p>
-<p>
-WARNING: Click x-button by filename to DELETE game immediately & permanently, the filename is removed from list and <strong>Save</strong> closes. Use this function carefully.
-</p>
-<p>
-{Tips: Re-start a saved game from Load.<br>
-Change autosave (automatic game save) in simuconf.tab}.
-</p>
-<p>
-Click on <em>Cancel</em> to close <strong>Save</strong>; or x in top-left-corner; or use keyboard.
+<title>Save Help</title>
+
+<h1><strong>Save</strong></h1>
+
+<p>
+<strong>Save</strong> stores the current game to a file (to continue play at a later time) & can be used to delete these files.
+</p>
+<p>
+<strong>Save</strong> opens from <a href="options.txt">Game Options</a> or by pressing <a href="keys.txt">[S]</a>; & list names, date & time of previous games.<br>
+If all games are not visible: use <a href="mouse.txt">slider-bar</a> on right-side of list to scroll names.
+</p>
+<p>
+The current game can be saved to a new file or over an existing game.<br>
+To save game to new file, enter new name into box at top of
+ <strong>Save</strong>: click on box, type name & press [Enter] or [Return] or click on <em>OK</em>; the new filename is listed.<br>
+IMPORTANT: If a listed filename is used: old game is replaced, by current game, & lost.
+</p>
+<p>
+By default the current game appears in filename box, to save to this file: click <em>OK</em> (old data is lost and replaced with current data).<br>
+To save game to file over an old game: click on a name in list (old game is replaced by current game).
+</p>
+<p>
+Filenames can be a combination of letters, numbers & symbols to a maximum length of 57 characters; after save, only 20 (approx.) characters are shown in <strong>Save</strong> &
+<a href="load.txt">Load</a>.
+</p>
+<p>
+WARNING: Click x-button by filename to DELETE game immediately & permanently, the filename is removed from list and <strong>Save</strong> closes. Use this function carefully.
+</p>
+<p>
+{Tips: Re-start a saved game from Load.<br>
+Change autosave (automatic game save) in simuconf.tab}.
+</p>
+<p>
+Click on <em>Cancel</em> to close <strong>Save</strong>; or x in top-left-corner; or use keyboard.
 </p>
diff --git a/simutrans/text/en/schedule.txt b/simutrans/text/en/schedule.txt
index a423f2d..58901bd 100644
--- a/simutrans/text/en/schedule.txt
+++ b/simutrans/text/en/schedule.txt
@@ -1,49 +1,49 @@
-<title>Schedule Controls Help</title>
-
-<h1><strong>Schedule Controls</strong></h1>
-
-<p>
-<strong>Schedule Controls</strong> sets the Schedule (route and minimum quantity of goods and passengers required by a <a href="convoiinfo.txt">Convoy</a> to proceed) for a Convoy or a <a href="linemanagement.txt">Line</a>.<br>
-It lists<a href="station.txt">Stops</a> (where Convoys pick-up and drop-off goods and passengers) and waypoints (which can be used to direct Convoys to a path if more than one is available or provide interim destination points) with their map co-ordinates.
-</p>
-<p>
-<strong>Schedule Controls</strong> for a Convoy opens from Schedule option-button in <a href="convoiinfo.txt">Convoy Information</a> and <a href="depot.txt">Depot Controls</a>.<br>
-Controls for the Schedule of a Line open from New Line and Update Line option-buttons in <a href="linemanagement.txt">Line Management</a> and <a href="depot.txt">Depot Controls</a>.
-</p>
-<p>
-When <strong>Schedule Controls</strong> is opened from Convoy Information the assigned Line (if any) is shown at top of controls.<br>
-<a href="linemanagement.txt"><em>Line</em></a> <em>Name:</em> Click on left/right-arrow buttons by name to cycle through Lines or click on name-box to open a drop-down-list of Lines (click on Line in drop-down list to select). <br>
-Click on name-box and type new name to change name of Line.
-</p>
-<p>
-<em>Wait For:</em> sets the minimum quantity of goods and passengers required by a <a href="convoiinfo.txt">Convoy</a> to proceed.
-The percentage figure refers to the total capacity of the Convoy and not an indiviual type of item carried.<br>
-A Convoy will wait at Stop until required percentage is on board.<br>
-To use: click on Stop in list to select (> by name shows that Stop has been selected), then use arrow-buttons to cycle through percentages.<br>
-{Tips: To set or change Wait For levels for all Convoys on a Line, use Update Line option-button in <a href="linemanagement.txt">Line Management</a> or <a href="depot.txt">Depot Controls</a>. To set or change the Wait For level for a Convoy and no other Convoy on assigned Line, use Schedule option-button in <a href="convoiinfo.txt">Convoy Information</a> or Depot Controls.}
-</p>
-<p>
-Option-buttons (click to use, button is indented when selected) include:
-</p>
-<p>
-<em>Add</em> <a href="station.txt"><em>Stop:</em></a> option places a Stop used by vehicles to pick-up or drop-off goods and passengers (water transport vehicles may use any square of water in the catchment area of a dock) or waypoint on route.<br>
-To add a Stop or waypoint: click on option to select (changes cursor to halt-arrow), then click required point in game-view for Stop or waypoint (point on road, track or water as appropriate for type of vehicle). The Stop or waypoint, is now listed in <strong>Schedule Controls</strong>.<br>
-{Tips: Vehicles do not pick-up or drop-off goods & passengers at waypoints.}
-</p>
-<p>
-<em>Insert:</em> option places a <a href="station.txt">Stop</a> or waypoint on route, before an existing Stop/waypoint.<br>
-To insert a Stop or waypoint: click on an existing stop/waypoint in list to select (> by name shows Stop/waypoint is selected), then click on Insert option-button (changes cursor to halt-arrow), then click required point in game-view for Stop or waypoint (point on road, track or water as appropriate for type of vehicle).<br>
-The new Stop or waypoint is listed in <strong>Schedule Controls</strong> before the previously selected Stop/waypoint.<br>
-{Tips: Vehicles do not pick-up or drop-off goods or passengers at waypoints.}
-</p>
-<p>
-<em>Remove:</em> option deletes a <a href="station.txt">Stop</a> or waypoint from the route.<br>
-Click on option-button to select, then click on item in list to remove.
-</p>
-<p>
-<em>replicate backwards:</em> option adds existing <a href="station.txt">Stops</a> and waypoints in reverse order to route. <em>Wait For</em> levels are also replicated. Click on option-button to use: <strong>Schedule Controls</strong> lists new route.
-</p>
-<p>
-<em>Promote to</em> <a href="linemanagement.txt"><em>Line:</em></a> (only available when <strong>Schedule Controls</strong> is opened from <a href="convoiinfo.txt">Convoy Information</a>) creates a new Line
- using current Schedule. The new Line is assigned a number and listed in Line Management.
+<title>Schedule Controls Help</title>
+
+<h1><strong>Schedule Controls</strong></h1>
+
+<p>
+<strong>Schedule Controls</strong> sets the Schedule (route and minimum quantity of goods and passengers required by a <a href="convoiinfo.txt">Convoy</a> to proceed) for a Convoy or a <a href="linemanagement.txt">Line</a>.<br>
+It lists<a href="station.txt">Stops</a> (where Convoys pick-up and drop-off goods and passengers) and waypoints (which can be used to direct Convoys to a path if more than one is available or provide interim destination points) with their map co-ordinates.
+</p>
+<p>
+<strong>Schedule Controls</strong> for a Convoy opens from Schedule option-button in <a href="convoiinfo.txt">Convoy Information</a> and <a href="depot.txt">Depot Controls</a>.<br>
+Controls for the Schedule of a Line open from New Line and Update Line option-buttons in <a href="linemanagement.txt">Line Management</a> and <a href="depot.txt">Depot Controls</a>.
+</p>
+<p>
+When <strong>Schedule Controls</strong> is opened from Convoy Information the assigned Line (if any) is shown at top of controls.<br>
+<a href="linemanagement.txt"><em>Line</em></a> <em>Name:</em> Click on left/right-arrow buttons by name to cycle through Lines or click on name-box to open a drop-down-list of Lines (click on Line in drop-down list to select). <br>
+Click on name-box and type new name to change name of Line.
+</p>
+<p>
+<em>Wait For:</em> sets the minimum quantity of goods and passengers required by a <a href="convoiinfo.txt">Convoy</a> to proceed.
+The percentage figure refers to the total capacity of the Convoy and not an indiviual type of item carried.<br>
+A Convoy will wait at Stop until required percentage is on board.<br>
+To use: click on Stop in list to select (> by name shows that Stop has been selected), then use arrow-buttons to cycle through percentages.<br>
+{Tips: To set or change Wait For levels for all Convoys on a Line, use Update Line option-button in <a href="linemanagement.txt">Line Management</a> or <a href="depot.txt">Depot Controls</a>. To set or change the Wait For level for a Convoy and no other Convoy on assigned Line, use Schedule option-button in <a href="convoiinfo.txt">Convoy Information</a> or Depot Controls.}
+</p>
+<p>
+Option-buttons (click to use, button is indented when selected) include:
+</p>
+<p>
+<em>Add</em> <a href="station.txt"><em>Stop:</em></a> option places a Stop used by vehicles to pick-up or drop-off goods and passengers (water transport vehicles may use any square of water in the catchment area of a dock) or waypoint on route.<br>
+To add a Stop or waypoint: click on option to select (changes cursor to halt-arrow), then click required point in game-view for Stop or waypoint (point on road, track or water as appropriate for type of vehicle). The Stop or waypoint, is now listed in <strong>Schedule Controls</strong>.<br>
+{Tips: Vehicles do not pick-up or drop-off goods & passengers at waypoints.}
+</p>
+<p>
+<em>Insert:</em> option places a <a href="station.txt">Stop</a> or waypoint on route, before an existing Stop/waypoint.<br>
+To insert a Stop or waypoint: click on an existing stop/waypoint in list to select (> by name shows Stop/waypoint is selected), then click on Insert option-button (changes cursor to halt-arrow), then click required point in game-view for Stop or waypoint (point on road, track or water as appropriate for type of vehicle).<br>
+The new Stop or waypoint is listed in <strong>Schedule Controls</strong> before the previously selected Stop/waypoint.<br>
+{Tips: Vehicles do not pick-up or drop-off goods or passengers at waypoints.}
+</p>
+<p>
+<em>Remove:</em> option deletes a <a href="station.txt">Stop</a> or waypoint from the route.<br>
+Click on option-button to select, then click on item in list to remove.
+</p>
+<p>
+<em>replicate backwards:</em> option adds existing <a href="station.txt">Stops</a> and waypoints in reverse order to route. <em>Wait For</em> levels are also replicated. Click on option-button to use: <strong>Schedule Controls</strong> lists new route.
+</p>
+<p>
+<em>Promote to</em> <a href="linemanagement.txt"><em>Line:</em></a> (only available when <strong>Schedule Controls</strong> is opened from <a href="convoiinfo.txt">Convoy Information</a>) creates a new Line
+ using current Schedule. The new Line is assigned a number and listed in Line Management.
 </p>
diff --git a/simutrans/text/en/shiptools.txt b/simutrans/text/en/shiptools.txt
index 06a4c48..b6ee205 100644
--- a/simutrans/text/en/shiptools.txt
+++ b/simutrans/text/en/shiptools.txt
@@ -1,55 +1,55 @@
-<title>Dock/harbour tools Help</title>
-
-<h1><strong>Dock/harbour tools</strong></h1>
-
-<p>
-<strong>Dock/harbour tools</strong> construct a marine and waterway transport network. Tools may build or remove: canals, locks, various docks, and a ship depot. If playing with <a href="new_world.txt">timeline</a>, then as time passes in Simutrans more tool-options may appear.
-</p>
-<p>
-Click boat-icon at top of game-view to open toolbar.<br>
-Hover mouse-cursor over tool-option (after opening or clicking on toolbar) to see name & where appropriate: construction <a href="finances.txt">cost</a>, maintenance cost in brackets, and maximum speed limit.
-</p>
-<p>
-<strong>Dock/harbour tools</strong> include, from left to right:
-</p>
-<p>
-<em>Canal:</em> tool builds waterways, for boats and barges, between two points in game-view.<br>
-Canals can only be built on slopes in the direction of the slope & may not find a path across rough terrain. Canals built between points, may use existing canal in its path.<br>
-To build a canal: click on tool to select (changes cursor to canal), then click on terrain for start-point (shows a bulldozer in game-view and map co-ordinates on right of bottom-bar under game-view), & finally click on terrain for end-point.<br>
-{Tips: Canals built by different <a href="players.txt">players</a> may not connect. Use <a href="slopetools.txt">Landscape tools</a> to change terrain, to enable paths for canals. Use Destroy/Remove to remove individual pieces of canal & some obstructions. Undo last route connection <a href="keys.txt">[z]</a> does not refund constructions costs.}
-</p>
-<p>
-<em>Remove channels:</em> tool removes portion of canal, when no vehicles are present, between two points in game-view (NB: Channel-stops in path are removed too). The tool has an associated construction cost.<br>
-To remove canal: click on tool (changes cursor to a cross); then click on canal that is to be deleted (selects deletion-point shown by a red cross in game-view); & finally click at another point on canal, to remove portion up to first deletion-point.
-</p>
-<p>
-<em>Ship Hoist:</em> tool builds a canal lock and bridge to raise/lower a boat or barge by one level on a canal in game-view. The bridge has a maximum span and is built on the end of a canal to a suitable place (another canal-end or slightly higher land, within span).<br>
-To build bridge: click on tool to select bridge (changes cursor to hoist), then click on the end of a canal, (starting-point of bridge). Some obstructions or lack of a suitable place for bridge-ends may stop hoist being built: build canal at both sides that is to be bridged, & try again.<br>
-{Tips: Use Destroy/Remove to remove bridges (click on hoist-end) & some obstructions to bridge building.<br>
-Use <em>Canal</em> tools to connect bridge-ends to water ways.}.
-</p>
-<p>
-<em>Wharf</em> (<em>Canal Quay</em> in pak128) tool builds a dock on a canal in game-view for water-transport-vehicles to pick-up and drop-off cargo and passengers.<br>
-A dock when not built adjacent to an existing <a href="station.txt">Stop</a> will create a new Stop.<br>
-A dock has a catchment area for goods, passengers & mail. In the corner of the tool-option is an icon (used in <a href="haltlist.txt">Station List</a> & <a href="station.txt">Stop Information</a>) shows which items the dock allows a Stop to handle.<br>
-To build a dock: click on tool (changes cursor to a channelstop); then click on a canal in game-view to construct.<br>
-{Tips: Remove docks with Destroy/Remove. Press [v] to show/hide catchment area for goods and passengers in game-view.<br>
-Stops just for water transport vehicles will not be listed in <a href="haltlist.txt">?Stops/Station list</a>}.
-</p>
-<p>
-<em>Ship-stops:</em> tools build various items that construct docks in game-view for water-transport-vehicles to pick-up and drop-off cargo and passengers.<br>
-Docks are built at edges of straight coast.<br>
-A dock when not built adjacent to an existing <a href="station.txt">Stop</a> will create a new Stop.<br>
-Docks have a catchment area for goods, passengers & mail. In the corner of the tool-option is an icon (used in Station List & Stop Information) that shows which items the dock allows a Stop to handle. Different docks may have different capacities for goods, passengers & mail. <br>
-To build a dock: click on tool to select (changes cursor to a dock) and then click on a slope by water to build<br>
-{Tips: Remove docks with Destroy/Remove.<br>
-Size of docks can be increased by building on adjacent squares. Water-transport vehicles may use any square of water in the catchment area of a dock.<br>
-Stops just for water transport vehicles will not be listed in <a href="haltlist.txt">?Stops/Station list</a>.<br>
-Off-shore <a href="industry_info.txt">Industry</a> such as Oil Rigs do not require a dock, water-transport vehicles may use any square of water in the catchment area of an off-shore Industry.<br>
-Press [v] to show/hide catchment area for goods and passengers in game-view.}
-</p>
-<p>
-<em>Ship <a href="depot.txt"><em>Depot:</em></a></em> tool builds a depot for purchasing & managing ships, boats and barges. Depots have a maintenance cost & are built on water in game-view.<br>
-To build a ship depot: click on tool (changes cursor to a depot), then click on water in game-view.<br>
-{Tips: Remove depots with Destroy/Remove.}
+<title>Dock/harbour tools Help</title>
+
+<h1><strong>Dock/harbour tools</strong></h1>
+
+<p>
+<strong>Dock/harbour tools</strong> construct a marine and waterway transport network. Tools may build or remove: canals, locks, various docks, and a ship depot. If playing with <a href="new_world.txt">timeline</a>, then as time passes in Simutrans more tool-options may appear.
+</p>
+<p>
+Click boat-icon at top of game-view to open toolbar.<br>
+Hover mouse-cursor over tool-option (after opening or clicking on toolbar) to see name & where appropriate: construction <a href="finances.txt">cost</a>, maintenance cost in brackets, and maximum speed limit.
+</p>
+<p>
+<strong>Dock/harbour tools</strong> include, from left to right:
+</p>
+<p>
+<em>Canal:</em> tool builds waterways, for boats and barges, between two points in game-view.<br>
+Canals can only be built on slopes in the direction of the slope & may not find a path across rough terrain. Canals built between points, may use existing canal in its path.<br>
+To build a canal: click on tool to select (changes cursor to canal), then click on terrain for start-point (shows a bulldozer in game-view and map co-ordinates on right of bottom-bar under game-view), & finally click on terrain for end-point.<br>
+{Tips: Canals built by different <a href="players.txt">players</a> may not connect. Use <a href="slopetools.txt">Landscape tools</a> to change terrain, to enable paths for canals. Use Destroy/Remove to remove individual pieces of canal & some obstructions. Undo last route connection <a href="keys.txt">[z]</a> does not refund constructions costs.}
+</p>
+<p>
+<em>Remove channels:</em> tool removes portion of canal, when no vehicles are present, between two points in game-view (NB: Channel-stops in path are removed too). The tool has an associated construction cost.<br>
+To remove canal: click on tool (changes cursor to a cross); then click on canal that is to be deleted (selects deletion-point shown by a red cross in game-view); & finally click at another point on canal, to remove portion up to first deletion-point.
+</p>
+<p>
+<em>Ship Hoist:</em> tool builds a canal lock and bridge to raise/lower a boat or barge by one level on a canal in game-view. The bridge has a maximum span and is built on the end of a canal to a suitable place (another canal-end or slightly higher land, within span).<br>
+To build bridge: click on tool to select bridge (changes cursor to hoist), then click on the end of a canal, (starting-point of bridge). Some obstructions or lack of a suitable place for bridge-ends may stop hoist being built: build canal at both sides that is to be bridged, & try again.<br>
+{Tips: Use Destroy/Remove to remove bridges (click on hoist-end) & some obstructions to bridge building.<br>
+Use <em>Canal</em> tools to connect bridge-ends to water ways.}.
+</p>
+<p>
+<em>Wharf</em> (<em>Canal Quay</em> in pak128) tool builds a dock on a canal in game-view for water-transport-vehicles to pick-up and drop-off cargo and passengers.<br>
+A dock when not built adjacent to an existing <a href="station.txt">Stop</a> will create a new Stop.<br>
+A dock has a catchment area for goods, passengers & mail. In the corner of the tool-option is an icon (used in <a href="haltlist.txt">Station List</a> & <a href="station.txt">Stop Information</a>) shows which items the dock allows a Stop to handle.<br>
+To build a dock: click on tool (changes cursor to a channelstop); then click on a canal in game-view to construct.<br>
+{Tips: Remove docks with Destroy/Remove. Press [v] to show/hide catchment area for goods and passengers in game-view.<br>
+Stops just for water transport vehicles will not be listed in <a href="haltlist.txt">?Stops/Station list</a>}.
+</p>
+<p>
+<em>Ship-stops:</em> tools build various items that construct docks in game-view for water-transport-vehicles to pick-up and drop-off cargo and passengers.<br>
+Docks are built at edges of straight coast.<br>
+A dock when not built adjacent to an existing <a href="station.txt">Stop</a> will create a new Stop.<br>
+Docks have a catchment area for goods, passengers & mail. In the corner of the tool-option is an icon (used in Station List & Stop Information) that shows which items the dock allows a Stop to handle. Different docks may have different capacities for goods, passengers & mail. <br>
+To build a dock: click on tool to select (changes cursor to a dock) and then click on a slope by water to build<br>
+{Tips: Remove docks with Destroy/Remove.<br>
+Size of docks can be increased by building on adjacent squares. Water-transport vehicles may use any square of water in the catchment area of a dock.<br>
+Stops just for water transport vehicles will not be listed in <a href="haltlist.txt">?Stops/Station list</a>.<br>
+Off-shore <a href="industry_info.txt">Industry</a> such as Oil Rigs do not require a dock, water-transport vehicles may use any square of water in the catchment area of an off-shore Industry.<br>
+Press [v] to show/hide catchment area for goods and passengers in game-view.}
+</p>
+<p>
+<em>Ship <a href="depot.txt"><em>Depot:</em></a></em> tool builds a depot for purchasing & managing ships, boats and barges. Depots have a maintenance cost & are built on water in game-view.<br>
+To build a ship depot: click on tool (changes cursor to a depot), then click on water in game-view.<br>
+{Tips: Remove depots with Destroy/Remove.}
 </p>
diff --git a/simutrans/text/en/simutrans.txt b/simutrans/text/en/simutrans.txt
index 82bf37f..7350ba1 100644
--- a/simutrans/text/en/simutrans.txt
+++ b/simutrans/text/en/simutrans.txt
@@ -1,33 +1,33 @@
-<title>Prologue</title>
-
-<h1><strong>Welcome to Simutrans...</strong></h1>
-
-<p>
-Choose one, out of the many thousands, of Simutrans' lands. Then, put yourself in the shoes of a young entrepeneur with some money from your grandparents: eager to make them proud, with ambitions of establishing a successful transport company, your challenge now is to build a prospering enterprise.
-</p>
-<p>
-As time passes, develop your company into transport empire, keeping the economy running smoothly by delivering freight & satisifying the travel requirements of millions of passengers every month.<br>
-Transport passengers, mail & goods by rail, road, ship & even air.
-</p>
-<p>
-Every land has something different to offer. Take a good look at your surroundings...its future lies in your and your competitors' hands.
-</p>
-<p>
-In the beginning, it maybe easier to start by supplying a power station with required goods. Then, connect other factories, maybe even using central hubs where goods are reloaded.<br>
-The disadvantage of only transporting goods is that towns and cities won't grow and new industries will not appear.
-</p>
-<p>
-Alternatively, you may immediately go for passenger (and mail) transportation. This is more challenging, as the inhabitants of this world want to travel to locations they choose. <br>
-Some need to go to factories for work, some want to go shopping at the large mall in the main town, and others sightseeing.
-</p>
-<p>
-If you don't offer a connection to their destination, they will not travel with you at all. You will need to build networks. When your networks are established, you will need to upgrade them to keep abreast of demand. So plan ahead.<br>
-If passengers like your service, towns will grow and new industries will be established and only then will the economy run smoothly.
-</p>
-<p>
-You can play as long as you like. Start in 1880 and finish in 2050. There will be new vehicles and buildings throughout this time.<br>
-Play against the AI or on your own. Only if you are in debt for three months, you are bankrupt and the game is over.
-</p>
-<p>
-The <strong>Simutrans-Team</strong> and the community wish you a great time here in Simutrans!
+<title>Prologue</title>
+
+<h1><strong>Welcome to Simutrans...</strong></h1>
+
+<p>
+Choose one, out of the many thousands, of Simutrans' lands. Then, put yourself in the shoes of a young entrepeneur with some money from your grandparents: eager to make them proud, with ambitions of establishing a successful transport company, your challenge now is to build a prospering enterprise.
+</p>
+<p>
+As time passes, develop your company into transport empire, keeping the economy running smoothly by delivering freight & satisifying the travel requirements of millions of passengers every month.<br>
+Transport passengers, mail & goods by rail, road, ship & even air.
+</p>
+<p>
+Every land has something different to offer. Take a good look at your surroundings...its future lies in your and your competitors' hands.
+</p>
+<p>
+In the beginning, it maybe easier to start by supplying a power station with required goods. Then, connect other factories, maybe even using central hubs where goods are reloaded.<br>
+The disadvantage of only transporting goods is that towns and cities won't grow and new industries will not appear.
+</p>
+<p>
+Alternatively, you may immediately go for passenger (and mail) transportation. This is more challenging, as the inhabitants of this world want to travel to locations they choose. <br>
+Some need to go to factories for work, some want to go shopping at the large mall in the main town, and others sightseeing.
+</p>
+<p>
+If you don't offer a connection to their destination, they will not travel with you at all. You will need to build networks. When your networks are established, you will need to upgrade them to keep abreast of demand. So plan ahead.<br>
+If passengers like your service, towns will grow and new industries will be established and only then will the economy run smoothly.
+</p>
+<p>
+You can play as long as you like. Start in 1880 and finish in 2050. There will be new vehicles and buildings throughout this time.<br>
+Play against the AI or on your own. Only if you are in debt for three months, you are bankrupt and the game is over.
+</p>
+<p>
+The <strong>Simutrans-Team</strong> and the community wish you a great time here in Simutrans!
 </p>
diff --git a/simutrans/text/en/slopetools.txt b/simutrans/text/en/slopetools.txt
index 20c76b3..173b9ee 100644
--- a/simutrans/text/en/slopetools.txt
+++ b/simutrans/text/en/slopetools.txt
@@ -1,38 +1,38 @@
-<title>Landscaping Tools - raise/lower land Help</title>
-
-<h1><strong>Landscaping Tools</strong></h1>
-
-<p>
-<strong>Landscaping Tools</strong> raise & lower terrain and may be used to provide suitable places for construction.
-</p>
-<p>
-Click on sloping-land-icon at top of game-view to open toolbar.<br>
-Hover mouse-cursor, after opening or clicking on toolbar, over tool to see name and construction <a href="finances.txt">cost</a>.
-</p>
-<p>Tools operate on areas empty of obstructions (e.g. roads, track, buildings, stops & stations).
-</p>
-<p>
-Click on tool to select, changing cursor, then position cursor on terrain in game-view & click to use:
-</p>
-<p>
-<em>Raise Land</em>/<em>Lower Land:</em> raises/lowers terrain<br>
-Cursor is an upward/downward arrow.<br>
-Tools also open with <a href="keys.txt">[u]</a> and [d].
-</p>
-<p>
-<em>Slopes:</em> creates a slope, in direction indicated by tool-option. May create an artificial vertical surface in the process.<br>
-Cursor is a yellow-cube outline which positions slope.
-</p>
-<p>
-<em>?Lower Square</em>/<em>?Raise Square:</em> lowers/raises a specific square of terrain. May create an artificial vertical surface in the process.<br>
-Cursor is a yellow-cube outline which selects square.
-</p>
-<p>
-<em>Restore natural slope:</em> returns terrain to a natural landscape, removing artificial vertical surfaces in the process.<br>
-Cursor is a yellow-cube outline which positions tool.
-</p>
-<p>
-{Tips: Landscaping Tools are easier to use with grid, press [#] & zoom-in game-view.<br>
-Use Destroy/Remove to remove some obstructions.<br>
-Depending on map, tools can raise land into/out of water.}
+<title>Landscaping Tools - raise/lower land Help</title>
+
+<h1><strong>Landscaping Tools</strong></h1>
+
+<p>
+<strong>Landscaping Tools</strong> raise & lower terrain and may be used to provide suitable places for construction.
+</p>
+<p>
+Click on sloping-land-icon at top of game-view to open toolbar.<br>
+Hover mouse-cursor, after opening or clicking on toolbar, over tool to see name and construction <a href="finances.txt">cost</a>.
+</p>
+<p>Tools operate on areas empty of obstructions (e.g. roads, track, buildings, stops & stations).
+</p>
+<p>
+Click on tool to select, changing cursor, then position cursor on terrain in game-view & click to use:
+</p>
+<p>
+<em>Raise Land</em>/<em>Lower Land:</em> raises/lowers terrain<br>
+Cursor is an upward/downward arrow.<br>
+Tools also open with <a href="keys.txt">[u]</a> and [d].
+</p>
+<p>
+<em>Slopes:</em> creates a slope, in direction indicated by tool-option. May create an artificial vertical surface in the process.<br>
+Cursor is a yellow-cube outline which positions slope.
+</p>
+<p>
+<em>?Lower Square</em>/<em>?Raise Square:</em> lowers/raises a specific square of terrain. May create an artificial vertical surface in the process.<br>
+Cursor is a yellow-cube outline which selects square.
+</p>
+<p>
+<em>Restore natural slope:</em> returns terrain to a natural landscape, removing artificial vertical surfaces in the process.<br>
+Cursor is a yellow-cube outline which positions tool.
+</p>
+<p>
+{Tips: Landscaping Tools are easier to use with grid, press [#] & zoom-in game-view.<br>
+Use Destroy/Remove to remove some obstructions.<br>
+Depending on map, tools can raise land into/out of water.}
 </p>
diff --git a/simutrans/text/en/sound.txt b/simutrans/text/en/sound.txt
index 343451a..3d1cfb3 100644
--- a/simutrans/text/en/sound.txt
+++ b/simutrans/text/en/sound.txt
@@ -1,26 +1,26 @@
-<title>Sound Settings Help</title>
-
-<h1><strong>Sound Settings</strong></h1>
-
-<p>
-<strong>Sound Settings</strong> has controls for sound effects & music.
-</p>
-<p>
-<strong>Sound Settings</strong> opens from <a href="options.txt">Game Options.</a>
-</p>
-<p>
-Use arrow-buttons to adjust settings or <a href="mouse.txt">slider-bars</a> to decrease/increase volume:
-</p>
-<p><em>Sound volume:</em> sets volume of sound effects in game.
-</p>
-<p>
-<em>Music volume:</em> sets volume of music. If no music is available then controls will not function.
-</p>
-<p>
-<em>Currently playing:</em>
- changes music; arrow-buttons cycle through available music.
-</p>
-<p>
-Please note: music is not supplied with Simutrans.<br>
-Help to add music available online at http://wiki.simutrans.com
+<title>Sound Settings Help</title>
+
+<h1><strong>Sound Settings</strong></h1>
+
+<p>
+<strong>Sound Settings</strong> has controls for sound effects & music.
+</p>
+<p>
+<strong>Sound Settings</strong> opens from <a href="options.txt">Game Options.</a>
+</p>
+<p>
+Use arrow-buttons to adjust settings or <a href="mouse.txt">slider-bars</a> to decrease/increase volume:
+</p>
+<p><em>Sound volume:</em> sets volume of sound effects in game.
+</p>
+<p>
+<em>Music volume:</em> sets volume of music. If no music is available then controls will not function.
+</p>
+<p>
+<em>Currently playing:</em>
+ changes music; arrow-buttons cycle through available music.
+</p>
+<p>
+Please note: music is not supplied with Simutrans.<br>
+Help to add music available online at http://wiki.simutrans.com
 </p>
diff --git a/simutrans/text/en/special.txt b/simutrans/text/en/special.txt
index bb8cf82..bbf1549 100644
--- a/simutrans/text/en/special.txt
+++ b/simutrans/text/en/special.txt
@@ -1,60 +1,60 @@
-<title>Special Construction Tools Help</title>
-
-<h1><strong>Special Construction Tools</strong></h1>
-
-<p>
-<strong>Special Construction Tools</strong> construct items that are not traffic related and also allow you to operate as another player in the game.
-</p>
-<p>
-Click red-drop-in-yellow-circle-icon (crane-icon in pak128) at top of game-view to open toolbar. <br>
-Hover mouse-cursor over tool-option (after opening or clicking on toolbar) to see name & where appropriate: construction<a href="finances.txt">cost</a>.
-</p>
-<p>
-<strong>Special Construction Tools</strong>include, from left to right:
-</p>
-<p>
-<em>Post Office:</em> tools build a post office that enable a <a href="station.txt">Stop</a> to handle mail. Post Offices increase the capacity and catchment area of the Stop and have a maintenance cost.<br>
-To build a post office: click on tool to select, then click in game-view by an existing Stop. The new Post Office is now considered to be part of the Stop.<br>
-{Tips: Remove Post Offices and some obstructions with Destroy/Remove.}
-</p>
-<p>
-<em>Station Extensions:</em> tools construct extensions & buildings for <a href="station.txt">Stops</a>. Extensions may increase capacity & catchment area for goods & passengers, and maintenance costs. In the corner of some tool-options an icon (used in <a href="haltlist.txt">Station List</a> & Stop Information) shows which items the extension allows the Stop to handle.<br>
-To build an extension: click on tool to select (changes cursor to extension), then click required position, beside an existing Stop, in game-view. The new extension is now considered to be part of the Stop.<br>
-{Tips: Remove extensions with Destroy/Remove.}
-</p>
-<p>
-<em>P+ Change Player:</em> allows game-play as another <a href="players.txt">player </a> if <a href="new_world.txt">Allow player change</a> was selected at the start of the game. Extra <a href="edittools.txt">options</a> are available as the public service player.<br>
-Click on tool (or press <a href="keys.txt">[P]</a>) to cycle through players. A confirmation message appears that player has been changed: click on x in top-left corner of message or use keyboard to close.
-</p>
-<p>
-<em>found a new city:</em> tools establishes a new <a href="citywindow.txt">urban area</a>.<br>
-To build a new city: click on tool or press [C] to select (changes cursor to town hall), then click required position, in game-view. The new city costs 5 million credits and will be built without further confirmation.<br>
-{Tips: Click on the town hall in game-view with Destroy/Remove to remove the new city buildings.}
-</p>
-<p>
-<em>Plant trees:</em> tool places a tree in game-view.<br>
-To plant a tree: click on tool to select (changes cursor to tree), then click required position.<br>
-{Tips: Remove trees with Destroy/Remove.}
-</p>
-<p>
-<em>Build Power Transmission Line:</em> tool builds powerlines that supply power between transformer stations at power plants and <a href="industry_info.txt">industry</a> (to increase productivity). The supply of power generates income. These powerlines cannot cross diagonal tracks and roads.<br>
-To build a high power transmission line: click on to tool or press [l] to select (changes cursor to power lines), then click on a transformer station placed next to a power station, & finally click on a transformer station at an industry to supply it with power to increase production.<br>
-{Tips: Powerlines can be built in stages, click at required points in game-view. Remove powerlines with Destroy/Remove.}
-</p>
-<p>
-<em>Transformer station</em> tool builds a transformer station at power plants or <a href="industry_info.txt">industry</a> for connection to high power transmission lines.<br>
-To build a transformer station: click on tool or press [g] to select (changes cursor to a red-drop-in-yellow-circle), then click required position beside an industry or power plant, in game-view.<br>
-Transformer stations built at power plants must be connected to transformer stations at industry with powerlines to supply electricity.<br>
-If no electricity is being supplied, the transformer station in game-view shows a yellow-lightning-strike, when electricity is being supplied it shows a red-lightning-strike.<br>
-{Tips: Industry and power plants can have multiple transformer stations to increase electricity supply. Remove transformer stations with Destroy/Remove.}
-</p>
-<p>
-<em>Make a sign:
-</em> tool opens controls to place a sign with personalised text in game-view and can be used to move game-view to a different point.<br>
-Click on tool to select or press [M], changes cursor to a text-marker, then click at required point in game-view to open Make a Sign controls. At the top of Make a Sign controls are co-ordinates on map of selected position and an empty box, enter required text in to box (click on box, type the text and click <em>OK</em> or press [Enter] or [Return]) to place sign. The new sign is shown in game-view and listed in Make a Sign controls (with map co-ordinates) when re-opened.<br>
-To move game-view to a sign point: open Make a Sign controls and click on required position in list.<br>
-To remove a Sign: click on <em>Make a Sign
-</em> tool or press [M] to select, changes cursor to a text-marker; then click on co-ordinates of sign in game-view; then click on <em>Remove</em> in Make a Sign controls.<br>
-To close Make a Sign controls: click on x in top-left-corner of controls; or click on<em>Cancel</em>; or use keyboard.<br>
-{Tips: Map co-ordinates of cursors can be seen on right of bottom-bar under game-view. Use [!] to toggle texts of signs in game-view.}
+<title>Special Construction Tools Help</title>
+
+<h1><strong>Special Construction Tools</strong></h1>
+
+<p>
+<strong>Special Construction Tools</strong> construct items that are not traffic related and also allow you to operate as another player in the game.
+</p>
+<p>
+Click red-drop-in-yellow-circle-icon (crane-icon in pak128) at top of game-view to open toolbar. <br>
+Hover mouse-cursor over tool-option (after opening or clicking on toolbar) to see name & where appropriate: construction<a href="finances.txt">cost</a>.
+</p>
+<p>
+<strong>Special Construction Tools</strong>include, from left to right:
+</p>
+<p>
+<em>Post Office:</em> tools build a post office that enable a <a href="station.txt">Stop</a> to handle mail. Post Offices increase the capacity and catchment area of the Stop and have a maintenance cost.<br>
+To build a post office: click on tool to select, then click in game-view by an existing Stop. The new Post Office is now considered to be part of the Stop.<br>
+{Tips: Remove Post Offices and some obstructions with Destroy/Remove.}
+</p>
+<p>
+<em>Station Extensions:</em> tools construct extensions & buildings for <a href="station.txt">Stops</a>. Extensions may increase capacity & catchment area for goods & passengers, and maintenance costs. In the corner of some tool-options an icon (used in <a href="haltlist.txt">Station List</a> & Stop Information) shows which items the extension allows the Stop to handle.<br>
+To build an extension: click on tool to select (changes cursor to extension), then click required position, beside an existing Stop, in game-view. The new extension is now considered to be part of the Stop.<br>
+{Tips: Remove extensions with Destroy/Remove.}
+</p>
+<p>
+<em>P+ Change Player:</em> allows game-play as another <a href="players.txt">player </a> if <a href="new_world.txt">Allow player change</a> was selected at the start of the game. Extra <a href="edittools.txt">options</a> are available as the public service player.<br>
+Click on tool (or press <a href="keys.txt">[P]</a>) to cycle through players. A confirmation message appears that player has been changed: click on x in top-left corner of message or use keyboard to close.
+</p>
+<p>
+<em>found a new city:</em> tools establishes a new <a href="citywindow.txt">urban area</a>.<br>
+To build a new city: click on tool or press [C] to select (changes cursor to town hall), then click required position, in game-view. The new city costs 5 million credits and will be built without further confirmation.<br>
+{Tips: Click on the town hall in game-view with Destroy/Remove to remove the new city buildings.}
+</p>
+<p>
+<em>Plant trees:</em> tool places a tree in game-view.<br>
+To plant a tree: click on tool to select (changes cursor to tree), then click required position.<br>
+{Tips: Remove trees with Destroy/Remove.}
+</p>
+<p>
+<em>Build Power Transmission Line:</em> tool builds powerlines that supply power between transformer stations at power plants and <a href="industry_info.txt">industry</a> (to increase productivity). The supply of power generates income. These powerlines cannot cross diagonal tracks and roads.<br>
+To build a high power transmission line: click on to tool or press [l] to select (changes cursor to power lines), then click on a transformer station placed next to a power station, & finally click on a transformer station at an industry to supply it with power to increase production.<br>
+{Tips: Powerlines can be built in stages, click at required points in game-view. Remove powerlines with Destroy/Remove.}
+</p>
+<p>
+<em>Transformer station</em> tool builds a transformer station at power plants or <a href="industry_info.txt">industry</a> for connection to high power transmission lines.<br>
+To build a transformer station: click on tool or press [g] to select (changes cursor to a red-drop-in-yellow-circle), then click required position beside an industry or power plant, in game-view.<br>
+Transformer stations built at power plants must be connected to transformer stations at industry with powerlines to supply electricity.<br>
+If no electricity is being supplied, the transformer station in game-view shows a yellow-lightning-strike, when electricity is being supplied it shows a red-lightning-strike.<br>
+{Tips: Industry and power plants can have multiple transformer stations to increase electricity supply. Remove transformer stations with Destroy/Remove.}
+</p>
+<p>
+<em>Make a sign:
+</em> tool opens controls to place a sign with personalised text in game-view and can be used to move game-view to a different point.<br>
+Click on tool to select or press [M], changes cursor to a text-marker, then click at required point in game-view to open Make a Sign controls. At the top of Make a Sign controls are co-ordinates on map of selected position and an empty box, enter required text in to box (click on box, type the text and click <em>OK</em> or press [Enter] or [Return]) to place sign. The new sign is shown in game-view and listed in Make a Sign controls (with map co-ordinates) when re-opened.<br>
+To move game-view to a sign point: open Make a Sign controls and click on required position in list.<br>
+To remove a Sign: click on <em>Make a Sign
+</em> tool or press [M] to select, changes cursor to a text-marker; then click on co-ordinates of sign in game-view; then click on <em>Remove</em> in Make a Sign controls.<br>
+To close Make a Sign controls: click on x in top-left-corner of controls; or click on<em>Cancel</em>; or use keyboard.<br>
+{Tips: Map co-ordinates of cursors can be seen on right of bottom-bar under game-view. Use [!] to toggle texts of signs in game-view.}
 </p>
diff --git a/simutrans/text/en/station.txt b/simutrans/text/en/station.txt
index 8a802af..b46aa16 100644
--- a/simutrans/text/en/station.txt
+++ b/simutrans/text/en/station.txt
@@ -1,79 +1,79 @@
-<title>Stop Information Help</title>
-
-<h1><strong>Stop Information</strong></h1>
-
-<p>
-<strong>Stop Information</strong> provides information about a Stop (where vehicles pick-up and drop-off goods and passengers). It also has controls to access further details and change the name of the Stop.
-</p>
-<p>
-A Stop consists of a place where a <a href="convoiinfo.txt">Convoy</a> can pick-up or drop-off goods and passengers and any extension buildings.
-</p>
-<p>
-Tools for the construction of places where Convoys can accept or deliver are available from the toolbar for the respective type of transport: <a href="railtools.txt">?station-platforms</a>; <a href="monorailtools.txt">monorail/maglev train stops</a>; <a href="tramtools.txt">Tram Stops</a>; <a href="roadtools.txt">Road-stops</a>; <a href="shiptools.txt">Docks</a>
-; and <a href="airtools.txt">Airstops</a>.<br>
-{Tips: Water-transport vehicles may use any square of water in the catchment area of a dock to pick-up and drop off goods and pasengers. Larger Stops can be built by constructing on adjacent squares. Stops can be built that accomodate more than one type of transport}.
-</p>
-<p>
-Click on a Stop in game-view with the <a href="inspection_tool.txt">Inspection Tool</a> or click on a Stop listed in <a href="haltlist.txt">Station List</a> or <a href="linemanagement.txt">Line Management</a> to open <strong>Stop Information</strong> which shows the name of the Stop in its titlebar.<br>
-<strong>Stop Information</strong> contains a name-box; a mini-view of Stop; information about the Stop; option buttons; and a list of all items ready for transport at Stop (if all items are not visible <a href="mouse.txt">re-size</a> <strong>Stop Information</strong> or use slider-bars to scroll items):
-</p>
-<p>
-<em>name</em>: assigned name of Stop is shown in name-box at top of <strong>Stop Information</strong>.<br>
-By default name is assigned automatically when the Stop is first built and depends on <a href="citywindow.txt">urban area</a> related to Stop and any <a href="industry_info.txt">industry</a> within catchment area of Stop.<br>
-To change name: click on name-box and type new name.<br>
-{Tips: Use <a href="keys.txt">[!]</a> to toggle view of name above a Stop in game-view. Use [v] to toggle view of catchment area of Stop in game-view. Option to number Stops available in simuconf.tab}
-</p>
-<p>
-<em>status-colour-bar:</em> colours indicate operation of Stop with regards to how overcrowded it is. The status-colour-bar is also used in Station List and Line Management and is the same colour displayed in the colour-bar above a Stop in game-display:<br>
-- <em>yellow:</em> no service and nothing waitung.<br>
-- <em>green:</em> no improvements necessary.<br>
-- <em>orange:</em> stop is slightly overcrowded (with transfer goods mostly).<br>
-- <em>red:</em> stop hold more than 1.5 of its capacity, or more than 200 unhappy passengers, or a factory must stop its production because the station is overcrowded.  These stops will be reported as overcrowded at the beginning of a months.<br>
-{Tips: Use <a href="keys.txt">[!]</a> to toggle view of status-colour-bar (that indicate how crowded Stop is) above a Stop in game-view.}
-</p>
-<p>
-Graphic Icons are also used in Station List and Line Management:<br>
-- <em>freight icon(s)</em> indicate which items (passengers, goods and mail) a Stop can handle.<br>
-{Tips: adding appropriate extensions can change the category of items a Stop can handle. <a href="special.txt">Post offices</a> can be added to Stops to enable handling of mail}.<br>
-- <em>vehicle icon(s)</em> indicate which types of vehicle can use Stop. Icons include: bus (for passengers), truck (for goods), train (for rail), boat and airplane. Trams can be indicated by a bus-icon or a train-icon depending on type of Stop.
-</p>
-<p>
-<em>Storage capacity:</em> amount of each item (goods, passengers and mail) the Stop can accommodate.
-</p>
-<p>
-<em>Stop picture</em>: is a mini-view of the Stop and any visible Convoys.<br>
-Click on the picture to centre game-view on Stop.
-</p>
-<p>
-<em>Passengers</em> numbers indicate amount of following passengers who start their journey at the Stop:<br>
-- <em>happy face</em> indicates number of passengers, who have arrived at an uncrowded Stop as a result of its catchment area and have found a route to their destination and waited for transport.<br>
-- <em>unhappy face</em> indicates number of passengers who have arrived at Stop as a result of its catchment area but did not wait for transport as it was overcrowded.<br>
-- <em>no route</em> indicates number of passengers who have arrived at Stop as a result of its catchment area but left as they did not find a route to their destination.<br>
-{Tips: Keeping passengers happy helps growth of <a href="citywindow.txt">urban areas</a>. Change maximum number of transfers allowed for goods and passengers in simuconf.tab}.
-</p>
-<p>
-<em>Goods and passengers waiting:</em> lists items that wait for transport at Stop in groups of: passengers; mail; and type of goods.<br>
-Information shown for items includes quantity, type, final destination and first transit Stop.<br>
-Option-button (changes name with selection) sorts of items within groups:<br>
- - <em>destination:</em> sorts items, alphanumerically within ASCII-code order (capital letters before lower case letters), by assigned name of final destination Stop.<br>
- - <em>via (detail):</em> sorts items, alphanumerically within ASCII-code order (capital letters before lower case letters), by assigned name of first transfer Stop.<br>
- - <em>via (amount):</em> ?sorts items by quantity headed to first transfer Stop.<br>
- - <em>amount:</em> sorts items by quantity in descending order.<br>
-{Tips: goods-colour-bars above a Stop in game-view (use [!] to toggle) indicate quantity of items that wait for transport and are the same colour as <a href="goods_filter.txt">colour-squares</a> in Goods List.}
-</p>
-<p>
-<em>Chart:</em> click option-button to toggle graph (button is indentented when graph is visible) in <strong>Stop Information</strong>.<br>
-The graph shows statistics for the last 12 months (x-axis) when a graph-option is selected.<br>
-Click on graph-option-button to see information on graph (button is indented when option selected).<br>
-Colours of lines on graph correspond to colours of graph-option-buttons:<br>
-- <em>Happy</em> indicates number of passengers/mails, who have arrived at an uncrowded Stop as a result of its catchment area and have found a route to their destination and waited for transport.<br>
-- <em>Unhappy</em> indicates number of passengers who have arrived at Stop as a result of its catchment area but did not wait for transport as it was overcrowded.<br>
-- <em>No Route</em> indicates number of passengers who have arrived at Stop as a result of its catchment area but left as they did not find a route to their destination.<br>
-- <em>waiting:</em> amount of goods and passengers at Stop that wait for transport.<br>
-- <em>Arrived:</em> amount of goods and passengers dropped-off by a Convoy at Stop as a final destination or transfer point.<br>
-- <em>Departed:</em> amount of goods and passengers picked-up at Stop by a Convoy.<br>
-- <em>Vehicles:</em> amount of Convoys that have departed from Stop.
-</p>
-<p>
-<em>Details:</em> option-button opens <a href="station_details.txt">Stop Details</a> that provides further information about Stop.
+<title>Stop Information Help</title>
+
+<h1><strong>Stop Information</strong></h1>
+
+<p>
+<strong>Stop Information</strong> provides information about a Stop (where vehicles pick-up and drop-off goods and passengers). It also has controls to access further details and change the name of the Stop.
+</p>
+<p>
+A Stop consists of a place where a <a href="convoiinfo.txt">Convoy</a> can pick-up or drop-off goods and passengers and any extension buildings.
+</p>
+<p>
+Tools for the construction of places where Convoys can accept or deliver are available from the toolbar for the respective type of transport: <a href="railtools.txt">?station-platforms</a>; <a href="monorailtools.txt">monorail/maglev train stops</a>; <a href="tramtools.txt">Tram Stops</a>; <a href="roadtools.txt">Road-stops</a>; <a href="shiptools.txt">Docks</a>
+; and <a href="airtools.txt">Airstops</a>.<br>
+{Tips: Water-transport vehicles may use any square of water in the catchment area of a dock to pick-up and drop off goods and pasengers. Larger Stops can be built by constructing on adjacent squares. Stops can be built that accomodate more than one type of transport}.
+</p>
+<p>
+Click on a Stop in game-view with the <a href="inspection_tool.txt">Inspection Tool</a> or click on a Stop listed in <a href="haltlist.txt">Station List</a> or <a href="linemanagement.txt">Line Management</a> to open <strong>Stop Information</strong> which shows the name of the Stop in its titlebar.<br>
+<strong>Stop Information</strong> contains a name-box; a mini-view of Stop; information about the Stop; option buttons; and a list of all items ready for transport at Stop (if all items are not visible <a href="mouse.txt">re-size</a> <strong>Stop Information</strong> or use slider-bars to scroll items):
+</p>
+<p>
+<em>name</em>: assigned name of Stop is shown in name-box at top of <strong>Stop Information</strong>.<br>
+By default name is assigned automatically when the Stop is first built and depends on <a href="citywindow.txt">urban area</a> related to Stop and any <a href="industry_info.txt">industry</a> within catchment area of Stop.<br>
+To change name: click on name-box and type new name.<br>
+{Tips: Use <a href="keys.txt">[!]</a> to toggle view of name above a Stop in game-view. Use [v] to toggle view of catchment area of Stop in game-view. Option to number Stops available in simuconf.tab}
+</p>
+<p>
+<em>status-colour-bar:</em> colours indicate operation of Stop with regards to how overcrowded it is. The status-colour-bar is also used in Station List and Line Management and is the same colour displayed in the colour-bar above a Stop in game-display:<br>
+- <em>yellow:</em> no service and nothing waitung.<br>
+- <em>green:</em> no improvements necessary.<br>
+- <em>orange:</em> stop is slightly overcrowded (with transfer goods mostly).<br>
+- <em>red:</em> stop hold more than 1.5 of its capacity, or more than 200 unhappy passengers, or a factory must stop its production because the station is overcrowded.  These stops will be reported as overcrowded at the beginning of a months.<br>
+{Tips: Use <a href="keys.txt">[!]</a> to toggle view of status-colour-bar (that indicate how crowded Stop is) above a Stop in game-view.}
+</p>
+<p>
+Graphic Icons are also used in Station List and Line Management:<br>
+- <em>freight icon(s)</em> indicate which items (passengers, goods and mail) a Stop can handle.<br>
+{Tips: adding appropriate extensions can change the category of items a Stop can handle. <a href="special.txt">Post offices</a> can be added to Stops to enable handling of mail}.<br>
+- <em>vehicle icon(s)</em> indicate which types of vehicle can use Stop. Icons include: bus (for passengers), truck (for goods), train (for rail), boat and airplane. Trams can be indicated by a bus-icon or a train-icon depending on type of Stop.
+</p>
+<p>
+<em>Storage capacity:</em> amount of each item (goods, passengers and mail) the Stop can accommodate.
+</p>
+<p>
+<em>Stop picture</em>: is a mini-view of the Stop and any visible Convoys.<br>
+Click on the picture to centre game-view on Stop.
+</p>
+<p>
+<em>Passengers</em> numbers indicate amount of following passengers who start their journey at the Stop:<br>
+- <em>happy face</em> indicates number of passengers, who have arrived at an uncrowded Stop as a result of its catchment area and have found a route to their destination and waited for transport.<br>
+- <em>unhappy face</em> indicates number of passengers who have arrived at Stop as a result of its catchment area but did not wait for transport as it was overcrowded.<br>
+- <em>no route</em> indicates number of passengers who have arrived at Stop as a result of its catchment area but left as they did not find a route to their destination.<br>
+{Tips: Keeping passengers happy helps growth of <a href="citywindow.txt">urban areas</a>. Change maximum number of transfers allowed for goods and passengers in simuconf.tab}.
+</p>
+<p>
+<em>Goods and passengers waiting:</em> lists items that wait for transport at Stop in groups of: passengers; mail; and type of goods.<br>
+Information shown for items includes quantity, type, final destination and first transit Stop.<br>
+Option-button (changes name with selection) sorts of items within groups:<br>
+ - <em>destination:</em> sorts items, alphanumerically within ASCII-code order (capital letters before lower case letters), by assigned name of final destination Stop.<br>
+ - <em>via (detail):</em> sorts items, alphanumerically within ASCII-code order (capital letters before lower case letters), by assigned name of first transfer Stop.<br>
+ - <em>via (amount):</em> ?sorts items by quantity headed to first transfer Stop.<br>
+ - <em>amount:</em> sorts items by quantity in descending order.<br>
+{Tips: goods-colour-bars above a Stop in game-view (use [!] to toggle) indicate quantity of items that wait for transport and are the same colour as <a href="goods_filter.txt">colour-squares</a> in Goods List.}
+</p>
+<p>
+<em>Chart:</em> click option-button to toggle graph (button is indentented when graph is visible) in <strong>Stop Information</strong>.<br>
+The graph shows statistics for the last 12 months (x-axis) when a graph-option is selected.<br>
+Click on graph-option-button to see information on graph (button is indented when option selected).<br>
+Colours of lines on graph correspond to colours of graph-option-buttons:<br>
+- <em>Happy</em> indicates number of passengers/mails, who have arrived at an uncrowded Stop as a result of its catchment area and have found a route to their destination and waited for transport.<br>
+- <em>Unhappy</em> indicates number of passengers who have arrived at Stop as a result of its catchment area but did not wait for transport as it was overcrowded.<br>
+- <em>No Route</em> indicates number of passengers who have arrived at Stop as a result of its catchment area but left as they did not find a route to their destination.<br>
+- <em>waiting:</em> amount of goods and passengers at Stop that wait for transport.<br>
+- <em>Arrived:</em> amount of goods and passengers dropped-off by a Convoy at Stop as a final destination or transfer point.<br>
+- <em>Departed:</em> amount of goods and passengers picked-up at Stop by a Convoy.<br>
+- <em>Vehicles:</em> amount of Convoys that have departed from Stop.
+</p>
+<p>
+<em>Details:</em> option-button opens <a href="station_details.txt">Stop Details</a> that provides further information about Stop.
 </p>
diff --git a/simutrans/text/en/station_details.txt b/simutrans/text/en/station_details.txt
index 887bab5..af81d31 100644
--- a/simutrans/text/en/station_details.txt
+++ b/simutrans/text/en/station_details.txt
@@ -1,33 +1,33 @@
-<title>Stop Details Help</title>
-
-<h1><strong>Stop Details</strong></h1>
-
-<p>
-<strong>Stop Details</strong> provides more information about a Stop (where vehicles pick-up and drop-off goods and passengers).
-</p>
-<p>
-<strong>Stop Details</strong> opens from
-<a href="station.txt">
-Details</a> option-button in Stop Information.
-<br>
-If all items are not visible <a href="mouse.txt">re-size</a> <strong>Stop Details</strong> or use slider-bars to scroll items)
-</p>
-<p>
-Information listed includes:<br>
-<em>Connected factories:</em> names and map co-ordinates (in brackets) of <a href="industry_info.txt">industry</a> in catchment area of Stop.<br>
-{Tips: Use
-<a href="keys.txt">[v]</a> to toggle view of catchment area of stops in game.}
-</p>
-<p>
-<em>Goods needed by nearby industries:</em> types of
-<a href="goods_filter.txt">goods</a> required by <a href="industryinfo.txt">industry</a> in catchment area of Stop.
-</p>
-<p>
-<em>Lines serving this Stop:</em>
-<a href="linemanagement.txt">Lines</a> that use this Stop.<br>
-Lines are listed alphanumerically within ASCII-code order (capital letters before lower case letters).
-</p>
-<p>
-<em>Direct routes from here:</em>lists name of Stops that can be reached without a transfer and type of items (goods and passnegers) that can be delivered.<br>
-Stops are listed alphanumerically within ASCII-code order (capital letters before lower case letters) by ?type of transport, name of Stop, and type of item that can be delivered (which is also shown for each Stop).
+<title>Stop Details Help</title>
+
+<h1><strong>Stop Details</strong></h1>
+
+<p>
+<strong>Stop Details</strong> provides more information about a Stop (where vehicles pick-up and drop-off goods and passengers).
+</p>
+<p>
+<strong>Stop Details</strong> opens from
+<a href="station.txt">
+Details</a> option-button in Stop Information.
+<br>
+If all items are not visible <a href="mouse.txt">re-size</a> <strong>Stop Details</strong> or use slider-bars to scroll items)
+</p>
+<p>
+Information listed includes:<br>
+<em>Connected factories:</em> names and map co-ordinates (in brackets) of <a href="industry_info.txt">industry</a> in catchment area of Stop.<br>
+{Tips: Use
+<a href="keys.txt">[v]</a> to toggle view of catchment area of stops in game.}
+</p>
+<p>
+<em>Goods needed by nearby industries:</em> types of
+<a href="goods_filter.txt">goods</a> required by <a href="industryinfo.txt">industry</a> in catchment area of Stop.
+</p>
+<p>
+<em>Lines serving this Stop:</em>
+<a href="linemanagement.txt">Lines</a> that use this Stop.<br>
+Lines are listed alphanumerically within ASCII-code order (capital letters before lower case letters).
+</p>
+<p>
+<em>Direct routes from here:</em>lists name of Stops that can be reached without a transfer and type of items (goods and passnegers) that can be delivered.<br>
+Stops are listed alphanumerically within ASCII-code order (capital letters before lower case letters) by ?type of transport, name of Stop, and type of item that can be delivered (which is also shown for each Stop).
 </p>
diff --git a/simutrans/text/en/tramtools.txt b/simutrans/text/en/tramtools.txt
index 2d39aa8..df4c5dc 100644
--- a/simutrans/text/en/tramtools.txt
+++ b/simutrans/text/en/tramtools.txt
@@ -1,68 +1,68 @@
-<title>Tram/light rail tools Help</title>
-
-<h1><strong>Tram/light rail tools</strong></h1>
-
-<p>
-<strong>Tram/light rail tools</strong> construct a tram transport network. The tools may build: tramtrack (and electrify or remove it), signals, a tram depot, and tram stops.
-If playing with <a href="new_world.txt">timeline</a>, then as time passes in Simutrans more tool-options may appear.
-</p>
-<p>
-Click tram-icon at top of game-view to open toolbar.<br>
-Hover mouse-cursor over tool-option (after opening or clicking on toolbar) to see name & where appropriate: construction <a href="finances.txt">cost</a>, & maximum speed limit.
-</p>
-<p>
-<strong>Tram/light rail tools</strong> include, from left to right:
-</p>
-<p>
-<em>Tram Track:</em> tools build Track, for rail vehicles between two points.<br>
-Tram Track can be built along roads and in urban areas, but not on areas occupied by other buildings. Tracks can only be built on slopes in the direction of the slope & not over rough terrain, water and obstructions. New Track built may use existing track in its path.<br>
-To build Track: click on tool to select Track (changes cursor to track); then click on game-view for start-point of Track (shows a bulldozer in game-view and displays map co-ordinates on right of bottom-bar under game-view); & finally click on game-view for end-point for Track.<br>
-{Tips:  Different types of tracks may connect (however not when built by some other <a href="players.txt">players</a>). Use <a href="railtools.txt">bridges</a> & tunnels to connect tracks across rough terrain or to avoid obstructions. Use Destroy/Remove to remove individual pieces of Track & some obstructions. Use <a href="keys.txt">[Ctrl]</a> at same time for extra functions. Undo [z] does not refund constructions costs.}
-</p>
-<p>
-<em>
-Electrify Track:</em> tools electrify Track, bridges or tunnels between two points in game-view, for use by electric vehicles.<br>
-To electrify Track: click on tool or press [e] (changes cursor to electric-track-icon) to select, then click on Track in game-view for start-point of electrification (places a electric-track-icon in game-view), & finally click on a second point on Track, to electrify portion of Track up to start-point.<br>
-{Tips: Use Destroy/Remove to change back to non-electric Tracks.}
-</p>
-<p>
-<em>Remove Tracks:</em> tool removes Track & electric Track, when no vehicles are present, between two points in game-view (station-platforms, road-stops, signals, tunnels & bridges in path are removed too). Use of tool incurs a <a href="finances.txt">construction cost</a>.<br>
-To remove Track: click on tool (changes cursor to a red-cross); then click on track that is to be deleted (selects deletion-point shown by a red cross in game-view); & finally click at a second-point on connected Track, to remove portion up to first deletion-point.<br>
-{Tips: Operate as another player to remove their Tracks.}
-</p>
-<p>
-<em>Rail Signals:</em> tools build signals for rail vehicles on a Track in game-view. Signals direct & regulate flow of vehicles on tracks & bridges, junctions & <a href="station.txt">Stops</a> (where vehicles pick-up and drop-off goods and passengers).<br>
-Two-way & one-way versions of signals can be built. To build a two-way signal on track: click on tool to select signal (changes cursor to signals); then click on track. To build a one-way signal: click again at same point, with signals-cursor, to cycle through one-way signals, back to a two-way signal.<br>
-IMPORTANT: Take care not to place one-way signals that prevent vehicles reaching their destination, by default vehicles drive on the right (can be changed in simuconf.tab).<br>
-- <em>Signals:</em> vehicles proceed only if Track ahead up to next signal or destination in <a href="schedule.txt">Schedule</a> (a <a href="station.txt">Stop</a> or waypoint) is not occupied by another vehicle. In one-way mode vehicles pass in one direction only.<br>
-- <em>RailClose:</em> vehicles do not proceed beyond signal (available in one-way mode only).<br>
-- <em>PreSignals:</em> vehicles proceed if area of Track ahead (either between three consecutive signals or to next destination in <a href="schedule.txt">Schedule</a>) is not occupied by another vehicle. In one-way mode they let vehicles pass in one direction only.<br>
-- <em>ChooseSignals:</em> direct vehicles to an empty station-platform, at a multi-platform <a href="station.txt">Stop</a>: a vehicle passing this signal may use any empty platform at its next destination, and not just the one assigned in its <a href="schedule.txt">schedule</a>. If no empty platform or clear route to next destination is found, then vehicles wait at signal.<br>
-{Tips:  Remove signals with Destroy/Remove. Hold down [Ctrl] to place signals on bridges over lower Tracks.}
-</p>
-<p>
-<em>Tram</em> <a href="depot.txt"><em>Depot:</em></a> tool builds a depot for purchasing & managing trams.<br>
-Depots have a maintenance cost & are built on the end of track in game-view.<br>
-To build a tram depot: click on tool (changes cursor to a depot), then click on end of Track.<br>
-{Tips: Depots only show electric vehicles if they are on electric Track. Remove depots with Destroy/Remove.}
-</p>
-<p>
-<em>?Rail-stops:</em> tools build station-platforms, used by rail vehicles to pick-up and drop-off goods, passengers & mail.<br>
-A station-platform when not built adjacent to an existing <a href="station.txt">Stop</a> will create a new Stop.<br>
-Rail-stops have a maintenance cost & are built on Track (but not at bends and junctions in Track).<br>
-Rail-stops have a catchment area for goods, passengers & mail. Different station-platforms may have different capacities for passengers and mail. In the corner of some tool-options an icon (used in <a href="haltlist.txt">Station List</a> & Stop Information) shows which items the station-platform allows a Stop to handle.<br>
-To build a a station-platform: click on tool to select (changes cursor to a platform), then click on Track.<br>
-{Tips: Remove Rail-stops with Destroy/Remove. Extend station-platforms & build multi-platform Stops (by building more platform sections on adjacent Track) to accommodate longer and more vehicles, increase capacity & catchment area. Press [v] to show/hide catchment area for goods & passengers in game-view. Hold down [Ctrl] to build on bridges above lower Tracks.}
-</p>
-<p>
-<em>Car Parking:</em> (available only in pak 128) tools construct extensions for <a href="station.txt">Stops</a> which increase capacity & catchment area for goods & passengers, and maintenance cost.<br>
-To build an extension: click on tool to select extension (changes cursor to extension), then click required position on a road, beside an existing Stop in game-view. The new extension is now considered to be part of the Stop.<br>
-{Tips: Remove extensions with the Destroy/Remove.}
-</p>
-<p>
-<em>?Road-stops:</em> tools build places for trams and road vehicles to pick-up and drop-off goods, mail, and passengers.<br>
-A Road-stop when not built adjacent to an existing <a href="station.txt">Stop</a> will create a new Stop.
-Road-stops are built on<a href="roadtools.txt">road</a>& have a maintenance cost and a catchment area for goods, passengers & mail. In the corner of some tool-options an icon (used in Station List & Stop Information) shows which items the Road-stop allows a Stop to handle. Different Road-stops may have different capacities for goods, passengers & mail.<br>
-To build a Road-stop: click on tool to select (changes cursor to roadstop), then click required position on a road in game-view.<br>
-{Tips: Remove Road-stops with the Destroy/Remove. Hold down [Ctrl] to build on bridges above lower roads.}
+<title>Tram/light rail tools Help</title>
+
+<h1><strong>Tram/light rail tools</strong></h1>
+
+<p>
+<strong>Tram/light rail tools</strong> construct a tram transport network. The tools may build: tramtrack (and electrify or remove it), signals, a tram depot, and tram stops.
+If playing with <a href="new_world.txt">timeline</a>, then as time passes in Simutrans more tool-options may appear.
+</p>
+<p>
+Click tram-icon at top of game-view to open toolbar.<br>
+Hover mouse-cursor over tool-option (after opening or clicking on toolbar) to see name & where appropriate: construction <a href="finances.txt">cost</a>, & maximum speed limit.
+</p>
+<p>
+<strong>Tram/light rail tools</strong> include, from left to right:
+</p>
+<p>
+<em>Tram Track:</em> tools build Track, for rail vehicles between two points.<br>
+Tram Track can be built along roads and in urban areas, but not on areas occupied by other buildings. Tracks can only be built on slopes in the direction of the slope & not over rough terrain, water and obstructions. New Track built may use existing track in its path.<br>
+To build Track: click on tool to select Track (changes cursor to track); then click on game-view for start-point of Track (shows a bulldozer in game-view and displays map co-ordinates on right of bottom-bar under game-view); & finally click on game-view for end-point for Track.<br>
+{Tips:  Different types of tracks may connect (however not when built by some other <a href="players.txt">players</a>). Use <a href="railtools.txt">bridges</a> & tunnels to connect tracks across rough terrain or to avoid obstructions. Use Destroy/Remove to remove individual pieces of Track & some obstructions. Use <a href="keys.txt">[Ctrl]</a> at same time for extra functions. Undo [z] does not refund constructions costs.}
+</p>
+<p>
+<em>
+Electrify Track:</em> tools electrify Track, bridges or tunnels between two points in game-view, for use by electric vehicles.<br>
+To electrify Track: click on tool or press [e] (changes cursor to electric-track-icon) to select, then click on Track in game-view for start-point of electrification (places a electric-track-icon in game-view), & finally click on a second point on Track, to electrify portion of Track up to start-point.<br>
+{Tips: Use Destroy/Remove to change back to non-electric Tracks.}
+</p>
+<p>
+<em>Remove Tracks:</em> tool removes Track & electric Track, when no vehicles are present, between two points in game-view (station-platforms, road-stops, signals, tunnels & bridges in path are removed too). Use of tool incurs a <a href="finances.txt">construction cost</a>.<br>
+To remove Track: click on tool (changes cursor to a red-cross); then click on track that is to be deleted (selects deletion-point shown by a red cross in game-view); & finally click at a second-point on connected Track, to remove portion up to first deletion-point.<br>
+{Tips: Operate as another player to remove their Tracks.}
+</p>
+<p>
+<em>Rail Signals:</em> tools build signals for rail vehicles on a Track in game-view. Signals direct & regulate flow of vehicles on tracks & bridges, junctions & <a href="station.txt">Stops</a> (where vehicles pick-up and drop-off goods and passengers).<br>
+Two-way & one-way versions of signals can be built. To build a two-way signal on track: click on tool to select signal (changes cursor to signals); then click on track. To build a one-way signal: click again at same point, with signals-cursor, to cycle through one-way signals, back to a two-way signal.<br>
+IMPORTANT: Take care not to place one-way signals that prevent vehicles reaching their destination, by default vehicles drive on the right (can be changed in simuconf.tab).<br>
+- <em>Signals:</em> vehicles proceed only if Track ahead up to next signal or destination in <a href="schedule.txt">Schedule</a> (a <a href="station.txt">Stop</a> or waypoint) is not occupied by another vehicle. In one-way mode vehicles pass in one direction only.<br>
+- <em>RailClose:</em> vehicles do not proceed beyond signal (available in one-way mode only).<br>
+- <em>PreSignals:</em> vehicles proceed if area of Track ahead (either between three consecutive signals or to next destination in <a href="schedule.txt">Schedule</a>) is not occupied by another vehicle. In one-way mode they let vehicles pass in one direction only.<br>
+- <em>ChooseSignals:</em> direct vehicles to an empty station-platform, at a multi-platform <a href="station.txt">Stop</a>: a vehicle passing this signal may use any empty platform at its next destination, and not just the one assigned in its <a href="schedule.txt">schedule</a>. If no empty platform or clear route to next destination is found, then vehicles wait at signal.<br>
+{Tips:  Remove signals with Destroy/Remove. Hold down [Ctrl] to place signals on bridges over lower Tracks.}
+</p>
+<p>
+<em>Tram</em> <a href="depot.txt"><em>Depot:</em></a> tool builds a depot for purchasing & managing trams.<br>
+Depots have a maintenance cost & are built on the end of track in game-view.<br>
+To build a tram depot: click on tool (changes cursor to a depot), then click on end of Track.<br>
+{Tips: Depots only show electric vehicles if they are on electric Track. Remove depots with Destroy/Remove.}
+</p>
+<p>
+<em>?Rail-stops:</em> tools build station-platforms, used by rail vehicles to pick-up and drop-off goods, passengers & mail.<br>
+A station-platform when not built adjacent to an existing <a href="station.txt">Stop</a> will create a new Stop.<br>
+Rail-stops have a maintenance cost & are built on Track (but not at bends and junctions in Track).<br>
+Rail-stops have a catchment area for goods, passengers & mail. Different station-platforms may have different capacities for passengers and mail. In the corner of some tool-options an icon (used in <a href="haltlist.txt">Station List</a> & Stop Information) shows which items the station-platform allows a Stop to handle.<br>
+To build a a station-platform: click on tool to select (changes cursor to a platform), then click on Track.<br>
+{Tips: Remove Rail-stops with Destroy/Remove. Extend station-platforms & build multi-platform Stops (by building more platform sections on adjacent Track) to accommodate longer and more vehicles, increase capacity & catchment area. Press [v] to show/hide catchment area for goods & passengers in game-view. Hold down [Ctrl] to build on bridges above lower Tracks.}
+</p>
+<p>
+<em>Car Parking:</em> (available only in pak 128) tools construct extensions for <a href="station.txt">Stops</a> which increase capacity & catchment area for goods & passengers, and maintenance cost.<br>
+To build an extension: click on tool to select extension (changes cursor to extension), then click required position on a road, beside an existing Stop in game-view. The new extension is now considered to be part of the Stop.<br>
+{Tips: Remove extensions with the Destroy/Remove.}
+</p>
+<p>
+<em>?Road-stops:</em> tools build places for trams and road vehicles to pick-up and drop-off goods, mail, and passengers.<br>
+A Road-stop when not built adjacent to an existing <a href="station.txt">Stop</a> will create a new Stop.
+Road-stops are built on<a href="roadtools.txt">road</a>& have a maintenance cost and a catchment area for goods, passengers & mail. In the corner of some tool-options an icon (used in Station List & Stop Information) shows which items the Road-stop allows a Stop to handle. Different Road-stops may have different capacities for goods, passengers & mail.<br>
+To build a Road-stop: click on tool to select (changes cursor to roadstop), then click required position on a road in game-view.<br>
+{Tips: Remove Road-stops with the Destroy/Remove. Hold down [Ctrl] to build on bridges above lower roads.}
 </p>
diff --git a/simutrans/text/en/window.txt b/simutrans/text/en/window.txt
index e164917..a21626b 100644
--- a/simutrans/text/en/window.txt
+++ b/simutrans/text/en/window.txt
@@ -1,78 +1,78 @@
-<title>Game Interface Usage Help</title>
-
-<h1><strong>Game Interface</strong></h1>
-
-<p>
-Simutrans is played through the <strong>Game Interface</strong> which provides information about the current game; access to toolbars & game-controls; and a view-of the current game-world.
-</p>
-<p>
-<em>titlebar</em>: the left of the titlebar of the <strong>Game Interface</strong> shows the version and release date of Simutrans that is currently running.<br>
-The right hand side of the titlebar also contains controls to minimise, maximise the <strong>Game Interface</strong> and also to exit Simutrans.
-</p>
-<p>
-<em>Icons</em>: a row of icons, used to access game-toolbars and game-controls when playing Simutrans, is directly below the <em>titlebar</em>. <em>Icons</em> (click to use) are grouped in three sets:
-</p>
-<p>
-- <a href="general.txt"><it>Main Menu</it></a> icons include:<br>
-- <it>floppy-disc</it>: opens <a href="options.txt">
-Game Options</a><br>
-- <it>map</it>: opens <a href="map.txt">Map</a>
-<br>
-- <it>magnifying-glass</it> selects <a href="inspection_tool.txt">Inspection Tool</a><br>
-- <it>sloping-land-icon</it>: opens <a href="slopetools.txt">landscape toolbar</a><br>
-- <it>train</it>: opens <a href="railtools.txt">?railroad/train toolbar</a>
-<br>
-- <it>monorail/maglev</it>: <a href="monorailtools.txt">monorail transportation toolbar</a><br>
-- <it>tram</it>: opens <a href="tramtools.txt">tram transportation toolbar</a>
-<br>
-- <it>truck</it>: opens <a href="roadtools.txt">road transportation toolbar</a><br>
-- <em>ship</em>: opens <a href="shiptools.txt">water transportation toolbar</a>
-<br>
-- <em>airplane</em>: opens <a href="airtools.txt">air transportation toolbar</a>
-<br>
-- <em>red-drop-in-yellow-circle</em> (<em>crane-icon</em> in pak128): opens <a href="special.txt">special construction toolbar</a><br>
-- <em>red-cross</em> (<it>bulldozer-icon</it> in pak128): selects <a href="removal_tool.txt">Destroy/Remove Tool</a>
-</p>
-<p>
-- <a href="general.txt"><it>Management Menu</it></a> icons include:<br>
-- <em>network-icon</em>: opens <a href="linemanagement.txt">Line Management</a>
-<br>
-- <em>list-icon</em>: opens <a href="list.txt">Lists</a>
-<br>
-- <em>mailbox-icon</em>: opens <a href="mailbox.txt">Message Centre</a>
-<br>
-- <em>money-icon</em>: opens <a href="finances.txt">Finances</a>
-</p>
-<p>
-- <a href="general.txt"><it>Other Options</it></a> icons include:<br>
-- <em>camera-icon</em>: captures current image of <strong>Game Interface</strong> (without the <em>titlebar</em>) and saves it as a bitmap file in the directory/folder ...simutrans/screeshot/<br>
-{Tips: Image can also be captured with keypress <a href="keys.txt">[c]</a>.}
-<br>
-- <em>coffee-mug-icon</em>: pause
-s/unpauses game .<br>
-{Tips: Keypress [p] also can be used to pause/unpause game}.<br>
-- <em>>> icon</em>: selects/deselects Fast Forward. (changes rate at which Time , <em>T</em>, passes in game).<br>
-{Tips: Fast Forward can alo be selected/deselected with keypress <a href="keys.txt">[W]</a><br>
-IMPORTANT: Game may not run smoothly;<a href="display.txt"><strong>Display Information</strong></a>indicates if the computer can cope with change.}<br>
-- <it>?</it>: opens <a href="general.txt">Simutrans Help</a>
-
-</p>
-<p>
-<em>game-view</em> of a portion of the current game-world is displayed below the <em>Icons</em>.<br>
-You can zoom-in and zoom-out the game-view and also scroll around to view other parts of the game-world using a <a href="mouse.txt">mouse</a> or <a href="keys.txt">keyboard</a>.
-</p>
-<p>
-<em>temporary scroll-bar</em> appears and displays <a href="mailbox.txt">messages</a> at the bottom of the game-view.<br>
-{Tips: Click on a message to centre game-view to a related position.}
-</p>
-<p>
-A bottom-bar that provides information about the current game-world is shown under the game-view.<br>
-Information provided, from left to right on the bottom-bar includes:<br>
-<em>date & time</em>: current date and time of game-world, follows a graphic and name of season.<br>
-<em>account balance</em>: current cash available for construction and other costs (purchasing vehicles, maintaining transport infrastructure and operation costs of running vehicles).<br>
-<em>co-ordinates</em>: indicate position of cursor in game-view. The three figures represent X co-ordinate, Y co-ordinate and height.<br>
-<em>T</em>: indicates the rate at which time passes in the game.<br>
-{Tips: Use <a href="keys.txt">[.]</a> / [,]  to accelerate/decelerate Time, T ; <a href="display.txt"><strong>Display Information</strong></a>indicates if the computer can cope with change.<br>
-Use of <a href="fast_forward.txt">Fast Forward</a> replaces <em>T</em> with ">>" on bottom-bar.}<br>
-<em>timeline</em>: indicates whether a <a href="new_world.txt">timeline</a> has been selected in the current game.
+<title>Game Interface Usage Help</title>
+
+<h1><strong>Game Interface</strong></h1>
+
+<p>
+Simutrans is played through the <strong>Game Interface</strong> which provides information about the current game; access to toolbars & game-controls; and a view-of the current game-world.
+</p>
+<p>
+<em>titlebar</em>: the left of the titlebar of the <strong>Game Interface</strong> shows the version and release date of Simutrans that is currently running.<br>
+The right hand side of the titlebar also contains controls to minimise, maximise the <strong>Game Interface</strong> and also to exit Simutrans.
+</p>
+<p>
+<em>Icons</em>: a row of icons, used to access game-toolbars and game-controls when playing Simutrans, is directly below the <em>titlebar</em>. <em>Icons</em> (click to use) are grouped in three sets:
+</p>
+<p>
+- <a href="general.txt"><it>Main Menu</it></a> icons include:<br>
+- <it>floppy-disc</it>: opens <a href="options.txt">
+Game Options</a><br>
+- <it>map</it>: opens <a href="map.txt">Map</a>
+<br>
+- <it>magnifying-glass</it> selects <a href="inspection_tool.txt">Inspection Tool</a><br>
+- <it>sloping-land-icon</it>: opens <a href="slopetools.txt">landscape toolbar</a><br>
+- <it>train</it>: opens <a href="railtools.txt">?railroad/train toolbar</a>
+<br>
+- <it>monorail/maglev</it>: <a href="monorailtools.txt">monorail transportation toolbar</a><br>
+- <it>tram</it>: opens <a href="tramtools.txt">tram transportation toolbar</a>
+<br>
+- <it>truck</it>: opens <a href="roadtools.txt">road transportation toolbar</a><br>
+- <em>ship</em>: opens <a href="shiptools.txt">water transportation toolbar</a>
+<br>
+- <em>airplane</em>: opens <a href="airtools.txt">air transportation toolbar</a>
+<br>
+- <em>red-drop-in-yellow-circle</em> (<em>crane-icon</em> in pak128): opens <a href="special.txt">special construction toolbar</a><br>
+- <em>red-cross</em> (<it>bulldozer-icon</it> in pak128): selects <a href="removal_tool.txt">Destroy/Remove Tool</a>
+</p>
+<p>
+- <a href="general.txt"><it>Management Menu</it></a> icons include:<br>
+- <em>network-icon</em>: opens <a href="linemanagement.txt">Line Management</a>
+<br>
+- <em>list-icon</em>: opens <a href="list.txt">Lists</a>
+<br>
+- <em>mailbox-icon</em>: opens <a href="mailbox.txt">Message Centre</a>
+<br>
+- <em>money-icon</em>: opens <a href="finances.txt">Finances</a>
+</p>
+<p>
+- <a href="general.txt"><it>Other Options</it></a> icons include:<br>
+- <em>camera-icon</em>: captures current image of <strong>Game Interface</strong> (without the <em>titlebar</em>) and saves it as a bitmap file in the directory/folder ...simutrans/screeshot/<br>
+{Tips: Image can also be captured with keypress <a href="keys.txt">[c]</a>.}
+<br>
+- <em>coffee-mug-icon</em>: pause
+s/unpauses game .<br>
+{Tips: Keypress [p] also can be used to pause/unpause game}.<br>
+- <em>>> icon</em>: selects/deselects Fast Forward. (changes rate at which Time , <em>T</em>, passes in game).<br>
+{Tips: Fast Forward can alo be selected/deselected with keypress <a href="keys.txt">[W]</a><br>
+IMPORTANT: Game may not run smoothly;<a href="display.txt"><strong>Display Information</strong></a>indicates if the computer can cope with change.}<br>
+- <it>?</it>: opens <a href="general.txt">Simutrans Help</a>
+
+</p>
+<p>
+<em>game-view</em> of a portion of the current game-world is displayed below the <em>Icons</em>.<br>
+You can zoom-in and zoom-out the game-view and also scroll around to view other parts of the game-world using a <a href="mouse.txt">mouse</a> or <a href="keys.txt">keyboard</a>.
+</p>
+<p>
+<em>temporary scroll-bar</em> appears and displays <a href="mailbox.txt">messages</a> at the bottom of the game-view.<br>
+{Tips: Click on a message to centre game-view to a related position.}
+</p>
+<p>
+A bottom-bar that provides information about the current game-world is shown under the game-view.<br>
+Information provided, from left to right on the bottom-bar includes:<br>
+<em>date & time</em>: current date and time of game-world, follows a graphic and name of season.<br>
+<em>account balance</em>: current cash available for construction and other costs (purchasing vehicles, maintaining transport infrastructure and operation costs of running vehicles).<br>
+<em>co-ordinates</em>: indicate position of cursor in game-view. The three figures represent X co-ordinate, Y co-ordinate and height.<br>
+<em>T</em>: indicates the rate at which time passes in the game.<br>
+{Tips: Use <a href="keys.txt">[.]</a> / [,]  to accelerate/decelerate Time, T ; <a href="display.txt"><strong>Display Information</strong></a>indicates if the computer can cope with change.<br>
+Use of <a href="fast_forward.txt">Fast Forward</a> replaces <em>T</em> with ">>" on bottom-bar.}<br>
+<em>timeline</em>: indicates whether a <a href="new_world.txt">timeline</a> has been selected in the current game.
 </p>
diff --git a/simutrans/text/es/airtools.txt b/simutrans/text/es/airtools.txt
index 7c30ef8..6149236 100644
--- a/simutrans/text/es/airtools.txt
+++ b/simutrans/text/es/airtools.txt
@@ -1,53 +1,53 @@
-<title>Ayuda sobre herramientas de Aeropuertos</title>
-
-<h1><strong>Aeropuertos</strong></h1>
-
-<p>
-<strong>Aeropuertos</strong> contiene herramientas para construir una red de transporte aereo. Las herramientas pueden eliminar o crear : taxiways y pistas de aterrizaje para aviones, Airstops (usadas para dejar o recoger mercancias y pasajeros), depositos de aviones (para comprar y gestionar los aviones) y algunos edificios mas de aeropuertos.Si tienes activa la opcion <a href="new_world.txt">usar cronologia</a>, entonces a medida que pase el tiempo, apareceran mas opciones en la barra de Aeropuertos.
-</p>
-<p>
-Pulsa el icono del avion en la parte superio de la pantalla para abrir el menu.<br>
-Posiciona el raton sobre cada icono de la barra (tras abrir el menu) para ver el nombre y demas datos: construccion, <a href="finances.txt">coste</a>, coste de mantenimiento entre parentesis, y limite de velocidad.
-</p>
-<p>
-{Consejos:Una forma sencilla de construir un aeropuerto simple es:<br>
-I)Construya y conect Taxiways(s) y pista(s) de aterrizaje;<br>
-II)Construya Airstop(s) al final de las Taxiway(s);<br>
-III) Construya las extensiones requeridos (por ejemplo, Torres o Terminales).}
-</p>
-<p>
-Herramientas incluidas, de izquierda a derecha:
-</p>
-<p>
-<em>Taxiway:</em> herramienta que construye los pasillos por donde se moveran los aviones para ir de las Airstops a las pistas de aterrizaje. Las Taxiways son construidas a nivel del suelos en el juego.<br>
-IMPORTANTE: Si las Taxiways NO estan conectadas con las pistas de aterrizaje, los aviones no podran despegar ni tomar tierra.<br>
-Para construir una Taxiway: pulsa en la herramienta para seleccionar(el cursor del raton cambia a taxiway), despues pulsa en el terreno para marcar el punto de inicio(muestra una excavadora y las coordenadas del punto en la parte inferior derecha de la pantalla), finamente pulsa en el terreno o en la pista de aterrizaje para marcar el punto de finalizacion.<br>
-{Consejo: Usa Eliminar para quitar partes individuales de una Taxiway. La opcion Deshacer<a href="keys.txt">[z]</a> no reembolsa los constes de construccion.}
-</p>
-<p>
-<em>Pista de aterrizaje:</em> herramienta para construir pistas, usadas por los aviones para despegar y tomar tierra. Las pista de aterrizaje son construidas a nivel del suelo, y se pueden cruzar entre ellas.<br>
-Para construir una pista de aterrizaje: pulsa en la herramienta para seleccionar(cambia el cursor a pista), despues pulsa en el terreno para indicar el punto de inicio (muestra un excavadora), finalmente pulsa en el terreno para indicar el punto de finalizacion.<br>
-{Consejo: Deja el final de las pistas de aterrizaje sin conexion, porque sino los aviones no podran despegar ni tomar tierra. Usa Eliminar para quitar partes individuales de las pistas de aterrizaje. La opcion Deshacer [z] no reembolsa los costes de construccion.}
-</p>
-<p>
-<em>Remove airstrips:</em> herramienta que elimina partes de una Taxiway o de una pista de aterrizaje, cuando no hay avoines presentes, entre dos puntos. El uso de esta herramienta supone un <a href="finances.txt">coste de construction</a>.<br>
-Para eliminar una pista: pulsa en la herramienta (cambia el cursor a un X roja); despues pulsa en la pista que quieres eliminar (en el tramo a borrar se muestra una X roja); finalmente pulsa en otro punto de la pista, para eliminar un tramo desde el punto inicial.
-{Consejos: Deja el final de las pistas de aterrizaje sin conexion, ya que sino los aviones no podran despegar ni tomar tierra. Usa Eliminar para quitar partes individuales de las pistas.}
-</p>
-<p>
-<em>Air <a href="depot.txt"><em>Depot:</em></a></em> herramienta para crear hangares para comprar y gestionar aviones. Los hangares tiene costes de mantenimiento y son deben ser construidos en el tramo final de una Taxiway.<br>
-Para construir un hangar: pulsa en la herramienta (cambia el cursor a un deposito), despues pulsa en el tramo final de una Taxiway.<br>
-{Consejo: Elimina hangares con la herramienta Eliminar.}
-</p>
-<p>
-<em>Airstops</em>&<em>boarding bridge:</em> herramientas para construir Paradas, para que los aviones cojan o dejen pasajeros o mercancias.<br>
-Una Airstop, cuando no es construida adyacente a una <a href="station.txt">Parada</a> ya existente, creara una nueva parada.<br>
-Las Airstops deben ser construidas sobre el final de un tramo de taxiway; y tienen un coste de mantenimientos y areas de influencia sobre pasajeros, correo y mercancias. Un avion solo aterrizara en un aeropuerto si hay una Airstop libre y disponible.<br>
-Para construir una Airstop: pulsa en la herramienta elegida,y despues pulsa sobre el tramo final de una taxiway.<br>
-{Consejos: Elimina Airstops con la herramienta Eliminarve. Pulsa [v] para mostrar/ocultar el area de influencia sobre pasajeros y mercancias.}
-</p>
-<p>
-<em>Airport buildings:</em> herramientas para construir extensiones para <a href="station.txt">Paradas</em></a> las cuales podrian incrementar los costes de mantenimiento, asi como la capacidad y el area de influencia sobre pasajeros y mercancias. En la esquina de la barra de herramientas, un icono (usado en <a href="haltlist.txt">Lista de Estaciones</a> y Informacion sobre la Parada)muestra que elementos puede manejar la extension.<br>
-PAra construir una extension: pulse en la herramienta de extension seleccionada (cambia el cursor a extension), despues pulsa en el lugar elegido, cereca en una parada existente. La nueva extension ahora es considerada parte de la parada.<br>
-{Consejos: Elimina extenxiones con la herramienta Eliminar. Pulsa [v] para mostrar/ocultar el area de influencia sobre pasajeros y mercancias.}
+<title>Ayuda sobre herramientas de Aeropuertos</title>
+
+<h1><strong>Aeropuertos</strong></h1>
+
+<p>
+<strong>Aeropuertos</strong> contiene herramientas para construir una red de transporte aereo. Las herramientas pueden eliminar o crear : taxiways y pistas de aterrizaje para aviones, Airstops (usadas para dejar o recoger mercancias y pasajeros), depositos de aviones (para comprar y gestionar los aviones) y algunos edificios mas de aeropuertos.Si tienes activa la opcion <a href="new_world.txt">usar cronologia</a>, entonces a medida que pase el tiempo, apareceran mas opciones en la barra de Aeropuertos.
+</p>
+<p>
+Pulsa el icono del avion en la parte superio de la pantalla para abrir el menu.<br>
+Posiciona el raton sobre cada icono de la barra (tras abrir el menu) para ver el nombre y demas datos: construccion, <a href="finances.txt">coste</a>, coste de mantenimiento entre parentesis, y limite de velocidad.
+</p>
+<p>
+{Consejos:Una forma sencilla de construir un aeropuerto simple es:<br>
+I)Construya y conect Taxiways(s) y pista(s) de aterrizaje;<br>
+II)Construya Airstop(s) al final de las Taxiway(s);<br>
+III) Construya las extensiones requeridos (por ejemplo, Torres o Terminales).}
+</p>
+<p>
+Herramientas incluidas, de izquierda a derecha:
+</p>
+<p>
+<em>Taxiway:</em> herramienta que construye los pasillos por donde se moveran los aviones para ir de las Airstops a las pistas de aterrizaje. Las Taxiways son construidas a nivel del suelos en el juego.<br>
+IMPORTANTE: Si las Taxiways NO estan conectadas con las pistas de aterrizaje, los aviones no podran despegar ni tomar tierra.<br>
+Para construir una Taxiway: pulsa en la herramienta para seleccionar(el cursor del raton cambia a taxiway), despues pulsa en el terreno para marcar el punto de inicio(muestra una excavadora y las coordenadas del punto en la parte inferior derecha de la pantalla), finamente pulsa en el terreno o en la pista de aterrizaje para marcar el punto de finalizacion.<br>
+{Consejo: Usa Eliminar para quitar partes individuales de una Taxiway. La opcion Deshacer<a href="keys.txt">[z]</a> no reembolsa los constes de construccion.}
+</p>
+<p>
+<em>Pista de aterrizaje:</em> herramienta para construir pistas, usadas por los aviones para despegar y tomar tierra. Las pista de aterrizaje son construidas a nivel del suelo, y se pueden cruzar entre ellas.<br>
+Para construir una pista de aterrizaje: pulsa en la herramienta para seleccionar(cambia el cursor a pista), despues pulsa en el terreno para indicar el punto de inicio (muestra un excavadora), finalmente pulsa en el terreno para indicar el punto de finalizacion.<br>
+{Consejo: Deja el final de las pistas de aterrizaje sin conexion, porque sino los aviones no podran despegar ni tomar tierra. Usa Eliminar para quitar partes individuales de las pistas de aterrizaje. La opcion Deshacer [z] no reembolsa los costes de construccion.}
+</p>
+<p>
+<em>Remove airstrips:</em> herramienta que elimina partes de una Taxiway o de una pista de aterrizaje, cuando no hay avoines presentes, entre dos puntos. El uso de esta herramienta supone un <a href="finances.txt">coste de construction</a>.<br>
+Para eliminar una pista: pulsa en la herramienta (cambia el cursor a un X roja); despues pulsa en la pista que quieres eliminar (en el tramo a borrar se muestra una X roja); finalmente pulsa en otro punto de la pista, para eliminar un tramo desde el punto inicial.
+{Consejos: Deja el final de las pistas de aterrizaje sin conexion, ya que sino los aviones no podran despegar ni tomar tierra. Usa Eliminar para quitar partes individuales de las pistas.}
+</p>
+<p>
+<em>Air <a href="depot.txt"><em>Depot:</em></a></em> herramienta para crear hangares para comprar y gestionar aviones. Los hangares tiene costes de mantenimiento y son deben ser construidos en el tramo final de una Taxiway.<br>
+Para construir un hangar: pulsa en la herramienta (cambia el cursor a un deposito), despues pulsa en el tramo final de una Taxiway.<br>
+{Consejo: Elimina hangares con la herramienta Eliminar.}
+</p>
+<p>
+<em>Airstops</em>&<em>boarding bridge:</em> herramientas para construir Paradas, para que los aviones cojan o dejen pasajeros o mercancias.<br>
+Una Airstop, cuando no es construida adyacente a una <a href="station.txt">Parada</a> ya existente, creara una nueva parada.<br>
+Las Airstops deben ser construidas sobre el final de un tramo de taxiway; y tienen un coste de mantenimientos y areas de influencia sobre pasajeros, correo y mercancias. Un avion solo aterrizara en un aeropuerto si hay una Airstop libre y disponible.<br>
+Para construir una Airstop: pulsa en la herramienta elegida,y despues pulsa sobre el tramo final de una taxiway.<br>
+{Consejos: Elimina Airstops con la herramienta Eliminarve. Pulsa [v] para mostrar/ocultar el area de influencia sobre pasajeros y mercancias.}
+</p>
+<p>
+<em>Airport buildings:</em> herramientas para construir extensiones para <a href="station.txt">Paradas</em></a> las cuales podrian incrementar los costes de mantenimiento, asi como la capacidad y el area de influencia sobre pasajeros y mercancias. En la esquina de la barra de herramientas, un icono (usado en <a href="haltlist.txt">Lista de Estaciones</a> y Informacion sobre la Parada)muestra que elementos puede manejar la extension.<br>
+PAra construir una extension: pulse en la herramienta de extension seleccionada (cambia el cursor a extension), despues pulsa en el lugar elegido, cereca en una parada existente. La nueva extension ahora es considerada parte de la parada.<br>
+{Consejos: Elimina extenxiones con la herramienta Eliminar. Pulsa [v] para mostrar/ocultar el area de influencia sobre pasajeros y mercancias.}
 </p>
diff --git a/simutrans/text/es/citylist_filter.txt b/simutrans/text/es/citylist_filter.txt
index b4b65fc..2c1c5bf 100644
--- a/simutrans/text/es/citylist_filter.txt
+++ b/simutrans/text/es/citylist_filter.txt
@@ -1,37 +1,37 @@
-<title>Ayuda de la Lista de Ciudades</title>
-
-<h1><strong>Lista de Ciudades</strong></h1>
-
-<p>
-<strong>Lista de Ciudades</strong> muestra los detalles acerca de las <a href="citywindow.txt">areas urbanas</a> (villas, pueblos y ciudades) y poblaciones.
-</p>
-<p>
-Para abrirla: pulsa en la herramienta Lista de Ciudades, en <a href="list.txt">Administracion de Listas</a> o pulsa <a href="keys.txt">[T]</a>.<br>
-<strong>Lista de Ciudades</strong> tiene dos botones de opcion, los cuales determinan el orden en que se muestran las areas urbanas y sus poblaciones.<br>
-{Consejos: Si los elementos listados solo son parcialmente visibles, entonces <a href="mouse.txt">ajusta la ventana</a> de la <strong>Lista de Ciudades</strong> o desplaza la lista usando la barra lateral.}
-</p>
-<p>
-<em>Total de habitantes:</em> es el numero total de habitantes en el juego (la poblacion total de todas las areas urbanas). El reciente incremento de poblacion se muestra entre parentesis.
-</p>
-<p>
-<em>Ordenado por:</em> tiene opciones para determinar el orden en que son mostradas las areas urbanas en la lista.<br>
-Pulsa en los botones de opcion para pasar a la siguiente opcion (cambia el nombre del boton de opcion):
-</p>
-<p>
-- <em>Nombre</em> lista alfabeticamente (mayusculas antes que minusculas) los <a href="convoi_info.txt">nombres</a>.<br>
-- <em>Ciudadanos</em> ordena por poblacion.<br>
-- <em>Crecimiento urbano</em> ordena por tasa de crecimiento (depende del terreno cubierto por el area urbana y el numero de pasajeros transportado).
-</p>
-<p>
-- <em>ascendente</em> / <em>descendente</em> invierte el orden de la lista.
-</p>
-<p>
-Pulsa en un elemento listado en la <strong>Lista de Ciudades</strong>para ver mas <a href="citywindow.txt">informacion</a> sobre esa area urbana.<br>
-Los elementos listados para cada area urbana incluyen:
-</p>
-<p>
-<em>nombre</em> asignado al area urbana (puede ser cambiado en el menu Informacion de la Ciudad)..
-</p>
-<p>
-<em>numero de habitantes</em> de un area urbana, entre parentesis se muestra el incremento de poblacion.
+<title>Ayuda de la Lista de Ciudades</title>
+
+<h1><strong>Lista de Ciudades</strong></h1>
+
+<p>
+<strong>Lista de Ciudades</strong> muestra los detalles acerca de las <a href="citywindow.txt">areas urbanas</a> (villas, pueblos y ciudades) y poblaciones.
+</p>
+<p>
+Para abrirla: pulsa en la herramienta Lista de Ciudades, en <a href="list.txt">Administracion de Listas</a> o pulsa <a href="keys.txt">[T]</a>.<br>
+<strong>Lista de Ciudades</strong> tiene dos botones de opcion, los cuales determinan el orden en que se muestran las areas urbanas y sus poblaciones.<br>
+{Consejos: Si los elementos listados solo son parcialmente visibles, entonces <a href="mouse.txt">ajusta la ventana</a> de la <strong>Lista de Ciudades</strong> o desplaza la lista usando la barra lateral.}
+</p>
+<p>
+<em>Total de habitantes:</em> es el numero total de habitantes en el juego (la poblacion total de todas las areas urbanas). El reciente incremento de poblacion se muestra entre parentesis.
+</p>
+<p>
+<em>Ordenado por:</em> tiene opciones para determinar el orden en que son mostradas las areas urbanas en la lista.<br>
+Pulsa en los botones de opcion para pasar a la siguiente opcion (cambia el nombre del boton de opcion):
+</p>
+<p>
+- <em>Nombre</em> lista alfabeticamente (mayusculas antes que minusculas) los <a href="convoi_info.txt">nombres</a>.<br>
+- <em>Ciudadanos</em> ordena por poblacion.<br>
+- <em>Crecimiento urbano</em> ordena por tasa de crecimiento (depende del terreno cubierto por el area urbana y el numero de pasajeros transportado).
+</p>
+<p>
+- <em>ascendente</em> / <em>descendente</em> invierte el orden de la lista.
+</p>
+<p>
+Pulsa en un elemento listado en la <strong>Lista de Ciudades</strong>para ver mas <a href="citywindow.txt">informacion</a> sobre esa area urbana.<br>
+Los elementos listados para cada area urbana incluyen:
+</p>
+<p>
+<em>nombre</em> asignado al area urbana (puede ser cambiado en el menu Informacion de la Ciudad)..
+</p>
+<p>
+<em>numero de habitantes</em> de un area urbana, entre parentesis se muestra el incremento de poblacion.
 </p>
diff --git a/simutrans/text/es/citywindow.txt b/simutrans/text/es/citywindow.txt
index 555637b..40f873a 100644
--- a/simutrans/text/es/citywindow.txt
+++ b/simutrans/text/es/citywindow.txt
@@ -1,56 +1,56 @@
-<title>Ayuda de Estadisticas de Poblacion</title>
-
-<h1><strong>Estadisticas de Poblacion</strong></h1>
-
-<p>
-<strong>Estadisticas de Poblacion</strong> muestra estadistica sobre una area urbana seleccionada (villa, pueblo o ciudad) y se puede usar para cambiar el nombre del area urbana.
-</p>
-<p>
-Cada arear urbana tiene su Ayuntamiento alrededor del cual crece. El transporte de pasajeros y correo ayuda al crecimiento, los cual supone: carreteras construidas y gestionadas por el <a href="players.txt">jugador servicio publico</a>; aparecen los nuevos edificios y las <a href="industry_info.txt">industrias</a>; y el limite de la ciudad se extiende.
-</p>
-<p>
-Pulsa en el Ayuntamiento con al herramienta de <a href="inspection_tool.txt">Exploracion</a> o en una area urbana listada en la <a href="citylist_filter.txt">Lista de Ciudades</a> para abrir las <strong>Estadisticas de Poblacion</strong>, las cuales contienen: caja de texto con el nombre; estadisticas; dos mini-mapas; y una grafico del area urbana.
-</p>
-<p>
-<em>nombre:</em> el nombre asignado al area urbana aparece en una caja de texto en lo alto de la ventana <strong>Estadisticas de Poblacion</strong>. <br>
-Los nombres de las areas urbanas se usan en los nombres por defecto de las Paradas.<br>
-Para cambiar el nombre: pulsa en la caja de texto y escribe un nuevo nombre.<br>
-{Consejos: Usa <a href="keys.txt">[!]</a> para activar la vista del nombre del area urbana, sobre el Ayuntamiento. Lee mas en el archivo readme_citylist.txt (en el directorio ...simutrans/text/) para ayuda en la generacion de nombres para areas urbanas}.
-</p>
-<p>
-Bajo la caja de texto de nombre , se muestran estadisticas del area urbana:<br>
-<em>Tam. ciudad:</em> es el numero de habitantes (poblacion del area urbana). el incremento reciente en la poblacio se muestra entre parentesis.<br>
-<em>edificios:</em> numero de edificios en el area urbana.<br>
-<em>coordenadas del mapa:</em> indica los limites de la ciudad (cambia a medida que crece el area urbana).
-<p>
-</p>
-Los contadores se incrementan con el crecimiento del area urbana y decrecen con la construccion de nuevos edificios<br>
-<em>Desempleados:</em> contador que determina que tipo de edificio (residencial/comercial/industrial) sera construido.<br>
-<em>Sin hogar:</em> contador que determina que tipo de de edificio (residencial/comercial/industrial) sera construido.<br>
-</p>
-<p>
-<em>mini-mapas</em> del mundo de juego en la ventana <strong>Estadisticas de la poblacion</strong> idica los destinos de los pasajeros y el correo.<br>
-Los destinos se muestran como puntos coloreados segun el mes actual de juego (mini-mapa de la derecha) y el ultimo mes de juego (mini-mapa de la izquierda).El color de los punto de destino da detalles acerca de los pasajeros y el correo:<br>
-- amarillo: encontro una ruta y una <a href="station.txt">Parada</a> no abarrotada para comenzar el viaje (se muestra una cara sonriente en la ventana Informacion de la Parada).<br>
-- naranja: no encontro ruta a su destino.<br>
-- rojo: encontro una ruta pero la parada inicial estaba abarrotada (se muestra una cara triste en la ventana Informacion de la Parada).
-</p>
-<p>
-<em>Grafico</em> muestra las estadisticas del area urbana. <br>
-El eje y es la cantidad, el eje X es el tiempo.<br>
-Pulsa en la etiqueta para cambiar la escla de tiempo del eje X:<br>
-<em>Años:</em> muestra valores anuales para los ultimos diez años de juego.<br>
-<em>Meses:</em> muestra valores mensuales para los ultimos 12 meses de juego
-</p>
-
-<p>
-Pulsa en los botones de opciones del grafico para ver informacion en el grafico (el boton se oscurece cuando seleccionas la opcion).<br>
-El color de las lineas del grafico corresponde con los colores de los botones de opcion:<br>
-<em>Ciudadanos:</em> poblacion.<br>
-<em>Crecimiento urbano:</em> cambios en la poblacion (depende la poblacion y los servicios de transporte proveidos para pasajeros y correo).<br>
-<em>Recorrido:</em> pasajeros y correo que gestionados a traves de la red de transporte (mostrado como una <a href="station.txt">cara feliz</a> en la ventana Informacion de la Parada) <br>
-<em>Pasajeros:</em> Numero total de pasajeros y correo generado en el area urbana.
-</p>
-<p>
-{Consejos: Las opciones relacionadas con areas urbanas se pueden cambiar en los archivos simuconf.tab y cityrules.tab}.
+<title>Ayuda de Estadisticas de Poblacion</title>
+
+<h1><strong>Estadisticas de Poblacion</strong></h1>
+
+<p>
+<strong>Estadisticas de Poblacion</strong> muestra estadistica sobre una area urbana seleccionada (villa, pueblo o ciudad) y se puede usar para cambiar el nombre del area urbana.
+</p>
+<p>
+Cada arear urbana tiene su Ayuntamiento alrededor del cual crece. El transporte de pasajeros y correo ayuda al crecimiento, los cual supone: carreteras construidas y gestionadas por el <a href="players.txt">jugador servicio publico</a>; aparecen los nuevos edificios y las <a href="industry_info.txt">industrias</a>; y el limite de la ciudad se extiende.
+</p>
+<p>
+Pulsa en el Ayuntamiento con al herramienta de <a href="inspection_tool.txt">Exploracion</a> o en una area urbana listada en la <a href="citylist_filter.txt">Lista de Ciudades</a> para abrir las <strong>Estadisticas de Poblacion</strong>, las cuales contienen: caja de texto con el nombre; estadisticas; dos mini-mapas; y una grafico del area urbana.
+</p>
+<p>
+<em>nombre:</em> el nombre asignado al area urbana aparece en una caja de texto en lo alto de la ventana <strong>Estadisticas de Poblacion</strong>. <br>
+Los nombres de las areas urbanas se usan en los nombres por defecto de las Paradas.<br>
+Para cambiar el nombre: pulsa en la caja de texto y escribe un nuevo nombre.<br>
+{Consejos: Usa <a href="keys.txt">[!]</a> para activar la vista del nombre del area urbana, sobre el Ayuntamiento. Lee mas en el archivo readme_citylist.txt (en el directorio ...simutrans/text/) para ayuda en la generacion de nombres para areas urbanas}.
+</p>
+<p>
+Bajo la caja de texto de nombre , se muestran estadisticas del area urbana:<br>
+<em>Tam. ciudad:</em> es el numero de habitantes (poblacion del area urbana). el incremento reciente en la poblacio se muestra entre parentesis.<br>
+<em>edificios:</em> numero de edificios en el area urbana.<br>
+<em>coordenadas del mapa:</em> indica los limites de la ciudad (cambia a medida que crece el area urbana).
+<p>
+</p>
+Los contadores se incrementan con el crecimiento del area urbana y decrecen con la construccion de nuevos edificios<br>
+<em>Desempleados:</em> contador que determina que tipo de edificio (residencial/comercial/industrial) sera construido.<br>
+<em>Sin hogar:</em> contador que determina que tipo de de edificio (residencial/comercial/industrial) sera construido.<br>
+</p>
+<p>
+<em>mini-mapas</em> del mundo de juego en la ventana <strong>Estadisticas de la poblacion</strong> idica los destinos de los pasajeros y el correo.<br>
+Los destinos se muestran como puntos coloreados segun el mes actual de juego (mini-mapa de la derecha) y el ultimo mes de juego (mini-mapa de la izquierda).El color de los punto de destino da detalles acerca de los pasajeros y el correo:<br>
+- amarillo: encontro una ruta y una <a href="station.txt">Parada</a> no abarrotada para comenzar el viaje (se muestra una cara sonriente en la ventana Informacion de la Parada).<br>
+- naranja: no encontro ruta a su destino.<br>
+- rojo: encontro una ruta pero la parada inicial estaba abarrotada (se muestra una cara triste en la ventana Informacion de la Parada).
+</p>
+<p>
+<em>Grafico</em> muestra las estadisticas del area urbana. <br>
+El eje y es la cantidad, el eje X es el tiempo.<br>
+Pulsa en la etiqueta para cambiar la escla de tiempo del eje X:<br>
+<em>Años:</em> muestra valores anuales para los ultimos diez años de juego.<br>
+<em>Meses:</em> muestra valores mensuales para los ultimos 12 meses de juego
+</p>
+
+<p>
+Pulsa en los botones de opciones del grafico para ver informacion en el grafico (el boton se oscurece cuando seleccionas la opcion).<br>
+El color de las lineas del grafico corresponde con los colores de los botones de opcion:<br>
+<em>Ciudadanos:</em> poblacion.<br>
+<em>Crecimiento urbano:</em> cambios en la poblacion (depende la poblacion y los servicios de transporte proveidos para pasajeros y correo).<br>
+<em>Recorrido:</em> pasajeros y correo que gestionados a traves de la red de transporte (mostrado como una <a href="station.txt">cara feliz</a> en la ventana Informacion de la Parada) <br>
+<em>Pasajeros:</em> Numero total de pasajeros y correo generado en el area urbana.
+</p>
+<p>
+{Consejos: Las opciones relacionadas con areas urbanas se pueden cambiar en los archivos simuconf.tab y cityrules.tab}.
 </p>
diff --git a/simutrans/text/es/climates.txt b/simutrans/text/es/climates.txt
index eb6c965..aff48b2 100644
--- a/simutrans/text/es/climates.txt
+++ b/simutrans/text/es/climates.txt
@@ -1,66 +1,66 @@
-<title>Ayuda de los Controles del Clima</title>
-
-<h1><strong>Controles del Clima</strong></h1>
-
-<p>
-<strong>Controles del Clima</strong> establece las opciones para los aspectos topograficos y meteorologicos del juego<br>
-<p>
-<strong>Controles del Clima</strong> se abre con el boton<a href="new_world.txt">Crear un Nuevo Mundo</a>.
-</p>
-<p>
-Ajusta los parametros con los botones:
-</p>
-<p>
-<it>Opciones:</it>
-</p>
-<p>
-
-<em>Nivel del agua:</em> establece la altura del nivel del mar en el mapa.
-</p>
-<p>
-
-<em>Altura:</em> establece la altura maxima del terreno.
-</p>
-<p>
-
-
-<em>Terreno abrupto:</em> establece la irregularidad del terreno; un valor alto crea un terreno mas escarpado.<br>
-</p>
-<p>
-<it>Opciones de la cota de nieve:</it>
-</p>
-<p>
-
-<em>Cota de nieve veraniega:</em> establece la cota de nieve en verano
-</p>
-<p>
-
-<em>Cota de nieve invernal:</em> establece la cota de nieve en invierno.<br>
-</p>
-<p>
-<it>Opciones del clima:</it>
-</p>
-<p>
-
-<em>clima desertico:</em>  muy poca lluvia y temperaturas extremas
-</p>
-<p>
-
-<em>clima tropical:</em> tipico de lugares cercanos al ecuador, altas temperaturas constantes a nivel del mar y suaves mesetas).
-</p>
-<p>
-
-<em>clima mediterraneo:</em> clima ligeramente humedo y cambiante
-</p>
-<p>
-
-<em>clima templado:</em> se da en areas entre los tropicos y los polos, clima cambiante.
-</p>
-<p>
-
-<em>clima artico (tundra):</em> bajas temperaturas, muy cerca de los polos
-</p>
-<p>
-
-<em>clima rocoso:</em> cercano al desertico.
+<title>Ayuda de los Controles del Clima</title>
+
+<h1><strong>Controles del Clima</strong></h1>
+
+<p>
+<strong>Controles del Clima</strong> establece las opciones para los aspectos topograficos y meteorologicos del juego<br>
+<p>
+<strong>Controles del Clima</strong> se abre con el boton<a href="new_world.txt">Crear un Nuevo Mundo</a>.
+</p>
+<p>
+Ajusta los parametros con los botones:
+</p>
+<p>
+<it>Opciones:</it>
+</p>
+<p>
+
+<em>Nivel del agua:</em> establece la altura del nivel del mar en el mapa.
+</p>
+<p>
+
+<em>Altura:</em> establece la altura maxima del terreno.
+</p>
+<p>
+
+
+<em>Terreno abrupto:</em> establece la irregularidad del terreno; un valor alto crea un terreno mas escarpado.<br>
+</p>
+<p>
+<it>Opciones de la cota de nieve:</it>
+</p>
+<p>
+
+<em>Cota de nieve veraniega:</em> establece la cota de nieve en verano
+</p>
+<p>
+
+<em>Cota de nieve invernal:</em> establece la cota de nieve en invierno.<br>
+</p>
+<p>
+<it>Opciones del clima:</it>
+</p>
+<p>
+
+<em>clima desertico:</em>  muy poca lluvia y temperaturas extremas
+</p>
+<p>
+
+<em>clima tropical:</em> tipico de lugares cercanos al ecuador, altas temperaturas constantes a nivel del mar y suaves mesetas).
+</p>
+<p>
+
+<em>clima mediterraneo:</em> clima ligeramente humedo y cambiante
+</p>
+<p>
+
+<em>clima templado:</em> se da en areas entre los tropicos y los polos, clima cambiante.
+</p>
+<p>
+
+<em>clima artico (tundra):</em> bajas temperaturas, muy cerca de los polos
+</p>
+<p>
+
+<em>clima rocoso:</em> cercano al desertico.
 </p>
diff --git a/simutrans/text/es/color.txt b/simutrans/text/es/color.txt
index 8c97f69..4fc7301 100644
--- a/simutrans/text/es/color.txt
+++ b/simutrans/text/es/color.txt
@@ -1,21 +1,21 @@
-<title>Ayuda sobre Color</title>
-
-<h1><strong>Color del Jugador</strong></h1>
-
-<p>
-<strong>Color</strong> establece el color del jugador.<br>
-Los vehiculos, edificios y otros elementos reflejan el color del jugador.
-</p>
-<p>
-<strong>Color</strong> se abre desde<a href="options.txt">Opciones de juego</a>.
-</p>
-<p>Pulsa en uno de los colores para cambiar el color del jugador.<br>
-La ventana de <strong>Color</strong> cambia (no al nuevo color elegido) para indicar que un nuevo color ha sido seleccionado.
-</p>
-<p>
-El color por defecto es azul claro para el jugador humano.<br>
-Algunos elementos no tienen la opcion de color del jugador, y puede que no muestren el color elegido.
-</p>
-<p>
-{Consejo: Para cambiar el color de los jugadores controlados por la maquina usa la<a href="players.txt">Lista de Jugadores</a> o <a href="special.txt">P+ Cambiar de Jugador</a> para seleccionar primero un jugador controlado por la maquina}.
+<title>Ayuda sobre Color</title>
+
+<h1><strong>Color del Jugador</strong></h1>
+
+<p>
+<strong>Color</strong> establece el color del jugador.<br>
+Los vehiculos, edificios y otros elementos reflejan el color del jugador.
+</p>
+<p>
+<strong>Color</strong> se abre desde<a href="options.txt">Opciones de juego</a>.
+</p>
+<p>Pulsa en uno de los colores para cambiar el color del jugador.<br>
+La ventana de <strong>Color</strong> cambia (no al nuevo color elegido) para indicar que un nuevo color ha sido seleccionado.
+</p>
+<p>
+El color por defecto es azul claro para el jugador humano.<br>
+Algunos elementos no tienen la opcion de color del jugador, y puede que no muestren el color elegido.
+</p>
+<p>
+{Consejo: Para cambiar el color de los jugadores controlados por la maquina usa la<a href="players.txt">Lista de Jugadores</a> o <a href="special.txt">P+ Cambiar de Jugador</a> para seleccionar primero un jugador controlado por la maquina}.
 </p>
diff --git a/simutrans/text/es/convoi.txt b/simutrans/text/es/convoi.txt
index edd650f..b3e6115 100644
--- a/simutrans/text/es/convoi.txt
+++ b/simutrans/text/es/convoi.txt
@@ -1,56 +1,56 @@
-<title>Ayuda de Lista de Vehiculos</title>
-
-<h1><strong>Lista de Vehiculos</strong></h1>
-
-<p>
-<strong>Lista de Vehiculos</strong> muestra informacion y tiene controles para filtrar y listar los diferentes <a href="convoiinfo.txt">Convoys</a> (un Convoy esta compuesto por un unico vehiculo o una combinacion de varias unidades).
-</p>
-<p>
-Para abrirlo: pulsa en la herramienta de Lista de Vehiculos en <a href="list.txt">Administracion de Listas</a> o presiona <a href="keys.txt">[V]</a>. <strong>Lista de Vehiculos</strong> tiene cuatro botones de opciones, dos se usan para ordenar los elementos de la lista y los otros dos se usan para aplicar opciones a los elementos seleccionados de la lista.<br>
-Los botones de debajo son una lista de <a href="convoiinfo.txt">Convoys</a> que concuerdan con el criterio usado en las opciones de filtro.<br>
-{Consejos: Si no se listan Convoys cambia las opciones de <em>Filtrado</em>.Si los elementos de la lista son parcialmente visibles, entonces <a href="mouse.txt">ajusta</a> la ventana <strong>Lista de Vehiculos </strong> o desplaza ls lista usando la barra de desplazamiento.}
-</p>
-<p>
-Pulsa en los botones de opcion para pasar a la siguiente opcion (cambia el nombre del boton) o abre el menu Opciones de Filtro:
-</p>
-<p>
-<em>Ordenar por:</em> Dos botones de opcion determinan el orden de los <a href="convoiinfo.txt">Convoys</a> mostrados en la lista.
-</p>
-<p>
-- <em>Tipo</em> ordena por tipo de transporte (en orden ascendente de vehiculo de carretera, vehiculo de carretera, vehiculo de via ferrea, barcos y aviones) <br>
-- <em>Nombre</em> ordena por nombre asignado, alfanumericamente: mayusculas entes que minusculas (por defecto esto se hace para la primera unidad del un vehiculo <a href="depot.txt">comprado</a> o unido para formar un Convoy).<br>
-- <em>Ingresos</em> ordena por beneficio (ingresos generados menos costes operativos).
-- <em>ID interno</em> ordena por un numero ID unico para cada convoy (asignado por defecto cuando un Convoy es comprado o ensamblado por primera vez en un <a href=depot.txt">deposito</a> mostrado en la titulo de la ventana de <a href="convoiinfo.txt">Informacion del Convoy</a>).
-</p>
-<p>
-- <em>ascendente</em> / <em>descendente</em> invierte el orden de la lista.
-</p>
-<p>
-<em>Filtro:</em> Dos botones de opcion, enciende/apaga el criterio de selecciona para la lista y los controles de acceso para cambiar los criterios.
-</p>
-<p>
-- <em>habilitar</em> / <em>deshabilitar</em> pulsa para aplicar los criterios de flitrado para los <a href="convoiinfo.txt">Convoys</a> en lista.
-</p>
-<p>
-- <a href="convoi_filter.txt"><em>Ajustes</em></a> abre controles para cambiar los criterios de filtrado.
-</p>
-<p>
-Pulsa en un elemento listado para ver mas informacion acerca de ese <a href="convoiinfo.txt">Convoy</a>.
-</p>
-<p>
-Los elementos listados por cada Convoy incluyen:
-</p>
-<em>ID interno</em>: un numero ID unico por convoy (asignado por defecto cuando el Convoy es comprado o ensamblado por primera vez en un <a href=depot.txt">deposito</a> y se muestra en el titulo de la ventana de<a href="convoiinfo.txt">Informacion del Convoy</a>).
-</p>
-<p>
-<em>nombre</em> que has sido asignado (por defecto se hace cuando el primer vehiculo es comprado o ensamblado).
-</p>
-<p>
-<em>ingresos</em> muestra los beneficios (ingresos generados menos costes operativos cuando esta en movimiento).
-</p>
-<p>
-<em>Linea:</em> muestra la <a href="linemanagement.txt">Linea</a> asignadae indica si el Convoy esta en un <a href="depot.txt">deposito</a>.
-</p>
-<p>
-<em>graficos</em> muestra el tipo y nivel de carga.
+<title>Ayuda de Lista de Vehiculos</title>
+
+<h1><strong>Lista de Vehiculos</strong></h1>
+
+<p>
+<strong>Lista de Vehiculos</strong> muestra informacion y tiene controles para filtrar y listar los diferentes <a href="convoiinfo.txt">Convoys</a> (un Convoy esta compuesto por un unico vehiculo o una combinacion de varias unidades).
+</p>
+<p>
+Para abrirlo: pulsa en la herramienta de Lista de Vehiculos en <a href="list.txt">Administracion de Listas</a> o presiona <a href="keys.txt">[V]</a>. <strong>Lista de Vehiculos</strong> tiene cuatro botones de opciones, dos se usan para ordenar los elementos de la lista y los otros dos se usan para aplicar opciones a los elementos seleccionados de la lista.<br>
+Los botones de debajo son una lista de <a href="convoiinfo.txt">Convoys</a> que concuerdan con el criterio usado en las opciones de filtro.<br>
+{Consejos: Si no se listan Convoys cambia las opciones de <em>Filtrado</em>.Si los elementos de la lista son parcialmente visibles, entonces <a href="mouse.txt">ajusta</a> la ventana <strong>Lista de Vehiculos </strong> o desplaza ls lista usando la barra de desplazamiento.}
+</p>
+<p>
+Pulsa en los botones de opcion para pasar a la siguiente opcion (cambia el nombre del boton) o abre el menu Opciones de Filtro:
+</p>
+<p>
+<em>Ordenar por:</em> Dos botones de opcion determinan el orden de los <a href="convoiinfo.txt">Convoys</a> mostrados en la lista.
+</p>
+<p>
+- <em>Tipo</em> ordena por tipo de transporte (en orden ascendente de vehiculo de carretera, vehiculo de carretera, vehiculo de via ferrea, barcos y aviones) <br>
+- <em>Nombre</em> ordena por nombre asignado, alfanumericamente: mayusculas entes que minusculas (por defecto esto se hace para la primera unidad del un vehiculo <a href="depot.txt">comprado</a> o unido para formar un Convoy).<br>
+- <em>Ingresos</em> ordena por beneficio (ingresos generados menos costes operativos).
+- <em>ID interno</em> ordena por un numero ID unico para cada convoy (asignado por defecto cuando un Convoy es comprado o ensamblado por primera vez en un <a href=depot.txt">deposito</a> mostrado en la titulo de la ventana de <a href="convoiinfo.txt">Informacion del Convoy</a>).
+</p>
+<p>
+- <em>ascendente</em> / <em>descendente</em> invierte el orden de la lista.
+</p>
+<p>
+<em>Filtro:</em> Dos botones de opcion, enciende/apaga el criterio de selecciona para la lista y los controles de acceso para cambiar los criterios.
+</p>
+<p>
+- <em>habilitar</em> / <em>deshabilitar</em> pulsa para aplicar los criterios de flitrado para los <a href="convoiinfo.txt">Convoys</a> en lista.
+</p>
+<p>
+- <a href="convoi_filter.txt"><em>Ajustes</em></a> abre controles para cambiar los criterios de filtrado.
+</p>
+<p>
+Pulsa en un elemento listado para ver mas informacion acerca de ese <a href="convoiinfo.txt">Convoy</a>.
+</p>
+<p>
+Los elementos listados por cada Convoy incluyen:
+</p>
+<em>ID interno</em>: un numero ID unico por convoy (asignado por defecto cuando el Convoy es comprado o ensamblado por primera vez en un <a href=depot.txt">deposito</a> y se muestra en el titulo de la ventana de<a href="convoiinfo.txt">Informacion del Convoy</a>).
+</p>
+<p>
+<em>nombre</em> que has sido asignado (por defecto se hace cuando el primer vehiculo es comprado o ensamblado).
+</p>
+<p>
+<em>ingresos</em> muestra los beneficios (ingresos generados menos costes operativos cuando esta en movimiento).
+</p>
+<p>
+<em>Linea:</em> muestra la <a href="linemanagement.txt">Linea</a> asignadae indica si el Convoy esta en un <a href="depot.txt">deposito</a>.
+</p>
+<p>
+<em>graficos</em> muestra el tipo y nivel de carga.
 </p>
diff --git a/simutrans/text/es/convoi_filter.txt b/simutrans/text/es/convoi_filter.txt
index 5637083..100e8ff 100644
--- a/simutrans/text/es/convoi_filter.txt
+++ b/simutrans/text/es/convoi_filter.txt
@@ -1,36 +1,36 @@
-<title>Ayuda de la Lista de Vehiculos</title>
-
-<h1><strong>Filtro de la Lista de Vehiculos</strong></h1>
-
-<p>
-<strong>Filtro de la Lista de Vehiculos</strong> tiene opciones que determinan que <a href="convoiinfo.txt">Convoys</a>, se muestran en la <a href="convoi.txt">Lista de Vehiculos</a>.
-</p>
-<p>
-Pulsa en Opciones en la Lista de Vehiculos para abrir el <strong>Filtro de la Lista de Vehiculos</strong>.
-</p>
-<p>
-Los botones de Opcion seleccionan los Convoys que apareceran en la Lista de Vehiculos cuando este <a href="convoi.txt">activada</a> la opcion de Filtro. Solo los Convoys que se ajusten al los criterios seran listados.
-</p>
-<p>
-Pulsa en el boton cuadrado para establecer los criterios de flitrado (el boton de oscurece cuando es seleccionando):
-</p>
-<p>
-<em>Filtrar nombres:</em> selecciona los <a href="convoiinfo.txt">Convoys</a> por el nombre. Para usarlo: pulsa en el boton para seleccionar, despues pulsa en la caja de texto Nombre Filtro y teclea en nombre requerido con exactitud (distingue entre mayusculas y minusculas).
-</p>
-<p>
-<em>Filtros de tipo :</em> listara los Convoys por tipo de transporte seleccionado. Para usarlo: pulse en el boton seleccionado, despues pulse en el tipo(s) de transporte: autobuses/camiones, trenes, barcos y aviones.
-</p>
-<p>
-<em>Filtros especiales:</em> selecciona <a href="convoiinfo.txt">Convoys</a> para listarlos segun los siguientes criterios (pulsa en el boton Filtro Especial, despues pulsa en la opcion eleguida ):<br>
-- <em>sin camino</em> - no puede encontrar el camino al proximo destino.<br>
-- <em>sin horario</em> - no tiene asignada una <a href="schedule.txt">ruta</a>.<br>
-- <em>sin ingresos</em> - no genera beneficios.<br>
-- <em>en el deposito</em> - aquellos que estan en un <a href="depot.txt">deposito</a>.<br>
-- <em>sin linea</em> - no tiene asignada una <a href="linemanagement.txt">Linea</a>.
-</p>
-<p>
-<em>Filtro de Mercancias:</em> selecciona los Convoys por la capacidad de transportar diferentes mercancias y pasajeros. Pulsa en el boton junto al nombre del elemento(s) seleccionado(s). Usa la <a href="mouse.txt">barra de desplazamiento</a> para desplazar los elementos en la lista. Entre las opciones se incluyen:<br>
-- <em>todo</em> selecciona todos los elementos.<br>
-- <em>nada</em> no selecciona ningun elemento.<br>
-- <em>inv.</em> invierte la seleccion actual de elementos.
+<title>Ayuda de la Lista de Vehiculos</title>
+
+<h1><strong>Filtro de la Lista de Vehiculos</strong></h1>
+
+<p>
+<strong>Filtro de la Lista de Vehiculos</strong> tiene opciones que determinan que <a href="convoiinfo.txt">Convoys</a>, se muestran en la <a href="convoi.txt">Lista de Vehiculos</a>.
+</p>
+<p>
+Pulsa en Opciones en la Lista de Vehiculos para abrir el <strong>Filtro de la Lista de Vehiculos</strong>.
+</p>
+<p>
+Los botones de Opcion seleccionan los Convoys que apareceran en la Lista de Vehiculos cuando este <a href="convoi.txt">activada</a> la opcion de Filtro. Solo los Convoys que se ajusten al los criterios seran listados.
+</p>
+<p>
+Pulsa en el boton cuadrado para establecer los criterios de flitrado (el boton de oscurece cuando es seleccionando):
+</p>
+<p>
+<em>Filtrar nombres:</em> selecciona los <a href="convoiinfo.txt">Convoys</a> por el nombre. Para usarlo: pulsa en el boton para seleccionar, despues pulsa en la caja de texto Nombre Filtro y teclea en nombre requerido con exactitud (distingue entre mayusculas y minusculas).
+</p>
+<p>
+<em>Filtros de tipo :</em> listara los Convoys por tipo de transporte seleccionado. Para usarlo: pulse en el boton seleccionado, despues pulse en el tipo(s) de transporte: autobuses/camiones, trenes, barcos y aviones.
+</p>
+<p>
+<em>Filtros especiales:</em> selecciona <a href="convoiinfo.txt">Convoys</a> para listarlos segun los siguientes criterios (pulsa en el boton Filtro Especial, despues pulsa en la opcion eleguida ):<br>
+- <em>sin camino</em> - no puede encontrar el camino al proximo destino.<br>
+- <em>sin horario</em> - no tiene asignada una <a href="schedule.txt">ruta</a>.<br>
+- <em>sin ingresos</em> - no genera beneficios.<br>
+- <em>en el deposito</em> - aquellos que estan en un <a href="depot.txt">deposito</a>.<br>
+- <em>sin linea</em> - no tiene asignada una <a href="linemanagement.txt">Linea</a>.
+</p>
+<p>
+<em>Filtro de Mercancias:</em> selecciona los Convoys por la capacidad de transportar diferentes mercancias y pasajeros. Pulsa en el boton junto al nombre del elemento(s) seleccionado(s). Usa la <a href="mouse.txt">barra de desplazamiento</a> para desplazar los elementos en la lista. Entre las opciones se incluyen:<br>
+- <em>todo</em> selecciona todos los elementos.<br>
+- <em>nada</em> no selecciona ningun elemento.<br>
+- <em>inv.</em> invierte la seleccion actual de elementos.
 </p>
diff --git a/simutrans/text/es/convoidetail.txt b/simutrans/text/es/convoidetail.txt
index 4fdf3e6..f92413e 100644
--- a/simutrans/text/es/convoidetail.txt
+++ b/simutrans/text/es/convoidetail.txt
@@ -1,39 +1,39 @@
-<title>Ayuda de Detalles del Convoy</title>
-
-<h1><strong>Detalles del Convoy</strong></h1>
-
-<p>
-<strong>Detalles del Convoy</strong> da mas informacion acerca de un Convoy (un vehiculo solo o una combinacion de unidades) y puede usar para vender rapidamente el Convoy.
-</p>
-<p>
-
-<strong>Detalles del Convoy</strong> se abre desde el boton
-<a href="convoiinfo.txt">
-Detalles</a> en la ventana Informacion del Convoy</strong>.
-<br>
-Si todos los elementos no son visibles <a href="mouse.txt">ajusta</a> la <strong>ventana de Detalles</strong> o usa la barra de desplazamiento para desplazar los elementos.
-</p>
-<p>
-En lo alto de la ventana
-<strong>Detalles del Convoy</strong> se muestra la siguiente informacion:
-</p>
-<p>
-<em>Potencia:</em> de Convoy (potencia combinada en el caso de un convoy de varias unidades).
-</p>
-<p>
-<em>Valor de Venta:</em> el dinero recibido si se vende el Convoy (precio de compra menos un ligera depreciacion).
-</p>
-<p>
-CUIDADO: Pulsa en el boton <em>Modo Venta</em> para vender el Convoy inmediatamente. No requiere confirmacion de la opracion de venta. El Convoy es eliminado del juego y se añade la cantidad de la venta al balance de jugador .
-</p>
-<p>
-<strong>Detalles del Convoy</strong> lista todas la unidades del Convoy.<br>
-La informacion listada para todas las unidades de convoy incluyen:<br>
-- <em>grafico del vehiculo:</em> un dibujo de la unidad (tambien usado en <a href="depot.txt">depositos</a>).<br>
-- <em>Fabricado:</em> mes y año de fabricacion, asi como fecha de introduccion si estas jugando con <a href="new_world.txt">cronologia</a>.<br>
-- <em>Valor de Venta:</em> cantidad recibida en caso de venta.<br>
-- <em>Potencia:</em> potencia generada (por vehiculos motorizados).<br>
-- <em>Friccion:</em> nivel actual de friccion.<br>
-- <em>Ingresos maximos:</em> ingresos del vehiculo por tipo de elemento transportado por el Convoy.<br>
-- <em>Elementos cargados:</em> cantidad y destino de los elementos actualmente cargados por el vehiculo.
+<title>Ayuda de Detalles del Convoy</title>
+
+<h1><strong>Detalles del Convoy</strong></h1>
+
+<p>
+<strong>Detalles del Convoy</strong> da mas informacion acerca de un Convoy (un vehiculo solo o una combinacion de unidades) y puede usar para vender rapidamente el Convoy.
+</p>
+<p>
+
+<strong>Detalles del Convoy</strong> se abre desde el boton
+<a href="convoiinfo.txt">
+Detalles</a> en la ventana Informacion del Convoy</strong>.
+<br>
+Si todos los elementos no son visibles <a href="mouse.txt">ajusta</a> la <strong>ventana de Detalles</strong> o usa la barra de desplazamiento para desplazar los elementos.
+</p>
+<p>
+En lo alto de la ventana
+<strong>Detalles del Convoy</strong> se muestra la siguiente informacion:
+</p>
+<p>
+<em>Potencia:</em> de Convoy (potencia combinada en el caso de un convoy de varias unidades).
+</p>
+<p>
+<em>Valor de Venta:</em> el dinero recibido si se vende el Convoy (precio de compra menos un ligera depreciacion).
+</p>
+<p>
+CUIDADO: Pulsa en el boton <em>Modo Venta</em> para vender el Convoy inmediatamente. No requiere confirmacion de la opracion de venta. El Convoy es eliminado del juego y se añade la cantidad de la venta al balance de jugador .
+</p>
+<p>
+<strong>Detalles del Convoy</strong> lista todas la unidades del Convoy.<br>
+La informacion listada para todas las unidades de convoy incluyen:<br>
+- <em>grafico del vehiculo:</em> un dibujo de la unidad (tambien usado en <a href="depot.txt">depositos</a>).<br>
+- <em>Fabricado:</em> mes y año de fabricacion, asi como fecha de introduccion si estas jugando con <a href="new_world.txt">cronologia</a>.<br>
+- <em>Valor de Venta:</em> cantidad recibida en caso de venta.<br>
+- <em>Potencia:</em> potencia generada (por vehiculos motorizados).<br>
+- <em>Friccion:</em> nivel actual de friccion.<br>
+- <em>Ingresos maximos:</em> ingresos del vehiculo por tipo de elemento transportado por el Convoy.<br>
+- <em>Elementos cargados:</em> cantidad y destino de los elementos actualmente cargados por el vehiculo.
 </p>
diff --git a/simutrans/text/es/convoiinfo.txt b/simutrans/text/es/convoiinfo.txt
index 9d6c3fa..ba94c1d 100644
--- a/simutrans/text/es/convoiinfo.txt
+++ b/simutrans/text/es/convoiinfo.txt
@@ -1,94 +1,94 @@
-<title>Ayuda de Informacion del Convoy</title>
-
-<h1><strong>Informacion del Convoy</strong></h1>
-
-<p>
-<strong>Informacion del Convoy</strong> muestra informacion sobre un Convoy (un vehiculo individual o una combinacion de varias unidades) usado para transportar pasajeros o mercancias.<br>
-Se lista los elementos cargados por un Convoy y tambien tiene controles para acceder a mas detalles y para la venta del Convoy; seguir la trayectoria del Convoy; y cambiar el nombre y la <a href="schedule.txt">Ruta</a> de un Convoy.
-</p>
-
-<p>
-Un convoy esta compuesto por al menos una unidad motorizada (motorised) y un numero cualquiera de vagones/remolques.<br>
-Ejemplos de convoys: un grupo de caballos arrastrando un carruaje; una locomotora parte de un tender y vagones; un autobus; una camioneta; un camion con remolque; un tranvia de varios vagones; un barco; un remolcador empujando una barcaza; o un avion.<br>
-Los convoys son ensamblados y vendidos en el <a href="depot.txt">deposito</a> segun el tipo de transporte.<br>
-{Consejos: Un convoy tiene un numero maximo de unidades segun su tipo: trenes, 24; vehiculos de carretera, 4 .}
-</p>
-<p>
-Pulsa en un convoy con la <a href="inspection_tool.txt">Herramienta Explorar</a> o pulsa en un convoy listado en la <a href="convoi.txt">Lista de Vehiculos</a> o en <a href="linemanagement.txt">Administracion de Lineas</a> para abrir la ventana <strong>Informacion del Convoy</strong><br>
-El titulo de la ventana <strong>Informacion del Convoy</strong> muestra un numero ID y el nombre del (por defecto esto ocurre solo con el primer vehiculo del convoy ensamblado en el <a href="depot.txt">deposito</a>).<br>
-<strong>Informacion del Convoy</strong> contiene una caja de texto para el nombre; una mini-vista e informacion acerca del convoy; botones de opcion; y una lista de los elementos cargados actualmente (si todos los elementos no son visibles <a href="mouse.txt">ajusta</a> la ventana <strong>Informacion del Convoy</strong> o usa la barra de desplazamiento).
-</p>
-<p>
-La informacion mostrada en la parte superior de la ventana <strong>Informacion del Convoy</strong>:
-</p>
-<p>
-<em>ID interno</em>: un numero ID unico por convoy (asignado por defecto cuando el convoy se compra o ensambla en el <a href=depot.txt">deposito</a>).
-</p>
-<p>
-- <em>nombre</em>: muestra el nombre asignado al convoy (asignado por defecto cuando el convoy se compra o ensambla en el <a href=depot.txt">deposito</a>).<br>
-Pulsa en la caja de texto del nombre y escribe el nuevo nombre del Convoy para cambiarlo.
-</p>
-<p>
-- <em>velocidad:</em> muestra la velocidad actual en km/h.<br>
-Entre parentesis, el limite maximo de velocidad del Convoy (determinado por la unidad mas lenta en un Convoy).<br>
-La barra verde indica la velocidad actual en relacion al limite maximo de velocidad.
-</p>
-<p>
-- <em>Ingresos:</em> beneficios generados por el vehiculo (ingresos generados restando los costes de operacion) en el año actual de juego.<br>
-Entre parentesis, el coste operacional del Convoy en creditos Hajo por cuadricula.
-</p>
-<p>
-- <em>Peso:</em> peso actual combinado del Convoy y la carga en toneladas.<br>
-Entre parentesis, el peso de la carga actual.<br>
-La barra verde indica la capacidad usada, para cargar mercancias y pasajeros.<br>
-La barra amarilla indica el nivel de <a href="schedule.txt">Carga</a> (cantidad minima de mercancias y pasajeros necesaria para continuar a la siguiente parada) establecida en los controles de Enrutar.<br>
-{Consejos: Para establecer o cambiar el nivel de carga en cada parada, para todos los convoys de una linea, usa la opcion Actualizar linea en la ventana <a href="linemanagement.txt">Administracion de lineas</a> o en los <a href="depot.txt">Controles del Deposito</a>. Para establecer o cambiar el nivel de carga en cada parada, para un convoy solamente, en una linea, usa el boton <em>Enrutar</em> dentro de la ventana <strong>Informacion del Convoy</strong> o en los Controles del Deposito.}
-</p>
-<p>
-- <em>Destino:</em> La proximo <a href="station.txt">Parada</a> o punto de paso en la <a href="schedule.txt">Ruta</a> del Convoy.<br>
-La barra verde indica el progreso hacia la siguiente parada.
-</p>
-<p>
-- <em>Sirve la linea:</em> indica cualquier <a href="linemanagement.txt">Linea</a> asignada al Convoy.
-</p>
-<p>
-- <em>mini-vista</em> muestra el Convoy.<br>
-Pulsa en la mini-vista para centrar la vista del juego en el Convoy.
-</p>
-<p>
-Pulsa en los botones de la ventana <strong>Informacion del Convoy</strong> para abrir controles o seleccionar opciones:
-</p>
-<p>
-<a href="schedule.txt"><em>Enrutar:</em></a> abre los controles para cambiar la ruta y la cantidad minima de mercancias y pasajeros necesaria para continuar a la siguiente parada.
-</p>
-<p>
-<em>Ir a casa:</em> manda el Convoy al <a href="depot.txt">deposito</a> apropiado mas cercano. La carga se pierde, pero se recibe un ingreso por transporte al deposito.<br>
-En el deposito, el Convoy mantiene su <a href="schedule.txt">Ruta</a> y la <a href="linemanagement.txt">Linea</a> asignada.
-</p>
-<p>
-<em>sigueme:</em> boton que permite seguir al Convoy (se oscurece si esta activada la opcion).<br>
-Para deseleccionar la opcion, pulsa el boton de nuevo o el boton izquierdo en la ventana del <a href="map.txt">Mapa</a>.
-</p>
-<p>
-<em>Grafica:</em> pulsa el boton para mostrar el grafico (el boton se oscurece cuando el grafico esta visible) en la <strong>Informacion del Convoy</strong>.<br>
-El grafico muestra estadisticas de los ultimos 12 meses (eje x) cuando se selecciona la opcion.<br>
-Pulsa en los botones de opcion para ver informacion en el grafico (el boton se oscurece cuando la opcion esta seleccionada).<br>
-Las lineas de colores en el grafico corresponden a los colores de los botones:<br>
-- <em>Capacidad libre</em> indica el espacio no usado en el Convoy.<br>
-- <em>Recorrido</em> indica el numero de mercancias, pasajeros y correo transportado.<br>
-- <em>Ingresos</em> indica los ingresos generados por transporte.<br>
-- <em>Operacion</em> indica los costes generados por el Convoy en uso.<br>
-- <em>Beneficio</em> indica el beneficio recibido por transporte (Ingresos menos Costes de Operacion).
-</p>
-<p>
-<em>Detalles</em> abre la ventana<a href="convoidetail.txt">Detalles del Convoy</a> que contiene mas informacion y opciones para vender el Convoy.
-</p>
-<p>
-<em>Ordenar pasajeros/mercancia por:</em> lista elementos actualmente cargados por el Convoy.<br>
-La informacion mostrada incluye la cantidad y capacidad del Convoy, tipo de carga, destino final y primera <a href="station.txt">Parada</a>.<br>
-El boton de opcion (cambia de nombre con cada seleccion) ordena la carga en grupos de pasajeros, correo y mercancias:<br>
- - <em>destino:</em> ordena la carga alfanumericamente, mayusculas antes que minusculas, por nombre del destino final.<br>
- - <em>por (detalle):</em> ordena la carga alfanumericamente, mayusculas antes que minusculas, por nombre del destino inicial.<br>
- - <em>por (cantidad):</em> ordena la carga por cantidad disponible en el destino intermedio.<br>
- - <em>cantidad:</em> ordena la carga por cantidad en orden descendente.
+<title>Ayuda de Informacion del Convoy</title>
+
+<h1><strong>Informacion del Convoy</strong></h1>
+
+<p>
+<strong>Informacion del Convoy</strong> muestra informacion sobre un Convoy (un vehiculo individual o una combinacion de varias unidades) usado para transportar pasajeros o mercancias.<br>
+Se lista los elementos cargados por un Convoy y tambien tiene controles para acceder a mas detalles y para la venta del Convoy; seguir la trayectoria del Convoy; y cambiar el nombre y la <a href="schedule.txt">Ruta</a> de un Convoy.
+</p>
+
+<p>
+Un convoy esta compuesto por al menos una unidad motorizada (motorised) y un numero cualquiera de vagones/remolques.<br>
+Ejemplos de convoys: un grupo de caballos arrastrando un carruaje; una locomotora parte de un tender y vagones; un autobus; una camioneta; un camion con remolque; un tranvia de varios vagones; un barco; un remolcador empujando una barcaza; o un avion.<br>
+Los convoys son ensamblados y vendidos en el <a href="depot.txt">deposito</a> segun el tipo de transporte.<br>
+{Consejos: Un convoy tiene un numero maximo de unidades segun su tipo: trenes, 24; vehiculos de carretera, 4 .}
+</p>
+<p>
+Pulsa en un convoy con la <a href="inspection_tool.txt">Herramienta Explorar</a> o pulsa en un convoy listado en la <a href="convoi.txt">Lista de Vehiculos</a> o en <a href="linemanagement.txt">Administracion de Lineas</a> para abrir la ventana <strong>Informacion del Convoy</strong><br>
+El titulo de la ventana <strong>Informacion del Convoy</strong> muestra un numero ID y el nombre del (por defecto esto ocurre solo con el primer vehiculo del convoy ensamblado en el <a href="depot.txt">deposito</a>).<br>
+<strong>Informacion del Convoy</strong> contiene una caja de texto para el nombre; una mini-vista e informacion acerca del convoy; botones de opcion; y una lista de los elementos cargados actualmente (si todos los elementos no son visibles <a href="mouse.txt">ajusta</a> la ventana <strong>Informacion del Convoy</strong> o usa la barra de desplazamiento).
+</p>
+<p>
+La informacion mostrada en la parte superior de la ventana <strong>Informacion del Convoy</strong>:
+</p>
+<p>
+<em>ID interno</em>: un numero ID unico por convoy (asignado por defecto cuando el convoy se compra o ensambla en el <a href=depot.txt">deposito</a>).
+</p>
+<p>
+- <em>nombre</em>: muestra el nombre asignado al convoy (asignado por defecto cuando el convoy se compra o ensambla en el <a href=depot.txt">deposito</a>).<br>
+Pulsa en la caja de texto del nombre y escribe el nuevo nombre del Convoy para cambiarlo.
+</p>
+<p>
+- <em>velocidad:</em> muestra la velocidad actual en km/h.<br>
+Entre parentesis, el limite maximo de velocidad del Convoy (determinado por la unidad mas lenta en un Convoy).<br>
+La barra verde indica la velocidad actual en relacion al limite maximo de velocidad.
+</p>
+<p>
+- <em>Ingresos:</em> beneficios generados por el vehiculo (ingresos generados restando los costes de operacion) en el año actual de juego.<br>
+Entre parentesis, el coste operacional del Convoy en creditos Hajo por cuadricula.
+</p>
+<p>
+- <em>Peso:</em> peso actual combinado del Convoy y la carga en toneladas.<br>
+Entre parentesis, el peso de la carga actual.<br>
+La barra verde indica la capacidad usada, para cargar mercancias y pasajeros.<br>
+La barra amarilla indica el nivel de <a href="schedule.txt">Carga</a> (cantidad minima de mercancias y pasajeros necesaria para continuar a la siguiente parada) establecida en los controles de Enrutar.<br>
+{Consejos: Para establecer o cambiar el nivel de carga en cada parada, para todos los convoys de una linea, usa la opcion Actualizar linea en la ventana <a href="linemanagement.txt">Administracion de lineas</a> o en los <a href="depot.txt">Controles del Deposito</a>. Para establecer o cambiar el nivel de carga en cada parada, para un convoy solamente, en una linea, usa el boton <em>Enrutar</em> dentro de la ventana <strong>Informacion del Convoy</strong> o en los Controles del Deposito.}
+</p>
+<p>
+- <em>Destino:</em> La proximo <a href="station.txt">Parada</a> o punto de paso en la <a href="schedule.txt">Ruta</a> del Convoy.<br>
+La barra verde indica el progreso hacia la siguiente parada.
+</p>
+<p>
+- <em>Sirve la linea:</em> indica cualquier <a href="linemanagement.txt">Linea</a> asignada al Convoy.
+</p>
+<p>
+- <em>mini-vista</em> muestra el Convoy.<br>
+Pulsa en la mini-vista para centrar la vista del juego en el Convoy.
+</p>
+<p>
+Pulsa en los botones de la ventana <strong>Informacion del Convoy</strong> para abrir controles o seleccionar opciones:
+</p>
+<p>
+<a href="schedule.txt"><em>Enrutar:</em></a> abre los controles para cambiar la ruta y la cantidad minima de mercancias y pasajeros necesaria para continuar a la siguiente parada.
+</p>
+<p>
+<em>Ir a casa:</em> manda el Convoy al <a href="depot.txt">deposito</a> apropiado mas cercano. La carga se pierde, pero se recibe un ingreso por transporte al deposito.<br>
+En el deposito, el Convoy mantiene su <a href="schedule.txt">Ruta</a> y la <a href="linemanagement.txt">Linea</a> asignada.
+</p>
+<p>
+<em>sigueme:</em> boton que permite seguir al Convoy (se oscurece si esta activada la opcion).<br>
+Para deseleccionar la opcion, pulsa el boton de nuevo o el boton izquierdo en la ventana del <a href="map.txt">Mapa</a>.
+</p>
+<p>
+<em>Grafica:</em> pulsa el boton para mostrar el grafico (el boton se oscurece cuando el grafico esta visible) en la <strong>Informacion del Convoy</strong>.<br>
+El grafico muestra estadisticas de los ultimos 12 meses (eje x) cuando se selecciona la opcion.<br>
+Pulsa en los botones de opcion para ver informacion en el grafico (el boton se oscurece cuando la opcion esta seleccionada).<br>
+Las lineas de colores en el grafico corresponden a los colores de los botones:<br>
+- <em>Capacidad libre</em> indica el espacio no usado en el Convoy.<br>
+- <em>Recorrido</em> indica el numero de mercancias, pasajeros y correo transportado.<br>
+- <em>Ingresos</em> indica los ingresos generados por transporte.<br>
+- <em>Operacion</em> indica los costes generados por el Convoy en uso.<br>
+- <em>Beneficio</em> indica el beneficio recibido por transporte (Ingresos menos Costes de Operacion).
+</p>
+<p>
+<em>Detalles</em> abre la ventana<a href="convoidetail.txt">Detalles del Convoy</a> que contiene mas informacion y opciones para vender el Convoy.
+</p>
+<p>
+<em>Ordenar pasajeros/mercancia por:</em> lista elementos actualmente cargados por el Convoy.<br>
+La informacion mostrada incluye la cantidad y capacidad del Convoy, tipo de carga, destino final y primera <a href="station.txt">Parada</a>.<br>
+El boton de opcion (cambia de nombre con cada seleccion) ordena la carga en grupos de pasajeros, correo y mercancias:<br>
+ - <em>destino:</em> ordena la carga alfanumericamente, mayusculas antes que minusculas, por nombre del destino final.<br>
+ - <em>por (detalle):</em> ordena la carga alfanumericamente, mayusculas antes que minusculas, por nombre del destino inicial.<br>
+ - <em>por (cantidad):</em> ordena la carga por cantidad disponible en el destino intermedio.<br>
+ - <em>cantidad:</em> ordena la carga por cantidad en orden descendente.
 </p>
diff --git a/simutrans/text/es/curiositylist_filter.txt b/simutrans/text/es/curiositylist_filter.txt
index 9d6c3fa..ba94c1d 100644
--- a/simutrans/text/es/curiositylist_filter.txt
+++ b/simutrans/text/es/curiositylist_filter.txt
@@ -1,94 +1,94 @@
-<title>Ayuda de Informacion del Convoy</title>
-
-<h1><strong>Informacion del Convoy</strong></h1>
-
-<p>
-<strong>Informacion del Convoy</strong> muestra informacion sobre un Convoy (un vehiculo individual o una combinacion de varias unidades) usado para transportar pasajeros o mercancias.<br>
-Se lista los elementos cargados por un Convoy y tambien tiene controles para acceder a mas detalles y para la venta del Convoy; seguir la trayectoria del Convoy; y cambiar el nombre y la <a href="schedule.txt">Ruta</a> de un Convoy.
-</p>
-
-<p>
-Un convoy esta compuesto por al menos una unidad motorizada (motorised) y un numero cualquiera de vagones/remolques.<br>
-Ejemplos de convoys: un grupo de caballos arrastrando un carruaje; una locomotora parte de un tender y vagones; un autobus; una camioneta; un camion con remolque; un tranvia de varios vagones; un barco; un remolcador empujando una barcaza; o un avion.<br>
-Los convoys son ensamblados y vendidos en el <a href="depot.txt">deposito</a> segun el tipo de transporte.<br>
-{Consejos: Un convoy tiene un numero maximo de unidades segun su tipo: trenes, 24; vehiculos de carretera, 4 .}
-</p>
-<p>
-Pulsa en un convoy con la <a href="inspection_tool.txt">Herramienta Explorar</a> o pulsa en un convoy listado en la <a href="convoi.txt">Lista de Vehiculos</a> o en <a href="linemanagement.txt">Administracion de Lineas</a> para abrir la ventana <strong>Informacion del Convoy</strong><br>
-El titulo de la ventana <strong>Informacion del Convoy</strong> muestra un numero ID y el nombre del (por defecto esto ocurre solo con el primer vehiculo del convoy ensamblado en el <a href="depot.txt">deposito</a>).<br>
-<strong>Informacion del Convoy</strong> contiene una caja de texto para el nombre; una mini-vista e informacion acerca del convoy; botones de opcion; y una lista de los elementos cargados actualmente (si todos los elementos no son visibles <a href="mouse.txt">ajusta</a> la ventana <strong>Informacion del Convoy</strong> o usa la barra de desplazamiento).
-</p>
-<p>
-La informacion mostrada en la parte superior de la ventana <strong>Informacion del Convoy</strong>:
-</p>
-<p>
-<em>ID interno</em>: un numero ID unico por convoy (asignado por defecto cuando el convoy se compra o ensambla en el <a href=depot.txt">deposito</a>).
-</p>
-<p>
-- <em>nombre</em>: muestra el nombre asignado al convoy (asignado por defecto cuando el convoy se compra o ensambla en el <a href=depot.txt">deposito</a>).<br>
-Pulsa en la caja de texto del nombre y escribe el nuevo nombre del Convoy para cambiarlo.
-</p>
-<p>
-- <em>velocidad:</em> muestra la velocidad actual en km/h.<br>
-Entre parentesis, el limite maximo de velocidad del Convoy (determinado por la unidad mas lenta en un Convoy).<br>
-La barra verde indica la velocidad actual en relacion al limite maximo de velocidad.
-</p>
-<p>
-- <em>Ingresos:</em> beneficios generados por el vehiculo (ingresos generados restando los costes de operacion) en el año actual de juego.<br>
-Entre parentesis, el coste operacional del Convoy en creditos Hajo por cuadricula.
-</p>
-<p>
-- <em>Peso:</em> peso actual combinado del Convoy y la carga en toneladas.<br>
-Entre parentesis, el peso de la carga actual.<br>
-La barra verde indica la capacidad usada, para cargar mercancias y pasajeros.<br>
-La barra amarilla indica el nivel de <a href="schedule.txt">Carga</a> (cantidad minima de mercancias y pasajeros necesaria para continuar a la siguiente parada) establecida en los controles de Enrutar.<br>
-{Consejos: Para establecer o cambiar el nivel de carga en cada parada, para todos los convoys de una linea, usa la opcion Actualizar linea en la ventana <a href="linemanagement.txt">Administracion de lineas</a> o en los <a href="depot.txt">Controles del Deposito</a>. Para establecer o cambiar el nivel de carga en cada parada, para un convoy solamente, en una linea, usa el boton <em>Enrutar</em> dentro de la ventana <strong>Informacion del Convoy</strong> o en los Controles del Deposito.}
-</p>
-<p>
-- <em>Destino:</em> La proximo <a href="station.txt">Parada</a> o punto de paso en la <a href="schedule.txt">Ruta</a> del Convoy.<br>
-La barra verde indica el progreso hacia la siguiente parada.
-</p>
-<p>
-- <em>Sirve la linea:</em> indica cualquier <a href="linemanagement.txt">Linea</a> asignada al Convoy.
-</p>
-<p>
-- <em>mini-vista</em> muestra el Convoy.<br>
-Pulsa en la mini-vista para centrar la vista del juego en el Convoy.
-</p>
-<p>
-Pulsa en los botones de la ventana <strong>Informacion del Convoy</strong> para abrir controles o seleccionar opciones:
-</p>
-<p>
-<a href="schedule.txt"><em>Enrutar:</em></a> abre los controles para cambiar la ruta y la cantidad minima de mercancias y pasajeros necesaria para continuar a la siguiente parada.
-</p>
-<p>
-<em>Ir a casa:</em> manda el Convoy al <a href="depot.txt">deposito</a> apropiado mas cercano. La carga se pierde, pero se recibe un ingreso por transporte al deposito.<br>
-En el deposito, el Convoy mantiene su <a href="schedule.txt">Ruta</a> y la <a href="linemanagement.txt">Linea</a> asignada.
-</p>
-<p>
-<em>sigueme:</em> boton que permite seguir al Convoy (se oscurece si esta activada la opcion).<br>
-Para deseleccionar la opcion, pulsa el boton de nuevo o el boton izquierdo en la ventana del <a href="map.txt">Mapa</a>.
-</p>
-<p>
-<em>Grafica:</em> pulsa el boton para mostrar el grafico (el boton se oscurece cuando el grafico esta visible) en la <strong>Informacion del Convoy</strong>.<br>
-El grafico muestra estadisticas de los ultimos 12 meses (eje x) cuando se selecciona la opcion.<br>
-Pulsa en los botones de opcion para ver informacion en el grafico (el boton se oscurece cuando la opcion esta seleccionada).<br>
-Las lineas de colores en el grafico corresponden a los colores de los botones:<br>
-- <em>Capacidad libre</em> indica el espacio no usado en el Convoy.<br>
-- <em>Recorrido</em> indica el numero de mercancias, pasajeros y correo transportado.<br>
-- <em>Ingresos</em> indica los ingresos generados por transporte.<br>
-- <em>Operacion</em> indica los costes generados por el Convoy en uso.<br>
-- <em>Beneficio</em> indica el beneficio recibido por transporte (Ingresos menos Costes de Operacion).
-</p>
-<p>
-<em>Detalles</em> abre la ventana<a href="convoidetail.txt">Detalles del Convoy</a> que contiene mas informacion y opciones para vender el Convoy.
-</p>
-<p>
-<em>Ordenar pasajeros/mercancia por:</em> lista elementos actualmente cargados por el Convoy.<br>
-La informacion mostrada incluye la cantidad y capacidad del Convoy, tipo de carga, destino final y primera <a href="station.txt">Parada</a>.<br>
-El boton de opcion (cambia de nombre con cada seleccion) ordena la carga en grupos de pasajeros, correo y mercancias:<br>
- - <em>destino:</em> ordena la carga alfanumericamente, mayusculas antes que minusculas, por nombre del destino final.<br>
- - <em>por (detalle):</em> ordena la carga alfanumericamente, mayusculas antes que minusculas, por nombre del destino inicial.<br>
- - <em>por (cantidad):</em> ordena la carga por cantidad disponible en el destino intermedio.<br>
- - <em>cantidad:</em> ordena la carga por cantidad en orden descendente.
+<title>Ayuda de Informacion del Convoy</title>
+
+<h1><strong>Informacion del Convoy</strong></h1>
+
+<p>
+<strong>Informacion del Convoy</strong> muestra informacion sobre un Convoy (un vehiculo individual o una combinacion de varias unidades) usado para transportar pasajeros o mercancias.<br>
+Se lista los elementos cargados por un Convoy y tambien tiene controles para acceder a mas detalles y para la venta del Convoy; seguir la trayectoria del Convoy; y cambiar el nombre y la <a href="schedule.txt">Ruta</a> de un Convoy.
+</p>
+
+<p>
+Un convoy esta compuesto por al menos una unidad motorizada (motorised) y un numero cualquiera de vagones/remolques.<br>
+Ejemplos de convoys: un grupo de caballos arrastrando un carruaje; una locomotora parte de un tender y vagones; un autobus; una camioneta; un camion con remolque; un tranvia de varios vagones; un barco; un remolcador empujando una barcaza; o un avion.<br>
+Los convoys son ensamblados y vendidos en el <a href="depot.txt">deposito</a> segun el tipo de transporte.<br>
+{Consejos: Un convoy tiene un numero maximo de unidades segun su tipo: trenes, 24; vehiculos de carretera, 4 .}
+</p>
+<p>
+Pulsa en un convoy con la <a href="inspection_tool.txt">Herramienta Explorar</a> o pulsa en un convoy listado en la <a href="convoi.txt">Lista de Vehiculos</a> o en <a href="linemanagement.txt">Administracion de Lineas</a> para abrir la ventana <strong>Informacion del Convoy</strong><br>
+El titulo de la ventana <strong>Informacion del Convoy</strong> muestra un numero ID y el nombre del (por defecto esto ocurre solo con el primer vehiculo del convoy ensamblado en el <a href="depot.txt">deposito</a>).<br>
+<strong>Informacion del Convoy</strong> contiene una caja de texto para el nombre; una mini-vista e informacion acerca del convoy; botones de opcion; y una lista de los elementos cargados actualmente (si todos los elementos no son visibles <a href="mouse.txt">ajusta</a> la ventana <strong>Informacion del Convoy</strong> o usa la barra de desplazamiento).
+</p>
+<p>
+La informacion mostrada en la parte superior de la ventana <strong>Informacion del Convoy</strong>:
+</p>
+<p>
+<em>ID interno</em>: un numero ID unico por convoy (asignado por defecto cuando el convoy se compra o ensambla en el <a href=depot.txt">deposito</a>).
+</p>
+<p>
+- <em>nombre</em>: muestra el nombre asignado al convoy (asignado por defecto cuando el convoy se compra o ensambla en el <a href=depot.txt">deposito</a>).<br>
+Pulsa en la caja de texto del nombre y escribe el nuevo nombre del Convoy para cambiarlo.
+</p>
+<p>
+- <em>velocidad:</em> muestra la velocidad actual en km/h.<br>
+Entre parentesis, el limite maximo de velocidad del Convoy (determinado por la unidad mas lenta en un Convoy).<br>
+La barra verde indica la velocidad actual en relacion al limite maximo de velocidad.
+</p>
+<p>
+- <em>Ingresos:</em> beneficios generados por el vehiculo (ingresos generados restando los costes de operacion) en el año actual de juego.<br>
+Entre parentesis, el coste operacional del Convoy en creditos Hajo por cuadricula.
+</p>
+<p>
+- <em>Peso:</em> peso actual combinado del Convoy y la carga en toneladas.<br>
+Entre parentesis, el peso de la carga actual.<br>
+La barra verde indica la capacidad usada, para cargar mercancias y pasajeros.<br>
+La barra amarilla indica el nivel de <a href="schedule.txt">Carga</a> (cantidad minima de mercancias y pasajeros necesaria para continuar a la siguiente parada) establecida en los controles de Enrutar.<br>
+{Consejos: Para establecer o cambiar el nivel de carga en cada parada, para todos los convoys de una linea, usa la opcion Actualizar linea en la ventana <a href="linemanagement.txt">Administracion de lineas</a> o en los <a href="depot.txt">Controles del Deposito</a>. Para establecer o cambiar el nivel de carga en cada parada, para un convoy solamente, en una linea, usa el boton <em>Enrutar</em> dentro de la ventana <strong>Informacion del Convoy</strong> o en los Controles del Deposito.}
+</p>
+<p>
+- <em>Destino:</em> La proximo <a href="station.txt">Parada</a> o punto de paso en la <a href="schedule.txt">Ruta</a> del Convoy.<br>
+La barra verde indica el progreso hacia la siguiente parada.
+</p>
+<p>
+- <em>Sirve la linea:</em> indica cualquier <a href="linemanagement.txt">Linea</a> asignada al Convoy.
+</p>
+<p>
+- <em>mini-vista</em> muestra el Convoy.<br>
+Pulsa en la mini-vista para centrar la vista del juego en el Convoy.
+</p>
+<p>
+Pulsa en los botones de la ventana <strong>Informacion del Convoy</strong> para abrir controles o seleccionar opciones:
+</p>
+<p>
+<a href="schedule.txt"><em>Enrutar:</em></a> abre los controles para cambiar la ruta y la cantidad minima de mercancias y pasajeros necesaria para continuar a la siguiente parada.
+</p>
+<p>
+<em>Ir a casa:</em> manda el Convoy al <a href="depot.txt">deposito</a> apropiado mas cercano. La carga se pierde, pero se recibe un ingreso por transporte al deposito.<br>
+En el deposito, el Convoy mantiene su <a href="schedule.txt">Ruta</a> y la <a href="linemanagement.txt">Linea</a> asignada.
+</p>
+<p>
+<em>sigueme:</em> boton que permite seguir al Convoy (se oscurece si esta activada la opcion).<br>
+Para deseleccionar la opcion, pulsa el boton de nuevo o el boton izquierdo en la ventana del <a href="map.txt">Mapa</a>.
+</p>
+<p>
+<em>Grafica:</em> pulsa el boton para mostrar el grafico (el boton se oscurece cuando el grafico esta visible) en la <strong>Informacion del Convoy</strong>.<br>
+El grafico muestra estadisticas de los ultimos 12 meses (eje x) cuando se selecciona la opcion.<br>
+Pulsa en los botones de opcion para ver informacion en el grafico (el boton se oscurece cuando la opcion esta seleccionada).<br>
+Las lineas de colores en el grafico corresponden a los colores de los botones:<br>
+- <em>Capacidad libre</em> indica el espacio no usado en el Convoy.<br>
+- <em>Recorrido</em> indica el numero de mercancias, pasajeros y correo transportado.<br>
+- <em>Ingresos</em> indica los ingresos generados por transporte.<br>
+- <em>Operacion</em> indica los costes generados por el Convoy en uso.<br>
+- <em>Beneficio</em> indica el beneficio recibido por transporte (Ingresos menos Costes de Operacion).
+</p>
+<p>
+<em>Detalles</em> abre la ventana<a href="convoidetail.txt">Detalles del Convoy</a> que contiene mas informacion y opciones para vender el Convoy.
+</p>
+<p>
+<em>Ordenar pasajeros/mercancia por:</em> lista elementos actualmente cargados por el Convoy.<br>
+La informacion mostrada incluye la cantidad y capacidad del Convoy, tipo de carga, destino final y primera <a href="station.txt">Parada</a>.<br>
+El boton de opcion (cambia de nombre con cada seleccion) ordena la carga en grupos de pasajeros, correo y mercancias:<br>
+ - <em>destino:</em> ordena la carga alfanumericamente, mayusculas antes que minusculas, por nombre del destino final.<br>
+ - <em>por (detalle):</em> ordena la carga alfanumericamente, mayusculas antes que minusculas, por nombre del destino inicial.<br>
+ - <em>por (cantidad):</em> ordena la carga por cantidad disponible en el destino intermedio.<br>
+ - <em>cantidad:</em> ordena la carga por cantidad en orden descendente.
 </p>
diff --git a/simutrans/text/es/depot.txt b/simutrans/text/es/depot.txt
index 461d8b5..b165a18 100644
--- a/simutrans/text/es/depot.txt
+++ b/simutrans/text/es/depot.txt
@@ -1,110 +1,110 @@
-<title>Ayuda de Controles de Cochera</title>
-
-<h1><strong>Controles de Cochera</strong></h1>
-
-<p>
-Las cochera se usan para comprar y gestionar vehiculos. Los diferentes tipos de transporte tienen su propia cochera. Las cocheras solo muestran los vehiculos electricos si estan sobre una via electrificada.<br>
-Si estan jugando con <a href="new_world.txt">cronologia</a>, a medida que el tiempo pase en Simutrans apareceran mas vehiculos.
-</p>
-<p>
-Las herramientas para construir los distintos tipos de cochera estan disponibles en la barra de herramientas de construccion de cada tipo de transporte: <a href="railtools.txt">Cochera ferroviaria</a>; <a href="monorailtools.txt">Cochera de Monorrail</a>; <a href="tramtools.txt">Cochera de Tranvia</a>; <a href="roadtools.txt">Deposito de carretera</a>; <a href="shiptools.txt">Astillero</a>
-; y <a href="airtools.txt">Hangar</a>.
-</p>
-<p>
-Pulsa en un deposito con la <a href="inspection_tool.txt">Herramienta de Exploracion</a> para abrir <strong>Los controles de la Cochera</strong> que te dara informacion acerca de la compra y gestion de <a href="convoiinfo.txt">Convoys</a> (un vehiculo operativo o una combinacion de varias unidades).<br>
-La barra de Titulo de la ventana <strong>Controles de Cochera</strong> indica el tipo de transportes que gestiona dicha cochera.
-</p>
-<p>
-<strong>Controles de Cochera</strong> puede cambiar de <a href="mouse.txt">tamaño</a> (pulsa en la flecha hacia abajo en la barra de titulo de la ventana para volver al tamaño original).<br>
-Pulsa en las flechas hacia izquierda/derecha en la barra de titulo para pasar a la siguiente cochera que gestione el mismo tipo de vehiculo (centra la vista del juego en esa cochera).
-</p>
-<p>
-En la parte superior de la ventana <strong>Controles de Cochera</strong> se muestra el numero de  <a href="convoiinfo.txt">Convoys</a> en la cochera, el nombre del Convoy y la <a href="linemanagement.txt">Linea</a>.
-</p>
-<p>
-<em>Nombre del </em><a href="convoiinfo.txt"><em>Convoy</em></a>: pulsa en los botones de flechas izquierda/derecha para pasar de un Convoy a otro en la cochera.<br>
-Para cambiar el nombre del Convoy: pulsa en la caja de texto e introduce un nuevo nombre (por defecto esto se hace para el primera unidad comprada o añadida para un nuevo Convoy).
-</p>
-<p>
-<em>Nombre de </em><a href="linemanagement.txt"><em>Linea:</em></a>  pulsa en los botones de flechas izquierda/derecha para seleccionar las lineas por tipo de transporte o pulsa en la caja de texto para abrir una lista de Lineas.<br>
-Para cambiar el nombre de la Linea: pulsa en la caja de texto e introduce un nuevo nombre. (por defecto se le asigna uno cuando se crea una Linea).
-</p>
-<p>
-<em>Grafico del convoy</em> debajo de las cajas de texto de los nombres del Convoy y la Linea, se muestra el grafico del Convoy seleccionado.<br>
-Situa el raton sobre el grafico para ver los detalles acerca del vehiculo (se muestran en la parte inferior de la ventana <strong>Controles de Cochera</strong>).<br>
-Pulsa en el grafico del convoy o en alguna de las unidades para eliminarlo del mismo y almacenarlo en la cochera.
-</p>
-<p>
-Debajo del grafico se muestra el numero de unidades de Convoy seleccionado, longitud de cuadriculas del Convoy (debe caber en una <a href="station.txt"><em>Parada</em> del tamaño adecuado para carga y descargar pasajeros y mercancia), y la linea asignada.
-</p>
-<p>
-Los botones de opcion (pulsa para usar) de <strong>Controles de Cochera</strong> incluyen:
-</p>
-<p>
-<em>Arrancar:</em> envia el <a href="convoiinfo.txt">Convoy</a> seleccionado fuera del deposito si este ultimo puede encontrar una ruta.
-</p>
-<p>
-<a href="schedule.txt"><em>Enrutar:</em></a> abre los controles para cambiar la ruta y la cantidad de elementos que un <a href="convoiinfo.txt">Convoy</a> puede cargar en una <a href="station.txt">Parada</a>.
-</p>
-<p>
-<em>Desenganchar:</em> almacena las unidades de <a href="convoiinfo.txt">Convoy</a> seleccionado.
-</p>
-<p>
-<em>Vender:</em> vende el <a href="convoiinfo.txt">Convoy</a> actual, el balance aumente con la cantidad de <em>Valor de Reventa</em>.
-</p>
-
-<p>
-<a href="linemanagement.txt"><em>Nueva Linea:</em></a> abre los controles para definir una <a href="schedule.txt">Ruta</a> (una ruta y una minima cantidad de elementos que el Convoy puede cargar en una Parada), que pueda ser usado por varios <a href="convoiinfo.txt">Convoys</a>.
-</p>
-<p>
-<em>Aplicar Linea:</em> asigna la <a href="linemanagement.txt">Linea</a> mostrada en la caja de texto de linea en la parte superior de la ventana <strong>Controles de Cochera</strong> al <a href="convoiinfo.txt">Convoy</a> seleccionado.
-</p>
-<p>
-<a href="linemanagement.txt"><em>Actualizar Linea:</em></a> abre los controles para cambiar la <a href="schedule.txt">Ruta</a> (una ruta y una minima cantidad de elementos que el Convoy puede cargar en una Parada) de la linea seleccionada.
-</p>
-<p>
-<em>Copiar </em> <a href="convoiinfo.txt"><em>Vehiculo:</em></a> compra y añade otro convoy con la misma composicion, <a href="schedule.txt">Ruta</a> y <a href="linemanagement.txt">Linea</a> que el convoy seleccionado.
-</p>
-<p>
-Debajo de los botones de opcion se muestran graficos de los vehiculos disponibles para comprar.<br>
-<em>graficos de los vehiculos:</em> los vehiculos se dividen en categorias, los cuales se pueden ver pulsando en las distintas pestañas. Las pestañas dividen los vehiculos en los siguientes grupos: vehiculos para pasajeros y correo, otros vehiculos (motorizados), y otros trailers y carruajes.<br>
-Un numero blanco sobre el grafico del vehiculo indica la cantidad de unidades almacenadas si algun Convoy ha sido desensamblado. Las unidades almacenadas se pueden vender o usarse en un nuevo Convoy.
-</p>
-<p>
-Situa el cursor sobre el grafico del vehiculo para ver informacion acerca del vehiculo:<br>
-<em>Nombre:</em> y entre parentesis el tipo de motor usado.<br>
-<em>Coste:</em> precio de venta y entre parentesis el coste de operacion por kilometro<br>
-<em>Potencia:</em> potencia del motor y velocidad maxima para vehiculos motorizados.<br>
-<em>Capacidad:</em> cantidad y <a href="goods_filter.txt">categoria de mercancia</a> que puede llevar el vehiculo.<br>
-<em>Peso:</em> en toneladas.<br>
-<em>Velocidad maxima:</em> para vehiculos no motorizados.<br>
-<em>Fecha intro:</em> fecha en que estara disponible el vehiculo si esta activada la <a href="new_world.txt">cronologia</a>.<br>
-<em>Fecha de retirada:</em> fecha en que el vehiculo se vuelve obsoleto.<br>
-<em>Construido por:</em> creador del vehiculo para Simutrans.<br>
-<em>Marcha:</em> ratio de potencia.<br>
-<em>Valor de Venta:</em> cantidad de dinero recibida por la venta de un vehiculo previamente comprado.
-</p>
-<p>
-Pulsa en los graficos de vehiculos debajo de las pestañas para comprar o vender un vehiculo dependiendo de la opcion del boton de opciones situado en la parte inferior derecha de la ventana de <strong>Controles de cochera</strong>. El boton de opcion tiene tres modos:
-</p>
-<p>
-<em>Añadir:</em> compra un vehiculo y lo añade al Convoy seleccionado, o crea un nuevo Convoy.
-</p>
-<p>
-<em>Poner al frente:</em> compra un vehiculo y lo añade el la parte frontal del convoy actual, o crea un nuevo Convoy.
-</p>
-<p>
-<em>Modo Venta:</em> vende todos los vehiculos almacenados.
-</p>
-<p>
-<em>Barras de colores</em> bajo los vehiculos indica que vehiculos y en que orden pueden ser añadidos a otros, para formar un <a href="convoiinfo.txt">Convoy</a> operativo (las barras de color pueden cambiar con diferentes opciones de los vehiculos).<br>
-Los coloures indican:<br>
-- <em>verde:</em> el vehiculo puede ser usado.<br>
-- <em>rojo:</em> el vehiculo no puede ser usado<br>
-- <em>amarillo:</em> otro vehiculo debe ser puesto al frente o al final para crear un Convoy operativo.<br>
-- <em>azul:</em> el vehiculo se puede usar pero esta obsoleto.<br>
-{Consejos: un Convoy es operativo, si muestra barras verdes en todas las unidades de convoy; si existe alguna unidad con una barra amarilla necesitaras algun vehiculo que has olvidado.}
-</p>
-<p>
-<em>Mostrar obsoletos:</em> si estas jugando con <a href="new_world.txt">cronologia</a>, el boton cuadrado mostrara (pulsa para usar) los vehiculos retirados.
+<title>Ayuda de Controles de Cochera</title>
+
+<h1><strong>Controles de Cochera</strong></h1>
+
+<p>
+Las cochera se usan para comprar y gestionar vehiculos. Los diferentes tipos de transporte tienen su propia cochera. Las cocheras solo muestran los vehiculos electricos si estan sobre una via electrificada.<br>
+Si estan jugando con <a href="new_world.txt">cronologia</a>, a medida que el tiempo pase en Simutrans apareceran mas vehiculos.
+</p>
+<p>
+Las herramientas para construir los distintos tipos de cochera estan disponibles en la barra de herramientas de construccion de cada tipo de transporte: <a href="railtools.txt">Cochera ferroviaria</a>; <a href="monorailtools.txt">Cochera de Monorrail</a>; <a href="tramtools.txt">Cochera de Tranvia</a>; <a href="roadtools.txt">Deposito de carretera</a>; <a href="shiptools.txt">Astillero</a>
+; y <a href="airtools.txt">Hangar</a>.
+</p>
+<p>
+Pulsa en un deposito con la <a href="inspection_tool.txt">Herramienta de Exploracion</a> para abrir <strong>Los controles de la Cochera</strong> que te dara informacion acerca de la compra y gestion de <a href="convoiinfo.txt">Convoys</a> (un vehiculo operativo o una combinacion de varias unidades).<br>
+La barra de Titulo de la ventana <strong>Controles de Cochera</strong> indica el tipo de transportes que gestiona dicha cochera.
+</p>
+<p>
+<strong>Controles de Cochera</strong> puede cambiar de <a href="mouse.txt">tamaño</a> (pulsa en la flecha hacia abajo en la barra de titulo de la ventana para volver al tamaño original).<br>
+Pulsa en las flechas hacia izquierda/derecha en la barra de titulo para pasar a la siguiente cochera que gestione el mismo tipo de vehiculo (centra la vista del juego en esa cochera).
+</p>
+<p>
+En la parte superior de la ventana <strong>Controles de Cochera</strong> se muestra el numero de  <a href="convoiinfo.txt">Convoys</a> en la cochera, el nombre del Convoy y la <a href="linemanagement.txt">Linea</a>.
+</p>
+<p>
+<em>Nombre del </em><a href="convoiinfo.txt"><em>Convoy</em></a>: pulsa en los botones de flechas izquierda/derecha para pasar de un Convoy a otro en la cochera.<br>
+Para cambiar el nombre del Convoy: pulsa en la caja de texto e introduce un nuevo nombre (por defecto esto se hace para el primera unidad comprada o añadida para un nuevo Convoy).
+</p>
+<p>
+<em>Nombre de </em><a href="linemanagement.txt"><em>Linea:</em></a>  pulsa en los botones de flechas izquierda/derecha para seleccionar las lineas por tipo de transporte o pulsa en la caja de texto para abrir una lista de Lineas.<br>
+Para cambiar el nombre de la Linea: pulsa en la caja de texto e introduce un nuevo nombre. (por defecto se le asigna uno cuando se crea una Linea).
+</p>
+<p>
+<em>Grafico del convoy</em> debajo de las cajas de texto de los nombres del Convoy y la Linea, se muestra el grafico del Convoy seleccionado.<br>
+Situa el raton sobre el grafico para ver los detalles acerca del vehiculo (se muestran en la parte inferior de la ventana <strong>Controles de Cochera</strong>).<br>
+Pulsa en el grafico del convoy o en alguna de las unidades para eliminarlo del mismo y almacenarlo en la cochera.
+</p>
+<p>
+Debajo del grafico se muestra el numero de unidades de Convoy seleccionado, longitud de cuadriculas del Convoy (debe caber en una <a href="station.txt"><em>Parada</em> del tamaño adecuado para carga y descargar pasajeros y mercancia), y la linea asignada.
+</p>
+<p>
+Los botones de opcion (pulsa para usar) de <strong>Controles de Cochera</strong> incluyen:
+</p>
+<p>
+<em>Arrancar:</em> envia el <a href="convoiinfo.txt">Convoy</a> seleccionado fuera del deposito si este ultimo puede encontrar una ruta.
+</p>
+<p>
+<a href="schedule.txt"><em>Enrutar:</em></a> abre los controles para cambiar la ruta y la cantidad de elementos que un <a href="convoiinfo.txt">Convoy</a> puede cargar en una <a href="station.txt">Parada</a>.
+</p>
+<p>
+<em>Desenganchar:</em> almacena las unidades de <a href="convoiinfo.txt">Convoy</a> seleccionado.
+</p>
+<p>
+<em>Vender:</em> vende el <a href="convoiinfo.txt">Convoy</a> actual, el balance aumente con la cantidad de <em>Valor de Reventa</em>.
+</p>
+
+<p>
+<a href="linemanagement.txt"><em>Nueva Linea:</em></a> abre los controles para definir una <a href="schedule.txt">Ruta</a> (una ruta y una minima cantidad de elementos que el Convoy puede cargar en una Parada), que pueda ser usado por varios <a href="convoiinfo.txt">Convoys</a>.
+</p>
+<p>
+<em>Aplicar Linea:</em> asigna la <a href="linemanagement.txt">Linea</a> mostrada en la caja de texto de linea en la parte superior de la ventana <strong>Controles de Cochera</strong> al <a href="convoiinfo.txt">Convoy</a> seleccionado.
+</p>
+<p>
+<a href="linemanagement.txt"><em>Actualizar Linea:</em></a> abre los controles para cambiar la <a href="schedule.txt">Ruta</a> (una ruta y una minima cantidad de elementos que el Convoy puede cargar en una Parada) de la linea seleccionada.
+</p>
+<p>
+<em>Copiar </em> <a href="convoiinfo.txt"><em>Vehiculo:</em></a> compra y añade otro convoy con la misma composicion, <a href="schedule.txt">Ruta</a> y <a href="linemanagement.txt">Linea</a> que el convoy seleccionado.
+</p>
+<p>
+Debajo de los botones de opcion se muestran graficos de los vehiculos disponibles para comprar.<br>
+<em>graficos de los vehiculos:</em> los vehiculos se dividen en categorias, los cuales se pueden ver pulsando en las distintas pestañas. Las pestañas dividen los vehiculos en los siguientes grupos: vehiculos para pasajeros y correo, otros vehiculos (motorizados), y otros trailers y carruajes.<br>
+Un numero blanco sobre el grafico del vehiculo indica la cantidad de unidades almacenadas si algun Convoy ha sido desensamblado. Las unidades almacenadas se pueden vender o usarse en un nuevo Convoy.
+</p>
+<p>
+Situa el cursor sobre el grafico del vehiculo para ver informacion acerca del vehiculo:<br>
+<em>Nombre:</em> y entre parentesis el tipo de motor usado.<br>
+<em>Coste:</em> precio de venta y entre parentesis el coste de operacion por kilometro<br>
+<em>Potencia:</em> potencia del motor y velocidad maxima para vehiculos motorizados.<br>
+<em>Capacidad:</em> cantidad y <a href="goods_filter.txt">categoria de mercancia</a> que puede llevar el vehiculo.<br>
+<em>Peso:</em> en toneladas.<br>
+<em>Velocidad maxima:</em> para vehiculos no motorizados.<br>
+<em>Fecha intro:</em> fecha en que estara disponible el vehiculo si esta activada la <a href="new_world.txt">cronologia</a>.<br>
+<em>Fecha de retirada:</em> fecha en que el vehiculo se vuelve obsoleto.<br>
+<em>Construido por:</em> creador del vehiculo para Simutrans.<br>
+<em>Marcha:</em> ratio de potencia.<br>
+<em>Valor de Venta:</em> cantidad de dinero recibida por la venta de un vehiculo previamente comprado.
+</p>
+<p>
+Pulsa en los graficos de vehiculos debajo de las pestañas para comprar o vender un vehiculo dependiendo de la opcion del boton de opciones situado en la parte inferior derecha de la ventana de <strong>Controles de cochera</strong>. El boton de opcion tiene tres modos:
+</p>
+<p>
+<em>Añadir:</em> compra un vehiculo y lo añade al Convoy seleccionado, o crea un nuevo Convoy.
+</p>
+<p>
+<em>Poner al frente:</em> compra un vehiculo y lo añade el la parte frontal del convoy actual, o crea un nuevo Convoy.
+</p>
+<p>
+<em>Modo Venta:</em> vende todos los vehiculos almacenados.
+</p>
+<p>
+<em>Barras de colores</em> bajo los vehiculos indica que vehiculos y en que orden pueden ser añadidos a otros, para formar un <a href="convoiinfo.txt">Convoy</a> operativo (las barras de color pueden cambiar con diferentes opciones de los vehiculos).<br>
+Los coloures indican:<br>
+- <em>verde:</em> el vehiculo puede ser usado.<br>
+- <em>rojo:</em> el vehiculo no puede ser usado<br>
+- <em>amarillo:</em> otro vehiculo debe ser puesto al frente o al final para crear un Convoy operativo.<br>
+- <em>azul:</em> el vehiculo se puede usar pero esta obsoleto.<br>
+{Consejos: un Convoy es operativo, si muestra barras verdes en todas las unidades de convoy; si existe alguna unidad con una barra amarilla necesitaras algun vehiculo que has olvidado.}
+</p>
+<p>
+<em>Mostrar obsoletos:</em> si estas jugando con <a href="new_world.txt">cronologia</a>, el boton cuadrado mostrara (pulsa para usar) los vehiculos retirados.
 </p>
diff --git a/simutrans/text/ja/citylist_filter.txt b/simutrans/text/ja/citylist_filter.txt
new file mode 100644
index 0000000..c48275a
--- /dev/null
+++ b/simutrans/text/ja/citylist_filter.txt
@@ -0,0 +1,55 @@
+<title>町一覧のヘルプ</title>
+
+<h1>町一覧</h1>
+
+<p>
+<strong>町一覧</strong>では都市部(村、町、市)について人口などの詳細情報を得ることが<br>
+できます。また、マップ世界全体の統計情報をグラフで見ることができます。
+</p>
+<p>
+<i>開き方</i>:<a href="list.txt">一覧表</a>ツールの街一覧のアイコンをクリックするか、<a href="keys.txt">[T]</a>キーを<br>
+押します。
+</p>
+<p>
+<i>操作</i>: リストの都市の名前を<em>左クリック</em>すると、<a href="citywindow.txt">街の詳細</a>ウィンドウを開<br>
+きます。<em>右クリック</em>または左端の<em>矢印ボタン</em>をクリックすると、ゲーム画面<br>
+を都市に移動します。
+</p>
+<p>
+<em>総人口:</em>はゲーム内の全市民の合計数(全ての都市部の人口の合計)<br>
+です。最近の人口増加はカッコ付きで表示されています。
+</p>
+<p>
+<i>並び替え:</i>: ボタンのクリックでリストの並び替え基準を切り替えます。<br><br>
+- <em>都市名</em> 名前の文字コードを基準に並び替えます。<br>
+- <em>住民</em> 人口規模によって並び替えます。<br>
+- <em>発展</em> 発展度(によって並び替えます。
+</p>
+<p>
+- <em>昇順</em> / <em>降順</em> 並び順を反転させます。
+</p>
+<p>
+<em>都市名</em> その都市部の名前
+</p>
+<p>
+<i>人口</i> その都市部の人口。カッコ内は最近の発展度。
+</p>
+<p>
+<i>グラフ</i>: グラフを開閉します。<br><br>
+<em>住民</em>: 住民の数<br><br>
+<em>発展</em>: 増加した住民の数<br><br>
+<em>都市</em>: 都市の数<br><br>
+<em>産業</em>: 産業施設の数<br><br>
+<em>編成数</em>: 全社の車両編成の総数<br><br>
+<em>自家用車</em>: 自家用車の総数<br><br>
+<em>旅客輸送率(%)</em>: 旅行希望者のうち、目的地へと出発できた割合(%)<br><br>
+<em>旅客</em>: 旅行希望者の総数<br><br>
+<em>配達実績</em>: 配達希望郵便のうち、目的地へと出発できた割合(%)<br><br>
+<em>郵便</em>: 配達希望郵便の総数<br><br>
+<em>到着</em>: 最終消費地に必要な製品の種類うち、在庫が充足されている種類の割合(%)<br><br>
+<em>輸送実績</em>: 最終消費地に必要な製品の種類の総数
+</p>
+<p>
+旅客輸送率(%)、配達実績、到着の割合は、各都市の発展に大きく影響します。<br>
+割合が高いほど、より速く発展します。
+</p>
diff --git a/simutrans/text/ja/citywindow.txt b/simutrans/text/ja/citywindow.txt
new file mode 100644
index 0000000..9258630
--- /dev/null
+++ b/simutrans/text/ja/citywindow.txt
@@ -0,0 +1,53 @@
+<title>街の詳細のヘルプ</title>
+
+<h1>街の詳細</h1>
+<p>
+<i>開き方:</i><strong>街の詳細</strong>を開くには、ゲーム画面上で<a href="inspection_tool.txt">調査ツール</a>を使って<br>
+役所をクリックするか、<a href="citylist_filter.txt">町一覧</a>ウィンドウでリストを左クリックします。
+
+</p>
+<p>
+<em>名前</em>: 直接変更できます。長い名前は入力できません。<br>
+<em>街の規模</em>: 都市の人口。カッコ内は最近の発展度。<br>
+<em>市街地</em>: 建物の数(ブロック数)<br>
+<em>市域</em>: 都市の市域の境界座標<br>
+建物が建設されたり、市道が整備されるのは、この市域の範囲内だけです。<br>
+市域は<a href="map.txt">マップ</a>ウィンドウでも確認できます。
+<p>
+</p>
+<em>無職者</em>: 商店や工場が増えると、無職者の数は減少します。<br>
+<em>浮浪者</em>: 住居の数が増えると、浮浪者の数は減少します。<br><br>
+通常、無職者と浮浪者との合計が100を超えると、新しい建物が建設され<br>
+たり、増改築が行われます。無職者と浮浪者との数がどんどん増え続けて<br>
+いるような場合は、新しい建物を建設する適切な場所がなかったり、建物<br>
+が最大レベルに達している可能性があります。適切な整地や道路整備で<br>
+改善されるかもしれません。<br><br>
+<em>街を発展させる</em>: このボタンをオフにすると、この都市の発展を一時的に<br>
+止めることができます。このボタンの状態はセーブゲームに保存されます。
+</p>
+<p>
+<em>地図:</em>前月と今月の旅客と郵便の目的地を表示してします。<br>
+地図上を左クリックすると、でゲーム画面を移動できます。<br>
+<a href="map.txt">マップ</a>ウィンドウに表示させることもできます。<br>
+ 橙: 目的地へ出発できた<br>
+ 黄: 目的地へ出発できなかった
+</p>
+<p>
+<i>グラフ</i><br><br>
+<em>住民</em>: 住民の数<br><br>
+<em>発展</em>: 増加した住民の数<br><br>
+<em>市街地</em>: 建物の数(ブロック数)<br><br>
+<em>自家用車</em>: この都市で増えた自家用車の数<br><br>
+<em>輸送実績</em>: この都市の旅行希望者のうち、目的地へと出発できた数<br><br>
+<em>旅客</em>: この都市の旅行希望者の数<br><br>
+<em>配達実績</em>: この都市の配達希望郵便のうち、目的地へと出発できた数<br><br>
+<em>郵便</em>: この都市の配達希望郵便の数<br><br>
+<em>到着</em>: この都市から労働者が通う最終消費地に必要な製品の種類うち、<br>
+在庫が充足されている種類の数<br><br>
+<em>製品</em>: この都市から労働者が通う最終消費地に必要な製品の種類の数
+</p>
+<p>
+輸送実績/旅客、配達実績/郵便、到着/製品の割合は、都市の発展に<br>
+大きく影響します。割合が高いほど、より速く発展します。<br>
+また、この割合が低いと自家用車が増えます。
+</p>
diff --git a/simutrans/text/ja/color.txt b/simutrans/text/ja/color.txt
index d67811d..0abe3d7 100644
--- a/simutrans/text/ja/color.txt
+++ b/simutrans/text/ja/color.txt
@@ -1,7 +1,7 @@
-§<title>カラーダイアログ ヘルプ</title>
-
-<h1>カラーダイアログ</h1>
-
-<p>
- ここではあなたの会社のカラーを選択することができます。ここで選んだカ<br>ラーは、列車や建築物の色となります。ただし、全ての物がここで選んだカラー<br>になるわけではなく、色が変わらない物もあります。
+<title>カラーダイアログ ヘルプ</title>
+
+<h1>カラーダイアログ</h1>
+
+<p>
+ ここではあなたの会社のカラーを選択することができます。ここで選んだカ<br>ラーは、列車や建築物の色となります。ただし、全ての物がここで選んだカラー<br>になるわけではなく、色が変わらない物もあります。
 </p>
diff --git a/simutrans/text/ja/depot.txt b/simutrans/text/ja/depot.txt
index 119a172..cdfca5b 100644
--- a/simutrans/text/ja/depot.txt
+++ b/simutrans/text/ja/depot.txt
@@ -1,28 +1,28 @@
-§<title>車庫ダイアログ ヘルプ</title>
-
-<h1>車庫ダイアログ</h1>
-<p>
- 車庫ダイアログでは、それぞれ列車、車両、船舶の購入や<a href="schedule.txt">スケジュール</a>設定<br>を行えます。ここでは列車の場合で解説しますが、車両や船舶においても操作<br>方法は同じです。</p>
-<p>
- ダイアログの最上部には、現在編成中の列車の情報が表示されます。テキス<br>トフィールドには列車名が表示されます。ここに文字を入力することで、列車<br>名を変更できます。 ォボタンと サボタンで、編成対象の列車を変更できます。<br>ここで「新しい編成」を選択すると、新規の列車の編成になります。
-</p>
-<p>
- その下には、編成中の列車を操作するための次のボタンがあります。
-</p>
-<p>
-<em>スタート</em> - 編成中の列車の運行を開始します。運行を開始するためには、<br>あらかじめ<a href="schedule.txt">スケジュール</a>が設定されていなければいけません。<br>
-<em>編成解除</em> - 現在の編成を解体します。解体された編成の車両はストックされ、<br>他の編成に組み込むことが出来ます。<br>
-<em>売却</em> - 現在の編成を構成している車両を全て売却します。現在の売却価格は<br>「売却価格」に示されており、購入時からの時間の経過に伴って減少していきます。
-</p>
-<p>
- ダイアログの中段部分には、購入できる車両の一覧が表示されています。車両は機関<br>車と客車・貨車に分かれており、「機関車」タブ、「貨車・客車」タブで表示を切り替<br>えられます。車両の画像にマウスカーソルを重ねると、その車両の情報がダイアログ下<br>部に表示されます。クリックすると、その車両を購入し、現在の編成に組み込みます。
-</p>
-<p>
- 各車両の下にある色付きのバーは、その車両を現在の編成に組み込むことが<br>出来るかどうかを示しています。緑の車両は、現在の編成に組み込むことが出<br>来ます。赤の車両は、現在の編成には組み込むことが出来ません。緑と黄色の<br>混じった車両は、現在の編成に組み込むことが出来ますが、その編成を完成さ<br>せるためには、さらに他の車両を購入しなければならないことを示しています。<br>後部機関車が必要な列車などが、この表示になります。
-</p>
-<p>
- 車両の左上にある数字は、その車両のストックがあることを示しています。<br>ストックのある車両は、クリックすることで現在の編成に組み込むことが出来<br>ます。
-</p>
-<p>
- 右側にある「車両」ボタンでは、購入した車両を現在の編成のどの位置に組<br>み込むかを変更できます。「追加」の状態では、現在の編成の最後部に追加し<br>ます。「先頭へ」では、現在の編成の先頭に組み込みます。「売却」では、車<br>両の購入ではなく、ストックされている車両の売却モードになります
+<title>車庫ダイアログ ヘルプ</title>
+
+<h1>車庫ダイアログ</h1>
+<p>
+ 車庫ダイアログでは、それぞれ列車、車両、船舶の購入や<a href="schedule.txt">スケジュール</a>設定<br>を行えます。ここでは列車の場合で解説しますが、車両や船舶においても操作<br>方法は同じです。</p>
+<p>
+ ダイアログの最上部には、現在編成中の列車の情報が表示されます。テキス<br>トフィールドには列車名が表示されます。ここに文字を入力することで、列車<br>名を変更できます。 ォボタンと サボタンで、編成対象の列車を変更できます。<br>ここで「新しい編成」を選択すると、新規の列車の編成になります。
+</p>
+<p>
+ その下には、編成中の列車を操作するための次のボタンがあります。
+</p>
+<p>
+<em>スタート</em> - 編成中の列車の運行を開始します。運行を開始するためには、<br>あらかじめ<a href="schedule.txt">スケジュール</a>が設定されていなければいけません。<br>
+<em>編成解除</em> - 現在の編成を解体します。解体された編成の車両はストックされ、<br>他の編成に組み込むことが出来ます。<br>
+<em>売却</em> - 現在の編成を構成している車両を全て売却します。現在の売却価格は<br>「売却価格」に示されており、購入時からの時間の経過に伴って減少していきます。
+</p>
+<p>
+ ダイアログの中段部分には、購入できる車両の一覧が表示されています。車両は機関<br>車と客車・貨車に分かれており、「機関車」タブ、「貨車・客車」タブで表示を切り替<br>えられます。車両の画像にマウスカーソルを重ねると、その車両の情報がダイアログ下<br>部に表示されます。クリックすると、その車両を購入し、現在の編成に組み込みます。
+</p>
+<p>
+ 各車両の下にある色付きのバーは、その車両を現在の編成に組み込むことが<br>出来るかどうかを示しています。緑の車両は、現在の編成に組み込むことが出<br>来ます。赤の車両は、現在の編成には組み込むことが出来ません。緑と黄色の<br>混じった車両は、現在の編成に組み込むことが出来ますが、その編成を完成さ<br>せるためには、さらに他の車両を購入しなければならないことを示しています。<br>後部機関車が必要な列車などが、この表示になります。
+</p>
+<p>
+ 車両の左上にある数字は、その車両のストックがあることを示しています。<br>ストックのある車両は、クリックすることで現在の編成に組み込むことが出来<br>ます。
+</p>
+<p>
+ 右側にある「車両」ボタンでは、購入した車両を現在の編成のどの位置に組<br>み込むかを変更できます。「追加」の状態では、現在の編成の最後部に追加し<br>ます。「先頭へ」では、現在の編成の先頭に組み込みます。「売却」では、車<br>両の購入ではなく、ストックされている車両の売却モードになります
 </p>
diff --git a/simutrans/text/ja/display.txt b/simutrans/text/ja/display.txt
index 28f82af..8a5c96a 100644
--- a/simutrans/text/ja/display.txt
+++ b/simutrans/text/ja/display.txt
@@ -1,22 +1,22 @@
-§<title>表示オプションヘルプ</title>
-
-<h1>表示オプションヘルプ</h1>
-
-<p>
- このダイアログでは、表示に関する様々な設定をすることが出来ます。<br> オプションは次の通りです。</p>
-
-<p>
-<em>明るさ</em> - 画面を明るくしたり、暗くしたりします。<br>
-<em>色合い</em> - 動作しません。<br>
-<em>スクロールの早さ</em> - この値が大きいほど、スクロールが早くなります。
-</p>
-
-<p>
-<em>スクロール方向の逆転</em> - マウスを動かす方向と、スクロールの方向の対応が<br>逆になります。例えば、右に動かすと左にスクロールします。<br>
-<em>歩行者を表示する</em> - 町に歩行者を生成して表示するかどうかを設定します。<br>コンピュータの処理能力が不足している場合は、このオプションをオフにして<br>ください。<br>
-<em>夜は暗くする</em> - 1日の昼と夜のサイクルによって画面の明るさを変えます。<br>オンにすると、夜には綺麗な夜景が現れます。
-</p>
-
-<p>
- ダイアログの下の部分は、コンピュータのパフォーマンスに関する情報を示<br>しています。<br><em>注意</em> - この情報は、バグ報告の際やパフォーマンス向上の為に、お聞きす<br>ることがあります。
+<title>表示オプションヘルプ</title>
+
+<h1>表示オプションヘルプ</h1>
+
+<p>
+ このダイアログでは、表示に関する様々な設定をすることが出来ます。<br> オプションは次の通りです。</p>
+
+<p>
+<em>明るさ</em> - 画面を明るくしたり、暗くしたりします。<br>
+<em>色合い</em> - 動作しません。<br>
+<em>スクロールの早さ</em> - この値が大きいほど、スクロールが早くなります。
+</p>
+
+<p>
+<em>スクロール方向の逆転</em> - マウスを動かす方向と、スクロールの方向の対応が<br>逆になります。例えば、右に動かすと左にスクロールします。<br>
+<em>歩行者を表示する</em> - 町に歩行者を生成して表示するかどうかを設定します。<br>コンピュータの処理能力が不足している場合は、このオプションをオフにして<br>ください。<br>
+<em>夜は暗くする</em> - 1日の昼と夜のサイクルによって画面の明るさを変えます。<br>オンにすると、夜には綺麗な夜景が現れます。
+</p>
+
+<p>
+ ダイアログの下の部分は、コンピュータのパフォーマンスに関する情報を示<br>しています。<br><em>注意</em> - この情報は、バグ報告の際やパフォーマンス向上の為に、お聞きす<br>ることがあります。
 </p>
diff --git a/simutrans/text/ja/finances.txt b/simutrans/text/ja/finances.txt
index 7bfa5e0..1b21122 100644
--- a/simutrans/text/ja/finances.txt
+++ b/simutrans/text/ja/finances.txt
@@ -1,35 +1,35 @@
-§<title>財政ヘルプ</title>
-
-<h1>財政(<em>f</em>)</h1>
-
-<p>
- 財政ダイアログでは、昨年度の決算、及び今年度の現時点での収支を見るこ<br>とが出来ます。各項目は以下の内容を示しています。
-</p>
-
-<p>
-<em>建設費</em> - 線路や道路、駅など、建築物に使われた費用の合計です。
-</p>
-
-<p>
-<em>車両/船舶購入費</em> - 列車、トラックやバス、船舶など、乗り物の購入に使わ<br>れた費用の合計です。
-</p>
-
-<p>
-<em>車両/船舶運航費用</em> - 乗り物の運行費用の合計です(車両ごとの運行費用は、<ahref="depot.txt">車庫</a>ウィ<br>ンドウで調べることが出来ます)。
-</p>
-
-<p>
-<em>収入</em> - 旅客輸送、貨物輸送によって得られた全ての収入の合計です。
-</p>
-
-<p>
-<em>維持費</em> - 線路や道路、駅などの建築物を維持する為に掛かった費用の合計<br>です。<br>(<em>注意:</em>この項目はダイアログの下の部分にあります)
-</p>
-
-<p>
-<em>収支</em> - 以上の各項目の支出と収入を計算した結果の収支です。
-</p>
-
-<p>
-<em>残金</em> - 現在の資金総額です。
+<title>財政ヘルプ</title>
+
+<h1>財政(<em>f</em>)</h1>
+
+<p>
+ 財政ダイアログでは、昨年度の決算、及び今年度の現時点での収支を見るこ<br>とが出来ます。各項目は以下の内容を示しています。
+</p>
+
+<p>
+<em>建設費</em> - 線路や道路、駅など、建築物に使われた費用の合計です。
+</p>
+
+<p>
+<em>車両/船舶購入費</em> - 列車、トラックやバス、船舶など、乗り物の購入に使わ<br>れた費用の合計です。
+</p>
+
+<p>
+<em>車両/船舶運航費用</em> - 乗り物の運行費用の合計です(車両ごとの運行費用は、<ahref="depot.txt">車庫</a>ウィ<br>ンドウで調べることが出来ます)。
+</p>
+
+<p>
+<em>収入</em> - 旅客輸送、貨物輸送によって得られた全ての収入の合計です。
+</p>
+
+<p>
+<em>維持費</em> - 線路や道路、駅などの建築物を維持する為に掛かった費用の合計<br>です。<br>(<em>注意:</em>この項目はダイアログの下の部分にあります)
+</p>
+
+<p>
+<em>収支</em> - 以上の各項目の支出と収入を計算した結果の収支です。
+</p>
+
+<p>
+<em>残金</em> - 現在の資金総額です。
 </p>
diff --git a/simutrans/text/ja/general.txt b/simutrans/text/ja/general.txt
index b8804c1..d91d996 100644
--- a/simutrans/text/ja/general.txt
+++ b/simutrans/text/ja/general.txt
@@ -1,9 +1,64 @@
-§<h1>Simutrans総合ヘルプ</h1>
-
-<p>
-原著 Hj. Malthaner
-</p>
-
-<p>
- 日本語訳「フリーの経営シム"Simutrans"を語るスレ」の313さん+囲碁25級
+<title>Simutrans総合ヘルプ</title>
+
+<h1>総合ヘルプ</h1>
+<p>
+※印のものは長い間、更新されていません。現在の内容と大きく異なる場合<br>
+があります。
+英語のものは、日本語ヘルプがまだありません。
+</p>
+<p>
+<a href="simutrans.txt">Welcome</a> | <a href="window.txt">Game Interface</a> | <a href="mouse.txt">Mouse Help</a> (to be written)<br><br>
+<a href="keys.txt">キーボード</a>
+<br>
+</p>
+<p>
+<i>ゲームオプション</i>: <a href="options.txt">※ゲームオプション</a><br><br>
+<a href="language.txt">※言語</a> | <a href="color.txt">※カラーダイアログ</a> | <a href="display.txt">※表示設定</a><br><br>
+<a href="sound.txt">※サウンドダイアログ</a> | <a href="players.txt">ライバル会社一覧</a> | <a href="load.txt">※ゲームの再開</a><br><br>
+<a href="save.txt">※ゲームの保存</a> | <a href="new_world.txt">※新しいマップの作成</a> | 
+<a href="climates.txt">Climate Control</a><br><br>
+<a href="load_relief.txt">Load Height Map</a> | <a href="settings.txt">高度な設定</a>
+</p>
+
+<p>
+<i>メインメニュー</i><br><br>
+<a href="options.txt">※ゲームオプション</a> | <a href="map.txt">マップウィンドウ</a>
+ | <a href="inspection_tool.txt">Inspection Tool</a><br><br>
+<a href="slopetools.txt">スロープツール</a> | <a href="railtools.txt">※鉄道ツール</a> | <a href="monorailtools.txt">Monorail Tools</a><br><br>
+<a href="tramtools.txt">Tram Tools</a> | <a href="roadtools.txt">※道路ツール</a> | <a href="shiptools.txt">※船舶ツール</a><br><br>
+<a href="airtools.txt">Airport Tools</a> | <a href="special.txt">Special Construction Tools</a> |  <a href="edittools.txt">Game Edit Tools</a><br><br>
+<a href="removal_tool.txt">Destroy/Remove</a>
+</p>
+<p>
+<i>一覧表</i><br><br>
+<a href="linemanagement.txt">Line Management</a> | <a href="list.txt">Lists</a> | <a href="haltlist.txt">Stops/Station List</a><br><br>
+<a href="haltlist_filter.txt">Stops/Station List Filter</a> | <a href="convoi.txt">Vehicle List</a> | <a href="convoi_filter.txt">Vehicle List Filter</a><br><br>
+<a href="citylist_filter.txt">町一覧</a> | <a href="goods_filter.txt">Goods List</a> | <a href="factorylist_filter.txt">Industry List</a><br><br>
+<a href="curiositylist_filter.txt">Attractions List</a> | <a href="mailbox.txt">メッセージ表/メッセージ表設定</a> | <a href="finances.txt">※財務</a>
+</p>
+<p>
+<i>その他のオプション</i><br><br>
+<a href="window.txt">Save Screenshot</a> | <a href="window.txt">Pause</a> | <a href="window.txt">Fast Forward</a> | <a href="window.txt">Help</a>
+</p>
+<p>
+<a href="inspection_tool.txt"><i>その他のダイアログ</i><br><br>
+<a href="depot.txt">※車庫ダイアログ</a> | <a href="schedule.txt">※スケジュールダイアログ</a> | <a href="station.txt">※駅情報ダイアログ</a><br><br>
+<a href="station_details.txt">※駅情報詳細ダイアログ</a> | <a href="convoiinfo.txt">Convoy/Vehicle Information</a><br><br>
+<a href="convoidetail.txt">Convoy/Vehicle Details</a> | <a href="citywindow.txt">街の詳細</a> | <a href="industry_info.txt">Industry Information</a>
+</p>
+
+<p>
+If no help is found here, try<br>
+<em>http://guide.simutrans.com</em>, or<br>
+<em>http://wiki.simutrans.com</em>, or<br>
+<em>http://simutrans-tips.com</em>, or<br>
+<em>http://forum.simutrans.com</em>.
+</p>
+
+<p>
+原著 Hj. Malthaner
+</p>
+
+<p>
+ 日本語訳「フリーの経営シム"Simutrans"を語るスレ」の313さん+囲碁25級
 </p>
diff --git a/simutrans/text/ja/language.txt b/simutrans/text/ja/language.txt
index 376808b..e666474 100644
--- a/simutrans/text/ja/language.txt
+++ b/simutrans/text/ja/language.txt
@@ -1,11 +1,11 @@
-§<title>言語ダイアログヘルプ</title>
-
-<h1>言語ダイアログ</h1>
-
-<p>
- Simutrans は複数の言語をサポートしています。このダイアログで使用した<br>い言語を選択することで、ゲーム中のメッセージの言語を切り替えることが出<br>来ます。現在開いているウィンドウの表示内容は変更されません。また、すで<br>に存在する町の名称は変更されませんので、その言語らしい町名でプレイした<br>い場合には、ゲームを開始する前にあらかじめ言語を選択しておくと良いでしょ<br>う。
-</p>
-
-<p>
- この一覧で選択できる言語の他にも、http://www.simustation.de.vu や<br>http://www.simutrans.de でいくつか公開されています(ただし不完全であっ<br>たり最新版に対応していない可能性があります)。
+<title>言語ダイアログヘルプ</title>
+
+<h1>言語ダイアログ</h1>
+
+<p>
+ Simutrans は複数の言語をサポートしています。このダイアログで使用した<br>い言語を選択することで、ゲーム中のメッセージの言語を切り替えることが出<br>来ます。現在開いているウィンドウの表示内容は変更されません。また、すで<br>に存在する町の名称は変更されませんので、その言語らしい町名でプレイした<br>い場合には、ゲームを開始する前にあらかじめ言語を選択しておくと良いでしょ<br>う。
+</p>
+
+<p>
+ この一覧で選択できる言語の他にも、http://www.simustation.de.vu や<br>http://www.simutrans.de でいくつか公開されています(ただし不完全であっ<br>たり最新版に対応していない可能性があります)。
 </p>
diff --git a/simutrans/text/ja/load.txt b/simutrans/text/ja/load.txt
index 284d149..4c7f60f 100644
--- a/simutrans/text/ja/load.txt
+++ b/simutrans/text/ja/load.txt
@@ -1,11 +1,11 @@
-§<title>ロードダイアログヘルプ</title>
-
-<h1>保存されているゲームをロードする</h1>
-
-<p>
- ロードダイアログでは以前保存したゲームをロードして続行することが出来<br>ます。操作方法は<ahref="save.txt">セーブ</a>ダイアログと同様です。
-</p>
-
-<p>
-<em>注意</em> ゲームを保存したSimutransのバージョンによってはファイルの互換性<br>の問題により、ロードできない場合があります。
+<title>ロードダイアログヘルプ</title>
+
+<h1>保存されているゲームをロードする</h1>
+
+<p>
+ ロードダイアログでは以前保存したゲームをロードして続行することが出来<br>ます。操作方法は<ahref="save.txt">セーブ</a>ダイアログと同様です。
+</p>
+
+<p>
+<em>注意</em> ゲームを保存したSimutransのバージョンによってはファイルの互換性<br>の問題により、ロードできない場合があります。
 </p>
diff --git a/simutrans/text/ja/mailbox.txt b/simutrans/text/ja/mailbox.txt
new file mode 100644
index 0000000..ea5162f
--- /dev/null
+++ b/simutrans/text/ja/mailbox.txt
@@ -0,0 +1,42 @@
+<title>メッセージ表 メッセージ設定ヘルプ</title>
+
+<h1>メッセージ表 メッセージ設定</h1>
+
+<p>
+<i>メッセージ表</i><br>
+ゲーム中のすべてのメッセージは、メッセージ表に表示されます。<br>
+<em>左クリック</em>: メッセージウィンドウを再表示します。<br>
+<em>右クリック</em>: メッセージの発生場所に移動します。<br>
+<em>設定</em>: メッセージ設定ウィンドウを開きます。
+</p>
+<p>
+<i>メッセージ設定</i><br>
+メッセージはメッセージ表のほか、メッセージウィンドウや画面最下部の<br>
+スクロールテキストにも表示できます。<br>
+メッセージ設定では、メッセージの種類ごとに、表示方法を設定できます。<br>
+この設定は、simutransの正常終了時に、settings.xmlに保存されます。
+</p>
+<p>
+左端列のボタンをオフにすると、メッセージを完全に非表示にできます。<br>
+メッセージ表にも表示されません。<br><br>
+右側の3列は、左からスクロールテキスト、時限メッセージウィンドウ、<br>
+固定メッセージウィンドウの表示/非表示の設定です。
+</p>
+<p>
+<em>スクロールテキスト</em>: 左クリックでメッセージの発生場所に移動
+します。<br>
+<em>時限メッセージウィンドウ</em>: 一定時間後に消えます。<br>
+<em>固定メッセージウィンドウ</em>: クリックで閉じるまで消えません。
+</p>
+<p>
+・<em>新年</em>    新年が始まったことをお知らせします。<br>
+・<em>他社</em>    他社が新しい路線を作ったことをお知らせします。<br>
+・<em>都市</em>    都市に大きな建築物ができたことをお知らせします。<br>
+・<em>ルート不明</em> 列車が次の駅に行くことができないことをお知らせします。<br>
+・<em>産業</em>    新しい産業ができたことをお知らせします。<br>
+・<em>名所旧跡</em>   新しい観光地ができたことをお知らせします。<br>
+・<em>車両登場</em>  新しい車両が登場したことをお知らせします。<br>
+・<em>駅の混雑</em>  駅がとても混雑していることをお知らせします。<br>
+・<em>問題</em>    借金が大きいことをお知らせします。<br>
+・<em>警告</em>    交通渋滞やプレイヤーの変更をお知らせします。
+</p>
diff --git a/simutrans/text/ja/map.txt b/simutrans/text/ja/map.txt
index af44cc9..39f2a1f 100644
--- a/simutrans/text/ja/map.txt
+++ b/simutrans/text/ja/map.txt
@@ -1,15 +1,102 @@
-§<title>マップウィンドウヘルプ</title>
-
-<h1>マップウィンドウ</h1>
-
-<p>
- マップウィンドウには、現在プレイしているマップの縮小図が表示されます。<br>また、町や産業施設、線路などの情報も表示されます。
-</p>
-
-<p>
- 産業施設は、マップウィンドウの下部にある凡例のとおりに、色分けされた<br>点で示されています。
-</p>
-
-<p>
- マップウィンドウの内部を右クリックすると、二段階のズームレベルを切り<br>替えることが出来ます。
+<title>マップウィンドウ ヘルプ</title>
+
+<h1>マップウィンドウ</h1>
+
+<p>
+マップウィンドウを開くには、ツールバーのマップアイコンをクリックするか、<br>
+キーボードの<a href="keys.txt">[m]</a>キーを押します。<br>
+
+<p>
+<i>基本マウス操作</i>: マップ上では、以下の操作が使用できます。<br><br>
+<em>左クリック</em>: クリックした場所にゲーム画面を移動します。そのままドラッグ<br>
+すると、連続して移動します。<br>
+<em>右ドラッグ</em>: マップ画面をスクロールします。<br>
+<em>右ダブルクリック</em>: マップ画面をスクロール前の位置に戻ります。<br>
+<em>マウスホイール</em>: マップ画面を拡大/縮小します。
+</p>
+<p>
+<i>基本ボタン操作</i><br><br>
+<em>拡大・縮小</em>: マップ画面を拡大/縮小します。<br>
+<em>回転して表示</em>マップの表示を右に45度傾けます。ゲーム画面と上下左右が一致<br>
+します。<br>
+<em>産業の需要崎/供給元</em><br>
+このボタンがオンの時は、産業施設にマウスポインタを合わせると、生産品の<br>
+需要先と白のラインで結ばれます。[Shift]キーを押しながら産業施設にマウス<br>
+ポインタを合わせると、原料の供給元と赤のラインで結ばれます。<br><br>
+<em>路線経路の表示</em><br>
+このボタンがオンの時は、<a href="linemanagement.txt">路線編集</a>ウィンドウで路線が選択されている時や、<br>
+スケジュールウィンドウが開かれている時に、その経路の駅が直線で結ばれて<br>
+表示されます。<br>
+駅の上にマウスポインタを合わせると、駅名を表示します。
+</p>
+<p><em>カラースケール</em></p>
+<p><em>産業凡例</em></p>
+<p>
+<i>表示種別選択</i>: マップの表示内容を切り替えます。<br>
+[Ctrl]キーが押されている間は、町の名前が一時的に表示されます。<br><br>
+<em>都市</em>: 都市の名前を表示します。デフォルトで選択されています。
+</p>
+<p>
+<em>旅客</em>: 旅客取扱い駅の駅勢圏をプレイヤーカラーで表示します。
+</p>
+<p>
+<em>郵便</em>: 郵便取扱い駅の駅勢圏をプレイヤーカラーで表示します。
+</p>
+<p>
+<em>貨物</em>: 道路/線路の貨物量をカラースケールで表示します。
+</p>
+<p>
+<em>待合状態</em>: 駅の混雑の状態を表示します。<br>
+<a href="haltlist.txt">駅一覧</a>や<a href="station.txt">駅の情報</a>で表示される色と同じです。
+</p>
+<p>
+<em>編成数</em>: その駅に到着した乗り物の編成数の量をカラースケールで表示します。<br>
+</p>
+<p>
+<em>交通量</em>: 道路/線路の交通量をカラースケールで表示します
+</p>
+<p>
+<em>出発地</em>: その駅を出発した旅客/貨物の量をカラースケールで表示します
+</p>
+<p>
+<em>目的地</em>: その駅に到着した旅客/貨物の量をカラースケールで表示します
+</p>
+<p>
+<em>待機</em>: 待機している旅客/貨物の量をカラースケールで表示します
+</p>
+<p>
+<em>鉄道線</em>: 鉄道線を表示します。<br>
+ 白: 非電化<br>
+ 茶: 電化<br>
+ 黄: 信号
+</p>
+<p>
+<em>制限速度</em>: 道路/線路の制限速度をカラースケールで表示します
+</p>
+<p>
+<em>高圧線</em>: 高圧線の電力供給率をカラースケールで表示します。<br>
+自動更新されません
+</p>
+<p>
+<em>名所</em>: 名所旧跡を旅客度に基づいてカラースケールで表示します
+</p>
+<p>
+<em>産業</em>: 産業施設を凡例の色で表示します
+</p>
+<p>
+<em>車庫</em>: 自社の<a href="depot.txt">車庫・機関庫・造船所</a>をハイライトします。<br>
+交通機関の種類ごとに、異なる色で表示されます。<br>
+ 赤:  造船所<br>
+ 黄:  自動車車庫<br>
+ 橙:  機関庫<br>
+ 臙脂: モノレール車庫<br>
+ 桃:  航空機格納庫<br>
+</p>
+<em>森</em>: 樹木の多い場所を緑色の点で表示します。<br>
+<em>市域</em>: 都市の市域の境界線を、水色で表示します。<br>
+<em>旅客/郵便目的地</em>: <a href="citywindow.txt">街の詳細</a>ウィンドウが開かれている時、<br>
+その都市の旅客/郵便目的地をリアルタイムに表示します。<br>
+街の詳細</a>ウィンドウの右上に表示されているものと同じです。<br>
+ オレンジ: 目的地へ出発できた<br>
+ 黄色:   目的地へ出発できなかった
 </p>
diff --git a/simutrans/text/ja/new_world.txt b/simutrans/text/ja/new_world.txt
index 375823c..068c54c 100644
--- a/simutrans/text/ja/new_world.txt
+++ b/simutrans/text/ja/new_world.txt
@@ -1,47 +1,47 @@
-§<title>新しいマップの作成ダイアログヘルプ</title>
-<h1>新しいマップの作成ダイアログ</h1>
-
-<p>
- 新しいマップの作成ダイアログでは、新しいマップ(ゲーム)を作成するに<br>あたっての設定をすることが出来ます。マップのサイズや、産業の反映度など<br>が設定出来ます。
-</p>
-
-<p>
- 以下は新しいマップに関する各オプションについての説明です。
-</p>
-
-
-<p>
-<em>マップ番号</em> - 地形や、都市の位置を決定します。番号を変更するたびにプ<br>レビューも更新されます(他のオプションを変更しても更新されます)。デフォ<br>ルトのマップ番号は33です。<br>
-<em>マップサイズ</em> - マップが何タイルで構成されるかを128×128から640×640<br>タイルの範囲で設定します。デフォルトは256です。<br>
-<em>注意</em>マップが大きければ大きいほど空きメモリが必要となります。プレイす<br>るにあたっては充分な空きメモリが確保されているか確認してください。
-</p>
-
-<p>
-<em>産業の反映度</em> - 油田や自動車工場など、どれくらいの産業を配置するか設<br>定します。この数値を低くすると、工場や生産地の間での輸送がしにくくなる<br>ので、ゲームが難しくなります。<br>
-<em>町の数</em> - マップ上に町をいくつ配置するかを設定します。2から64の間で<br>設定が出来ます。デフォルトは16です。<br>
-<em>交通量</em> - 自家用車の交通量を設定します。デフォルトは8です。
-</p>
-
-<p>
-<em>海面の水位</em> - 海面の高さを設定します。水位が低いほど陸地は広くなり、<br>高いほど狭くなります。デフォルトは4です。
-<br>
-<em>起伏の高さ</em> - 起伏の最高値を設定します。この数値が低いほど丘や谷の数<br>が少なくなります。0から160の範囲で設定できます。デフォルトは160です。
-<br>
-<em>起伏の激しさ</em> - 起伏の激しさを設定します。この数値が少ないほど自動車<br>や列車での輸送が楽になります。
-</p>
-
-<p>
-<em>ランダムマップ</em> - マップ番号をランダムに選択します(他の設定には影響<br>しません)。
-</p>
-
-<p>
-<em>歩行者を表示する</em> - 町中を通行している歩行者を表示するかどうかを設定<br>します。この設定はゲーム中でも<ahref="display.txt">表示</a>オプション<br>ダイアログにて変更可能です。
-<br>
-<em>夜は暗くする</em>-1日の昼と夜のサイクルによって画面の明るさを変えます。こ<br>の設定はゲーム中でも<ahref="display.txt">表示</a>オプションダイアログにて変更可能です。
-</p>
-
-<p>
-<em>ロード</em> - 保存されているゲームをロードします(詳しくは<ahref="load.txt">ロード</a>ダイアロ<br>グをご覧下さい)。<br>
-<em>ゲームスタート</em> - 各設定を用いてマップを作成します。大きいマップほど<br>時間が掛かります。<br>
-<em>終了</em>-直ちにSimutrans を終了します。<br>
+<title>新しいマップの作成ダイアログヘルプ</title>
+<h1>新しいマップの作成ダイアログ</h1>
+
+<p>
+ 新しいマップの作成ダイアログでは、新しいマップ(ゲーム)を作成するに<br>あたっての設定をすることが出来ます。マップのサイズや、産業の反映度など<br>が設定出来ます。
+</p>
+
+<p>
+ 以下は新しいマップに関する各オプションについての説明です。
+</p>
+
+
+<p>
+<em>マップ番号</em> - 地形や、都市の位置を決定します。番号を変更するたびにプ<br>レビューも更新されます(他のオプションを変更しても更新されます)。デフォ<br>ルトのマップ番号は33です。<br>
+<em>マップサイズ</em> - マップが何タイルで構成されるかを128×128から640×640<br>タイルの範囲で設定します。デフォルトは256です。<br>
+<em>注意</em>マップが大きければ大きいほど空きメモリが必要となります。プレイす<br>るにあたっては充分な空きメモリが確保されているか確認してください。
+</p>
+
+<p>
+<em>産業の反映度</em> - 油田や自動車工場など、どれくらいの産業を配置するか設<br>定します。この数値を低くすると、工場や生産地の間での輸送がしにくくなる<br>ので、ゲームが難しくなります。<br>
+<em>町の数</em> - マップ上に町をいくつ配置するかを設定します。2から64の間で<br>設定が出来ます。デフォルトは16です。<br>
+<em>交通量</em> - 自家用車の交通量を設定します。デフォルトは8です。
+</p>
+
+<p>
+<em>海面の水位</em> - 海面の高さを設定します。水位が低いほど陸地は広くなり、<br>高いほど狭くなります。デフォルトは4です。
+<br>
+<em>起伏の高さ</em> - 起伏の最高値を設定します。この数値が低いほど丘や谷の数<br>が少なくなります。0から160の範囲で設定できます。デフォルトは160です。
+<br>
+<em>起伏の激しさ</em> - 起伏の激しさを設定します。この数値が少ないほど自動車<br>や列車での輸送が楽になります。
+</p>
+
+<p>
+<em>ランダムマップ</em> - マップ番号をランダムに選択します(他の設定には影響<br>しません)。
+</p>
+
+<p>
+<em>歩行者を表示する</em> - 町中を通行している歩行者を表示するかどうかを設定<br>します。この設定はゲーム中でも<ahref="display.txt">表示</a>オプション<br>ダイアログにて変更可能です。
+<br>
+<em>夜は暗くする</em>-1日の昼と夜のサイクルによって画面の明るさを変えます。こ<br>の設定はゲーム中でも<ahref="display.txt">表示</a>オプションダイアログにて変更可能です。
+</p>
+
+<p>
+<em>ロード</em> - 保存されているゲームをロードします(詳しくは<ahref="load.txt">ロード</a>ダイアロ<br>グをご覧下さい)。<br>
+<em>ゲームスタート</em> - 各設定を用いてマップを作成します。大きいマップほど<br>時間が掛かります。<br>
+<em>終了</em>-直ちにSimutrans を終了します。<br>
 </p>
diff --git a/simutrans/text/ja/options.txt b/simutrans/text/ja/options.txt
index 198f059..5ea1fbc 100644
--- a/simutrans/text/ja/options.txt
+++ b/simutrans/text/ja/options.txt
@@ -1,22 +1,22 @@
-§<title>ゲームオプションヘルプ</title>
-<h1>ゲームオプション</h1>
-
-<p>
- オプションダイアログでは、各種設定を行えます。以下の設定項目があります。
-</p>
-
-<p>
-<em>言語</em> - 使用する言語を選択します。<br>
-<em>カラー</em> - プレイヤーの所有する車両や駅などの表示色を選択します。<br>
-<em>表示</em> - 表示に関する設定を行います。<br>
-<em>サウンド</em> - 効果音とBGMの設定を行います。<br>
-<em>プレイヤー</em> - コンピュータが操作する競合会社の数を設定します。<br>
-<em>ロード</em> - 以前にセーブしたデータを読み込みます。<br>
-<em>セーブ</em> - 現在の状態を保存します。<br>
-<em>新しいマップ</em> - 新しくマップを生成して、新規にゲームを開始します。<br>
-<em>終了</em> - ゲームを終了します。「現在の状態を保存しますか?」と言うよう<br>な確認はありませんので、注意して下さい。<br>
-</p>
-
-<p>
- 詳しい情報はそれぞれの項目のヘルプを参照してください。
+<title>ゲームオプションヘルプ</title>
+<h1>ゲームオプション</h1>
+
+<p>
+ オプションダイアログでは、各種設定を行えます。以下の設定項目があります。
+</p>
+
+<p>
+<em>言語</em> - 使用する言語を選択します。<br>
+<em>カラー</em> - プレイヤーの所有する車両や駅などの表示色を選択します。<br>
+<em>表示</em> - 表示に関する設定を行います。<br>
+<em>サウンド</em> - 効果音とBGMの設定を行います。<br>
+<em>プレイヤー</em> - コンピュータが操作する競合会社の数を設定します。<br>
+<em>ロード</em> - 以前にセーブしたデータを読み込みます。<br>
+<em>セーブ</em> - 現在の状態を保存します。<br>
+<em>新しいマップ</em> - 新しくマップを生成して、新規にゲームを開始します。<br>
+<em>終了</em> - ゲームを終了します。「現在の状態を保存しますか?」と言うよう<br>な確認はありませんので、注意して下さい。<br>
+</p>
+
+<p>
+ 詳しい情報はそれぞれの項目のヘルプを参照してください。
 </p>
diff --git a/simutrans/text/ja/players.txt b/simutrans/text/ja/players.txt
index 41ab6a7..8a191a0 100644
--- a/simutrans/text/ja/players.txt
+++ b/simutrans/text/ja/players.txt
@@ -1,12 +1,68 @@
-§<title>プレイヤーダイアログヘルプ</title>
-<h1>プレイヤーダイアログ</h1>
-
-<p>
- コンピュータが操作する競合会社のオン、オフを設定できます。チェックボッ<br>クスが押されている状態でオン、押されていない状態ではオフです。
-</p>
-<p>
- ゲームの途中から競合会社をオフにしても、その時点で敷かれている路線か<br>らの収益は入りつづけます。競合会社をオフにするのは、単に「新たな活動を<br>せずに休んでいる」状態にするものと理解してください。
-</p>
-<p>
- 各競合会社の右側には、各社の現在の資金が示されています。
+<title>ライバル会社一覧 ヘルプ</title>
+<h1>ライバル会社一覧</h1>
+
+<p>
+<em>プレイヤー名</em><br>
+クリックすると、それぞれのプレイヤーの<a href="finances.txt">財務</a>ウィンドウが開かれます。<br>
+プレイヤー名の右側には、各プレイヤーの現在の現金が示されています。<br><br>
+プレイヤーの色を変更したい場合は、<em>右向き三角ボタン</em>で変更したい<br>
+プレイヤーに切り替えてから、<a href="color.txt">カラーダイアログ</a>で変更します。
+</p>
+<p>
+<i>プレイヤーの追加</i><br>
+<em>■ボタン</em>で、新しいプレイヤー会社を追加することができます。<br>
+一度追加したプレイヤーを、<strong>あとから取り除いたり、スロットを開放する<br>
+ことはできません。</strong><br>
+プレイヤーの種類を、<em>プレイヤー(人間)</em>、<em>AI 貨物</em>、<em>AI 旅客</em>から選び、<br>
+左端の<em>■ボタン</em>をクリックして有効にします。
+</p>
+<p>
+<i>AIの有効/無効</i><br>
+AIプレイヤーが有効な場合、<em>■ボタン</em>でAIの有効/無効を切り替えること<br>
+ができます。<br>
+オフにすると、新規路線の開拓や資産の売却などの活動を停止します。<br>
+現在運行されているものは、そのまま運行を継続します。<br>
+経路が見つからない編成などの問題にも対処できなくなります。
+</p>
+<p>
+<i>プレイヤーの切り替え</i><br>
+<em>右向き三角ボタン</em>で操作できるプレイヤーを切り替えます。<br>
+プレイヤーの切り替えは、<a href="special.txt">特殊建築物ツール</a>の[プレイヤーの変更]で昇順<br>
+に切り替えることもできます。(<a href="keys.txt">[Shift+P]</a>)<br>
+現在のプレイヤー名はステータスバーに表示されます。<br><br>
+ゲームのルールでプレイヤーの変更が禁止されている場合には、プレイヤー<br>
+を変更することは一切できません。<br>
+プレイヤーの変更の禁止は、<a href="new_world.txt">新規マップ作成</a>時に設定できるほか、<br>
+<a href="edittools.txt">マップ編集ツール</a>からもできます。<br>
+プレイヤーの変更の禁止を、<strong>後から元に戻すことはできません。</strong>
+</p>
+<p>
+<i>プレイヤーの種類</i><br>
+新しいマップの開始時には、<em>プレイヤー会社</em>と<em>公共事業</em>のみが有効です。<br><br>
+<em>プレイヤー会社</em>: あなたの会社です<br><br>
+<em>公共事業</em>: 公共事業は、役所、産業施設、名所旧跡などを所有しています。<br>
+また、<a href="edittools.txt">マップ編集ツール</a>を使用して、それらを任意に建設することがで<br>
+きます。<br>
+公共事業は、すべてのプレイヤーの所有物を取り除くことができます。<br>
+
+公共事業が所有する道路/線路や駅などは、すべてのプレイヤーが利用<br>
+することができます。公共駅でのみ会社間での乗換ができます。<br><br>
+公共事業は車庫を建設することができませんので、運送によって直接収入を<br>
+得ることはできません。赤字でも問題ありませんので気にしないでください。<br><br>
+<em>プレイヤー(人間)</em>: プレイヤーが操作します。破産しても勝手に清算されたり<br>
+はしません。<br><br>
+<em>AI 貨物</em>: 鉄道/道路/船舶を使用して、貨物輸送を行います。<br><br>
+<em>AI 旅客</em>: バス/船舶を使用して、旅客輸送を行います。資金が十分あるとき<br>
+には旅客機を使用することもあります。
+</p>
+<p>
+<i>フリープレイモード</i><br>
+通常、総資産がマイナスになった会社は破産となります。<br>
+あなたが破産した場合、ゲームは終了し、<a href="new_world.txt">新しいマップの作成</a>ウィンドウが<br>
+開かれます。<br>
+AIプレイヤーの場合は、すべての資産が売却され、活動を停止します。<br>
+破産した会社のスロットは使用できなくなります。<br><br>
+フリープレイモードをオンにすると、破産することなく、ゲームを続けること<br>
+ができます。この設定はセーブゲームに保存され、いつでも変更することが<br>
+できます。
 </p>
diff --git a/simutrans/text/ja/railtools.txt b/simutrans/text/ja/railtools.txt
index e91ccb5..1ca704a 100644
--- a/simutrans/text/ja/railtools.txt
+++ b/simutrans/text/ja/railtools.txt
@@ -1,28 +1,29 @@
-§<title>鉄道ツールヘルプ</title>
-
-<h1>鉄道ツール</h1>
-
-<p>
- 鉄道ツールからは、線路、信号、トンネル、駅、操車場、踏切を作ることが<br>出来ます。
-</p>
-<p>
- 上段の一番左は、線路ツールです。マップの二点間に線路を敷くことが出来<br>ます。アイコンをクリックすると、マウスカーソルが線路の交差したような形<br>状に変化します。まず線路の起点でクリックし(その場所にブルドーザーのマー<br>クが表示されます)、次に線路の終点でクリックすると、選択した二点を結ぶ<br>ように線路が敷かれます。このとき、二点間は普通の線路だけで結ばれます。<br>踏み切りや橋、トンネルを自動的に作ることはありません。選択した二点を結<br>ぶ経路が見つからなかった場合は、何も起こりません。
-</p>
-<p>
- 上段の左から2番目は、信号ツールです。信号を設置して閉塞区間を作るこ<br>とで、一本の線路に複数の列車を走らせることが出来ます。アイコンをクリッ<br>クすると、マウスカーソルが信号機に変化します。信号を設置したい場所でク<br>リックしてください。信号には、両方向信号と一方向信号があります。一方向<br>信号は、閉塞区間を作る効果に加えて、反対側からの列車の進入を禁止する効<br>果があります。一方向信号を設置するには、まず両方向信号を設置してから、<br>そこでもう一度クリックしてください。クリックするたびに、両方向信号 - <br>一方向信号 - 反対方向の一方向信号 - 両方向信号と、循環的に切り替わり<br>ます。信号を撤去する時は、撤去ツールを選択して信号のある場所をクリック<br>してください。このとき、信号機だけが撤去され、線路は残ります。
-</p>
-<p>
- 上段の左から3番目は、トンネルツールです。トンネルは、同じ高さの直線<br>の線路を結びます。トンネルを設置する前に、トンネルで結ぶ線路の両端が、<br>それぞれ山の斜面に掛かっているようにしてください。アイコンをクリックす<br>ると、マウスカーソルがトンネルに変化します。トンネルの入り口でクリック<br>すると、向かい合った線路がトンネルで結ばれます。
-</p>
-<p>
- 上段の一番右は、架線ツールです。電車を走らせる為には、線路を敷設した<br>あとに架線を張らなければいけません。アイコンをクリックすると、マウスカー<br>ソルが架線のグラフィックに変化します。架線を張りたい線路の上でクリック<br>すると、その場所を含む閉塞区間全体に架線が張られます。
-</p>
-<p>
- 下段の一番左は、駅建設ツールです。列車は、駅で物資や旅客の積み下ろし<br>を行い、収益を得ます。アイコンをクリックすると、マウスカーソルが駅に変<br>化します。建設したい線路上でクリックすると、そこに駅が建設されます。駅<br>は、平坦な直線線路の上にしか作れません。また、1マスの駅には2両までの<br>列車しか入りません。駅に入らない部分の車両は、荷物の積み下ろしを行えま<br>せん。より長い列車を停車させる為には、大きな駅を作る必要があります。す<br>でに存在する駅に隣接するマスに駅を建設すると、それは同一の駅とみなされ<br>ます。駅の大きさや形状に制限はなく、繋がっている限りは全て一つの駅にな<br>ります。Simutrans の現在のバージョンでは、駅にはいくらでも物資を貯める<br>ことが出来ます(産業施設には1000tまでしか貯めることが出来ません)。
-</p>
-<p>
- 下段の左から2番目は、操車場建設ツールです。列車の購入やスケジュール<br>設定を行うためには、操車場が必要です。アイコンをクリックすると、マウス<br>カーソルが操車場に変化します。操車場は線路の終端にしか建設できませんの<br>で、そのような場所を選んでクリックしてください。
-</p>
-<p>
- 下段の左から3番目は、踏み切りツールです。アイコンをクリックすると、<br>マウスカーソルが踏み切りの形状に変化します。踏切を設置したい道路上でク<br>リックしてください。
+
+<title>鉄道ツールヘルプ</title>
+
+<h1>鉄道ツール</h1>
+
+<p>
+ 鉄道ツールからは、線路、信号、トンネル、駅、操車場、踏切を作ることが<br>出来ます。
+</p>
+<p>
+ 上段の一番左は、線路ツールです。マップの二点間に線路を敷くことが出来<br>ます。アイコンをクリックすると、マウスカーソルが線路の交差したような形<br>状に変化します。まず線路の起点でクリックし(その場所にブルドーザーのマー<br>クが表示されます)、次に線路の終点でクリックすると、選択した二点を結ぶ<br>ように線路が敷かれます。このとき、二点間は普通の線路だけで結ばれます。<br>踏み切りや橋、トンネルを自動的に作ることはありません。選択した二点を結<br>ぶ経路が見つからなかった場合は、何も起こりません。
+</p>
+<p>
+ 上段の左から2番目は、信号ツールです。信号を設置して閉塞区間を作るこ<br>とで、一本の線路に複数の列車を走らせることが出来ます。アイコンをクリッ<br>クすると、マウスカーソルが信号機に変化します。信号を設置したい場所でク<br>リックしてください。信号には、両方向信号と一方向信号があります。一方向<br>信号は、閉塞区間を作る効果に加えて、反対側からの列車の進入を禁止する効<br>果があります。一方向信号を設置するには、まず両方向信号を設置してから、<br>そこでもう一度クリックしてください。クリックするたびに、両方向信号 - <br>一方向信号 - 反対方向の一方向信号 - 両方向信号と、循環的に切り替わり<br>ます。信号を撤去する時は、撤去ツールを選択して信号のある場所をクリック<br>してください。このとき、信号機だけが撤去され、線路は残ります。
+</p>
+<p>
+ 上段の左から3番目は、トンネルツールです。トンネルは、同じ高さの直線<br>の線路を結びます。トンネルを設置する前に、トンネルで結ぶ線路の両端が、<br>それぞれ山の斜面に掛かっているようにしてください。アイコンをクリックす<br>ると、マウスカーソルがトンネルに変化します。トンネルの入り口でクリック<br>すると、向かい合った線路がトンネルで結ばれます。
+</p>
+<p>
+ 上段の一番右は、架線ツールです。電車を走らせる為には、線路を敷設した<br>あとに架線を張らなければいけません。アイコンをクリックすると、マウスカー<br>ソルが架線のグラフィックに変化します。架線を張りたい線路の上でクリック<br>すると、その場所を含む閉塞区間全体に架線が張られます。
+</p>
+<p>
+ 下段の一番左は、駅建設ツールです。列車は、駅で物資や旅客の積み下ろし<br>を行い、収益を得ます。アイコンをクリックすると、マウスカーソルが駅に変<br>化します。建設したい線路上でクリックすると、そこに駅が建設されます。駅<br>は、平坦な直線線路の上にしか作れません。また、1マスの駅には2両までの<br>列車しか入りません。駅に入らない部分の車両は、荷物の積み下ろしを行えま<br>せん。より長い列車を停車させる為には、大きな駅を作る必要があります。す<br>でに存在する駅に隣接するマスに駅を建設すると、それは同一の駅とみなされ<br>ます。駅の大きさや形状に制限はなく、繋がっている限りは全て一つの駅にな<br>ります。Simutrans の現在のバージョンでは、駅にはいくらでも物資を貯める<br>ことが出来ます(産業施設には1000tまでしか貯めることが出来ません)。
+</p>
+<p>
+ 下段の左から2番目は、操車場建設ツールです。列車の購入やスケジュール<br>設定を行うためには、操車場が必要です。アイコンをクリックすると、マウス<br>カーソルが操車場に変化します。操車場は線路の終端にしか建設できませんの<br>で、そのような場所を選んでクリックしてください。
+</p>
+<p>
+ 下段の左から3番目は、踏み切りツールです。アイコンをクリックすると、<br>マウスカーソルが踏み切りの形状に変化します。踏切を設置したい道路上でク<br>リックしてください。
 </p>
diff --git a/simutrans/text/ja/roadtools.txt b/simutrans/text/ja/roadtools.txt
index 0d80425..7275bc9 100644
--- a/simutrans/text/ja/roadtools.txt
+++ b/simutrans/text/ja/roadtools.txt
@@ -1,25 +1,25 @@
-§<title>道路ツールダイアログヘルプ</title>
-
-<h1>道路ツールダイアログ</h1>
-
-<p>
- 道路ツールダイアログからは、道路、バス停、トンネル、トラック停車場、<br>車庫、踏切を作ることが出来ます。
-</p>
-<p>
- 上段の一番左は、道路敷設ツールです。マップの二点間に道路を敷くことが<br>出来ます。アイコンをクリックすると、マウスカーソルが交差点のような形状<br>に変化します。まず道路の起点でクリックし(その場所にブルドーザーのマー<br>クが表示されます)、次に道路の終点でクリックすると、選択した二点を結ぶ<br>ように道路が敷かれます。このとき、二点間は普通の道路だけで結ばれます。<br>踏切や橋、トンネルを自動的に作ることはありません。選択した二点を結ぶ経<br>路が見つからなかった場合は、何も起こりません。
-</p>
-<p>
- 上段の左から2番目は、バス停建設ツールです。バス停では、その付近の建<br>物を利用する人が乗り降りします。アイコンをクリックすると、マウスカーソ<br>ルがバス停に変化します。バス停を建設したい道路上でクリックしてください。<br>バス停は、平坦な直線道路の上にしか作れません。1マスのバス停には、道路<br>のそれぞれの車線に1台ずつのバスが停車できます。
-</p>
-<p>
- 上段の左から3番目は、トンネルツールです。トンネルは、同じ高さの直線<br>の道路を結びます。トンネルを設置する前に、トンネルで結ぶ道路の両端が、<br>それぞれ山の斜面に掛かっているようにしてください。アイコンをクリックす<br>ると、マウスカーソルがトンネルに変化します。トンネルの入り口にしたいと<br>ころでクリックすると、向かい合った道路がトンネルで結ばれます。
-</p>
-<p>
- 下段の一番左は、トラック停車場建設ツールです。トラック停車場では、ト<br>ラックが物資の積み下ろしを行います。アイコンをクリックすると、マウスカー<br>ソルがトラック停車場に変化します。トラック停車場は道路の終端にしか建設<br>できませんので、そのような場所を選んでクリックして下さい。1マスのトラッ<br>ク停車場には、2台までのトラックが停車できます。
-</p>
-<p>
- 下段の左から2番目は、車庫建設ツールです。バスやトラック、郵便配達車<br>など、車両の購入やスケジュール設定を行うためには、車庫が必要です。アイ<br>コンをクリックすると、マウスカーソルが車庫に変化します。車庫は道路の終<br>端にしか建設できませんので、そのような場所を選んでクリックしてください。
-</p>
-<p>
- 下段の左から3番目は、踏切ツールです。アイコンをクリックすると、マウ<br>スカーソルが踏切の形状に変化します。踏切を設置したい線路上でクリックし<br>て下さい。
+<title>道路ツールダイアログヘルプ</title>
+
+<h1>道路ツールダイアログ</h1>
+
+<p>
+ 道路ツールダイアログからは、道路、バス停、トンネル、トラック停車場、<br>車庫、踏切を作ることが出来ます。
+</p>
+<p>
+ 上段の一番左は、道路敷設ツールです。マップの二点間に道路を敷くことが<br>出来ます。アイコンをクリックすると、マウスカーソルが交差点のような形状<br>に変化します。まず道路の起点でクリックし(その場所にブルドーザーのマー<br>クが表示されます)、次に道路の終点でクリックすると、選択した二点を結ぶ<br>ように道路が敷かれます。このとき、二点間は普通の道路だけで結ばれます。<br>踏切や橋、トンネルを自動的に作ることはありません。選択した二点を結ぶ経<br>路が見つからなかった場合は、何も起こりません。
+</p>
+<p>
+ 上段の左から2番目は、バス停建設ツールです。バス停では、その付近の建<br>物を利用する人が乗り降りします。アイコンをクリックすると、マウスカーソ<br>ルがバス停に変化します。バス停を建設したい道路上でクリックしてください。<br>バス停は、平坦な直線道路の上にしか作れません。1マスのバス停には、道路<br>のそれぞれの車線に1台ずつのバスが停車できます。
+</p>
+<p>
+ 上段の左から3番目は、トンネルツールです。トンネルは、同じ高さの直線<br>の道路を結びます。トンネルを設置する前に、トンネルで結ぶ道路の両端が、<br>それぞれ山の斜面に掛かっているようにしてください。アイコンをクリックす<br>ると、マウスカーソルがトンネルに変化します。トンネルの入り口にしたいと<br>ころでクリックすると、向かい合った道路がトンネルで結ばれます。
+</p>
+<p>
+ 下段の一番左は、トラック停車場建設ツールです。トラック停車場では、ト<br>ラックが物資の積み下ろしを行います。アイコンをクリックすると、マウスカー<br>ソルがトラック停車場に変化します。トラック停車場は道路の終端にしか建設<br>できませんので、そのような場所を選んでクリックして下さい。1マスのトラッ<br>ク停車場には、2台までのトラックが停車できます。
+</p>
+<p>
+ 下段の左から2番目は、車庫建設ツールです。バスやトラック、郵便配達車<br>など、車両の購入やスケジュール設定を行うためには、車庫が必要です。アイ<br>コンをクリックすると、マウスカーソルが車庫に変化します。車庫は道路の終<br>端にしか建設できませんので、そのような場所を選んでクリックしてください。
+</p>
+<p>
+ 下段の左から3番目は、踏切ツールです。アイコンをクリックすると、マウ<br>スカーソルが踏切の形状に変化します。踏切を設置したい線路上でクリックし<br>て下さい。
 </p>
diff --git a/simutrans/text/ja/save.txt b/simutrans/text/ja/save.txt
index 7d55cd1..3e3700d 100644
--- a/simutrans/text/ja/save.txt
+++ b/simutrans/text/ja/save.txt
@@ -1,19 +1,19 @@
-§<title>セーブダイアログヘルプ</title>
-
-<h1>セーブダイアログ</h1>
-
-<p>
- 現在の状態を保存できます。
-</p>
-
-<p>
- 新しいファイルに保存する場合は、テキストフィールドにファイル名を入力<br>してOKボタンを押してください。ファイル名には拡張子を含める必要はありません。
-</p>
-
-<p>
- 既存のファイルに上書き保存する場合は、表示されているファイル名をクリッ<br>クしてください。上書きの確認はありませんので、注意してください。
-</p>
-
-<p>
- ファイルを削除したい場合は、そのファイル名の左側にある×ボタンをクリッ<br>クしてください。削除の確認はありませんので、注意してください。
+<title>セーブダイアログヘルプ</title>
+
+<h1>セーブダイアログ</h1>
+
+<p>
+ 現在の状態を保存できます。
+</p>
+
+<p>
+ 新しいファイルに保存する場合は、テキストフィールドにファイル名を入力<br>してOKボタンを押してください。ファイル名には拡張子を含める必要はありません。
+</p>
+
+<p>
+ 既存のファイルに上書き保存する場合は、表示されているファイル名をクリッ<br>クしてください。上書きの確認はありませんので、注意してください。
+</p>
+
+<p>
+ ファイルを削除したい場合は、そのファイル名の左側にある×ボタンをクリッ<br>クしてください。削除の確認はありませんので、注意してください。
 </p>
diff --git a/simutrans/text/ja/schedule.txt b/simutrans/text/ja/schedule.txt
index a812e4d..c67ac00 100644
--- a/simutrans/text/ja/schedule.txt
+++ b/simutrans/text/ja/schedule.txt
@@ -1,23 +1,23 @@
-§<title>スケジュールダイアログヘルプ</title>
-
-<h1>スケジュールダイアログ</h1>
-
-<p>
- スケジュールダイアログでは、車両・船舶の運行経路を設定することが出来<br>ます。ちなみに時刻を設定しての運行は出来ません。
-</p>
-
-<p>
- 運行経路を設定するには、まず追加ボタンをクリックします。次に、停車す<br>る駅などの上をクリックしてください。港を指定する場合は、港の周辺のマス<br>をクリックしてください。リストに駅名・港名が追加されます。なお、線路上・<br>道路上・海上で駅など出ない場所も中継点として設定できます。このようにし<br>て、運行経路の駅・港などを次々とクリックしていって下さい。最大16ヵ所ま<br>で指定できます。
-</p>
-
-<p>
- 車両・船舶は、リストの上から順番に設定された箇所を回ります。リストの<br>一番下まで来たら、また上まで戻って運行を続けます。番号の左のマークは現<br>在向かっている箇所を示します。
-</p>
-
-<p>
- 追加ボタンでは、新たに箇所をリストの一番下に追加します。挿入ボタンで<br>は、リスト上の現在マークがある項目に、新たな箇所が挿入されます。リスト<br>の項目を削除するには、削除ボタンをクリックして、削除したい項目をクリッ<br>クしてください。全ての設定が終わったら終了ボタンをクリックしてください。
-</p>
-
-<p>
- 「積むまで待機」の数字は、その駅・港で、車両・船舶に貨物・旅客をこの<br>割合積んだ状態になるまで、出発を待つと言う意味です。この数字を大きくす<br>ることで、無駄のない運行が出来ます。
+<title>スケジュールダイアログヘルプ</title>
+
+<h1>スケジュールダイアログ</h1>
+
+<p>
+ スケジュールダイアログでは、車両・船舶の運行経路を設定することが出来<br>ます。ちなみに時刻を設定しての運行は出来ません。
+</p>
+
+<p>
+ 運行経路を設定するには、まず追加ボタンをクリックします。次に、停車す<br>る駅などの上をクリックしてください。港を指定する場合は、港の周辺のマス<br>をクリックしてください。リストに駅名・港名が追加されます。なお、線路上・<br>道路上・海上で駅など出ない場所も中継点として設定できます。このようにし<br>て、運行経路の駅・港などを次々とクリックしていって下さい。最大16ヵ所ま<br>で指定できます。
+</p>
+
+<p>
+ 車両・船舶は、リストの上から順番に設定された箇所を回ります。リストの<br>一番下まで来たら、また上まで戻って運行を続けます。番号の左のマークは現<br>在向かっている箇所を示します。
+</p>
+
+<p>
+ 追加ボタンでは、新たに箇所をリストの一番下に追加します。挿入ボタンで<br>は、リスト上の現在マークがある項目に、新たな箇所が挿入されます。リスト<br>の項目を削除するには、削除ボタンをクリックして、削除したい項目をクリッ<br>クしてください。全ての設定が終わったら終了ボタンをクリックしてください。
+</p>
+
+<p>
+ 「積むまで待機」の数字は、その駅・港で、車両・船舶に貨物・旅客をこの<br>割合積んだ状態になるまで、出発を待つと言う意味です。この数字を大きくす<br>ることで、無駄のない運行が出来ます。
 </p>
diff --git a/simutrans/text/ja/settings.txt b/simutrans/text/ja/settings.txt
new file mode 100644
index 0000000..01055e6
--- /dev/null
+++ b/simutrans/text/ja/settings.txt
@@ -0,0 +1,26 @@
+<title>高度な設定ヘルプ</title>
+
+<h1>高度な設定</h1>
+
+<p>
+<strong>高度な設定</strong>ウィンドウは<a href="new_world.txt">新しいマップの作成</a>ウィンドウから開きます。<br>
+ここでは、主に作成する新しいマップのルールを設定します。
+</p>
+<p>
+ 最上部のボタンはリセットボタンです。設定をリセットします。注意してく<br>
+ださい。(一部リセットされない項目もあります)<br>
+<em>Simuconf.tab</em> simuconf.tabの設定にリセットします。<br>
+<em>Default.sve</em> 最後に新規マップを作成した時の設定にリセットします。
+</p>
+<p>
+設定項目には、セーブゲームに保存されるものと、保存されないものとがあり<br>
+ます。<br>
+セーブゲームに保存されるものは、新規に作成されるゲームにのみ反映されます。<br>
+ゲーム開始後に変更することはできません。<br><br>
+保存されない設定項目は、変更が即時に反映されます。ただし再起動後は元の<br>
+設定に戻ってしまいますので、変更を固定したい場合は、simuconf.tabや<br>
+cityrules.tabをテキストエディタで直接変更してください。
+</p>
+<p>
+各設定項目の詳細は「日本語化wiki」を参照してください。
+</p>
diff --git a/simutrans/text/ja/shiptools.txt b/simutrans/text/ja/shiptools.txt
index 892d477..87879b5 100644
--- a/simutrans/text/ja/shiptools.txt
+++ b/simutrans/text/ja/shiptools.txt
@@ -1,12 +1,12 @@
-§<title>船舶ツールダイアログヘルプ</title>
-
-<h1>船舶ツールダイアログ</h1>
-<p>
- 船舶ツールでは、港とドックの建造が行えます。
-</p>
-<p>
- 上段の一番左のボタンは、港建造ツールです。港では、船舶が貨物や旅客の<br>積み下ろしを行います。アイコンをクリックすると、マウスカーソルが港の形<br>状に変化します。海に<br>接した斜面でクリックすると、その斜面と隣接する<br>海との2マスを利用して、港が建造さ<br>れます。港を建造する斜面は、真っ<br>直ぐな斜面(線路や道路を敷設できるような斜面)出なければいけません。船<br>舶を停泊させるようにスケジュールを組むには、港のあるマスではなく、港に<br>隣接するマスに停泊するように指定して下さい。Simutrans の現在のバージョ<br>ンでは、<strong>港の撤去は正しく動作しません。</strong>
-</p>
-<p>
- 下段の左の2つのボタンは、ドック建造ツールです。これら2つは画面上で<br>の向きが違うだけで、実質的には違いはありません。ドックは、船舶の購入や<br>スケジュール設定を行うために必要です。アイコンをクリックすると、マウス<br>カーソルがドックに変化します。ドックは海上に建造します。ドックを建造し<br>たい場所でクリックして下さい。
+<title>船舶ツールダイアログヘルプ</title>
+
+<h1>船舶ツールダイアログ</h1>
+<p>
+ 船舶ツールでは、港とドックの建造が行えます。
+</p>
+<p>
+ 上段の一番左のボタンは、港建造ツールです。港では、船舶が貨物や旅客の<br>積み下ろしを行います。アイコンをクリックすると、マウスカーソルが港の形<br>状に変化します。海に<br>接した斜面でクリックすると、その斜面と隣接する<br>海との2マスを利用して、港が建造さ<br>れます。港を建造する斜面は、真っ<br>直ぐな斜面(線路や道路を敷設できるような斜面)出なければいけません。船<br>舶を停泊させるようにスケジュールを組むには、港のあるマスではなく、港に<br>隣接するマスに停泊するように指定して下さい。Simutrans の現在のバージョ<br>ンでは、<strong>港の撤去は正しく動作しません。</strong>
+</p>
+<p>
+ 下段の左の2つのボタンは、ドック建造ツールです。これら2つは画面上で<br>の向きが違うだけで、実質的には違いはありません。ドックは、船舶の購入や<br>スケジュール設定を行うために必要です。アイコンをクリックすると、マウス<br>カーソルがドックに変化します。ドックは海上に建造します。ドックを建造し<br>たい場所でクリックして下さい。
 </p>
diff --git a/simutrans/text/ja/slopetools.txt b/simutrans/text/ja/slopetools.txt
new file mode 100644
index 0000000..8fe2366
--- /dev/null
+++ b/simutrans/text/ja/slopetools.txt
@@ -0,0 +1,34 @@
+<title>スロープツール ヘルプ</title>
+
+<h1>スロープツール</h1>
+<p>
+スロープツールを使って、陸地を造成することができます。造成できる<br>
+場所は何もない空地や海上に限られます。<br>
+<a href="keys.txt">[#]</a>キー([shift+3])で、グリッドを表示させておくと便利です。
+</p>
+<p>
+<em>陸地を高くする</em><br>
+ 陸地を現在より1レベル上の高さに盛り上げます。<br>
+<em>陸地を低くする</em><br>
+ 陸地を現在より1レベル下の高さに窪ませます。<br><br>
+以上の2つのツールは、左クリックまたは左ボタンを押したままドラッグして<br>
+使用します。ドラッグの場合は、すべて同じ高さになります。<br>
+造成する体積に比例して、費用が高くなります。<br>
+樹木などの自然物は取り除かれてしまいます。
+</p>
+<p>
+<em>スロープの建設</em>: 人工的な造成をします。<br><br>
+左の4つは傾斜地を、右の2つは垂直に陸地を盛り上げ/切り下げします。<br>
+人工的な造成では、周囲との段差を2段以上にすることはできません。<br>
+これらのツールは空地や海上以外に、線路/道路の終端上でも使用できます。<br><br>
+<i>線路/道路の終端上での使用</i><br>
+この場合、主に右の2つのツールを使って、線路/道路ごと傾斜させます。<br>
+向きが合えば左の4つのスロープも使えますが、あまり便利ではありません。<br>
+傾斜を元に戻す場合にも、これら2つのツールを使用します。<br>
+下りの傾斜を元に戻すには、盛り上げツールが、上りの傾斜を元に戻すには、<br>
+切り下げツールが使用できます。<br>
+地下で線路/道路を傾斜させたい場合には、必要です。<br><br>
+<em>スロープを戻す</em><br>
+人工的な造成地やその周囲を、できる限り自然な状態に戻します。<br>
+線路/道路の終端上では使用できません。
+</p>
diff --git a/simutrans/text/ja/sound.txt b/simutrans/text/ja/sound.txt
index 5124019..4af3c43 100644
--- a/simutrans/text/ja/sound.txt
+++ b/simutrans/text/ja/sound.txt
@@ -1,19 +1,19 @@
-§<title>サウンドダイアログヘルプ</title>
-
-<h1>サウンド設定</h1>
-
-<p>
- 効果音とBGMの設定を行えます。
-</p>
-
-<p>
- 効果音音量スライダー、BGM音量スライダーを動かすことで、効果音とBGMの<br>音量をそれぞれ調節できます。右に動かせば音量は大きくなり、左に動かせば<br>小さくなります。<br>(Windowsでは、音量はWindowsのボリュームコントロールと連動しています)
-</p>
-
-<p>
- ォボタン、サボタンを押すと、BGMの曲目を変更できます。それぞれ順送り、逆<br>送りに変更します。
-</p>
-
-<p>
- Simutrans の配布パッケージにはBGMは含まれていません。BGMの登録方法は、<br>このヘルプでは説明していません。
+<title>サウンドダイアログヘルプ</title>
+
+<h1>サウンド設定</h1>
+
+<p>
+ 効果音とBGMの設定を行えます。
+</p>
+
+<p>
+ 効果音音量スライダー、BGM音量スライダーを動かすことで、効果音とBGMの<br>音量をそれぞれ調節できます。右に動かせば音量は大きくなり、左に動かせば<br>小さくなります。<br>(Windowsでは、音量はWindowsのボリュームコントロールと連動しています)
+</p>
+
+<p>
+ ォボタン、サボタンを押すと、BGMの曲目を変更できます。それぞれ順送り、逆<br>送りに変更します。
+</p>
+
+<p>
+ Simutrans の配布パッケージにはBGMは含まれていません。BGMの登録方法は、<br>このヘルプでは説明していません。
 </p>
diff --git a/simutrans/text/ja/station.txt b/simutrans/text/ja/station.txt
index 3e21646..5e21587 100644
--- a/simutrans/text/ja/station.txt
+++ b/simutrans/text/ja/station.txt
@@ -1,18 +1,18 @@
-§<title>駅情報ダイアログヘルプ</title>
-<h1>駅情報ダイアログ</h1>
-
-<p>
- 駅情報ダイアログには、その駅に関する情報が表示されます。また、ここで<br>駅名を変更する事もできます。
-</p>
-
-<p>
- ダイアログ上部のテキストフィールドには、駅名が表示されています。ここに<br>文字を入力する事で、駅名を変更できます。
-</p>
-
-<p>
- 右側にある詳細ボタンをクリックすると、その駅に関するより詳細な情報を<br>調べる事が出来ます。
-</p>
-
-<p>
- 駅情報ダイアログの主要な部分は、下部にある貨物・乗客リストです。ここ<br>には、その駅で輸送を待っている貨物や乗客の一覧が表示されます。この一覧<br>情報は、貨物の種類ごと、目的地ごとに表示されます。また、ここに表示され<br>る情報はゲームの進行に伴って自動的に更新されますので、最新の情報を得る<br>ためにダイアログを閉じて開きなおす必要はありません。
+<title>駅情報ダイアログヘルプ</title>
+<h1>駅情報ダイアログ</h1>
+
+<p>
+ 駅情報ダイアログには、その駅に関する情報が表示されます。また、ここで<br>駅名を変更する事もできます。
+</p>
+
+<p>
+ ダイアログ上部のテキストフィールドには、駅名が表示されています。ここに<br>文字を入力する事で、駅名を変更できます。
+</p>
+
+<p>
+ 右側にある詳細ボタンをクリックすると、その駅に関するより詳細な情報を<br>調べる事が出来ます。
+</p>
+
+<p>
+ 駅情報ダイアログの主要な部分は、下部にある貨物・乗客リストです。ここ<br>には、その駅で輸送を待っている貨物や乗客の一覧が表示されます。この一覧<br>情報は、貨物の種類ごと、目的地ごとに表示されます。また、ここに表示され<br>る情報はゲームの進行に伴って自動的に更新されますので、最新の情報を得る<br>ためにダイアログを閉じて開きなおす必要はありません。
 </p>
diff --git a/simutrans/text/ja/station_details.txt b/simutrans/text/ja/station_details.txt
index ef11faf..e779f8b 100644
--- a/simutrans/text/ja/station_details.txt
+++ b/simutrans/text/ja/station_details.txt
@@ -1,13 +1,13 @@
-§<title>駅情報詳細ダイアログヘルプ</title>
-
-<h1>駅情報詳細ダイアログヘルプ</h1>
-
-<p>
- 駅詳細ダイアログでは、この駅に接続されている工場を示しています。また、<br>これらの工場がどの製品を必要としているかも示しています。
-</p>
-<p>
- この接続情報は、乗り換えをしないで直接届けることができる目的地だけを<br>示しています。乗客と貨物は、最終的な目的地に辿り着くのに必要なら何度か<br>の乗り換えを試みます。
-</p>
-<p>
- 駅の詳細は、<a href="station.txt">駅情報</a>ダイアログにある<em>詳細</em>ボタンを押すことによって開く<br>ことができます。
+<title>駅情報詳細ダイアログヘルプ</title>
+
+<h1>駅情報詳細ダイアログヘルプ</h1>
+
+<p>
+ 駅詳細ダイアログでは、この駅に接続されている工場を示しています。また、<br>これらの工場がどの製品を必要としているかも示しています。
+</p>
+<p>
+ この接続情報は、乗り換えをしないで直接届けることができる目的地だけを<br>示しています。乗客と貨物は、最終的な目的地に辿り着くのに必要なら何度か<br>の乗り換えを試みます。
+</p>
+<p>
+ 駅の詳細は、<a href="station.txt">駅情報</a>ダイアログにある<em>詳細</em>ボタンを押すことによって開く<br>ことができます。
 </p>
diff --git a/simutrans/text/pt/airtools.txt b/simutrans/text/pt/airtools.txt
index 22f12b5..e1bcd82 100644
--- a/simutrans/text/pt/airtools.txt
+++ b/simutrans/text/pt/airtools.txt
@@ -1,66 +1,66 @@
-<title> Ajuda - Aeroportos</title>
-<h1><strong>Aeroportos</strong></h1>
-<p>
-<strong>A Barra Aeroportos</strong> contém ferramentas para construir uma rede de transportes aéreos. As ferramentas podem construir: pista de taxiamento e pistas de pouso para aeronaves (ou removê-las), hangares (usados para compra e manutenção dos veículos), <a href="station.txt">Paradas de Aeronaves</a> (usados para carga e descarga de bens e passageiros) e vários edifícios aeroportuários. Se jogar com a <a href="new_world.txt">Linha do Tempo</a> ativa, com o passar do tempo no jogo, outras opções de ferramentas poderão aparecer.
-</p>
-<p> Clique no ícone do avião ao topo da tela do jogo para abrir a barra de ferramentas.
-<br> Passe o cursor do mouse por cima dos botões para poder ver o nome e, onde for o caso, o <a href="finances.txt">custo</a> de construção, custo de manutenção (dentro dos parênteses) e limite de velocidade máxima.
-</p>
-<p> As ferramentas podem incluir, da esquerda para direita:
-</p>
-<p>
-<em> Pista de taxiamento:</em> A ferramenta constrói pistas de taxiamento (áreas de tráfego terrestre para as aeronaves irem das <a href="station.txt">Paradas de Aeronaves</a> para uma pista de decolagem). As pista de taxiamento são construídas sobre o solo na tela do jogo.
-<br> IMPORTANTE: NÃO conecte as pistas de taxiamento às extremidades de uma pista de decolagem (cabeceiras), senão as aeronaves não poderão decolar e pousar.
-</p>
-<p> Para construir uma pista de taxiamento: clique sobre a ferramenta para selecioná-la (o cursor torna-se uma pista de taxiamento), então clique sobre o terreno para o ponto inicial (uma escavadora aparece sobre o cursor na tela do jogo e as coordenadas do mapa no canto inferior esquerdo da tela), e clique sobre o terreno ou sobre uma pista de decolagem para ponto final.
-</p>
-<p>
-<em> Pista de Pouso e Decolagem:
-</em> A ferramenta constrói uma pista usada pelas aeronaves para decolar e pousar. As pistas são construídas sobre o nível do solo na tela do jogo e podem cruzar entre si.
-</p>
-<p> Para construir uma pista de pouso e decolagem: clique sobre a ferramenta para selecioná-la (o cursor torna-se uma pista), então clique sobre o terreno para fixar o ponto inicial da pista de pouso e decolagem (uma escavadora aparece sobre o cursor na tela do jogo), e finalmente clique sobre o terreno para fixar o ponto final da pista.
-</p>
-<p>
-<em> Remover Pistas de Pouso e Decolagem:
-</em> a ferramenta que remove um segmento de uma pista de taxiamento ou pista de pouso e decolagem, quando nenhuma aeronave está presente, entre dois pontos na tela do jogo. O custo do uso desta ferramenta é igual ao
-<a href="finances.txt">custo de construção</a>.
-</p>
-<p> Para remover pistas de pouso e decolagem: clique sobre o botão Remover Pistas (o cursor torna-se um X vermelho); então clique sobre o ponto inicial do segmento da pista a ser removida (um X vermelho é fixado neste ponto na tela do jogo) e finalmente clique no ponto final do segmento da pista. Todo o segmento entre os pontos marcados será removido.
-</p>
-<p>
-<em> Depósito de aeronaves ou hangar:
-</em> A ferramenta constrói <a href="depot.txt">hangares</a> para compra e gerenciamento das aeronaves. Os hangares têm um custo de manutenção e são construídos sobre o fim de uma pista de taxiamento.
-</p>
-<p> Para construir hangares: clique no botão (o cursor torna-se um depósito de aeronaves), então clique sobre o fim de uma pista de taxiamento.
-</p>
-<p>
-<em> Paradas de Aeronaves
-</em> e
-<em> Ponte de Embarque:
-</em> A ferramenta constrói Paradas de Aeronaves para carga e descarga de bens e passageiros na tela de jogo.
-<br> Uma Parada de Aeronaves, quando não for construída adjacentemente a uma já existente, fará com que seja criada uma nova Parada independente.
-<br> As Paradas de Aeronaves são construídas sobre o final de um trecho de uma pista de taxiamento e tem uma área de captura para bens, passageiros e correio. Uma aeronave somente irá pousar em um aeroporto se houver uma Parada de Aeronaves vazia disponível.
-</p>
-<p> Para construir uma Parada de aeronaves: Clique sobre o botão para selecionar a ferramenta Parada de Aeronaves e então sobre clique sobre a extremidade de uma pista de taxiamento.
-</p>
-<p> {Dica: Pressione
-<a href="keys.txt">[v]</a> para exibir ou ocultar área de captura para bens e passageiros na tela do jogo.}
-</p>
-<p>
-<em> Edifícios Aeroportuários:
-</em> A ferramenta constrói extensões e edifícios para
-<a href="station.txt"> Paradas de Aeronaves
-</em></a> os quais podem incrementar a capacidade e a área de captura para bens e passageiros, assim como custo de manutenção. No canto superior esquerdo de alguns dos botões existe um pequeno ícone (usado também em
-<a href="haltlist.txt">Lista de Paradas</a> e Informações da Parada) que indica quais os itens (bens, passageiros ou correio) a extensão habilita a Parada de Aeronaves a manipular.
-</p>
-<p> Para construir uma extensão: Clique sobre o botão para selecionar uma extensão (o cursor torna-se a extensão selecionada), então clique na posição requerida, próxima a uma Parada de Aeronaves existente na tela do jogo. A nova extensão agora passa a ser parte da Parada de Aeronaves existente.
-</p>
-<p> {Dica: Um modo de construir um aeroporto simples é:
-<br> i) construa uma pista de pouso e conecte a ela uma pista de taxiamento;
-<br> ii) coloque uma parada de aeronaves no fim da pista de taxiamento;
-<br> iii) adicione mais edifícios aeroportuários se desejar.}
-<br> {Dica: Use o botão Remover <a href="keys.txt">[r]</a> para remover partes individuais das pistas de taxiamento, pouso, remover hangares e demais edifícios. O Desfazer <a href="keys.txt">[z]</a> não reembolsa os custos das construções.
-<br> Pressione <a href="keys.txt">[v]</a> para exibir ou ocultar área de captura para bens e passageiros na tela do jogo.}
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title> Ajuda - Aeroportos</title>
+<h1><strong>Aeroportos</strong></h1>
+<p>
+<strong>A Barra Aeroportos</strong> contém ferramentas para construir uma rede de transportes aéreos. As ferramentas podem construir: pista de taxiamento e pistas de pouso para aeronaves (ou removê-las), hangares (usados para compra e manutenção dos veículos), <a href="station.txt">Paradas de Aeronaves</a> (usados para carga e descarga de bens e passageiros) e vários edifícios aeroportuários. Se jogar com a <a href="new_world.txt">Linha do Tempo</a> ativa, com o passar do tempo no jogo, outras opções de ferramentas poderão aparecer.
+</p>
+<p> Clique no ícone do avião ao topo da tela do jogo para abrir a barra de ferramentas.
+<br> Passe o cursor do mouse por cima dos botões para poder ver o nome e, onde for o caso, o <a href="finances.txt">custo</a> de construção, custo de manutenção (dentro dos parênteses) e limite de velocidade máxima.
+</p>
+<p> As ferramentas podem incluir, da esquerda para direita:
+</p>
+<p>
+<em> Pista de taxiamento:</em> A ferramenta constrói pistas de taxiamento (áreas de tráfego terrestre para as aeronaves irem das <a href="station.txt">Paradas de Aeronaves</a> para uma pista de decolagem). As pista de taxiamento são construídas sobre o solo na tela do jogo.
+<br> IMPORTANTE: NÃO conecte as pistas de taxiamento às extremidades de uma pista de decolagem (cabeceiras), senão as aeronaves não poderão decolar e pousar.
+</p>
+<p> Para construir uma pista de taxiamento: clique sobre a ferramenta para selecioná-la (o cursor torna-se uma pista de taxiamento), então clique sobre o terreno para o ponto inicial (uma escavadora aparece sobre o cursor na tela do jogo e as coordenadas do mapa no canto inferior esquerdo da tela), e clique sobre o terreno ou sobre uma pista de decolagem para ponto final.
+</p>
+<p>
+<em> Pista de Pouso e Decolagem:
+</em> A ferramenta constrói uma pista usada pelas aeronaves para decolar e pousar. As pistas são construídas sobre o nível do solo na tela do jogo e podem cruzar entre si.
+</p>
+<p> Para construir uma pista de pouso e decolagem: clique sobre a ferramenta para selecioná-la (o cursor torna-se uma pista), então clique sobre o terreno para fixar o ponto inicial da pista de pouso e decolagem (uma escavadora aparece sobre o cursor na tela do jogo), e finalmente clique sobre o terreno para fixar o ponto final da pista.
+</p>
+<p>
+<em> Remover Pistas de Pouso e Decolagem:
+</em> a ferramenta que remove um segmento de uma pista de taxiamento ou pista de pouso e decolagem, quando nenhuma aeronave está presente, entre dois pontos na tela do jogo. O custo do uso desta ferramenta é igual ao
+<a href="finances.txt">custo de construção</a>.
+</p>
+<p> Para remover pistas de pouso e decolagem: clique sobre o botão Remover Pistas (o cursor torna-se um X vermelho); então clique sobre o ponto inicial do segmento da pista a ser removida (um X vermelho é fixado neste ponto na tela do jogo) e finalmente clique no ponto final do segmento da pista. Todo o segmento entre os pontos marcados será removido.
+</p>
+<p>
+<em> Depósito de aeronaves ou hangar:
+</em> A ferramenta constrói <a href="depot.txt">hangares</a> para compra e gerenciamento das aeronaves. Os hangares têm um custo de manutenção e são construídos sobre o fim de uma pista de taxiamento.
+</p>
+<p> Para construir hangares: clique no botão (o cursor torna-se um depósito de aeronaves), então clique sobre o fim de uma pista de taxiamento.
+</p>
+<p>
+<em> Paradas de Aeronaves
+</em> e
+<em> Ponte de Embarque:
+</em> A ferramenta constrói Paradas de Aeronaves para carga e descarga de bens e passageiros na tela de jogo.
+<br> Uma Parada de Aeronaves, quando não for construída adjacentemente a uma já existente, fará com que seja criada uma nova Parada independente.
+<br> As Paradas de Aeronaves são construídas sobre o final de um trecho de uma pista de taxiamento e tem uma área de captura para bens, passageiros e correio. Uma aeronave somente irá pousar em um aeroporto se houver uma Parada de Aeronaves vazia disponível.
+</p>
+<p> Para construir uma Parada de aeronaves: Clique sobre o botão para selecionar a ferramenta Parada de Aeronaves e então sobre clique sobre a extremidade de uma pista de taxiamento.
+</p>
+<p> {Dica: Pressione
+<a href="keys.txt">[v]</a> para exibir ou ocultar área de captura para bens e passageiros na tela do jogo.}
+</p>
+<p>
+<em> Edifícios Aeroportuários:
+</em> A ferramenta constrói extensões e edifícios para
+<a href="station.txt"> Paradas de Aeronaves
+</em></a> os quais podem incrementar a capacidade e a área de captura para bens e passageiros, assim como custo de manutenção. No canto superior esquerdo de alguns dos botões existe um pequeno ícone (usado também em
+<a href="haltlist.txt">Lista de Paradas</a> e Informações da Parada) que indica quais os itens (bens, passageiros ou correio) a extensão habilita a Parada de Aeronaves a manipular.
+</p>
+<p> Para construir uma extensão: Clique sobre o botão para selecionar uma extensão (o cursor torna-se a extensão selecionada), então clique na posição requerida, próxima a uma Parada de Aeronaves existente na tela do jogo. A nova extensão agora passa a ser parte da Parada de Aeronaves existente.
+</p>
+<p> {Dica: Um modo de construir um aeroporto simples é:
+<br> i) construa uma pista de pouso e conecte a ela uma pista de taxiamento;
+<br> ii) coloque uma parada de aeronaves no fim da pista de taxiamento;
+<br> iii) adicione mais edifícios aeroportuários se desejar.}
+<br> {Dica: Use o botão Remover <a href="keys.txt">[r]</a> para remover partes individuais das pistas de taxiamento, pouso, remover hangares e demais edifícios. O Desfazer <a href="keys.txt">[z]</a> não reembolsa os custos das construções.
+<br> Pressione <a href="keys.txt">[v]</a> para exibir ou ocultar área de captura para bens e passageiros na tela do jogo.}
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/citylist_filter.txt b/simutrans/text/pt/citylist_filter.txt
index ddb6640..99b7f1f 100644
--- a/simutrans/text/pt/citylist_filter.txt
+++ b/simutrans/text/pt/citylist_filter.txt
@@ -1,54 +1,54 @@
-<title> Ajuda - Lista das Cidades</title>
-
-<h1><strong>Lista das Cidades</strong></h1>
-
-<p>
-  <strong>Lista das Cidades</strong> apresenta detalhes sobre as
-  <a href="citywindow.txt">áreas urbanas</a> (cidades) e suas populações.
-</p>
-<p> Para abrir: clique sobre o botão de Lista das Cidades em
-  <a href="list.txt">Listas</a> ou tecle <a href="keys.txt">[T]</a>.
-  <br>
-  <strong>Lista das Cidades</strong> tem dois botões de opções que determinam a ordem em que as áreas urbanas (e suas populações) serão exibidas.
-  <br> {Dica: Se os itens na lista estão parcialmente visíveis, então redimensione a <strong>Lista das Cidades</strong> ou desloque a lista usando a barra de rolagem.}
-</p>
-<p>
-  <em> População total:
-  </em> é o número total de habitantes do jogo (de todas as cidades). O mais recente acréscimo da população é mostrado entre parênteses.
-</p>
-<p>
-  <em> Classificadas por:
-  </em> tem opções para determinar a ordem de como as cidades são apresentadas na lista.
-  <br> Clique sobre os botões de opções para alternar as opções (o que faz mudar o nome do botão):
-</p>
-<p> -
-  <em> Nome
-  </em> lista ordenada alfanumericamente de acordo com a ordem do código ASCII (letras maiúsculas antes das minúsculas) dos nomes atribuídos.
-  <br> -
-  <em> População
-  </em> ordena pelo número de habitantes.
-  <br> -
-  <em> Crescimento
-  </em> ordena por de taxa de crescimento (que é dependente do tamanho da cidade e do número de passageiros transportados).
-</p>
-<p> -
-  <em> Crescente
-  </em> /
-  <em> Decrescente
-  </em> inverte a ordem da lista.
-</p>
-<p> Clique sobre um item listado na
-  <strong>Lista das Cidades</strong> para ver mais
-  <a href="citywindow.txt">informações</a> sobre aquela cidade.
-  <br> Itens listados para cada cidade incluem:
-</p>
-<p>
-  <em> Nome
-  </em> atribuído à cidade (que pode ser alterado em Estatísticas da Cidade).
-</p>
-<p>
-  <em> População
-  </em> da área urbana, e entre parênteses está o recente acréscimo na população.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title> Ajuda - Lista das Cidades</title>
+
+<h1><strong>Lista das Cidades</strong></h1>
+
+<p>
+  <strong>Lista das Cidades</strong> apresenta detalhes sobre as
+  <a href="citywindow.txt">áreas urbanas</a> (cidades) e suas populações.
+</p>
+<p> Para abrir: clique sobre o botão de Lista das Cidades em
+  <a href="list.txt">Listas</a> ou tecle <a href="keys.txt">[T]</a>.
+  <br>
+  <strong>Lista das Cidades</strong> tem dois botões de opções que determinam a ordem em que as áreas urbanas (e suas populações) serão exibidas.
+  <br> {Dica: Se os itens na lista estão parcialmente visíveis, então redimensione a <strong>Lista das Cidades</strong> ou desloque a lista usando a barra de rolagem.}
+</p>
+<p>
+  <em> População total:
+  </em> é o número total de habitantes do jogo (de todas as cidades). O mais recente acréscimo da população é mostrado entre parênteses.
+</p>
+<p>
+  <em> Classificadas por:
+  </em> tem opções para determinar a ordem de como as cidades são apresentadas na lista.
+  <br> Clique sobre os botões de opções para alternar as opções (o que faz mudar o nome do botão):
+</p>
+<p> -
+  <em> Nome
+  </em> lista ordenada alfanumericamente de acordo com a ordem do código ASCII (letras maiúsculas antes das minúsculas) dos nomes atribuídos.
+  <br> -
+  <em> População
+  </em> ordena pelo número de habitantes.
+  <br> -
+  <em> Crescimento
+  </em> ordena por de taxa de crescimento (que é dependente do tamanho da cidade e do número de passageiros transportados).
+</p>
+<p> -
+  <em> Crescente
+  </em> /
+  <em> Decrescente
+  </em> inverte a ordem da lista.
+</p>
+<p> Clique sobre um item listado na
+  <strong>Lista das Cidades</strong> para ver mais
+  <a href="citywindow.txt">informações</a> sobre aquela cidade.
+  <br> Itens listados para cada cidade incluem:
+</p>
+<p>
+  <em> Nome
+  </em> atribuído à cidade (que pode ser alterado em Estatísticas da Cidade).
+</p>
+<p>
+  <em> População
+  </em> da área urbana, e entre parênteses está o recente acréscimo na população.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/citywindow.txt b/simutrans/text/pt/citywindow.txt
index 9b58f47..1efb122 100644
--- a/simutrans/text/pt/citywindow.txt
+++ b/simutrans/text/pt/citywindow.txt
@@ -1,78 +1,78 @@
-<title> Ajuda - Estatísticas da Cidade</title>
-<h1><strong>Estatísticas da Cidade</strong></h1>
-<p>
-<strong>Estatísticas da Cidade</strong> mostra estatísticas sobre a área urbana (cidade) selecionada e pode ser usada para alterar o seu nome.
-</p>
-<p> Cada cidade tem sua própria Prefeitura, ao redor da qual ela se desenvolve. O transporte de passageiros e de correio ajuda o seu crescimento, de forma que novas estradas são construídas e administradas pelo
-<a href="players.txt">Jogador Poder Público</a>, novos prédios aparecem na cidade,
-<a href="industry_info.txt">indústrias</a> são criadas e os limites da cidade se expandem.
-</p>
-<p> Clique em uma Prefeitura na tela do jogo com a
-<a href="inspection_tool.txt">Ferramenta Verificar</a> ou em uma cidade listada em <a href="citylist_filter.txt">Lista das Cidades</a> para abrir <strong>Informações das Cidades</strong>, a qual contém: um campo para o nome, estatísticas, dois mini-mapas e um gráfico informativo da área urbana.
-</p>
-<p>
-<em> Nome:</em> o nome atribuído à cidade aparece num campo de nome no topo das <strong>Estatísticas da Cidade</strong>. Este nome é usado nos nomes dados às Paradas criadas.
-<br> Para alterar o nome: clique no campo do nome e digite o novo nome.
-  <br> {Dica: Use
-  <a href="keys.txt">[!]</a> para alternar a visualização do nome da área urbana sobre a Prefeitura e os marcadores das diversas paradas criadas, na tela do jogo. Veja readme_citylist.txt (em ...simutrans/text/) para maior ajuda na criação de nomes para as cidades}.
-</p>
-<p> Algumas estatísticas da área urbana selecionada são mostradas logo abaixo do campo do nome:
-  <br>
-  <em> População:
-  </em> é o número de habitantes. O mais recente aumento da população é mostrado entre parênteses.
-  <br>
-  <em> Construções:
-  </em> é o número de edifícios da cidade.
-  <br>
-  <em> Coordenadas no mapa:
-  </em> indica os limites da cidade (são alterados conforme a cidade cresce).
-  <p>
-  </p> As seguintes informações aumentam com o crescimento da cidade e diminuem com a construção de novos prédios:
-  <br>
-  <em> Desempregados:
-  </em> o seu valor determina qual o tipo de construção (comercial/industrial) pode ser construída.
-  <br>
-  <em> Sem-teto:
-  </em> a sua existência determina que residências podem ser construídas.
-</p>
-<p>
-  <em> Mini-mapas
-  </em> abrangendo toda a área de jogo em
-  <strong>Estatísticas da Cidade</strong> mostram o destino de passageiros e do correio.
-  <br> Os destinos são mostrados por pontos coloridos referentes ao corrente mês do jogo (mini-mapa da direita) e ao mês anterior (mini-mapa da esquerda). A cor dos pontos indicam os seguintes detalhes sobre passageiros e correio:
-  <br> - amarelo: foi encontrada uma rota e uma
-  <a href="station.txt">Parada</a> descongestionada para início do deslocamento (rosto feliz mostrado nas Informações da Parada).
-  <br> - laranja: não foi encontrada nenhuma rota para seu destino desejado.
-  <br> - vermelho: foi encontrada uma rota porém a Parada estava super-congestionada (rosto zangado mostrado nas Informações da Parada).
-</p>
-<p>
-  <em> Gráfico
-  </em> mostra estatísticas da cidade.
-  <br> O eixo Y (vertical) indica a quantidade, o eixo X (horizontal) indica o tempo.
-  <br> Clique nas abas superiores do gráfico para alterar a escala do eixo X:
-  <br>
-  <em> Anos:
-  </em> mostra os valores anuais para os últimos 12 anos de jogo.
-  <br>
-  <em> Meses:
-  </em> mostra os valores para os últimos 12 meses de jogo.
-</p>
-<p> Clique nos botões de opções abaixo do gráfico para ver mais informações (o botão fica pressionado quando selecionado).
-  <br> A cores das linhas no gráfico correspondem às cores dos botões de opções:
-  <br>
-  <em> População:
-  </em> número de habitantes da cidade.
-  <br>
-  <em> Crescimento:
-  </em> variação da população (depende do tamanho da cidade e do serviço de transporte de passageiros e correio providenciado).
-  <br>
-  <em> Vol. Transportado:
-  </em> passageiros e correio que entraram no sistema de transporte (indicado como o <a href="station.txt">rosto feliz</a> na Informação das Paradas)
-  <br>
-  <em> Passageiros:
-  </em> Número total de passageiros e correio gerados na cidade.
-</p>
-<p> {Dicas: Configurações relacioandas às cidades podem ser alteradas no arquivo simuconf.tab e cityrules.tab}.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title> Ajuda - Estatísticas da Cidade</title>
+<h1><strong>Estatísticas da Cidade</strong></h1>
+<p>
+<strong>Estatísticas da Cidade</strong> mostra estatísticas sobre a área urbana (cidade) selecionada e pode ser usada para alterar o seu nome.
+</p>
+<p> Cada cidade tem sua própria Prefeitura, ao redor da qual ela se desenvolve. O transporte de passageiros e de correio ajuda o seu crescimento, de forma que novas estradas são construídas e administradas pelo
+<a href="players.txt">Jogador Poder Público</a>, novos prédios aparecem na cidade,
+<a href="industry_info.txt">indústrias</a> são criadas e os limites da cidade se expandem.
+</p>
+<p> Clique em uma Prefeitura na tela do jogo com a
+<a href="inspection_tool.txt">Ferramenta Verificar</a> ou em uma cidade listada em <a href="citylist_filter.txt">Lista das Cidades</a> para abrir <strong>Informações das Cidades</strong>, a qual contém: um campo para o nome, estatísticas, dois mini-mapas e um gráfico informativo da área urbana.
+</p>
+<p>
+<em> Nome:</em> o nome atribuído à cidade aparece num campo de nome no topo das <strong>Estatísticas da Cidade</strong>. Este nome é usado nos nomes dados às Paradas criadas.
+<br> Para alterar o nome: clique no campo do nome e digite o novo nome.
+  <br> {Dica: Use
+  <a href="keys.txt">[!]</a> para alternar a visualização do nome da área urbana sobre a Prefeitura e os marcadores das diversas paradas criadas, na tela do jogo. Veja readme_citylist.txt (em ...simutrans/text/) para maior ajuda na criação de nomes para as cidades}.
+</p>
+<p> Algumas estatísticas da área urbana selecionada são mostradas logo abaixo do campo do nome:
+  <br>
+  <em> População:
+  </em> é o número de habitantes. O mais recente aumento da população é mostrado entre parênteses.
+  <br>
+  <em> Construções:
+  </em> é o número de edifícios da cidade.
+  <br>
+  <em> Coordenadas no mapa:
+  </em> indica os limites da cidade (são alterados conforme a cidade cresce).
+  <p>
+  </p> As seguintes informações aumentam com o crescimento da cidade e diminuem com a construção de novos prédios:
+  <br>
+  <em> Desempregados:
+  </em> o seu valor determina qual o tipo de construção (comercial/industrial) pode ser construída.
+  <br>
+  <em> Sem-teto:
+  </em> a sua existência determina que residências podem ser construídas.
+</p>
+<p>
+  <em> Mini-mapas
+  </em> abrangendo toda a área de jogo em
+  <strong>Estatísticas da Cidade</strong> mostram o destino de passageiros e do correio.
+  <br> Os destinos são mostrados por pontos coloridos referentes ao corrente mês do jogo (mini-mapa da direita) e ao mês anterior (mini-mapa da esquerda). A cor dos pontos indicam os seguintes detalhes sobre passageiros e correio:
+  <br> - amarelo: foi encontrada uma rota e uma
+  <a href="station.txt">Parada</a> descongestionada para início do deslocamento (rosto feliz mostrado nas Informações da Parada).
+  <br> - laranja: não foi encontrada nenhuma rota para seu destino desejado.
+  <br> - vermelho: foi encontrada uma rota porém a Parada estava super-congestionada (rosto zangado mostrado nas Informações da Parada).
+</p>
+<p>
+  <em> Gráfico
+  </em> mostra estatísticas da cidade.
+  <br> O eixo Y (vertical) indica a quantidade, o eixo X (horizontal) indica o tempo.
+  <br> Clique nas abas superiores do gráfico para alterar a escala do eixo X:
+  <br>
+  <em> Anos:
+  </em> mostra os valores anuais para os últimos 12 anos de jogo.
+  <br>
+  <em> Meses:
+  </em> mostra os valores para os últimos 12 meses de jogo.
+</p>
+<p> Clique nos botões de opções abaixo do gráfico para ver mais informações (o botão fica pressionado quando selecionado).
+  <br> A cores das linhas no gráfico correspondem às cores dos botões de opções:
+  <br>
+  <em> População:
+  </em> número de habitantes da cidade.
+  <br>
+  <em> Crescimento:
+  </em> variação da população (depende do tamanho da cidade e do serviço de transporte de passageiros e correio providenciado).
+  <br>
+  <em> Vol. Transportado:
+  </em> passageiros e correio que entraram no sistema de transporte (indicado como o <a href="station.txt">rosto feliz</a> na Informação das Paradas)
+  <br>
+  <em> Passageiros:
+  </em> Número total de passageiros e correio gerados na cidade.
+</p>
+<p> {Dicas: Configurações relacioandas às cidades podem ser alteradas no arquivo simuconf.tab e cityrules.tab}.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/climates.txt b/simutrans/text/pt/climates.txt
index 964280e..c2bce0d 100644
--- a/simutrans/text/pt/climates.txt
+++ b/simutrans/text/pt/climates.txt
@@ -1,55 +1,55 @@
-<title>Ajuda - Controle do Clima</title>
-
-<h1><strong>Controle do Clima</strong></h1>
-
-<p>
-<strong>Controle do Clima</strong> ajusta diversas opções de aspectos topográficos e meteorológicos do jogo.<br>
-<p>
-<strong>Controle do Clima</strong> abre com <a href="new_world.txt">Criando um Novo Mundo</a>.
-</p>
-<p> Os botões de setas ajustam os parâmetros:
-</p>
-<p>
-<it>Opções:</it>
-</p>
-<p>
-<em>Nível d'água:</em> ajusta qual a profundidade que se encontra a água no mapa.
-</p>
-<p>
-<em>Desnível:</em> ajusta a altura máxima atingida no terreno.
-</p>
-<p>
-<em>Aspereza:</em> ajusta as ondulações do terreno; quanto maior o número, mais irregular será o terreno.<br>
-</p>
-<p>
-<it>Opções da linha de neve:</it>
-</p>
-<p>
-<em>Linha de neve no verão:</em> ajusta a altitude que começa a aparecer a neve permanente no verão.
-</p>
-<p>
-<em>Linha de neve no inverno:</em> ajusta a altitude que começa a aparecer a neve permanente no inverno.<br>
-</p>
-<p>
-<it>Opções de clima:</it>
-</p>
-<p>
-<em>Clima desértico:</em> ajusta a que altitude acima do nível do mar o clima desértico começa a aparecer.
-</p>
-<p>
-<em>Clima tropical:</em> ajusta a que altitude acima do nível do mar o clima tropical começa a aparecer.
-</p>
-<p>
-<em>Clima mediterrâneo:</em> ajusta a que altitude acima do nível do mar o clima mediterâneo começa a aparecer.
-</p>
-<p>
-<em>Clima temperado:</em> ajusta a que altitude acima do nível do mar o clima temperado começa a aparecer.
-</p>
-<p>
-<em>Tundra:</em> ajusta a que altitude acima do nível do mar a tundra começa a aparecer.
-</p>
-<p>
-<em>Clima alpino:</em> ajusta a que altitude acima do nível do mar o clima alpino começa a aparecer.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Controle do Clima</title>
+
+<h1><strong>Controle do Clima</strong></h1>
+
+<p>
+<strong>Controle do Clima</strong> ajusta diversas opções de aspectos topográficos e meteorológicos do jogo.<br>
+<p>
+<strong>Controle do Clima</strong> abre com <a href="new_world.txt">Criando um Novo Mundo</a>.
+</p>
+<p> Os botões de setas ajustam os parâmetros:
+</p>
+<p>
+<it>Opções:</it>
+</p>
+<p>
+<em>Nível d'água:</em> ajusta qual a profundidade que se encontra a água no mapa.
+</p>
+<p>
+<em>Desnível:</em> ajusta a altura máxima atingida no terreno.
+</p>
+<p>
+<em>Aspereza:</em> ajusta as ondulações do terreno; quanto maior o número, mais irregular será o terreno.<br>
+</p>
+<p>
+<it>Opções da linha de neve:</it>
+</p>
+<p>
+<em>Linha de neve no verão:</em> ajusta a altitude que começa a aparecer a neve permanente no verão.
+</p>
+<p>
+<em>Linha de neve no inverno:</em> ajusta a altitude que começa a aparecer a neve permanente no inverno.<br>
+</p>
+<p>
+<it>Opções de clima:</it>
+</p>
+<p>
+<em>Clima desértico:</em> ajusta a que altitude acima do nível do mar o clima desértico começa a aparecer.
+</p>
+<p>
+<em>Clima tropical:</em> ajusta a que altitude acima do nível do mar o clima tropical começa a aparecer.
+</p>
+<p>
+<em>Clima mediterrâneo:</em> ajusta a que altitude acima do nível do mar o clima mediterâneo começa a aparecer.
+</p>
+<p>
+<em>Clima temperado:</em> ajusta a que altitude acima do nível do mar o clima temperado começa a aparecer.
+</p>
+<p>
+<em>Tundra:</em> ajusta a que altitude acima do nível do mar a tundra começa a aparecer.
+</p>
+<p>
+<em>Clima alpino:</em> ajusta a que altitude acima do nível do mar o clima alpino começa a aparecer.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/color.txt b/simutrans/text/pt/color.txt
index 8b665d1..a00a099 100644
--- a/simutrans/text/pt/color.txt
+++ b/simutrans/text/pt/color.txt
@@ -1,23 +1,23 @@
-<title>Ajuda - Cor</title>
-
-<h1><strong>Cor</strong></h1>
-
-<p>
-Neste menu você pode alterar a <strong>cor</strong> de sua companhia de transporte.<br>
-Veículos, prédios e outros itens mostram a cor da sua companhia.
-</p>
-<p>
-A janela <strong>Cor</strong> é aberta através das <a href="options.txt">Preferências</a>.
-</p>
-<p>Clique nas cores mostradas para mudar a cor da companhia.<br>
-A barra de título da janela <strong>Cor</strong> muda para indicar que a nova cor está selecionada.
-</p>
-<p>
-A cor-padrão do jogador humano é o azul claro.<br>
-Alguns itens não estão programados para mudar de cor e portanto permanecerão inalterados.
-</p>
-<p>
-{Dica: para mudar a cor dos outros jogadores use a <a href="players.txt">Lista de jogadores</a> ou <a href="special.txt">Mudar Jogador (P+)</a> para selecioná-lo}.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Cor</title>
+
+<h1><strong>Cor</strong></h1>
+
+<p>
+Neste menu você pode alterar a <strong>cor</strong> de sua companhia de transporte.<br>
+Veículos, prédios e outros itens mostram a cor da sua companhia.
+</p>
+<p>
+A janela <strong>Cor</strong> é aberta através das <a href="options.txt">Preferências</a>.
+</p>
+<p>Clique nas cores mostradas para mudar a cor da companhia.<br>
+A barra de título da janela <strong>Cor</strong> muda para indicar que a nova cor está selecionada.
+</p>
+<p>
+A cor-padrão do jogador humano é o azul claro.<br>
+Alguns itens não estão programados para mudar de cor e portanto permanecerão inalterados.
+</p>
+<p>
+{Dica: para mudar a cor dos outros jogadores use a <a href="players.txt">Lista de jogadores</a> ou <a href="special.txt">Mudar Jogador (P+)</a> para selecioná-lo}.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/convoi.txt b/simutrans/text/pt/convoi.txt
index 5775cb0..0345dc0 100644
--- a/simutrans/text/pt/convoi.txt
+++ b/simutrans/text/pt/convoi.txt
@@ -1,59 +1,59 @@
-<title>Ajuda - Lista de Veículos</title>
-
-<h1><strong>Lista de Veículos</strong></h1>
-
-<p>
-A <strong>Lista de Veículos</strong> mostra informações e tem controles para filtrar e listar diferentes <a href="convoiinfo.txt">Comboios</a> (um Comboio é formado por um veículo operacional ou uma combinação de veículos).
-</p>
-<p>
-Para abrir: clique na ferramenta de Lista de Veículos em <a href="list.txt">Listas</a> ou aperte a tecla <a href="keys.txt">[V]</a>. A <strong>Lista de Veículos</strong> tem quatro botões de opções, dois são utilizados para ordenar itens em uma lista e dois são usados para aplicar as opções para selecionar os itens a serem mostrados na lista.<br>
-Abaixo dos botões existe uma lista de <a href="convoiinfo.txt">Comboios</a> que se ajustam aos critérios de opções de filtros.<br>
-{Dica: Se nenhum Comboio está listado altere as opções de <em>Filtro</em>. Se os itens na lista estão apenas parcialmente visíveis, então <a href="mouse.txt">reajuste</a> a <strong>Lista de Veículos</strong> ou desça a lista usando a barra lateral.}
-</p>
-<p>
-Clique nos botões de opções para mudá-los de acordo com as opções (o nome do botão de opções muda) ou abra os controles de Configuração de Filtros :
-</p>
-<p>
-<em>Classificado por:</em> Dois botões de opções determinam a ordem dos <a href="convoiinfo.txt">Comboios</a> mostrados na lista. O primeiro botão altera a ordem da lista em:
-</p>
-<p>
-- <em>Tipo</em> organiza por tipo de veículo (na ordem crescente de veículo rodoviário, veículo ferroviário, navio e avião) <br>
-- <em>Nome</em> organiza por nome designado, alfanumericamente de acordo com a ordem do código ASCII: letras maiúsculas antes das letras minúsculas (por padrão isso é feito no primeiro veículo <a href="depot.txt">comprado</a> ou montado ao Comboio).<br>
-- <em>Lucro</em> organiza por lucro (renda gerada menos os custos operacionais).<br>
-- <em>ID Interno</em> organiza pelo código de identificação único (ID) do comboio (designado por padrão quando o Comboio é comprado ou construído pela primeira vez em um <a href=depot.txt">Depósito</a> e mostrado na barra de título da <a href="convoiinfo.txt">Informação do Comboio</a>).
-</p>
-<p>
-E o segundo botão, altera a ordem da lista em:<br>
-- <em>crescente</em> / <em>decrescente</em> inverte a ordem da lista.
-</p>
-<p>
-<em>Filtro:</em> Dois botões de opções, ligam/desligam os critérios de seleção da lista e acessa os controles para alterar os critérios.
-</p>
-<p>
-- <em>Ligado</em> / <em>Desligado</em> clique para alterar os critérios para os <a href="convoiinfo.txt">Comboios</a> na lista.
-</p>
-<p>
-- <a href="convoi_filter.txt"><em>Parâmetros</em></a> abre os controles para alterar os critérios de filtragem.
-</p>
-<p>
-Clique no item listado para ver mais informações sobre o <a href="convoiinfo.txt">Comboio</a>.
-</p>
-<p>
-Itens listados para cada Comboio incluem:
-</p>
-<em>ID Interno</em>: um número de identificação único (designado por padrão quando um Comboio é comprado ou montado pela primeira vez em um <a href=depot.txt">depósito</a> e mostrado na barra de título da <a href="convoiinfo.txt">Informação do Comboio</a>).
-</p>
-<p>
-<em>Nome</em> que foi designado (por padrão isso já é feito no primeiro veículo quando o Comboio é comprado ou montado).
-</p>
-<p>
-<em>Lucro:</em> mostra o lucro (renda gerada menos os custos operacionais enquanto trafega).
-</p>
-<p>
-<em>Linha:</em> mostra a <a href="linemanagement.txt">Linha</a> designada e indica se o Comboio está em um <a href="depot.txt">depósito</a>.
-</p>
-<p>
-<em>Gráficos:</em> mostra a composição e o nível atual de carregamento.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Lista de Veículos</title>
+
+<h1><strong>Lista de Veículos</strong></h1>
+
+<p>
+A <strong>Lista de Veículos</strong> mostra informações e tem controles para filtrar e listar diferentes <a href="convoiinfo.txt">Comboios</a> (um Comboio é formado por um veículo operacional ou uma combinação de veículos).
+</p>
+<p>
+Para abrir: clique na ferramenta de Lista de Veículos em <a href="list.txt">Listas</a> ou aperte a tecla <a href="keys.txt">[V]</a>. A <strong>Lista de Veículos</strong> tem quatro botões de opções, dois são utilizados para ordenar itens em uma lista e dois são usados para aplicar as opções para selecionar os itens a serem mostrados na lista.<br>
+Abaixo dos botões existe uma lista de <a href="convoiinfo.txt">Comboios</a> que se ajustam aos critérios de opções de filtros.<br>
+{Dica: Se nenhum Comboio está listado altere as opções de <em>Filtro</em>. Se os itens na lista estão apenas parcialmente visíveis, então <a href="mouse.txt">reajuste</a> a <strong>Lista de Veículos</strong> ou desça a lista usando a barra lateral.}
+</p>
+<p>
+Clique nos botões de opções para mudá-los de acordo com as opções (o nome do botão de opções muda) ou abra os controles de Configuração de Filtros :
+</p>
+<p>
+<em>Classificado por:</em> Dois botões de opções determinam a ordem dos <a href="convoiinfo.txt">Comboios</a> mostrados na lista. O primeiro botão altera a ordem da lista em:
+</p>
+<p>
+- <em>Tipo</em> organiza por tipo de veículo (na ordem crescente de veículo rodoviário, veículo ferroviário, navio e avião) <br>
+- <em>Nome</em> organiza por nome designado, alfanumericamente de acordo com a ordem do código ASCII: letras maiúsculas antes das letras minúsculas (por padrão isso é feito no primeiro veículo <a href="depot.txt">comprado</a> ou montado ao Comboio).<br>
+- <em>Lucro</em> organiza por lucro (renda gerada menos os custos operacionais).<br>
+- <em>ID Interno</em> organiza pelo código de identificação único (ID) do comboio (designado por padrão quando o Comboio é comprado ou construído pela primeira vez em um <a href=depot.txt">Depósito</a> e mostrado na barra de título da <a href="convoiinfo.txt">Informação do Comboio</a>).
+</p>
+<p>
+E o segundo botão, altera a ordem da lista em:<br>
+- <em>crescente</em> / <em>decrescente</em> inverte a ordem da lista.
+</p>
+<p>
+<em>Filtro:</em> Dois botões de opções, ligam/desligam os critérios de seleção da lista e acessa os controles para alterar os critérios.
+</p>
+<p>
+- <em>Ligado</em> / <em>Desligado</em> clique para alterar os critérios para os <a href="convoiinfo.txt">Comboios</a> na lista.
+</p>
+<p>
+- <a href="convoi_filter.txt"><em>Parâmetros</em></a> abre os controles para alterar os critérios de filtragem.
+</p>
+<p>
+Clique no item listado para ver mais informações sobre o <a href="convoiinfo.txt">Comboio</a>.
+</p>
+<p>
+Itens listados para cada Comboio incluem:
+</p>
+<em>ID Interno</em>: um número de identificação único (designado por padrão quando um Comboio é comprado ou montado pela primeira vez em um <a href=depot.txt">depósito</a> e mostrado na barra de título da <a href="convoiinfo.txt">Informação do Comboio</a>).
+</p>
+<p>
+<em>Nome</em> que foi designado (por padrão isso já é feito no primeiro veículo quando o Comboio é comprado ou montado).
+</p>
+<p>
+<em>Lucro:</em> mostra o lucro (renda gerada menos os custos operacionais enquanto trafega).
+</p>
+<p>
+<em>Linha:</em> mostra a <a href="linemanagement.txt">Linha</a> designada e indica se o Comboio está em um <a href="depot.txt">depósito</a>.
+</p>
+<p>
+<em>Gráficos:</em> mostra a composição e o nível atual de carregamento.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/convoi_filter.txt b/simutrans/text/pt/convoi_filter.txt
index 4192b17..22681d5 100644
--- a/simutrans/text/pt/convoi_filter.txt
+++ b/simutrans/text/pt/convoi_filter.txt
@@ -1,40 +1,40 @@
-<title>Ajuda - Filtro da Lista de Veículos</title>
-
-<h1><strong>Filtro da Lista de Veículos</strong></h1>
-
-<p>
-O <strong>Filtro da Lista de Veículos</strong> tem opções para determinar quais <a href="convoiinfo.txt">Comboios</a> são mostrados na <a href="convoi.txt">Lista de Veículos</a>.
-</p>
-<p>
-Clique em Parâmetros na Lista de Veículos para abrir o <strong>Filtro da Lista de Veículos</strong>.
-
-</p>
-<p>
-Os botões de opções selecionam os Comboios a serem listados na Lista de Veículos quando a opção de filtro está <a href="convoi.txt">ligada</a>. Apenas os Comboios que estão dentro de todos os critérios selecionados são listados.
-</p>
-<p>
-Clique em uma caixa de seleção para selecionar o critério para filtrar (o botão está em baixo-relevo quando selecionado):
-</p>
-<p>
-<em>Filtro por nome:</em> seleciona o <a href="convoiinfo.txt">Comboio</a> pelo nome. Para usar: clique no botão para selecionar, então clique na caixa de texto e digite o nome desejado exatamente (a opção diferencia letras maiúsculas de minúsculas, portanto preste muita atenção quanto a isso).
-</p>
-
-<p>
-<em>Filtro por tipo:</em> listará os Comboios por tipo de transporte se selecionado. Para usá-lo: clique no botão para selecionar, então clique no(s) tipo(s) de transporte: Caminhões, Trens, Barcos e Aviões.
-</p>
-<p>
-<em>Filtro especial:</em> seleciona os <a href="convoiinfo.txt">Comboios</a> a serem listados pelos seguintes critérios (clique no botão para selecionar, então clique):<br>
-- <em>sem rota</em> - não pode encontrar um caminho ao próximo destino.<br>
-- <em>sem programa</em> - sem uma <a href="schedule.txt">rota</a> atribuída.<br>
-- <em>sem renda</em> - os veículos que não estão gerando lucros.<br>
-- <em>em depósito</em> - os veículos que estão em um <a href="depot.txt">depósito</a>.<br>
-- <em>sem linha</em> - sem uma <a href="linemanagement.txt">Linha</a> atribuída.
-</p>
-<p>
-<em>Filtro por carga:</em> seleciona os Comboios pela habilidade para transportar diferentes mercadorias e passageiros. Clique no botão ao lado do nome para selecionar o(s) item(ns). Use a <a href="mouse.txt">barra lateral</a> para ver os item(ns) na lista. As opções incluem:<br>
-- <em>tudo</em> seleciona todos os itens.<br>
-- <em>nada</em> nenhum item é selecionado.<br>
-- <em>inv.</em> inverte a seleção atual de itens.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Filtro da Lista de Veículos</title>
+
+<h1><strong>Filtro da Lista de Veículos</strong></h1>
+
+<p>
+O <strong>Filtro da Lista de Veículos</strong> tem opções para determinar quais <a href="convoiinfo.txt">Comboios</a> são mostrados na <a href="convoi.txt">Lista de Veículos</a>.
+</p>
+<p>
+Clique em Parâmetros na Lista de Veículos para abrir o <strong>Filtro da Lista de Veículos</strong>.
+
+</p>
+<p>
+Os botões de opções selecionam os Comboios a serem listados na Lista de Veículos quando a opção de filtro está <a href="convoi.txt">ligada</a>. Apenas os Comboios que estão dentro de todos os critérios selecionados são listados.
+</p>
+<p>
+Clique em uma caixa de seleção para selecionar o critério para filtrar (o botão está em baixo-relevo quando selecionado):
+</p>
+<p>
+<em>Filtro por nome:</em> seleciona o <a href="convoiinfo.txt">Comboio</a> pelo nome. Para usar: clique no botão para selecionar, então clique na caixa de texto e digite o nome desejado exatamente (a opção diferencia letras maiúsculas de minúsculas, portanto preste muita atenção quanto a isso).
+</p>
+
+<p>
+<em>Filtro por tipo:</em> listará os Comboios por tipo de transporte se selecionado. Para usá-lo: clique no botão para selecionar, então clique no(s) tipo(s) de transporte: Caminhões, Trens, Barcos e Aviões.
+</p>
+<p>
+<em>Filtro especial:</em> seleciona os <a href="convoiinfo.txt">Comboios</a> a serem listados pelos seguintes critérios (clique no botão para selecionar, então clique):<br>
+- <em>sem rota</em> - não pode encontrar um caminho ao próximo destino.<br>
+- <em>sem programa</em> - sem uma <a href="schedule.txt">rota</a> atribuída.<br>
+- <em>sem renda</em> - os veículos que não estão gerando lucros.<br>
+- <em>em depósito</em> - os veículos que estão em um <a href="depot.txt">depósito</a>.<br>
+- <em>sem linha</em> - sem uma <a href="linemanagement.txt">Linha</a> atribuída.
+</p>
+<p>
+<em>Filtro por carga:</em> seleciona os Comboios pela habilidade para transportar diferentes mercadorias e passageiros. Clique no botão ao lado do nome para selecionar o(s) item(ns). Use a <a href="mouse.txt">barra lateral</a> para ver os item(ns) na lista. As opções incluem:<br>
+- <em>tudo</em> seleciona todos os itens.<br>
+- <em>nada</em> nenhum item é selecionado.<br>
+- <em>inv.</em> inverte a seleção atual de itens.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/convoidetail.txt b/simutrans/text/pt/convoidetail.txt
index 995eb20..34bb237 100644
--- a/simutrans/text/pt/convoidetail.txt
+++ b/simutrans/text/pt/convoidetail.txt
@@ -1,42 +1,42 @@
-<title>Ajuda - Detalhes do Comboio</title>
-
-<h1><strong>Detalhes do Comboio</strong></h1>
-
-<p>
-Os <strong>Detalhes do Comboio</strong> dão informações sobre um Comboio (um veículo operacional ou combinação de veículos) e pode ser usado para vender o Comboio imediatamente.
-</p>
-<p>
-
-Os <strong>Detalhes do Comboio</strong> abrem-se do
-botão de opções <a href="convoiinfo.txt">
-Detalhes</a> na janela da Informação do Comboio (use a <a href="inspection_tool.txt">ferramenta Verificar</a> sobre um Comboio)</strong>.
-<br>
-Se todos os itens não estão visíveis, <a href="mouse.txt">reajuste</a> a janela dos <strong>Detalhes do Comboio</strong> ou use as barras laterais para ver os outros itens.
-</p>
-<p>
-
-As informações mostradas na janela dos
-<strong>Detalhes do Comboio</strong> incluem:
-</p>
-<p>
-<em>Potência</em> do Comboio (potência combinada de todos os veículos motorizados no Comboio).
-</p>
-<p>
-<em>Valor de Venda:</em> dinheiro recebido se o Comboio for vendido (valor de compra do Comboio menos qualquer depreciação).
-</p>
-<p>
-<h1><strong>AVISO:</strong></h1> Clique no botão <em>Vender</em> para que o Comboio seja vendido imediatamente. Além disso, nenhuma confirmação é pedida. O Comboio é removido do jogo e o jogador recebe o valor de venda.
-</p>
-<p>
-<strong>Detalhes do Comboio</strong> lista todos os veículos no Comboio.<br>
-As informações listadas para todos os veículos incluem:<br>
-- <em>Ícone do veículo:</em> uma imagem do veículo (também usado em <a href="depot.txt">depósitos</a>).<br>
-- <em>Manufaturado:</em> mês e ano da manufatura e data de introdução do veículo se estiver jogando com a <a href="new_world.txt">Linha do Tempo</a>.<br>
-- <em>Valor de venda:</em> quantidade de dinheiro recebida se o veículo for vendido.<br>
-- <em>Potência:</em> potência gerada (por veículos motorizados).<br>
-- <em>Fator de atrito atual:</em> nível de atrito atual.<br>
-- <em>Faturamento máximo:</em> lucro do veículo pelo tipo de item transportado pelo Comboio.<br>
-- <em>Itens carregados:</em> quantidade e destino dos itens atualmente carregados pelo veículo.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Detalhes do Comboio</title>
+
+<h1><strong>Detalhes do Comboio</strong></h1>
+
+<p>
+Os <strong>Detalhes do Comboio</strong> dão informações sobre um Comboio (um veículo operacional ou combinação de veículos) e pode ser usado para vender o Comboio imediatamente.
+</p>
+<p>
+
+Os <strong>Detalhes do Comboio</strong> abrem-se do
+botão de opções <a href="convoiinfo.txt">
+Detalhes</a> na janela da Informação do Comboio (use a <a href="inspection_tool.txt">ferramenta Verificar</a> sobre um Comboio)</strong>.
+<br>
+Se todos os itens não estão visíveis, <a href="mouse.txt">reajuste</a> a janela dos <strong>Detalhes do Comboio</strong> ou use as barras laterais para ver os outros itens.
+</p>
+<p>
+
+As informações mostradas na janela dos
+<strong>Detalhes do Comboio</strong> incluem:
+</p>
+<p>
+<em>Potência</em> do Comboio (potência combinada de todos os veículos motorizados no Comboio).
+</p>
+<p>
+<em>Valor de Venda:</em> dinheiro recebido se o Comboio for vendido (valor de compra do Comboio menos qualquer depreciação).
+</p>
+<p>
+<h1><strong>AVISO:</strong></h1> Clique no botão <em>Vender</em> para que o Comboio seja vendido imediatamente. Além disso, nenhuma confirmação é pedida. O Comboio é removido do jogo e o jogador recebe o valor de venda.
+</p>
+<p>
+<strong>Detalhes do Comboio</strong> lista todos os veículos no Comboio.<br>
+As informações listadas para todos os veículos incluem:<br>
+- <em>Ícone do veículo:</em> uma imagem do veículo (também usado em <a href="depot.txt">depósitos</a>).<br>
+- <em>Manufaturado:</em> mês e ano da manufatura e data de introdução do veículo se estiver jogando com a <a href="new_world.txt">Linha do Tempo</a>.<br>
+- <em>Valor de venda:</em> quantidade de dinheiro recebida se o veículo for vendido.<br>
+- <em>Potência:</em> potência gerada (por veículos motorizados).<br>
+- <em>Fator de atrito atual:</em> nível de atrito atual.<br>
+- <em>Faturamento máximo:</em> lucro do veículo pelo tipo de item transportado pelo Comboio.<br>
+- <em>Itens carregados:</em> quantidade e destino dos itens atualmente carregados pelo veículo.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/convoiinfo.txt b/simutrans/text/pt/convoiinfo.txt
index 79572ee..2fc5751 100644
--- a/simutrans/text/pt/convoiinfo.txt
+++ b/simutrans/text/pt/convoiinfo.txt
@@ -1,96 +1,96 @@
-<title>Ajuda - Informações do Comboio</title>
-
-<h1><strong>Informações do Comboio</strong></h1>
-
-<p>
-A janela <strong>Informações do Comboio</strong> oferece informações sobre um Comboio (um veículo operacional ou uma combinação de veículos) o qual é utilizado para transportar mercadorias e passageiros.<br>
-Ela lista os itens carregados por um Comboio e também possui os controles para acessar os detalhes e vender o Comboio; seguir o Comboio na visão do jogo; e alterar o nome e a <a href="schedule.txt">Programação</a> de um Comboio.
-</p>
-
-<p>
-Um Comboio é composto de pelo menos um veículo com força (motorizado) e qualquer tipo de reboque, como um vagão.<br>
-Exemplos de Comboios incluem: um grupo de cavalos puxando uma carruagem; ou uma locomotiva ligada a um tender e a vagões; ou um ônibus; ou uma van; ou um caminhão ligado a um reboque; ou bondes conectados entre si; ou um navio; ou um rebocador puxando uma barcaça; ou um avião.<br>
-Os Comboios são montados e comprados do <a href="depot.txt">depósito</a> para o seu respectivo tipo de transporte.<br>
-{Dica: Um Comboio tem um número limite máximo de veículos em sua composição: trens, 24; veículos rodoviários, 4 .}
-</p>
-<p>
-Clique em um Comboio enquanto estiver na visão do jogo com a <a href="inspection_tool.txt">ferramenta Verificar</a> ou clique no Comboio listado na <a href="convoi.txt">Lista de Veículos</a> ou no <a href="linemanagement.txt">Gerenciador de Linhas</a> para abrir a janela <strong>Informações do Comboio</strong><br>
-A barra de título da janela <strong>Informações do Comboio</strong> mostra um número de identificação único e o nome do Comboio (por padrão isso é feito quando o primeiro veículo é comprado ou montado em um <a href="depot.txt">depósito</a>).<br>
-A janela <strong>Informações do Comboio</strong> contém uma caixa do nome; uma mini-visão e a informação sobre o Comboio; botões de opções; e uma lista de todos os itens atualmente sendo carregados (se todos os itens não estão visíveis <a href="mouse.txt">reajuste</a> a janela de <strong>Informações do Comboio</strong> ou use as barras laterais para ver os outros itens).
-</p>
-<p>
-A informação mostrada na janela de <strong>Informações do Comboio</strong> inclui:
-</p>
-<p>
-<em>ID Interno</em>: um número único de identificação para o Comboio (designado por padrão quando o Comboio é comprado ou montado pela primeira vez em um <a href=depot.txt">depósito</a>).
-</p>
-<p>
-- <em>Nome</em>: mostra o nome designado do Comboio (por padrão isso já é feito ao primeiro veículo comprado ou montado no Comboio em um <a href="depot.txt">depósito</a>).<br>
-Clique na caixa de texto e digite um novo para alterar o nome do Comboio.
-</p>
-<p>
-- <em>Velocidade:</em> velocidade atual mostrada em km/h.<br>
-Entre parênteses está localizada a velocidade máxima que pode ser atingida pelo Comboio (determinada pelo veículo mais lento no Comboio).<br>
-Uma barra de progresso verde indica a velocidade atual relativa ao limite de velocidade máxima.
-</p>
-<p>
-- <em>Renda:</em> lucro gerado por veículo (renda gerada menos os custos operacionais) de acordo com o ano atual do calendário do jogo.<br>
-Entre parênteses está o custo operacional do Comboio em Créditos Hajo.
-</p>
-<p>
-- <em>Peso:</em> peso combinado atual do Comboio e itens carregados em toneladas.<br>
-Entre parênteses está o peso atual dos veículos carregados.<br>
-Uma barra de progresso verde indica a capacidade usada, para carregar mercadorias e passageiros.<br>
-Uma barra amarela indica o nível de <a href="schedule.txt">Espera</a> (quantidade mínima de mercadorias e passageiros necessários para o Comboio prosseguir) ajustado nas opções da Linha.<br>
-{Dica: Para ajustar os níveis de Espera para todos os Comboios de uma Linha, use o botão Atualizar em <a href="linemanagement.txt">Gerenciador de Linhas</a> ou em <a href="depot.txt">Controles do Depósito</a>. Para ajustar o nível de Espera para apenas um Comboio e mais nenhum outro em uma Linha atribuída, use o botão <em>Programar</em> na janela <strong>Informações do Comboio</strong> ou Controles do Depósito.}
-</p>
-<p>
-- <em>Destino:</em> A próxima <a href="station.txt">Parada</a> ou ponto de passagem na <a href="schedule.txt">Programação</a> do Comboio.<br>
-Uma barra de progresso verde indica o progresso do Comboio até o próximo Destino.
-</p>
-<p>
-- <em>Serve a linha:</em> indica qualquer <a href="linemanagement.txt">Linha</a> atribuída ao Comboio.
-</p>
-<p>
-- <em>Mini-vista</em> mostra o Comboio.<br>
-Clique na mini-vista para centralizar a visão do jogo no Comboio.
-</p>
-<p>
-Clique nos botões da janela <strong>Informações do Comboio</strong> para abrir os controles ou selecionar as opções:
-</p>
-<p>
-<a href="schedule.txt"><em>Programar:</em></a> abre os controles para modificar a rota e a quantidade mínima de mercadorias e passageiros necessários para o Comboio prosseguir.
-</p>
-<p>
-<em>Recolher:</em> manda o Comboio ao <a href="depot.txt">depósito</a> apropriado mais próximo. Quaisquer itens carregados serão perdidos, apesar de que o faturamento é recebido pelo transporte ao depósito.<br>
-No depósto, o Comboio mantém sua <a href="schedule.txt">Programação</a> e sua <a href="linemanagement.txt">Linha</a> atribuída.
-</p>
-<p>
-<em>Siga-me:</em> botão que quando ativado move a visão do jogo junto com o Comboio.<br>
-Para desativar esta opção, clique no botão novamente ou clique com o botão direito no <a href="map.txt">Mapa</a>.
-</p>
-<p>
-<em>Gráfico:</em> clique nesse botão para ativar/desativar o gráfico (o botão fica pressionado quando o gráfico está visível) em <strong>Informações do Comboio</strong>.<br>
-O gráfico mostra as estatísticas para os últimos 12 meses (eixo horizontal) quando uma opção do gráfico está selecionada.<br>
-Clique no botão de opção de gráfico para ver a informação no gráfico (o botão fica em baixo-relevo quando a opção está selecionada).<br>
-As cores das linhas no gráfico correspondem às cores dos botões de opção do gráfico:<br>
-- <em>Capacidade</em> indica o espaço sem uso no Comboio.<br>
-- <em>Vol. Transportado</em> indica o número de mercadorias, passageiros e correio transportados.<br>
-- <em>Faturamento</em> indica o lucro gerado pelo transporte.<br>
-- <em>Operação</em> indica os custos do Comboio enquanto está trafegando.<br>
-- <em>Lucro</em> indica o lucro recebido pelo transporte (Lucro Bruto menos os custos operacionais).
-</p>
-<p>
-<em>Detalhes</em> abre os <a href="convoidetail.txt">Detalhes do Comboio</a> que contêm mais informações e a opção para vender o Comboio.
-</p>
-<p>
-<em>Passageiros/carga carregada:</em> lista os itens carregados atualmente pelo Comboio.<br>
-A informação mostrada inclui a quantidade carregada e a capacidade do Comboio, o tipo do item, o destino final e a primeira <a href="station.txt">Parada</a>.<br>
-O botão de opção (o nome varia de acordo com a seleção) organiza os itens carregados em grupos de passageiros, correio e mercadorias por:<br>
- - <em>Destino:</em> organiza os itens carregados alfanumericamente de acordo com a ordem do código ASCII (letras maiúsculas antes das letras minúsculas), pelo nome designado da Parada final.<br>
- - <em>Via (detalhe):</em> organiza os itens carregados alfanumericamente de acordo com a ordem do código ASCII (letras maiúsculas antes das letras minúsculas), pelo nome designado da primeira Parada de transferência.<br>
- - <em>Via (quant.):</em> organiza os itens carregados pela quantidade levada à primeira Parada de transferência.<br>
- - <em>Quantidade:</em> organiza os itens carregados pela quantidade em ordem decrescente.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Informações do Comboio</title>
+
+<h1><strong>Informações do Comboio</strong></h1>
+
+<p>
+A janela <strong>Informações do Comboio</strong> oferece informações sobre um Comboio (um veículo operacional ou uma combinação de veículos) o qual é utilizado para transportar mercadorias e passageiros.<br>
+Ela lista os itens carregados por um Comboio e também possui os controles para acessar os detalhes e vender o Comboio; seguir o Comboio na visão do jogo; e alterar o nome e a <a href="schedule.txt">Programação</a> de um Comboio.
+</p>
+
+<p>
+Um Comboio é composto de pelo menos um veículo com força (motorizado) e qualquer tipo de reboque, como um vagão.<br>
+Exemplos de Comboios incluem: um grupo de cavalos puxando uma carruagem; ou uma locomotiva ligada a um tender e a vagões; ou um ônibus; ou uma van; ou um caminhão ligado a um reboque; ou bondes conectados entre si; ou um navio; ou um rebocador puxando uma barcaça; ou um avião.<br>
+Os Comboios são montados e comprados do <a href="depot.txt">depósito</a> para o seu respectivo tipo de transporte.<br>
+{Dica: Um Comboio tem um número limite máximo de veículos em sua composição: trens, 24; veículos rodoviários, 4 .}
+</p>
+<p>
+Clique em um Comboio enquanto estiver na visão do jogo com a <a href="inspection_tool.txt">ferramenta Verificar</a> ou clique no Comboio listado na <a href="convoi.txt">Lista de Veículos</a> ou no <a href="linemanagement.txt">Gerenciador de Linhas</a> para abrir a janela <strong>Informações do Comboio</strong><br>
+A barra de título da janela <strong>Informações do Comboio</strong> mostra um número de identificação único e o nome do Comboio (por padrão isso é feito quando o primeiro veículo é comprado ou montado em um <a href="depot.txt">depósito</a>).<br>
+A janela <strong>Informações do Comboio</strong> contém uma caixa do nome; uma mini-visão e a informação sobre o Comboio; botões de opções; e uma lista de todos os itens atualmente sendo carregados (se todos os itens não estão visíveis <a href="mouse.txt">reajuste</a> a janela de <strong>Informações do Comboio</strong> ou use as barras laterais para ver os outros itens).
+</p>
+<p>
+A informação mostrada na janela de <strong>Informações do Comboio</strong> inclui:
+</p>
+<p>
+<em>ID Interno</em>: um número único de identificação para o Comboio (designado por padrão quando o Comboio é comprado ou montado pela primeira vez em um <a href=depot.txt">depósito</a>).
+</p>
+<p>
+- <em>Nome</em>: mostra o nome designado do Comboio (por padrão isso já é feito ao primeiro veículo comprado ou montado no Comboio em um <a href="depot.txt">depósito</a>).<br>
+Clique na caixa de texto e digite um novo para alterar o nome do Comboio.
+</p>
+<p>
+- <em>Velocidade:</em> velocidade atual mostrada em km/h.<br>
+Entre parênteses está localizada a velocidade máxima que pode ser atingida pelo Comboio (determinada pelo veículo mais lento no Comboio).<br>
+Uma barra de progresso verde indica a velocidade atual relativa ao limite de velocidade máxima.
+</p>
+<p>
+- <em>Renda:</em> lucro gerado por veículo (renda gerada menos os custos operacionais) de acordo com o ano atual do calendário do jogo.<br>
+Entre parênteses está o custo operacional do Comboio em Créditos Hajo.
+</p>
+<p>
+- <em>Peso:</em> peso combinado atual do Comboio e itens carregados em toneladas.<br>
+Entre parênteses está o peso atual dos veículos carregados.<br>
+Uma barra de progresso verde indica a capacidade usada, para carregar mercadorias e passageiros.<br>
+Uma barra amarela indica o nível de <a href="schedule.txt">Espera</a> (quantidade mínima de mercadorias e passageiros necessários para o Comboio prosseguir) ajustado nas opções da Linha.<br>
+{Dica: Para ajustar os níveis de Espera para todos os Comboios de uma Linha, use o botão Atualizar em <a href="linemanagement.txt">Gerenciador de Linhas</a> ou em <a href="depot.txt">Controles do Depósito</a>. Para ajustar o nível de Espera para apenas um Comboio e mais nenhum outro em uma Linha atribuída, use o botão <em>Programar</em> na janela <strong>Informações do Comboio</strong> ou Controles do Depósito.}
+</p>
+<p>
+- <em>Destino:</em> A próxima <a href="station.txt">Parada</a> ou ponto de passagem na <a href="schedule.txt">Programação</a> do Comboio.<br>
+Uma barra de progresso verde indica o progresso do Comboio até o próximo Destino.
+</p>
+<p>
+- <em>Serve a linha:</em> indica qualquer <a href="linemanagement.txt">Linha</a> atribuída ao Comboio.
+</p>
+<p>
+- <em>Mini-vista</em> mostra o Comboio.<br>
+Clique na mini-vista para centralizar a visão do jogo no Comboio.
+</p>
+<p>
+Clique nos botões da janela <strong>Informações do Comboio</strong> para abrir os controles ou selecionar as opções:
+</p>
+<p>
+<a href="schedule.txt"><em>Programar:</em></a> abre os controles para modificar a rota e a quantidade mínima de mercadorias e passageiros necessários para o Comboio prosseguir.
+</p>
+<p>
+<em>Recolher:</em> manda o Comboio ao <a href="depot.txt">depósito</a> apropriado mais próximo. Quaisquer itens carregados serão perdidos, apesar de que o faturamento é recebido pelo transporte ao depósito.<br>
+No depósto, o Comboio mantém sua <a href="schedule.txt">Programação</a> e sua <a href="linemanagement.txt">Linha</a> atribuída.
+</p>
+<p>
+<em>Siga-me:</em> botão que quando ativado move a visão do jogo junto com o Comboio.<br>
+Para desativar esta opção, clique no botão novamente ou clique com o botão direito no <a href="map.txt">Mapa</a>.
+</p>
+<p>
+<em>Gráfico:</em> clique nesse botão para ativar/desativar o gráfico (o botão fica pressionado quando o gráfico está visível) em <strong>Informações do Comboio</strong>.<br>
+O gráfico mostra as estatísticas para os últimos 12 meses (eixo horizontal) quando uma opção do gráfico está selecionada.<br>
+Clique no botão de opção de gráfico para ver a informação no gráfico (o botão fica em baixo-relevo quando a opção está selecionada).<br>
+As cores das linhas no gráfico correspondem às cores dos botões de opção do gráfico:<br>
+- <em>Capacidade</em> indica o espaço sem uso no Comboio.<br>
+- <em>Vol. Transportado</em> indica o número de mercadorias, passageiros e correio transportados.<br>
+- <em>Faturamento</em> indica o lucro gerado pelo transporte.<br>
+- <em>Operação</em> indica os custos do Comboio enquanto está trafegando.<br>
+- <em>Lucro</em> indica o lucro recebido pelo transporte (Lucro Bruto menos os custos operacionais).
+</p>
+<p>
+<em>Detalhes</em> abre os <a href="convoidetail.txt">Detalhes do Comboio</a> que contêm mais informações e a opção para vender o Comboio.
+</p>
+<p>
+<em>Passageiros/carga carregada:</em> lista os itens carregados atualmente pelo Comboio.<br>
+A informação mostrada inclui a quantidade carregada e a capacidade do Comboio, o tipo do item, o destino final e a primeira <a href="station.txt">Parada</a>.<br>
+O botão de opção (o nome varia de acordo com a seleção) organiza os itens carregados em grupos de passageiros, correio e mercadorias por:<br>
+ - <em>Destino:</em> organiza os itens carregados alfanumericamente de acordo com a ordem do código ASCII (letras maiúsculas antes das letras minúsculas), pelo nome designado da Parada final.<br>
+ - <em>Via (detalhe):</em> organiza os itens carregados alfanumericamente de acordo com a ordem do código ASCII (letras maiúsculas antes das letras minúsculas), pelo nome designado da primeira Parada de transferência.<br>
+ - <em>Via (quant.):</em> organiza os itens carregados pela quantidade levada à primeira Parada de transferência.<br>
+ - <em>Quantidade:</em> organiza os itens carregados pela quantidade em ordem decrescente.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/curiositylist_filter.txt b/simutrans/text/pt/curiositylist_filter.txt
index cd09611..073b50f 100644
--- a/simutrans/text/pt/curiositylist_filter.txt
+++ b/simutrans/text/pt/curiositylist_filter.txt
@@ -1,52 +1,52 @@
-<title>Ajuda - Lista de Atrações</title>
-
-<h1><strong>Lista de Atrações</strong></h1>
-
-<p>
-<strong>A Lista de Atrações</strong> mostra informações sobre todas as atrações turísticas que são um destino frequente de pessoas e correio.
-</p>
-<p>
-Para abrir a <strong>Lista de Atrações</strong>: clique no botão de atrações turísticas em <a href="list.txt">Listas</a>.<br>
-{OBS: Se os itens só forem parcialmente visíveis, tente <a href="mouse.txt">redimensionar</a> a <strong>Lista de Atrações</strong> ou role a barra de rolagem.}
-</p>
-<p>
-<em>Classificadas por:</em> têm a opção de determinar a ordem das atrações turísticas.<br>
-Clique nos botões para alternar ordem (o nome do botão muda ao clicar):
-</p>
-<p>
-- <em>Nome</em> lista de atrações em ordem alfabética.<br>
-- <em>Geração de viagens</em> lista de atrações em ordem de popularidade ou destinos de passageiros ou correio.
-</p>
-<p>
-- <em>Crescente</em> / <em>Decrecente</em> reverte a ordem da lista.
-</p>
-<p>
-Clique no item listado na <strong>Lista de Atrações</strong> para abrir uma nova janela com informações sobre o local.<br>
-{OBS: clique na imagem que aparece na janela de informações da atração para ser levado automaticamente até ela.}
-</p>
-<p>
-Os items listados para cada atração turística incluem:
-</p>
-<p>
-<em>Barra de status</em> a cor indica a popularidade da atração:<br>
-- <em>amarelo:</em> não há paradas ou não há veículos para poder carregar passageiros ou correio.<br>
-- <em>verde:</em> a atração contém uma parada associada com passageiros.<br>
-- <em>azul:</em> a atração contém uma parada associada somente a correio.<br>
-- <em>turquesa:</em> a atração contém uma parada associada com passageiros e correio.<br>
-- <em>laranja:</em> a atração contém uma parada quase lotada.<br>
-- <em>vermelho:</em> todas as paradas da atração estão lotadas.
-</p>
-<p>
-<em>Ícone de prédio</em>, se presente, indica que é uma atração da <a href="citywindow.txt">cidade</a>.
-</p>
-<p>
-<em>Nome</em> da atração turística.
-</p>
-<p>
-<em>Geração de viagens</em> é um valor que indica a popularidade do destino para passageiros e correios.
-</p>
-<p>
-{OBS: Para obter um melhor serviço, as atrações turísticas devem estar inteiramente dentro da área de captura de uma ou mais paradas.}
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Lista de Atrações</title>
+
+<h1><strong>Lista de Atrações</strong></h1>
+
+<p>
+<strong>A Lista de Atrações</strong> mostra informações sobre todas as atrações turísticas que são um destino frequente de pessoas e correio.
+</p>
+<p>
+Para abrir a <strong>Lista de Atrações</strong>: clique no botão de atrações turísticas em <a href="list.txt">Listas</a>.<br>
+{OBS: Se os itens só forem parcialmente visíveis, tente <a href="mouse.txt">redimensionar</a> a <strong>Lista de Atrações</strong> ou role a barra de rolagem.}
+</p>
+<p>
+<em>Classificadas por:</em> têm a opção de determinar a ordem das atrações turísticas.<br>
+Clique nos botões para alternar ordem (o nome do botão muda ao clicar):
+</p>
+<p>
+- <em>Nome</em> lista de atrações em ordem alfabética.<br>
+- <em>Geração de viagens</em> lista de atrações em ordem de popularidade ou destinos de passageiros ou correio.
+</p>
+<p>
+- <em>Crescente</em> / <em>Decrecente</em> reverte a ordem da lista.
+</p>
+<p>
+Clique no item listado na <strong>Lista de Atrações</strong> para abrir uma nova janela com informações sobre o local.<br>
+{OBS: clique na imagem que aparece na janela de informações da atração para ser levado automaticamente até ela.}
+</p>
+<p>
+Os items listados para cada atração turística incluem:
+</p>
+<p>
+<em>Barra de status</em> a cor indica a popularidade da atração:<br>
+- <em>amarelo:</em> não há paradas ou não há veículos para poder carregar passageiros ou correio.<br>
+- <em>verde:</em> a atração contém uma parada associada com passageiros.<br>
+- <em>azul:</em> a atração contém uma parada associada somente a correio.<br>
+- <em>turquesa:</em> a atração contém uma parada associada com passageiros e correio.<br>
+- <em>laranja:</em> a atração contém uma parada quase lotada.<br>
+- <em>vermelho:</em> todas as paradas da atração estão lotadas.
+</p>
+<p>
+<em>Ícone de prédio</em>, se presente, indica que é uma atração da <a href="citywindow.txt">cidade</a>.
+</p>
+<p>
+<em>Nome</em> da atração turística.
+</p>
+<p>
+<em>Geração de viagens</em> é um valor que indica a popularidade do destino para passageiros e correios.
+</p>
+<p>
+{OBS: Para obter um melhor serviço, as atrações turísticas devem estar inteiramente dentro da área de captura de uma ou mais paradas.}
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/depot.txt b/simutrans/text/pt/depot.txt
index d6165af..fff37c3 100644
--- a/simutrans/text/pt/depot.txt
+++ b/simutrans/text/pt/depot.txt
@@ -1,103 +1,103 @@
-<title>Ajuda - Depósitos</title>
-
-<h1><strong>Depósitos</strong></h1>
-
-<p>
-Depósitos são usados para comprar e gerenciar veículos. Tipos diferentes de transporte possuem seus próprios depósitos. Somente aparecerão veículos elétricos no depósito se eles estiverem em vias eletrificadas.<br>
-Se estiver jogando com <a href="new_world.txt">linha do tempo</a>, então conforme o tempo passa no Simutrans mais veículos podem aparecer.
-</p>
-<p>
-Ferramentas para a construção de depósitos estão disponíveis na barra de ferramentas de cada tipo de transporte: <a href="railtools.txt">depósitos ferroviários</a>; <a href="monorailtools.txt">depósitos de monotrilhos</a>; <a href="tramtools.txt">depósitos de bondes</a>; <a href="roadtools.txt">garagens</a>; <a href="shiptools.txt">estaleiros</a> e <a href="airtools.txt">hangares</a>.
-</p>
-<p>
-Clique em um depósito construído na área de jogo com a ferramenta <a href="inspection_tool.txt">Verificar</a> para abrir a <strong>janela de controles do depósito</strong>, que fornecem informações e permitem a compra e o gerenciamento dos <a href="convoiinfo.txt">comboios</a> (um veículo operacional ou a combinação de mais de uma unidade veicular).<br>
-A barra de título da <strong>janela do depósito</strong> indica para que tipo de veículo o depósito serve.
-</p>
-<p>
-A <strong>janela do depósito</strong> pode ser <a href="mouse.txt">redimensionada</a> (clique na seta para baixo da barra de título para retornar ao tamanho original).<br>
-Clique nas setas para a direita/esquerda na barra de título para percorrer os depósitos do mesmo tipo de transporte (a área de jogo ficará centralizada no depósito).
-</p>
-<p>
-No topo da janela, são mostrados o número de <a href="convoiinfo.txt">comboios</a> no depósito, o nome e a <a href="linemanagement.txt">linha</a>.
-</p>
-<p>
-<em>Nome do </em><a href="convoiinfo.txt"><em>comboio:</em></a> clique nas setas existentes nos lados da caixa de nome do comboio para percorrer os comboios armazenados no depósito.<br>
-Para mudar o nome do comboio: clique na caixa de nome do comboio e digite o novo nome (por padrão isso é feito na primeira unidade veicular comprada ou montada para um novo comboio).
-</p>
-<p>
-<em>Nome da </em><a href="linemanagement.txt"><em>linha:</em></a> clique nas setas existentes nos lados do nome da linha para selecionar as linhas daquele tipo de transporte, ou clique na caixa de nome para abrir uma lista das linhas existentes (clique em uma delas para selecioná-la).<br>
-Para mudar o nome da linha: clique na caixa de nome da linha e digite o novo nome (por padrão quando uma nova linha é criada ela é identificada por um número).
-</p>
-<p>
-<em>Gráfico:</em> abaixo das caixas de nome, é mostrado o gráfico do comboio selecionado.<br>
-Passe o cursor do mouse por cima do gráfico das unidades veiculares do comboio selecionado para ver detalhes sobre a unidade veicular (mostrados na parte inferior da <strong>janela do depósito</strong>).<br>
-Clique em uma unidade veicular para removê-la do comboio selecionado e armazená-la no depósito.
-</p>
-<p>
-Abaixo do gráfico são mostrados o número de unidades veiculares do comboio selecionado, bem como a quantidade de quadros de estação precisos (todas as unidades veiculares devem caber em uma <a href="station.txt"><em>parada</em> para poder recolher e entregar mercadorias e passageiros), e a linha a que serve.
-</p>
-<p>
-Os botões de opção (logo abaixo, clique para usar) da <strong>janela do depósito</strong> incluem:
-</p>
-<p>
-</p>
-<p>
-<a href="schedule.txt"><em>Programar:</em></a> abre controles para mudar a rota e quantidade de itens que um <a href="convoiinfo.txt">comboio</a> esperará em uma <a href="station.txt">parada</a>.
-</p>
-<p>
-<em>Desmontar:</em> armazena no depósito a(s) unidade(s) veicular(es) do <a href="convoiinfo.txt">comboio</a> selecionado.
-</p>
-<p>
-<em>Vender:</em> vende o <a href="convoiinfo.txt">comboio</a> selecionado. O <em>Valor de venda</em> será creditado no balanço.
-</p>
-<p>
-<a href="linemanagement.txt"><em>Nova linha:</em></a> abre controles para definir uma <a href="schedule.txt">programação</a> (uma rota e quantidade mínima de itens que um comboio esperará em uma parada), que pode ser usada por múltiplos <a href="convoiinfo.txt">comboios</a>.
-</p>
-<p>
-<em>Associar:</em> associa a <a href="linemanagement.txt">linha</a> mostrada na caixa de nome da linha no topo da <strong>janela do depósito</strong> ao <a href="convoiinfo.txt">comboio</a> selecionado.
-</p>
-<p>
-<a href="linemanagement.txt"><em>Atualizar:</em></a> abre controles para mudar a <a href="schedule.txt">programação</a> da linha selecionada.
-</p>
-<p>
-<em>Copiar </em><a href="convoiinfo.txt"><em>comboio:</em></a> compra e monta outro comboio com a mesma composição, <a href="schedule.txt">programação</a> e <a href="linemanagement.txt">linha</a> do comboio selecionado.
-</p>
-<p>
-Abaixo dos botões são mostrados gráficos de todas as unidades veiculares disponíveis para compra.<br>
-<em>Gráficos das unidades veiculares:</em> unidades veiculares são divididas em categorias (unidades para passageiros e correio, unidades motorizadas, e aquelas que servem como reboque), que podem ser exibidas clicando nas respectivas abas.<br>
-Um número branco em cima do gráfico da unidade veicular indica a quantidade armazenada se um ou mais comboios foram desmontados. Unidades armazenadas podem ser vendidas ou usadas na montagem de um novo comboio.
-</p>
-<p>
-Passe o cursor do mouse sobre o gráfico de uma unidade veicular para ver as seguintes informações:<br>
-<em>Nome:</em> e entre parênteses o tipo de energia utilizado pelas unidades motorizadas.<br>
-<em>Preço:</em> valor para compra e entre parênteses o custo de operação por quilômetro.<br>
-<em>Potência:</em> potência do motor e velocidade máxima para unidades motorizadas.<br>
-<em>Capacidade:</em> quantidade e <a href="goods_filter.txt">nome da mercadoria</a> suportados pela unidade veicular.<br>
-<em>Peso:</em> em toneladas.<br>
-<em>Velocidade máxima:</em> para unidades veiculares não motorizadas.<br>
-<em>Introdução:</em> data em que a unidade veicular se torna disponível quando se joga com <a href="new_world.txt">linha do tempo</a>.<br>
-<em>Fim da produção:</em> data em que a unidade veicular se torna obsoleta.<br>
-<em>Construído por:</em> pessoa que criou o veículo para o Simutrans.<br>
-<em>Câmbio:</em> relação de força.<br>
-<em>Valor de venda:</em> quantidade de dinheiro recebida se a unidade veicular anteriormente comprada for vendida.
-</p>
-<p>
-Clique em um dos veículos abaixo das categorias para comprá-los ou vendê-los dependendo do estado do botão encontrado no canto inferior direito dos <strong>controles do depósito</strong>. O botão alterna entre as três seguintes opções:<br>
-<em>A reboque:</em> compra uma nova unidade veicular e a adiciona ao comboio selecionado, ou cria um novo comboio.<br>
-<em>À frente:</em> compra uma nova unidade veicular e a adiciona à frente do comboio selecionado, ou cria um novo comboio.<br>
-<em>Armazenar:</em> vende os veículos contidos no depósito.<br>
-</p>
-<p>
-<em>Barras de cores</em> abaixo dos gráficos das unidades veiculares indicam quais e em qual ordem as unidades veiculares podem ser montadas, para formar um <a href="convoiinfo.txt">comboio</a> operacional (as cores podem mudar dependendo dos diferentes estados do botão do canto inferior direito e do comboio seleceionado).<br>
-Significado das cores:<br>
-- <em>verde:</em> a unidade veicular pode ser usada.<br>
-- <em>vermelho:</em> a unidade veicular não pode ser usada.<br>
-- <em>amarelo:</em> outra unidade veicular precisa ser conectada para montar um veículo operacional.<br>
-- <em>azul:</em> a unidade veicular pode ser usada, mas está obsoleta.<br>
-{Dicas: um comboio é operacional se ele mostra barras verdes em todas as unidades veiculares; se houver alguma barra amarela então é necessária outra unidade veicular.}
-</p>
-<p>
-<em>Mostrar obsoletos:</em> jogando com <a href="new_world.txt">linha do tempo</a>, quando o botão é pressionado (clique para usar) mostra as unidade veiculares que tiveram sua produção terminada.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Depósitos</title>
+
+<h1><strong>Depósitos</strong></h1>
+
+<p>
+Depósitos são usados para comprar e gerenciar veículos. Tipos diferentes de transporte possuem seus próprios depósitos. Somente aparecerão veículos elétricos no depósito se eles estiverem em vias eletrificadas.<br>
+Se estiver jogando com <a href="new_world.txt">linha do tempo</a>, então conforme o tempo passa no Simutrans mais veículos podem aparecer.
+</p>
+<p>
+Ferramentas para a construção de depósitos estão disponíveis na barra de ferramentas de cada tipo de transporte: <a href="railtools.txt">depósitos ferroviários</a>; <a href="monorailtools.txt">depósitos de monotrilhos</a>; <a href="tramtools.txt">depósitos de bondes</a>; <a href="roadtools.txt">garagens</a>; <a href="shiptools.txt">estaleiros</a> e <a href="airtools.txt">hangares</a>.
+</p>
+<p>
+Clique em um depósito construído na área de jogo com a ferramenta <a href="inspection_tool.txt">Verificar</a> para abrir a <strong>janela de controles do depósito</strong>, que fornecem informações e permitem a compra e o gerenciamento dos <a href="convoiinfo.txt">comboios</a> (um veículo operacional ou a combinação de mais de uma unidade veicular).<br>
+A barra de título da <strong>janela do depósito</strong> indica para que tipo de veículo o depósito serve.
+</p>
+<p>
+A <strong>janela do depósito</strong> pode ser <a href="mouse.txt">redimensionada</a> (clique na seta para baixo da barra de título para retornar ao tamanho original).<br>
+Clique nas setas para a direita/esquerda na barra de título para percorrer os depósitos do mesmo tipo de transporte (a área de jogo ficará centralizada no depósito).
+</p>
+<p>
+No topo da janela, são mostrados o número de <a href="convoiinfo.txt">comboios</a> no depósito, o nome e a <a href="linemanagement.txt">linha</a>.
+</p>
+<p>
+<em>Nome do </em><a href="convoiinfo.txt"><em>comboio:</em></a> clique nas setas existentes nos lados da caixa de nome do comboio para percorrer os comboios armazenados no depósito.<br>
+Para mudar o nome do comboio: clique na caixa de nome do comboio e digite o novo nome (por padrão isso é feito na primeira unidade veicular comprada ou montada para um novo comboio).
+</p>
+<p>
+<em>Nome da </em><a href="linemanagement.txt"><em>linha:</em></a> clique nas setas existentes nos lados do nome da linha para selecionar as linhas daquele tipo de transporte, ou clique na caixa de nome para abrir uma lista das linhas existentes (clique em uma delas para selecioná-la).<br>
+Para mudar o nome da linha: clique na caixa de nome da linha e digite o novo nome (por padrão quando uma nova linha é criada ela é identificada por um número).
+</p>
+<p>
+<em>Gráfico:</em> abaixo das caixas de nome, é mostrado o gráfico do comboio selecionado.<br>
+Passe o cursor do mouse por cima do gráfico das unidades veiculares do comboio selecionado para ver detalhes sobre a unidade veicular (mostrados na parte inferior da <strong>janela do depósito</strong>).<br>
+Clique em uma unidade veicular para removê-la do comboio selecionado e armazená-la no depósito.
+</p>
+<p>
+Abaixo do gráfico são mostrados o número de unidades veiculares do comboio selecionado, bem como a quantidade de quadros de estação precisos (todas as unidades veiculares devem caber em uma <a href="station.txt"><em>parada</em> para poder recolher e entregar mercadorias e passageiros), e a linha a que serve.
+</p>
+<p>
+Os botões de opção (logo abaixo, clique para usar) da <strong>janela do depósito</strong> incluem:
+</p>
+<p>
+</p>
+<p>
+<a href="schedule.txt"><em>Programar:</em></a> abre controles para mudar a rota e quantidade de itens que um <a href="convoiinfo.txt">comboio</a> esperará em uma <a href="station.txt">parada</a>.
+</p>
+<p>
+<em>Desmontar:</em> armazena no depósito a(s) unidade(s) veicular(es) do <a href="convoiinfo.txt">comboio</a> selecionado.
+</p>
+<p>
+<em>Vender:</em> vende o <a href="convoiinfo.txt">comboio</a> selecionado. O <em>Valor de venda</em> será creditado no balanço.
+</p>
+<p>
+<a href="linemanagement.txt"><em>Nova linha:</em></a> abre controles para definir uma <a href="schedule.txt">programação</a> (uma rota e quantidade mínima de itens que um comboio esperará em uma parada), que pode ser usada por múltiplos <a href="convoiinfo.txt">comboios</a>.
+</p>
+<p>
+<em>Associar:</em> associa a <a href="linemanagement.txt">linha</a> mostrada na caixa de nome da linha no topo da <strong>janela do depósito</strong> ao <a href="convoiinfo.txt">comboio</a> selecionado.
+</p>
+<p>
+<a href="linemanagement.txt"><em>Atualizar:</em></a> abre controles para mudar a <a href="schedule.txt">programação</a> da linha selecionada.
+</p>
+<p>
+<em>Copiar </em><a href="convoiinfo.txt"><em>comboio:</em></a> compra e monta outro comboio com a mesma composição, <a href="schedule.txt">programação</a> e <a href="linemanagement.txt">linha</a> do comboio selecionado.
+</p>
+<p>
+Abaixo dos botões são mostrados gráficos de todas as unidades veiculares disponíveis para compra.<br>
+<em>Gráficos das unidades veiculares:</em> unidades veiculares são divididas em categorias (unidades para passageiros e correio, unidades motorizadas, e aquelas que servem como reboque), que podem ser exibidas clicando nas respectivas abas.<br>
+Um número branco em cima do gráfico da unidade veicular indica a quantidade armazenada se um ou mais comboios foram desmontados. Unidades armazenadas podem ser vendidas ou usadas na montagem de um novo comboio.
+</p>
+<p>
+Passe o cursor do mouse sobre o gráfico de uma unidade veicular para ver as seguintes informações:<br>
+<em>Nome:</em> e entre parênteses o tipo de energia utilizado pelas unidades motorizadas.<br>
+<em>Preço:</em> valor para compra e entre parênteses o custo de operação por quilômetro.<br>
+<em>Potência:</em> potência do motor e velocidade máxima para unidades motorizadas.<br>
+<em>Capacidade:</em> quantidade e <a href="goods_filter.txt">nome da mercadoria</a> suportados pela unidade veicular.<br>
+<em>Peso:</em> em toneladas.<br>
+<em>Velocidade máxima:</em> para unidades veiculares não motorizadas.<br>
+<em>Introdução:</em> data em que a unidade veicular se torna disponível quando se joga com <a href="new_world.txt">linha do tempo</a>.<br>
+<em>Fim da produção:</em> data em que a unidade veicular se torna obsoleta.<br>
+<em>Construído por:</em> pessoa que criou o veículo para o Simutrans.<br>
+<em>Câmbio:</em> relação de força.<br>
+<em>Valor de venda:</em> quantidade de dinheiro recebida se a unidade veicular anteriormente comprada for vendida.
+</p>
+<p>
+Clique em um dos veículos abaixo das categorias para comprá-los ou vendê-los dependendo do estado do botão encontrado no canto inferior direito dos <strong>controles do depósito</strong>. O botão alterna entre as três seguintes opções:<br>
+<em>A reboque:</em> compra uma nova unidade veicular e a adiciona ao comboio selecionado, ou cria um novo comboio.<br>
+<em>À frente:</em> compra uma nova unidade veicular e a adiciona à frente do comboio selecionado, ou cria um novo comboio.<br>
+<em>Armazenar:</em> vende os veículos contidos no depósito.<br>
+</p>
+<p>
+<em>Barras de cores</em> abaixo dos gráficos das unidades veiculares indicam quais e em qual ordem as unidades veiculares podem ser montadas, para formar um <a href="convoiinfo.txt">comboio</a> operacional (as cores podem mudar dependendo dos diferentes estados do botão do canto inferior direito e do comboio seleceionado).<br>
+Significado das cores:<br>
+- <em>verde:</em> a unidade veicular pode ser usada.<br>
+- <em>vermelho:</em> a unidade veicular não pode ser usada.<br>
+- <em>amarelo:</em> outra unidade veicular precisa ser conectada para montar um veículo operacional.<br>
+- <em>azul:</em> a unidade veicular pode ser usada, mas está obsoleta.<br>
+{Dicas: um comboio é operacional se ele mostra barras verdes em todas as unidades veiculares; se houver alguma barra amarela então é necessária outra unidade veicular.}
+</p>
+<p>
+<em>Mostrar obsoletos:</em> jogando com <a href="new_world.txt">linha do tempo</a>, quando o botão é pressionado (clique para usar) mostra as unidade veiculares que tiveram sua produção terminada.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/display.txt b/simutrans/text/pt/display.txt
index a218063..73c93c5 100644
--- a/simutrans/text/pt/display.txt
+++ b/simutrans/text/pt/display.txt
@@ -1,63 +1,63 @@
-<title>Ajuda - Vídeo</title>
-
-<h1><strong>Vídeo</strong></h1>
-
-<p>
-A janela <strong>Vídeo</strong> possui controles para a aparência do jogo e fornece informações da performance do computador.
-</p>
-<p>
-Clique no botão 'Vídeo' na janela <a href="options.txt">Preferências</a> para abrir as <strong>configurações de vídeo</strong>.
-</p>
-<p>
-Clique nos botões quadrados para selecionar as opções (o botão aparece pressionado quando a opção é selecionada), ou use as <a href="mouse.txt">setas</a> para ajustar as configurações:
-</p>
-<p>
-<em>Alternar dia e noite:</em> ver ciclos de dia e noite no jogo.
-</p>
-<p>
-<em>
-Luminosidade:</em> regula o quão claro/escuro o jogo aparecerá. Valores muito distantes de zero produzem resultados estranhos; use <a href="keys.txt">[+] e [-]</a> para aumentar/diminuir o valor.
-</p>
-<p>
-<em>Inverter deslocamento do mouse:</em> inverte o sentido do deslocamento da <a href="window.txt">tela do jogo</a> com o mouse.
-</p>
-<p>
-<em>Velocidade de deslocamento:</em> regula a velocidade do deslocamento pela tela do jogo.
-</p>
-<p>
-<em>Pedestres nas cidades:</em> permite a simulação de pedestres caminhando pelas <a href="citywindow.txt">áreas urbanas</a>.
-</p>
-<p>
-<em>Ver pedestres:</em> visualização dos pedestres que desembarcam dos veículos em <a href="station.txt">paradas</a>.
-</p>
-<p>
-<em>Densidade de tráfego:</em> regula o número de carros particulares em <a href="citywindow.txt">áreas urbanas</a>.<br>
-O número de carros novos que aparecem conforme a área urbana cresce depende do seu tamanho e da densidade de tráfego. Valores maiores que zero geram tráfego nas cidades.
-</p>
-<p>
-{Dica: mais opções e valores padrão para quando o Simutrans inicia podem ser mudados no arquivo simuconf.tab}.
-</p>
-<br>
-<p>
-<strong>Informações de vídeo:</strong>
-</p>
-<p>
-Abaixo dessas configurações, são mostradas informações do desempenho do computador rodando o Simutrans.<br>
-Se os números (geralmente brancos) estiverem vermelhos ou amarelos talvez você precise mudar suas configurações.<br>
-Mudanças na velocidade que o tempo passa no jogo, (usando o Avanço Rápido(>>) no topo da área de jogo, ou [,]/ [.]) podem mudar a cor do número.
-</p>
-<p>
-<em>Tempo por quadro:</em> quantidade de tempo entre os quadros.
-</p>
-<p>
-<em>Livre:</em> quando superior a zero, o computador tem capacidade de rodar outro software.
-</p>
-<p>
-<em>
-Q/s:</em> taxa de quadros por segundo. Valores altos fazem os veículos parecerem se mover mais naturalmente. Se o número continuar vermelho, tente reduzir o tamanho da tela de jogo.
-</p>
-<p>
-<em>Simloops:</em> se o número continuar vermelho, significa que o computador fica lento com as configurações atuais - tente um mapa menor com menos áreas urbanas.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Vídeo</title>
+
+<h1><strong>Vídeo</strong></h1>
+
+<p>
+A janela <strong>Vídeo</strong> possui controles para a aparência do jogo e fornece informações da performance do computador.
+</p>
+<p>
+Clique no botão 'Vídeo' na janela <a href="options.txt">Preferências</a> para abrir as <strong>configurações de vídeo</strong>.
+</p>
+<p>
+Clique nos botões quadrados para selecionar as opções (o botão aparece pressionado quando a opção é selecionada), ou use as <a href="mouse.txt">setas</a> para ajustar as configurações:
+</p>
+<p>
+<em>Alternar dia e noite:</em> ver ciclos de dia e noite no jogo.
+</p>
+<p>
+<em>
+Luminosidade:</em> regula o quão claro/escuro o jogo aparecerá. Valores muito distantes de zero produzem resultados estranhos; use <a href="keys.txt">[+] e [-]</a> para aumentar/diminuir o valor.
+</p>
+<p>
+<em>Inverter deslocamento do mouse:</em> inverte o sentido do deslocamento da <a href="window.txt">tela do jogo</a> com o mouse.
+</p>
+<p>
+<em>Velocidade de deslocamento:</em> regula a velocidade do deslocamento pela tela do jogo.
+</p>
+<p>
+<em>Pedestres nas cidades:</em> permite a simulação de pedestres caminhando pelas <a href="citywindow.txt">áreas urbanas</a>.
+</p>
+<p>
+<em>Ver pedestres:</em> visualização dos pedestres que desembarcam dos veículos em <a href="station.txt">paradas</a>.
+</p>
+<p>
+<em>Densidade de tráfego:</em> regula o número de carros particulares em <a href="citywindow.txt">áreas urbanas</a>.<br>
+O número de carros novos que aparecem conforme a área urbana cresce depende do seu tamanho e da densidade de tráfego. Valores maiores que zero geram tráfego nas cidades.
+</p>
+<p>
+{Dica: mais opções e valores padrão para quando o Simutrans inicia podem ser mudados no arquivo simuconf.tab}.
+</p>
+<br>
+<p>
+<strong>Informações de vídeo:</strong>
+</p>
+<p>
+Abaixo dessas configurações, são mostradas informações do desempenho do computador rodando o Simutrans.<br>
+Se os números (geralmente brancos) estiverem vermelhos ou amarelos talvez você precise mudar suas configurações.<br>
+Mudanças na velocidade que o tempo passa no jogo, (usando o Avanço Rápido(>>) no topo da área de jogo, ou [,]/ [.]) podem mudar a cor do número.
+</p>
+<p>
+<em>Tempo por quadro:</em> quantidade de tempo entre os quadros.
+</p>
+<p>
+<em>Livre:</em> quando superior a zero, o computador tem capacidade de rodar outro software.
+</p>
+<p>
+<em>
+Q/s:</em> taxa de quadros por segundo. Valores altos fazem os veículos parecerem se mover mais naturalmente. Se o número continuar vermelho, tente reduzir o tamanho da tela de jogo.
+</p>
+<p>
+<em>Simloops:</em> se o número continuar vermelho, significa que o computador fica lento com as configurações atuais - tente um mapa menor com menos áreas urbanas.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/edittools.txt b/simutrans/text/pt/edittools.txt
index 2bb7396..14529d1 100644
--- a/simutrans/text/pt/edittools.txt
+++ b/simutrans/text/pt/edittools.txt
@@ -1,54 +1,54 @@
-<title>Ajuda - Editor de mapa</title>
-
-<h1><strong>Editor de mapa</strong></h1>
-
-<p>
-O <strong>Editor de mapa</strong> permite a personalização avançada do mundo em que se está jogando.<br>
-As ferramentas podem: aumentar/diminuir a população das cidades; construir vias urbanas, atrações, usinas de energia e indústrias; proibir a mudança de jogador e também avançar alguns anos na linha do tempo.
-</p>
-<p>
-Esta barra de ferramentas abre quando se joga como o Poder Público, selecionado através da <a href="players.txt">Lista de jogadores</a> ou <a href="special.txt">Mudar jogador (P+)</a> nas ferramentas especiais (ou pressionando <a href="keys.txt">[P]</a>). A barra irá se fechar ao mudar de jogador novamente.<br>
-Passe o cursor do mouse em cima das opções (após ter aberto ou clicado na barra de ferramentas) para ver o nome e mais informações de algumas delas.
-</p>
-<p>
-As opções incluem, da esquerda para a direita:
-</p>
-<p>
-<em>Aumentar cidade:</em> aumenta a população de uma <a href="citywindow.txt">área urbana</a> em 100 habitantes, construindo novas estradas e prédios, se necessário.<br>
-Para aumentar a cidade: clique na ferramenta para ativá-la (o cursor mudará para uma seta vermelha apontando para cima), e clique na área urbana.
-</p>
-<p>
-<em>Diminuir a cidade:</em> reduz a população de uma <a href="citywindow.txt">área urbana</a> em 100 habitantes. Áreas urbanas somente continuarão a crescer se a quantidade de sem-tetos e desempregados aumentar.<br>
-Para diminuir a cidade: clique na ferramenta para ativá-la (o cursor mudará para uma seta vermelha apontando para baixo), e clique na área urbana.
-</p>
-<p>
-<em>Via urbana:</em> constrói uma via urbana entre dois pontos, como o Poder público, que qualquer jogador pode usar. Vias urbanas podem não ser construídas em áreas ocupadas por outros prédios, e podem não encontrar um caminho através de terreno acidentado, água e obstáculos. A via urbana construída entre dois pontos pode usar estradas existentes em seu caminho.<br>
-Passe o cursor do mouse em cima das opções (após ter aberto ou clicado na barra de ferramentas) para ver o nome, custo de manutenção e construção para o Poder público e o limite máximo de velocidade.
-Para construir uma via urbana: clique na ferramenta para ativá-la (o cursor mudará para um trecho de via urbana), e clique na área de jogo no ponto de início da via (mostra um trator na área de jogo e as coordenadas do mapa no lado direito da barra inferior da área de jogo), e finalmente clique no local desejado para o ponto final da via.<br>
-{Dicas: tipos diferentes de estradas podem ser conectadas. Use pontes e túneis para conectar estradas através de terreno acidentado, ou para desviar de obstáculos. Use o <a href="slopetools.txt">Editor de terrenos</a> para aplainar o relevo, possibilitando caminhos para as estradas. Use a ferramenta Eliminar para remover estradas e obstáculos. Use <a href="keys.txt">[Ctrl]</a> ao mesmo tempo para algumas funções adicionais.}
-</p>
-<p>
-<em>Construir atração aleatória:</em> constrói uma atração turística que passageiros vão querer visitar. Diferentes atrações geram quantidades diferentes de passageiros e correio. O tipo de atração construída é aleatório e somente aparece se houver espaço suficiente livre de obstáculos.<br>
-Para construir uma atração: clique na ferramenta para ativá-la (o cursor mudará para uma gota vermelha em um círculo amarelo), e clique na posição desejada na área de jogo.<br>
-{Dicas: use a ferramenta Eliminar jogando como Poder público para remover atrações. Use a ferramenta Eliminar e/ou o Editor de terrenos para criar lugares propícios para receber atrações.}
-</p>
-<p>
-<em>Construir usina de energia:</em> constrói uma usina de energia elétrica (e possíveis fornecedores). O tipo de usina de energia construído é aleatório e somente aparece se houver espaço suficiente livre de obstáculos.<br>
-Para construir uma usina: clique na ferramenta ou pressione [I] para ativá-la (o cursor mudará para uma gota vermelha em um círculo amarelo), e clique na posição desejada na área de jogo.<br>
-{Dicas: use a ferramenta Eliminar jogando como Poder público para remover as usinas de energia. Use a ferramenta Eliminar e/ou o Editor de terrenos para criar lugares propícios para receber usinas.}
-</p>
-<p>
-<em>Construir mercado:</em> constrói um consumidor-final de mercadorias em uma <a href="citywindow.txt">área urbana</a> (e possíveis fornecedores, não necessariamente na área urbana). O tipo de indústria construída é aleatório e somente aparece se houver espaço suficiente livre de obstáculos.<br>
-Para construir um mercado: clique na ferramenta para ativá-la (o cursor mudará para uma gota vermelha em um círculo amarelo), e clique na área de jogo para construir um mercado na área urbana mais próxima.<br>
-{Dicas: use a ferramenta Eliminar jogando como Poder público para remover os mercados. Use a ferramenta Eliminar e/ou o Editor de terrenos para criar lugares propícios para receber mercados.}
-</p>
-<p>
-<em>Proibir mudança de jogador:</em> remove a opção de atuar como outro <a href="players.txt">jogador</a> e abrir as ferramentas de <strong>Editor de mapa</strong>.<br>
-Para usá-la: clique na ferramenta para ativá-la (o cursor mudará para um cadeado), e clique em qualquer lugar na área de jogo, não é pedida confirmação ao jogador.
-</p>
-<p>
-<em>Pular linha do tempo em um ano:</em> avança a data no jogo em um ano. Se estiver jogando com <a href="new_world.txt">linha do tempo</a>, conforme o tempo passa mais opções de transporte e construção aparecem e veículos lentos deixam de ser tão lucrativos (a receita é calculada pela velocidade média do transporte disponível).<br>
-Para avançar no tempo: clique na ferramenta, não é pedida confirmação ao jogador (a data muda no lado direito da barra inferior da tela do jogo).
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Editor de mapa</title>
+
+<h1><strong>Editor de mapa</strong></h1>
+
+<p>
+O <strong>Editor de mapa</strong> permite a personalização avançada do mundo em que se está jogando.<br>
+As ferramentas podem: aumentar/diminuir a população das cidades; construir vias urbanas, atrações, usinas de energia e indústrias; proibir a mudança de jogador e também avançar alguns anos na linha do tempo.
+</p>
+<p>
+Esta barra de ferramentas abre quando se joga como o Poder Público, selecionado através da <a href="players.txt">Lista de jogadores</a> ou <a href="special.txt">Mudar jogador (P+)</a> nas ferramentas especiais (ou pressionando <a href="keys.txt">[P]</a>). A barra irá se fechar ao mudar de jogador novamente.<br>
+Passe o cursor do mouse em cima das opções (após ter aberto ou clicado na barra de ferramentas) para ver o nome e mais informações de algumas delas.
+</p>
+<p>
+As opções incluem, da esquerda para a direita:
+</p>
+<p>
+<em>Aumentar cidade:</em> aumenta a população de uma <a href="citywindow.txt">área urbana</a> em 100 habitantes, construindo novas estradas e prédios, se necessário.<br>
+Para aumentar a cidade: clique na ferramenta para ativá-la (o cursor mudará para uma seta vermelha apontando para cima), e clique na área urbana.
+</p>
+<p>
+<em>Diminuir a cidade:</em> reduz a população de uma <a href="citywindow.txt">área urbana</a> em 100 habitantes. Áreas urbanas somente continuarão a crescer se a quantidade de sem-tetos e desempregados aumentar.<br>
+Para diminuir a cidade: clique na ferramenta para ativá-la (o cursor mudará para uma seta vermelha apontando para baixo), e clique na área urbana.
+</p>
+<p>
+<em>Via urbana:</em> constrói uma via urbana entre dois pontos, como o Poder público, que qualquer jogador pode usar. Vias urbanas podem não ser construídas em áreas ocupadas por outros prédios, e podem não encontrar um caminho através de terreno acidentado, água e obstáculos. A via urbana construída entre dois pontos pode usar estradas existentes em seu caminho.<br>
+Passe o cursor do mouse em cima das opções (após ter aberto ou clicado na barra de ferramentas) para ver o nome, custo de manutenção e construção para o Poder público e o limite máximo de velocidade.
+Para construir uma via urbana: clique na ferramenta para ativá-la (o cursor mudará para um trecho de via urbana), e clique na área de jogo no ponto de início da via (mostra um trator na área de jogo e as coordenadas do mapa no lado direito da barra inferior da área de jogo), e finalmente clique no local desejado para o ponto final da via.<br>
+{Dicas: tipos diferentes de estradas podem ser conectadas. Use pontes e túneis para conectar estradas através de terreno acidentado, ou para desviar de obstáculos. Use o <a href="slopetools.txt">Editor de terrenos</a> para aplainar o relevo, possibilitando caminhos para as estradas. Use a ferramenta Eliminar para remover estradas e obstáculos. Use <a href="keys.txt">[Ctrl]</a> ao mesmo tempo para algumas funções adicionais.}
+</p>
+<p>
+<em>Construir atração aleatória:</em> constrói uma atração turística que passageiros vão querer visitar. Diferentes atrações geram quantidades diferentes de passageiros e correio. O tipo de atração construída é aleatório e somente aparece se houver espaço suficiente livre de obstáculos.<br>
+Para construir uma atração: clique na ferramenta para ativá-la (o cursor mudará para uma gota vermelha em um círculo amarelo), e clique na posição desejada na área de jogo.<br>
+{Dicas: use a ferramenta Eliminar jogando como Poder público para remover atrações. Use a ferramenta Eliminar e/ou o Editor de terrenos para criar lugares propícios para receber atrações.}
+</p>
+<p>
+<em>Construir usina de energia:</em> constrói uma usina de energia elétrica (e possíveis fornecedores). O tipo de usina de energia construído é aleatório e somente aparece se houver espaço suficiente livre de obstáculos.<br>
+Para construir uma usina: clique na ferramenta ou pressione [I] para ativá-la (o cursor mudará para uma gota vermelha em um círculo amarelo), e clique na posição desejada na área de jogo.<br>
+{Dicas: use a ferramenta Eliminar jogando como Poder público para remover as usinas de energia. Use a ferramenta Eliminar e/ou o Editor de terrenos para criar lugares propícios para receber usinas.}
+</p>
+<p>
+<em>Construir mercado:</em> constrói um consumidor-final de mercadorias em uma <a href="citywindow.txt">área urbana</a> (e possíveis fornecedores, não necessariamente na área urbana). O tipo de indústria construída é aleatório e somente aparece se houver espaço suficiente livre de obstáculos.<br>
+Para construir um mercado: clique na ferramenta para ativá-la (o cursor mudará para uma gota vermelha em um círculo amarelo), e clique na área de jogo para construir um mercado na área urbana mais próxima.<br>
+{Dicas: use a ferramenta Eliminar jogando como Poder público para remover os mercados. Use a ferramenta Eliminar e/ou o Editor de terrenos para criar lugares propícios para receber mercados.}
+</p>
+<p>
+<em>Proibir mudança de jogador:</em> remove a opção de atuar como outro <a href="players.txt">jogador</a> e abrir as ferramentas de <strong>Editor de mapa</strong>.<br>
+Para usá-la: clique na ferramenta para ativá-la (o cursor mudará para um cadeado), e clique em qualquer lugar na área de jogo, não é pedida confirmação ao jogador.
+</p>
+<p>
+<em>Pular linha do tempo em um ano:</em> avança a data no jogo em um ano. Se estiver jogando com <a href="new_world.txt">linha do tempo</a>, conforme o tempo passa mais opções de transporte e construção aparecem e veículos lentos deixam de ser tão lucrativos (a receita é calculada pela velocidade média do transporte disponível).<br>
+Para avançar no tempo: clique na ferramenta, não é pedida confirmação ao jogador (a data muda no lado direito da barra inferior da tela do jogo).
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/factorylist_filter.txt b/simutrans/text/pt/factorylist_filter.txt
index b2b710c..729d1ad 100644
--- a/simutrans/text/pt/factorylist_filter.txt
+++ b/simutrans/text/pt/factorylist_filter.txt
@@ -1,51 +1,51 @@
-<title>Ajuda - Lista das fábridas</title>
-
-<h1><strong>Lista das fábricas</strong></h1>
-
-<p>
-<strong>Lista das fábricas</strong> tem informações sobre todas as <a href="industry_info.txt">indústrias</a> (fornecedoras e consumidoras) durante o curso do jogo.
-</p>
-<p>
-Para abrir a <strong>Lista das fábricas</strong>: clique no botão da lista de fábricas em <a href="list.txt">Listas</a>.<br>
-{OBS: Se os itens só forem parcialmente visíveis, tente <a href="mouse.txt">redimensionar</a> a <strong>Listas de fábricas</strong> ou role a barra de barra de rolagem.}
-</p>
-<p>
-<em>Classificadas por:</em> têm a opção de determinar a ordem das indústrias.<br>
-Clique nos botões para alternar ordem (o nome do botão muda ao clicar):
-</p>
-<p>
-- <em>Nome da fábrica</em> lista de indústrias em ordem alfabética.<br>
-- <em>Entrada</em> ordenar por entrada de matéria-prima.<br>
-- <em>Saída</em> ordenar por saída de suplimentos.<br>
-- <em>Produção</em> ordenar por capacidade de produção.<br>
-- <em>Taxa</em> ordenar por barra de status (ver abaixo).<br>
-- <em>Potência</em> ordenar por suprimento de energia.
-</p>
-<p>
-- <em>Crescente</em> / <em>Decrescente</em> reverte a ordem da lista.
-</p>
-<p>
-Clique em um dos itens listados na <strong>Lista das fábricas</strong> para maiores <a href="industry_info.txt">informações</a> da indústria.
-<br>Os itens listados sobre a indústria incluem:
-</p>
-<p>
-<em>Barra de status</em> a cor indica a operação da indústria (também é usada na <a href="industry_info.txt">Informações das indústrias</a>):<br>
-- <em>branco:</em> não requer matéria-prima.<br>
-- <em>amarelo:</em> a indústria está conectada à rede de transporte, mas com fornecimento precário.<br>
-- <em>verde:</em> indústria em ótimo estado.<br>
-- <em>laranja:</em> operacional, mas pode ser melhorado.<br>
-- <em>vermelho:</em> operacional, mas parte da cadeia industrial tem suprimentos em excesso.
-</p>
-<p>
-<em>Ícone de relâmpago vermelho</em>, se presente, mostra que a indústria contém um suprimento de energia nos seus <a href="special.txt">transformadores</a>.
-</p>
-<p><em>Nome da indústria:</em> mostra o nome da <a href="industry_info.txt">indústria</a>.
-</p>
-<p>
-Entre parênteses, existem 3 valores que representam informações de entrada e saída:<br>
-<em>produtos entrando:</em> quantidade de matérias em estoque prontas a ser processadas.<br>
-<em>produtos saindo:</em> quantidade de produtos que já foram produzidos aguardando transporte.<br>
-<em>produção total:</em> mostra o quanto a indústria consegue produzir por dia.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Lista das fábridas</title>
+
+<h1><strong>Lista das fábricas</strong></h1>
+
+<p>
+<strong>Lista das fábricas</strong> tem informações sobre todas as <a href="industry_info.txt">indústrias</a> (fornecedoras e consumidoras) durante o curso do jogo.
+</p>
+<p>
+Para abrir a <strong>Lista das fábricas</strong>: clique no botão da lista de fábricas em <a href="list.txt">Listas</a>.<br>
+{OBS: Se os itens só forem parcialmente visíveis, tente <a href="mouse.txt">redimensionar</a> a <strong>Listas de fábricas</strong> ou role a barra de barra de rolagem.}
+</p>
+<p>
+<em>Classificadas por:</em> têm a opção de determinar a ordem das indústrias.<br>
+Clique nos botões para alternar ordem (o nome do botão muda ao clicar):
+</p>
+<p>
+- <em>Nome da fábrica</em> lista de indústrias em ordem alfabética.<br>
+- <em>Entrada</em> ordenar por entrada de matéria-prima.<br>
+- <em>Saída</em> ordenar por saída de suplimentos.<br>
+- <em>Produção</em> ordenar por capacidade de produção.<br>
+- <em>Taxa</em> ordenar por barra de status (ver abaixo).<br>
+- <em>Potência</em> ordenar por suprimento de energia.
+</p>
+<p>
+- <em>Crescente</em> / <em>Decrescente</em> reverte a ordem da lista.
+</p>
+<p>
+Clique em um dos itens listados na <strong>Lista das fábricas</strong> para maiores <a href="industry_info.txt">informações</a> da indústria.
+<br>Os itens listados sobre a indústria incluem:
+</p>
+<p>
+<em>Barra de status</em> a cor indica a operação da indústria (também é usada na <a href="industry_info.txt">Informações das indústrias</a>):<br>
+- <em>branco:</em> não requer matéria-prima.<br>
+- <em>amarelo:</em> a indústria está conectada à rede de transporte, mas com fornecimento precário.<br>
+- <em>verde:</em> indústria em ótimo estado.<br>
+- <em>laranja:</em> operacional, mas pode ser melhorado.<br>
+- <em>vermelho:</em> operacional, mas parte da cadeia industrial tem suprimentos em excesso.
+</p>
+<p>
+<em>Ícone de relâmpago vermelho</em>, se presente, mostra que a indústria contém um suprimento de energia nos seus <a href="special.txt">transformadores</a>.
+</p>
+<p><em>Nome da indústria:</em> mostra o nome da <a href="industry_info.txt">indústria</a>.
+</p>
+<p>
+Entre parênteses, existem 3 valores que representam informações de entrada e saída:<br>
+<em>produtos entrando:</em> quantidade de matérias em estoque prontas a ser processadas.<br>
+<em>produtos saindo:</em> quantidade de produtos que já foram produzidos aguardando transporte.<br>
+<em>produção total:</em> mostra o quanto a indústria consegue produzir por dia.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/finances.txt b/simutrans/text/pt/finances.txt
index 2e1e7ed..bab69f3 100644
--- a/simutrans/text/pt/finances.txt
+++ b/simutrans/text/pt/finances.txt
@@ -1,70 +1,70 @@
-<title>Ajuda - Finanças</title>
-
-<h1><strong>Finanças</strong></h1>
-
-<p>
-A janela de <strong>Finanças</strong> mostra como está o fluxo de caixa de sua empresa, mostra o quanto você gastou com veiculos, tranpostes e etc.
-</p>
-<p>
-Clique no ícone de dinheiro na parte superior de seu monitor, ou tecle <a href="keys.txt">[f]</a>, ou clique no nome de um <a href="players.txt">Jogador</a>, para abrir <strong>Finaças</strong>.
-</p>
-<p>
-Os valores estão em Hajo Credits, nessa janela você pode ver seu fluxo deste ano e do ano anterior.<br>
-<em>Este Ano:</em> ano atual do calendário do jogo (o ano é mostrado na parte inferior a esquerda do seu monitor).<br>
-<em>Ano passado:</em> ano anterior do calendário do jogo.
-</p>
-<p>
-Os valores anuais podem também ser vistos em um gráfico para os últimos doze anos, ou valores mensais para o ano passado.<br>
-Clique sobre o valor ou no botão de nome para mostrar o valor: O eixo vertical é a quantidade, o eixo horizontal é o tempo.<br>
-Clique nas abas para alterar os valores do gráfico<br>
-<em>Últimos 12 Anos:</em> mostra os valores anuais dos últimos doze anos do jogo.<br>
-<em>Últimos 12 Meses:</em> mostra os valores mensais dos últimos doze meses do jogo.
-</p>
-<p>
-Para ver os detalhes dos valores, clique nos botões dos valores para ver os detalhes no gráfico. Os valores incluem:
-</p>
-<p>
-<em>Faturamento</em> e <em>L. Elétricas</em> - renda total do transporte de passageiros, bens, correio e de <a href="special.txt">transmissão de energia</a>.
-</p>
-<p>
-<em>Operação</em> - custo total de todas as operações dos <a href="convoiinfo.txt">Comboios</a> quando em trânsito.<br>
-{OBS: A operação de quanto o comboio gastou por quilômetro pode se vista em <a href="depot.txt">depósitos</a> ou em Informações de Comboios.}
-</p>
-<p>
-<em>Manutenção</em> - custo total para manter a rede de transporte.<br>
-{OBS: O custo por o mês para manter a rede (<em>Manutenção (mês)</em> é mostrado na direita de <strong>Finanças</strong>) é deduzido no fim do mês de calendário do jogo.}
-</p>
-<p>
-<em>Lucro Operacional</em> - lucro com o transporte dos bens, passageiros o correio e a transmissão de energia (lucros menos custos de manutenção e operação).
-</p>
-<p>
-<em>Veículos Novos</em> - despesa e renda recebida da compra e da venda dos veículos.
-</p>
-<p>
-<em>Construção</em> - custo total gasto com construção de linhas da transmissão, redes do transporte, reflorestação, alta-voltagem, e de usar a ferramenta <a href="removal_tool.txt">Destruir/Remover</a> e outras ferramentas para remoção própria (canais, estradas, aeroporto, monotrilhos).
-</p>
-<p>
-<em>Fluxo de Caixa</em> - renda total menos despesa total (custos).
-</p>
-<p>
-<em>Vol. Transportado</em> - é o número total dos bens, dos passageiros e de correio transportados.
-</p>
-<p>
-<em>Balanço</em> - é o dinheiro atual disponível para a construção ou compra de veículos novos (mostrada também no centro da barra na parte inferior do monitor).<br>
-{OBS: Se o jogador humano está no vermelho (balanço negativo) por três meses seguidos, o jogado irá à falência e o jogo acaba}.
-</p>
-<p>
-<em>Valor dos Veículos</em> - é o valor de todos os veículos da companhia no fim do último mês do calendário.<br>
-{OBS: a cada mês, os valores dos veiculos caem ligeiramente, o valor de venda atual para os veículos pode ser visto dentro de <a href="convoidetail.txt">Detalhes do Comboio</a> ou quando o veiculo está no depósito.}
-</p>
-<p>
-<em>Margem (%)</em> - é a relação do lucro operacional aos rendimentos.
-</p>
-<p>
-<em>Ativos</em> - é a soma entre Balanço e Valor dos Veículos.
-</p>
-<p>
-{OBS: Alguns custos, valor inicial do balanço e as finanças no jogo podem ser mudados dentro do simuconf.tab}
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Finanças</title>
+
+<h1><strong>Finanças</strong></h1>
+
+<p>
+A janela de <strong>Finanças</strong> mostra como está o fluxo de caixa de sua empresa, mostra o quanto você gastou com veiculos, tranpostes e etc.
+</p>
+<p>
+Clique no ícone de dinheiro na parte superior de seu monitor, ou tecle <a href="keys.txt">[f]</a>, ou clique no nome de um <a href="players.txt">Jogador</a>, para abrir <strong>Finaças</strong>.
+</p>
+<p>
+Os valores estão em Hajo Credits, nessa janela você pode ver seu fluxo deste ano e do ano anterior.<br>
+<em>Este Ano:</em> ano atual do calendário do jogo (o ano é mostrado na parte inferior a esquerda do seu monitor).<br>
+<em>Ano passado:</em> ano anterior do calendário do jogo.
+</p>
+<p>
+Os valores anuais podem também ser vistos em um gráfico para os últimos doze anos, ou valores mensais para o ano passado.<br>
+Clique sobre o valor ou no botão de nome para mostrar o valor: O eixo vertical é a quantidade, o eixo horizontal é o tempo.<br>
+Clique nas abas para alterar os valores do gráfico<br>
+<em>Últimos 12 Anos:</em> mostra os valores anuais dos últimos doze anos do jogo.<br>
+<em>Últimos 12 Meses:</em> mostra os valores mensais dos últimos doze meses do jogo.
+</p>
+<p>
+Para ver os detalhes dos valores, clique nos botões dos valores para ver os detalhes no gráfico. Os valores incluem:
+</p>
+<p>
+<em>Faturamento</em> e <em>L. Elétricas</em> - renda total do transporte de passageiros, bens, correio e de <a href="special.txt">transmissão de energia</a>.
+</p>
+<p>
+<em>Operação</em> - custo total de todas as operações dos <a href="convoiinfo.txt">Comboios</a> quando em trânsito.<br>
+{OBS: A operação de quanto o comboio gastou por quilômetro pode se vista em <a href="depot.txt">depósitos</a> ou em Informações de Comboios.}
+</p>
+<p>
+<em>Manutenção</em> - custo total para manter a rede de transporte.<br>
+{OBS: O custo por o mês para manter a rede (<em>Manutenção (mês)</em> é mostrado na direita de <strong>Finanças</strong>) é deduzido no fim do mês de calendário do jogo.}
+</p>
+<p>
+<em>Lucro Operacional</em> - lucro com o transporte dos bens, passageiros o correio e a transmissão de energia (lucros menos custos de manutenção e operação).
+</p>
+<p>
+<em>Veículos Novos</em> - despesa e renda recebida da compra e da venda dos veículos.
+</p>
+<p>
+<em>Construção</em> - custo total gasto com construção de linhas da transmissão, redes do transporte, reflorestação, alta-voltagem, e de usar a ferramenta <a href="removal_tool.txt">Destruir/Remover</a> e outras ferramentas para remoção própria (canais, estradas, aeroporto, monotrilhos).
+</p>
+<p>
+<em>Fluxo de Caixa</em> - renda total menos despesa total (custos).
+</p>
+<p>
+<em>Vol. Transportado</em> - é o número total dos bens, dos passageiros e de correio transportados.
+</p>
+<p>
+<em>Balanço</em> - é o dinheiro atual disponível para a construção ou compra de veículos novos (mostrada também no centro da barra na parte inferior do monitor).<br>
+{OBS: Se o jogador humano está no vermelho (balanço negativo) por três meses seguidos, o jogado irá à falência e o jogo acaba}.
+</p>
+<p>
+<em>Valor dos Veículos</em> - é o valor de todos os veículos da companhia no fim do último mês do calendário.<br>
+{OBS: a cada mês, os valores dos veiculos caem ligeiramente, o valor de venda atual para os veículos pode ser visto dentro de <a href="convoidetail.txt">Detalhes do Comboio</a> ou quando o veiculo está no depósito.}
+</p>
+<p>
+<em>Margem (%)</em> - é a relação do lucro operacional aos rendimentos.
+</p>
+<p>
+<em>Ativos</em> - é a soma entre Balanço e Valor dos Veículos.
+</p>
+<p>
+{OBS: Alguns custos, valor inicial do balanço e as finanças no jogo podem ser mudados dentro do simuconf.tab}
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/general.txt b/simutrans/text/pt/general.txt
index ab9fd50..89ea421 100644
--- a/simutrans/text/pt/general.txt
+++ b/simutrans/text/pt/general.txt
@@ -1,97 +1,97 @@
-<title>Ajuda do Simutrans</title>
-
-<h1><strong>Ajuda geral</strong></h1><br>
-- <a href="simutrans.txt">Bem-vindo</a><br>
-- <a href="window.txt">Interface/janela do jogo</a><br>
-- <a href="mouse.txt">Mouse</a><br>
-- <a href="keys.txt">Configuração do teclado</a>
-<p>
-<a href="options.txt"><strong>Preferências</strong></a><br>
-- <a href="language.txt">Idioma</a><br>
-- <a href="color.txt">Cor do jogador</a><br>
-- <a href="display.txt">Vídeo</a><br>
-- <a href="sound.txt">Ajustes de som</a><br>
-- <a href="players.txt">Jogadores</a><br>
-- <a href="load.txt">Carregar jogo</a><br>
-- <a href="save.txt">Salvar jogo</a><br>
-- <a href="new_world.txt">Novo jogo</a><br>
-- - <a href="load_relief.txt">Carregar mapa</a>
-</p>
-<p>
-<a href="window.txt"><strong>Menu principal</strong></a><br>
-- <a href="options.txt">Preferências</a><br>
-- <a href="map.txt">Mapa</a><br>
-- <a href="inspection_tool.txt">Ferramenta de verificação</a><br>
-- <a href="slopetools.txt">Editor de terrenos</a><br>
-- <a href="railtools.txt">Ferrovias</a><br>
-- <a href="monorailtools.txt">Monotrilhos e Maglevs</a><br>
-- <a href="tramtools.txt">Bondes</a><br>
-- <a href="roadtools.txt">Estradas</a><br>
-- <a href="shiptools.txt">Navegação</a><br>
-- <a href="airtools.txt">Aeroportos</a><br>
-- <a href="special.txt">Ferramentas especiais</a><br>
-- - <a href="edittools.txt">Editor de mapa</a><br>
-- <a href="removal_tool.txt">Ferramenta Eliminar</a>
-</p>
-<p>
-<a href="window.txt"><strong>Opções de Gerenciamento</strong></a><br>
-- <a href="linemanagement.txt">Gerenciador de linhas</a><br>
-- <a href="list.txt">Listas</a><br>
-- - <a href="haltlist.txt">Lista de paradas</a><br>
-- - - <a href="haltlist_filter.txt">Filtro da lista de paradas</a><br>
-- - <a href="convoi.txt">Lista de veículos</a><br>
-- - - <a href="convoi_filter.txt">Filtro da lista de veículos</a><br>
-- - <a href="citylist_filter.txt">Lista das cidades</a><br>
-- - <a href="goods_filter.txt">Lista das cargas</a><br>
-- - <a href="factorylist_filter.txt">Lista das fábricas</a><br>
-- - <a href="curiositylist_filter.txt">Lista das atrações</a><br>
-- <a href="mailbox.txt">Mensagens</a><br>
-- <a href="finances.txt">Finanças</a>
-</p>
-<p>
-<a href="window.txt"><strong>Outras opções</strong></a><br>
-- <a href="window.txt">Salvar imagem da tela</a><br>
-- <a href="window.txt">Pausa</a><br>
-- <a href="window.txt">Avanço rápido</a><br>
-- <a href="window.txt">Ajuda</a>
-</p>
-<p>
-<a href="inspection_tool.txt"><strong>Outros diálogos</strong></a><br>
--<a href="depot.txt">Depósitos</a><br>
--<a href="schedule.txt">Programação de veículos</a><br>
-- <a href="station.txt">Informações das estações</a><br>
-- - <a href="station_details.txt">Detalhes da parada</a><br>
-- <a href="convoiinfo.txt">Informações do comboio</a><br>
-- - <a href="convoidetail.txt">Detalhes de comboio/veículo</a><br>
-- <a href="citywindow.txt">Estatísticas da cidade</a><br>
-- <a href="industry_info.txt">Informações das indústrias</a>
-</p>
-<p>
-Se você não encontrou aqui a ajuda que procura, então tente:<br>
-<em>http://guide.simutrans.com</em>, ou<br>
-<em>http://wiki.simutrans.com</em>, ou<br>
-<em>http://simutrans-tips.com</em>, ou<br>
-<em>http://forum.simutrans.com</em>, ou<br>
-<em>http://pt.simutrans.com</em>.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008, atualizado em 07/02/2008.
-</p>
-<p>
-<strong>Equipe de tradução do Simutrans PT-SubFórum</strong>
-<p>
-Nossa equipe em 17/01/2008, em ordem alfabética:
-</p>
-</p>
-Caio R. Monteiro<br>
-DanielRS<br>
-ecostaoli<br>
-FaconBill<br>
-Fire_wolf_br<br>
-Francisco Gonçalves<br>
-haspwolf<br>
-IgorTekton<br>
-Silcorfa
-</p>
-<p>
-Quaquer problema, dúvida ou sugestão em nossas traduções, contacte-nos pelo <em>http://pt.simutrans.com</em>.
+<title>Ajuda do Simutrans</title>
+
+<h1><strong>Ajuda geral</strong></h1><br>
+- <a href="simutrans.txt">Bem-vindo</a><br>
+- <a href="window.txt">Interface/janela do jogo</a><br>
+- <a href="mouse.txt">Mouse</a><br>
+- <a href="keys.txt">Configuração do teclado</a>
+<p>
+<a href="options.txt"><strong>Preferências</strong></a><br>
+- <a href="language.txt">Idioma</a><br>
+- <a href="color.txt">Cor do jogador</a><br>
+- <a href="display.txt">Vídeo</a><br>
+- <a href="sound.txt">Ajustes de som</a><br>
+- <a href="players.txt">Jogadores</a><br>
+- <a href="load.txt">Carregar jogo</a><br>
+- <a href="save.txt">Salvar jogo</a><br>
+- <a href="new_world.txt">Novo jogo</a><br>
+- - <a href="load_relief.txt">Carregar mapa</a>
+</p>
+<p>
+<a href="window.txt"><strong>Menu principal</strong></a><br>
+- <a href="options.txt">Preferências</a><br>
+- <a href="map.txt">Mapa</a><br>
+- <a href="inspection_tool.txt">Ferramenta de verificação</a><br>
+- <a href="slopetools.txt">Editor de terrenos</a><br>
+- <a href="railtools.txt">Ferrovias</a><br>
+- <a href="monorailtools.txt">Monotrilhos e Maglevs</a><br>
+- <a href="tramtools.txt">Bondes</a><br>
+- <a href="roadtools.txt">Estradas</a><br>
+- <a href="shiptools.txt">Navegação</a><br>
+- <a href="airtools.txt">Aeroportos</a><br>
+- <a href="special.txt">Ferramentas especiais</a><br>
+- - <a href="edittools.txt">Editor de mapa</a><br>
+- <a href="removal_tool.txt">Ferramenta Eliminar</a>
+</p>
+<p>
+<a href="window.txt"><strong>Opções de Gerenciamento</strong></a><br>
+- <a href="linemanagement.txt">Gerenciador de linhas</a><br>
+- <a href="list.txt">Listas</a><br>
+- - <a href="haltlist.txt">Lista de paradas</a><br>
+- - - <a href="haltlist_filter.txt">Filtro da lista de paradas</a><br>
+- - <a href="convoi.txt">Lista de veículos</a><br>
+- - - <a href="convoi_filter.txt">Filtro da lista de veículos</a><br>
+- - <a href="citylist_filter.txt">Lista das cidades</a><br>
+- - <a href="goods_filter.txt">Lista das cargas</a><br>
+- - <a href="factorylist_filter.txt">Lista das fábricas</a><br>
+- - <a href="curiositylist_filter.txt">Lista das atrações</a><br>
+- <a href="mailbox.txt">Mensagens</a><br>
+- <a href="finances.txt">Finanças</a>
+</p>
+<p>
+<a href="window.txt"><strong>Outras opções</strong></a><br>
+- <a href="window.txt">Salvar imagem da tela</a><br>
+- <a href="window.txt">Pausa</a><br>
+- <a href="window.txt">Avanço rápido</a><br>
+- <a href="window.txt">Ajuda</a>
+</p>
+<p>
+<a href="inspection_tool.txt"><strong>Outros diálogos</strong></a><br>
+-<a href="depot.txt">Depósitos</a><br>
+-<a href="schedule.txt">Programação de veículos</a><br>
+- <a href="station.txt">Informações das estações</a><br>
+- - <a href="station_details.txt">Detalhes da parada</a><br>
+- <a href="convoiinfo.txt">Informações do comboio</a><br>
+- - <a href="convoidetail.txt">Detalhes de comboio/veículo</a><br>
+- <a href="citywindow.txt">Estatísticas da cidade</a><br>
+- <a href="industry_info.txt">Informações das indústrias</a>
+</p>
+<p>
+Se você não encontrou aqui a ajuda que procura, então tente:<br>
+<em>http://guide.simutrans.com</em>, ou<br>
+<em>http://wiki.simutrans.com</em>, ou<br>
+<em>http://simutrans-tips.com</em>, ou<br>
+<em>http://forum.simutrans.com</em>, ou<br>
+<em>http://pt.simutrans.com</em>.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008, atualizado em 07/02/2008.
+</p>
+<p>
+<strong>Equipe de tradução do Simutrans PT-SubFórum</strong>
+<p>
+Nossa equipe em 17/01/2008, em ordem alfabética:
+</p>
+</p>
+Caio R. Monteiro<br>
+DanielRS<br>
+ecostaoli<br>
+FaconBill<br>
+Fire_wolf_br<br>
+Francisco Gonçalves<br>
+haspwolf<br>
+IgorTekton<br>
+Silcorfa
+</p>
+<p>
+Quaquer problema, dúvida ou sugestão em nossas traduções, contacte-nos pelo <em>http://pt.simutrans.com</em>.
 </p>
diff --git a/simutrans/text/pt/goods_filter.txt b/simutrans/text/pt/goods_filter.txt
index 0174dfa..b243147 100644
--- a/simutrans/text/pt/goods_filter.txt
+++ b/simutrans/text/pt/goods_filter.txt
@@ -1,56 +1,56 @@
-<title>Ajuda - Lista das cargas</title>
-
-<h1><strong>Lista das cargas</strong></h1>
-
-<p>
-A lista de <strong>Lista das cargas</strong> contém informações sobre itens variados que podem ser transportados no jogo e tem controles para mudar o lucro recebido do transporte das cargas.
-</p>
-<p>
-Para abrir: clique no botão das Lista das cargas nas <a href="list.txt">Listas</a> ou aperte a tecla <a href="keys.txt">[G]</a>.
-</p>
-<p>
-Uma lista de itens disponíveis para transporte no jogo indica: renda recebida, bônus de velocidade (medido em %), categoria das cargas e peso.<br>
-{Dica: Se os itens na lista são apenas parcialmente visíveis, então <a href="mouse.txt">reajuste o tamanho</a> da janela <strong>Lista das cargas</strong> ou desça a lista usando a barra de rolagem.}
-</p>
-<p>
-<em>Bônus a partir de</em>: mostra a velocidade necessária para os diferentes tipos de transportes, os quais um <a href="convoiinfo.txt">Comboio</a> precisa ser capaz de alcançar para receber renda extra pelo transporte rápido de mercadorias e passageiros (ou em alguns casos uma penalidade em dinheiro, se for muito devagar).<br>
-Se estiver jogando com a <a href="new_world.txt">linha do tempo</a> ativada, com o passar do tempo no Simutrans essas velocidades necessárias mudam com a introdução de novos veículos.<br>
-Os botões-setas ajustam o lucro recebido e a velocidade que o Comboio precisa alcançar para receber o bônus (ou receber uma penalidade caso o Comboio seja muito lento).
-</p>
-<p>
-<em>Classificadas por:</em> oferece opções para determinar a ordem dos itens mostrados na lista.<br>
-Clique nos botões abaixo para escolher uma das opções (a opção ativada no momento tem o seu nome mostrado no botão):
-</p>
-<p>
-- <em>Sem ordem</em> classifica em uma ordem aleatória.<br>
-- <em>Nome</em> classifica em ordem alfabética.<br>
-- <em>Valor</em> classifica pelo lucro recebido pelo transporte de uma unidade das cargas por um quadrado do jogo.<br>
-- <em>Bônus</em> classifica pela porcentagem de bônus de velocidade (a porcentagem de lucro extra recebida se o <a href="convoiinfo.txt">Comboio</a> é capaz de alcançar a velocidade necessária para ter direito a essa porcentagem).
-</p>
-<p>
-- <em>Crescente</em> / <em>Decrescente</em> inverte a ordem na lista.
-</p>
-<p>
-Os detalhes listados para cada item incluem:
-</p>
-<p>
-A <em>cor do quadrado</em> é a mesma cor mostrada nas barras coloridas das cargas na visão do jogo sobre uma <a href="station.txt">Parada</a> para indicar a quantidade de itens que aguardam pelo transporte.<br>
-{Dica: Pressione [!] para ativar ou desativar as barras coloridas das cargas sobre uma Parada na visão do jogo.}
-</p>
-<p>
-O <em>valor</em> é a renda recebida pelo transporte de uma unidade daquela carga por um quadrado do jogo.<br>
-{Dica: Use o <a href="new_world.txt">modo iniciante</a> para aumentar os lucros em 150% (pode ser alterado no simuconf.tab)}
-</p>
-<p>
-A <em>porcentagem</em> é a porcentagem de lucro extra recebido caso o <a href="convoiinfo.txt">Comboio</a> utilizado seja capaz de transportar a carga na velocidade necessária para ganhar o bônus (ou em alguns casos em penalidade, caso o Comboio seja muito lento).<br>
-A fórmula usada para calcular o lucro é muito complexa e consideraa velocidade máxima de um Comboio com a média da velocidade máxima dos outros veículos (e não apenas do veículo visto no jogo).
-</p>
-<p>
-A <em>categoria da carga</em> indica o tipo de veículo necessário para o transporte daquela carga. Cargas especiais precisam de veículos específicos.<br>
-{Dica: A <a href="depot.txt">capacidade</a> dos veículos mostra quais itens um veículo pode transportar}.
-</p>
-<p>
-O <em>peso</em> mostrado é de uma unidade da carga em quilogramas.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 07/02/2008.
+<title>Ajuda - Lista das cargas</title>
+
+<h1><strong>Lista das cargas</strong></h1>
+
+<p>
+A lista de <strong>Lista das cargas</strong> contém informações sobre itens variados que podem ser transportados no jogo e tem controles para mudar o lucro recebido do transporte das cargas.
+</p>
+<p>
+Para abrir: clique no botão das Lista das cargas nas <a href="list.txt">Listas</a> ou aperte a tecla <a href="keys.txt">[G]</a>.
+</p>
+<p>
+Uma lista de itens disponíveis para transporte no jogo indica: renda recebida, bônus de velocidade (medido em %), categoria das cargas e peso.<br>
+{Dica: Se os itens na lista são apenas parcialmente visíveis, então <a href="mouse.txt">reajuste o tamanho</a> da janela <strong>Lista das cargas</strong> ou desça a lista usando a barra de rolagem.}
+</p>
+<p>
+<em>Bônus a partir de</em>: mostra a velocidade necessária para os diferentes tipos de transportes, os quais um <a href="convoiinfo.txt">Comboio</a> precisa ser capaz de alcançar para receber renda extra pelo transporte rápido de mercadorias e passageiros (ou em alguns casos uma penalidade em dinheiro, se for muito devagar).<br>
+Se estiver jogando com a <a href="new_world.txt">linha do tempo</a> ativada, com o passar do tempo no Simutrans essas velocidades necessárias mudam com a introdução de novos veículos.<br>
+Os botões-setas ajustam o lucro recebido e a velocidade que o Comboio precisa alcançar para receber o bônus (ou receber uma penalidade caso o Comboio seja muito lento).
+</p>
+<p>
+<em>Classificadas por:</em> oferece opções para determinar a ordem dos itens mostrados na lista.<br>
+Clique nos botões abaixo para escolher uma das opções (a opção ativada no momento tem o seu nome mostrado no botão):
+</p>
+<p>
+- <em>Sem ordem</em> classifica em uma ordem aleatória.<br>
+- <em>Nome</em> classifica em ordem alfabética.<br>
+- <em>Valor</em> classifica pelo lucro recebido pelo transporte de uma unidade das cargas por um quadrado do jogo.<br>
+- <em>Bônus</em> classifica pela porcentagem de bônus de velocidade (a porcentagem de lucro extra recebida se o <a href="convoiinfo.txt">Comboio</a> é capaz de alcançar a velocidade necessária para ter direito a essa porcentagem).
+</p>
+<p>
+- <em>Crescente</em> / <em>Decrescente</em> inverte a ordem na lista.
+</p>
+<p>
+Os detalhes listados para cada item incluem:
+</p>
+<p>
+A <em>cor do quadrado</em> é a mesma cor mostrada nas barras coloridas das cargas na visão do jogo sobre uma <a href="station.txt">Parada</a> para indicar a quantidade de itens que aguardam pelo transporte.<br>
+{Dica: Pressione [!] para ativar ou desativar as barras coloridas das cargas sobre uma Parada na visão do jogo.}
+</p>
+<p>
+O <em>valor</em> é a renda recebida pelo transporte de uma unidade daquela carga por um quadrado do jogo.<br>
+{Dica: Use o <a href="new_world.txt">modo iniciante</a> para aumentar os lucros em 150% (pode ser alterado no simuconf.tab)}
+</p>
+<p>
+A <em>porcentagem</em> é a porcentagem de lucro extra recebido caso o <a href="convoiinfo.txt">Comboio</a> utilizado seja capaz de transportar a carga na velocidade necessária para ganhar o bônus (ou em alguns casos em penalidade, caso o Comboio seja muito lento).<br>
+A fórmula usada para calcular o lucro é muito complexa e consideraa velocidade máxima de um Comboio com a média da velocidade máxima dos outros veículos (e não apenas do veículo visto no jogo).
+</p>
+<p>
+A <em>categoria da carga</em> indica o tipo de veículo necessário para o transporte daquela carga. Cargas especiais precisam de veículos específicos.<br>
+{Dica: A <a href="depot.txt">capacidade</a> dos veículos mostra quais itens um veículo pode transportar}.
+</p>
+<p>
+O <em>peso</em> mostrado é de uma unidade da carga em quilogramas.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 07/02/2008.
 </p>
diff --git a/simutrans/text/pt/haltlist.txt b/simutrans/text/pt/haltlist.txt
index fa19f89..fbc0264 100644
--- a/simutrans/text/pt/haltlist.txt
+++ b/simutrans/text/pt/haltlist.txt
@@ -1,53 +1,53 @@
-<title>Ajuda - Lista de paradas</title>
-
-<h1><strong>Lista de paradas</strong></h1>
-
-<p>
-A <strong>Lista de paradas</strong> mostra todas as estações, pontos de ônibus e terminais de carga do jogo, além de ter controles para filtrar essas <a href="station.txt">paradas</a>. NOTA: as paradas que são somente aquáticas, como as plataformas de petróleo, não são listadas aqui!
-</p>
-<p>
-Para abrir: clique no botão <a href="list.txt">"Listas"</a>, e na barra que se abrir, no botão "Lista de Paradas".
-A <strong>Lista de paradas</strong> tem quatro botões: dois são utilizados para ordenar os itens e dois são utilizados na filtragem deles. Abaixo desses botões, vem a lista de <a href="station.txt">paradas</a> propriamente dita, com os itens que obedeçam aos critérios de filtragem já estabelecidos.
-(Dicas: Se nenhuma  parada estiver listada, modifique as opções de <em>filtragem.</em>. Caso os itens apareçam parcialmente, então use o <a href="mouse.txt">mouse/rato</a> para redimensionar a <strong>Lista de Paradas</strong> ou para deslocar a lista com a barra de rolagem.)
-</p>
-<p>
-Ao clicar nos botões, vão-se modificando as opções que eles contêm:
-</p>
-<p>
-O botão mais à esquerda diz o critério de ordenamento da lista:<br>
-- <em>Nome</em>: ordena segundo o código ASCII: primeiro todas as letras maiúsculas, depois todas as minúsculas, em seguida as acentuadas.<br>
-- <em>Espera:</em> Ordena pela quantidade de passageiros ou mercadorias aguardando ser transportada<br>
-- <em>Tipo:</em> Ordena pelo tipo de veículo que é aceito pela parada<br>
-- <em>Sem ordem:</em>Ordena aleatoriamente.
-</p>
-<p>
-O segundo botão define se a classificação é <em>crescente</em> ou <em>decrescente</em>.<br>
-O terceiro botão define se o filtro está <em>ligado</em> ou <em>desligado</em>.<br>
-O quarto abre a janela do <a href="haltlist_filter.txt">Filtro da Lista de Paradas.</a>
-</p>
-<p>
-Clicando em um item na <strong>Lista de paradas</strong>, obtêm-se maiores  <a href="station.txt">informações</a> sobre aquela parada.<br>
-Os dados listados por parada são:
-</p>
-<p>
-<em>Estado:</em> Barra colorida onde cada cor indica o estado da parada, com relação à lotação. A mesma cor é exibida nas Informações da Parada, no <a href="linemanagement.txt">Gerenciador de Linhas</a> e na barra acima do nome da parada que se vê no jogo:<br>
-- <em>amarelo:</em> parada sem atendimento; nenhum veículo a utiliza.<br>
-- <em>verde:</em> não é necessário melhorar o atendimento; a parada não lota.<br>
-- <em>laranja:</em> alguma melhoria é necessária.<br>
-- <em>vermelho:</em> é necessário melhorar o atendimento urgentemente.<br>
-(Dica: para ver as cores do estado do serviço no jogo, clique em (!) até que apareça.)
-</p>
-<p>
-<em>Nome</em> da parada. (Dica: é possível auto-numerar as paradas utilizando uma opção no arquivo simuconf.tab)
-</p>
-<p>
-<em>Ícones de veículos</em> que indicam quais são os veículos aceitos na parada: ônibus/autocarro, caminhão/camião, trem/comboio, barco/navio e avião. Bondes/eléctricos são ora representados pelo símbolo de ônibus/autocarro, ora pelo de trem/comboio, conforme o tipo original da parada.
-</p>
-<p>
-<em>Ícones de carga</em> que indicam o tipo de carga que a parada aceita. Podem ser passageiros, carga propriamente dita e correio. (Dica: há alguns tipos de plataforma que não aceitam nenhum tipo de carga por si sós, sendo necessário acoplar ou um quadro de um tipo de plataforma que aceite a carga desejada, ou  uma extensão que aceite a carga. Para adicionar um novo tipo de carga à parada, é necessário acoplar um quadro de plataforma ou de extensão que aceite a caraga desejada. Para transportar correio, acople uma Agência Postal.)
-</p>
-<p>
-Na <em>segunda linha</em> vêm os detalhes das diversas cargas esperando na parada.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Lista de paradas</title>
+
+<h1><strong>Lista de paradas</strong></h1>
+
+<p>
+A <strong>Lista de paradas</strong> mostra todas as estações, pontos de ônibus e terminais de carga do jogo, além de ter controles para filtrar essas <a href="station.txt">paradas</a>. NOTA: as paradas que são somente aquáticas, como as plataformas de petróleo, não são listadas aqui!
+</p>
+<p>
+Para abrir: clique no botão <a href="list.txt">"Listas"</a>, e na barra que se abrir, no botão "Lista de Paradas".
+A <strong>Lista de paradas</strong> tem quatro botões: dois são utilizados para ordenar os itens e dois são utilizados na filtragem deles. Abaixo desses botões, vem a lista de <a href="station.txt">paradas</a> propriamente dita, com os itens que obedeçam aos critérios de filtragem já estabelecidos.
+(Dicas: Se nenhuma  parada estiver listada, modifique as opções de <em>filtragem.</em>. Caso os itens apareçam parcialmente, então use o <a href="mouse.txt">mouse/rato</a> para redimensionar a <strong>Lista de Paradas</strong> ou para deslocar a lista com a barra de rolagem.)
+</p>
+<p>
+Ao clicar nos botões, vão-se modificando as opções que eles contêm:
+</p>
+<p>
+O botão mais à esquerda diz o critério de ordenamento da lista:<br>
+- <em>Nome</em>: ordena segundo o código ASCII: primeiro todas as letras maiúsculas, depois todas as minúsculas, em seguida as acentuadas.<br>
+- <em>Espera:</em> Ordena pela quantidade de passageiros ou mercadorias aguardando ser transportada<br>
+- <em>Tipo:</em> Ordena pelo tipo de veículo que é aceito pela parada<br>
+- <em>Sem ordem:</em>Ordena aleatoriamente.
+</p>
+<p>
+O segundo botão define se a classificação é <em>crescente</em> ou <em>decrescente</em>.<br>
+O terceiro botão define se o filtro está <em>ligado</em> ou <em>desligado</em>.<br>
+O quarto abre a janela do <a href="haltlist_filter.txt">Filtro da Lista de Paradas.</a>
+</p>
+<p>
+Clicando em um item na <strong>Lista de paradas</strong>, obtêm-se maiores  <a href="station.txt">informações</a> sobre aquela parada.<br>
+Os dados listados por parada são:
+</p>
+<p>
+<em>Estado:</em> Barra colorida onde cada cor indica o estado da parada, com relação à lotação. A mesma cor é exibida nas Informações da Parada, no <a href="linemanagement.txt">Gerenciador de Linhas</a> e na barra acima do nome da parada que se vê no jogo:<br>
+- <em>amarelo:</em> parada sem atendimento; nenhum veículo a utiliza.<br>
+- <em>verde:</em> não é necessário melhorar o atendimento; a parada não lota.<br>
+- <em>laranja:</em> alguma melhoria é necessária.<br>
+- <em>vermelho:</em> é necessário melhorar o atendimento urgentemente.<br>
+(Dica: para ver as cores do estado do serviço no jogo, clique em (!) até que apareça.)
+</p>
+<p>
+<em>Nome</em> da parada. (Dica: é possível auto-numerar as paradas utilizando uma opção no arquivo simuconf.tab)
+</p>
+<p>
+<em>Ícones de veículos</em> que indicam quais são os veículos aceitos na parada: ônibus/autocarro, caminhão/camião, trem/comboio, barco/navio e avião. Bondes/eléctricos são ora representados pelo símbolo de ônibus/autocarro, ora pelo de trem/comboio, conforme o tipo original da parada.
+</p>
+<p>
+<em>Ícones de carga</em> que indicam o tipo de carga que a parada aceita. Podem ser passageiros, carga propriamente dita e correio. (Dica: há alguns tipos de plataforma que não aceitam nenhum tipo de carga por si sós, sendo necessário acoplar ou um quadro de um tipo de plataforma que aceite a carga desejada, ou  uma extensão que aceite a carga. Para adicionar um novo tipo de carga à parada, é necessário acoplar um quadro de plataforma ou de extensão que aceite a caraga desejada. Para transportar correio, acople uma Agência Postal.)
+</p>
+<p>
+Na <em>segunda linha</em> vêm os detalhes das diversas cargas esperando na parada.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/haltlist_filter.txt b/simutrans/text/pt/haltlist_filter.txt
index 1606893..6415af1 100644
--- a/simutrans/text/pt/haltlist_filter.txt
+++ b/simutrans/text/pt/haltlist_filter.txt
@@ -1,39 +1,39 @@
-<title>Ajuda - Filtro da Lista de Paradas</title>
-
-<h1><strong>Filtro da Lista de Paradas</strong></h1>
-<p>
-O <strong>Filtro da Lista de Paradas</strong> tem as opções para determinar quais <a href="station.txt">paradas</a>, onde os veículos acolhem e deixam passageiros e mercadorias, são mostradas na <a href="haltlist.txt">Lista de Paradas</a>.  (Isso só vale para paradas que não sejam exclusivas de veículos de transporte na água).
-</p>
-<p>
-Para acessar o filtro, clique sobre o botão Parâmetros na <a href="haltlist.txt">Lista de Paradas</a> para abrir o <strong>Filtro da Lista de Paradas</strong>.
-</p>
-<p>
-Os botões de opção limitam as <a href="station.txt">paradas</a> que serão listadas na <a href="haltlist.txt">Lista de Paradas</a> conforme o filtro desejado. Somente serão listadas as paradas que caibam em todos os critérios selecionados.
-</p>
-<p>
-Clique sobre um botão para selecionar critérios para a filtragem (o botão fica afundado quando selecionado):
-</p>
-<p>
-<em>Filtro por nome:</em> seleciona <a href="station.txt">paradas</a> pelo nome. Para usá-lo, clique sobre o botão para ativar o filtro, e clique então sobre a caixa de nome e digite o nome da parada exatamente. (a opção é sensível a maiúsculas e minúsculas (ou caixa alta e baixa) ).
-</p>
-<p>
-<em>Filtro por tipo:</em> listará as <a href="station.txt">paradas</a> que atendem a pelo menos um dos tipos de veículos selecionados. Para usá-lo,  clicar sobre os botões com os nomes do tipos de veículo. (Apenas as paradas exclusivas para veículos de transporte na água não são listados na lista da paradas)
-</p>
-<p>
-<em>Filtro especial:</em><br>
-- <em>lotadas:</em> não está funcionando.<br>
-- <em>não conectadas</em> seleciona <a href="station.txt">paradas</a> com nenhum serviço de transporte.
-</p>
-<p>
-<em>Necessidade:</em> Seleciona as <a href="station.txt">paradas</a> de acordo com as necessidades das indústrias próximas. Use a <a href="mouse.txt">barra de rolagem</a> para rolar pela lista dos artigos. As opções incluem:<br>
- - <em>tudo</em> seleciona todos os artigos.<br>
- - <em>nada</em> desfaz todas as seleções.<br>
- - <em>inv.</em> inverte a seleção atual.
-</p>
-<p>
-<em>Produção:</em> Seleciona as <a href="station.txt">paradas</a> de acordo com os produtos das indútrias próximas. Use a <a href="mouse.txt">barra de rolagem</a> para rolar pela lista dos artigos. As opções incluem:<br>
- - <em>tudo</em> seleciona todos os artigos.<br>
- - <em>nada</em> desfaz todas as seleções.<br>
- - <em>inv.</em> inverte a seleção atual. </p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Filtro da Lista de Paradas</title>
+
+<h1><strong>Filtro da Lista de Paradas</strong></h1>
+<p>
+O <strong>Filtro da Lista de Paradas</strong> tem as opções para determinar quais <a href="station.txt">paradas</a>, onde os veículos acolhem e deixam passageiros e mercadorias, são mostradas na <a href="haltlist.txt">Lista de Paradas</a>.  (Isso só vale para paradas que não sejam exclusivas de veículos de transporte na água).
+</p>
+<p>
+Para acessar o filtro, clique sobre o botão Parâmetros na <a href="haltlist.txt">Lista de Paradas</a> para abrir o <strong>Filtro da Lista de Paradas</strong>.
+</p>
+<p>
+Os botões de opção limitam as <a href="station.txt">paradas</a> que serão listadas na <a href="haltlist.txt">Lista de Paradas</a> conforme o filtro desejado. Somente serão listadas as paradas que caibam em todos os critérios selecionados.
+</p>
+<p>
+Clique sobre um botão para selecionar critérios para a filtragem (o botão fica afundado quando selecionado):
+</p>
+<p>
+<em>Filtro por nome:</em> seleciona <a href="station.txt">paradas</a> pelo nome. Para usá-lo, clique sobre o botão para ativar o filtro, e clique então sobre a caixa de nome e digite o nome da parada exatamente. (a opção é sensível a maiúsculas e minúsculas (ou caixa alta e baixa) ).
+</p>
+<p>
+<em>Filtro por tipo:</em> listará as <a href="station.txt">paradas</a> que atendem a pelo menos um dos tipos de veículos selecionados. Para usá-lo,  clicar sobre os botões com os nomes do tipos de veículo. (Apenas as paradas exclusivas para veículos de transporte na água não são listados na lista da paradas)
+</p>
+<p>
+<em>Filtro especial:</em><br>
+- <em>lotadas:</em> não está funcionando.<br>
+- <em>não conectadas</em> seleciona <a href="station.txt">paradas</a> com nenhum serviço de transporte.
+</p>
+<p>
+<em>Necessidade:</em> Seleciona as <a href="station.txt">paradas</a> de acordo com as necessidades das indústrias próximas. Use a <a href="mouse.txt">barra de rolagem</a> para rolar pela lista dos artigos. As opções incluem:<br>
+ - <em>tudo</em> seleciona todos os artigos.<br>
+ - <em>nada</em> desfaz todas as seleções.<br>
+ - <em>inv.</em> inverte a seleção atual.
+</p>
+<p>
+<em>Produção:</em> Seleciona as <a href="station.txt">paradas</a> de acordo com os produtos das indútrias próximas. Use a <a href="mouse.txt">barra de rolagem</a> para rolar pela lista dos artigos. As opções incluem:<br>
+ - <em>tudo</em> seleciona todos os artigos.<br>
+ - <em>nada</em> desfaz todas as seleções.<br>
+ - <em>inv.</em> inverte a seleção atual. </p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/industry_info.txt b/simutrans/text/pt/industry_info.txt
index d020ae0..afbdaaa 100644
--- a/simutrans/text/pt/industry_info.txt
+++ b/simutrans/text/pt/industry_info.txt
@@ -1,67 +1,67 @@
-<title>Ajuda - Informações das indústrias</title>
-
-<h1><strong>Informações das indústrias</strong></h1>
-
-<p>
-A janela de <strong>Informações das indústrias</strong> mostra detalhes sobre uma indústria selecionada (fornecedora ou consumidora de mercadorias) e permite se deslocar na área de jogo até o local onde ela se encontra.
-</p>
-<p>
-Fornecedoras e consumidoras de mercadorias são interdependentes, criando uma cadeia produtiva que termina em um consumidor-final. Algumas indústrias são ao mesmo tempo consumidoras e fornecedoras e se encontram no meio da cadeia produtiva. Se não se estiver jogando no <a href="new_world.txt">modo iniciante</a>, a indústria interromperá o fornecimento enquanto sua consumidora estiver com excesso de mercadorias.<br>
-Indústrias também podem ser um destino ou origem de passageiros e correio. Veículos recolhem e entregam mercadorias e passageiros nas indústrias através de <a href="station.txt">paradas</a> se a área de captura da parada abranger qualquer parte do prédio da indústria e se a parada for capaz de receber o item.
-{Dica: a área de captura das paradas em alto-mar/plataformas de petróleo/fazendas marinhas não aparecem na lista de paradas}
-</p>
-<p>
-O número inicial de cadeias produtivas pode ser alterado quando se cria um <a href="new_world.txt">novo mundo</a>.
-Conforme as <a href="citywindow.txt">áreas urbanas</a> crescem, mais indústrias podem aparecer. Novas indústrias aparecem toda vez que a população da área urbana dobra acima de 2000 habitantes.<br>
-{Dicas: adicione indústrias a uma área urbana usando a ferramenta <a href="edittools.txt">Construir mercado</a> nas ferramentas de edição do mapa. Mude quando novas indústrias são geradas no arquivo cityrules.tab (industry_increase_every = 0) o valor zero não gera nenhuma indústria nova}.
-</p>
-<p>
-Clique em uma indústria na área de jogo com a ferramenta <a href="inspection_tool.txt">verificar</a> ou em uma indústria listada na <a href="factorylist_filter.txt">lista das fábricas</a> para abrir as <strong>informações das indústrias</strong>.<br>
-Use a <a href="mouse.txt">barra de rolagem</a> para percorrer os itens que não estiverem visíveis.
-</p>
-<p>
-O nome da indústria selecionada é mostrado na barra de título das <strong>informações das indústrias</strong>.<br>
-Outras informações e opções sobre a indústria selecionada incluem:
-</p>
-<p>
-Produção: quantidade máxima de mercadorias que a indústria fornece (se for uma fornecedora) ou consome (se for um consumidor-final) em unidades.<br>
-{Dica: colocando <a href="special.txt">transformadores</a> e suprindo a indústria com eletricidade faz aumentar a quantidade máxima de mercadorias consumidas/produzidas}.
-</p>
-<p>
-<em>Imagem da indústria:</em> mostra uma imagem da indústria. Clique na imagem para ir até a indústria.
-</p>
-<p>
-As cores da <em>barra de status</em> abaixo da imagem indicam a operação da indústria (também usada no <a href="factorylist_filter.txt">Filtro da lista de indústrias</a>):<br>
-- <em>branco:</em> a indústria não necessita de mercadorias.<br>
-- <em>amarelo:</em> a indústria está conectada à rede de transporte, mas com fornecimento precário.<br>
-- <em>verde:</em> indústria em ótimo estado.<br>
-- <em>laranja:</em> operacional, mas pode ser melhorado.<br>
-- <em>vermelho:</em> operacional, mas parte da cadeia industrial tem suprimentos em excesso.
-</p>
-<p>
-<em>Consumidor:</em> mostra os destinos na cadeia produtiva para os bens produzidos na indústria selecionada. <br>
-Indústrias consumidoras e suas coordenadas no mapa são listadas ao lado de um botão em forma de seta. Clique nele para ir até a indústria.
-</p>
-<p>
-<em>Fornecedores:</em> mostra a origem dos bens que devem ser fornecidos à indústria selecionada.<br>
-Indústrias fornecedoras e suas coordenadas no mapa são listadas ao lado de um botão em forma de seta. Clique nele para ir até a indústria.
-</p>
-<p>
-<em>Trabalhadores de:</em> mostra em quais <a href="citywindow.txt">áreas urbanas</a> próximas os empregados moram. Passageiros e correio dessas áreas urbanas precisarão se deslocar até a indústria.<br>
-Áreas Urbanas e suas coordenadas no mapa são listadas ao lado de um botão em forma de seta. Clique nele para ir até a cidade.
-</p>
-<p>
-<em>Geração de viagens:</em> é a popularidade relativa como destino para passageiros.<br>
-<em>Geração de correios:</em> é a popularidade relativa como destino para correio.<br>
-{Dica: somente uma parte da indústria precisa estar na área de captura da estação/parada para ser destino de passageiros ou correio}.
-</p>
-<p>
-<em>Produção:</em> dá detalhes sobre a produção da indústria.<br>
-A informação mostrada inclui: nome do item; quantidade atualmente armazenada e quantidade máxima armazenável do item; <a href="goods_filter.txt">categoria</a>; e porcentagem da saída comparada com a entrada.
-</p>
-<p>
-<em>Consumo:</em> dá detalhes sobre os bens fornecidos à indústria.<br>
-A informação mostrada inclui: nome do item; quantidade atualmente armazenada e quantidade máxima armazenável do item; <a href="goods_filter.txt">categoria</a>; e porcentagem da entrada comparada com a saída.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Informações das indústrias</title>
+
+<h1><strong>Informações das indústrias</strong></h1>
+
+<p>
+A janela de <strong>Informações das indústrias</strong> mostra detalhes sobre uma indústria selecionada (fornecedora ou consumidora de mercadorias) e permite se deslocar na área de jogo até o local onde ela se encontra.
+</p>
+<p>
+Fornecedoras e consumidoras de mercadorias são interdependentes, criando uma cadeia produtiva que termina em um consumidor-final. Algumas indústrias são ao mesmo tempo consumidoras e fornecedoras e se encontram no meio da cadeia produtiva. Se não se estiver jogando no <a href="new_world.txt">modo iniciante</a>, a indústria interromperá o fornecimento enquanto sua consumidora estiver com excesso de mercadorias.<br>
+Indústrias também podem ser um destino ou origem de passageiros e correio. Veículos recolhem e entregam mercadorias e passageiros nas indústrias através de <a href="station.txt">paradas</a> se a área de captura da parada abranger qualquer parte do prédio da indústria e se a parada for capaz de receber o item.
+{Dica: a área de captura das paradas em alto-mar/plataformas de petróleo/fazendas marinhas não aparecem na lista de paradas}
+</p>
+<p>
+O número inicial de cadeias produtivas pode ser alterado quando se cria um <a href="new_world.txt">novo mundo</a>.
+Conforme as <a href="citywindow.txt">áreas urbanas</a> crescem, mais indústrias podem aparecer. Novas indústrias aparecem toda vez que a população da área urbana dobra acima de 2000 habitantes.<br>
+{Dicas: adicione indústrias a uma área urbana usando a ferramenta <a href="edittools.txt">Construir mercado</a> nas ferramentas de edição do mapa. Mude quando novas indústrias são geradas no arquivo cityrules.tab (industry_increase_every = 0) o valor zero não gera nenhuma indústria nova}.
+</p>
+<p>
+Clique em uma indústria na área de jogo com a ferramenta <a href="inspection_tool.txt">verificar</a> ou em uma indústria listada na <a href="factorylist_filter.txt">lista das fábricas</a> para abrir as <strong>informações das indústrias</strong>.<br>
+Use a <a href="mouse.txt">barra de rolagem</a> para percorrer os itens que não estiverem visíveis.
+</p>
+<p>
+O nome da indústria selecionada é mostrado na barra de título das <strong>informações das indústrias</strong>.<br>
+Outras informações e opções sobre a indústria selecionada incluem:
+</p>
+<p>
+Produção: quantidade máxima de mercadorias que a indústria fornece (se for uma fornecedora) ou consome (se for um consumidor-final) em unidades.<br>
+{Dica: colocando <a href="special.txt">transformadores</a> e suprindo a indústria com eletricidade faz aumentar a quantidade máxima de mercadorias consumidas/produzidas}.
+</p>
+<p>
+<em>Imagem da indústria:</em> mostra uma imagem da indústria. Clique na imagem para ir até a indústria.
+</p>
+<p>
+As cores da <em>barra de status</em> abaixo da imagem indicam a operação da indústria (também usada no <a href="factorylist_filter.txt">Filtro da lista de indústrias</a>):<br>
+- <em>branco:</em> a indústria não necessita de mercadorias.<br>
+- <em>amarelo:</em> a indústria está conectada à rede de transporte, mas com fornecimento precário.<br>
+- <em>verde:</em> indústria em ótimo estado.<br>
+- <em>laranja:</em> operacional, mas pode ser melhorado.<br>
+- <em>vermelho:</em> operacional, mas parte da cadeia industrial tem suprimentos em excesso.
+</p>
+<p>
+<em>Consumidor:</em> mostra os destinos na cadeia produtiva para os bens produzidos na indústria selecionada. <br>
+Indústrias consumidoras e suas coordenadas no mapa são listadas ao lado de um botão em forma de seta. Clique nele para ir até a indústria.
+</p>
+<p>
+<em>Fornecedores:</em> mostra a origem dos bens que devem ser fornecidos à indústria selecionada.<br>
+Indústrias fornecedoras e suas coordenadas no mapa são listadas ao lado de um botão em forma de seta. Clique nele para ir até a indústria.
+</p>
+<p>
+<em>Trabalhadores de:</em> mostra em quais <a href="citywindow.txt">áreas urbanas</a> próximas os empregados moram. Passageiros e correio dessas áreas urbanas precisarão se deslocar até a indústria.<br>
+Áreas Urbanas e suas coordenadas no mapa são listadas ao lado de um botão em forma de seta. Clique nele para ir até a cidade.
+</p>
+<p>
+<em>Geração de viagens:</em> é a popularidade relativa como destino para passageiros.<br>
+<em>Geração de correios:</em> é a popularidade relativa como destino para correio.<br>
+{Dica: somente uma parte da indústria precisa estar na área de captura da estação/parada para ser destino de passageiros ou correio}.
+</p>
+<p>
+<em>Produção:</em> dá detalhes sobre a produção da indústria.<br>
+A informação mostrada inclui: nome do item; quantidade atualmente armazenada e quantidade máxima armazenável do item; <a href="goods_filter.txt">categoria</a>; e porcentagem da saída comparada com a entrada.
+</p>
+<p>
+<em>Consumo:</em> dá detalhes sobre os bens fornecidos à indústria.<br>
+A informação mostrada inclui: nome do item; quantidade atualmente armazenada e quantidade máxima armazenável do item; <a href="goods_filter.txt">categoria</a>; e porcentagem da entrada comparada com a saída.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/inspection_tool.txt b/simutrans/text/pt/inspection_tool.txt
index 699a239..27bb0c0 100644
--- a/simutrans/text/pt/inspection_tool.txt
+++ b/simutrans/text/pt/inspection_tool.txt
@@ -1,85 +1,85 @@
-<title>Ajuda - Verificar</title>
-
-<h1><strong>Verificar</strong></h1>
-
-<p>
-A ferramenta <strong>Verificar</strong> é usada para abrir caixas de diálogo que fornecem informações ou controles para vários itens.
-</p>
-<p>
-Clique na lupa no topo da área de jogo ou pressione <a href="keys.txt">[a]</a> para abrir a ferramenta <strong>Verificar</strong> (o cursor mudará para uma lupa).
-</p>
-<p>
-Para usar: posicione o cursor em forma de lupa no local desejado na área de jogo e clique para abrir a caixa de diálogo. Se mais de um item estiver no local desejado, outro clique abrirá uma segunda caixa de diálogo.
-{Dica: a opção de abrir uma ou todas as caixas de diálogo do local está disponível no arquivo simuconf.tab}
-</p>
-<p>
-Clique nos seguintes itens na área de jogo com a ferramenta para abrir as caixas de diálogo:
-</p>
-<p>
-<em>Depósitos</em> - abre <a href="depot.txt">controles</a> para comprar e gerenciar veículos naquele depósito.
-</p>
-<p>
-<em>Paradas</em> - abre as <a href="station.txt">informações</a> daquela parada.
-</p>
-<p>
-<em>Veículos</em> - abre as <a href="convoiinfo.txt">informações</a> daquele veículo.
-</p>
-<p>
-<em>Prefeitura</em> - abre as <a href="citywindow.txt">informações</a> da população daquela área urbana.
-{Dica: a opção para abrir a caixa de diálogo fornecendo informações sobre o prédio da prefeitura está disponível no arquivo simuconf.tab}
-</p>
-<p>
-<em>Indústrias</em> - abre as <a href="industry_info.txt">informações</a> daquela indústria.
-</p>
-<p>
-<em>Edifícios</em> abrem uma caixa de diálogo que fornece informações sobre a construção (a barra de título mostra 'Edifício'). A informação contida inclui:<br>
-- <em>Descrição:</em> fornece informações sobre o edifício. Se não houver informação disponível então 'residência', ou 'edifício industrial', ou 'comércio e lojas' (no caso de edifícios comerciais) é mostrado. <br>
-- <em>Cidade de:</em> indica a qual área urbana que o edifício faz parte.<br>
-- <em>Geração de viagens:</em> é a popularidade relativa como destino para passageiros.<br>
-- <em>Geração de correios:</em> é a popularidade relativa como destino para correio.<br>
-- <em>Construído a partir de:</em> indica o ano que o edifício aparece quando se joga com <a href="new_world.txt">Linha do tempo</a>.<br>
-- <em>Valor:</em> indica o custo para remover o edifício com a ferramenta <a href="window.txt">Eliminar</a>.<br>
-- <em>Construído por:</em> nome da pessoa que criou o edifício para o Simutrans.
-</p>
-<p>
-<em>Monumentos</em> / <a href="curiositylist_filter.txt"><em>Atrações turísticas</em></a> abrem uma caixa de diálogo que fornece informações sobre a atração (a barra de título mostra se é um monumento ou uma atração turística). A informação contida inclui:<br>
-- <em>Propriedade pública:</em> indica que o item não pertence a nenhuma companhia de transporte.<br>
-- <em>Descrição:</em> fornece informações sobre a atração.<br>
-- <em>Geração de viagens:</em> é a popularidade relativa como destino para passageiros.<br>
-- <em>Geração de correios:</em> é a popularidade relativa como destino para correio.<br>
-- <em>Construído a partir de:</em> indica o ano que o edifício aparece quando se joga com <a href="new_world.txt">Linha do tempo</a>.<br>
-- <em>Construído por:</em> nome da pessoa que criou a atração para o Simutrans.
-</p>
-<p>
-<em>Estradas e trilhos</em> abrem uma caixa de diálogo que fornece informações sobre a estrada ou trilho (a barra de título mostra qual o tipo de via que se está usando - no caso de trilhos de bonde construídos em estradas a barra de título indica o tipo da estrada). A informação contida inclui:<br>
-- <em>Vel. Máxima:</em> velocidade máxima permitida na estrada ou trilho.<br>
-- <em>Ribi (unmasked):</em> é um contador interno que indica a direção da via.<br>
-- <em>Ribi (masked):</em> é um contador interno que indica a direção da via levando em conta sinais e/ou placas.<br>
-- <em>com sinal:</em> é mostrado se há um sinal ou placa presente.<br>
-- <em>eletrificado</em> / <em>não eletrificado:</em> indica se a via está eletrificada.<br>
-- <em>comboios passados no último mês:</em> indica o número de <a href="convoiinfo.txt">veículos</a> que usaram a via no último mês do jogo.<br>
-- <em>está reservado para um trem:</em> indica qual veículo reservou o trecho de trilho para usar até ter passado.<br>
-- <em>wayslope</em> [aguardando definição]<br>
-- <em>coordenadas:</em> mostradas na barra inferior da <a href="window.txt">área de jogo</a><br>
-Caso haja trilhos de bonde construídos em estradas as informações aparecem duas vezes, pimeiro para a estrada e depois para o trilho de bonde.
-</p>
-<p>
-<em>Sinais</em> / <em>Placas</em> abrem uma caixa de diálogo que fornece informações sobre o sinal ou placa (a barra de título mostra se é um sinal ou uma placa). A informação contida inclui:<br>
-- <em>direção:</em> é um contador interno que indica a direção a que o sinal se aplica.
-</p>
-<p>
-<a href="special.txt"><em>Linhas elétricas</em></a> / <em>Transformadores</em> abrem uma caixa de diálogo que fornece informações sobre a distribuição de eletricidade (a barra de título nostra 'Linha de transmissão'). A informação contida inclui:<br>
-- <em>Potência:</em> indica a quantidade de energia fornecida.<br>
-- <em>Disponível:</em> o valor aparece nos <a href="special.txt">transformadores</a> das <a href="industry_info.txt">indústrias</a> e indica a quantidade relativa de energia fornecida.<br>
-- <em>Net:</em> é o número de identificação da rede de distribuição. Dois pontos com o mesmo número estão conectados.
-</p>
-<p>
-<it>Árvores</it> abrem uma caixa de diálogo (a barra de título mostra 'Árvore'). A informação contida inclui:<br>
-- <em>Nome:</em> mostra a espécie da árvore.<br>
-- <em>Meses de idade:</em> idade da árvore mostrada em meses.
-</p>
-<p>
-{Dicas: opção de abrir caixas de diálogo em estradas privadas e pedestras está disponível no arquivo simuconf.tab}.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Verificar</title>
+
+<h1><strong>Verificar</strong></h1>
+
+<p>
+A ferramenta <strong>Verificar</strong> é usada para abrir caixas de diálogo que fornecem informações ou controles para vários itens.
+</p>
+<p>
+Clique na lupa no topo da área de jogo ou pressione <a href="keys.txt">[a]</a> para abrir a ferramenta <strong>Verificar</strong> (o cursor mudará para uma lupa).
+</p>
+<p>
+Para usar: posicione o cursor em forma de lupa no local desejado na área de jogo e clique para abrir a caixa de diálogo. Se mais de um item estiver no local desejado, outro clique abrirá uma segunda caixa de diálogo.
+{Dica: a opção de abrir uma ou todas as caixas de diálogo do local está disponível no arquivo simuconf.tab}
+</p>
+<p>
+Clique nos seguintes itens na área de jogo com a ferramenta para abrir as caixas de diálogo:
+</p>
+<p>
+<em>Depósitos</em> - abre <a href="depot.txt">controles</a> para comprar e gerenciar veículos naquele depósito.
+</p>
+<p>
+<em>Paradas</em> - abre as <a href="station.txt">informações</a> daquela parada.
+</p>
+<p>
+<em>Veículos</em> - abre as <a href="convoiinfo.txt">informações</a> daquele veículo.
+</p>
+<p>
+<em>Prefeitura</em> - abre as <a href="citywindow.txt">informações</a> da população daquela área urbana.
+{Dica: a opção para abrir a caixa de diálogo fornecendo informações sobre o prédio da prefeitura está disponível no arquivo simuconf.tab}
+</p>
+<p>
+<em>Indústrias</em> - abre as <a href="industry_info.txt">informações</a> daquela indústria.
+</p>
+<p>
+<em>Edifícios</em> abrem uma caixa de diálogo que fornece informações sobre a construção (a barra de título mostra 'Edifício'). A informação contida inclui:<br>
+- <em>Descrição:</em> fornece informações sobre o edifício. Se não houver informação disponível então 'residência', ou 'edifício industrial', ou 'comércio e lojas' (no caso de edifícios comerciais) é mostrado. <br>
+- <em>Cidade de:</em> indica a qual área urbana que o edifício faz parte.<br>
+- <em>Geração de viagens:</em> é a popularidade relativa como destino para passageiros.<br>
+- <em>Geração de correios:</em> é a popularidade relativa como destino para correio.<br>
+- <em>Construído a partir de:</em> indica o ano que o edifício aparece quando se joga com <a href="new_world.txt">Linha do tempo</a>.<br>
+- <em>Valor:</em> indica o custo para remover o edifício com a ferramenta <a href="window.txt">Eliminar</a>.<br>
+- <em>Construído por:</em> nome da pessoa que criou o edifício para o Simutrans.
+</p>
+<p>
+<em>Monumentos</em> / <a href="curiositylist_filter.txt"><em>Atrações turísticas</em></a> abrem uma caixa de diálogo que fornece informações sobre a atração (a barra de título mostra se é um monumento ou uma atração turística). A informação contida inclui:<br>
+- <em>Propriedade pública:</em> indica que o item não pertence a nenhuma companhia de transporte.<br>
+- <em>Descrição:</em> fornece informações sobre a atração.<br>
+- <em>Geração de viagens:</em> é a popularidade relativa como destino para passageiros.<br>
+- <em>Geração de correios:</em> é a popularidade relativa como destino para correio.<br>
+- <em>Construído a partir de:</em> indica o ano que o edifício aparece quando se joga com <a href="new_world.txt">Linha do tempo</a>.<br>
+- <em>Construído por:</em> nome da pessoa que criou a atração para o Simutrans.
+</p>
+<p>
+<em>Estradas e trilhos</em> abrem uma caixa de diálogo que fornece informações sobre a estrada ou trilho (a barra de título mostra qual o tipo de via que se está usando - no caso de trilhos de bonde construídos em estradas a barra de título indica o tipo da estrada). A informação contida inclui:<br>
+- <em>Vel. Máxima:</em> velocidade máxima permitida na estrada ou trilho.<br>
+- <em>Ribi (unmasked):</em> é um contador interno que indica a direção da via.<br>
+- <em>Ribi (masked):</em> é um contador interno que indica a direção da via levando em conta sinais e/ou placas.<br>
+- <em>com sinal:</em> é mostrado se há um sinal ou placa presente.<br>
+- <em>eletrificado</em> / <em>não eletrificado:</em> indica se a via está eletrificada.<br>
+- <em>comboios passados no último mês:</em> indica o número de <a href="convoiinfo.txt">veículos</a> que usaram a via no último mês do jogo.<br>
+- <em>está reservado para um trem:</em> indica qual veículo reservou o trecho de trilho para usar até ter passado.<br>
+- <em>wayslope</em> [aguardando definição]<br>
+- <em>coordenadas:</em> mostradas na barra inferior da <a href="window.txt">área de jogo</a><br>
+Caso haja trilhos de bonde construídos em estradas as informações aparecem duas vezes, pimeiro para a estrada e depois para o trilho de bonde.
+</p>
+<p>
+<em>Sinais</em> / <em>Placas</em> abrem uma caixa de diálogo que fornece informações sobre o sinal ou placa (a barra de título mostra se é um sinal ou uma placa). A informação contida inclui:<br>
+- <em>direção:</em> é um contador interno que indica a direção a que o sinal se aplica.
+</p>
+<p>
+<a href="special.txt"><em>Linhas elétricas</em></a> / <em>Transformadores</em> abrem uma caixa de diálogo que fornece informações sobre a distribuição de eletricidade (a barra de título nostra 'Linha de transmissão'). A informação contida inclui:<br>
+- <em>Potência:</em> indica a quantidade de energia fornecida.<br>
+- <em>Disponível:</em> o valor aparece nos <a href="special.txt">transformadores</a> das <a href="industry_info.txt">indústrias</a> e indica a quantidade relativa de energia fornecida.<br>
+- <em>Net:</em> é o número de identificação da rede de distribuição. Dois pontos com o mesmo número estão conectados.
+</p>
+<p>
+<it>Árvores</it> abrem uma caixa de diálogo (a barra de título mostra 'Árvore'). A informação contida inclui:<br>
+- <em>Nome:</em> mostra a espécie da árvore.<br>
+- <em>Meses de idade:</em> idade da árvore mostrada em meses.
+</p>
+<p>
+{Dicas: opção de abrir caixas de diálogo em estradas privadas e pedestras está disponível no arquivo simuconf.tab}.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/language.txt b/simutrans/text/pt/language.txt
index 8ae4eef..544ae9e 100644
--- a/simutrans/text/pt/language.txt
+++ b/simutrans/text/pt/language.txt
@@ -1,22 +1,22 @@
-<title>Ajuda - Língua</title>
-
-<h1><strong>Linguagem</strong></h1>
-
-<p>
-<strong>Língua</strong> altera o idioma utilizado no jogo.
-</p>
-<p>
-<strong>Língua</strong> abre a partir de <a href="options.txt">Preferências</a> ou a partir de <a href="new_world.txt">Novo Mundo</a>.
-</p>
-<p>
-Para jogar com outro idioma: clique no botão ao lado do idioma desejado para selecionar este idioma; para que os lugares tenham os nomes no novo idioma, faça isso antes de começar um novo mapa.
-</p>
-<p>
-O novo idioma pode apenas aparecer em novas ou reabertas barras de ferramentas, opções e textos no jogo.<br>
-Se uma tradução não está disponível no idioma selecionado, ele pode abrir em inglês.
-</p>
-<p>
-Visite http://translator.simutrans.com para ajuda com traduções.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Língua</title>
+
+<h1><strong>Linguagem</strong></h1>
+
+<p>
+<strong>Língua</strong> altera o idioma utilizado no jogo.
+</p>
+<p>
+<strong>Língua</strong> abre a partir de <a href="options.txt">Preferências</a> ou a partir de <a href="new_world.txt">Novo Mundo</a>.
+</p>
+<p>
+Para jogar com outro idioma: clique no botão ao lado do idioma desejado para selecionar este idioma; para que os lugares tenham os nomes no novo idioma, faça isso antes de começar um novo mapa.
+</p>
+<p>
+O novo idioma pode apenas aparecer em novas ou reabertas barras de ferramentas, opções e textos no jogo.<br>
+Se uma tradução não está disponível no idioma selecionado, ele pode abrir em inglês.
+</p>
+<p>
+Visite http://translator.simutrans.com para ajuda com traduções.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/linemanagement.txt b/simutrans/text/pt/linemanagement.txt
index e94ff2b..d1a3835 100644
--- a/simutrans/text/pt/linemanagement.txt
+++ b/simutrans/text/pt/linemanagement.txt
@@ -1,106 +1,106 @@
-<title>Ajuda - Gerenciador de Linhas</title>
-
-<h1><strong>Gerenciador de Linhas</strong></h1>
-
-<p>
-O <strong>Gerenciador de Linhas</strong> fornece informações e ferramentas para o gerenciamento de linhas (caminhos e quantidades mínimas de carregamento requeridas por uma <a href="convoiinfo.txt">composição</a> para partir) para uma composição ou mais com a mesma rota.
-</p>
-<p>
-Linhas consistem em <a href="station.txt">Paradas</a> onde os veículos pegam e deixam mercadorias e passageiros (veículos aquáticos podem usar qualquer quadro de água na área de captura de uma doca) e pontos de passagem (usados para forçar os veículos a irem por um caminho).
-</p>
-<p>
-Clique no ícone que (parece uma rede) na barra do alto da tela ou pressione <a href="keys.txt">[w]</a> para abrir a janela do <strong>Gerenciador de Linhas</strong>, que pode ser <a href="mouse.txt">redimensionada</a> (clique no botão com uma seta para baixo na barra do título para retornar ao tamanho original).
-</p>
-<p>
-O lado esquerdo do <strong>Gerenciador de Linhas</strong> lista as linhas existentes (para rolar pela lista: use a barra do lado direito da lista), que pode ser filtrado por tipo de transporte, clicando numa das abas que ficam acima da lista pra selecionar:<br>
-<em>Todos</em>: lista as linhas de todos os tipos de veículos.<br>
-<em>Trem</em>: lista as linhas para os veículos ferroviários.<br>
-<em>Monotrilho</em>: lista as linhas para os monotrilhos ou maglevs (trens magnéticos).<br>
-<em>Tram</em>: lista as linhas dos bondes/eléctricos.<br>
-<em>Caminhões</em>: lista as linhas para os veículos rodoviários.<br>
-<em>Navios</em>: lista as linhas para os veículos aquáticos.<br>
-<em>Ar</em>: lista as linhas para os veículos aéreos.
-</p>
-<p>
-A cor dos nomes das linhas significam o seguinte:<br>
-<it>branco</it> - não há nenhum veículo associado à linha<br>
-<it>amarelo</it> - não operacional, ou não está dando lucro nem prejuízo<br>
-<it>negro</it> - linha lucrativa, com capacidade ociosa, sem necessidade de melhoria<br>
-<it>azul</it> - linha lucrativa, com pouca capacidade ociosa, ou com veículos obsoletos <br>
-<it>vermelho</it> - linha com perdas<br>
-<p>
-
-Under the list of existing Lines are option-buttons for managing Lines.<br>
-Click on a Line in list to select (highlights name) and see information about <a href="station.txt">Stops</a>, income, and Convoys on selected Line.<br>
-If details about Stops or Convoys are only partially visible then re-size <strong>Line Management</strong> or use slider-bars to scroll information.
-</p>
-<p>
-Sob a lista das linhas existentes há alguns botões, que incluem:
-</p>
-<p>
-<em>Nova Linha:</em> abre controles para definir uma <a href="schedule.txt">Programação</a> (caminhos e quantidades mínimas de carregamento requeridas por uma <a href="convoiinfo.txt">composição</a> para partir) para uma nova linha.<br>
-Adicione tantas <a href="station.txt">paradas</a> ou pontos de passagem quanto necessários, estabeleça as quantidades de espera necessárias, e então feche a janela para criar a nova linha, clicando no botão "x" na barra de título ou com o <a href="keys.txt">teclado</a>). A nova linha terá associado um número e será listada na lista do <strong>Gerenciador de Linhas</strong>.<br>
-{Dicas: Selecione o tipo de transporte nas abas antes de criar uma nova linha. Os veículos não pegam nem deixam mercadorias e passageiros nos pontos de passagem.}
-</p>
-<p>
-<em>Atualizar:</em> abre os controles para modificar uma <a href="schedule.txt">Programação</a> existente. As mudanças afetarão todos os veículos associados à linha, assim que a janela desses controles for fechada.<br>
-Para usá-lo, é necessário selecionar uma linha na lista antes de clicar nele e editar a linha.
-</p>
-<p>
-<em>Apagar:</em> apaga a linha selecionada. Para usá-lo, é necessário selecionar uma linha na lista antes de clicar nele e apagar a linha.
-</p>
-<p>
-Quando uma linha é selecionada, ele fica destacada das outras, e as paradas que estão associadas à linha aparecem embaixo dos botões "Nova Linha", "Atualizar" e "Apagar". Clique numa parada para abrir suas informações.<br>
-Os itens listados para cada parada incluem:<br>
-<em>barra da cor de status:</em> as cores indicam a situação da <a href="station.txt">parada</a> com relação à sua lotação. é a mesma barra mostrada na  <a href="haltlist.txt">Lista de Paradas</a>, na janela Informações da Parada e na barra que fica acima da parada no jogo:<br>
-- <em>amarelo:</em> fora de serviço.<br>
-- <em>verde:</em> nenhuma melhoria necessária.<br>
-- <em>laranja:</em> melhorias possíveis.<br>
-- <em>vermelho:</em> melhorias necessárias.<br>
-{Dica: Use [!] para fazer aparecer a barra da cor de status acima da parada na tela do jogo.} <br>
-<em>nome</em> da parada.<br>
-<em>número</em> da parada (elas pode ser numeradas se a opção for escolhida no simuconf.tab).<br>
-<em>ícone de veículos(s)</em> indicam quais tipos de veículo podem usar a  parada. Os ícones incluem: ônibus/autocarro (para veículos rodoviários de transporte de passageiros), cami(nh)ão (para veículos rodoviários de transporte de cargas), trem/comboio, barco e avião. Bondes/eléctricos podem ser indicados por um ônibus ou trem conforme o tipo de via da parada.<br>
-<em>ícone de carga(s)</em> indica com quais itens (passageiros, cargas ou correio) uma parada pode lidar (também são usados nas Informações das Paradas e na Lista de Paradas.<br>
-{Dica: adicionar extensões apropriadas pode modificar as categorias de itens que uma parada pode lidar. <a href="special.txt">Agências de correio</a> podem ser adicionadas às paradas para o transporte de correspondências}.<br>
-<em>espera</em> detalhes das diversas mercadorias e passageiros.
-</p>
-<p>
-No lado direito do <strong>Gerenciador de Linhas</strong> são exibidos um gráfico com dados da linha selecionada, uma caixa de nome e uma lista das <a href="convoiinfo.txt">composições</a> associadas à linha.
-</p>
-<p>
-Clique no nome da linha pra selecioná-la. Ele ficará destacado. Clique nos botões para ver as informações sobre a linha, sendo que o eixo horizontal representa os últimos 12 meses:
-</p>
-<p>
-- <em>Capacidade</em> - quantidade de mercadorias ou passageiros que puderam ser transportadas no período.
-</p>
-<p>
-- <em>Vol. Transportado</em> - quantidade de mercadorias ou passageiros que realmente foram transportados.
-</p>
-<p>
-- <em>Faturamento</em> - total recebido pelo transporte de mercadorias ou passageiros.
-</p>
-<p>
-- <em>Operação</em> - custo da operação dos veículos, ou seja, de eles estarem rodando.
-</p>
-<p>
-- <a href="finances.txt"><em>Lucro</em></a> - diferença entre o faturamento e a operação.
-</p>
-<p>
-- <a href="convoiinfo.txt"><em>Veículos</em></a> - número de veículos associados à linha.
-</p>
-<p>
-Para modificar o nome da linha: clique na caixa de nome, abaixo do gráfico, onde aparece o nome da linha, e escreva o nome desejado.
-</p>
-<p>
-Abaixo da caixa de nomes aparece a lista dos <a href="convoiinfo.txt">veículos</a> associados a ela.<br>
-No topo da lista dos veículos vem a quantidade de veículos associados a ela, a renda da linha (o lucro operacional, melhor dizendo), a capacidade e a quantidade  transportada no momento, com a porcentagem da capacidade entre parênteses).<br>
-Clique num item listado para ver mais informações sobre o veículo selecionado (use a barra de rolagem para ver os outros veículos da linha).<br>
-São listados, para cada veículo:<br>
-<em>nome</em> nome dado do veículo, que normalmente é o do primeiro componente <a href="depot.txt">comprado</a> ou montado na composição).<br>
-<em>renda</em> o lucro operacional do veículo: faturamento menos custo operacional.<br>
-<em>linha:</em> mostra o nome da linha e se o veículo está num <a href="depot.txt">depósito</a>.<br>
-<em>gráfico</em> mostra o veículo e a capacidade utilizada do veículo no momento.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Gerenciador de Linhas</title>
+
+<h1><strong>Gerenciador de Linhas</strong></h1>
+
+<p>
+O <strong>Gerenciador de Linhas</strong> fornece informações e ferramentas para o gerenciamento de linhas (caminhos e quantidades mínimas de carregamento requeridas por uma <a href="convoiinfo.txt">composição</a> para partir) para uma composição ou mais com a mesma rota.
+</p>
+<p>
+Linhas consistem em <a href="station.txt">Paradas</a> onde os veículos pegam e deixam mercadorias e passageiros (veículos aquáticos podem usar qualquer quadro de água na área de captura de uma doca) e pontos de passagem (usados para forçar os veículos a irem por um caminho).
+</p>
+<p>
+Clique no ícone que (parece uma rede) na barra do alto da tela ou pressione <a href="keys.txt">[w]</a> para abrir a janela do <strong>Gerenciador de Linhas</strong>, que pode ser <a href="mouse.txt">redimensionada</a> (clique no botão com uma seta para baixo na barra do título para retornar ao tamanho original).
+</p>
+<p>
+O lado esquerdo do <strong>Gerenciador de Linhas</strong> lista as linhas existentes (para rolar pela lista: use a barra do lado direito da lista), que pode ser filtrado por tipo de transporte, clicando numa das abas que ficam acima da lista pra selecionar:<br>
+<em>Todos</em>: lista as linhas de todos os tipos de veículos.<br>
+<em>Trem</em>: lista as linhas para os veículos ferroviários.<br>
+<em>Monotrilho</em>: lista as linhas para os monotrilhos ou maglevs (trens magnéticos).<br>
+<em>Tram</em>: lista as linhas dos bondes/eléctricos.<br>
+<em>Caminhões</em>: lista as linhas para os veículos rodoviários.<br>
+<em>Navios</em>: lista as linhas para os veículos aquáticos.<br>
+<em>Ar</em>: lista as linhas para os veículos aéreos.
+</p>
+<p>
+A cor dos nomes das linhas significam o seguinte:<br>
+<it>branco</it> - não há nenhum veículo associado à linha<br>
+<it>amarelo</it> - não operacional, ou não está dando lucro nem prejuízo<br>
+<it>negro</it> - linha lucrativa, com capacidade ociosa, sem necessidade de melhoria<br>
+<it>azul</it> - linha lucrativa, com pouca capacidade ociosa, ou com veículos obsoletos <br>
+<it>vermelho</it> - linha com perdas<br>
+<p>
+
+Under the list of existing Lines are option-buttons for managing Lines.<br>
+Click on a Line in list to select (highlights name) and see information about <a href="station.txt">Stops</a>, income, and Convoys on selected Line.<br>
+If details about Stops or Convoys are only partially visible then re-size <strong>Line Management</strong> or use slider-bars to scroll information.
+</p>
+<p>
+Sob a lista das linhas existentes há alguns botões, que incluem:
+</p>
+<p>
+<em>Nova Linha:</em> abre controles para definir uma <a href="schedule.txt">Programação</a> (caminhos e quantidades mínimas de carregamento requeridas por uma <a href="convoiinfo.txt">composição</a> para partir) para uma nova linha.<br>
+Adicione tantas <a href="station.txt">paradas</a> ou pontos de passagem quanto necessários, estabeleça as quantidades de espera necessárias, e então feche a janela para criar a nova linha, clicando no botão "x" na barra de título ou com o <a href="keys.txt">teclado</a>). A nova linha terá associado um número e será listada na lista do <strong>Gerenciador de Linhas</strong>.<br>
+{Dicas: Selecione o tipo de transporte nas abas antes de criar uma nova linha. Os veículos não pegam nem deixam mercadorias e passageiros nos pontos de passagem.}
+</p>
+<p>
+<em>Atualizar:</em> abre os controles para modificar uma <a href="schedule.txt">Programação</a> existente. As mudanças afetarão todos os veículos associados à linha, assim que a janela desses controles for fechada.<br>
+Para usá-lo, é necessário selecionar uma linha na lista antes de clicar nele e editar a linha.
+</p>
+<p>
+<em>Apagar:</em> apaga a linha selecionada. Para usá-lo, é necessário selecionar uma linha na lista antes de clicar nele e apagar a linha.
+</p>
+<p>
+Quando uma linha é selecionada, ele fica destacada das outras, e as paradas que estão associadas à linha aparecem embaixo dos botões "Nova Linha", "Atualizar" e "Apagar". Clique numa parada para abrir suas informações.<br>
+Os itens listados para cada parada incluem:<br>
+<em>barra da cor de status:</em> as cores indicam a situação da <a href="station.txt">parada</a> com relação à sua lotação. é a mesma barra mostrada na  <a href="haltlist.txt">Lista de Paradas</a>, na janela Informações da Parada e na barra que fica acima da parada no jogo:<br>
+- <em>amarelo:</em> fora de serviço.<br>
+- <em>verde:</em> nenhuma melhoria necessária.<br>
+- <em>laranja:</em> melhorias possíveis.<br>
+- <em>vermelho:</em> melhorias necessárias.<br>
+{Dica: Use [!] para fazer aparecer a barra da cor de status acima da parada na tela do jogo.} <br>
+<em>nome</em> da parada.<br>
+<em>número</em> da parada (elas pode ser numeradas se a opção for escolhida no simuconf.tab).<br>
+<em>ícone de veículos(s)</em> indicam quais tipos de veículo podem usar a  parada. Os ícones incluem: ônibus/autocarro (para veículos rodoviários de transporte de passageiros), cami(nh)ão (para veículos rodoviários de transporte de cargas), trem/comboio, barco e avião. Bondes/eléctricos podem ser indicados por um ônibus ou trem conforme o tipo de via da parada.<br>
+<em>ícone de carga(s)</em> indica com quais itens (passageiros, cargas ou correio) uma parada pode lidar (também são usados nas Informações das Paradas e na Lista de Paradas.<br>
+{Dica: adicionar extensões apropriadas pode modificar as categorias de itens que uma parada pode lidar. <a href="special.txt">Agências de correio</a> podem ser adicionadas às paradas para o transporte de correspondências}.<br>
+<em>espera</em> detalhes das diversas mercadorias e passageiros.
+</p>
+<p>
+No lado direito do <strong>Gerenciador de Linhas</strong> são exibidos um gráfico com dados da linha selecionada, uma caixa de nome e uma lista das <a href="convoiinfo.txt">composições</a> associadas à linha.
+</p>
+<p>
+Clique no nome da linha pra selecioná-la. Ele ficará destacado. Clique nos botões para ver as informações sobre a linha, sendo que o eixo horizontal representa os últimos 12 meses:
+</p>
+<p>
+- <em>Capacidade</em> - quantidade de mercadorias ou passageiros que puderam ser transportadas no período.
+</p>
+<p>
+- <em>Vol. Transportado</em> - quantidade de mercadorias ou passageiros que realmente foram transportados.
+</p>
+<p>
+- <em>Faturamento</em> - total recebido pelo transporte de mercadorias ou passageiros.
+</p>
+<p>
+- <em>Operação</em> - custo da operação dos veículos, ou seja, de eles estarem rodando.
+</p>
+<p>
+- <a href="finances.txt"><em>Lucro</em></a> - diferença entre o faturamento e a operação.
+</p>
+<p>
+- <a href="convoiinfo.txt"><em>Veículos</em></a> - número de veículos associados à linha.
+</p>
+<p>
+Para modificar o nome da linha: clique na caixa de nome, abaixo do gráfico, onde aparece o nome da linha, e escreva o nome desejado.
+</p>
+<p>
+Abaixo da caixa de nomes aparece a lista dos <a href="convoiinfo.txt">veículos</a> associados a ela.<br>
+No topo da lista dos veículos vem a quantidade de veículos associados a ela, a renda da linha (o lucro operacional, melhor dizendo), a capacidade e a quantidade  transportada no momento, com a porcentagem da capacidade entre parênteses).<br>
+Clique num item listado para ver mais informações sobre o veículo selecionado (use a barra de rolagem para ver os outros veículos da linha).<br>
+São listados, para cada veículo:<br>
+<em>nome</em> nome dado do veículo, que normalmente é o do primeiro componente <a href="depot.txt">comprado</a> ou montado na composição).<br>
+<em>renda</em> o lucro operacional do veículo: faturamento menos custo operacional.<br>
+<em>linha:</em> mostra o nome da linha e se o veículo está num <a href="depot.txt">depósito</a>.<br>
+<em>gráfico</em> mostra o veículo e a capacidade utilizada do veículo no momento.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/list.txt b/simutrans/text/pt/list.txt
index 9a14841..38c1b35 100644
--- a/simutrans/text/pt/list.txt
+++ b/simutrans/text/pt/list.txt
@@ -1,37 +1,37 @@
-<title>Ajuda - Listas</title>
-
-<h1><strong>Listas</strong></h1>
-
-<p>
-<strong>Listas</strong> tem opções para abrir controles para informação sobre o estado atual do jogo (e também um controle para ajustar renda relativa recebida de diferentes <a href="goods_filter.txt">bens, passageiros e correio</a>).
-</p>
-<p>
-A informação está disponível para um jogador em listas sobre: <a href="station.txt">Paradas</a>; <a href="convoiinfo.txt">Veículos</a>; <a href="citywindow.txt">Áreas urbanas</a>; rendas recebidas de diferentes <a href="goods_filter.txt">bens</a>, passageiros e correio; <a href="industry_info.txt">Fábricas</a>; e atrações turísticas.
-</p>
-<p>
-Clique sobre o botão Listas no topo da tela do jogo para abrir <strong>Listas</strong>.<br>
-Mova o cursor do mouse, depois de abrir ou clicar na barra de ferramentas, por cima dos botões da barra para ver o nome.
-</p>
-<p>
-Clique sobre o botão para abrir os controles de informação, da esquerda para direita, sobre:
-</p>
-<p>
-<a href="haltlist.txt"><em>Lista de Paradas:</em></a> <a href="station.txt">Paradas</a>, onde os veículos carregam e descarregam objetos e passageiros (paradas só marítimas não são listadas).
-</p>
-<p>
-<a href="convoi.txt"><em>Lista de Veículos:</em></a> <a href="convoiinfo.txt">veículos</a> rodoviários e ferroviários, aeronaves e barcos.
-</p>
-<p>
-<a href="citylist_filter.txt"><em>Lista das cidades:</em></a> <a href="citywindow.txt">Áreas urbanas</a> (aldeias, vilas e cidades).
-</p>
-<p>
-<a href="goods_filter.txt"><em>Lista das cargas:</em></a> rendas, recepção de diferentes bens, passageiros e correio (está incluído um controle para ajustar renda relativa).
-</p>
-<p>
-<a href="factorylist_filter.txt"><em>Lista das Fábricas:</em></a> <a href="industry_info.txt">Fábricas</a> (consumidoras e fornecedoras de bens).
-</p>
-<p>
-<a href="curiositylist_filter.txt"><em>Lista das atrações:</em></a> atrações turísticas.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008, atualizado em 07/02/2008.
+<title>Ajuda - Listas</title>
+
+<h1><strong>Listas</strong></h1>
+
+<p>
+<strong>Listas</strong> tem opções para abrir controles para informação sobre o estado atual do jogo (e também um controle para ajustar renda relativa recebida de diferentes <a href="goods_filter.txt">bens, passageiros e correio</a>).
+</p>
+<p>
+A informação está disponível para um jogador em listas sobre: <a href="station.txt">Paradas</a>; <a href="convoiinfo.txt">Veículos</a>; <a href="citywindow.txt">Áreas urbanas</a>; rendas recebidas de diferentes <a href="goods_filter.txt">bens</a>, passageiros e correio; <a href="industry_info.txt">Fábricas</a>; e atrações turísticas.
+</p>
+<p>
+Clique sobre o botão Listas no topo da tela do jogo para abrir <strong>Listas</strong>.<br>
+Mova o cursor do mouse, depois de abrir ou clicar na barra de ferramentas, por cima dos botões da barra para ver o nome.
+</p>
+<p>
+Clique sobre o botão para abrir os controles de informação, da esquerda para direita, sobre:
+</p>
+<p>
+<a href="haltlist.txt"><em>Lista de Paradas:</em></a> <a href="station.txt">Paradas</a>, onde os veículos carregam e descarregam objetos e passageiros (paradas só marítimas não são listadas).
+</p>
+<p>
+<a href="convoi.txt"><em>Lista de Veículos:</em></a> <a href="convoiinfo.txt">veículos</a> rodoviários e ferroviários, aeronaves e barcos.
+</p>
+<p>
+<a href="citylist_filter.txt"><em>Lista das cidades:</em></a> <a href="citywindow.txt">Áreas urbanas</a> (aldeias, vilas e cidades).
+</p>
+<p>
+<a href="goods_filter.txt"><em>Lista das cargas:</em></a> rendas, recepção de diferentes bens, passageiros e correio (está incluído um controle para ajustar renda relativa).
+</p>
+<p>
+<a href="factorylist_filter.txt"><em>Lista das Fábricas:</em></a> <a href="industry_info.txt">Fábricas</a> (consumidoras e fornecedoras de bens).
+</p>
+<p>
+<a href="curiositylist_filter.txt"><em>Lista das atrações:</em></a> atrações turísticas.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008, atualizado em 07/02/2008.
 </p>
diff --git a/simutrans/text/pt/load.txt b/simutrans/text/pt/load.txt
index de57362..c3bbd91 100644
--- a/simutrans/text/pt/load.txt
+++ b/simutrans/text/pt/load.txt
@@ -1,27 +1,27 @@
-<title>Ajuda - Carregar jogo</title>
-
-<h1><strong>Carregar jogo</strong></h1>
-
-<p>
-A janela <strong>Carregar</strong> reabre um jogo <a href="save.txt">salvo</a> (para continuar a jogar de onde parou) e pode ser usado para apagá-los. Um jogo é reaberto por cima do mundo atual, que é perdido.
-</p>
-<p>
-<strong>Carregar</strong> abre de <a href="new_world.txt">Novo Mundo</a> e <a href="options.txt">Preferências</a> ou pressionando <a href="keys.txt">[L]</a>, e mostra os nomes e data e hora de salvamento dos jogos disponíveis.<br>
-Se todos os jogos não estiverem visíveis: use a <a href="mouse.txt">barra de rolagem</a> no lado direito da lista para percorrer os nomes.
-</p>
-<p>
-Clique em um nome da lista para reabrir o jogo, ou digite o nome na caixa de texto do topo da janela: clique na caixa, digite o nome e pressione [Enter] ou [Return] ou clique em <em>OK</em>.<br>
-Um nome incorreto mostra uma mensagem de erro: feche a mensagem e tente novamente.
-</p>
-<p>
-AVISO: clique no X ao lado do nome para DELETAR o jogo imediata e permanentemente.<br>
-O nome é removido da lista e a janela se fecha. Use com cuidado.
-</p>
-<p>
-IMPORTANTE: novas versões do Simutrans surgem regularmente e jogos de versões anteriores podem não funcionar com versões mais novas. Consulte as notas da nova versão para saber se jogos antigos são compatíveis.
-</p>
-<p>
-Clique em <em>Cancelar</em> para fechar a janela <strong>Carregar</strong>, ou no X do canto superior esquerdo, ou use o teclado.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Carregar jogo</title>
+
+<h1><strong>Carregar jogo</strong></h1>
+
+<p>
+A janela <strong>Carregar</strong> reabre um jogo <a href="save.txt">salvo</a> (para continuar a jogar de onde parou) e pode ser usado para apagá-los. Um jogo é reaberto por cima do mundo atual, que é perdido.
+</p>
+<p>
+<strong>Carregar</strong> abre de <a href="new_world.txt">Novo Mundo</a> e <a href="options.txt">Preferências</a> ou pressionando <a href="keys.txt">[L]</a>, e mostra os nomes e data e hora de salvamento dos jogos disponíveis.<br>
+Se todos os jogos não estiverem visíveis: use a <a href="mouse.txt">barra de rolagem</a> no lado direito da lista para percorrer os nomes.
+</p>
+<p>
+Clique em um nome da lista para reabrir o jogo, ou digite o nome na caixa de texto do topo da janela: clique na caixa, digite o nome e pressione [Enter] ou [Return] ou clique em <em>OK</em>.<br>
+Um nome incorreto mostra uma mensagem de erro: feche a mensagem e tente novamente.
+</p>
+<p>
+AVISO: clique no X ao lado do nome para DELETAR o jogo imediata e permanentemente.<br>
+O nome é removido da lista e a janela se fecha. Use com cuidado.
+</p>
+<p>
+IMPORTANTE: novas versões do Simutrans surgem regularmente e jogos de versões anteriores podem não funcionar com versões mais novas. Consulte as notas da nova versão para saber se jogos antigos são compatíveis.
+</p>
+<p>
+Clique em <em>Cancelar</em> para fechar a janela <strong>Carregar</strong>, ou no X do canto superior esquerdo, ou use o teclado.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/load_relief.txt b/simutrans/text/pt/load_relief.txt
index 5177c3d..2b71c8d 100644
--- a/simutrans/text/pt/load_relief.txt
+++ b/simutrans/text/pt/load_relief.txt
@@ -1,25 +1,25 @@
-<title>Ajuda - Carregar terreno</title>
-
-<h1><strong>Carregar terreno</strong></h1>
-
-<p>
-A janela <strong>Carregar terreno</strong> é usada para abrir um arquivo de mapa personalizado (para ser usado em um novo jogo) e pode ser usada para deletar esses arquivos.<br>
-<p>
-<strong>Carregar terreno</strong> abre a partir da janela de <a href="new_world.txt">Novo mundo</a> e lista nomes, data e hora de salvamento dos mapas disponíveis.<br>
-Se todos os arquivos não estiverem visíveis: use a <a href="mouse.txt">barra de rolagem</a> no lado direito da lista para percorrer os nomes.
-</p>
-<p>
-Clique em um nome da lista para usar; ou digite o nome na caixa de nome no topo da janela: clique na caixa, digite o nome e pressione <a href="keys.txt">[Enter]</a> ou [Return], ou clique em <em>OK</em> (um nome incorreto fechará a janela, tente novamente).
-</p>
-<p>
-AVISO: clique no X ao lado do nome para DELETAR o mapa imediata e permanentemente. O nome é removido da lista e a janela <strong>Carregar terreno</strong> se fecha. Use com cuidado.
-</p>
-<p>
-Alguns mapas personalizados e informações de como criar um estão disponíveis na Internet em http://maps.simutrans.com.<br>
-O arquivo de mapa deverá conter a extensão .ppm e colocado no diretório (ou pasta) chamada ...simutrans/save/
-</p>
-<p>
-Clique em <em>Cancelar</em> para fechar a janela <strong>Carregar terreno</strong>, ou no x do canto superior esquerdo, ou use o teclado.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Carregar terreno</title>
+
+<h1><strong>Carregar terreno</strong></h1>
+
+<p>
+A janela <strong>Carregar terreno</strong> é usada para abrir um arquivo de mapa personalizado (para ser usado em um novo jogo) e pode ser usada para deletar esses arquivos.<br>
+<p>
+<strong>Carregar terreno</strong> abre a partir da janela de <a href="new_world.txt">Novo mundo</a> e lista nomes, data e hora de salvamento dos mapas disponíveis.<br>
+Se todos os arquivos não estiverem visíveis: use a <a href="mouse.txt">barra de rolagem</a> no lado direito da lista para percorrer os nomes.
+</p>
+<p>
+Clique em um nome da lista para usar; ou digite o nome na caixa de nome no topo da janela: clique na caixa, digite o nome e pressione <a href="keys.txt">[Enter]</a> ou [Return], ou clique em <em>OK</em> (um nome incorreto fechará a janela, tente novamente).
+</p>
+<p>
+AVISO: clique no X ao lado do nome para DELETAR o mapa imediata e permanentemente. O nome é removido da lista e a janela <strong>Carregar terreno</strong> se fecha. Use com cuidado.
+</p>
+<p>
+Alguns mapas personalizados e informações de como criar um estão disponíveis na Internet em http://maps.simutrans.com.<br>
+O arquivo de mapa deverá conter a extensão .ppm e colocado no diretório (ou pasta) chamada ...simutrans/save/
+</p>
+<p>
+Clique em <em>Cancelar</em> para fechar a janela <strong>Carregar terreno</strong>, ou no x do canto superior esquerdo, ou use o teclado.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/mailbox.txt b/simutrans/text/pt/mailbox.txt
index 9dcc6f7..c5b0cea 100644
--- a/simutrans/text/pt/mailbox.txt
+++ b/simutrans/text/pt/mailbox.txt
@@ -1,58 +1,58 @@
-<title>Ajuda - Mensagens & Opções das Mensagens</title>
-
-<h1><strong>Mensagens</strong></h1>
-
-<p>
-A janela <strong>Mensagens</strong> lista mensagens do jogo e abre controles para selecionar como são mostradas.
-</p>
-<p>
-Clique no ícone da caixa de correio na barra superior do jogo ou pressione <a href="keys.txt">[B]</a> para abrir a janela <strong>Mensagens</strong>, que lista as mensagens do jogo.<br>
-Clique na mensagem para mover a tela do jogo para a posição relacionada à mensagem.
-</p>
-<p>
-O botão <em>Opções</em> abre <strong>Opções das menssagens</strong> que tem controles para determinar como são exibidas as mensagens.
-</p>
-<br>
-<p>
-<strong>Opções das mensagens</strong>
-</p>
-<p>
-A janela <strong>Opções das mensagens</strong> tem três colunas com botões quadrados que selecionam como são exibidas as mensagens.
-</p>
-<p>
-Da esquerda para a direita, as colunas selecionam se as mensagens são mostradas como: texto rolando na barra inferior do jogo; uma mensagen temporária; ou uma mensagem permanente.<br>
-{Dica: clique no X no canto superior esquedo da mensagem ou use o teclado para fechar mensagens permanentes.}
-</p>
-<p>
-Clique no botões quadrados para selecionar as opções de mensagem (os botões ficam em baixo-relevo quando selecionados) para mensagens seguintes:
-</p>
-<p>
-<em>Ano novo:</em> um novo ano começou.
-</p>
-<p>
-<em>Noticias IA:</em> um <a href="players.txt">jogador IA</a>
- abriu uma nova linha.
-</p>
-<p>
-<em>Not. das cidades:</em> uma <a href="citywindow.txt">área urbana</a> construiu uma prefeitura maior.
-</p>
-<p>
-<em>Sem rota:</em> um veiculo não pode achar uma rota para seu próximo <a href="schedule.txt">destino</a> (uma <a href="station.txt">parada</a> ou ponto de passagem).
-</p>
-<p>
-<em>Indústrias:</em> uma nova cadeia de <a href="industryinfo.txt">indústrias</a> (um consumidor final e os fornecedores nescessários) foi construída devido ao crecimentos de uma <a href="citywindow.txt">cidade</a>.
-</p>
-<p>
-<em>Turistas:</em> uma <a href="curiositylist_filter.txt">atração</a> turística ou menorial foi contruído.
-</p>
-<p>
-<em>Novos veículos:</em> novo veículo disponível, ou fim da produção de um (se a <a href="new_world.txt">linha do tempo</a> for usada).
-</p>
-<p>
-<em>Est. lotada:</em> uma <a href="station.txt">parada</a> está cheia.
-</p>
-<p>
-<em>Problemas</em> conpanhia do jogador está com dívidas, ou outras mensagens críticas.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Mensagens & Opções das Mensagens</title>
+
+<h1><strong>Mensagens</strong></h1>
+
+<p>
+A janela <strong>Mensagens</strong> lista mensagens do jogo e abre controles para selecionar como são mostradas.
+</p>
+<p>
+Clique no ícone da caixa de correio na barra superior do jogo ou pressione <a href="keys.txt">[B]</a> para abrir a janela <strong>Mensagens</strong>, que lista as mensagens do jogo.<br>
+Clique na mensagem para mover a tela do jogo para a posição relacionada à mensagem.
+</p>
+<p>
+O botão <em>Opções</em> abre <strong>Opções das menssagens</strong> que tem controles para determinar como são exibidas as mensagens.
+</p>
+<br>
+<p>
+<strong>Opções das mensagens</strong>
+</p>
+<p>
+A janela <strong>Opções das mensagens</strong> tem três colunas com botões quadrados que selecionam como são exibidas as mensagens.
+</p>
+<p>
+Da esquerda para a direita, as colunas selecionam se as mensagens são mostradas como: texto rolando na barra inferior do jogo; uma mensagen temporária; ou uma mensagem permanente.<br>
+{Dica: clique no X no canto superior esquedo da mensagem ou use o teclado para fechar mensagens permanentes.}
+</p>
+<p>
+Clique no botões quadrados para selecionar as opções de mensagem (os botões ficam em baixo-relevo quando selecionados) para mensagens seguintes:
+</p>
+<p>
+<em>Ano novo:</em> um novo ano começou.
+</p>
+<p>
+<em>Noticias IA:</em> um <a href="players.txt">jogador IA</a>
+ abriu uma nova linha.
+</p>
+<p>
+<em>Not. das cidades:</em> uma <a href="citywindow.txt">área urbana</a> construiu uma prefeitura maior.
+</p>
+<p>
+<em>Sem rota:</em> um veiculo não pode achar uma rota para seu próximo <a href="schedule.txt">destino</a> (uma <a href="station.txt">parada</a> ou ponto de passagem).
+</p>
+<p>
+<em>Indústrias:</em> uma nova cadeia de <a href="industryinfo.txt">indústrias</a> (um consumidor final e os fornecedores nescessários) foi construída devido ao crecimentos de uma <a href="citywindow.txt">cidade</a>.
+</p>
+<p>
+<em>Turistas:</em> uma <a href="curiositylist_filter.txt">atração</a> turística ou menorial foi contruído.
+</p>
+<p>
+<em>Novos veículos:</em> novo veículo disponível, ou fim da produção de um (se a <a href="new_world.txt">linha do tempo</a> for usada).
+</p>
+<p>
+<em>Est. lotada:</em> uma <a href="station.txt">parada</a> está cheia.
+</p>
+<p>
+<em>Problemas</em> conpanhia do jogador está com dívidas, ou outras mensagens críticas.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/map.txt b/simutrans/text/pt/map.txt
index a3c2397..9f6c8ee 100644
--- a/simutrans/text/pt/map.txt
+++ b/simutrans/text/pt/map.txt
@@ -1,81 +1,81 @@
-<title>Ajuda - Mapa</title>
-
-<h1><strong>Mapa</strong></h1>
-
-<p>
-<strong>Mapa</strong> fornece um mapa do mundo atual oferecendo informações sobre terreno, lugares importantes e redes de transporte. Ele também fornece um modo para mover a visão do jogo pelo mundo.
-</p>
-<p>
-Clique no ícone do mapa no topo da visão do jogo ou pressione <a href="keys.txt">[m]</a> para abrir o <strong>Mapa</strong>, cujo tamanho pode ser <a href="mouse.txt">ajustado</a> ou minimizado. As setas esquerda/direita, na barra de título, abre/fecha em estágios: opções do mapa, uma escala de cor mín./máx. que mostra o nível de atividade para algumas das opções, e um botão para as cores das <a href="industry_info.txt">indústrias</a> vistas no mapa.
-</p>
-<p>
-O mapa possui três escalas diferentes: clique com o botão direito do mouse no Mapa (ou aponte com o cursor do mouse e use o scroll) para visualizar as diferentes escalas. Se o mapa inteiro não está visível, então mude a escala do mapa, ou redimensione o <strong>Mapa</strong>, ou mova o mapa para ver a parte desejada: enquanto clica com o botão direito do mouse no mapa, arraste-o (ou use as barras deslizantes nas laterais).
-<p>
-</p>
-No mapa, a água é azul e as terras mais baixas são mais escuras que as terras mais altas. A parte do mundo na visão do jogo é mostrada por um quadrado com contorno amarelo no <strong>Mapa</strong>: o topo da visão do jogo corresponde ao lado superior esquerdo do retângulo amarelo (o Norte está no topo do mapa, enquanto na visão do jogo está no canto superior direito). Se o retângulo amarelo sair da área do mapa, água será vista na visão do jogo na área correspondente.
-</p>
-<p>
-Para mover a visão do jogo por distâncias grandes no mundo, clique com o botão esquerdo no ponto desejado ou clique com o botão esquerdo do mouse e ao mesmo tempo arraste o retângulo amarelo.
-</p>
-<p>
-Aponte o cursor do mouse em uma <a href="industry_info.txt">indústria</a> no mapa, para ver o nome e uma linha branca ligando ao(s) consumidor(es); aperte [Shift] primeiro para mostrar uma linha vermelha ao(s) fornecedor(es).
-</p>
-<p>
-No mapa (quando as opções não estão sendo usadas): <a href="citywindow.txt">áreas urbanas</a>, atrações e túneis aparecem em cinza escuro; canais, azul; estradas, preto; ferrovias e trilhos de bonde, marrom escuro; pontes, cinza-claro; <a href="station.txt">Paradas</a>,vermelho; pistas de monotrilho/maglev, laranja; áreas de aeroporto, bege; e veículos, em amarelo, normalmente em movimento.
-</p>
-<p>
-Clique nos botões de opções para mostrar/ocultar detalhes no mapa de (para os botões aparecerem, clique no botão Legenda):
-</p>
-<p>
-<em>Cidades:</em> nomes das <a href="citywindow.txt">áreas urbanas</a>.
-</p>
-<p>
-<em>Passageiros:</em> área de captura para passageiros por <a href="station.txt">Paradas</a>.
-</p>
-<p>
-<em>Correio:</em> área de captura para correio por <a href="station.txt">Paradas</a>.
-</p>
-<p>
-<em>Mercadoria:</em> nível de mercadorias e passageiros em estradas e outros tipos de vias (usa a escala de cor mín./máx.).
-</p>
-<p>
-<em>Qualificação:</em> as cores indicam a operação da <a href="station.txt">Parada</a> em relação a quão lotada ela está no momento. A mesma cor é mostrada nas barras de status na <a href="haltlist.txt">Lista de Paradas</a> e <a href="station.txt">Informações das Paradas</a> e <a href="linemanagement.txt">Gerenciador de Linhas</a> e é a mesma cor mostrada na barra de cor acima do nome de uma Parada na tela do jogo.
-</p>
-<p>
-<em>Serviço:</em> nível de mercadorias e passageiros usando uma <a href="station.txt">Parada</a> (usa a escala mín./máx.).
-</p>
-<p>
-<em>Tráfego:</em> nível de <a href="convoiinfo.txt">veículos</a> em estradas e outros tipos de vias (usa a escala de cor mín./máx.).
-</p>
-<p>
-<em>Origem:</em> nível de mercadorias e passageiros que começam viagem de uma <a href="station.txt">Parada</a> (usa a escala de cor mín./máx.).
-</p>
-<p>
-<em>Destino:</em> nível de mercadorias e passageiros terminando uma viagem em uma <a href="station.txt">Parada</a> (usa a escala de cor mín./máx.).
-</p>
-<p>
-<em>Espera:</em> nível de mercadorias e passageiros esperando por transporte em uma <a href="station.txt">Parada</a> (usa a escala de cor mín./máx.).
-</p>
-<p>
-<em>Vias:</em> ferrovias e trilhos de bonde e placas; trilhos, pontes e túneis são mostrados com a cor branca (vermelha se for eletrificado) e placas são mostradas com a cor amarela.
-</p>
-<p>
-<em>Vel. Máxima:</em> estradas e pistas são mostradas pela velocidade máxima permitida (usa a escala de cor mín./máx.).
-</p>
-<p>
-<em>L. Elétricas:</em> <a href="special.txt">linhas elétricas</a> (usa a escala de cor mín./máx. para visualizar o nível de abastecimento do momento em que o Mapa foi aberto).
-</p>
-<p>
-<em>Turistas:</em> nível de passageiros que as atrações turísticas geram (usa a escala de cor mín./máx.); esta opção também mostra as atrações turísticas no mapa.
-</p>
-<p>
-<em>Fábricas:</em> enfatiza as <a href="industry_info.txt">indústrias</a>; destaca os consumidores e fornecedores no mapa.
-</p>
-<p>
-<em>Depósitos:</em> enfatiza os <a href="depot.txt">depósitos</a>. As cores indicam o tipo de transporte: navios, vermelho; estradas, amarelo; ferrovias, laranja; aviões, lilás; bondes, laranja escuro; e monotrilhos, marrom escuro.
-</p>
-<p>
-<strong>ATENÇÃO:</strong><em>Esta ajuda está desatualizada nos 2o. e 3o. parágragos! Logo estaremos atualizando-a.</em>
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Mapa</title>
+
+<h1><strong>Mapa</strong></h1>
+
+<p>
+<strong>Mapa</strong> fornece um mapa do mundo atual oferecendo informações sobre terreno, lugares importantes e redes de transporte. Ele também fornece um modo para mover a visão do jogo pelo mundo.
+</p>
+<p>
+Clique no ícone do mapa no topo da visão do jogo ou pressione <a href="keys.txt">[m]</a> para abrir o <strong>Mapa</strong>, cujo tamanho pode ser <a href="mouse.txt">ajustado</a> ou minimizado. As setas esquerda/direita, na barra de título, abre/fecha em estágios: opções do mapa, uma escala de cor mín./máx. que mostra o nível de atividade para algumas das opções, e um botão para as cores das <a href="industry_info.txt">indústrias</a> vistas no mapa.
+</p>
+<p>
+O mapa possui três escalas diferentes: clique com o botão direito do mouse no Mapa (ou aponte com o cursor do mouse e use o scroll) para visualizar as diferentes escalas. Se o mapa inteiro não está visível, então mude a escala do mapa, ou redimensione o <strong>Mapa</strong>, ou mova o mapa para ver a parte desejada: enquanto clica com o botão direito do mouse no mapa, arraste-o (ou use as barras deslizantes nas laterais).
+<p>
+</p>
+No mapa, a água é azul e as terras mais baixas são mais escuras que as terras mais altas. A parte do mundo na visão do jogo é mostrada por um quadrado com contorno amarelo no <strong>Mapa</strong>: o topo da visão do jogo corresponde ao lado superior esquerdo do retângulo amarelo (o Norte está no topo do mapa, enquanto na visão do jogo está no canto superior direito). Se o retângulo amarelo sair da área do mapa, água será vista na visão do jogo na área correspondente.
+</p>
+<p>
+Para mover a visão do jogo por distâncias grandes no mundo, clique com o botão esquerdo no ponto desejado ou clique com o botão esquerdo do mouse e ao mesmo tempo arraste o retângulo amarelo.
+</p>
+<p>
+Aponte o cursor do mouse em uma <a href="industry_info.txt">indústria</a> no mapa, para ver o nome e uma linha branca ligando ao(s) consumidor(es); aperte [Shift] primeiro para mostrar uma linha vermelha ao(s) fornecedor(es).
+</p>
+<p>
+No mapa (quando as opções não estão sendo usadas): <a href="citywindow.txt">áreas urbanas</a>, atrações e túneis aparecem em cinza escuro; canais, azul; estradas, preto; ferrovias e trilhos de bonde, marrom escuro; pontes, cinza-claro; <a href="station.txt">Paradas</a>,vermelho; pistas de monotrilho/maglev, laranja; áreas de aeroporto, bege; e veículos, em amarelo, normalmente em movimento.
+</p>
+<p>
+Clique nos botões de opções para mostrar/ocultar detalhes no mapa de (para os botões aparecerem, clique no botão Legenda):
+</p>
+<p>
+<em>Cidades:</em> nomes das <a href="citywindow.txt">áreas urbanas</a>.
+</p>
+<p>
+<em>Passageiros:</em> área de captura para passageiros por <a href="station.txt">Paradas</a>.
+</p>
+<p>
+<em>Correio:</em> área de captura para correio por <a href="station.txt">Paradas</a>.
+</p>
+<p>
+<em>Mercadoria:</em> nível de mercadorias e passageiros em estradas e outros tipos de vias (usa a escala de cor mín./máx.).
+</p>
+<p>
+<em>Qualificação:</em> as cores indicam a operação da <a href="station.txt">Parada</a> em relação a quão lotada ela está no momento. A mesma cor é mostrada nas barras de status na <a href="haltlist.txt">Lista de Paradas</a> e <a href="station.txt">Informações das Paradas</a> e <a href="linemanagement.txt">Gerenciador de Linhas</a> e é a mesma cor mostrada na barra de cor acima do nome de uma Parada na tela do jogo.
+</p>
+<p>
+<em>Serviço:</em> nível de mercadorias e passageiros usando uma <a href="station.txt">Parada</a> (usa a escala mín./máx.).
+</p>
+<p>
+<em>Tráfego:</em> nível de <a href="convoiinfo.txt">veículos</a> em estradas e outros tipos de vias (usa a escala de cor mín./máx.).
+</p>
+<p>
+<em>Origem:</em> nível de mercadorias e passageiros que começam viagem de uma <a href="station.txt">Parada</a> (usa a escala de cor mín./máx.).
+</p>
+<p>
+<em>Destino:</em> nível de mercadorias e passageiros terminando uma viagem em uma <a href="station.txt">Parada</a> (usa a escala de cor mín./máx.).
+</p>
+<p>
+<em>Espera:</em> nível de mercadorias e passageiros esperando por transporte em uma <a href="station.txt">Parada</a> (usa a escala de cor mín./máx.).
+</p>
+<p>
+<em>Vias:</em> ferrovias e trilhos de bonde e placas; trilhos, pontes e túneis são mostrados com a cor branca (vermelha se for eletrificado) e placas são mostradas com a cor amarela.
+</p>
+<p>
+<em>Vel. Máxima:</em> estradas e pistas são mostradas pela velocidade máxima permitida (usa a escala de cor mín./máx.).
+</p>
+<p>
+<em>L. Elétricas:</em> <a href="special.txt">linhas elétricas</a> (usa a escala de cor mín./máx. para visualizar o nível de abastecimento do momento em que o Mapa foi aberto).
+</p>
+<p>
+<em>Turistas:</em> nível de passageiros que as atrações turísticas geram (usa a escala de cor mín./máx.); esta opção também mostra as atrações turísticas no mapa.
+</p>
+<p>
+<em>Fábricas:</em> enfatiza as <a href="industry_info.txt">indústrias</a>; destaca os consumidores e fornecedores no mapa.
+</p>
+<p>
+<em>Depósitos:</em> enfatiza os <a href="depot.txt">depósitos</a>. As cores indicam o tipo de transporte: navios, vermelho; estradas, amarelo; ferrovias, laranja; aviões, lilás; bondes, laranja escuro; e monotrilhos, marrom escuro.
+</p>
+<p>
+<strong>ATENÇÃO:</strong><em>Esta ajuda está desatualizada nos 2o. e 3o. parágragos! Logo estaremos atualizando-a.</em>
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/monorailtools.txt b/simutrans/text/pt/monorailtools.txt
index a05c979..bb41c60 100644
--- a/simutrans/text/pt/monorailtools.txt
+++ b/simutrans/text/pt/monorailtools.txt
@@ -1,57 +1,57 @@
-<title>Ajuda - Monotrilhos e Maglevs</title>
-
-<h1><strong>Monotrilhos e Maglevs</strong></h1>
-
-<p>
-A <strong>Barra Monotrilhos e Maglevs</strong> mostra as ferramentas para construir uma rede de transporte de monotrilhos ou Maglevs. As ferramentas podem construir ou remover: trilhos de monotrilhos e Maglevs; pontes; túneis; sinais; depósitos; estações-plataforma e extensões. Se jogar com a <a href="new_world.txt">Linha do Tempo</a> ativa, com a passagem do tempo no Simutrans, novas opções podem aparecer.
-</p>
-<p>
-Clique no ícone do monotrilho na barra de ferramentas. Mova o cursor do mouse sobre a barra de opções (após abrir ou clicar na barra de ferramentas) para ver o nome e, onde for o caso, o <a href="finances.txt">custo</a> da construção, custo de manutenção (em parênteses) e limites de velocidade máxima e comprimento máximo.
-</p>
-<p>
-A <strong>Barra Monotrilhos e Maglevs</strong> inclui, da esquerda para a direita:
-</p>
-<p>
-<em>Trilho de monotrilho/Maglev:</em> ferramenta que constrói trilhos, para veículos monotrilhos e Maglevs entre dois pontos. Os trilhos só podem ser construídos em barrancos na direção dos mesmos e não podem encontrar um caminho através de terrenos acidentados, água ou obstáculos. Novos trilhos construídos entre dois pontos podem usar outros trilhos existentes em seu caminho.<br>
-Para construir trilhos: clique no botão para selecionar o trilho desejado (para monotrilho ou Maglev; então o cursor do mouse muda para o formato de um trilho), e então clicar no terreno para construir o ponto inicial para os trilhos (mostra um trator na tela do jogo e mostra as coordenadas no canto direito da barra inferior na tela) e finalmente clique em um outro ponto no terreno para construir o ponto final do trilho. <br>
-{Dica: Diferentes tipos de trilhos podem conectar (não poderão quando construídos por outras <a href="players.txt">companhias</a>). Use o<a href="slopetools.txt"> Editor de terrenos</a> para modificar o terreno, para abrir caminhos para os trilhos. Use o botão Eliminar para remover trilhos individuais e alguns obstáculos. Pressione <a href="keys.txt">[Ctrl]</a> ao mesmo tempo para acessar funções extras. Para desfazer algo já feito aperte [z], mas isso não o reembolsará dos custos de construção.}
-</p>
-<p>
-<em>Remover trecho de monotrilho:</em> essa ferramenta remove trilhos de monotrilhos e Maglevs, quando não há nenhum veículo no momento obstruíndo, entre dois pontos na tela do jogo (platformas and sinais no caminho também são removidos).<br>
-O uso dessa ferramenta implica em <a href="finances.txt">custos de construção</a>.<br>
-Para remover um trilho: clique neste botão (o cursor torna-se num X vermelho); e então clique no trilho a ser destruído (nesse mesmo ponto é fixado um X vermelho); e finalmente clique em um outro ponto nos trilhos, para remover o trecho entre estes dois pontos.<br>
-{Dica: Altere o <a href="players.txt">jogador</a> para remover os trilhos de cada companhia.}
-</p>
-<p>
-<em>Rampas</em> e <em>Pontes:</em> ferramentas que constroem pontes retas, para veículos de monotrilho/maglev passarem, entre dois treços de trilho de monotrilho/maglev na visão do jogo. As pontes têm um comprimento máximo. A ferramenta contrói pontes de uma ponta de trilho até um outro lugar adequado (outra ponta de trilho ou um barranco mais alto, dentro do limite de comprimento.<br>
-Para construir uma rampa ou ponte: clique no botão para selecioná-lo (o cursor torna-se numa ponte), e então clique no fim de um trilho (ponto inicial da ponte) para construí-la. Certas obstruções ou a falta de um local adequado para o fim da ponte evitará a construção da ponte: coloque trilhos em ambos os lados a serem conectados pela ponte, e tente novamente.<br>
-{Dica: Use o botão Eliminar para remover pontes (clique no fim da ponte) e alguns obstáculos à construção da ponte. Use as ferramentas para trilhos para conectar o fim das pontes aos trilhos.}
-</p>
-<p>
-<em>Sinais:</em> essa ferramenta constrói sinais para monotrilhos e Maglevs num trilho na visão do jogo. Os sinais direcionam e regulam o fluxo de veículos em trilhos e pontes, cruzamentos e <a href="station.txt">Paradas</a> (onde os passageiros embarcam e desembarcam nos veículos).<br>
-Versões de sinais de mão-dupla e única podem ser construídas. Para construir um sinal de mão-dupla em um trilho: clique em um dos botões de sinais para escolher um desejado (muda-se o cursor para um sinal); e então clique no trilho. Para construir um sinal de mão-única: clique de novo no mesmo ponto, com o cursor com a forma de um sinal, para escolher entre os sinais de mão-única e dupla.<br>
-IMPORTANTE: Tome cuidado para não colocar sinais de mão-única que impeçam os veículos de chegar aos seus destinos, por padrão os veículos dirigem pela direita (isso pode ser alterado no simuconf.tab).<br>
-- <em>Semáforo de monotrilho:</em> os veículos prosseguem somente se o trilho à frente até o próximo semáforo ou destino na <a href="schedule.txt">Programação</a> (a <a href="station.txt">Parada</a> ou ponto de passagem) não estiver ocupado por um outro veículo. No modo de mão-única os veículos passam apenas em uma única direção.<br>
-- <em>PreSignals:</em> os veículos prosseguem se a seção do trilho à frente (ou entre três sinais consecutivos ou até o próximo destino na <a href="schedule.txt">Programação</a>) não estiver ocupada por um outro veículo. No modo de mão-única eles deixam os veículos passarem em apenas uma direção.<br>
-- <em>Direcionador de monotrilho para vaga livre:</em> direciona os veículos a uma estação vazia, em uma <a href="station.txt">Parada</a> multi-plataforma: um veículo que passa por esse sinal pode usar qualquer plataforma vazia no seu próximo destino, e não apenas aquelas que foram definidas em sua <a href="schedule.txt">Programação</a>. Se não for encontrada uma plataforma vazia ou um caminho vazio até o próximo destino, então os veículos aguardarão nesse sinal.<br>
-{Dica:  Remova sinais com o botão Eliminar. Pressione [Ctrl] para colocar sinais em pontes sobre trilhos em nível inferior.}
-</p>
-<p>
-<a href="depot.txt"><em>Depósito</em></a> <em>de monotrilhos:</em> essa ferramenta constrói um depósito para comprar e gerenciar monotrilhos e Maglevs, tanto veículos como seus vagões. Os depósitos possuem um custo de manutenção e são construídos no fim de um trilho de monotrilho/Maglev.<br>
-Para construir um depósito de monotrilhos: clique no botão (o cursor torna-se num depósito), então clique no fim de um trilho.
-</p>
-<p>
-<em>Estação:</em> essa ferramenta constrói estações, utilizadas por monotrilhos e Maglevs para carregar e descarregar passageiros e correio.<br>
-Uma seção de estação quando não é construída adjacente a uma <a href="station.txt">Parada</a> já existente criará uma nova Parada.<br>
-As estações possuem um custo de manutenção e são construídos sobre trilhos (mas não em curvas e cruzamentos).<br>
-As estações possuem uma área de captura para mercadorias, passageiros e correio. Diferentes estações podem ter diferentes capacidades para mercadorias, passageiros e correio. No canto de alguns botões um ícone (utilizado em <a href="haltlist.txt">Lista de Paradas</a> e <a href="station.txt">Informações das Paradas</a>) mostra quais itens a estação aceita.<br>
-Para construir uma estação: clique neste botão para selecionar (o cursor torna-se numa estação), e então clique em um trilho.<br>
-{Dica: Remova as estações com o botão Eliminar. Estender e criar estações multi-plataformas (construindo mais plataformas nos trilhos) servem para acomodar veículos mais longos e em maior número, aumentar a capacidade e área de captura. Aperte [v] para mostrar/ocultar a área de captura de mercadorias e passageiros na tela do jogo. Pressione [Ctrl] para construir em cima de pontes ou trilhos elevados sobre trilhos em nível inferior.}
-</p>
-<p>
-<em>Suporte para monotrilho:</em>essa ferramenta constrói uma extensão a uma <a href="station.txt">Parada</a> e aumenta a capacidade da mesma. Fundações de monotrilhos são construídas no final de um trilho de monotrilho/Maglev e possuem um custo de manutenção.<br>
-Para construir uma fundação de monotrilho: clique neste botão para selecionar (o cursor torna-se numa fundação), então clique na posição desejada no fim de um trilho.<br>
-{Dica: Remova as fundações de monotrilho com a ferramenta Eliminar.}
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 07/02/2008.
+<title>Ajuda - Monotrilhos e Maglevs</title>
+
+<h1><strong>Monotrilhos e Maglevs</strong></h1>
+
+<p>
+A <strong>Barra Monotrilhos e Maglevs</strong> mostra as ferramentas para construir uma rede de transporte de monotrilhos ou Maglevs. As ferramentas podem construir ou remover: trilhos de monotrilhos e Maglevs; pontes; túneis; sinais; depósitos; estações-plataforma e extensões. Se jogar com a <a href="new_world.txt">Linha do Tempo</a> ativa, com a passagem do tempo no Simutrans, novas opções podem aparecer.
+</p>
+<p>
+Clique no ícone do monotrilho na barra de ferramentas. Mova o cursor do mouse sobre a barra de opções (após abrir ou clicar na barra de ferramentas) para ver o nome e, onde for o caso, o <a href="finances.txt">custo</a> da construção, custo de manutenção (em parênteses) e limites de velocidade máxima e comprimento máximo.
+</p>
+<p>
+A <strong>Barra Monotrilhos e Maglevs</strong> inclui, da esquerda para a direita:
+</p>
+<p>
+<em>Trilho de monotrilho/Maglev:</em> ferramenta que constrói trilhos, para veículos monotrilhos e Maglevs entre dois pontos. Os trilhos só podem ser construídos em barrancos na direção dos mesmos e não podem encontrar um caminho através de terrenos acidentados, água ou obstáculos. Novos trilhos construídos entre dois pontos podem usar outros trilhos existentes em seu caminho.<br>
+Para construir trilhos: clique no botão para selecionar o trilho desejado (para monotrilho ou Maglev; então o cursor do mouse muda para o formato de um trilho), e então clicar no terreno para construir o ponto inicial para os trilhos (mostra um trator na tela do jogo e mostra as coordenadas no canto direito da barra inferior na tela) e finalmente clique em um outro ponto no terreno para construir o ponto final do trilho. <br>
+{Dica: Diferentes tipos de trilhos podem conectar (não poderão quando construídos por outras <a href="players.txt">companhias</a>). Use o<a href="slopetools.txt"> Editor de terrenos</a> para modificar o terreno, para abrir caminhos para os trilhos. Use o botão Eliminar para remover trilhos individuais e alguns obstáculos. Pressione <a href="keys.txt">[Ctrl]</a> ao mesmo tempo para acessar funções extras. Para desfazer algo já feito aperte [z], mas isso não o reembolsará dos custos de construção.}
+</p>
+<p>
+<em>Remover trecho de monotrilho:</em> essa ferramenta remove trilhos de monotrilhos e Maglevs, quando não há nenhum veículo no momento obstruíndo, entre dois pontos na tela do jogo (platformas and sinais no caminho também são removidos).<br>
+O uso dessa ferramenta implica em <a href="finances.txt">custos de construção</a>.<br>
+Para remover um trilho: clique neste botão (o cursor torna-se num X vermelho); e então clique no trilho a ser destruído (nesse mesmo ponto é fixado um X vermelho); e finalmente clique em um outro ponto nos trilhos, para remover o trecho entre estes dois pontos.<br>
+{Dica: Altere o <a href="players.txt">jogador</a> para remover os trilhos de cada companhia.}
+</p>
+<p>
+<em>Rampas</em> e <em>Pontes:</em> ferramentas que constroem pontes retas, para veículos de monotrilho/maglev passarem, entre dois treços de trilho de monotrilho/maglev na visão do jogo. As pontes têm um comprimento máximo. A ferramenta contrói pontes de uma ponta de trilho até um outro lugar adequado (outra ponta de trilho ou um barranco mais alto, dentro do limite de comprimento.<br>
+Para construir uma rampa ou ponte: clique no botão para selecioná-lo (o cursor torna-se numa ponte), e então clique no fim de um trilho (ponto inicial da ponte) para construí-la. Certas obstruções ou a falta de um local adequado para o fim da ponte evitará a construção da ponte: coloque trilhos em ambos os lados a serem conectados pela ponte, e tente novamente.<br>
+{Dica: Use o botão Eliminar para remover pontes (clique no fim da ponte) e alguns obstáculos à construção da ponte. Use as ferramentas para trilhos para conectar o fim das pontes aos trilhos.}
+</p>
+<p>
+<em>Sinais:</em> essa ferramenta constrói sinais para monotrilhos e Maglevs num trilho na visão do jogo. Os sinais direcionam e regulam o fluxo de veículos em trilhos e pontes, cruzamentos e <a href="station.txt">Paradas</a> (onde os passageiros embarcam e desembarcam nos veículos).<br>
+Versões de sinais de mão-dupla e única podem ser construídas. Para construir um sinal de mão-dupla em um trilho: clique em um dos botões de sinais para escolher um desejado (muda-se o cursor para um sinal); e então clique no trilho. Para construir um sinal de mão-única: clique de novo no mesmo ponto, com o cursor com a forma de um sinal, para escolher entre os sinais de mão-única e dupla.<br>
+IMPORTANTE: Tome cuidado para não colocar sinais de mão-única que impeçam os veículos de chegar aos seus destinos, por padrão os veículos dirigem pela direita (isso pode ser alterado no simuconf.tab).<br>
+- <em>Semáforo de monotrilho:</em> os veículos prosseguem somente se o trilho à frente até o próximo semáforo ou destino na <a href="schedule.txt">Programação</a> (a <a href="station.txt">Parada</a> ou ponto de passagem) não estiver ocupado por um outro veículo. No modo de mão-única os veículos passam apenas em uma única direção.<br>
+- <em>PreSignals:</em> os veículos prosseguem se a seção do trilho à frente (ou entre três sinais consecutivos ou até o próximo destino na <a href="schedule.txt">Programação</a>) não estiver ocupada por um outro veículo. No modo de mão-única eles deixam os veículos passarem em apenas uma direção.<br>
+- <em>Direcionador de monotrilho para vaga livre:</em> direciona os veículos a uma estação vazia, em uma <a href="station.txt">Parada</a> multi-plataforma: um veículo que passa por esse sinal pode usar qualquer plataforma vazia no seu próximo destino, e não apenas aquelas que foram definidas em sua <a href="schedule.txt">Programação</a>. Se não for encontrada uma plataforma vazia ou um caminho vazio até o próximo destino, então os veículos aguardarão nesse sinal.<br>
+{Dica:  Remova sinais com o botão Eliminar. Pressione [Ctrl] para colocar sinais em pontes sobre trilhos em nível inferior.}
+</p>
+<p>
+<a href="depot.txt"><em>Depósito</em></a> <em>de monotrilhos:</em> essa ferramenta constrói um depósito para comprar e gerenciar monotrilhos e Maglevs, tanto veículos como seus vagões. Os depósitos possuem um custo de manutenção e são construídos no fim de um trilho de monotrilho/Maglev.<br>
+Para construir um depósito de monotrilhos: clique no botão (o cursor torna-se num depósito), então clique no fim de um trilho.
+</p>
+<p>
+<em>Estação:</em> essa ferramenta constrói estações, utilizadas por monotrilhos e Maglevs para carregar e descarregar passageiros e correio.<br>
+Uma seção de estação quando não é construída adjacente a uma <a href="station.txt">Parada</a> já existente criará uma nova Parada.<br>
+As estações possuem um custo de manutenção e são construídos sobre trilhos (mas não em curvas e cruzamentos).<br>
+As estações possuem uma área de captura para mercadorias, passageiros e correio. Diferentes estações podem ter diferentes capacidades para mercadorias, passageiros e correio. No canto de alguns botões um ícone (utilizado em <a href="haltlist.txt">Lista de Paradas</a> e <a href="station.txt">Informações das Paradas</a>) mostra quais itens a estação aceita.<br>
+Para construir uma estação: clique neste botão para selecionar (o cursor torna-se numa estação), e então clique em um trilho.<br>
+{Dica: Remova as estações com o botão Eliminar. Estender e criar estações multi-plataformas (construindo mais plataformas nos trilhos) servem para acomodar veículos mais longos e em maior número, aumentar a capacidade e área de captura. Aperte [v] para mostrar/ocultar a área de captura de mercadorias e passageiros na tela do jogo. Pressione [Ctrl] para construir em cima de pontes ou trilhos elevados sobre trilhos em nível inferior.}
+</p>
+<p>
+<em>Suporte para monotrilho:</em>essa ferramenta constrói uma extensão a uma <a href="station.txt">Parada</a> e aumenta a capacidade da mesma. Fundações de monotrilhos são construídas no final de um trilho de monotrilho/Maglev e possuem um custo de manutenção.<br>
+Para construir uma fundação de monotrilho: clique neste botão para selecionar (o cursor torna-se numa fundação), então clique na posição desejada no fim de um trilho.<br>
+{Dica: Remova as fundações de monotrilho com a ferramenta Eliminar.}
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 07/02/2008.
 </p>
diff --git a/simutrans/text/pt/new_world.txt b/simutrans/text/pt/new_world.txt
index 2694888..03f6e66 100644
--- a/simutrans/text/pt/new_world.txt
+++ b/simutrans/text/pt/new_world.txt
@@ -1,84 +1,84 @@
-<title>Ajuda - Novo Mundo</title>
-
-<h1><strong>Começar um Novo Jogo</strong></h1>
-
-<p>
-<strong>Novo Mundo</strong> permite modificar as opções para um novo jogo, com um novo mapa e configurações.<br>
-As variáveis incluem: tamanho do terreno, número inicial de áreas urbanas e indústrias.<br>
-Uma prévia do terreno, com os ajustes, é mostrada.
-</p>
-<p>
-<strong>Novo Mundo</strong> abre com <a href="language.txt">Língua</a> e <a href="climates.txt">Controle do Clima</a> quando o Simutrans é iniciado (outras opções do jogo estão desligadas) e também abre do botão <a href="options.txt">Preferências</a> (quaisquer barras de ferramentas, textos e opções no jogo atual são fechados).<br>
-Os atalhos do teclado para abrir a janela <strong>Novo Mundo</strong> incluem apertar <a href="keys.txt">[Q]</a> e [X].
-</p>
-<p>
-Para retornar ao jogo atual, feche a janela <strong>Novo Mundo</strong>: clicando no x no canto superior esquerdo da janela; ou você pode utilizar o teclado.
-</p>
-<p>
-Os botões em forma de seta permitem ajustar as configurações e os botões que podem ser "apertados" (baixo/alto relevo) ligam/desligam opções ou abrem novos controles:
-</p>
-<p>
-<em>Número:</em> seleciona o terreno a ser utilizado no jogo.<br>
-Clique na caixa de texto com o número e digite o número desejado ou use os botões em forma de seta para selecionar um entre vários terrenos.<br>
-A prévia mostra o terreno selecionado (a água é azul, e quanto mais baixo o nível da terra, mais escura fica a cor).
-</p>
-<p>
-<em>Dimensão:</em> ajusta o tamanho do mapa (o número superior é largura, o inferior é altura).<br>
-O número em colchetes é a memória requerida pelo mapa.<br>
-IMPORTANTE: Mapas maiores precisam de mais memória e precisam de mais tempo para serem criados. O jogo e outros gráficos precisam de aproximadamente 88MB no pak64 e 144MB no pak128. Geralmente um computador com 256MB de memória consegue operar mapas com o tamanho de até 512 x 512 quadros.
-</p>
-<p>
-<em>Aleatório:</em> seleciona um novo terreno com um número do mapa aleatório, mas as outras opções não são alteradas.
-</p>
-<p>
-<a href="load_relief.txt"><em>Carregar terreno:</em></a> abre os controles para utilizar os mapas disponíveis personalizados.
-</p>
-<p>
-<em>Cidades:</em> ajusta o número inicial de <a href="citywindow.txt">áreas urbanas</a> no jogo.
-</p>
-<p>
-<em>Moradores por cidade:</em> ajusta a população inicial das áreas urbanas.<br>
-Essa configuração é um valor médio, o Simutrans tentará gerar mais cidades pequenas do que cidades grandes.
-</p>
-<p>
-<em>Ext. vias interurbanas:</em> ajusta a extensão inicial das estradas, entre áreas urbanas, para um novo jogo.
-</p>
-<p>
-<em>Dens. de tráfego:</em> ajusta o número de carros privados nas estradas.<br>
-Valores maiores criam mais tráfego, 0 (zero) gera nenhum. Novos carros aparecerão à medida que as áreas urbanas crescem.
-</p>
-<p>
-<em>Indústrias rurais:</em> ajusta o número inicial de <a href="industry_info.txt">cadeias industriais fornecedoras</a> fora das áreas urbanas.<br>
-Se o terreno é muito irregular o espaço adequado pode não ser encontrado e menos indústrias aparecerão.
-</p>
-<p>
-<em>Indústrias urbanas:</em> ajusta o número inicial de <a href="industry_info.txt">consumidores finais</a> de mercadorias nas áreas urbanas, como lojas e postos de gasolina.<br>
-Novos consumidores (e possivelmente fornecedores, sem ser necessariamente em áreas urbanas) aparecem cada vez que a população aumenta em aproximadamente 2000 habitantes.
-</p>
-<p>
-<a href="curiositylist_filter.txt"><em>Atrações turísticas:</em></a> ajusta o número inicial de construções fora das áreas urbanas que atraem passageiros e correio.<br>
-Essas atrações aparecem fora das áreas urbanas e em somam-se com quaisquer atrações geradas em novas vilas ou cidades no começo do jogo. Essas atrações também geram passageiros e correio.
-</p>
-<p>
-<em>Linha do tempo a partir de:</em> permite alterar o ano em que o jogo começa.
-Quando o botão em forma de quadrado está "apertado", essa opção está selecionada e, ao passar do tempo, mais veículos e opções de construção poderão aparecer.<br>
-Quando o botão em forma de quadrado não está "apertado": o jogo ainda iniciará no ano escolhido, mas todos os veículos e opções de contrução aparecerão imediatamente; as áreas urbanas aparecerão com prédios de todas as épocas; e veículos mais lentos não são tão lucrativos (já que o lucro é calculado pela velocidade média do transporte disponível).
-</p>
-<p>
-<em>Permitir mudança de jogador:</em> essa opção lhe deixa jogar como um <a href="players.txt">jogador</a> dono das empresas que são comandadas pela IA ou como o serviço público (esta opção não pode ser acessada após o jogo ser iniciado).
-</p>
-<p>
-<em>Modo iniciante:</em> essa opção faz com que o jogador receba um lucro maior no jogo por transportar mercadorias e passageiros (padrão: 150% dos valores recebidos no modo normal). Além disso, as <a href="industry_info.txt">Indústrias</a> não pararão de produzir quando o(s) consumidor(es) já tiver(em) excesso de mercadorias.
-</p>
-<p>
-<a href="load.txt">
-<em>Carregar jogo:</em></a> abre os controles para jogar um jogo <a href="save.txt">salvo</a> previamente, substituindo o mundo atual que é perdido ao selecionar um jogo salvo.
-</p>
-<p>
-<em>Criar:</em> cria um novo mundo, usando as configurações mostradas na tela. Clique nesse botão para começar a jogar - Boa Sorte e Curta o Jogo!
-</p>
-<p>
-{Dica: Os valores usados por padrão quando o Simutrans é iniciado e outras configurações podem ser alterados no arquivo simuconf.tab}
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Novo Mundo</title>
+
+<h1><strong>Começar um Novo Jogo</strong></h1>
+
+<p>
+<strong>Novo Mundo</strong> permite modificar as opções para um novo jogo, com um novo mapa e configurações.<br>
+As variáveis incluem: tamanho do terreno, número inicial de áreas urbanas e indústrias.<br>
+Uma prévia do terreno, com os ajustes, é mostrada.
+</p>
+<p>
+<strong>Novo Mundo</strong> abre com <a href="language.txt">Língua</a> e <a href="climates.txt">Controle do Clima</a> quando o Simutrans é iniciado (outras opções do jogo estão desligadas) e também abre do botão <a href="options.txt">Preferências</a> (quaisquer barras de ferramentas, textos e opções no jogo atual são fechados).<br>
+Os atalhos do teclado para abrir a janela <strong>Novo Mundo</strong> incluem apertar <a href="keys.txt">[Q]</a> e [X].
+</p>
+<p>
+Para retornar ao jogo atual, feche a janela <strong>Novo Mundo</strong>: clicando no x no canto superior esquerdo da janela; ou você pode utilizar o teclado.
+</p>
+<p>
+Os botões em forma de seta permitem ajustar as configurações e os botões que podem ser "apertados" (baixo/alto relevo) ligam/desligam opções ou abrem novos controles:
+</p>
+<p>
+<em>Número:</em> seleciona o terreno a ser utilizado no jogo.<br>
+Clique na caixa de texto com o número e digite o número desejado ou use os botões em forma de seta para selecionar um entre vários terrenos.<br>
+A prévia mostra o terreno selecionado (a água é azul, e quanto mais baixo o nível da terra, mais escura fica a cor).
+</p>
+<p>
+<em>Dimensão:</em> ajusta o tamanho do mapa (o número superior é largura, o inferior é altura).<br>
+O número em colchetes é a memória requerida pelo mapa.<br>
+IMPORTANTE: Mapas maiores precisam de mais memória e precisam de mais tempo para serem criados. O jogo e outros gráficos precisam de aproximadamente 88MB no pak64 e 144MB no pak128. Geralmente um computador com 256MB de memória consegue operar mapas com o tamanho de até 512 x 512 quadros.
+</p>
+<p>
+<em>Aleatório:</em> seleciona um novo terreno com um número do mapa aleatório, mas as outras opções não são alteradas.
+</p>
+<p>
+<a href="load_relief.txt"><em>Carregar terreno:</em></a> abre os controles para utilizar os mapas disponíveis personalizados.
+</p>
+<p>
+<em>Cidades:</em> ajusta o número inicial de <a href="citywindow.txt">áreas urbanas</a> no jogo.
+</p>
+<p>
+<em>Moradores por cidade:</em> ajusta a população inicial das áreas urbanas.<br>
+Essa configuração é um valor médio, o Simutrans tentará gerar mais cidades pequenas do que cidades grandes.
+</p>
+<p>
+<em>Ext. vias interurbanas:</em> ajusta a extensão inicial das estradas, entre áreas urbanas, para um novo jogo.
+</p>
+<p>
+<em>Dens. de tráfego:</em> ajusta o número de carros privados nas estradas.<br>
+Valores maiores criam mais tráfego, 0 (zero) gera nenhum. Novos carros aparecerão à medida que as áreas urbanas crescem.
+</p>
+<p>
+<em>Indústrias rurais:</em> ajusta o número inicial de <a href="industry_info.txt">cadeias industriais fornecedoras</a> fora das áreas urbanas.<br>
+Se o terreno é muito irregular o espaço adequado pode não ser encontrado e menos indústrias aparecerão.
+</p>
+<p>
+<em>Indústrias urbanas:</em> ajusta o número inicial de <a href="industry_info.txt">consumidores finais</a> de mercadorias nas áreas urbanas, como lojas e postos de gasolina.<br>
+Novos consumidores (e possivelmente fornecedores, sem ser necessariamente em áreas urbanas) aparecem cada vez que a população aumenta em aproximadamente 2000 habitantes.
+</p>
+<p>
+<a href="curiositylist_filter.txt"><em>Atrações turísticas:</em></a> ajusta o número inicial de construções fora das áreas urbanas que atraem passageiros e correio.<br>
+Essas atrações aparecem fora das áreas urbanas e em somam-se com quaisquer atrações geradas em novas vilas ou cidades no começo do jogo. Essas atrações também geram passageiros e correio.
+</p>
+<p>
+<em>Linha do tempo a partir de:</em> permite alterar o ano em que o jogo começa.
+Quando o botão em forma de quadrado está "apertado", essa opção está selecionada e, ao passar do tempo, mais veículos e opções de construção poderão aparecer.<br>
+Quando o botão em forma de quadrado não está "apertado": o jogo ainda iniciará no ano escolhido, mas todos os veículos e opções de contrução aparecerão imediatamente; as áreas urbanas aparecerão com prédios de todas as épocas; e veículos mais lentos não são tão lucrativos (já que o lucro é calculado pela velocidade média do transporte disponível).
+</p>
+<p>
+<em>Permitir mudança de jogador:</em> essa opção lhe deixa jogar como um <a href="players.txt">jogador</a> dono das empresas que são comandadas pela IA ou como o serviço público (esta opção não pode ser acessada após o jogo ser iniciado).
+</p>
+<p>
+<em>Modo iniciante:</em> essa opção faz com que o jogador receba um lucro maior no jogo por transportar mercadorias e passageiros (padrão: 150% dos valores recebidos no modo normal). Além disso, as <a href="industry_info.txt">Indústrias</a> não pararão de produzir quando o(s) consumidor(es) já tiver(em) excesso de mercadorias.
+</p>
+<p>
+<a href="load.txt">
+<em>Carregar jogo:</em></a> abre os controles para jogar um jogo <a href="save.txt">salvo</a> previamente, substituindo o mundo atual que é perdido ao selecionar um jogo salvo.
+</p>
+<p>
+<em>Criar:</em> cria um novo mundo, usando as configurações mostradas na tela. Clique nesse botão para começar a jogar - Boa Sorte e Curta o Jogo!
+</p>
+<p>
+{Dica: Os valores usados por padrão quando o Simutrans é iniciado e outras configurações podem ser alterados no arquivo simuconf.tab}
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/options.txt b/simutrans/text/pt/options.txt
index c49fdd3..f6de1af 100644
--- a/simutrans/text/pt/options.txt
+++ b/simutrans/text/pt/options.txt
@@ -1,43 +1,43 @@
-<title>Ajuda - Preferências</title>
-
-<h1><strong>Preferências</strong></h1>
-
-<p>
-<strong>Preferências</strong> abre controles para a operação e apresentação do jogo; e sair do Simutrans a partir da janela <strong>Preferências</strong>.
-</p>
-<p>
-Clique sobre o ícone do disquete no topo da tela do jogo para abrir as <strong>Preferências</strong>.
-</p>
-<p>
-Clique sobre um botão para abrir novos controles:
-</p>
-<p>
-<a href="language.txt"><em>Idioma:</em></a> define um idioma a ser usado no jogo.
-</p>
-<p>
-<a href="color.txt"><em>Cor:</em></a> define a cor da companhia do Jogador.
-</p>
-<p>
-<a href="display.txt"><em>Vídeo:</em></a> cofigurações de como o jogo se aparentará visualmente no Simutrans.
-</p>
-<p>
-<a href="sound.txt"><em>
-Som:</em></a> cofigurações para som e música no jogo.
-</p>
-<p>
-<a href="players.txt"><em>Jogadores:</em></a> abre controles para diferentes companhias dos jogadores.
-</p>
-<p>
-<a href="load.txt"><em>Carregar:</em></a> abre controles para continuar um jogo salvo.
-</p>
-<p>
-<a href="save.txt"><em>Salvar:</em></a> abre controles para gravar o atual jogo, para continuar jogar depois.
-</p>
-<p>
-<a href="new_world.txt"><em>Novo Mapa:</em></a> abre controles para començar um novo jogo (isto fecha as barras de ferramentas, textos e opções do jogo atual).
-</p>
-<p>
-<em>Sair:</em> fecha o Simutrans, e o jogo atual não é salvo.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Preferências</title>
+
+<h1><strong>Preferências</strong></h1>
+
+<p>
+<strong>Preferências</strong> abre controles para a operação e apresentação do jogo; e sair do Simutrans a partir da janela <strong>Preferências</strong>.
+</p>
+<p>
+Clique sobre o ícone do disquete no topo da tela do jogo para abrir as <strong>Preferências</strong>.
+</p>
+<p>
+Clique sobre um botão para abrir novos controles:
+</p>
+<p>
+<a href="language.txt"><em>Idioma:</em></a> define um idioma a ser usado no jogo.
+</p>
+<p>
+<a href="color.txt"><em>Cor:</em></a> define a cor da companhia do Jogador.
+</p>
+<p>
+<a href="display.txt"><em>Vídeo:</em></a> cofigurações de como o jogo se aparentará visualmente no Simutrans.
+</p>
+<p>
+<a href="sound.txt"><em>
+Som:</em></a> cofigurações para som e música no jogo.
+</p>
+<p>
+<a href="players.txt"><em>Jogadores:</em></a> abre controles para diferentes companhias dos jogadores.
+</p>
+<p>
+<a href="load.txt"><em>Carregar:</em></a> abre controles para continuar um jogo salvo.
+</p>
+<p>
+<a href="save.txt"><em>Salvar:</em></a> abre controles para gravar o atual jogo, para continuar jogar depois.
+</p>
+<p>
+<a href="new_world.txt"><em>Novo Mapa:</em></a> abre controles para començar um novo jogo (isto fecha as barras de ferramentas, textos e opções do jogo atual).
+</p>
+<p>
+<em>Sair:</em> fecha o Simutrans, e o jogo atual não é salvo.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/players.txt b/simutrans/text/pt/players.txt
index b1dbfb5..2e90357 100644
--- a/simutrans/text/pt/players.txt
+++ b/simutrans/text/pt/players.txt
@@ -1,34 +1,34 @@
-<title>Ajuda - Lista de jogadores</title>
-
-<h1><strong>Lista de jogadores</strong></h1>
-
-<p>
-A <strong>Lista de jogadores</strong> fornece informação e possui controles para as diferentes companhias dos jogadores.
-</p>
-<p>
-Clique em 'Jogadores' na janela <a href="options.txt">Preferências</a> ou pressione <a href="keys.txt">[k]</a> para abrir a <strong>Lista de jogadores</strong>, que mostra o nome das companhias e seus <a href="finances.txt">balanços</a>.
-</p>
-<p>
-Há oito jogadores: jogador humano, Poder público e seis jogadores controlados por inteligência artificial (IA). Os controles permitem jogar como outra companhia de transporte se <a href="new_world.txt">Permitir mudança de jogador</a> foi selecionado na criação do jogo.
-</p>
-<p>
-Clique no botão em forma de seta para atuar como aquela companhia no jogo atual. Uma mensagem de confirmação aparece quando se é trocado o jogador: clique no x do canto superior esquerdo da mensagem ou use o teclado para fechá-la.
-</p>
-<p>
-Clique no nome do jogador para ver suas <a href="finances.txt">Finanças</a>.
-</p>
-<p>
-Clique no botão quadrado ao lado de um jogador de IA para ativá-lo/desativá-lo (o botão aparece pressionado quando a opção é selecionada).
-</p>
-<p>
-Jogadores de IA não vão à bancarrota e gerenciam seus veículos com máxima eficiência.<br>
-Desativando um jogador de IA durante o jogo não removerá sua rede de transporte.<br>
-Alguns jogadores de IA podem usar somente veículos de estradas ou ferrovias, alguns podem somente transportar mercadorias ou passageiros.
-</p>
-<p>
-{Dicas: veículos não podem usar trilhos de outro jogador ou <a href="station.txt">estações</a> (de qualquer modo, veículos de todos os jogadores podem usar itens construídos pelo Poder público).<br>
-Jogadores não podem construir itens ou colocar <a href="special.txt">marcadores</a> nos <a href="railtools.txt">trilhos</a> ou <a href="roadtools.txt">estradas</a> de outro jogador, ou remover itens construídos por outro jogador (de qualquer modo, alguns itens construídos pelo Poder público podem ser removidos usando a ferramenta <a href="removal_tool.txt">Eliminar</a>).<br>
-Desabilitar a mudança de jogador também restringe as <a href="edittools.txt">ferramentas</a> extras como Poder público.}
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Lista de jogadores</title>
+
+<h1><strong>Lista de jogadores</strong></h1>
+
+<p>
+A <strong>Lista de jogadores</strong> fornece informação e possui controles para as diferentes companhias dos jogadores.
+</p>
+<p>
+Clique em 'Jogadores' na janela <a href="options.txt">Preferências</a> ou pressione <a href="keys.txt">[k]</a> para abrir a <strong>Lista de jogadores</strong>, que mostra o nome das companhias e seus <a href="finances.txt">balanços</a>.
+</p>
+<p>
+Há oito jogadores: jogador humano, Poder público e seis jogadores controlados por inteligência artificial (IA). Os controles permitem jogar como outra companhia de transporte se <a href="new_world.txt">Permitir mudança de jogador</a> foi selecionado na criação do jogo.
+</p>
+<p>
+Clique no botão em forma de seta para atuar como aquela companhia no jogo atual. Uma mensagem de confirmação aparece quando se é trocado o jogador: clique no x do canto superior esquerdo da mensagem ou use o teclado para fechá-la.
+</p>
+<p>
+Clique no nome do jogador para ver suas <a href="finances.txt">Finanças</a>.
+</p>
+<p>
+Clique no botão quadrado ao lado de um jogador de IA para ativá-lo/desativá-lo (o botão aparece pressionado quando a opção é selecionada).
+</p>
+<p>
+Jogadores de IA não vão à bancarrota e gerenciam seus veículos com máxima eficiência.<br>
+Desativando um jogador de IA durante o jogo não removerá sua rede de transporte.<br>
+Alguns jogadores de IA podem usar somente veículos de estradas ou ferrovias, alguns podem somente transportar mercadorias ou passageiros.
+</p>
+<p>
+{Dicas: veículos não podem usar trilhos de outro jogador ou <a href="station.txt">estações</a> (de qualquer modo, veículos de todos os jogadores podem usar itens construídos pelo Poder público).<br>
+Jogadores não podem construir itens ou colocar <a href="special.txt">marcadores</a> nos <a href="railtools.txt">trilhos</a> ou <a href="roadtools.txt">estradas</a> de outro jogador, ou remover itens construídos por outro jogador (de qualquer modo, alguns itens construídos pelo Poder público podem ser removidos usando a ferramenta <a href="removal_tool.txt">Eliminar</a>).<br>
+Desabilitar a mudança de jogador também restringe as <a href="edittools.txt">ferramentas</a> extras como Poder público.}
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/railtools.txt b/simutrans/text/pt/railtools.txt
index b5663ef..2ec91f2 100644
--- a/simutrans/text/pt/railtools.txt
+++ b/simutrans/text/pt/railtools.txt
@@ -1,68 +1,68 @@
-<title>Ajuda - Ferrovias</title>
-
-<h1><strong>Ferrovias</strong></h1>
-
-<p>
-A <strong>Barra Ferrovias</strong> mostra as ferramentas para contruir uma rede de transporte sobre trilhos. As ferrementas podem contruir os trilhos (também eletrificar e demolir), pontes, túneis, sinais, depósitos, estações, plataformas e extensões. Se jogar com a <a href="new_world.txt">Linha do Tempo</a> ativa, com a passagem do tempo no Simutrans, novas ferramentas podem aparecer.
-</p>
-<p>
-Clique no ícone de trem na barra de ferramentas. Mova o cursor do mouse por cima do botão, depois de abrir ou clicar na barra de ferramenta, para ver o nome e, onde for o caso, o <a href="finances.txt">custo</a> da construção, custo de manutenção (dentro dos parênteses), limite de velocidade máxima e comprimento máximo.
-</p>
-<p>
-A <strong>Barra Ferrovias</strong> inclui, da esquerda para a direita:
-</p>
-<p>
-<em>Trilhos:</em> ferramenta de contruir trilhos, para trens, entre dois pontos na visão do jogo. Os trilhos só podem ser construídos sobre barrancos na direção dos mesmos e não podem encontrar caminhos através de terreno acidentado ou sobre a água (só se utilizar pontes). Um trilho construído entre dois pontos pode usar um trilho existente em seu caminho.<br>
-Para construir um trilho: clique na ferramenta para selecionar o trilho (o cursor torna-se num trilho), em seguida, clique no terreno para dar o ponto de partida do trilho (mostra um trator na visão do jogo e exibe as coordenadas no mapa inferior direito do ecrã), e finalmente clique no terreno para o ponto final do trilho.<br>
-{Dica: Diferentes tipos de trilhos podem ser ligados (porém não quando construídos por diferentes<a href="players.txt">companhias</a>). Você pode utilizar também pontes e túneis para desviar de montanhas e obstruções. Use <a href="slopetools.txt"> Editor de terrenos</a> para mudar terreno, a fim de permitir caminhos para trilhos. Use a ferramenta Eliminar para remover pistas individuais e algumas obstruções. Use <a href="keys.txt">[Ctrl]</a> ao mesmo tempo para funções extras. Utilize o [z] para desfazer algo que ja foi feito (custos não são reembolsados). Pressione [t] para ativar a ferramenta de contrução do ultimo trilho utilizado.}
-</p>
-<p>
-<em>Eletrificar Trilhos:</em> esta ferramenta eletrifica trilhos, pontes, depósitos e túneis, para uso dos veículos elétricos.<br>
-Clique na ferramenta ou pressione [e] (o cursor torna-se num par de postes de eletrificação), em seguida, clique no trilho na visão do jogo para dar o ponto inicial da eletrificação (o mesmo ícone do cursor é fixado neste ponto), e finalmente clique no segundo ponto no trilho, para eletrificar o trecho entre os dois pontos.<br>
-{Dica: Use a ferramenta Eliminar para remover a eletrificação dos trilhos.}
-</p>
-<p>
-<em>Remover trecho de trilhos:</em> esta ferramenta remove trilhos eletrificados e não eletrificados, quando não há veículos entre dois pontos na visão do jogo (Nota: plataformas, sinais, túneis e pontes do trecho também são removidos). O uso da ferramenta é associada ao custo da contrução.<br>
-Para remover um trecho de trilho: clique na ferramenta (cursor se muda numa cruz vermelha), depois clique no ponto inicial do trecho a ser removido (nesme mesmo ponto é fixado uma cruz vermelha); e finalmente clique em outro ponto do trilho, para remover o trecho entre estes dois pontos.<br>
-{Dica: Altere o <a href="players.txt">jogador</a> para remover os trilhos de cada companhia.}
-</p>
-<p>
-<em>Pontes:</em> ferramenta para construir pontes retas, para os veículos ferroviários passarem, entre duas seções de trilhos na visão do jogo. As pontes têm um comprimento máximo. A ferramenta contrói pontes de uma ponta de trilho até um outro lugar adequado (outra ponta de trilho ou um barranco mais alto, dentro do limite de comprimento).<br>
-Para contruir uma ponte: clique num botão de ponte desejada (o cursor torna-se numa ponte), e clique no final de um trilho (ponto inicial da ponte) para contruir. Alguns obstáculos podem ser passados, mas montanhas altas ou falta de um local adequado para a ponte finalizar podem parar a sua construção, então deve-se colocar o trilho com as pontas alinhadas em ambos os lados do local onde se estará sendo contruída a ponte, e tente novamente.<br>
-{Dicas: Use a ferramenta Eliminar para remover pontes (clique sobre o ponto  final da ponte) e alguns obstáculos à frente, como um edifício alto, por exemplo. Use as ferramentas para trilhos para conectar os fins da ponte aos trilhos.}
-</p>
-<p>
-<em>Túnel para trem:</em> esta ferramenta constrói um túnel reto, para os veículos ferroviários poderem atravessar pelo subsolo, entre dois trilhos alinhados na visão do jogo.
-Túneis não podem ser inclinados: os veículos entram e saem na mesma altura. A ferramenta cria um túnel no fim de um trilho, sendo colocado em um barranco.<br>
-Para construir um túnel: clique na ferramenta (cursor torna-se num túnel) e, em seguida, clique no final do trilho em um baranco para a entrada do túnel. Se um túnel não encontrar uma saída adequada (um barranco livre de obstruções), ele não será construído: coloque o trilho em ambos os lados que devem ser conectados, e tente novamente.<br>
-{Dica: Use a ferramenta de Edição de terrenos e Eliminar para criar locais adequados para entradas e saídas de um túnel. Use as ferramentas para trilhos para conectar saídas de túneis aos trilhos.}
-</p>
-<p>
-<em>Sinais para Trilhos:</em>constrói sinais para os veículos ferroviários em um trilho na visão do jogo. Sinais direcionam e regulam o fluxo de veículos em trilhos e pontes, e em cruzamentos e estações. Sinais bidirecionais e de mão-única também podem ser construídos.<br>
-Para construir um sinal bidirecional no trilho: clique na ferramenta para selecionar sinal (cursor torna-se num par de sinais), depois clique no trilho. Para construir um sinal de mão-única: clique novamente no mesmo ponto, com o cursor de sinais, e clique novamente para voltar a ter um sinal para os dois sentidos.<br>
-IMPORTANTE: Tome cuidado ao colocar sinais de mão única, que impede alguns veículos chegarem ao destino; por padrão veículos são conduzidos à direita (pode ser alterado em simuconf.tab).<br>
--<em>Semáforo ferroviário:</em> os veículos prosseguem somente se o trilho à frente até o próximo semáforo ou até o próximo destino da <a href="schedule.txt">Programação</a> (uma <a href="station.txt">Estação</a> ou ponto de passagem) não está ocupado por nenhum outro veículo. No modo mão-única, estes sinais deixam passar veículos em uma única direção.<br>
-- <em>Sentido único:</em> veículos não prosseguem além do sinal (disponível só em modo mão-única). <br>
--<em>PreSignals:</em> os veículos proseguem se a seção do trilho à frente (ou entre três consecutivos sinais ou até o próximo destino da <a href="schedule.txt">Programação</a>) não está ocupado por nenhum outro veículo. No modo mão-única, estes sinais deixam passar veículos em uma única direção.<br>
--<em>Direcionador ferroviário para vaga livre:</em> direciona os veículos a uma plataforma vazia, em uma estação multi-plataforma: um veículo passando este sinal pode usar qualquer plataforma vazia em seu destino, e não apenas aquelas definidas em sua <a href="convoiinfo.txt">Programação</a>. Se nenhuma plataforma ou rota para o próximo destino vazia é encontrada, os veículos irão esperar nos sinal.<br>
-{Dica: Remova os sinais com a ferramenta Eliminar. Mantenha pressionada <a href="keys.txt">[Ctrl]</a> para colocar sinais sobre pontes ferroviárias acima de trilhos em nível inferior.}
-</p>
-<p>
-<a href="depot.txt"><em>Depósitos</em></a> <em>ferroviários:</em> esta ferramenta cria um depósito para compra e gerenciamento de comboios e composições. Depósitos têm um custo e manutenção e são construídos no final do trilho ferroviário na visão do jogo.<br>
-Para construir um depósito: clique na ferramenta (cursor torna-se num depósito), em seguida, clique no final do trilho.<br>
-{Dica: Para remover depósitos use a ferramenta Eliminar. Depósitos somente mostram veículos elétricos se estiver num trilho eletrificado.}
-</p>
-<p>
-<em>Estações:</em> a ferramenta constrói plataformas, utilizadas pelos veículos para carregar e descarregar mercadorias e passageiros. Plataformas têm um custo e manutenção e são construídas no trilho (mas não em curvas e cruzamentos).<br>
-A plataforma tem uma área de captura para  mercadorias, passageiros e correio. Plataformas diferentes podem ter diferentes capacidades de mercadorias e passageiros. No canto de alguns botões, um ícone (utilizado em <a href="haltlist.txt">Lista de Paradas</a> e <a href="station.txt">Informações das Paradas</a>) mostra quais itens são tratados pela plataforma.<br>
-Para construir uma plataforma: clique na ferramenta para selecionar plataforma (cursor torna-se numa plataforma) e, em seguida, clique no trilho.<br>
-{Dica: Para remover plataformas da estação utilize a ferrementa Eliminar. Estender e criar estações multi-plataformas (construindo mais plataformas nos trilho) servem para acomodar mais veículos, aumentando a capacidade de carregamento. Pressione [v] para mostrar/esconder a área de captura de mercadorias e passageiros na visão do jogo. Mantenha pressionada<a href="keys.txt">[Ctrl]</a> para colocar estações sobre pontes ferroviárias acima de trilhos em nível inferior.}
-</p>
-<p>
-<em>Extensões:</em> esta ferramenta constrói extensões e edifícios para estações, de modo que se possa aumentar a capacidade, área de captura para passageiros e mercadorias, e o custo de manutenção. No canto de alguns botões, um ícone (usado na Lista de Paradas e Informações das Paradas), que mostra itens que são tratados pela extensão.<br>
-Para construir uma extensão: clique na ferramenta para selecionar (cursor torna-se numa estensão) e, em seguida, clique na posição exigida, ao lado de uma estação, na visão do jogo. A nova extensão é agora considerada como sendo parte da estação.<br>
-{Dica: Remova as extensões utilizando a ferramenta Eliminar.}
-</p>
-<p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Ferrovias</title>
+
+<h1><strong>Ferrovias</strong></h1>
+
+<p>
+A <strong>Barra Ferrovias</strong> mostra as ferramentas para contruir uma rede de transporte sobre trilhos. As ferrementas podem contruir os trilhos (também eletrificar e demolir), pontes, túneis, sinais, depósitos, estações, plataformas e extensões. Se jogar com a <a href="new_world.txt">Linha do Tempo</a> ativa, com a passagem do tempo no Simutrans, novas ferramentas podem aparecer.
+</p>
+<p>
+Clique no ícone de trem na barra de ferramentas. Mova o cursor do mouse por cima do botão, depois de abrir ou clicar na barra de ferramenta, para ver o nome e, onde for o caso, o <a href="finances.txt">custo</a> da construção, custo de manutenção (dentro dos parênteses), limite de velocidade máxima e comprimento máximo.
+</p>
+<p>
+A <strong>Barra Ferrovias</strong> inclui, da esquerda para a direita:
+</p>
+<p>
+<em>Trilhos:</em> ferramenta de contruir trilhos, para trens, entre dois pontos na visão do jogo. Os trilhos só podem ser construídos sobre barrancos na direção dos mesmos e não podem encontrar caminhos através de terreno acidentado ou sobre a água (só se utilizar pontes). Um trilho construído entre dois pontos pode usar um trilho existente em seu caminho.<br>
+Para construir um trilho: clique na ferramenta para selecionar o trilho (o cursor torna-se num trilho), em seguida, clique no terreno para dar o ponto de partida do trilho (mostra um trator na visão do jogo e exibe as coordenadas no mapa inferior direito do ecrã), e finalmente clique no terreno para o ponto final do trilho.<br>
+{Dica: Diferentes tipos de trilhos podem ser ligados (porém não quando construídos por diferentes<a href="players.txt">companhias</a>). Você pode utilizar também pontes e túneis para desviar de montanhas e obstruções. Use <a href="slopetools.txt"> Editor de terrenos</a> para mudar terreno, a fim de permitir caminhos para trilhos. Use a ferramenta Eliminar para remover pistas individuais e algumas obstruções. Use <a href="keys.txt">[Ctrl]</a> ao mesmo tempo para funções extras. Utilize o [z] para desfazer algo que ja foi feito (custos não são reembolsados). Pressione [t] para ativar a ferramenta de contrução do ultimo trilho utilizado.}
+</p>
+<p>
+<em>Eletrificar Trilhos:</em> esta ferramenta eletrifica trilhos, pontes, depósitos e túneis, para uso dos veículos elétricos.<br>
+Clique na ferramenta ou pressione [e] (o cursor torna-se num par de postes de eletrificação), em seguida, clique no trilho na visão do jogo para dar o ponto inicial da eletrificação (o mesmo ícone do cursor é fixado neste ponto), e finalmente clique no segundo ponto no trilho, para eletrificar o trecho entre os dois pontos.<br>
+{Dica: Use a ferramenta Eliminar para remover a eletrificação dos trilhos.}
+</p>
+<p>
+<em>Remover trecho de trilhos:</em> esta ferramenta remove trilhos eletrificados e não eletrificados, quando não há veículos entre dois pontos na visão do jogo (Nota: plataformas, sinais, túneis e pontes do trecho também são removidos). O uso da ferramenta é associada ao custo da contrução.<br>
+Para remover um trecho de trilho: clique na ferramenta (cursor se muda numa cruz vermelha), depois clique no ponto inicial do trecho a ser removido (nesme mesmo ponto é fixado uma cruz vermelha); e finalmente clique em outro ponto do trilho, para remover o trecho entre estes dois pontos.<br>
+{Dica: Altere o <a href="players.txt">jogador</a> para remover os trilhos de cada companhia.}
+</p>
+<p>
+<em>Pontes:</em> ferramenta para construir pontes retas, para os veículos ferroviários passarem, entre duas seções de trilhos na visão do jogo. As pontes têm um comprimento máximo. A ferramenta contrói pontes de uma ponta de trilho até um outro lugar adequado (outra ponta de trilho ou um barranco mais alto, dentro do limite de comprimento).<br>
+Para contruir uma ponte: clique num botão de ponte desejada (o cursor torna-se numa ponte), e clique no final de um trilho (ponto inicial da ponte) para contruir. Alguns obstáculos podem ser passados, mas montanhas altas ou falta de um local adequado para a ponte finalizar podem parar a sua construção, então deve-se colocar o trilho com as pontas alinhadas em ambos os lados do local onde se estará sendo contruída a ponte, e tente novamente.<br>
+{Dicas: Use a ferramenta Eliminar para remover pontes (clique sobre o ponto  final da ponte) e alguns obstáculos à frente, como um edifício alto, por exemplo. Use as ferramentas para trilhos para conectar os fins da ponte aos trilhos.}
+</p>
+<p>
+<em>Túnel para trem:</em> esta ferramenta constrói um túnel reto, para os veículos ferroviários poderem atravessar pelo subsolo, entre dois trilhos alinhados na visão do jogo.
+Túneis não podem ser inclinados: os veículos entram e saem na mesma altura. A ferramenta cria um túnel no fim de um trilho, sendo colocado em um barranco.<br>
+Para construir um túnel: clique na ferramenta (cursor torna-se num túnel) e, em seguida, clique no final do trilho em um baranco para a entrada do túnel. Se um túnel não encontrar uma saída adequada (um barranco livre de obstruções), ele não será construído: coloque o trilho em ambos os lados que devem ser conectados, e tente novamente.<br>
+{Dica: Use a ferramenta de Edição de terrenos e Eliminar para criar locais adequados para entradas e saídas de um túnel. Use as ferramentas para trilhos para conectar saídas de túneis aos trilhos.}
+</p>
+<p>
+<em>Sinais para Trilhos:</em>constrói sinais para os veículos ferroviários em um trilho na visão do jogo. Sinais direcionam e regulam o fluxo de veículos em trilhos e pontes, e em cruzamentos e estações. Sinais bidirecionais e de mão-única também podem ser construídos.<br>
+Para construir um sinal bidirecional no trilho: clique na ferramenta para selecionar sinal (cursor torna-se num par de sinais), depois clique no trilho. Para construir um sinal de mão-única: clique novamente no mesmo ponto, com o cursor de sinais, e clique novamente para voltar a ter um sinal para os dois sentidos.<br>
+IMPORTANTE: Tome cuidado ao colocar sinais de mão única, que impede alguns veículos chegarem ao destino; por padrão veículos são conduzidos à direita (pode ser alterado em simuconf.tab).<br>
+-<em>Semáforo ferroviário:</em> os veículos prosseguem somente se o trilho à frente até o próximo semáforo ou até o próximo destino da <a href="schedule.txt">Programação</a> (uma <a href="station.txt">Estação</a> ou ponto de passagem) não está ocupado por nenhum outro veículo. No modo mão-única, estes sinais deixam passar veículos em uma única direção.<br>
+- <em>Sentido único:</em> veículos não prosseguem além do sinal (disponível só em modo mão-única). <br>
+-<em>PreSignals:</em> os veículos proseguem se a seção do trilho à frente (ou entre três consecutivos sinais ou até o próximo destino da <a href="schedule.txt">Programação</a>) não está ocupado por nenhum outro veículo. No modo mão-única, estes sinais deixam passar veículos em uma única direção.<br>
+-<em>Direcionador ferroviário para vaga livre:</em> direciona os veículos a uma plataforma vazia, em uma estação multi-plataforma: um veículo passando este sinal pode usar qualquer plataforma vazia em seu destino, e não apenas aquelas definidas em sua <a href="convoiinfo.txt">Programação</a>. Se nenhuma plataforma ou rota para o próximo destino vazia é encontrada, os veículos irão esperar nos sinal.<br>
+{Dica: Remova os sinais com a ferramenta Eliminar. Mantenha pressionada <a href="keys.txt">[Ctrl]</a> para colocar sinais sobre pontes ferroviárias acima de trilhos em nível inferior.}
+</p>
+<p>
+<a href="depot.txt"><em>Depósitos</em></a> <em>ferroviários:</em> esta ferramenta cria um depósito para compra e gerenciamento de comboios e composições. Depósitos têm um custo e manutenção e são construídos no final do trilho ferroviário na visão do jogo.<br>
+Para construir um depósito: clique na ferramenta (cursor torna-se num depósito), em seguida, clique no final do trilho.<br>
+{Dica: Para remover depósitos use a ferramenta Eliminar. Depósitos somente mostram veículos elétricos se estiver num trilho eletrificado.}
+</p>
+<p>
+<em>Estações:</em> a ferramenta constrói plataformas, utilizadas pelos veículos para carregar e descarregar mercadorias e passageiros. Plataformas têm um custo e manutenção e são construídas no trilho (mas não em curvas e cruzamentos).<br>
+A plataforma tem uma área de captura para  mercadorias, passageiros e correio. Plataformas diferentes podem ter diferentes capacidades de mercadorias e passageiros. No canto de alguns botões, um ícone (utilizado em <a href="haltlist.txt">Lista de Paradas</a> e <a href="station.txt">Informações das Paradas</a>) mostra quais itens são tratados pela plataforma.<br>
+Para construir uma plataforma: clique na ferramenta para selecionar plataforma (cursor torna-se numa plataforma) e, em seguida, clique no trilho.<br>
+{Dica: Para remover plataformas da estação utilize a ferrementa Eliminar. Estender e criar estações multi-plataformas (construindo mais plataformas nos trilho) servem para acomodar mais veículos, aumentando a capacidade de carregamento. Pressione [v] para mostrar/esconder a área de captura de mercadorias e passageiros na visão do jogo. Mantenha pressionada<a href="keys.txt">[Ctrl]</a> para colocar estações sobre pontes ferroviárias acima de trilhos em nível inferior.}
+</p>
+<p>
+<em>Extensões:</em> esta ferramenta constrói extensões e edifícios para estações, de modo que se possa aumentar a capacidade, área de captura para passageiros e mercadorias, e o custo de manutenção. No canto de alguns botões, um ícone (usado na Lista de Paradas e Informações das Paradas), que mostra itens que são tratados pela extensão.<br>
+Para construir uma extensão: clique na ferramenta para selecionar (cursor torna-se numa estensão) e, em seguida, clique na posição exigida, ao lado de uma estação, na visão do jogo. A nova extensão é agora considerada como sendo parte da estação.<br>
+{Dica: Remova as extensões utilizando a ferramenta Eliminar.}
+</p>
+<p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/removal_tool.txt b/simutrans/text/pt/removal_tool.txt
index 08db67b..961381b 100644
--- a/simutrans/text/pt/removal_tool.txt
+++ b/simutrans/text/pt/removal_tool.txt
@@ -1,30 +1,30 @@
-<title>Ajuda - Ferramenta Eliminar</title>
-
-<h1><strong>Ferramenta Eliminar</strong></h1>
-
-<p>
-<strong>Ferramenta Eliminar</strong> é usada para destruir e remover os itens e obstáculos não desejados à construção em um único quadro do terreno na
-<a href="window.txt">tela do jogo</a>.
-</p>
-<p>
-Para usar: Clique no ícone com uma cruz vermelha (ou <it>escavadora</it>, no pak128) no topo da tela do jogo ou pressione <a href="keys.txt">[a]</a> para abrir a <strong>Ferramenta Eliminar</strong> (o cursor torna-se numa cruz vermelha numa nuvem de poeira).<br>
-Posicione o cursor na tela dojogo, um retângulo amarelo indica a posição em que a ferramenta irá operar (as coordenadas do mapa são indicadas na barra cinza abaixo). Então clique sobre o objeto na tela do jogo para remover.
-</p>
-<p>
-O custo do uso da ferramenta é indicado na tela do jogo e aparece bem onde estava o <a href="finances.txt">item eliminado</a>. O custo da remoção é equivalente ao custo da construção para os itens do jogador.<br>
-O custo de destruir <a href="inspection_tool.txt">edifícios da cidade</a> é o mesmo valor apresentado na caixa de diálogo deste edifício aberta pela <it>Ferramenta de verificação</it>. O custo de destruir árvores é de 100 Hajo Credits.
-</p>
-<p>
-<strong>Ferramenta de remoção</strong> pode ser usada para remover os pedestres individuais e os carros privados.
-</p>
-<p>
-A ordem de remoção dos itens em um quadro do terreno: carros e pedestres, sinais, paradas ou plataforma, eletrificação das vias, ponte ou túnel, vias (trilhos primeiramente se sobre estradas).
-</p>
-{Dicas: Para remover um veículo do jogador, venda o veículo a partir de <a href="convoidetail.txt">Detalhes do Comboio</a>.<br>
-Para remover indústrias, atrações turísticas e a prefeitura, primeiro altere para jogador Serviço Público. <it>Por favor atenção:</it> o uso da <strong>ferramenta de remoção</strong> em uma prefeitura removerá todos os edifícios da cidade da área urbana.<br>
-Use <a href="keys.txt">[Ctrl]</a> para usar a ferramenta em objetos no nível superior.<br>
-Para destruir/remover itens de outros jogadores, primeiro faça a mudança de jogador em <a href="players.txt">Lista de Jogadores</a>.<br>
-Para remover trechos de um trilho ou estrada, use <a href="railtools.txt">Remover trecho de trilhos</a> também encontrado em <a href="tramtools.txt">Bondes</a>) ou <a href="roadtools.txt">Remover trecho de estradas</a>.}
-<p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Ferramenta Eliminar</title>
+
+<h1><strong>Ferramenta Eliminar</strong></h1>
+
+<p>
+<strong>Ferramenta Eliminar</strong> é usada para destruir e remover os itens e obstáculos não desejados à construção em um único quadro do terreno na
+<a href="window.txt">tela do jogo</a>.
+</p>
+<p>
+Para usar: Clique no ícone com uma cruz vermelha (ou <it>escavadora</it>, no pak128) no topo da tela do jogo ou pressione <a href="keys.txt">[a]</a> para abrir a <strong>Ferramenta Eliminar</strong> (o cursor torna-se numa cruz vermelha numa nuvem de poeira).<br>
+Posicione o cursor na tela dojogo, um retângulo amarelo indica a posição em que a ferramenta irá operar (as coordenadas do mapa são indicadas na barra cinza abaixo). Então clique sobre o objeto na tela do jogo para remover.
+</p>
+<p>
+O custo do uso da ferramenta é indicado na tela do jogo e aparece bem onde estava o <a href="finances.txt">item eliminado</a>. O custo da remoção é equivalente ao custo da construção para os itens do jogador.<br>
+O custo de destruir <a href="inspection_tool.txt">edifícios da cidade</a> é o mesmo valor apresentado na caixa de diálogo deste edifício aberta pela <it>Ferramenta de verificação</it>. O custo de destruir árvores é de 100 Hajo Credits.
+</p>
+<p>
+<strong>Ferramenta de remoção</strong> pode ser usada para remover os pedestres individuais e os carros privados.
+</p>
+<p>
+A ordem de remoção dos itens em um quadro do terreno: carros e pedestres, sinais, paradas ou plataforma, eletrificação das vias, ponte ou túnel, vias (trilhos primeiramente se sobre estradas).
+</p>
+{Dicas: Para remover um veículo do jogador, venda o veículo a partir de <a href="convoidetail.txt">Detalhes do Comboio</a>.<br>
+Para remover indústrias, atrações turísticas e a prefeitura, primeiro altere para jogador Serviço Público. <it>Por favor atenção:</it> o uso da <strong>ferramenta de remoção</strong> em uma prefeitura removerá todos os edifícios da cidade da área urbana.<br>
+Use <a href="keys.txt">[Ctrl]</a> para usar a ferramenta em objetos no nível superior.<br>
+Para destruir/remover itens de outros jogadores, primeiro faça a mudança de jogador em <a href="players.txt">Lista de Jogadores</a>.<br>
+Para remover trechos de um trilho ou estrada, use <a href="railtools.txt">Remover trecho de trilhos</a> também encontrado em <a href="tramtools.txt">Bondes</a>) ou <a href="roadtools.txt">Remover trecho de estradas</a>.}
+<p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/roadtools.txt b/simutrans/text/pt/roadtools.txt
index 262fe03..a1598a7 100644
--- a/simutrans/text/pt/roadtools.txt
+++ b/simutrans/text/pt/roadtools.txt
@@ -1,66 +1,66 @@
-<title>Ajuda - Estradas</title>
-
-<h1><strong>Estradas</strong></h1>
-
-<p>
-A <strong>Barra Estradas</strong> possibilita a construção de uma rede de transportes rodoviária para mercadorias e passageiros. As ferramentas nesta barra podem construir ou remover: estradas, pontes, túneis, sinais, depósitos, extensões e <a href="station.txt">Paradas</a>. Caso esteja jogando com a <a href="new_world.txt">linha do tempo</a> ativada, então com o passar do tempo mais opções poderão aparecer.
-</p>
-<p>
-Clique no ícone do caminhão na barra de ferramentas. Mova o cursor do mouse sobre a barra de opções (após abrir ou clicar na barra de ferramentas) para ver o nome e, onde for o caso, o <a href="finances.txt">custo</a> da construção, custo de manutenção (em parênteses), velocidade máxima permitida e o comprimento máximo.
-</p>
-<p>
-A <strong>Barra Estradas</strong> inclui, da esquerda para a direita:
-</p>
-<p>
-<em>Estradas:</em> ferramenta a qual constrói uma estrada entre dois pontos para veículos rodoviários. As estradas não podem ser construídas em áreas ocupadas por outras construções, e podem apenas ser construídas em barrancos na direção dos mesmos e não podem encontrar um caminho através de terrenos acidentados ou água. As novas estradas construídas podem se conectar com outras já existentes. Existem atualmente diversos tipos de estradas, com diferentes velocidades máximas permitidas e custos de construção e manutenção.<br>
-Para construir uma estrada: clique em um dos botões com a imagem de uma estrada para escolher um tipo (o cursor torna-se uma estrada), então clique na visão do jogo em um local para ser o ponto inicial da estrada (mostra um trator na visão do jogo e as coordenadas do local na barra inferior da tela no canto direito), e então clique em um outro ponto na visão do jogo para ser o ponto final da estrada.<br>
-{Dica: Diferentes tipos de estradas podem se conectar mesmo se forem construídas por <a href="players.txt">companhias</a> diferentes. Use pontes e túneis para conectar as estradas passando por terreno acidentado, ou para evitar obstáculos. Use o <a href="slopetools.txt">Editor de terrenos</a> para alterar o terreno, abrindo caminhos para as estradas. Use o botão Eliminar para remover seções individuais de estradas e alguns obstáculos. Aperte <a href="keys.txt">[Ctrl]</a> ao mesmo tempo para funções extras. Desfazendo alterações apertando [z] não o reembolsa dos custos da construção. Aperte [s] para selecionar a última ferramenta para construção de estradas usada.}
-</p>
-<p>
-<em>Remover trecho de estrada:</em> essa ferramenta remove estradas, quando não há nenhum veículo passando, entre dois pontos na visão do jogo (qualquer Parada rodoviária, sinal, túnel ou ponte no caminho é removido junto). O uso dessa ferramenta implica em <a href="finances.txt">custos de construção</a>.<br>
-Para remover um trecho de estrada: clique nessa ferramenta (muda o cursor para um X vermelho); então clique no trecho a ser destruído (nesse mesmo ponto é fixado um X vermelho); e finalmente clique em um outro ponto na estrada, para remover o trecho entre os dois pontos.<br>
-{Dica: Jogue como uma outra <a href="players.txt">companhia</a> para remover suas respectivas estradas.}
-</p>
-<p>
-<em>Ponte rodoviária:</em> possibilita a construção de pontes retas, para que os veículos possam passar entre dois trechos de estrada na visão do jogo. As pontes têm uma extensão máxima. Essa ferramenta constrói as pontes a partir do fim de uma estrada até um local adequado (outro fim de estrada ou um local com uma altitude levemente superior, dentro dos limites do comprimento máximo permitido).<br>
-Para construir uma ponte: clique em uma ferramenta de construção de ponte rodoviária para selecionar um tipo (muda o cursor para uma ponte), e então clique no fim de uma estrada (ponto inicial da ponte). Certos obstáculos ou a falta de um local adequado para o fim da ponte pode cancelar a construção da ponte: construa estradas em ambos os lados a serem conectados pela ponte, e tente novamente.<br>
-{Dica: Use o botão Eliminar para remover pontes (clique no fim da ponte) e também certos obstáculos à construção de pontes. Use os botões de construção de <em>Estradas</em> para conectar as extremidades das pontes às estradas.}
-</p>
-<p>
-<em>Túnel rodoviário:</em> possibilita a construção de um túnel reto, para que os veículos possam passar através da terra, entre dois trechos de estrada na visão do jogo.
-Os túneis não podem ser inclinados: os veículos entram e saem dos túneis a uma mesma altitude.<br>
-Essa ferramenta constrói um túnel, a partir do fim de uma estrada colocada em uma inclinação.
-Para construir um túnel: clique nessa ferramenta (muda o cursor para um túnel), e então clique em um fim de estrada em um uma inclinação para construir a entrada do túnel. Se o túnel não puder encontrar uma saída adequada (uma inclinação livre de obstáculos), ele não será construído: então coloque um fim de estrada em ambos os lados que serão conectados, e tente novamente.<br>
-{Dica: Use o Editor de terrenos e o botão Eliminar para criar locais adequados para as entradas e saídas de túneis. Use os botões de construção de estradas para conectar as saídas dos túneis às estradas.}
-</p>
-<p>
-<em>Sinais e bloqueadores rodoviários:</em> constróem sinais e barreiras rodoviárias para os veículos que ali transitam, na visão do jogo. Esses sinais direcionam e regulam o fluxo de veículos em estradas e pontes, e em cruzamentos e Paradas (onde passageiros e mercadorias são carregados e descarregados). Versões de mão-única e mão-dupla de alguns sinais podem ser construídos.<br>
-IMPORTANTE: Tome cuidado para não colocar sinais que evitam os veículos a chegarem aos seus destinos, por padrão os veículos dirigem pelo lado direito (isso pode ser alterado no simuconf.tab).<br>
-- <em>Semáforo:</em> essa ferramenta constrói semáforos que controlam o fluxo de veículos rodoviários em cruzamentos, tanto deixando-os passarem ou fazendo-os aguardarem por um tempo. Clique nessa ferramenta para selecioná-la (muda o cursor para um semáforo), e então clique na estrada para colocar um semáforo ali. Clique novamente nos cruzamentos para alterar a orientação dos semáforos.<br>
-- <em>Bloqueio:</em> (disponível só em pak128) essa ferramenta constrói uma barreira para impedir veículos rodoviários de prosseguirem. Clique na ferramenta para selecionar (o cursor torna-se num bloqueio), então clique na estrada para construir.<br>
-- <em>Sentido único:</em> essa ferramenta constrói um sinal que evita os veículos passarem daquele ponto, usando um lado da estrada. Clique nesse botão para selecioná-lo (o cursor muda para essa placa), e então clique em um trecho na estrada para colocar a placa ali; clique novamente no mesmo lugar para mudar o lado da estrada o qual a placa está.<br>
-- <em>Velocidade mínima de 80km/h</em> essa ferramenta constrói uma placa que evita os veículos com velocidade máxima inferior a 80 km/h de continuar naquela estrada. Clique nesse botão para selecioná-lo (o cursor muda para essa placa), e então clique em um trecho na estrada para colocar a placa ali; clique novamente no mesmo lugar para mudar o lado da estrada o qual a placa está, alterando o lado da estrada o qual o efeito da placa será aplicado.<br>
-- <em>Direcionador rodoviário para vaga livre:</em> essa ferramenta constrói uma placa a qual direciona um veículo rodoviário a uma seção livre de uma <a href="station.txt">Parada</a> com várias seções para carregar/descarregar mercadorias e passageiros: um veículo que passa por este sinal pode usar qualquer seção de uma Parada livre que esteja em seu próximo destino, e não apenas a um determinado pela sua <a href="schedule.txt">Programação</a>. Se não houver nenhuma vaga livre ou caminho livre ao seu próximo destino, o veículo aguardará na placa. Clique nessa ferramenta para selecioná-la (o cursor muda para essa placa), e então clique em um trecho na estrada para colocar ali a placa, e clique novamente no mesmo trecho para alterar o lado da estrada o qual a placa está, alterando o lado o qual os efeitos da placa serão aplicados.<br>
-- <em>Vias expressas:</em> (disponível só em pak128) ferramentas que constroem um sinal que só permite veículos proceder numa direção em uma estrada se a velocidade máxima deles for mais de 80km/h.<br>
-Clique em um dos botões acima para selecionar um deles (o cursor muda para o respectivo sinal), e então clique em um trecho na estrada para colocar ali o sinal, e clique novamente no mesmo local para alterar o lado da estrada o qual o sinal está, alterando também o lado o qual os efeitos do mesmo serão aplicados.<br>
-{Dica: Remova sinais com o botão Eliminar. Pressione [Ctrl] para colocar sinais em pontes sobre estradas construídas em um nível inferior.}
-</p>
-<p>
-<a href="depot.txt"><em>Garagem:</em></a> essa ferramenta constrói uma garagem para a compra e gerenciar veículos rodoviários e seus reboques. As garagens possuem custos de manutenção e são construídos no fim de uma estrada.<br>
-Para construir uma garagem: clique neste botão (muda o cursor para uma garagem), e então clique no fim de uma estrada.<br>
-{Dica: Use o botão Eliminar para destruir Garagens.}
-</p>
-<p>
-<em>Estacionamento:</em> (disponível só em pak 128) ferramentas que constroem extensões para <a href="station.txt">Paradas</a>, as quais aumentam capacidade e área de captura para bens e passageiros, e o custo de manutenção.<br>
-Para construir uma extensão: clique numa ferramenta para selecionar uma extensão (cursor torna-se numa extensão), então clique na posição desejada numa estrada, ao lado de uma Parada existente na visão do jogo. A nova extensão agora passa a ser considerada parte da Parada.<br>
-{Dicas: Remova extensões com a ferramenta Eliminar.}
-</p>
-<p>
-<em>Paradas rodoviárias:</em> essas ferramentas possibilitam a construção de locais para que os veículos rodoviários possam carregar/descarregar mercadorias e passageiros.<br>
-Quando uma seção de uma Parada rodoviária não é construída ao lado de uma <a href="station.txt">Parada</a> já existente, uma nova Parada será criada.<br>
-Paradas rodoviárias são construídas sobre <a href="roadtools.txt">estradas</a> já existentes e possuem um custo de manutenção e uma área de captura de mercadorias, passageiros e correio. No canto de certos botões um ícone (utilizado na Lista de Paradas e na Informação da Parada) mostra quais itens a Parada aceita. Diferentes Paradas podem possuir capacidades diferentes para mercadorias, passageiros e correio.<br>
-Para construir uma Parada: clique em um dos botões de construção de um tipo de Parada (muda o cursor para a Parada correspondente), e então clique na posição desejada em uma estrada.<br>
-{Dica: Remova as Paradas com o botão Eliminar. Pressione [v] para mostrar/ocultar a área de captura de mercadorias e passageiros na tela do jogo. As Paradas rodoviárias não podem ser colocadas em uma estrada construída por outras companhias. Pressione [Ctrl] para construir em pontes sobre rodovias em um nível inferior. Crie Paradas com múltiplas vagas para veículos para aumentar a capacidade e a área de captura.}
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 07/02/2008.
+<title>Ajuda - Estradas</title>
+
+<h1><strong>Estradas</strong></h1>
+
+<p>
+A <strong>Barra Estradas</strong> possibilita a construção de uma rede de transportes rodoviária para mercadorias e passageiros. As ferramentas nesta barra podem construir ou remover: estradas, pontes, túneis, sinais, depósitos, extensões e <a href="station.txt">Paradas</a>. Caso esteja jogando com a <a href="new_world.txt">linha do tempo</a> ativada, então com o passar do tempo mais opções poderão aparecer.
+</p>
+<p>
+Clique no ícone do caminhão na barra de ferramentas. Mova o cursor do mouse sobre a barra de opções (após abrir ou clicar na barra de ferramentas) para ver o nome e, onde for o caso, o <a href="finances.txt">custo</a> da construção, custo de manutenção (em parênteses), velocidade máxima permitida e o comprimento máximo.
+</p>
+<p>
+A <strong>Barra Estradas</strong> inclui, da esquerda para a direita:
+</p>
+<p>
+<em>Estradas:</em> ferramenta a qual constrói uma estrada entre dois pontos para veículos rodoviários. As estradas não podem ser construídas em áreas ocupadas por outras construções, e podem apenas ser construídas em barrancos na direção dos mesmos e não podem encontrar um caminho através de terrenos acidentados ou água. As novas estradas construídas podem se conectar com outras já existentes. Existem atualmente diversos tipos de estradas, com diferentes velocidades máximas permitidas e custos de construção e manutenção.<br>
+Para construir uma estrada: clique em um dos botões com a imagem de uma estrada para escolher um tipo (o cursor torna-se uma estrada), então clique na visão do jogo em um local para ser o ponto inicial da estrada (mostra um trator na visão do jogo e as coordenadas do local na barra inferior da tela no canto direito), e então clique em um outro ponto na visão do jogo para ser o ponto final da estrada.<br>
+{Dica: Diferentes tipos de estradas podem se conectar mesmo se forem construídas por <a href="players.txt">companhias</a> diferentes. Use pontes e túneis para conectar as estradas passando por terreno acidentado, ou para evitar obstáculos. Use o <a href="slopetools.txt">Editor de terrenos</a> para alterar o terreno, abrindo caminhos para as estradas. Use o botão Eliminar para remover seções individuais de estradas e alguns obstáculos. Aperte <a href="keys.txt">[Ctrl]</a> ao mesmo tempo para funções extras. Desfazendo alterações apertando [z] não o reembolsa dos custos da construção. Aperte [s] para selecionar a última ferramenta para construção de estradas usada.}
+</p>
+<p>
+<em>Remover trecho de estrada:</em> essa ferramenta remove estradas, quando não há nenhum veículo passando, entre dois pontos na visão do jogo (qualquer Parada rodoviária, sinal, túnel ou ponte no caminho é removido junto). O uso dessa ferramenta implica em <a href="finances.txt">custos de construção</a>.<br>
+Para remover um trecho de estrada: clique nessa ferramenta (muda o cursor para um X vermelho); então clique no trecho a ser destruído (nesse mesmo ponto é fixado um X vermelho); e finalmente clique em um outro ponto na estrada, para remover o trecho entre os dois pontos.<br>
+{Dica: Jogue como uma outra <a href="players.txt">companhia</a> para remover suas respectivas estradas.}
+</p>
+<p>
+<em>Ponte rodoviária:</em> possibilita a construção de pontes retas, para que os veículos possam passar entre dois trechos de estrada na visão do jogo. As pontes têm uma extensão máxima. Essa ferramenta constrói as pontes a partir do fim de uma estrada até um local adequado (outro fim de estrada ou um local com uma altitude levemente superior, dentro dos limites do comprimento máximo permitido).<br>
+Para construir uma ponte: clique em uma ferramenta de construção de ponte rodoviária para selecionar um tipo (muda o cursor para uma ponte), e então clique no fim de uma estrada (ponto inicial da ponte). Certos obstáculos ou a falta de um local adequado para o fim da ponte pode cancelar a construção da ponte: construa estradas em ambos os lados a serem conectados pela ponte, e tente novamente.<br>
+{Dica: Use o botão Eliminar para remover pontes (clique no fim da ponte) e também certos obstáculos à construção de pontes. Use os botões de construção de <em>Estradas</em> para conectar as extremidades das pontes às estradas.}
+</p>
+<p>
+<em>Túnel rodoviário:</em> possibilita a construção de um túnel reto, para que os veículos possam passar através da terra, entre dois trechos de estrada na visão do jogo.
+Os túneis não podem ser inclinados: os veículos entram e saem dos túneis a uma mesma altitude.<br>
+Essa ferramenta constrói um túnel, a partir do fim de uma estrada colocada em uma inclinação.
+Para construir um túnel: clique nessa ferramenta (muda o cursor para um túnel), e então clique em um fim de estrada em um uma inclinação para construir a entrada do túnel. Se o túnel não puder encontrar uma saída adequada (uma inclinação livre de obstáculos), ele não será construído: então coloque um fim de estrada em ambos os lados que serão conectados, e tente novamente.<br>
+{Dica: Use o Editor de terrenos e o botão Eliminar para criar locais adequados para as entradas e saídas de túneis. Use os botões de construção de estradas para conectar as saídas dos túneis às estradas.}
+</p>
+<p>
+<em>Sinais e bloqueadores rodoviários:</em> constróem sinais e barreiras rodoviárias para os veículos que ali transitam, na visão do jogo. Esses sinais direcionam e regulam o fluxo de veículos em estradas e pontes, e em cruzamentos e Paradas (onde passageiros e mercadorias são carregados e descarregados). Versões de mão-única e mão-dupla de alguns sinais podem ser construídos.<br>
+IMPORTANTE: Tome cuidado para não colocar sinais que evitam os veículos a chegarem aos seus destinos, por padrão os veículos dirigem pelo lado direito (isso pode ser alterado no simuconf.tab).<br>
+- <em>Semáforo:</em> essa ferramenta constrói semáforos que controlam o fluxo de veículos rodoviários em cruzamentos, tanto deixando-os passarem ou fazendo-os aguardarem por um tempo. Clique nessa ferramenta para selecioná-la (muda o cursor para um semáforo), e então clique na estrada para colocar um semáforo ali. Clique novamente nos cruzamentos para alterar a orientação dos semáforos.<br>
+- <em>Bloqueio:</em> (disponível só em pak128) essa ferramenta constrói uma barreira para impedir veículos rodoviários de prosseguirem. Clique na ferramenta para selecionar (o cursor torna-se num bloqueio), então clique na estrada para construir.<br>
+- <em>Sentido único:</em> essa ferramenta constrói um sinal que evita os veículos passarem daquele ponto, usando um lado da estrada. Clique nesse botão para selecioná-lo (o cursor muda para essa placa), e então clique em um trecho na estrada para colocar a placa ali; clique novamente no mesmo lugar para mudar o lado da estrada o qual a placa está.<br>
+- <em>Velocidade mínima de 80km/h</em> essa ferramenta constrói uma placa que evita os veículos com velocidade máxima inferior a 80 km/h de continuar naquela estrada. Clique nesse botão para selecioná-lo (o cursor muda para essa placa), e então clique em um trecho na estrada para colocar a placa ali; clique novamente no mesmo lugar para mudar o lado da estrada o qual a placa está, alterando o lado da estrada o qual o efeito da placa será aplicado.<br>
+- <em>Direcionador rodoviário para vaga livre:</em> essa ferramenta constrói uma placa a qual direciona um veículo rodoviário a uma seção livre de uma <a href="station.txt">Parada</a> com várias seções para carregar/descarregar mercadorias e passageiros: um veículo que passa por este sinal pode usar qualquer seção de uma Parada livre que esteja em seu próximo destino, e não apenas a um determinado pela sua <a href="schedule.txt">Programação</a>. Se não houver nenhuma vaga livre ou caminho livre ao seu próximo destino, o veículo aguardará na placa. Clique nessa ferramenta para selecioná-la (o cursor muda para essa placa), e então clique em um trecho na estrada para colocar ali a placa, e clique novamente no mesmo trecho para alterar o lado da estrada o qual a placa está, alterando o lado o qual os efeitos da placa serão aplicados.<br>
+- <em>Vias expressas:</em> (disponível só em pak128) ferramentas que constroem um sinal que só permite veículos proceder numa direção em uma estrada se a velocidade máxima deles for mais de 80km/h.<br>
+Clique em um dos botões acima para selecionar um deles (o cursor muda para o respectivo sinal), e então clique em um trecho na estrada para colocar ali o sinal, e clique novamente no mesmo local para alterar o lado da estrada o qual o sinal está, alterando também o lado o qual os efeitos do mesmo serão aplicados.<br>
+{Dica: Remova sinais com o botão Eliminar. Pressione [Ctrl] para colocar sinais em pontes sobre estradas construídas em um nível inferior.}
+</p>
+<p>
+<a href="depot.txt"><em>Garagem:</em></a> essa ferramenta constrói uma garagem para a compra e gerenciar veículos rodoviários e seus reboques. As garagens possuem custos de manutenção e são construídos no fim de uma estrada.<br>
+Para construir uma garagem: clique neste botão (muda o cursor para uma garagem), e então clique no fim de uma estrada.<br>
+{Dica: Use o botão Eliminar para destruir Garagens.}
+</p>
+<p>
+<em>Estacionamento:</em> (disponível só em pak 128) ferramentas que constroem extensões para <a href="station.txt">Paradas</a>, as quais aumentam capacidade e área de captura para bens e passageiros, e o custo de manutenção.<br>
+Para construir uma extensão: clique numa ferramenta para selecionar uma extensão (cursor torna-se numa extensão), então clique na posição desejada numa estrada, ao lado de uma Parada existente na visão do jogo. A nova extensão agora passa a ser considerada parte da Parada.<br>
+{Dicas: Remova extensões com a ferramenta Eliminar.}
+</p>
+<p>
+<em>Paradas rodoviárias:</em> essas ferramentas possibilitam a construção de locais para que os veículos rodoviários possam carregar/descarregar mercadorias e passageiros.<br>
+Quando uma seção de uma Parada rodoviária não é construída ao lado de uma <a href="station.txt">Parada</a> já existente, uma nova Parada será criada.<br>
+Paradas rodoviárias são construídas sobre <a href="roadtools.txt">estradas</a> já existentes e possuem um custo de manutenção e uma área de captura de mercadorias, passageiros e correio. No canto de certos botões um ícone (utilizado na Lista de Paradas e na Informação da Parada) mostra quais itens a Parada aceita. Diferentes Paradas podem possuir capacidades diferentes para mercadorias, passageiros e correio.<br>
+Para construir uma Parada: clique em um dos botões de construção de um tipo de Parada (muda o cursor para a Parada correspondente), e então clique na posição desejada em uma estrada.<br>
+{Dica: Remova as Paradas com o botão Eliminar. Pressione [v] para mostrar/ocultar a área de captura de mercadorias e passageiros na tela do jogo. As Paradas rodoviárias não podem ser colocadas em uma estrada construída por outras companhias. Pressione [Ctrl] para construir em pontes sobre rodovias em um nível inferior. Crie Paradas com múltiplas vagas para veículos para aumentar a capacidade e a área de captura.}
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 07/02/2008.
 </p>
diff --git a/simutrans/text/pt/save.txt b/simutrans/text/pt/save.txt
index 9d7f145..d506b42 100644
--- a/simutrans/text/pt/save.txt
+++ b/simutrans/text/pt/save.txt
@@ -1,37 +1,37 @@
-<title>Ajuda - Salvar</title>
-
-<h1><strong>Salvar</strong></h1>
-
-<p>
-<strong>Salvar</strong> armazena o jogo atual a um arquivo (para continuar o jogo mais tarde) e pode ser usado para apagar esses arquivos.
-</p>
-<p>
-<strong>Salvar</strong> abre-se de <a href="options.txt">Opções de Jogo</a> ou prosionando a tecla <a href="keys.txt">[S]</a>; também lista nome, data e hora dos jogos precedentes.<br>
-Se todos os nomes não estiverem visíveis: use a <a href="mouse.txt">barra de rolagem</a> no lado direito para rolar os nomes.
-</p>
-<p>
-O jogo atual pode ser salvo em um novo arquivo ou em cima de um jogo já existente.<br>
-Para salvar em um novo arquivo, entre com o novo nome no campo de preenchimento "Arquivo" no topo de
- <strong>Salvar</strong>: clique no campo "Arquivo", digite um nome e pressione [Enter] ou [Backspace] ou clique em <em>OK</em>; o novo nome de arquivo é listado.<br>
-IMPORTANTE: Se um nome de arquivo listado é usado: o jogo velho é substituído, pelo jogo atual e apagado.
-</p>
-<p>
-Por padrão o jogo atual aparece no campo "Arquivo", para salvar este arquivo: clique em <em>OK</em> (os dados velhos serão apagados e substituídos pelos novos).<br>
-Para salvar o jogo em cima de um arquivo velho: clique em um nome da lista (o jogo velho substituído pelo jogo atual).
-</p>
-<p>
-Os nome de arquivos podem ser combinações de letras, números e simbolos com o comprimento máximo de 57 caracteres; depois de salvar, só 20 (aprox.) caracteres são mostrados em <strong>Salvar</strong> e
-<a href="load.txt">Carregar</a>.
-</p>
-<p>
-AVISO: Apertando o botão X na frente do nome de um arquivo ele será APAGADO imediatamente e pemanentemente, o arquivo será retirado da lista e o <strong>Salvar</strong>será fechado. Use esta função cuidadosamente.
-</p>
-<p>
-{Dica: Recomece um jogo salvo a partir do <a href="load.txt">Carregar</a>.<br>
-Mude o autosave (salvamento automático do jogo) no simuconf.tab}.
-</p>
-<p>
-Clique em <em>Cancelar</em> para fechar <strong>Salvar</strong>; ou no X no canto superior esquerdo da janela; ou use o teclado.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Salvar</title>
+
+<h1><strong>Salvar</strong></h1>
+
+<p>
+<strong>Salvar</strong> armazena o jogo atual a um arquivo (para continuar o jogo mais tarde) e pode ser usado para apagar esses arquivos.
+</p>
+<p>
+<strong>Salvar</strong> abre-se de <a href="options.txt">Opções de Jogo</a> ou prosionando a tecla <a href="keys.txt">[S]</a>; também lista nome, data e hora dos jogos precedentes.<br>
+Se todos os nomes não estiverem visíveis: use a <a href="mouse.txt">barra de rolagem</a> no lado direito para rolar os nomes.
+</p>
+<p>
+O jogo atual pode ser salvo em um novo arquivo ou em cima de um jogo já existente.<br>
+Para salvar em um novo arquivo, entre com o novo nome no campo de preenchimento "Arquivo" no topo de
+ <strong>Salvar</strong>: clique no campo "Arquivo", digite um nome e pressione [Enter] ou [Backspace] ou clique em <em>OK</em>; o novo nome de arquivo é listado.<br>
+IMPORTANTE: Se um nome de arquivo listado é usado: o jogo velho é substituído, pelo jogo atual e apagado.
+</p>
+<p>
+Por padrão o jogo atual aparece no campo "Arquivo", para salvar este arquivo: clique em <em>OK</em> (os dados velhos serão apagados e substituídos pelos novos).<br>
+Para salvar o jogo em cima de um arquivo velho: clique em um nome da lista (o jogo velho substituído pelo jogo atual).
+</p>
+<p>
+Os nome de arquivos podem ser combinações de letras, números e simbolos com o comprimento máximo de 57 caracteres; depois de salvar, só 20 (aprox.) caracteres são mostrados em <strong>Salvar</strong> e
+<a href="load.txt">Carregar</a>.
+</p>
+<p>
+AVISO: Apertando o botão X na frente do nome de um arquivo ele será APAGADO imediatamente e pemanentemente, o arquivo será retirado da lista e o <strong>Salvar</strong>será fechado. Use esta função cuidadosamente.
+</p>
+<p>
+{Dica: Recomece um jogo salvo a partir do <a href="load.txt">Carregar</a>.<br>
+Mude o autosave (salvamento automático do jogo) no simuconf.tab}.
+</p>
+<p>
+Clique em <em>Cancelar</em> para fechar <strong>Salvar</strong>; ou no X no canto superior esquerdo da janela; ou use o teclado.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/schedule.txt b/simutrans/text/pt/schedule.txt
index 90039d5..f1fb7f8 100644
--- a/simutrans/text/pt/schedule.txt
+++ b/simutrans/text/pt/schedule.txt
@@ -1,50 +1,50 @@
-<title>Ajuda - Programação</title>
-
-<h1><strong>Programação</strong></h1>
-
-<p>
-A <strong>programação</strong> é usada para configurar a rota e a quantidade mínima de mercadorias e passageiros para um <a href="convoiinfo.txt">comboio</a> ou uma <a href="linemanagement.txt">linha</a>.<br>
-Ela lista as <a href="station.txt">paradas</a> (onde veículos recolhem e entregam mercadorias e passageiros) e pontos de passagem (que podem ser usados para direcionar os comboios por um caminho específico caso haja mais de um disponível ou fornecer destinos temporários) com suas coordenadas do mapa.
-</p>
-<p>
-A janela <strong>Programar</strong> abre do botão Programar nas <a href="convoiinfo.txt">Informações do comboio</a> e nos <a href="depot.txt">depósitos</a>.<br>
-Controles para a programação de uma linha abrem dos botões Nova Linha e Atualizar no <a href="linemanagement.txt">Gerenciador de linhas</a> e nos <a href="depot.txt">depósitos</a>.
-</p>
-<p>
-Quando a janela <strong>Programar</strong> é aberta através das informações do comboio, o nome da linha utilizada por ele (se houver) é mostrado no topo da janela.<br>
-<em>Serve</em> <a href="linemanagement.txt"><em>linha:</em></a> clique nos botões em forma de seta nos dois lados do nome da linha para escolher uma linha ou clique na caixa de nome para abrir uma lista suspensa (clique na linha para selecioná-la).<br>
-Clicando na caixa de texto, é possível digitar e alterar o nome da linha.
-</p>
-<p>
-<em>Carregar até:</em> configura a quantidade mínima de mercadorias ou passageiros que o <a href="convoiinfo.txt">comboio</a> deve esperar até prosseguir.
-A porcentagem mostrada se refere à capacidade total do comboio e não a um tipo individual de item carregado.<br>
-O comboio esperará na parada até estar carregado com a porcentagem requerida.<br>
-Para usar: clique em uma parada na lista para selecioná-la (o <em>></em> antes do nome da parada mostra que mesma está selecionada), e use os botões em forma de seta para definir a porcentagem.<br>
-{Dicas: para incluir ou alterar porcentagens para todos os comboios de uma linha, use o botão Atualizar no <a href="linemanagement.txt">Gerenciador de Linhas</a> ou no <a href="depot.txt">depósito</a>. Para incluir ou alterar porcentagens para somente um comboio e não para todos da linha, use o botão Programar nas <a href="convoiinfo.txt">Informações do combio</a> ou no depósito.}
-</p>
-<p>
-Os botões de opção (clique para usar, o botão aparece pressionado quando ativo) incluem:
-</p>
-<p>
-<em>Adicionar:</em> adiciona uma <a href="station.txt">parada</a> onde veículos recolhem e entregam mercadorias e passageiros (veículos aquáticos podem usar qualquer quadro da área de captura de uma doca) ou ponto de passagem na rota.<br>
-Para adicionar: clique na opção para selecioná-la (o cursor mudará para um sinal escrito "HALT"), e clique no ponto desejado na área de jogo (pode ser feito em estradas, trilhos ou água, dependendo do tipo de veículo). A parada ou ponto de passagem agora aparece na <strong>programação</strong>.<br>
-{Dica: veículos não recolhem ou entregam mercadorias e passageiros em pontos de passagem.}
-</p>
-<p>
-<em>Inserir:</em> insere uma <a href="station.txt">parada</a> ou ponto de passagem na rota, antes de uma parada ou ponto de passagem existente.<br>
-Para inserir: clique em uma parada ou ponto de passagem da lista para selecioná-lo (o <em>></em> antes do nome da parada mostra que mesma está selecionada), e clique no botão inserir (o cursor mudará para um sinal escrito "HALT"), e clique no ponto desejado na área de jogo (pode ser feito em estradas, trilhos ou água, dependendo do tipo de veículo).<br>
-A nova parada ou ponto de passagem é inserido na <strong>programação</strong> antes da parada ou ponto de passagem anteriormente selecionado.<br>
-{Dica: veículos não recolhem ou entregam mercadorias e passageiros em pontos de passagem.}
-</p>
-<p>
-<em>Eliminar:</em> essa opção deleta uma <a href="station.txt">parada</a> ou ponto de passagem da rota.<br>
-Clique no botão para ativá-lo, e clique em um item da lista para remover.
-</p>
-<p>
-<em>Espelhar linha:</em> adiciona as <a href="station.txt">paradas</a> e pontos de passagem existentes em ordem reversa na rota. Os valores do <em>Carregar até</em> também são replicados. Clique no botão para usá-lo: a nova rota aparecerá na <strong>programação</strong>.
-</p>
-<p>
-<em>Promover a</em> <a href="linemanagement.txt"><em>linha:</em></a> (somente disponível quando a janela <strong>Programar</strong> for aberta pelas <a href="convoiinfo.txt">Informações do comboio</a>) cria uma nova linha utilizando a atual programação. A nova linha é identificada por um número e é listada no Gerenciador de Linhas.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Programação</title>
+
+<h1><strong>Programação</strong></h1>
+
+<p>
+A <strong>programação</strong> é usada para configurar a rota e a quantidade mínima de mercadorias e passageiros para um <a href="convoiinfo.txt">comboio</a> ou uma <a href="linemanagement.txt">linha</a>.<br>
+Ela lista as <a href="station.txt">paradas</a> (onde veículos recolhem e entregam mercadorias e passageiros) e pontos de passagem (que podem ser usados para direcionar os comboios por um caminho específico caso haja mais de um disponível ou fornecer destinos temporários) com suas coordenadas do mapa.
+</p>
+<p>
+A janela <strong>Programar</strong> abre do botão Programar nas <a href="convoiinfo.txt">Informações do comboio</a> e nos <a href="depot.txt">depósitos</a>.<br>
+Controles para a programação de uma linha abrem dos botões Nova Linha e Atualizar no <a href="linemanagement.txt">Gerenciador de linhas</a> e nos <a href="depot.txt">depósitos</a>.
+</p>
+<p>
+Quando a janela <strong>Programar</strong> é aberta através das informações do comboio, o nome da linha utilizada por ele (se houver) é mostrado no topo da janela.<br>
+<em>Serve</em> <a href="linemanagement.txt"><em>linha:</em></a> clique nos botões em forma de seta nos dois lados do nome da linha para escolher uma linha ou clique na caixa de nome para abrir uma lista suspensa (clique na linha para selecioná-la).<br>
+Clicando na caixa de texto, é possível digitar e alterar o nome da linha.
+</p>
+<p>
+<em>Carregar até:</em> configura a quantidade mínima de mercadorias ou passageiros que o <a href="convoiinfo.txt">comboio</a> deve esperar até prosseguir.
+A porcentagem mostrada se refere à capacidade total do comboio e não a um tipo individual de item carregado.<br>
+O comboio esperará na parada até estar carregado com a porcentagem requerida.<br>
+Para usar: clique em uma parada na lista para selecioná-la (o <em>></em> antes do nome da parada mostra que mesma está selecionada), e use os botões em forma de seta para definir a porcentagem.<br>
+{Dicas: para incluir ou alterar porcentagens para todos os comboios de uma linha, use o botão Atualizar no <a href="linemanagement.txt">Gerenciador de Linhas</a> ou no <a href="depot.txt">depósito</a>. Para incluir ou alterar porcentagens para somente um comboio e não para todos da linha, use o botão Programar nas <a href="convoiinfo.txt">Informações do combio</a> ou no depósito.}
+</p>
+<p>
+Os botões de opção (clique para usar, o botão aparece pressionado quando ativo) incluem:
+</p>
+<p>
+<em>Adicionar:</em> adiciona uma <a href="station.txt">parada</a> onde veículos recolhem e entregam mercadorias e passageiros (veículos aquáticos podem usar qualquer quadro da área de captura de uma doca) ou ponto de passagem na rota.<br>
+Para adicionar: clique na opção para selecioná-la (o cursor mudará para um sinal escrito "HALT"), e clique no ponto desejado na área de jogo (pode ser feito em estradas, trilhos ou água, dependendo do tipo de veículo). A parada ou ponto de passagem agora aparece na <strong>programação</strong>.<br>
+{Dica: veículos não recolhem ou entregam mercadorias e passageiros em pontos de passagem.}
+</p>
+<p>
+<em>Inserir:</em> insere uma <a href="station.txt">parada</a> ou ponto de passagem na rota, antes de uma parada ou ponto de passagem existente.<br>
+Para inserir: clique em uma parada ou ponto de passagem da lista para selecioná-lo (o <em>></em> antes do nome da parada mostra que mesma está selecionada), e clique no botão inserir (o cursor mudará para um sinal escrito "HALT"), e clique no ponto desejado na área de jogo (pode ser feito em estradas, trilhos ou água, dependendo do tipo de veículo).<br>
+A nova parada ou ponto de passagem é inserido na <strong>programação</strong> antes da parada ou ponto de passagem anteriormente selecionado.<br>
+{Dica: veículos não recolhem ou entregam mercadorias e passageiros em pontos de passagem.}
+</p>
+<p>
+<em>Eliminar:</em> essa opção deleta uma <a href="station.txt">parada</a> ou ponto de passagem da rota.<br>
+Clique no botão para ativá-lo, e clique em um item da lista para remover.
+</p>
+<p>
+<em>Espelhar linha:</em> adiciona as <a href="station.txt">paradas</a> e pontos de passagem existentes em ordem reversa na rota. Os valores do <em>Carregar até</em> também são replicados. Clique no botão para usá-lo: a nova rota aparecerá na <strong>programação</strong>.
+</p>
+<p>
+<em>Promover a</em> <a href="linemanagement.txt"><em>linha:</em></a> (somente disponível quando a janela <strong>Programar</strong> for aberta pelas <a href="convoiinfo.txt">Informações do comboio</a>) cria uma nova linha utilizando a atual programação. A nova linha é identificada por um número e é listada no Gerenciador de Linhas.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/shiptools.txt b/simutrans/text/pt/shiptools.txt
index fd1a3b2..00b6f18 100644
--- a/simutrans/text/pt/shiptools.txt
+++ b/simutrans/text/pt/shiptools.txt
@@ -1,56 +1,56 @@
-<title>Ajuda - Navegação</title>
-
-<h1><strong>Ferramentas de navegação</strong></h1>
-
-<p>
-As <strong>Ferramentas de navegação</strong> constróem uma rede de transporte por mares e canais. As ferramentas podem construir ou remover: canais, eclusas, vários tipos de doca e estaleiros. Se estiver jogando com <a href="new_world.txt">linha do tempo</a>, então conforme o tempo passa no Simutrans mais opções de ferramentas podem aparecer.
-</p>
-<p>
-Clique no ícone de um barco no topo da área de jogo para abrir a barra de ferramentas.<br>
-Passe o cursor do mouse em cima das opções (após ter aberto ou clicado na barra de ferramentas) para ver o nome, o <a href="finances.txt">custo</a> de construção, custo de manutenção (entre parênteses), e o limite máximo de velocidade.
-</p>
-<p>
-As <strong>Ferramentas de navegação</strong> incluem, da esquerda para a direita:
-</p>
-<p>
-<em>Canal:</em> constrói hidrovias para veículos aquáticos, entre dois pontos na área de jogo.<br>
-Canais podem somente ser construídos em terra firme e podem não encontrar um caminho através de terrenos acidentados. Canais construídos entre dois pontos podem usar trechos de canais existentes em seu caminho.<br>
-Para construir um canal: clique na ferramenta para ativá-la (o cursor mudará para um canal), e clique na área de jogo no ponto inicial do canal (mostra um trator na área de jogo e as coordenadas do mapa no lado direito da barra inferior do jogo), e finalmente clique na área de jogo no ponto final.<br>
-{Dicas: canais construídos por <a href="players.txt">jogadores</a> diferentes podem não se conectar. Use o <a href="slopetools.txt">Editor de terrenos</a> para modificar o terreno, possibilitando caminhos para os canais. Use a ferrramenta Eliminar para remover partes individuais do canal e obstáculos. O desfazer <a href="keys.txt">[z]</a> não reembolsa os custos da construção.}
-</p>
-<p>
-<em>Remover canais:</em> remove partes do canal, quando não houver veículos presentes, entre dois pontos na área de jogo (Obs.: cais de canal no caminho são removidos também). O uso da ferramenta tem um <a href="finances.txt">custo</a> de construção.<br>
-Para remover canais: clique na ferramenta para ativá-la (o cursor mudará para um X vermelho), e clique no canal que será removido (o ponto selecionado é mostrado por um X vermelho na área de jogo), e finalmente clique no segundo ponto em um canal conectado, para remover o trecho de canais desde o ponto inicial selecionado.
-</p>
-<p>
-<em>Canal elevado:</em> constrói eclusas e uma ponte de canal para elevar/rebaixar o canal em um nível na área de jogo. A ponte possui um comprimento máximo e é construída no fim de um canal até um ponto disponível (outro final de canal ou um trecho de terra mais alto, dentro do limite).<br>
-Para construir um canal elevado: clique na ferramenta para ativá-la (o cursor mudará para um canal elevado), e clique na área de jogo no fim de um canal (ele será o ponto inicial da ponte). Obstáculos ou a falta de um lugar propício para o fim da ponte podem interromper a construção: construa canais dos dois lados que devem ser ligados pela ponte e tente novamente.<br>
-{Dicas: use a ferramenta Eliminar para remover pontes (clique no começo dela) ou obstáculos para a construção. Use <em>canais</em> para conectar pontes com hidrovias.}.
-</p>
-<p>
-<em>Cais de canal:</em> constrói uma doca em um canal na área de jogo para navios e barcaças recolherem e entregarem mercadorias, passageiros e correio.<br>
-Quando uma doca não for construída ao lado de uma <a href="station.txt">parada</a> existente, será criada uma nova.<br>
-Uma doca possui uma área de captura para mercadorias, passageiros e correio. No canto superior esquerdo um ícone (usado na <a href="haltlist.txt">Lista de paradas</a> e nas <a href="station.txt">Informações das estações</a>) mostra que tipos de itens uma parada suporta.<br>
-Para construir uma doca: clique na ferramenta para ativá-la (o cursor mudará para um cais de canal); e clique em um ponto do canal na área de jogo.<br>
-{Dicas: remova as docas com a ferramenta Eliminar. Pressione [v] para mostrar/ocultar a área de captura para mercadorias, passageiros e correio na área de jogo.<br>
-Paradas somente de veículos aquáticos não serão listadas na <a href="haltlist.txt">Lista de paradas/estações</a>}.
-</p>
-<p>
-<em>Paradas marinhas:</em> os vários itens a seguir constróem docas na área de jogo para veículos aquáticos.<br>
-Docas são construídas em uma porção reta da costa.<br>
-Quando uma doca não for construída ao lado de uma <a href="station.txt">parada</a> existente, será criada uma nova.<br>
-Uma doca possui uma área de captura para mercadorias, passageiros e correio. No canto superior esquerdo um ícone (usado na <a href="haltlist.txt">Lista de paradas</a> e nas <a href="station.txt">Informações das Estações</a>) mostra que tipos de itens uma parada suporta. Diferentes docas podem ter diferentes capacidades para mercadorias, passageiros e correio.<br>
-Para construir uma doca: clique na ferramenta para ativá-la (o cursor mudará para uma doca) e então clique em um quadro adjacente ao mar.<br>
-{Dicas: remova docas com a ferramenta Eliminar.<br>
-O tamanho das docas pode ser incrementado construindo nos quadros adjacentes. Veículos de transporte aquático podem usar qualquer quadro de água na área de captura da doca.<br>
-Paradas somente de veículos aquáticos não serão listadas na <a href="haltlist.txt">Lista de paradas/estações</a>}.
-<a href="industry_info.txt">Indústrias</a> em alto-mar como plataformas de petróleo não precisam de docas. Veículos de transporte aquático podem usar qualquer quadro da área de captura da indústria.<br>
-Pressione [v] para mostrar/ocultar a área de captura para mercadorias, passageiros e correio na área de jogo.
-</p>
-<p>
-<em>Construir <a href="depot.txt"><em>estaleiro:</em></a></em> constrói um depósito para a compra e gerenciamento de navios, barcos e barcaças. Depósitos possuem um custo de manutenção e são construídos dentro d'água na área de jogo.<br>
-Para construir um estaleiro: clique na ferramenta para ativá-la (o cursor mudará para um estaleiro), e clique na água na área de jogo.<br>
-{Dicas: remova os depósitos com a ferramenta Eliminar.}
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Navegação</title>
+
+<h1><strong>Ferramentas de navegação</strong></h1>
+
+<p>
+As <strong>Ferramentas de navegação</strong> constróem uma rede de transporte por mares e canais. As ferramentas podem construir ou remover: canais, eclusas, vários tipos de doca e estaleiros. Se estiver jogando com <a href="new_world.txt">linha do tempo</a>, então conforme o tempo passa no Simutrans mais opções de ferramentas podem aparecer.
+</p>
+<p>
+Clique no ícone de um barco no topo da área de jogo para abrir a barra de ferramentas.<br>
+Passe o cursor do mouse em cima das opções (após ter aberto ou clicado na barra de ferramentas) para ver o nome, o <a href="finances.txt">custo</a> de construção, custo de manutenção (entre parênteses), e o limite máximo de velocidade.
+</p>
+<p>
+As <strong>Ferramentas de navegação</strong> incluem, da esquerda para a direita:
+</p>
+<p>
+<em>Canal:</em> constrói hidrovias para veículos aquáticos, entre dois pontos na área de jogo.<br>
+Canais podem somente ser construídos em terra firme e podem não encontrar um caminho através de terrenos acidentados. Canais construídos entre dois pontos podem usar trechos de canais existentes em seu caminho.<br>
+Para construir um canal: clique na ferramenta para ativá-la (o cursor mudará para um canal), e clique na área de jogo no ponto inicial do canal (mostra um trator na área de jogo e as coordenadas do mapa no lado direito da barra inferior do jogo), e finalmente clique na área de jogo no ponto final.<br>
+{Dicas: canais construídos por <a href="players.txt">jogadores</a> diferentes podem não se conectar. Use o <a href="slopetools.txt">Editor de terrenos</a> para modificar o terreno, possibilitando caminhos para os canais. Use a ferrramenta Eliminar para remover partes individuais do canal e obstáculos. O desfazer <a href="keys.txt">[z]</a> não reembolsa os custos da construção.}
+</p>
+<p>
+<em>Remover canais:</em> remove partes do canal, quando não houver veículos presentes, entre dois pontos na área de jogo (Obs.: cais de canal no caminho são removidos também). O uso da ferramenta tem um <a href="finances.txt">custo</a> de construção.<br>
+Para remover canais: clique na ferramenta para ativá-la (o cursor mudará para um X vermelho), e clique no canal que será removido (o ponto selecionado é mostrado por um X vermelho na área de jogo), e finalmente clique no segundo ponto em um canal conectado, para remover o trecho de canais desde o ponto inicial selecionado.
+</p>
+<p>
+<em>Canal elevado:</em> constrói eclusas e uma ponte de canal para elevar/rebaixar o canal em um nível na área de jogo. A ponte possui um comprimento máximo e é construída no fim de um canal até um ponto disponível (outro final de canal ou um trecho de terra mais alto, dentro do limite).<br>
+Para construir um canal elevado: clique na ferramenta para ativá-la (o cursor mudará para um canal elevado), e clique na área de jogo no fim de um canal (ele será o ponto inicial da ponte). Obstáculos ou a falta de um lugar propício para o fim da ponte podem interromper a construção: construa canais dos dois lados que devem ser ligados pela ponte e tente novamente.<br>
+{Dicas: use a ferramenta Eliminar para remover pontes (clique no começo dela) ou obstáculos para a construção. Use <em>canais</em> para conectar pontes com hidrovias.}.
+</p>
+<p>
+<em>Cais de canal:</em> constrói uma doca em um canal na área de jogo para navios e barcaças recolherem e entregarem mercadorias, passageiros e correio.<br>
+Quando uma doca não for construída ao lado de uma <a href="station.txt">parada</a> existente, será criada uma nova.<br>
+Uma doca possui uma área de captura para mercadorias, passageiros e correio. No canto superior esquerdo um ícone (usado na <a href="haltlist.txt">Lista de paradas</a> e nas <a href="station.txt">Informações das estações</a>) mostra que tipos de itens uma parada suporta.<br>
+Para construir uma doca: clique na ferramenta para ativá-la (o cursor mudará para um cais de canal); e clique em um ponto do canal na área de jogo.<br>
+{Dicas: remova as docas com a ferramenta Eliminar. Pressione [v] para mostrar/ocultar a área de captura para mercadorias, passageiros e correio na área de jogo.<br>
+Paradas somente de veículos aquáticos não serão listadas na <a href="haltlist.txt">Lista de paradas/estações</a>}.
+</p>
+<p>
+<em>Paradas marinhas:</em> os vários itens a seguir constróem docas na área de jogo para veículos aquáticos.<br>
+Docas são construídas em uma porção reta da costa.<br>
+Quando uma doca não for construída ao lado de uma <a href="station.txt">parada</a> existente, será criada uma nova.<br>
+Uma doca possui uma área de captura para mercadorias, passageiros e correio. No canto superior esquerdo um ícone (usado na <a href="haltlist.txt">Lista de paradas</a> e nas <a href="station.txt">Informações das Estações</a>) mostra que tipos de itens uma parada suporta. Diferentes docas podem ter diferentes capacidades para mercadorias, passageiros e correio.<br>
+Para construir uma doca: clique na ferramenta para ativá-la (o cursor mudará para uma doca) e então clique em um quadro adjacente ao mar.<br>
+{Dicas: remova docas com a ferramenta Eliminar.<br>
+O tamanho das docas pode ser incrementado construindo nos quadros adjacentes. Veículos de transporte aquático podem usar qualquer quadro de água na área de captura da doca.<br>
+Paradas somente de veículos aquáticos não serão listadas na <a href="haltlist.txt">Lista de paradas/estações</a>}.
+<a href="industry_info.txt">Indústrias</a> em alto-mar como plataformas de petróleo não precisam de docas. Veículos de transporte aquático podem usar qualquer quadro da área de captura da indústria.<br>
+Pressione [v] para mostrar/ocultar a área de captura para mercadorias, passageiros e correio na área de jogo.
+</p>
+<p>
+<em>Construir <a href="depot.txt"><em>estaleiro:</em></a></em> constrói um depósito para a compra e gerenciamento de navios, barcos e barcaças. Depósitos possuem um custo de manutenção e são construídos dentro d'água na área de jogo.<br>
+Para construir um estaleiro: clique na ferramenta para ativá-la (o cursor mudará para um estaleiro), e clique na água na área de jogo.<br>
+{Dicas: remova os depósitos com a ferramenta Eliminar.}
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/simutrans.txt b/simutrans/text/pt/simutrans.txt
index ea1fe02..784c088 100644
--- a/simutrans/text/pt/simutrans.txt
+++ b/simutrans/text/pt/simutrans.txt
@@ -1,35 +1,35 @@
-<title>Prólogo</title>
-
-<h1><strong>Bem-vindo ao Simutrans...</strong></h1>
-
-<p>
-Escolha um, entre alguns milhares, dos mundos do Simutrans. Então, ponha-se no lugar de um jovem empreendedor com um pouco de dinheiro dado por seus avós: ansioso para deixá-los orgulhosos, com a ambição de estabelecer uma companhia de transporte de sucesso, seu desafio a partir de agora é construir uma empresa vitoriosa.
-</p>
-<p>
-Com o passar do tempo, transforme a sua pequena companhia em um grande império de transporte, mantendo as finanças equilibradas entregando cargas e satisfazendo o desejo de viajar de milhões de passageiros todos os meses.<br>
-Transporte passageiros, correio e mercadorias por estradas, ferrovias, navios e até pelo ar.
-</p>
-<p>
-Cada mundo possui algo diferente a oferecer. Dê uma boa olhada ao seu redor... o futuro do lugar está em suas mãos e nas de seus concorrentes.
-</p>
-<p>
-No começo, pode ser mais fácil de se começar suprindo uma usina de geração de energia com aquilo que ela precisa. A seguir, conecte outras indústrias, talvez usando estações de distribuição onde as mercadorias são recarregadas.<br>
-A desvantagem de somente transportar mercadorias é que as cidades não irão crescer e novas indústrias não aparecerão.
-</p>
-<p>
-Ou então, você pode começar imediatamente a transportar passageiros (e correio). Este é mais desafiador, já que os habitantes deste mundo querem viajar para os locais de suas preferências.<br>
-Alguns precisam ir trabalhar nas indústrias, outros querem fazer compras no Shopping Center da cidade grande, enquanto outros decidem visitar pontos turísticos.
-</p>
-<p>
-Se você não oferecer uma conexão até seus destinos, os passageiros não viajarão com você para sempre. Você precisará construir redes. Quando suas redes estiverem prontas, será necessário aumentar suas capacidades para absorver a demanda. Então, continue com o planejamento.<br>
-Se eles gostarem de seus serviços, as cidades crescerão, atraindo novas indústrias, e assim a economia será próspera.
-</p>
-<p>
-Você pode jogar com o tempo que você quiser. Comece em 1880 e termine em 2050. Haverá novos veículos e edifícios durante todo esse tempo.<br>
-Jogue contra a IA ou do seu próprio jeito. Somente se ficar devendo por três meses, irá falir e será o fim de seu jogo.
-</p>
-<p>
-O <strong>Simutrans-Team</strong> e toda a comunidade te desejam muitas horas de diversão jogando Simutrans!
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008. Veja a lista dos tradutores na Ajuda ou teclando F1.
+<title>Prólogo</title>
+
+<h1><strong>Bem-vindo ao Simutrans...</strong></h1>
+
+<p>
+Escolha um, entre alguns milhares, dos mundos do Simutrans. Então, ponha-se no lugar de um jovem empreendedor com um pouco de dinheiro dado por seus avós: ansioso para deixá-los orgulhosos, com a ambição de estabelecer uma companhia de transporte de sucesso, seu desafio a partir de agora é construir uma empresa vitoriosa.
+</p>
+<p>
+Com o passar do tempo, transforme a sua pequena companhia em um grande império de transporte, mantendo as finanças equilibradas entregando cargas e satisfazendo o desejo de viajar de milhões de passageiros todos os meses.<br>
+Transporte passageiros, correio e mercadorias por estradas, ferrovias, navios e até pelo ar.
+</p>
+<p>
+Cada mundo possui algo diferente a oferecer. Dê uma boa olhada ao seu redor... o futuro do lugar está em suas mãos e nas de seus concorrentes.
+</p>
+<p>
+No começo, pode ser mais fácil de se começar suprindo uma usina de geração de energia com aquilo que ela precisa. A seguir, conecte outras indústrias, talvez usando estações de distribuição onde as mercadorias são recarregadas.<br>
+A desvantagem de somente transportar mercadorias é que as cidades não irão crescer e novas indústrias não aparecerão.
+</p>
+<p>
+Ou então, você pode começar imediatamente a transportar passageiros (e correio). Este é mais desafiador, já que os habitantes deste mundo querem viajar para os locais de suas preferências.<br>
+Alguns precisam ir trabalhar nas indústrias, outros querem fazer compras no Shopping Center da cidade grande, enquanto outros decidem visitar pontos turísticos.
+</p>
+<p>
+Se você não oferecer uma conexão até seus destinos, os passageiros não viajarão com você para sempre. Você precisará construir redes. Quando suas redes estiverem prontas, será necessário aumentar suas capacidades para absorver a demanda. Então, continue com o planejamento.<br>
+Se eles gostarem de seus serviços, as cidades crescerão, atraindo novas indústrias, e assim a economia será próspera.
+</p>
+<p>
+Você pode jogar com o tempo que você quiser. Comece em 1880 e termine em 2050. Haverá novos veículos e edifícios durante todo esse tempo.<br>
+Jogue contra a IA ou do seu próprio jeito. Somente se ficar devendo por três meses, irá falir e será o fim de seu jogo.
+</p>
+<p>
+O <strong>Simutrans-Team</strong> e toda a comunidade te desejam muitas horas de diversão jogando Simutrans!
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008. Veja a lista dos tradutores na Ajuda ou teclando F1.
 </p>
diff --git a/simutrans/text/pt/slopetools.txt b/simutrans/text/pt/slopetools.txt
index aa1a240..fdd79a8 100644
--- a/simutrans/text/pt/slopetools.txt
+++ b/simutrans/text/pt/slopetools.txt
@@ -1,40 +1,40 @@
-<title>Ajuda - Editor de terrenos</title>
-
-<h1><strong>Editor de terrenos</strong></h1>
-
-<p>
-As ferramentas do <strong>Editor de terrenos</strong> elevam e rebaixam o terreno, e podem ser usadas para obter locais viáveis para construção.
-</p>
-<p>
-Clique no ícone de terreno que está no topo da área de jogo para abrir a barra de ferramentas.<br>
-Depois de abrir ou clicar sobre a barra de ferramentas, passe o cursor do mouse por cima das opções para ver o nome e o <a href="finances.txt">custo</a> de construção.
-</p>
-<p>A ferramenta funciona em áreas livres de obstáculos (exemplos: estradas, trilhos, edificações, paradas, estações etc).
-</p>
-<p>
-Clique em um dos botões para ativar (o cursor muda-se de aparência), então posicione o cursor sobre o terreno na tela do jogo e clique para usar:
-</p>
-<p>
-<em>Elevar terreno</em>/<em>Abaixar terreno:</em> eleva/abaixa o terreno.<br>
-O cursor mudará para uma seta para baixo ou para cima.<br>
-A ferramenta também é ativada pelas teclas <a href="keys.txt">[u]</a> e <a href="keys.txt">[d]</a>.
-</p>
-<p>
-<em>Barrancos:</em> cria um barranco na direção indicada pelo botão, podendo criar juntamente muros de arrimo verticais nas laterais<br>
-O cursor mudará para um cubo amarelo vazio que posiciona o barranco.
-</p>
-<p>
-<em>Abaixar quadro</em>/<em>Elevar quadro:</em> abaixa/eleva um quadro específico do terreno, podendo juntamente criar muros de arrimo verticais em suas laterais.<br>
-O cursor mudará para um cubo amarelo vazio que modifica o quadro.
-</p>
-<p>
-<em>Restaurar relevo natural:</em> retorna a forma natural do terreno, removendo juntamente os muros de arrimo.<br>
-O cursor mudará para um cubo amarelo vazio que restaura o terreno no quadro.
-</p>
-<p>
-{Dica: O Editor de terreno fica mais fácil de se usar com a grade. Pressione [#] para exibir/ocultar a grade sobre o terreno.<br>
-Use a ferramenta Eliminar para remover obstáculos.<br>
-Dependendo do local do mapa, as ferramentas podem elevar ou rebaixar terreno dentro da água.}
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Editor de terrenos</title>
+
+<h1><strong>Editor de terrenos</strong></h1>
+
+<p>
+As ferramentas do <strong>Editor de terrenos</strong> elevam e rebaixam o terreno, e podem ser usadas para obter locais viáveis para construção.
+</p>
+<p>
+Clique no ícone de terreno que está no topo da área de jogo para abrir a barra de ferramentas.<br>
+Depois de abrir ou clicar sobre a barra de ferramentas, passe o cursor do mouse por cima das opções para ver o nome e o <a href="finances.txt">custo</a> de construção.
+</p>
+<p>A ferramenta funciona em áreas livres de obstáculos (exemplos: estradas, trilhos, edificações, paradas, estações etc).
+</p>
+<p>
+Clique em um dos botões para ativar (o cursor muda-se de aparência), então posicione o cursor sobre o terreno na tela do jogo e clique para usar:
+</p>
+<p>
+<em>Elevar terreno</em>/<em>Abaixar terreno:</em> eleva/abaixa o terreno.<br>
+O cursor mudará para uma seta para baixo ou para cima.<br>
+A ferramenta também é ativada pelas teclas <a href="keys.txt">[u]</a> e <a href="keys.txt">[d]</a>.
+</p>
+<p>
+<em>Barrancos:</em> cria um barranco na direção indicada pelo botão, podendo criar juntamente muros de arrimo verticais nas laterais<br>
+O cursor mudará para um cubo amarelo vazio que posiciona o barranco.
+</p>
+<p>
+<em>Abaixar quadro</em>/<em>Elevar quadro:</em> abaixa/eleva um quadro específico do terreno, podendo juntamente criar muros de arrimo verticais em suas laterais.<br>
+O cursor mudará para um cubo amarelo vazio que modifica o quadro.
+</p>
+<p>
+<em>Restaurar relevo natural:</em> retorna a forma natural do terreno, removendo juntamente os muros de arrimo.<br>
+O cursor mudará para um cubo amarelo vazio que restaura o terreno no quadro.
+</p>
+<p>
+{Dica: O Editor de terreno fica mais fácil de se usar com a grade. Pressione [#] para exibir/ocultar a grade sobre o terreno.<br>
+Use a ferramenta Eliminar para remover obstáculos.<br>
+Dependendo do local do mapa, as ferramentas podem elevar ou rebaixar terreno dentro da água.}
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/sound.txt b/simutrans/text/pt/sound.txt
index 4163c4c..89779fd 100644
--- a/simutrans/text/pt/sound.txt
+++ b/simutrans/text/pt/sound.txt
@@ -1,28 +1,28 @@
-<title>Ajuda - Ajustes de Som</title>
-
-<h1><strong>Ajustes de Som</strong></h1>
-
-<p>
-<strong>Ajustes de Som</strong> tem controles para efeitos de som e música.
-</p>
-<p>
-<strong>Ajustes de Som</strong> abrem de <a href="options.txt">Opções de Jogo.</a>
-</p>
-<p>
-Use as setas ou a <a href="mouse.txt">barra de rolagem</a> para aumentar ou diminuir o volume:
-</p>
-<p><em>Volume dos efeitos:</em> ajusta o volume de efeitos sonoros do jogo.
-</p>
-<p>
-<em>Volume da música:</em> ajusta o volume da música. Se nenhuma música estiver disponível então os controles não funcionarão.
-</p>
-<p>
-<em>Tocando:</em>
- muda a música; as setas alternam a execução das músicas disponiveis.
-</p>
-<p>
-Nota: As músicas não são fornecidas com o Simutrans.<br>
-Ajuda para adicionar músicas está disponivel on line em http://wiki.simutrans.com
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Ajustes de Som</title>
+
+<h1><strong>Ajustes de Som</strong></h1>
+
+<p>
+<strong>Ajustes de Som</strong> tem controles para efeitos de som e música.
+</p>
+<p>
+<strong>Ajustes de Som</strong> abrem de <a href="options.txt">Opções de Jogo.</a>
+</p>
+<p>
+Use as setas ou a <a href="mouse.txt">barra de rolagem</a> para aumentar ou diminuir o volume:
+</p>
+<p><em>Volume dos efeitos:</em> ajusta o volume de efeitos sonoros do jogo.
+</p>
+<p>
+<em>Volume da música:</em> ajusta o volume da música. Se nenhuma música estiver disponível então os controles não funcionarão.
+</p>
+<p>
+<em>Tocando:</em>
+ muda a música; as setas alternam a execução das músicas disponiveis.
+</p>
+<p>
+Nota: As músicas não são fornecidas com o Simutrans.<br>
+Ajuda para adicionar músicas está disponivel on line em http://wiki.simutrans.com
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/special.txt b/simutrans/text/pt/special.txt
index 29effa6..f3b4dec 100644
--- a/simutrans/text/pt/special.txt
+++ b/simutrans/text/pt/special.txt
@@ -1,60 +1,60 @@
-<title>Ajuda - Ferramentas Especiais</title>
-
-<h1><strong>Ferramentas Especiais</strong></h1>
-
-<p>
-As <strong>Ferramentas Especiais</strong> constróem itens não-relacionados com tráfego e também permitem a você atuar como um de seus concorrentes dentro do jogo.
-</p>
-<p>
-Clique no ícone representado por uma gota vermelha em um círculo amarelo (ou no de um guindaste no pak128) no topo da área de jogo para abrir a barra de ferramentas.<br>
-Passe o cursor do mouse em cima das opções (após ter aberto ou clicado na barra de ferramentas) para ver o nome e o <a href="finances.txt">custo</a> de construção.
-</p>
-<p>
-As <strong>Ferramentas Especiais</strong> incluem, da esquerda para a direita:
-</p>
-<p>
-<em>Agência dos Correios:</em> esta ferramenta constrói uma agência de correios que permite a uma <a href="station.txt">estação</a> ou parada receber correspondência. Agências de correios aumentam a capacidade e a área de coberura da estação e possuem um custo de manutenção.<br>
-Para construir uma agência: clique na ferramenta para ativá-la, e na área do jogo clique ao lado de alguma estação existente. A nova agência agora fará parte da estação.<br>
-{Dica: remova as agências e os obstáculos com a ferramenta Eliminar.}
-</p>
-<p>
-<em>Extensões para estações:</em> ferramentas que constróem prédios ou extensões para as <a href="station.txt">estações</a>. Extensões podem aumentar a capacidade e a área de coberura para cargas e passageiros, e também o custo de manutenção. No canto de algumas das opções um ícone (usado em <a href="haltlist.txt">Lista de Paradas</a> e em Informações das Paradas) mostra quais itens a extensão permite que a parada receba.<br>
-Para construir uma extensão: clique na ferramenta para ativá-la (o cursor mudará para o desenho da extensão selecionada), e clique no local desejado, ao lado de uma estação existente, na área de jogo. A nova extensão agora fará parte da estação.<br>
-{Dica: remova as extensões com a ferramenta Eliminar.}
-</p>
-<p>
-<em>Mudar jogador (P+):</em> permite atuar como outro <a href="players.txt">jogador</a> se a opção <a href="new_world.txt">Permitir mudança de jogador</a> tiver sido selecionada no início do jogo. <a href="edittools.txt">Opções</a> adicionais estão disponíveis se jogando como o Poder público.<br>
-Clique no botão (ou pressione <a href="keys.txt">[P]</a>) para alternar entre os jogadores. Uma mensagem de confirmação aparece quando se muda o jogador: clique no [X] do canto superior esquerdo da mensagem ou use o teclado para fechá-la.
-</p>
-<p>
-<em>Criar nova cidade:</em> constrói uma nova <a href="citywindow.txt">área urbana</a>.<br>
-Para construir uma nova cidade: clique na ferramenta ou pressione [C] para ativá-la (o cursor mudará para uma pequena prefeitura), e clique no local desejado, na área do jogo. A nova cidade custa 5.000.000,00 de créditos e será construída sem pedir confirmação ao jogador.<br>
-{Dica: clique na prefeitura da cidade na área de jogo com a ferramenta Eliminar para demolir as construções da nova cidade.}
-</p>
-<p>
-<em>Plantar árvore:</em> planta uma árvore na área de jogo.<br>
-Para plantar uma árvore: clique na ferramenta para ativá-la (o cursor mudará para uma árvore), e clique no lugar desejado.<br>
-{Dica: remova as árvores com a ferramenta Remover.}
-</p>
-<p>
-<em>Construir linha elétrica:</em> constrói linhas elétricas que transportam eletricidade dos transformadores das usinas de geração de energia até as <a href="industry_info.txt">indústrias</a> (para aumentar suas produtividades). O fornecimento de energia elétrica gera lucro. As linhas elétricas não podem cruzar trilhos e estradas na diagonal.<br>
-Para construir uma linha elétrica: clique na ferramenta ou pressione [l] para ativá-la (o cursor mudará para uma linha elétrica), e clique em um transformador situado em uma usina, e finalmente clique em um transformador situado em uma indústria.<br>
-{Dicas: linhas elétricas podem ser construídas em partes, clique nos pontos desejados na área de jogo. Remova as linhas elétricas com a ferramenta Eliminar.}
-</p>
-<p>
-<em>Construir transformador:</em> constrói um transformador nas usinas geradoras de energia ou nas <a href="industry_info.txt">indústrias</a> para conexão com as linhas elétricas.<br>
-Para construir um transformador: clique na ferramenta ou pressione [g] para ativá-la (o cursor mudará para uma gota vermelha em um círculo amarelo), e clique na posição desejada ao lado de uma indústria ou de uma usina de energia.<br>
-Transformadores construídos nas usinas de energia devem ser conectados com transformadores das indústrias por meio das linhas elétricas.<br>
-Se não houver eletricidade sendo fornecida, o transformador mostrará um raio de cor amarela. Quando houver fornecimento, mostrará um raio na cor vermelha.<br>
-{Dicas: indústrias e usinas de energia podem ter múltiplos transformadores para aumentar o fornecimento de eletricidade. Remova os transformadores com a ferramenta Eliminar.}
-</p>
-<p>
-<em>Marcador:</em> abre controles para a colocação de um sinal com texto personalizado na área de jogo e pode ser usado para ir de um lugar a outro na área de jogo.<br>
-Clique na ferramenta para ativá-la ou pressione [M] (o cursor mudará para um marcador), e clique no lugar desejado para abrir a janela de controles do marcador. No topo da janela estão as coordenadas no mapa da posição selecionada e uma caixa de texto vazia, digite o texto desejado nela (clique na caixa, digite o texto e clique em <em>OK</em> ou pressione [Enter] ou [Return]) para colocar o marcador. O novo marcador é mostrado na área de jogo e mostrado na janela de controles do marcador (com as coordenadas do mapa) quando reaberta.<br>
-Para se deslocar até um marcador: abra a janela de controles do marcador e clique na posição desejada na lista.<br>
-Para remover um marcador: clique na ferramenta <em>marcador</em> ou pressione [M] para ativá-la (o cursor mudará para um marcador), e clique nas coordenadas do marcador na área de jogo; logo após, clique em <em>Eliminar</em> na janela de controles do marcador.<br>
-Para fechar os controles do marcador: clique no X do canto superior esquerdo da janela; ou clique em <em>Cancelar</em>; ou use o teclado.<br>
-{Dicas: as coordenadas da posição do cursor podem ser vistas no lado direito da barra inferior do jogo. Use [!] para mostrar/esconder o texto dos marcadores na área de jogo.}
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Ferramentas Especiais</title>
+
+<h1><strong>Ferramentas Especiais</strong></h1>
+
+<p>
+As <strong>Ferramentas Especiais</strong> constróem itens não-relacionados com tráfego e também permitem a você atuar como um de seus concorrentes dentro do jogo.
+</p>
+<p>
+Clique no ícone representado por uma gota vermelha em um círculo amarelo (ou no de um guindaste no pak128) no topo da área de jogo para abrir a barra de ferramentas.<br>
+Passe o cursor do mouse em cima das opções (após ter aberto ou clicado na barra de ferramentas) para ver o nome e o <a href="finances.txt">custo</a> de construção.
+</p>
+<p>
+As <strong>Ferramentas Especiais</strong> incluem, da esquerda para a direita:
+</p>
+<p>
+<em>Agência dos Correios:</em> esta ferramenta constrói uma agência de correios que permite a uma <a href="station.txt">estação</a> ou parada receber correspondência. Agências de correios aumentam a capacidade e a área de coberura da estação e possuem um custo de manutenção.<br>
+Para construir uma agência: clique na ferramenta para ativá-la, e na área do jogo clique ao lado de alguma estação existente. A nova agência agora fará parte da estação.<br>
+{Dica: remova as agências e os obstáculos com a ferramenta Eliminar.}
+</p>
+<p>
+<em>Extensões para estações:</em> ferramentas que constróem prédios ou extensões para as <a href="station.txt">estações</a>. Extensões podem aumentar a capacidade e a área de coberura para cargas e passageiros, e também o custo de manutenção. No canto de algumas das opções um ícone (usado em <a href="haltlist.txt">Lista de Paradas</a> e em Informações das Paradas) mostra quais itens a extensão permite que a parada receba.<br>
+Para construir uma extensão: clique na ferramenta para ativá-la (o cursor mudará para o desenho da extensão selecionada), e clique no local desejado, ao lado de uma estação existente, na área de jogo. A nova extensão agora fará parte da estação.<br>
+{Dica: remova as extensões com a ferramenta Eliminar.}
+</p>
+<p>
+<em>Mudar jogador (P+):</em> permite atuar como outro <a href="players.txt">jogador</a> se a opção <a href="new_world.txt">Permitir mudança de jogador</a> tiver sido selecionada no início do jogo. <a href="edittools.txt">Opções</a> adicionais estão disponíveis se jogando como o Poder público.<br>
+Clique no botão (ou pressione <a href="keys.txt">[P]</a>) para alternar entre os jogadores. Uma mensagem de confirmação aparece quando se muda o jogador: clique no [X] do canto superior esquerdo da mensagem ou use o teclado para fechá-la.
+</p>
+<p>
+<em>Criar nova cidade:</em> constrói uma nova <a href="citywindow.txt">área urbana</a>.<br>
+Para construir uma nova cidade: clique na ferramenta ou pressione [C] para ativá-la (o cursor mudará para uma pequena prefeitura), e clique no local desejado, na área do jogo. A nova cidade custa 5.000.000,00 de créditos e será construída sem pedir confirmação ao jogador.<br>
+{Dica: clique na prefeitura da cidade na área de jogo com a ferramenta Eliminar para demolir as construções da nova cidade.}
+</p>
+<p>
+<em>Plantar árvore:</em> planta uma árvore na área de jogo.<br>
+Para plantar uma árvore: clique na ferramenta para ativá-la (o cursor mudará para uma árvore), e clique no lugar desejado.<br>
+{Dica: remova as árvores com a ferramenta Remover.}
+</p>
+<p>
+<em>Construir linha elétrica:</em> constrói linhas elétricas que transportam eletricidade dos transformadores das usinas de geração de energia até as <a href="industry_info.txt">indústrias</a> (para aumentar suas produtividades). O fornecimento de energia elétrica gera lucro. As linhas elétricas não podem cruzar trilhos e estradas na diagonal.<br>
+Para construir uma linha elétrica: clique na ferramenta ou pressione [l] para ativá-la (o cursor mudará para uma linha elétrica), e clique em um transformador situado em uma usina, e finalmente clique em um transformador situado em uma indústria.<br>
+{Dicas: linhas elétricas podem ser construídas em partes, clique nos pontos desejados na área de jogo. Remova as linhas elétricas com a ferramenta Eliminar.}
+</p>
+<p>
+<em>Construir transformador:</em> constrói um transformador nas usinas geradoras de energia ou nas <a href="industry_info.txt">indústrias</a> para conexão com as linhas elétricas.<br>
+Para construir um transformador: clique na ferramenta ou pressione [g] para ativá-la (o cursor mudará para uma gota vermelha em um círculo amarelo), e clique na posição desejada ao lado de uma indústria ou de uma usina de energia.<br>
+Transformadores construídos nas usinas de energia devem ser conectados com transformadores das indústrias por meio das linhas elétricas.<br>
+Se não houver eletricidade sendo fornecida, o transformador mostrará um raio de cor amarela. Quando houver fornecimento, mostrará um raio na cor vermelha.<br>
+{Dicas: indústrias e usinas de energia podem ter múltiplos transformadores para aumentar o fornecimento de eletricidade. Remova os transformadores com a ferramenta Eliminar.}
+</p>
+<p>
+<em>Marcador:</em> abre controles para a colocação de um sinal com texto personalizado na área de jogo e pode ser usado para ir de um lugar a outro na área de jogo.<br>
+Clique na ferramenta para ativá-la ou pressione [M] (o cursor mudará para um marcador), e clique no lugar desejado para abrir a janela de controles do marcador. No topo da janela estão as coordenadas no mapa da posição selecionada e uma caixa de texto vazia, digite o texto desejado nela (clique na caixa, digite o texto e clique em <em>OK</em> ou pressione [Enter] ou [Return]) para colocar o marcador. O novo marcador é mostrado na área de jogo e mostrado na janela de controles do marcador (com as coordenadas do mapa) quando reaberta.<br>
+Para se deslocar até um marcador: abra a janela de controles do marcador e clique na posição desejada na lista.<br>
+Para remover um marcador: clique na ferramenta <em>marcador</em> ou pressione [M] para ativá-la (o cursor mudará para um marcador), e clique nas coordenadas do marcador na área de jogo; logo após, clique em <em>Eliminar</em> na janela de controles do marcador.<br>
+Para fechar os controles do marcador: clique no X do canto superior esquerdo da janela; ou clique em <em>Cancelar</em>; ou use o teclado.<br>
+{Dicas: as coordenadas da posição do cursor podem ser vistas no lado direito da barra inferior do jogo. Use [!] para mostrar/esconder o texto dos marcadores na área de jogo.}
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/station.txt b/simutrans/text/pt/station.txt
index 8b07655..490d295 100644
--- a/simutrans/text/pt/station.txt
+++ b/simutrans/text/pt/station.txt
@@ -1,84 +1,84 @@
-<title>Ajuda - Informações das Paradas</title>
-
-<h1><strong>Informações das Paradas</strong></h1>
-
-<p>
-As <strong>Paradas</strong> são os locais onde os <a href="convoiinfo.txt">veículos</a> apanham e deixam passageiros ou cargas. A janela que se abre ao clicar em uma parada dá acesso a diversos detalhes da parada além de permitir mudar o seu nome.
-</p>
-<p>
-Além de ser o local onde os veículos param, uma parada pode ser composta de extensões, que adicionam capacidade de armazenamento ou permitem que a parada aceite outros tipos de carga além dos originais.
-</p>
-<p>
-As ferramentas para a construção de paradas estão disponíveis nas respectivas barras de cada tipo de transporte:<br>
-- <a href="railtools.txt">plataformas de trem/comboio</a>;<br>
-- <a href="monorailtools.txt">plataformas de monotrilho</a>;<br>
-- <a href="tramtools.txt">paradas de bonde/eléctrico</a>;<br>
-- <a href="roadtools.txt">paradas de ônibus/autocarro ou caminhão/camião</a>;<br>
-- <a href="shiptools.txt">docas</a>;<br>
-- e <a href="airtools.txt">aeroportos</a>.<br>
-
-(Dicas: Veículos aquáticos podem usar qualquer quadro de água na área de captura de uma doca para pegar e deixar cargas e passageiros. Parada maiores podem ser construídas simplesmente adicionando mais quadros de parada. Uma parada pode aceitar mais de um tipo de veículo adicionando-se os quadros adequados nas vias próprias; ou seja, uma estação de trem pode ser colocada ao lado de uma parada de ônibus, desde que haja um trilho passando ao lado da rua onde está a parada.)
-</p>
-<p>
-Clique numa parada na tela do jogo com a ferramenta <a href="inspection_tool.txt">Verificar</a> ou numa parada listada na<a href="haltlist.txt">Lista de paradas</a> ou <a href="linemanagement.txt">Gerenciador de Linhas</a> para abrir as informações das <strong>paradas</strong> que mostra o nome da parada em sua barra de título.<br>
-A janela das <strong>paradas</strong> contém uma caixa de nome, uma vista da parada, informações sobre a parada, botões de opção e uma lista de todos os bens e passageiros prontos para serem transportados. Se não for possível ver todos os bens, ou todas as informações sobre eles, redimensione a janela da <strong>parada</strong> ou use as barras de rolagem para mostrar os itens:
-</p>
-<p>
-<em>Nome</em>: O nome da parada é mostrado na caixa que fica em cima na janela de informações das <strong>Paradas</strong>.<br>
-Por padrão, um nome é atribuído automaticamente à parada quando ela é construída e depende da <a href="citywindow.txt">área urbana</a> onde é inserida ou das <a href="industry_info.txt">indústrias</a> próximas, dentro da área de captura da parada.<br>
-Para alterar o nome da parada, basta clicar na caixa do nome e escrever o novo nome da parada.<br>
-(dicas: Use <a href="keys.txt">[!]</a> para alterar a visualização dos nomes das paradas sobre elas. Use [v] para alterar a visão da área de captura da parada. Opção para numerar as paradas está disponível no arquivo simuconf.tab [numbered_stops=])
-</p>
-<p>
-<em>Barra de estado</em> Suas cores indicam a qualidade da operação da parada. Elas também são usadas na <a href="haltlist.txt">Lista das Paradas</a> e no <a href="linemanagement.txt">Gerenciador de Linhas</a>, e são as mesmas exibidas acima da parada na tela do jogo:<br>
-- <em>amarelo:</em> parada sem atendimento; nenhum veículo a utiliza.<br>
-- <em>verde:</em> não é necessário melhorar o atendimento; a parada não lota.<br>
-- <em>laranja:</em> alguma melhoria é necessária.<br>
-- <em>vermelho:</em> é necessário melhorar o atendimento urgentemente.<br>
-(Dicas: Use <a href="keys.txt">[!]</a> para alternar a visualização das barras de estado sobre as paradas na tela do jogo.)
-</p>
-<p>
-Também há ícones que representam:<br>
-- <em>carga(s)</em> indicam quais itens são aceitos na parada: (passageiros, carga ou correio).<br>
-- <em>veículo(s)</em> indicam quais tipos de veículo podem usar a parada. Eles incluem: ônibus/autocarro, caminhão/camião, trem/comboio, barco/navio e avião. Bondes/eléctricos são ora representados pelo símbolo de ônibus/autocarro, ora pelo de trem/comboio, conforme o tipo original da parada.
-</p>
-<p>
-<em>Capacidade de armazenamento:</em> o quanto de cada carga a parada pode acomodar.
-</p>
-<p>
-<em>Imagem da parada</em>: uma visão da parada e quaisquer veículos visíveis.<br>
-Clique na imagem para centralizar a visão do jogo sobre a parada.</p>
-<p>
-<em>Passageiros</em> os números indicam a quantidade de passageiros que querem iniciar sua viagem pela parada em foco:<br>
-- <em>rosto feliz</em> indica a quantidade de passageiros que chegaram à parada e encontraram-na sem estar lotada e encontram uma rota para o seu destino.<br>
-- <em>rosto triste ou bravo</em> indica a quantidade de passageiros que chegaram à parada, mas encontraram-na lotada, o que os fez desistir de viajar.<br>
-- <em>sem caminho</em> indica a quantidade de passageiros que chegaram à parada, mas não encontraram uma rota para chegar ao seu destino.<br>
-(Dicas: Manter os passageiros felizes ajuda a aumentar a população das <a href="citywindow.txt">cidades</a>. É possível alterar o número máximo de transferências no arquivo simuconf.tab}.
-</p>
-<p>
-<em>Passageiros/mercadoria esperando:</em> lista os itens que esperam por transporte na parada em grupos de: passageiros; correio; e tipo de mercadorias.<br>
-A informação mostrada de cada item inclui quantidade, tipo, destino final e primeira parada de transferência.<br>
-O botão de opções (que muda seu nome conforme se clica nele) organiza os itens das seguintes maneiras:<br>
- - <em>destino:</em> organiza os itens alfanumericamente, de acordo com a codificação ASCII (letra maiúsculas antes das minúsculas e estas, antes das acentuadas), pelo nome da parada do destino final.<br>
- - <em>via (detalhe):</em> organiza os itens alfanumericamente, de acordo com a codificação ASCII (letra maiúsculas antes das minúsculas e estas, antes das acentuadas), pelo nome da primeira parada de transferência.<br>
- - <em>via (quantidade):</em> organiza os itens pela quantidade que vai ser transferida numa parada imediatamente posterior.<br>
- - <em>quantidade:</em> organiza por ordem decrescente da quantidade do item em espera.<br>
-(Dicas: as barras coloridas sobre uma parada indicam a quantidade de mercadoria ou de passageiros esperando para ser transportada e são as mesmas que se vê na <a href="goods_filter.txt">Lista das cargas</a>.)
-</p>
-<p>
-<em>Gráfico:</em> Clique no botão para acionar os gráficos da janela de <strong>Informações da Parada</strong> (quando a área do gráfico está visível, o botão fica afundado).<br>
-O gráfico mostra estatísticas para os últimos 12 meses (eixo horizontal) para o(s) dado(s) selecionado(s).<br>
-As cores das linha do gráfico correspondem às dos botões sobre ele:<br>
-- <em>Contentes</em> indica a quantidade de passageiros que chegaram à parada e encontraram-na sem estar lotada e encontram uma rota para o seu destino.<br>
-- <em>Descontentes</em> indica a quantidade de passageiros que chegaram à parada, mas encontraram-na lotada, o que os fez desistir de viajar.<br>
-- <em>Sem rota</em> indica a quantidade de passageiros que chegaram à parada, mas não encontraram uma rota para chegar ao seu destino.<br>
-- <em>Espera:</em> quantidade de passageiros e mercadorias à espera de transporte.<br>
-- <em>Chegados:</em> quantidade de passageiros e mercadorias que chegaram à parada através de veículos, não pela área de captura.<br>
-- <em>Saídos:</em> quantidade de passageiros e mercadorias que saíram da parada através de veículos.<br>
-- <em>Veículos:</em> quantidade de veículos que partiram da parada.
-</p>
-<p>
-<em>Detalhes:</em> botão que abre a janela de <a href="station_details.txt">Detalhes da Parada</a> que fornece outras características da parada, não disponíveis na janela principal.
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008, atualizado em 07/02/2008.
+<title>Ajuda - Informações das Paradas</title>
+
+<h1><strong>Informações das Paradas</strong></h1>
+
+<p>
+As <strong>Paradas</strong> são os locais onde os <a href="convoiinfo.txt">veículos</a> apanham e deixam passageiros ou cargas. A janela que se abre ao clicar em uma parada dá acesso a diversos detalhes da parada além de permitir mudar o seu nome.
+</p>
+<p>
+Além de ser o local onde os veículos param, uma parada pode ser composta de extensões, que adicionam capacidade de armazenamento ou permitem que a parada aceite outros tipos de carga além dos originais.
+</p>
+<p>
+As ferramentas para a construção de paradas estão disponíveis nas respectivas barras de cada tipo de transporte:<br>
+- <a href="railtools.txt">plataformas de trem/comboio</a>;<br>
+- <a href="monorailtools.txt">plataformas de monotrilho</a>;<br>
+- <a href="tramtools.txt">paradas de bonde/eléctrico</a>;<br>
+- <a href="roadtools.txt">paradas de ônibus/autocarro ou caminhão/camião</a>;<br>
+- <a href="shiptools.txt">docas</a>;<br>
+- e <a href="airtools.txt">aeroportos</a>.<br>
+
+(Dicas: Veículos aquáticos podem usar qualquer quadro de água na área de captura de uma doca para pegar e deixar cargas e passageiros. Parada maiores podem ser construídas simplesmente adicionando mais quadros de parada. Uma parada pode aceitar mais de um tipo de veículo adicionando-se os quadros adequados nas vias próprias; ou seja, uma estação de trem pode ser colocada ao lado de uma parada de ônibus, desde que haja um trilho passando ao lado da rua onde está a parada.)
+</p>
+<p>
+Clique numa parada na tela do jogo com a ferramenta <a href="inspection_tool.txt">Verificar</a> ou numa parada listada na<a href="haltlist.txt">Lista de paradas</a> ou <a href="linemanagement.txt">Gerenciador de Linhas</a> para abrir as informações das <strong>paradas</strong> que mostra o nome da parada em sua barra de título.<br>
+A janela das <strong>paradas</strong> contém uma caixa de nome, uma vista da parada, informações sobre a parada, botões de opção e uma lista de todos os bens e passageiros prontos para serem transportados. Se não for possível ver todos os bens, ou todas as informações sobre eles, redimensione a janela da <strong>parada</strong> ou use as barras de rolagem para mostrar os itens:
+</p>
+<p>
+<em>Nome</em>: O nome da parada é mostrado na caixa que fica em cima na janela de informações das <strong>Paradas</strong>.<br>
+Por padrão, um nome é atribuído automaticamente à parada quando ela é construída e depende da <a href="citywindow.txt">área urbana</a> onde é inserida ou das <a href="industry_info.txt">indústrias</a> próximas, dentro da área de captura da parada.<br>
+Para alterar o nome da parada, basta clicar na caixa do nome e escrever o novo nome da parada.<br>
+(dicas: Use <a href="keys.txt">[!]</a> para alterar a visualização dos nomes das paradas sobre elas. Use [v] para alterar a visão da área de captura da parada. Opção para numerar as paradas está disponível no arquivo simuconf.tab [numbered_stops=])
+</p>
+<p>
+<em>Barra de estado</em> Suas cores indicam a qualidade da operação da parada. Elas também são usadas na <a href="haltlist.txt">Lista das Paradas</a> e no <a href="linemanagement.txt">Gerenciador de Linhas</a>, e são as mesmas exibidas acima da parada na tela do jogo:<br>
+- <em>amarelo:</em> parada sem atendimento; nenhum veículo a utiliza.<br>
+- <em>verde:</em> não é necessário melhorar o atendimento; a parada não lota.<br>
+- <em>laranja:</em> alguma melhoria é necessária.<br>
+- <em>vermelho:</em> é necessário melhorar o atendimento urgentemente.<br>
+(Dicas: Use <a href="keys.txt">[!]</a> para alternar a visualização das barras de estado sobre as paradas na tela do jogo.)
+</p>
+<p>
+Também há ícones que representam:<br>
+- <em>carga(s)</em> indicam quais itens são aceitos na parada: (passageiros, carga ou correio).<br>
+- <em>veículo(s)</em> indicam quais tipos de veículo podem usar a parada. Eles incluem: ônibus/autocarro, caminhão/camião, trem/comboio, barco/navio e avião. Bondes/eléctricos são ora representados pelo símbolo de ônibus/autocarro, ora pelo de trem/comboio, conforme o tipo original da parada.
+</p>
+<p>
+<em>Capacidade de armazenamento:</em> o quanto de cada carga a parada pode acomodar.
+</p>
+<p>
+<em>Imagem da parada</em>: uma visão da parada e quaisquer veículos visíveis.<br>
+Clique na imagem para centralizar a visão do jogo sobre a parada.</p>
+<p>
+<em>Passageiros</em> os números indicam a quantidade de passageiros que querem iniciar sua viagem pela parada em foco:<br>
+- <em>rosto feliz</em> indica a quantidade de passageiros que chegaram à parada e encontraram-na sem estar lotada e encontram uma rota para o seu destino.<br>
+- <em>rosto triste ou bravo</em> indica a quantidade de passageiros que chegaram à parada, mas encontraram-na lotada, o que os fez desistir de viajar.<br>
+- <em>sem caminho</em> indica a quantidade de passageiros que chegaram à parada, mas não encontraram uma rota para chegar ao seu destino.<br>
+(Dicas: Manter os passageiros felizes ajuda a aumentar a população das <a href="citywindow.txt">cidades</a>. É possível alterar o número máximo de transferências no arquivo simuconf.tab}.
+</p>
+<p>
+<em>Passageiros/mercadoria esperando:</em> lista os itens que esperam por transporte na parada em grupos de: passageiros; correio; e tipo de mercadorias.<br>
+A informação mostrada de cada item inclui quantidade, tipo, destino final e primeira parada de transferência.<br>
+O botão de opções (que muda seu nome conforme se clica nele) organiza os itens das seguintes maneiras:<br>
+ - <em>destino:</em> organiza os itens alfanumericamente, de acordo com a codificação ASCII (letra maiúsculas antes das minúsculas e estas, antes das acentuadas), pelo nome da parada do destino final.<br>
+ - <em>via (detalhe):</em> organiza os itens alfanumericamente, de acordo com a codificação ASCII (letra maiúsculas antes das minúsculas e estas, antes das acentuadas), pelo nome da primeira parada de transferência.<br>
+ - <em>via (quantidade):</em> organiza os itens pela quantidade que vai ser transferida numa parada imediatamente posterior.<br>
+ - <em>quantidade:</em> organiza por ordem decrescente da quantidade do item em espera.<br>
+(Dicas: as barras coloridas sobre uma parada indicam a quantidade de mercadoria ou de passageiros esperando para ser transportada e são as mesmas que se vê na <a href="goods_filter.txt">Lista das cargas</a>.)
+</p>
+<p>
+<em>Gráfico:</em> Clique no botão para acionar os gráficos da janela de <strong>Informações da Parada</strong> (quando a área do gráfico está visível, o botão fica afundado).<br>
+O gráfico mostra estatísticas para os últimos 12 meses (eixo horizontal) para o(s) dado(s) selecionado(s).<br>
+As cores das linha do gráfico correspondem às dos botões sobre ele:<br>
+- <em>Contentes</em> indica a quantidade de passageiros que chegaram à parada e encontraram-na sem estar lotada e encontram uma rota para o seu destino.<br>
+- <em>Descontentes</em> indica a quantidade de passageiros que chegaram à parada, mas encontraram-na lotada, o que os fez desistir de viajar.<br>
+- <em>Sem rota</em> indica a quantidade de passageiros que chegaram à parada, mas não encontraram uma rota para chegar ao seu destino.<br>
+- <em>Espera:</em> quantidade de passageiros e mercadorias à espera de transporte.<br>
+- <em>Chegados:</em> quantidade de passageiros e mercadorias que chegaram à parada através de veículos, não pela área de captura.<br>
+- <em>Saídos:</em> quantidade de passageiros e mercadorias que saíram da parada através de veículos.<br>
+- <em>Veículos:</em> quantidade de veículos que partiram da parada.
+</p>
+<p>
+<em>Detalhes:</em> botão que abre a janela de <a href="station_details.txt">Detalhes da Parada</a> que fornece outras características da parada, não disponíveis na janela principal.
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008, atualizado em 07/02/2008.
 </p>
diff --git a/simutrans/text/pt/station_details.txt b/simutrans/text/pt/station_details.txt
index 0ab36c9..e2f6a3a 100644
--- a/simutrans/text/pt/station_details.txt
+++ b/simutrans/text/pt/station_details.txt
@@ -1,30 +1,30 @@
-<title>Ajuda - Detalhes da Parada</title>
-
-<h1><strong>Detalhes da Parada</strong></h1>
-
-<p>
-A janela <strong>Detalhes da Parada</strong> providencia mais informações sobre a estação/parada (onde veículos recolhem e entregam mercadorias e passageiros).
-</p>
-<p>
-A janela <strong>Detalhes da Parada</strong> abre do botão <a href="station.txt">Detalhes</a> na janela de Informações das Paradas.
-<br>
-Se todos os itens não estiverem visíveis <a href="mouse.txt">redimensione</a> a janela <strong>Detalhes da Parada</strong> ou use as barras de rolagem para percorrer os itens.
-</p>
-<p>
-As informações listadas incluem:<br>
-<em>Indústrias conectadas:</em> nomes e coordenadas no mapa (em parênteses) das <a href="industry_info.txt">indústrias</a> na área de captura da parada.<br>
-{Dica: use <a href="keys.txt">[v]</a> para mostrar/exibir a área de captura de uma parada.}
-</p>
-<p>
-<em>Indústrias próximas precisam:</em> lista as <a href="goods_filter.txt">mercadorias</a> requeridas pelas <a href="industryinfo.txt">indústrias</a> na área de captura da parada.
-</p>
-<p>
-<em>Linhas que servem esta parada:</em> mostra as <a href="linemanagement.txt">linhas</a> que usam a parada.<br>
-Linhas são listadas pela ordem do código ASCII (letras maiúsculas antes de minúsculas).
-</p>
-<p>
-<em>Paradas conectadas diretamente:</em> lista o nome das paradas que podem ser alcançadas e o tipo de itens (mercadorias e passageiros) que podem ser entregues.<br>
-Paradas são listadas pela ordem do código ASCII (letras maiúsculas antes de minúsculas) pelo tipo de transporte, nome da parada, e tipo de item que pode ser entregue (que também é mostrado por cada parada).
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Detalhes da Parada</title>
+
+<h1><strong>Detalhes da Parada</strong></h1>
+
+<p>
+A janela <strong>Detalhes da Parada</strong> providencia mais informações sobre a estação/parada (onde veículos recolhem e entregam mercadorias e passageiros).
+</p>
+<p>
+A janela <strong>Detalhes da Parada</strong> abre do botão <a href="station.txt">Detalhes</a> na janela de Informações das Paradas.
+<br>
+Se todos os itens não estiverem visíveis <a href="mouse.txt">redimensione</a> a janela <strong>Detalhes da Parada</strong> ou use as barras de rolagem para percorrer os itens.
+</p>
+<p>
+As informações listadas incluem:<br>
+<em>Indústrias conectadas:</em> nomes e coordenadas no mapa (em parênteses) das <a href="industry_info.txt">indústrias</a> na área de captura da parada.<br>
+{Dica: use <a href="keys.txt">[v]</a> para mostrar/exibir a área de captura de uma parada.}
+</p>
+<p>
+<em>Indústrias próximas precisam:</em> lista as <a href="goods_filter.txt">mercadorias</a> requeridas pelas <a href="industryinfo.txt">indústrias</a> na área de captura da parada.
+</p>
+<p>
+<em>Linhas que servem esta parada:</em> mostra as <a href="linemanagement.txt">linhas</a> que usam a parada.<br>
+Linhas são listadas pela ordem do código ASCII (letras maiúsculas antes de minúsculas).
+</p>
+<p>
+<em>Paradas conectadas diretamente:</em> lista o nome das paradas que podem ser alcançadas e o tipo de itens (mercadorias e passageiros) que podem ser entregues.<br>
+Paradas são listadas pela ordem do código ASCII (letras maiúsculas antes de minúsculas) pelo tipo de transporte, nome da parada, e tipo de item que pode ser entregue (que também é mostrado por cada parada).
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/pt/tramtools.txt b/simutrans/text/pt/tramtools.txt
index 93cc701..7fa598f 100644
--- a/simutrans/text/pt/tramtools.txt
+++ b/simutrans/text/pt/tramtools.txt
@@ -1,69 +1,69 @@
-<title>Ajuda - Bondes</title>
-
-<h1><strong>Bondes</strong></h1>
-
-<p>
-As <strong>ferramentas para Bondes</strong> constróem uma rede de transporte por bondes. Elas podem construir trilhos para bondes (e eletrificá-los ou removê-los), sinais, depósitos e paradas.
-Se você estiver jogando com <a href="new_world.txt">linha do tempo</a>, então conforme o tempo passa no Simutrans mais opções de ferramentas podem aparecer.
-</p>
-<p>
-Clique no ícone de um bonde no topo da área de jogo para abrir a barra de ferramentas.<br>
-Passe o cursor do mouse em cima das opções (após ter aberto ou clicado na barra de ferramentas) para ver o nome, o <a href="finances.txt">custo</a> de construção e o limite máximo de velocidade.
-</p>
-<p>
-As <strong>ferramentas para Bondes</strong> incluem, da esquerda para a direita:
-</p>
-<p>
-<em>Trilho de bonde:</em> constrói trilhos de bondes, para veículos de linha férrea entre dois pontos.<br>
-Trilhos de bonde podem ser construídos por cima das estradas e em áreas urbanas, mas não em áreas ocupadas por outros edifícios. Trilhos podem ser construídos em declives somente na direção dos mesmos e não podem ser construídos em terreno acidentado, sobre a água ou obstáculos. O novo trilho construído pode usar outros trilhos existentes em seu caminho.<br>
-Para construir um trilho: clique na ferramenta para ativá-la (o cursor mudará para um trilho), e clique na área de jogo no ponto inicial do trilho (mostra um trator na área de jogo e as coordenadas do mapa no lado direito da barra inferior do jogo), e finalmente clique na área de jogo no ponto final para o trilho.<br>
-{Dicas: tipos diferentes de trilhos podem se conectar (porém não quando construídos por <a href="players.txt">jogadores</a> diferentes). Use <a href="railtools.txt">pontes</a> e túneis para conectar trilhos através de terreno acidentado ou para desviar de obstáculos. Use a ferramenta Eliminar para remover pedaços individuais dos trilhos e algumas obstruções. Use <a href="keys.txt">[Ctrl]</a> ao mesmo tempo para funções extra. O desfazer [z] não reembolsa os custos da construção.}
-</p>
-<p>
-<em>Rede aérea de força:</em> ferramentas para eletrificar trilhos, pontes ou túneis entre dois pontos na área de jogo, para o uso de veículos elétricos.<br>
-Para eletrificar os trilhos: clique na ferramenta ou pressione [e] (o cursor mudará para um trilho eletrificado) para ativá-la, e clique no trilho no ponto de início da eletrificação (um ícone de rede aérea se fixa marcando o ponto), e finalmente clique em um segundo ponto do trilho, para eletrificar o trecho desde o ponto inicial selecionado.<br>
-{Dica: use a ferramenta Eliminar para voltar a usar trilhos não-eletrificados.}
-</p>
-<p>
-<em>Remover trecho de trilhos:</em> remove trilhos (eletrificados ou não), quando não houver veículos presentes, entre dois pontos na área de jogo (plataformas de estações, paradas em estradas, sinais, túneis e pontes do caminho são removidos também). O uso da ferramenta tem um <a href="finances.txt">custo</a> de construção.<br>
-Para remover um trecho de trilhos: clique na ferramenta para ativá-la (o cursor mudará para um X vermelho), e clique no trilho que será removido (o ponto selecionado é marcado por um X vermelho na área de jogo), e finalmente clique no segundo ponto em um trilho conectado, para remover o trecho de trilhos desde o ponto inicial selecionado.<br>
-{Dica: jogue como outro jogador para remover seus trilhos.}
-</p>
-<p>
-<em>Sinais:</em> coloca sinais para os veículos em um trilho na área de jogo. Sinais regulam e direcionam o fluxo de veículos em trilhos, pontes, cruzamentos e <a href="station.txt">estações</a> (onde veículos recolhem e entregam mercadorias e passageiros).<br>
-Podem ser construídos sinais para vias de mão dupla ou mão única. Para construir um sinal de mão dupla nos trilhos: clique na ferramenta para ativá-la (o cursor mudará para um sinal), e clique no trilho. Para construir um sinal de mão única: clique novamente no mesmo ponto, com o cursor em forma de sinal, para alternar entre os sinais de cada lado da via, e de volta para um sinal de mão dupla.<br>
-IMPORTANTE: tome cuidado para não colocar sinais de mão única que impeçam os veículos de chegar a seu destino, por padrão os veículos andam à direita (pode ser mudado no arquivo simuconf.tab).<br>
-- <em>Sinais:</em> veículos prosseguem somente se o trecho de trilho até o próximo sinal ou destino na <a href="schedule.txt">Programação</a> (uma <a href="station.txt">estação</a> ou ponto de passagem) não estiver ocupado por outro veículo. Em sinais de mão única veículos passam em apenas uma direção.<br>
-- <em>Sentido único:</em> veículos não prosseguem além do sinal (disponível somente em sinais de mão única).<br>
-- <em>PreSignals:</em> veículos prosseguem se o trecho de trilho à frente (qualquer entre três sinais consecutivos ou para o próximo destino na <a href="schedule.txt">Programação</a>) não estiver ocupado por outro veículo. Em sinais de mão única eles permitem que veículos trafeguem em somente uma direção.<br>
-- <em>Direcionador ferroviário para vaga livre:</em> direciona veículos para uma plataforma livre da estação, em uma <a href="station.txt">estação</a> com múltiplas plataformas: um veículo passando este sinal pode usar qualquer plataforma livre até seu próximo destino, e não somente aquela descrita em sua <a href="schedule.txt">Programação</a>. Se não houver plataforma livre ou caminho livre até o próximo destino, o veículo esperará no sinal.<br>
-{Dicas: remova os sinais com a ferramenta Eliminar. Mantenha pressionada a tecla [Ctrl] para colocar sinais em pontes acima de outros trilhos.}
-</p>
-<p>
-<em>Construir </em><a href="depot.txt"><em>depósito</em></a> <em>de bonde:</em> constrói um depósito para a compra e o gerenciamento de bondes.<br>
-Depósitos possuem um custo de manutenção e são construídos em fins de trilhos na área de jogo.<br>
-Para construir um depósito de bonde: clique na ferramenta para ativá-la (o cursor mudará para um depósito), e clique no fim de um trilho.<br>
-{Dicas: depósitos somente mostrarão veículos elétricos se estiverem em um trilho eletrificado. Remova os depósitos com a ferramenta Eliminar.}
-</p>
-<p>
-<em>Paradas de bonde em ferrovias:</em> constróem plataformas de estação, usadas por veículos ferroviários para recolher e entregar mercadorias, passageiros e correio.<br>
-Uma plataforma de estação quando não for construída adjacente a uma <a href="station.txt">parada</a> existente, criará uma nova estação.<br>
-Paradas em ferrovias possuem um custo de manutenção e são construídos em trilhos (menos em curvas e cruzamentos de ferrovias).<br>
-Elas possuem uma área de captura para mercadorias, passageiros e correio. Plataformas diferentes podem ter diferentes capacidades para passageiros e correio. No canto superior de algumas opções um ícone (usado na <a href="haltlist.txt">Lista de Paradas</a> e Informações das paradas) mostra quais itens a plataforma permite à estação receber.<br>
-Para construir uma plataforma: clique na ferramenta para ativá-la (o cursor mudará para uma plataforma), e clique no trilho.<br>
-{Dicas: remova as paradas com a ferramenta Eliminar. Estenda as plataformas de estação e construa estações maiores (construindo mais seções de plataformas nos trilhos adjacentes) para acomodar veículos longos, bem como maior quantidade deles, aumentar a capacidade e a área de captura da estação. Pressione [v] para mostrar/esconder a área de captura da estação. Mantenha pressionada a tecla [Ctrl] para construir em pontes acima de outros trilhos.}
-</p>
-<p>
-<em>Estacionamento:</em> (disponível somente no pak128) constrói extensões para <a href="station.txt">estações</a> que aumentam a capacidade e a área de captura para mercadorias e passageiros, e o custo de manutenção.<br>
-Para construir uma extensão: clique na ferramenta para ativá-la (o cursor mudará para uma extensão), e clique na posição desejada em uma estrada, ao lado de uma estação existente. A nova extensão agora fará parte da estação.<br>
-{Dica: remova extensões com a ferramenta Eliminar.}
-</p>
-<p>
-<em>Paradas de bonde em estradas:</em> constróem pontos onde bondes e veículos de estrada possam recolher e entregar mercadoria, correio e passageiros.<br>
-Uma parada em estrada, quando não for construída adjacente a uma <a href="station.txt">parada</a> existente, criará uma nova parada.
-Elas são construídas em <a href="roadtools.txt">estradas</a> e possuem um custo de manutenção e uma área de captura para mercadorias, passageiros e correio. No canto superior de algumas opções um ícone (usado na <a href="haltlist.txt">Lista de paradas</a> e Informações das paradas) mostra quais itens a plataforma permite à estação receber. Diferentes paradas podem ter diferentes capacidades para mercadorias, passageiros e correio.<br>
-Para construir uma parada de bonde em estrada: clique na ferramenta para ativá-la (o cursor mudará para uma estação), e clique no local desejado da estrada na área de jogo.<br>
-{Dicas: remova as paradas com a ferramenta Eliminar. Mantenha pressionada a tecla [Ctrl] para construir em pontes acima de outras estradas.}
-</p>
-<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
+<title>Ajuda - Bondes</title>
+
+<h1><strong>Bondes</strong></h1>
+
+<p>
+As <strong>ferramentas para Bondes</strong> constróem uma rede de transporte por bondes. Elas podem construir trilhos para bondes (e eletrificá-los ou removê-los), sinais, depósitos e paradas.
+Se você estiver jogando com <a href="new_world.txt">linha do tempo</a>, então conforme o tempo passa no Simutrans mais opções de ferramentas podem aparecer.
+</p>
+<p>
+Clique no ícone de um bonde no topo da área de jogo para abrir a barra de ferramentas.<br>
+Passe o cursor do mouse em cima das opções (após ter aberto ou clicado na barra de ferramentas) para ver o nome, o <a href="finances.txt">custo</a> de construção e o limite máximo de velocidade.
+</p>
+<p>
+As <strong>ferramentas para Bondes</strong> incluem, da esquerda para a direita:
+</p>
+<p>
+<em>Trilho de bonde:</em> constrói trilhos de bondes, para veículos de linha férrea entre dois pontos.<br>
+Trilhos de bonde podem ser construídos por cima das estradas e em áreas urbanas, mas não em áreas ocupadas por outros edifícios. Trilhos podem ser construídos em declives somente na direção dos mesmos e não podem ser construídos em terreno acidentado, sobre a água ou obstáculos. O novo trilho construído pode usar outros trilhos existentes em seu caminho.<br>
+Para construir um trilho: clique na ferramenta para ativá-la (o cursor mudará para um trilho), e clique na área de jogo no ponto inicial do trilho (mostra um trator na área de jogo e as coordenadas do mapa no lado direito da barra inferior do jogo), e finalmente clique na área de jogo no ponto final para o trilho.<br>
+{Dicas: tipos diferentes de trilhos podem se conectar (porém não quando construídos por <a href="players.txt">jogadores</a> diferentes). Use <a href="railtools.txt">pontes</a> e túneis para conectar trilhos através de terreno acidentado ou para desviar de obstáculos. Use a ferramenta Eliminar para remover pedaços individuais dos trilhos e algumas obstruções. Use <a href="keys.txt">[Ctrl]</a> ao mesmo tempo para funções extra. O desfazer [z] não reembolsa os custos da construção.}
+</p>
+<p>
+<em>Rede aérea de força:</em> ferramentas para eletrificar trilhos, pontes ou túneis entre dois pontos na área de jogo, para o uso de veículos elétricos.<br>
+Para eletrificar os trilhos: clique na ferramenta ou pressione [e] (o cursor mudará para um trilho eletrificado) para ativá-la, e clique no trilho no ponto de início da eletrificação (um ícone de rede aérea se fixa marcando o ponto), e finalmente clique em um segundo ponto do trilho, para eletrificar o trecho desde o ponto inicial selecionado.<br>
+{Dica: use a ferramenta Eliminar para voltar a usar trilhos não-eletrificados.}
+</p>
+<p>
+<em>Remover trecho de trilhos:</em> remove trilhos (eletrificados ou não), quando não houver veículos presentes, entre dois pontos na área de jogo (plataformas de estações, paradas em estradas, sinais, túneis e pontes do caminho são removidos também). O uso da ferramenta tem um <a href="finances.txt">custo</a> de construção.<br>
+Para remover um trecho de trilhos: clique na ferramenta para ativá-la (o cursor mudará para um X vermelho), e clique no trilho que será removido (o ponto selecionado é marcado por um X vermelho na área de jogo), e finalmente clique no segundo ponto em um trilho conectado, para remover o trecho de trilhos desde o ponto inicial selecionado.<br>
+{Dica: jogue como outro jogador para remover seus trilhos.}
+</p>
+<p>
+<em>Sinais:</em> coloca sinais para os veículos em um trilho na área de jogo. Sinais regulam e direcionam o fluxo de veículos em trilhos, pontes, cruzamentos e <a href="station.txt">estações</a> (onde veículos recolhem e entregam mercadorias e passageiros).<br>
+Podem ser construídos sinais para vias de mão dupla ou mão única. Para construir um sinal de mão dupla nos trilhos: clique na ferramenta para ativá-la (o cursor mudará para um sinal), e clique no trilho. Para construir um sinal de mão única: clique novamente no mesmo ponto, com o cursor em forma de sinal, para alternar entre os sinais de cada lado da via, e de volta para um sinal de mão dupla.<br>
+IMPORTANTE: tome cuidado para não colocar sinais de mão única que impeçam os veículos de chegar a seu destino, por padrão os veículos andam à direita (pode ser mudado no arquivo simuconf.tab).<br>
+- <em>Sinais:</em> veículos prosseguem somente se o trecho de trilho até o próximo sinal ou destino na <a href="schedule.txt">Programação</a> (uma <a href="station.txt">estação</a> ou ponto de passagem) não estiver ocupado por outro veículo. Em sinais de mão única veículos passam em apenas uma direção.<br>
+- <em>Sentido único:</em> veículos não prosseguem além do sinal (disponível somente em sinais de mão única).<br>
+- <em>PreSignals:</em> veículos prosseguem se o trecho de trilho à frente (qualquer entre três sinais consecutivos ou para o próximo destino na <a href="schedule.txt">Programação</a>) não estiver ocupado por outro veículo. Em sinais de mão única eles permitem que veículos trafeguem em somente uma direção.<br>
+- <em>Direcionador ferroviário para vaga livre:</em> direciona veículos para uma plataforma livre da estação, em uma <a href="station.txt">estação</a> com múltiplas plataformas: um veículo passando este sinal pode usar qualquer plataforma livre até seu próximo destino, e não somente aquela descrita em sua <a href="schedule.txt">Programação</a>. Se não houver plataforma livre ou caminho livre até o próximo destino, o veículo esperará no sinal.<br>
+{Dicas: remova os sinais com a ferramenta Eliminar. Mantenha pressionada a tecla [Ctrl] para colocar sinais em pontes acima de outros trilhos.}
+</p>
+<p>
+<em>Construir </em><a href="depot.txt"><em>depósito</em></a> <em>de bonde:</em> constrói um depósito para a compra e o gerenciamento de bondes.<br>
+Depósitos possuem um custo de manutenção e são construídos em fins de trilhos na área de jogo.<br>
+Para construir um depósito de bonde: clique na ferramenta para ativá-la (o cursor mudará para um depósito), e clique no fim de um trilho.<br>
+{Dicas: depósitos somente mostrarão veículos elétricos se estiverem em um trilho eletrificado. Remova os depósitos com a ferramenta Eliminar.}
+</p>
+<p>
+<em>Paradas de bonde em ferrovias:</em> constróem plataformas de estação, usadas por veículos ferroviários para recolher e entregar mercadorias, passageiros e correio.<br>
+Uma plataforma de estação quando não for construída adjacente a uma <a href="station.txt">parada</a> existente, criará uma nova estação.<br>
+Paradas em ferrovias possuem um custo de manutenção e são construídos em trilhos (menos em curvas e cruzamentos de ferrovias).<br>
+Elas possuem uma área de captura para mercadorias, passageiros e correio. Plataformas diferentes podem ter diferentes capacidades para passageiros e correio. No canto superior de algumas opções um ícone (usado na <a href="haltlist.txt">Lista de Paradas</a> e Informações das paradas) mostra quais itens a plataforma permite à estação receber.<br>
+Para construir uma plataforma: clique na ferramenta para ativá-la (o cursor mudará para uma plataforma), e clique no trilho.<br>
+{Dicas: remova as paradas com a ferramenta Eliminar. Estenda as plataformas de estação e construa estações maiores (construindo mais seções de plataformas nos trilhos adjacentes) para acomodar veículos longos, bem como maior quantidade deles, aumentar a capacidade e a área de captura da estação. Pressione [v] para mostrar/esconder a área de captura da estação. Mantenha pressionada a tecla [Ctrl] para construir em pontes acima de outros trilhos.}
+</p>
+<p>
+<em>Estacionamento:</em> (disponível somente no pak128) constrói extensões para <a href="station.txt">estações</a> que aumentam a capacidade e a área de captura para mercadorias e passageiros, e o custo de manutenção.<br>
+Para construir uma extensão: clique na ferramenta para ativá-la (o cursor mudará para uma extensão), e clique na posição desejada em uma estrada, ao lado de uma estação existente. A nova extensão agora fará parte da estação.<br>
+{Dica: remova extensões com a ferramenta Eliminar.}
+</p>
+<p>
+<em>Paradas de bonde em estradas:</em> constróem pontos onde bondes e veículos de estrada possam recolher e entregar mercadoria, correio e passageiros.<br>
+Uma parada em estrada, quando não for construída adjacente a uma <a href="station.txt">parada</a> existente, criará uma nova parada.
+Elas são construídas em <a href="roadtools.txt">estradas</a> e possuem um custo de manutenção e uma área de captura para mercadorias, passageiros e correio. No canto superior de algumas opções um ícone (usado na <a href="haltlist.txt">Lista de paradas</a> e Informações das paradas) mostra quais itens a plataforma permite à estação receber. Diferentes paradas podem ter diferentes capacidades para mercadorias, passageiros e correio.<br>
+Para construir uma parada de bonde em estrada: clique na ferramenta para ativá-la (o cursor mudará para uma estação), e clique no local desejado da estrada na área de jogo.<br>
+{Dicas: remova as paradas com a ferramenta Eliminar. Mantenha pressionada a tecla [Ctrl] para construir em pontes acima de outras estradas.}
+</p>
+<p> Traduzido pela Equipe de tradução do Simutrans PT-SubFórum (<em>http://pt.simutrans.com</em>), 17/01/2008.
 </p>
diff --git a/simutrans/text/sk/bridges.txt b/simutrans/text/sk/bridges.txt
index 5151c68..6bf231a 100644
--- a/simutrans/text/sk/bridges.txt
+++ b/simutrans/text/sk/bridges.txt
@@ -1,36 +1,36 @@
-<title>Nástroj na stavbu mosta - pomoc</title>
-
-<h1>Stavba mosta</h1>
-
-<p>
-Most sa stavia podobne ako tunel.<br>
-<em>Cestný most</em><br>
-Musí¹ mat' u¾ vytvorené cesty, ktoré spojí¹ mostom.
-Obe musia presne lícovat' (pasovat' proti sebe).
-My¹ou zvoµ nástroj cestného mosta. Prepojenie
-vytvorí¹ kliknutím na jeden z koncov prepájaných ciest.
-Most môze¹ stavat' aj tak, ¾e jeden jeho koniec bude na
-kopci (do vý¹ky 1-nej pozície). Pokiaµ by sa Ti stalo,
-¾e cesta nie je prepojená, skús potiahnut' cestu e¹te
-o jednu pozíciu pod most.
-</p>
-<p>
-<em>®eleznièný most</em><br>
-Musí¹ mat' vytvorené ¾eleznièné trate, ktoré spojí¹ mostom.
-Obe musia presne lícovat' (pasovat' proti sebe).
-My¹ou zvoµ nástroj niektorého zo ¾eleznièných mostov.
-Prepojenie ¾eleznièných tratí vytvorí¹ kliknutím na jeden
-z koncov. Most s plným dnom (bez boènej kon¹trukcie) má tú
-výhodu, ze mô¾e¹ naò umiestnit' signalizáciu. Most môze¹
-postavit' aj tak, ze jeden koniec bude na kopci (do vý¹ky
-1-nej pozície). Pokiaµ by sa Ti stalo, ze ¾eleznièná trat'
-nie je prepojená, skús potiahnut' koµajnice e¹te o jednu
-pozíciu pod most.
-</p>
-<p>
-V oboch prípadoch platí, ze stavat' mosty s jedným koncom
-na kopci (príp. obidvomi) je mo¾né, len ak sú steny kopca
-zarovnané do vý¹ky 1-nej pozície. Mosty môze¹ stavat' aj tak,
-¾e preklenie¹ jamu (roklinu). Obe steny jamy (rokliny) v¹ak
-musia mat' opät zarovnané steny do håbky 1-nej pozície.
+<title>Nástroj na stavbu mosta - pomoc</title>
+
+<h1>Stavba mosta</h1>
+
+<p>
+Most sa stavia podobne ako tunel.<br>
+<em>Cestný most</em><br>
+Musí¹ mat' u¾ vytvorené cesty, ktoré spojí¹ mostom.
+Obe musia presne lícovat' (pasovat' proti sebe).
+My¹ou zvoµ nástroj cestného mosta. Prepojenie
+vytvorí¹ kliknutím na jeden z koncov prepájaných ciest.
+Most môze¹ stavat' aj tak, ¾e jeden jeho koniec bude na
+kopci (do vý¹ky 1-nej pozície). Pokiaµ by sa Ti stalo,
+¾e cesta nie je prepojená, skús potiahnut' cestu e¹te
+o jednu pozíciu pod most.
+</p>
+<p>
+<em>®eleznièný most</em><br>
+Musí¹ mat' vytvorené ¾eleznièné trate, ktoré spojí¹ mostom.
+Obe musia presne lícovat' (pasovat' proti sebe).
+My¹ou zvoµ nástroj niektorého zo ¾eleznièných mostov.
+Prepojenie ¾eleznièných tratí vytvorí¹ kliknutím na jeden
+z koncov. Most s plným dnom (bez boènej kon¹trukcie) má tú
+výhodu, ze mô¾e¹ naò umiestnit' signalizáciu. Most môze¹
+postavit' aj tak, ze jeden koniec bude na kopci (do vý¹ky
+1-nej pozície). Pokiaµ by sa Ti stalo, ze ¾eleznièná trat'
+nie je prepojená, skús potiahnut' koµajnice e¹te o jednu
+pozíciu pod most.
+</p>
+<p>
+V oboch prípadoch platí, ze stavat' mosty s jedným koncom
+na kopci (príp. obidvomi) je mo¾né, len ak sú steny kopca
+zarovnané do vý¹ky 1-nej pozície. Mosty môze¹ stavat' aj tak,
+¾e preklenie¹ jamu (roklinu). Obe steny jamy (rokliny) v¹ak
+musia mat' opät zarovnané steny do håbky 1-nej pozície.
 </p>
diff --git a/simutrans/text/sk/color.txt b/simutrans/text/sk/color.txt
index aa20cc4..b8c7fa8 100644
--- a/simutrans/text/sk/color.txt
+++ b/simutrans/text/sk/color.txt
@@ -1,15 +1,15 @@
-<title>Voµba farby - pomoc</title>
-
-<h1>Farby</h1>
-
-<p>
-V tomto menu si mô¾e¹ zvolit' farbu Tvojej spoloènosti.
-Bude spoloèná pre v¹etky Tvoje dopravné prostriedky, stanice atd.
-</p>
-<p>
-Zvoµ svoju svoju farbu jednoduchým kliknutím na niektorú
-zo zobrazených farieb.
-</p>
-<p>
-©tandardne je nastavená svetlomodrá farba.
+<title>Voµba farby - pomoc</title>
+
+<h1>Farby</h1>
+
+<p>
+V tomto menu si mô¾e¹ zvolit' farbu Tvojej spoloènosti.
+Bude spoloèná pre v¹etky Tvoje dopravné prostriedky, stanice atd.
+</p>
+<p>
+Zvoµ svoju svoju farbu jednoduchým kliknutím na niektorú
+zo zobrazených farieb.
+</p>
+<p>
+©tandardne je nastavená svetlomodrá farba.
 </p>
diff --git a/simutrans/text/sk/convoi.txt b/simutrans/text/sk/convoi.txt
index 21f0364..ea8705e 100644
--- a/simutrans/text/sk/convoi.txt
+++ b/simutrans/text/sk/convoi.txt
@@ -1,14 +1,14 @@
-<title>Prehµad vozidiel - pomoc</title>
-<em>Prehµad ponúka nasledovné mo¾nosti:</em>
-<p>
-1.) Triedenie :<br>
-Klikaním na prvé tlaèidlo zµava mení¹ kritéria, t.j. podµa
-èoho bude zoznam triedený : názvu, príjmu alebo typu.<br>
-Druhým tlaèidlom zµava si nastavuje¹ vzostupné alebo zostupné triedenie.
-</p>
-<p>
-2.) Filter :<br>
-Klikaním na tretie tlaèidlo zµava zapína¹ alebo vypína¹ filter.<br>
-Posledným tlaèidlom ,,Nastavenia'' zobrazí¹ podrobný zoznam v¹etkých
-kritérií a mo¾ností filtrovania.
+<title>Prehµad vozidiel - pomoc</title>
+<em>Prehµad ponúka nasledovné mo¾nosti:</em>
+<p>
+1.) Triedenie :<br>
+Klikaním na prvé tlaèidlo zµava mení¹ kritéria, t.j. podµa
+èoho bude zoznam triedený : názvu, príjmu alebo typu.<br>
+Druhým tlaèidlom zµava si nastavuje¹ vzostupné alebo zostupné triedenie.
+</p>
+<p>
+2.) Filter :<br>
+Klikaním na tretie tlaèidlo zµava zapína¹ alebo vypína¹ filter.<br>
+Posledným tlaèidlom ,,Nastavenia'' zobrazí¹ podrobný zoznam v¹etkých
+kritérií a mo¾ností filtrovania.
 </p>
diff --git a/simutrans/text/sk/depot.txt b/simutrans/text/sk/depot.txt
index 921e16f..1d27214 100644
--- a/simutrans/text/sk/depot.txt
+++ b/simutrans/text/sk/depot.txt
@@ -1,60 +1,60 @@
-<title>Depo - pomoc</title>
-
-<h1>Depo</h1>
-<p>
-V depe mô¾e¹ kupovat' a predávat' vozidlá, vytvárat' cestovné
-poriadky pre kúpené dopravné prostriedky príslu¹ného typu,
-t.j. dopravné prostriedky v cestnom, ¾ele¾niènom alebo lodnom depe.
-</p>
-<p>
-Depo obsahuje informáciu o dopravnom prostriedku, ktorý mô¾e¹ kúpit'
-(aj ktorý u¾ vlastní¹). Cenu a parametre vozidiel zobrazí¹ nabehnutím my¹i
-na príslu¹né vozidlo. Kliknutím na vedµaj¹iu zálo¾ku ,,Prívesy'' alebo ,,Vagóny''
-zobrazí¹ zoznam prívesov alebo vagónov. Nad informaènou zónou (s cenou a parametrami
-vozidla) nájde¹ skupinu tlaèidiel. Prvú skupinu tvoria :<br>
-,,©tart'',<a href="schedule.txt">,,Cestovný poriadok''</a>, ,,Rozdelit' '' a ,,Predat' ''.
-</p>
-<p>
-Tlaèidlom ,,©tart'' vypustí¹ vozidlo so zadaným cestovným poriadkom do premávky.
-Tlaèidlom ,,Cestovný poriadok'' zadefinuje¹, odkiaµ a kam bude vozidlo premávat'
-a ako bude chodit vyt'a¾ené. Tlaèidlom ,,Rozpojit' '' dosiahne¹ rozpojenie
-zostavy vozidla s prívesom alebo vlaku. Pod nápisom ,,Vozidlá'' je umiestnené
-tlaèidlo módu. Klikaním nadobúda tri stavy ,,Pridávanie'' ,,Zostavovanie''
-a ,,Predávanie''. V móde predávania si zvolí¹, ktorý vlastnený dopravný
-prostriedok predat' (za zostatkovú cenu). Predávanie ukonèí¹ prepnutím tohto tlaèidla.
-Informácie o hodnote a parametroch budú zobrazené v informaènej zóne (tesne pod tlaèidlami).<br>
-Predat' okam¾ite nejaký Tvoj privolaný dopravný prostriedok mô¾e¹ aj tlaèidlom ,,Predat' ''.
-<br>
-Pri kúpe : Ak Ti vyhovuje cena a parametre, kúpu vozidla vykoná¹ kliknutím na vozidlo.
-Kúpu prívesu alebo vagónov dosiahne¹ obdobným spôsobom. Kúpené vozidlá sa objavia
-v prvom a ïal¹ích poliach. Z nich si klikaním v logickom slede poskladaj dopravný
-prostriedok. Poskladaný dopravný prostriedok sa objaví v prvých (vrchných) poliach.
-</p>
-<p>
-Teraz mô¾e¹ pristúpit' k zadaniu cestovného poriadku. Musí¹ mat' u¾ vytvorené stanice,
-zastávky alebo nákladné rampy. Zobrazeným ¾ltým znaèkovaèom pooznaèuj stanice,
-zastávky alebo nákladné rampy po ktorých bude premávat' dopravný prostriedok.
-</p>
-<p>
-<strong>Klasicky zadáva¹ cestovný poriadok ka¾dému vozidlu zvlá¹t'.</strong>
-Táto verzia hry v¹ak umo¾òuje vytvorit' cestovný poriadok pre celú skupinu
-vozidiel - konvoj tlaèidlami <strong>,,Nová linka'', ,,Pou¾it' linku'', ,,Upravit' linku'' a
-,,Zru¹it' linku''</strong>. Staèí kúpit' dopravný prostriedok, priradit' k
-niektorej zo zadefinovaných liniek a vypustit' do premávky.<br>
-Pre lep¹í prehµad o linkách má hra zabudovaný tzv. <strong>Mana¾ment liniek - kláves
-,,W''</strong>.
-</p>
-<p>
-Ak chce¹ poslat' dopravný prostriedok spät' do depa neskôr, do cestovného poriadku
-ho vlo¾ úplne na koniec. V depe mô¾e¹ dopravný prostriedok porozkladat' (napr. oddelit'
-príves alebo vagóny), preusporiadat' a prípadne znova po skontrolovaní (príp. zmene)
-cestovného poriadku vypustit' do premávky.
-</p>
-<p>
-<strong>Pozn. prekladateµa :</strong>
-Cestovný poriadok vozidla môze¹ menit' aj poèas jazdy. My¹ou klikni na idúci dopravný
-prostriedok a vykonaj v jeho cestovnom poriadku úpravy. Po ukonèení úprav potvrï tlaèidlo
-,,Hotovo''. Poèas týchto úprav bude dopravný prostriedok stát'. Zaujímavost'ou je, ¾e do
-cestovného poriadku mô¾e¹ zadat' aj ,,Voµný bod trasy''. Vozidlo takto nebude zarábat'.<em>
-Pri úpravách staníc, zastávok alebo nákladných rámp si treba na toto dat' pozor !</em>
+<title>Depo - pomoc</title>
+
+<h1>Depo</h1>
+<p>
+V depe mô¾e¹ kupovat' a predávat' vozidlá, vytvárat' cestovné
+poriadky pre kúpené dopravné prostriedky príslu¹ného typu,
+t.j. dopravné prostriedky v cestnom, ¾ele¾niènom alebo lodnom depe.
+</p>
+<p>
+Depo obsahuje informáciu o dopravnom prostriedku, ktorý mô¾e¹ kúpit'
+(aj ktorý u¾ vlastní¹). Cenu a parametre vozidiel zobrazí¹ nabehnutím my¹i
+na príslu¹né vozidlo. Kliknutím na vedµaj¹iu zálo¾ku ,,Prívesy'' alebo ,,Vagóny''
+zobrazí¹ zoznam prívesov alebo vagónov. Nad informaènou zónou (s cenou a parametrami
+vozidla) nájde¹ skupinu tlaèidiel. Prvú skupinu tvoria :<br>
+,,©tart'',<a href="schedule.txt">,,Cestovný poriadok''</a>, ,,Rozdelit' '' a ,,Predat' ''.
+</p>
+<p>
+Tlaèidlom ,,©tart'' vypustí¹ vozidlo so zadaným cestovným poriadkom do premávky.
+Tlaèidlom ,,Cestovný poriadok'' zadefinuje¹, odkiaµ a kam bude vozidlo premávat'
+a ako bude chodit vyt'a¾ené. Tlaèidlom ,,Rozpojit' '' dosiahne¹ rozpojenie
+zostavy vozidla s prívesom alebo vlaku. Pod nápisom ,,Vozidlá'' je umiestnené
+tlaèidlo módu. Klikaním nadobúda tri stavy ,,Pridávanie'' ,,Zostavovanie''
+a ,,Predávanie''. V móde predávania si zvolí¹, ktorý vlastnený dopravný
+prostriedok predat' (za zostatkovú cenu). Predávanie ukonèí¹ prepnutím tohto tlaèidla.
+Informácie o hodnote a parametroch budú zobrazené v informaènej zóne (tesne pod tlaèidlami).<br>
+Predat' okam¾ite nejaký Tvoj privolaný dopravný prostriedok mô¾e¹ aj tlaèidlom ,,Predat' ''.
+<br>
+Pri kúpe : Ak Ti vyhovuje cena a parametre, kúpu vozidla vykoná¹ kliknutím na vozidlo.
+Kúpu prívesu alebo vagónov dosiahne¹ obdobným spôsobom. Kúpené vozidlá sa objavia
+v prvom a ïal¹ích poliach. Z nich si klikaním v logickom slede poskladaj dopravný
+prostriedok. Poskladaný dopravný prostriedok sa objaví v prvých (vrchných) poliach.
+</p>
+<p>
+Teraz mô¾e¹ pristúpit' k zadaniu cestovného poriadku. Musí¹ mat' u¾ vytvorené stanice,
+zastávky alebo nákladné rampy. Zobrazeným ¾ltým znaèkovaèom pooznaèuj stanice,
+zastávky alebo nákladné rampy po ktorých bude premávat' dopravný prostriedok.
+</p>
+<p>
+<strong>Klasicky zadáva¹ cestovný poriadok ka¾dému vozidlu zvlá¹t'.</strong>
+Táto verzia hry v¹ak umo¾òuje vytvorit' cestovný poriadok pre celú skupinu
+vozidiel - konvoj tlaèidlami <strong>,,Nová linka'', ,,Pou¾it' linku'', ,,Upravit' linku'' a
+,,Zru¹it' linku''</strong>. Staèí kúpit' dopravný prostriedok, priradit' k
+niektorej zo zadefinovaných liniek a vypustit' do premávky.<br>
+Pre lep¹í prehµad o linkách má hra zabudovaný tzv. <strong>Mana¾ment liniek - kláves
+,,W''</strong>.
+</p>
+<p>
+Ak chce¹ poslat' dopravný prostriedok spät' do depa neskôr, do cestovného poriadku
+ho vlo¾ úplne na koniec. V depe mô¾e¹ dopravný prostriedok porozkladat' (napr. oddelit'
+príves alebo vagóny), preusporiadat' a prípadne znova po skontrolovaní (príp. zmene)
+cestovného poriadku vypustit' do premávky.
+</p>
+<p>
+<strong>Pozn. prekladateµa :</strong>
+Cestovný poriadok vozidla môze¹ menit' aj poèas jazdy. My¹ou klikni na idúci dopravný
+prostriedok a vykonaj v jeho cestovnom poriadku úpravy. Po ukonèení úprav potvrï tlaèidlo
+,,Hotovo''. Poèas týchto úprav bude dopravný prostriedok stát'. Zaujímavost'ou je, ¾e do
+cestovného poriadku mô¾e¹ zadat' aj ,,Voµný bod trasy''. Vozidlo takto nebude zarábat'.<em>
+Pri úpravách staníc, zastávok alebo nákladných rámp si treba na toto dat' pozor !</em>
 </p>
diff --git a/simutrans/text/sk/display.txt b/simutrans/text/sk/display.txt
index 95fe15e..3585bc9 100644
--- a/simutrans/text/sk/display.txt
+++ b/simutrans/text/sk/display.txt
@@ -1,42 +1,42 @@
-<title>Nastavenia obrazu</title>
-
-<h1>Obraz - pomoc</h1>
-<p>
-Tu si nastavuje¹ vlastnosti rolovania, zapína¹
-alebo vypína¹ zobrazenie chodcov a zapína¹ alebo
-vypína¹ efekt, ktorý napodobòuje striedanie dòa
-a noci.
-</p>
-<p>
-<em>Rolovanie :</em><br>
-Pri rolovaní môze¹ klikaním na ¹ípky nastavit'
-citlivost' rolovania, t.j. o akú veµkú vzdialenost'
-sa Ti bude posúvat' zobrazenie. Èím je hodnota väè¹ia,
-o tým väè¹iu vzdialenost' (gradovanie) sa bude¹ presúvat'
-z jedného miesta na druhé u¾ pri nepatrnom pohybe my¹ou
-alebo povelom z klávesnice.<br>
-Ak ponechá¹ hodnotu rolovania na 1, mô¾e¹ dosiahnut' jemnej¹ieho
-presúvania sa po krajine.
-</p>
-<p>
-<em>Inverzné rolovanie :</em><br>
-Ak ti nevyhovuje posun po krajine voèi pohybu my¹ou a si zvyknutý na opaèný
-pohyb krajiny, zapni si túto funkciu.
-</p>
-<p>
-<em>Ukázat' chodcov :</em><br>
-Zapnutím tejto funkcie dosiahne¹ mimoriadne efektného zobrazenia pasa¾ierov,
-ktorý vystupujú z vlaku, autobusu alebo lode. Èím bude viac vystupujúcich
-pasa¾ierov, tým bude efekt viditeµnejsí (skoro ako mravenisko).
-</p>
-<p>
-<em>Striedat' noc a deò :</em><br>
-Táto funkcia umo¾òuje napodobnit' striedanie dòa a noci. Odporúèam ju zapnút' iba
-v prípade, keï nemá¹ v pláne nijaké väè¹ie budovanie Tvojej dopravy a chce¹ iba
-také ,,oddychové'' hranie a pozeranie. Akonáhle sa pustí¹ do väè¹ieho budovania,
-tento efekt «a môze ru¹it'. Vtedy si ho vypni.
-</p>
-<p>
-Slovenský popis : Ján Krnáè<br>
-Simutrans (c) Hj. Malthaner
+<title>Nastavenia obrazu</title>
+
+<h1>Obraz - pomoc</h1>
+<p>
+Tu si nastavuje¹ vlastnosti rolovania, zapína¹
+alebo vypína¹ zobrazenie chodcov a zapína¹ alebo
+vypína¹ efekt, ktorý napodobòuje striedanie dòa
+a noci.
+</p>
+<p>
+<em>Rolovanie :</em><br>
+Pri rolovaní môze¹ klikaním na ¹ípky nastavit'
+citlivost' rolovania, t.j. o akú veµkú vzdialenost'
+sa Ti bude posúvat' zobrazenie. Èím je hodnota väè¹ia,
+o tým väè¹iu vzdialenost' (gradovanie) sa bude¹ presúvat'
+z jedného miesta na druhé u¾ pri nepatrnom pohybe my¹ou
+alebo povelom z klávesnice.<br>
+Ak ponechá¹ hodnotu rolovania na 1, mô¾e¹ dosiahnut' jemnej¹ieho
+presúvania sa po krajine.
+</p>
+<p>
+<em>Inverzné rolovanie :</em><br>
+Ak ti nevyhovuje posun po krajine voèi pohybu my¹ou a si zvyknutý na opaèný
+pohyb krajiny, zapni si túto funkciu.
+</p>
+<p>
+<em>Ukázat' chodcov :</em><br>
+Zapnutím tejto funkcie dosiahne¹ mimoriadne efektného zobrazenia pasa¾ierov,
+ktorý vystupujú z vlaku, autobusu alebo lode. Èím bude viac vystupujúcich
+pasa¾ierov, tým bude efekt viditeµnejsí (skoro ako mravenisko).
+</p>
+<p>
+<em>Striedat' noc a deò :</em><br>
+Táto funkcia umo¾òuje napodobnit' striedanie dòa a noci. Odporúèam ju zapnút' iba
+v prípade, keï nemá¹ v pláne nijaké väè¹ie budovanie Tvojej dopravy a chce¹ iba
+také ,,oddychové'' hranie a pozeranie. Akonáhle sa pustí¹ do väè¹ieho budovania,
+tento efekt «a môze ru¹it'. Vtedy si ho vypni.
+</p>
+<p>
+Slovenský popis : Ján Krnáè<br>
+Simutrans (c) Hj. Malthaner
 </p>
diff --git a/simutrans/text/sk/finances.txt b/simutrans/text/sk/finances.txt
index 9d17337..e6163fb 100644
--- a/simutrans/text/sk/finances.txt
+++ b/simutrans/text/sk/finances.txt
@@ -1,34 +1,34 @@
-<title>Financie - pomoc</title>
-
-<h1>Financie</h1>
-
-<p>Stav Tvojich pena¾ných prostriedkov mô¾es sprístupnit'
-stlaèením klávesu ,,f'' alebo voµbou ikony ,,Financie'' na hornej li¹te.<br>
-Zobrazená bude informácia o Tvojich financiách za posledné dva roky :
-príjmov a výdavkov.</p>
-<p> Polo¾ky sú nasledujúce:</p>
-
-<p>
-<em>Výdaje na stavbu</em> - to je èokoµvek, èo si postavil v priebehu roka
-vrátane signalizácie, ¾eleznicných tratí, pô¹t a pod.
-</p>
-<p>
-<em>Nové vozidlá</em> - výdaje na akýkoµvek dopravný prostriedok, ktorý pribudol
-do Tvojho vozového parku v ktoromkoµvek depe.
-</p>
-<p>
-<em>Údr¾ba vozidiel</em> - náklady na údr¾bu v¹etkých Tvojich dopravných prostriedkov.
-</p>
-<p>
-<em>Príjem</em> - súhrn Tvojich príjmov za v¹etok prepravený tovar a pasa¾ierov.
-</p>
-<p>
-<em>Celkom</em> - súhrn Tvojich príjmov/výdajov za rok. Toto je súhrn za v¹etky polo¾ky.
-</p>
-<p>
-<em>Zostatok</em> - celkové obchodné saldo Tvojej spoloènosti. To znamená celkový stav
-Tvojich peòazí. Ak je kladný, môze¹ ho pouzit' na ïalsie investovanie. Táto informácia je
-tie¾ zobrazená v stavovej (dolnej) li¹te obrazovky.
-</p>
-<em>Podpora (mesacne)</em> - bonifikácia, dotácie a pod. Tvojich financií (mesaène).
+<title>Financie - pomoc</title>
+
+<h1>Financie</h1>
+
+<p>Stav Tvojich pena¾ných prostriedkov mô¾es sprístupnit'
+stlaèením klávesu ,,f'' alebo voµbou ikony ,,Financie'' na hornej li¹te.<br>
+Zobrazená bude informácia o Tvojich financiách za posledné dva roky :
+príjmov a výdavkov.</p>
+<p> Polo¾ky sú nasledujúce:</p>
+
+<p>
+<em>Výdaje na stavbu</em> - to je èokoµvek, èo si postavil v priebehu roka
+vrátane signalizácie, ¾eleznicných tratí, pô¹t a pod.
+</p>
+<p>
+<em>Nové vozidlá</em> - výdaje na akýkoµvek dopravný prostriedok, ktorý pribudol
+do Tvojho vozového parku v ktoromkoµvek depe.
+</p>
+<p>
+<em>Údr¾ba vozidiel</em> - náklady na údr¾bu v¹etkých Tvojich dopravných prostriedkov.
+</p>
+<p>
+<em>Príjem</em> - súhrn Tvojich príjmov za v¹etok prepravený tovar a pasa¾ierov.
+</p>
+<p>
+<em>Celkom</em> - súhrn Tvojich príjmov/výdajov za rok. Toto je súhrn za v¹etky polo¾ky.
+</p>
+<p>
+<em>Zostatok</em> - celkové obchodné saldo Tvojej spoloènosti. To znamená celkový stav
+Tvojich peòazí. Ak je kladný, môze¹ ho pouzit' na ïalsie investovanie. Táto informácia je
+tie¾ zobrazená v stavovej (dolnej) li¹te obrazovky.
+</p>
+<em>Podpora (mesacne)</em> - bonifikácia, dotácie a pod. Tvojich financií (mesaène).
 <p>
diff --git a/simutrans/text/sk/general.txt b/simutrans/text/sk/general.txt
index a568687..9f9c473 100644
--- a/simutrans/text/sk/general.txt
+++ b/simutrans/text/sk/general.txt
@@ -1,24 +1,24 @@
-<title>Simutrans - pomoc</title>
-
-<h1>Klikni na témy :</h1>
-
-<p>
-<a href="keys.txt">Ovládacie klávesy</a><br>
-<a href="param.txt">Spustenie hry s parametrami</a>
-</p>
-<p>
-<a href="options.txt">Nastavenia hry</a><br>
-<a href="roadtools.txt">Nástroje na stavbu ciest</a><br>
-<a href="railtools.txt">Nástroje na stavbu ¾eleznice</a><br>
-<a href="shiptools.txt">Nástroje na stavbu lodnej dopravy</a><br>
-<a href="bridges.txt">Nástroje na stavbu mostov</a><br>
-<a href="station.txt">Stanice a zastávky</a><br>
-<a href="schedule.txt">Cestovný poriadok</a><br>
-<a href="haltlist.txt">Prehµad zastávok</a><br>
-<a href="convoi.txt">Prehµad vozidlového parku</a><br>
-<a href="finances.txt">Prehµad financií</a><br>
-</p>
-<p>
-Slovenský popis : Ján Krnáè<br>
-Simutrans (c) Hj. Malthaner
+<title>Simutrans - pomoc</title>
+
+<h1>Klikni na témy :</h1>
+
+<p>
+<a href="keys.txt">Ovládacie klávesy</a><br>
+<a href="param.txt">Spustenie hry s parametrami</a>
+</p>
+<p>
+<a href="options.txt">Nastavenia hry</a><br>
+<a href="roadtools.txt">Nástroje na stavbu ciest</a><br>
+<a href="railtools.txt">Nástroje na stavbu ¾eleznice</a><br>
+<a href="shiptools.txt">Nástroje na stavbu lodnej dopravy</a><br>
+<a href="bridges.txt">Nástroje na stavbu mostov</a><br>
+<a href="station.txt">Stanice a zastávky</a><br>
+<a href="schedule.txt">Cestovný poriadok</a><br>
+<a href="haltlist.txt">Prehµad zastávok</a><br>
+<a href="convoi.txt">Prehµad vozidlového parku</a><br>
+<a href="finances.txt">Prehµad financií</a><br>
+</p>
+<p>
+Slovenský popis : Ján Krnáè<br>
+Simutrans (c) Hj. Malthaner
 </p>
diff --git a/simversion.h b/simversion.h
index 5b08540..993c955 100644
--- a/simversion.h
+++ b/simversion.h
@@ -1,19 +1,19 @@
 #ifndef simversion_h
 #define simversion_h
 
-#define MAKEOBJ_VERSION "49"
+#define MAKEOBJ_VERSION "50"
 
-#define VERSION_NUMBER "102 Nightly"
-#define WIDE_VERSION_NUMBER L"102 Nightly"
+#define VERSION_NUMBER "102.2"
+#define WIDE_VERSION_NUMBER L"102.2"
 
 #define VERSION_DATE __DATE__
 
 #define SAVEGAME_PREFIX  "Simutrans "
 #define XML_SAVEGAME_PREFIX  "<?xml version=\"1.0\"?>"
 
-#define SAVEGAME_VER_NR  "0.102.1"
+#define SAVEGAME_VER_NR  "0.102.2"
 #define SAVEGAME_VERSION (SAVEGAME_PREFIX SAVEGAME_VER_NR)
 
-#define RES_VERSION_NUMBER  0, 102, 0, 0
+#define RES_VERSION_NUMBER  0, 102, 2, 0
 
 #endif
diff --git a/simview.cc b/simview.cc
index 690d66c..f9f21e0 100644
--- a/simview.cc
+++ b/simview.cc
@@ -100,6 +100,9 @@ karte_ansicht_t::display(bool force_dirty)
 	if(grund_t::underground_mode) {
 		display_fillbox_wh(0, 32, disp_width, disp_height-menu_height, COL_BLACK, force_dirty);
 	}
+	// to save calls to grund_t::get_disp_height
+	// gr->get_disp_height() == min(gr->get_hoehe(), hmax_ground)
+	const sint8 hmax_ground = (grund_t::underground_mode==grund_t::ugm_level) ? grund_t::underground_level : 127;
 
 	// first display ground
 	int	y;
@@ -116,13 +119,13 @@ karte_ansicht_t::display(bool force_dirty)
 			if(xpos+IMG_SIZE>0  &&  xpos<disp_width) {
 				const planquadrat_t *plan=welt->lookup(koord(i,j));
 				if(plan  &&  plan->get_kartenboden()) {
-					sint16 yypos = ypos - tile_raster_scale_y( plan->get_kartenboden()->get_hoehe()*TILE_HEIGHT_STEP/Z_TILE_STEP, IMG_SIZE);
+					sint16 yypos = ypos - tile_raster_scale_y( min(plan->get_kartenboden()->get_hoehe(), hmax_ground)*TILE_HEIGHT_STEP/Z_TILE_STEP, IMG_SIZE);
 					if(yypos-IMG_SIZE<disp_height  &&  yypos+IMG_SIZE>menu_height) {
 						plan->display_boden(xpos, yypos);
 					}
 				}
 				else {
-					// ouside ...
+					// outside ...
 					display_img(grund_besch_t::ausserhalb->get_bild(hang_t::flach), xpos,ypos - tile_raster_scale_y( welt->get_grundwasser()*TILE_HEIGHT_STEP/Z_TILE_STEP, IMG_SIZE ), force_dirty);
 				}
 			}
@@ -130,6 +133,7 @@ karte_ansicht_t::display(bool force_dirty)
 	}
 
 	// and then things (and other ground)
+	// especially necessary for vehicles
 	for(y=-dpy_height; y<dpy_height+dpy_width; y++) {
 
 		const sint16 ypos = y*(IMG_SIZE/4) + const_y_off;
@@ -143,9 +147,36 @@ karte_ansicht_t::display(bool force_dirty)
 			if(xpos+IMG_SIZE>0  &&  xpos<disp_width) {
 				const planquadrat_t *plan=welt->lookup(koord(i,j));
 				if(plan  &&  plan->get_kartenboden()) {
-					sint16 yypos = ypos - tile_raster_scale_y( plan->get_kartenboden()->get_hoehe()*TILE_HEIGHT_STEP/Z_TILE_STEP, IMG_SIZE);
+					const grund_t *gr = plan->get_kartenboden();
+					// minimum height: ground height for overground,
+					// for the definition of underground_level see grund_t::set_underground_mode
+					const sint8 hmin = grund_t::underground_mode!=grund_t::ugm_all ?
+						min(gr->get_hoehe(), grund_t::underground_level) :
+						(gr->ist_wasser() ? gr->get_hoehe() : grund_t::underground_level);
+
+					// maximum height: 127 for overground, undergroundlevel for sliced, ground height-1 for complete underground view
+					const sint8 hmax = grund_t::underground_mode==grund_t::ugm_all ? gr->get_hoehe()-(!gr->ist_tunnel()) : grund_t::underground_level;
+
+					/* long version
+					switch(grund_t::underground_mode) {
+						case ugm_all:
+							hmin = gr->ist_wasser() ? gr->get_hoehe() : -128;
+							hmax = gr->get_hoehe()-(!gr->ist_tunnel());
+							underground_level = -128;
+							break;
+						case ugm_level:
+							hmin = min(gr->get_hoehe(), underground_level);
+							hmax = underground_level;
+							underground_level = level;
+							break;
+						case ugm_none:
+							hmin = gr->get_hoehe();
+							hmax = 127;
+							underground_level = 127;
+					} */
+					sint16 yypos = ypos - tile_raster_scale_y( min(gr->get_hoehe(),hmax_ground)*TILE_HEIGHT_STEP/Z_TILE_STEP, IMG_SIZE);
 					if(yypos-IMG_SIZE*2<disp_height  &&  yypos+IMG_SIZE>menu_height) {
-						plan->display_dinge(xpos, yypos, IMG_SIZE, true);
+						plan->display_dinge(xpos, yypos, IMG_SIZE, true, hmin, hmax);
 					}
 				}
 			}
@@ -166,9 +197,17 @@ karte_ansicht_t::display(bool force_dirty)
 			if(xpos+IMG_SIZE>0  &&  xpos<disp_width) {
 				const planquadrat_t *plan=welt->lookup(koord(i,j));
 				if(plan  &&  plan->get_kartenboden()) {
-					sint16 yypos = ypos - tile_raster_scale_y( plan->get_kartenboden()->get_hoehe()*TILE_HEIGHT_STEP/Z_TILE_STEP, IMG_SIZE);
+					const grund_t *gr = plan->get_kartenboden();
+					// minimum height: ground height for overground,
+					// for the definition of underground_level see grund_t::set_underground_mode
+					const sint8 hmin = min(gr->get_hoehe(), grund_t::underground_level);
+
+					// maximum height: 127 for overground, undergroundlevel for sliced, ground height-1 for complete underground view
+					const sint8 hmax = grund_t::underground_mode==grund_t::ugm_all ? gr->get_hoehe()-(!gr->ist_tunnel()) : grund_t::underground_level;
+
+					sint16 yypos = ypos - tile_raster_scale_y( min(gr->get_hoehe(),hmax_ground)*TILE_HEIGHT_STEP/Z_TILE_STEP, IMG_SIZE);
 					if(yypos-IMG_SIZE<disp_height  &&  yypos+IMG_SIZE>menu_height) {
-						plan->display_overlay(xpos, yypos);
+						plan->display_overlay(xpos, yypos, hmin, hmax);
 					}
 				}
 			}
@@ -179,9 +218,28 @@ karte_ansicht_t::display(bool force_dirty)
 		// better not try to twist your brain to follow the retransformation ...
 		const sint16 rasterweite=get_tile_raster_width();
 		const koord diff = zeiger->get_pos().get_2d()-welt->get_world_position()-welt->get_ansicht_ij_offset();
-		const sint16 x = (diff.x-diff.y)*(rasterweite/2) + tile_raster_scale_x(zeiger->get_xoff(), rasterweite);
-		const sint16 y = (diff.x+diff.y)*(rasterweite/4) + tile_raster_scale_y( zeiger->get_yoff()-zeiger->get_pos().z*TILE_HEIGHT_STEP/Z_TILE_STEP, rasterweite) + ((display_get_width()/rasterweite)&1)*(rasterweite/4);
-		zeiger->display( x+welt->get_x_off(), y+welt->get_y_off(), true );
+
+		const sint16 x = welt->get_x_off() + (diff.x-diff.y)*(rasterweite/2);
+		const sint16 y = welt->get_y_off() + (diff.x+diff.y)*(rasterweite/4) + tile_raster_scale_y( -zeiger->get_pos().z*TILE_HEIGHT_STEP/Z_TILE_STEP, rasterweite) + ((display_get_width()/rasterweite)&1)*(rasterweite/4);
+		// mark the cursor position for all tools (except lower/raise)
+		if(zeiger->get_yoff()==Z_PLAN) {
+			grund_t *gr = welt->lookup( zeiger->get_pos() );
+			if(gr && gr->is_visible()) {
+				const PLAYER_COLOR_VAL transparent = TRANSPARENT25_FLAG|OUTLINE_FLAG| umgebung_t::cursor_overlay_color;
+				if(  gr->get_bild()==IMG_LEER  ) {
+					if(  gr->hat_wege()  ) {
+						display_img_blend( gr->obj_bei(0)->get_bild(), x, y, transparent, 0, true );
+					}
+					else {
+						display_img_blend( grund_besch_t::get_ground_tile(0,gr->get_hoehe()), x, y, transparent, 0, true );
+					}
+				}
+				else {
+					display_img_blend( gr->get_bild(), x, y, transparent, 0, true );
+				}
+			}
+		}
+		zeiger->display( x + tile_raster_scale_x( zeiger->get_xoff(), rasterweite), y + tile_raster_scale_y( zeiger->get_yoff(), rasterweite), true );
 		zeiger->clear_flag(ding_t::dirty);
 	}
 
diff --git a/simware.h b/simware.h
index 0d2b563..2ae19b7 100644
--- a/simware.h
+++ b/simware.h
@@ -3,10 +3,9 @@
 
 #include "halthandle_t.h"
 #include "dataobj/koord.h"
-#include "bauer/warenbauer.h"
 #include "besch/ware_besch.h"
 
-class ware_besch_t;
+class warenbauer_t;
 class karte_t;
 
 /** Eine Klasse zur Verwaltung von Informationen ueber Fracht und Waren */
diff --git a/simwerkz.cc b/simwerkz.cc
index 904ee44..6810c5d 100644
--- a/simwerkz.cc
+++ b/simwerkz.cc
@@ -1,8 +1,7 @@
 /*
- * Werkzeuge für den Simutrans-Spieler
- * von Hj. Malthaner
+ * Tools for the players
  *
- * Copyright (c) 1997 - 2001 Hansjörg Malthaner
+ * Copyright (c) 1997 - 2001 Hj. Malthaner
  *
  * This file is part of the Simutrans project under the artistic licence.
  * (see licence.txt)
@@ -31,6 +30,7 @@
 #include "boden/wege/schiene.h"
 #include "boden/wege/kanal.h"
 #include "boden/tunnelboden.h"
+#include "boden/monorailboden.h"
 
 #include "simdepot.h"
 #include "simfab.h"
@@ -39,9 +39,12 @@
 #include "simintr.h"
 #include "simhalt.h"
 
+#include "besch/grund_besch.h"
 #include "besch/haus_besch.h"
 #include "besch/way_obj_besch.h"
 #include "besch/skin_besch.h"
+#include "besch/tunnel_besch.h"
+#include "besch/groundobj_besch.h"
 
 #include "vehicle/simvehikel.h"
 #include "vehicle/simverkehr.h"
@@ -54,6 +57,7 @@
 #include "dings/zeiger.h"
 #include "dings/bruecke.h"
 #include "dings/tunnel.h"
+#include "dings/groundobj.h"
 #include "dings/signal.h"
 #include "dings/crossing.h"
 #include "dings/roadsign.h"
@@ -255,54 +259,46 @@ static halthandle_t suche_nahe_haltestelle(spieler_t *sp, karte_t *welt, koord3d
 
 
 // converts a 2d koord to a suitable ground pointer
-static grund_t *wkz_intern_koord_to_weg_grund(spieler_t *sp, karte_t *welt, koord pos, waytype_t wt)
+static grund_t *wkz_intern_koord_to_weg_grund(spieler_t *sp, karte_t *welt, koord3d pos, waytype_t wt)
 {
-	const planquadrat_t *plan = welt->lookup(pos);
-
 	// check for valid ground
-	if(plan==NULL) {
+	grund_t *gr=welt->lookup(pos);
+	if (gr==NULL || !gr->is_visible()) {
 		return NULL;
 	}
-	if(wt==tram_wt) {
-		wt = track_wt;
-	}
-
-	const bool backwards=event_get_last_control_shift()==2;
 
-	grund_t *gr=NULL;
-	// search all grounds for match
-	for( unsigned cnt=0;  cnt<plan->get_boden_count();  cnt++  ) {
-		// with control backwards
-		const unsigned i = (backwards) ? plan->get_boden_count()-1-cnt : cnt;
-		gr = plan->get_boden_bei(i);
-		// ignore tunnel
-		if(gr->ist_im_tunnel()) {
-			gr = NULL;
-			continue;
+	if(  wt==powerline_wt  &&  gr->get_leitung()  ) {
+		// check for ownership
+		if(sp!=NULL  &&  gr->get_leitung()->ist_entfernbar(sp)!=NULL) {
+			return NULL;
 		}
-		if(  wt==powerline_wt  &&  gr->get_leitung()  ) {
-			// check for ownership
-			if(sp!=NULL  &&  !spieler_t::check_owner( sp, gr->get_leitung()->get_besitzer())){
-				gr = NULL;
-				continue;
-			}
-			// ok, found
-			break;
+		// ok
+		else {
+			return gr;
 		}
+	}
 
-		// has some rail or monorail?
-		if(  !gr->hat_weg(wt)  ) {
-			gr = NULL;
-			continue;
+	// tram
+	if(wt==tram_wt) {
+		weg_t *way = gr->get_weg(track_wt);
+		if (way && way->get_besch()->get_styp() == weg_t::type_tram &&  way->ist_entfernbar(sp)==NULL) {
+			return gr;
 		}
-		// check for ownership
-		if(sp!=NULL  &&  !spieler_t::check_owner( sp, gr->get_weg(wt)->get_besitzer())){
-			gr = NULL;
-			continue;
+		else {
+			return NULL;
 		}
-		// ok, now we have a valid ground
-		break;
 	}
+
+
+	// has some rail or monorail?
+	if(  !gr->hat_weg(wt)  ) {
+		return NULL;
+	}
+	// check for ownership
+	if(sp!=NULL  &&  gr->get_weg(wt)->ist_entfernbar(sp)!=NULL){
+		return NULL;
+	}
+	// ok, now we have a valid ground
 	return gr;
 }
 
@@ -310,40 +306,47 @@ static grund_t *wkz_intern_koord_to_weg_grund(spieler_t *sp, karte_t *welt, koor
 
 /****************************************** now the actual tools **************************************/
 
-// werkzeuge
-const char *wkz_abfrage_t::work( karte_t *welt, spieler_t *sp, koord3d pos )
+// returns grund at pos if visible else NULL
+// if no grund at pos exists try kartenboden
+grund_t* get_grund(karte_t *welt, koord3d pos )
 {
-	const planquadrat_t *plan = welt->lookup(pos.get_2d());
-	if(plan) {
-		DBG_MESSAGE("wkz_abfrage()","checking map square %d,%d", pos.x, pos.y);
-
-		const bool backwards = (event_get_last_control_shift()==2);
-		for(unsigned i=0;  i<plan->get_boden_count();  i++  ) {
-			grund_t *gr=plan->get_boden_bei( backwards ? plan->get_boden_count()-1-i : i );
-
-			if(gr) {
+	grund_t *gr = welt->lookup(pos);
+	if (gr == NULL || !gr->is_visible()) {
+		gr = welt->lookup_kartenboden(pos.get_2d());
+		if (gr && !gr->is_visible()) {
+			gr = NULL;
+		}
+	}
+	return(gr);
+}
 
-				int old_count = win_get_open_count();
-				for(int n=0; n<gr->get_top(); n++) {
-					ding_t *dt = gr->obj_bei(n);
-					if(dt  &&  (dt->get_typ()!=ding_t::wayobj  ||  dt->get_typ()!=ding_t::pillar)) {
-						DBG_MESSAGE("wkz_abfrage()", "index %d", n);
-						dt->zeige_info();
-						// did some new window open?
-						if(umgebung_t::single_info  &&  old_count!=win_get_open_count()  &&  !gr->ist_wasser()) {
-							return NULL;
-						}
-					}
-				}
 
-				if(gr->get_depot()  &&  gr->get_depot()->get_besitzer()==sp) {
-					gr->get_depot()->zeige_info();
+// werkzeuge
+const char *wkz_abfrage_t::work( karte_t *welt, spieler_t *sp, koord3d pos )
+{
+	grund_t *gr = get_grund(welt, pos);
+	if(gr) {
+		DBG_MESSAGE("wkz_abfrage()","checking map square %s", pos.get_str());
+
+		int old_count = win_get_open_count();
+		for(int n=0; n<gr->get_top(); n++) {
+			ding_t *dt = gr->obj_bei(n);
+			if(dt  &&  (dt->get_typ()!=ding_t::wayobj  ||  dt->get_typ()!=ding_t::pillar)) {
+				DBG_MESSAGE("wkz_abfrage()", "index %d", n);
+				dt->zeige_info();
+				// did some new window open?
+				if(umgebung_t::single_info  &&  old_count!=win_get_open_count()  &&  !gr->ist_wasser()) {
 					return NULL;
 				}
-
-				gr->zeige_info();
 			}
 		}
+
+		if(gr->get_depot()  &&  gr->get_depot()->get_besitzer()==sp) {
+			gr->get_depot()->zeige_info();
+			return NULL;
+		}
+
+		gr->zeige_info();
 	}
 	return NULL;
 }
@@ -351,32 +354,20 @@ const char *wkz_abfrage_t::work( karte_t *welt, spieler_t *sp, koord3d pos )
 /* delete things from a tile
  * citycars and pedestrian first and then go up to queue to more important objects
  */
-bool wkz_remover_t::wkz_remover_intern(spieler_t *sp, karte_t *welt, koord pos, const char *&msg)
+bool wkz_remover_t::wkz_remover_intern(spieler_t *sp, karte_t *welt, koord3d pos, const char *&msg)
 {
-DBG_MESSAGE("wkz_remover_intern()","at (%d,%d)", pos.x, pos.y);
-	planquadrat_t *plan = welt->access(pos);
-	if(!plan) {
+DBG_MESSAGE("wkz_remover_intern()","at (%s)", pos.get_str());
+
+	grund_t *gr = welt->lookup(pos);
+	if (!gr || !gr->is_visible()) {
+		msg = "";
 		return false;
 	}
 
-	grund_t *gr=0;
-	const bool backwards = (event_get_last_control_shift()==2);
-	// remove lower ground first with CNTRL
-	for(unsigned i=0;  i<plan->get_boden_count();  i++  ) {
-		gr=plan->get_boden_bei( backwards ? plan->get_boden_count()-1-i : i );
-		if(gr->ist_im_tunnel()) {
-			// do not remove tunnel ground
-			gr = 0;
-			continue;
-		}
-		// ok, something to remove from here ...
-		if(gr->get_top()>0  &&  spieler_t::check_owner( sp, gr->obj_bei(0)->get_besitzer()) ) {
-			break;
-		}
-	}
-	// everything removed, nothing left ...
-	if(gr==NULL) {
-		return true;
+	// check if there is something to remove from here ...
+	if(gr->get_top()==0  ) {
+		msg = "";
+		return false;
 	}
 
 	// marker?
@@ -392,7 +383,7 @@ DBG_MESSAGE("wkz_remover_intern()","at (%d,%d)", pos.x, pos.y);
 
 	// citycar? (we allow always)
 	stadtauto_t* citycar = gr->find<stadtauto_t>();
-	if (citycar) {
+	if(citycar) {
 		delete citycar;
 		return true;
 	}
@@ -404,9 +395,9 @@ DBG_MESSAGE("wkz_remover_intern()","at (%d,%d)", pos.x, pos.y);
 		return true;
 	}
 
-	// prissi: Leitung prüfen (can cross ground of another player)
+	// prissi: check powerline (can cross ground of another player)
 	leitung_t* lt = gr->get_leitung();
-	if(lt!=NULL  &&  lt->get_besitzer()==sp) {
+	if(lt!=NULL  &&  lt->ist_entfernbar(sp)==NULL) {
 		bool is_leitungsbruecke = false;
 		if(gr->ist_bruecke()  &&  gr->ist_karten_boden()) {
 			bruecke_t* br = gr->find<bruecke_t>();
@@ -431,7 +422,7 @@ DBG_MESSAGE("wkz_remover_intern()","at (%d,%d)", pos.x, pos.y);
 		if(msg) {
 			return false;
 		}
-DBG_MESSAGE("wkz_remover()",  "removing roadsign %d,%d",  pos.x, pos.y);
+DBG_MESSAGE("wkz_remover()",  "removing roadsign at (%s)", pos.get_str());
 		weg_t *weg = gr->get_weg(rs->get_besch()->get_wtyp());
 		rs->entferne(sp);
 		delete rs;
@@ -439,13 +430,13 @@ DBG_MESSAGE("wkz_remover()",  "removing roadsign %d,%d",  pos.x, pos.y);
 		return true;
 	}
 
-	// Haltestelle prüfen
-	halthandle_t halt = plan->get_halt();
+	// check stations
+	halthandle_t halt = gr->get_halt();
 DBG_MESSAGE("wkz_remover()", "bound=%i",halt.is_bound());
-	if (gr->is_halt()  &&  halt.is_bound()  &&  fabrik_t::get_fab(welt,pos)==NULL) {
+	if (gr->is_halt()  &&  halt.is_bound()  &&  fabrik_t::get_fab(welt,pos.get_2d())==NULL) {
 		// halt and not a factory (oil rig etc.)
 		const spieler_t* owner = halt->get_besitzer();
-		if (owner == sp || owner == welt->get_spieler(1)) {
+		if(  spieler_t::check_owner( owner, sp )  ) {
 			return haltestelle_t::remove(welt, sp, gr->get_pos(), msg);
 		}
 	}
@@ -488,7 +479,8 @@ DBG_MESSAGE("wkz_remover()",  "removing tunnel  from %d,%d,%d",gr->get_pos().x,
 			delete f;
 			// fields have foundations ...
 			koord pos = gr->get_pos().get_2d();
-			welt->access(pos)->boden_ersetzen( gr, new boden_t(welt, gr->get_pos(), welt->calc_natural_slope(pos) ) );
+			sint8 dummy;
+			welt->access(pos)->boden_ersetzen( gr, new boden_t(welt, gr->get_pos(), welt->recalc_natural_slope(pos,dummy) ) );
 			welt->lookup_kartenboden(pos)->calc_bild();
 			welt->lookup_kartenboden(pos)->set_flag( grund_t::dirty );
 		}
@@ -497,38 +489,39 @@ DBG_MESSAGE("wkz_remover()",  "removing tunnel  from %d,%d,%d",gr->get_pos().x,
 
 	// since buildings can have more than one tile, we must handle them together
 	gebaeude_t* gb = gr->find<gebaeude_t>();
-	if (gb != NULL) {
-		const spieler_t* owner = gb->get_besitzer();
-		if (owner == sp || owner == NULL  ||  sp==welt->get_spieler(1)) {
-			if(!gb->get_tile()->get_besch()->can_rotate()  &&  welt->cannot_save()) {
-				msg = "Not possible in this rotation!";
-				return false;
-			}
-			DBG_MESSAGE("wkz_remover()",  "removing building" );
-			const haus_tile_besch_t *tile  = gb->get_tile();
-			koord size = tile->get_besch()->get_groesse( tile->get_layout() );
+	if(gb != NULL) {
+		msg = gb->ist_entfernbar(sp);
+		if(msg) {
+			return false;
+		}
+		if(!gb->get_tile()->get_besch()->can_rotate()  &&  welt->cannot_save()) {
+			msg = "Not possible in this rotation!";
+			return false;
+		}
+		DBG_MESSAGE("wkz_remover()",  "removing building" );
+		const haus_tile_besch_t *tile  = gb->get_tile();
+		koord size = tile->get_besch()->get_groesse( tile->get_layout() );
 
-			// get startpos
-			koord k=tile->get_offset();
-			if(k != koord(0,0)) {
-				return wkz_remover_intern(sp, welt, pos-k, msg);
+		// get startpos
+		koord k=tile->get_offset();
+		if(k != koord(0,0)) {
+			return wkz_remover_intern(sp, welt, pos-k, msg);
+		}
+		else {
+			// remove town? (when removing townhall)
+			if(gb->ist_rathaus()) {
+				stadt_t *stadt = welt->suche_naechste_stadt(pos.get_2d());
+				if(!welt->rem_stadt( stadt )) {
+					msg = "Das Feld gehoert\neinem anderen Spieler\n";
+					return false;
+				}
 			}
 			else {
-				// remove town? (when removing townhall)
-				if(gb->ist_rathaus()) {
-					stadt_t *stadt = welt->suche_naechste_stadt(pos);
-					if(!welt->rem_stadt( stadt )) {
-						msg = "Das Feld gehoert\neinem anderen Spieler\n";
-						return false;
-					}
-				}
-				else {
-					// townhall is also removed during town removal
-					hausbauer_t::remove( welt, sp, gb );
-				}
+				// townhall is also removed during town removal
+				hausbauer_t::remove( welt, sp, gb );
 			}
-			return true;
 		}
+		return true;
 	}
 
 	// there is a powerline above this tile, but we do not own it
@@ -546,14 +539,15 @@ DBG_MESSAGE("wkz_remover()",  "took out powerline");
 
 	// remove all other stuff (clouds ... )
 	bool return_ok = false;
-	if(gr->obj_count()>0) {
+	uint8 num_obj = gr->obj_count();
+	if(num_obj>0) {
 		msg = gr->kann_alle_obj_entfernen(sp);
 		return_ok = (msg==NULL  &&  !(gr->get_typ()==grund_t::brueckenboden  ||  gr->get_typ()==grund_t::tunnelboden)  &&  gr->obj_loesche_alle(sp));
-	DBG_MESSAGE("wkz_remover()",  "removing everything from %d,%d,%d",gr->get_pos().x, gr->get_pos().y, gr->get_pos().z);
+		DBG_MESSAGE("wkz_remover()",  "removing everything from %d,%d,%d",gr->get_pos().x, gr->get_pos().y, gr->get_pos().z);
 	}
 
 	if(lt) {
-DBG_MESSAGE("wkz_remover()",  "add again powerline");
+		DBG_MESSAGE("wkz_remover()",  "add again powerline");
 		gr->obj_add(lt);
 	}
 	if(cr) {
@@ -565,6 +559,8 @@ DBG_MESSAGE("wkz_remover()",  "add again powerline");
 		return false;
 	}
 	if(return_ok) {
+		// no sound
+		msg = "";
 		return true;
 	}
 
@@ -573,9 +569,9 @@ DBG_MESSAGE("wkz_remover()",  "add again powerline");
 DBG_MESSAGE("wkz_remover()", "removing way");
 
 	/*
-	* Eigentlich müssen wir hier noch verhindern, daß ein Bahnhofsgebäude oder eine
+	* Eigentlich muessen wir hier noch verhindern, dass ein Bahnhofsgebaeude oder eine
 	* Bushaltestelle vereinzelt wird!
-	* Sonst lässt sich danach die Richtung der Haltestelle verdrehen und die Bilder
+	* Sonst laesst sich danach die Richtung der Haltestelle verdrehen und die Bilder
 	* gehen kaputt.
 	*/
 	long cost_sum = 0;
@@ -585,13 +581,13 @@ DBG_MESSAGE("wkz_remover()", "removing way");
 			// do not delete the middle of a bridge
 			return false;
 		}
-		if(w==NULL  ||  !spieler_t::check_owner( sp, w->get_besitzer())) {
+		if(w==NULL  ||  w->ist_entfernbar(sp)!=NULL) {
 			w = gr->get_weg_nr(0);
 			if(w==NULL) {
 				// no way at all ...
 				return true;
 			}
-			if(!spieler_t::check_owner( sp, w->get_besitzer())) {
+			if(w->ist_entfernbar(sp)!=NULL){
 				msg = w->ist_entfernbar(sp);
 				return false;
 			}
@@ -613,19 +609,19 @@ DBG_MESSAGE("wkz_remover()", "removing way");
 	}
 
 	if(cost_sum > 0) {
-		sp->buche(-cost_sum, pos, COST_CONSTRUCTION);
+		sp->buche(-cost_sum, pos.get_2d(), COST_CONSTRUCTION);
 		if(gr->hat_wege()) {
 			return true;
 		}
 	}
 DBG_MESSAGE("wkz_remover()", "check ground");
 
-	if(gr!=plan->get_kartenboden()  &&  gr->get_top()==0) {
+	if(!gr->ist_karten_boden()  &&  gr->get_top()==0) {
 DBG_MESSAGE("wkz_remover()", "removing ground");
 		// unmark kartenboden (is marked during underground mode deletion)
-		plan->get_kartenboden()->clear_flag(grund_t::marked);
+		welt->lookup_kartenboden(pos.get_2d())->clear_flag(grund_t::marked);
 		// remove upper or lower ground
-		plan->boden_entfernen(gr);
+		welt->access(pos.get_2d())->boden_entfernen(gr);
 		delete gr;
 	}
 
@@ -638,7 +634,7 @@ const char *wkz_remover_t::work( karte_t *welt, spieler_t *sp, koord3d pos )
 {
 	DBG_MESSAGE("wkz_remover()","at %d,%d", pos.x, pos.y);
 	const char *fail = NULL;
-	if(!wkz_remover_intern(sp, welt, pos.get_2d(), fail)) {
+	if(!wkz_remover_intern(sp, welt, pos, fail)) {
 		return fail;
 	}
 
@@ -667,7 +663,8 @@ const char *wkz_raise_t::move( karte_t *welt, spieler_t *sp, uint16 buttonstate,
 	if(  buttonstate==1  ) {
 		char buf[16];
 		if(!is_dragging) {
-			drag_height = welt->lookup_hgt(pos.get_2d())+Z_TILE_STEP;
+			grund_t *gr = welt->lookup_kartenboden(pos.get_2d());
+			drag_height = gr->get_hoehe() + corner4(gr->get_grund_hang()) +1;
 		}
 		is_dragging = true;
 		sprintf( buf, "%i", drag_height );
@@ -687,8 +684,15 @@ const char *wkz_raise_t::work( karte_t *welt, spieler_t *sp, koord3d k )
 	bool ok = false;
 	koord pos = k.get_2d();
 
-	if(welt->ist_in_gittergrenzen(pos)  &&  pos.x>0  &&  pos.y>0) {
-		const int hgt = welt->lookup_hgt(pos);
+	// check for underground mode
+	if (grund_t::underground_mode == grund_t::ugm_all ||
+		(grund_t::underground_mode == grund_t::ugm_level && !welt->lookup_kartenboden(pos)->is_visible() )) {
+			return "Terraforming not possible\nhere in underground view";
+	}
+
+	if(welt->ist_in_kartengrenzen(pos)  &&  pos.x>0  &&  pos.y>0) {
+		grund_t *gr = welt->lookup_kartenboden(pos);
+		const sint8 hgt = gr->get_hoehe() + corner4(gr->get_grund_hang());
 
 		if(hgt < 14*Z_TILE_STEP) {
 
@@ -708,7 +712,7 @@ const char *wkz_raise_t::work( karte_t *welt, spieler_t *sp, koord3d k )
 					if(diff==0) break;
 					n += diff;
 				}
-				ok = true;
+				ok = height==welt->lookup_hgt(pos);
 			}
 			else {
 				if(  is_dragging  ) {
@@ -720,18 +724,8 @@ const char *wkz_raise_t::work( karte_t *welt, spieler_t *sp, koord3d k )
 			}
 			if(n>0) {
 				spieler_t::accounting(sp, welt->get_einstellungen()->cst_alter_land*n, pos, COST_CONSTRUCTION);
-				// update image
-				for(int j=-n; j<=n; j++) {
-					for(int i=-n; i<=n; i++) {
-						const planquadrat_t* p = welt->lookup(pos + koord(i, j));
-						if (p)  {
-							grund_t* g = p->get_kartenboden();
-							if (g) g->calc_bild();
-						}
-					}
-				}
 			}
-			return !ok ? "Tile not empty." : NULL;
+			return !ok ? "Tile not empty." : (n ? NULL : "");
 		}
 		else {
 			// no mountains heigher than 14 ...
@@ -768,9 +762,14 @@ const char *wkz_lower_t::work( karte_t *welt, spieler_t *sp, koord3d k )
 	bool ok = false;
 	koord pos = k.get_2d();
 
-	if(welt->ist_in_gittergrenzen(pos)  &&  pos.x>0  &&  pos.y>0) {
-
-		const int hgt = welt->lookup_hgt(pos);
+	// check for underground mode
+	if (grund_t::underground_mode == grund_t::ugm_all ||
+		(grund_t::underground_mode == grund_t::ugm_level && welt->lookup_kartenboden(pos)->get_hoehe()>grund_t::underground_level+1 )) {
+			return "Terraforming not possible\nhere in underground view";
+	}
+	if(welt->ist_in_kartengrenzen(pos)  &&  pos.x>0  &&  pos.y>0) {
+		grund_t *gr = welt->lookup_kartenboden(pos);
+		const sint8 hgt = gr->get_hoehe() + corner4(gr->get_grund_hang());
 
 		if(hgt > welt->get_grundwasser()) {
 
@@ -789,7 +788,7 @@ const char *wkz_lower_t::work( karte_t *welt, spieler_t *sp, koord3d k )
 					if(diff==0) break;
 					n += diff;
 				}
-				ok = welt->lookup_hgt(pos);
+				ok = height==welt->lookup_hgt(pos);
 			}
 			else {
 				if(  is_dragging  ) {
@@ -801,18 +800,8 @@ const char *wkz_lower_t::work( karte_t *welt, spieler_t *sp, koord3d k )
 			}
 			if(n>0) {
 				spieler_t::accounting(sp, welt->get_einstellungen()->cst_alter_land*n, pos, COST_CONSTRUCTION);
-				// update image
-				for(int j=-n; j<=n; j++) {
-					for(int i=-n; i<=n; i++) {
-						const planquadrat_t* p = welt->lookup(pos + koord(i, j));
-						if (p)  {
-							grund_t* g = p->get_kartenboden();
-							if (g) g->calc_bild();
-						}
-					}
-				}
 			}
-			return !ok ? "Tile not empty." : NULL;
+			return !ok ? "Tile not empty." : (n ? NULL : "");
 		}
 		else {
 			// below water level
@@ -829,99 +818,171 @@ const char *wkz_lower_t::work( karte_t *welt, spieler_t *sp, koord3d k )
  * @param param the slope type
  * @author Hj. Malthaner
  */
-const char *wkz_setslope_t::wkz_set_slope_work( karte_t *welt, spieler_t *sp, koord pos, int new_slope )
+const char *wkz_setslope_t::wkz_set_slope_work( karte_t *welt, spieler_t *sp, koord3d pos, int new_slope )
 {
 	bool ok = false;
 
-	grund_t * gr1 = welt->lookup_kartenboden(pos);
+	grund_t *gr1 = welt->lookup(pos);
 	if(gr1) {
+
+		// check for underground mode
+		if(  grund_t::underground_mode == grund_t::ugm_all  &&  !gr1->ist_tunnel()  ) {
+			return "Terraforming not possible\nhere in underground view";
+		}
+
 		// at least a pixel away from the border?
-		if(welt->min_hgt(pos)<welt->get_grundwasser()  ) {
+		if(  pos.z<welt->get_grundwasser() &&  !gr1->ist_tunnel() ) {
 			return "Maximum tile height difference reached.";
 		}
 
-		// finally: empty
-		if (gr1->find<gebaeude_t>() || gr1->hat_wege() || gr1->kann_alle_obj_entfernen(sp)) {
+		if(  new_slope==RESTORE_SLOPE  &&  !(gr1->get_typ()==grund_t::boden  ||  gr1->get_typ()==grund_t::wasser)  ) {
+			return "No suitable ground!";
+		}
+
+		// finally: empty enough
+		if(  gr1->get_grund_hang()!=gr1->get_weg_hang()  ||  gr1->get_halt().is_bound()  ||  gr1->kann_alle_obj_entfernen(sp)  ||
+				   gr1->find<gebaeude_t>()  ||  gr1->get_depot()  ||  gr1->get_leitung()  ||  gr1->get_weg(air_wt)  ||  gr1->find<label_t>()  ||  gr1->get_typ()==grund_t::brueckenboden) {
 			return "Tile not empty.";
 		}
 
-		if(  !welt->ist_in_kartengrenzen(pos+koord(1,1))  ||  !welt->ist_in_kartengrenzen(pos+koord(-1,-1))) {
+		if(  !welt->ist_in_kartengrenzen(pos.get_2d()+koord(1,1))  ||  !welt->ist_in_kartengrenzen(pos.get_2d()+koord(-1,-1))) {
 			return "Zu nah am Kartenrand";
 		}
 
 		// slopes may affect the position and the total height!
-		koord3d new_pos;
-		sint8 slope_this;
+		koord3d new_pos = pos;
+
+		ribi_t::ribi ribis = new_slope<hang_t::erhoben ? ribi_t::rueckwaerts(ribi_typ(new_slope)) : ribi_t::alle;
+		if(  gr1->hat_wege()  ) {
+			// check the resulting slope
+			ribis = gr1->get_weg_nr(0)->get_ribi_unmasked();
+			if(  gr1->get_weg_nr(1)  ) {
+				ribis |= gr1->get_weg_nr(1)->get_ribi_unmasked();
+			}
+			if(  new_slope==RESTORE_SLOPE  ||  !ribi_t::ist_einfach(ribis)  ||  (new_slope<hang_t::erhoben  &&  ribi_t::rueckwaerts(ribi_typ(new_slope))!=ribis)  ) {
+				// has the wrong tilt
+				return "Tile not empty.";
+			}
+			/* new things getting tricky:
+			 * A single way on an allup or down slope will result in
+			 * a slope with the way as hinge.
+			 */
+			if(  new_slope==ALL_UP_SLOPE  ) {
+				if(  gr1->get_weg_hang()==hang_t::flach  ) {
+					new_slope = hang_typ(ribis);
+				}
+				else if(  gr1->get_weg_hang()!=hang_typ(ribi_t::rueckwaerts(ribis))  ) {
+					return "Maximum tile height difference reached.";
+				}
+			}
+			else if(  new_slope==ALL_DOWN_SLOPE  ) {
+				if(  gr1->get_grund_hang()==hang_typ(ribis)  ) {
+					// do not lower tiles to sea
+					if(  pos.z == welt->get_grundwasser()  &&  !gr1->ist_tunnel()  ) {
+						return "Tile not empty.";
+					}
+				}
+				else if(  gr1->get_grund_hang()==hang_t::flach  ) {
+					new_slope = hang_typ(ribi_t::rueckwaerts(ribis));
+					new_pos.z -= Z_TILE_STEP;
+					if(  welt->lookup(new_pos)  ) {
+						return "Tile not empty.";
+					}
+				}
+				else {
+					return "Maximum tile height difference reached.";
+				}
+			}
+		}
+
 
 		if(new_slope == RESTORE_SLOPE) {
 			// prissi: special action: set to natural slope
-			new_pos=koord3d(pos,welt->min_hgt(pos));
-			slope_this = welt->calc_natural_slope(pos);
-			DBG_MESSAGE("natural_slope","%i",slope_this);
+			sint8 min_hgt;
+			new_slope = welt->recalc_natural_slope(pos.get_2d(),min_hgt);
+			new_pos = koord3d(pos.get_2d(), min_hgt);
+			DBG_MESSAGE("natural_slope","%i",new_slope);
 		}
-		else {
-			// now check offsets before changing the slope ...
-			sint8 change_to_slope=new_slope;
-			if(new_slope==ALL_DOWN_SLOPE  &&  gr1->get_grund_hang()>0) {
-				// is more intiutive: if there is a slope, first downgrade it
-				change_to_slope = 0;
-			}
-			slope_this = (change_to_slope>=ALL_UP_SLOPE) ? 0 : change_to_slope;
-			new_pos = gr1->get_pos() + koord3d(0,0,(change_to_slope==ALL_UP_SLOPE?Z_TILE_STEP:(change_to_slope==ALL_DOWN_SLOPE?-Z_TILE_STEP:0)));
-#ifdef DOUBLE_GROUNDS
-			// if already the same, double the slope
-			if(slope_this==gr1->get_grund_hang()) {
-				slope_this *= 2;
+		else if(new_slope == ALL_DOWN_SLOPE) {
+			new_slope = hang_t::flach;
+			// is more intiutive: if there is a slope, first downgrade it
+			if (gr1->get_grund_hang()==0  ) {
+				new_pos.z -= Z_TILE_STEP;
+			}
+		}
+		else if(new_slope == ALL_UP_SLOPE) {
+			new_slope = hang_t::flach;
+			new_pos.z += Z_TILE_STEP;
+		}
+
+		// already some ground here (tunnel, bridge, monorail?)
+		if(new_pos.z!=pos.z  &&  welt->lookup(new_pos)!=NULL) {
+			return "Tile not empty.";
+		}
+		// check for grounds above / below
+		if (new_pos.z >= pos.z) {
+			grund_t *gr2 = welt->lookup(new_pos+koord3d(0,0,Z_TILE_STEP));
+			// only raise corners that are raised above
+			if(  gr2  &&  (new_slope & (~gr2->get_weg_hang())) ) {
+				return "Tile not empty.";
+			}
+		}
+		if (new_pos.z <= pos.z) {
+			grund_t *gr2 = welt->lookup(new_pos+koord3d(0,0,-Z_TILE_STEP));
+			// only lower corners that are not raised below
+			if(  gr2  &&  (gr2->get_weg_hang() & (~new_slope)) ) {
+				return "Tile not empty.";
 			}
-#endif
 		}
 
 		// check, if action is valid ...
 		const sint16 hgt=new_pos.z/Z_TILE_STEP;
 		// maximum difference
-		const sint8 test_hgt = hgt+(slope_this!=0);
-
-		// first left side
-		const grund_t *grleft=welt->lookup(pos+koord(-1,0))->get_kartenboden();
-		if(grleft) {
-			const sint16 left_hgt=grleft->get_hoehe()/Z_TILE_STEP + (new_slope==ALL_DOWN_SLOPE && grleft->get_grund_hang()? 1 : 0);
-			const sint8 diff_from_ground = abs(left_hgt-test_hgt);
-			if(diff_from_ground>2) {
-				return "Maximum tile height difference reached.";
+		const sint8 test_hgt = hgt+(new_slope!=0);
+
+		if(  gr1->get_typ()==grund_t::boden  ) {
+			// first left side
+			const grund_t *grleft=welt->lookup(pos.get_2d()+koord(-1,0))->get_kartenboden();
+			if(grleft) {
+				const sint16 left_hgt=grleft->get_hoehe()/Z_TILE_STEP + (new_slope==ALL_DOWN_SLOPE && grleft->get_grund_hang()? 1 : 0);
+				const sint8 diff_from_ground = abs(left_hgt-test_hgt);
+				if(diff_from_ground>2) {
+					return "Maximum tile height difference reached.";
+				}
 			}
-		}
 
-		// right side
-		const grund_t *grright=welt->lookup(pos+koord(1,0))->get_kartenboden();
-		if(grright) {
-			const sint16 right_hgt=grright->get_hoehe()/Z_TILE_STEP  + (new_slope==ALL_DOWN_SLOPE && grright->get_grund_hang()? 1 : 0);
-			const sint8 diff_from_ground = abs(right_hgt-test_hgt);
-			if(diff_from_ground>2) {
-				return "Maximum tile height difference reached.";
+			// right side
+			const grund_t *grright=welt->lookup(pos.get_2d()+koord(1,0))->get_kartenboden();
+			if(grright) {
+				const sint16 right_hgt=grright->get_hoehe()/Z_TILE_STEP  + (new_slope==ALL_DOWN_SLOPE && grright->get_grund_hang()? 1 : 0);
+				const sint8 diff_from_ground = abs(right_hgt-test_hgt);
+				if(diff_from_ground>2) {
+					return "Maximum tile height difference reached.";
+				}
 			}
-		}
 
-		const grund_t *grback=welt->lookup(pos+koord(0,-1))->get_kartenboden();
-		if(grback) {
-			const sint16 back_hgt=grback->get_hoehe()/Z_TILE_STEP  + (new_slope==ALL_DOWN_SLOPE && grback->get_grund_hang()? 1 : 0);
-			const sint8 diff_from_ground = abs(back_hgt-test_hgt);
-			if(diff_from_ground>2) {
-				return "Maximum tile height difference reached.";
+			const grund_t *grback=welt->lookup(pos.get_2d()+koord(0,-1))->get_kartenboden();
+			if(grback) {
+				const sint16 back_hgt=grback->get_hoehe()/Z_TILE_STEP  + (new_slope==ALL_DOWN_SLOPE && grback->get_grund_hang()? 1 : 0);
+				const sint8 diff_from_ground = abs(back_hgt-test_hgt);
+				if(diff_from_ground>2) {
+					return "Maximum tile height difference reached.";
+				}
 			}
-		}
 
-		const grund_t *grfront=welt->lookup(pos+koord(0,1))->get_kartenboden();
-		if(grfront) {
-			const sint16 front_hgt=grfront->get_hoehe()/Z_TILE_STEP  + (new_slope==ALL_DOWN_SLOPE && grfront->get_grund_hang()? 1 : 0);
-			const sint8 diff_from_ground = abs(front_hgt-test_hgt);
-			if(diff_from_ground>2) {
-				return "Maximum tile height difference reached.";
+			const grund_t *grfront=welt->lookup(pos.get_2d()+koord(0,1))->get_kartenboden();
+			if(grfront) {
+				const sint16 front_hgt=grfront->get_hoehe()/Z_TILE_STEP  + (new_slope==ALL_DOWN_SLOPE && grfront->get_grund_hang()? 1 : 0);
+				const sint8 diff_from_ground = abs(front_hgt-test_hgt);
+				if(diff_from_ground>2) {
+					return "Maximum tile height difference reached.";
+				}
 			}
 		}
 
 		// ok, now we set the slope ...
-		ok = (new_pos!=gr1->get_pos());
-		ok |= slope_this!=gr1->get_grund_hang();
+		ok = (new_pos!=pos);
+		ok |= new_slope!=gr1->get_grund_hang();
 
 		if(ok) {
 
@@ -930,36 +991,51 @@ const char *wkz_setslope_t::wkz_set_slope_work( karte_t *welt, spieler_t *sp, ko
 				return "Tile not empty.";
 			}
 
-			// already some ground here (tunnel, bridge, monorail?)
-			if(new_pos!=gr1->get_pos()  &&  welt->lookup(new_pos)!=NULL) {
-				return "Tile not empty.";
-			}
-
-			gr1->obj_loesche_alle(sp);
-
 			// ok, was sucess
-			if(!gr1->ist_wasser()  &&  slope_this==0  &&  new_pos.z==welt->get_grundwasser()) {
+			if(!gr1->ist_wasser()  &&  new_slope==0  &&  new_pos.z==welt->get_grundwasser()  &&  gr1->get_typ()!=grund_t::tunnelboden  ) {
 				// now water
-				welt->access(pos)->kartenboden_setzen( new wasser_t(welt,new_pos) );
+				gr1->obj_loesche_alle(sp);
+				welt->access(pos.get_2d())->kartenboden_setzen( new wasser_t(welt,new_pos) );
 			}
-			else if(gr1->ist_wasser()  &&  (new_pos.z>welt->get_grundwasser()  ||  slope_this!=0)) {
-				welt->access(pos)->kartenboden_setzen( new boden_t(welt,new_pos,slope_this) );
+			else if(gr1->ist_wasser()  &&  (new_pos.z>welt->get_grundwasser()  ||  new_slope!=0)) {
+				gr1->obj_loesche_alle(sp);
+				welt->access(pos.get_2d())->kartenboden_setzen( new boden_t(welt,new_pos,new_slope) );
 			}
 			else {
-				gr1->obj_loesche_alle(sp);
-				gr1->set_grund_hang(slope_this);
+				gr1->set_grund_hang(new_slope);
 				gr1->set_pos(new_pos);
 				gr1->clear_flag(grund_t::marked);
 				gr1->set_flag(grund_t::dirty);
+				// eventually update new positions
+				if(  new_pos!=pos  ) {
+					for(  int i=0;  i<gr1->get_top();  i++  ) {
+						gr1->obj_bei(i)->set_pos( new_pos );
+					}
+				}
+				if(  !gr1->ist_karten_boden()  ) {
+					gr1->calc_bild();
+				}
 			}
-			// recalc slope walls on neightbours
-			for(int y=-1; y<=1; y++) {
-				for(int x=-1; x<=1; x++) {
-					grund_t *gr = welt->lookup(pos+koord(x,y))->get_kartenboden();
-					gr->calc_bild();
+
+			if(  gr1->ist_karten_boden()  ) {
+				// no lakes on slopes ...
+				if(  new_slope!=hang_t::flach  ) {
+					groundobj_t *d = gr1->find<groundobj_t>();
+					if(  d  &&  d->get_besch()->get_phases()!=16  ) {
+						d->entferne(sp);
+						delete d;
+					}
 				}
+				// recalc slope walls on neightbours
+				for(int y=-1; y<=1; y++) {
+					for(int x=-1; x<=1; x++) {
+						grund_t *gr = welt->lookup(pos.get_2d()+koord(x,y))->get_kartenboden();
+						gr->calc_bild();
+					}
+				}
+				welt->set_grid_hgt(pos.get_2d(), gr1->get_hoehe() + corner4(gr1->get_grund_hang()));
 			}
-			spieler_t::accounting(sp, new_slope==RESTORE_SLOPE?welt->get_einstellungen()->cst_alter_land:welt->get_einstellungen()->cst_set_slope, pos, COST_CONSTRUCTION);
+			spieler_t::accounting(sp, new_slope==RESTORE_SLOPE?welt->get_einstellungen()->cst_alter_land:welt->get_einstellungen()->cst_set_slope, pos.get_2d(), COST_CONSTRUCTION);
 		}
 
 	}
@@ -973,13 +1049,21 @@ const char *wkz_marker_t::work( karte_t *welt, spieler_t *sp, koord3d pos )
 {
 	if(welt->ist_in_kartengrenzen(pos.get_2d())) {
 		grund_t *gr = welt->lookup(pos.get_2d())->get_kartenboden();
-		if(  gr  &&  !gr->get_text()  ) {
-			const ding_t* thing = gr->obj_bei(0);
-			if(thing == NULL  ||  thing->get_besitzer() == sp  ||  (spieler_t::check_owner(thing->get_besitzer(), sp)  &&  (thing->get_typ() != ding_t::gebaeude))) {
-				gr->obj_add(new label_t(welt, gr->get_pos(), sp, "\0"));
-				gr->find<label_t>()->zeige_info();
+		if (gr) {
+			// check for underground mode
+			if(  grund_t::underground_mode == grund_t::ugm_all  ||
+				(grund_t::underground_mode == grund_t::ugm_level  &&  gr->get_hoehe()>grund_t::underground_level)
+			) {
 				return "";
 			}
+			if(!gr->get_text()) {
+				const ding_t* thing = gr->obj_bei(0);
+				if(thing == NULL  ||  thing->get_besitzer() == sp  ||  (spieler_t::check_owner(thing->get_besitzer(), sp)  &&  (thing->get_typ() != ding_t::gebaeude))) {
+					gr->obj_add(new label_t(welt, gr->get_pos(), sp, "\0"));
+					gr->find<label_t>()->zeige_info();
+					return "";
+				}
+			}
 		}
 	}
 	return "Das Feld gehoert\neinem anderen Spieler\n";
@@ -1004,38 +1088,30 @@ bool wkz_clear_reservation_t::exit( karte_t *welt, spieler_t * )
 
 const char *wkz_clear_reservation_t::work( karte_t *welt, spieler_t *, koord3d k )
 {
-	const planquadrat_t *plan = welt->lookup(k.get_2d());
-	if(plan) {
-		const bool backwards = (event_get_last_control_shift()==2);
-		for(unsigned i=0;  i<plan->get_boden_count();  i++  ) {
-			grund_t *gr=plan->get_boden_bei( backwards ? plan->get_boden_count()-1-i : i );
-
-			if(gr) {
-
-				for(unsigned wnr=0;  wnr<2;  wnr++  ) {
-
-					schiene_t *w = dynamic_cast<schiene_t *>(gr->get_weg_nr(wnr));
-					// is this a reserved track?
-					if(w!=NULL  &&  w->is_reserved()) {
-						/* now we do a very crude procedure:
-						 * - we search all ways for reservations of this convoi and remove them
-						 * - we set the convoi state to ROUTING_1; it must rereserve its ways then
-						 */
-						const waytype_t waytype = w->get_waytype();
-						const convoihandle_t cnv = w->get_reserved_convoi();
-						if(cnv->get_state()==convoi_t::DRIVING) {
-							// reset driving state
-							cnv->suche_neue_route();
-						}
-						slist_iterator_tpl<weg_t *>iter(weg_t::get_alle_wege());
-						while(iter.next()) {
-							if(iter.get_current()->get_waytype()==waytype) {
-								schiene_t *sch = dynamic_cast<schiene_t *>(iter.access_current());
-								if(sch->get_reserved_convoi()==cnv  &&  !gr->suche_obj(cnv->get_vehikel(0)->get_typ())) {
-									// force free
-									sch->unreserve( cnv->get_vehikel(0) );
-								}
-							}
+	grund_t *gr = get_grund(welt, k);
+	if(gr) {
+		for(unsigned wnr=0;  wnr<2;  wnr++  ) {
+
+			schiene_t *w = dynamic_cast<schiene_t *>(gr->get_weg_nr(wnr));
+			// is this a reserved track?
+			if(w!=NULL  &&  w->is_reserved()) {
+				/* now we do a very crude procedure:
+				 * - we search all ways for reservations of this convoi and remove them
+				 * - we set the convoi state to ROUTING_1; it must rereserve its ways then
+				 */
+				const waytype_t waytype = w->get_waytype();
+				const convoihandle_t cnv = w->get_reserved_convoi();
+				if(cnv->get_state()==convoi_t::DRIVING) {
+					// reset driving state
+					cnv->suche_neue_route();
+				}
+				slist_iterator_tpl<weg_t *>iter(weg_t::get_alle_wege());
+				while(iter.next()) {
+					if(iter.get_current()->get_waytype()==waytype) {
+						schiene_t *sch = dynamic_cast<schiene_t *>(iter.access_current());
+						if(sch->get_reserved_convoi()==cnv  &&  !gr->suche_obj(cnv->get_vehikel(0)->get_typ())) {
+							// force free
+							sch->unreserve( cnv->get_vehikel(0) );
 						}
 					}
 				}
@@ -1058,8 +1134,7 @@ const char *wkz_transformer_t::work( karte_t *welt, spieler_t *sp, koord3d k )
 {
 DBG_MESSAGE("wkz_senke()","called on %d,%d", k.x, k.y);
 	grund_t *gr=welt->lookup_kartenboden(k.get_2d());
-	if(gr  &&  gr->get_grund_hang()==0  &&  !gr->ist_wasser()  &&  !gr->hat_wege()  &&  gr->kann_alle_obj_entfernen(sp)==NULL) {
-
+	if(gr  && gr->is_visible() &&  gr->get_grund_hang()==0  &&  !gr->ist_wasser()  &&  !gr->hat_wege()  &&  gr->kann_alle_obj_entfernen(sp)==NULL  &&  gr->find<gebaeude_t>()==NULL) {
 		fabrik_t *fab=leitung_t::suche_fab_4(k.get_2d());
 		if(fab==NULL) {
 			return "Transformer only next to factory!";
@@ -1081,8 +1156,9 @@ DBG_MESSAGE("wkz_senke()","called on %d,%d", k.x, k.y);
 			gr->obj_add(s);
 			s->laden_abschliessen();
 		}
+		return NULL;	// ok
 	}
-	return NULL;
+	return "Transformer only next to factory!";
 }
 
 
@@ -1094,12 +1170,11 @@ DBG_MESSAGE("wkz_senke()","called on %d,%d", k.x, k.y);
 const char *wkz_add_city_t::work( karte_t *welt, spieler_t *sp, koord3d pos )
 {
 	grund_t *gr = welt->lookup_kartenboden(pos.get_2d());
-	if(gr) {
-
+	if(gr && gr->is_visible()) {
 		if(gr->ist_natur() &&
 			!gr->ist_wasser() &&
 			gr->get_grund_hang() == 0  &&
-			hausbauer_t::get_special(0,haus_besch_t::rathaus,0,0,welt->get_climate(gr->get_hoehe()))!=NULL  ) {
+			hausbauer_t::get_special(0,haus_besch_t::rathaus,welt->get_timeline_year_month(),0,welt->get_climate(gr->get_hoehe()))!=NULL  ) {
 
 			ding_t *d = gr->first_obj();
 			gebaeude_t *gb = dynamic_cast<gebaeude_t *>(d);
@@ -1136,7 +1211,46 @@ const char *wkz_add_city_t::work( karte_t *welt, spieler_t *sp, koord3d pos )
 	return "";
 }
 
+// buy a house
+const char *wkz_buy_house_t::work( karte_t *welt, spieler_t *sp, koord3d pos)
+{
+	if ( sp == welt->get_spieler(1) ) {
+		return "";
+	}
+	grund_t* gr = welt->lookup_kartenboden(pos.get_2d());
+	if(!gr  ||  !gr->is_visible()  ||  gr->hat_wege()  ||  gr->get_halt().is_bound()) {
+		return "";
+	}
+
+	// since buildings can have more than one tile, we must handle them together
+	gebaeude_t* gb = gr->find<gebaeude_t>();
+	if(  gb== NULL  ||  gb->get_haustyp()==gebaeude_t::unbekannt  ||  !spieler_t::check_owner(gb->get_besitzer(),sp)  ) {
+		return "Das Feld gehoert\neinem anderen Spieler\n";
+	}
+
+	spieler_t *old_owner = gb->get_besitzer();
+	const haus_tile_besch_t *tile  = gb->get_tile();
+	const haus_besch_t * hb = tile->get_besch();
+	koord size = hb->get_groesse( tile->get_layout() );
 
+	koord k;
+	for(k.y = 0; k.y < size.y; k.y ++) {
+		for(k.x = 0; k.x < size.x; k.x ++) {
+			grund_t *gr = welt->lookup(koord3d(k,0)+pos);
+			if(gr) {
+				gebaeude_t *gb_part = gr->find<gebaeude_t>();
+				// there may be buildings with holes
+				if(  gb_part  &&  gb_part->get_tile()->get_besch()==hb  &&  spieler_t::check_owner(gb_part->get_besitzer(),sp)  ) {
+					spieler_t::add_maintenance( old_owner, -welt->get_einstellungen()->maint_building*hb->get_level() );
+					spieler_t::add_maintenance( sp, +welt->get_einstellungen()->maint_building*hb->get_level() );
+					gb->set_besitzer(sp);
+					sp->buche( -welt->get_einstellungen()->maint_building*hb->get_level(), k+pos.get_2d(), COST_CONSTRUCTION);
+				}
+			}
+		}
+	}
+	return NULL;
+}
 
 /* change city size
  * @author prissi
@@ -1161,8 +1275,7 @@ const char *wkz_change_city_size_t::work( karte_t *welt, spieler_t *, koord3d po
 
 const char *wkz_plant_tree_t::work( karte_t *welt, spieler_t *sp, koord3d pos )
 {
-	if(welt->ist_in_kartengrenzen(pos.get_2d())) {
-		const baum_besch_t *besch = NULL;
+	grund_t *gr = welt->lookup_kartenboden(pos.get_2d());	if(gr && gr->is_visible()) {		const baum_besch_t *besch = NULL;
 		bool check_climates = true;
 		bool random_age = false;
 		if(default_param==NULL) {
@@ -1190,65 +1303,31 @@ const char *wkz_plant_tree_t::work( karte_t *welt, spieler_t *sp, koord3d pos )
  * So if there is a halt, then it must be either public or our!
  * @autor prissi
  */
-static const char *wkz_fahrplan_insert_aux(karte_t *welt, spieler_t *sp, koord pos, schedule_t *fpl, bool append)
-{
+static const char *wkz_fahrplan_insert_aux(karte_t *welt, spieler_t *sp, koord3d pos, schedule_t *fpl, bool append){
 	if(fpl == NULL) {
-dbg->warning("wkz_fahrplan_insert_aux()","Schedule is (null), doing nothing");
+		dbg->warning("wkz_fahrplan_insert_aux()","Schedule is (null), doing nothing");
 		return false;
 	}
-
-	// now we can start
-	if(welt->ist_in_kartengrenzen(pos)) {
-		bool wrong_owner = false;
-		const planquadrat_t *pl = welt->lookup(pos);
-		const bool backwards=event_get_last_control_shift()==2;
-		const grund_t *bd=0;
-		// search all grounds for match
-		for(  unsigned cnt=0;  cnt<pl->get_boden_count();  cnt++  ) {
-			// with control backwards
-			const unsigned i = (backwards) ? pl->get_boden_count()-1-cnt : cnt;
-			bd = pl->get_boden_bei(i);
-			// ignore tunnel (can be set with Underground mode)
-			if(bd->ist_im_tunnel()) {
-				bd = 0;
-				continue;
-			}
-			// now just for error messages, we assuming a valid ground
-			// and check for ownership
-			if(!bd->is_halt()  &&  bd->obj_count()!=0  &&  !spieler_t::check_owner( sp, bd->obj_bei(0)->get_besitzer())) {
-				bd = 0;
-				continue;
-			}
-			if(bd->is_halt()  &&  !spieler_t::check_owner( sp, bd->get_halt()->get_besitzer()) ) {
-				bd = 0;
-				continue;
-			}
-			// check for rail
-			if(!fpl->ist_halt_erlaubt(bd)) {
-				bd = 0;
-				continue;
-			}
-			// ok, now we have a valid ground
-			break;
+	grund_t *bd = welt->lookup(pos);
+	if (bd && bd->is_visible()) {
+		// now just for error messages, we assuming a valid ground
+		// and check for ownership
+		if(!bd->is_halt()  &&  bd->obj_count()!=0  &&  !spieler_t::check_owner( sp, bd->obj_bei(0)->get_besitzer())) {
+			return "Das Feld gehoert\neinem anderen Spieler\n";
 		}
-
-		if(bd) {
-			// no halt; ownership not checked here, so we checked before!
-			if(append) {
-				fpl->append(bd);
-			}
-			else {
-				fpl->insert(bd);
-			}
+		if(bd->is_halt()  &&  !spieler_t::check_owner( sp, bd->get_halt()->get_besitzer()) ) {
+			return "Das Feld gehoert\neinem anderen Spieler\n";
+		}
+		// check for right way type
+		if(!fpl->ist_halt_erlaubt(bd)) {
+			return fpl->fehlermeldung();
+		}
+		// ok, now we have a valid ground
+		if(append) {
+			fpl->append(bd);
 		}
 		else {
-			// here we failed
-			if(wrong_owner) {
-				return "Das Feld gehoert\neinem anderen Spieler\n";
-			}
-			else {
-				return fpl->fehlermeldung();
-			}
+			fpl->insert(bd);
 		}
 	}
 	return NULL;
@@ -1256,12 +1335,12 @@ dbg->warning("wkz_fahrplan_insert_aux()","Schedule is (null), doing nothing");
 
 const char *wkz_fahrplan_add_t::work( karte_t *welt, spieler_t *sp, koord3d k )
 {
-	return wkz_fahrplan_insert_aux( welt, sp, k.get_2d(), (schedule_t *)default_param, true );
+	return wkz_fahrplan_insert_aux( welt, sp, k, (schedule_t *)default_param, true );
 }
 
 const char *wkz_fahrplan_ins_t::work( karte_t *welt, spieler_t *sp, koord3d k )
 {
-	return wkz_fahrplan_insert_aux( welt, sp, k.get_2d(), (schedule_t *)default_param, false );
+	return wkz_fahrplan_insert_aux( welt, sp, k, (schedule_t *)default_param, false );
 }
 
 
@@ -1269,7 +1348,7 @@ const char *wkz_fahrplan_ins_t::work( karte_t *welt, spieler_t *sp, koord3d k )
 /* way construction */
 const weg_besch_t *wkz_wegebau_t::defaults[17] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 
-const weg_besch_t * wkz_wegebau_t::get_besch(bool remember)
+const weg_besch_t *wkz_wegebau_t::get_besch( karte_t *welt, bool remember ) const
 {
 	const weg_besch_t *besch = wegbauer_t::get_besch(default_param,0);
 	if(besch==NULL) {
@@ -1277,9 +1356,8 @@ const weg_besch_t * wkz_wegebau_t::get_besch(bool remember)
 		besch = defaults[wt&63];
 		if(besch==NULL) {
 			if(wt<=air_wt) {
-				weg_t *w = weg_t::alloc(wt);
-				besch = w->get_besch();
-				delete w;
+				// search fastest way.
+				besch = wegbauer_t::weg_search(wt, 0xffffffff, welt->get_timeline_year_month(), weg_t::type_flat);
 			}
 			else {
 				besch = wegbauer_t::leitung_besch;
@@ -1288,14 +1366,26 @@ const weg_besch_t * wkz_wegebau_t::get_besch(bool remember)
 	}
 	assert(besch);
 	if(remember) {
-		defaults[besch->get_wtyp()&63] = besch;
+		if(  besch->get_styp() == weg_t::type_tram  ) {
+			defaults[ tram_wt ] = besch;
+		}
+		else {
+			defaults[besch->get_wtyp()&63] = besch;
+		}
 	}
 	return besch;
 }
 
+image_id wkz_wegebau_t::get_icon(spieler_t *) const
+{
+	const weg_besch_t *besch = wegbauer_t::get_besch(default_param,0);
+	const bool is_tram = besch ? (besch->get_wtyp()==tram_wt) || (besch->get_styp() == weg_t::type_tram) : false;
+	return (grund_t::underground_mode==grund_t::ugm_all && !is_tram ) ? IMG_LEER : icon;
+}
+
 const char *wkz_wegebau_t::get_tooltip(spieler_t *sp)
 {
-	const weg_besch_t *besch = get_besch(false);
+	const weg_besch_t *besch = get_besch(sp->get_welt(),false);
 	sprintf(toolstr, "%s, %ld$ (%.2lf$), %dkm/h",
 		translator::translate(besch->get_name()),
 		besch->get_preis()/100l,
@@ -1304,43 +1394,50 @@ const char *wkz_wegebau_t::get_tooltip(spieler_t *sp)
 	return toolstr;
 }
 
-bool wkz_wegebau_t::init( karte_t *welt, spieler_t * )
+bool wkz_wegebau_t::is_selected( karte_t *welt ) const
 {
-	welt->show_distance = start = koord3d::invalid;
-	if(wkz_wegebau_bauer != NULL) {
-		wkz_wegebau_bauer->mark_image_dirty( wkz_wegebau_bauer->get_bild(), 0 );
-		delete wkz_wegebau_bauer;
-		wkz_wegebau_bauer = NULL;
-	}
-	// delete old route
-	while(!marked.empty()) {
-		zeiger_t *z = marked.remove_first();
-		z->mark_image_dirty( z->get_bild(), 0 );
-		delete z;
-	}
+	const wkz_wegebau_t *selected = dynamic_cast<const wkz_wegebau_t *>(welt->get_werkzeug());
+	return (selected  &&  selected->get_besch(welt,false) == get_besch(welt,false));
+}
+
+bool wkz_wegebau_t::init( karte_t *welt, spieler_t *sp )
+{
+	two_click_werkzeug_t::init( welt, sp );
+
 	// now get current besch
-	besch = get_besch(true);
+	besch = get_besch(welt, true);
 	if(besch  &&  besch->get_cursor()->get_bild_nr(0) != IMG_LEER) {
 		cursor = besch->get_cursor()->get_bild_nr(0);
 	}
-	win_set_static_tooltip( NULL );
 	return besch!=NULL;
 }
 
-const char *wkz_wegebau_t::move(karte_t *welt, spieler_t *sp, uint16 buttonstate, koord3d pos )
+uint8 wkz_wegebau_t::is_valid_pos( karte_t *welt, spieler_t *sp, const koord3d &pos, const char *&error )
 {
-	// on map?
-	const planquadrat_t *plan = welt->lookup(pos.get_2d());
-	if(plan == NULL) {
-		return "";
+	grund_t *gr=welt->lookup(pos);
+	if(gr  &&  gr->is_visible()  &&  hang_t::ist_wegbar(gr->get_weg_hang())) {
+		// ignore tunnel tiles (except road tunnel for tram track building ..)
+		if(  gr->get_typ() == grund_t::tunnelboden  &&  !gr->ist_karten_boden()  && !(besch->get_wtyp()==track_wt  &&  besch->get_styp()==7  && gr->hat_weg(road_wt)) ) {
+			return 0;
+		}
+		// ignore water
+		if( besch->get_wtyp() != water_wt  &&  gr->get_typ() == grund_t::wasser ) {
+			return 0;
+		}
+		// check for ownership
+		if(sp!=NULL  && gr->kann_alle_obj_entfernen(sp)!=NULL  &&  gr->get_weg((waytype_t)besch->get_wtyp())==NULL) {
+			error =  "Das Feld gehoert\neinem anderen Spieler\n";
+			return 0;
+		}
 	}
-
-	// ignore start==pos
-	if(start==pos  &&  buttonstate==0) {
-		init(welt,sp);
-		return "";
+	else {
+		return 0;
 	}
+	return 2;
+}
 
+void wkz_wegebau_t::calc_route( wegbauer_t &bauigel, const koord3d &start, const koord3d &end )
+{
 	// recalc type of construction
 	wegbauer_t::bautyp_t bautyp = (wegbauer_t::bautyp_t)besch->get_wtyp();
 	if(besch->get_wtyp()==track_wt  &&  besch->get_styp()==7) {
@@ -1351,196 +1448,78 @@ const char *wkz_wegebau_t::move(karte_t *welt, spieler_t *sp, uint16 buttonstate
 		bautyp = (wegbauer_t::bautyp_t)((int)bautyp|(int)wegbauer_t::elevated_flag);
 	}
 
-	win_set_static_tooltip( NULL );
-	if(buttonstate==1) {
-		// delete old route
-		while(!marked.empty()) {
-			zeiger_t *z = marked.remove_first();
-			z->mark_image_dirty( z->get_bild(), 0 );
-			delete z;
-		}
-		// check for suitable ground
-		grund_t *gr=NULL;
-		if(grund_t::underground_mode) {
-			// search all grounds for match
-			for( unsigned cnt=0;  cnt<plan->get_boden_count();  cnt++  ) {
-				// with control backwards
-				gr = plan->get_boden_bei(cnt);
-				// ignore tunnel
-				if(gr->get_typ()!=grund_t::tunnelboden) {
-					gr = NULL;
-					continue;
-				}
-				// check for ownership
-				if(sp!=NULL  &&  (gr->obj_count()==0  ||  !spieler_t::check_owner( sp, gr->obj_bei(0)->get_besitzer()))){
-					gr = NULL;
-					continue;
-				}
-			}
-		}
-		else {
-			// normal ground; just check for ownership
-			gr = plan->get_kartenboden();
-			if(gr->kann_alle_obj_entfernen(sp)!=NULL  &&  gr->get_weg((waytype_t)besch->get_wtyp())==NULL) {
-				gr = NULL;
-			}
-		}
-		// calc new route (if there)
-		if(gr) {
-			if(start==koord3d::invalid) {
-				welt->show_distance = start = gr->get_pos();
-				wkz_wegebau_bauer = new zeiger_t(welt, start, sp);
-				wkz_wegebau_bauer->set_bild( skinverwaltung_t::bauigelsymbol->get_bild_nr(0) );
-				gr->obj_add(wkz_wegebau_bauer);
-			}
-			else {
-				// calculate route
-				wegbauer_t bauigel(welt, sp);
-				koord3d ziel = gr->get_pos();
-				display_show_load_pointer(true);
-				bauigel.route_fuer(bautyp, besch);
-				if(event_get_last_control_shift()==2  ||  grund_t::underground_mode) {
-					bauigel.set_keep_existing_ways(false);
-					bauigel.calc_straight_route(start,ziel);
-				}
-				else {
-					bauigel.set_keep_existing_faster_ways(true);
-					bauigel.calc_route(start,ziel);
-				}
-				if(bauigel.max_n>0) {
-					// make dummy route from bauigel
-					for( int j=0;  j<=bauigel.max_n;  j++  ) {
-						koord3d pos = bauigel.get_route_bei(j);
-						grund_t *gr = welt->lookup(pos);
-						ribi_t::ribi zeige = gr->get_weg_ribi_unmasked(besch->get_wtyp());
-						if(j>0) {
-							zeige |= ribi_typ( bauigel.get_route_bei(j-1).get_2d()-pos.get_2d() );
-						}
-						if(j<bauigel.max_n) {
-							zeige |= ribi_typ( bauigel.get_route_bei(j+1).get_2d()-pos.get_2d() );
-						}
-						zeiger_t *way = new zeiger_t( welt, pos, sp );
-						if(gr->get_weg_hang()) {
-							way->set_bild( besch->get_hang_bild_nr(gr->get_weg_hang(),0) );
-						}
-						else if(besch->get_wtyp()!=powerline_wt  &&  ribi_t::ist_kurve(zeige)  &&  besch->has_diagonal_bild()) {
-							way->set_bild( besch->get_diagonal_bild_nr(zeige,0) );
-						}
-						else {
-							way->set_bild( besch->get_bild_nr(zeige,0) );
-						}
-						welt->lookup(pos)->obj_add( way );
-						marked.insert( way );
-						way->mark_image_dirty( way->get_bild(), 0 );
-					}
-					win_set_static_tooltip( tooltip_with_price("Building costs estimates", -bauigel.calc_costs() ) );
-				}
-				display_show_load_pointer(false);
-			}
-		}
-	}
-	return NULL;
-}
-
-const char *wkz_wegebau_t::work(karte_t *welt, spieler_t *sp, koord3d pos )
-{
-	const planquadrat_t *plan = welt->lookup(pos.get_2d());
-	if(plan == NULL) {
-		return false;
-	}
-
-	grund_t *gr=NULL;
-	if(grund_t::underground_mode) {
-		// search all grounds for match
-		for( unsigned cnt=0;  cnt<plan->get_boden_count();  cnt++  ) {
-			// with control backwards
-			gr = plan->get_boden_bei(cnt);
-			// ignore tunnel
-			if(gr->get_typ()!=grund_t::tunnelboden) {
-				gr = NULL;
-				continue;
-			}
-			// check for ownership
-			if(sp!=NULL  &&  (gr->obj_count()==0  ||  !spieler_t::check_owner( sp, gr->obj_bei(0)->get_besitzer()))){
-				gr = NULL;
-				continue;
-			}
-		}
+	bauigel.route_fuer(bautyp, besch);
+	if(event_get_last_control_shift()==2) {
+		DBG_MESSAGE("wkz_wegebau()", "try straight route");
+		bauigel.set_keep_existing_ways(false);
+		bauigel.calc_straight_route(start,end);
 	}
 	else {
-		// normal ground; just check for ownership
-		gr = plan->get_kartenboden();
-		if(gr->kann_alle_obj_entfernen(sp)!=NULL  &&  gr->get_weg((waytype_t)besch->get_wtyp())==NULL) {
-			gr = NULL;
-		}
-	}
-
-	if(gr==NULL) {
-		return "";
+		bauigel.set_keep_existing_faster_ways(true);
+		bauigel.calc_route(start,end);
 	}
+	DBG_MESSAGE("wkz_wegebau()", "builder found route with %d sqaures length.", bauigel.get_count());
+}
 
-	if(start==koord3d::invalid) {
-		welt->show_distance = start = gr->get_pos();
+const char *wkz_wegebau_t::do_work( karte_t *welt, spieler_t *sp, const koord3d &start, const koord3d &end )
+{
+	wegbauer_t bauigel(welt, sp);
+	calc_route( bauigel, start, end );
+	if(  bauigel.get_route().get_count()>1  ) {
+		long cost = bauigel.calc_costs();
+		welt->mute_sound(true);
+		bauigel.baue();
+		welt->mute_sound(false);
 
-		DBG_MESSAGE("wkz_wegebau()", "Setting start to %d,%d,%d",start.x, start.y, start.z);
+		struct sound_info info;
+		info.index = SFX_CASH;
+		info.volume = 255;
+		info.pri = 0;
+		sound_play(info);
 
-		// symbol für strassenanfang setzen
-		wkz_wegebau_bauer = new zeiger_t(welt, start, sp);
-		wkz_wegebau_bauer->set_bild( skinverwaltung_t::bauigelsymbol->get_bild_nr(0) );
-		gr->obj_add(wkz_wegebau_bauer);
+		return NULL;
 	}
-	else {
-		const koord3d baustart = start;
-		wegbauer_t bauigel(welt, sp);
-		koord3d ziel = gr->get_pos();
-		DBG_MESSAGE("wkz_wegebau()", "Setting end to %d,%d,%d",ziel.x, ziel.y, ziel.z);
-
-		// remove old pointers
-		init(welt,sp);
-		display_show_load_pointer(true);
+	return "";
+}
 
-		// recalc type of construction
-		wegbauer_t::bautyp_t bautyp = (wegbauer_t::bautyp_t)besch->get_wtyp();
-		if(besch->get_wtyp()==track_wt  &&  besch->get_styp()==7) {
-			bautyp = wegbauer_t::schiene_tram;
-		}
-		// elevated track?
-		if(besch->get_styp()==1  &&  besch->get_wtyp()!=air_wt) {
-			bautyp = (wegbauer_t::bautyp_t)((int)bautyp|(int)wegbauer_t::elevated_flag);
-		}
+void wkz_wegebau_t::mark_tiles( karte_t *welt, spieler_t *sp, const koord3d &start, const koord3d &end )
+{
+	wegbauer_t bauigel(welt, sp);
+	calc_route( bauigel, start, end );
 
-		bauigel.route_fuer(bautyp, besch);
-		if(event_get_last_control_shift()==2  ||  grund_t::underground_mode) {
-DBG_MESSAGE("wkz_wegebau()", "try straight route");
-			bauigel.set_keep_existing_ways(false);
-			bauigel.calc_straight_route(baustart,ziel);
-		}
-		else {
-			bauigel.set_keep_existing_faster_ways(true);
-			bauigel.calc_route(baustart,ziel);
-		}
-		welt->show_distance = start = koord3d::invalid;
+	uint8 offset = (besch->get_styp()==1  &&  besch->get_wtyp()!=air_wt) ? 1 : 0;
+	if(  bauigel.get_count()>1  ) {
+		// Set tooltip first (no dummygrounds, if bauigel.calc_casts() is called).
+		win_set_static_tooltip( tooltip_with_price("Building costs estimates", -bauigel.calc_costs() ) );
 
-		DBG_MESSAGE("wkz_wegebau()", "builder found route with %d sqaures length.", bauigel.max_n);
+		// make dummy route from bauigel
+		for(  uint32 j=0;  j<bauigel.get_count();  j++   ) {
+			koord3d pos = bauigel.get_route()[j] + koord3d(0,0,offset);
+			grund_t *gr = welt->lookup( pos );
+			if( !gr ) {
+				gr = new monorailboden_t(welt, pos, 0);
+				gr->set_grund_hang( welt->lookup( pos - koord3d(0,0,1) )->get_grund_hang());
+				welt->access(pos.get_2d())->boden_hinzufuegen(gr);
+			}
+			ribi_t::ribi zeige = gr->get_weg_ribi_unmasked(besch->get_wtyp()) | bauigel.get_route().get_ribi( j );
 
-		long cost = bauigel.calc_costs();
-		welt->mute_sound(true);
-		bauigel.baue();
-		welt->mute_sound(false);
-		if(cost>10000) {
-			struct sound_info info;
-			info.index = SFX_CASH;
-			info.volume = 255;
-			info.pri = 0;
-			sound_play(info);
+			zeiger_t *way = new zeiger_t( welt, pos, sp );
+			if(gr->get_weg_hang()) {
+				way->set_bild( besch->get_hang_bild_nr(gr->get_weg_hang(),0) );
+			}
+			else if(besch->get_wtyp()!=powerline_wt  &&  ribi_t::ist_kurve(zeige)  &&  besch->has_diagonal_bild()) {
+				way->set_bild( besch->get_diagonal_bild_nr(zeige,0) );
+			}
+			else {
+				way->set_bild( besch->get_bild_nr(zeige,0) );
+			}
+			gr->obj_add( way );
+			marked.insert( way );
+			way->mark_image_dirty( way->get_bild(), 0 );
 		}
-		display_show_load_pointer(false);
 	}
-	return NULL;
 }
 
-
-
 /* bridge construction */
 const char *wkz_brueckenbau_t::get_tooltip(spieler_t *sp)
 {
@@ -1564,7 +1543,12 @@ const char *wkz_brueckenbau_t::get_tooltip(spieler_t *sp)
 /* just call the bruckenbauer */
 const char *wkz_brueckenbau_t::work(karte_t *welt, spieler_t *sp, koord3d pos )
 {
-	return brueckenbauer_t::baue( welt, sp, pos.get_2d(), brueckenbauer_t::get_besch(default_param) );
+	if (welt->lookup_kartenboden(pos.get_2d())->get_hoehe() == pos.z) {
+		return brueckenbauer_t::baue( welt, sp, pos.get_2d(), brueckenbauer_t::get_besch(default_param) );
+	}
+	else {
+		return "";
+	}
 }
 
 
@@ -1584,82 +1568,125 @@ const char *wkz_tunnelbau_t::get_tooltip(spieler_t *sp)
 	return toolstr;
 }
 
-bool wkz_tunnelbau_t::init( karte_t *welt, spieler_t * )
+void wkz_tunnelbau_t::calc_route( wegbauer_t &bauigel, const koord3d &start, const koord3d &end, karte_t *welt )
 {
-	welt->show_distance = start = koord3d::invalid;
-	if(wkz_tunnelbau_bauer != NULL) {
-		wkz_tunnelbau_bauer->mark_image_dirty( wkz_tunnelbau_bauer->get_bild(), 0 );
-		delete wkz_tunnelbau_bauer;
-		wkz_tunnelbau_bauer = NULL;
-	}
-	return true;
+	const tunnel_besch_t *besch = tunnelbauer_t::get_besch(default_param);
+	int bt = besch->get_waytype()|wegbauer_t::tunnel_flag;
+	const weg_besch_t *wb = wegbauer_t::weg_search( besch->get_waytype(), besch->get_topspeed(), welt->get_timeline_year_month(), weg_t::type_flat );
+	bauigel.route_fuer((wegbauer_t::bautyp_t)bt, wb, besch);
+	bauigel.set_keep_existing_faster_ways( event_get_last_control_shift()!=2 );
+	bauigel.calc_straight_route(start,koord3d(end.get_2d(),start.z));
 }
 
-const char *wkz_tunnelbau_t::work(karte_t *welt, spieler_t *sp, koord3d pos )
+const char *wkz_tunnelbau_t::do_work( karte_t *welt, spieler_t *sp, const koord3d &start, const koord3d &end )
 {
-	if(!welt->ist_in_kartengrenzen(pos.get_2d())) {
-		return "";
+	if( end == koord3d::invalid ) {
+		// Build tunnel mouths
+		if (welt->lookup_kartenboden(start.get_2d())->get_hoehe() == start.z) {
+			const tunnel_besch_t *besch = tunnelbauer_t::get_besch(default_param);
+			return tunnelbauer_t::baue( welt, sp, start.get_2d(), besch );
+		}
+		else {
+			return "";
+		}
 	}
-
-	if(  !grund_t::underground_mode  ) {
-		init(welt,sp);
+	else {
+		// Build tunnels
+		wegbauer_t bauigel(welt, sp);
+		calc_route( bauigel, start, end, welt );
+		welt->mute_sound(true);
+		bauigel.baue();
+		welt->mute_sound(false);
+		welt->lookup_kartenboden(end.get_2d())->clear_flag(grund_t::marked);
+		return NULL;
 	}
+}
 
-	const tunnel_besch_t *besch = tunnelbauer_t::get_besch(default_param);
-	DBG_MESSAGE("tunnelbauer_t::baue()", "called on %d,%d", pos.x, pos.y);
-
-	// in underground mode, new tunnel can be made ...
-	if(grund_t::underground_mode) {
-		// search for ground
-		// start needs valid tile!
-		if(start==koord3d::invalid) {
-			const planquadrat_t *plan=welt->lookup(pos.get_2d());
-			grund_t *gr=NULL;
-			for (uint i = 0; i < plan->get_boden_count(); i++) {
-				if(plan->get_boden_bei(i)->get_typ()==grund_t::tunnelboden) {
-					if(spieler_t::check_owner( sp, plan->get_boden_bei(i)->obj_bei(0)->get_besitzer())) {
-						gr = plan->get_boden_bei(i);
-						break;
-					}
-				}
-			}
-			if(gr==NULL) {
-				return "No suitable ground!";
-			}
-			welt->show_distance = start = gr->get_pos();
-			// move bulldozer to start ...
-			wkz_tunnelbau_bauer = new zeiger_t(welt, start, sp);
-			wkz_tunnelbau_bauer->set_bild( skinverwaltung_t::bauigelsymbol->get_bild_nr(0));
-			gr->obj_add(wkz_tunnelbau_bauer);
-			return NULL;
+uint8 wkz_tunnelbau_t::is_valid_pos( karte_t *welt, spieler_t *sp, const koord3d &pos, const char *&error )
+{
+	if(  !is_first_click()  ) {
+		error = NULL;
+		// All pos are valid for the second click!
+		return 2;
+	}
+	// search for ground
+	// start needs valid tile!
+	grund_t *gr = welt->lookup(pos);
+	if(gr  &&  gr->is_visible() &&  gr->hat_wege()) {
+		const tunnel_besch_t *besch = tunnelbauer_t::get_besch(default_param);
+		// use the check_owner routine of wegbauer_t (not spieler_t!), needs an instance
+		weg_t *w = gr->get_weg_nr(0);
+		if(  w==NULL  ||  w->get_besch()->get_wtyp()!=besch->get_waytype()  ) {
+			error = "No suitable ground!";
+			return 0;
+		}
+		wegbauer_t bauigel(welt, sp);
+		if(!bauigel.check_owner( w->get_besitzer(), sp )) {
+			error = "Das Feld gehoert\neinem anderen Spieler\n";
+			return 0;
+		}
+	}
+	else {
+		error = "No suitable ground!";
+		return 0;
+	}
+	// if starting tile is tunnel .. build underground tracks
+	if(gr->ist_tunnel()) {
+		if( grund_t::underground_mode != grund_t::ugm_none ) {
+			return 2;
 		}
 		else {
-			// we have a start, now just try to built it ...
-			wkz_tunnelbau_bauer->mark_image_dirty( wkz_tunnelbau_bauer->get_bild(), 0 );
-			delete wkz_tunnelbau_bauer;
-			wkz_tunnelbau_bauer = NULL;
-
-			int bt = besch->get_waytype()|wegbauer_t::tunnel_flag;
-			const weg_besch_t *wb = wegbauer_t::weg_search( besch->get_waytype(), besch->get_topspeed(), welt->get_timeline_year_month(), weg_t::type_flat );
-
-			// now try construction
-			wegbauer_t bauigel(welt, sp);
-			bauigel.route_fuer((wegbauer_t::bautyp_t)bt, wb, besch);
-			bauigel.set_keep_existing_ways( event_get_last_control_shift()==2 );
-			bauigel.calc_straight_route(start,koord3d(pos.get_2d(),start.z));
-			welt->mute_sound(true);
-			bauigel.baue();
-			welt->mute_sound(false);
-			welt->show_distance = start = koord3d::invalid;
-			return NULL;
+			return 0;
 		}
 	}
+	// .. otherwise build tunnel mouths (and tunnel behind)
 	else {
-		return tunnelbauer_t::baue( welt, sp, pos.get_2d(), besch );
+		return 1;
 	}
 }
 
+void wkz_tunnelbau_t::mark_tiles( karte_t *welt, spieler_t *sp, const koord3d &start, const koord3d &end )
+{
+	wegbauer_t bauigel(welt, sp);
+	calc_route( bauigel, start, end, welt );
+
+	const tunnel_besch_t *besch = tunnelbauer_t::get_besch(default_param);
+	const weg_besch_t *wb = wegbauer_t::weg_search( besch->get_waytype(), besch->get_topspeed(), welt->get_timeline_year_month(), weg_t::type_flat );
+
+	welt->lookup_kartenboden(end.get_2d())->clear_flag(grund_t::marked);
+
+	if(  bauigel.get_count()>1  ) {
+		// Set tooltip first (no dummygrounds, if bauigel.calc_casts() is called).
+		win_set_static_tooltip( tooltip_with_price("Building costs estimates", -bauigel.calc_costs() ) );
 
+		// make dummy route from bauigel
+		for(  uint32 j=0;  j<bauigel.get_count();  j++  ) {
+			koord3d pos = bauigel.get_route()[j];
+			grund_t *gr = welt->lookup(pos);
+			if( !gr ) {
+				// We need to create a dummy ground.
+				gr = new tunnelboden_t(welt, pos, 0);
+				welt->access(pos.get_2d())->boden_hinzufuegen(gr);
+			}
+			ribi_t::ribi zeige = gr->get_weg_ribi_unmasked(wb->get_wtyp()) | bauigel.get_route().get_ribi( j );
+
+			zeiger_t *way = new zeiger_t( welt, pos, sp );
+			if(gr->get_weg_hang()) {
+				way->set_bild( wb->get_hang_bild_nr(gr->get_weg_hang(),0) );
+			}
+			else if(wb->get_wtyp()!=powerline_wt  &&  ribi_t::ist_kurve(zeige)  &&  wb->has_diagonal_bild()) {
+				way->set_bild( wb->get_diagonal_bild_nr(zeige,0) );
+			}
+			else {
+				way->set_bild( wb->get_bild_nr(zeige,0) );
+			}
+			gr->obj_add( way );
+			marked.insert( way );
+			way->mark_image_dirty( way->get_bild(), 0 );
+		}
+		welt->lookup(end)->set_flag(grund_t::marked);
+	}
+}
 
 /* removes a way like a driving car ... */
 const char *wkz_wayremover_t::get_tooltip(spieler_t *)
@@ -1678,18 +1705,6 @@ const char *wkz_wayremover_t::get_tooltip(spieler_t *)
 	return NULL;
 }
 
-bool wkz_wayremover_t::init( karte_t *welt, spieler_t * )
-{
-	erster = true;
-	welt->show_distance = start = koord3d::invalid;
-	if(wkz_wayremover_bauer != NULL) {
-		wkz_wayremover_bauer->mark_image_dirty( wkz_wayremover_bauer->get_bild(), 0 );
-		delete wkz_wayremover_bauer;
-		wkz_wayremover_bauer = NULL;
-	}
-	return true;
-}
-
 class electron_t : fahrer_t {
 	bool ist_befahrbar(const grund_t* gr) const { return gr->get_leitung()!=NULL; }
 	virtual ribi_t::ribi get_ribi(const grund_t* gr) const { return gr->get_leitung()->get_ribi(); }
@@ -1698,39 +1713,57 @@ class electron_t : fahrer_t {
 	virtual bool ist_ziel(const grund_t *,const grund_t *) const { return false; }
 };
 
-const char *wkz_wayremover_t::work( karte_t *welt, spieler_t *sp, koord3d pos )
+void wkz_wayremover_t::mark_tiles( karte_t *welt, spieler_t *sp, const koord3d &start, const koord3d &end )
+{
+	route_t verbindung;
+	bool can_built = calc_route( verbindung, sp, start, end );
+	if( can_built ) {
+		for( uint32 j = 0; j < verbindung.get_count(); j++ ) {
+			koord3d pos = verbindung.position_bei(j);
+			zeiger_t *marker = new zeiger_t( welt, pos, sp );
+			marker->set_bild( cursor );
+			marker->mark_image_dirty( marker->get_bild(), 0 );
+			marked.insert( marker );
+			welt->lookup(pos)->obj_add( marker );
+		}
+	}
+}
+
+uint8 wkz_wayremover_t::is_valid_pos( karte_t *welt, spieler_t *sp, const koord3d &pos, const char *&error )
 {
 	// search for starting ground
 	waytype_t wt = (waytype_t)atoi(default_param);
-	grund_t *gr=wkz_intern_koord_to_weg_grund(sp,welt,pos.get_2d(),wt);
+	grund_t *gr=wkz_intern_koord_to_weg_grund(sp,welt,pos,wt);
 	if(gr==NULL) {
 		DBG_MESSAGE("wkz_wayremover()", "no ground on %i,%i",pos.x, pos.y);
 		// wrong ground or not this way here => exit
-		return "";
+		return 0;
 	}
 	// do not remove ground from depot
 	if(gr->get_depot()) {
-		return "No suitable ground!";
+		error = "No suitable ground!";
+		return 0;
 	}
+	return 2;
+}
 
-	if( erster ) {
-		// set start position
-		erster = false;
-		welt->show_distance = start = gr->get_pos();
-		wkz_wayremover_bauer = new zeiger_t(welt, start, sp);
-		wkz_wayremover_bauer->set_bild( cursor );
-		gr->obj_add(wkz_wayremover_bauer);
-DBG_MESSAGE("wkz_wayremover()", "Setting start to %d,%d,%d",start.x, start.y,start.z);
-	}
-	else {
-DBG_MESSAGE("wkz_wayremover()", "Setting end to %d,%d,%d",gr->get_pos().x, gr->get_pos().y,gr->get_pos().z);
 
-		// remove marker
-		wkz_wayremover_bauer->mark_image_dirty( wkz_wayremover_bauer->get_bild(), 0 );
-		delete wkz_wayremover_bauer;
-		wkz_wayremover_bauer = NULL;
-		erster = true;
+bool wkz_wayremover_t::calc_route( route_t &verbindung, spieler_t *sp, const koord3d &start, const koord3d &end )
+{
+	waytype_t wt = (waytype_t)atoi(default_param);
+	if (wt == tram_wt) {
+		wt = track_wt;
+	}
+	karte_t *welt = sp->get_welt();
 
+	if(  start == end  ) {
+		verbindung.clear();
+		grund_t *gr=welt->lookup(start);
+		if(  gr  &&  gr->get_weg(wt)  ) {
+			verbindung.append( start );
+		}
+	}
+	else {
 		// get a default vehikel
 		fahrer_t* test_driver;
 		if(  wt!=powerline_wt  ) {
@@ -1740,113 +1773,132 @@ DBG_MESSAGE("wkz_wayremover()", "Setting end to %d,%d,%d",gr->get_pos().x, gr->g
 		else {
 			test_driver = (fahrer_t * )new electron_t();
 		}
-		route_t verbindung;
-		bool can_delete = verbindung.calc_route(welt, start, gr->get_pos(), test_driver, 0);
+		verbindung.calc_route(sp->get_welt(), start, end, test_driver, 0);
 		delete test_driver;
-		welt->show_distance = start = koord3d::invalid;
-		DBG_MESSAGE("wkz_wayremover()", "route search returned %d", can_delete);
-
-		if(!can_delete) {
-			DBG_MESSAGE("wkz_wayremover()","no route found");
-			return "Ways not connected";
-		}
-
-DBG_MESSAGE("wkz_wayremover()","route with %d tile found",verbindung.get_max_n());
+	}
+	DBG_MESSAGE("wkz_wayremover()","route with %d tile found",verbindung.get_count());
 
+	bool can_delete = verbindung.get_count()>0;
+	if(  can_delete  ) {
 		// found a route => check if I can delete anything on it
-		for(  uint32 i=0;  can_delete  &&  i<=verbindung.get_max_n();  i++  ) {
+		for(  uint32 i=0;  can_delete  &&  i<verbindung.get_count();  i++  ) {
 			grund_t *gr=welt->lookup(verbindung.position_bei(i));
-			if(gr) {
-				if(  wt!=powerline_wt  ) {
-					if(gr->get_weg(wt)==NULL  ||  !spieler_t::check_owner( sp, gr->get_weg(wt)->get_besitzer())) {
-						can_delete = false;
-					}
-					else {
-						if(gr->kann_alle_obj_entfernen(sp)!=NULL) {
-							// we have to do a fine check
-							for( uint i=1;  i<gr->get_top();  i++  ) {
-								uint8 type = gr->obj_bei(i)->get_typ();
-								if(type>=ding_t::automobil  &&  type!=ding_t::aircraft) {
-									can_delete = false;
-									break;
-								}
-							}
+			if(  wt!=powerline_wt  ) {
+				if(  gr==NULL  ||  gr->get_weg(wt)==NULL  ||  (gr->is_halt()  &&  !spieler_t::check_owner( gr->get_halt()->get_besitzer(), sp ) )  ) {
+					can_delete = false;
+					break;
+				}
+				if(  gr->kann_alle_obj_entfernen(sp)!=NULL  ) {
+					// we have to do a fine check
+					for( uint i=0;  i<gr->get_top();  i++  ) {
+						ding_t *d = gr->obj_bei(i);
+						uint8 type = d->get_typ();
+						if(type>=ding_t::automobil  &&  type!=ding_t::aircraft) {
+							can_delete = false;
+							break;
+						}
+						// something else that is not mine ...
+						if(  d->ist_entfernbar(sp)!=NULL  &&  gr->get_leitung()!=d  ) {
+							can_delete = false;
+							break;
 						}
 					}
 				}
-				else {
-					leitung_t *lt = gr->get_leitung();
-					can_delete = lt  &&  spieler_t::check_owner( sp, lt->get_besitzer() );
-				}
 			}
 			else {
-				can_delete = false;
+				// for powerline: only a ground and a powerline to remove
+				if(  gr==NULL  ||  gr->get_leitung()==NULL  ||  gr->get_leitung()->ist_entfernbar(sp)!=NULL  ) {
+					can_delete = false;
+					break;
+				}
 			}
-
 		}
+	}
+	DBG_MESSAGE("wkz_wayremover()", "route search returned %d", can_delete);
 
-		// if successful => delete everything
-		for( uint32 i=0;  can_delete  &&  i<=verbindung.get_max_n();  i++  ) {
+	return can_delete;
+}
 
-			grund_t *gr=welt->lookup(verbindung.position_bei(i));
+const char *wkz_wayremover_t::do_work( karte_t *welt, spieler_t *sp, const koord3d &start, const koord3d &end )
+{
+	waytype_t wt = (waytype_t)atoi(default_param);
+	route_t verbindung;
+	if( !calc_route( verbindung, sp, start, end )  ) {
+		DBG_MESSAGE("wkz_wayremover()","no route found");
+		return "Ways not connected";
+	}
+	bool can_delete = true;	// assume success
 
-			// ground can be missing after deleting a bridge ...
-			if(gr  &&  !gr->ist_wasser()) {
+	// if successful => delete everything
+	for( uint32 i=0;  i<verbindung.get_count();  i++  ) {
 
-				if(gr->ist_bruecke()) {
-					if(gr->find<bruecke_t>()->get_besch()->get_waytype()==wt) {
-						if(gr->ist_karten_boden()) {
-							const char *err = NULL;
-							err = brueckenbauer_t::remove(welt,sp,verbindung.position_bei(i),wt);
-							if(err) {
-								return err;
-							}
+		grund_t *gr=welt->lookup(verbindung.position_bei(i));
+
+		// ground can be missing after deleting a bridge ...
+		if(gr  &&  !gr->ist_wasser()) {
+
+			if(gr->ist_bruecke()) {
+				if(gr->find<bruecke_t>()->get_besch()->get_waytype()==wt) {
+					if(gr->ist_karten_boden()) {
+						const char *err = NULL;
+						err = brueckenbauer_t::remove(welt,sp,verbindung.position_bei(i),wt);
+						if(err) {
+							return err;
 						}
+						gr = welt->lookup(verbindung.position_bei(i));
+					}
+					else {
 						// do not remove asphalt from a bridge ...
 						continue;
 					}
 				}
+			}
 
-				// now the tricky part: delete just part of a way (or everything, if possible)
-				// calculated removing directions
-				ribi_t::ribi rem = (i>0) ? ribi_typ( verbindung.position_bei(i).get_2d(), verbindung.position_bei(i-1).get_2d() ) : 0;
-				ribi_t::ribi rem2 = (i<verbindung.get_max_n()) ? ribi_typ(verbindung.position_bei(i).get_2d(),verbindung.position_bei(i+1).get_2d()) : 0;
-				rem = ~(rem|rem2);
-
-				if(  wt!=powerline_wt  ) {
-					if(!gr->get_flag(grund_t::is_kartenboden)  &&  (gr->get_typ()==grund_t::tunnelboden  ||  gr->get_typ()==grund_t::monorailboden)  &&  gr->get_weg_nr(0)->get_waytype()==wt) {
-						can_delete &= gr->remove_everything_from_way(sp,wt,rem);
-						if(can_delete  &&  gr->get_weg(wt)==NULL) {
-							if(gr->get_weg_nr(0)!=0) {
-								gr->remove_everything_from_way(sp,gr->get_weg_nr(0)->get_waytype(),ribi_t::alle);
-							}
-							gr->obj_loesche_alle(sp);
-							// delete tunnel ground too, if empty
-							welt->access(gr->get_pos().get_2d())->boden_entfernen(gr);
-							delete gr;
+			// now the tricky part: delete just part of a way (or everything, if possible)
+			// calculated removing directions
+			ribi_t::ribi rem = ~( verbindung.get_route().get_ribi(i) );
+			// if start=end tile then delete every direction
+			if(  verbindung.get_count() <= 2  ) {
+				rem = 0;
+			}
+
+			if(  wt!=powerline_wt  ) {
+				if(!gr->get_flag(grund_t::is_kartenboden)  &&  (gr->get_typ()==grund_t::tunnelboden  ||  gr->get_typ()==grund_t::monorailboden)  &&  gr->get_weg_nr(0)->get_waytype()==wt) {
+					can_delete &= gr->remove_everything_from_way(sp,wt,rem);
+					if(can_delete  &&  gr->get_weg(wt)==NULL) {
+						if(gr->get_weg_nr(0)!=0) {
+							gr->remove_everything_from_way(sp,gr->get_weg_nr(0)->get_waytype(),ribi_t::keine);
 						}
-					}
-					else {
-						can_delete &= gr->remove_everything_from_way(sp,wt,rem);
+						gr->obj_loesche_alle(sp);
+						if (gr->is_visible() && gr->get_typ()==grund_t::tunnelboden && i>0) {
+							grund_t *bd = welt->access(verbindung.position_bei(i-1).get_2d())->get_kartenboden();
+							bd->calc_bild();
+							bd->set_flag(grund_t::dirty);
+						}
+						// delete tunnel ground too, if empty
+						welt->access(gr->get_pos().get_2d())->boden_entfernen(gr);
+						delete gr;
 					}
 				}
 				else {
-					leitung_t *lt = gr->get_leitung();
-					if(  (rem&lt->get_ribi())==0  ) {
-						// remove only single connections
-						lt->entferne(sp);
-						delete lt;
-					}
-					// otherwise it is a crossing ...
+					can_delete &= gr->remove_everything_from_way(sp,wt,rem);
+				}
+			}
+			else {
+				leitung_t *lt = gr->get_leitung();
+				if(  lt  &&  (rem&lt->get_ribi())==0  ) {
+					// remove only single connections
+					lt->entferne(sp);
+					delete lt;
 				}
+				// otherwise it is a crossing ...
 			}
-			// ok, now everything removed ...
 		}
-
-		// return success
-		return can_delete ? NULL : "";
+		// ok, now everything removed ...
 	}
-	return NULL;
+
+	// return success
+	return can_delete ? NULL : "";
 }
 
 
@@ -1856,117 +1908,190 @@ const way_obj_besch_t *wkz_wayobj_t::default_electric = NULL;
 
 const char *wkz_wayobj_t::get_tooltip(spieler_t *sp)
 {
-	const way_obj_besch_t *besch = wayobj_t::find_besch(default_param);
-	if(besch==NULL) {
-		besch = default_electric;
-		if(besch==NULL) {
-			besch = default_electric = wayobj_t::wayobj_search(track_wt,overheadlines_wt,sp->get_welt()->get_timeline_year_month());
+	if(  build  ) {
+		const way_obj_besch_t *besch = get_besch(sp->get_welt());
+		if(besch) {
+			sprintf(toolstr, "%s, %ld$ (%ld$), %dkm/h",
+					translator::translate(besch->get_name()),
+					besch->get_preis()/100l,
+					(besch->get_wartung()<<(sp->get_welt()->ticks_bits_per_tag-18l))/100l,
+					besch->get_topspeed());
+			return toolstr;
 		}
+		return NULL;
 	}
-	if(besch) {
-		sprintf(toolstr, "%s, %ld$ (%ld$), %dkm/h",
-			translator::translate(besch->get_name()),
-			besch->get_preis()/100l,
-			(besch->get_wartung()<<(sp->get_welt()->ticks_bits_per_tag-18l))/100l,
-			besch->get_topspeed());
+	else {
+		wt = (waytype_t)atoi( default_param );
+		sprintf( toolstr, translator::translate("Remove wayobj %s"), translator::translate(weg_t::waytype_to_string(wt)) );
 		return toolstr;
 	}
-	return NULL;
 }
 
-bool wkz_wayobj_t::init( karte_t *welt, spieler_t *sp )
+const way_obj_besch_t *wkz_wayobj_t::get_besch( const karte_t* welt ) const
 {
 	const way_obj_besch_t *besch = default_param ? wayobj_t::find_besch(default_param) : NULL;
 	if(besch==NULL) {
 		besch = default_electric;
 		if(besch==NULL) {
-			besch = default_electric = wayobj_t::wayobj_search(track_wt,overheadlines_wt,sp->get_welt()->get_timeline_year_month());
+			besch = wayobj_t::wayobj_search( track_wt, overheadlines_wt, welt->get_timeline_year_month() );
 		}
 	}
-	else {
-		default_electric = besch;
+	return besch;
+}
+
+bool wkz_wayobj_t::is_selected( karte_t *welt ) const
+{
+	const wkz_wayobj_t *selected = dynamic_cast<const wkz_wayobj_t *>(welt->get_werkzeug());
+	return (selected  &&  selected->get_besch(welt) == get_besch(welt));
+}
+
+bool wkz_wayobj_t::init( karte_t *welt, spieler_t *sp )
+{
+	two_click_werkzeug_t::init( welt, sp );
+
+	if( build ) {
+		besch = get_besch(welt);
+		if( besch ) {
+			cursor = besch->get_cursor()->get_bild_nr(0);
+			wt = besch->get_wtyp();
+			default_electric = besch;
+		}
+		return besch!=NULL;
 	}
-	erster = true;
-	welt->show_distance = start = koord3d::invalid;
-	if(wkz_wayobj_bauer != NULL) {
-		wkz_wayobj_bauer->mark_image_dirty( skinverwaltung_t::bauigelsymbol->get_bild_nr(0), 0 );
-		delete wkz_wayobj_bauer;
-		wkz_wayobj_bauer = NULL;
+	else {
+		besch = NULL;
+		wt = (waytype_t)atoi( default_param );
+		return wt != 0;
 	}
-	return besch!=NULL;
 }
 
-const char *wkz_wayobj_t::work( karte_t *welt, spieler_t *sp, koord3d pos )
+bool wkz_wayobj_t::calc_route( route_t &verbindung, spieler_t *sp, const koord3d& start, const koord3d& to )
 {
-	const way_obj_besch_t *besch = wayobj_t::find_besch(default_param);
-	if(besch==NULL) {
-		besch = default_electric;
+	// get a default vehikel
+	vehikel_besch_t remover_besch( wt, 500, vehikel_besch_t::diesel );
+	vehikel_t* test_driver = vehikelbauer_t::baue(start, sp, NULL, &remover_besch);
+	bool can_built;
+	if( start != to ) {
+		can_built = verbindung.calc_route(sp->get_welt(), start, to, test_driver, 0);
 	}
-	waytype_t wt=besch->get_wtyp();
-	koord3d end;
+	else {
+		verbindung.clear();
+		verbindung.append( start );
+		can_built = true;
+	}
+	delete test_driver;
+	return can_built;
+}
 
+uint8 wkz_wayobj_t::is_valid_pos( karte_t * welt, spieler_t * sp, const koord3d& pos, const char *&error )
+{
 	// search for starting ground
-	grund_t *gr=wkz_intern_koord_to_weg_grund(sp,welt,pos.get_2d(),wt);
-	if(gr==NULL) {
-		DBG_MESSAGE("wkz_wayremover()", "no ground on %i,%i",pos.x, pos.y);
+	grund_t *gr=wkz_intern_koord_to_weg_grund(sp, welt, pos, wt );
+	if(  gr == NULL  ) {
+		DBG_MESSAGE("wkz_wayobj_t::is_valid_pos()", "no ground on %s",pos.get_str());
 		// wrong ground or not this way here => exit
-		return "";
+		return 0;
 	}
+	return 2;
+}
+
+void wkz_wayobj_t::mark_tiles( karte_t * welt, spieler_t * sp, const koord3d &start, const koord3d &end )
+{
+	route_t verbindung;
+	bool can_built = calc_route( verbindung, sp, start, end );
+	if( can_built ) {
+		sint32 cost_estimate = 0;
+
+		for( uint32 j = 0; j < verbindung.get_count(); j++ ) {
+			koord3d pos = verbindung.position_bei(j);
+			grund_t *gr = welt->lookup(pos);
 
-	if( erster ) {
-		// set start position
-		erster = false;
-		welt->show_distance = start = gr->get_pos();
-		wkz_wayobj_bauer = new zeiger_t(welt, start, sp);
-		wkz_wayobj_bauer->set_bild( besch->get_cursor()->get_bild_nr(0) );
-		gr->obj_add(wkz_wayobj_bauer);
-		DBG_MESSAGE("wkz_wayremover()", "Setting start to %d,%d,%d",start.x, start.y,start.z);
+			ribi_t::ribi show = verbindung.get_route().get_ribi(j);
+			// Search a matching catenary on gr.
+			wayobj_t *wayobj = gr->get_wayobj( wt );
+			if( build ) {
+				cost_estimate += besch->get_preis();
+				if( wayobj ) {
+					show = show | wayobj->get_dir();
+					// Already a catenary here -> costs only, if new catenary is faster
+					if(  wayobj->get_besch()->get_topspeed() >= besch->get_topspeed()  ) {
+						cost_estimate -= besch->get_preis();
+					}
+				}
+			}
+			else if( wayobj ) {
+				cost_estimate += wayobj->get_besch()->get_preis();
+			}
+
+			zeiger_t *way_obj = NULL;
+			if( build ) {
+				way_obj = new zeiger_t( welt, pos, sp );
+				if(  gr->get_weg_hang()  ) {
+					way_obj->set_after_bild( besch->get_front_slope_image_id(gr->get_weg_hang()) );
+					way_obj->set_bild( besch->get_back_slope_image_id(gr->get_weg_hang()) );
+				}
+				else if(  ribi_t::ist_kurve(show)  &&  besch->has_diagonal_bild()  ) {
+					way_obj->set_after_bild( besch->get_front_diagonal_image_id(show) );
+					way_obj->set_bild( besch->get_back_diagonal_image_id(show) );
+				}
+				else {
+					way_obj->set_after_bild( besch->get_front_image_id(show) );
+					way_obj->set_bild( besch->get_back_image_id(show) );
+				}
+			}
+			else {
+				if( gr->get_wayobj( wt ) ) {
+					way_obj = new zeiger_t( welt, pos, sp );
+					way_obj->set_bild( cursor ); //skinverwaltung_t::bauigelsymbol->get_bild_nr(0));
+				}
+			}
+			if( way_obj ) {
+				way_obj->mark_image_dirty( way_obj->get_bild(), 0 );
+				gr->obj_add( way_obj );
+				marked.insert( way_obj );
+			}
+		}
+		win_set_static_tooltip( tooltip_with_price("Building costs estimates", -cost_estimate ) );
 	}
-	else {
-		DBG_MESSAGE("wkz_wayremover()", "Setting end to %d,%d,%d",gr->get_pos().x, gr->get_pos().y,gr->get_pos().z);
+}
 
-		// remove marker
-		wkz_wayobj_bauer->mark_image_dirty( skinverwaltung_t::bauigelsymbol->get_bild_nr(0), 0 );
-		delete wkz_wayobj_bauer ;
-		wkz_wayobj_bauer = NULL;
-		erster = true;
+const char *wkz_wayobj_t::do_work( karte_t * welt, spieler_t * sp, const koord3d &start, const koord3d &end )
+{
+	route_t verbindung;
+	bool can_built = calc_route( verbindung, sp, start, end );
+	DBG_MESSAGE("wkz_wayobj_t::work()","route search returned %d",can_built);
 
-		// get a default vehikel
-		vehikel_besch_t remover_besch(wt, 500, vehikel_besch_t::diesel );
-		vehikel_t* test_driver = vehikelbauer_t::baue(start, sp, NULL, &remover_besch);
-		route_t verbindung;
-		bool can_built = verbindung.calc_route(welt, start, gr->get_pos(), test_driver, 0);
-		delete test_driver;
-		welt->show_distance = start = koord3d::invalid;
-		DBG_MESSAGE("wkz_wayremover()","route search returned %d",can_built);
-
-		if(!can_built) {
-			DBG_MESSAGE("wkz_wayremover()","no route found");
-			return "Ways not connected";
-		}
-
-		// built wayobj ...
-		koord3d last_pos, pos=verbindung.position_bei(0);
-		uint8 dir = ribi_t::alle;
-		for(uint32 i=1;  i<=verbindung.get_max_n();  i++  ) {
-			last_pos = pos;
-			pos = verbindung.position_bei(i);
-			uint8 last_dir = ribi_t::rueckwaerts(dir);
-			dir = ribi_typ((pos-last_pos).get_2d());
-			koord3d pos=verbindung.position_bei(i);
-			wayobj_t::extend_wayobj_t(welt,last_pos,sp,dir|last_dir,besch);
-		}
-		// last point
-		wayobj_t::extend_wayobj_t(welt,pos,sp,ribi_t::rueckwaerts(dir),besch);
-		return NULL;
+	if(!can_built) {
+		return "Ways not connected";
 	}
-	return "";
+
+	// built wayobj ...
+	for(uint32 i=0;  i<verbindung.get_count();  i++  ) {
+		if( build ) {
+			wayobj_t::extend_wayobj_t( welt, verbindung.get_route()[i], sp, verbindung.get_route().get_ribi(i), besch );
+		}
+		else {
+			wayobj_t* wo = welt->lookup(verbindung.get_route()[i])->find<wayobj_t>();
+			if( wo ) {
+				const char *err = wo->ist_entfernbar( sp );
+				if( !err ) {
+					wo->entferne( sp );
+					delete wo;
+				}
+			}
+		}
+	}
+	return NULL;
 }
 
 
 /* build all kind of station extension buildings */
 const char *wkz_station_t::wkz_station_building_aux(karte_t *welt, spieler_t *sp, koord3d k, const haus_besch_t *besch, sint8 rotation )
 {
+	// need kartenboden
+	if (welt->lookup_kartenboden(k.get_2d())->get_hoehe() != k.z) {
+		return "";
+	}
 	koord pos = k.get_2d();
 DBG_MESSAGE("wkz_station_building_aux()", "building mail office/station building on square %d,%d", pos.x, pos.y);
 
@@ -2133,6 +2258,9 @@ const char *wkz_station_t::wkz_station_dock_aux(karte_t *welt, spieler_t *sp, ko
 	// the cursor cannot be outside the map from here on
 	koord pos = k.get_2d();
 	grund_t *gr = welt->lookup_kartenboden(pos);
+	if (gr->get_hoehe()!= k.z) {
+		return "";
+	}
 	hang_t::typ hang = gr->get_grund_hang();
 	// first get the size
 	int len = besch->get_groesse().y-1;
@@ -2285,18 +2413,19 @@ const char *wkz_station_t::wkz_station_aux(karte_t *welt, spieler_t *sp, koord3d
 DBG_MESSAGE("wkz_halt_aux()", "building %s on square %d,%d for waytype %x", besch->get_name(), pos.x, pos.y, wegtype);
 	const char *p_error=(besch->get_all_layouts()==4) ? "No terminal station here!" : "No through station here!";
 
-	grund_t *bd = wkz_intern_koord_to_weg_grund( sp==welt->get_spieler(1)?NULL:sp,welt,k.get_2d(),wegtype);
+	// underground is checked in work(); if underground only simple stations are allowed
+	// get valid ground
+	grund_t *bd = wkz_intern_koord_to_weg_grund( sp==welt->get_spieler(1)?NULL:sp,welt,k,wegtype);
 	if(!bd  &&  track_wt) {
-		bd = wkz_intern_koord_to_weg_grund(sp==welt->get_spieler(1)?NULL:sp,welt,k.get_2d(),monorail_wt);
+		bd = wkz_intern_koord_to_weg_grund(sp==welt->get_spieler(1)?NULL:sp,welt,k,monorail_wt);
 	}
 
-	if(!bd  ||  bd->get_weg_hang()!=hang_t::flach  ||  bd->is_halt()) {
+	if(!bd  ||  bd->get_weg_hang()!=hang_t::flach) {
 		// only flat tiles, only one stop per map square
 		return p_error;
 	}
 
-	if(bd->get_typ()==grund_t::tunnelboden  &&  bd->ist_karten_boden()) {
-		// do not build on tunnel entries
+	if(bd->ist_tunnel()  &&  bd->ist_karten_boden()) {		// do not build on tunnel entries
 		return false;
 	}
 
@@ -2310,15 +2439,15 @@ DBG_MESSAGE("wkz_halt_aux()", "building %s on square %d,%d for waytype %x", besc
 
 	// find out orientation ...
 	uint32 layout = 0;
-	ribi_t::ribi  ribi;
+	ribi_t::ribi  ribi=ribi_t::dir_invalid;
 	if(besch->get_all_layouts()==2 || besch->get_all_layouts()==8 || besch->get_all_layouts()==16) {
 		// through station
 		if(bd->has_two_ways()) {
 			// a crossing or maybe just a tram track on a road ...
 			ribi = bd->get_weg_nr(0)->get_ribi_unmasked()  |  bd->get_weg_nr(1)->get_ribi_unmasked();
 		}
-		else {
-			ribi = bd->get_weg_ribi_unmasked(wegtype);
+		else if (bd->hat_wege()) {
+			ribi = bd->get_weg_nr(0)->get_ribi_unmasked();
 		}
 		// not straight: sorry cannot built here ...
 		if(!ribi_t::ist_gerade(ribi)) {
@@ -2328,7 +2457,9 @@ DBG_MESSAGE("wkz_halt_aux()", "building %s on square %d,%d for waytype %x", besc
 	}
 	else if(besch->get_all_layouts()==4) {
 		// terminal station
-		ribi = bd->get_weg_ribi_unmasked(wegtype);
+		if (bd->hat_wege()) {
+			ribi = bd->get_weg_nr(0)->get_ribi_unmasked();
+		}
 		// sorry cannot built here ... (not a terminal tile)
 		if(!ribi_t::ist_einfach(ribi)) {
 			return p_error;
@@ -2359,7 +2490,7 @@ DBG_MESSAGE("wkz_halt_aux()", "building %s on square %d,%d for waytype %x", besc
 		ribi_t::ribi next_halt = ribi_t::keine;
 		ribi_t::ribi next_own = ribi_t::keine;
 
-		sint16 offset = bd->get_hoehe()+bd->get_weg_yoff()/TILE_HEIGHT_STEP;
+		sint8 offset = bd->get_hoehe()+bd->get_weg_yoff()/TILE_HEIGHT_STEP;
 
 		grund_t *gr;
 		sint32 neighbour_layout[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
@@ -2423,8 +2554,27 @@ DBG_MESSAGE("wkz_halt_aux()", "building %s on square %d,%d for waytype %x", besc
 		layout &= (besch->get_all_layouts()-1);
 	}
 
+	halthandle_t old_halt = bd->get_halt();
+	uint16 old_level = 0;
+
+	halthandle_t halt;
+
+	if( old_halt.is_bound() ) {
+		gebaeude_t* gb = bd->find<gebaeude_t>();
+		const haus_besch_t *old_besch = gb->get_tile()->get_besch();
+		old_level = old_besch->get_level();
+		if( old_besch->get_level() >= besch->get_level() ) {
+			return "Upgrade must have\na higher level";
+		}
+		gb->entferne( NULL );
+		delete gb;
+		halt = old_halt;
+	}
+	else {
+		halt = suche_nahe_haltestelle(sp,welt,bd->get_pos());
+	}
+
 	// seems everything ok, lets build
-	halthandle_t halt = suche_nahe_haltestelle(sp,welt,bd->get_pos());
 	bool neu = !halt.is_bound();
 
 	if(neu) {
@@ -2438,7 +2588,10 @@ DBG_MESSAGE("wkz_halt_aux()", "building %s on square %d,%d for waytype %x", besc
 		halt->set_name( name );
 		free(name);
 	}
+
+	sint64 old_cost = old_level * cost;
 	cost *= besch->get_level()*besch->get_b()*besch->get_h();
+	cost -= old_cost/2;
 	if(sp!=halt->get_besitzer()) {
 		// public stops are expensive!
 		cost += ((welt->get_einstellungen()->maint_building*besch->get_level()*besch->get_b()*besch->get_h()*60)<<(welt->ticks_bits_per_tag-18));
@@ -2452,7 +2605,7 @@ DBG_MESSAGE("wkz_halt_aux()", "building %s on square %d,%d for waytype %x", besc
 }
 
 // gives the description and sets the rotation value
-const haus_besch_t *wkz_station_t::get_besch( sint8 &rotation )
+const haus_besch_t *wkz_station_t::get_besch( sint8 &rotation ) const
 {
 	char *haus = strdup( default_param );
 	const haus_tile_besch_t *ht = NULL;
@@ -2507,9 +2660,9 @@ bool wkz_station_t::init( karte_t *welt, spieler_t * )
 }
 
 
-image_id wkz_station_t::get_icon( spieler_t * )
+image_id wkz_station_t::get_icon( spieler_t * ) const
 {
-	if(  grund_t::underground_mode  ) {
+	if(  grund_t::underground_mode==grund_t::ugm_all  ) {
 		// in underground mode, buildings will be done invisible above ground => disallow such confusion
 		sint8 dummy;
 		const haus_besch_t *besch=get_besch(dummy);
@@ -2568,6 +2721,12 @@ const char *wkz_station_t::work( karte_t *welt, spieler_t *sp, koord3d pos )
 
 	sint8 rotation;
 	const haus_besch_t *besch=get_besch(rotation);
+	if(  grund_t::underground_mode==grund_t::ugm_all || (grund_t::underground_mode==grund_t::ugm_level && plan->get_kartenboden()->get_hoehe() > grund_t::underground_level) ) {
+		// in underground mode, buildings will be done invisible above ground => disallow such confusion
+		if(  besch->get_utyp()!=haus_besch_t::generic_stop  ||  besch->get_extra()==air_wt) {
+			return "Cannot built this station/building\nin underground mode here.";
+		}
+	}
 	const char *msg = NULL;
 	switch (besch->get_utyp()) {
 		case haus_besch_t::hafen:
@@ -2601,11 +2760,6 @@ const char *wkz_station_t::work( karte_t *welt, spieler_t *sp, koord3d pos )
 		default:
 			dbg->fatal("wkz_station_t::work()","tool called for illegal besch \"%\"", default_param );
 	}
-
-	if(msg==NULL) {
-		// no error? => recalc all station connections
-		welt->set_schedule_counter();
-	}
 	return msg;
 }
 
@@ -2629,11 +2783,10 @@ const char *wkz_roadsign_t::work( karte_t *welt, spieler_t *sp, koord3d k )
 	}
 	const char * error = "Hier kann kein\nSignal aufge-\nstellt werden!\n";
 	// search for starting ground
-	grund_t *gr=wkz_intern_koord_to_weg_grund(sp,welt,k.get_2d(),besch->get_wtyp());
+	grund_t *gr=wkz_intern_koord_to_weg_grund(sp,welt,k,besch->get_wtyp());
 	if(gr) {
 		// get the sign dirction
-		weg_t *weg = gr->get_weg(besch->get_wtyp());
-		signal_t *s = gr->find<signal_t>();
+		weg_t *weg = gr->get_weg( besch->get_wtyp()!=tram_wt ? besch->get_wtyp() : track_wt);		signal_t *s = gr->find<signal_t>();
 		if(s  &&  s->get_besch()!=besch) {
 			// only one sign per tile
 			return error;
@@ -2724,13 +2877,13 @@ built_sign:
 
 
 // built all types of depots
-const char *wkz_depot_t::wkz_depot_aux(karte_t *welt, spieler_t *sp, koord pos, const haus_besch_t *besch, waytype_t wegtype, sint64 cost)
+const char *wkz_depot_t::wkz_depot_aux(karte_t *welt, spieler_t *sp, koord3d pos, const haus_besch_t *besch, waytype_t wegtype, sint64 cost)
 {
-	if(welt->ist_in_kartengrenzen(pos)) {
+	if(welt->ist_in_kartengrenzen(pos.get_2d())) {
 		grund_t *bd=NULL;
 		// special for the seven seas ...
 		if(wegtype==water_wt) {
-			bd = welt->lookup_kartenboden(pos);
+			bd = welt->lookup_kartenboden(pos.get_2d());
 			if(!bd->ist_wasser()) {
 				bd = NULL;
 			}
@@ -2776,10 +2929,17 @@ const char *wkz_depot_t::wkz_depot_aux(karte_t *welt, spieler_t *sp, koord pos,
 				case ribi_t::west:  layout = 3;    break;
 			}
 			hausbauer_t::neues_gebaeude( welt, sp, bd->get_pos(), layout, besch );
-			sp->buche(cost, pos, COST_CONSTRUCTION);
+			sp->buche(cost, pos.get_2d(), COST_CONSTRUCTION);
 			if(sp == welt->get_active_player()) {
 				welt->set_werkzeug( general_tool[WKZ_ABFRAGE] );
 			}
+
+			struct sound_info info;
+			info.index = ok_sound;
+			info.volume = 255;
+			info.pri = 0;
+			sound_play(info);
+
 			return NULL;
 		}
 		return "Cannot built depot here!";
@@ -2823,13 +2983,13 @@ const char *wkz_depot_t::work( karte_t *welt, spieler_t *sp, koord3d k )
 	const haus_besch_t *besch = hausbauer_t::find_tile(default_param,0)->get_besch();
 	switch(besch->get_extra()) {
 		case road_wt:
-			return wkz_depot_t::wkz_depot_aux( welt, sp, k.get_2d(), besch, road_wt, welt->get_einstellungen()->cst_depot_road );
+			return wkz_depot_t::wkz_depot_aux( welt, sp, k, besch, road_wt, welt->get_einstellungen()->cst_depot_road );
 		case track_wt:
-			return wkz_depot_t::wkz_depot_aux( welt, sp, k.get_2d(), besch, track_wt, welt->get_einstellungen()->cst_depot_rail );
+			return wkz_depot_t::wkz_depot_aux( welt, sp, k, besch, track_wt, welt->get_einstellungen()->cst_depot_rail );
 		case monorail_wt:
 			{
 				// since it need also a foundations, this is slightly more complex ...
-				const char *err = wkz_depot_t::wkz_depot_aux( welt, sp, k.get_2d(), besch, monorail_wt, welt->get_einstellungen()->cst_depot_rail );
+				const char *err = wkz_depot_t::wkz_depot_aux( welt, sp, k, besch, monorail_wt, welt->get_einstellungen()->cst_depot_rail );
 				if(err==NULL) {
 					grund_t *bd = welt->lookup_kartenboden(k.get_2d());
 					if(bd->ist_natur()) {
@@ -2839,15 +2999,15 @@ const char *wkz_depot_t::work( karte_t *welt, spieler_t *sp, koord3d k )
 				return err;
 			}
 		case tram_wt:
-			return wkz_depot_t::wkz_depot_aux( welt, sp, k.get_2d(), besch, track_wt, welt->get_einstellungen()->cst_depot_rail );
+			return wkz_depot_t::wkz_depot_aux( welt, sp, k, besch, track_wt, welt->get_einstellungen()->cst_depot_rail );
 		case water_wt:
-			return wkz_depot_t::wkz_depot_aux( welt, sp, k.get_2d(), besch, water_wt, welt->get_einstellungen()->cst_depot_ship );
+			return wkz_depot_t::wkz_depot_aux( welt, sp, k, besch, water_wt, welt->get_einstellungen()->cst_depot_ship );
 		case air_wt:
-			return wkz_depot_t::wkz_depot_aux( welt, sp, k.get_2d(), besch, air_wt, welt->get_einstellungen()->cst_depot_air );
+			return wkz_depot_t::wkz_depot_aux( welt, sp, k, besch, air_wt, welt->get_einstellungen()->cst_depot_air );
 		case maglev_wt:
-			return wkz_depot_t::wkz_depot_aux( welt, sp, k.get_2d(), besch, maglev_wt, welt->get_einstellungen()->cst_depot_rail );
+			return wkz_depot_t::wkz_depot_aux( welt, sp, k, besch, maglev_wt, welt->get_einstellungen()->cst_depot_rail );
 		case narrowgauge_wt:
-			return wkz_depot_t::wkz_depot_aux( welt, sp, k.get_2d(), besch, narrowgauge_wt, welt->get_einstellungen()->cst_depot_rail );
+			return wkz_depot_t::wkz_depot_aux( welt, sp, k, besch, narrowgauge_wt, welt->get_einstellungen()->cst_depot_rail );
 		default:
 			dbg->fatal("wkz_depot()","called with unknown besch %s",besch->get_name() );
 			return "";
@@ -2881,7 +3041,7 @@ bool wkz_build_haus_t::init( karte_t *welt, spieler_t * )
 const char *wkz_build_haus_t::work( karte_t *welt, spieler_t *sp, koord3d pos )
 {
 	const grund_t* gr = welt->lookup_kartenboden(pos.get_2d());
-	if(gr==NULL) {
+	if(gr==NULL || !gr->is_visible()) {
 		return "";
 	}
 
@@ -2963,7 +3123,7 @@ bool wkz_build_industries_land_t::init( karte_t *welt, spieler_t * )
 const char *wkz_build_industries_land_t::work( karte_t *welt, spieler_t *sp, koord3d k )
 {
 	const grund_t* gr = welt->lookup_kartenboden(k.get_2d());
-	if(gr==NULL) {
+	if(gr==NULL || !gr->is_visible()) {
 		return "";
 	}
 
@@ -3060,7 +3220,7 @@ bool wkz_build_industries_city_t::init( karte_t *welt, spieler_t * )
 const char *wkz_build_industries_city_t::work( karte_t *welt, spieler_t *sp, koord3d k )
 {
 	const grund_t* gr = welt->lookup_kartenboden(k.get_2d());
-	if(gr==NULL) {
+	if(gr==NULL|| !gr->is_visible()) {
 		return "";
 	}
 
@@ -3133,7 +3293,7 @@ bool wkz_build_factory_t::init( karte_t *welt, spieler_t * )
 const char *wkz_build_factory_t::work( karte_t *welt, spieler_t *sp, koord3d k )
 {
 	const grund_t* gr = welt->lookup_kartenboden(k.get_2d());
-	if(gr==NULL) {
+	if(gr==NULL|| !gr->is_visible()) {
 		return "";
 	}
 
@@ -3291,8 +3451,18 @@ DBG_MESSAGE("wkz_headquarter()", "building headquarter at (%d,%d)", pos.x, pos.y
 		return "";
 	}
 
-	if(welt->ist_in_kartengrenzen(pos.get_2d())) {
+	koord size = besch->get_groesse();
+	const sint64 cost = welt->get_einstellungen()->cst_multiply_headquarter * besch->get_level() * size.x * size.y;
+	if(  -cost > sp->get_finance_history_month(0,COST_CASH)  ) {
+		return "Not enough money!";
+	}
 
+	if(welt->ist_in_kartengrenzen(pos.get_2d())) {
+		// check for underground ..
+		grund_t *gr = welt->lookup_kartenboden(pos.get_2d());
+		if (!gr || !gr->is_visible()) {
+			return "";
+		}
 		// remove previous one
 		koord previous = sp->get_headquarter_pos();
 		if(previous!=koord::invalid) {
@@ -3302,7 +3472,6 @@ DBG_MESSAGE("wkz_headquarter()", "building headquarter at (%d,%d)", pos.x, pos.y
 			hausbauer_t::remove( welt, sp, prev_hq );
 		}
 
-		koord size = besch->get_groesse();
 		int rotate = 0;
 
 		if(welt->ist_platz_frei(pos.get_2d(), size.x, size.y, NULL, besch->get_allowed_climate_bits())) {
@@ -3321,7 +3490,7 @@ DBG_MESSAGE("wkz_headquarter()", "building headquarter at (%d,%d)", pos.x, pos.y
 				city->add_gebaeude_to_stadt( hq );
 			}
 			sp->add_headquarter( besch->get_extra()+1, pos.get_2d() );
-			sp->buche(welt->get_einstellungen()->cst_multiply_headquarter * besch->get_level() * size.x * size.y, pos.get_2d(), COST_CONSTRUCTION);
+			sp->buche( cost, pos.get_2d(), COST_CONSTRUCTION);
 			if(sp == welt->get_active_player()) {
 				welt->set_werkzeug( werkzeug_t::general_tool[WKZ_ABFRAGE] );
 			}
@@ -3340,7 +3509,7 @@ const char *wkz_add_citycar_t::work( karte_t *welt, spieler_t *sp, koord3d k )
 		// No citycar
 		return "";
 	}
-	grund_t *gr = wkz_intern_koord_to_weg_grund( sp, welt, k.get_2d(), road_wt );
+	grund_t *gr = wkz_intern_koord_to_weg_grund( sp, welt, k, road_wt );
 
 	if(  gr != NULL  &&  ribi_t::is_twoway(gr->get_weg_ribi_unmasked(road_wt))  &&  gr->find<stadtauto_t>() == NULL) {
 		// add citycar
@@ -3352,90 +3521,48 @@ const char *wkz_add_citycar_t::work( karte_t *welt, spieler_t *sp, koord3d k )
 	return "";
 }
 
-
-bool wkz_forest_t::init( karte_t *welt, spieler_t * )
+uint8 wkz_forest_t::is_valid_pos( karte_t *welt, spieler_t *, const koord3d &pos, const char *&error )
 {
-	welt->show_distance = start = koord3d::invalid;
-
-	if(marked!=NULL) {
-		marked->mark_image_dirty( cursor, 0 );
-		delete marked;
-		marked = NULL;
-	}
-	return true;
+	// do really nothing ...
+	return 2;
 }
 
-const char *wkz_forest_t::move(karte_t *welt, spieler_t *sp, uint16 buttonstate, koord3d pos )
+void wkz_forest_t::mark_tiles( karte_t *welt, spieler_t *sp, const koord3d &start, const koord3d &end )
 {
-	// on map?
-	const planquadrat_t *plan = welt->lookup(pos.get_2d());
-
-	if(plan == NULL) {
-		return "";
-	}
-	grund_t* gr = welt->lookup_kartenboden(pos.get_2d());
-
-	if(buttonstate==1) {
-		// delete old area
-		if(marked!=NULL) {
-			welt->mark_area(nw, wh, false);
-		}
-
-		if(start==koord3d::invalid) {
-			welt->show_distance = start = gr->get_pos();
-			marked = new zeiger_t(welt, start, sp);
-			marked->set_bild( cursor );
-			gr->obj_add(marked);
-		}
-		else {
-			nw = gr->get_pos();
+	koord min, max;
+	min.x = start.x < end.x ? start.x : end.x;
+	min.y = start.y < end.y ? start.y : end.y;
+	max.x = start.x + end.x - min.x;
+	max.y = start.y + end.y - min.y;
+	koord pos;
+	for( pos.x = min.x; pos.x <= max.x; pos.x++ ) {
+		for( pos.y = min.y; pos.y <= max.y; pos.y++ ) {
+			grund_t *gr = welt->lookup_kartenboden( pos );
 
-			wh.x = abs(nw.x-start.x)+1;
-			wh.y = abs(nw.y-start.y)+1;
-			nw.x = min(start.x, nw.x);
-			nw.y = min(start.y, nw.y);
+			uint8 hang = gr->get_grund_hang() | gr->get_weg_hang();
+			uint8 back_hang = (hang&1) + ((hang>>1)&6)+8;
 
-			welt->mark_area(nw, wh, true);
+			zeiger_t *marker = new zeiger_t( welt, gr->get_pos(), sp );
+			marker->set_after_bild( grund_besch_t::marker->get_bild( gr->get_grund_hang()&7 ) );
+			marker->set_bild( grund_besch_t::marker->get_bild( back_hang ) );
+			marker->mark_image_dirty( marker->get_bild(), 0 );
+			gr->obj_add( marker );
+			marked.insert( marker );
 		}
 	}
-	return NULL;
 }
 
-const char *wkz_forest_t::work(karte_t *welt, spieler_t *sp, koord3d pos )
+const char *wkz_forest_t::do_work( karte_t *welt, spieler_t *sp, const koord3d &start, const koord3d &end )
 {
-	grund_t* gr = welt->lookup_kartenboden(pos.get_2d());
-	if(!gr) {
-		return "";
-	}
+	koord wh, nw;
+	wh.x = abs(end.x-start.x)+1;
+	wh.y = abs(end.y-start.y)+1;
+	nw.x = min(start.x, end.x)+(wh.x/2);
+	nw.y = min(start.y, end.y)+(wh.y/2);
 
-	if(start==koord3d::invalid) {
-		welt->show_distance = start = gr->get_pos();
+	sint64 costs = baum_t::create_forest( welt, nw, wh );
+	spieler_t::accounting( sp, costs*welt->get_einstellungen()->cst_remove_tree, end.get_2d(), COST_CONSTRUCTION );
 
-		marked = new zeiger_t(welt, start, sp);
-		marked->set_bild( cursor );
-		gr->obj_add(marked);
-	}
-	else {
-		if(marked!=NULL) {
-			welt->mark_area(nw, wh, false);
-		}
-
-		nw = gr->get_pos();
-
-		wh.x = abs(nw.x-start.x)+1;
-		wh.y = abs(nw.y-start.y)+1;
-		nw.x = min(start.x, nw.x)+(wh.x/2);
-		nw.y = min(start.y, nw.y)+(wh.y/2);
-
-		// remove old pointers
-		init(welt,sp);
-
-		sint64 costs = baum_t::create_forest( welt, nw.get_2d(), wh );
-		spieler_t::accounting( sp, costs*welt->get_einstellungen()->cst_remove_tree, pos.get_2d(), COST_CONSTRUCTION );
-
-		// then init
-		init( welt, sp );
-	}
 	return NULL;
 }
 
@@ -3454,182 +3581,197 @@ bool wkz_stop_moving_t::init( karte_t *, spieler_t * )
 	}
 	return true;
 }
+// checks if the given ground is suitable for stop moving
+bool wkz_stop_moving_check_grund(grund_t *bd, spieler_t *sp) {
+	// ignore invisible tiles
+	if(!bd->is_visible()) {
+		return(false);
+	}
+	// must be on a way or in the sea?
+	if(!bd->ist_wasser()) {
+		weg_t *w1 = bd->get_weg_nr(0);
+		if(  w1==NULL  ||  !spieler_t::check_owner( w1->get_besitzer(), sp )  ) {
+			// fails, if no way
+			return false;
+		}
+		weg_t *w2 = bd->get_weg_nr(1);
+		if(  w2  &&  !spieler_t::check_owner( w2->get_besitzer(), sp )  ) {
+			// this only fails, if wrong owner
+			return false;
+		}
+	}
+	// ok, now we have old_stop
+	return true;
+}
 
 const char *wkz_stop_moving_t::work( karte_t *welt, spieler_t *sp, koord3d pos )
 {
 	// now we can start
-	const planquadrat_t *pl = welt->lookup(pos.get_2d());
-	if(pl) {
-		const bool backwards=event_get_last_control_shift()==2;
-		const grund_t *bd=0;
-		// search all grounds for match
-		halthandle_t h = pl->get_halt();
-		if(last_pos!=koord3d::invalid  &&  (h.is_bound() ^ last_halt.is_bound())) {
-			init(welt,sp);
-			return "Can only move from halt to halt or waypoint to waypoint.";
-		}
-		if(h.is_bound()  &&  !spieler_t::check_owner( sp, pl->get_haltlist()[0]->get_besitzer())) {
-			init(welt,sp);
-			return "Das Feld gehoert\neinem anderen Spieler\n";
+	grund_t *bd = welt->lookup(pos);
+	if (bd==NULL || !bd->is_visible()) {
+		return "";
+	}
+
+	// check halts vs waypoints
+	halthandle_t h = haltestelle_t::get_halt(welt,pos,sp);
+	if(last_pos!=koord3d::invalid  &&  (h.is_bound() ^ last_halt.is_bound())) {
+		init(welt,sp);
+		return "Can only move from halt to halt or waypoint to waypoint.";
+	}
+	if(  h.is_bound()  &&  !spieler_t::check_owner( sp, h->get_besitzer() )  ) {
+		init(welt,sp);
+		return "Das Feld gehoert\neinem anderen Spieler\n";
+	}
+
+	// ok, now we have old_stop
+	if(  h.is_bound()  &&  !(bd->is_halt()  ||  (h->get_station_type()&haltestelle_t::dock  &&  bd->ist_wasser())  )  ) {
+		// not this halt ...
+		return "No suitable ground! 1";
+	}
+	// check waytypes
+	if(  waytype[0] == invalid_wt  &&  (bd->ist_wasser()  ||  bd->hat_wege())  ) {
+		// ok;
+	}
+	else {
+		if(  (waytype[0] == water_wt  &&  bd->ist_wasser())  ||  bd->hat_weg(waytype[0])  ||  bd->hat_weg(waytype[1])  ) {
+		// ok;
 		}
+		else
+			return "No suitable ground! 3";
+	}
 
-		for(  unsigned cnt=0;  cnt<pl->get_boden_count();  cnt++  ) {
-			// with control backwards
-			const unsigned i = (backwards) ? pl->get_boden_count()-1-cnt : cnt;
-			bd = pl->get_boden_bei(i);
-			// ignore tunnel (can be set with Underground mode)
-			if(bd->ist_im_tunnel()) {
-				bd = 0;
-				continue;
-			}
-			// must be on a way or in the sea?
-			if(!bd->ist_wasser()) {
-				weg_t *w1 = bd->get_weg_nr(0);
-				if(  w1==NULL  ||  !spieler_t::check_owner( w1->get_besitzer(), sp )  ) {
-					// fails, if no way
-					bd = 0;
-					continue;
-				}
-				weg_t *w2 = bd->get_weg_nr(1);
-				if(  w2  &&  !spieler_t::check_owner( w2->get_besitzer(), sp )  ) {
-					// this only fails, if wrong owner
-					bd = 0;
-					continue;
-				}
-			}
-			// ok, now we have old_stop
-			break;
+
+	if(  last_pos == koord3d::invalid  ) {
+		// put cursor
+		last_pos = bd->get_pos();
+		last_halt = h;
+		if(bd->ist_wasser()) {
+			waytype[0] = water_wt;
 		}
-		if(bd==NULL) {
-			// here we failed
-			return "";
+		else {
+			waytype[0] = bd->get_weg_nr(0)->get_waytype();
+			if(bd->get_weg_nr(1)) {
+				waytype[1] = bd->get_weg_nr(1)->get_waytype();
+			}
 		}
+		wkz_linkzeiger = new zeiger_t(welt, last_pos, sp);
+		wkz_linkzeiger->set_bild( cursor );
+		bd->obj_add(wkz_linkzeiger);
+	}
+	else {
+		// second click
+		pos = bd->get_pos();
+		const halthandle_t new_halt = h;
+		// depending on the waytype we simply built replacements lists
+		// in the wort case we have to iterate over all tiles twice ...
+		for(  uint i=0;  i<2;  i++  ) {
+			const waytype_t wt = waytype[i];
+			slist_tpl <koord3d>old_platform;
 
-		if(last_pos == koord3d::invalid) {
-			// put cursor
-			last_pos = bd->get_pos();
-			last_halt = bd->ist_wasser() ?  haltestelle_t::get_halt(welt,last_pos) : bd->get_halt();
 			if(bd->ist_wasser()) {
-				waytype[0] = water_wt;
-			}
-			else {
-				waytype[0] = bd->get_weg_nr(0)->get_waytype();
-				if(bd->get_weg_nr(1)) {
-					waytype[1] = bd->get_weg_nr(1)->get_waytype();
+				if(wt!=water_wt) {
+					break;
 				}
 			}
-			grund_t *gr = welt->lookup_kartenboden(last_pos.get_2d());
-			wkz_linkzeiger = new zeiger_t(welt, last_pos, sp);
-			wkz_linkzeiger->set_bild( cursor );
-			gr->obj_add(wkz_linkzeiger);
-		}
-		else {
-			// second click
-			pos = bd->get_pos();
-			const halthandle_t new_halt = haltestelle_t::get_halt(welt,pos);
-			// depending on the waytype we simply built replacements lists
-			// in the wort case we have to iterate over all tiles twice ...
-			for(  uint i=0;  i<2;  i++  ) {
-				const waytype_t wt = waytype[i];
-				slist_tpl <koord3d>old_platform;
-
-				if(bd->ist_wasser()) {
-					if(wt!=water_wt) {
-						break;
-					}
-				}
-				else if(!bd->hat_weg(wt)) {
-					continue;
-				}
-				// platform, stop or just tile moving?
-				const bool catch_all_halt = (wt==water_wt  ||  wt==air_wt)  &&  last_halt.is_bound();
-				if(!last_halt.is_bound()) {
+			else if(!bd->hat_weg(wt)) {
+				continue;
+			}
+			// platform, stop or just tile moving?
+			const bool catch_all_halt = (wt==water_wt  ||  wt==air_wt)  &&  last_halt.is_bound();
+			if(!last_halt.is_bound()) {
+				old_platform.append(last_pos);
+			}
+			else if(!catch_all_halt) {
+				// builds a coordinate list
+				if(wt==road_wt) {
 					old_platform.append(last_pos);
 				}
-				else if(!catch_all_halt) {
-					// builds a coordinate list
-					if(wt==road_wt) {
-						old_platform.append(last_pos);
-					}
-					else {
-						// all connected tiles for start pos
-						uint8 ribi = welt->lookup(last_pos)->get_weg_ribi_unmasked(wt);
-						koord delta = ribi_t::ist_gerade_ns(ribi) ? koord(0,1) : koord(1,0);
-						koord3d start_pos=last_pos;
-						while(ribi&12) {
-							koord3d test_pos = start_pos+delta;
-							grund_t *gr = welt->lookup(test_pos);
-							if(!gr  ||  !gr->is_halt()  ||  (ribi=gr->get_weg_ribi_unmasked(wt))==0) {
-								break;
-							}
-							start_pos = test_pos;
-						}
-						// now add all of them
-						while(ribi&3) {
-							koord3d test_pos = start_pos-delta;
-							grund_t *gr = welt->lookup(test_pos);
-							old_platform.append(start_pos);
-							if(!gr  ||  !gr->is_halt()  ||  (ribi=gr->get_weg_ribi_unmasked(wt))==0) {
-								break;
-							}
-							start_pos = test_pos;
+				else {
+					// all connected tiles for start pos
+					uint8 ribi = welt->lookup(last_pos)->get_weg_ribi_unmasked(wt);
+					koord delta = ribi_t::ist_gerade_ns(ribi) ? koord(0,1) : koord(1,0);
+					koord3d start_pos=last_pos;
+					while(ribi&12) {
+						koord3d test_pos = start_pos+delta;
+						grund_t *gr = welt->lookup(test_pos);
+						if(!gr  ||  !gr->is_halt()  ||  (ribi=gr->get_weg_ribi_unmasked(wt))==0) {
+							break;
 						}
+						start_pos = test_pos;
 					}
-				}
-
-				// first, check convoi without line
-				for (vector_tpl<convoihandle_t>::const_iterator i = welt->convois_begin(), end = welt->convois_end(); i != end; ++i) {
-					convoihandle_t cnv = *i;
-					// check line and owner
-					if(!cnv->get_line().is_bound()  &&  cnv->get_besitzer()==sp) {
-						schedule_t *fpl = cnv->get_schedule();
-						// check waytype
-						if(fpl  &&  fpl->ist_halt_erlaubt(bd)) {
-							bool updated = false;
-							for(  int k=0;  k<fpl->get_count();  k++  ) {
-								if(  (catch_all_halt  &&  haltestelle_t::get_halt(welt,fpl->eintrag[k].pos)==last_halt)  ||  old_platform.is_contained(fpl->eintrag[k].pos)  ) {
-									fpl->eintrag[k].pos = pos;
-									updated = true;
-								}
-							}
-							if(updated) {
-								fpl->cleanup();
-								// set this schedule
-								cnv->set_schedule(fpl);
-							}
+					// now add all of them
+					while(ribi&3) {
+						koord3d test_pos = start_pos-delta;
+						grund_t *gr = welt->lookup(test_pos);
+						old_platform.append(start_pos);
+						if(!gr  ||  !gr->is_halt()  ||  (ribi=gr->get_weg_ribi_unmasked(wt))==0) {
+							break;
 						}
+						start_pos = test_pos;
 					}
 				}
-				// next, check lines serving old_halt (no owner check needed for own lines ...
-				vector_tpl<linehandle_t>lines;
-				sp->simlinemgmt.get_lines(simline_t::line,&lines);
-				for (vector_tpl<linehandle_t>::const_iterator i = lines.begin(), end = lines.end(); i != end; ++i) {
-					linehandle_t line = (*i);
-					schedule_t *fpl = line->get_schedule();
+			}
+
+			// first, check convoi without line
+			for (vector_tpl<convoihandle_t>::const_iterator i = welt->convois_begin(), end = welt->convois_end(); i != end; ++i) {
+				convoihandle_t cnv = *i;
+				// check line and owner
+				if(!cnv->get_line().is_bound()  &&  cnv->get_besitzer()==sp) {
+					schedule_t *fpl = cnv->get_schedule();
 					// check waytype
-					if(fpl->ist_halt_erlaubt(bd)) {
+					if(fpl  &&  fpl->ist_halt_erlaubt(bd)) {
 						bool updated = false;
 						for(  int k=0;  k<fpl->get_count();  k++  ) {
-							// ok!
-							if(  (catch_all_halt  &&  haltestelle_t::get_halt(welt,fpl->eintrag[k].pos)==last_halt)  ||  old_platform.is_contained(fpl->eintrag[k].pos)  ) {
+							if(  (catch_all_halt  &&  haltestelle_t::get_halt(welt,fpl->eintrag[k].pos,cnv->get_besitzer())==last_halt)  ||  old_platform.is_contained(fpl->eintrag[k].pos)  ) {
 								fpl->eintrag[k].pos = pos;
 								updated = true;
 							}
 						}
-						// update line
 						if(updated) {
 							fpl->cleanup();
-							sp->simlinemgmt.update_line(line);
+							if(  !fpl->ist_abgeschlossen()  ) {
+								// schedule is not owned by schedule window ...
+								// ... thus we can set this schedule
+								cnv->set_schedule(fpl);
+								// otherwise the schedule window will reset it
+							}
 						}
 					}
 				}
 			}
-			// since factory connections may have changed
-			welt->set_schedule_counter();
-			//ok! they are connected => remove marker
-			init( welt, sp );
-			return NULL;
+			// next, check lines serving old_halt (no owner check needed for own lines ...
+			vector_tpl<linehandle_t>lines;
+			sp->simlinemgmt.get_lines(simline_t::line,&lines);
+			for (vector_tpl<linehandle_t>::const_iterator i = lines.begin(), end = lines.end(); i != end; ++i) {
+				linehandle_t line = (*i);
+				schedule_t *fpl = line->get_schedule();
+				// check waytype
+				if(fpl->ist_halt_erlaubt(bd)) {
+					bool updated = false;
+					for(  int k=0;  k<fpl->get_count();  k++  ) {
+						// ok!
+						if(  (catch_all_halt  &&  haltestelle_t::get_halt(welt,fpl->eintrag[k].pos,line->get_besitzer())==last_halt)  ||  old_platform.is_contained(fpl->eintrag[k].pos)  ) {
+							fpl->eintrag[k].pos = pos;
+							updated = true;
+						}
+					}
+					// update line
+					if(updated) {
+						fpl->cleanup();
+						// remove line from old stop is needed at here
+						if(last_halt.is_bound()) {
+							last_halt->remove_line(line);
+						}
+						sp->simlinemgmt.update_line(line);
+					}
+				}
+			}
 		}
+		// since factory connections may have changed
+		welt->set_schedule_counter();
+		//ok! they are connected => remove marker
+		init( welt, sp );
+		return NULL;
 	}
 	return "";
 
@@ -3655,8 +3797,7 @@ const char *wkz_daynight_level_t::get_tooltip(spieler_t *) {
 }
 
 bool wkz_daynight_level_t::init( karte_t *, spieler_t * ) {
-	if(grund_t::underground_mode  ||  umgebung_t::night_shift) {
-		return false;
+	if(grund_t::underground_mode==grund_t::ugm_all  ||  umgebung_t::night_shift) {		return false;
 	}
 	if(default_param) {
 		if(default_param[0]=='+'  &&  umgebung_t::daynight_level > 0) {
@@ -3726,3 +3867,203 @@ const char *wkz_make_stop_public_t::work( karte_t *welt, spieler_t *sp, koord3d
 	return NULL;
 }
 
+
+
+sint8 wkz_show_underground_t::save_underground_level = -128;
+
+bool wkz_show_underground_t::init( karte_t *welt, spieler_t * )
+{
+	koord3d zpos = welt->get_zeiger()->get_pos();
+	// move zeiger to invalid position -> unmark tiles
+	welt->get_zeiger()->change_pos( koord3d::invalid);
+
+	sint8 old_underground_level = grund_t::underground_level;
+
+	// map needs update?
+	bool ok = true;
+	// need an extra click?
+	bool needs_click = false;
+
+	// default default-param = U for backward compatibility
+	if (default_param == NULL) {
+		default_param = strdup("U");
+	}
+	// now check the default parameter
+	switch(default_param[0]) {
+		// toggle sliced view by toolbar - height taken from extra mouse click
+		case 'C':
+			if(grund_t::underground_mode==grund_t::ugm_level) {
+				grund_t::set_underground_mode( grund_t::ugm_none, 0);
+			}
+			else if(grund_t::underground_mode==grund_t::ugm_none) {
+				needs_click = true;
+				ok = false;
+			}
+			else {
+				ok = false;
+			}
+			break;
+		// decrease slice level
+		case 'D':
+			if(grund_t::underground_mode==grund_t::ugm_level) {
+				if(  grund_t::underground_level>welt->get_grundwasser()-5  ) {
+					grund_t::underground_level --;
+				}
+			}
+			else {
+				ok = false;
+			}
+			break;
+		// increase slice level
+		case 'I':
+			if(grund_t::underground_mode==grund_t::ugm_level) {
+				if(  grund_t::underground_level<20  ) {
+					grund_t::underground_level ++;
+				}
+			}
+			else {
+				ok = false;
+			}
+			break;
+
+		// toggle sliced view by keyboard - height taken from cursor
+		case 'K':
+			if(grund_t::underground_mode==grund_t::ugm_level) {
+				// switch to normal or full-underground
+				grund_t::set_underground_mode( grund_t::ugm_none, 0);
+			}
+			else if(grund_t::underground_mode==grund_t::ugm_none) {
+				grund_t::set_underground_mode( grund_t::ugm_level, zpos.z);
+			}
+			else {
+				ok = false;
+			}
+			break;
+
+		//  switch between full underground or normal/sliced view
+		case 'U':
+			if (grund_t::underground_mode==grund_t::ugm_all) {
+				// check if the old level is valid then switch back to sliced view
+				if (-128<save_underground_level && save_underground_level<127) {
+					grund_t::set_underground_mode(grund_t::ugm_level, save_underground_level);
+				}
+				else {
+					grund_t::set_underground_mode(grund_t::ugm_none, 0);
+				}
+			}
+			else {
+				grund_t::set_underground_mode( grund_t::ugm_all, 0);
+			}
+			break;
+
+		default:
+			dbg->error( "wkz_show_underground_t::init()", "Unknown command string \"%s\"", default_param );
+
+	}
+
+	// move zeiger back
+	welt->get_zeiger()->change_pos( zpos);
+
+	if (ok) {
+		save_underground_level = old_underground_level;
+
+		// renew toolbar
+		werkzeug_t::update_toolbars(welt);
+
+		// recalc all images on map
+		welt->update_map();
+	}
+	return needs_click;
+}
+
+const char *wkz_show_underground_t::work( karte_t *welt, spieler_t *sp, koord3d pos)
+{
+	koord3d zpos = welt->get_zeiger()->get_pos();
+	// move zeiger to invalid position -> unmark tiles
+	welt->get_zeiger()->change_pos( koord3d::invalid);
+
+	save_underground_level = grund_t::underground_level;
+	grund_t::set_underground_mode( grund_t::ugm_level, pos.z);
+
+	// move zeiger back
+	welt->get_zeiger()->change_pos( zpos);
+
+	// renew toolbar
+	werkzeug_t::update_toolbars(welt);
+
+	// recalc all images on map
+	welt->update_map();
+
+	if(sp == welt->get_active_player()) {
+		welt->set_werkzeug( general_tool[WKZ_ABFRAGE] );
+	}
+
+	return NULL;
+}
+
+const char *wkz_show_underground_t::get_tooltip(spieler_t *)
+{
+	// default default-param = U for backward compatibility
+	if(  default_param == NULL  ) {
+		default_param = strdup("U");
+	}
+	// now check the default parameter
+	switch(default_param[0]) {
+		// toggle sliced view by toolbar - height taken from extra mouse click
+		case 'C':
+			return translator::translate("sliced underground mode");
+		// decrease slice level
+		case 'D':
+			return translator::translate("decrease underground view level");
+		// increase slice level
+		case 'I':
+			return translator::translate("increase underground view level");
+		// toggle sliced view by keyboard - height taken from cursor
+		case 'K':
+			return translator::translate("sliced underground mode");
+		//  switch between full underground or normal/sliced view
+		case 'U':
+		default:
+			return translator::translate("underground mode");
+	}
+}
+
+bool wkz_show_underground_t::is_selected(karte_t *) const
+{
+	// default default-param = U for backward compatibility
+	if(  default_param == NULL  ) {
+		return grund_t::underground_mode==grund_t::ugm_all;
+	}
+	// now check the default parameter
+	switch(default_param[0]) {
+		// toggle sliced view by toolbar - height taken from extra mouse click
+		case 'C':
+			return grund_t::underground_mode==grund_t::ugm_level;
+		// decrease slice level
+		case 'D':
+			return false;
+		// increase slice level
+		case 'I':
+			return false;
+		// toggle sliced view by keyboard - height taken from cursor
+		case 'K':
+			return grund_t::underground_mode==grund_t::ugm_level;
+		//  switch between full underground or normal/sliced view
+		case 'U':
+			return grund_t::underground_mode==grund_t::ugm_all;
+	}
+	return false;
+}
+
+void wkz_show_underground_t::draw_after( karte_t *welt, koord pos ) const
+{
+	if(  icon!=IMG_LEER  &&  is_selected(welt)  ) {
+		display_img_blend( icon, pos.x, pos.y, TRANSPARENT50_FLAG|OUTLINE_FLAG|COL_BLACK, false, true );
+		// additionall show level in sliced mode
+		if(  default_param!=NULL  &&  grund_t::underground_mode==grund_t::ugm_level  ) {
+			char level_str[16];
+			sprintf( level_str, "%i", grund_t::underground_level );
+			display_proportional( pos.x+4, pos.y+4, level_str, ALIGN_LEFT, COL_YELLOW, true );
+		}
+	}
+}
diff --git a/simwerkz.h b/simwerkz.h
index d889ef2..0d64b82 100644
--- a/simwerkz.h
+++ b/simwerkz.h
@@ -8,7 +8,6 @@
 #define simwerkz2_h
 
 #include "simtypes.h"
-#include "simwerkz.h"
 #include "simskin.h"
 #include "simsound.h"
 #include "simworld.h"
@@ -22,6 +21,7 @@
 #include "dataobj/umgebung.h"
 #include "dataobj/translator.h"
 
+#include "dings/baum.h"
 
 #include "gui/factory_edit.h"
 #include "gui/curiosity_edit.h"
@@ -49,6 +49,7 @@
 #include "gui/curiositylist_frame_t.h"
 #include "gui/enlarge_map_frame_t.h"
 #include "gui/labellist_frame_t.h"
+#include "gui/climates.h"
 
 #include "tpl/slist_tpl.h"
 
@@ -58,6 +59,7 @@ class koord;
 class toolbar_t;
 class werkzeug_waehler_t;
 class wegbauer_t;
+class weg_besch_t;
 
 /****************************** helper functions: *****************************/
 
@@ -75,7 +77,7 @@ class wkz_abfrage_t : public werkzeug_t {
 // remove uppermost object from tile
 class wkz_remover_t : public werkzeug_t {
 private:
-	static bool wkz_remover_intern(spieler_t *sp, karte_t *welt, koord pos, const char *&msg);
+	static bool wkz_remover_intern(spieler_t *sp, karte_t *welt, koord3d pos, const char *&msg);
 public:
 	const char *get_tooltip(spieler_t *) { return translator::translate("Abriss"); }
 	const char *work( karte_t *, spieler_t *, koord3d );
@@ -88,8 +90,8 @@ private:
 	sint16 drag_height;
 public:
 	wkz_raise_t() : werkzeug_t() { offset = Z_GRID; }
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
 	const char *get_tooltip(spieler_t *sp) { return tooltip_with_price("Anheben", sp->get_welt()->get_einstellungen()->cst_alter_land); }
+	virtual image_id get_icon(spieler_t *) const { return grund_t::underground_mode==grund_t::ugm_all ? IMG_LEER : icon; }
 	bool init( karte_t *, spieler_t * ) { is_dragging = false; return true; }
 	bool exit( karte_t *, spieler_t * ) { is_dragging = false; return true; }
 	const char *work( karte_t *, spieler_t *, koord3d );
@@ -102,8 +104,8 @@ private:
 	sint16 drag_height;
 public:
 	wkz_lower_t() : werkzeug_t() { offset = Z_GRID; }
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
 	const char *get_tooltip(spieler_t *sp) { return tooltip_with_price("Absenken", sp->get_welt()->get_einstellungen()->cst_alter_land); }
+	virtual image_id get_icon(spieler_t *) const { return grund_t::underground_mode==grund_t::ugm_all ? IMG_LEER : icon; }
 	bool init( karte_t *, spieler_t * ) { is_dragging = false; return true; }
 	bool exit( karte_t *, spieler_t * ) { is_dragging = false; return true; }
 	virtual const char *work( karte_t *, spieler_t *, koord3d);
@@ -113,16 +115,14 @@ public:
 /* slope tool definitions */
 class wkz_setslope_t : public werkzeug_t {
 public:
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
-	static const char *wkz_set_slope_work( karte_t *welt, spieler_t *sp, koord pos, int slope );
+	static const char *wkz_set_slope_work( karte_t *welt, spieler_t *sp, koord3d pos, int slope );
 	const char *get_tooltip(spieler_t *sp) { return tooltip_with_price("Built artifical slopes", sp->get_welt()->get_einstellungen()->cst_set_slope); }
-	virtual const char *work( karte_t *welt, spieler_t *sp, koord3d k ) { return wkz_set_slope_work( welt, sp, k.get_2d(), atoi(default_param) ); }
+	virtual const char *work( karte_t *welt, spieler_t *sp, koord3d k ) { return wkz_set_slope_work( welt, sp, k, atoi(default_param) ); }
 };
 
 class wkz_restoreslope_t : public werkzeug_t {
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
 	const char *get_tooltip(spieler_t *sp) { return tooltip_with_price("Restore natural slope", sp->get_welt()->get_einstellungen()->cst_set_slope); }
-	virtual const char *work( karte_t *welt, spieler_t *sp, koord3d k ) { return wkz_setslope_t::wkz_set_slope_work( welt, sp, k.get_2d(), RESTORE_SLOPE ); }
+	virtual const char *work( karte_t *welt, spieler_t *sp, koord3d k ) { return wkz_setslope_t::wkz_set_slope_work( welt, sp, k, RESTORE_SLOPE ); }
 };
 
 class wkz_marker_t : public werkzeug_t {
@@ -139,29 +139,31 @@ class wkz_clear_reservation_t : public werkzeug_t {
 
 class wkz_transformer_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *);
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
 	virtual const char *work( karte_t *, spieler_t *, koord3d );
 };
 
 class wkz_add_city_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *sp) { return tooltip_with_price( "Found new city", sp->get_welt()->get_einstellungen()->cst_found_city ); }
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
 	virtual const char *work( karte_t *, spieler_t *, koord3d );
 };
 
+// buy a house to protext it from renovating
+class wkz_buy_house_t : public werkzeug_t {
+public:
+	const char *get_tooltip(spieler_t *) { return translator::translate("Haus kaufen"); }
+	const char *work( karte_t *, spieler_t *, koord3d );
+};
 /************** the following tools need a valid default_param ************************/
 
 // step size by default_param
 class wkz_change_city_size_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate( atoi(default_param)>=0 ? "Grow city" : "Shrink city" ); }
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
 	bool init( karte_t *, spieler_t * );
 	virtual const char *work( karte_t *, spieler_t *, koord3d );
 };
 
 class wkz_plant_tree_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate( "Plant tree" ); }
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
 	virtual const char *move( karte_t *welt, spieler_t *sp, uint16 b, koord3d k ) { return b==1 ? work(welt,sp,k) : NULL; }
 	virtual const char *work( karte_t *, spieler_t *, koord3d );
 };
@@ -177,67 +179,79 @@ class wkz_fahrplan_ins_t : public werkzeug_t {
 	virtual const char *work( karte_t *welt, spieler_t *sp, koord3d k );
 };
 
-class wkz_wegebau_t : public werkzeug_t {
+class wkz_wegebau_t : public two_click_werkzeug_t {
 private:
 	static const weg_besch_t *defaults[17];	// default ways for all types
-	koord3d start;
-	zeiger_t *wkz_wegebau_bauer;
-	slist_tpl <zeiger_t *>marked;
 	const weg_besch_t *besch;
-	const weg_besch_t *get_besch(bool);
+	const weg_besch_t *get_besch(karte_t *,bool) const;
 public:
-	wkz_wegebau_t() : werkzeug_t() { wkz_wegebau_bauer=NULL; }
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
-	const char *get_tooltip(spieler_t *);
-	bool init( karte_t *, spieler_t * );
-	bool exit( karte_t *w, spieler_t *s ) { return init(w,s); }
-	const char *work( karte_t *, spieler_t *, koord3d );
-	const char *move( karte_t *, spieler_t *, uint16 buttonstate, koord3d );
+	virtual image_id get_icon(spieler_t *) const;
+	virtual const char *get_tooltip(spieler_t *);
+	virtual bool is_selected( karte_t *welt ) const;
+	virtual bool init( karte_t *, spieler_t * );
+
+private:
+	void calc_route( wegbauer_t &bauigel, const koord3d &, const koord3d & );
+
+	virtual const char *do_work( karte_t *, spieler_t *, const koord3d &, const koord3d & );
+	virtual void mark_tiles( karte_t *, spieler_t *, const koord3d &, const koord3d & );
+	virtual uint8 is_valid_pos( karte_t *, spieler_t *, const koord3d &, const char *&error );
 };
 
 class wkz_brueckenbau_t : public werkzeug_t {
+	virtual image_id get_icon(spieler_t *) const { return grund_t::underground_mode==grund_t::ugm_all ? IMG_LEER : icon; }
 	const char *get_tooltip(spieler_t *);
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
 	const char *work( karte_t *welt, spieler_t *sp, koord3d k );
 };
 
-class wkz_tunnelbau_t : public werkzeug_t {
-private:
-	koord3d start;
-	zeiger_t *wkz_tunnelbau_bauer;
+class wkz_tunnelbau_t : public two_click_werkzeug_t {
 public:
-	wkz_tunnelbau_t() : werkzeug_t() { wkz_tunnelbau_bauer=NULL; }
 	const char *get_tooltip(spieler_t *);
-	bool init( karte_t *, spieler_t * );
-	bool exit( karte_t *w, spieler_t *s ) { return init(w,s); }
-	const char *work( karte_t *welt, spieler_t *sp, koord3d k );
+private:
+	void calc_route( wegbauer_t &bauigel, const koord3d &, const koord3d &, karte_t* );
+
+	virtual const char *do_work( karte_t *, spieler_t *, const koord3d &, const koord3d & );
+	virtual void mark_tiles( karte_t *, spieler_t *, const koord3d &, const koord3d & );
+	virtual uint8 is_valid_pos( karte_t *, spieler_t *, const koord3d &, const char *&error );
 };
 
-class wkz_wayremover_t : public werkzeug_t {
+class wkz_wayremover_t : public two_click_werkzeug_t {
 private:
-	koord3d start;
-	bool erster;
-	zeiger_t *wkz_wayremover_bauer;
+	bool calc_route( route_t &, spieler_t *, const koord3d& start, const koord3d &to );
 public:
-	wkz_wayremover_t() : werkzeug_t() { wkz_wayremover_bauer=NULL; }
 	const char *get_tooltip(spieler_t *);
-	bool init( karte_t *, spieler_t * );
-	bool exit( karte_t *w, spieler_t *s ) { return init(w,s); }
-	virtual const char *work( karte_t *, spieler_t *, koord3d );
+private:
+	virtual const char *do_work( karte_t *, spieler_t *, const koord3d &, const koord3d & );
+	virtual void mark_tiles( karte_t *, spieler_t *, const koord3d &, const koord3d & );
+	virtual uint8 is_valid_pos( karte_t *, spieler_t *, const koord3d &, const char *&error );
 };
 
-class wkz_wayobj_t : public werkzeug_t {
+class wkz_wayobj_t : public two_click_werkzeug_t {
+protected:
+	const bool build;
 private:
-	koord3d start;
-	bool erster;
-	zeiger_t *wkz_wayobj_bauer;
 	static const way_obj_besch_t *default_electric;
+	const way_obj_besch_t *besch;
+	const way_obj_besch_t *get_besch( const karte_t *welt ) const;
+	waytype_t wt;
+
+	bool calc_route( route_t &, spieler_t *, const koord3d& start, const koord3d &to );
+
+	virtual const char *do_work( karte_t *, spieler_t *, const koord3d &, const koord3d & );
+	virtual void mark_tiles( karte_t *, spieler_t *, const koord3d &, const koord3d & );
+	virtual uint8 is_valid_pos( karte_t *, spieler_t *, const koord3d &, const char *&error );
+
 public:
-	wkz_wayobj_t() : werkzeug_t() { wkz_wayobj_bauer=NULL; }
-	const char *get_tooltip(spieler_t *);
-	bool init( karte_t *, spieler_t * );
-	bool exit( karte_t *w, spieler_t *s ) { return init(w,s); }
-	virtual const char *work( karte_t *, spieler_t *, koord3d );
+	wkz_wayobj_t(bool b=true) : two_click_werkzeug_t(), build(b) {};
+	virtual const char *get_tooltip(spieler_t *);
+	virtual bool is_selected(karte_t *welt) const;
+	virtual bool init( karte_t *, spieler_t * );
+};
+
+class wkz_wayobj_remover_t : public wkz_wayobj_t {
+public:
+	wkz_wayobj_remover_t() : wkz_wayobj_t(false) {}
+	virtual bool is_selected(karte_t *welt) const { return werkzeug_t::is_selected( welt ); }
 };
 
 class wkz_station_t : public werkzeug_t {
@@ -246,9 +260,9 @@ private:
 	const char *wkz_station_building_aux( karte_t *, spieler_t *, koord3d, const haus_besch_t *, sint8 rotation );
 	const char *wkz_station_dock_aux( karte_t *, spieler_t *, koord3d, const haus_besch_t * );
 	const char *wkz_station_aux( karte_t *, spieler_t *, koord3d, const haus_besch_t *, waytype_t, sint64 cost, const char *halt_suffix );
-	const haus_besch_t *get_besch( sint8 &rotation );
+	const haus_besch_t *get_besch( sint8 &rotation ) const;
 public:
-	virtual image_id get_icon(spieler_t *);
+	virtual image_id get_icon(spieler_t *) const;
 	const char *get_tooltip(spieler_t *);
 	bool init( karte_t *, spieler_t * );
 	virtual const char *work( karte_t *, spieler_t *, koord3d );
@@ -262,9 +276,9 @@ class wkz_roadsign_t : public werkzeug_t {
 class wkz_depot_t : public werkzeug_t {
 private:
 	static char toolstring[256];
-	const char *wkz_depot_aux(karte_t *welt, spieler_t *sp, koord pos, const haus_besch_t *besch, waytype_t wegtype, sint64 cost);
+	const char *wkz_depot_aux(karte_t *welt, spieler_t *sp, koord3d pos, const haus_besch_t *besch, waytype_t wegtype, sint64 cost);
 public:
-	virtual image_id get_icon(spieler_t *sp) { return sp->get_player_nr()==1 ? IMG_LEER : icon; }
+	virtual image_id get_icon(spieler_t *sp) const { return sp->get_player_nr()==1 ? IMG_LEER : icon; }
 	const char *get_tooltip(spieler_t *);
 	bool init( karte_t *, spieler_t * );
 	virtual const char *work( karte_t *, spieler_t *, koord3d );
@@ -280,7 +294,6 @@ public:
  */
 class wkz_build_haus_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Built random attraction"); }
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
 	bool init( karte_t *, spieler_t * );
 	virtual const char *work( karte_t *, spieler_t *, koord3d );
 };
@@ -296,21 +309,18 @@ class wkz_build_haus_t : public werkzeug_t {
  */
 class wkz_build_industries_land_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Build land consumer"); }
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
 	bool init( karte_t *, spieler_t * );
 	virtual const char *work( karte_t *, spieler_t *, koord3d );
 };
 
 class wkz_build_industries_city_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Build city market"); }
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
 	bool init( karte_t *, spieler_t * );
 	virtual const char *work( karte_t *, spieler_t *, koord3d );
 };
 
 class wkz_build_factory_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Build city market"); }
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
 	bool init( karte_t *, spieler_t * );
 	virtual const char *work( karte_t *, spieler_t *, koord3d );
 };
@@ -321,7 +331,6 @@ private:
 	zeiger_t *wkz_linkzeiger;
 public:
 	wkz_link_factory_t() : werkzeug_t() { wkz_linkzeiger=NULL; last_fab=NULL; }
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
 	const char *get_tooltip(spieler_t *) { return translator::translate("Connect factory"); }
 	bool init( karte_t *, spieler_t * );
 	bool exit( karte_t *w, spieler_t *s ) { return init(w,s); }
@@ -357,20 +366,13 @@ class wkz_add_citycar_t : public werkzeug_t {
 };
 
 /* make forest */
-class wkz_forest_t : public werkzeug_t {
-private:
-	koord3d start;
-	koord3d nw;
-	koord wh;
-	zeiger_t *marked;
+class wkz_forest_t : public two_click_werkzeug_t {
 public:
-	wkz_forest_t() : werkzeug_t() { marked=NULL; }
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
 	const char *get_tooltip(spieler_t *) { return translator::translate("Add forest"); }
-	bool init( karte_t *, spieler_t * );
-	bool exit( karte_t *w, spieler_t *s ) { return init(w,s); }
-	const char *work( karte_t *, spieler_t *, koord3d );
-	const char *move( karte_t *, spieler_t *, uint16 buttonstate, koord3d );
+private:
+	virtual const char *do_work( karte_t *, spieler_t *, const koord3d &, const koord3d & );
+	virtual void mark_tiles( karte_t *, spieler_t *, const koord3d &, const koord3d & );
+	virtual uint8 is_valid_pos( karte_t *, spieler_t *, const koord3d &, const char *&error );
 };
 
 /* stop moving tool */
@@ -404,7 +406,7 @@ public:
 
 class wkz_pause_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Pause"); }
-	bool is_selected(karte_t *welt) { return welt->is_paused(); }
+	bool is_selected(karte_t *welt) const { return welt->is_paused(); }
 	bool init( karte_t *welt, spieler_t * ) {
 		welt->set_fast_forward(0);
 		welt->set_pause( welt->is_paused()^1 );
@@ -414,7 +416,7 @@ class wkz_pause_t : public werkzeug_t {
 
 class wkz_fastforward_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Fast forward"); }
-	bool is_selected(karte_t *welt) { return welt->is_fast_forward(); }
+	bool is_selected(karte_t *welt) const { return welt->is_fast_forward(); }
 	bool init( karte_t *welt, spieler_t * ) {
 		welt->set_pause(0);
 		welt->set_fast_forward( welt->is_fast_forward()^1 );
@@ -434,7 +436,6 @@ class wkz_screenshot_t : public werkzeug_t {
 // builts next chain
 class wkz_increase_industry_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Increase Industry density"); }
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
 	bool init( karte_t *welt, spieler_t * ) {
 		fabrikbauer_t::increase_industry_density( welt, false );
 		return false;
@@ -503,7 +504,7 @@ class wkz_zoom_out_t : public werkzeug_t {
 
 class wkz_show_coverage_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("show station coverage"); }
-	bool is_selected(karte_t *) { return umgebung_t::station_coverage_show; }
+	bool is_selected(karte_t *) const { return umgebung_t::station_coverage_show; }
 	bool init( karte_t *welt, spieler_t * ) {
 		umgebung_t::station_coverage_show = !umgebung_t::station_coverage_show;
 		welt->set_dirty();
@@ -526,7 +527,7 @@ class wkz_show_name_t : public werkzeug_t {
 
 class wkz_show_grid_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("show grid"); }
-	bool is_selected(karte_t *) { return grund_t::show_grid; }
+	bool is_selected(karte_t *) const { return grund_t::show_grid; }
 	bool init( karte_t *welt, spieler_t * ) {
 		grund_t::toggle_grid();
 		welt->set_dirty();
@@ -536,7 +537,7 @@ class wkz_show_grid_t : public werkzeug_t {
 
 class wkz_show_trees_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("hide trees"); }
-	bool is_selected(karte_t *) { return umgebung_t::hide_trees; }
+	bool is_selected(karte_t *) const { return umgebung_t::hide_trees; }
 	bool init( karte_t *welt, spieler_t * ) {
 		umgebung_t::hide_trees = !umgebung_t::hide_trees;
 		welt->set_dirty();
@@ -561,17 +562,12 @@ class wkz_show_houses_t : public werkzeug_t {
 };
 
 class wkz_show_underground_t : public werkzeug_t {
-	const char *get_tooltip(spieler_t *) { return translator::translate("underground mode"); }
-	bool is_selected(karte_t *) { return grund_t::underground_mode; }
-	bool init( karte_t *welt, spieler_t * ) {
-		grund_t::toggle_underground_mode();
-		// renew toolbar
-		for (vector_tpl<toolbar_t *>::const_iterator i = werkzeug_t::toolbar_tool.begin(), end = werkzeug_t::toolbar_tool.end();  i != end;  ++i  ) {
-			(*i)->update(welt, welt->get_active_player());
-		}
-		welt->update_map();
-		return false;
-	}
+	static sint8 save_underground_level;
+	const char *get_tooltip(spieler_t *);
+	bool is_selected(karte_t *) const;
+	void draw_after( karte_t *w, koord pos ) const;
+	bool init( karte_t *welt, spieler_t * );
+	virtual const char *work( karte_t *, spieler_t *, koord3d );
 };
 
 class wkz_rotate90_t : public werkzeug_t {
@@ -595,9 +591,10 @@ class wkz_quit_t : public werkzeug_t {
 // step size by default_param
 class wkz_fill_trees_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Fill trees"); }
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
 	bool init( karte_t *welt, spieler_t * ) {
-		baum_t::fill_trees( welt, atoi(default_param) );
+		if(  default_param  ) {
+			baum_t::fill_trees( welt, atoi(default_param) );
+		}
 		return false;
 	}
 };
@@ -608,12 +605,22 @@ class wkz_daynight_level_t : public werkzeug_t {
 	bool init( karte_t *, spieler_t * );
 };
 
+
+/* change day/night view manually */
+class wkz_vehicle_tooltips_t : public werkzeug_t {
+	const char *get_tooltip(spieler_t *) { return translator::translate("Toggle vehicle tooltips"); }
+	bool init( karte_t *, spieler_t * ) {
+		umgebung_t::show_vehicle_states = (umgebung_t::show_vehicle_states+1)%3;
+		return false;
+	}
+};
+
 /********************** dialoge tools *****************************/
 
 // general help
 class wkz_help_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Help"); }
-	bool is_selected(karte_t *) { return win_get_magic(magic_mainhelp); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_mainhelp); }
 	bool init( karte_t *, spieler_t * ) {
 		create_win(new help_frame_t("general.txt"), w_info, magic_mainhelp);
 		return false;
@@ -623,7 +630,7 @@ class wkz_help_t : public werkzeug_t {
 // open info/quit dialoge
 class wkz_optionen_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Einstellungsfenster"); }
-	bool is_selected(karte_t *) { return win_get_magic(magic_optionen_gui_t); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_optionen_gui_t); }
 	bool init( karte_t *welt, spieler_t * ) {
 		create_win(240, 120, new optionen_gui_t(welt), w_info, magic_optionen_gui_t);
 		return false;
@@ -633,7 +640,7 @@ class wkz_optionen_t : public werkzeug_t {
 // open minimap
 class wkz_minimap_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Reliefkarte"); }
-	bool is_selected(karte_t *) { return win_get_magic(magic_reliefmap); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_reliefmap); }
 	bool init( karte_t *welt, spieler_t * ) {
 		create_win( new map_frame_t(welt), w_info, magic_reliefmap);
 		return false;
@@ -643,8 +650,8 @@ class wkz_minimap_t : public werkzeug_t {
 // open line management
 class wkz_lines_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Line Management"); }
-	virtual image_id get_icon(spieler_t *sp) { return sp->get_player_nr()==1 ? IMG_LEER : icon; }
-	bool is_selected(karte_t *welt) { return win_get_magic((long)(&(welt->get_active_player()->simlinemgmt))); }
+	virtual image_id get_icon(spieler_t *sp) const { return sp->get_player_nr()==1 ? IMG_LEER : icon; }
+	bool is_selected(karte_t *welt) const { return win_get_magic((long)(&(welt->get_active_player()->simlinemgmt))); }
 	bool init( karte_t *, spieler_t *sp ) {
 		if(sp->get_player_nr()!=1) {
 			sp->simlinemgmt.zeige_info( sp );
@@ -653,10 +660,10 @@ class wkz_lines_t : public werkzeug_t {
 	}
 };
 
-// open massages
+// open messages
 class wkz_messages_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Mailbox"); }
-	bool is_selected(karte_t *) { return win_get_magic(magic_messageframe); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_messageframe); }
 	bool init( karte_t *welt, spieler_t * ) {
 		create_win( new message_frame_t(welt), w_info, magic_messageframe );
 		return false;
@@ -666,7 +673,7 @@ class wkz_messages_t : public werkzeug_t {
 // open messages
 class wkz_finances_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Finanzen"); }
-	bool is_selected(karte_t *welt) { return win_get_magic((long)welt->get_active_player()); }
+	bool is_selected(karte_t *welt) const { return win_get_magic((long)welt->get_active_player()); }
 	bool init( karte_t *, spieler_t *sp ) {
 		create_win( new money_frame_t(sp), w_info, (long)sp );
 		return false;
@@ -676,7 +683,7 @@ class wkz_finances_t : public werkzeug_t {
 // open player dialoge
 class wkz_players_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Spielerliste"); }
-	bool is_selected(karte_t *) { return win_get_magic(magic_ki_kontroll_t); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_ki_kontroll_t); }
 	bool init( karte_t *welt, spieler_t * ) {
 		create_win( 272, 160, new ki_kontroll_t(welt), w_info, magic_ki_kontroll_t);
 		return false;
@@ -686,7 +693,7 @@ class wkz_players_t : public werkzeug_t {
 // open player dialoge
 class wkz_displayoptions_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Helligk."); }
-	bool is_selected(karte_t *) { return win_get_magic(magic_color_gui_t); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_color_gui_t); }
 	bool init( karte_t *welt, spieler_t * ) {
 		create_win(new color_gui_t(welt), w_info, magic_color_gui_t);
 		return false;
@@ -696,7 +703,7 @@ class wkz_displayoptions_t : public werkzeug_t {
 // open sound dialoge
 class wkz_sound_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Sound"); }
-	bool is_selected(karte_t *) { return win_get_magic(magic_sound_kontroll_t); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_sound_kontroll_t); }
 	bool init( karte_t *, spieler_t * ) {
 		create_win(new sound_frame_t(), w_info, magic_sound_kontroll_t);
 		return false;
@@ -706,7 +713,7 @@ class wkz_sound_t : public werkzeug_t {
 // open language dialoge
 class wkz_language_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Sprache"); }
-	bool is_selected(karte_t *) { return win_get_magic(magic_sprachengui_t); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_sprachengui_t); }
 	bool init( karte_t *, spieler_t * ) {
 		create_win(new sprachengui_t(), w_info, magic_sprachengui_t);
 		return false;
@@ -716,7 +723,7 @@ class wkz_language_t : public werkzeug_t {
 // open player color dialoge
 class wkz_playercolor_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Farbe"); }
-	bool is_selected(karte_t *) { return win_get_magic(magic_farbengui_t); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_farbengui_t); }
 	bool init( karte_t *, spieler_t *sp ) {
 		create_win(new farbengui_t(sp), w_info, magic_farbengui_t);
 		return false;
@@ -726,7 +733,7 @@ class wkz_playercolor_t : public werkzeug_t {
 // jump to position dialoge
 class wkz_jump_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Jump to"); }
-	bool is_selected(karte_t *) { return win_get_magic(magic_jump); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_jump); }
 	bool init( karte_t *welt, spieler_t * ) {
 		create_win( new jump_frame_t(welt), w_info, magic_jump);
 		return false;
@@ -736,7 +743,7 @@ class wkz_jump_t : public werkzeug_t {
 // load game dialoge
 class wkz_load_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Laden"); }
-	bool is_selected(karte_t *) { return win_get_magic(magic_load_t); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_load_t); }
 	bool init( karte_t *welt, spieler_t * ) {
 		destroy_all_win();
 		create_win(new loadsave_frame_t(welt, true), w_info, magic_load_t);
@@ -747,7 +754,7 @@ class wkz_load_t : public werkzeug_t {
 // save game dialoge
 class wkz_save_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("Speichern"); }
-	bool is_selected(karte_t *) { return win_get_magic(magic_save_t); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_save_t); }
 	bool init( karte_t *welt, spieler_t * ) {
 		create_win(new loadsave_frame_t(welt, false), w_info, magic_save_t);
 		return false;
@@ -757,7 +764,7 @@ class wkz_save_t : public werkzeug_t {
 /* open the list of halt */
 class wkz_list_halt_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("hl_title"); }
-	bool is_selected(karte_t *) { return win_get_magic(magic_halt_list_t); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_halt_list_t); }
 	bool init( karte_t *, spieler_t *sp ) {
 		create_win( new halt_list_frame_t(sp), w_info, magic_halt_list_t );
 		return false;
@@ -767,7 +774,7 @@ class wkz_list_halt_t : public werkzeug_t {
 /* open the list of vehicle */
 class wkz_list_convoi_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("cl_title"); }
-	bool is_selected(karte_t *) { return win_get_magic(magic_convoi_t); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_convoi_t); }
 	bool init( karte_t *, spieler_t *sp ) {
 		create_win( new convoi_frame_t(sp), w_info, magic_convoi_t );
 		return false;
@@ -777,7 +784,7 @@ class wkz_list_convoi_t : public werkzeug_t {
 /* open the list of towns */
 class wkz_list_town_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("tl_title"); }
-	bool is_selected(karte_t *) { return win_get_magic(magic_citylist_frame_t); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_citylist_frame_t); }
 	bool init( karte_t *welt, spieler_t * ) {
 		create_win( new citylist_frame_t(welt), w_info, magic_citylist_frame_t );
 		return false;
@@ -787,7 +794,7 @@ class wkz_list_town_t : public werkzeug_t {
 /* open the list of goods */
 class wkz_list_goods_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("gl_title"); }
-	bool is_selected(karte_t *) { return win_get_magic(magic_goodslist); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_goodslist); }
 	bool init( karte_t *welt, spieler_t * ) {
 		create_win( new goods_frame_t(welt), w_info, magic_goodslist );
 		return false;
@@ -797,7 +804,7 @@ class wkz_list_goods_t : public werkzeug_t {
 /* open the list of factories */
 class wkz_list_factory_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("fl_title"); }
-	bool is_selected(karte_t *) { return win_get_magic(magic_factorylist); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_factorylist); }
 	bool init( karte_t *welt, spieler_t * ) {
 		create_win( new factorylist_frame_t(welt), w_info, magic_factorylist );
 		return false;
@@ -807,7 +814,7 @@ class wkz_list_factory_t : public werkzeug_t {
 /* open the list of attraction */
 class wkz_list_curiosity_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("curlist_title"); }
-	bool is_selected(karte_t *) { return win_get_magic(magic_curiositylist); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_curiositylist); }
 	bool init( karte_t *welt, spieler_t * ) {
 		create_win( new curiositylist_frame_t(welt), w_info, magic_curiositylist );
 		return false;
@@ -817,8 +824,7 @@ class wkz_list_curiosity_t : public werkzeug_t {
 /* factory building dialog */
 class wkz_factorybuilder_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("factorybuilder"); }
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
-	bool is_selected(karte_t *) { return win_get_magic(magic_edit_factory); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_edit_factory); }
 	bool init( karte_t *welt, spieler_t *sp ) {
 		create_win( new factory_edit_frame_t(sp,welt), w_info, magic_edit_factory );
 		return false;
@@ -828,8 +834,7 @@ class wkz_factorybuilder_t : public werkzeug_t {
 /* attraction building dialog */
 class wkz_attractionbuilder_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("curiosity builder"); }
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
-	bool is_selected(karte_t *) { return win_get_magic(magic_edit_attraction); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_edit_attraction); }
 	bool init( karte_t *welt, spieler_t *sp ) {
 		create_win( new curiosity_edit_frame_t(sp,welt), w_info, magic_edit_attraction );
 		return false;
@@ -839,8 +844,7 @@ class wkz_attractionbuilder_t : public werkzeug_t {
 /* house building dialog */
 class wkz_housebuilder_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("citybuilding builder"); }
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
-	bool is_selected(karte_t *) { return win_get_magic(magic_edit_house); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_edit_house); }
 	bool init( karte_t *welt, spieler_t *sp ) {
 		create_win( new citybuilding_edit_frame_t(sp,welt), w_info, magic_edit_house );
 		return false;
@@ -850,8 +854,7 @@ class wkz_housebuilder_t : public werkzeug_t {
 /* house building dialog */
 class wkz_treebuilder_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("baum builder"); }
-	virtual image_id get_icon(spieler_t *) { return grund_t::underground_mode ? IMG_LEER : icon; }
-	bool is_selected(karte_t *) { return win_get_magic(magic_edit_tree); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_edit_tree); }
 	bool init( karte_t *welt, spieler_t *sp ) {
 		create_win( new baum_edit_frame_t(sp,welt), w_info, magic_edit_tree );
 		return false;
@@ -861,7 +864,7 @@ class wkz_treebuilder_t : public werkzeug_t {
 // to increase map-size
 class wkz_enlarge_map_t : public werkzeug_t{
 	const char *get_tooltip(spieler_t *) { return translator::translate("enlarge map"); }
-	bool is_selected(karte_t *) { return win_get_magic(magic_bigger_map); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_bigger_map); }
 	bool init( karte_t *welt, spieler_t *sp ) {
 		create_win( new enlarge_map_frame_t(sp,welt), w_info, magic_bigger_map );
 		return false;
@@ -871,10 +874,20 @@ class wkz_enlarge_map_t : public werkzeug_t{
 /* open the list of label */
 class wkz_list_label_t : public werkzeug_t {
 	const char *get_tooltip(spieler_t *) { return translator::translate("labellist_title"); }
-	bool is_selected(karte_t *) { return win_get_magic(magic_labellist); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_labellist); }
 	bool init( karte_t *welt, spieler_t * ) {
 		create_win( new labellist_frame_t(welt), w_info, magic_labellist );
 		return false;
 	}
 };
+
+/* open the list of label */
+class wkz_climates_t : public werkzeug_t {
+	const char *get_tooltip(spieler_t *) { return translator::translate("Climate Control"); }
+	bool is_selected(karte_t *) const { return win_get_magic(magic_climate); }
+	bool init( karte_t *welt, spieler_t * ) {
+		create_win( new climate_gui_t(welt->get_einstellungen()), w_info, magic_climate );
+		return false;
+	}
+};
 #endif
diff --git a/simwin.cc b/simwin.cc
index 37be032..b422739 100644
--- a/simwin.cc
+++ b/simwin.cc
@@ -21,26 +21,31 @@
 #include <string.h>
 #include <stdlib.h>
 
-#include "simwin.h"
-#include "simworld.h"
-#include "simmenu.h"
-#include "player/simplay.h"
 #include "simcolor.h"
+#include "simevent.h"
 #include "simgraph.h"
+#include "simmenu.h"
 #include "simskin.h"
-#include "simticker.h"
 #include "simsys.h"
+#include "simticker.h"
+#include "simwin.h"
+#include "simhalt.h"
+#include "simworld.h"
 
 #include "dataobj/translator.h"
 #include "dataobj/umgebung.h"
 
-#include "ifc/gui_fenster.h"
+#include "besch/skin_besch.h"
+
+#include "dings/zeiger.h"
+
 #include "gui/help_frame.h"
+#include "gui/messagebox.h"
 #include "gui/werkzeug_waehler.h"
 
-#include "besch/skin_besch.h"
+#include "ifc/gui_fenster.h"
 
-#include "dings/zeiger.h"
+#include "player/simplay.h"
 
 #include "tpl/vector_tpl.h"
 
@@ -54,48 +59,44 @@ static gui_komponente_t * focus=NULL;
 // (Mathew Hounsell)
 // I added a button to the map window to fix it's size to the best one.
 // This struct is the flow back to the object of the refactoring.
-class simwin_gadget_flags
+class simwin_gadget_flags_t
 {
 public:
-   simwin_gadget_flags( void ) : close( false ) , help( false ) , prev( false ), size( false ), next( false ) { }
+	simwin_gadget_flags_t( void ) : close( false ) , help( false ) , prev( false ), size( false ), next( false ) { }
 
-   bool close;
-   bool help;
-   bool prev;
-   bool size;
-   bool next;
+	bool close;
+	bool help;
+	bool prev;
+	bool size;
+	bool next;
 };
 
-class simwin
+class simwin_t
 {
 public:
 	koord pos;         // Fensterposition
 	uint32 dauer;        // Wie lange soll das Fenster angezeigt werden ?
-	sint16 xoff, yoff;   // Offsets zur Maus beim verschieben
 	uint8 wt;	// the flags for the window type
 	long magic_number;	// either magic number or this pointer (which is unique too)
 	gui_fenster_t *gui;
 	bool closing;
 	bool rollup;
 
-	simwin_gadget_flags flags; // (Mathew Hounsell) See Above.
+	simwin_gadget_flags_t flags; // (Mathew Hounsell) See Above.
 
-	simwin() : flags() {}
+	simwin_t() : flags() {}
 
-	bool operator== (const simwin &) const;
+	bool operator== (const simwin_t &) const;
 };
 
-bool simwin::operator== (const simwin &other) const { return gui == other.gui; }
+bool simwin_t::operator== (const simwin_t &other) const { return gui == other.gui; }
 
 // true , if windows need to be redraw "dirty" (including title)
 static bool windows_dirty = false;
 
-static vector_tpl<simwin> kill_list(64);
-
-static const int MAX_WIN = 64;          // 64 Fenster sollten reichen
-
-static simwin wins[MAX_WIN+1];
-static int ins_win = 0;		        // zeiger auf naechsten freien eintrag
+#define MAX_WIN (64)
+static vector_tpl<simwin_t> wins(MAX_WIN);
+static vector_tpl<simwin_t> kill_list(MAX_WIN);
 
 static karte_t* wl = NULL; // Zeiger auf aktuelle Welt, wird in win_set_welt gesetzt
 
@@ -109,11 +110,13 @@ static const char * static_tooltip_text = 0;
 
 static bool show_ticker=0;
 
-// Hajo: if we are inside the event handler, windows may not be
-// destroyed immediately
-static bool inside_event_handling = false;
+/* Hajo: if we are inside the event handler,
+ * the window handler has gui pointer as value,
+ * to defer destruction if this window
+ */
+static void *inside_event_handling = NULL;
 
-static void destroy_framed_win(simwin *wins);
+static void destroy_framed_win(simwin_t *win);
 
 //=========================================================================
 // Helper Functions
@@ -154,7 +157,7 @@ static int display_gadget_box(simwin_gadget_et const  code,
 //-------------------------------------------------------------------------
 // (Mathew Hounsell) Created
 static int display_gadget_boxes(
-               simwin_gadget_flags const * const flags,
+               simwin_gadget_flags_t const * const flags,
                int const x, int const y,
                int const color,
                bool const pushed
@@ -188,7 +191,7 @@ static int display_gadget_boxes(
 }
 
 static simwin_gadget_et decode_gadget_boxes(
-               simwin_gadget_flags const * const flags,
+               simwin_gadget_flags_t const * const flags,
                int const x,
                int const px
 ) {
@@ -240,7 +243,7 @@ static void win_draw_window_title(const koord pos, const koord gr,
 		const PLAYER_COLOR_VAL titel_farbe,
 		const char * const text,
 		const bool closing,
-		const simwin_gadget_flags * const flags )
+		const simwin_gadget_flags_t * const flags )
 {
 	PUSH_CLIP(pos.x, pos.y, gr.x, gr.y);
 	display_fillbox_wh_clip(pos.x, pos.y, gr.x, 1, titel_farbe+1, false);
@@ -263,13 +266,10 @@ static void win_draw_window_title(const koord pos, const koord gr,
  */
 static void win_draw_window_dragger(koord pos, koord gr)
 {
-  pos += gr;
-
-  for(int x=0; x<dragger_size; x++) {
-    display_fillbox_wh(pos.x-x,
-		       pos.y-dragger_size+x,
-		       x, 1, (x & 1) ? COL_BLACK : MN_GREY4, true);
-  }
+	pos += gr;
+	for(  int x=0;  x<dragger_size;  x++  ) {
+		display_fillbox_wh( pos.x-x, pos.y-dragger_size+x, x, 1, (x & 1) ? COL_BLACK : MN_GREY4, true);
+	}
 }
 
 
@@ -301,7 +301,8 @@ void release_focus(gui_komponente_t *this_focus)
 {
 	if(focus  &&  focus==this_focus) {
 		focus = NULL;
-	} else {
+	}
+	else {
 		dbg->warning("void release_focus()","Focus was already released");
 	}
 }
@@ -321,12 +322,11 @@ bool has_focus(const gui_komponente_t *req_focus)
 
 
 // returns the window (if open) otherwise zero
-gui_fenster_t *
-win_get_magic(long magic)
+gui_fenster_t *win_get_magic(long magic)
 {
 	if(magic!=-1  &&  magic!=0) {
 		// es kann nur ein fenster fuer jede pos. magic number geben
-		for(int i=0; i<ins_win; i++) {
+		for(  uint i=0;  i<wins.get_count();  i++  ) {
 			if(wins[i].magic_number == magic) {
 				// if 'special' magic number, return it
 				return wins[i].gui;
@@ -342,30 +342,24 @@ win_get_magic(long magic)
  * Returns top window
  * @author prissi
  */
-const gui_fenster_t *
-win_get_top()
+const gui_fenster_t *win_get_top()
 {
-	return (ins_win - 1>=0) ? wins[ins_win-1].gui : NULL;
+	return wins.get_count()>0 ? wins[wins.get_count()-1].gui : NULL;
 }
 
 
-
 int win_get_open_count()
 {
-	return ins_win;
+	return wins.get_count();
 }
 
 
 // brings a window to front, if open
-bool
-top_win(const gui_fenster_t *gui)
+bool top_win(const gui_fenster_t *gui)
 {
-	int i;
-	for(i=ins_win-1; i>=0; i--) {
+	for(  uint i=0;  i<wins.get_count()-1;  i++  ) {
 		if(wins[i].gui==gui) {
-			if(ins_win-1!=i) {
-				top_win(i);
-			}
+			top_win(i);
 			return true;
 		}
 	}
@@ -379,49 +373,54 @@ top_win(const gui_fenster_t *gui)
  */
 bool win_is_top(const gui_fenster_t *ig)
 {
-  const int i = ins_win - 1;
-  return i>=0 ? wins[i].gui == ig : false;
+	return wins.get_count()>0 ? wins[wins.get_count()-1].gui == ig : false;
 }
 
 
 // window functions
 
-int
-create_win(gui_fenster_t *gui, uint8 wt, long magic)
+int create_win(gui_fenster_t *gui, uint8 wt, long magic)
 {
 	return create_win( -1, -1, gui, wt, magic);
 }
 
-int
-create_win(int x, int y, gui_fenster_t *gui, uint8 wt, long magic)
+
+int create_win(int x, int y, gui_fenster_t *gui, uint8 wt, long magic)
 {
-DBG_DEBUG("create_win()","ins_win=%d", ins_win);
-	assert(ins_win >= 0);
+	assert(gui!=NULL  &&  magic!=0);
+
+	if(  magic!=magic_none  &&  win_get_magic(magic)  ) {
+		focus = NULL;
+		top_win( win_get_magic(magic) );
+		return -1;
+	}
 
-	if(ins_win < MAX_WIN) {
+	/* if there are too many handles (likely in large games)
+	 * we search for any error/news message at the bottom of the stack and delete it
+	 * => newer information might be more important ...
+	 */
+	if(  wins.get_count()==MAX_WIN  ) {
+		// we try to remove one of the lowest news windows (magic_none)
+		for(  uint i=0;  i<MAX_WIN;  i++  ) {
+			if(  wins[i].magic_number == magic_none  &&  dynamic_cast<news_window *>(wins[i].gui)!=NULL  ) {
+				destroy_win( wins[i].gui );
+				break;
+			}
+		}
+	}
+
+	if(  wins.get_count() < MAX_WIN  ) {
+
+		wins.append( simwin_t() );
+		simwin_t &win = wins[wins.get_count()-1];
 
 		// (Mathew Hounsell) Make Sure Closes Aren't Forgotten.
 		// Must Reset as the entries and thus flags are reused
-		wins[ins_win].flags.close = true;
-		wins[ins_win].flags.help = ( gui->get_hilfe_datei() != NULL );
-		wins[ins_win].flags.prev = gui->has_prev();
-		wins[ins_win].flags.next = gui->has_next();
-		wins[ins_win].flags.size = gui->has_min_sizer();
-
-		if(magic != -1) {
-			// es kann nur ein fenster fuer jede pos. magic number geben
-
-			for(int i=0; i<ins_win; i++) {
-				if(wins[i].wt==wt  &&  wins[i].magic_number==magic) {
-					// gibts schon, wir machen kein neues
-					// aber wir machen es sichtbar, falls verdeckt
-DBG_DEBUG("create_win()","magic=%d already there, bring to front", magic);
-					focus = NULL;	// free focus
-					top_win(i);
-					return -1;
-				}
-			}
-		}
+		win.flags.close = true;
+		win.flags.help = ( gui->get_hilfe_datei() != NULL );
+		win.flags.prev = gui->has_prev();
+		win.flags.next = gui->has_next();
+		win.flags.size = gui->has_min_sizer();
 
 		// Hajo: Notify window to be shown
 		if(gui) {
@@ -436,25 +435,19 @@ DBG_DEBUG("create_win()","magic=%d already there, bring to front", magic);
 			ev.cy = 0;
 			ev.button_state = 0;
 
+			void *old = inside_event_handling;
+			inside_event_handling = gui;
 			gui->infowin_event(&ev);
-		}
-
-		// this window already open?
-		// prissi: (why do we have these magic cookies???)
-		for (int i=0; i<ins_win; i++) {
-			if (wins[i].gui == gui) {
-				top_win(i);
-				return -1;
-			}
+			inside_event_handling = old;
 		}
 
 		// take care of time delete windows ...
-		wins[ins_win].gui = gui;
-		wins[ins_win].wt = (wt&w_time_delete) ? (uint8)w_info : wt;
-		wins[ins_win].dauer = (wt&w_time_delete) ? MESG_WAIT : -1;
-		wins[ins_win].magic_number = magic;
-		wins[ins_win].closing = false;
-		wins[ins_win].rollup = false;
+		win.gui = gui;
+		win.wt = (wt&w_time_delete) ? (uint8)w_info : wt;
+		win.dauer = (wt&w_time_delete) ? MESG_WAIT : -1;
+		win.magic_number = magic;
+		win.closing = false;
+		win.rollup = false;
 
 		koord gr;
 
@@ -469,7 +462,7 @@ DBG_DEBUG("create_win()","magic=%d already there, bring to front", magic);
 			// try to keep the toolbar below all other toolbars
 			y = 32;
 			if(wt & w_no_overlap) {
-				for(int i=0; i<ins_win; i++) {
+				for( int i=0;  i<wins.get_count()-1;  i++  ) {
 					if(wins[i].wt & w_no_overlap) {
 						if(wins[i].pos.y>=y) {
 							sint16 lower_y = wins[i].pos.y + wins[i].gui->get_fenstergroesse().y;
@@ -496,12 +489,9 @@ DBG_DEBUG("create_win()","magic=%d already there, bring to front", magic);
 		if(y<32) {
 			y = 32;
 		}
-		wins[ins_win].pos = koord(x,y);
-
+		win.pos = koord(x,y);
 		mark_rect_dirty_wc( x, y, x+gr.x, y+gr.y );
-
-DBG_DEBUG("create_win()","new ins_win=%d", ins_win+1);
-		return ins_win ++;
+		return wins.get_count();
 	}
 	else {
 		return -1;
@@ -512,7 +502,7 @@ DBG_DEBUG("create_win()","new ins_win=%d", ins_win+1);
  * Destroy a framed window
  * @author Hj. Malthaner
  */
-static void destroy_framed_win(simwin *wins)
+static void destroy_framed_win(simwin_t *wins)
 {
 	// mark dirty
 	koord gr = wins->gui->get_fenstergroesse();
@@ -529,6 +519,7 @@ static void destroy_framed_win(simwin *wins)
 		ev.cx = 0;
 		ev.cy = 0;
 		ev.button_state = 0;
+
 		wins->gui->infowin_event(&ev);
 	}
 
@@ -540,8 +531,7 @@ static void destroy_framed_win(simwin *wins)
 
 
 
-void
-destroy_win(const long magic)
+void destroy_win(const long magic)
 {
 	const gui_fenster_t *gui = win_get_magic(magic);
 	if(gui) {
@@ -551,26 +541,17 @@ destroy_win(const long magic)
 
 
 
-void
-destroy_win(const gui_fenster_t *gui)
+void destroy_win(const gui_fenster_t *gui)
 {
-	int i;
-	for(i=ins_win-1; i>=0; i--) {
+	for(  uint i=0;  i<wins.get_count();  i++  ) {
 		if(wins[i].gui == gui) {
-			if(inside_event_handling) {
-				// only add this, if not already added
-				if (!kill_list.is_contained(wins[i])) {
-					kill_list.append(wins[i]);
-				}
+			if(inside_event_handling==wins[i].gui) {
+				kill_list.append_unique(wins[i]);
 			}
 			else {
 				destroy_framed_win(&wins[i]);
 			}
-			// compact the window list
-			if(i < ins_win-1) {
-				memmove(&wins[i], &wins[i+1], sizeof(simwin) * (ins_win - i - 1));
-			}
-			ins_win--;
+			wins.remove_at(i);
 			break;
 		}
 	}
@@ -580,35 +561,29 @@ destroy_win(const gui_fenster_t *gui)
 
 void destroy_all_win()
 {
-	for(int i=ins_win-1; i>=0; i--) {
-		if(inside_event_handling) {
+	while(  !wins.empty()  ) {
+		if(inside_event_handling==wins[0].gui) {
 			// only add this, if not already added
-			if (!kill_list.is_contained(wins[i])) {
-				kill_list.append(wins[i]);
-			}
+			kill_list.append_unique(wins[0]);
 		}
 		else {
-			destroy_framed_win(wins+i);
+			destroy_framed_win(&wins[0]);
 		}
 		// compact the window list
-		if(i < ins_win-1) {
-			memmove(&wins[i], &wins[i+1], sizeof(simwin) * (ins_win - i - 1));
-		}
-		ins_win--;
+		wins.remove_at(0);
 	}
 }
 
 
 int top_win(int win)
 {
-DBG_MESSAGE("top_win()","win=%i ins_win=%i",win,ins_win);
-	if (win==ins_win-1) {
+	if(win==wins.get_count()-1) {
 		return win;
 	} // already topped
 
-	simwin tmp = wins[win];
-	memmove(&wins[win], &wins[win+1], sizeof(simwin) * (ins_win - win - 1));
-	wins[ins_win-1] = tmp;
+	simwin_t tmp = wins[win];
+	wins.remove_at(win);
+	wins.append(tmp);
 
 	// mark dirty
 	koord gr = wins[win].gui->get_fenstergroesse();
@@ -624,9 +599,12 @@ DBG_MESSAGE("top_win()","win=%i ins_win=%i",win,ins_win);
 	ev.cy = 0;
 	ev.button_state = 0;
 
+	void *old = inside_event_handling;
+	inside_event_handling = tmp.gui;
 	tmp.gui->infowin_event(&ev);
+	inside_event_handling = old;
 
-	return ins_win-1;
+	return wins.get_count()-1;
 }
 
 
@@ -648,7 +626,7 @@ void display_win(int win)
 			wins[win].closing,
 			( & wins[win].flags ) );
 	// mark top window, if requested
-	if(umgebung_t::window_frame_active  &&  win==ins_win-1) {
+	if(umgebung_t::window_frame_active  &&  win==wins.get_count()-1) {
 		if(!wins[win].rollup) {
 			display_ddd_box( wins[win].pos.x-1, wins[win].pos.y-1, gr.x+2, gr.y+2 , titel_farbe, titel_farbe+1 );
 		}
@@ -667,24 +645,33 @@ void display_win(int win)
 }
 
 
-void
-display_all_win()
+void display_all_win()
 {
 	const char *current_tooltip = tooltip_text;
-	for(int i=0; i<ins_win; i++) {
+	const sint16 x = get_maus_x();
+	const sint16 y = get_maus_y();
+	bool getroffen = false;
+	for(  uint i=0;  i<wins.get_count();  i++  ) {
+		tooltip_text = NULL;
 		display_win(i);
-		// prissi: tooltips are only allowed for the uppermost window and main menu
-		if(i<ins_win-1) {
-			tooltip_text = current_tooltip;
+		if(  !getroffen  &&  tooltip_text!=NULL  ) {
+			current_tooltip = tooltip_text;
+		}
+		if(  (!wins[i].rollup  &&  wins[i].gui->getroffen(x-wins[i].pos.x,y-wins[i].pos.y))  ||
+		     (wins[i].rollup  &&  x>=wins[i].pos.x  &&  x<wins[i].pos.x+wins[i].gui->get_fenstergroesse().x  &&  y>=wins[i].pos.y  &&  y<wins[i].pos.y+16)
+		) {
+			// prissi: tooltips are only allowed for non overlapping windows
+			current_tooltip = tooltip_text;
 		}
 	}
+	tooltip_text = current_tooltip;
 }
 
 
 
 void win_rotate90( sint16 new_ysize )
 {
-	for(int i=0; i<ins_win; i++) {
+	for(  uint i=0;  i<wins.get_count();  i++  ) {
 		wins[i].gui->map_rotate90( new_ysize );
 	}
 }
@@ -694,7 +681,7 @@ void win_rotate90( sint16 new_ysize )
 static void remove_old_win()
 {
 	// alte fenster entfernen, falls dauer abgelaufen
-	for(int i=ins_win-1; i>=0; i--) {
+	for(  int i=wins.get_count()-1;  i>=0;  i=min(i,wins.get_count())-1  ) {
 		if(wins[i].dauer > 0) {
 			wins[i].dauer --;
 			if(wins[i].dauer == 0) {
@@ -738,7 +725,7 @@ void move_win(int win, event_t *ev)
 
 int win_get_posx(gui_fenster_t *gui)
 {
-	for(int i=ins_win-1; i>=0; i--) {
+	for(  int i=wins.get_count()-1;  i>=0;  i--  ) {
 		if(wins[i].gui == gui) {
 			return wins[i].pos.x;
 		}
@@ -749,7 +736,7 @@ int win_get_posx(gui_fenster_t *gui)
 
 int win_get_posy(gui_fenster_t *gui)
 {
-	for(int i=ins_win-1; i>=0; i--) {
+	for(  int i=wins.get_count()-1;  i>=0;  i--  ) {
 		if(wins[i].gui == gui) {
 			return wins[i].pos.y;
 		}
@@ -760,7 +747,7 @@ int win_get_posy(gui_fenster_t *gui)
 
 void win_set_pos(gui_fenster_t *gui, int x, int y)
 {
-	for(int i=ins_win-1; i>=0; i--) {
+	for(  int i=wins.get_count()-1;  i>=0;  i--  ) {
 		if(wins[i].gui == gui) {
 			wins[i].pos.x = x;
 			wins[i].pos.y = y;
@@ -774,7 +761,7 @@ void win_set_pos(gui_fenster_t *gui, int x, int y)
 
 static void process_kill_list()
 {
-	for (uint i = 0; i < kill_list.get_count(); i++) {
+	for(uint i = 0; i < kill_list.get_count(); i++) {
 		destroy_framed_win(&kill_list[i]);
 	}
 	kill_list.clear();
@@ -789,17 +776,14 @@ bool check_pos_win(event_t *ev)
 {
 	static bool is_resizing = false;
 
-	int i;
 	bool swallowed = false;
 
 	const int x = ev->mx;
 	const int y = ev->my;
 
-	inside_event_handling = true;
 
 	// for the moment, no none events
 	if (ev->ev_class == EVENT_NONE) {
-		inside_event_handling = false;
 		process_kill_list();
 		return false;
 	}
@@ -818,30 +802,32 @@ bool check_pos_win(event_t *ev)
 			if(wl->ist_in_kartengrenzen(p)) {
 				wl->change_world_position(koord3d(p,wl->min_hgt(p)));
 			}
-			inside_event_handling = false;
 			return true;
 		}
 	}
-	else if(werkzeug_t::toolbar_tool.get_count()>0  &&  y<werkzeug_t::toolbar_tool[0]->iconsize.y  &&  ev->ev_class!=EVENT_KEYBOARD) {
+	else if(werkzeug_t::toolbar_tool.get_count()>0  &&  werkzeug_t::toolbar_tool[0]->get_werkzeug_waehler()  &&  y<werkzeug_t::toolbar_tool[0]->iconsize.y  &&  ev->ev_class!=EVENT_KEYBOARD) {
 		// click in main menu
 		event_t wev = *ev;
+		inside_event_handling = werkzeug_t::toolbar_tool[0];
 		werkzeug_t::toolbar_tool[0]->get_werkzeug_waehler()->infowin_event( &wev );
+		inside_event_handling = NULL;
 		// swallow event
-		inside_event_handling = false;
 		return true;
 	}
 
 
-	for(i=ins_win-1; i>=0  &&  !swallowed; i--) {
+	for(  int i=wins.get_count()-1;  i>=0  &&  !swallowed;  i=min(i,wins.get_count())-1  ) {
 
 		// check click inside window
 		if(  wins[i].gui->getroffen( ev->cx-wins[i].pos.x, ev->cy-wins[i].pos.y )  ) {
 
+			inside_event_handling = wins[i].gui;
+
 			// all events in window are swallowed
 			swallowed = true;
 
 			// Top window first
-			if(ins_win-1>i  &&  IS_LEFTCLICK(ev)  &&  (!wins[i].rollup  ||  ( ev->cy < wins[i].pos.y+16 ))) {
+			if(wins.get_count()-1>i  &&  IS_LEFTCLICK(ev)  &&  (!wins[i].rollup  ||  ( ev->cy < wins[i].pos.y+16 ))) {
 				i = top_win(i);
 			}
 
@@ -948,15 +934,16 @@ bool check_pos_win(event_t *ev)
 					swallowed = false;
 				}
 			}
+			inside_event_handling = NULL;
 		}
 	}
 
 	// if no focused, we do not deliver keyboard input
-	if(focus==NULL && ev->ev_class == EVENT_KEYBOARD) {
+	if(focus==NULL  &&  ev->ev_class == EVENT_KEYBOARD) {
 		swallowed = false;
 	}
 
-	inside_event_handling = false;
+	inside_event_handling = NULL;
 	process_kill_list();
 
 	return swallowed;
@@ -1142,6 +1129,17 @@ void win_display_flush(double konto)
 		sprintf(stretch_text, "(T=%1.2f)", wl->get_time_multiplier()/16.0 );
 	}
 
+#ifdef DEBUG
+	if(  umgebung_t::verbose_debug>3  ) {
+		if(  haltestelle_t::get_rerouting_status()==RESCHEDULING  ) {
+			strcat(stretch_text, "+" );
+		}
+		else if(  haltestelle_t::get_rerouting_status()==REROUTING  ) {
+			strcat(stretch_text, "*" );
+		}
+	}
+#endif
+
 	if(wl->show_distance!=koord3d::invalid  &&  wl->show_distance!=pos) {
 		sprintf(delta_pos,"-(%d,%d) ", wl->show_distance.x-pos.x, wl->show_distance.y-pos.y );
 	}
@@ -1190,7 +1188,7 @@ bool win_change_zoom_factor(bool magnify)
 		ev.cy = 0;
 		ev.button_state = 0;
 
-		for(int i=0; i<ins_win; i++) {
+		for(  sint32 i=wins.get_count()-1;  i>=0;  i=min(i,wins.get_count())-1  ) {
 			wins[i].gui->infowin_event(&ev);
 		}
 	}
diff --git a/simwin.h b/simwin.h
index 3a9b717..dadf50a 100644
--- a/simwin.h
+++ b/simwin.h
@@ -8,16 +8,12 @@
 #ifndef simwin_h
 #define simwin_h
 
-#include "simevent.h"
 #include "simtypes.h"
-#include "simconst.h"
-
-#include "gui/werkzeug_waehler.h"	// for main menu
 
 class karte_t;
 class gui_fenster_t;
 class gui_komponente_t;
-
+struct event_t;
 
 /* Typen fuer die Fenster */
 enum wintype {
@@ -33,6 +29,7 @@ enum magic_numbers {
 	magic_reserved = 0,
 
 	// from here on, delete second 'new'-ed object in create_win
+	magic_settings_frame_t,
 	magic_sprachengui_t,
 	magic_welt_gui_t,
 	magic_climate,
@@ -74,8 +71,11 @@ enum magic_numbers {
 	magic_bigger_map,
 	magic_labellist,
 	magic_station_building_select,
+	magic_keyhelp,
 	magic_info_pointer,	// mark end of the list
-	magic_keyhelp=magic_info_pointer+842,
+	magic_convoi_info=magic_info_pointer+839,
+	magic_convoi_detail=magic_convoi_info+65536,
+	magix_max=magic_convoi_detail+65536
 };
 
 // Haltezeit für Nachrichtenfenster
diff --git a/simworld.cc b/simworld.cc
index d157de9..653c600 100644
--- a/simworld.cc
+++ b/simworld.cc
@@ -63,6 +63,7 @@
 
 #include "gui/messagebox.h"
 #include "gui/help_frame.h"
+#include "gui/karte.h"
 
 #include "dataobj/translator.h"
 #include "dataobj/loadsave.h"
@@ -370,6 +371,14 @@ bool karte_t::get_height_data_from_file( const char *filename, sint8 grundwasser
  */
 sint32 karte_t::perlin_hoehe( einstellungen_t *sets, koord k, koord size )
 {
+	// Hajo: to Markus: replace the fixed values with your
+	// settings. Amplitude is the top highness of the
+	// montains, frequency is something like landscape 'roughness'
+	// amplitude may not be greater than 160.0 !!!
+	// please don't allow frequencies higher than 0.8 it'll
+	// break the AI's pathfinding. Frequency values of 0.5 .. 0.7
+	// seem to be ok, less is boring flat, more is too crumbled
+	// the old defaults are given here: f=0.6, a=160.0
 	switch( sets->get_rotation() ) {
 		// 0: do nothing
 		case 1: k = koord(k.y,size.x-k.x); break;
@@ -378,79 +387,10 @@ sint32 karte_t::perlin_hoehe( einstellungen_t *sets, koord k, koord size )
 	}
 //    double perlin_noise_2D(double x, double y, double persistence);
 //    return ((int)(perlin_noise_2D(x, y, 0.6)*160.0)) & 0xFFFFFFF0;
+	k = k + koord(sets->get_origin_x(), sets->get_origin_y());
 	return ((int)(perlin_noise_2D(k.x, k.y, sets->get_map_roughness())*(double)sets->get_max_mountain_height())) / 16;
 }
 
-
-
-void
-karte_t::calc_hoehe_mit_perlin()
-{
-	display_set_progress_text(translator::translate("Init map ..."));
-	const int display_total = 16 + get_einstellungen()->get_anzahl_staedte()*4 + get_einstellungen()->get_land_industry_chains();
-	for(int y=0; y<=get_groesse_y(); y++) {
-
-		for(int x=0; x<=get_groesse_x(); x++) {
-			// Hajo: to Markus: replace the fixed values with your
-			// settings. Amplitude is the top highness of the
-			// montains, frequency is something like landscape 'roughness'
-			// amplitude may not be greater than 160.0 !!!
-			// please don't allow frequencies higher than 0.8 it'll
-			// break the AI's pathfinding. Frequency values of 0.5 .. 0.7
-			// seem to be ok, less is boring flat, more is too crumbled
-			// the old defaults are given here: f=0.6, a=160.0
-			koord pos(x,y);
-			const int h = perlin_hoehe( einstellungen, pos, koord::invalid );
-			set_grid_hgt( pos, h*Z_TILE_STEP );
-			//	  DBG_MESSAGE("karte_t::calc_hoehe_mit_perlin()","%i",h);
-		}
-
-		if(is_display_init()) {
-			display_progress((y*16)/get_groesse_y(), display_total);
-		}
-		else {
-			printf("X");fflush(NULL);
-		}
-	}
-	print(" - ok\n");fflush(NULL);
-}
-
-
-void karte_t::raise_clean(sint16 x, sint16 y, sint16 h)
-{
-	if(ist_in_gittergrenzen(x, y)) {
-		const sint32 offset = x + y*(cached_groesse_gitter_x+1);
-
-		if(  grid_hgts[offset]*Z_TILE_STEP < h  ) {
-			grid_hgts[offset] = h/Z_TILE_STEP;
-			const koord k(x,y);
-
-#ifndef DOUBLE_GROUNDS
-			raise_clean(x-1, y-1, h-Z_TILE_STEP);
-			raise_clean(x  , y-1, h-Z_TILE_STEP);
-			raise_clean(x+1, y-1, h-Z_TILE_STEP);
-			raise_clean(x-1, y  , h-Z_TILE_STEP);
-			// Punkt selbst hat schon die neue Hoehe
-			raise_clean(x+1, y  , h-Z_TILE_STEP);
-			raise_clean(x-1, y+1, h-Z_TILE_STEP);
-			raise_clean(x  , y+1, h-Z_TILE_STEP);
-			raise_clean(x+1, y+1, h-Z_TILE_STEP);
-#else
-			raise_clean(x-1, y-1, h-Z_TILE_STEP*2);
-			raise_clean(x  , y-1, h-Z_TILE_STEP*2);
-			raise_clean(x+1, y-1, h-Z_TILE_STEP*2);
-			raise_clean(x-1, y  , h-Z_TILE_STEP*2);
-			// Punkt selbst hat schon die neue Hoehe
-			raise_clean(x+1, y  , h-Z_TILE_STEP*2);
-			raise_clean(x-1, y+1, h-Z_TILE_STEP*2);
-			raise_clean(x  , y+1, h-Z_TILE_STEP*2);
-			raise_clean(x+1, y+1, h-Z_TILE_STEP*2);
-#endif
-		}
-	}
-}
-
-
 void karte_t::cleanup_karte( int xoff, int yoff )
 {
 	// we need a copy to smoothen the map to a realistic level
@@ -462,7 +402,7 @@ void karte_t::cleanup_karte( int xoff, int yoff )
 	sint32 i,j;
 	for(j=0; j<=get_groesse_y(); j++) {
 		for(i=j>=yoff?0:xoff; i<=get_groesse_x(); i++) {
-			raise_clean(i,j, (grid_hgts_cpy[i+j*(get_groesse_x()+1)]*Z_TILE_STEP)+Z_TILE_STEP );
+			raise_to(i,j, (grid_hgts_cpy[i+j*(get_groesse_x()+1)]*Z_TILE_STEP)+Z_TILE_STEP, false );
 		}
 	}
 	delete [] grid_hgts_cpy;
@@ -518,17 +458,14 @@ void karte_t::cleanup_karte( int xoff, int yoff )
 
 
 
-// karte_t methoden
-
-void
-karte_t::destroy()
+void karte_t::destroy()
 {
 DBG_MESSAGE("karte_t::destroy()", "destroying world");
 
 	// rotate the map until it can be saved
+	nosave_warning = nosave = false;
 	for( int i=0;  i<4  &&  nosave;  i++  ) {
 DBG_MESSAGE("karte_t::destroy()", "rotating");
-		nosave = false;
 		rotate90();
 	}
 	if(nosave) {
@@ -694,7 +631,7 @@ void karte_t::init_felder()
 {
 	assert(plan==0);
 
-	plan   = new planquadrat_t[get_groesse_x()*get_groesse_y()];
+	plan = new planquadrat_t[get_groesse_x()*get_groesse_y()];
 	grid_hgts = new sint8[(get_groesse_x()+1)*(get_groesse_y()+1)];
 
 	memset(grid_hgts, 0, sizeof(sint8)*(get_groesse_x()+1)*(get_groesse_y()+1));
@@ -748,13 +685,14 @@ void karte_t::init_felder()
 		}
 	}
 
-	convoihandle_t::init( umgebung_t::max_convoihandles );
-	linehandle_t::init( umgebung_t::max_linehandles );
-	halthandle_t::init( umgebung_t::max_halthandles );
+	convoihandle_t::init( 1024 );
+	linehandle_t::init( 1024 );
+
+	halthandle_t::init( 1024 );
 
 	scenario = new scenario_t(this);
 
-	nosave = false;
+	nosave_warning = nosave = false;
 }
 
 
@@ -787,7 +725,7 @@ void karte_t::create_rivers( sint16 number )
 				// may be good to start a river here
 				water_tiles.append(k);
 			}
-			else if(  h>=last_height  ||  abs_distance(last_koord,k)>simrand(max_dist)  ) {
+			else if(  h>=last_height  ||  koord_distance(last_koord,k)>simrand(max_dist)  ) {
 				// something worth to add here
 				if(  h>last_height  ) {
 					last_height = h;
@@ -807,14 +745,14 @@ void karte_t::create_rivers( sint16 number )
 	while(  number>0  &&  mountain_tiles.get_count()>0  &&  retrys++<100  ) {
 		koord start = mountain_tiles.at_weight( simrand(mountain_tiles.get_sum_weight()) );
 		koord end = water_tiles[ simrand(water_tiles.get_count()) ];
-		sint16 dist = abs_distance(start,end);
+		sint16 dist = koord_distance(start,end);
 		if(  dist > einstellungen->get_min_river_length()  &&  dist < einstellungen->get_max_river_length()  ) {
 			// should be at least of decent length
 			wegbauer_t riverbuilder(this, spieler[1]);
 			riverbuilder.route_fuer(wegbauer_t::river, river_besch);
 			riverbuilder.set_maximum( dist*50 );
 			riverbuilder.calc_route( lookup_kartenboden(end)->get_pos(), lookup_kartenboden(start)->get_pos() );
-			if(  riverbuilder.max_n >= einstellungen->get_min_river_length()  ) {
+			if(  riverbuilder.get_count() >= (uint32)einstellungen->get_min_river_length()  ) {
 				// do not built too short rivers
 				riverbuilder.baue();
 				number --;
@@ -860,7 +798,7 @@ DBG_DEBUG("karte_t::distribute_groundobjs_cities()","distributing groundobjs");
 		}
 	}
 
-print("Creating cities ...\n");
+printf("Creating cities ...\n");
 DBG_DEBUG("karte_t::distribute_groundobjs_cities()","prepare cities");
 	vector_tpl<koord> *pos = stadt_t::random_place(this, new_anzahl_staedte, old_x, old_y);
 
@@ -879,13 +817,16 @@ DBG_DEBUG("karte_t::distribute_groundobjs_cities()","prepare cities");
 			change_world_position( koord3d((*pos)[0], min_hgt((*pos)[0])) );
 
 		// Loop only new cities:
+#ifdef DEBUG
+		uint32 tbegin = dr_time();
+#endif
 		for(  int i=0;  i<new_anzahl_staedte;  i++  ) {
 //			int citizens=(int)(einstellungen->get_mittlere_einwohnerzahl()*0.9);
 //			citizens = citizens/10+simrand(2*citizens+1);
 			int current_citicens = (2500l * einstellungen->get_mittlere_einwohnerzahl()) /(simrand(20000)+100);
 			stadt_t* s = new stadt_t(spieler[1], (*pos)[i], current_citicens);
 DBG_DEBUG("karte_t::distribute_groundobjs_cities()","Erzeuge stadt %i with %ld inhabitants",i,(s->get_city_history_month())[HIST_CITICENS] );
-			stadt.append(s, current_citicens, 64);
+			stadt.append(s, s->get_einwohner(), 64);
 			if(is_display_init()) {
 				old_progress ++;
 				display_progress(old_progress, max_display_progress);
@@ -894,6 +835,10 @@ DBG_DEBUG("karte_t::distribute_groundobjs_cities()","Erzeuge stadt %i with %ld i
 				printf("*");fflush(NULL);
 			}
 		}
+
+		delete pos;
+DBG_DEBUG("karte_t::distribute_groundobjs_cities()","took %lu ms for all towns", dr_time()-tbegin );
+
 		for(  uint32 i=old_anzahl_staedte;  i<stadt.get_count();  i++  ) {
 			// Hajo: do final init after world was loaded/created
 			stadt[i]->laden_abschliessen();
@@ -918,55 +863,207 @@ DBG_DEBUG("karte_t::distribute_groundobjs_cities()","Erzeuge stadt %i with %ld i
 		}
 
 		wegbauer_t bauigel (this, spieler[1] );
-		bauigel.route_fuer(wegbauer_t::strasse, besch, NULL, brueckenbauer_t::find_bridge(road_wt,15,get_timeline_year_month()) );
+		bauigel.route_fuer(wegbauer_t::strasse, besch, tunnelbauer_t::find_tunnel(road_wt,15,get_timeline_year_month()), brueckenbauer_t::find_bridge(road_wt,15,get_timeline_year_month()) );
 		bauigel.set_keep_existing_ways(true);
 		bauigel.set_maximum(umgebung_t::intercity_road_length);
 
-		// Hajo: search for road offset
-		koord roff (0,1);
-		if (!lookup((*pos)[0] + roff)->get_kartenboden()->hat_weg(road_wt)) {
-			roff = koord(0,2);
-		}
-
+		// **** intercity road construction
+		// progress bar data
 		int old_progress_count = 16+2*new_anzahl_staedte;
 		int count = 0;
 		const int max_count=(einstellungen->get_anzahl_staedte()*(einstellungen->get_anzahl_staedte()-1))/2
 					- (old_anzahl_staedte*(old_anzahl_staedte-1))/2;
+		// something to do??
+		if(  max_count > 0  ) {
+			// print("Building intercity roads ...\n");
+			// find townhall of city i and road in front of it
+			vector_tpl<koord3d> k;
+			for(  int i = 0;  i < einstellungen->get_anzahl_staedte();  i++  ) {
+				koord k1 = stadt[i]->get_pos();
+				const gebaeude_t* gb = dynamic_cast<gebaeude_t*>(lookup_kartenboden(k1)->first_obj());
+				if(  gb  &&  gb->ist_rathaus()  ) {
+					k1.y += gb->get_tile()->get_besch()->get_h(gb->get_tile()->get_layout());
+					k.append( lookup_kartenboden(k1)->get_pos() );
+				}
+				else {
+					k.append( koord3d::invalid );
+				}
+			}
+			// compute all distances
+			uint8 conn_comp=1; // current connection component for phase 0
+			vector_tpl<uint8> city_flag; // city already connected to the graph? >0 nr of connection component
+			array2d_tpl<sint32> city_dist(einstellungen->get_anzahl_staedte(), einstellungen->get_anzahl_staedte());
+			for(  sint32 i = 0;  i < einstellungen->get_anzahl_staedte();  i++  ) {
+				city_dist.at(i,i) = 0;
+				for(  sint32 j = i + 1;  j < einstellungen->get_anzahl_staedte();  j++  ) {
+					city_dist.at(i,j) = koord_distance(k[i], k[j]);
+					city_dist.at(j,i) = city_dist.at(i,j);
+					// count unbuildable connections to new cities
+					if(  j>=old_anzahl_staedte && city_dist.at(i,j) >= umgebung_t::intercity_road_length  ) {
+						count++;
+					}
+				}
+				city_flag.append( i < old_anzahl_staedte ? conn_comp : 0 );
 
-		for(int i = 0; i < einstellungen->get_anzahl_staedte(); i++) {
-		// Only new cities must be connected:
-			for (int j = max(i + 1, old_anzahl_staedte); j < einstellungen->get_anzahl_staedte(); j++) {
-				const koord k1 = stadt[i]->get_pos() + roff;//(*pos)[i] + roff;
-				const koord k2 = stadt[j]->get_pos() + roff;//(*pos)[j] + roff;
-				const koord diff = k1-k2;
-				const int d = diff.x*diff.x + diff.y*diff.y;
-
-				if(d < umgebung_t::intercity_road_length) {
-//DBG_DEBUG("karte_t::distribute_groundobjs_cities()","built route fom city %d to %d", i, j);
-					bauigel.calc_route(lookup(k1)->get_kartenboden()->get_pos(), lookup(k2)->get_kartenboden()->get_pos());
-					if(bauigel.max_n >= 1) {
-						bauigel.baue();
+				// progress bar stuff
+				if(  is_display_init()  &&  count<=max_count  ) {
+					int progress_count = 16+ 2*new_anzahl_staedte+ (count*einstellungen->get_anzahl_staedte()*2)/max_count;
+					if(  old_progress_count != progress_count  ) {
+						display_progress(progress_count, max_display_progress );
+						old_progress_count = progress_count;
 					}
-					else {
-//DBG_DEBUG("karte_t::distribute_groundobjs_cities()","no route found fom city %d to %d", i, j);
+				}
+			}
+			// mark first town as connected
+			if (old_anzahl_staedte==0) {
+				city_flag[0]=conn_comp;
+			}
+
+			// get a default vehikel
+			route_t verbindung;
+			fahrer_t* test_driver;
+			vehikel_besch_t test_drive_besch(road_wt, 500, vehikel_besch_t::diesel );
+			test_driver = vehikelbauer_t::baue(koord3d(), spieler[1], NULL, &test_drive_besch);
+
+			bool ready=false;
+			uint8 phase=0;
+			// 0 - first phase: built minimum spanning tree (edge weights: city distance)
+			// 1 - second phase: try to complete the graph, avoid edges that
+			// == have similar length then already existing connection
+			// == lead to triangles with an angle >90 deg
+
+			while( phase < 2  ) {
+				ready = true;
+				koord conn = koord::invalid;
+				sint32 best = umgebung_t::intercity_road_length;
+
+				if(  phase == 0  ) {
+					// loop over all unconnected cities
+					for(  int i = 0;  i < einstellungen->get_anzahl_staedte();  i++  ) {
+						if(  city_flag[i] == conn_comp  ) {
+							// loop over all connections to connected cities
+							for(  int j = old_anzahl_staedte; j < einstellungen->get_anzahl_staedte(); j++) {
+								if(  city_flag[j] == 0  ) {
+									ready=false;
+									if(  city_dist.at(i,j) < best  ) {
+										best = city_dist.at(i,j);
+										conn = koord(i,j);
+									}
+								}
+							}
+						}
+					}
+					// did we completed a connection component?
+					if(  !ready  &&  best == umgebung_t::intercity_road_length  ) {
+						// next component
+						conn_comp++;
+						// try the first not connected city
+						ready = true;
+						for(  int i = old_anzahl_staedte;  i < einstellungen->get_anzahl_staedte();  i++  ) {
+							if(  city_flag[i] ==0 ) {
+								city_flag[i] = conn_comp;
+								ready=false;
+								break;
+							}
+						}
 					}
 				}
 				else {
-//DBG_DEBUG("karte_t::distribute_groundobjs_cities()","cites %d and %d are too far away", i, j);
+					// loop over all unconnected cities
+					for(  int i = 0;  i < einstellungen->get_anzahl_staedte();  i++  ) {
+						for(  int j = max(old_anzahl_staedte, i+1);  j < einstellungen->get_anzahl_staedte();  j++  ) {
+							if(  city_dist.at(i,j) < best  &&  city_flag[i] == city_flag[j]  ) {
+								bool ok = true;
+								// is there a connection i..l..j ? forbid stumpfe winkel
+								for(  int l = 0;  l < einstellungen->get_anzahl_staedte();  l++  ) {
+									if(  city_flag[i] == city_flag[l]  &&  city_dist.at(i,l) == umgebung_t::intercity_road_length  &&  city_dist.at(j,l) == umgebung_t::intercity_road_length  ) {
+										// cosine < 0 ?
+										koord3d d1 = k[i]-k[l];
+										koord3d d2 = k[j]-k[l];
+										if(  d1.x*d2.x + d1.y*d2.y < 0  ) {
+											city_dist.at(i,j) = umgebung_t::intercity_road_length+1;
+											city_dist.at(j,i) = umgebung_t::intercity_road_length+1;
+											ok = false;
+											count ++;
+											break;
+										}
+									}
+								}
+								if(ok) {
+									ready = false;
+									best = city_dist.at(i,j);
+									conn = koord(i,j);
+								}
+							}
+						}
+					}
 				}
-				count ++;
-				// how much we continued?
-				if(is_display_init()) {
+				// valid connection?
+				if(  conn.x >= 0  ) {
+					// is there a connection already
+					const bool connected = phase==1 && verbindung.calc_route(this,k[conn.x],k[conn.y],  test_driver, 0);
+					// build this connestion?
+					bool build = false;
+					// set appropriate max length for way builder
+					if(  connected  ) {
+						if(  2*verbindung.get_count() > city_dist.at(conn)  ) {
+							bauigel.set_maximum(verbindung.get_count() / 2);
+							build = true;
+						}
+					}
+					else {
+						bauigel.set_maximum(umgebung_t::intercity_road_length);
+						build = true;
+					}
+
+					if(  build  ) {
+						bauigel.calc_route(k[conn.x],k[conn.y]);
+					}
+
+					if(  build  &&  bauigel.get_count() >= 2  ) {
+						bauigel.baue();
+						if (phase==0) {
+							city_flag[ conn.y ] = conn_comp;
+						}
+						// mark as built
+						city_dist.at(conn) =  umgebung_t::intercity_road_length;
+						city_dist.at(conn.y, conn.x) =  umgebung_t::intercity_road_length;
+						count ++;
+					}
+					else {
+						// do not try again
+						city_dist.at(conn) =  umgebung_t::intercity_road_length+1;
+						city_dist.at(conn.y, conn.x) =  umgebung_t::intercity_road_length+1;
+						count ++;
+
+						if (phase==0) {
+							// do not try to connect to this connected component again
+							for(  int i = 0;  i < einstellungen->get_anzahl_staedte();  i++  ) {
+								if (  city_flag[i] == conn_comp  && city_dist.at(i, conn.y)<umgebung_t::intercity_road_length) {
+									city_dist.at(i, conn.y) =  umgebung_t::intercity_road_length+1;
+									city_dist.at(conn.y, i) =  umgebung_t::intercity_road_length+1;
+									count++;
+								}
+							}
+						}
+					}
+				}
+				// progress bar stuff
+				if(  is_display_init()  &&  count<=max_count  ) {
 					int progress_count = 16+ 2*new_anzahl_staedte+ (count*einstellungen->get_anzahl_staedte()*2)/max_count;
-					if(old_progress_count!=progress_count) {
+					if(  old_progress_count != progress_count  ) {
 						display_progress(progress_count, max_display_progress );
 						old_progress_count = progress_count;
 					}
 				}
+				// next phase?
+				if (ready) {
+					phase++;
+					ready = false;
+				}
 			}
+			delete test_driver;
 		}
-
-		delete pos;
 	}
 	else {
 		// could not generate any town
@@ -1059,6 +1156,10 @@ void karte_t::init(einstellungen_t* sets, sint8 *h_field)
 
 	stadt.clear();
 
+DBG_DEBUG("karte_t::init()","hausbauer_t::neue_karte()");
+	// Call this before building cities
+	hausbauer_t::neue_karte();
+
 	cached_groesse_gitter_x = 0;
 	cached_groesse_gitter_y = 0;
 
@@ -1079,10 +1180,8 @@ DBG_DEBUG("karte_t::init()","distributing trees");
 DBG_DEBUG("karte_t::init()","built timeline");
 	stadtauto_t::built_timeline_liste(this);
 
-	nosave = false;
+	nosave_warning = nosave = false;
 
-DBG_DEBUG("karte_t::init()","hausbauer_t::neue_karte()");
-	hausbauer_t::neue_karte();
 	fabrikbauer_t::neue_karte(this);
 	// new system ...
 	const int max_display_progress=16+einstellungen->get_anzahl_staedte()*4+einstellungen->get_land_industry_chains();
@@ -1096,7 +1195,7 @@ DBG_DEBUG("karte_t::init()","hausbauer_t::neue_karte()");
 	// tourist attractions
 	fabrikbauer_t::verteile_tourist(this, einstellungen->get_tourist_attractions());
 
-	print("Preparing startup ...\n");
+	printf("Preparing startup ...\n");
 	if(zeiger == 0) {
 		zeiger = new zeiger_t(this, koord3d::invalid, spieler[0]);
 	}
@@ -1200,7 +1299,7 @@ void karte_t::enlarge_map(einstellungen_t* sets, sint8 *h_field)
 
 	display_progress(0,max_display_progress);
 	setsimrand( 0xFFFFFFFF, einstellungen->get_karte_nummer() );
-	if(  old_x == 0  &&  einstellungen->heightfield.len() > 0  ){
+	if(  old_x==0  &&  einstellungen->heightfield.len() > 0  ){
 		// init from file
 		const int display_total = 16 + get_einstellungen()->get_anzahl_staedte()*4 + get_einstellungen()->get_land_industry_chains();
 
@@ -1215,6 +1314,10 @@ void karte_t::enlarge_map(einstellungen_t* sets, sint8 *h_field)
 		display_progress(16, display_total);
 	}
 	else {
+		if(  sets->get_rotation()==0  ) {
+			// otherwise neagtive offsets may occur, so we cache only non-rotated maps
+			init_perlin_map(new_groesse_x,new_groesse_y);
+		}
 		int next_progress, old_progress = 0;
 		// loop only new tiles:
 		for(  sint16 x = 0;  x<=new_groesse_x;  x++  ) {
@@ -1229,7 +1332,7 @@ void karte_t::enlarge_map(einstellungen_t* sets, sint8 *h_field)
 				display_progress(old_progress, max_display_progress);
 			}
 		}
-
+		exit_perlin_map();
 		// now lower the corners and edge between new/old part to ground level
 		sint16 i;
 		for(  i=0;  i<=get_groesse_x();  i++  ) {
@@ -1257,7 +1360,7 @@ void karte_t::enlarge_map(einstellungen_t* sets, sint8 *h_field)
 	for (sint16 ix = 0; ix<new_groesse_x; ix++) {
 		for (sint16 iy = (ix>=old_x)?0:old_y; iy<new_groesse_y; iy++) {
 			koord k = koord(ix,iy);
-			access(k)->kartenboden_setzen(new boden_t(this, koord3d(ix,iy,0),0));
+			access(k)->kartenboden_setzen(new boden_t(this, koord3d(ix,iy,min_hgt(k)),0));
 			access(k)->abgesenkt(this);
 			grund_t *gr = lookup_kartenboden(k);
 			gr->set_grund_hang(calc_natural_slope(k));
@@ -1290,11 +1393,11 @@ void karte_t::enlarge_map(einstellungen_t* sets, sint8 *h_field)
 
 	// new recalc the images of the old map near the seam ...
 	for (sint16 x=0; x<old_x-20; x++) {
-		for (sint16 y=old_y-20; y<old_y; y++) {
+		for (sint16 y=max(old_y-20,0); y<old_y; y++) {
 			plan[x+y*cached_groesse_gitter_x].get_kartenboden()->calc_bild();
 		}
 	}
-	for (sint16 x=old_x-20; x<old_x; x++) {
+	for (sint16 x=max(old_x-20,0); x<old_x; x++) {
 		for (sint16 y=0; y<old_y; y++) {
 			plan[x+y*cached_groesse_gitter_x].get_kartenboden()->calc_bild();
 		}
@@ -1388,6 +1491,8 @@ karte_t::karte_t() : convoi_array(0), ausflugsziele(16), stadt(0), marker(0,0)
 	// length of day and other time stuff
 	ticks_bits_per_tag = 20;
 	ticks_per_tag = (1 << ticks_bits_per_tag);
+	last_step_ticks = 0;
+	last_interaction = dr_time();
 	fast_forward = false;
 	pause = false;
 	time_multiplier = 16;
@@ -1414,7 +1519,7 @@ karte_t::karte_t() : convoi_array(0), ausflugsziele(16), stadt(0), marker(0,0)
 	grid_hgts = 0;
 	einstellungen = sets;
 	schedule_counter = 0;
-	nosave = false;
+	nosave_warning = nosave = false;
 
 	for(int i=0; i<MAX_PLAYER_COUNT ; i++) {
 		spieler[i] = NULL;
@@ -1450,7 +1555,12 @@ bool karte_t::can_lower_plan_to(sint16 x, sint16 y, sint16 h) const
 	}
 
 	int hmax = plan->get_kartenboden()->get_hoehe();
-	// irgendwo ein Tunnel vergraben?
+	// tunnel slope below?
+	grund_t *gr = plan->get_boden_in_hoehe(h-Z_TILE_STEP);
+	if (gr && gr->get_grund_hang()!=hang_t::flach) {
+		return false;
+	}
+	// tunnel below?
 	while(h < hmax) {
 		if(plan->get_boden_in_hoehe(h)) {
 			return false;
@@ -1507,56 +1617,166 @@ bool karte_t::is_plan_height_changeable(sint16 x, sint16 y) const
 	return ok;
 }
 
-
-bool karte_t::can_raise_to(sint16 x, sint16 y, sint16 h) const
+// raise plan
+// new heights for each corner given
+// only test corners in ctest to avoid infinite loops
+bool karte_t::can_raise_to(sint16 x, sint16 y, sint8 hsw, sint8 hse, sint8 hne, sint8 hnw, uint8 ctest) const
 {
-	bool ok = false;		// annahme, es geht, pruefung ob nicht
-	if(ist_in_gittergrenzen(x,y)) {
-		const sint32 offset = x + y*(cached_groesse_gitter_x+1);
-		ok = true;
-		if(  grid_hgts[offset]*Z_TILE_STEP < h  ) {
-			ok =
-				// Nachbar-Planquadrate testen
-				can_raise_plan_to(x-1,y-1, h) &&
-				can_raise_plan_to(x,y-1, h)   &&
-				can_raise_plan_to(x-1,y, h)   &&
-				can_raise_plan_to(x,y, h)     &&
-#ifndef DOUBLE_GROUNDS
-				// Nachbar-Gridpunkte testen
-				can_raise_to(x-1, y-1, h-Z_TILE_STEP) &&
-				can_raise_to(x  , y-1, h-Z_TILE_STEP) &&
-				can_raise_to(x+1, y-1, h-Z_TILE_STEP) &&
-				can_raise_to(x-1, y  , h-Z_TILE_STEP) &&
-				can_raise_to(x+1, y  , h-Z_TILE_STEP) &&
-				can_raise_to(x-1, y+1, h-Z_TILE_STEP) &&
-				can_raise_to(x  , y+1, h-Z_TILE_STEP) &&
-				can_raise_to(x+1, y+1, h-Z_TILE_STEP);
-#else
-				// Nachbar-Gridpunkte testen
-				can_raise_to(x-1, y-1, h-Z_TILE_STEP*2) &&
-				can_raise_to(x  , y-1, h-Z_TILE_STEP*2) &&
-				can_raise_to(x+1, y-1, h-Z_TILE_STEP*2) &&
-				can_raise_to(x-1, y  , h-Z_TILE_STEP*2) &&
-				can_raise_to(x+1, y  , h-Z_TILE_STEP*2) &&
-				can_raise_to(x-1, y+1, h-Z_TILE_STEP*2) &&
-				can_raise_to(x  , y+1, h-Z_TILE_STEP*2) &&
-				can_raise_to(x+1, y+1, h-Z_TILE_STEP*2);
-#endif
+	bool ok;
+	if(ist_in_kartengrenzen(x,y)) {
+		grund_t *gr = lookup_kartenboden(koord(x,y));
+		const sint8 h0 = gr->get_hoehe();
+		// which corners have to be raised?
+		const sint8 h0_sw = corner1(ctest) ? (gr->ist_wasser() ? lookup_hgt(koord(x,y+1))   : h0 + corner1(gr->get_grund_hang()) ) : hsw+1;
+		const sint8 h0_se = corner2(ctest) ? (gr->ist_wasser() ? lookup_hgt(koord(x+1,y+1)) : h0 + corner2(gr->get_grund_hang()) ) : hse+1;
+		const sint8 h0_ne = corner3(ctest) ? (gr->ist_wasser() ? lookup_hgt(koord(x+1,y))   : h0 + corner3(gr->get_grund_hang()) ) : hne+1;
+		const sint8 h0_nw = corner4(ctest) ? (gr->ist_wasser() ? lookup_hgt(koord(x,y))     : h0 + corner4(gr->get_grund_hang()) ) : hnw+1;
+
+
+		ok = can_raise_plan_to(x,y, max(max(hsw,hse),max(hne,hnw)));
+		// sw
+		if (ok && h0_sw < hsw) {
+			ok = can_raise_to(x-1,y+1, hsw-1, hsw-1, hsw, hsw-1, 11);
+		}
+		// s
+		if (ok && (h0_se < hse || h0_sw < hsw) && ((ctest&3)==3)) {
+			const sint8 hs = max(hse, hsw) -1;
+			ok = can_raise_to(x,y+1, hs, hs, hse, hsw, 3);
+		}
+		// se
+		if (ok && h0_se < hse) {
+			ok = can_raise_to(x+1,y+1, hse-1, hse-1, hse-1, hse, 7);
+		}
+		// e
+		if (ok && (h0_se < hse || h0_ne < hne) && ((ctest&6)==6)) {
+			const sint8 he = max(hse, hne) -1;
+			ok = can_raise_to(x+1,y, hse, he, he, hne, 6);
+		}
+		// ne
+		if (ok && h0_ne < hne) {
+			ok = can_raise_to(x+1,y-1, hne, hne-1, hne-1, hne-1, 14);
+		}
+		// n
+		if (ok && (h0_nw < hnw || h0_ne < hne) && ((ctest&12)==12)) {
+			const sint8 hn = max(hnw, hne) -1;
+			ok = can_raise_to(x,y-1, hnw, hne, hn, hn, 12);
+		}
+		// nw
+		if (ok && h0_nw < hnw) {
+			ok = can_raise_to(x-1,y-1, hnw-1, hnw, hnw-1, hnw-1, 13);
+		}
+		// w
+		if (ok && (h0_nw < hnw || h0_sw < hsw) && ((ctest&9)==9)) {
+			const sint8 hw = max(hnw, hsw) -1;
+			ok = can_raise_to(x-1,y, hw, hsw, hnw, hw, 9);
 		}
 	}
+	else {
+		if (x<0) ok = hne <= grundwasser && hse <= grundwasser;
+		if (y<0) ok = hsw <= grundwasser && hse <= grundwasser;
+		if (x>=cached_groesse_karte_x) ok = hsw <= grundwasser && hnw <= grundwasser;
+		if (y>=cached_groesse_karte_y) ok = hnw <= grundwasser && hne <= grundwasser;
+	}
 	return ok;
 }
-
+// nw-ecke corner4 anheben
 bool karte_t::can_raise(sint16 x, sint16 y) const
 {
-	if(ist_in_gittergrenzen(x, y)) {
-		return can_raise_to(x, y, lookup_hgt(koord(x, y))+Z_TILE_STEP);
+	if(ist_in_kartengrenzen(x, y)) {
+		grund_t *gr = lookup_kartenboden(koord(x,y));
+		const sint8 hnew = gr->get_hoehe() + corner4(gr->get_grund_hang());
+
+		return can_raise_to(x, y, hnew, hnew, hnew, hnew+1, 15/*all corners*/ );
 	} else {
 		return true;
 	}
 }
 
-int karte_t::raise_to(sint16 x, sint16 y, sint16 h, bool set_slopes)
+
+// raise plan
+// new heights for each corner given
+// clear tile, reset water/land type, calc reliefkarte pixel
+int karte_t::raise_to(sint16 x, sint16 y, sint8 hsw, sint8 hse, sint8 hne, sint8 hnw)
+{
+	int n=0;
+	if(ist_in_kartengrenzen(x,y)) {
+		grund_t *gr = lookup_kartenboden(koord(x,y));
+		const sint8 h0 = gr->get_hoehe();
+		// old height
+		const sint8 h0_sw = gr->ist_wasser() ? lookup_hgt(koord(x,y+1))   : h0 + corner1(gr->get_grund_hang());
+		const sint8 h0_se = gr->ist_wasser() ? lookup_hgt(koord(x+1,y+1)) : h0 + corner2(gr->get_grund_hang());
+		const sint8 h0_ne = gr->ist_wasser() ? lookup_hgt(koord(x+1,y))   : h0 + corner3(gr->get_grund_hang());
+		const sint8 h0_nw = gr->ist_wasser() ? lookup_hgt(koord(x,y))     : h0 + corner4(gr->get_grund_hang());
+
+		// new height
+		const sint8 hn_sw = max(hsw, h0_sw);
+		const sint8 hn_se = max(hse, h0_se);
+		const sint8 hn_ne = max(hne, h0_ne);
+		const sint8 hn_nw = max(hnw, h0_nw);
+		// nothing to do?
+		if (!gr->ist_wasser()  &&  h0_sw >= hsw  &&  h0_se >= hse  &&  h0_ne >= hne  &&  h0_nw >= hnw) return 0;
+		// calc new height and slope
+		const sint8 hneu = min(min(hn_sw,hn_se), min(hn_ne,hn_nw));
+		bool ok = ( (hn_sw-hneu<2) && (hn_se-hneu<2) && (hn_ne-hneu<2) && (hn_nw-hneu<2)); // may fail on water tiles since lookup_hgt might be modified from previous raise_to calls
+		if (!ok && !gr->ist_wasser()) {
+			assert(false);
+		}
+		const uint8 sneu = (hn_sw-hneu) | ((hn_se-hneu)<<1) | ((hn_ne-hneu)<<2) | ((hn_nw-hneu)<<3);
+		// change height and slope, for water tiles only if they will become land
+		if (!gr->ist_wasser() || (hneu + (sneu ? 1 : 0) > grundwasser)) {
+			gr->set_pos( koord3d(x,y,hneu));
+			gr->set_grund_hang( (hang_t::typ)sneu );
+			access(x,y)->angehoben(this);
+		}
+		set_grid_hgt(koord(x,y),hn_nw);
+
+		n += hn_sw-h0_sw + hn_se-h0_se + hn_ne-h0_ne + hn_nw-h0_nw;
+
+		// sw
+		if (h0_sw < hsw) {
+			n += raise_to(x-1,y+1, hsw-1, hsw-1, hsw, hsw-1);
+		}
+		// s
+		if (h0_sw < hsw  ||  h0_se < hse) {
+			const sint8 hs = max(hse, hsw) -1;
+			n += raise_to(x,y+1, hs, hs, hse, hsw);
+		}
+		// se
+		if (h0_se < hse) {
+			n += raise_to(x+1,y+1, hse-1, hse-1, hse-1, hse);
+		}
+		// e
+		if (h0_se < hse  ||  h0_ne < hne) {
+			const sint8 he = max(hse, hne) -1;
+			n += raise_to(x+1,y, hse, he, he, hne);
+		}
+		// ne
+		if (h0_ne < hne) {
+			n += raise_to(x+1,y-1, hne, hne-1, hne-1, hne-1);
+		}
+		// n
+		if (h0_nw < hnw  ||  h0_ne < hne) {
+			const sint8 hn = max(hnw, hne) -1;
+			n += raise_to(x,y-1, hnw, hne, hn, hn);
+		}
+		// nw
+		if (h0_nw < hnw) {
+			n += raise_to(x-1,y-1, hnw-1, hnw, hnw-1, hnw-1);
+		}
+		// w
+		if (h0_sw < hsw  ||  h0_nw < hnw) {
+			const sint8 hw = max(hnw, hsw) -1;
+			n += raise_to(x-1,y, hw, hsw, hnw, hw);
+		}
+		lookup_kartenboden(koord(x,y))->calc_bild();
+		if ((x+1)<cached_groesse_karte_x) lookup_kartenboden(koord(x+1,y))->calc_bild();
+		if ((y+1)<cached_groesse_karte_y) lookup_kartenboden(koord(x,y+1))->calc_bild();
+	}
+	return n;
+}
+
+// raise height in the hgt-array
+int karte_t::raise_to(sint16 x, sint16 y, sint16 h, bool set_slopes /*always false*/)
 {
 	int n = 0;
 	if(ist_in_gittergrenzen(x,y)) {
@@ -1591,25 +1811,6 @@ int karte_t::raise_to(sint16 x, sint16 y, sint16 h, bool set_slopes)
 			n += raise_to(x  , y+1, h-Z_TILE_STEP*2,set_slopes);
 			n += raise_to(x+1, y+1, h-Z_TILE_STEP*2,set_slopes);
 #endif
-			if(set_slopes) {
-				planquadrat_t *plan;
-				if((plan=access(x,y))) {
-					plan->angehoben( this );
-				}
-
-				if((plan = access(x-1,y))) {
-					plan->angehoben( this );
-				}
-
-				if((plan = access(x,y-1))) {
-					plan->angehoben( this );
-				}
-
-				if((plan = access(x-1,y-1))) {
-					plan->angehoben( this );
-				}
-			}
-
 		}
 	}
 
@@ -1621,66 +1822,190 @@ int karte_t::raise(koord pos)
 {
 	bool ok = can_raise(pos.x, pos.y);
 	int n = 0;
-	if(ok && ist_in_gittergrenzen(pos)) {
-		n = raise_to(pos.x, pos.y, lookup_hgt(pos)+Z_TILE_STEP,true);
+	if(ok && ist_in_kartengrenzen(pos)) {
+		grund_t *gr = lookup_kartenboden(pos);
+		const sint8 hnew = gr->get_hoehe() + corner4(gr->get_grund_hang());
+
+		n = raise_to(pos.x, pos.y, hnew, hnew, hnew, hnew+1);
 	}
-	return n;
+	return (n+3)>>2;
 }
 
 
-bool karte_t::can_lower_to(sint16 x, sint16 y, sint16 h) const
+// lower plan
+// new heights for each corner given
+// only test corners in ctest to avoid infinite loops
+bool karte_t::can_lower_to(sint16 x, sint16 y, sint8 hsw, sint8 hse, sint8 hne, sint8 hnw, uint8 ctest) const
 {
-	bool ok = false;		// annahme, es geht, pruefung ob nicht
-	if(ist_in_gittergrenzen(x,y)) {
-		const sint32 offset = x + y*(cached_groesse_gitter_x+1);
-		ok = true;
-		if(  grid_hgts[offset]*Z_TILE_STEP > h  ) {
-			ok =
-				// Nachbar-Planquadrate testen
-				can_lower_plan_to(x-1,y-1, h) &&
-				can_lower_plan_to(x,y-1, h)   &&
-				can_lower_plan_to(x-1,y, h)   &&
-				can_lower_plan_to(x,y, h)     &&
-#ifndef DOUBLE_GROUNDS
-				// Nachbar-Gridpunkte testen
-				can_lower_to(x-1, y-1, h+Z_TILE_STEP) &&
-				can_lower_to(x  , y-1, h+Z_TILE_STEP) &&
-				can_lower_to(x+1, y-1, h+Z_TILE_STEP) &&
-				can_lower_to(x-1, y  , h+Z_TILE_STEP) &&
-				can_lower_to(x+1, y  , h+Z_TILE_STEP) &&
-				can_lower_to(x-1, y+1, h+Z_TILE_STEP) &&
-				can_lower_to(x  , y+1, h+Z_TILE_STEP) &&
-				can_lower_to(x+1, y+1, h+Z_TILE_STEP);
-#else
-				// Nachbar-Gridpunkte testen
-				can_lower_to(x-1, y-1, h+Z_TILE_STEP*2) &&
-				can_lower_to(x  , y-1, h+Z_TILE_STEP*2) &&
-				can_lower_to(x+1, y-1, h+Z_TILE_STEP*2) &&
-				can_lower_to(x-1, y  , h+Z_TILE_STEP*2) &&
-				can_lower_to(x+1, y  , h+Z_TILE_STEP*2) &&
-				can_lower_to(x-1, y+1, h+Z_TILE_STEP*2) &&
-				can_lower_to(x  , y+1, h+Z_TILE_STEP*2) &&
-				can_lower_to(x+1, y+1, h+Z_TILE_STEP*2);
-#endif
+	bool ok;
+	if(ist_in_kartengrenzen(x,y)) {
+		grund_t *gr = lookup_kartenboden(koord(x,y));
+		const sint8 h0 = gr->get_hoehe();
+		// which corners have to be raised?
+		const sint8 h0_sw = corner1(ctest) ? (gr->ist_wasser() ? lookup_hgt(koord(x,y+1))   : h0 + corner1(gr->get_grund_hang()) ) : hsw-1;
+		const sint8 h0_se = corner2(ctest) ? (gr->ist_wasser() ? lookup_hgt(koord(x+1,y+1)) : h0 + corner2(gr->get_grund_hang()) ) : hse-1;
+		const sint8 h0_ne = corner3(ctest) ? (gr->ist_wasser() ? lookup_hgt(koord(x,y+1))   : h0 + corner3(gr->get_grund_hang()) ) : hne-1;
+		const sint8 h0_nw = corner4(ctest) ? (gr->ist_wasser() ? lookup_hgt(koord(x,y))     : h0 + corner4(gr->get_grund_hang()) ) : hnw-1;
+
+		ok = can_lower_plan_to(x,y, min(min(hsw,hse),min(hne,hnw)));
+		// sw
+		if (ok && h0_sw > hsw) {
+			ok = can_lower_to(x-1,y+1, hsw+1, hsw+1, hsw, hsw+1, 11);
+		}
+		// s
+		if (ok && (h0_se > hse || h0_sw > hsw) && ((ctest&3)==3)) {
+			const sint8 hs = min(hse, hsw) +1;
+			ok = can_lower_to(x,y+1, hs, hs, hse, hsw, 3);
+		}
+		// se
+		if (ok && h0_se > hse) {
+			ok = can_lower_to(x+1,y+1, hse+1, hse+1, hse+1, hse, 7);
+		}
+		// e
+		if (ok && (h0_se > hse || h0_ne > hne) && ((ctest&6)==6)) {
+			const sint8 he = max(hse, hne) +1;
+			ok = can_lower_to(x+1,y, hse, he, he, hne, 6);
+		}
+		// ne
+		if (ok && h0_ne > hne) {
+			ok = can_lower_to(x+1,y-1, hne, hne+1, hne+1, hne+1, 14);
+		}
+		// n
+		if (ok && (h0_nw > hnw || h0_ne > hne) && ((ctest&12)==12)) {
+			const sint8 hn = min(hnw, hne) +1;
+			ok = can_lower_to(x,y-1, hnw, hne, hn, hn, 12);
+		}
+		// nw
+		if (ok && h0_nw > hnw) {
+			ok = can_lower_to(x-1,y-1, hnw+1, hnw, hnw+1, hnw+1, 13);
+		}
+		// w
+		if (ok && (h0_nw > hnw || h0_sw > hsw) && ((ctest&9)==9)) {
+			const sint8 hw = min(hnw, hsw) +1;
+			ok = can_lower_to(x-1,y, hw, hsw, hnw, hw, 9);
 		}
 	}
-    return ok;
+	else {
+		if (x<0) ok = hne >= grundwasser && hse >= grundwasser;
+		if (y<0) ok = hsw >= grundwasser && hse >= grundwasser;
+		if (x>=cached_groesse_karte_x) ok = hsw >= grundwasser && hnw >= grundwasser;
+		if (y>=cached_groesse_karte_y) ok = hnw >= grundwasser && hne >= grundwasser;
+	}
+	return ok;
 }
 
 
-
+// nw-ecke corner4 absenken
 bool karte_t::can_lower(sint16 x, sint16 y) const
 {
-	if(ist_in_gittergrenzen(x, y)) {
-		return can_lower_to(x, y, lookup_hgt(koord(x, y))-Z_TILE_STEP);
+	if(ist_in_kartengrenzen(x, y)) {
+		grund_t *gr = lookup_kartenboden(koord(x,y));
+		const sint8 hnew = gr->get_hoehe() + corner4(gr->get_grund_hang());
+
+		return can_lower_to(x, y, hnew, hnew, hnew, hnew-1, 15/*all corners*/ );
 	} else {
 		return true;
 	}
 }
 
 
+// lower plan
+// new heights for each corner given
+// cleartile=true: clear tile, reset water/land type, calc reliefkarte pixel
+int karte_t::lower_to(sint16 x, sint16 y, sint8 hsw, sint8 hse, sint8 hne, sint8 hnw)
+{
+	int n=0;
+	if(ist_in_kartengrenzen(x,y)) {
+		grund_t *gr = lookup_kartenboden(koord(x,y));
+		const sint8 h0 = gr->get_hoehe();
+		// old height
+		const sint8 h0_sw = gr->ist_wasser() ? lookup_hgt(koord(x,y+1))   : h0 + corner1(gr->get_grund_hang());
+		const sint8 h0_se = gr->ist_wasser() ? lookup_hgt(koord(x+1,y+1)) : h0 + corner2(gr->get_grund_hang());
+		const sint8 h0_ne = gr->ist_wasser() ? lookup_hgt(koord(x+1,y))   : h0 + corner3(gr->get_grund_hang());
+		const sint8 h0_nw = gr->ist_wasser() ? lookup_hgt(koord(x,y))     : h0 + corner4(gr->get_grund_hang());
+		// new height
+		const sint8 hn_sw = min(hsw, h0_sw);
+		const sint8 hn_se = min(hse, h0_se);
+		const sint8 hn_ne = min(hne, h0_ne);
+		const sint8 hn_nw = min(hnw, h0_nw);
+		// nothing to do?
+		if(  gr->ist_wasser()  ) {
+			if(  h0_nw <= hnw  ) {
+				return 0;
+			}
+		}
+		else {
+			if(  h0_sw <= hsw  &&  h0_se <= hse  &&  h0_ne <= hne  &&  h0_nw <= hnw  ) {
+				return 0;
+			}
+		}
+		// calc new height and slope
+		const sint8 hneu = min(min(hn_sw,hn_se), min(hn_ne,hn_nw));
+		bool ok = ( (hn_sw-hneu<2) && (hn_se-hneu<2) && (hn_ne-hneu<2) && (hn_nw-hneu<2)); // may fail on water tiles since lookup_hgt might be modified from previous lower_to calls
+		if(  !ok && !gr->ist_wasser()  ) {
+			assert(false);
+		}
+		const uint8 sneu = (hn_sw-hneu) | ((hn_se-hneu)<<1) | ((hn_ne-hneu)<<2) | ((hn_nw-hneu)<<3);
+		// change height and slope for land tiles only
+		if (!gr->ist_wasser()) {
+			gr->set_pos( koord3d(x,y,hneu));
+			gr->set_grund_hang( (hang_t::typ)sneu );
+			access(x,y)->abgesenkt(this);
+		}
+		set_grid_hgt(koord(x,y),hn_nw);
+
+		n += h0_sw-hn_sw + h0_se-hn_se + h0_ne-hn_ne + h0_nw-hn_nw;
 
-int karte_t::lower_to(sint16 x, sint16 y, sint16 h, bool set_slopes)
+		// sw
+		if (h0_sw > hsw) {
+			n += lower_to(x-1,y+1, hsw+1, hsw+1, hsw, hsw+1);
+		}
+		// s
+		if (h0_sw > hsw  ||  h0_se > hse) {
+			const sint8 hs = min(hse, hsw) +1;
+			n += lower_to(x,y+1, hs, hs, hse, hsw);
+		}
+		// se
+		if (h0_se > hse) {
+			n += lower_to(x+1,y+1, hse+1, hse+1, hse+1, hse);
+		}
+		// e
+		if (h0_se > hse  ||  h0_ne > hne) {
+			const sint8 he = min(hse, hne) +1;
+			n += lower_to(x+1,y, hse, he, he, hne);
+		}
+		// ne
+		if (h0_ne > hne) {
+			n += lower_to(x+1,y-1, hne, hne+1, hne+1, hne+1);
+		}
+		// n
+		if (h0_nw > hnw  ||  h0_ne > hne) {
+			const sint8 hn = min(hnw, hne) +1;
+			n += lower_to(x,y-1, hnw, hne, hn, hn);
+		}
+		// nw
+		if (h0_nw > hnw) {
+			n += lower_to(x-1,y-1, hnw+1, hnw, hnw+1, hnw+1);
+		}
+		// w
+		if (h0_sw > hsw  ||  h0_nw > hnw) {
+			const sint8 hw = min(hnw, hsw) +1;
+			n += lower_to(x-1,y, hw, hsw, hnw, hw);
+		}
+
+		lookup_kartenboden(koord(x,y))->calc_bild();
+		if(  (x+1)<cached_groesse_karte_x  ) {
+			lookup_kartenboden(koord(x+1,y))->calc_bild();
+		}
+		if(  (y+1)<cached_groesse_karte_y  ) {
+			lookup_kartenboden(koord(x,y+1))->calc_bild();
+		}
+	}
+	return n;
+}
+
+
+int karte_t::lower_to(sint16 x, sint16 y, sint16 h, bool set_slopes /*always false*/)
 {
 	int n = 0;
 	if(ist_in_gittergrenzen(x,y)) {
@@ -1715,24 +2040,6 @@ int karte_t::lower_to(sint16 x, sint16 y, sint16 h, bool set_slopes)
 			n += lower_to(x  , y+1, h+Z_TILE_STEP*2,set_slopes);
 			n += lower_to(x+1, y+1, h+Z_TILE_STEP*2,set_slopes);
 #endif
-			if(set_slopes) {
-				planquadrat_t *plan;
-				if((plan=access(x,y))) {
-					plan->abgesenkt( this );
-				}
-
-				if((plan = access(x-1,y))) {
-					plan->abgesenkt( this );
-				}
-
-				if((plan = access(x,y-1))) {
-					plan->abgesenkt( this );
-				}
-
-				if((plan = access(x-1,y-1))) {
-					plan->abgesenkt( this );
-				}
-			}
 		}
 	}
   return n;
@@ -1744,10 +2051,12 @@ int karte_t::lower(koord pos)
 {
 	bool ok = can_lower(pos.x, pos.y);
 	int n = 0;
-	if(ok && ist_in_gittergrenzen(pos.x, pos.y)) {
-		n = lower_to(pos.x, pos.y, lookup_hgt(pos)-Z_TILE_STEP,true);
+	if(ok && ist_in_kartengrenzen(pos)) {
+		grund_t *gr = lookup_kartenboden(pos);
+		const sint8 hnew = gr->ist_wasser() ? lookup_hgt(pos) : gr->get_hoehe() + corner4(gr->get_grund_hang());
+		n = lower_to(pos.x, pos.y, hnew, hnew, hnew, hnew-1);
 	}
-	return n;
+	return (n+3)>>2;
 }
 
 
@@ -1755,23 +2064,12 @@ static koord ebene_offsets[] = {koord(0,0), koord(1,0), koord(0,1), koord(1,1)};
 
 bool karte_t::can_ebne_planquadrat(koord pos, sint16 hgt)
 {
-	for(int i=0; i<4; i++) {
-		koord p = pos + ebene_offsets[i];
-
-		if(lookup_hgt(p) > hgt) {
-
-			if(!can_lower_to(p.x, p.y, hgt)) {
-				return false;
-			}
-
-		} else if(lookup_hgt(p) < hgt) {
-
-			if(!can_raise_to(p.x, p.y, hgt)) {
-				return false;
-			}
-		}
+	if (lookup_kartenboden(pos)->get_hoehe()>=hgt) {
+		return can_lower_to(pos.x, pos.y, hgt, hgt, hgt, hgt);
+	}
+	else {
+		return can_raise_to(pos.x, pos.y, hgt, hgt, hgt, hgt);
 	}
-	return true;
 }
 
 
@@ -1780,39 +2078,21 @@ bool karte_t::can_ebne_planquadrat(koord pos, sint16 hgt)
 bool karte_t::ebne_planquadrat(spieler_t *sp, koord pos, sint16 hgt)
 {
 	int n = 0;
-	bool ok = true;
-
-	for(int i=0; i<4; i++) {
-		koord p = pos + ebene_offsets[i];
-
-		if(lookup_hgt(p) > hgt) {
-
-			if(can_lower_to(p.x, p.y, hgt)) {
-				n += lower_to(p.x, p.y, hgt, true);
-			} else {
-				ok = false;
-				break;
-			}
-
-		} else if(lookup_hgt(p) < hgt) {
-
-			if(can_raise_to(p.x, p.y, hgt)) {
-				n += raise_to(p.x, p.y, hgt, true);
-			} else {
-				ok = false;
-				break;
-			}
+	bool ok = false;
+	if (lookup_kartenboden(pos)->get_hoehe()>=hgt) {
+		if (can_lower_to(pos.x, pos.y, hgt, hgt, hgt, hgt)) {
+			n = lower_to(pos.x, pos.y, hgt, hgt, hgt, hgt);
+			ok = true;
 		}
 	}
-	// was changed => recalc + pay for it
-	if(n>0) {
-		// update image
-		for(int j=pos.y-n; j<=pos.y+n; j++) {
-			for(int i=pos.x-n; i<=pos.x+n; i++) {
-				grund_t *gr = lookup_kartenboden( koord(i,j) );
-				if(gr) gr->calc_bild();
-			}
+	else {
+		if (can_raise_to(pos.x, pos.y, hgt, hgt, hgt, hgt)) {
+			n = raise_to(pos.x, pos.y, hgt, hgt, hgt, hgt);
+			ok = true;
 		}
+	}
+	// was changed => pay for it
+	if(n>0) {
 		spieler_t::accounting(sp, n*get_einstellungen()->cst_alter_land, pos, COST_CONSTRUCTION );
 	}
 	return ok;
@@ -1828,12 +2108,14 @@ void karte_t::set_werkzeug( werkzeug_t *w )
 		set_dirty();
 		if(w!=werkzeug) {
 
-			// reinit same tool => do not play sound twice
-			struct sound_info info;
-			info.index = SFX_SELECT;
-			info.volume = 255;
-			info.pri = 0;
-			sound_play(info);
+			if(  SFX_SELECT!=NO_SOUND  ) {
+				// reinit same tool => do not play sound twice
+				struct sound_info info;
+				info.index = SFX_SELECT;
+				info.volume = 255;
+				info.pri = 0;
+				sound_play(info);
+			}
 
 			// only exit, if it is not the same tool again ...
 			werkzeug->exit(this,active_player);
@@ -1878,11 +2160,10 @@ sint16 karte_t::max_hgt(const koord pos) const
 }
 
 
-void
-karte_t::rotate90()
+void karte_t::rotate90()
 {
 	// asumme we can save this rotation
-	nosave = false;
+	nosave_warning = nosave = false;
 
 	//announce current target rotation
 	einstellungen->rotate90();
@@ -1890,6 +2171,12 @@ karte_t::rotate90()
 	// clear marked region
 	zeiger->change_pos( koord3d::invalid );
 
+	// preprocessing, detach stops from factories to prevent crash
+	slist_iterator_tpl <halthandle_t> halt_pre_iter (haltestelle_t::get_alle_haltestellen());
+	while( halt_pre_iter.next() ) {
+		halt_pre_iter.get_current()->release_factory_links();
+	}
+
 	// first: rotate all things on the map
 	planquadrat_t *new_plan = new planquadrat_t[cached_groesse_gitter_y*cached_groesse_gitter_x];
 	for( int x=0;  x<cached_groesse_gitter_x;  x++  ) {
@@ -1898,6 +2185,7 @@ karte_t::rotate90()
 			int new_nr = (cached_groesse_karte_y-y)+(x*cached_groesse_gitter_y);
 			new_plan[new_nr] = plan[nr];
 			plan[nr] = planquadrat_t();
+
 			// now rotate everything on the ground(s)
 			for(  uint i=0;  i<new_plan[new_nr].get_boden_count();  i++  ) {
 				new_plan[new_nr].get_boden_bei(i)->rotate90();
@@ -2650,6 +2938,9 @@ karte_t::step()
 		else if(delta_t>250  &&  next_wait_time>0) {
 			// too long pause
 			next_wait_time --;
+			if( delta_t>500  &&  umgebung_t::fps<2*realFPS  ) {
+				next_wait_time = 0;
+			}
 		}
 		last_step_nr[steps%32] = ticks;
 	}
@@ -2736,9 +3027,11 @@ karte_t::step()
 	for(  int i=0;  i<MAX_PLAYER_COUNT;  i++  ) {
 		if(  spieler[i] != NULL  ) {
 			spieler[i]->step();
-			INT_CHECK("simworld 1975");
 		}
 	}
+	INT_CHECK("simworld 1975");
+
+	haltestelle_t::step_all();
 
 	// ok, next step
 	INT_CHECK("simworld 1975");
@@ -2994,11 +3287,161 @@ void karte_t::blick_aendern(event_t *ev)
 }
 
 
-// nordhang = 3
-// suedhang = 12
+static sint8 median( sint8 a, sint8 b, sint8 c )
+{
+#if 0
+	if(  a==b  ||  a==c  ) {
+		return a;
+	}
+	else if(  b==c  ) {
+		return b;
+	}
+	else {
+		// noting matches
+//		return (3*128+1 + a+b+c)/3-128;
+		return -128;
+	}
+#elif 0
+	if(  a<=b  ) {
+		return b<=c ? b : max(a,c);;
+	}
+	else {
+		return b>c ? b : min(a,c);;
+	}
+#else
+		return (6*128+3 + a+a+b+b+c+c)/6-128;
+#endif
+}
+
+
+
+/**
+ * returns the natural slope at a position using the actual slopes
+ * @author prissi
+ */
+uint8 karte_t::recalc_natural_slope( const koord pos, sint8 &new_height ) const
+{
+	grund_t *gr = lookup_kartenboden(pos);
+	if(!gr) {
+		return hang_t::flach;
+	}
+	else {
+		// now we check each four corners
+		grund_t *gr1, *gr2, *gr3;
+
+		// back right
+		gr1 = lookup_kartenboden(pos+koord(0,-1));
+		gr2 = lookup_kartenboden(pos+koord(1,-1));
+		gr3 = lookup_kartenboden(pos+koord(1,0));
+		// now get the correct height
+		sint16 height1 = median (
+			gr1 ? (sint16)gr1->get_hoehe()+corner2(gr1->get_grund_hang()) : grundwasser,
+			gr2 ? (sint16)gr2->get_hoehe()+corner1(gr2->get_grund_hang()) : grundwasser,
+			gr3 ? (sint16)gr3->get_hoehe()+corner4(gr3->get_grund_hang()) : grundwasser
+		);
+		// now we have height for corner one
+
+		// front right
+		gr1 = lookup_kartenboden(pos+koord(1,0));
+		gr2 = lookup_kartenboden(pos+koord(1,1));
+		gr3 = lookup_kartenboden(pos+koord(0,1));
+		// now get the correct height
+		sint16 height2 = median (
+			gr1 ? (sint16)gr1->get_hoehe()+corner1(gr1->get_grund_hang()) : grundwasser,
+			gr2 ? (sint16)gr2->get_hoehe()+corner4(gr2->get_grund_hang()) : grundwasser,
+			gr3 ? (sint16)gr3->get_hoehe()+corner3(gr3->get_grund_hang()) : grundwasser
+		);
+		// now we have height for corner two
+
+		// front left
+		gr1 = lookup_kartenboden(pos+koord(0,1));
+		gr2 = lookup_kartenboden(pos+koord(-1,1));
+		gr3 = lookup_kartenboden(pos+koord(-1,0));
+		// now get the correct height
+		sint16 height3 = median (
+			gr1 ? (sint16)gr1->get_hoehe()+corner4(gr1->get_grund_hang()) : grundwasser,
+			gr2 ? (sint16)gr2->get_hoehe()+corner3(gr2->get_grund_hang()) : grundwasser,
+			gr3 ? (sint16)gr3->get_hoehe()+corner2(gr3->get_grund_hang()) : grundwasser
+		);
+		// now we have height for corner three
+
+		// back left
+		gr1 = lookup_kartenboden(pos+koord(-1,0));
+		gr2 = lookup_kartenboden(pos+koord(-1,-1));
+		gr3 = lookup_kartenboden(pos+koord(0,-1));
+		// now get the correct height
+		sint16 height4 = median (
+			gr1 ? (sint16)gr1->get_hoehe()+corner3(gr1->get_grund_hang()) : grundwasser,
+			gr2 ? (sint16)gr2->get_hoehe()+corner2(gr2->get_grund_hang()) : grundwasser,
+			gr3 ? (sint16)gr3->get_hoehe()+corner1(gr3->get_grund_hang()) : grundwasser
+		);
+		// now we have height for corner four
+
+		// new height of that tile ...
+		sint8 min_height = min(min(height1,height2), min(height3,height4));
+		sint8 max_height = max(max(height1,height2), max(height3,height4));
+#ifndef DOUBLE_GROUNDS
+		/* check for an artificial slope on a steep sidewall */
+		bool not_ok = abs(max_height-min_height)>2  ||  min_height == -128;
+
+		sint8 old_height = gr->get_hoehe();
+		new_height = min_height;
+
+		// now we must make clear, that there is no ground above/below the slope
+		if(  old_height!=new_height  ) {
+			not_ok |= lookup(koord3d(pos,new_height))!=NULL;
+			if(  old_height > new_height  ) {
+				not_ok |= lookup(koord3d(pos,old_height-1))!=NULL;
+			}
+			if(  old_height < new_height  ) {
+				not_ok |= lookup(koord3d(pos,old_height+1))!=NULL;
+			}
+			not_ok |= lookup(koord3d(pos,new_height))!=NULL;
+		}
+
+		if(  not_ok  ) {
+			/* difference too high or ground above/below
+			 * we just keep it as it was ...
+			 */
+			new_height = old_height;
+			return gr->get_grund_hang();
+		}
+#if 0
+		// Since we have now the correct slopes, we update the grid:
+		sint8 *p = &grid_hgts[pos.x + pos.y*(get_groesse_x()+1)];
+		*p = height4;
+		*(p+1) = height3;
+		*(p+get_groesse_x()+2) = height2;
+		*(p+get_groesse_x()+1) = height1;
+#endif
+
+		// since slopes could be two unit height, we just return best effort ...
+		return (height4-new_height>0 ? 8 : 0) + (height1-new_height>0 ? 4 : 0) + (height2-new_height ? 2 : 0) + (height3-new_height>0 ? 1 : 0);
+#else
+		if(  max_height-min_height>2  ) {
+			/* this is an artificial slope on a steep sidewall
+			 * we just keep it as it was ...
+			 */
+			new_height = gr->get_hoehe();
+			return gr->get_grund_hang();
+		}
+		new_height = min_height;
+
+		const int d1=height1-mini;
+		const int d2=height2-mini;
+		const int d3=height3-mini;
+		const int d4=height4-mini;
+
+		return (d1*27) + (d2*9) + (d3*3) + d4;
+#endif
+	}
+	return 0;
+}
+
+
 
 /**
- * returns the natural slope a a position
+ * returns the natural slope a a position using the grid
  * @author prissi
  */
 uint8 karte_t::calc_natural_slope( const koord pos ) const
@@ -3020,19 +3463,17 @@ uint8 karte_t::calc_natural_slope( const koord pos ) const
 		const int d4=h4-mini;
 
 #ifndef DOUBLE_GROUNDS
-		const int slope = (d1<<3) + (d2<<2) + (d3<<1) + d4;
+		return (d1<<3) | (d2<<2) | (d3<<1) | d4;
 #else
-		const int slope = (d1*27) + (d2*9) + (d3*3) + d4;
+		return (d1*27) + (d2*9) + (d3*3) + d4;
 #endif
-		return slope;
 	}
 	return 0;
 }
 
 
 
-bool
-karte_t::ist_wasser(koord pos, koord dim) const
+bool karte_t::ist_wasser(koord pos, koord dim) const
 {
 	koord k;
 
@@ -3117,12 +3558,16 @@ bool
 karte_t::play_sound_area_clipped(koord pos, sound_info info)
 {
 	if(is_sound) {
-		const int center = display_get_width() >> 7;
-		const int dist = abs((pos.x-center) - ij_off.x) + abs((pos.y-center) - ij_off.y);
+		const int dist = koord_distance( pos, zeiger->get_pos() );
 
-		if(dist < 25) {
-			info.volume = 255-dist*9;
-			sound_play(info);
+		if(dist < 100) {
+			int xw = (2*display_get_width())/get_tile_raster_width();
+			int yw = (4*display_get_height())/get_tile_raster_width();
+
+			info.volume = (255l*(xw+yw))/(xw+yw+(64*dist));
+			if(  info.volume>8  ) {
+				sound_play(info);
+			}
 		}
 		return dist < 25;
 	}
@@ -3131,8 +3576,7 @@ karte_t::play_sound_area_clipped(koord pos, sound_info info)
 
 
 
-void
-karte_t::speichern(const char *filename,bool silent)
+void karte_t::speichern(const char *filename,bool silent)
 {
 #ifndef DEMO
 DBG_MESSAGE("karte_t::speichern()", "saving game to '%s'", filename);
@@ -3165,8 +3609,7 @@ DBG_MESSAGE("karte_t::speichern()", "saving game to '%s'", filename);
 }
 
 
-void
-karte_t::speichern(loadsave_t *file,bool silent)
+void karte_t::speichern(loadsave_t *file,bool silent)
 {
 	bool needs_redraw = false;
 
@@ -3176,16 +3619,33 @@ DBG_MESSAGE("karte_t::speichern(loadsave_t *file)", "start");
 		display_progress(0,get_groesse_y());
 	}
 
-	// rotate the map until it can be saved
-	for( int i=0;  i<4  &&  nosave;  i++  ) {
-		nosave = false;
+	// rotate the map until it can be saved completely
+	nosave_warning = nosave = false;
+	for( int i=0;  i<4  &&  nosave_warning;  i++  ) {
 		rotate90();
 		needs_redraw = true;
 	}
-	if(nosave) {
-		dbg->error( "karte_t::speichern()","Map cannot be saved in any rotation!" );
-		create_win( new news_img("Map not saveable in any rotation!"), w_time_delete, magic_none);
-		return;
+	// seems not successful
+	if(nosave_warning) {
+		// but then we try to rotate until only warnings => some buildings may be broken, but factories should be fine
+		for( int i=0;  i<4  &&  nosave;  i++  ) {
+			rotate90();
+			needs_redraw = true;
+		}
+		if(  nosave  ) {
+			dbg->error( "karte_t::speichern()","Map cannot be saved in any rotation!" );
+			create_win( new news_img("Map may be not saveable in any rotation!"), w_info, magic_none);
+			// still broken, but we try anyway to save it ...
+		}
+	}
+	// only broken buildings => just warn
+	if(nosave_warning) {
+		dbg->error( "karte_t::speichern()","Some buildings may be broken by saving!" );
+	}
+
+	// If the current tool is a two_click_werkzeug, call cleanup() in order to delete dummy grounds (tunnel + monorail preview)
+	if( two_click_werkzeug_t* tool = dynamic_cast<two_click_werkzeug_t*>(get_werkzeug()) ) {
+		tool->cleanup( this, false );
 	}
 
 	// do not set value for empyt player
@@ -3226,10 +3686,13 @@ DBG_MESSAGE("karte_t::speichern(loadsave_t *file)", "saved cities ok");
 	}
 DBG_MESSAGE("karte_t::speichern(loadsave_t *file)", "saved tiles");
 
-	for(int j=0; j<(get_groesse_y()+1)*(get_groesse_x()+1); j++) {
-		file->rdwr_byte(grid_hgts[j], "\n");
+	if(  file->get_version()<=102001  ) {
+		// not needed any more
+		for(int j=0; j<(get_groesse_y()+1)*(get_groesse_x()+1); j++) {
+			file->rdwr_byte(grid_hgts[j], "\n");
+		}
+	DBG_MESSAGE("karte_t::speichern(loadsave_t *file)", "saved hgt");
 	}
-DBG_MESSAGE("karte_t::speichern(loadsave_t *file)", "saved hgt");
 
 	sint32 fabs = fab_list.get_count();
 	file->rdwr_long(fabs, "\n");
@@ -3322,8 +3785,7 @@ DBG_MESSAGE("karte_t::speichern(loadsave_t *file)", "saved players");
 
 
 // just the preliminaries, opens the file, checks the versions ...
-bool
-karte_t::laden(const char *filename)
+bool karte_t::laden(const char *filename)
 {
 	bool ok=false;
 	mute_sound(true);
@@ -3382,6 +3844,7 @@ void karte_t::laden(loadsave_t *file)
 
 	destroy();
 	fast_forward = false;
+	simloops = 60;
 
 	// powernets zum laden vorbereiten -> tabelle loeschen
 	powernet_t::neue_karte();
@@ -3495,8 +3958,8 @@ DBG_DEBUG("karte_t::laden", "init %i cities",einstellungen->get_anzahl_staedte()
 		display_progress(y, get_groesse_y()+stadt.get_count()+256);
 	}
 
-DBG_MESSAGE("karte_t::laden()","loading grid");
 	if(file->get_version()<99005) {
+		DBG_MESSAGE("karte_t::laden()","loading grid for older versions");
 		for (int y = 0; y <= get_groesse_y(); y++) {
 			for (int x = 0; x <= get_groesse_x(); x++) {
 				sint32 hgt;
@@ -3506,12 +3969,23 @@ DBG_MESSAGE("karte_t::laden()","loading grid");
 			}
 		}
 	}
-	else {
+	else if(  file->get_version()<=102001  )  {
 		// hgt now bytes
+		DBG_MESSAGE("karte_t::laden()","loading grid for older versions");
 		for( sint32 i=0;  i<(get_groesse_y()+1)*(get_groesse_x()+1);  i++  ) {
 			file->rdwr_byte( grid_hgts[i], "\n" );
 		}
 	}
+	else {
+		// jsut restore the corners as ground level
+		DBG_MESSAGE("karte_t::laden()","calculating grid corners");
+		for( sint32 i=1;  i<get_groesse_x()+1;  i++  ) {
+			grid_hgts[i] = grundwasser;
+		}
+		for( sint32 j=0;  j<get_groesse_y()+1;  j++  ) {
+			grid_hgts[(get_groesse_x()+1)*j] = grundwasser;
+		}
+	}
 
 	if(file->get_version()<88009) {
 		DBG_MESSAGE("karte_t::laden()","loading slopes from older version");
@@ -3579,20 +4053,9 @@ DBG_MESSAGE("karte_t::laden()", "%d factories loaded", fab_list.get_count());
 		if(file->get_version()<99014) {
 			(*i)->verbinde_fabriken();
 		}
-		(*i)->laden_abschliessen();
 		display_progress(x++, get_groesse_y() + 256 + stadt.get_count());
 	}
 
-	// must resort them ...
-	weighted_vector_tpl<stadt_t*> new_weighted_stadt(stadt.get_count() + 1);
-	for (weighted_vector_tpl<stadt_t*>::const_iterator i = stadt.begin(), end = stadt.end(); i != end; ++i) {
-		stadt_t* s = *i;
-		new_weighted_stadt.append(s, s->get_einwohner(), 64);
-		INT_CHECK("simworld 1278");
-	}
-	swap(stadt, new_weighted_stadt);
-	DBG_MESSAGE("karte_t::laden()", "cities initialized");
-
 	// load linemanagement status (and lines)
 	// @author hsiegeln
 	if (file->get_version() > 82003  &&  file->get_version()<88003) {
@@ -3608,13 +4071,14 @@ DBG_MESSAGE("karte_t::laden()", "%d factories loaded", fab_list.get_count());
 	if(file->get_version()>=99008) {
 		sint32 halt_count;
 		file->rdwr_long(halt_count,"hc");
+		DBG_MESSAGE("karte_t::laden()","%d halts loaded",halt_count);
 		for(int i=0; i<halt_count; i++) {
 			halthandle_t halt = haltestelle_t::create( this, file );
 			if(halt->existiert_in_welt()) {
 				halt->get_besitzer()->halt_add(halt);
 			}
 			else {
-				dbg->warning("karte_t::laden()", "could not restore stopnear %i,%i", halt->get_init_pos().x, halt->get_init_pos().y );
+				dbg->warning("karte_t::laden()", "could not restore stop near %i,%i", halt->get_init_pos().x, halt->get_init_pos().y );
 			}
 		}
 	}
@@ -3735,6 +4199,17 @@ DBG_MESSAGE("karte_t::laden()", "%d ways loaded",weg_t::get_alle_wege().get_coun
 		}
 	}
 
+	// must resort them ...
+	weighted_vector_tpl<stadt_t*> new_weighted_stadt(stadt.get_count() + 1);
+	for (weighted_vector_tpl<stadt_t*>::const_iterator i = stadt.begin(), end = stadt.end(); i != end; ++i) {
+		stadt_t* s = *i;
+		s->laden_abschliessen();
+		new_weighted_stadt.append(s, s->get_einwohner(), 64);
+		INT_CHECK("simworld 1278");
+	}
+	swap(stadt, new_weighted_stadt);
+	DBG_MESSAGE("karte_t::laden()", "cities initialized");
+
 	// recalculate halt connections
 	slist_iterator_tpl<halthandle_t>iter(haltestelle_t::get_alle_haltestellen());
 	int hnr=0, hmax=haltestelle_t::get_alle_haltestellen().get_count();
@@ -3887,7 +4362,10 @@ karte_t::mark_area( const koord3d pos, const koord size, const bool mark )
 {
 	for( sint16 y=pos.y;  y<pos.y+size.y;  y++  ) {
 		for( sint16 x=pos.x;  x<pos.x+size.x;  x++  ) {
-			grund_t *gr = lookup_kartenboden( koord(x,y) );
+			grund_t *gr = lookup( koord3d(x,y,pos.z));
+			if (!gr) {
+				gr = lookup_kartenboden( koord(x,y) );
+			}
 			if(gr) {
 				if(mark) {
 					gr->set_flag(grund_t::marked);
@@ -3909,6 +4387,8 @@ karte_t::reset_timer()
 	DBG_MESSAGE("karte_t::reset_timer()","called");
 	// Reset timers
 	uint32 last_tick_sync = dr_time();
+	mouse_rest_time = last_tick_sync;
+	sound_wait_time = AMBIENT_SOUND_INTERVALL;
 	intr_set_last_time(last_tick_sync);
 	intr_enable();
 
@@ -3999,18 +4479,13 @@ void karte_t::set_pause(bool p)
 
 void karte_t::bewege_zeiger(const event_t *ev)
 {
+	static int mb_alt=0;
+
 	if(zeiger) {
 		const int rw1 = get_tile_raster_width();
 		const int rw2 = rw1/2;
 		const int rw4 = rw1/4;
 
-		int i_alt=zeiger->get_pos().x;
-		int j_alt=zeiger->get_pos().y;
-		static int mb_alt=0;
-
-		// needed for dragging
-		const koord prev_pos = zeiger->get_pos().get_2d();
-
 		int screen_y = ev->my - y_off - rw2 - ((display_get_width()/rw1)&1)*rw4;
 		int screen_x = (ev->mx - x_off - rw2)/2;
 
@@ -4035,67 +4510,71 @@ void karte_t::bewege_zeiger(const event_t *ev)
 
 		*/
 
-		// iterative naeherung fuer zeigerposition
-		// iterative naehreung an gelaendehoehe
-
-		int hgt = lookup_hgt(koord(i_alt, j_alt));
-
 		const int i_off = ij_off.x+get_ansicht_ij_offset().x;
 		const int j_off = ij_off.y+get_ansicht_ij_offset().y;
 
 		bool found = false;
-		if(grund_t::underground_mode) {
-			static sint8 found_hgt = grundwasser;
-
-			for( hgt = grundwasser ; hgt < 32  && !found ; hgt++) {
-				const int base_i = (screen_x+screen_y + tile_raster_scale_y((hgt*TILE_HEIGHT_STEP)/Z_TILE_STEP,rw1) )/2;
-				const int base_j = (screen_y-screen_x + tile_raster_scale_y((hgt*TILE_HEIGHT_STEP)/Z_TILE_STEP,rw1))/2;
-
-				mi = ((int)floor(base_i/(double)rw4)) + i_off;
-				mj = ((int)floor(base_j/(double)rw4)) + j_off;
-
-				const planquadrat_t *plan = lookup(koord(mi,mj));
-				if(plan != NULL) {
-					for( unsigned i=0;  plan != NULL && i<plan->get_boden_count();  i++  ) {
-						if(!plan->get_boden_bei(i)->ist_tunnel() && hgt == plan->get_boden_bei(i)->get_hoehe()) {
-							found = true;
-							found_hgt = hgt;
-						}
-					}
+		// uncomment to: ctrl-key selects ground
+		//bool select_karten_boden = event_get_last_control_shift()==2;
+
+		sint8 hgt; // trial height
+		sint8 groff; // offset for lower raise tool
+		// fallback: take kartenboden if nothing else found
+		const grund_t *bd = NULL;
+		// for the calculation of hmin/hmax see simview.cc
+		// for the definition of underground_level see grund_t::set_underground_mode
+		const sint8 hmin = grund_t::underground_mode!=grund_t::ugm_all ? min(grundwasser, grund_t::underground_level) : grundwasser-10;
+		const sint8 hmax = grund_t::underground_mode==grund_t::ugm_all ? 32 : min(grund_t::underground_level, 32);
+
+		// find matching and visible grund
+		for(hgt = hmax; hgt>=hmin; hgt-=Z_TILE_STEP) {
+
+			const int base_i = (screen_x+screen_y + tile_raster_scale_y((hgt*TILE_HEIGHT_STEP)/Z_TILE_STEP,rw1) )/2;
+			const int base_j = (screen_y-screen_x + tile_raster_scale_y((hgt*TILE_HEIGHT_STEP)/Z_TILE_STEP,rw1))/2;
+
+			mi = ((int)floor(base_i/(double)rw4)) + i_off;
+			mj = ((int)floor(base_j/(double)rw4)) + j_off;
+
+			const grund_t *gr = lookup(koord3d(mi,mj,hgt));
+			if(gr != NULL) {
+				found = /*select_karten_boden ? gr->ist_karten_boden() :*/ gr->is_visible();
+				if( ( gr->get_typ() == grund_t::tunnelboden || gr->get_typ() == grund_t::monorailboden ) && gr->get_weg_nr(0) == NULL ) {
+					// This is only a dummy ground placed by wkz_tunnelbau_t or wkz_wegebau_t as a preview.
+					found = false;
 				}
-			}
-			hgt = found_hgt;
-		}
-		if(!found) {
-			if(grund_t::underground_mode) {
-				hgt = zeiger->get_pos().z;
-			}
-
-			for(int n = 0; n < 2; n++) {
-
-				const int base_i = (screen_x+screen_y + tile_raster_scale_y((hgt*TILE_HEIGHT_STEP)/Z_TILE_STEP,rw1) )/2;
-				const int base_j = (screen_y-screen_x + tile_raster_scale_y((hgt*TILE_HEIGHT_STEP)/Z_TILE_STEP,rw1))/2;
-
-				mi = ((int)floor(base_i/(double)rw4)) + i_off;
-				mj = ((int)floor(base_j/(double)rw4)) + j_off;
-
-				const planquadrat_t *plan = lookup(koord(mi,mj));
-				if(plan != NULL) {
-					hgt = plan->get_kartenboden()->get_hoehe();
+				if (found) {
+					groff = corner4(gr->get_grund_hang());
+					break;
 				}
-				else {
-					hgt = grundwasser;
+
+				if (bd==NULL && gr->ist_karten_boden()) {
+					bd = gr;
 				}
 			}
+			else if (grund_t::underground_mode==grund_t::ugm_level && hgt==hmax) {
+				// fallback in sliced mode, if no ground is under cursor
+				bd = lookup_kartenboden(koord(mi,mj));
+			}
+		}
+		// try kartenboden?
+		if (!found && bd!=NULL) {
+			mi = bd->get_pos().x;
+			mj = bd->get_pos().y;
+			hgt= bd->get_disp_height();
+			groff = bd->is_visible() ? corner4(bd->get_grund_hang()) : 0;
+			found = true;
 		}
+		// no suitable location found (outside map, ...)
+		if (!found) {
+			return;
+		}
+
+		// the new position - extra logic for raise / lower tool
+		const koord3d pos = koord3d(mi,mj, hgt + (zeiger->get_yoff()==Z_GRID ? groff : 0));
 
 		// rueckwaerttransformation um die zielkoordinaten
 		// mit den mauskoordinaten zu vergleichen
-		int neu_x = ((mi-i_off) - (mj-j_off))*rw2;
-		int neu_y = ((mi-i_off) + (mj-j_off))*rw4;
-
-		neu_x += display_get_width()/2 + rw2;
-		neu_y += rw1;
+		int neu_x = ((mi-i_off) - (mj-j_off))*rw2 + display_get_width()/2 + rw2;
 
 		// prüfe richtung d.h. welches nachbarfeld ist am naechsten
 		if(ev->mx-x_off < neu_x) {
@@ -4106,27 +4585,17 @@ void karte_t::bewege_zeiger(const event_t *ev)
 		}
 
 		// zeiger bewegen
-		if(mi >= 0 && mj >= 0 &&  mi<get_groesse_x() &&  mj<get_groesse_y() && (mi != i_alt || mj != j_alt  ||  ev->button_state != mb_alt)) {
+		const koord3d prev_pos = zeiger->get_pos();
+		if(  prev_pos != pos  ||  ev->button_state != mb_alt) {
 
-			i_alt = mi;
-			j_alt = mj;
 			mb_alt = ev->button_state;
 
-			koord3d pos = lookup_kartenboden(koord(mi,mj))->get_pos();
-			if(grund_t::underground_mode) {
-				pos.z = hgt;
-			}
-			else {
-				if(zeiger->get_yoff()==Z_GRID) {
-					pos.z = lookup_hgt(koord(mi,mj));
-				}
-			}
-			koord3d prev_pos = zeiger->get_pos();
 			zeiger->change_pos(pos);
-			// resend init message, if mouse button pressed to enable dragging
-			if(is_dragging  &&  ev->button_state==0) {
+			if(  ev->button_state == 0  ) {
 				is_dragging = false;
-				werkzeug->move( this, get_active_player(), 0, prev_pos );
+				if(  werkzeug_last_pos != pos.get_2d()  ) {
+					werkzeug->move( this, get_active_player(), 0, pos );
+				}
 			}
 			else if(ev->ev_class==EVENT_DRAG  &&  werkzeug_last_pos!=pos.get_2d()) {
 				if(!is_dragging  &&  ist_in_kartengrenzen(prev_pos.get_2d())) {
@@ -4135,6 +4604,12 @@ void karte_t::bewege_zeiger(const event_t *ev)
 				is_dragging = true;
 				werkzeug->move( this, get_active_player(), 1, pos );
 			}
+
+			if(  (ev->button_state&7)==0  ) {
+				// time, since mouse got here
+				mouse_rest_time = dr_time();
+				sound_wait_time = AMBIENT_SOUND_INTERVALL;	// 13s no movement: play sound
+			}
 		}
 	}
 }
@@ -4189,9 +4664,7 @@ void karte_t::switch_active_player(uint8 new_player)
 
 	// update menue entries (we do not want player1 to run anything)
 	if(renew_menu) {
-		for (vector_tpl<toolbar_t *>::const_iterator i = werkzeug_t::toolbar_tool.begin(), end = werkzeug_t::toolbar_tool.end();  i != end;  ++i  ) {
-			(*i)->update(this, active_player);
-		}
+		werkzeug_t::update_toolbars(this);
 		set_dirty();
 	}
 	set_werkzeug( werkzeug_t::general_tool[WKZ_ABFRAGE] );
@@ -4256,10 +4729,6 @@ karte_t::interactive_event(event_t &ev)
 				// close topmost win
 				destroy_win( win_get_top() );
 				break;
-			case 8:
-				sound_play(click_sound);
-				destroy_all_win();
-				break;
 
 			case SIM_KEY_F1:
 				set_werkzeug( werkzeug_t::dialog_tool[WKZ_HELP] );
@@ -4267,9 +4736,22 @@ karte_t::interactive_event(event_t &ev)
 
 			// just ignore the key
 			case 0:
-			case 13:
 				break;
 
+			// distinguish between backspace and ctrl-H (both keycode==8), and enter and ctrl-M (both keycode==13)
+			case 8:
+			case 13:
+				if(  (ev.ev_key_mod & 2) == 0  ) {
+					// Control is _not_ pressed => Backspace or Enter pressed.
+					if(  ev.ev_code == 8  ) {
+						// Backspace
+						sound_play(click_sound);
+						destroy_all_win();
+					}
+					// Ignore Enter and Backspace but not Ctrl-H and Ctrl-M
+					break;
+				}
+
 			default:
 				{
 					bool ok=false;
@@ -4356,6 +4838,38 @@ karte_t::interactive()
 		// check for too much time eaten by frame updates ...
 		if(!fast_forward  &&  !pause) {
 			last_interaction = dr_time();
+			if(  mouse_rest_time+sound_wait_time < last_interaction  ) {
+				// we play an ambient sound, if enabled
+				grund_t *gr = lookup(zeiger->get_pos());
+				if(  gr  ) {
+					sint16 id = NO_SOUND;
+					if(  gr->ist_natur()  ||  gr->ist_wasser()  ) {
+						if(  gr->get_pos().z >= get_snowline()  ) {
+							id = sound_besch_t::climate_sounds[ arctic_climate ];
+						}
+						else {
+							id = sound_besch_t::climate_sounds[ get_climate(zeiger->get_pos().z) ];
+						}
+						if(  id==NO_SOUND  ) {
+							// try, if there is another sound ready
+							if(  zeiger->get_pos().z==grundwasser  &&  !gr->ist_wasser()  ) {
+								id = sound_besch_t::beach_sound;
+							}
+							else if(  gr->get_top()>0  &&  gr->obj_bei(0)->get_typ()==ding_t::baum  ) {
+								id = sound_besch_t::forest_sound;
+							}
+						}
+					}
+					if(  id!=NO_SOUND  ) {
+						struct sound_info ambient_sound;
+						ambient_sound.index = id;
+						ambient_sound.volume = 255;
+						ambient_sound.pri = 0;
+						sound_play( ambient_sound );
+					}
+				}
+				sound_wait_time *= 2;
+			}
 		}
 
 		// get an event
diff --git a/simworld.h b/simworld.h
index 0affce6..8c760d8 100644
--- a/simworld.h
+++ b/simworld.h
@@ -49,6 +49,7 @@ class cstring_t;
 class werkzeug_t;
 class scenario_t;
 class message_t;
+class weg_besch_t;
 
 
 /**
@@ -130,6 +131,10 @@ private:
 	 */
 	sint32 mi, mj;
 
+	/* time when last mouse moved to check for ambient sound events */
+	uint32 mouse_rest_time;
+	uint32 sound_wait_time;	// waiting time before next event
+
 	/**
 	 * If this is true, the map will not be scrolled
 	 * on right-drag
@@ -139,6 +144,7 @@ private:
 
 	// if true, this map cannot be saved
 	bool nosave;
+	bool nosave_warning;
 
 	/*
 	* the current convoi to follow
@@ -225,22 +231,23 @@ private:
 	void calc_hoehe(int x1, int y1, int x2, int y2);
 
 	/**
-	 * Landschafterzeugung mit "perlin noise"
-	 * @author Hj. Malthaner
+	 * Raise tile (x,y): height of each corner is given
 	 */
-	void calc_hoehe_mit_perlin();
-
+	bool can_raise_to(sint16 x, sint16 y, sint8 hsw, sint8 hse, sint8 hne, sint8 hnw, uint8 ctest=15) const;
+	int  raise_to(sint16 x, sint16 y, sint8 hsw, sint8 hse, sint8 hne, sint8 hnw);
 	/**
-	 * Helferroutine fuer cleanup_karte()
-	 * @see karte_t::cleanup_karte
-	 * @author Hj. Malthaner
+	 * Raise grid point (x,y), used during map creation/enlargement
 	 */
-	void raise_clean(sint16 x, sint16 y, sint16 h);
-
-	bool can_raise_to(sint16 x, sint16 y, sint16 h) const;
 	int  raise_to(sint16 x, sint16 y, sint16 h,bool set_slopes);
 
-	bool can_lower_to(sint16 x, sint16 y, sint16 h) const;
+	/**
+	 * Lower tile (x,y): height of each corner is given
+	 */
+	bool can_lower_to(sint16 x, sint16 y, sint8 hsw, sint8 hse, sint8 hne, sint8 hnw, uint8 ctest=15) const;
+	int  lower_to(sint16 x, sint16 y, sint8 hsw, sint8 hse, sint8 hne, sint8 hnw);
+	/**
+	 * Lwer grid point (x,y), used during map creation/enlargement
+	 */
 	int  lower_to(sint16 x, sint16 y, sint16 h,bool set_slopes);
 
 	/**
@@ -681,8 +688,12 @@ public:
 
 	/**
 	 * returns the natural slope a a position
+	 * uses the corner height for the best slope
 	 * @author prissi
 	 */
+	uint8	recalc_natural_slope( const koord pos, sint8 &new_height ) const;
+
+	// no checking, and only using the grind for calculation
 	uint8	calc_natural_slope( const koord pos ) const;
 
 	/**
@@ -847,6 +858,7 @@ public:
 
 	bool cannot_save() const { return nosave; }
 	void set_nosave() { nosave = true; }
+	void set_nosave_warning() { nosave_warning = true; }
 
 	// rotate map view by 90 degree
 	void rotate90();
@@ -870,7 +882,7 @@ public:
 	 * @return Hoehe am Gitterpunkt i,j
 	 * @author Hj. Malthaner
 	 */
-	inline sint16 lookup_hgt(koord k) const {
+	inline sint8 lookup_hgt(koord k) const {
 		return ist_in_gittergrenzen(k.x, k.y) ? grid_hgts[k.x + k.y*(cached_groesse_gitter_x+1)]*Z_TILE_STEP : grundwasser;
 	}
 
@@ -922,8 +934,6 @@ public:
 
 	void mute_sound( bool state ) { is_sound = !state; }
 
-	bool set_hoehe(int x,int y,int h,int &n);
-
 	/**
 	 * Saves the map to a file
 	 * @param filename name of the file to write
diff --git a/sound/core-audio_sound.mm b/sound/core-audio_sound.mm
old mode 100644
new mode 100755
diff --git a/sound/win32_sound.cc b/sound/win32_sound.cc
index fd786c7..da568b9 100644
--- a/sound/win32_sound.cc
+++ b/sound/win32_sound.cc
@@ -75,8 +75,12 @@ int dr_load_sample(char const* filename)
 void dr_play_sample(int sample_number, int volume)
 {
 	if(use_sound!=0  &&  sample_number>=0  &&  sample_number<64  &&  volume>1) {
-//MESSAGE("dr_play_sample()", "%i sample %i, volume %i ",use_sound,sample_number,volume);
-		// prissis short version
+
+		static int last_sample_nr = -1;
+		if(  last_sample_nr==-1) {
+			last_sample_nr = sample_number;
+		}
+
 		static int oldvol = -1;
 		volume = (volume<<8)-1;
 		if(oldvol!=volume) {
@@ -84,9 +88,14 @@ void dr_play_sample(int sample_number, int volume)
 			waveOutSetVolume( 0, vol );
 			oldvol = volume;
 		}
-		// terminate the current sound
-		sndPlaySound( NULL, SND_ASYNC );
-		// now play
-		sndPlaySound(static_cast<WCHAR const*>(samples[sample_number]), SND_MEMORY | SND_ASYNC | SND_NODEFAULT); // XXX this cast seems wrong, samples[] contains char strings, not wide char strings.
+
+		// XXX this cast seems wrong, samples[] contains char strings, not wide char strings.
+		if(  !sndPlaySound(static_cast<WCHAR const*>(samples[sample_number]), SND_MEMORY | SND_ASYNC | SND_NODEFAULT | SND_NOSTOP )  &&  last_sample_nr!=sample_number  ) {
+			// terminate the current sound, if not already the requeste one ...
+			sndPlaySound( NULL, SND_ASYNC );
+			// and play the new sample ...
+			sndPlaySound(static_cast<WCHAR const*>(samples[sample_number]), SND_MEMORY | SND_ASYNC | SND_NODEFAULT | SND_NOSTOP );
+		}
+		last_sample_nr = sample_number;
 	}
 }
diff --git a/sucher/bauplatz_sucher.h b/sucher/bauplatz_sucher.h
index fe1eb5b..7880576 100644
--- a/sucher/bauplatz_sucher.h
+++ b/sucher/bauplatz_sucher.h
@@ -9,6 +9,7 @@
 #define bauplatz_sucher_t_h
 
 #include "platzsucher.h"
+#include "../simworld.h"
 
 /**
  * bauplatz_sucher_t:
diff --git a/sucher/platzsucher.cc b/sucher/platzsucher.cc
index 7f7b017..c6e8dc9 100644
--- a/sucher/platzsucher.cc
+++ b/sucher/platzsucher.cc
@@ -216,7 +216,7 @@ koord platzsucher_t::suche_platz(koord start, sint16 b, sint16 h, climate_bits c
 
 	koord rel1, rel2;
 
-	if(r && b != h) {
+	if((r && *r) && b != h) {
 		//
 		// Hier suchen wir auch gedrehte Positionen.
 		//
diff --git a/tpl/HOT_queue_tpl.h b/tpl/HOT_queue_tpl.h
index b5be0d6..2955928 100644
--- a/tpl/HOT_queue_tpl.h
+++ b/tpl/HOT_queue_tpl.h
@@ -8,8 +8,6 @@
 #ifndef tpl_HOT_queue_tpl_h
 #define tpl_HOT_queue_tpl_h
 
-#include <stdlib.h>
-
 #include "debug_helper.h"
 
 
diff --git a/tpl/array2d_tpl.h b/tpl/array2d_tpl.h
index 3096672..f630095 100644
--- a/tpl/array2d_tpl.h
+++ b/tpl/array2d_tpl.h
@@ -24,8 +24,8 @@ template <class T>
 class array2d_tpl
 {
 private:
-    T* data;
-    unsigned int w, h;
+	T* data;
+	unsigned int w, h;
 
 public:
 
@@ -34,48 +34,48 @@ public:
 		this->h = h;
 
 		data = new T[w*h];
-    }
+	}
 
-    ~array2d_tpl() {
+	~array2d_tpl() {
 		delete [] data;
-    }
+	}
 
-    unsigned int get_width() const {
+	unsigned int get_width() const {
 		return w;
-    }
+	}
 
-    unsigned int get_height() const {
+	unsigned int get_height() const {
 		return h;
-    }
+	}
 
-    T& at(unsigned int x, unsigned int y) {
+	T& at(unsigned int x, unsigned int y) {
 		if(x<w && y<h) {
 			return data[y*w + x];
 		} else {
 			dbg->fatal("array2d_tpl<T>::at()","index out of bounds: (%d,%d) not in (0..%d, 0..%d)", x, y, w-1, h-1);
 			return data[0];//dummy
 		}
-    }
+	}
 
-    T& at(koord k) {
+	T& at(koord k) {
 		return at((unsigned int)k.x, (unsigned int)k.y);
-    }
+	}
 
-    /*
-     * use this with care, you'll lose all checks!
-     */
-    const T* to_array() const {
+	/*
+	 * use this with care, you'll lose all checks!
+	 */
+	const T* to_array() const {
 		return data;
-    }
+	}
 
 
-    void copy_from(const array2d_tpl <T> &other) {
+	void copy_from(const array2d_tpl <T> &other) {
 		if(h == other.h && w == other.w) {
 			memcpy(data, other.data, sizeof(T)*w*h);
 		} else {
 			dbg->fatal("array2d_tpl<T>::copy_from()","source has different size!");
 		}
-    }
+	}
 
 };
 
diff --git a/tpl/binary_heap_tpl.h b/tpl/binary_heap_tpl.h
index 3c7349b..59a7985 100644
--- a/tpl/binary_heap_tpl.h
+++ b/tpl/binary_heap_tpl.h
@@ -8,8 +8,6 @@
 #ifndef tpl_binary_heap_tpl_h
 #define tpl_binary_heap_tpl_h
 
-#include <stdlib.h>
-
 #include "debug_helper.h"
 #include "../simmem.h"
 
diff --git a/tpl/hashtable_tpl.h b/tpl/hashtable_tpl.h
index e2483a1..ae79e7d 100644
--- a/tpl/hashtable_tpl.h
+++ b/tpl/hashtable_tpl.h
@@ -1,10 +1,8 @@
 #ifndef tpl_hashtable_tpl_h
 #define tpl_hashtable_tpl_h
 
-#include <stdio.h>
 #include "slist_tpl.h"
 
-
 #define STHT_BAGSIZE 101
 #define STHT_BAG_COUNTER_T uint8
 
diff --git a/tpl/ordered_vector_tpl.h b/tpl/ordered_vector_tpl.h
deleted file mode 100644
index 861e7fa..0000000
--- a/tpl/ordered_vector_tpl.h
+++ /dev/null
@@ -1,308 +0,0 @@
-#ifndef TPL_ORDERED_VECTOR_TPL_H
-#define TPL_ORDERED_VECTOR_TPL_H
-#include "../simtypes.h"
-#include "../simdebug.h"
-#include "../convoihandle_t.h"
-#include "../linehandle_t.h"
-#include "../halthandle_t.h"
-
-template<class T, class inttype> class ordered_vector_tpl;
-
-/*
- * Template class for a increasingly ordered vector.
- * It needs <= and == for the class T.
- * Since we have also a template for the count and size-variables
- * we are able to define short and long vectors with this class.
- */
-template<class T, class inttype> class ordered_vector_tpl
-{
-	private:
-		T* data;
-		inttype size;  ///< Capacity
-		inttype count; ///< Number of elements in vector
-
-	public:
-		ordered_vector_tpl() :
-			data(NULL),
-			size(0),
-			count(0) {}
-		/** Construct a vector for new_size elements */
-		explicit ordered_vector_tpl(inttype new_size) :
-			data(new_size > 0 ? new T[new_size] : NULL),
-			size(new_size),
-			count(0) {}
-
-		ordered_vector_tpl(const ordered_vector_tpl<T,inttype>& vT)
-		{
-			count = size = 0;
-			data = NULL;
-			resize( vT.get_count() );
-			count = vT.get_count();
-			for(  inttype i=0;  i<count;  i++  ) {
-				data[i] = vT.data[i];
-			}
-		}
-
-		~ordered_vector_tpl() {
-			delete [] data;
-		}
-
-		/** sets the vector to empty */
-		void clear() { count = 0; }
-
-		// Check if elem is contained.
-		bool contains(T elem) const
-		{
-			if(  count == 0  ) {
-				return false;
-			}
-			inttype index = intern_search(elem);
-			return data[index] == elem;
-		}
-
-/*		// Inserts elem.
-		void insert(T elem, inttype i = 0)
-		{
-			if(  count == size  ) {
-				if(  i == 0  ) {
-					resize(  size == 0  ? 1 : 2*size );
-				}
-				else {
-					resize( size + i );
-				}
-			}
-			inttype index = intern_search(elem);
-			move_data(index, count, +1);
-			data[index] = elem;
-			count++;
-		}*/
-
-		/*
-		 * Insert only if elem isn't yet contained.
-		 * Returns false if elem already contained.
-		 */
-		bool insert_unique(T elem, inttype i = 1)
-		{
-			if(  count == size  ) {
-				if(  i == 0  ) {
-					resize(  size == 0  ? 1 : 2*size );
-				}
-				else {
-					resize( size + i );
-				}
-			}
-			inttype index = intern_search(elem);
-			if(  index < count  &&  data[index] == elem  ) {
-				return false;
-			}
-			move_data(index, count, +1);
-			data[index] = elem;
-			count++;
-      return true;
-		}
-
-		// Removes elem.
-		bool remove(T elem)
-		{
-			inttype index = intern_search(elem);
-			if(  index < count  &&  data[index] == elem  ) {
-				remove_at(index);
-				return true;
-			}
-			return false;
-		}
-
-		//Removes the element at the given pos.
-		void remove_at(inttype pos)
-		{
-			move_data(pos+1, count, -1); 
-			count--;
-		}
-
-		/*
-		 * Handle set operations.
-		 * Assume that all values in this and vT are unique!
-		 */
-		void set_union(const ordered_vector_tpl<T, inttype> vT)
-		{
-			T* old_data = data;
-			inttype old_count = count;
-
-			data = new T[ count + vT.count ];
-			count = 0;
-
-			inttype i,j;
-			i = j = 0;
-			while(  i < old_count  &&  j < vT.count  ) {
-				if(  old_data[i] == vT.data[j]  ) {
-					data[ count++ ] = old_data[i];
-					i++;
-					j++;
-				}
-				else
-					if(  old_data[i] <= vT.data[j]  ) {
-						data[ count++ ] = old_data[i];
-						i++;
-					}
-					else
-					{
-						data[ count++ ] = vT.data[j];
-						j++;
-					}
-			}
-			while(  i < old_count  ) {
-				data[ count++ ] = old_data[i];
-				i++;
-			}
-			while(  j < vT.count  ) {
-				data[ count++ ] = vT.data[j];
-				j++;
-			}
-		};
-
-		void set_diff(const ordered_vector_tpl<T, inttype> vT)
-		{
-			inttype i,j;
-			i = j = 0;
-			while(  i < count  &&  j < vT.count  ) {
-				if(  data[i] == vT.data[j]  ) {
-					i++;
-					j++;
-				}
-				else
-					if(  data[i] <= vT.data[j]  ) {
-						remove_at(i);
-					}
-					else
-					{
-						j++;
-					}
-			}
-			// Delete remaining elements:
-			count = i;
-		};
-
-		void set_minus(const ordered_vector_tpl<T, inttype> vT)
-		{
-			inttype i,j;
-			i = j = 0;
-			while(  i < count  &&  j < vT.count  ) {
-				if(  data[i] == vT.data[j]  ) {
-					remove_at(i);
-					j++;
-				}
-				else
-					if(  data[i] <= vT.data[j]  ) {
-						i++;
-					}
-					else
-					{
-						j++;
-					}
-			}
-		};
-
-		/**
-		 * Resizes the maximum data that can be hold by this vector.
-		 * Existing entries are preserved, new_size must be big enough to hold them.
-		 */
-		void resize(inttype new_size)
-		{
-			if (  new_size < count  ||  new_size == size  ) {
-				return;
-			}
-
-			T* new_data = new T[new_size];
-			if(size>0) {
-				for (inttype i = 0; i < count; i++) {
-					new_data[i] = data[i];
-				}
-				delete [] data;
-			}
-			size = new_size;
-			data = new_data;
-		}
-
-		// Returns index of elem.
-		inttype index_of(T elem) const
-		{
-			inttype index = intern_search(elem);
-			if(  index < count  &&  data[index] == elem  ){
-				return index;
-			}
-			else
-			{
-				assert(false);
-				return 0xFFFFFFFFu;
-			}
-		}
-
-		// Useful if accessing the vector by a pointer:
-		T& get_by_index (inttype i) { return data[i]; }
-
-		const T& get_by_index (inttype i) const { return data[i]; }
-
-		T& operator [] (inttype i) { return data[i]; }
-
-		const T& operator [] (inttype i) const { return data[i]; }
-
-		inttype get_count() const { return count; }
-
-		inttype get_size() const { return size; }
-
-		bool is_empty() const { return count==0; }
-	private:
-		/*
-		 * Moves the elements data[start_index]..data[end_index-1] to
-		 * data[start_index+offset]..data[end_index-1+offset]
-		 */
-		void move_data(inttype start_index, inttype end_index, sint8 offset)
-		{
-			inttype num = end_index - start_index;
-			if(  offset < 0 ) {
-				for( inttype i=0; i<num ; i++ ){
-					data[start_index+i+offset] = data[start_index+i];
-				}
-			}
-			else if(  offset > 0  ) {
-				for( inttype i=num ; i>0 ; i-- ){
-					data[start_index+i+offset-1] = data[start_index+i-1];
-				}
-			}
-		}
-
-		/*
-		 * Returns an index i with the following properties:
-		 * 0<= i <= count
-		 * data[i-1] < elem (if 0<= i-1 < count)
-		 * data[i] >= elem  (if 0<= i   < count)
-		 */
-		inttype intern_search(T elem) const
-		{
-			// Test some special cases:
-			if(  count == 0  ||  !(elem <= data[count-1])  ) {
-				return count;
-			}
-			if( elem <= data[0]  ) {
-				return 0;
-			}
-			inttype index_bottom=0, index_top=count-1;
-			inttype index_mid;
-			while(  index_top > index_bottom + 1  ){
-				/*
-				 * In this loop the following two statements hold
-				 *   data[index_bottom] < elem
-				 *   data[index_top] >= elem
-				 */
-				index_mid = (index_top + index_bottom) / 2;
-				if(  elem <= data[index_mid]  ){
-					index_top = index_mid;
-				}
-				else {
-					index_bottom = index_mid;
-				}
-			}
-			return index_top;
-		}
-};
-#endif
diff --git a/tpl/ptrhashtable_tpl.h b/tpl/ptrhashtable_tpl.h
index ee1aa18..45a0c3f 100644
--- a/tpl/ptrhashtable_tpl.h
+++ b/tpl/ptrhashtable_tpl.h
@@ -5,9 +5,8 @@
 #ifndef ptrhashtable_tpl_h
 #define ptrhashtable_tpl_h
 
-#include <cstdlib>
 #include "hashtable_tpl.h"
-
+#include <stdlib.h>
 
 /*
  * Define the key characteristica for hashing pointers. For hashing the
@@ -18,7 +17,7 @@ class ptrhash_tpl {
 public:
 	static uint32 hash(const key_t key)
 	{
-		return labs((long)key);
+		return (uint32)(size_t)key;
 	}
 
 	static key_t null()
@@ -33,7 +32,7 @@ public:
 
 	static long comp(key_t key1, key_t key2)
 	{
-		return (long)key1 - (long)key2;
+		return (long)((size_t)key1 - (size_t)key2);
 	}
 };
 
diff --git a/tpl/quickstone_tpl.h b/tpl/quickstone_tpl.h
index 6f2353b..29cc591 100644
--- a/tpl/quickstone_tpl.h
+++ b/tpl/quickstone_tpl.h
@@ -41,22 +41,37 @@ private:
 		uint16 i;
 
 		// scan rest of array
-		for(i = next; i<size; i++) {
-			if(data[i] == 0) {
+		for(  i=next;  i<size;  i++  ) {
+			if(  data[i] == 0  ) {
 				next = i+1;
 				return i;
 			}
 		}
 
 		// scan whole array
-		for(i = 1; i<size; i++) {
-			if(data[i] == 0) {
+		for(  i=1;  i<size;  i++  ) {
+			if(  data[i]==0  ) {
 				next = i+1;
 				return i;
 			}
 		}
 
-		// no free entry found, can't continue
+		// no free entry found, extent array if possible
+		uint16 newsize = (uint16)min( 65535ul, 2l*size );
+		if(  size<newsize  ) {
+			T ** newdata = new T* [newsize];
+			memcpy( newdata, data, sizeof(T*)*size );
+			for(  uint16 i=size;  i<newsize;  i++  ) {
+				newdata[i] = 0;
+			}
+			delete [] data;
+			data = newdata;
+			next = size+1;
+			size = newsize;
+			return next-1;
+		}
+
+		// completely out of handles
 		dbg->fatal("quickstone<T>::find_next()","no free index found (size=%i)",size);
 		return 0; //dummy for compiler
 	}
@@ -125,6 +140,25 @@ public:
 	}
 #endif
 
+	// returns true, if no handles left
+	static bool is_exhausted() {
+
+		if(  size==65535  ) {
+			// scan  array
+			for(  uint16 i = 1; i<size; i++) {
+				if(data[i] == 0) {
+					// still empty handles left
+					return false;
+				}
+			}
+			// no handles left => cannot extent
+			return true;
+		}
+		// can extent in any case => ok
+		return false;
+	}
+
+
 	inline bool is_bound() const
 	{
 		return data[entry] != 0;
@@ -151,30 +185,21 @@ public:
 	 *
 	 * @author Hj. Malthaner
 	 */
-	T* get_rep() const
-	{
-		return data[entry];
-	}
+	T* get_rep() const { return data[entry]; }
 
 	/**
 	 * @return the index into the tombstone table. May be used as
 	 * an ID for the referenced object.
 	 */
-	uint16 get_id() const
-	{
-		return entry;
-	}
+	uint16 get_id() const { return entry; }
 
 	/**
-	 * Overloaded dereference operator. With this, quickstines can
+	 * Overloaded dereference operator. With this, quickstones can
 	 * be used as if they were pointers.
 	 *
 	 * @author Hj. Malthaner
 	 */
-	T* operator->() const
-	{
-		return data[entry];
-	}
+	T* operator->() const { return data[entry]; }
 
 	bool operator== (const quickstone_tpl<T> &other) const
 	{
@@ -185,6 +210,8 @@ public:
 	{
 		return entry != other.entry;
 	}
+
+	static uint16 get_size() { return size; }
 };
 
 template <class T> T** quickstone_tpl<T>::data = 0;
diff --git a/tpl/sorted_heap_tpl.h b/tpl/sorted_heap_tpl.h
index a04c293..5ecfd06 100644
--- a/tpl/sorted_heap_tpl.h
+++ b/tpl/sorted_heap_tpl.h
@@ -8,7 +8,6 @@
 #ifndef tpl_sorted_heap_tpl_h
 #define tpl_sorted_heap_tpl_h
 
-#include <stdlib.h>
 
 #include "debug_helper.h"
 
diff --git a/tpl/sparse_tpl.h b/tpl/sparse_tpl.h
new file mode 100644
index 0000000..2132694
--- /dev/null
+++ b/tpl/sparse_tpl.h
@@ -0,0 +1,238 @@
+#ifndef tpl_sparse_tpl_h
+#define tpl_sparse_tpl_h
+
+#include "../dataobj/koord.h"
+#include "../simtypes.h"
+
+template <class T> class sparse_tpl;
+template<class T> void swap(sparse_tpl<T>& a, sparse_tpl<T>& b);
+
+/**
+ * A template class for spares 2-dimensional arrays.
+ * It's using Compressed Row Storage (CRS).
+ * @see array2d_tpl
+ */
+
+template <class T>
+class sparse_tpl
+{
+	private:
+		koord size;
+
+		T* data;
+		uint16* col_ind;
+		uint16* row_ptr;
+
+		uint16 data_size;
+		uint16 data_count;
+
+	public:
+		sparse_tpl( koord _size ) {
+			size = _size;
+			data_size = 0;
+			data_count = 0;
+			data = NULL;
+			col_ind = NULL;
+			row_ptr = new uint16[ size.y + 1];
+			for( uint16 i = 0; i < size.y + 1; i++ ) {
+				row_ptr[i] = 0;
+			}
+		}
+
+		~sparse_tpl() {
+			if( data ) {
+				delete[] data;
+				data = NULL;
+			}
+			if( col_ind ) {
+				delete[] col_ind;
+				col_ind = NULL;
+			}
+			delete[] row_ptr;
+			row_ptr = NULL;
+		}
+
+		void clear() {
+			data_count = 0;
+			for( uint16 i = 0; i < size.y + 1; i++ ) {
+				row_ptr[i] = 0;
+			}
+			resize_data(0);
+		}
+
+		koord& get_size() const {
+			return size;
+		}
+
+		uint16 get_data_size() const {
+			return data_size;
+		}
+
+		uint16 get_data_count() const {
+			return data_count;
+		}
+
+		T get( koord pos ) const {
+			if(  pos.x >= 0  &&  pos.y >= 0  &&  pos.x < size.x  &&  pos.y < size.y  ) {
+				return get_unsafe( pos );
+			}
+			return 0;
+		}
+
+		T get( uint16 i, uint16 j ) const {
+			return get(koord(i,j));
+		}
+
+		/*
+		 * Access to the nonzero elements. Result is saved in pos and value!
+		 */
+		void get_nonzero( uint16 index, koord& pos, T& value ) const {
+			if(  index > data_count  ) {
+				pos = koord::invalid;
+				value = 0;
+				return;
+			}
+			value = data[index];
+			pos = koord(col_ind[index], 0);
+			while( row_ptr[ pos.y+1 ] <= index ) {
+				pos.y++;
+			}
+		}
+
+		void set( koord pos, T value ) {
+			if(  pos.x >= 0  &&  pos.y >= 0  &&  pos.x < size.x  &&  pos.y < size.y  ) {
+				set_unsafe( pos, value );
+			}
+		}
+
+		void set( uint16 i, uint16 j, T value ) {
+			set(koord(i,j),value);
+		}
+
+
+	private:
+		T get_unsafe( koord pos ) const {
+			uint16 index = pos_to_index( pos );
+			if(  index < row_ptr[pos.y+1]  &&  col_ind[index] == pos.x  ) {
+				return data[index];
+			}
+			else {
+				return 0;
+			}
+		}
+
+		void set_unsafe( koord pos, T value ) {
+			uint16 index = pos_to_index( pos );
+			if(  index < row_ptr[pos.y+1]  &&  col_ind[index] == pos.x  ) {
+				if( value == 0 ) {
+					move_data(index+1, data_count, -1);
+					for( uint16 i = pos.y+1; i < size.y+1; i++ ){
+						row_ptr[i]--;
+					}
+					data_count--;
+				}
+				else {
+					data[index] = value;
+				}
+			}
+			else {
+				if( value == 0 ) {
+					// Don't add 0 to data!
+					return;
+				}
+				if(  data_count == data_size  ) {
+					resize_data(data_size==0 ? 1 : 2*data_size);
+				}
+				move_data(index, data_count, 1);
+				data[index] = value;
+				col_ind[index] = pos.x;
+				for( uint16 i = pos.y+1; i < size.y+1; i++ ){
+					row_ptr[i]++;
+				}
+				data_count++;
+			}
+		}
+
+		/*
+		 * Moves the elements data[start_index]..data[end_index-1] to
+		 * data[start_index+offset]..data[end_index-1+offset]
+		 */
+		void move_data(uint16 start_index, uint16 end_index, sint8 offset)
+		{
+			uint16 num = end_index - start_index;
+			if(  offset < 0 ) {
+				for( uint16 i=0; i<num ; i++ ){
+					data[start_index+i+offset] = data[start_index+i];
+					col_ind[start_index+i+offset] = col_ind[start_index+i];
+				}
+			}
+			else if(  offset > 0  ) {
+				for( uint16 i=num ; i>0 ; i-- ){
+					data[start_index+i+offset-1] = data[start_index+i-1];
+					col_ind[start_index+i+offset-1] = col_ind[start_index+i-1];
+				}
+			}
+		}
+
+		void resize_data( uint16 new_size ) {
+			if(  new_size < data_count  ||  new_size == data_size  ) {
+				// new_size is too small or equal our current size.
+				return;
+			}
+
+			T* new_data;
+			uint16* new_col_ind;
+			if(  new_size > 0  ) {
+				new_data = new T[new_size];
+				new_col_ind = new uint16[new_size];
+			}
+			else
+			{
+				new_data = NULL;
+				new_col_ind = NULL;
+			}
+			if(  data_size > 0  ) {
+				for( uint16 i = 0; i < data_count; i++ ) {
+					new_data[i] = data[i];
+					new_col_ind[i] = col_ind[i];
+				}
+				delete[] data;
+				delete[] col_ind;
+			}
+			data_size = new_size;
+			data = new_data;
+			col_ind = new_col_ind;
+		}
+
+		/*
+		 * Returns an index i
+		 * - to the pos (if pos already in array)
+		 * - to the index, where pos can be inserted.
+		 */
+		uint16 pos_to_index( koord pos ) const {
+			uint16 row_start = row_ptr[ pos.y ];
+			uint16 row_end = row_ptr[ pos.y + 1 ];
+			for( uint16 i = row_start; i < row_end; i++ ) {
+				if( col_ind[i] >= pos.x ) {
+					return i;
+				}
+			}
+			return row_end;
+		}
+
+	friend void swap<>(sparse_tpl<T>& a, sparse_tpl<T>& b);
+};
+
+template<class T> void swap(sparse_tpl<T>& a, sparse_tpl<T>& b)
+{
+	sim::swap(a.size,  b.size);
+
+	sim::swap(a.data,  b.data);
+	sim::swap(a.col_ind,  b.col_ind);
+	sim::swap(a.row_ptr,  b.row_ptr);
+
+	sim::swap(a.data_size, b.data_size);
+	sim::swap(a.data_count, b.data_count);
+}
+
+#endif
diff --git a/tpl/stringhashtable_tpl.h b/tpl/stringhashtable_tpl.h
index 8bb6c54..1fce0c9 100644
--- a/tpl/stringhashtable_tpl.h
+++ b/tpl/stringhashtable_tpl.h
@@ -5,10 +5,8 @@
 #ifndef stringhashtable_tpl_h
 #define stringhashtable_tpl_h
 
-#include <string.h>
-
 #include "hashtable_tpl.h"
-
+#include <string.h>
 
 /*
  * Define the key characteristica for hashing "const char *".
@@ -51,8 +49,9 @@ public:
 	static uint32 hash(const char *key)
 	{
 		uint32 code = 0;
-		while (*key)
+		while (*key) {
 			code = (code<<5) + code + *key++;
+		}
 		return code;
 	}
 
@@ -87,7 +86,7 @@ template<class value_t>
 class stringhashtable_iterator_tpl : public hashtable_iterator_tpl<const char *, value_t, stringhash_t>
 {
 public:
-    stringhashtable_iterator_tpl(const hashtable_tpl<const char *, value_t, stringhash_t> *hashtable) :
+	stringhashtable_iterator_tpl(const hashtable_tpl<const char *, value_t, stringhash_t> *hashtable) :
 		hashtable_iterator_tpl<const char *, value_t, stringhash_t>(hashtable) {}
 
 	stringhashtable_iterator_tpl(const hashtable_tpl<const char *, value_t, stringhash_t> &hashtable) :
diff --git a/tpl/vector_tpl.h b/tpl/vector_tpl.h
index a01443a..7651d55 100644
--- a/tpl/vector_tpl.h
+++ b/tpl/vector_tpl.h
@@ -1,7 +1,6 @@
 #ifndef TPL_VECTOR_H
 #define TPL_VECTOR_H
 
-#include <stdlib.h>
 #include "../macros.h"
 #include "../simtypes.h"
 #include "../simdebug.h"
@@ -20,11 +19,21 @@ template<class T> class vector_tpl
 
 		/** Construct a vector for cap elements */
 		vector_tpl() : data(NULL), size(0), count(0) {}
+
 		explicit vector_tpl(const uint32 cap) :
 			data(cap > 0 ? new T[cap] : NULL),
 			size(cap),
 			count(0) {}
 
+		vector_tpl(const vector_tpl& copy_from) :
+			data( copy_from.get_size() > 0 ? new T[ copy_from.get_size() ] : 0 ),
+			size( copy_from.get_size() ),
+			count( copy_from.get_size() ) {
+				for( uint32 i = 0; i < count; i++ ) {
+					data[i] = copy_from.data[i];
+				}
+			}
+
 		~vector_tpl() { delete [] data; }
 
 		/** sets the vector to empty */
@@ -230,8 +239,6 @@ template<class T> class vector_tpl
 		bool empty() const { return count == 0; }
 
 	private:
-		vector_tpl(const vector_tpl&);
-
 		T* data;
 		uint32 size;  ///< Capacity
 		uint32 count; ///< Number of elements in vector
diff --git a/unicode.cc b/unicode.cc
index 6ac0344..8088337 100644
--- a/unicode.cc
+++ b/unicode.cc
@@ -8,7 +8,7 @@ static inline int is_3byte_seq(utf8 c) { return (c & 0xF0) == 0xE0; }	// 3 Byte
 static inline int is_cont_char(utf8 c) { return (c & 0xC0) == 0x80; }	// the bytes in a sequence have always the format 10xxxxxx
 
 
-int utf8_get_next_char(const utf8* text, int pos)
+size_t utf8_get_next_char(const utf8* text, size_t pos)
 {
 	// go right one character
 	// the bytes in a sequence have always the format 10xxxxxx, thus we use is_cont_char()
@@ -20,9 +20,9 @@ int utf8_get_next_char(const utf8* text, int pos)
 }
 
 
-int utf8_get_prev_char(const utf8* text, int pos)
+long utf8_get_prev_char(const utf8* text, long pos)
 {
-/*
+/* not needed, since the only position calling it, checks it too
 	if(pos==0) {
 		return 0;
 	}
@@ -39,7 +39,7 @@ int utf8_get_prev_char(const utf8* text, int pos)
 
 // these routines must be able to handle a mix of old and new, since after switching a
 // language the visible gui elements are not immediately retranslated
-utf16 utf8_to_utf16(const utf8* text, int* len)
+utf16 utf8_to_utf16(const utf8* text, size_t* len)
 {
 	if (is_1byte_seq(text[0])) {
 		// ASCII
diff --git a/unicode.h b/unicode.h
index 1e63564..872275b 100644
--- a/unicode.h
+++ b/unicode.h
@@ -1,14 +1,15 @@
 #ifndef UNICODE_H
 #define UNICODE_H
 
+#include <stddef.h>
 
 typedef unsigned char  utf8;
 typedef unsigned short utf16;
 
-int utf8_get_next_char(const utf8 *text, int pos);
-int utf8_get_prev_char(const utf8 *text, int pos);
+size_t utf8_get_next_char(const utf8 *text, size_t pos);
+long utf8_get_prev_char(const utf8 *text, long pos);
 
-utf16 utf8_to_utf16(const utf8 *text, int *len);
+utf16 utf8_to_utf16(const utf8 *text, size_t *len);
 int	utf16_to_utf8(utf16 unicode, utf8 *out);
 
 #endif
diff --git a/utils/cbuffer_t.cc b/utils/cbuffer_t.cc
index a6e3fcb..760f3d8 100644
--- a/utils/cbuffer_t.cc
+++ b/utils/cbuffer_t.cc
@@ -3,6 +3,7 @@
 #include <stdio.h>
 #include <string.h>
 #include "cbuffer_t.h"
+#include "simstring.h"
 #include "../simtypes.h"
 
 
@@ -48,11 +49,10 @@ void cbuffer_t::clear()
  */
 void cbuffer_t::append(const char * text)
 {
-  while(size < capacity-2  &&  *text) {
-    buf[size++] = *text++;
-  }
-
-  buf[size] = 0;
+	while(size < capacity-1  &&  *text) {
+		buf[size++] = *text++;
+	}
+	buf[size] = 0;
 }
 
 
@@ -61,28 +61,40 @@ void cbuffer_t::append(const char * text)
  * be appended.
  * @author Hj. Malthaner
  */
-void cbuffer_t::append(int n)
+void cbuffer_t::append(long n)
 {
-  char tmp[32];
-  char * p = tmp+31;
-  bool neg = false;
-  *p = '\0';
+	char tmp[32];
+	char * p = tmp+31;
+	bool neg = false;
+	*p = '\0';
+
+	if(n < 0) {
+		neg = true;
+		n = -n;
+	}
 
-  if(n < 0) {
-    neg = true;
-    n = -n;
-  }
+	do {
+		*--p  = '0' + (n % 10);
+	} while((n/=10) > 0);
 
-  do {
-    *--p  = '0' + (n % 10);
+	if(neg) {
+		*--p = '-';
+	}
 
-  } while((n/=10) > 0);
+	append(p);
+}
 
-  if(neg) {
-    *--p = '-';
-  }
 
-  append(p);
+/**
+ * Appends a number. If buffer is full, exceeding digits will not
+ * be appended.
+ * @author Hj. Malthaner
+ */
+void cbuffer_t::append(double n,int decimals)
+{
+	char tmp[32];
+	int len = number_to_string( tmp, n, decimals );
+	append(tmp);
 }
 
 
@@ -91,11 +103,29 @@ void cbuffer_t::printf(const char* fmt, ...)
 	va_list ap;
 	va_start(ap, fmt);
 	int count = vsnprintf( buf+size, capacity-size, fmt, ap);
-	assert(count >= 0);
-	if(capacity-size <= (uint)count) {
+	if(count==-1) {
+		// truncated
+		buf[capacity-1] = 0;
+	}
+	else if(capacity-size <= (uint)count) {
 		size = capacity - 1;
-	} else {
+	}
+	else {
 		size += count;
 	}
 	va_end(ap);
 }
+
+
+void cbuffer_t::extent(const unsigned int by_amount)
+{
+	if(  size+by_amount > capacity  ) {
+		unsigned int new_capacity = capacity + by_amount;
+		char *new_buf = new char [new_capacity];
+		memcpy( new_buf, buf, capacity );
+		delete [] buf;
+		buf = new_buf;
+		capacity = new_capacity;
+	}
+}
+
diff --git a/utils/cbuffer_t.h b/utils/cbuffer_t.h
index 4bd09d7..b1de104 100644
--- a/utils/cbuffer_t.h
+++ b/utils/cbuffer_t.h
@@ -8,73 +8,82 @@
  */
 class cbuffer_t
 {
- private:
-
-  unsigned int capacity;
-
-
-  /**
-   * Number of characters without(!) trailing '\0'
-   * @author Hj. Malthaner
-   */
-  unsigned int size;
-
-
-  char * buf;
-
-
-  cbuffer_t(const cbuffer_t &);
-  cbuffer_t & operator=(const cbuffer_t &);
-
- public:
-
-
-  /**
-   * Number of characters without(!) trailing '\0'
-   * @author Hj. Malthaner
-   */
-  int len() const {return size;}
-
-
-  /**
-   * Creates a new cbuffer with capacity cap
-   * @param cap the capacity
-   * @author Hj. Malthaner
-   */
-  cbuffer_t(unsigned int size);
-  ~cbuffer_t();
-
-
-  /**
-   * Clears the buffer
-   * @author Hj. Malthaner
-   */
-  void clear();
-
-
-  /**
-   * Appends text. If buffer is full, exceeding text will not
-   * be appended.
-   * @author Hj. Malthaner
-   */
-  void append(const char * text);
-
-
-  /**
-   * Appends a number. If buffer is full, exceeding digits will not
-   * be appended.
-   * @author Hj. Malthaner
-   */
-  void append(int n);
+private:
+
+	unsigned int capacity;
+
+	/**
+	* Number of characters without(!) trailing '\0'
+	* @author Hj. Malthaner
+	*/
+	unsigned int size;
+
+	char * buf;
+
+	cbuffer_t(const cbuffer_t &);
+	cbuffer_t & operator=(const cbuffer_t &);
+
+public:
+
+	/**
+	 * Number of characters without(!) trailing '\0'
+	 * @author Hj. Malthaner
+	 */
+	int len() const { return size; }
+
+	/**
+	 * if (is_full) then the buffer has to be extended to be able to receive more chars
+	 */
+	bool is_full() const { return size >= (capacity-1); }
+
+	/**
+	 * Creates a new cbuffer with capacity cap
+	 * @param cap the capacity
+	 * @author Hj. Malthaner
+	 */
+	cbuffer_t(unsigned int size);
+	~cbuffer_t();
+
+
+	/**
+	 * Clears the buffer
+	 * @author Hj. Malthaner
+	 */
+	void clear();
+
+
+	/**
+	 * Appends text. If buffer is full, exceeding text will not
+	 * be appended.
+	 * @author Hj. Malthaner
+	 */
+	void append(const char * text);
+
+	/**
+	 * Appends a number. If buffer is full, exceeding digits will not
+	 * be appended.
+	 * @author Hj. Malthaner
+	 */
+	void append(long n);
+
+	/**
+	 * Appends a number. If buffer is full, exceeding digits will not
+	 * be appended.
+	 * @author Hj. Malthaner
+	 */
+	void append(double n, int precision);
 
 	/* Append formatted text to the buffer */
 	void printf(const char* fmt, ...);
 
-  /**
-   * Automagic conversion to a const char* for backwards compatibility
-   * @author Hj. Malthaner
-   */
-  operator const char *() const {return buf;}
+	/* enlarge the buffer if needed (i.e. size+by_amount larger than capacity) */
+	void extent( const unsigned int by_amount );
+
+	/**
+	 * Automagic conversion to a const char* for backwards compatibility
+	 * @author Hj. Malthaner
+	 */
+	operator const char *() const {return buf;}
 
 };
 
diff --git a/utils/cstring_t.cc b/utils/cstring_t.cc
index 3ed532b..72ea788 100644
--- a/utils/cstring_t.cc
+++ b/utils/cstring_t.cc
@@ -40,9 +40,12 @@ cstring_t::cstring_t()
 
 cstring_t::cstring_t(const char *other)
 {
-	const int len = strlen(other)+1;
-	buf = new char[len];
-	strcpy(buf, other);
+	buf = NULL;
+	if(other) {
+		const size_t len = strlen(other)+1;
+		buf = new char[len];
+		strcpy(buf, other);
+	}
 }
 
 
@@ -75,7 +78,7 @@ cstring_t cstring_t::operator+ (const char *other) const
 {
     //printf("cstring_t cstring_t::operator+ (const char *other) const\n");
 	if(buf) {
-		const int tmplen = strlen(buf)+strlen(other) + 1;
+		const size_t tmplen = strlen(buf)+strlen(other) + 1;
 		char *tmp = new char[tmplen];
 
 		strcpy(tmp, buf);
@@ -91,9 +94,9 @@ cstring_t cstring_t::operator+ (const char *other) const
 
 void cstring_t::set_at(int idx, char x) const
 {
-    if(idx > 0 && idx < len()) {
-	buf[idx] = x;
-    }
+	if(idx > 0 && idx < len()) {
+		buf[idx] = x;
+	}
 }
 
 
@@ -199,7 +202,7 @@ long cstring_t::find(char x) const
 	if(p && *p) {
 		do {
 			if(*p == x) {
-				return (p  - buf);
+				return (long)(size_t)(p - buf);
 			}
 		} while(*++p);
 	}
@@ -208,12 +211,12 @@ long cstring_t::find(char x) const
 
 long cstring_t::find(const char *text) const
 {
-	long l = strlen(text);
-	long	n = len() - l + 1;
+	size_t l = strlen(text);
+	size_t n = len() - l + 1;
 
-	for(int i = 0; i < n; i++) {
+	for(size_t i = 0; i < n; i++) {
 		if(!strncmp(text, buf, l)) {
-			return i;
+			return (long)i;
 		}
 	}
 	return -1;
@@ -226,7 +229,7 @@ long cstring_t::find_back(char x) const
 
 		while(p-- != buf) {
 			if(*p == x) {
-				return (p - buf);
+				return (long)(size_t)(p - buf);
 			}
 		}
 	}
diff --git a/utils/cstring_t.h b/utils/cstring_t.h
index 5d192f7..2660e1f 100644
--- a/utils/cstring_t.h
+++ b/utils/cstring_t.h
@@ -1,9 +1,6 @@
 #ifndef CSTRING_T_H
 #define CSTRING_T_H
 
-#include <stdarg.h>
-
-
 #ifndef STRICMP
 #ifdef _MSC_VER
 #define STRICMP stricmp
diff --git a/utils/searchfolder.cc b/utils/searchfolder.cc
index 85ba33c..9971586 100644
--- a/utils/searchfolder.cc
+++ b/utils/searchfolder.cc
@@ -72,12 +72,12 @@ int searchfolder_t::search(const char *filepath, const char *extension)
 #ifdef _MSC_VER
 	lookfor = path + name + ext;
 	struct _finddata_t entry;
-	long hfind = _findfirst((const char*)lookfor, &entry);
+	intptr_t hfind = _findfirst((const char*)lookfor, &entry);
 
 	if(hfind != -1) {
 		lookfor = ext;
 		do {
-			int entry_len = strlen(entry.name);
+			size_t entry_len = strlen(entry.name);
 			if(stricmp(entry.name + entry_len - lookfor.len(), (const char*)lookfor) == 0) {
 				char* const c = MALLOCN(char, path.len() + entry_len + 1);
 				sprintf(c,"%s%s",(const char*)path,entry.name);
diff --git a/utils/simstring.cc b/utils/simstring.cc
index 885d92a..ec54bcf 100644
--- a/utils/simstring.cc
+++ b/utils/simstring.cc
@@ -92,7 +92,7 @@ void money_to_string(char * p, double f)
 	}
 
 	// Hajo: format string
-	l = strchr(tp,'.') - tp;
+	l = (long)(size_t)(strchr(tp,'.') - tp);
 
 	i = l % 3;
 
@@ -121,40 +121,57 @@ void money_to_string(char * p, double f)
 }
 
 
-void number_to_string(char * p, double f)
+int number_to_string(char * p, double f, int decimals  )
 {
-  char   tmp[128];
-  char   *tp = tmp;
-  int    i,l;
-
-  sprintf(tp,"%.2f",f);
-
-  // Hajo: skip sign
-  if(*tp == '-') {
-    *p ++ = *tp++;
-  }
-
-  // Hajo: format string
-  l = strchr(tp,'.') - tp;
-
-  i = l % 3;
-
-  if(i != 0) {
-    memcpy(p, tp, i);
-    p += i;
-    *p++ = thousand_sep;
-  }
-
-  while(i < l) {
-    *p++ = tp[i++];
-    *p++ = tp[i++];
-    *p++ = tp[i++];
-    *p++ = thousand_sep;
-  }
-  --p;
-  i = l+1;
-
-  *p = 0;
+	char  tmp[128];
+	char  *tp = tmp;
+	long  i,l;
+	bool  has_decimals;
+
+	if(  decimals>0  ) {
+		sprintf(tp,"%.*f",decimals,f);
+		has_decimals = true;
+	}
+	else {
+		sprintf(tp,"%.0f", f);
+		// some compilers produce trailing dots then ...
+		has_decimals = strchr(tp,'.')!=NULL;
+	}
+
+	// Hajo: skip sign
+	if(*tp == '-') {
+		*p ++ = *tp++;
+	}
+
+	// Hajo: format string
+	l = has_decimals ? (long)(size_t)(strchr(tp,'.') - tp) : strlen(tp);
+
+	i = l % 3;
+
+	if(i != 0) {
+		memcpy(p, tp, i);
+		p += i;
+		*p++ = thousand_sep;
+	}
+
+	while(i < l) {
+		*p++ = tp[i++];
+		*p++ = tp[i++];
+		*p++ = tp[i++];
+		*p++ = thousand_sep;
+	}
+	p--;
+
+	if(  has_decimals  ) {
+		i++;
+		*p++ = fraction_sep;
+		while(  tp[i]!=0  ) {
+			*p++ = tp[i++];
+		}
+	}
+	*p = 0;
+
+	return (int)(p-tmp);
 }
 
 
@@ -220,11 +237,10 @@ char *tstrncpy(char *dest, const char *src, size_t n)
  */
 void rtrim(char * buf)
 {
-  int l = strlen(buf) - 1;
-
-  while(l >= 0 && buf[l] > 0 && buf[l] <= 32) {
-    buf[l--] = '\0';
-  }
+	long l = (long)strlen(buf) - 1;
+	while(  l >= 0  &&  buf[l] > 0  &&  buf[l] <= 32  ) {
+		buf[l--] = '\0';
+	}
 }
 
 
@@ -235,17 +251,18 @@ void rtrim(char * buf)
  */
 const char * ltrim(const char *p)
 {
-  while(*p != '\0' && *p > 0 && *p <= 32) {
-    p ++;
-  }
-
-  return p;
+	while(*p != '\0' && *p > 0 && *p <= 32) {
+		p ++;
+	}
+	return p;
 }
 
 
 int count_char(const char* str, const char c)
 {
 	int count = 0;
-	while (*str != '\0') count += (*str++ == c);
+	while (*str != '\0') {
+		count += (*str++ == c);
+	}
 	return count;
 }
diff --git a/utils/simstring.h b/utils/simstring.h
index 9cbdd0f..c10588c 100644
--- a/utils/simstring.h
+++ b/utils/simstring.h
@@ -50,7 +50,8 @@ char *make_single_line_string(const char *in,int number_of_lines);
 void money_to_string(char * buf, double f);
 
 
-void number_to_string(char * buf, double f);
+// returns the number of characters
+int number_to_string(char * buf, double f, int decimal_places );
 
 
 /**
diff --git a/vehicle/movingobj.cc b/vehicle/movingobj.cc
index d27c0aa..f3a3517 100644
--- a/vehicle/movingobj.cc
+++ b/vehicle/movingobj.cc
@@ -42,15 +42,21 @@ vector_tpl<const groundobj_besch_t *> movingobj_t::movingobj_typen(0);
 /*
  * Diese Tabelle ermöglicht das Auffinden einer Beschreibung durch ihren Namen
  */
-stringhashtable_tpl<uint32> movingobj_t::besch_names;
+stringhashtable_tpl<groundobj_besch_t *> movingobj_t::besch_names;
 
 
 bool movingobj_t::alles_geladen()
 {
-	if (besch_names.empty()) {
+	movingobj_typen.resize(besch_names.get_count());
+	stringhashtable_iterator_tpl<groundobj_besch_t *>iter(besch_names);
+	while(  iter.next()  ) {
+		iter.access_current_value()->index = movingobj_typen.get_count();
+		movingobj_typen.append( iter.get_current_value() );
+	}
+
+	if(besch_names.empty()) {
+		movingobj_typen.append( NULL );
 		DBG_MESSAGE("movingobj_t", "No movingobj found - feature disabled");
-		// NULL for empty object
-		movingobj_typen.append(NULL);
 	}
 	return true;
 }
@@ -59,12 +65,11 @@ bool movingobj_t::alles_geladen()
 
 bool movingobj_t::register_besch(groundobj_besch_t *besch)
 {
-	if(movingobj_typen.get_count()==0) {
-		// NULL for empty object
-		movingobj_typen.append(NULL);
+	// remove duplicates
+	if(  besch_names.remove( besch->get_name() )  ) {
+		dbg->warning( "movingobj_t::register_besch()", "Object %s was overlaid by addon!", besch->get_name() );
 	}
-	besch_names.put(besch->get_name(), movingobj_typen.get_count() );
-	movingobj_typen.append(besch);
+	besch_names.put(besch->get_name(), besch );
 	return true;
 }
 
@@ -76,9 +81,14 @@ bool movingobj_t::register_besch(groundobj_besch_t *besch)
  */
 const groundobj_besch_t *movingobj_t::random_movingobj_for_climate(climate cl)
 {
+	// none there
+	if(  besch_names.empty()  ) {
+		return NULL;
+	}
+
 	int weight = 0;
 
-	for( unsigned i=1;  i<movingobj_typen.get_count();  i++  ) {
+	for( unsigned i=0;  i<movingobj_typen.get_count();  i++  ) {
 		if(  movingobj_typen[i]->is_allowed_climate(cl)   ) {
 			weight += movingobj_typen[i]->get_distribution_weight();
 		}
@@ -88,7 +98,7 @@ const groundobj_besch_t *movingobj_t::random_movingobj_for_climate(climate cl)
 	if (weight > 0) {
 		const int w=simrand(weight);
 		weight = 0;
-		for( unsigned i=1; i<movingobj_typen.get_count();  i++  ) {
+		for( unsigned i=0; i<movingobj_typen.get_count();  i++  ) {
 			if(  movingobj_typen[i]->is_allowed_climate(cl) ) {
 				weight += movingobj_typen[i]->get_distribution_weight();
 				if(weight>=w) {
@@ -185,6 +195,12 @@ void movingobj_t::rdwr(loadsave_t *file)
 	vehikel_basis_t::rdwr(file);
 
 	file->rdwr_enum(fahrtrichtung, " ");
+	if (file->is_loading()) {
+		// restore dxdy information
+		dx = dxdy[ ribi_t::get_dir(fahrtrichtung)*2];
+		dy = dxdy[ ribi_t::get_dir(fahrtrichtung)*2+1];
+	}
+
 	file->rdwr_byte(steps, " ");
 	file->rdwr_byte(steps_next, "\n");
 
@@ -199,7 +215,13 @@ void movingobj_t::rdwr(loadsave_t *file)
 	else {
 		char bname[128];
 		file->rdwr_str(bname, 128);
-		groundobjtype = besch_names.get(bname);
+		groundobj_besch_t *besch = besch_names.get(bname);
+		if(  besch_names.empty()  ||  besch==NULL  ) {
+			groundobjtype = simrand(movingobj_typen.get_count());
+		}
+		else {
+			groundobjtype = besch->get_index();
+		}
 		// if not there, besch will be zero
 		use_calc_height = true;
 	}
diff --git a/vehicle/movingobj.h b/vehicle/movingobj.h
index 0021975..0969224 100644
--- a/vehicle/movingobj.h
+++ b/vehicle/movingobj.h
@@ -12,7 +12,6 @@
 #include "../tpl/vector_tpl.h"
 #include "../besch/groundobj_besch.h"
 #include "../simcolor.h"
-#include "../dataobj/umgebung.h"
 
 #include "simvehikel.h"
 
@@ -40,7 +39,7 @@ private:
 	koord pos_next_next;
 
 	// static for administration
-	static stringhashtable_tpl<uint32> besch_names;
+	static stringhashtable_tpl<groundobj_besch_t *> besch_names;
 	static vector_tpl<const groundobj_besch_t *> movingobj_typen;
 
 protected:
diff --git a/vehicle/overtaker.h b/vehicle/overtaker.h
old mode 100644
new mode 100755
diff --git a/vehicle/simpeople.cc b/vehicle/simpeople.cc
index 8435263..898e800 100644
--- a/vehicle/simpeople.cc
+++ b/vehicle/simpeople.cc
@@ -29,14 +29,22 @@ stringhashtable_tpl<const fussgaenger_besch_t *> fussgaenger_t::table;
 
 bool fussgaenger_t::register_besch(const fussgaenger_besch_t *besch)
 {
-	liste.append(besch, besch->get_gewichtung(), 1);
+	if(  table.remove(besch->get_name())  ) {
+		dbg->warning( "fussgaenger_besch_t::register_besch()", "Object %s was overlaid by addon!", besch->get_name() );
+	}
 	table.put(besch->get_name(), besch);
-
 	return true;
 }
 
-bool fussgaenger_t::laden_erfolgreich()
+bool fussgaenger_t::alles_geladen()
 {
+	liste.resize(table.get_count());
+	stringhashtable_iterator_tpl<const fussgaenger_besch_t *>iter(table);
+	while(  iter.next()  ) {
+		const fussgaenger_besch_t* besch = iter.get_current_value();
+		liste.append(besch, besch->get_gewichtung(), 1);
+	}
+
 	if (liste.empty()) {
 		DBG_MESSAGE("fussgaenger_t", "No pedestrians found - feature disabled");
 	}
@@ -66,15 +74,9 @@ fussgaenger_t::fussgaenger_t(karte_t *welt, koord3d pos)
 
 
 
-void
-fussgaenger_t::calc_bild()
+void fussgaenger_t::calc_bild()
 {
-	if(welt->lookup(get_pos())->ist_im_tunnel()) {
-		set_bild(IMG_LEER);
-	}
-	else {
-		set_bild(besch->get_bild_nr(ribi_t::get_dir(get_fahrtrichtung())));
-	}
+	set_bild(besch->get_bild_nr(ribi_t::get_dir(get_fahrtrichtung())));
 }
 
 
@@ -94,7 +96,7 @@ void fussgaenger_t::rdwr(loadsave_t *file)
 		file->rdwr_str(s,256);
 		besch = table.get(s);
 		// unknow pedestrian => create random new one
-		if(besch == NULL) {
+		if(besch == NULL  &&  !liste.empty()  ) {
 			besch = liste.at_weight(simrand(liste.get_sum_weight()));
 		}
 	}
@@ -109,7 +111,9 @@ void fussgaenger_t::rdwr(loadsave_t *file)
 // create anzahl pedestrains (if possible)
 void fussgaenger_t::erzeuge_fussgaenger_an(karte_t *welt, const koord3d k, int &anzahl)
 {
-	if (liste.empty()) return;
+	if (liste.empty()) {
+		return;
+	}
 
 	const grund_t* bd = welt->lookup(k);
 	if (bd) {
@@ -138,13 +142,12 @@ void fussgaenger_t::erzeuge_fussgaenger_an(karte_t *welt, const koord3d k, int &
 
 
 
-bool
-fussgaenger_t::sync_step(long delta_t)
+bool fussgaenger_t::sync_step(long delta_t)
 {
 	if(time_to_life<0) {
 		// remove obj
 //DBG_MESSAGE("verkehrsteilnehmer_t::sync_step()","stopped");
-  		return false;
+		return false;
 	}
 
 	time_to_life -= delta_t;
diff --git a/vehicle/simpeople.h b/vehicle/simpeople.h
index 9e179d3..2da424e 100644
--- a/vehicle/simpeople.h
+++ b/vehicle/simpeople.h
@@ -46,7 +46,7 @@ public:
 
 	// class register functions
 	static bool register_besch(const fussgaenger_besch_t *besch);
-	static bool laden_erfolgreich();
+	static bool alles_geladen();
 
 	static void erzeuge_fussgaenger_an(karte_t *welt, koord3d k, int &anzahl);
 };
diff --git a/vehicle/simvehikel.cc b/vehicle/simvehikel.cc
index 0e208ab..1fc6441 100644
--- a/vehicle/simvehikel.cc
+++ b/vehicle/simvehikel.cc
@@ -28,6 +28,7 @@
 #include "../simdebug.h"
 
 #include "../player/simplay.h"
+#include "../simfab.h"
 #include "../simware.h"
 #include "../simhalt.h"
 #include "../simsound.h"
@@ -46,6 +47,7 @@
 #include "../dings/signal.h"
 #include "../dings/roadsign.h"
 #include "../dings/crossing.h"
+#include "../dings/zeiger.h"
 
 #include "../gui/karte.h"
 
@@ -78,7 +80,7 @@ sint8 vehikel_basis_t::dxdy[ 8*2 ] = {
 	-2, -1,	// w
 	-4, 0,	// sw
 	0, 2,	//se
-	2, -1, // n
+	2, -1,	// n
 	2, 1,	// e
 	4, 0,	// ne
 	0, -2	// nw
@@ -163,6 +165,8 @@ vehikel_basis_t::vehikel_basis_t(karte_t *welt):
 	steps = 0;
 	steps_next = 255;
 	use_calc_height = true;
+	dx = 0;
+	dy = 0;
 }
 
 
@@ -176,6 +180,8 @@ vehikel_basis_t::vehikel_basis_t(karte_t *welt, koord3d pos):
 	steps = 0;
 	steps_next = 255;
 	use_calc_height = true;
+	dx = 0;
+	dy = 0;
 }
 
 
@@ -481,10 +487,10 @@ sint16 vehikel_basis_t::calc_height()
 		// slope changed below a moving thing?!?
 		return 0;
 	}
-	else if(gr->ist_tunnel()) {
+	else if(  gr->ist_tunnel()  &&  gr->ist_karten_boden()  ) {
 		hoff = 0;
-		if(!gr->ist_im_tunnel()) {
-			use_calc_height = true;
+		use_calc_height = true; // to avoid errors if undergroundmode is switched
+		if(grund_t::underground_mode==grund_t::ugm_none || (grund_t::underground_mode==grund_t::ugm_level && gr->get_hoehe()<grund_t::underground_level)) {
 			// need hiding? One of the few uses of XOR: not half driven XOR exiting => not hide!
 			ribi_t::ribi hang_ribi = ribi_typ( gr->get_grund_hang() );
 			if((steps<(steps_next/2))  ^  ((hang_ribi&fahrtrichtung)!=0)  ) {
@@ -606,7 +612,7 @@ void vehikel_t::set_convoi(convoi_t *c)
 	if(cnv) {
 		// we need to reestablish the finish flag after loading
 		if(ist_erstes) {
-			check_for_finish = cnv->get_route()->empty()  ||  (route_index>cnv->get_route()->get_max_n())  ||  (get_pos()==cnv->get_route()->position_bei(route_index));
+			check_for_finish = cnv->get_route()->empty()  ||  (route_index>=cnv->get_route()->get_count())  ||  (get_pos()==cnv->get_route()->position_bei(route_index));
 		}
 		// some convois were saved with broken coordinates
 		if(!welt->lookup(pos_prev)) {
@@ -618,7 +624,7 @@ void vehikel_t::set_convoi(convoi_t *c)
 				pos_prev = get_pos();
 			}
 		}
-		if(pos_next!=koord3d::invalid  &&  !cnv->get_route()->empty()  &&  route_index<cnv->get_route()->get_max_n()  &&  (welt->lookup(pos_next)==NULL  ||  welt->lookup(pos_next)->get_weg(get_waytype())==NULL)) {
+		if(pos_next!=koord3d::invalid  &&  !cnv->get_route()->empty()  &&  route_index<cnv->get_route()->get_count()-1  &&  (welt->lookup(pos_next)==NULL  ||  welt->lookup(pos_next)->get_weg(get_waytype())==NULL)) {
 			pos_next = cnv->get_route()->position_bei(route_index+1u);
 		}
 		// just correct freight deistinations
@@ -712,7 +718,7 @@ bool vehikel_t::load_freight(halthandle_t halt)
 		while(total_freight < besch->get_zuladung()) {
 			const uint16 hinein = besch->get_zuladung() - total_freight;
 
-			ware_t ware = halt->hole_ab(besch->get_ware(), hinein, fpl);
+			ware_t ware = halt->hole_ab(besch->get_ware(), hinein, fpl, cnv->get_besitzer() );
 			if(ware.menge==0) {
 				// now empty, but usually, we can get it here ...
 				return ok;
@@ -780,7 +786,7 @@ void vehikel_t::remove_stale_freight()
 			bool found = false;
 
 			for (int i = 0; i < fpl->get_count(); i++) {
-				if (haltestelle_t::get_halt( welt, fpl->eintrag[i].pos ) == tmp.get_zwischenziel()) {
+				if (haltestelle_t::get_halt( welt, fpl->eintrag[i].pos, cnv->get_besitzer() ) == tmp.get_zwischenziel()) {
 					found = true;
 					break;
 				}
@@ -943,7 +949,7 @@ bool vehikel_t::hop_check()
 		}
 
 		// check for oneway sign etc.
-		if(air_wt!=get_waytype()  &&  route_index<cnv->get_route()->get_max_n()) {
+		if(air_wt!=get_waytype()  &&  route_index<cnv->get_route()->get_count()-1) {
 			uint8 dir = get_ribi(bd);
 			koord3d nextnext_pos = cnv->get_route()->position_bei(route_index+1);
 			uint8 new_dir = ribi_typ(nextnext_pos.get_2d()-pos_next.get_2d());
@@ -991,11 +997,10 @@ vehikel_t::verlasse_feld()
 void
 vehikel_t::betrete_feld()
 {
-	if(ist_erstes  &&  reliefkarte_t::is_visible) {
-		reliefkarte_t::get_karte()->set_relief_farbe(get_pos().get_2d(), VEHIKEL_KENN);
-	}
-
 	vehikel_basis_t::betrete_feld();
+	if(ist_erstes  &&  reliefkarte_t::is_visible  ) {
+		reliefkarte_t::get_karte()->calc_map_pixel( get_pos().get_2d() );
+	}
 }
 
 
@@ -1009,7 +1014,7 @@ vehikel_t::hop()
 
 	pos_prev = get_pos();
 	set_pos( pos_next );  // naechstes Feld
-	if(route_index<cnv->get_route()->get_max_n()) {
+	if(route_index<cnv->get_route()->get_count()-1) {
 		route_index ++;
 		pos_next = cnv->get_route()->position_bei(route_index);
 	}
@@ -1123,7 +1128,7 @@ void
 vehikel_t::rauche()
 {
 	// raucht ueberhaupt ?
-	if(rauchen && besch->get_rauch()) {
+	if(rauchen  &&  besch->get_rauch()) {
 
 		bool smoke = besch->get_engine_type()==vehikel_besch_t::steam;
 
@@ -1140,13 +1145,12 @@ vehikel_t::rauche()
 
 		if(smoke) {
 			grund_t * gr = welt->lookup( get_pos() );
-			// nicht im tunnel ?
-			if(gr && !gr->ist_im_tunnel() ) {
+			if(gr) {
 				wolke_t *abgas =  new wolke_t(welt, get_pos(), get_xoff()+((dx*(sint16)((uint16)steps*TILE_STEPS))>>8), get_yoff()+((dy*(sint16)((uint16)steps*TILE_STEPS))>>8)+hoff, besch->get_rauch() );
-
-				if( !gr->obj_add(abgas) ) {
+				if(  !gr->obj_add(abgas)  ) {
 					delete abgas;
-				} else {
+				}
+				else {
 					welt->sync_add( abgas );
 				}
 			}
@@ -1190,7 +1194,7 @@ sint64 vehikel_t::calc_gewinn(koord start, koord end) const
 
 			// now only use the real gain in difference for the revenue (may as well be negative!)
 			const koord &zwpos = ware.get_zielpos();
-			const long dist = abs(zwpos.x - start.x) + abs(zwpos.y - start.y) - (abs(end.x - zwpos.x) + abs(end.y - zwpos.y));
+			const long dist = koord_distance( zwpos, start ) - koord_distance( end, zwpos );
 
 			const sint32 grundwert128 = ware.get_besch()->get_preis()<<7;	// bonus price will be always at least 0.128 of the real price
 			const sint32 grundwert_bonus = (ware.get_besch()->get_preis()*(1000+speed_base*ware.get_besch()->get_speed_bonus()));
@@ -1212,7 +1216,7 @@ sint64 vehikel_t::calc_gewinn(koord start, koord end) const
 
 			// now only use the real gain in difference for the revenue (may as well be negative!)
 			const koord zwpos = ware.get_zwischenziel()->get_basis_pos();
-			const long dist = abs(zwpos.x - start.x) + abs(zwpos.y - start.y) - (abs(end.x - zwpos.x) + abs(end.y - zwpos.y));
+			const long dist = koord_distance( zwpos, start ) - koord_distance( end, zwpos );
 
 			const sint32 grundwert128 = ware.get_besch()->get_preis()<<7;	// bonus price will be always at least 0.128 of the real price
 			const sint32 grundwert_bonus = (ware.get_besch()->get_preis()*(1000+speed_base*ware.get_besch()->get_speed_bonus()));
@@ -1224,7 +1228,7 @@ sint64 vehikel_t::calc_gewinn(koord start, koord end) const
 	}
 	else {
 		// pay distance traveled
-		const long dist = abs_distance( start, end );
+		const long dist = koord_distance( start, end );
 		while( iter.next() ) {
 
 			const ware_t & ware = iter.get_current();
@@ -1546,9 +1550,12 @@ DBG_MESSAGE("vehicle_t::rdwr_from_convoi()","bought at %i/%i.",(insta_zeit%12)+1
 	else {
 		for(int i=0; i<fracht_count; i++) {
 			ware_t ware(welt,file);
-			if(besch==NULL  ||  ware.menge>0) {	// also add, of the besch is unknown to find matching replacement
+			if(  (besch==NULL  ||  ware.menge>0)  &&  welt->ist_in_kartengrenzen(ware.get_zielpos())  ) {	// also add, of the besch is unknown to find matching replacement
 				fracht.insert(ware);
 			}
+			else if(  ware.menge>0  ) {
+				dbg->error( "vehikel_t::rdwr_from_convoi()", "%i of %s to %s ignored!", ware.menge, ware.get_name(), ware.get_zielpos().get_str() );
+			}
 		}
 	}
 
@@ -1627,32 +1634,89 @@ vehikel_t::~vehikel_t()
 
 
 // this routine will display a tooltip for lost, on depot order and stucked vehicles
-void
-vehikel_t::display_after(int xpos, int ypos, bool is_gobal) const
+void vehikel_t::display_after(int xpos, int ypos, bool is_gobal) const
 {
 	if(is_gobal  &&  cnv  &&  ist_erstes) {
 
 		COLOR_VAL color = COL_GREEN; // not used, but stop compiler warning about uninitialized
 		char tooltip_text[1024];
 		tooltip_text[0] = 0;
+		uint8 state = umgebung_t::show_vehicle_states;
+		if(  state==1  ) {
+			// only show when mouse over vehicle
+			if(  welt->get_zeiger()->get_pos()==get_pos()  ) {
+				state = 2;
+			}
+			else {
+				state = 0;
+			}
+		}
 
 		// now find out what has happend
 		switch(cnv->get_state()) {
+			case convoi_t::WAITING_FOR_CLEARANCE_ONE_MONTH:
+			case convoi_t::WAITING_FOR_CLEARANCE:
+			case convoi_t::CAN_START:
+			case convoi_t::CAN_START_ONE_MONTH:
+				if(  state>=2  ) {
+					sprintf( tooltip_text, translator::translate("Waiting for clearance!") );
+					color = COL_YELLOW;
+				}
+				break;
+
+			case convoi_t::LOADING:
+				if(  state>=1  ) {
+					sprintf( tooltip_text, translator::translate("Loading (%i->%i%%)!"), cnv->get_loading_level(), cnv->get_loading_limit() );
+					color = COL_YELLOW;
+				}
+				break;
+
+			case convoi_t::FAHRPLANEINGABE:
+//			case convoi_t::ROUTING_1:
+				if(  state>=2  ) {
+					sprintf( tooltip_text, translator::translate("Schedule changing!") );
+					color = COL_YELLOW;
+				}
+				break;
+
+			case convoi_t::DRIVING:
+				if(  state>=1  ) {
+					grund_t *gr = welt->lookup( cnv->get_route()->position_bei( cnv->get_route()->get_count()-1 ) );
+					if(  gr  &&  gr->get_depot()  ) {
+						sprintf( tooltip_text, translator::translate("go home") );
+						color = COL_GREEN;
+					}
+					else if(  cnv->get_no_load()  ) {
+						sprintf( tooltip_text, translator::translate("no load") );
+						color = COL_GREEN;
+					}
+				}
+				break;
+
+			case convoi_t::LEAVING_DEPOT:
+				if(  state>=2  ) {
+					sprintf( tooltip_text, translator::translate("Leaving depot!") );
+					color = COL_GREEN;
+				}
+				break;
+
 			case convoi_t::WAITING_FOR_CLEARANCE_TWO_MONTHS:
 			case convoi_t::CAN_START_TWO_MONTHS:
-				sprintf( tooltip_text, translator::translate("Vehicle %s is stucked!"), cnv->get_name() );
+				sprintf( tooltip_text, translator::translate("clf_chk_stucked") );
 				color = COL_ORANGE;
 				break;
+
 			case convoi_t::NO_ROUTE:
-				sprintf( tooltip_text, translator::translate("Vehicle %s can't find a route!"), cnv->get_name() );
+				sprintf( tooltip_text, translator::translate("clf_chk_noroute") );
 				color = COL_RED;
 				break;
 		}
 
 		// something to show?
-		if(tooltip_text[0]) {
+		if(  tooltip_text[0]  ) {
 			const int width = proportional_string_width(tooltip_text)+7;
 			const int raster_width = get_tile_raster_width();
+			get_screen_offset( xpos, ypos );
 			xpos += tile_raster_scale_x(get_xoff(), raster_width);
 			ypos += tile_raster_scale_y(get_yoff(), raster_width);
 			if(ypos>LINESPACE+32  &&  ypos+LINESPACE<display_get_clip_wh().yy) {
@@ -1715,7 +1779,7 @@ bool automobil_t::calc_route(koord3d start, koord3d ziel, uint32 max_speed, rout
 	// free target reservation
 	if(ist_erstes  &&  alte_fahrtrichtung!=ribi_t::keine  &&  cnv  &&  target_halt.is_bound() ) {
 		route_t *rt=cnv->get_route();
-		grund_t *target=welt->lookup(rt->position_bei(rt->get_max_n()));
+		grund_t *target=welt->lookup(rt->position_bei(rt->get_count()-1));
 		if(target) {
 			target_halt->unreserve_position(target,cnv->self);
 		}
@@ -1785,12 +1849,31 @@ automobil_t::get_kosten(const grund_t *gr,const uint32 max_speed) const
 
 
 // this routine is called by find_route, to determined if we reached a destination
-bool automobil_t::ist_ziel(const grund_t *gr, const grund_t *) const
+bool automobil_t::ist_ziel(const grund_t *gr, const grund_t *prev_gr) const
 {
 	//  just check, if we reached a free stop position of this halt
 	if(gr->is_halt()  &&  gr->get_halt()==target_halt  &&  target_halt->is_reservable(gr,cnv->self)) {
+		// now we must check the precessor => try to advance as much as possible
+		if(prev_gr!=NULL) {
+			const koord dir=gr->get_pos().get_2d()-prev_gr->get_pos().get_2d();
+			grund_t *to;
+			if(!gr->get_neighbour(to,road_wt,dir)  ||  !(to->get_halt()==target_halt)  ||  !target_halt->is_reservable(to,cnv->self)) {
+				// end of stop: Is it long enough?
+				uint16 tiles = cnv->get_tile_length();
+				while(  tiles>1  ) {
+					if(  !gr->get_neighbour(to,get_waytype(),-dir)  ||  !(to->get_halt()==target_halt)  ) {
+						return false;
+					}
+					gr = to;
+					tiles --;
+				}
+				return true;
+			}
+			// can advance more
+			return false;
+		}
 //DBG_MESSAGE("is_target()","success at %i,%i",gr->get_pos().x,gr->get_pos().y);
-		return true;
+//		return true;
 	}
 	return false;
 }
@@ -1820,10 +1903,14 @@ void automobil_t::get_screen_offset( int &xoff, int &yoff ) const
 
 bool automobil_t::ist_weg_frei(int &restart_speed)
 {
-	const grund_t *gr = welt->lookup(pos_next);
-
 	// check for traffic lights (only relevant for the first car in a convoi)
 	if(ist_erstes) {
+		const grund_t *gr = welt->lookup(pos_next);
+		if (gr==NULL)  {
+			// weg not existent (likely destroyed)
+			cnv->suche_neue_route();
+			return false;
+		}
 		// pruefe auf Schienenkreuzung
 		strasse_t *str=(strasse_t *)gr->get_weg(road_wt);
 
@@ -1849,7 +1936,7 @@ bool automobil_t::ist_weg_frei(int &restart_speed)
 				// check, if we reached a choose point
 				else if(rs->is_free_route(richtung)) {
 					route_t *rt=cnv->get_route();
-					grund_t *target=welt->lookup(rt->position_bei(rt->get_max_n()));
+					grund_t *target=welt->lookup(rt->position_bei(rt->get_count()-1));
 
 					// is our target occupied?
 					if(target) {
@@ -1881,8 +1968,8 @@ bool automobil_t::ist_weg_frei(int &restart_speed)
 								return false;
 							}
 							// now reserve our choice ...
-							target_halt->reserve_position(welt->lookup(target_rt.position_bei(target_rt.get_max_n())),cnv->self);
-	//DBG_MESSAGE("automobil_t::ist_weg_frei()","found free stop near %i,%i,%i",target_rt.position_bei(target_rt.get_max_n()).x,target_rt.position_bei(target_rt.get_max_n()).y, target_rt.position_bei(target_rt.get_max_n()).z );
+							target_halt->reserve_position(welt->lookup(target_rt.position_bei(target_rt.get_count()-1)),cnv->self);
+	//DBG_MESSAGE("automobil_t::ist_weg_frei()","found free stop near %i,%i,%i",target_rt.position_bei(target_rt.get_count()-1).x,target_rt.position_bei(target_rt.get_count()-1).y, target_rt.position_bei(target_rt.get_count()-1).z );
 							rt->remove_koord_from(route_index);
 							rt->append( &target_rt );
 						}
@@ -1894,15 +1981,15 @@ bool automobil_t::ist_weg_frei(int &restart_speed)
 		vehikel_basis_t *dt = NULL;
 
 		// calculate new direction
-		const uint8 next_fahrtrichtung = route_index<cnv->get_route()->get_max_n() ? this->calc_richtung(get_pos().get_2d(), cnv->get_route()->position_bei(route_index+1).get_2d()) : calc_richtung(get_pos().get_2d(), pos_next.get_2d());
+		const uint8 next_fahrtrichtung = route_index<cnv->get_route()->get_count()-1 ? this->calc_richtung(get_pos().get_2d(), cnv->get_route()->position_bei(route_index+1).get_2d()) : calc_richtung(get_pos().get_2d(), pos_next.get_2d());
 
 		// way should be clear for overtaking: we checked previously
 		if(  !cnv->is_overtaking()  ) {
-			const uint8 next_90fahrtrichtung = route_index<cnv->get_route()->get_max_n() ? this->calc_richtung(get_pos().get_2d(), cnv->get_route()->position_bei(route_index+1).get_2d()) : calc_richtung(get_pos().get_2d(), pos_next.get_2d());
+			const uint8 next_90fahrtrichtung = route_index<cnv->get_route()->get_count()-1 ? this->calc_richtung(get_pos().get_2d(), cnv->get_route()->position_bei(route_index+1).get_2d()) : calc_richtung(get_pos().get_2d(), pos_next.get_2d());
 			dt = no_cars_blocking( gr, cnv, get_fahrtrichtung(), next_fahrtrichtung, next_90fahrtrichtung );
 
 			// do not block intersections
-			if(dt==NULL  &&  ribi_t::is_threeway(str->get_ribi_unmasked())  &&  route_index+1u<cnv->get_route()->get_max_n()) {
+			if(dt==NULL  &&  ribi_t::is_threeway(str->get_ribi_unmasked())  &&  route_index+1u<cnv->get_route()->get_count()-1) {
 				// we have to test also next field
 				const grund_t *gr = welt->lookup( cnv->get_route()->position_bei(route_index+1u) );
 				if(gr) {
@@ -1928,7 +2015,7 @@ bool automobil_t::ist_weg_frei(int &restart_speed)
 			}
 			// can cross, but can we leave?
 			uint32 test_index = route_index+1u;
-			while(test_index+1u<cnv->get_route()->get_max_n()) {
+			while(test_index+1u<cnv->get_route()->get_count()-1) {
 				const grund_t *test = welt->lookup(cnv->get_route()->position_bei(test_index));
 				if(!test) {
 					break;
@@ -2025,7 +2112,7 @@ void automobil_t::set_convoi(convoi_t *c)
 		if(target  &&  ist_erstes  &&  c->get_route()->empty()) {
 			// reintitialize the target halt
 			route_t *rt=cnv->get_route();
-			grund_t *target=welt->lookup(rt->position_bei(rt->get_max_n()));
+			grund_t *target=welt->lookup(rt->position_bei(rt->get_count()-1));
 			target_halt = target->get_halt();
 			if(target_halt.is_bound()) {
 				target_halt->reserve_position(target,cnv->self);
@@ -2034,7 +2121,7 @@ void automobil_t::set_convoi(convoi_t *c)
 	}
 	else {
 		if(cnv  &&  ist_erstes  &&  target_halt.is_bound()) {
-			target_halt->unreserve_position(welt->lookup(cnv->get_route()->position_bei(cnv->get_route()->get_max_n())),cnv->self);
+			target_halt->unreserve_position(welt->lookup(cnv->get_route()->position_bei(cnv->get_route()->get_count()-1)),cnv->self);
 			target_halt = halthandle_t();
 		}
 		cnv = NULL;
@@ -2097,7 +2184,7 @@ waggon_t::waggon_t(koord3d pos, const vehikel_besch_t* besch, spieler_t* sp, con
 
 waggon_t::~waggon_t()
 {
-	if(cnv  &&  ist_erstes  &&  !cnv->get_route()->empty()  &&  route_index<=cnv->get_route()->get_max_n()) {
+	if(cnv  &&  ist_erstes  &&  !cnv->get_route()->empty()  &&  route_index<cnv->get_route()->get_count()) {
 		// free all reserved blocks
 		block_reserver( cnv->get_route(), cnv->get_vehikel(cnv->get_vehikel_anzahl()-1)->get_route_index(), target_halt.is_bound()?100000:1, false );
 	}
@@ -2120,7 +2207,7 @@ waggon_t::set_convoi(convoi_t *c)
 		if(ist_erstes) {
 			if(cnv!=NULL  &&  cnv!=(convoi_t *)1) {
 				// free route from old convoi
-				if(!cnv->get_route()->empty()  &&  route_index+1u<cnv->get_route()->get_max_n()) {
+				if(!cnv->get_route()->empty()  &&  route_index+1u<cnv->get_route()->get_count()-1) {
 					block_reserver( cnv->get_route(), cnv->get_vehikel(cnv->get_vehikel_anzahl()-1)->get_route_index(), 100000, false );
 					target_halt = halthandle_t();
 				}
@@ -2129,9 +2216,9 @@ waggon_t::set_convoi(convoi_t *c)
 				assert(c!=NULL);
 				// eventually reserve new route
 				if(  c->get_state()==convoi_t::DRIVING  || c->get_state()==convoi_t::LEAVING_DEPOT  ) {
-					if(route_index>c->get_route()->get_max_n()) {
+					if(route_index>=c->get_route()->get_count()) {
 						c->suche_neue_route();
-						dbg->warning("waggon_t::set_convoi()", "convoi %i had a too high route index! (%i of max %i)", c->self.get_id(), route_index, c->get_route()->get_max_n() );
+						dbg->warning("waggon_t::set_convoi()", "convoi %i had a too high route index! (%i of max %i)", c->self.get_id(), route_index, c->get_route()->get_count()-1 );
 					}
 					else {
 						long num_index = cnv==(convoi_t *)1 ? 1001 : 0; 	// only during loadtype: cnv==1 indicates, that the convoi did reserve a stop
@@ -2152,12 +2239,12 @@ waggon_t::set_convoi(convoi_t *c)
 					uint16 next_signal_index=65535;
 					route_t *route=c->get_route();
 
-					if(route->empty()  ||  get_pos()==route->position_bei(route->get_max_n())) {
+					if(route->empty()  ||  get_pos()==route->position_bei(route->get_count()-1)) {
 						// we are there, were we should go? Usually this is an error during autosave
 						c->suche_neue_route();
 					}
 					else {
-						for(  uint16 i=max(route_index,1)-1;  i<=route->get_max_n();  i++) {
+						for(  uint16 i=max(route_index,1)-1;  i<route->get_count();  i++) {
 							schiene_t * sch = (schiene_t *) welt->lookup(route->position_bei(i))->get_weg(get_waytype());
 							if(sch==NULL) {
 								break;
@@ -2184,7 +2271,7 @@ waggon_t::set_convoi(convoi_t *c)
 // need to reset halt reservation (if there was one)
 bool waggon_t::calc_route(koord3d start, koord3d ziel, uint32 max_speed, route_t* route)
 {
-	if(ist_erstes  &&  route_index<cnv->get_route()->get_max_n()+1) {
+	if(ist_erstes  &&  route_index<cnv->get_route()->get_count()) {
 		// free all reserved blocks
 		block_reserver( cnv->get_route(), cnv->get_vehikel(cnv->get_vehikel_anzahl()-1)->get_route_index(), target_halt.is_bound()?100000:1, false );
 	}
@@ -2278,6 +2365,15 @@ waggon_t::ist_ziel(const grund_t *gr,const grund_t *prev_gr) const
 				const koord dir=gr->get_pos().get_2d()-prev_gr->get_pos().get_2d();
 				grund_t *to;
 				if(!gr->get_neighbour(to,get_waytype(),dir)  ||  !(to->get_halt()==target_halt)) {
+					// end of stop: Is it long enough?
+					uint16 tiles = cnv->get_tile_length();
+					while(  tiles>1  ) {
+						if(  !gr->get_neighbour(to,get_waytype(),-dir)  ||  !(to->get_halt()==target_halt)  ) {
+							return false;
+						}
+						gr = to;
+						tiles --;
+					}
 					return true;
 				}
 			}
@@ -2311,6 +2407,11 @@ waggon_t::ist_weg_frei(int & restart_speed)
 	}
 
 	const grund_t *gr = welt->lookup(pos_next);
+	if(gr==NULL) {
+		// weg not existent (likely destroyed)
+		cnv->suche_neue_route();
+		return false;
+	}
 	if(gr->get_top()>250) {
 		// too many objects here
 		return false;
@@ -2349,7 +2450,7 @@ waggon_t::ist_weg_frei(int & restart_speed)
 				route_t target_rt;
 				koord3d cur_pos = rt->position_bei(next_block+1);
 				// next tile is end of schedule => must start with next leg of schedule
-				if(count==0  &&  next_block+1u>=rt->get_max_n()) {
+				if(count==0  &&  next_block+1u>=rt->get_count()-1) {
 					fahrplan_index ++;
 					if(fahrplan_index >= cnv->get_schedule()->get_count()) {
 						fahrplan_index = 0;
@@ -2364,7 +2465,7 @@ waggon_t::ist_weg_frei(int & restart_speed)
 					}
 					else {
 						// check tiles of route until we find signal or reserved track
-						for(  uint i = count==0 ? next_block+1u : 0u; i<=target_rt.get_max_n(); i++) {
+						for(  uint i = count==0 ? next_block+1u : 0u; i<target_rt.get_count(); i++) {
 							koord3d pos = target_rt.position_bei(i);
 							grund_t *gr = welt->lookup(pos);
 							schiene_t * sch1 = gr ? (schiene_t *)gr->get_weg(get_waytype()) : NULL;
@@ -2411,7 +2512,7 @@ waggon_t::ist_weg_frei(int & restart_speed)
 				grund_t *target=NULL;
 
 				// choose signal here
-				target=welt->lookup(rt->position_bei(rt->get_max_n()));
+				target=welt->lookup(rt->position_bei(rt->get_count()-1));
 
 				if(target) {
 					target_halt = target->get_halt();
@@ -2443,7 +2544,7 @@ waggon_t::ist_weg_frei(int & restart_speed)
 #ifdef MAX_CHOOSE_BLOCK_TILES
 				if(!target_rt.find_route( welt, rt->position_bei(next_block), this, speed_to_kmh(cnv->get_min_top_speed()), richtung, MAX_CHOOSE_BLOCK_TILES )) {
 #else
-				if(!target_rt.find_route( welt, rt->position_bei(next_block), this, speed_to_kmh(cnv->get_min_top_speed()), richtung, welt->get_groesse_x()+welt->get_groesse_y() )) {
+				if(!target_rt.find_route( welt, rt->position_bei(next_block), this, speed_to_kmh(cnv->get_min_top_speed()), richtung, /*welt->get_groesse_x()+welt->get_groesse_y()*/50 )) {
 #endif
 					// nothing empty or not route with less than MAX_CHOOSE_BLOCK_TILES tiles
 					target_halt = halthandle_t();
@@ -2474,7 +2575,7 @@ waggon_t::ist_weg_frei(int & restart_speed)
 		}
 		else {
 			// end of route?
-			if(  next_block+1u >= cnv->get_route()->get_max_n()  &&  route_index == next_block+1u  ) {
+			if(  next_block+1u >= cnv->get_route()->get_count()-1  &&  route_index == next_block+1u  ) {
 				// we can always continue, if there would be a route ...
 				return true;
 			}
@@ -2529,7 +2630,7 @@ waggon_t::block_reserver(const route_t *route, uint16 start_index, int count, bo
 #endif
 	slist_tpl<grund_t *> signs;	// switch all signals on their way too ...
 
-	if(start_index>route->get_max_n()) {
+	if(start_index>=route->get_count()) {
 		return 0;
 	}
 
@@ -2542,7 +2643,7 @@ waggon_t::block_reserver(const route_t *route, uint16 start_index, int count, bo
 	uint16 next_signal_index=65535, skip_index=65535;
 	uint16 next_crossing_index=65535;
 	bool unreserve_now = false;
-	for ( ; success  &&  count>=0  &&  i<=route->get_max_n(); i++) {
+	for ( ; success  &&  count>=0  &&  i<route->get_count(); i++) {
 
 		koord3d pos = route->position_bei(i);
 		grund_t *gr = welt->lookup(pos);
@@ -2567,7 +2668,7 @@ waggon_t::block_reserver(const route_t *route, uint16 start_index, int count, bo
 				count --;
 				next_signal_index = i;
 			}
-			if(!sch1->reserve(cnv->self)) {
+			if(  !sch1->reserve( cnv->self, ribi_typ( route->position_bei(max(1,i)-1), route->position_bei(min(route->get_count()-1,i+1)) ) )  ) {
 				success = false;
 			}
 			if(next_crossing_index==65535  &&  sch1->is_crossing()) {
@@ -2632,8 +2733,8 @@ waggon_t::block_reserver(const route_t *route, uint16 start_index, int count, bo
 	// stop at station or signals, not at waypoints
 	if(next_signal_index==65535) {
 		// find out if stop or waypoint, waypoint: do not brake at waypoints
-		grund_t *gr=welt->lookup(route->position_bei(route->get_max_n()));
-		return (gr  &&  gr->is_halt()) ? route->get_max_n()+1 : 65535;
+		grund_t *gr=welt->lookup(route->position_bei(route->get_count()-1));
+		return (gr  &&  gr->is_halt()) ? route->get_count() : 65535;
 	}
 	return next_signal_index+1;
 }
@@ -2679,7 +2780,7 @@ waggon_t::betrete_feld()
 		sch0->book(cargo, WAY_STAT_GOODS);
 		if(ist_erstes) {
 			sch0->book(1, WAY_STAT_CONVOIS);
-			sch0->reserve(cnv->self);
+			sch0->reserve( cnv->self, get_fahrtrichtung() );
 		}
 	}
 }
@@ -2790,8 +2891,12 @@ schiff_t::ist_weg_frei(int &restart_speed)
 	restart_speed = -1;
 
 	if(ist_erstes) {
-		grund_t *gr = welt->lookup( pos_next );
-
+		const grund_t *gr = welt->lookup( pos_next );
+		if(gr==NULL) {
+			// weg not existent (likely destroyed)
+			cnv->suche_neue_route();
+			return false;
+		}
 		weg_t *w = gr->get_weg(water_wt);
 		if(w  &&  w->is_crossing()) {
 			// ok, here is a draw/turnbridge ...
@@ -2966,7 +3071,7 @@ aircraft_t::find_route_to_stop_position()
 
 	// check for skipping circle
 	route_t *rt=cnv->get_route();
-	grund_t *target=welt->lookup(rt->position_bei(rt->get_max_n()));
+	grund_t *target=welt->lookup(rt->position_bei(rt->get_count()-1));
 
 //DBG_MESSAGE("aircraft_t::find_route_to_stop_position()","can approach? (cnv %i)",cnv->self.get_id());
 
@@ -3015,8 +3120,8 @@ DBG_MESSAGE("aircraft_t::find_route_to_stop_position()","found no route to free
 		state = prev_state;
 
 		// now reserve our choice ...
-		target_halt->reserve_position(welt->lookup(target_rt.position_bei(target_rt.get_max_n())),cnv->self);
-//DBG_MESSAGE("aircraft_t::find_route_to_stop_position()","found free stop near %i,%i,%i",target_rt.position_bei(target_rt.get_max_n()).x,target_rt.position_bei(target_rt.get_max_n()).y, target_rt.position_bei(target_rt.get_max_n()).z );
+		target_halt->reserve_position(welt->lookup(target_rt.position_bei(target_rt.get_count()-1)),cnv->self);
+//DBG_MESSAGE("aircraft_t::find_route_to_stop_position()","found free stop near %i,%i,%i",target_rt.position_bei(target_rt.get_count()-1).x,target_rt.position_bei(target_rt.get_count()-1).y, target_rt.position_bei(target_rt.get_count()-1).z );
 		rt->remove_koord_from(suchen);
 		rt->append( &target_rt );
 		return true;
@@ -3039,7 +3144,7 @@ bool aircraft_t::block_reserver( uint32 start, uint32 end, bool reserve )
 		return false;
 	}
 
-	for(  uint32 i=start;  success  &&  i<end  &&  i<=route->get_max_n();  i++) {
+	for(  uint32 i=start;  success  &&  i<end  &&  i<route->get_count();  i++) {
 
 		grund_t *gr = welt->lookup(route->position_bei(i));
 		runway_t * sch1 = gr ? (runway_t *)gr->get_weg(air_wt) : NULL;
@@ -3060,7 +3165,7 @@ bool aircraft_t::block_reserver( uint32 start, uint32 end, bool reserve )
 			// we unreserve also nonexisting tiles! (may happen during deletion)
 			if(reserve) {
 				start_now = true;
-				if(!sch1->reserve(cnv->self)) {
+				if(!sch1->reserve(cnv->self,ribi_t::keine)) {
 					// unsuccessful => must unreserve all
 					success = false;
 					end = i;
@@ -3105,6 +3210,7 @@ bool aircraft_t::ist_weg_frei(int & restart_speed)
 
 	grund_t *gr = welt->lookup( pos_next );
 	if(gr==NULL) {
+		// weg not existent (likely destroyed)
 		cnv->suche_neue_route();
 		return false;
 	}
@@ -3114,8 +3220,8 @@ bool aircraft_t::ist_weg_frei(int & restart_speed)
 		return false;
 	}
 
-	if(route_index<takeoff  &&  route_index>1  &&  takeoff<cnv->get_route()->get_max_n()) {
-		if(route_index>1  &&  gr->suche_obj(ding_t::aircraft)) {
+	if(route_index<takeoff  &&  route_index>1  &&  takeoff<cnv->get_route()->get_count()-1) {
+		if (route_index > 1 && gr->find<aircraft_t>()) {
 			// check, if tile occupied, if not on stop
 			restart_speed = 0;
 			return false;
@@ -3292,7 +3398,7 @@ aircraft_t::set_convoi(convoi_t *c)
 	if(ist_erstes  &&  (unsigned long)cnv > 1) {
 		// free stop reservation
 		if(target_halt.is_bound()) {
-			target_halt->unreserve_position(welt->lookup(cnv->get_route()->position_bei(cnv->get_route()->get_max_n())),cnv->self);
+			target_halt->unreserve_position(welt->lookup(cnv->get_route()->position_bei(cnv->get_route()->get_count()-1)),cnv->self);
 			target_halt = halthandle_t();
 		}
 		if(!cnv->get_route()->empty()) {
@@ -3313,7 +3419,7 @@ aircraft_t::set_convoi(convoi_t *c)
 			if(target) {
 				// reintitialize the target halt
 				route_t *rt=cnv->get_route();
-				grund_t *target=welt->lookup(rt->position_bei(rt->get_max_n()));
+				grund_t *target=welt->lookup(rt->position_bei(rt->get_count()-1));
 				target_halt = target->get_halt();
 				if(target_halt.is_bound()) {
 					target_halt->reserve_position(target,cnv->self);
@@ -3388,7 +3494,7 @@ bool aircraft_t::calc_route(koord3d start, koord3d ziel, uint32 max_speed, route
 		// free target reservation
 		if(  target_halt.is_bound() ) {
 			route_t *rt=cnv->get_route();
-			grund_t *target=welt->lookup(rt->position_bei(rt->get_max_n()));
+			grund_t *target=welt->lookup(rt->position_bei(rt->get_count()-1));
 			if(target) {
 				target_halt->unreserve_position(target,cnv->self);
 			}
@@ -3442,7 +3548,7 @@ bool aircraft_t::calc_route(koord3d start, koord3d ziel, uint32 max_speed, route
 			return false;
 		}
 		// save the route
-		search_start = route->position_bei( route->get_max_n() );
+		search_start = route->position_bei( route->get_count()-1 );
 //DBG_MESSAGE("aircraft_t::calc_route()","start at ground at %i,%i,%i",search_start.x,search_start.y,search_start.z);
 	}
 
@@ -3464,13 +3570,13 @@ bool aircraft_t::calc_route(koord3d start, koord3d ziel, uint32 max_speed, route
 	}
 	else {
 		// save target route
-		search_end = end_route.position_bei( end_route.get_max_n() );
+		search_end = end_route.position_bei( end_route.get_count()-1 );
 	}
 //DBG_MESSAGE("aircraft_t::calc_route()","ziel now %i,%i,%i",search_end.x,search_end.y,search_end.z);
 
 	// create target route
 	if(!start_in_the_air) {
-		takeoff = route->get_max_n();
+		takeoff = route->get_count()-1;
 		koord start_dir(welt->lookup(search_start)->get_weg_ribi(air_wt));
 		if(start_dir!=koord(0,0)) {
 			// add the start
@@ -3596,19 +3702,19 @@ bool aircraft_t::calc_route(koord3d start, koord3d ziel, uint32 max_speed, route
 			}
 		}
 
-		touchdown = route->get_max_n()+3;
+		touchdown = route->get_count()+2;
 		route->append_straight_route(welt,search_end);
 
 		// now the route rearch point (+1, since it will check before entering the tile ...)
-		suchen = route->get_max_n();
+		suchen = route->get_count()-1;
 
 		// now we just append the rest
-		for( int i=end_route.get_max_n()-1;  i>=0;  i--  ) {
+		for( int i=end_route.get_count()-2;  i>=0;  i--  ) {
 			route->append(end_route.position_bei(i));
 		}
 	}
 
-//DBG_MESSAGE("aircraft_t::calc_route()","departing=%i  touchdown=%i   suchen=%i   total=%i  state=%i",takeoff, touchdown, suchen, route->get_max_n(), state );
+//DBG_MESSAGE("aircraft_t::calc_route()","departing=%i  touchdown=%i   suchen=%i   total=%i  state=%i",takeoff, touchdown, suchen, route->get_count()-1, state );
 	return true;
 }
 
@@ -3714,12 +3820,12 @@ aircraft_t::hop()
 
 // this routine will display the shadow
 void
-aircraft_t::display_after(int xpos, int ypos, bool /*reset_dirty*/) const
+aircraft_t::display_after(int xpos_org, int ypos_org, bool /*reset_dirty*/) const
 {
 	if(bild != IMG_LEER) {
+		int xpos = xpos_org, ypos = ypos_org;
+
 		const int raster_width = get_tile_raster_width();
-		get_screen_offset( xpos, ypos );
-		xpos += tile_raster_scale_x(get_xoff(), raster_width);
 		sint16 current_flughohe = flughoehe;
 		const sint16 target = target_height - ((sint16)get_pos().z*TILE_HEIGHT_STEP)/Z_TILE_STEP;
 		if(  current_flughohe < target  ) {
@@ -3728,9 +3834,14 @@ aircraft_t::display_after(int xpos, int ypos, bool /*reset_dirty*/) const
 		else if(  current_flughohe > target  ) {
 			current_flughohe -= (steps*TILE_HEIGHT_STEP) >> 8;
 		}
+
 		ypos += tile_raster_scale_y(get_yoff()-current_flughohe-hoff-2, raster_width);
+		xpos += tile_raster_scale_x(get_xoff(), raster_width);
+		get_screen_offset( xpos, ypos );
 
 		// will be dirty
 		display_color_img(bild, xpos, ypos, get_player_nr(), true, true/*get_flag(ding_t::dirty)*/ );
+
+		vehikel_t::display_after( xpos_org, ypos_org-tile_raster_scale_y(current_flughohe-hoff-2, raster_width), true );
 	}
 }
diff --git a/vehicle/simvehikel.h b/vehicle/simvehikel.h
index ddd0163..a4a8014 100644
--- a/vehicle/simvehikel.h
+++ b/vehicle/simvehikel.h
@@ -16,6 +16,7 @@
 #define _simvehikel_h
 
 #include "../simtypes.h"
+#include "../simconvoi.h"
 #include "../simdings.h"
 #include "../halthandle_t.h"
 #include "../convoihandle_t.h"
@@ -101,6 +102,8 @@ protected:
 public:
 	// only called during load time: set some offsets
 	static void set_diagonal_multiplier( uint32 multiplier, uint32 old_multiplier );
+	static uint16 get_diagonal_multiplier() { return diagonal_multiplier; }
+
 	static void set_overtaking_offsets( bool driving_on_the_left );
 
 	// if true, this convoi needs to restart for correct alignment
diff --git a/vehicle/simverkehr.cc b/vehicle/simverkehr.cc
index da554ff..81c9452 100644
--- a/vehicle/simverkehr.cc
+++ b/vehicle/simverkehr.cc
@@ -46,7 +46,7 @@
 
 
 verkehrsteilnehmer_t::verkehrsteilnehmer_t(karte_t *welt) :
-   vehikel_basis_t(welt)
+	vehikel_basis_t(welt)
 {
 	set_besitzer( welt->get_spieler(1) );
 	time_to_life = -1;
@@ -78,7 +78,7 @@ verkehrsteilnehmer_t::~verkehrsteilnehmer_t()
 
 
 verkehrsteilnehmer_t::verkehrsteilnehmer_t(karte_t *welt, koord3d pos) :
-   vehikel_basis_t(welt, pos)
+	vehikel_basis_t(welt, pos)
 {
 	// V.Meyer: weg_position_t changed to grund_t::get_neighbour()
 	grund_t *from = welt->lookup(pos);
@@ -139,8 +139,7 @@ void verkehrsteilnehmer_t::zeige_info()
 }
 
 
-void
-verkehrsteilnehmer_t::hop()
+void verkehrsteilnehmer_t::hop()
 {
 	// V.Meyer: weg_position_t changed to grund_t::get_neighbour()
 	grund_t *from = welt->lookup(pos_next);
@@ -299,40 +298,13 @@ void verkehrsteilnehmer_t::rdwr(loadsave_t *file)
 
 
 static weighted_vector_tpl<const stadtauto_besch_t*> liste_timeline;
-static weighted_vector_tpl<const stadtauto_besch_t*> liste;
 stringhashtable_tpl<const stadtauto_besch_t *> stadtauto_t::table;
 
-void stadtauto_t::built_timeline_liste(karte_t *welt)
-{
-	if (!liste.empty()) {
-		// this list will contain all citycars
-		liste_timeline.clear();
-		const int month_now = welt->get_current_month();
-
-//DBG_DEBUG("stadtauto_t::built_timeline_liste()","year=%i, month=%i", month_now/12, month_now%12+1);
-
-		// check for every citycar, if still ok ...
-		for (weighted_vector_tpl<const stadtauto_besch_t*>::const_iterator i = liste.begin(), end = liste.end(); i != end; ++i) {
-			const stadtauto_besch_t* info = *i;
-			const int intro_month = info->get_intro_year_month();
-			const int retire_month = info->get_retire_year_month();
-
-//DBG_DEBUG("stadtauto_t::built_timeline_liste()","iyear=%i, imonth=%i", intro_month/12, intro_month%12+1);
-//DBG_DEBUG("stadtauto_t::built_timeline_liste()","ryear=%i, rmonth=%i", retire_month/12, retire_month%12+1);
-
-			if (!welt->use_timeline() || (intro_month <= month_now && month_now < retire_month)) {
-				liste_timeline.append(info, info->get_gewichtung(), 1);
-//DBG_DEBUG("stadtauto_t::built_timeline_liste()","adding %s to liste",info->get_name());
-			}
-		}
-	}
-}
-
-
-
 bool stadtauto_t::register_besch(const stadtauto_besch_t *besch)
 {
-	liste.append(besch, besch->get_gewichtung(), 1);
+	if(  table.remove(besch->get_name())  ) {
+		dbg->warning( "stadtauto_besch_t::register_besch()", "Object %s was overlaid by addon!", besch->get_name() );
+	}
 	table.put(besch->get_name(), besch);
 	// correct for driving on left side
 	if(umgebung_t::drive_on_left) {
@@ -353,29 +325,59 @@ bool stadtauto_t::register_besch(const stadtauto_besch_t *besch)
 
 
 
-bool stadtauto_t::laden_erfolgreich()
+bool stadtauto_t::alles_geladen()
 {
-	if (liste.empty()) {
+	if(table.empty()) {
 		DBG_MESSAGE("stadtauto_t", "No citycars found - feature disabled");
 	}
 	return true;
 }
 
 
+void stadtauto_t::built_timeline_liste(karte_t *welt)
+{
+	// this list will contain all citycars
+	liste_timeline.clear();
+
+	if(  !table.empty()  ) {
+		const int month_now = welt->get_current_month();
+//DBG_DEBUG("stadtauto_t::built_timeline_liste()","year=%i, month=%i", month_now/12, month_now%12+1);
+
+		// check for every citycar, if still ok ...
+		stringhashtable_iterator_tpl<const stadtauto_besch_t *>iter(table);
+		while(   iter.next()  ) {
+			const stadtauto_besch_t* info = iter.get_current_value();
+			const int intro_month = info->get_intro_year_month();
+			const int retire_month = info->get_retire_year_month();
+
+//DBG_DEBUG("stadtauto_t::built_timeline_liste()","iyear=%i, imonth=%i", intro_month/12, intro_month%12+1);
+//DBG_DEBUG("stadtauto_t::built_timeline_liste()","ryear=%i, rmonth=%i", retire_month/12, retire_month%12+1);
+
+			if (!welt->use_timeline() || (intro_month <= month_now && month_now < retire_month)) {
+				liste_timeline.append(info, info->get_gewichtung(), 1);
+//DBG_DEBUG("stadtauto_t::built_timeline_liste()","adding %s to liste",info->get_name());
+			}
+		}
+	}
+}
+
+
+
 bool stadtauto_t::list_empty()
 {
 	return liste_timeline.empty();
 }
 
 
+
 stadtauto_t::~stadtauto_t()
 {
 	welt->buche( -1, karte_t::WORLD_CITYCARS );
 }
 
 
-stadtauto_t::stadtauto_t(karte_t *welt, loadsave_t *file)
- : verkehrsteilnehmer_t(welt)
+stadtauto_t::stadtauto_t(karte_t *welt, loadsave_t *file) :
+	verkehrsteilnehmer_t(welt)
 {
 	rdwr(file);
 	ms_traffic_jam = 0;
@@ -391,12 +393,9 @@ stadtauto_t::stadtauto_t(karte_t *welt, koord3d pos, koord target)
 #else
 stadtauto_t::stadtauto_t(karte_t *welt, koord3d pos, koord )
 #endif
- : verkehrsteilnehmer_t(welt, pos)
+	: verkehrsteilnehmer_t(welt, pos)
 {
-	besch = liste_timeline.at_weight(simrand(liste_timeline.get_sum_weight()));
-	if(!besch) {
-		besch = liste.at_weight(simrand(liste.get_sum_weight()));
-	}
+	besch = liste_timeline.empty() ? NULL : liste_timeline.at_weight(simrand(liste_timeline.get_sum_weight()));
 	pos_next_next = koord3d::invalid;
 	time_to_life = welt->get_einstellungen()->get_stadtauto_duration() << welt->ticks_bits_per_tag;
 	current_speed = 48;
@@ -411,12 +410,11 @@ stadtauto_t::stadtauto_t(karte_t *welt, koord3d pos, koord )
 
 
 
-bool
-stadtauto_t::sync_step(long delta_t)
+bool stadtauto_t::sync_step(long delta_t)
 {
 	if(time_to_life<=0) {
 		// remove obj
-  		return false;
+		return false;
 	}
 
 	time_to_life -= delta_t;
@@ -465,14 +463,10 @@ void stadtauto_t::rdwr(loadsave_t *file)
 		file->rdwr_str(s, 256);
 		besch = table.get(s);
 
-		if (besch == 0 && !liste_timeline.empty()) {
+		if(  besch == 0  &&  !liste_timeline.empty()  ) {
 			dbg->warning("stadtauto_t::rdwr()", "Object '%s' not found in table, trying random stadtauto object type",s);
 			besch = liste_timeline.at_weight(simrand(liste_timeline.get_sum_weight()));
 		}
-		if (besch == 0 && !liste.empty()) {
-			dbg->warning("stadtauto_t::rdwr()", "Object '%s' not found in table, trying random stadtauto object type",s);
-			besch = liste.at_weight(simrand(liste.get_sum_weight()));
-		}
 
 		if(besch == 0) {
 			dbg->warning("stadtauto_t::rdwr()", "loading game with private cars, but no private car objects found in PAK files.");
@@ -659,7 +653,7 @@ void
 stadtauto_t::betrete_feld()
 {
 #ifdef DESTINATION_CITYCARS
-	if(target!=koord::invalid  &&  abs_distance(pos_next.get_2d(),target)<10) {
+	if(target!=koord::invalid  &&  koord_distance(pos_next.get_2d(),target)<10) {
 		// delete it ...
 		time_to_life = 0;
 
@@ -677,8 +671,7 @@ stadtauto_t::betrete_feld()
 
 
 
-bool
-stadtauto_t::hop_check()
+bool stadtauto_t::hop_check()
 {
 	// V.Meyer: weg_position_t changed to grund_t::get_neighbour()
 	grund_t *from = welt->lookup(pos_next);
@@ -757,7 +750,7 @@ stadtauto_t::hop_check()
 						}
 					}
 #ifdef DESTINATION_CITYCARS
-					unsigned long dist=abs_distance( to->get_pos().get_2d(), target );
+					unsigned long dist=koord_distance( to->get_pos().get_2d(), target );
 					posliste.append( to->get_pos(), dist*dist );
 #else
 					// ok, now check if we are allowed to go here (i.e. no cars blocking)
@@ -823,8 +816,7 @@ stadtauto_t::hop_check()
 
 
 
-void
-stadtauto_t::hop()
+void stadtauto_t::hop()
 {
 	// V.Meyer: weg_position_t changed to grund_t::get_neighbour()
 	grund_t *to = welt->lookup(pos_next);
@@ -856,21 +848,14 @@ stadtauto_t::hop()
 
 
 
-void
-stadtauto_t::calc_bild()
+void stadtauto_t::calc_bild()
 {
-	if(welt->lookup(get_pos())->ist_im_tunnel()) {
-		set_bild( IMG_LEER);
-	}
-	else {
-		set_bild(besch->get_bild_nr(ribi_t::get_dir(get_fahrtrichtung())));
-	}
+	set_bild(besch->get_bild_nr(ribi_t::get_dir(get_fahrtrichtung())));
 }
 
 
 
-void
-stadtauto_t::calc_current_speed()
+void stadtauto_t::calc_current_speed()
 {
 	const weg_t * weg = welt->lookup(get_pos())->get_weg(road_wt);
 	const uint16 max_speed = besch->get_geschw();
diff --git a/vehicle/simverkehr.h b/vehicle/simverkehr.h
index d19799d..98d8e2e 100644
--- a/vehicle/simverkehr.h
+++ b/vehicle/simverkehr.h
@@ -136,7 +136,7 @@ public:
 	static bool list_empty();
 
 	static bool register_besch(const stadtauto_besch_t *besch);
-	static bool laden_erfolgreich();
+	static bool alles_geladen();
 
 	// since we must consider overtaking, we use this for offset calculation
 	virtual void get_screen_offset( int &xoff, int &yoff ) const;

-- 
transportation simulator



More information about the Pkg-games-commits mailing list