changeset 9153:910334e2eadd

Merge
author mschaefer
date Thu, 14 Jun 2018 17:03:53 +0200
parents bb929b444ea5 (diff) 8d4e7e08dbc0 (current diff)
children cd24db77f044
files
diffstat 76 files changed, 5128 insertions(+), 2203 deletions(-) [+]
line wrap: on
line diff
--- a/artifacts/doc/conf/generators/generators.xml	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/doc/conf/generators/generators.xml	Thu Jun 14 17:03:53 2018 +0200
@@ -69,7 +69,8 @@
     <output-generator names="sinfo_tkh_export" class="org.dive4elements.river.artifacts.sinfo.tkhstate.TkhExporter"/>
     <output-generator names="sinfo_tkh_report" class="org.dive4elements.river.exports.ReportGenerator"/>
     <output-generator names="sinfo_floodduration_export" class="org.dive4elements.river.artifacts.sinfo.flood_duration.FloodDurationExporter" />
-
+    <output-generator names="sinfo_collision_export" class="org.dive4elements.river.artifacts.sinfo.collision.CollisionExporter" />
+    
     <!-- UINFO -->
     <output-generator names="uinfo_salix_line_export" class="org.dive4elements.river.artifacts.uinfo.salix.SalixLineExporter"/> 
     <output-generator names="uinfo_inundation_duration_export" class="org.dive4elements.river.artifacts.uinfo.inundationduration.InundationDurationExporter"/>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/jasper/templates/sinfo.collision.detail.jrxml	Thu Jun 14 17:03:53 2018 +0200
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Created with Jaspersoft Studio version 6.5.1.final using JasperReports Library version 4.5.0  -->
+<!-- 2018-06-13T17:02:35 -->
+<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="flysreport" language="groovy" pageWidth="842" pageHeight="595" orientation="Landscape" columnWidth="762" leftMargin="60" rightMargin="20" topMargin="20" bottomMargin="20">
+	<property name="ireport.zoom" value="1.0"/>
+	<property name="ireport.x" value="0"/>
+	<property name="ireport.y" value="0"/>
+	<style name="htmlStyle" isDefault="true" mode="Transparent" markup="html" fontName="Roboto">
+		<paragraph lineSpacing="Single"/>
+	</style>
+	<field name="meta:totalpages" class="java.lang.Integer"/>
+	<field name="meta:startpageoffset" class="java.lang.Integer"/>
+	<field name="meta:header" class="java.lang.String"/>
+	<field name="meta:calcMode" class="java.lang.String"/>
+	<field name="meta:version_label" class="java.lang.String"/>
+	<field name="meta:version" class="java.lang.String"/>
+	<field name="meta:user_label" class="java.lang.String"/>
+	<field name="meta:user" class="java.lang.String"/>
+	<field name="meta:date_label" class="java.lang.String"/>
+	<field name="meta:date" class="java.lang.String"/>
+	<field name="meta:river_label" class="java.lang.String"/>
+	<field name="meta:river" class="java.lang.String"/>
+	<field name="meta:range_label" class="java.lang.String"/>
+	<field name="meta:range" class="java.lang.String"/>
+	<field name="meta:calculation_label" class="java.lang.String"/>
+	<field name="meta:calculation_name" class="java.lang.String"/>
+	<field name="meta:station_header" class="java.lang.String"/>
+	<field name="meta:flowdepthdevelopment_header" class="java.lang.String"/>
+	<field name="meta:flowdepthdevelopmentperyear_header" class="java.lang.String"/>
+	<field name="meta:waterleveldifference_header" class="java.lang.String"/>
+	<field name="meta:waterleveldifference_header2" class="java.lang.String"/>
+	<field name="meta:waterleveldifference_header_label" class="java.lang.String"/>
+	<field name="meta:bedheightdifference_header" class="java.lang.String"/>
+	<field name="meta:bedheightdifference_header2" class="java.lang.String"/>
+	<field name="meta:bedheightdifference_header_label" class="java.lang.String"/>
+	<field name="meta:flowdepthcurrent_header" class="java.lang.String"/>
+	<field name="meta:flowdepthcurrent_header2" class="java.lang.String"/>
+	<field name="meta:flowdepthhistorical_header" class="java.lang.String"/>
+	<field name="meta:flowdepthhistorical_header2" class="java.lang.String"/>
+	<field name="meta:flowdepthcurrent_header_label" class="java.lang.String"/>
+	<field name="meta:flowdepthhistorical_header_label" class="java.lang.String"/>
+	<field name="meta:flowdepth_header" class="java.lang.String"/>
+	<field name="meta:flowdepthdevelopment" class="java.lang.String"/>
+	<field name="meta:flowdepthmin_header" class="java.lang.String"/>
+	<field name="meta:flowdepthmax_header" class="java.lang.String"/>
+	<field name="meta:flowdepthdevelopment_header_label" class="java.lang.String"/>
+	<field name="meta:flowdepth_tkh_header" class="java.lang.String"/>
+	<field name="meta:tkh_header" class="java.lang.String"/>
+	<field name="meta:tkhkind_header" class="java.lang.String"/>
+	<field name="meta:waterlevel_header" class="java.lang.String"/>
+	<field name="meta:discharge_header" class="java.lang.String"/>
+	<field name="meta:waterlevel_name_header" class="java.lang.String"/>
+	<field name="meta:gauge_header" class="java.lang.String"/>
+	<field name="meta:bedheight_header" class="java.lang.String"/>
+	<field name="meta:sounding_name_header" class="java.lang.String"/>
+	<field name="meta:location_header" class="java.lang.String"/>
+	<field name="meta:river_unit" class="java.lang.String"/>
+	<field name="meta:riverside_header" class="java.lang.String"/>
+	<field name="meta:inundationduration_header" class="java.lang.String"/>
+	<field name="meta:inundationduration_q_header" class="java.lang.String"/>
+	<field name="meta:infrastructure_height_header" class="java.lang.String"/>
+	<field name="meta:infrastructure_type_header" class="java.lang.String"/>
+	<field name="meta:w_1_header" class="java.lang.String"/>
+	<field name="meta:q_1_header" class="java.lang.String"/>
+	<field name="meta:bezeichnung_1_header" class="java.lang.String"/>
+	<field name="meta:duration_1_header" class="java.lang.String"/>
+	<field name="meta:w_2_header" class="java.lang.String"/>
+	<field name="meta:q_2_header" class="java.lang.String"/>
+	<field name="meta:bezeichnung_2_header" class="java.lang.String"/>
+	<field name="meta:duration_2_header" class="java.lang.String"/>
+	<field name="meta:w_3_header" class="java.lang.String"/>
+	<field name="meta:q_3_header" class="java.lang.String"/>
+	<field name="meta:bezeichnung_3_header" class="java.lang.String"/>
+	<field name="meta:duration_3_header" class="java.lang.String"/>
+	<field name="data:0" class="java.lang.String"/>
+	<field name="data:1" class="java.lang.String"/>
+	<field name="data:2" class="java.lang.String"/>
+	<field name="data:3" class="java.lang.String"/>
+	<field name="data:4" class="java.lang.String"/>
+	<field name="data:5" class="java.lang.String"/>
+	<field name="data:6" class="java.lang.String"/>
+	<field name="data:7" class="java.lang.String"/>
+	<field name="data:8" class="java.lang.String"/>
+	<field name="data:9" class="java.lang.String"/>
+	<field name="data:10" class="java.lang.String"/>
+	<field name="data:11" class="java.lang.String"/>
+	<field name="data:12" class="java.lang.String"/>
+	<field name="data:13" class="java.lang.String"/>
+	<field name="data:14" class="java.lang.String"/>
+	<field name="data:15" class="java.lang.String"/>
+	<field name="data:16" class="java.lang.String"/>
+	<field name="data:17" class="java.lang.String"/>
+	<field name="data:18" class="java.lang.String"/>
+	<field name="data:19" class="java.lang.String"/>
+	<field name="data:20" class="java.lang.String"/>
+	<background>
+		<band splitType="Stretch"/>
+	</background>
+	<title>
+		<band height="30" splitType="Stretch">
+			<textField>
+				<reportElement style="htmlStyle" x="0" y="0" width="515" height="30"/>
+				<textElement>
+					<font size="18"/>
+				</textElement>
+				<textFieldExpression><![CDATA[$F{meta:header} + " " + $F{meta:river}]]></textFieldExpression>
+			</textField>
+		</band>
+	</title>
+	<columnHeader>
+		<band height="25" splitType="Stretch">
+			<line>
+				<reportElement style="htmlStyle" positionType="FixRelativeToBottom" x="0" y="24" width="762" height="1"/>
+			</line>
+			<textField isStretchWithOverflow="true">
+				<reportElement key="" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="0" y="0" width="60" height="24">
+					<property name="net.sf.jasperreports.text.hyphenation" value="true"/>
+					<property name="net.sf.jasperreports.text.save.line.breaks" value="true"/>
+					<property name="net.sf.jasperreports.export.xls.wrap.text" value="true"/>
+				</reportElement>
+				<box padding="5"/>
+				<textElement textAlignment="Right" verticalAlignment="Bottom"/>
+				<textFieldExpression><![CDATA[$F{meta:station_header}]]></textFieldExpression>
+			</textField>
+			<textField isStretchWithOverflow="true">
+				<reportElement key="" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="68" y="-1" width="60" height="24">
+					<property name="net.sf.jasperreports.text.hyphenation" value="true"/>
+					<property name="net.sf.jasperreports.text.save.line.breaks" value="true"/>
+					<property name="net.sf.jasperreports.export.xls.wrap.text" value="true"/>
+				</reportElement>
+				<box padding="5"/>
+				<textElement textAlignment="Right" verticalAlignment="Bottom"/>
+				<textFieldExpression><![CDATA["TEST"]]></textFieldExpression>
+			</textField>
+			<textField isStretchWithOverflow="true">
+				<reportElement key="" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="160" y="-1" width="180" height="24">
+					<property name="net.sf.jasperreports.text.hyphenation" value="true"/>
+					<property name="net.sf.jasperreports.text.save.line.breaks" value="true"/>
+					<property name="net.sf.jasperreports.export.xls.wrap.text" value="true"/>
+				</reportElement>
+				<box padding="5"/>
+				<textElement textAlignment="Right" verticalAlignment="Bottom"/>
+				<textFieldExpression><![CDATA[""+$F{meta:startpageoffset}+";" +  $F{meta:totalpages}]]></textFieldExpression>
+			</textField>
+		</band>
+	</columnHeader>
+	<detail>
+		<band height="15" splitType="Prevent">
+			<textField isStretchWithOverflow="true" isBlankWhenNull="true">
+				<reportElement key="" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="0" y="0" width="60" height="15"/>
+				<box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5">
+					<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
+					<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
+					<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
+					<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
+				</box>
+				<textElement textAlignment="Right" verticalAlignment="Top"/>
+				<textFieldExpression><![CDATA[$F{data:0}]]></textFieldExpression>
+			</textField>
+		</band>
+	</detail>
+	<pageFooter>
+		<band height="15" splitType="Stretch">
+			<textField isStretchWithOverflow="true">
+				<reportElement style="htmlStyle" x="634" y="0" width="55" height="15"/>
+				<box topPadding="2" rightPadding="3"/>
+				<textElement textAlignment="Right"/>
+				<textFieldExpression><![CDATA[$V{PAGE_NUMBER} +(($F{meta:startpageoffset} != null) ? $F{meta:startpageoffset} : 0 )]]></textFieldExpression>
+			</textField>
+			<textField isStretchWithOverflow="true" evaluationTime="Report">
+				<reportElement style="htmlStyle" x="690" y="0" width="57" height="15"/>
+				<box topPadding="2" leftPadding="0" bottomPadding="0" rightPadding="0"/>
+				<textFieldExpression><![CDATA["/ " + ( $V{PAGE_NUMBER}+( ($F{meta:totalpages} != null) ? $F{meta:totalpages} -$V{PAGE_NUMBER} : 0 ) )]]></textFieldExpression>
+			</textField>
+		</band>
+	</pageFooter>
+	<summary>
+		<band height="30" splitType="Stretch"/>
+	</summary>
+</jasperReport>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/jasper/templates/sinfo.collision.overview.jrxml	Thu Jun 14 17:03:53 2018 +0200
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Created with Jaspersoft Studio version 6.5.1.final using JasperReports Library version 4.5.0  -->
+<!-- 2018-06-13T17:02:44 -->
+<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="flysreport" language="groovy" pageWidth="842" pageHeight="595" orientation="Landscape" columnWidth="762" leftMargin="60" rightMargin="20" topMargin="20" bottomMargin="20">
+	<property name="ireport.zoom" value="1.0"/>
+	<property name="ireport.x" value="0"/>
+	<property name="ireport.y" value="0"/>
+	<style name="htmlStyle" isDefault="true" mode="Transparent" markup="html" fontName="Roboto">
+		<paragraph lineSpacing="Single"/>
+	</style>
+	<field name="meta:totalpages" class="java.lang.Integer"/>
+	<field name="meta:startpageoffset" class="java.lang.Integer"/>
+	<field name="meta:header" class="java.lang.String"/>
+	<field name="meta:calcMode" class="java.lang.String"/>
+	<field name="meta:version_label" class="java.lang.String"/>
+	<field name="meta:version" class="java.lang.String"/>
+	<field name="meta:user_label" class="java.lang.String"/>
+	<field name="meta:user" class="java.lang.String"/>
+	<field name="meta:date_label" class="java.lang.String"/>
+	<field name="meta:date" class="java.lang.String"/>
+	<field name="meta:river_label" class="java.lang.String"/>
+	<field name="meta:river" class="java.lang.String"/>
+	<field name="meta:range_label" class="java.lang.String"/>
+	<field name="meta:range" class="java.lang.String"/>
+	<field name="meta:calculation_label" class="java.lang.String"/>
+	<field name="meta:calculation_name" class="java.lang.String"/>
+	<field name="meta:station_header" class="java.lang.String"/>
+	<field name="meta:flowdepthdevelopment_header" class="java.lang.String"/>
+	<field name="meta:flowdepthdevelopmentperyear_header" class="java.lang.String"/>
+	<field name="meta:waterleveldifference_header" class="java.lang.String"/>
+	<field name="meta:waterleveldifference_header2" class="java.lang.String"/>
+	<field name="meta:waterleveldifference_header_label" class="java.lang.String"/>
+	<field name="meta:bedheightdifference_header" class="java.lang.String"/>
+	<field name="meta:bedheightdifference_header2" class="java.lang.String"/>
+	<field name="meta:bedheightdifference_header_label" class="java.lang.String"/>
+	<field name="meta:flowdepthcurrent_header" class="java.lang.String"/>
+	<field name="meta:flowdepthcurrent_header2" class="java.lang.String"/>
+	<field name="meta:flowdepthhistorical_header" class="java.lang.String"/>
+	<field name="meta:flowdepthhistorical_header2" class="java.lang.String"/>
+	<field name="meta:flowdepthcurrent_header_label" class="java.lang.String"/>
+	<field name="meta:flowdepthhistorical_header_label" class="java.lang.String"/>
+	<field name="meta:flowdepth_header" class="java.lang.String"/>
+	<field name="meta:flowdepthdevelopment" class="java.lang.String"/>
+	<field name="meta:flowdepthmin_header" class="java.lang.String"/>
+	<field name="meta:flowdepthmax_header" class="java.lang.String"/>
+	<field name="meta:flowdepthdevelopment_header_label" class="java.lang.String"/>
+	<field name="meta:flowdepth_tkh_header" class="java.lang.String"/>
+	<field name="meta:tkh_header" class="java.lang.String"/>
+	<field name="meta:tkhkind_header" class="java.lang.String"/>
+	<field name="meta:waterlevel_header" class="java.lang.String"/>
+	<field name="meta:discharge_header" class="java.lang.String"/>
+	<field name="meta:waterlevel_name_header" class="java.lang.String"/>
+	<field name="meta:gauge_header" class="java.lang.String"/>
+	<field name="meta:bedheight_header" class="java.lang.String"/>
+	<field name="meta:sounding_name_header" class="java.lang.String"/>
+	<field name="meta:location_header" class="java.lang.String"/>
+	<field name="meta:river_unit" class="java.lang.String"/>
+	<field name="meta:riverside_header" class="java.lang.String"/>
+	<field name="meta:inundationduration_header" class="java.lang.String"/>
+	<field name="meta:inundationduration_q_header" class="java.lang.String"/>
+	<field name="meta:infrastructure_height_header" class="java.lang.String"/>
+	<field name="meta:infrastructure_type_header" class="java.lang.String"/>
+	<field name="meta:w_1_header" class="java.lang.String"/>
+	<field name="meta:q_1_header" class="java.lang.String"/>
+	<field name="meta:bezeichnung_1_header" class="java.lang.String"/>
+	<field name="meta:duration_1_header" class="java.lang.String"/>
+	<field name="meta:w_2_header" class="java.lang.String"/>
+	<field name="meta:q_2_header" class="java.lang.String"/>
+	<field name="meta:bezeichnung_2_header" class="java.lang.String"/>
+	<field name="meta:duration_2_header" class="java.lang.String"/>
+	<field name="meta:w_3_header" class="java.lang.String"/>
+	<field name="meta:q_3_header" class="java.lang.String"/>
+	<field name="meta:bezeichnung_3_header" class="java.lang.String"/>
+	<field name="meta:duration_3_header" class="java.lang.String"/>
+	<field name="data:0" class="java.lang.String"/>
+	<field name="data:1" class="java.lang.String"/>
+	<field name="data:2" class="java.lang.String"/>
+	<field name="data:3" class="java.lang.String"/>
+	<field name="data:4" class="java.lang.String"/>
+	<field name="data:5" class="java.lang.String"/>
+	<field name="data:6" class="java.lang.String"/>
+	<field name="data:7" class="java.lang.String"/>
+	<field name="data:8" class="java.lang.String"/>
+	<field name="data:9" class="java.lang.String"/>
+	<field name="data:10" class="java.lang.String"/>
+	<field name="data:11" class="java.lang.String"/>
+	<field name="data:12" class="java.lang.String"/>
+	<field name="data:13" class="java.lang.String"/>
+	<field name="data:14" class="java.lang.String"/>
+	<field name="data:15" class="java.lang.String"/>
+	<field name="data:16" class="java.lang.String"/>
+	<field name="data:17" class="java.lang.String"/>
+	<field name="data:18" class="java.lang.String"/>
+	<field name="data:19" class="java.lang.String"/>
+	<field name="data:20" class="java.lang.String"/>
+	<background>
+		<band splitType="Stretch"/>
+	</background>
+	<title>
+		<band height="169" splitType="Stretch">
+			<textField>
+				<reportElement style="htmlStyle" x="0" y="0" width="515" height="30"/>
+				<textElement>
+					<font size="18"/>
+				</textElement>
+				<textFieldExpression><![CDATA[$F{meta:header} + " " + $F{meta:river}]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement style="htmlStyle" x="0" y="39" width="165" height="20"/>
+				<textFieldExpression><![CDATA[$F{meta:calcMode}]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement style="htmlStyle" x="0" y="69" width="123" height="20"/>
+				<textFieldExpression><![CDATA[$F{meta:version_label} + ":"]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement style="htmlStyle" x="123" y="69" width="392" height="20"/>
+				<textFieldExpression><![CDATA[$F{meta:version}]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement style="htmlStyle" x="0" y="89" width="123" height="20"/>
+				<textFieldExpression><![CDATA[$F{meta:user_label} + ":"]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement style="htmlStyle" x="123" y="89" width="392" height="20"/>
+				<textFieldExpression><![CDATA[$F{meta:user}]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement style="htmlStyle" x="0" y="109" width="123" height="20"/>
+				<textFieldExpression><![CDATA[$F{meta:date_label} + ":"]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement style="htmlStyle" x="123" y="109" width="392" height="20"/>
+				<textFieldExpression><![CDATA[$F{meta:date}]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement style="htmlStyle" x="0" y="129" width="123" height="20"/>
+				<textFieldExpression><![CDATA[$F{meta:river_label} + ":"]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement style="htmlStyle" x="123" y="129" width="392" height="20"/>
+				<textFieldExpression><![CDATA[$F{meta:river}]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement style="htmlStyle" x="0" y="149" width="123" height="20"/>
+				<textFieldExpression><![CDATA[$F{meta:range_label} + ":"]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement style="htmlStyle" x="123" y="149" width="392" height="20"/>
+				<textFieldExpression><![CDATA[$F{meta:range}]]></textFieldExpression>
+			</textField>
+		</band>
+	</title>
+	<columnHeader>
+		<band height="29" splitType="Stretch">
+			<line>
+				<reportElement style="htmlStyle" positionType="FixRelativeToBottom" x="0" y="24" width="762" height="1"/>
+			</line>
+			<textField isStretchWithOverflow="true">
+				<reportElement key="" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="0" y="0" width="60" height="24">
+					<property name="net.sf.jasperreports.text.hyphenation" value="true"/>
+					<property name="net.sf.jasperreports.text.save.line.breaks" value="true"/>
+					<property name="net.sf.jasperreports.export.xls.wrap.text" value="true"/>
+				</reportElement>
+				<box padding="5"/>
+				<textElement textAlignment="Right" verticalAlignment="Bottom"/>
+				<textFieldExpression><![CDATA[$F{meta:station_header}]]></textFieldExpression>
+			</textField>
+			<textField isStretchWithOverflow="true">
+				<reportElement key="" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="80" y="0" width="180" height="24">
+					<property name="net.sf.jasperreports.text.hyphenation" value="true"/>
+					<property name="net.sf.jasperreports.text.save.line.breaks" value="true"/>
+					<property name="net.sf.jasperreports.export.xls.wrap.text" value="true"/>
+				</reportElement>
+				<box padding="5"/>
+				<textElement textAlignment="Right" verticalAlignment="Bottom"/>
+				<textFieldExpression><![CDATA[""+$F{meta:startpageoffset}+ ", "+ $F{meta:totalpages}]]></textFieldExpression>
+			</textField>
+		</band>
+	</columnHeader>
+	<detail>
+		<band height="15" splitType="Prevent">
+			<textField isStretchWithOverflow="true" isBlankWhenNull="true">
+				<reportElement key="" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="0" y="0" width="60" height="15"/>
+				<box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5">
+					<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
+					<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
+					<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
+					<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
+				</box>
+				<textElement textAlignment="Right" verticalAlignment="Top"/>
+				<textFieldExpression><![CDATA[$F{data:0}]]></textFieldExpression>
+			</textField>
+		</band>
+	</detail>
+	<pageFooter>
+		<band height="15" splitType="Stretch">
+			<textField isStretchWithOverflow="true">
+				<reportElement style="htmlStyle" x="634" y="0" width="55" height="15"/>
+				<box topPadding="2" rightPadding="3"/>
+				<textElement textAlignment="Right"/>
+				<textFieldExpression><![CDATA[$V{PAGE_NUMBER} +(($F{meta:startpageoffset} != null) ? $F{meta:startpageoffset} : 0 )]]></textFieldExpression>
+			</textField>
+			<textField isStretchWithOverflow="true" evaluationTime="Report">
+				<reportElement style="htmlStyle" x="690" y="0" width="57" height="15"/>
+				<box topPadding="2" leftPadding="0" bottomPadding="0" rightPadding="0"/>
+				<textFieldExpression><![CDATA["/ " + ( $V{PAGE_NUMBER}+( ($F{meta:totalpages} != null) ? $F{meta:totalpages} -$V{PAGE_NUMBER} : 0 ) )]]></textFieldExpression>
+			</textField>
+		</band>
+	</pageFooter>
+	<summary>
+		<band height="30" splitType="Stretch"/>
+	</summary>
+</jasperReport>
--- a/artifacts/doc/conf/jasper/templates/sinfo.flowdepth.jrxml	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/doc/conf/jasper/templates/sinfo.flowdepth.jrxml	Thu Jun 14 17:03:53 2018 +0200
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- Created with Jaspersoft Studio version 6.5.1.final using JasperReports Library version 4.5.0  -->
-<!-- 2018-06-06T13:11:23 -->
+<!-- 2018-06-14T13:41:07 -->
 <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="flysreport" language="groovy" pageWidth="842" pageHeight="595" columnWidth="515" leftMargin="60" rightMargin="20" topMargin="20" bottomMargin="20">
 	<property name="ireport.zoom" value="1.0"/>
 	<property name="ireport.x" value="0"/>
@@ -106,34 +106,34 @@
 	<columnHeader>
 		<band height="25" splitType="Stretch">
 			<line>
-				<reportElement positionType="FixRelativeToBottom" x="0" y="24" width="762" height="1"/>
+				<reportElement positionType="FixRelativeToBottom" x="5" y="24" width="762" height="1"/>
 			</line>
 			<textField isStretchWithOverflow="true">
-				<reportElement key="0" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" isPrintRepeatedValues="false" x="-5" y="0" width="55" height="24"/>
+				<reportElement key="0" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" isPrintRepeatedValues="false" x="0" y="0" width="55" height="24"/>
 				<box padding="5"/>
 				<textElement textAlignment="Right" verticalAlignment="Bottom"/>
 				<textFieldExpression><![CDATA[$F{meta:station_header}]]></textFieldExpression>
 			</textField>
 			<textField isStretchWithOverflow="true">
-				<reportElement key="1" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="50" y="0" width="55" height="24"/>
+				<reportElement key="1" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="55" y="0" width="55" height="24"/>
 				<box padding="5"/>
 				<textElement textAlignment="Right" verticalAlignment="Bottom"/>
 				<textFieldExpression><![CDATA[$F{meta:flowdepth_header} + "<br/>[m]"]]></textFieldExpression>
 			</textField>
 			<textField isStretchWithOverflow="true">
-				<reportElement key="flowdepthtkh" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="105" y="0" width="54" height="24"/>
+				<reportElement key="flowdepthtkh" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="110" y="0" width="54" height="24"/>
 				<box padding="5"/>
 				<textElement textAlignment="Right" verticalAlignment="Bottom"/>
 				<textFieldExpression><![CDATA[$F{meta:flowdepth_tkh_header} + " [m]"]]></textFieldExpression>
 			</textField>
 			<textField isStretchWithOverflow="true">
-				<reportElement key="tkh" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="159" y="0" width="36" height="24"/>
+				<reportElement key="tkh" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="164" y="0" width="36" height="24"/>
 				<box padding="5"/>
 				<textElement textAlignment="Right" verticalAlignment="Bottom"/>
 				<textFieldExpression><![CDATA[$F{meta:tkh_header} + "<br/>[cm]"]]></textFieldExpression>
 			</textField>
 			<textField isStretchWithOverflow="true">
-				<reportElement key="4" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="195" y="0" width="60" height="24"/>
+				<reportElement key="4" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="200" y="0" width="60" height="24"/>
 				<box padding="5">
 					<pen lineStyle="Solid"/>
 				</box>
@@ -141,37 +141,37 @@
 				<textFieldExpression><![CDATA[$F{meta:waterlevel_header} + "<br/>["  + $F{meta:river_unit} + "]"]]></textFieldExpression>
 			</textField>
 			<textField isStretchWithOverflow="true">
-				<reportElement key="5" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="255" y="0" width="40" height="24"/>
+				<reportElement key="5" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="260" y="0" width="40" height="24"/>
 				<box padding="5"/>
 				<textElement textAlignment="Right" verticalAlignment="Bottom"/>
 				<textFieldExpression><![CDATA[$F{meta:discharge_header} + "<br/>[m³/s]"]]></textFieldExpression>
 			</textField>
 			<textField isStretchWithOverflow="true">
-				<reportElement key="6" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="295" y="0" width="80" height="24"/>
+				<reportElement key="6" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="300" y="0" width="80" height="24"/>
 				<box padding="5"/>
 				<textElement verticalAlignment="Bottom"/>
 				<textFieldExpression><![CDATA[$F{meta:waterlevel_name_header}]]></textFieldExpression>
 			</textField>
 			<textField isStretchWithOverflow="true">
-				<reportElement key="7" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="375" y="0" width="110" height="24"/>
+				<reportElement key="7" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="380" y="0" width="110" height="24"/>
 				<box padding="5"/>
 				<textElement verticalAlignment="Bottom"/>
 				<textFieldExpression><![CDATA[$F{meta:gauge_header}]]></textFieldExpression>
 			</textField>
 			<textField isStretchWithOverflow="true">
-				<reportElement key="8" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="485" y="0" width="60" height="24"/>
+				<reportElement key="8" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="490" y="0" width="60" height="24"/>
 				<box padding="5"/>
 				<textElement textAlignment="Right" verticalAlignment="Bottom"/>
 				<textFieldExpression><![CDATA[$F{meta:bedheight_header} +  "<br/>[" + $F{meta:river_unit} + "]"]]></textFieldExpression>
 			</textField>
 			<textField isStretchWithOverflow="true">
-				<reportElement key="9" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="545" y="0" width="95" height="24"/>
+				<reportElement key="9" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="550" y="0" width="95" height="24"/>
 				<box padding="5"/>
 				<textElement verticalAlignment="Bottom"/>
 				<textFieldExpression><![CDATA[$F{meta:sounding_name_header}]]></textFieldExpression>
 			</textField>
 			<textField isStretchWithOverflow="true">
-				<reportElement key="10" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="640" y="0" width="122" height="24"/>
+				<reportElement key="10" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="645" y="0" width="122" height="24"/>
 				<box padding="5"/>
 				<textElement verticalAlignment="Bottom"/>
 				<textFieldExpression><![CDATA[$F{meta:location_header}]]></textFieldExpression>
@@ -181,7 +181,7 @@
 	<detail>
 		<band height="15" splitType="Prevent">
 			<textField isStretchWithOverflow="true" isBlankWhenNull="true">
-				<reportElement key="0" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="-5" y="0" width="55" height="15"/>
+				<reportElement key="0" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="0" y="0" width="55" height="15"/>
 				<box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"/>
 				<textElement textAlignment="Right" verticalAlignment="Top">
 					<font isBold="false"/>
@@ -189,55 +189,55 @@
 				<textFieldExpression><![CDATA[$F{data:0}]]></textFieldExpression>
 			</textField>
 			<textField isStretchWithOverflow="true" isBlankWhenNull="true">
-				<reportElement key="1" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="50" y="0" width="55" height="15"/>
+				<reportElement key="1" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="55" y="0" width="55" height="15"/>
 				<box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"/>
 				<textElement textAlignment="Right" verticalAlignment="Top"/>
 				<textFieldExpression><![CDATA[$F{data:1}]]></textFieldExpression>
 			</textField>
 			<textField isStretchWithOverflow="true" isBlankWhenNull="true">
-				<reportElement key="flowdepthtkh" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="105" y="0" width="54" height="15"/>
+				<reportElement key="flowdepthtkh" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="110" y="0" width="54" height="15"/>
 				<box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"/>
 				<textElement textAlignment="Right" verticalAlignment="Top"/>
 				<textFieldExpression><![CDATA[$F{data:2}]]></textFieldExpression>
 			</textField>
 			<textField isStretchWithOverflow="true" isBlankWhenNull="true">
-				<reportElement key="tkh" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="159" y="0" width="36" height="15"/>
+				<reportElement key="tkh" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="164" y="0" width="36" height="15"/>
 				<box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"/>
 				<textElement textAlignment="Right" verticalAlignment="Top"/>
 				<textFieldExpression><![CDATA[$F{data:3}]]></textFieldExpression>
 			</textField>
 			<textField isStretchWithOverflow="true" isBlankWhenNull="true">
-				<reportElement key="4" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="195" y="0" width="60" height="15"/>
+				<reportElement key="4" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="200" y="0" width="60" height="15"/>
 				<box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"/>
 				<textElement textAlignment="Right" verticalAlignment="Top"/>
 				<textFieldExpression><![CDATA[$F{data:4}]]></textFieldExpression>
 			</textField>
 			<textField isStretchWithOverflow="true" isBlankWhenNull="true">
-				<reportElement key="5" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="255" y="0" width="40" height="15"/>
+				<reportElement key="5" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="260" y="0" width="40" height="15"/>
 				<box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"/>
 				<textElement textAlignment="Right" verticalAlignment="Top"/>
 				<textFieldExpression><![CDATA[$F{data:5}]]></textFieldExpression>
 			</textField>
 			<textField isStretchWithOverflow="true" isBlankWhenNull="true">
-				<reportElement key="6" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="295" y="0" width="80" height="15"/>
+				<reportElement key="6" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="300" y="0" width="80" height="15"/>
 				<box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"/>
 				<textElement verticalAlignment="Top"/>
 				<textFieldExpression><![CDATA[$F{data:6}]]></textFieldExpression>
 			</textField>
 			<textField isStretchWithOverflow="true" isBlankWhenNull="true">
-				<reportElement key="7" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="375" y="0" width="110" height="15"/>
+				<reportElement key="7" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="380" y="0" width="110" height="15"/>
 				<box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"/>
 				<textElement verticalAlignment="Top"/>
 				<textFieldExpression><![CDATA[$F{data:7}]]></textFieldExpression>
 			</textField>
 			<textField isStretchWithOverflow="true" isBlankWhenNull="true">
-				<reportElement key="8" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="485" y="0" width="60" height="15"/>
+				<reportElement key="8" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="490" y="0" width="60" height="15"/>
 				<box topPadding="2" leftPadding="5" rightPadding="5"/>
 				<textElement textAlignment="Right" verticalAlignment="Top"/>
 				<textFieldExpression><![CDATA[$F{data:8}]]></textFieldExpression>
 			</textField>
 			<textField isStretchWithOverflow="true" isBlankWhenNull="true">
-				<reportElement key="9" style="htmlStyle" positionType="Float" x="545" y="0" width="95" height="15" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true">
+				<reportElement key="9" style="htmlStyle" positionType="Float" x="550" y="0" width="95" height="15" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true">
 					<property name="net.sf.jasperreports.export.pdf.force.linebreak.policy" value="true"/>
 					<property name="net.sf.jasperreports.text.save.line.breaks" value="false"/>
 				</reportElement>
@@ -246,7 +246,7 @@
 				<textFieldExpression><![CDATA[$F{data:9}]]></textFieldExpression>
 			</textField>
 			<textField isStretchWithOverflow="true" isBlankWhenNull="true">
-				<reportElement key="10" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="640" y="0" width="122" height="15"/>
+				<reportElement key="10" style="htmlStyle" positionType="Float" stretchType="RelativeToBandHeight" x="645" y="0" width="122" height="15"/>
 				<box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"/>
 				<textElement verticalAlignment="Top"/>
 				<textFieldExpression><![CDATA[$F{data:10}]]></textFieldExpression>
--- a/artifacts/doc/conf/jasper/templates/sinfo.flowdepthdevelopment.jrxml	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/doc/conf/jasper/templates/sinfo.flowdepthdevelopment.jrxml	Thu Jun 14 17:03:53 2018 +0200
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- Created with Jaspersoft Studio version 6.5.1.final using JasperReports Library version 4.5.0  -->
-<!-- 2018-06-06T13:15:32 -->
+<!-- 2018-06-14T13:59:28 -->
 <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="flysreport" language="groovy" pageWidth="842" pageHeight="595" columnWidth="515" leftMargin="60" rightMargin="20" topMargin="20" bottomMargin="20">
 	<property name="ireport.zoom" value="1.0"/>
 	<property name="ireport.x" value="0"/>
@@ -56,6 +56,10 @@
 	<field name="data:5" class="java.lang.String"/>
 	<field name="data:6" class="java.lang.String"/>
 	<field name="data:7" class="java.lang.String"/>
+	<field name="data:8" class="java.lang.String"/>
+	<field name="data:9" class="java.lang.String"/>
+	<field name="data:10" class="java.lang.String"/>
+	<field name="data:11" class="java.lang.String"/>
 	<background>
 		<band splitType="Stretch"/>
 	</background>
@@ -187,45 +191,25 @@
 			<line>
 				<reportElement style="htmlStyle" x="0" y="74" width="762" height="1"/>
 			</line>
-			<frame>
-				<reportElement key="TEST" x="220" y="0" width="85" height="75"/>
-				<textField>
-					<reportElement key="" style="htmlStyle" x="0" y="40" width="85" height="35"/>
-					<box topPadding="0" leftPadding="5" bottomPadding="5" rightPadding="5"/>
-					<textElement textAlignment="Right" verticalAlignment="Bottom"/>
-					<textFieldExpression><![CDATA[$F{meta:waterleveldifference_header2}]]></textFieldExpression>
-				</textField>
-				<textField>
-					<reportElement key="" style="htmlStyle" x="0" y="0" width="85" height="40"/>
-					<box topPadding="0" leftPadding="5" bottomPadding="0" rightPadding="5"/>
-					<textElement textAlignment="Right" verticalAlignment="Bottom">
-						<font pdfEncoding=""/>
-					</textElement>
-					<textFieldExpression><![CDATA[$F{meta:waterleveldifference_header}+"<br/>["+$F{meta:river_unit}+"]"]]></textFieldExpression>
-				</textField>
-			</frame>
+			<textField>
+				<reportElement key="" style="htmlStyle" x="220" y="40" width="85" height="35"/>
+				<box padding="0"/>
+				<textElement textAlignment="Right" verticalAlignment="Bottom"/>
+				<textFieldExpression><![CDATA[$F{meta:waterleveldifference_header2}]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement key="" style="htmlStyle" x="220" y="1" width="85" height="40"/>
+				<box padding="0"/>
+				<textElement textAlignment="Right" verticalAlignment="Bottom">
+					<font pdfEncoding=""/>
+				</textElement>
+				<textFieldExpression><![CDATA[$F{meta:waterleveldifference_header}+"<br/>["+$F{meta:river_unit}+"]"]]></textFieldExpression>
+			</textField>
 		</band>
 	</columnHeader>
 	<detail>
 		<band height="15" splitType="Stretch">
 			<textField isStretchWithOverflow="true" isBlankWhenNull="true">
-				<reportElement style="htmlStyle" stretchType="RelativeToBandHeight" x="475" y="0" width="85" height="15"/>
-				<box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"/>
-				<textElement textAlignment="Right"/>
-				<textFieldExpression><![CDATA[$F{data:6}]]></textFieldExpression>
-			</textField>
-			<textField isStretchWithOverflow="true" isBlankWhenNull="true">
-				<reportElement style="htmlStyle" stretchType="RelativeToBandHeight" x="560" y="0" width="202" height="15"/>
-				<box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"/>
-				<textFieldExpression><![CDATA[$F{data:7}]]></textFieldExpression>
-			</textField>
-			<textField isStretchWithOverflow="true" isBlankWhenNull="true">
-				<reportElement style="htmlStyle" stretchType="RelativeToBandHeight" x="390" y="0" width="85" height="15"/>
-				<box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"/>
-				<textElement textAlignment="Right"/>
-				<textFieldExpression><![CDATA[$F{data:5}]]></textFieldExpression>
-			</textField>
-			<textField isStretchWithOverflow="true" isBlankWhenNull="true">
 				<reportElement style="htmlStyle" stretchType="RelativeToBandHeight" x="0" y="0" width="60" height="15"/>
 				<box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"/>
 				<textElement textAlignment="Right"/>
@@ -255,6 +239,23 @@
 				<textElement textAlignment="Right"/>
 				<textFieldExpression><![CDATA[$F{data:4}]]></textFieldExpression>
 			</textField>
+			<textField isStretchWithOverflow="true" isBlankWhenNull="true">
+				<reportElement style="htmlStyle" stretchType="RelativeToBandHeight" x="475" y="0" width="85" height="15"/>
+				<box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+				<textElement textAlignment="Right"/>
+				<textFieldExpression><![CDATA[$F{data:6}]]></textFieldExpression>
+			</textField>
+			<textField isStretchWithOverflow="true" isBlankWhenNull="true">
+				<reportElement style="htmlStyle" stretchType="RelativeToBandHeight" x="560" y="0" width="202" height="15"/>
+				<box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+				<textFieldExpression><![CDATA[$F{data:7}]]></textFieldExpression>
+			</textField>
+			<textField isStretchWithOverflow="true" isBlankWhenNull="true">
+				<reportElement style="htmlStyle" stretchType="RelativeToBandHeight" x="390" y="0" width="85" height="15"/>
+				<box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="5"/>
+				<textElement textAlignment="Right"/>
+				<textFieldExpression><![CDATA[$F{data:5}]]></textFieldExpression>
+			</textField>
 		</band>
 	</detail>
 	<pageFooter>
--- a/artifacts/doc/conf/jasper/templates/sinfo.tkh.jrxml	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/doc/conf/jasper/templates/sinfo.tkh.jrxml	Thu Jun 14 17:03:53 2018 +0200
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- Created with Jaspersoft Studio version 6.5.1.final using JasperReports Library version 4.5.0  -->
-<!-- 2018-06-06T13:12:23 -->
+<!-- 2018-06-13T15:46:02 -->
 <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="flysreport" language="groovy" pageWidth="842" pageHeight="595" columnWidth="515" leftMargin="60" rightMargin="20" topMargin="20" bottomMargin="20">
 	<property name="ireport.zoom" value="1.0"/>
 	<property name="ireport.x" value="0"/>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationExportableResult.java	Thu Jun 14 17:03:53 2018 +0200
@@ -0,0 +1,79 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ *  Björnsen Beratende Ingenieure GmbH
+ *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * This file is Free Software under the GNU AGPL (>=v3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out the
+ * documentation coming with Dive4Elements River for details.
+ */
+package org.dive4elements.river.artifacts.common;
+
+import java.util.Collection;
+
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+
+import net.sf.jasperreports.engine.JRException;
+
+/**
+ * @author Domenico Nardi Tironi
+ */
+public abstract class AbstractCalculationExportableResult<RESULTS extends AbstractCalculationResults> extends AbstractCalculationResult {
+
+    private static final long serialVersionUID = 1L;
+
+    public AbstractCalculationExportableResult(final String label, final Collection<ResultRow> rows) {
+        super(label, rows);
+    }
+
+    public abstract void writeCSVHeader(ExportContextCSV exportContextCSV, final RESULTS results, final RiverInfo river);
+
+    public final void writeCsv(final ExportContextCSV exportContextCSV, final RESULTS results) {
+
+        writeCSVResultMetadata(exportContextCSV, results);
+        // wenn resultsmetadata null sind!? keine neue zeile
+        // writer.writeNext(new String[] { "" }); // break line in den Implementationen,
+        // weil es sein kann, dass KEINE ResultMetadata geschrieben werden; dann wäre eine Leerzeile überflüssig
+
+        /* now the value rows */
+        final Collection<ResultRow> rows = getRows();
+        for (final ResultRow row : rows)
+            writeCSVRow(exportContextCSV, results, row);
+    }
+
+    protected abstract void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final RESULTS results);
+
+    protected void writeCSVRow(final ExportContextCSV exportContextCSV, final RESULTS results, final ResultRow row) {
+        final String[] formattedRow = formatCSVRow(exportContextCSV, results, row);
+        exportContextCSV.writeCSVLine(formattedRow);
+
+    }
+
+    protected abstract String[] formatCSVRow(ExportContextCSV exportContextCSV, final RESULTS results, final ResultRow row);
+
+    protected abstract String[] formatPDFRow(ExportContextCSV exportContextPDF, RESULTS results, ResultRow row);
+
+    public JasperDesigner addReport(final ExportContextCSV exportContextPDF, final RESULTS results, final JasperReporter reporter,
+            final MetaAndTableJRDataSource source) throws JRException {
+
+        final JasperDesigner design = reporter.addReport(getJasperFile(), source);
+        addJRTableHeader(exportContextPDF, source, results);
+        addJRTableData(exportContextPDF, source, results);
+        return design;
+    }
+
+    protected abstract String getJasperFile();
+
+    protected abstract void addJRTableHeader(ExportContextCSV exportContextPDF, MetaAndTableJRDataSource source, RESULTS results);
+
+    private void addJRTableData(final ExportContextCSV exportContextPDF, final MetaAndTableJRDataSource source, final RESULTS results) {
+
+        final Collection<ResultRow> rows = getRows();
+
+        for (final ResultRow row : rows) {
+
+            final String[] formattedRow = formatPDFRow(exportContextPDF, results, row);
+            source.addData(formattedRow);
+        }
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationListResults.java	Thu Jun 14 17:03:53 2018 +0200
@@ -0,0 +1,50 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ *  Björnsen Beratende Ingenieure GmbH
+ *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * This file is Free Software under the GNU AGPL (>=v3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out the
+ * documentation coming with Dive4Elements River for details.
+ */
+package org.dive4elements.river.artifacts.common;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang.math.DoubleRange;
+import org.dive4elements.river.artifacts.model.Calculation;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+
+/**
+ * @author Gernot Belger
+ */
+public abstract class AbstractCalculationListResults<RESULT extends AbstractCalculationResult> extends AbstractCalculationResults {
+
+    private static final long serialVersionUID = 1L;
+
+    private final List<RESULT> results = new ArrayList<>();
+
+    public AbstractCalculationListResults(final String calcModeLabel, final String user, final RiverInfo river, final DoubleRange calcRange) {
+        super(calcModeLabel, user, river, calcRange);
+    }
+
+    public final void addResult(final RESULT result, final Calculation problems) {
+        /* we assume error reporting was already done in this case */
+        if (result == null)
+            return;
+
+        if (result.isEmpty()) {
+            problems.addProblem("abstractsinfocalculationresults.emptyResult", result.getLabel());
+            return;
+        }
+
+        this.results.add(result);
+    }
+
+    public final List<RESULT> getResults() {
+        return Collections.unmodifiableList(this.results);
+    }
+
+}
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationResult.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationResult.java	Thu Jun 14 17:03:53 2018 +0200
@@ -15,7 +15,6 @@
 import java.util.Collections;
 import java.util.List;
 
-import org.dive4elements.river.artifacts.common.IResultType;
 import gnu.trove.TDoubleArrayList;
 
 /**
@@ -29,38 +28,35 @@
 
     private final String label;
 
- 
-
-    public AbstractCalculationResult(final String label,  final Collection<ResultRow> rows) {
-        this.label = label;  
+    public AbstractCalculationResult(final String label, final Collection<ResultRow> rows) {
+        this.label = label;
         this.rows = new ArrayList<>(rows);
     }
 
     public final String getLabel() {
         return this.label;
     }
- 
 
     public boolean isEmpty() {
         return this.rows.isEmpty();
     }
 
-    public final void addRow(final ResultRow resultRow) {
-        this.rows.add(resultRow);
-    }
+    // public final void addRow(final ResultRow resultRow) {
+    // this.rows.add(resultRow);
+    // }
 
     public final Collection<ResultRow> getRows() {
         return Collections.unmodifiableCollection(this.rows);
     }
 
-    public final double[][] getStationPoints(final IResultType type) { //gehört die Methode hier rein? oder in erbende Klassen?
+    public final double[][] getStationPoints(final IResultType type) { // gehört die Methode hier rein? oder in erbende Klassen?
 
         final TDoubleArrayList xPoints = new TDoubleArrayList(this.rows.size());
         final TDoubleArrayList yPoints = new TDoubleArrayList(this.rows.size());
 
         for (final ResultRow row : this.rows) {
 
-            final double station = row.getDoubleValue(GeneralResultType.station); //TODO: move "station" (and others) to common
+            final double station = row.getDoubleValue(GeneralResultType.station); // TODO: move "station" (and others) to common
             final double value = row.getDoubleValue(type);
 
             xPoints.add(station);
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationResults.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationResults.java	Thu Jun 14 17:03:53 2018 +0200
@@ -10,23 +10,17 @@
 package org.dive4elements.river.artifacts.common;
 
 import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
 
 import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.artifacts.model.Calculation;
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 
 /**
  * @author Gernot Belger
  */
-public abstract class AbstractCalculationResults<RESULT extends AbstractCalculationResult> implements Serializable {
+public abstract class AbstractCalculationResults implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    private final List<RESULT> results = new ArrayList<>();
-
     private final String calcModeLabel;
 
     private final String user;
@@ -42,36 +36,19 @@
         this.calcRange = calcRange;
     }
 
-    public String getCalcModeLabel() {
+    public final String getCalcModeLabel() {
         return this.calcModeLabel;
     }
 
-    public String getUser() {
+    public final String getUser() {
         return this.user;
     }
 
-    public RiverInfo getRiver() {
+    public final RiverInfo getRiver() {
         return this.river;
     }
 
-    public DoubleRange getCalcRange() {
+    public final DoubleRange getCalcRange() {
         return this.calcRange;
     }
-
-    public void addResult(final RESULT result, final Calculation problems) {
-        /* we assume error reporting was already done in this case */
-        if (result == null)
-            return;
-
-        if (result.isEmpty()) {
-            problems.addProblem("abstractsinfocalculationresults.emptyResult", result.getLabel());
-            return;
-        }
-
-        this.results.add(result);
-    }
-
-    public List<RESULT> getResults() {
-        return Collections.unmodifiableList(this.results);
-    }
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCommonExporter.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCommonExporter.java	Thu Jun 14 17:03:53 2018 +0200
@@ -9,160 +9,88 @@
  */
 package org.dive4elements.river.artifacts.common;
 
-import java.util.Collection;
+import java.io.OutputStream;
 
 import org.apache.log4j.Logger;
-import org.dive4elements.artifacts.CallMeta;
+import org.dive4elements.artifacts.CallContext;
 import org.dive4elements.river.artifacts.model.CalculationResult;
-import org.dive4elements.river.artifacts.resources.Resources;
-import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 import org.dive4elements.river.exports.AbstractExporter;
+import org.w3c.dom.Document;
 
 import au.com.bytecode.opencsv.CSVWriter;
 
 /**
  * @author Gernot Belger
  */
-public abstract class AbstractCommonExporter<RESULT extends AbstractCalculationResult, RESULTS extends AbstractCalculationResults<RESULT>> extends AbstractExporter {
+public abstract class AbstractCommonExporter<RESULTS extends AbstractCalculationResults> extends AbstractExporter {
 
-    /** The storage that contains the current calculation result. */
-    protected static enum ExportMode {
-        pdf, csv
+    /** The log used in this exporter. */
+    private final Logger log = Logger.getLogger(getClass());
+
+    /** The log used in this exporter. */
+    protected final Logger getLog() {
+        return this.log;
     }
 
-    /** The log used in this exporter. */
-    protected abstract Logger getLog();
+    private RESULTS results = null;
 
-    protected RESULTS data = null;
+    private ExportContextPDF helper;
 
-    public final RESULTS getData() {
-        return this.data;
+    @Override
+    public void init(final String outName, final Document request, final OutputStream out, final CallContext context) {
+        super.init(outName, request, out, context);
+
+        this.helper = new ExportContextPDF(context); // bleibt so asynchron zu ExportContextCSV - ist so beabsichtigt
+    }
+
+    protected final ExportContextPDF getHelper() {
+        return this.helper;
     }
 
     @Override
     protected final void addData(final Object d) {
         /* reset */
-        this.data = null;
+        this.results = null;
+
         if (d instanceof CalculationResult) {
 
             final Object dat = ((CalculationResult) d).getData();
             if (dat != null) {
                 @SuppressWarnings("unchecked")
                 final RESULTS result = (RESULTS) dat;
-                this.data = result;
+                this.results = result;
             }
         }
     }
 
+    protected final RESULTS getResults() {
+        return this.results;
+    }
+
+    protected final AbstractCalculationResults getResults2() {
+        return this.results;
+    }
+
+    @Override
+    protected final void writeCSVData(final CSVWriter writer) {
+        doWriteCSVData(writer, this.results);
+    }
+
+    protected abstract void doWriteCSVData(CSVWriter writer, RESULTS results);
+
     /**
      * Formats header with unit and label: msg [unit] (label)
      */
+    // TODO: REMOVE, because it has moved to ExportContextCSV
     protected final String msgUnitLabel(final String key, final String unit, final String label) {
         final String msg = msg(key);
         return String.format("%s [%s] (%s)", msg, unit, label);
     }
 
     @Override
-    protected final void writeCSVData(final CSVWriter writer) {
-        getLog().info("writeCSVData");
-
-        /* fetch calculation results */
-        final RESULTS results = this.data;
-
-        /* write as csv */
-        writeCSVGlobalMetadata(writer, results);
-        writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
-        final RiverInfo river = results.getRiver();
-        // FIXME :with comment if not first result
-        writeCSVHeader(writer, results, river);
-        writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
-
-        for (final RESULT result : results.getResults()) {
-            writeCSVResult(writer, results, result);
-            writer.writeNext(new String[] { "" }); // break line HERE after each resultset
-        }
-
-    }
-
-    protected abstract void writeCSVHeader(final CSVWriter writer, final RESULTS results, final RiverInfo river);
-
-    /**
-     * Add metadata that is once written to the top of the file.
-     */
-    protected abstract void writeCSVGlobalMetadata(final CSVWriter writer, final RESULTS results);
-
-    protected final void writeCSVMetaEntry(final CSVWriter writer, final String message, final Object... messageArgs) {
-
-        final CallMeta meta = this.context.getMeta();
-
-        writer.writeNext(new String[] { Resources.getMsg(meta, message, message, messageArgs) });
-    }
-
-    private final void writeCSVResult(final CSVWriter writer, final RESULTS results, final RESULT result) {
-
-        writeCSVResultMetadata(writer, results, result);
-        // wenn resultsmetadata null sind!? keine neue zeile
-        // writer.writeNext(new String[] { "" }); // break line in den Implementationen,
-        // weil es sein kann, dass KEINE ResultMetadata geschrieben werden; dann wäre eine Leerzeile überflüssig
-
-        /* now the value rows */
-        final Collection<ResultRow> rows = result.getRows();
-        for (final ResultRow row : rows) {
-            writeCSVRow(writer, results, result, row);
-        }
+    protected final void writePDF(final OutputStream out) {
+        doWritePdf(out, this.results);
     }
 
-    /**
-     * Add metadata that is written once per result set.
-     */
-    protected abstract void writeCSVResultMetadata(CSVWriter writer, RESULTS results, RESULT result);
-
-    protected void writeCSVRow(final CSVWriter writer, final RESULTS results, final RESULT result, final ResultRow row) {
-        getLog().debug("writeCSVFlowDepthRow");
-
-        final String[] formattedRow = formatCSVRow(results, row);
-        writer.writeNext(formattedRow);
-    }
-
-    protected final String[] formatCSVRow(final RESULTS results, final ResultRow row) {
-        return formatRow(results, row, ExportMode.csv);
-    }
-
-    protected final MetaAndTableJRDataSource createJRData(final AbstractCalculationResults<RESULT> data) {
-
-        /* fetch calculation results */
-        final RESULTS results = this.data;
-
-        final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
-
-        addJRMetaData(source, results);
-
-        for (final RESULT result : results.getResults())
-            addJRTableData(source, results, result);
-
-        return source;
-    }
-
-    protected abstract void addJRMetaData(final MetaAndTableJRDataSource source, final RESULTS results);
-
-    private void addJRTableData(final MetaAndTableJRDataSource source, final RESULTS results, final RESULT result) {
-
-        final Collection<ResultRow> rows = result.getRows();
-
-        for (final ResultRow row : rows) {
-
-            final String[] formattedRow = formatPDFRow(results, row);
-            source.addData(formattedRow);
-        }
-    }
-
-    protected abstract String[] formatRow(RESULTS results, ResultRow row, ExportMode mode);
-
-    private final String[] formatPDFRow(final RESULTS results, final ResultRow row) {
-        return formatRow(results, row, ExportMode.pdf);
-    }
-
-    protected abstract void writeCSVGlobalMetadataDefaults(final CSVWriter writer, final RESULTS results);
-
-    protected abstract void addJRMetaDataDefaults(final MetaAndTableJRDataSource source, final RESULTS results);
+    protected abstract void doWritePdf(OutputStream out, RESULTS results);
 }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCommonListExporter.java	Thu Jun 14 17:03:53 2018 +0200
@@ -0,0 +1,117 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ *  Björnsen Beratende Ingenieure GmbH
+ *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * This file is Free Software under the GNU AGPL (>=v3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out the
+ * documentation coming with Dive4Elements River for details.
+ */
+package org.dive4elements.river.artifacts.common;
+
+import java.util.Collection;
+
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+
+import au.com.bytecode.opencsv.CSVWriter;
+
+/**
+ * @author Gernot Belger
+ */
+public abstract class AbstractCommonListExporter<RESULT extends AbstractCalculationResult, RESULTS extends AbstractCalculationListResults<RESULT>> extends AbstractCommonExporter<RESULTS> {
+
+    /** The storage that contains the current calculation result. */
+    protected static enum ExportMode {
+        pdf, csv
+    }
+
+    @Override
+    protected void doWriteCSVData(final CSVWriter writer, final RESULTS results) {
+
+        getLog().info("writeCSVData");
+
+        /* write as csv */
+        writeCSVGlobalMetadata(writer, results);
+
+        writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+        final RiverInfo river = results.getRiver();
+        // FIXME :with comment if not first result
+        writeCSVHeader(writer, results, river);
+        writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+
+        for (final RESULT result : results.getResults()) {
+            writeCSVResult(writer, results, result);
+            writer.writeNext(new String[] { "" }); // break line HERE after each resultset
+        }
+    }
+
+    protected abstract void writeCSVHeader(final CSVWriter writer, final RESULTS results, final RiverInfo river);
+
+    /**
+     * Add metadata that is once written to the top of the file.
+     */
+    protected abstract void writeCSVGlobalMetadata(final CSVWriter writer, final RESULTS results);
+
+    private final void writeCSVResult(final CSVWriter writer, final RESULTS results, final RESULT result) {
+
+        writeCSVResultMetadata(writer, results, result);
+        // wenn resultsmetadata null sind!? keine neue zeile
+        // writer.writeNext(new String[] { "" }); // break line in den Implementationen,
+        // weil es sein kann, dass KEINE ResultMetadata geschrieben werden; dann wäre eine Leerzeile überflüssig
+
+        /* now the value rows */
+        final Collection<ResultRow> rows = result.getRows();
+        for (final ResultRow row : rows)
+            writeCSVRow(writer, results, result, row);
+    }
+
+    /**
+     * Add metadata that is written once per result set.
+     */
+    protected abstract void writeCSVResultMetadata(CSVWriter writer, RESULTS results, RESULT result);
+
+    protected void writeCSVRow(final CSVWriter writer, final RESULTS results, final RESULT result, final ResultRow row) {
+        getLog().debug("writeCSVFlowDepthRow");
+
+        final String[] formattedRow = formatCSVRow(results, row);
+        writer.writeNext(formattedRow);
+    }
+
+    protected final String[] formatCSVRow(final RESULTS results, final ResultRow row) {
+        return formatRow(results, row, ExportMode.csv);
+    }
+
+    protected final MetaAndTableJRDataSource createJRData() {
+
+        /* fetch calculation results */
+        final RESULTS results = getResults();
+
+        final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+
+        addJRMetaData(source, results);
+
+        for (final RESULT result : results.getResults())
+            addJRTableData(source, results, result);
+
+        return source;
+    }
+
+    protected abstract void addJRMetaData(final MetaAndTableJRDataSource source, final RESULTS results);
+
+    private void addJRTableData(final MetaAndTableJRDataSource source, final RESULTS results, final RESULT result) {
+
+        final Collection<ResultRow> rows = result.getRows();
+
+        for (final ResultRow row : rows) {
+
+            final String[] formattedRow = formatPDFRow(results, row);
+            source.addData(formattedRow);
+        }
+    }
+
+    protected abstract String[] formatRow(RESULTS results, ResultRow row, ExportMode mode);
+
+    private final String[] formatPDFRow(final RESULTS results, final ResultRow row) {
+        return formatRow(results, row, ExportMode.pdf);
+    }
+}
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractResultType.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractResultType.java	Thu Jun 14 17:03:53 2018 +0200
@@ -86,6 +86,7 @@
 
     protected abstract NumberFormat createFormatter(CallContext context);
 
+    @Override
     public final String getCsvHeader() {
         return this.csvHeader;
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/ExportContextCSV.java	Thu Jun 14 17:03:53 2018 +0200
@@ -0,0 +1,236 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ *  Björnsen Beratende Ingenieure GmbH
+ *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * This file is Free Software under the GNU AGPL (>=v3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out the
+ * documentation coming with Dive4Elements River for details.
+ */
+package org.dive4elements.river.artifacts.common;
+
+import java.text.DateFormat;
+import java.text.NumberFormat;
+import java.util.Date;
+import java.util.Locale;
+
+import org.apache.commons.lang.math.DoubleRange;
+import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.artifacts.CallMeta;
+import org.dive4elements.river.FLYS;
+import org.dive4elements.river.artifacts.resources.Resources;
+import org.dive4elements.river.artifacts.sinfo.common.SInfoI18NStrings;
+import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
+import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
+import org.dive4elements.river.utils.Formatter;
+
+import au.com.bytecode.opencsv.CSVWriter;
+
+/**
+ * @author Domenico Nardi Tironi
+ *
+ */
+public final class ExportContextCSV {
+
+    private static final String CSV_META_HEADER_EVALUATOR = "sinfo.export.flow_depth.csv.meta.header.sounding.evaluator";
+
+    private static final String CSV_META_HEADER_SOUNDING = "sinfo.export.flow_depth.csv.meta.header.sounding";
+
+    private static final String CSV_META_HEADER_SOUNDING_YEAR = "sinfo.export.flow_depth.csv.meta.header.sounding.year";
+
+    private static final String CSV_META_HEADER_SOUNDING_TYPE = "sinfo.export.flow_depth.csv.meta.header.sounding.type";
+
+    private static final String CSV_META_HEADER_SOUNDING_PRJ = "sinfo.export.flow_depth.csv.meta.header.sounding.prj";
+
+    private static final String CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL = "sinfo.export.flow_depth.csv.meta.header.sounding.elevationmodel";
+
+    private static final String CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL_ORIGINAL = "sinfo.export.flow_depth.csv.meta.header.sounding.elevationmodel.original";
+
+    private static NumberFormat qFormat = null;
+
+    private static NumberFormat flowDepthFormat = null;
+
+    private NumberFormat kmFormat;
+
+    /** The CallContext object. */
+    private final CallContext context;
+
+    private final CSVWriter writer;
+
+    public ExportContextCSV(final CallContext context, final CSVWriter writer) {
+        this.context = context;
+        this.writer = writer;
+    }
+
+    private String msg(final String key) {
+        return Resources.getMsg(this.context.getMeta(), key, key);
+    }
+
+    public String msg(final String key, final Object... args) {
+        return Resources.getMsg(this.context.getMeta(), key, key, args);
+    }
+
+    public final void writeCSVMetaEntry(final String message, final Object... messageArgs) {
+
+        final CallMeta meta = this.context.getMeta();
+
+        this.writer.writeNext(new String[] { Resources.getMsg(meta, message, message, messageArgs) });
+    }
+
+    public void writeBlankLine() {
+        writeCSVLine(new String[] { "" });
+
+    }
+
+    // *** CUSTOM STUFF that is used multiple times ***///
+
+    public final void writeCSVSoundingMetadata2(final BedHeightInfo sounding, final String mainLabel) {
+        // "##METADATEN PEILUNG"
+        writeCSVMetaEntry(mainLabel);
+
+        // "# Jahr der Peilung: "
+        writeCSVMetaEntry(CSV_META_HEADER_SOUNDING_YEAR, Integer.toString(sounding.getYear()));
+        // "# Aufnahmeart: "
+        writeCSVMetaEntry(CSV_META_HEADER_SOUNDING_TYPE, sounding.getType());
+        // "# Auswerter: "
+        writeCSVMetaEntry(CSV_META_HEADER_EVALUATOR, sounding.getEvaluationBy());
+        // "# Lagesystem: "
+        writeCSVMetaEntry(CSV_META_HEADER_SOUNDING_PRJ, sounding.getLocationSystem());
+        // "# Höhensystem: "
+        writeCSVMetaEntry(CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL, sounding.getCurElevationModelUnit());
+        // "# ursprüngliches Höhensystem: "
+        writeCSVMetaEntry(CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL_ORIGINAL, sounding.getOldElevationModelUnit());
+    }
+
+    public final void writeCSVSoundingMetadata(final BedHeightInfo sounding) {
+        // "##METADATEN PEILUNG"
+        writeCSVMetaEntry(CSV_META_HEADER_SOUNDING);
+
+    }
+
+    public void writeCSVLine(final String[] line) {
+        this.writer.writeNext(line);
+    }
+
+    public String formatCsvHeader(final IResultType type) {
+        return msg(type.getCsvHeader());
+    }
+
+    public String formatRowValue(final ResultRow row, final IResultType type) {
+        return row.exportValue(this.context, type);
+    }
+
+    public void addJRMetadata(final MetaAndTableJRDataSource source, final String key, final IResultType type) {
+        source.addMetaData(key, type.getPdfHeader(this.context.getMeta()));
+    }
+
+    public final void writeCSVGlobalMetadataDefaults(final AbstractCalculationResults results) {
+        // TODO: results as member
+        final String calcModeLabel = results.getCalcModeLabel();
+        final RiverInfo river = results.getRiver();
+        final DoubleRange calcRange = results.getCalcRange();
+
+        writeCSVMetaEntry(I18NStrings.CSV_META_HEADER_RESULT, msg(I18NStrings.CSV_META_HEADER_RESULT_LABEL), river.getName(), calcModeLabel);
+
+        // "# FLYS-Version: "
+        writeCSVMetaEntry(I18NStrings.CSV_META_VERSION, msg(I18NStrings.CSV_META_VERSION_LABEL), FLYS.VERSION);
+
+        // "# Bearbeiter: "
+        writeCSVMetaEntry(I18NStrings.CSV_META_USER, msg(I18NStrings.CSV_META_USER_LABEL), results.getUser());
+
+        // "# Datum der Erstellung: "
+        final Locale locale = Resources.getLocale(this.context.getMeta());
+        final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
+        writeCSVMetaEntry(I18NStrings.CSV_META_CREATION, msg(I18NStrings.CSV_META_CREATION_LABEL), df.format(new Date()));
+
+        // "# Gewässer: "
+        writeCSVMetaEntry(I18NStrings.CSV_META_RIVER, msg(I18NStrings.CSV_META_RIVER_LABEL), river.getName());
+
+        // "# Höhensystem des Flusses: "
+        writeCSVMetaEntry(I18NStrings.CSV_META_HEIGHT_UNIT_RIVER, river.getWstUnit());
+
+        if (calcRange != null) {
+            // "# Ort/Bereich (km): "
+            writeCSVMetaEntry(I18NStrings.CSV_META_RANGE, msg(I18NStrings.CSV_META_RANGE_LABEL), getKmFormatter().format(calcRange.getMinimumDouble()),
+                    getKmFormatter().format(calcRange.getMaximumDouble()));
+        }
+    }
+
+    public final void writeCSVWaterlevelMetadata(final WstInfo wst) {
+        writeCSVWaterlevelMetadata(wst, SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL); // default Label; used in 99%
+    }
+
+    public final void writeCSVWaterlevelMetadata(final WstInfo wst, final String mainLabel) {
+        // "##METADATEN WASSERSPIEGELLAGE"
+        writeCSVMetaEntry(mainLabel);
+
+        // "# Bezeichnung der Wasserspiegellage: "
+        writeCSVMetaEntry(SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_NAME, wst.getLabel());
+
+        // "# Bezugspegel: "
+        writeCSVMetaEntry(SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_GAUGE, wst.getGauge());
+
+        // "# Jahr/Zeitraum der Wasserspiegellage: "
+        final int year = wst.getYear();
+        if (year > 0)
+            writeCSVMetaEntry(SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_YEAR, Integer.toString(year));
+    }
+
+    // copy from AbstractExporter TODO merge with ExportContextPDF
+    protected NumberFormat getKmFormatter() {
+
+        if (this.kmFormat == null) {
+            this.kmFormat = Formatter.getWaterlevelKM(this.context);
+        }
+        return this.kmFormat;
+    }
+
+    public void addJRMetadata(final MetaAndTableJRDataSource source, final String key, final String msg) {
+        source.addMetaData(key, msg);
+
+    }
+
+    public NumberFormat getQFormatter() {
+        if (this.qFormat == null) {
+            this.qFormat = Formatter.getWaterlevelQ(this.context);
+        }
+        return this.qFormat;
+    }
+
+    public final NumberFormat getFlowDepthFormatter() {
+        if (this.flowDepthFormat == null)
+            this.flowDepthFormat = Formatter.getFlowDepth(this.context);
+        return this.flowDepthFormat;
+    }
+
+    /**
+     * Formats header with unit: msg [unit]
+     */
+
+    public String msgUnitCSV(final IResultType typeWithUnit) { // TODO: use generic Type!
+        final String unit = msg(typeWithUnit.getUnit());
+        return msgUnitCSV(typeWithUnit, unit);
+    }
+
+    public String msgUnitCSV(final IResultType type, final String unit) {
+        final String msg = msg(type.getCsvHeader());
+        return String.format("%s [%s]", msg, unit);
+    }
+
+    public void writeCSVSoundingMetadata(final BedHeightInfo currentSounding, final String csvMetaHeaderSoundingCurrent) {
+
+    }
+
+    public final String msgUnitLabel(final IResultType typeWithUnit, final String label) {
+        final String msg = msg(typeWithUnit.getCsvHeader());
+        final String unit = msg(typeWithUnit.getUnit());
+        return String.format("%s [%s] (%s)", msg, unit, label);
+    }
+
+    public String msgPdf(final SInfoResultType type) {
+        return type.getPdfHeader(this.context.getMeta());
+
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/ExportContextPDF.java	Thu Jun 14 17:03:53 2018 +0200
@@ -0,0 +1,113 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ *  Björnsen Beratende Ingenieure GmbH
+ *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * This file is Free Software under the GNU AGPL (>=v3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out the
+ * documentation coming with Dive4Elements River for details.
+ */
+package org.dive4elements.river.artifacts.common;
+
+import java.text.DateFormat;
+import java.text.NumberFormat;
+import java.util.Date;
+import java.util.Locale;
+
+import org.apache.commons.lang.math.DoubleRange;
+import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.FLYS;
+import org.dive4elements.river.artifacts.resources.Resources;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+import org.dive4elements.river.utils.Formatter;
+
+/**
+ * @author Domenico Nardi Tironi
+ *
+ */
+public final class ExportContextPDF {
+
+    private NumberFormat kmFormat;
+
+    /** The CallContext object. */
+    private final CallContext context;
+
+    public ExportContextPDF(final CallContext context) {
+        this.context = context;
+
+    }
+
+    private String msg(final String key) {
+        return Resources.getMsg(this.context.getMeta(), key, key);
+    }
+
+    private String msg(final String key, final Object... args) {
+        return Resources.getMsg(this.context.getMeta(), key, key, args);
+    }
+
+    public void addJRMetadata(final MetaAndTableJRDataSource source, final String key, final IResultType type) {
+        source.addMetaData(key, type.getPdfHeader(this.context.getMeta()));
+    }
+
+    // *** CUSTOM STUFF that is used multiple times ***///
+    public void addJRMetaDataDefaults(final MetaAndTableJRDataSource source, final AbstractCalculationResults results) {
+
+        source.addMetaData("header", msg(I18NStrings.CSV_META_HEADER_RESULT_LABEL));
+        source.addMetaData("calcMode", results.getCalcModeLabel());
+
+        source.addMetaData("version_label", msg(I18NStrings.CSV_META_VERSION_LABEL));
+        source.addMetaData("version", FLYS.VERSION);
+
+        source.addMetaData("user_label", msg(I18NStrings.CSV_META_USER_LABEL));
+        source.addMetaData("user", results.getUser());
+
+        final Locale locale = Resources.getLocale(this.context.getMeta());
+        final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
+        source.addMetaData("date_label", msg(I18NStrings.CSV_META_CREATION_LABEL));
+        source.addMetaData("date", df.format(new Date()));
+    }
+
+    public void addJRMetaDataUSINFO(final MetaAndTableJRDataSource source, final AbstractCalculationResults results) {
+
+        /* general metadata */
+        addJRMetaDataDefaults(source, results);
+
+        final RiverInfo river = results.getRiver();
+        final String wstUnitName = river.getWstUnit();
+
+        source.addMetaData("river_label", msg(I18NStrings.CSV_META_RIVER_LABEL));
+        source.addMetaData("river", river.getName());
+        source.addMetaData("river_unit", wstUnitName);
+
+        final DoubleRange calcRange = results.getCalcRange();
+        final NumberFormat kmFormatter = getKmFormatter();
+        final String rangeValue = String.format("%s - %s", kmFormatter.format(calcRange.getMinimumDouble()), kmFormatter.format(calcRange.getMaximumDouble()));
+        source.addMetaData("range_label", msg(I18NStrings.CSV_META_RANGE_LABEL));
+        source.addMetaData("range", rangeValue);
+
+        /* column headings */
+        // source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta()));
+
+        // moved to *result
+        /* column headings */
+        // source.addMetaData("flowdepth_header", SInfoResultType.flowdepth.getPdfHeader(this.context.getMeta()));
+        // source.addMetaData("flowdepth_tkh_header", SInfoResultType.flowdepthtkh.getPdfHeader(this.context.getMeta()));
+        // source.addMetaData("tkh_header", SInfoResultType.tkh.getPdfHeader(this.context.getMeta()));
+        // source.addMetaData("waterlevel_header", SInfoResultType.waterlevel.getPdfHeader(this.context.getMeta()));
+        // source.addMetaData("discharge_header", SInfoResultType.discharge.getPdfHeader(this.context.getMeta()));
+        // source.addMetaData("waterlevel_name_header", SInfoResultType.waterlevelLabel.getPdfHeader(this.context.getMeta()));
+        // source.addMetaData("gauge_header", SInfoResultType.gaugeLabel.getPdfHeader(this.context.getMeta()));
+        // source.addMetaData("bedheight_header", SInfoResultType.meanBedHeight.getPdfHeader(this.context.getMeta()));
+        // source.addMetaData("sounding_name_header", SInfoResultType.soundingLabel.getPdfHeader(this.context.getMeta()));
+        // source.addMetaData("location_header", SInfoResultType.location.getPdfHeader(this.context.getMeta()));
+    }
+
+    // copy from AbstractExporter TODO merge with ExportContextCSV
+    protected NumberFormat getKmFormatter() {
+
+        if (this.kmFormat == null) {
+            this.kmFormat = Formatter.getWaterlevelKM(this.context);
+        }
+        return this.kmFormat;
+    }
+}
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/common/GeneralResultType.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/GeneralResultType.java	Thu Jun 14 17:03:53 2018 +0200
@@ -1,6 +1,6 @@
 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
- * Software engineering by 
- *  Björnsen Beratende Ingenieure GmbH 
+ * Software engineering by
+ *  Björnsen Beratende Ingenieure GmbH
  *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
  *
  * This file is Free Software under the GNU AGPL (>=v3)
@@ -19,8 +19,10 @@
  *
  */
 public abstract class GeneralResultType extends AbstractResultType {
-    
-    public static final GeneralResultType station =   new GeneralResultType(I18NStrings.UNIT_KM, I18NStrings.CSV_KM_HEADER) {
+
+    private static final long serialVersionUID = 1L;
+
+    public static final GeneralResultType station = new GeneralResultType(I18NStrings.UNIT_KM, I18NStrings.CSV_KM_HEADER) {
         @Override
         public String exportValue(final CallContext context, final Object value) {
             final double doubleValue = asDouble(value);
@@ -32,14 +34,13 @@
             return Formatter.getWaterlevelKM(context);
         }
     };
-    
-    
-    private  GeneralResultType(String unit, String csvHeader) {
-        
+
+    private GeneralResultType(final String unit, final String csvHeader) {
+
         super(unit, csvHeader, csvHeader);
     }
-    private GeneralResultType(String unit, String csvHeader, String pdfHeader) {
+
+    private GeneralResultType(final String unit, final String csvHeader, final String pdfHeader) {
         super(unit, csvHeader, pdfHeader);
     }
-
-}
+}
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/common/IResultType.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/IResultType.java	Thu Jun 14 17:03:53 2018 +0200
@@ -12,13 +12,20 @@
 import java.io.Serializable;
 
 import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.artifacts.CallMeta;
 
 /**
  * @author Domenico Nardi Tironi
  */
 public interface IResultType extends Serializable {
 
-    String exportValue(final CallContext context, final Object value);
+    String exportValue(CallContext context, Object value);
 
-    double asDouble(final Object value);
+    double asDouble(Object value);
+
+    String getCsvHeader();
+
+    String getPdfHeader(CallMeta meta);
+
+    String getUnit();
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/common/JasperReporter.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/JasperReporter.java	Thu Jun 14 17:03:53 2018 +0200
@@ -79,9 +79,7 @@
             final JasperPrint print = JasperFillManager.fillReport(compiled, this.parameters, source);
             jasperPrintList.add(print);
         } else {
-
-            int totalpagesoffset = 0;
-            int pagesCount = 0;
+            Integer totalpages = 0;
 
             // erstes Rendern, um Seitenzahl zu ermitteln
             for (final JasperDesigner designer : this.designs) {
@@ -91,16 +89,15 @@
                 final MetaAndTableJRDataSource source = designer.getSource();
                 final JasperPrint print = JasperFillManager.fillReport(compiled, this.parameters, source);
 
-                pagesCount = print.getPages().size();
-                designer.setPagesCount(totalpagesoffset);
+                final Integer pagesCount = print.getPages().size();
+                designer.setPagesCount(totalpages);
 
-                totalpagesoffset += pagesCount;
+                totalpages += pagesCount;
             }
-            totalpagesoffset = totalpagesoffset - pagesCount; // offset darf die letzten Seiten nicht beinhalten!
 
             // Sources mit pages machen
             for (final JasperDesigner designer : this.designs) {
-                final JRDataSource sourceWithPages = designer.getSource().withPagePageOffsets(designer.getPagesCount(), totalpagesoffset);
+                final JRDataSource sourceWithPages = designer.getSource().withPagePageOffsets(designer.getPagesCount(), totalpages);
                 sourcesWithPages.add(sourceWithPages);
             }
 
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/common/MetaAndTableJRDataSource.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/MetaAndTableJRDataSource.java	Thu Jun 14 17:03:53 2018 +0200
@@ -25,7 +25,7 @@
 
     private final List<String[]> data = new ArrayList<>();
 
-    private final Map<String, String> metaData = new HashMap<>();
+    private final Map<String, Object> metaData = new HashMap<>();
 
     private int index = -1;
 
@@ -33,7 +33,7 @@
         this.data.add(row);
     }
 
-    public void addMetaData(final String key, final String value) {
+    public void addMetaData(final String key, final Object value) {
         this.metaData.put(key, value);
     }
 
@@ -60,14 +60,14 @@
         return null;
     }
 
-    public JRDataSource withPagePageOffsets(final int startpageoffset, final int totalpagesoffset) {
+    public JRDataSource withPagePageOffsets(final Integer startpageoffset, final Integer totalpages) {
 
         final MetaAndTableJRDataSource newSource = new MetaAndTableJRDataSource();
         newSource.data.addAll(this.data);
         newSource.metaData.putAll(this.metaData);
 
-        newSource.addMetaData("meta:startpageoffset", "" + startpageoffset);
-        newSource.addMetaData("meta:totalpagesoffset", "" + totalpagesoffset);
+        newSource.addMetaData("startpageoffset", startpageoffset);
+        newSource.addMetaData("totalpages", totalpages);
 
         return newSource;
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalcDetailResult.java	Thu Jun 14 17:03:53 2018 +0200
@@ -0,0 +1,109 @@
+/* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ *  Björnsen Beratende Ingenieure GmbH
+ *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * This file is Free Software under the GNU AGPL (>=v3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out the
+ * documentation coming with Dive4Elements River for details.
+ */
+package org.dive4elements.river.artifacts.sinfo.collision;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.ExportContextCSV;
+import org.dive4elements.river.artifacts.common.GeneralResultType;
+import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
+import org.dive4elements.river.artifacts.common.ResultRow;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+
+/**
+ * Contains the results of a {@link FloodDurationCalculation}.
+ *
+ * @author Gernot Belger
+ */
+final class CollisionCalcDetailResult extends AbstractCalculationExportableResult<CollisionCalculationResults> {
+
+    private static final long serialVersionUID = 1L;
+    private static final String JASPER_FILE = "/jasper/templates/sinfo.collision.detail.jrxml";
+
+    public CollisionCalcDetailResult(final String label, final Collection<ResultRow> rows) {
+        super(label, rows);
+    }
+
+    @Override
+    protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final CollisionCalculationResults results) {
+        // TODO Auto-generated method stub
+        // final WstInfo wst = result.getWst();
+        // exportContext.writeCSVWaterlevelMetadata(writer, wst);
+        // if hasMetadata...
+        exportContextCSV.writeBlankLine();
+    }
+
+    @Override
+    public void writeCSVHeader(final ExportContextCSV exportContextCSV, final CollisionCalculationResults results, final RiverInfo river) {
+
+        // FIXME wrong columns:
+        final Collection<String> header = new ArrayList<>(99);
+
+        header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station));
+        //
+        // header.add(exportContext.formatCsvHeader(SInfoResultType.riverside));
+        // header.add(exportContext.formatCsvHeader(SInfoResultType.inundationduration));
+        // header.add(exportContext.formatCsvHeader(SInfoResultType.inundationdurationq));
+        // header.add(exportContext.formatCsvHeader(SInfoResultType.infrastructureHeight));
+        // header.add(exportContext.formatCsvHeader(SInfoResultType.infrastructuretype));
+        // header.add(exportContext.formatCsvHeader(SInfoResultType.gaugeLabel));
+        // header.add(exportContext.formatCsvHeader(SInfoResultType.location));
+
+        exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
+    }
+
+    @Override
+    protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final CollisionCalculationResults results, final ResultRow row) {
+        return formatRow(exportContextCSV, results, row);
+    }
+
+    @Override
+    protected String[] formatPDFRow(final ExportContextCSV exportContextCSV, final CollisionCalculationResults results, final ResultRow row) {
+        return formatRow(exportContextCSV, results, row);
+    }
+
+    private String[] formatRow(final ExportContextCSV exportContextCSV, final CollisionCalculationResults results, final ResultRow row) {
+
+        final Collection<String> lines = new ArrayList<>(11);
+
+        // FIXME wrong columns:
+        lines.add(exportContextCSV.formatRowValue(row, GeneralResultType.station));
+        // lines.add(exportContext.formatRowValue(row, SInfoResultType.tkh));
+        // lines.add(exportContext.formatRowValue(row, SInfoResultType.soilkind));
+        // lines.add(exportContext.formatRowValue(row, SInfoResultType.meanBedHeight));
+        // lines.add(exportContext.formatRowValue(row, SInfoResultType.waterlevel));
+        // lines.add(exportContext.formatRowValue(row, SInfoResultType.discharge));
+        // lines.add(exportContext.formatRowValue(row, SInfoResultType.gaugeLabel));
+        // lines.add(exportContext.formatRowValue(row, SInfoResultType.location));
+
+        return lines.toArray(new String[lines.size()]);
+    }
+
+    @Override
+    protected String getJasperFile() {
+        return JASPER_FILE;
+    }
+
+    @Override
+    protected void addJRTableHeader(final ExportContextCSV exportContextCSV, final MetaAndTableJRDataSource source, final CollisionCalculationResults results) {
+
+        /* column headings */
+        // FIXME wrong columns:
+        exportContextCSV.addJRMetadata(source, "station_header", GeneralResultType.station);
+        // exportContext.addJRMetadata(source, "station_header", GeneralResultType.station);
+        // exportContext.addJRMetadata(source, "tkh_header", SInfoResultType.tkh);
+        // exportContext.addJRMetadata(source, "tkhkind_header", SInfoResultType.soilkind);
+        // exportContext.addJRMetadata(source, "bedheight_header", SInfoResultType.meanBedHeight);
+        // exportContext.addJRMetadata(source, "waterlevel_header", SInfoResultType.waterlevel);
+        // exportContext.addJRMetadata(source, "discharge_header", SInfoResultType.discharge);
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalcOverviewResult.java	Thu Jun 14 17:03:53 2018 +0200
@@ -0,0 +1,108 @@
+/* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ *  Björnsen Beratende Ingenieure GmbH
+ *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * This file is Free Software under the GNU AGPL (>=v3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out the
+ * documentation coming with Dive4Elements River for details.
+ */
+package org.dive4elements.river.artifacts.sinfo.collision;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.ExportContextCSV;
+import org.dive4elements.river.artifacts.common.GeneralResultType;
+import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
+import org.dive4elements.river.artifacts.common.ResultRow;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+
+/**
+ * Contains the results of a {@link FloodDurationCalculation}.
+ *
+ * @author Gernot Belger
+ */
+final class CollisionCalcOverviewResult extends AbstractCalculationExportableResult<CollisionCalculationResults> {
+
+    private static final long serialVersionUID = 1L;
+
+    private static final String JASPER_FILE = "/jasper/templates/sinfo.collision.overview.jrxml";
+
+    public CollisionCalcOverviewResult(final String label, final Collection<ResultRow> rows) {
+        super(label, rows);
+    }
+
+    @Override
+    protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final CollisionCalculationResults results) {
+        // TODO Auto-generated method stub
+        // final WstInfo wst = result.getWst();
+        // exportContext.writeCSVWaterlevelMetadata(writer, wst);
+    }
+
+    @Override
+    public void writeCSVHeader(final ExportContextCSV exportContextCSV, final CollisionCalculationResults results, final RiverInfo river) {
+
+        // FIXME wrong columns:
+        final Collection<String> header = new ArrayList<>(99);
+
+        header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station));
+        //
+        // header.add(exportContext.formatCsvHeader(SInfoResultType.riverside));
+        // header.add(exportContext.formatCsvHeader(SInfoResultType.inundationduration));
+        // header.add(exportContext.formatCsvHeader(SInfoResultType.inundationdurationq));
+        // header.add(exportContext.formatCsvHeader(SInfoResultType.infrastructureHeight));
+        // header.add(exportContext.formatCsvHeader(SInfoResultType.infrastructuretype));
+        // header.add(exportContext.formatCsvHeader(SInfoResultType.gaugeLabel));
+        // header.add(exportContext.formatCsvHeader(SInfoResultType.location));
+
+        exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
+    }
+
+    @Override
+    protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final CollisionCalculationResults results, final ResultRow row) {
+        return formatRow(exportContextCSV, results, row);
+    }
+
+    @Override
+    protected String[] formatPDFRow(final ExportContextCSV exportContextCSV, final CollisionCalculationResults results, final ResultRow row) {
+        return formatRow(exportContextCSV, results, row);
+    }
+
+    private String[] formatRow(final ExportContextCSV exportContextCSV, final CollisionCalculationResults results, final ResultRow row) {
+
+        final Collection<String> lines = new ArrayList<>(11);
+
+        // FIXME wrong columns:
+        lines.add(exportContextCSV.formatRowValue(row, GeneralResultType.station));
+        // lines.add(exportContext.formatRowValue(row, SInfoResultType.tkh));
+        // lines.add(exportContext.formatRowValue(row, SInfoResultType.soilkind));
+        // lines.add(exportContext.formatRowValue(row, SInfoResultType.meanBedHeight));
+        // lines.add(exportContext.formatRowValue(row, SInfoResultType.waterlevel));
+        // lines.add(exportContext.formatRowValue(row, SInfoResultType.discharge));
+        // lines.add(exportContext.formatRowValue(row, SInfoResultType.gaugeLabel));
+        // lines.add(exportContext.formatRowValue(row, SInfoResultType.location));
+
+        return lines.toArray(new String[lines.size()]);
+    }
+
+    @Override
+    protected String getJasperFile() {
+        return JASPER_FILE;
+    }
+
+    @Override
+    protected void addJRTableHeader(final ExportContextCSV exportContextCSV, final MetaAndTableJRDataSource source, final CollisionCalculationResults results) {
+
+        /* column headings */
+        // FIXME wrong columns:
+        exportContextCSV.addJRMetadata(source, "station_header", GeneralResultType.station);
+        // exportContext.addJRMetadata(source, "station_header", GeneralResultType.station);
+        // exportContext.addJRMetadata(source, "tkh_header", SInfoResultType.tkh);
+        // exportContext.addJRMetadata(source, "tkhkind_header", SInfoResultType.soilkind);
+        // exportContext.addJRMetadata(source, "bedheight_header", SInfoResultType.meanBedHeight);
+        // exportContext.addJRMetadata(source, "waterlevel_header", SInfoResultType.waterlevel);
+        // exportContext.addJRMetadata(source, "discharge_header", SInfoResultType.discharge);
+    }
+}
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalculation.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalculation.java	Thu Jun 14 17:03:53 2018 +0200
@@ -9,8 +9,13 @@
  */
 package org.dive4elements.river.artifacts.sinfo.collision;
 
+import java.util.ArrayList;
+import java.util.Collection;
+
 import org.apache.commons.lang.math.DoubleRange;
 import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.common.GeneralResultType;
+import org.dive4elements.river.artifacts.common.ResultRow;
 import org.dive4elements.river.artifacts.model.Calculation;
 import org.dive4elements.river.artifacts.model.CalculationResult;
 import org.dive4elements.river.artifacts.resources.Resources;
@@ -51,7 +56,29 @@
         final int[] years = access.getYears();
         final int[][] epochs = access.getEpochs();
 
-        return null; // new CalculationResult(results, problems);
+        final Collection<ResultRow> overViewRows = new ArrayList<>();
+        final Collection<ResultRow> detailsRows = new ArrayList<>();
+
+        // TODO: calculate
+
+        final CollisionCalculationResults results = new CollisionCalculationResults(calcModeLabel, user, riverInfo, calcRange);
+
+        final ResultRow row = ResultRow.create().putValue(GeneralResultType.station, 8888.888);
+        final ResultRow row2 = ResultRow.create().putValue(GeneralResultType.station, 777.888);
+
+        for (int i = 0; i < 300; i++) {
+            overViewRows.add(row);
+            overViewRows.add(row2);
+        }
+        final CollisionCalcOverviewResult overviewResult = new CollisionCalcOverviewResult("Overview", overViewRows); // TODO: get Title-Strings from messages
+        results.addResult(overviewResult, problems);
+        for (int i = 0; i < 200; i++) {
+            detailsRows.add(row);
+            detailsRows.add(row2);
+        }
+        final CollisionCalcDetailResult detailResult = new CollisionCalcDetailResult("Details", detailsRows);
+        results.addResult(detailResult, problems);
+
+        return new CalculationResult(results, problems);
     }
-
 }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalculationResults.java	Thu Jun 14 17:03:53 2018 +0200
@@ -0,0 +1,28 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ *  Björnsen Beratende Ingenieure GmbH
+ *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * This file is Free Software under the GNU AGPL (>=v3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out the
+ * documentation coming with Dive4Elements River for details.
+ */
+package org.dive4elements.river.artifacts.sinfo.collision;
+
+import org.apache.commons.lang.math.DoubleRange;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationListResults;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+
+/**
+ * @author Gernot Belger
+ */
+final class CollisionCalculationResults extends AbstractCalculationListResults<AbstractCalculationExportableResult<CollisionCalculationResults>> {
+
+    private static final long serialVersionUID = 1L;
+
+    public CollisionCalculationResults(final String calcModeLabel, final String user, final RiverInfo river, final DoubleRange calcRange) {
+        super(calcModeLabel, user, river, calcRange);
+
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionExporter.java	Thu Jun 14 17:03:53 2018 +0200
@@ -0,0 +1,82 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ *  Björnsen Beratende Ingenieure GmbH
+ *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * This file is Free Software under the GNU AGPL (>=v3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out the
+ * documentation coming with Dive4Elements River for details.
+ */
+package org.dive4elements.river.artifacts.sinfo.collision;
+
+import java.io.OutputStream;
+
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCommonExporter;
+import org.dive4elements.river.artifacts.common.ExportContextCSV;
+import org.dive4elements.river.artifacts.common.JasperReporter;
+import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+
+import au.com.bytecode.opencsv.CSVWriter;
+import net.sf.jasperreports.engine.JRException;
+
+/**
+ * @author Gernot Belger
+ */
+public final class CollisionExporter extends AbstractCommonExporter<CollisionCalculationResults> {
+
+    @Override
+    protected void doWriteCSVData(final CSVWriter writer, final CollisionCalculationResults results) {
+        // TODO: Diesen Ablauf in super?
+
+        // TODO: move results into context?
+        final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer);
+
+        getLog().info("writeCSVData");
+
+        /* write as csv */
+        exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse
+
+        // writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+
+        final RiverInfo river = results.getRiver();
+
+        final Class<?> lastResultType = null;
+
+        for (final AbstractCalculationExportableResult<CollisionCalculationResults> result : results.getResults()) {
+
+            final Class<?> resultType = result.getClass();
+            if (lastResultType == null || lastResultType != resultType) {
+                exportContextCSV.writeBlankLine();
+                result.writeCSVHeader(exportContextCSV, results, river);
+                exportContextCSV.writeBlankLine();
+            } else
+                exportContextCSV.writeCSVLine(new String[] { "#" });
+
+            result.writeCsv(exportContextCSV, results);
+        }
+    }
+
+    @Override
+    protected void doWritePdf(final OutputStream out, final CollisionCalculationResults results) {
+        // TODO: Move to super
+        try {
+            final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null);
+
+            final JasperReporter reporter = new JasperReporter();
+
+            for (final AbstractCalculationExportableResult<CollisionCalculationResults> result : results.getResults()) {
+                final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+                getHelper().addJRMetaDataUSINFO(source, results);
+
+                result.addReport(exportContextCSV, results, reporter, source);
+            }
+
+            reporter.exportPDF(out);
+        }
+        catch (final JRException je) {
+            getLog().warn("Error generating PDF Report!", je);
+        }
+    }
+}
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionState.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionState.java	Thu Jun 14 17:03:53 2018 +0200
@@ -14,8 +14,11 @@
 import org.dive4elements.artifacts.CallContext;
 import org.dive4elements.river.artifacts.ChartArtifact;
 import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
 import org.dive4elements.river.artifacts.model.CalculationResult;
+import org.dive4elements.river.artifacts.model.DataFacet;
 import org.dive4elements.river.artifacts.model.EmptyFacet;
+import org.dive4elements.river.artifacts.model.FacetTypes;
 import org.dive4elements.river.artifacts.sinfo.SINFOArtifact;
 import org.dive4elements.river.artifacts.states.DefaultState;
 
@@ -67,13 +70,14 @@
         if (facets == null)
             return res;
         //
-        // final FlowDepthCalculationResults results = (FlowDepthCalculationResults) res.getData();
+        final CollisionCalculationResults results = (CollisionCalculationResults) res.getData();
         //
         // /* add themes for chart, for each result */
-        // final List<FlowDepthCalculationResult> resultList = results.getResults();
+        // final List<CollisionCalcOverviewResult> resultList = results.getResults();
         // for (int index = 0; index < resultList.size(); index++) {
         //
-        // final FlowDepthCalculationResult result = resultList.get(index);
+        final AbstractCalculationExportableResult<CollisionCalculationResults> result = results.getResults().get(0);
+
         //
         // /* filtered (zoom dependent mean) flow depth */
         // facets.add(FlowDepthProcessor.createFlowDepthFilteredFacet(context, hash, this.id, result, index));
@@ -88,13 +92,13 @@
         // }
         // }
 
-        // if (!resultList.isEmpty()) {
-        // final Facet csv = new DataFacet(FacetTypes.CSV, "CSV data", ComputeType.ADVANCE, hash, this.id);
-        // final Facet pdf = new DataFacet(FacetTypes.PDF, "PDF data", ComputeType.ADVANCE, hash, this.id);
-        //
-        // facets.add(csv);
-        // facets.add(pdf);
-        // }
+        if (!result.isEmpty()) {
+            final Facet csv = new DataFacet(FacetTypes.CSV, "CSV data", ComputeType.ADVANCE, hash, this.id);
+            final Facet pdf = new DataFacet(FacetTypes.PDF, "PDF data", ComputeType.ADVANCE, hash, this.id);
+
+            facets.add(csv);
+            facets.add(pdf);
+        }
         //
         // final Calculation report = res.getReport();
         //
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoCalculationResults.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoCalculationResults.java	Thu Jun 14 17:03:53 2018 +0200
@@ -12,14 +12,14 @@
 
 
 import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.artifacts.common.AbstractCalculationResults;
+import org.dive4elements.river.artifacts.common.AbstractCalculationListResults;
 
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 
 /**
  * @author Gernot Belger
  */
-public abstract class AbstractSInfoCalculationResults<RESULT extends AbstractSInfoCalculationResult> extends AbstractCalculationResults<RESULT>  {
+public abstract class AbstractSInfoCalculationResults<RESULT extends AbstractSInfoCalculationResult> extends AbstractCalculationListResults<RESULT>  {
 
     private static final long serialVersionUID = 1L; 
  
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoExporter.java	Thu Jun 14 16:58:35 2018 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,180 +0,0 @@
-/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
- * Software engineering by
- *  Björnsen Beratende Ingenieure GmbH
- *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
- *
- * This file is Free Software under the GNU AGPL (>=v3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out the
- * documentation coming with Dive4Elements River for details.
- */
-package org.dive4elements.river.artifacts.sinfo.common;
-
-import java.text.DateFormat;
-import java.text.NumberFormat;
-import java.util.Date;
-import java.util.Locale;
-
-import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.FLYS;
-import org.dive4elements.river.artifacts.common.AbstractCommonExporter;
-import org.dive4elements.river.artifacts.common.GeneralResultType;
-import org.dive4elements.river.artifacts.common.I18NStrings;
-import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
-import org.dive4elements.river.artifacts.resources.Resources;
-import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo;
-import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
-
-import au.com.bytecode.opencsv.CSVWriter;
-
-/**
- * @author Gernot Belger
- */
-public abstract class AbstractSInfoExporter<RESULT extends AbstractSInfoCalculationResult, RESULTS extends AbstractSInfoCalculationResults<RESULT>> extends AbstractCommonExporter<RESULT, RESULTS> {
-
-    private static final String CSV_META_HEADER_SOUNDING = "sinfo.export.flow_depth.csv.meta.header.sounding";
-
-    private static final String CSV_META_HEADER_SOUNDING_YEAR = "sinfo.export.flow_depth.csv.meta.header.sounding.year";
-
-    private static final String CSV_META_HEADER_SOUNDING_TYPE = "sinfo.export.flow_depth.csv.meta.header.sounding.type";
-
-    private static final String CSV_META_HEADER_SOUNDING_PRJ = "sinfo.export.flow_depth.csv.meta.header.sounding.prj";
-
-    private static final String CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL = "sinfo.export.flow_depth.csv.meta.header.sounding.elevationmodel";
-
-    private static final String CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL_ORIGINAL = "sinfo.export.flow_depth.csv.meta.header.sounding.elevationmodel.original";
-
-    protected final void writeCSVSoundingMetadata(final CSVWriter writer, final BedHeightInfo sounding) {
-        writeCSVSoundingMetadata(writer, sounding, CSV_META_HEADER_SOUNDING);
-    }
-
-    protected final void writeCSVSoundingMetadata(final CSVWriter writer, final BedHeightInfo sounding, final String mainLabel) {
-        // "##METADATEN PEILUNG"
-        writeCSVMetaEntry(writer, mainLabel);
-
-        // "# Jahr der Peilung: "
-        writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_YEAR, Integer.toString(sounding.getYear()));
-        // "# Aufnahmeart: "
-        writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_TYPE, sounding.getType());
-        // "# Auswerter: "
-        writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEADER_EVALUATOR, sounding.getEvaluationBy());
-        // "# Lagesystem: "
-        writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_PRJ, sounding.getLocationSystem());
-        // "# Höhensystem: "
-        writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL, sounding.getCurElevationModelUnit());
-        // "# ursprüngliches Höhensystem: "
-        writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL_ORIGINAL, sounding.getOldElevationModelUnit());
-    }
-
-    protected final void writeCSVWaterlevelMetadata(final CSVWriter writer, final WstInfo wst) {
-        writeCSVWaterlevelMetadata(writer, wst, SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL);
-    }
-
-    protected final void writeCSVWaterlevelMetadata(final CSVWriter writer, final WstInfo wst, final String mainLabel) {
-        // "##METADATEN WASSERSPIEGELLAGE"
-        writeCSVMetaEntry(writer, mainLabel);
-
-        // "# Bezeichnung der Wasserspiegellage: "
-        writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_NAME, wst.getLabel());
-
-        // "# Bezugspegel: "
-        writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_GAUGE, wst.getGauge());
-
-        // "# Jahr/Zeitraum der Wasserspiegellage: "
-        final int year = wst.getYear();
-        if (year > 0)
-            writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_YEAR, Integer.toString(year));
-    }
-
-    @Override
-    protected void writeCSVGlobalMetadataDefaults(final CSVWriter writer, final RESULTS results) {
-
-        final String calcModeLabel = results.getCalcModeLabel();
-        final RiverInfo river = results.getRiver();
-        final DoubleRange calcRange = results.getCalcRange();
-
-        writeCSVMetaEntry(writer, I18NStrings.CSV_META_HEADER_RESULT, msg(I18NStrings.CSV_META_HEADER_RESULT_LABEL), river.getName(), calcModeLabel);
-
-        // "# FLYS-Version: "
-        writeCSVMetaEntry(writer, I18NStrings.CSV_META_VERSION, msg(I18NStrings.CSV_META_VERSION_LABEL), FLYS.VERSION);
-
-        // "# Bearbeiter: "
-        writeCSVMetaEntry(writer, I18NStrings.CSV_META_USER, msg(I18NStrings.CSV_META_USER_LABEL), results.getUser());
-
-        // "# Datum der Erstellung: "
-        final Locale locale = Resources.getLocale(this.context.getMeta());
-        final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
-        writeCSVMetaEntry(writer, I18NStrings.CSV_META_CREATION, msg(I18NStrings.CSV_META_CREATION_LABEL), df.format(new Date()));
-
-        // "# Gewässer: "
-        writeCSVMetaEntry(writer, I18NStrings.CSV_META_RIVER, msg(I18NStrings.CSV_META_RIVER_LABEL), river.getName());
-
-        // "# Höhensystem des Flusses: "
-        writeCSVMetaEntry(writer, I18NStrings.CSV_META_HEIGHT_UNIT_RIVER, river.getWstUnit());
-
-        if (calcRange != null) {
-            // "# Ort/Bereich (km): "
-            writeCSVMetaEntry(writer, I18NStrings.CSV_META_RANGE, msg(I18NStrings.CSV_META_RANGE_LABEL), getKmFormatter().format(calcRange.getMinimumDouble()),
-                    getKmFormatter().format(calcRange.getMaximumDouble()));
-        }
-    }
-
-    @Override
-    protected void addJRMetaData(final MetaAndTableJRDataSource source, final RESULTS results) {
-
-        /* general metadata */
-        this.addJRMetaDataDefaults(source, results);
-
-        final RiverInfo river = results.getRiver();
-        final String wstUnitName = river.getWstUnit();
-
-        source.addMetaData("river_label", msg(I18NStrings.CSV_META_RIVER_LABEL));
-        source.addMetaData("river", river.getName());
-        source.addMetaData("river_unit", wstUnitName);
-
-        final DoubleRange calcRange = results.getCalcRange();
-        final NumberFormat kmFormatter = getKmFormatter();
-        final String rangeValue = String.format("%s - %s", kmFormatter.format(calcRange.getMinimumDouble()), kmFormatter.format(calcRange.getMaximumDouble()));
-        source.addMetaData("range_label", msg(I18NStrings.CSV_META_RANGE_LABEL));
-        source.addMetaData("range", rangeValue);
-
-        /* column headings */
-        // source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta())); // moved to
-        // super
-
-        // TODO: move to subs
-        /* column headings */
-        source.addMetaData("flowdepth_header", SInfoResultType.flowdepth.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("flowdepth_tkh_header", SInfoResultType.flowdepthtkh.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("tkh_header", SInfoResultType.tkh.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("waterlevel_header", SInfoResultType.waterlevel.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("discharge_header", SInfoResultType.discharge.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("waterlevel_name_header", SInfoResultType.waterlevelLabel.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("gauge_header", SInfoResultType.gaugeLabel.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("bedheight_header", SInfoResultType.meanBedHeight.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("sounding_name_header", SInfoResultType.soundingLabel.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("location_header", SInfoResultType.location.getPdfHeader(this.context.getMeta()));
-    }
-
-    @Override
-    protected void addJRMetaDataDefaults(final MetaAndTableJRDataSource source, final RESULTS results) {
-
-        source.addMetaData("header", msg(I18NStrings.CSV_META_HEADER_RESULT_LABEL));
-        source.addMetaData("calcMode", results.getCalcModeLabel());
-
-        source.addMetaData("version_label", msg(I18NStrings.CSV_META_VERSION_LABEL));
-        source.addMetaData("version", FLYS.VERSION);
-
-        source.addMetaData("user_label", msg(I18NStrings.CSV_META_USER_LABEL));
-        source.addMetaData("user", results.getUser());
-
-        final Locale locale = Resources.getLocale(this.context.getMeta());
-        final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
-        source.addMetaData("date_label", msg(I18NStrings.CSV_META_CREATION_LABEL));
-        source.addMetaData("date", df.format(new Date()));
-
-        /* column headings */
-        source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta()));
-    }
-
-}
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoLineProcessor.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoLineProcessor.java	Thu Jun 14 17:03:53 2018 +0200
@@ -19,6 +19,7 @@
 import org.dive4elements.artifacts.CallContext;
 import org.dive4elements.river.artifacts.D4EArtifact;
 import org.dive4elements.river.artifacts.access.RiverAccess;
+import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
 import org.dive4elements.river.artifacts.context.RiverContext;
 import org.dive4elements.river.artifacts.math.MovingAverage;
 import org.dive4elements.river.artifacts.model.ZoomScale;
@@ -29,7 +30,7 @@
 import org.dive4elements.river.jfree.StyledXYSeries;
 import org.dive4elements.river.themes.ThemeDocument;
 
-abstract class AbstractSInfoLineProcessor<RESULT extends AbstractSInfoCalculationResult> extends AbstractSInfoProcessor {
+abstract class AbstractSInfoLineProcessor<RESULT extends AbstractCalculationResult> extends AbstractSInfoProcessor {
 
     private static final double GAP_DISTANCE = 0.101;
 
@@ -101,7 +102,7 @@
         return MovingAverage.weighted(points, radius);
     }
 
-    protected static final Facet createFacet(final CallContext context, final String hash, final String id, final AbstractSInfoCalculationResult result,
+    protected static final Facet createFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
             final int index, final String axisLabel, final String facetId, final String description) {
         final String facetFlowDepthFilteredDescription = Resources.getMsg(context.getMeta(), description, description, result.getLabel());
         return new SInfoResultFacet(index, facetId, facetFlowDepthFilteredDescription, axisLabel, ComputeType.ADVANCE, id, hash);
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/D50Processor.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/D50Processor.java	Thu Jun 14 17:03:53 2018 +0200
@@ -15,6 +15,7 @@
 
 import org.dive4elements.artifactdatabase.state.Facet;
 import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
 
 public final class D50Processor extends AbstractSInfoLineProcessor<AbstractTkhCalculationResult> {
 
@@ -46,8 +47,7 @@
         throw new UnsupportedOperationException(error);
     }
 
-    public static Facet createD50Facet(final CallContext context, final String hash, final String id, final AbstractSInfoCalculationResult result,
-            final int index) {
+    public static Facet createD50Facet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result, final int index) {
         return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_D50_YAXIS_LABEL, FACET_TKH_D50_FILTERED,
                 I18N_FACET_TKH_D50_FILTERED_DESCRIPTION);
     }
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/FlowDepthDevelopmentPerYearProcessor.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/FlowDepthDevelopmentPerYearProcessor.java	Thu Jun 14 17:03:53 2018 +0200
@@ -15,8 +15,9 @@
 
 import org.dive4elements.artifactdatabase.state.Facet;
 import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
 
-public final class FlowDepthDevelopmentPerYearProcessor extends AbstractSInfoLineProcessor<AbstractSInfoCalculationResult> {
+public final class FlowDepthDevelopmentPerYearProcessor extends AbstractSInfoLineProcessor<AbstractCalculationResult> {
 
     private static final String I18N_AXIS_LABEL = "sinfo.chart.flow_depth_development_per_year.section.yaxis.label";
 
@@ -47,7 +48,7 @@
     }
 
     @Override
-    protected double[][] doGetPoints(final AbstractSInfoCalculationResult data, final String facetName) {
+    protected double[][] doGetPoints(final AbstractCalculationResult data, final String facetName) {
 
         if (FACET_FLOW_DEPTH_DEVELOPMENT_PER_YEAR_FILTERED.contentEquals(facetName))
             return data.getStationPoints(SInfoResultType.flowdepthDevelopmentPerYear);
@@ -59,13 +60,13 @@
     }
 
     public static Facet createFlowDepthDevelopmentFilteredFacet(final CallContext context, final String hash, final String id,
-            final AbstractSInfoCalculationResult result, final int index) {
+            final AbstractCalculationResult result, final int index) {
         return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_DEVELOPMENT_PER_YEAR_YAXIS_LABEL,
                 FACET_FLOW_DEPTH_DEVELOPMENT_PER_YEAR_FILTERED, FACET_FLOW_DEPTH_DEVELOPMENT_PER_YEAR_FILTERED_DESCRIPTION);
     }
 
     public static Facet createFlowDepthDevelopmentRawFacet(final CallContext context, final String hash, final String id,
-            final AbstractSInfoCalculationResult result, final int index) {
+            final AbstractCalculationResult result, final int index) {
         return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_DEVELOPMENT_PER_YEAR_YAXIS_LABEL,
                 FACET_FLOW_DEPTH_DEVELOPMENT_PER_YEAR_RAW, FACET_FLOW_DEPTH_DEVELOPMENT_PER_YEAR_RAW_DESCRIPTION);
     }
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/FlowDepthDevelopmentProcessor.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/FlowDepthDevelopmentProcessor.java	Thu Jun 14 17:03:53 2018 +0200
@@ -15,10 +15,11 @@
 
 import org.dive4elements.artifactdatabase.state.Facet;
 import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
 import org.dive4elements.river.artifacts.resources.Resources;
 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
 
-public final class FlowDepthDevelopmentProcessor extends AbstractSInfoLineProcessor<AbstractSInfoCalculationResult> {
+public final class FlowDepthDevelopmentProcessor extends AbstractSInfoLineProcessor<AbstractCalculationResult> {
 
     private static final String I18N_AXIS_LABEL = "sinfo.chart.flow_depth_development.section.yaxis.label";
 
@@ -57,7 +58,7 @@
     }
 
     @Override
-    protected double[][] doGetPoints(final AbstractSInfoCalculationResult data, final String facetName) {
+    protected double[][] doGetPoints(final AbstractCalculationResult data, final String facetName) {
 
         if (FACET_FLOW_DEPTH_DEVELOPMENT_FILTERED.contentEquals(facetName))
             return data.getStationPoints(SInfoResultType.flowdepthDevelopment);
@@ -75,27 +76,27 @@
     }
 
     public static Facet createFlowDepthDevelopmentFilteredFacet(final CallContext context, final String hash, final String id,
-            final AbstractSInfoCalculationResult result, final int index) {
+            final AbstractCalculationResult result, final int index) {
         return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_DEVELOPMENT_YAXIS_LABEL,
                 FACET_FLOW_DEPTH_DEVELOPMENT_FILTERED, FACET_FLOW_DEPTH_DEVELOPMENT_FILTERED_DESCRIPTION);
     }
 
     public static Facet createFlowDepthDevelopmentRawFacet(final CallContext context, final String hash, final String id,
-            final AbstractSInfoCalculationResult result, final int index) {
+            final AbstractCalculationResult result, final int index) {
         return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_DEVELOPMENT_YAXIS_LABEL,
                 FACET_FLOW_DEPTH_DEVELOPMENT_RAW, FACET_FLOW_DEPTH_DEVELOPMENT_RAW_DESCRIPTION);
     }
 
-    public static Facet createWaterlevelDifferenceFacet(final CallContext context, final String hash, final String id,
-            final AbstractSInfoCalculationResult result, final int index) {
+    public static Facet createWaterlevelDifferenceFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
+            final int index) {
         final String facetFlowDepthTkhFilteredDescription = Resources.getMsg(context.getMeta(), FACET_WATERLEVEL_DIFFERENCE_FILTERED_DESCRIPTION,
                 FACET_WATERLEVEL_DIFFERENCE_FILTERED_DESCRIPTION, result.getLabel());
         return new SInfoResultFacet(index, FACET_WATERLEVEL_DIFFERENCE_FILTERED, facetFlowDepthTkhFilteredDescription,
                 SINFO_CHART_FLOW_DEPTH_DEVELOPMENT_YAXIS_LABEL, ComputeType.ADVANCE, id, hash);
     }
 
-    public static Facet createBedHeightDifferenceFacet(final CallContext context, final String hash, final String id,
-            final AbstractSInfoCalculationResult result, final int index) {
+    public static Facet createBedHeightDifferenceFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
+            final int index) {
 
         final String facetFlowDepthFilteredDescription = Resources.getMsg(context.getMeta(), FACET_BEDHEIGHT_DIFFERENCE_FILTERED_DESCRIPTION,
                 FACET_BEDHEIGHT_DIFFERENCE_FILTERED_DESCRIPTION, result.getLabel());
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/FlowDepthProcessor.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/FlowDepthProcessor.java	Thu Jun 14 17:03:53 2018 +0200
@@ -15,8 +15,9 @@
 
 import org.dive4elements.artifactdatabase.state.Facet;
 import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
 
-public final class FlowDepthProcessor extends AbstractSInfoLineProcessor<AbstractSInfoCalculationResult> {
+public final class FlowDepthProcessor extends AbstractSInfoLineProcessor<AbstractCalculationResult> {
 
     private static final String AXIS_LABEL = "sinfo.chart.flow_depth.section.yaxis.label";
 
@@ -102,7 +103,7 @@
     }
 
     @Override
-    protected double[][] doGetPoints(final AbstractSInfoCalculationResult data, final String facetName) {
+    protected double[][] doGetPoints(final AbstractCalculationResult data, final String facetName) {
 
         if (FACET_FLOW_DEPTH_FILTERED.contentEquals(facetName))
             return data.getStationPoints(SInfoResultType.flowdepth);
@@ -138,74 +139,74 @@
         throw new UnsupportedOperationException(error);
     }
 
-    public static Facet createFlowDepthFilteredFacet(final CallContext context, final String hash, final String id, final AbstractSInfoCalculationResult result,
+    public static Facet createFlowDepthFilteredFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
             final int index) {
         return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_FILTERED,
                 FACET_FLOW_DEPTH_FILTERED_DESCRIPTION);
     }
 
-    public static Facet createFlowDepthRawFacet(final CallContext context, final String hash, final String id, final AbstractSInfoCalculationResult result,
+    public static Facet createFlowDepthRawFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
             final int index) {
         return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_RAW,
                 FACET_FLOW_DEPTH_RAW_DESCRIPTION);
     }
 
-    public static Facet createFlowDepthTkhFilteredFacet(final CallContext context, final String hash, final String id,
-            final AbstractSInfoCalculationResult result, final int index) {
+    public static Facet createFlowDepthTkhFilteredFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
+            final int index) {
         return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_TKH_FILTERED,
                 FACET_FLOW_DEPTH_TKH_FILTERED_DESCRIPTION);
     }
 
-    public static Facet createFlowDepthTkhRawFacet(final CallContext context, final String hash, final String id, final AbstractSInfoCalculationResult result,
+    public static Facet createFlowDepthTkhRawFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
             final int index) {
         return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_TKH_RAW,
                 FACET_FLOW_DEPTH_TKH_RAW_DESCRIPTION);
     }
 
-    public static Facet createFlowDepthMinFilteredFacet(final CallContext context, final String hash, final String id,
-            final AbstractSInfoCalculationResult result, final int index) {
+    public static Facet createFlowDepthMinFilteredFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
+            final int index) {
         return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_MIN_FILTERED,
                 FACET_FLOW_DEPTH_MIN_FILTERED_DESCRIPTION);
     }
 
-    public static Facet createFlowDepthMinRawFacet(final CallContext context, final String hash, final String id, final AbstractSInfoCalculationResult result,
+    public static Facet createFlowDepthMinRawFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
             final int index) {
         return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_MIN_RAW,
                 FACET_FLOW_DEPTH_MIN_RAW_DESCRIPTION);
     }
 
-    public static Facet createFlowDepthMaxFilteredFacet(final CallContext context, final String hash, final String id,
-            final AbstractSInfoCalculationResult result, final int index) {
+    public static Facet createFlowDepthMaxFilteredFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
+            final int index) {
         return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_MAX_FILTERED,
                 FACET_FLOW_DEPTH_MAX_FILTERED_DESCRIPTION);
     }
 
-    public static Facet createFlowDepthMaxRawFacet(final CallContext context, final String hash, final String id, final AbstractSInfoCalculationResult result,
+    public static Facet createFlowDepthMaxRawFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
             final int index) {
         return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_MAX_RAW,
                 FACET_FLOW_DEPTH_MAX_RAW_DESCRIPTION);
     }
 
     public static Facet createFlowDepthCurrentFilteredFacet(final CallContext context, final String hash, final String id,
-            final AbstractSInfoCalculationResult result, final int index) {
+            final AbstractCalculationResult result, final int index) {
         return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_CURRENT_FILTERED,
                 FACET_FLOW_DEPTH_CURRENT_FILTERED_DESCRIPTION);
     }
 
-    public static Facet createFlowDepthCurrentRawFacet(final CallContext context, final String hash, final String id,
-            final AbstractSInfoCalculationResult result, final int index) {
+    public static Facet createFlowDepthCurrentRawFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
+            final int index) {
         return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_CURRENT_RAW,
                 FACET_FLOW_DEPTH_CURRENT_RAW_DESCRIPTION);
     }
 
     public static Facet createFlowDepthHistoricalFilteredFacet(final CallContext context, final String hash, final String id,
-            final AbstractSInfoCalculationResult result, final int index) {
+            final AbstractCalculationResult result, final int index) {
         return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL,
                 FACET_FLOW_DEPTH_HISTORICAL_FILTERED, FACET_FLOW_DEPTH_HISTORICAL_FILTERED_DESCRIPTION);
     }
 
-    public static Facet createFlowDepthHistoricalRawFacet(final CallContext context, final String hash, final String id,
-            final AbstractSInfoCalculationResult result, final int index) {
+    public static Facet createFlowDepthHistoricalRawFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
+            final int index) {
         return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_HISTORICAL_RAW,
                 FACET_FLOW_DEPTH_HISTORICAL_RAW_DESCRIPTION);
     }
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/SInfoI18NStrings.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/SInfoI18NStrings.java	Thu Jun 14 17:03:53 2018 +0200
@@ -14,15 +14,13 @@
  *
  * @author Gernot Belger
  */
-interface SInfoI18NStrings {
-
+public interface SInfoI18NStrings {
+    // TODO: MAKE interface package-visible again:-)
     // TODO: Strings werden nur einmal verwenden; direkte Verwendung auch denkbar. Liste ist nicht vollständig
     String CSV_META_HEADER_WATERLEVEL_GAUGE = "sinfo.export.flow_depth.csv.meta.header.waterlevel.gauge";
 
     String CSV_META_HEADER_WATERLEVEL_YEAR = "sinfo.export.flow_depth.csv.meta.header.waterlevel.year";
 
-    String CSV_META_HEADER_EVALUATOR = "sinfo.export.flow_depth.csv.meta.header.sounding.evaluator";
-
     String CSV_MEAN_BED_HEIGHT_HEADER = "sinfo.export.flow_depth.csv.header.mean_bed_height";
 
     String CSV_MEAN_BED_HEIGHT_HEADER_SHORT = "sinfo.export.flow_depth.csv.header.mean_bed_height.short";
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/TauProcessor.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/TauProcessor.java	Thu Jun 14 17:03:53 2018 +0200
@@ -15,6 +15,7 @@
 
 import org.dive4elements.artifactdatabase.state.Facet;
 import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
 
 public final class TauProcessor extends AbstractSInfoLineProcessor<AbstractTkhCalculationResult> {
 
@@ -46,8 +47,7 @@
         throw new UnsupportedOperationException(error);
     }
 
-    public static Facet createTauFacet(final CallContext context, final String hash, final String id, final AbstractSInfoCalculationResult result,
-            final int index) {
+    public static Facet createTauFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result, final int index) {
         return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_TAU_YAXIS_LABEL, FACET_TKH_TAU_FILTERED,
                 I18N_FACET_TKH_TAU_FILTERED_DESCRIPTION);
     }
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/TkhProcessor.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/TkhProcessor.java	Thu Jun 14 17:03:53 2018 +0200
@@ -16,6 +16,7 @@
 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
 import org.dive4elements.artifactdatabase.state.Facet;
 import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
 import org.dive4elements.river.artifacts.resources.Resources;
 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
 import org.dive4elements.river.exports.DiagramGenerator;
@@ -75,8 +76,7 @@
         return null;
     }
 
-    public static Facet createTkhFacet(final CallContext context, final String hash, final String id, final AbstractSInfoCalculationResult result,
-            final int index) {
+    public static Facet createTkhFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result, final int index) {
 
         final String facetTkhDescription = Resources.getMsg(context.getMeta(), I18N_FACET_TKH_DESCRIPTION, I18N_FACET_TKH_DESCRIPTION, result.getLabel());
         return new SInfoResultFacet(index, TkhProcessor.FACET_TKH, facetTkhDescription, TkhProcessor.SINFO_CHART_TKX_YAXIS_LABEL, ComputeType.ADVANCE, id,
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/VelocityProcessor.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/VelocityProcessor.java	Thu Jun 14 17:03:53 2018 +0200
@@ -15,6 +15,7 @@
 
 import org.dive4elements.artifactdatabase.state.Facet;
 import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
 
 public final class VelocityProcessor extends AbstractSInfoLineProcessor<AbstractTkhCalculationResult> {
 
@@ -46,7 +47,7 @@
         throw new UnsupportedOperationException(error);
     }
 
-    public static Facet createVelocityFacet(final CallContext context, final String hash, final String id, final AbstractSInfoCalculationResult result,
+    public static Facet createVelocityFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
             final int index) {
         return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_VELOCITY_YAXIS_LABEL, FACET_TKH_VELOCITY_FILTERED,
                 I18N_FACET_TKH_VELOCITY_FILTERED_DESCRIPTION);
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculation.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculation.java	Thu Jun 14 17:03:53 2018 +0200
@@ -18,7 +18,6 @@
 import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider;
 import org.dive4elements.river.artifacts.sinfo.tkhstate.WinfoArtifactWrapper;
 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils;
-import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
 import org.dive4elements.river.model.River;
 
@@ -39,7 +38,6 @@
         /* access input data */
         final FloodDurationAccess access = new FloodDurationAccess(sinfo);
         final River river = access.getRiver();
-        final RiverInfo riverInfo = new RiverInfo(river);
 
         final DoubleRange calcRange = access.getRange();
 
@@ -50,15 +48,13 @@
 
         final String calcModeLabel = Resources.getMsg(this.context.getMeta(), sinfo.getCalculationMode().name());
 
+        // TODO: use enum for riverside
         final String riverside = access.getRiverside();
-        final FloodDurationCalculationResults results = new FloodDurationCalculationResults(calcModeLabel, user, riverInfo, calcRange, riverside); // TODO: add
-                                                                                                                                                   // more
+        // more
         // TODO: mis- ups.. re-use WINFO Artifact as in TkhState
         final WinfoArtifactWrapper winfo = new WinfoArtifactWrapper(sinfo);
         // winfo.computeWaterlevelData();
-        final FloodDurationCalculationResult result = calculateResult(calcRange, infoProvider, problems);
-
-        results.addResult(result, problems);
+        final FloodDurationCalculationResults results = calculateResult(calcModeLabel, riverside, calcRange, infoProvider, user, problems);
 
         return new CalculationResult(results, problems);
     }
@@ -66,16 +62,20 @@
     /**
      * Calculates FAKE Flood Duration
      *
+     * @param riverside
+     * @param calcModeLabel
+     * @param user
+     *
      * @param infoProvider
      */
-    private FloodDurationCalculationResult calculateResult(final DoubleRange calcRange, final RiverInfoProvider riverInfoProvider, final Calculation problems) {
+    private FloodDurationCalculationResults calculateResult(final String calcModeLabel, final String riverside, final DoubleRange calcRange,
+            final RiverInfoProvider riverInfoProvider, final String user, final Calculation problems) {
 
-        final FloodDurationCalculator calculator = new FloodDurationCalculator(riverInfoProvider);
+        final FloodDurationCalculator calculator = new FloodDurationCalculator(this.context, riverInfoProvider);
         final String wspLabel = "WSP-Name";// wstKms.getName();
         final int wspYear = 9999; // waterlevel.getYear();
         final WstInfo wstInfo = new WstInfo(wspLabel, wspYear, riverInfoProvider.getReferenceGauge());
         final String label = String.format("%s - %s", wspLabel, " soundingLabel");
-        return calculator.execute(label, wstInfo, calcRange);
+        return calculator.execute(problems, label, wstInfo, calcModeLabel, calcRange, riverside, user);
     }
-
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculationResult.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculationResult.java	Thu Jun 14 17:03:53 2018 +0200
@@ -9,10 +9,19 @@
  */
 package org.dive4elements.river.artifacts.sinfo.flood_duration;
 
+import java.text.NumberFormat;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationResults;
+import org.dive4elements.river.artifacts.common.ExportContextCSV;
+import org.dive4elements.river.artifacts.common.GeneralResultType;
+import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
 import org.dive4elements.river.artifacts.common.ResultRow;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoCalculationResult;
+import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
 
 /**
@@ -20,19 +29,170 @@
  *
  * @author Gernot Belger
  */
-final class FloodDurationCalculationResult extends AbstractSInfoCalculationResult {
+final class FloodDurationCalculationResult extends AbstractCalculationExportableResult {
 
     private static final long serialVersionUID = 1L;
-    private final int waterlevelCount;
+    private final int waterlevelCount; // TODO: ggf 2 verschiedene Result-Klassen?
+    private final WstInfo wstInfo;
+    private final int maxWaterlevelPdf = 3;
+
+    private enum ExportMode {
+        pdf, csv
+    }
 
     public FloodDurationCalculationResult(final String label, final WstInfo wstInfo, final Collection<ResultRow> rows, final int waterlevelCount) {
-        super(label, wstInfo, rows);
+        super(label, rows);
         this.waterlevelCount = waterlevelCount;
+        this.wstInfo = wstInfo;
+    }
+
+    @Override
+    public void writeCSVHeader(final ExportContextCSV exportContextCSV, final AbstractCalculationResults results, final RiverInfo river) {
+
+        final Collection<String> header = new ArrayList<>(99);
+
+        header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.riverside));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.inundationduration));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.inundationdurationq));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.infrastructureHeight));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.infrastructuretype));
+
+        // add dynamic headers
+        final int waterlevelCount = // results.
+                getWaterlevelCount();
+        for (int i = 0; i < waterlevelCount; i++) {
+            final int naturalIndex = i + 1;
+            final String appendIndex = new StringBuilder().append("_").append(naturalIndex).toString();
+            final Object[] args = new Object[] { appendIndex };
+            // new StringBuilder().append('\u2081').toString(); // schlechter UTF-8-Support für subscript ints
+            header.add(exportContextCSV.msg(DurationWaterlevel.getHeaderW(), new Object[] { appendIndex, "results.getRiver().getWstUnit()" }));
+            header.add(exportContextCSV.msg(DurationWaterlevel.getHeaderFloodDurPerYear(), args));
+            header.add(exportContextCSV.msg(DurationWaterlevel.getHeaderQ(), args));
+            header.add(exportContextCSV.msg(DurationWaterlevel.getHeaderBezeichn(), args));
+        }
+
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.gaugeLabel));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.location));
+
+        exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
+    }
+
+    @Override
+    protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final AbstractCalculationResults results) {
+
+        exportContextCSV.writeCSVWaterlevelMetadata(this.wstInfo); // TODO: Abweichend vom Allgemeinen werden hier andere Felder benötigt bei den
+                                                                   // Wasserspiegellagen
+        exportContextCSV.writeBlankLine();
+        // writer.writeNext(new String[] { "" }); // break line
 
     }
 
-    public int getWaterlevelCount() {
+    @Override
+    protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final AbstractCalculationResults results, final ResultRow row) {
+        // TODO Auto-generated method stub
+        return formatRow(exportContextCSV, results, row, ExportMode.csv);
+    }
+
+    @Override
+    protected String[] formatPDFRow(final ExportContextCSV exportContextCSV, final AbstractCalculationResults results, final ResultRow row) {
+
+        return formatRow(exportContextCSV, results, row, ExportMode.pdf);
+    }
+
+    @Override
+    protected String getJasperFile() {
+        if (this.waterlevelCount <= 1)
+            return "/jasper/templates/sinfo.floodduration.jrxml"; // TODO 2 different result-classes?
+        else
+            return "/jasper/templates/sinfo.floodduration2.jrxml";
+    }
+
+    @Override
+    protected void addJRTableHeader(final ExportContextCSV exportContextCSV, final MetaAndTableJRDataSource source, final AbstractCalculationResults results) {
+        /* column headings */
+        exportContextCSV.addJRMetadata(source, "station_header", GeneralResultType.station);
+        exportContextCSV.addJRMetadata(source, "riverside_header", SInfoResultType.riverside);
+        exportContextCSV.addJRMetadata(source, "inundationduration_header", SInfoResultType.inundationduration);
+        exportContextCSV.addJRMetadata(source, "inundationduration_q_header", SInfoResultType.inundationdurationq);
+        exportContextCSV.addJRMetadata(source, "infrastructure_height_header", SInfoResultType.infrastructureHeightFloodDur);
+        exportContextCSV.addJRMetadata(source, "infrastructure_type_header", SInfoResultType.infrastructuretype);
+
+        // add dynamic headers
+
+        if (this.waterlevelCount == 0 || this.waterlevelCount == 2) {
+            source.addMetaData("dummy", "dummy");
+            source.addMetaData("dummy", "dummy");
+            source.addMetaData("dummy", "dummy");
+            source.addMetaData("dummy", "dummy");
+        }
+
+        for (int i = 0; i < this.waterlevelCount; i++) {
+            final int naturalIndex = i + 1;
+
+            final Object[] args = new String[] { new StringBuilder().append("_").append(naturalIndex).toString() };
+            exportContextCSV.addJRMetadata(source, getPdfHeader("w", naturalIndex), exportContextCSV.msg(DurationWaterlevel.getHeaderW(), args));
+            exportContextCSV.addJRMetadata(source, getPdfHeader("duration", naturalIndex),
+                    exportContextCSV.msg(DurationWaterlevel.getHeaderFloodDurPerYear(), args));
+            exportContextCSV.addJRMetadata(source, getPdfHeader("q", naturalIndex), exportContextCSV.msg(DurationWaterlevel.getHeaderQ(), args));
+            exportContextCSV.addJRMetadata(source, getPdfHeader("bezeichnung", naturalIndex),
+                    exportContextCSV.msg(DurationWaterlevel.getHeaderBezeichn(), args));
+
+        }
+
+        exportContextCSV.addJRMetadata(source, "gauge_header", SInfoResultType.gaugeLabel);
+        exportContextCSV.addJRMetadata(source, "location_header", SInfoResultType.location);
+
+    }
+
+    public int getWaterlevelCount() { // der exporter muss daran, um spalten auszublenden
         return this.waterlevelCount;
     }
 
+    private String[] formatRow(final ExportContextCSV exportContextCSV, final AbstractCalculationResults results, final ResultRow row, final ExportMode mode) {
+
+        final Collection<String> lines = new ArrayList<>(99);
+
+        lines.add(exportContextCSV.formatRowValue(row, GeneralResultType.station));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.riverside));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.inundationduration));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.inundationdurationq));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.infrastructureHeight));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.infrastructuretype));
+
+        final List<DurationWaterlevel> waterlevelList = (List<DurationWaterlevel>) row.getValue(SInfoResultType.customMultiRowColWaterlevel);
+        if (waterlevelList != null) {
+            final NumberFormat wFormatter = exportContextCSV.getFlowDepthFormatter();
+            final NumberFormat qFormatter = exportContextCSV.getQFormatter();
+
+            for (int i = 0; i < waterlevelList.size(); i++) {
+
+                if (i == this.maxWaterlevelPdf && mode == ExportMode.pdf)
+                    break;
+
+                final DurationWaterlevel item = waterlevelList.get(i);
+                lines.add(item.getWFormatted(wFormatter));
+                lines.add(item.getFloodDurDaysPerYearFormatted());
+                lines.add(item.getQFormatted(qFormatter));
+                lines.add(item.getBezeichnung());
+            }
+        }
+
+        if ((this.waterlevelCount == 0 || this.waterlevelCount == 2) && mode == ExportMode.pdf) {
+            lines.add("dummy");
+            lines.add("dummy");
+            lines.add("dummy");
+            lines.add("dummy");
+        }
+
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.gaugeLabel));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.location));
+        return lines.toArray(new String[lines.size()]);
+    }
+
+    private String getPdfHeader(final String rootStr, final int index) {
+        final String hd = "_header";
+        final StringBuilder builder = new StringBuilder();
+        return builder.append(rootStr).append("_").append(index).append(hd).toString();
+    }
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculationResults.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculationResults.java	Thu Jun 14 17:03:53 2018 +0200
@@ -10,13 +10,14 @@
 package org.dive4elements.river.artifacts.sinfo.flood_duration;
 
 import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoCalculationResults;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationListResults;
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 
 /**
  * @author Gernot Belger
  */
-final class FloodDurationCalculationResults extends AbstractSInfoCalculationResults<FloodDurationCalculationResult> {
+final class FloodDurationCalculationResults extends AbstractCalculationListResults<AbstractCalculationExportableResult<FloodDurationCalculationResults>> {
 
     private static final long serialVersionUID = 1L;
 
@@ -25,7 +26,7 @@
     public FloodDurationCalculationResults(final String calcModeLabel, final String user, final RiverInfo river, final DoubleRange calcRange,
             final String riverside) {
         super(calcModeLabel, user, river, calcRange);
-        this.riverside = riverside;
+        this.riverside = riverside; // lieber in Result?
     }
 
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculator.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculator.java	Thu Jun 14 17:03:53 2018 +0200
@@ -14,10 +14,13 @@
 import java.util.List;
 
 import org.apache.commons.lang.math.DoubleRange;
+import org.dive4elements.artifacts.CallContext;
 import org.dive4elements.river.artifacts.common.GeneralResultType;
 import org.dive4elements.river.artifacts.common.ResultRow;
+import org.dive4elements.river.artifacts.model.Calculation;
 import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider;
 import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
 
 /**
@@ -29,18 +32,27 @@
 
     private final RiverInfoProvider riverInfoProvider;
 
-    public FloodDurationCalculator(final RiverInfoProvider riverInfoProvider) {
+    private final CallContext context;
 
+    public FloodDurationCalculator(final CallContext context, final RiverInfoProvider riverInfoProvider) {
+        this.context = context;
         this.riverInfoProvider = riverInfoProvider;
-
     }
 
-    public FloodDurationCalculationResult execute(final String label, final WstInfo wstInfo, final DoubleRange calcRange) {
+    public FloodDurationCalculationResults execute(final Calculation problems, final String label, final WstInfo wstInfo, final String calcModeLabel,
+            final DoubleRange calcRange, final String riverside, final String user) {
 
         calculateResultRow(8888.888);
         calculateResultRow(99);
         calculateResultRow(77);
-        return new FloodDurationCalculationResult(label, wstInfo, this.rows, 4);
+
+        final FloodDurationCalculationResult result = new FloodDurationCalculationResult(label, wstInfo, this.rows, 4);
+
+        final RiverInfo riverInfo = new RiverInfo(this.riverInfoProvider.getRiver());
+
+        final FloodDurationCalculationResults results = new FloodDurationCalculationResults(calcModeLabel, user, riverInfo, calcRange, riverside);
+        results.addResult(result, problems);
+        return results;
     }
 
     private void calculateResultRow(final double station) {
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationExporter.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationExporter.java	Thu Jun 14 17:03:53 2018 +0200
@@ -9,21 +9,14 @@
 package org.dive4elements.river.artifacts.sinfo.flood_duration;
 
 import java.io.OutputStream;
-import java.text.NumberFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
 
-import org.apache.log4j.Logger;
-import org.dive4elements.river.artifacts.common.GeneralResultType;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCommonExporter;
+import org.dive4elements.river.artifacts.common.ExportContextCSV;
 import org.dive4elements.river.artifacts.common.JasperDesigner;
 import org.dive4elements.river.artifacts.common.JasperReporter;
 import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
-import org.dive4elements.river.artifacts.common.ResultRow;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoExporter;
-import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
 
 import au.com.bytecode.opencsv.CSVWriter;
 import net.sf.jasperreports.engine.JRException;
@@ -35,149 +28,31 @@
  * @author Gernot Belger
  */
 // REMARK: must be public because its registered in generators.xml
-public class FloodDurationExporter extends AbstractSInfoExporter<FloodDurationCalculationResult, FloodDurationCalculationResults> {
-
-    /** The log used in this exporter. */
-    private static Logger log = Logger.getLogger(FloodDurationExporter.class);
-
-    private final String getJasperFile(final int waterlevelCount) {
-        if (waterlevelCount <= 1)
-            return "/jasper/templates/sinfo.floodduration.jrxml"; // TODO use jrxml-path all over the project
-        else
-            return "/jasper/templates/sinfo.floodduration2.jrxml";
-    }
-
-    private static final int maxPdfWspls = 3;
-
-    @Override
-    protected Logger getLog() {
-        return log;
-    }
-
-    @Override
-    protected void writeCSVGlobalMetadata(final CSVWriter writer, final FloodDurationCalculationResults results) {
-        log.info("FloodDurationExporter.writeCSVMeta");
-        super.writeCSVGlobalMetadataDefaults(writer, results);
-    }
+public class FloodDurationExporter extends AbstractCommonExporter<FloodDurationCalculationResults> {
 
     @Override
-    protected void writeCSVResultMetadata(final CSVWriter writer, final FloodDurationCalculationResults results, final FloodDurationCalculationResult result) {
-
-        final WstInfo wst = result.getWst();
-        super.writeCSVWaterlevelMetadata(writer, wst); // TODO: Abweichend vom Allgemeinen werden hier andere Felder benötigt bei den Wasserspiegellagen
-
-        writer.writeNext(new String[] { "" }); // break line
-
-    }
-
-    /**
-     * Write the header, with different headings depending on whether at a
-     * gauge or at a location.
-     *
-     * @param river
-     * @param useTkh
-     */
-    @Override
-    protected void writeCSVHeader(final CSVWriter writer, final FloodDurationCalculationResults results, final RiverInfo river) {
-        log.info("FloodDurationExporter.writeCSVHeader");
-
-        final Collection<String> header = new ArrayList<>(99);
-
-        header.add(msg(GeneralResultType.station.getCsvHeader()));
-        header.add(msg(SInfoResultType.riverside.getCsvHeader()));
-        header.add(msg(SInfoResultType.inundationduration.getCsvHeader()));
-        header.add(msg(SInfoResultType.inundationdurationq.getCsvHeader()));
-        header.add(msg(SInfoResultType.infrastructureHeight.getCsvHeader()));
-        header.add(msg(SInfoResultType.infrastructuretype.getCsvHeader()));
-        // add dynamic headers
-        final int waterlevelCount = getWaterlevelCount();
-        for (int i = 0; i < waterlevelCount; i++) {
-            final int naturalIndex = i + 1;
-            final String appendIndex = new StringBuilder().append("_").append(naturalIndex).toString();
-            final Object[] args = new Object[] { appendIndex };
-            // new StringBuilder().append('\u2081').toString(); // schlechter UTF-8-Support für subscript ints
-            header.add(msg(DurationWaterlevel.getHeaderW(), new Object[] { appendIndex, "results.getRiver().getWstUnit()" }));
-            header.add(msg(DurationWaterlevel.getHeaderFloodDurPerYear(), args));
-            header.add(msg(DurationWaterlevel.getHeaderQ(), args));
-            header.add(msg(DurationWaterlevel.getHeaderBezeichn(), args));
-        }
-
-        header.add(msg(SInfoResultType.gaugeLabel.getCsvHeader()));
-        header.add(msg(SInfoResultType.location.getCsvHeader()));
-
-        writer.writeNext(header.toArray(new String[header.size()]));
-    }
+    protected void doWritePdf(final OutputStream out, final FloodDurationCalculationResults results) {
 
-    private int getWaterlevelCount() {
-        final FloodDurationCalculationResults results = getData();
-        if (results != null) {
-            final List<FloodDurationCalculationResult> list = results.getResults();
-            if (list != null && list.size() > 0) {
-                final FloodDurationCalculationResult result = list.get(0);
-                return result.getWaterlevelCount();
-            }
-        }
-        return 0;
-    }
-
-    @Override
-    protected String[] formatRow(final FloodDurationCalculationResults results, final ResultRow row, final ExportMode mode) {
-
-        final Collection<String> lines = new ArrayList<>(99);
-
-        lines.add(row.exportValue(this.context, GeneralResultType.station));
-        lines.add(row.exportValue(this.context, SInfoResultType.riverside));
-        lines.add(row.exportValue(this.context, SInfoResultType.inundationduration));
-        lines.add(row.exportValue(this.context, SInfoResultType.inundationdurationq));
-        lines.add(row.exportValue(this.context, SInfoResultType.infrastructureHeight));
-        lines.add(row.exportValue(this.context, SInfoResultType.infrastructuretype));
-
-        final int waterlevelcount = this.getWaterlevelCount();
-
-        final List<DurationWaterlevel> waterlevelList = (List<DurationWaterlevel>) row.getValue(SInfoResultType.customMultiRowColWaterlevel);
-        if (waterlevelList != null) {
-            final NumberFormat wFormatter = getFlowDepthFormatter();
-            final NumberFormat qFormatter = getQFormatter();
-
-            for (int i = 0; i < waterlevelList.size(); i++) {
+        // TODO: Move to super (hier ist aber spezieller code drin...)
+        try {
+            final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null);
 
-                if (i == FloodDurationExporter.maxPdfWspls && mode == ExportMode.pdf)
-                    break;
-
-                final DurationWaterlevel item = waterlevelList.get(i);
-                lines.add(item.getWFormatted(wFormatter));
-                lines.add(item.getFloodDurDaysPerYearFormatted());
-                lines.add(item.getQFormatted(qFormatter));
-                lines.add(item.getBezeichnung());
-            }
-        }
-
-        if ((waterlevelcount == 0 || waterlevelcount == 2) && mode == ExportMode.pdf) {
-            lines.add("dummy");
-            lines.add("dummy");
-            lines.add("dummy");
-            lines.add("dummy");
-        }
+            final JasperReporter reporter = new JasperReporter();
 
-        lines.add(row.exportValue(this.context, SInfoResultType.gaugeLabel));
-        lines.add(row.exportValue(this.context, SInfoResultType.location));
-        return lines.toArray(new String[lines.size()]);
-    }
-
-    @Override
-    protected void writePDF(final OutputStream out) {
+            for (final AbstractCalculationExportableResult<FloodDurationCalculationResults> result : results.getResults()) {
+                final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+                getHelper().addJRMetaDataUSINFO(source, results);
 
-        try {
-            final MetaAndTableJRDataSource source = createJRData(this.data);
-            final JasperReporter reporter = new JasperReporter();
-            final int waterlevelCount = getWaterlevelCount();
-            final JasperDesigner design = reporter.addReport(getJasperFile(waterlevelCount), source);
-
-            if (waterlevelCount == 0 || waterlevelCount == 2) {
-                design.removeColumn("wOpt");
-                design.removeColumn("qOpt");
-                design.removeColumn("bezOpt");
-                design.removeColumn("durOpt");
+                final JasperDesigner design = result.addReport(exportContextCSV, results, reporter, source);
+                if (result instanceof FloodDurationCalculationResult) {
+                    final int wlCount = ((FloodDurationCalculationResult) result).getWaterlevelCount();
+                    if (wlCount == 0 || wlCount == 2) {
+                        design.removeColumn("wOpt");
+                        design.removeColumn("qOpt");
+                        design.removeColumn("bezOpt");
+                        design.removeColumn("durOpt");
+                    }
+                }
             }
 
             reporter.exportPDF(out);
@@ -185,53 +60,40 @@
         catch (final JRException je) {
             getLog().warn("Error generating PDF Report!", je);
         }
+
     }
 
     @Override
-    protected final void addJRMetaData(final MetaAndTableJRDataSource source, final FloodDurationCalculationResults results) {
-
-        /* general metadata */
-        super.addJRMetaData(source, results);
-
-        /* column headings */
-        source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("riverside_header", SInfoResultType.riverside.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("inundationduration_header", SInfoResultType.inundationduration.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("inundationduration_q_header", SInfoResultType.inundationdurationq.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("infrastructure_height_header", SInfoResultType.infrastructureHeightFloodDur.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("infrastructure_type_header", SInfoResultType.infrastructuretype.getPdfHeader(this.context.getMeta()));
-
-        // add dynamic headers
-
-        final int waterlevelCount = getWaterlevelCount() > FloodDurationExporter.maxPdfWspls ? FloodDurationExporter.maxPdfWspls : getWaterlevelCount();
+    protected void doWriteCSVData(final CSVWriter writer, final FloodDurationCalculationResults results) {
+        // TODO: Diesen Ablauf in super?
 
-        if (waterlevelCount == 0 || waterlevelCount == 2) {
-            source.addMetaData("dummy", "dummy");
-            source.addMetaData("dummy", "dummy");
-            source.addMetaData("dummy", "dummy");
-            source.addMetaData("dummy", "dummy");
-        }
-
-        for (int i = 0; i < waterlevelCount; i++) {
-            final int naturalIndex = i + 1;
+        // TODO: move results into context?
+        final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer);
 
-            final Object[] args = new String[] { new StringBuilder().append("_").append(naturalIndex).toString() };
-            source.addMetaData(getPdfHeader("w", naturalIndex), msg(DurationWaterlevel.getHeaderW(), args));
-            source.addMetaData(getPdfHeader("duration", naturalIndex), msg(DurationWaterlevel.getHeaderFloodDurPerYear(), args));
-            source.addMetaData(getPdfHeader("q", naturalIndex), msg(DurationWaterlevel.getHeaderQ(), args));
-            source.addMetaData(getPdfHeader("bezeichnung", naturalIndex), msg(DurationWaterlevel.getHeaderBezeichn(), args));
+        getLog().info("writeCSVData");
 
-        }
+        /* write as csv */
+        exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse
 
-        source.addMetaData("gauge_header", SInfoResultType.gaugeLabel.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("location_header", SInfoResultType.location.getPdfHeader(this.context.getMeta()));
+        // writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+
+        final RiverInfo river = results.getRiver();
+
+        final Class<?> lastResultType = null;
+
+        for (final AbstractCalculationExportableResult<FloodDurationCalculationResults> result : results.getResults()) {
+
+            final Class<?> resultType = result.getClass();
+            if (lastResultType == null || lastResultType != resultType) {
+                exportContextCSV.writeBlankLine();
+                result.writeCSVHeader(exportContextCSV, results, river);
+                exportContextCSV.writeBlankLine();
+            } else
+                exportContextCSV.writeCSVLine(new String[] { "#" });
+
+            result.writeCsv(exportContextCSV, results);
+        }
 
     }
 
-    private String getPdfHeader(final String rootStr, final int index) {
-        final String hd = "_header";
-        final StringBuilder builder = new StringBuilder();
-        return builder.append(rootStr).append("_").append(index).append(hd).toString();
-    }
-
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationState.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationState.java	Thu Jun 14 17:03:53 2018 +0200
@@ -14,6 +14,7 @@
 import org.dive4elements.artifacts.CallContext;
 import org.dive4elements.river.artifacts.ChartArtifact;
 import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
 import org.dive4elements.river.artifacts.model.CalculationResult;
 import org.dive4elements.river.artifacts.model.DataFacet;
 import org.dive4elements.river.artifacts.model.EmptyFacet;
@@ -72,10 +73,10 @@
         final FloodDurationCalculationResults results = (FloodDurationCalculationResults) res.getData();
 
         /* add themes for chart, for each result */
-        final List<FloodDurationCalculationResult> resultList = results.getResults();
+        final List<AbstractCalculationExportableResult<FloodDurationCalculationResults>> resultList = results.getResults();
         for (int index = 0; index < resultList.size(); index++) {
 
-            final FloodDurationCalculationResult result = resultList.get(index);
+            final AbstractCalculationExportableResult<FloodDurationCalculationResults> result = resultList.get(0);
 
             /* filtered (zoom dependent mean) flow depth TODO: */
             // facets.add(FloodDurationProcessor.createFlowDepthFilteredFacet(context, hash, this.id, result, index));
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthCalculationResult.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthCalculationResult.java	Thu Jun 14 17:03:53 2018 +0200
@@ -9,11 +9,17 @@
  */
 package org.dive4elements.river.artifacts.sinfo.flowdepth;
 
+import java.util.ArrayList;
 import java.util.Collection;
 
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.ExportContextCSV;
+import org.dive4elements.river.artifacts.common.GeneralResultType;
+import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
 import org.dive4elements.river.artifacts.common.ResultRow;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractTkhCalculationResult;
+import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
 import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
 
 /**
@@ -21,20 +27,130 @@
  *
  * @author Gernot Belger
  */
-final class FlowDepthCalculationResult extends AbstractTkhCalculationResult {
+final class FlowDepthCalculationResult extends AbstractCalculationExportableResult<FlowDepthCalculationResults> {
 
     private static final long serialVersionUID = 1L;
 
+    private enum ExportMode { // TODO; nicht ständig kopieren
+        pdf, csv
+    }
+
+    private static final String JASPER_FILE = "/jasper/templates/sinfo.flowdepth.jrxml"; // TODO use jrxml-path all over the project
+
     private final BedHeightInfo sounding;
+    private final WstInfo wst;
+    private final boolean hasTkh;
 
     public FlowDepthCalculationResult(final String label, final WstInfo wst, final BedHeightInfo sounding, final boolean hasTkh,
             final Collection<ResultRow> rows) {
-        super(label, wst, hasTkh, rows);
+        super(label, rows);
 
         this.sounding = sounding;
+        this.wst = wst;
+        this.hasTkh = hasTkh;
     }
 
     public BedHeightInfo getSounding() {
         return this.sounding;
     }
+
+    @Override
+    public void writeCSVHeader(final ExportContextCSV exportContextCSV, final FlowDepthCalculationResults results, final RiverInfo river) {
+        // getLog().info("FlowDepthExporter.writeCSVHeader");
+
+        final Collection<String> header = new ArrayList<>(11);
+
+        header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station));
+        header.add(exportContextCSV.msgUnitCSV(SInfoResultType.flowdepth));
+
+        if (this.hasTkh()) {
+            header.add(exportContextCSV.msgUnitCSV(SInfoResultType.flowdepthtkh));
+            header.add(exportContextCSV.msgUnitCSV(SInfoResultType.tkh));
+        }
+
+        header.add(exportContextCSV.msgUnitCSV(SInfoResultType.waterlevel, river.getWstUnit()));
+        header.add(exportContextCSV.msgUnitCSV(SInfoResultType.discharge));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.waterlevelLabel));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.gaugeLabel));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.meanBedHeight));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.soundingLabel));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.location));
+
+        exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
+
+    }
+
+    @Override
+    protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final FlowDepthCalculationResults results) {
+
+        exportContextCSV.writeCSVSoundingMetadata(this.sounding);
+
+        exportContextCSV.writeBlankLine();// .writeNext(new String[] { "" }); // break line
+
+        exportContextCSV.writeCSVWaterlevelMetadata(this.wst);
+
+        exportContextCSV.writeBlankLine();// .writeNext(new String[] { "" }); // break line
+
+    }
+
+    @Override
+    protected String getJasperFile() {
+        return JASPER_FILE;
+    }
+
+    @Override
+    protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final FlowDepthCalculationResults results, final ResultRow row) {
+        return formatRow(ExportMode.csv, exportContextCSV, results, row);
+    }
+
+    @Override
+    protected String[] formatPDFRow(final ExportContextCSV exportContextPDF, final FlowDepthCalculationResults results, final ResultRow row) {
+
+        return formatRow(ExportMode.pdf, exportContextPDF, results, row);
+    }
+
+    @Override
+    protected void addJRTableHeader(final ExportContextCSV exportContextPDF, final MetaAndTableJRDataSource source, final FlowDepthCalculationResults results) {
+
+        /* column headings */
+        exportContextPDF.addJRMetadata(source, "station_header", GeneralResultType.station);
+        exportContextPDF.addJRMetadata(source, "flowdepth_header", SInfoResultType.flowdepth);
+        exportContextPDF.addJRMetadata(source, "flowdepth_tkh_header", SInfoResultType.flowdepthtkh);
+        exportContextPDF.addJRMetadata(source, "tkh_header", SInfoResultType.tkh);
+        exportContextPDF.addJRMetadata(source, "waterlevel_header", SInfoResultType.waterlevel);
+        exportContextPDF.addJRMetadata(source, "discharge_header", SInfoResultType.discharge);
+        exportContextPDF.addJRMetadata(source, "waterlevel_name_header", SInfoResultType.waterlevelLabel);
+        exportContextPDF.addJRMetadata(source, "gauge_header", SInfoResultType.gaugeLabel);
+        exportContextPDF.addJRMetadata(source, "bedheight_header", SInfoResultType.meanBedHeight);
+        exportContextPDF.addJRMetadata(source, "sounding_name_header", SInfoResultType.soundingLabel);
+        exportContextPDF.addJRMetadata(source, "location_header", SInfoResultType.location);
+    }
+
+    public boolean hasTkh() {
+        return this.hasTkh;
+    }
+
+    private String[] formatRow(final ExportMode mode, final ExportContextCSV exportContextCSV, final FlowDepthCalculationResults results, final ResultRow row) {
+
+        final Collection<String> lines = new ArrayList<>(11);
+
+        lines.add(exportContextCSV.formatRowValue(row, GeneralResultType.station));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.flowdepth));
+
+        if (mode == ExportMode.pdf || results.isUseTkh()) {
+            lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.flowdepthtkh));
+            lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.tkh));
+        }
+
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.waterlevel));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.discharge));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.waterlevelLabel));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.gaugeLabel));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.meanBedHeight));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.soundingLabel));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.location));
+
+        return lines.toArray(new String[lines.size()]);
+    }
+
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthCalculationResults.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthCalculationResults.java	Thu Jun 14 17:03:53 2018 +0200
@@ -10,13 +10,14 @@
 package org.dive4elements.river.artifacts.sinfo.flowdepth;
 
 import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoCalculationResults;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationListResults;
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 
 /**
  * @author Gernot Belger
  */
-final class FlowDepthCalculationResults extends AbstractSInfoCalculationResults<FlowDepthCalculationResult> {
+final class FlowDepthCalculationResults extends AbstractCalculationListResults<AbstractCalculationExportableResult<FlowDepthCalculationResults>> {
 
     private static final long serialVersionUID = 1L;
 
@@ -32,4 +33,5 @@
     public boolean isUseTkh() {
         return this.useTkh;
     }
+
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthExporter.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthExporter.java	Thu Jun 14 17:03:53 2018 +0200
@@ -9,20 +9,14 @@
 package org.dive4elements.river.artifacts.sinfo.flowdepth;
 
 import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
 
-import org.apache.log4j.Logger;
-import org.dive4elements.river.artifacts.common.GeneralResultType;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCommonExporter;
+import org.dive4elements.river.artifacts.common.ExportContextCSV;
 import org.dive4elements.river.artifacts.common.JasperDesigner;
 import org.dive4elements.river.artifacts.common.JasperReporter;
 import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
-import org.dive4elements.river.artifacts.common.ResultRow;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoExporter;
-import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
-import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo;
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
 
 import au.com.bytecode.opencsv.CSVWriter;
 import net.sf.jasperreports.engine.JRException;
@@ -34,139 +28,67 @@
  * @author Gernot Belger
  */
 // REMARK: must be public because its registered in generators.xml
-public class FlowDepthExporter extends AbstractSInfoExporter<FlowDepthCalculationResult, FlowDepthCalculationResults> {
-
-    /** The log used in this exporter. */
-    private static Logger log = Logger.getLogger(FlowDepthExporter.class);
-
-    private static final String JASPER_FILE = "/jasper/templates/sinfo.flowdepth.jrxml"; // TODO use jrxml-path all over the project
+public class FlowDepthExporter extends AbstractCommonExporter<FlowDepthCalculationResults> {
 
     @Override
-    protected Logger getLog() {
-        return log;
-    }
+    protected void doWriteCSVData(final CSVWriter writer, final FlowDepthCalculationResults results) {
+        // TODO: Diesen Ablauf in super?
 
-    @Override
-    protected void writeCSVGlobalMetadata(final CSVWriter writer, final FlowDepthCalculationResults results) {
-        log.info("FlowDepthExporter.writeCSVMeta");
-        super.writeCSVGlobalMetadataDefaults(writer, results);
+        // TODO: move results into context?
+        final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer);
+
+        getLog().info("writeCSVData");
+
+        /* write as csv */
+        exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse
+
+        // writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+
+        final RiverInfo river = results.getRiver();
+
+        final Class<?> lastResultType = null;
+
+        for (final AbstractCalculationExportableResult<FlowDepthCalculationResults> result : results.getResults()) {
+
+            final Class<?> resultType = result.getClass();
+            if (lastResultType == null || lastResultType != resultType) {
+                exportContextCSV.writeBlankLine();
+                result.writeCSVHeader(exportContextCSV, results, river);
+                exportContextCSV.writeBlankLine();
+            } else
+                exportContextCSV.writeCSVLine(new String[] { "#" });
+
+            result.writeCsv(exportContextCSV, results);
+        }
     }
 
     @Override
-    protected void writeCSVResultMetadata(final CSVWriter writer, final FlowDepthCalculationResults results, final FlowDepthCalculationResult result) {
-
-        final BedHeightInfo sounding = result.getSounding();
-        super.writeCSVSoundingMetadata(writer, sounding);
-
-        writer.writeNext(new String[] { "" }); // break line
-
-        final WstInfo wst = result.getWst();
-        super.writeCSVWaterlevelMetadata(writer, wst);
-
-        writer.writeNext(new String[] { "" }); // break line
-
-    }
-
-    /**
-     * Write the header, with different headings depending on whether at a
-     * gauge or at a location.
-     *
-     * @param river
-     * @param useTkh
-     */
-    @Override
-    protected void writeCSVHeader(final CSVWriter writer, final FlowDepthCalculationResults results, final RiverInfo river) {
-        log.info("FlowDepthExporter.writeCSVHeader");
-
-        final Collection<String> header = new ArrayList<>(11);
-
-        header.add(msg(GeneralResultType.station.getCsvHeader()));
-        header.add(msgUnit(SInfoResultType.flowdepth.getCsvHeader(), SInfoResultType.flowdepth.getUnit()));
-
-        if (results.isUseTkh()) {
-            header.add(msgUnit(SInfoResultType.flowdepthtkh.getCsvHeader(), SInfoResultType.flowdepthtkh.getUnit()));
-            header.add(msgUnit(SInfoResultType.tkh.getCsvHeader(), SInfoResultType.tkh.getUnit()));
-        }
-
-        header.add(msgUnit(SInfoResultType.waterlevel.getCsvHeader(), river.getWstUnit()));
-        header.add(msgUnit(SInfoResultType.discharge.getCsvHeader(), SInfoResultType.discharge.getUnit()));
-        header.add(msg(SInfoResultType.waterlevelLabel.getCsvHeader()));
-        header.add(msg(SInfoResultType.gaugeLabel.getCsvHeader()));
-        header.add(msgUnit(SInfoResultType.meanBedHeight.getCsvHeader(), river.getWstUnit()));
-        header.add(msg(SInfoResultType.soundingLabel.getCsvHeader()));
-        header.add(msg(SInfoResultType.location.getCsvHeader()));
+    protected void doWritePdf(final OutputStream out, final FlowDepthCalculationResults results) {
 
-        writer.writeNext(header.toArray(new String[header.size()]));
-    }
-
-    /**
-     * Format a row of a flow depth result into an array of string, both used by csv and pdf
-     *
-     * @param pdf
-     *
-     * @param useTkh
-     */
-    @Override
-    protected String[] formatRow(final FlowDepthCalculationResults results, final ResultRow row, final ExportMode mode) {
-
-        final Collection<String> lines = new ArrayList<>(11);
-
-        lines.add(row.exportValue(this.context, GeneralResultType.station));
-        lines.add(row.exportValue(this.context, SInfoResultType.flowdepth));
-
-        if (mode == ExportMode.pdf || getData().isUseTkh()) {
-            lines.add(row.exportValue(this.context, SInfoResultType.flowdepthtkh));
-            lines.add(row.exportValue(this.context, SInfoResultType.tkh));
-        }
+        // TODO: Move to super? Maybe not, hier gibt es unterschiede -> design remove columns
+        try {
+            final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null);
 
-        lines.add(row.exportValue(this.context, SInfoResultType.waterlevel));
-        lines.add(row.exportValue(this.context, SInfoResultType.discharge));
-        lines.add(row.exportValue(this.context, SInfoResultType.waterlevelLabel));
-        lines.add(row.exportValue(this.context, SInfoResultType.gaugeLabel));
-        lines.add(row.exportValue(this.context, SInfoResultType.meanBedHeight));
-        lines.add(row.exportValue(this.context, SInfoResultType.soundingLabel));
-        lines.add(row.exportValue(this.context, SInfoResultType.location));
-
-        return lines.toArray(new String[lines.size()]);
-    }
+            final JasperReporter reporter = new JasperReporter();
 
-    @Override
-    protected void writePDF(final OutputStream out) {
+            for (final AbstractCalculationExportableResult<FlowDepthCalculationResults> result : results.getResults()) {
+                final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+                getHelper().addJRMetaDataUSINFO(source, results);
 
-        try {
-            final MetaAndTableJRDataSource source = createJRData(this.data);
-            final JasperReporter reporter = new JasperReporter();
-            final JasperDesigner design = reporter.addReport(JASPER_FILE, source);
-
-            if (!getData().isUseTkh()) {
-                design.removeColumn("tkh");
-                design.removeColumn("flowdepthtkh");
+                final JasperDesigner design = result.addReport(exportContextCSV, results, reporter, source);
+                if (result instanceof FlowDepthCalculationResult) {
+                    if (!((FlowDepthCalculationResult) result).hasTkh()) {
+                        design.removeColumn("tkh");
+                        design.removeColumn("flowdepthtkh");
+                    }
+                }
+                reporter.exportPDF(out);
             }
-            reporter.exportPDF(out);
         }
         catch (final JRException je) {
             getLog().warn("Error generating PDF Report!", je);
         }
-    }
-
-    @Override
-    protected final void addJRMetaData(final MetaAndTableJRDataSource source, final FlowDepthCalculationResults results) {
-
-        /* general metadata */
-        super.addJRMetaData(source, results);
 
-        /* column headings */
-        source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("flowdepth_header", SInfoResultType.flowdepth.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("flowdepth_tkh_header", SInfoResultType.flowdepthtkh.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("tkh_header", SInfoResultType.tkh.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("waterlevel_header", SInfoResultType.waterlevel.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("discharge_header", SInfoResultType.discharge.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("waterlevel_name_header", SInfoResultType.waterlevelLabel.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("gauge_header", SInfoResultType.gaugeLabel.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("bedheight_header", SInfoResultType.meanBedHeight.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("sounding_name_header", SInfoResultType.soundingLabel.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("location_header", SInfoResultType.location.getPdfHeader(this.context.getMeta()));
     }
 
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthState.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthState.java	Thu Jun 14 17:03:53 2018 +0200
@@ -14,6 +14,7 @@
 import org.dive4elements.artifacts.CallContext;
 import org.dive4elements.river.artifacts.ChartArtifact;
 import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
 import org.dive4elements.river.artifacts.model.Calculation;
 import org.dive4elements.river.artifacts.model.CalculationResult;
 import org.dive4elements.river.artifacts.model.DataFacet;
@@ -76,10 +77,10 @@
         final FlowDepthCalculationResults results = (FlowDepthCalculationResults) res.getData();
 
         /* add themes for chart, for each result */
-        final List<FlowDepthCalculationResult> resultList = results.getResults();
+        final List<AbstractCalculationExportableResult<FlowDepthCalculationResults>> resultList = results.getResults();
         for (int index = 0; index < resultList.size(); index++) {
 
-            final FlowDepthCalculationResult result = resultList.get(index);
+            final FlowDepthCalculationResult result = (FlowDepthCalculationResult) resultList.get(index);
 
             /* filtered (zoom dependent mean) flow depth */
             facets.add(FlowDepthProcessor.createFlowDepthFilteredFacet(context, hash, this.id, result, index));
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentCalculationResult.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentCalculationResult.java	Thu Jun 14 17:03:53 2018 +0200
@@ -9,11 +9,17 @@
  */
 package org.dive4elements.river.artifacts.sinfo.flowdepthdev;
 
+import java.util.ArrayList;
 import java.util.Collection;
 
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.ExportContextCSV;
+import org.dive4elements.river.artifacts.common.GeneralResultType;
+import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
 import org.dive4elements.river.artifacts.common.ResultRow;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoCalculationResult;
+import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
 import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
 
 /**
@@ -21,10 +27,20 @@
  *
  * @author Gernot Belger
  */
-final class FlowDepthDevelopmentCalculationResult extends AbstractSInfoCalculationResult {
+final class FlowDepthDevelopmentCalculationResult extends AbstractCalculationExportableResult<FlowDepthDevelopmentCalculationResults> {
 
     private static final long serialVersionUID = 1L;
 
+    private static final String CSV_META_HEADER_SOUNDING_CURRENT = "sinfo.export.csv.meta.header.sounding.current";
+
+    private static final String CSV_META_HEADER_SOUNDING_HISTORICAL = "sinfo.export.csv.meta.header.sounding.historical";
+
+    private static final String CSV_META_HEADER_WATERLEVEL_CURRENT = "sinfo.export.csv.meta.header.waterlevel.current";
+
+    private static final String CSV_META_HEADER_WATERLEVEL_HISTORICAL = "sinfo.export.csv.meta.header.waterlevel.historical";
+
+    private static final String JASPER_FILE = "/jasper/templates/sinfo.flowdepthdevelopment.jrxml";
+
     private final BedHeightInfo currentSounding;
 
     private final BedHeightInfo historicalSounding;
@@ -34,9 +50,8 @@
     private final WstInfo currentWst;
 
     public FlowDepthDevelopmentCalculationResult(final String label, final WstInfo currentWst, final WstInfo historicalWst, final BedHeightInfo currentSounding,
-            final BedHeightInfo historicalSounding, final Collection< ResultRow> rows) {
-        // TODO: bad abstraction if we give null here...
-        super(label, null, rows);
+            final BedHeightInfo historicalSounding, final Collection<ResultRow> rows) {
+        super(label, rows);
 
         this.currentWst = currentWst;
         this.historicalWst = historicalWst;
@@ -92,4 +107,93 @@
                 append(this.historicalSounding.getDescription()). //
                 toString();
     }
+
+    @Override
+    protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final FlowDepthDevelopmentCalculationResults results) {
+
+        exportContextCSV.writeCSVSoundingMetadata(getCurrentSounding(), CSV_META_HEADER_SOUNDING_CURRENT);
+        exportContextCSV.writeBlankLine();
+        exportContextCSV.writeCSVWaterlevelMetadata(getCurrentWst(), CSV_META_HEADER_WATERLEVEL_CURRENT);
+        exportContextCSV.writeBlankLine();
+        exportContextCSV.writeCSVSoundingMetadata(getHistoricalSounding(), CSV_META_HEADER_SOUNDING_HISTORICAL);
+        exportContextCSV.writeBlankLine();
+        exportContextCSV.writeCSVWaterlevelMetadata(getHistoricalWst(), CSV_META_HEADER_WATERLEVEL_HISTORICAL);
+        exportContextCSV.writeBlankLine();
+
+    }
+
+    @Override
+    protected String getJasperFile() {
+        return JASPER_FILE;
+    }
+
+    protected String[] formatRow(final ExportContextCSV exportContextCSV, final FlowDepthDevelopmentCalculationResults results, final ResultRow row) {
+
+        final Collection<String> lines = new ArrayList<>(10);
+
+        lines.add(exportContextCSV.formatRowValue(row, GeneralResultType.station));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.flowdepthDevelopment));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.flowdepthDevelopmentPerYear));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.waterlevelDifference));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.bedHeightDifference));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.flowdepthCurrent));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.flowdepthHistorical));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.location));
+
+        return lines.toArray(new String[lines.size()]);
+    }
+
+    @Override
+    public void writeCSVHeader(final ExportContextCSV exportContextCSV, final FlowDepthDevelopmentCalculationResults results, final RiverInfo river) {
+
+        final Collection<String> header = new ArrayList<>(11);
+
+        header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station));
+        header.add(exportContextCSV.msgUnitCSV(SInfoResultType.flowdepthDevelopment, SInfoResultType.flowdepthDevelopment.getUnit()));
+        header.add(exportContextCSV.msgUnitCSV(SInfoResultType.flowdepthDevelopmentPerYear, SInfoResultType.flowdepthDevelopmentPerYear.getUnit()));
+        header.add(exportContextCSV.msgUnitLabel(SInfoResultType.waterlevelDifference, getWaterlevelDifferenceLabel()));
+        header.add(exportContextCSV.msgUnitLabel(SInfoResultType.bedHeightDifference, getBedHeightDifferenceLabel()));
+        header.add(exportContextCSV.msgUnitLabel(SInfoResultType.flowdepthCurrent, getFlowDepthCurrentLabel()));
+        header.add(exportContextCSV.msgUnitLabel(SInfoResultType.flowdepthHistorical, getFlowDepthHistoricalLabel()));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.location));
+
+        exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
+
+    }
+
+    @Override
+    protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final FlowDepthDevelopmentCalculationResults results, final ResultRow row) {
+
+        return this.formatRow(exportContextCSV, results, row);
+    }
+
+    @Override
+    protected String[] formatPDFRow(final ExportContextCSV exportContextPDF, final FlowDepthDevelopmentCalculationResults results, final ResultRow row) {
+
+        return this.formatRow(exportContextPDF, results, row);
+    }
+
+    @Override
+    protected void addJRTableHeader(final ExportContextCSV exportContextPDF, final MetaAndTableJRDataSource source,
+            final FlowDepthDevelopmentCalculationResults results) {
+        /* column headings */
+        exportContextPDF.addJRMetadata(source, "station_header", GeneralResultType.station);
+        exportContextPDF.addJRMetadata(source, "flowdepthdevelopment_header", SInfoResultType.flowdepthDevelopment);
+        exportContextPDF.addJRMetadata(source, "flowdepthdevelopmentperyear_header", SInfoResultType.flowdepthDevelopmentPerYear);
+
+        exportContextPDF.addJRMetadata(source, "waterleveldifference_header", SInfoResultType.waterlevelDifference);
+        exportContextPDF.addJRMetadata(source, "waterleveldifference_header2", getWaterlevelDifferenceLabel());
+
+        exportContextPDF.addJRMetadata(source, "bedheightdifference_header", SInfoResultType.bedHeightDifference);
+        exportContextPDF.addJRMetadata(source, "bedheightdifference_header2", getBedHeightDifferenceLabel());
+
+        exportContextPDF.addJRMetadata(source, "flowdepthcurrent_header", SInfoResultType.flowdepthCurrent);
+        exportContextPDF.addJRMetadata(source, "flowdepthcurrent_header2", getFlowDepthCurrentLabel());
+
+        exportContextPDF.addJRMetadata(source, "flowdepthhistorical_header", SInfoResultType.flowdepthHistorical);
+        exportContextPDF.addJRMetadata(source, "flowdepthhistorical_header2", getFlowDepthHistoricalLabel());
+
+        exportContextPDF.addJRMetadata(source, "location_header", SInfoResultType.location);
+
+    }
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentCalculationResults.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentCalculationResults.java	Thu Jun 14 17:03:53 2018 +0200
@@ -12,13 +12,14 @@
 import java.util.List;
 
 import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoCalculationResults;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationListResults;
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 
 /**
  * @author Gernot Belger
  */
-final class FlowDepthDevelopmentCalculationResults extends AbstractSInfoCalculationResults<FlowDepthDevelopmentCalculationResult> {
+final class FlowDepthDevelopmentCalculationResults extends AbstractCalculationListResults<AbstractCalculationExportableResult<FlowDepthDevelopmentCalculationResults>> {
 
     private static final long serialVersionUID = 1L;
 
@@ -30,10 +31,10 @@
      * We know that this type of results only has one result member, so we can directly access it.
      */
     public FlowDepthDevelopmentCalculationResult getResult() {
-        final List<FlowDepthDevelopmentCalculationResult> results = getResults();
+        final List<AbstractCalculationExportableResult<FlowDepthDevelopmentCalculationResults>> results = getResults();
         if (results.size() < 1)
             return null;
 
-        return results.get(0);
+        return (FlowDepthDevelopmentCalculationResult) results.get(0);
     }
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentExporter.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentExporter.java	Thu Jun 14 17:03:53 2018 +0200
@@ -9,15 +9,12 @@
 package org.dive4elements.river.artifacts.sinfo.flowdepthdev;
 
 import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
 
-import org.apache.log4j.Logger;
-import org.dive4elements.river.artifacts.common.GeneralResultType;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCommonExporter;
+import org.dive4elements.river.artifacts.common.ExportContextCSV;
 import org.dive4elements.river.artifacts.common.JasperReporter;
 import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
-import org.dive4elements.river.artifacts.common.ResultRow;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoExporter;
 import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 
@@ -31,142 +28,63 @@
  * @author Gernot Belger
  */
 // REMARK: must be public because its registered in generators.xml
-public class FlowDepthDevelopmentExporter extends AbstractSInfoExporter<FlowDepthDevelopmentCalculationResult, FlowDepthDevelopmentCalculationResults> {
-
-    private static final String CSV_META_HEADER_SOUNDING_CURRENT = "sinfo.export.csv.meta.header.sounding.current";
-
-    private static final String CSV_META_HEADER_SOUNDING_HISTORICAL = "sinfo.export.csv.meta.header.sounding.historical";
-
-    private static final String CSV_META_HEADER_WATERLEVEL_CURRENT = "sinfo.export.csv.meta.header.waterlevel.current";
-
-    private static final String CSV_META_HEADER_WATERLEVEL_HISTORICAL = "sinfo.export.csv.meta.header.waterlevel.historical";
-
-    /** The log used in this exporter. */
-    private static Logger log = Logger.getLogger(FlowDepthDevelopmentExporter.class);
-
-    private static final String JASPER_FILE = "/jasper/templates/sinfo.flowdepthdevelopment.jrxml";
+public class FlowDepthDevelopmentExporter extends AbstractCommonExporter<FlowDepthDevelopmentCalculationResults> {
 
     @Override
-    protected Logger getLog() {
-        return log;
-    }
-
-    @Override
-    protected void writeCSVResultMetadata(final CSVWriter writer, final FlowDepthDevelopmentCalculationResults results,
-            final FlowDepthDevelopmentCalculationResult result) {
+    protected void doWriteCSVData(final CSVWriter writer, final FlowDepthDevelopmentCalculationResults results) {
+        // TODO: Diesen Ablauf in super?
 
-        writeCSVSoundingMetadata(writer, result.getCurrentSounding(), CSV_META_HEADER_SOUNDING_CURRENT);
-        writer.writeNext(new String[] { "" }); // break line
-        writeCSVWaterlevelMetadata(writer, result.getCurrentWst(), CSV_META_HEADER_WATERLEVEL_CURRENT);
-        writer.writeNext(new String[] { "" }); // break line
-        writeCSVSoundingMetadata(writer, result.getHistoricalSounding(), CSV_META_HEADER_SOUNDING_HISTORICAL);
-        writer.writeNext(new String[] { "" }); // break line
-        writeCSVWaterlevelMetadata(writer, result.getHistoricalWst(), CSV_META_HEADER_WATERLEVEL_HISTORICAL);
-        writer.writeNext(new String[] { "" }); // break line
+        // TODO: move results into context?
+        final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer);
+
+        getLog().info("writeCSVData");
+
+        /* write as csv */
+        exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse
+
+        // writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+
+        final RiverInfo river = results.getRiver();
+
+        final Class<?> lastResultType = null;
+
+        for (final AbstractCalculationExportableResult<FlowDepthDevelopmentCalculationResults> result : results.getResults()) {
+
+            final Class<?> resultType = result.getClass();
+            if (lastResultType == null || lastResultType != resultType) {
+                exportContextCSV.writeBlankLine();
+                result.writeCSVHeader(exportContextCSV, results, river);
+                exportContextCSV.writeBlankLine();
+            } else
+                exportContextCSV.writeCSVLine(new String[] { "#" });
+
+            result.writeCsv(exportContextCSV, results);
+        }
     }
 
     @Override
-    protected void writeCSVGlobalMetadata(final CSVWriter writer, final FlowDepthDevelopmentCalculationResults results) {
-        super.writeCSVGlobalMetadataDefaults(writer, results);
-    }
-
-    /**
-     * Write the header, with different headings depending on whether at a
-     * gauge or at a location.
-     *
-     * @param river
-     * @param useTkh
-     */
-    @Override
-    protected void writeCSVHeader(final CSVWriter writer, final FlowDepthDevelopmentCalculationResults results, final RiverInfo river) {
-        log.info("FlowDepthExporter.writeCSVHeader");
-
-        final FlowDepthDevelopmentCalculationResult result = results.getResult();
-
-        final Collection<String> header = new ArrayList<>(11);
-
-        header.add(msg(GeneralResultType.station.getCsvHeader()));
-        header.add(msgUnit(SInfoResultType.flowdepthDevelopment.getCsvHeader(), SInfoResultType.flowdepthDevelopment.getUnit()));
-        header.add(msgUnit(SInfoResultType.flowdepthDevelopmentPerYear.getCsvHeader(), SInfoResultType.flowdepthDevelopmentPerYear.getUnit()));
-        header.add(msgUnitLabel(SInfoResultType.waterlevelDifference.getCsvHeader(), SInfoResultType.waterlevelDifference.getUnit(),
-                result.getWaterlevelDifferenceLabel()));
-        header.add(msgUnitLabel(SInfoResultType.bedHeightDifference.getCsvHeader(), SInfoResultType.bedHeightDifference.getUnit(),
-                result.getBedHeightDifferenceLabel()));
-        header.add(
-                msgUnitLabel(SInfoResultType.flowdepthCurrent.getCsvHeader(), SInfoResultType.flowdepthCurrent.getUnit(), result.getFlowDepthCurrentLabel()));
-        header.add(msgUnitLabel(SInfoResultType.flowdepthHistorical.getCsvHeader(), SInfoResultType.flowdepthHistorical.getUnit(),
-                result.getFlowDepthHistoricalLabel()));
-        header.add(msg(SInfoResultType.location.getCsvHeader()));
-
-        writer.writeNext(header.toArray(new String[header.size()]));
-    }
-
-    /**
-     * Format a row of a flow depth result into an array of string, both used by csv and pdf
-     *
-     * @param result
-     *
-     * @param useTkh
-     */
-    @Override
-    protected String[] formatRow(final FlowDepthDevelopmentCalculationResults results, final ResultRow row, final ExportMode mode) {
-
-        final Collection<String> lines = new ArrayList<>(10);
-
-        lines.add(row.exportValue(this.context, GeneralResultType.station));
-        lines.add(row.exportValue(this.context, SInfoResultType.flowdepthDevelopment));
-        lines.add(row.exportValue(this.context, SInfoResultType.flowdepthDevelopmentPerYear));
-        lines.add(row.exportValue(this.context, SInfoResultType.waterlevelDifference));
-        lines.add(row.exportValue(this.context, SInfoResultType.bedHeightDifference));
-        lines.add(row.exportValue(this.context, SInfoResultType.flowdepthCurrent));
-        lines.add(row.exportValue(this.context, SInfoResultType.flowdepthHistorical));
-        lines.add(row.exportValue(this.context, SInfoResultType.location));
-
-        return lines.toArray(new String[lines.size()]);
-    }
-
-    @Override
-    protected final void addJRMetaData(final MetaAndTableJRDataSource source, final FlowDepthDevelopmentCalculationResults results) {
-
-        /* general metadata */
-        super.addJRMetaData(source, results);
-
-        final FlowDepthDevelopmentCalculationResult result = results.getResult();
-        source.addMetaData("flowdepthdevelopment", result.getLabel());
-        source.addMetaData("flowdepthdevelopment_header_label", SInfoResultType.flowdepthDevelopment.getCsvHeader(this.context.getMeta()));// (this.context.getMeta()));
-
-        /* column headings */
-        source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("flowdepthdevelopment_header", SInfoResultType.flowdepthDevelopment.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("flowdepthdevelopmentperyear_header", SInfoResultType.flowdepthDevelopmentPerYear.getPdfHeader(this.context.getMeta()));
-
-        source.addMetaData("waterleveldifference_header", SInfoResultType.waterlevelDifference.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("waterleveldifference_header2", result.getWaterlevelDifferenceLabel());
-
-        source.addMetaData("bedheightdifference_header", SInfoResultType.bedHeightDifference.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("bedheightdifference_header2", result.getBedHeightDifferenceLabel());
-
-        source.addMetaData("flowdepthcurrent_header", SInfoResultType.flowdepthCurrent.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("flowdepthcurrent_header2", result.getFlowDepthCurrentLabel());
-
-        source.addMetaData("flowdepthhistorical_header", SInfoResultType.flowdepthHistorical.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("flowdepthhistorical_header2", result.getFlowDepthHistoricalLabel());
-
-        source.addMetaData("location_header", SInfoResultType.location.getPdfHeader(this.context.getMeta()));
-    }
-
-    @Override
-    protected void writePDF(final OutputStream out) {
+    protected void doWritePdf(final OutputStream out, final FlowDepthDevelopmentCalculationResults results) {
+        // TODO: Move to super //2 lines different
         try {
-            final MetaAndTableJRDataSource source = createJRData(this.data);
+            final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null);
 
             final JasperReporter reporter = new JasperReporter();
-            reporter.addReport(JASPER_FILE, source);
+
+            for (final AbstractCalculationExportableResult<FlowDepthDevelopmentCalculationResults> result : results.getResults()) {
+                final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+                getHelper().addJRMetaDataUSINFO(source, results);
+
+                // move somewhere? global meta
+                source.addMetaData("flowdepthdevelopment", result.getLabel());
+                source.addMetaData("flowdepthdevelopment_header_label", SInfoResultType.flowdepthDevelopment.getCsvHeader(this.context.getMeta()));// (this.context.getMeta()));
+
+                result.addReport(exportContextCSV, results, reporter, source);
+            }
+
             reporter.exportPDF(out);
         }
         catch (final JRException je) {
             getLog().warn("Error generating PDF Report!", je);
         }
     }
-
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentState.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentState.java	Thu Jun 14 17:03:53 2018 +0200
@@ -78,6 +78,7 @@
         final FlowDepthDevelopmentCalculationResults results = (FlowDepthDevelopmentCalculationResults) res.getData();
         final FlowDepthDevelopmentCalculationResult result = results.getResult();
         if (result != null) {
+            // final FlowDepthDevelopmentCalculationResult result = (FlowDepthDevelopmentCalculationResult) resultList.get(0);
             /* add themes for chart, for each result */
             final int index = 0;
 
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxCalculationResult.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxCalculationResult.java	Thu Jun 14 17:03:53 2018 +0200
@@ -9,11 +9,17 @@
  */
 package org.dive4elements.river.artifacts.sinfo.flowdepthminmax;
 
+import java.util.ArrayList;
 import java.util.Collection;
 
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.ExportContextCSV;
+import org.dive4elements.river.artifacts.common.GeneralResultType;
+import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
 import org.dive4elements.river.artifacts.common.ResultRow;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoCalculationResult;
+import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
 import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
 
 /**
@@ -21,20 +27,112 @@
  *
  * @author Gernot Belger
  */
-final class FlowDepthMinMaxCalculationResult extends AbstractSInfoCalculationResult {
+final class FlowDepthMinMaxCalculationResult extends AbstractCalculationExportableResult<FlowDepthMinMaxCalculationResults> {
 
     private static final long serialVersionUID = 1L;
+    private static final String JASPER_FILE = "/jasper/templates/sinfo.flowdepthminmax.jrxml";
 
     private final BedHeightInfo sounding;
+    private final WstInfo wst;
 
-    public FlowDepthMinMaxCalculationResult(final String label, final WstInfo wst, final BedHeightInfo sounding,
-            final Collection<ResultRow> rows) {
-        super(label, wst, rows);
-
+    public FlowDepthMinMaxCalculationResult(final String label, final WstInfo wst, final BedHeightInfo sounding, final Collection<ResultRow> rows) {
+        super(label, rows);
+        this.wst = wst;
         this.sounding = sounding;
     }
 
     public BedHeightInfo getSounding() {
         return this.sounding;
     }
+
+    @Override
+    public void writeCSVHeader(final ExportContextCSV exportContextCSV, final FlowDepthMinMaxCalculationResults results, final RiverInfo river) {
+
+        final Collection<String> header = new ArrayList<>(11);
+
+        header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station));
+        header.add(exportContextCSV.msgUnitCSV(SInfoResultType.flowdepthmin));
+        header.add(exportContextCSV.msgUnitCSV(SInfoResultType.flowdepthmax));
+        header.add(exportContextCSV.msgUnitCSV(SInfoResultType.waterlevel, river.getWstUnit()));
+        header.add(exportContextCSV.msgUnitCSV(SInfoResultType.discharge));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.waterlevelLabel));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.gaugeLabel));
+        header.add(exportContextCSV.msgUnitCSV(SInfoResultType.meanBedHeight, river.getWstUnit()));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.soundingLabel));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.location));
+
+        exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
+
+    }
+
+    @Override
+    protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final FlowDepthMinMaxCalculationResults results) {
+
+        exportContextCSV.writeCSVSoundingMetadata(this.sounding);
+        exportContextCSV.writeBlankLine();
+
+        exportContextCSV.writeCSVWaterlevelMetadata(this.wst);
+        exportContextCSV.writeBlankLine();
+
+    }
+
+    @Override
+    protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final FlowDepthMinMaxCalculationResults results, final ResultRow row) {
+
+        return formatRow(exportContextCSV, results, row);
+    }
+
+    @Override
+    protected String[] formatPDFRow(final ExportContextCSV exportContextPDF, final FlowDepthMinMaxCalculationResults results, final ResultRow row) {
+
+        return formatRow(exportContextPDF, results, row);
+    }
+
+    @Override
+    protected String getJasperFile() {
+        return this.JASPER_FILE;
+    }
+
+    @Override
+    protected void addJRTableHeader(final ExportContextCSV exportContextPDF, final MetaAndTableJRDataSource source,
+            final FlowDepthMinMaxCalculationResults results) {
+
+        /* column headings */
+        exportContextPDF.addJRMetadata(source, "station_header", GeneralResultType.station);
+        exportContextPDF.addJRMetadata(source, "flowdepthmin_header", SInfoResultType.flowdepthmin);
+        exportContextPDF.addJRMetadata(source, "flowdepthmax_header", SInfoResultType.flowdepthmax);
+        exportContextPDF.addJRMetadata(source, "waterlevel_header", SInfoResultType.waterlevel);
+        exportContextPDF.addJRMetadata(source, "discharge_header", SInfoResultType.discharge);
+        exportContextPDF.addJRMetadata(source, "waterlevel_name_header", SInfoResultType.waterlevelLabel);
+        exportContextPDF.addJRMetadata(source, "gauge_header", SInfoResultType.gaugeLabel);
+        exportContextPDF.addJRMetadata(source, "bedheight_header", SInfoResultType.meanBedHeight);
+        exportContextPDF.addJRMetadata(source, "sounding_name_header", SInfoResultType.soundingLabel);
+        exportContextPDF.addJRMetadata(source, "location_header", SInfoResultType.location);
+
+    }
+
+    protected String[] formatRow(final ExportContextCSV exportContextCSV, final FlowDepthMinMaxCalculationResults results, final ResultRow row) {
+
+        final Collection<String> lines = new ArrayList<>(10);
+
+        lines.add(exportContextCSV.formatRowValue(row, GeneralResultType.station));
+
+        // REMARK: null check as pdf will call this with null and in that case we show all columns (to avoid multiple jasper
+        // FIXME: does not work like this: we may have several pairs of min/max; so we need to look at all of them?
+        // templates)
+        // if (result == null || result.getMinSounding() != null)
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.flowdepthmin));
+        // if (result == null || result.getMaxSounding() != null)
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.flowdepthmax));
+
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.waterlevel));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.discharge));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.waterlevelLabel));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.gaugeLabel));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.meanBedHeight));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.soundingLabel));
+        lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.location));
+
+        return lines.toArray(new String[lines.size()]);
+    }
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxCalculationResults.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxCalculationResults.java	Thu Jun 14 17:03:53 2018 +0200
@@ -10,13 +10,14 @@
 package org.dive4elements.river.artifacts.sinfo.flowdepthminmax;
 
 import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoCalculationResults;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationListResults;
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 
 /**
  * @author Gernot Belger
  */
-final class FlowDepthMinMaxCalculationResults extends AbstractSInfoCalculationResults<FlowDepthMinMaxCalculationResult> {
+final class FlowDepthMinMaxCalculationResults extends AbstractCalculationListResults<AbstractCalculationExportableResult<FlowDepthMinMaxCalculationResults>> {
 
     private static final long serialVersionUID = 1L;
 
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxExporter.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxExporter.java	Thu Jun 14 17:03:53 2018 +0200
@@ -9,19 +9,13 @@
 package org.dive4elements.river.artifacts.sinfo.flowdepthminmax;
 
 import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
 
-import org.apache.log4j.Logger;
-import org.dive4elements.river.artifacts.common.GeneralResultType;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCommonExporter;
+import org.dive4elements.river.artifacts.common.ExportContextCSV;
 import org.dive4elements.river.artifacts.common.JasperReporter;
 import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
-import org.dive4elements.river.artifacts.common.ResultRow;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoExporter;
-import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
-import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo;
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
 
 import au.com.bytecode.opencsv.CSVWriter;
 import net.sf.jasperreports.engine.JRException;
@@ -33,122 +27,23 @@
  * @author Gernot Belger
  */
 // REMARK: must be public because its registered in generators.xml
-public class FlowDepthMinMaxExporter extends AbstractSInfoExporter<FlowDepthMinMaxCalculationResult, FlowDepthMinMaxCalculationResults> {
-
-    /** The log used in this exporter. */
-    private static Logger log = Logger.getLogger(FlowDepthMinMaxExporter.class);
-
-    private static final String JASPER_FILE = "/jasper/templates/sinfo.flowdepthminmax.jrxml";
-
-    @Override
-    protected Logger getLog() {
-        return log;
-    }
-
-    @Override
-    protected void writeCSVResultMetadata(final CSVWriter writer, final FlowDepthMinMaxCalculationResults results,
-            final FlowDepthMinMaxCalculationResult result) {
-
-        final BedHeightInfo sounding = result.getSounding();
-        super.writeCSVSoundingMetadata(writer, sounding);
-        writer.writeNext(new String[] { "" }); // break line
-        final WstInfo wst = result.getWst();
-        writeCSVWaterlevelMetadata(writer, wst);
-        writer.writeNext(new String[] { "" }); // break line
-    }
+public class FlowDepthMinMaxExporter extends AbstractCommonExporter<FlowDepthMinMaxCalculationResults> {
 
     @Override
-    protected void writeCSVGlobalMetadata(final CSVWriter writer, final FlowDepthMinMaxCalculationResults results) {
-
-        super.writeCSVGlobalMetadataDefaults(writer, results);
-    }
-
-    /**
-     * Write the header, with different headings depending on whether at a
-     * gauge or at a location.
-     *
-     * @param river
-     * @param useTkh
-     */
-    @Override
-    protected void writeCSVHeader(final CSVWriter writer, final FlowDepthMinMaxCalculationResults results, final RiverInfo river) {
-        log.info("FlowDepthExporter.writeCSVHeader");
-
-        final Collection<String> header = new ArrayList<>(11);
-
-        header.add(msg(GeneralResultType.station.getCsvHeader()));
-        header.add(msgUnit(SInfoResultType.flowdepthmin.getCsvHeader(), SInfoResultType.flowdepthmin.getUnit()));
-        header.add(msgUnit(SInfoResultType.flowdepthmax.getCsvHeader(), SInfoResultType.flowdepthmax.getUnit()));
-        header.add(msgUnit(SInfoResultType.waterlevel.getCsvHeader(), river.getWstUnit()));
-        header.add(msgUnit(SInfoResultType.discharge.getCsvHeader(), SInfoResultType.discharge.getUnit()));
-        header.add(msg(SInfoResultType.waterlevelLabel.getCsvHeader()));
-        header.add(msg(SInfoResultType.gaugeLabel.getCsvHeader()));
-        header.add(msgUnit(SInfoResultType.meanBedHeight.getCsvHeader(), river.getWstUnit()));
-        header.add(msg(SInfoResultType.soundingLabel.getCsvHeader()));
-        header.add(msg(SInfoResultType.location.getCsvHeader()));
-
-        writer.writeNext(header.toArray(new String[header.size()]));
-    }
-
-    /**
-     * Format a row of a flow depth result into an array of string, both used by csv and pdf
-     *
-     * @param result
-     *
-     * @param useTkh
-     */
-    @Override
-    protected String[] formatRow(final FlowDepthMinMaxCalculationResults results, final ResultRow row, final ExportMode mode) {
-
-        final Collection<String> lines = new ArrayList<>(10);
-
-        lines.add(row.exportValue(this.context, GeneralResultType.station));
-
-        // REMARK: null check as pdf will call this with null and in that case we show all columns (to avoid multiple jasper
-        // FIXME: does not work like this: we may have several pairs of min/max; so we need to look at all of them?
-        // templates)
-        // if (result == null || result.getMinSounding() != null)
-        lines.add(row.exportValue(this.context, SInfoResultType.flowdepthmin));
-        // if (result == null || result.getMaxSounding() != null)
-        lines.add(row.exportValue(this.context, SInfoResultType.flowdepthmax));
-
-        lines.add(row.exportValue(this.context, SInfoResultType.waterlevel));
-        lines.add(row.exportValue(this.context, SInfoResultType.discharge));
-        lines.add(row.exportValue(this.context, SInfoResultType.waterlevelLabel));
-        lines.add(row.exportValue(this.context, SInfoResultType.gaugeLabel));
-        lines.add(row.exportValue(this.context, SInfoResultType.meanBedHeight));
-        lines.add(row.exportValue(this.context, SInfoResultType.soundingLabel));
-        lines.add(row.exportValue(this.context, SInfoResultType.location));
-
-        return lines.toArray(new String[lines.size()]);
-    }
-
-    @Override
-    protected final void addJRMetaData(final MetaAndTableJRDataSource source, final FlowDepthMinMaxCalculationResults results) {
-
-        /* general metadata */
-        super.addJRMetaData(source, results);
-
-        /* column headings */
-        source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("flowdepthmin_header", SInfoResultType.flowdepthmin.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("flowdepthmax_header", SInfoResultType.flowdepthmax.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("waterlevel_header", SInfoResultType.waterlevel.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("discharge_header", SInfoResultType.discharge.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("waterlevel_name_header", SInfoResultType.waterlevelLabel.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("gauge_header", SInfoResultType.gaugeLabel.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("bedheight_header", SInfoResultType.meanBedHeight.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("sounding_name_header", SInfoResultType.soundingLabel.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("location_header", SInfoResultType.location.getPdfHeader(this.context.getMeta()));
-    }
-
-    @Override
-    protected void writePDF(final OutputStream out) {
+    protected void doWritePdf(final OutputStream out, final FlowDepthMinMaxCalculationResults results) {
+        // TODO: Move to super
         try {
-            final MetaAndTableJRDataSource source = createJRData(this.data);
+            final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null);
 
             final JasperReporter reporter = new JasperReporter();
-            reporter.addReport(JASPER_FILE, source);
+
+            for (final AbstractCalculationExportableResult<FlowDepthMinMaxCalculationResults> result : results.getResults()) {
+                final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+                getHelper().addJRMetaDataUSINFO(source, results);
+
+                result.addReport(exportContextCSV, results, reporter, source);
+            }
+
             reporter.exportPDF(out);
         }
         catch (final JRException je) {
@@ -156,4 +51,36 @@
         }
     }
 
+    @Override
+    protected void doWriteCSVData(final CSVWriter writer, final FlowDepthMinMaxCalculationResults results) {
+        // TODO: Diesen Ablauf in super?
+
+        // TODO: move results into context?
+        final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer);
+
+        getLog().info("writeCSVData");
+
+        /* write as csv */
+        exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse
+
+        // writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+
+        final RiverInfo river = results.getRiver();
+
+        final Class<?> lastResultType = null;
+
+        for (final AbstractCalculationExportableResult<FlowDepthMinMaxCalculationResults> result : results.getResults()) {
+
+            final Class<?> resultType = result.getClass();
+            if (lastResultType == null || lastResultType != resultType) {
+                exportContextCSV.writeBlankLine();
+                result.writeCSVHeader(exportContextCSV, results, river);
+                exportContextCSV.writeBlankLine();
+            } else
+                exportContextCSV.writeCSVLine(new String[] { "#" });
+
+            result.writeCsv(exportContextCSV, results);
+        }
+
+    }
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxState.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxState.java	Thu Jun 14 17:03:53 2018 +0200
@@ -14,6 +14,7 @@
 import org.dive4elements.artifacts.CallContext;
 import org.dive4elements.river.artifacts.ChartArtifact;
 import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
 import org.dive4elements.river.artifacts.model.Calculation;
 import org.dive4elements.river.artifacts.model.CalculationResult;
 import org.dive4elements.river.artifacts.model.DataFacet;
@@ -76,10 +77,10 @@
         final FlowDepthMinMaxCalculationResults results = (FlowDepthMinMaxCalculationResults) res.getData();
 
         /* add themes for chart, for each result */
-        final List<FlowDepthMinMaxCalculationResult> resultList = results.getResults();
+        final List<AbstractCalculationExportableResult<FlowDepthMinMaxCalculationResults>> resultList = results.getResults();
         for (int index = 0; index < resultList.size(); index++) {
 
-            final FlowDepthMinMaxCalculationResult result = resultList.get(index);
+            final FlowDepthMinMaxCalculationResult result = (FlowDepthMinMaxCalculationResult) resultList.get(index);
 
             /* filtered (zoom dependent mean) flow depth */
             facets.add(FlowDepthProcessor.createFlowDepthMinFilteredFacet(context, hash, this.id, result, index));
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhCalculationResult.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhCalculationResult.java	Thu Jun 14 17:03:53 2018 +0200
@@ -9,10 +9,16 @@
  */
 package org.dive4elements.river.artifacts.sinfo.tkhstate;
 
+import java.util.ArrayList;
 import java.util.Collection;
 
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.ExportContextCSV;
+import org.dive4elements.river.artifacts.common.GeneralResultType;
+import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
 import org.dive4elements.river.artifacts.common.ResultRow;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractTkhCalculationResult;
+import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
 
 /**
@@ -20,11 +26,109 @@
  *
  * @author Gernot Belger
  */
-final class TkhCalculationResult extends AbstractTkhCalculationResult {
+final class TkhCalculationResult extends AbstractCalculationExportableResult<TkhCalculationResults> {
 
     private static final long serialVersionUID = 1L;
+    private static final String JASPER_FILE = "/jasper/templates/sinfo.tkh.jrxml";
+    private final boolean hasTkh;
+    private final WstInfo wst;
+
+    private enum ExportMode {
+        pdf, csv
+    }
 
     public TkhCalculationResult(final String label, final WstInfo wst, final boolean hasTkh, final Collection<ResultRow> rows) {
-        super(label, wst, hasTkh, rows);
+        super(label, rows);
+        this.hasTkh = hasTkh;
+        this.wst = wst;
     }
+
+    @Override
+    public void writeCSVHeader(final ExportContextCSV exportContextCSV, final TkhCalculationResults results, final RiverInfo river) {
+
+        final Collection<String> header = new ArrayList<>(11);
+
+        header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station));
+        header.add(exportContextCSV.msgUnitCSV(SInfoResultType.tkh));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.soilkind));
+        header.add(exportContextCSV.msgUnitCSV(SInfoResultType.meanBedHeight, river.getWstUnit()));
+        header.add(exportContextCSV.msgUnitCSV(SInfoResultType.waterlevel, river.getWstUnit()));
+        header.add(exportContextCSV.msgUnitCSV(SInfoResultType.discharge));
+
+        final String descriptionHeader = results.getDescriptionHeader();
+        if (descriptionHeader != null)
+            header.add(descriptionHeader);
+
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.gaugeLabel));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.location));
+
+        exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
+
+    }
+
+    @Override
+    protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final TkhCalculationResults results) {
+        exportContextCSV.writeCSVWaterlevelMetadata(this.wst);
+        exportContextCSV.writeBlankLine();
+    }
+
+    @Override
+    protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final TkhCalculationResults results, final ResultRow row) {
+
+        return this.formatRow(exportContextCSV, results, row, ExportMode.csv);
+    }
+
+    @Override
+    protected String[] formatPDFRow(final ExportContextCSV exportContextPDF, final TkhCalculationResults results, final ResultRow row) {
+
+        return this.formatRow(exportContextPDF, results, row, ExportMode.pdf);
+    }
+
+    @Override
+    protected String getJasperFile() {
+        return JASPER_FILE;
+    }
+
+    @Override
+    protected void addJRTableHeader(final ExportContextCSV exportContextPDF, final MetaAndTableJRDataSource source, final TkhCalculationResults results) {
+        /* column headings */
+        exportContextPDF.addJRMetadata(source, "station_header", GeneralResultType.station);
+        exportContextPDF.addJRMetadata(source, "tkh_header", SInfoResultType.tkh);
+        exportContextPDF.addJRMetadata(source, "tkhkind_header", SInfoResultType.soilkind);
+        exportContextPDF.addJRMetadata(source, "bedheight_header", SInfoResultType.meanBedHeight);
+        exportContextPDF.addJRMetadata(source, "waterlevel_header", SInfoResultType.waterlevel);
+        exportContextPDF.addJRMetadata(source, "discharge_header", SInfoResultType.discharge);
+
+        // REMARK: actually the column makes no sense if description header is null. But (software symmetry...) WINFO also
+        // writes an empty column into the pdf in that case (most probably to avoid the need for two jasper templates).
+        final String descriptionHeader = results.getDescriptionHeader();
+        final String waterlevelNameHeader = descriptionHeader == null ? exportContextPDF.msgPdf(SInfoResultType.waterlevelLabel) : descriptionHeader;
+        exportContextPDF.addJRMetadata(source, "waterlevel_name_header", waterlevelNameHeader);
+
+        exportContextPDF.addJRMetadata(source, "gauge_header", SInfoResultType.gaugeLabel);
+        exportContextPDF.addJRMetadata(source, "location_header", SInfoResultType.location);
+
+    }
+
+    private String[] formatRow(final ExportContextCSV exportContext, final TkhCalculationResults results, final ResultRow row, final ExportMode mode) {
+
+        final Collection<String> lines = new ArrayList<>(11);
+
+        lines.add(exportContext.formatRowValue(row, GeneralResultType.station));
+        lines.add(exportContext.formatRowValue(row, SInfoResultType.tkh));
+        lines.add(exportContext.formatRowValue(row, SInfoResultType.soilkind));
+        lines.add(exportContext.formatRowValue(row, SInfoResultType.meanBedHeight));
+        lines.add(exportContext.formatRowValue(row, SInfoResultType.waterlevel));
+        lines.add(exportContext.formatRowValue(row, SInfoResultType.discharge));
+
+        // REMARK: always export this column in pdf-mode, because WInfo also does it (no need for two jasper-templates).
+        if (results.getDescriptionHeader() != null || mode == ExportMode.pdf)
+            lines.add(exportContext.formatRowValue(row, SInfoResultType.waterlevelLabel));
+
+        lines.add(exportContext.formatRowValue(row, SInfoResultType.gaugeLabel));
+        lines.add(exportContext.formatRowValue(row, SInfoResultType.location));
+
+        return lines.toArray(new String[lines.size()]);
+    }
+
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhCalculationResults.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhCalculationResults.java	Thu Jun 14 17:03:53 2018 +0200
@@ -10,13 +10,14 @@
 package org.dive4elements.river.artifacts.sinfo.tkhstate;
 
 import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoCalculationResults;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationListResults;
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 
 /**
  * @author Gernot Belger
  */
-final class TkhCalculationResults extends AbstractSInfoCalculationResults<TkhCalculationResult> {
+final class TkhCalculationResults extends AbstractCalculationListResults<AbstractCalculationExportableResult<TkhCalculationResults>> {
 
     private static final long serialVersionUID = 1L;
 
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhExporter.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhExporter.java	Thu Jun 14 17:03:53 2018 +0200
@@ -9,18 +9,13 @@
 package org.dive4elements.river.artifacts.sinfo.tkhstate;
 
 import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
 
-import org.apache.log4j.Logger;
-import org.dive4elements.river.artifacts.common.GeneralResultType;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCommonExporter;
+import org.dive4elements.river.artifacts.common.ExportContextCSV;
 import org.dive4elements.river.artifacts.common.JasperReporter;
 import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
-import org.dive4elements.river.artifacts.common.ResultRow;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoExporter;
-import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
 
 import au.com.bytecode.opencsv.CSVWriter;
 import net.sf.jasperreports.engine.JRException;
@@ -31,147 +26,67 @@
  * @author Gernot Belger
  */
 // REMARK: must be public because its registered in generators.xml
-public class TkhExporter extends AbstractSInfoExporter<TkhCalculationResult, TkhCalculationResults> {
-
-    /** The log used in this exporter. */
-    private static Logger log = Logger.getLogger(TkhExporter.class);
+public class TkhExporter extends AbstractCommonExporter<TkhCalculationResults> {
 
     private static final String CSV_META_CALCULATION_FORMULA = "sinfo.export.tkh.calculation.formula";
 
-    private static final String JASPER_FILE = "/jasper/templates/sinfo.tkh.jrxml";
-
-    @Override
-    protected Logger getLog() {
-        return log;
-    }
-
-    @Override
-    protected void writeCSVGlobalMetadata(final CSVWriter writer, final TkhCalculationResults results) {
-        log.info("TkhExporter.writeCSVMeta");
-
-        super.writeCSVGlobalMetadataDefaults(writer, results);
-
-        // "# Berechnungsgrundlage: Gleichung nach GILL (1971)"
-        writeCSVMetaEntry(writer, CSV_META_CALCULATION_FORMULA);
-    }
-
-    /**
-     * Write the header, with different headings depending on whether at a gauge or at a location.
-     */
-
-    @Override
-    protected void writeCSVHeader(final CSVWriter writer, final TkhCalculationResults results, final RiverInfo river) {
-        log.info("TkhExporter.writeCSVHeader");
-
-        final Collection<String> header = new ArrayList<>(11);
-
-        header.add(msg(GeneralResultType.station.getCsvHeader()));
-        header.add(msgUnit(SInfoResultType.tkh.getCsvHeader(), SInfoResultType.tkh.getUnit()));
-        header.add(msg(SInfoResultType.soilkind.getCsvHeader()));
-        header.add(msgUnit(SInfoResultType.meanBedHeight.getCsvHeader(), river.getWstUnit()));
-        header.add(msgUnit(SInfoResultType.waterlevel.getCsvHeader(), river.getWstUnit()));
-        header.add(msgUnit(SInfoResultType.discharge.getCsvHeader(), SInfoResultType.discharge.getUnit()));
-
-        final String descriptionHeader = results.getDescriptionHeader();
-        if (descriptionHeader != null)
-            header.add(msg(descriptionHeader));
-
-        header.add(msg(SInfoResultType.gaugeLabel.getCsvHeader()));
-        header.add(msg(SInfoResultType.location.getCsvHeader()));
-
-        writer.writeNext(header.toArray(new String[header.size()]));
-    }
-
     @Override
-    protected void writeCSVResultMetadata(final CSVWriter writer, final TkhCalculationResults results, final TkhCalculationResult result) {
-
-        final WstInfo wst = result.getWst();
-        super.writeCSVWaterlevelMetadata(writer, wst);
-
-        // REAMRK:
-        // "# W/Pegel [cm]: " (nur bei Eingabe des Wasserstands am Pegel)
-        // "# Q (m³/s): " (nur bei Eingabe des Durchflusses)
-        // WaterlevelEXporter does this
-        // final WaterlevelDescriptionBuilder descBuilder = new WaterlevelDescriptionBuilder((D4EArtifact) this.master,
-        // this.context);
-        // final String metadata = descBuilder.getMetadata();
-        // BUT:
-        // - the WINFO results do not contain this info per wst
-        // - the WaterlevelExporter prints this in the global header for all waterlevels, simply based on the input fields
-        // - instead we would want tis information per waterlevel
-        // - the metadata 'Bezeichnung WST' contains exactly the wanted data
-
-        writer.writeNext(new String[] { "" }); // break line
-    }
-
-    /**
-     * Format a row of a flow depth result into an array of string, both used by csv and pdf
-     *
-     * @param results
-     *
-     * @param useTkh
-     */
-    @Override
-    protected String[] formatRow(final TkhCalculationResults results, final ResultRow row, final ExportMode mode) {
-
-        final Collection<String> lines = new ArrayList<>(11);
-
-        lines.add(row.exportValue(this.context, GeneralResultType.station));
-        lines.add(row.exportValue(this.context, SInfoResultType.tkh));
-        lines.add(row.exportValue(this.context, SInfoResultType.soilkind));
-        lines.add(row.exportValue(this.context, SInfoResultType.meanBedHeight));
-        lines.add(row.exportValue(this.context, SInfoResultType.waterlevel));
-        lines.add(row.exportValue(this.context, SInfoResultType.discharge));
-
-        // REMARK: always export this column in pdf-mode, because WInfo also does it (no need for two jasper-templates).
-        if (results.getDescriptionHeader() != null || mode == ExportMode.pdf)
-            lines.add(row.exportValue(this.context, SInfoResultType.waterlevelLabel));
-
-        lines.add(row.exportValue(this.context, SInfoResultType.gaugeLabel));
-        lines.add(row.exportValue(this.context, SInfoResultType.location));
-
-        return lines.toArray(new String[lines.size()]);
-    }
-
-    @Override
-    protected final void addJRMetaData(final MetaAndTableJRDataSource source, final TkhCalculationResults results) {
-
-        /* general metadata */
-        super.addJRMetaData(source, results);
-
-        source.addMetaData("calculation_label", msg("sinfo.export.flow_depth.pdf.meta.calculation.label"));
-        source.addMetaData("calculation_name", msg("sinfo.export.flow_depth.pdf.meta.calculation.name"));
-
-        /* column headings */
-        source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("tkh_header", SInfoResultType.tkh.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("tkhkind_header", SInfoResultType.soilkind.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("bedheight_header", SInfoResultType.meanBedHeight.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("waterlevel_header", SInfoResultType.waterlevel.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("discharge_header", SInfoResultType.discharge.getPdfHeader(this.context.getMeta()));
-
-        // REMARK: actually the column makes no sense if description header is null. But (software symmetry...) WINFO also
-        // writes an empty column into the pdf in that case (most probably to avoid the need for two jasper templates).
-        final String descriptionHeader = results.getDescriptionHeader();
-        final String waterlevelNameHeader = descriptionHeader == null ? SInfoResultType.waterlevelLabel.getPdfHeader(this.context.getMeta())
-                : descriptionHeader;
-        source.addMetaData("waterlevel_name_header", waterlevelNameHeader);
-
-        source.addMetaData("gauge_header", SInfoResultType.gaugeLabel.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("location_header", SInfoResultType.location.getPdfHeader(this.context.getMeta()));
-    }
-
-    @Override
-    protected void writePDF(final OutputStream out) {
+    protected void doWritePdf(final OutputStream out, final TkhCalculationResults results) {
+        // TODO: Move to super
         try {
-            final MetaAndTableJRDataSource source = createJRData(this.data);
+            final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null);
 
             final JasperReporter reporter = new JasperReporter();
-            reporter.addReport(JASPER_FILE, source);
+
+            for (final AbstractCalculationExportableResult<TkhCalculationResults> result : results.getResults()) {
+                final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+                getHelper().addJRMetaDataUSINFO(source, results);
+
+                source.addMetaData("calculation_label", msg("sinfo.export.flow_depth.pdf.meta.calculation.label"));
+                source.addMetaData("calculation_name", msg("sinfo.export.flow_depth.pdf.meta.calculation.name"));
+
+                result.addReport(exportContextCSV, results, reporter, source);
+            }
+
             reporter.exportPDF(out);
         }
         catch (final JRException je) {
             getLog().warn("Error generating PDF Report!", je);
         }
     }
+
+    @Override
+    protected void doWriteCSVData(final CSVWriter writer, final TkhCalculationResults results) {
+        // TODO: Diesen Ablauf in super? _WINZIGE ABWEICHUNG vom Standard...
+
+        // TODO: move results into context?
+        final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer);
+
+        getLog().info("writeCSVData");
+
+        /* write as csv */
+        exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse
+
+        // "# Berechnungsgrundlage: Gleichung nach GILL (1971)"
+        exportContextCSV.writeCSVMetaEntry(CSV_META_CALCULATION_FORMULA);
+
+        // writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+
+        final RiverInfo river = results.getRiver();
+
+        final Class<?> lastResultType = null;
+
+        for (final AbstractCalculationExportableResult<TkhCalculationResults> result : results.getResults()) {
+
+            final Class<?> resultType = result.getClass();
+            if (lastResultType == null || lastResultType != resultType) {
+                exportContextCSV.writeBlankLine();
+                result.writeCSVHeader(exportContextCSV, results, river);
+                exportContextCSV.writeBlankLine();
+            } else
+                exportContextCSV.writeCSVLine(new String[] { "#" });
+
+            result.writeCsv(exportContextCSV, results);
+        }
+    }
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhState.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhState.java	Thu Jun 14 17:03:53 2018 +0200
@@ -14,6 +14,7 @@
 import org.dive4elements.artifacts.CallContext;
 import org.dive4elements.river.artifacts.ChartArtifact;
 import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
 import org.dive4elements.river.artifacts.model.Calculation;
 import org.dive4elements.river.artifacts.model.CalculationResult;
 import org.dive4elements.river.artifacts.model.DataFacet;
@@ -80,10 +81,10 @@
         final TkhCalculationResults results = (TkhCalculationResults) res.getData();
 
         /* add themes for chart, for each result */
-        final List<TkhCalculationResult> resultList = results.getResults();
+        final List<AbstractCalculationExportableResult<TkhCalculationResults>> resultList = results.getResults();
         for (int index = 0; index < resultList.size(); index++) {
 
-            final TkhCalculationResult result = resultList.get(index);
+            final TkhCalculationResult result = (TkhCalculationResult) resultList.get(index);
 
             facets.add(TkhProcessor.createTkhFacet(context, hash, this.id, result, index));
 
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/commons/AbstractUInfoExporter.java	Thu Jun 14 16:58:35 2018 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
- * Software engineering by
- *  Björnsen Beratende Ingenieure GmbH
- *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
- *
- * This file is Free Software under the GNU AGPL (>=v3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out the
- * documentation coming with Dive4Elements River for details.
- */
-package org.dive4elements.river.artifacts.uinfo.commons;
-
-import java.text.DateFormat;
-import java.text.NumberFormat;
-import java.util.Date;
-import java.util.Locale;
-
-import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.FLYS;
-import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
-import org.dive4elements.river.artifacts.common.AbstractCalculationResults;
-import org.dive4elements.river.artifacts.common.AbstractCommonExporter;
-import org.dive4elements.river.artifacts.common.I18NStrings;
-import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
-import org.dive4elements.river.artifacts.resources.Resources;
-import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-
-import au.com.bytecode.opencsv.CSVWriter;
-
-/**
- * @author Gernot Belger
- */
-public abstract class AbstractUInfoExporter<RESULT extends AbstractCalculationResult, RESULTS extends AbstractCalculationResults<RESULT>> extends AbstractCommonExporter<RESULT, RESULTS> {
-
-    @Override
-    protected void addJRMetaData(final MetaAndTableJRDataSource source, final RESULTS results) {
-
-        /* general metadata */
-        this.addJRMetaDataDefaults(source, results);
-
-        /* general metadata */
-        this.addJRMetaDataDefaults(source, results);
-
-        final RiverInfo river = results.getRiver();
-        final String wstUnitName = river.getWstUnit();
-
-        source.addMetaData("river_label", msg(I18NStrings.CSV_META_RIVER_LABEL));
-        source.addMetaData("river", river.getName());
-        source.addMetaData("river_unit", wstUnitName);
-
-        source.addMetaData("range_label", msg(I18NStrings.CSV_META_RANGE_LABEL));
-        final DoubleRange calcRange = results.getCalcRange();
-        final NumberFormat kmFormatter = getKmFormatter();
-        if (calcRange != null) {
-            final String rangeValue = String.format("%s - %s", kmFormatter.format(calcRange.getMinimumDouble()),
-                    kmFormatter.format(calcRange.getMaximumDouble()));
-            source.addMetaData("range", rangeValue);
-        }
-
-        /* column headings */
-        // source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta())); // moved to
-        // super
-
-        // TODO: move to subs
-        // source.addMetaData("flowdepth_header", SInfoResultType.flowdepth.getPdfHeader(this.context.getMeta()));
-        // source.addMetaData("flowdepth_tkh_header", SInfoResultType.flowdepthtkh.getPdfHeader(this.context.getMeta()));
-        // source.addMetaData("tkh_header", SInfoResultType.tkh.getPdfHeader(this.context.getMeta()));
-        // source.addMetaData("waterlevel_header", SInfoResultType.waterlevel.getPdfHeader(this.context.getMeta()));
-        // source.addMetaData("discharge_header", SInfoResultType.discharge.getPdfHeader(this.context.getMeta()));
-
-    }
-
-    @Override
-    protected void writeCSVGlobalMetadataDefaults(final CSVWriter writer, final RESULTS results) {
-
-        final String calcModeLabel = results.getCalcModeLabel();
-        final RiverInfo river = results.getRiver();
-        final DoubleRange calcRange = results.getCalcRange();
-
-        writeCSVMetaEntry(writer, I18NStrings.CSV_META_HEADER_RESULT, msg(I18NStrings.CSV_META_HEADER_RESULT_LABEL), river.getName(), calcModeLabel);
-
-        // "# FLYS-Version: "
-        writeCSVMetaEntry(writer, I18NStrings.CSV_META_VERSION, msg(I18NStrings.CSV_META_VERSION_LABEL), FLYS.VERSION);
-
-        // "# Bearbeiter: "
-        writeCSVMetaEntry(writer, I18NStrings.CSV_META_USER, msg(I18NStrings.CSV_META_USER_LABEL), results.getUser());
-
-        // "# Datum der Erstellung: "
-        final Locale locale = Resources.getLocale(this.context.getMeta());
-        final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
-        writeCSVMetaEntry(writer, I18NStrings.CSV_META_CREATION, msg(I18NStrings.CSV_META_CREATION_LABEL), df.format(new Date()));
-
-        // "# Gewässer: "
-        writeCSVMetaEntry(writer, I18NStrings.CSV_META_RIVER, msg(I18NStrings.CSV_META_RIVER_LABEL), river.getName());
-
-        if (calcRange != null) {
-            // "# Ort/Bereich (km): "
-            writeCSVMetaEntry(writer, I18NStrings.CSV_META_RANGE, msg(I18NStrings.CSV_META_RANGE_LABEL), getKmFormatter().format(calcRange.getMinimumDouble()),
-                    getKmFormatter().format(calcRange.getMaximumDouble()));
-        }
-    }
-
-    @Override
-    protected void addJRMetaDataDefaults(final MetaAndTableJRDataSource source, final RESULTS results) {
-
-        source.addMetaData("header", msg(I18NStrings.CSV_META_HEADER_RESULT_LABEL));
-        source.addMetaData("calcMode", results.getCalcModeLabel());
-
-        source.addMetaData("version_label", msg(I18NStrings.CSV_META_VERSION_LABEL));
-        source.addMetaData("version", FLYS.VERSION);
-
-        source.addMetaData("user_label", msg(I18NStrings.CSV_META_USER_LABEL));
-        source.addMetaData("user", results.getUser());
-
-        final Locale locale = Resources.getLocale(this.context.getMeta());
-        final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
-        source.addMetaData("date_label", msg(I18NStrings.CSV_META_CREATION_LABEL));
-        source.addMetaData("date", df.format(new Date()));
-
-    }
-
-}
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationCalculation.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationCalculation.java	Thu Jun 14 17:03:53 2018 +0200
@@ -16,6 +16,7 @@
 import org.apache.commons.lang.math.DoubleRange;
 import org.dive4elements.artifacts.CallContext;
 import org.dive4elements.river.artifacts.access.RiverAccess;
+import org.dive4elements.river.artifacts.common.GeneralResultType;
 import org.dive4elements.river.artifacts.common.ResultRow;
 import org.dive4elements.river.artifacts.model.Calculation;
 import org.dive4elements.river.artifacts.model.CalculationResult;
@@ -63,6 +64,7 @@
         final Collection<ResultRow> rows = new ArrayList<>();
 
         final ResultRow row1 = ResultRow.create(). //
+                putValue(GeneralResultType.station, 88). //
                 putValue(SInfoResultType.discharge, 100). //
                 putValue(SInfoResultType.waterlevel, 2). //
                 putValue(SInfoResultType.gaugeLabel, "Torgau");
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationCalculationResult.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationCalculationResult.java	Thu Jun 14 17:03:53 2018 +0200
@@ -1,6 +1,6 @@
 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
- * Software engineering by 
- *  Björnsen Beratende Ingenieure GmbH 
+ * Software engineering by
+ *  Björnsen Beratende Ingenieure GmbH
  *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
  *
  * This file is Free Software under the GNU AGPL (>=v3)
@@ -9,21 +9,95 @@
  */
 package org.dive4elements.river.artifacts.uinfo.inundationduration;
 
+import java.util.ArrayList;
 import java.util.Collection;
 
-import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.ExportContextCSV;
+import org.dive4elements.river.artifacts.common.GeneralResultType;
+import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
 import org.dive4elements.river.artifacts.common.ResultRow;
+import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
 
 /**
  * @author Domenico Nardi Tironi
  */
-final class InundationDurationCalculationResult extends AbstractCalculationResult {
+final class InundationDurationCalculationResult extends AbstractCalculationExportableResult<InundationDurationCalculationResults> {
 
     private static final long serialVersionUID = 1L;
+    private static final String JASPER_FILE = "/jasper/templates/uinfo.inundationduration.jrxml";
 
-    public InundationDurationCalculationResult(final String label, final WstInfo wst, final Collection< ResultRow> rows) {
-        super(label,  rows);
+    public InundationDurationCalculationResult(final String label, final WstInfo wst, final Collection<ResultRow> rows) {
+        super(label, rows);
     }
-    
+
+    @Override
+    public void writeCSVHeader(final ExportContextCSV exportContextCSV, final InundationDurationCalculationResults results, final RiverInfo river) {
+
+        final Collection<String> header = new ArrayList<>(11);
+
+        header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station));
+        header.add(exportContextCSV.msgUnitCSV(SInfoResultType.flowdepth));
+
+        header.add(exportContextCSV.msgUnitCSV(SInfoResultType.waterlevel, river.getWstUnit()));
+        header.add(exportContextCSV.msgUnitCSV(SInfoResultType.discharge));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.waterlevelLabel));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.gaugeLabel));
+        header.add(exportContextCSV.msgUnitCSV(SInfoResultType.meanBedHeight, river.getWstUnit()));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.soundingLabel));
+        header.add(exportContextCSV.formatCsvHeader(SInfoResultType.location));
+
+        exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
+
+    }
+
+    @Override
+    protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final InundationDurationCalculationResults results) {
+        // no Result metadata so far
+    }
+
+    @Override
+    protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final InundationDurationCalculationResults results, final ResultRow row) {
+        return formatRow(exportContextCSV, results, row);
+    }
+
+    @Override
+    protected String[] formatPDFRow(final ExportContextCSV exportContextPDF, final InundationDurationCalculationResults results, final ResultRow row) {
+
+        return formatRow(exportContextPDF, results, row);
+    }
+
+    @Override
+    protected String getJasperFile() {
+
+        return JASPER_FILE;
+    }
+
+    @Override
+    protected void addJRTableHeader(final ExportContextCSV exportContextPDF, final MetaAndTableJRDataSource source,
+            final InundationDurationCalculationResults results) {
+
+        exportContextPDF.addJRMetadata(source, "station_header", GeneralResultType.station);
+    }
+
+    protected String[] formatRow(final ExportContextCSV context, final InundationDurationCalculationResults results, final ResultRow row) {
+
+        final Collection<String> lines = new ArrayList<>(11);
+
+        lines.add(context.formatRowValue(row, GeneralResultType.station));
+        lines.add(context.formatRowValue(row, SInfoResultType.flowdepth));
+
+        lines.add(context.formatRowValue(row, SInfoResultType.waterlevel));
+        lines.add(context.formatRowValue(row, SInfoResultType.discharge));
+        lines.add(context.formatRowValue(row, SInfoResultType.waterlevelLabel));
+        lines.add(context.formatRowValue(row, SInfoResultType.gaugeLabel));
+        lines.add(context.formatRowValue(row, SInfoResultType.meanBedHeight));
+        lines.add(context.formatRowValue(row, SInfoResultType.soundingLabel));
+        lines.add(context.formatRowValue(row, SInfoResultType.location));
+
+        return lines.toArray(new String[lines.size()]);
+    }
+
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationCalculationResults.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationCalculationResults.java	Thu Jun 14 17:03:53 2018 +0200
@@ -1,6 +1,6 @@
 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
- * Software engineering by 
- *  Björnsen Beratende Ingenieure GmbH 
+ * Software engineering by
+ *  Björnsen Beratende Ingenieure GmbH
  *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
  *
  * This file is Free Software under the GNU AGPL (>=v3)
@@ -10,14 +10,15 @@
 package org.dive4elements.river.artifacts.uinfo.inundationduration;
 
 import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.artifacts.common.AbstractCalculationResults;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationListResults;
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 
 /**
  * @author Domenico Nardi Tironi
  *
  */
-final class InundationDurationCalculationResults extends AbstractCalculationResults<InundationDurationCalculationResult> {
+final class InundationDurationCalculationResults extends AbstractCalculationListResults<AbstractCalculationExportableResult<InundationDurationCalculationResults>> {
 
     private static final long serialVersionUID = 1L;
 
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationExporter.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationExporter.java	Thu Jun 14 17:03:53 2018 +0200
@@ -10,18 +10,14 @@
 package org.dive4elements.river.artifacts.uinfo.inundationduration;
 
 import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
 
-import org.apache.log4j.Logger;
-import org.dive4elements.river.artifacts.common.GeneralResultType;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCommonExporter;
+import org.dive4elements.river.artifacts.common.ExportContextCSV;
 import org.dive4elements.river.artifacts.common.I18NStrings;
 import org.dive4elements.river.artifacts.common.JasperReporter;
 import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
-import org.dive4elements.river.artifacts.common.ResultRow;
-import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-import org.dive4elements.river.artifacts.uinfo.commons.AbstractUInfoExporter;
 
 import au.com.bytecode.opencsv.CSVWriter;
 import net.sf.jasperreports.engine.JRException;
@@ -30,113 +26,23 @@
  * @author Domenico Nardi Tironi
  *
  */
-public class InundationDurationExporter extends AbstractUInfoExporter<InundationDurationCalculationResult, InundationDurationCalculationResults> {
-
-    /** The log used in this exporter. */
-    private static Logger log = Logger.getLogger(InundationDurationExporter.class);
-
-    private static final String JASPER_FILE = "/jasper/templates/uinfo.inundationduration.jrxml";
-
-    @Override
-    protected Logger getLog() {
-        return log;
-    }
-
-    @Override
-    protected void writeCSVGlobalMetadata(final CSVWriter writer, final InundationDurationCalculationResults results) {
-        log.info("SalixLineExporter.writeCSVMeta");
-
-        super.writeCSVGlobalMetadataDefaults(writer, results);
-
-        // "# Höhensystem des Flusses: "
-        writeCSVMetaEntry(writer, I18NStrings.CSV_META_HEIGHT_UNIT_RIVER, results.getRiver().getWstUnit());
-
-        writer.writeNext(new String[] { "" }); // break line
-    }
+public class InundationDurationExporter extends AbstractCommonExporter<InundationDurationCalculationResults> {
 
     @Override
-    protected void writeCSVResultMetadata(final CSVWriter writer, final InundationDurationCalculationResults results,
-            final InundationDurationCalculationResult result) {
-
-        /*
-         * final BedHeightInfo sounding = result.getSounding();
-         * super.writeCSVSoundingMetadata(writer, sounding);
-         * final WstInfo wst = result.getWst();
-         * super.writeCSVWaterlevelMetadata(writer, wst);
-         */
-    }
-
-    /**
-     * Write the header, with different headings depending on whether at a
-     * gauge or at a location.
-     *
-     * @param river
-     * @param useTkh
-     */
-    @Override
-    protected void writeCSVHeader(final CSVWriter writer, final InundationDurationCalculationResults results, final RiverInfo river) {
-        log.info("FlowDepthExporter.writeCSVHeader");
-
-        final Collection<String> header = new ArrayList<>(11);
-
-        header.add(msg(GeneralResultType.station.getCsvHeader()));
-        header.add(msgUnit(SInfoResultType.flowdepth.getCsvHeader(), SInfoResultType.flowdepth.getUnit()));
-
-        header.add(msgUnit(SInfoResultType.waterlevel.getCsvHeader(), river.getWstUnit()));
-        header.add(msgUnit(SInfoResultType.discharge.getCsvHeader(), SInfoResultType.discharge.getUnit()));
-        header.add(msg(SInfoResultType.waterlevelLabel.getCsvHeader()));
-        header.add(msg(SInfoResultType.gaugeLabel.getCsvHeader()));
-        header.add(msgUnit(SInfoResultType.meanBedHeight.getCsvHeader(), river.getWstUnit()));
-        header.add(msg(SInfoResultType.soundingLabel.getCsvHeader()));
-        header.add(msg(SInfoResultType.location.getCsvHeader()));
-
-        writer.writeNext(header.toArray(new String[header.size()]));
-    }
-
-    /**
-     * Format a row of a flow depth result into an array of string, both used by csv and pdf
-     *
-     * @param pdf
-     *
-     * @param useTkh
-     */
-    @Override
-    protected String[] formatRow(final InundationDurationCalculationResults results, final ResultRow row, final ExportMode mode) {
-
-        final Collection<String> lines = new ArrayList<>(11);
-
-        lines.add(row.exportValue(this.context, GeneralResultType.station));
-        lines.add(row.exportValue(this.context, SInfoResultType.flowdepth));
-
-        lines.add(row.exportValue(this.context, SInfoResultType.waterlevel));
-        lines.add(row.exportValue(this.context, SInfoResultType.discharge));
-        lines.add(row.exportValue(this.context, SInfoResultType.waterlevelLabel));
-        lines.add(row.exportValue(this.context, SInfoResultType.gaugeLabel));
-        lines.add(row.exportValue(this.context, SInfoResultType.meanBedHeight));
-        lines.add(row.exportValue(this.context, SInfoResultType.soundingLabel));
-        lines.add(row.exportValue(this.context, SInfoResultType.location));
-
-        return lines.toArray(new String[lines.size()]);
-    }
-
-    @Override
-    protected final void addJRMetaData(final MetaAndTableJRDataSource source, final InundationDurationCalculationResults results) {
-
-        /* general metadata */
-        super.addJRMetaData(source, results);
-
-        /* column headings */
-        source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta()));
-
-    }
-
-    @Override
-    protected void writePDF(final OutputStream out) {
+    protected void doWritePdf(final OutputStream out, final InundationDurationCalculationResults results) {
+        // TODO: Move to super
         try {
-            final MetaAndTableJRDataSource source = createJRData(this.data);
+            final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null);
 
             final JasperReporter reporter = new JasperReporter();
-            reporter.addReport(JASPER_FILE, source);
+
+            for (final AbstractCalculationExportableResult<InundationDurationCalculationResults> result : results.getResults()) {
+                final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+                getHelper().addJRMetaDataUSINFO(source, results);
+
+                result.addReport(exportContextCSV, results, reporter, source);
+            }
+
             reporter.exportPDF(out);
         }
         catch (final JRException je) {
@@ -144,4 +50,36 @@
         }
     }
 
+    @Override
+    protected void doWriteCSVData(final CSVWriter writer, final InundationDurationCalculationResults results) {
+        // TODO: Diesen Ablauf in super? -> leichte abweichung
+
+        // TODO: move results into context?
+        final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer);
+
+        getLog().info("writeCSVData");
+
+        final RiverInfo river = results.getRiver();
+
+        /* write as csv */
+        exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse
+        exportContextCSV.writeCSVMetaEntry(I18NStrings.CSV_META_HEIGHT_UNIT_RIVER, river.getWstUnit());
+        // writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+
+        final Class<?> lastResultType = null;
+
+        for (final AbstractCalculationExportableResult<InundationDurationCalculationResults> result : results.getResults()) {
+
+            final Class<?> resultType = result.getClass();
+            if (lastResultType == null || lastResultType != resultType) {
+                exportContextCSV.writeBlankLine();
+                result.writeCSVHeader(exportContextCSV, results, river);
+                exportContextCSV.writeBlankLine();
+            } else
+                exportContextCSV.writeCSVLine(new String[] { "#" });
+
+            result.writeCsv(exportContextCSV, results);
+        }
+
+    }
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationState.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationState.java	Thu Jun 14 17:03:53 2018 +0200
@@ -1,6 +1,6 @@
 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
- * Software engineering by 
- *  Björnsen Beratende Ingenieure GmbH 
+ * Software engineering by
+ *  Björnsen Beratende Ingenieure GmbH
  *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
  *
  * This file is Free Software under the GNU AGPL (>=v3)
@@ -15,6 +15,7 @@
 import org.dive4elements.artifacts.CallContext;
 import org.dive4elements.river.artifacts.ChartArtifact;
 import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
 import org.dive4elements.river.artifacts.model.Calculation;
 import org.dive4elements.river.artifacts.model.CalculationResult;
 import org.dive4elements.river.artifacts.model.DataFacet;
@@ -77,7 +78,7 @@
 
         final InundationDurationCalculationResults results = (InundationDurationCalculationResults) res.getData();
 
-        List<InundationDurationCalculationResult> resultList = results.getResults();
+        final List<AbstractCalculationExportableResult<InundationDurationCalculationResults>> resultList = results.getResults();
 
         if (!resultList.isEmpty()) {
             final Facet csv = new DataFacet(FacetTypes.CSV, "CSV data", ComputeType.ADVANCE, hash, this.id);
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResult.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResult.java	Thu Jun 14 17:03:53 2018 +0200
@@ -1,6 +1,6 @@
 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
- * Software engineering by 
- *  Björnsen Beratende Ingenieure GmbH 
+ * Software engineering by
+ *  Björnsen Beratende Ingenieure GmbH
  *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
  *
  * This file is Free Software under the GNU AGPL (>=v3)
@@ -9,21 +9,143 @@
  */
 package org.dive4elements.river.artifacts.uinfo.salix;
 
+import java.util.ArrayList;
 import java.util.Collection;
 
-import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.ExportContextCSV;
+import org.dive4elements.river.artifacts.common.GeneralResultType;
+import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
 import org.dive4elements.river.artifacts.common.ResultRow;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
+import org.dive4elements.river.artifacts.uinfo.commons.UInfoResultType;
 
 /**
  * @author Domenico Nardi Tironi
  */
-final class SalixLineCalculationResult extends AbstractCalculationResult {
+final class SalixLineCalculationResult extends AbstractCalculationExportableResult<SalixLineCalculationResults> {
 
     private static final long serialVersionUID = 1L;
+    private static final String JASPER_FILE = "/jasper/templates/uinfo.salixline.jrxml";
 
-    public SalixLineCalculationResult(final String label, final WstInfo wst, final Collection< ResultRow> rows) {
-        super(label,  rows);
+    public SalixLineCalculationResult(final String label, final WstInfo wst, final Collection<ResultRow> rows) {
+        super(label, rows);
     }
-    
+
+    @Override
+    public void writeCSVHeader(final ExportContextCSV exportContextCSV, final SalixLineCalculationResults results, final RiverInfo river) {
+
+        final Collection<String> header = new ArrayList<>(4);
+
+        header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station));
+        // header.add(msgUnit(SInfoResultType.flowdepth, SInfoResultType.flowdepth.getUnit()));
+
+        header.add(exportContextCSV.formatCsvHeader(UInfoResultType.salixline));
+        // wenn "historisch" gewählt wurde, nur "historisch" anzeigen; sonst für jeden scen-wert ne neue Spalte und "hist"
+        // ausblenden!...!..!!
+        header.add(exportContextCSV.formatCsvHeader(UInfoResultType.salixlinehist));
+        header.add(exportContextCSV.formatCsvHeader(UInfoResultType.salixlinescen));
+        exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
+
+    }
+
+    @Override
+    protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final SalixLineCalculationResults results) {
+        writeRegionalEffectsCSVMetadata(exportContextCSV);
+        exportContextCSV.writeBlankLine();// writer.writeNext(new String[] { "" }); // break line
+        writeExtendedRegionalEffectsCSVMetadata(exportContextCSV);
+        exportContextCSV.writeBlankLine();
+        writeHistoricalViewCSVMetadata(exportContextCSV);
+        exportContextCSV.writeBlankLine();
+
+    }
+
+    @Override
+    protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final SalixLineCalculationResults results, final ResultRow row) {
+
+        return formatRow(exportContextCSV, results, row);
+    }
+
+    @Override
+    protected String[] formatPDFRow(final ExportContextCSV exportContextPDF, final SalixLineCalculationResults results, final ResultRow row) {
+
+        return formatRow(exportContextPDF, results, row);
+    }
+
+    @Override
+    protected String getJasperFile() {
+
+        return this.JASPER_FILE;
+    }
+
+    @Override
+    protected void addJRTableHeader(final ExportContextCSV exportContextPDF, final MetaAndTableJRDataSource source, final SalixLineCalculationResults results) {
+
+        /* additional column headings */
+        exportContextPDF.addJRMetadata(source, "station_header", GeneralResultType.station);
+
+        exportContextPDF.addJRMetadata(source, "salix_line", UInfoResultType.salixline);
+        // wenn "historisch" gewählt wurde, nur "historisch" anzeigen; sonst für jeden scen-wert ne neue Spalte und "hist"
+        // ausblenden!...!..!!
+        exportContextPDF.addJRMetadata(source, "salix_line_hist", UInfoResultType.salixlinehist);
+        exportContextPDF.addJRMetadata(source, "salix_line_scen", UInfoResultType.salixlinescen);
+
+    }
+
+    private String[] formatRow(final ExportContextCSV context, final SalixLineCalculationResults results, final ResultRow row) {
+
+        final Collection<String> lines = new ArrayList<>(3);
+
+        lines.add(context.formatRowValue(row, GeneralResultType.station));
+        lines.add(context.formatRowValue(row, UInfoResultType.salixline));
+
+        // wenn "historisch" gewählt wurde, nur "historisch" anzeigen; sonst für jeden scen-wert ne neue Spalte und "hist"
+        // ausblenden!...!..!!
+        lines.add(context.formatRowValue(row, UInfoResultType.salixlinehist));
+        lines.add(context.formatRowValue(row, UInfoResultType.salixlinescen));
+        return lines.toArray(new String[lines.size()]);
+    }
+
+    private void writeRegionalEffectsCSVMetadata(final ExportContextCSV exportContextCSV) {
+        final String main = "uinfo.export.csv.meta.header.salix.regional";
+        // "##Regional wirkende Eingriffe"
+        exportContextCSV.writeCSVMetaEntry(main);
+        writeRegionalCommonCSVMeta(exportContextCSV);
+    }
+
+    private void writeRegionalCommonCSVMeta(final ExportContextCSV exportContextCSV) {
+        final String main = "uinfo.export.csv.meta.header.salix";
+        // "# Szenariotyp: "
+        exportContextCSV.writeCSVMetaEntry(main + ".szenariotyp");
+        // "# Teilabschnitt: "
+        exportContextCSV.writeCSVMetaEntry(main + ".teilabschnitt");
+        // "# Mittelwasserspiegellagenänderung: "
+        exportContextCSV.writeCSVMetaEntry(main + ".mwspiegellaenderung");
+    }
+
+    private void writeExtendedRegionalEffectsCSVMetadata(final ExportContextCSV exportContextCSV) {
+        final String main = "uinfo.export.csv.meta.header.salix.regionalextended";
+        // "##Ãœberregional wirkende Eingriffe"
+        exportContextCSV.writeCSVMetaEntry(main);
+
+        writeRegionalCommonCSVMeta(exportContextCSV);
+    }
+
+    private void writeHistoricalViewCSVMetadata(final ExportContextCSV exportContextCSV) {
+        final String main = "uinfo.export.csv.meta.header.salix.historical";
+        // "##Historische Betrachtung"
+        exportContextCSV.writeCSVMetaEntry(main);
+
+        final String mainSub = "uinfo.export.csv.meta.header.salix";
+        // "# Szenariotyp: "
+        exportContextCSV.writeCSVMetaEntry(mainSub + ".szenariotyp");
+        // "# Teilabschnitt: "
+        exportContextCSV.writeCSVMetaEntry(mainSub + ".teilabschnitt");
+
+        // "# Art des Zeitraums: "
+        exportContextCSV.writeCSVMetaEntry(main + ".zeitart");
+        // "# Historischer Zeitpunkt: "
+        exportContextCSV.writeCSVMetaEntry(main + ".zeitpunkt");
+    }
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResults.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResults.java	Thu Jun 14 17:03:53 2018 +0200
@@ -1,6 +1,6 @@
 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
- * Software engineering by 
- *  Björnsen Beratende Ingenieure GmbH 
+ * Software engineering by
+ *  Björnsen Beratende Ingenieure GmbH
  *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
  *
  * This file is Free Software under the GNU AGPL (>=v3)
@@ -10,14 +10,15 @@
 package org.dive4elements.river.artifacts.uinfo.salix;
 
 import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.artifacts.common.AbstractCalculationResults;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationListResults;
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 
 /**
  * @author Domenico Nardi Tironi
  *
  */
-final class SalixLineCalculationResults extends AbstractCalculationResults<SalixLineCalculationResult> {
+final class SalixLineCalculationResults extends AbstractCalculationListResults<AbstractCalculationExportableResult<SalixLineCalculationResults>> {
 
     private static final long serialVersionUID = 1L;
 
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineExporter.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineExporter.java	Thu Jun 14 17:03:53 2018 +0200
@@ -10,18 +10,14 @@
 package org.dive4elements.river.artifacts.uinfo.salix;
 
 import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
 
-import org.apache.log4j.Logger;
-import org.dive4elements.river.artifacts.common.GeneralResultType;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCommonExporter;
+import org.dive4elements.river.artifacts.common.ExportContextCSV;
 import org.dive4elements.river.artifacts.common.I18NStrings;
 import org.dive4elements.river.artifacts.common.JasperReporter;
 import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
-import org.dive4elements.river.artifacts.common.ResultRow;
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-import org.dive4elements.river.artifacts.uinfo.commons.AbstractUInfoExporter;
-import org.dive4elements.river.artifacts.uinfo.commons.UInfoResultType;
 
 import au.com.bytecode.opencsv.CSVWriter;
 import net.sf.jasperreports.engine.JRException;
@@ -30,166 +26,75 @@
  * @author Domenico Nardi Tironi
  *
  */
-public class SalixLineExporter extends AbstractUInfoExporter<SalixLineCalculationResult, SalixLineCalculationResults> {
-
-    /** The log used in this exporter. */
-    private static Logger log = Logger.getLogger(SalixLineExporter.class);
-
-    private static final String JASPER_FILE = "/jasper/templates/uinfo.salixline.jrxml";
-
-    @Override
-    protected Logger getLog() {
-        return log;
-    }
+public class SalixLineExporter extends AbstractCommonExporter<SalixLineCalculationResults> {
 
     @Override
-    protected void writeCSVGlobalMetadata(final CSVWriter writer, final SalixLineCalculationResults results) {
-        log.info("SalixLineExporter.writeCSVMeta");
-
-        super.writeCSVGlobalMetadataDefaults(writer, results);
-
-        // "# Höhensystem des Flusses: "
-        writeCSVMetaEntry(writer, I18NStrings.CSV_META_HEIGHT_UNIT_RIVER, results.getRiver().getWstUnit());
-
-        // Add Auswerter, Bezugspegel, Jahr/Zeitraum der Wasserspiegellage
-
-        // "# Auswerter: "
-        writeCSVMetaEntry(writer, "uinfo.export.salix_line.csv.meta.header.evaluator", "sounding.getEvaluationBy()");
-        // "# Bezugspegel: "
-        writeCSVMetaEntry(writer, "uinfo.export.salix_line.csv.meta.header.waterlevel.gauge", "wst.getGauge()");
-
-        // "# Jahr/Zeitraum der Wasserspiegellage: "
-        // final int year = wst.getYear();
-        // if (year > 0)
-        writeCSVMetaEntry(writer, "uinfo.export.salix_line.csv.meta.header.waterlevel.year", "Integer.toString(year)");
-
-    }
-
-    private void writeRegionalEffectsCSVMetadata(final CSVWriter writer) {
-        final String main = "uinfo.export.csv.meta.header.salix.regional";
-        // "##Regional wirkende Eingriffe"
-        writeCSVMetaEntry(writer, main);
-        writeRegionalCommonCSVMeta(writer);
-    }
-
-    private void writeRegionalCommonCSVMeta(final CSVWriter writer) {
-        final String main = "uinfo.export.csv.meta.header.salix";
-        // "# Szenariotyp: "
-        writeCSVMetaEntry(writer, main + ".szenariotyp");
-        // "# Teilabschnitt: "
-        writeCSVMetaEntry(writer, main + ".teilabschnitt");
-        // "# Mittelwasserspiegellagenänderung: "
-        writeCSVMetaEntry(writer, main + ".mwspiegellaenderung");
-    }
-
-    private void writeExtendedRegionalEffectsCSVMetadata(final CSVWriter writer) {
-        final String main = "uinfo.export.csv.meta.header.salix.regionalextended";
-        // "##Ãœberregional wirkende Eingriffe"
-        writeCSVMetaEntry(writer, main);
-
-        writeRegionalCommonCSVMeta(writer);
-    }
-
-    private void writeHistoricalViewCSVMetadata(final CSVWriter writer) {
-        final String main = "uinfo.export.csv.meta.header.salix.historical";
-        // "##Historische Betrachtung"
-        writeCSVMetaEntry(writer, main);
-
-        final String mainSub = "uinfo.export.csv.meta.header.salix";
-        // "# Szenariotyp: "
-        writeCSVMetaEntry(writer, mainSub + ".szenariotyp");
-        // "# Teilabschnitt: "
-        writeCSVMetaEntry(writer, mainSub + ".teilabschnitt");
-
-        // "# Art des Zeitraums: "
-        writeCSVMetaEntry(writer, main + ".zeitart");
-        // "# Historischer Zeitpunkt: "
-        writeCSVMetaEntry(writer, main + ".zeitpunkt");
-    }
-
-    @Override
-    protected void writeCSVResultMetadata(final CSVWriter writer, final SalixLineCalculationResults results, final SalixLineCalculationResult result) {
-        writeRegionalEffectsCSVMetadata(writer);
-        writer.writeNext(new String[] { "" }); // break line
-        writeExtendedRegionalEffectsCSVMetadata(writer);
-        writer.writeNext(new String[] { "" }); // break line
-        writeHistoricalViewCSVMetadata(writer);
-    }
-
-    /**
-     * Write the header, with different headings depending on whether at a
-     * gauge or at a location.
-     *
-     * @param river
-     * @param useTkh
-     */
-    @Override
-    protected void writeCSVHeader(final CSVWriter writer, final SalixLineCalculationResults results, final RiverInfo river) {
-        log.info("FlowDepthExporter.writeCSVHeader");
-
-        final Collection<String> header = new ArrayList<>(4);
-
-        header.add(msg(GeneralResultType.station.getCsvHeader()));
-        // header.add(msgUnit(SInfoResultType.flowdepth.getCsvHeader(), SInfoResultType.flowdepth.getUnit()));
-
-        header.add(msg(UInfoResultType.salixline.getCsvHeader()));
-        // wenn "historisch" gewählt wurde, nur "historisch" anzeigen; sonst für jeden scen-wert ne neue Spalte und "hist"
-        // ausblenden!...!..!!
-        header.add(msg(UInfoResultType.salixlinehist.getCsvHeader()));
-        header.add(msg(UInfoResultType.salixlinescen.getCsvHeader()));
-        writer.writeNext(header.toArray(new String[header.size()]));
-    }
-
-    /**
-     * Format a row of a flow depth result into an array of string, both used by csv and pdf
-     *
-     * @param pdf
-     *
-     * @param useTkh
-     */
-    @Override
-    protected String[] formatRow(final SalixLineCalculationResults results, final ResultRow row, final ExportMode mode) {
-
-        final Collection<String> lines = new ArrayList<>(3);
-
-        lines.add(row.exportValue(this.context, GeneralResultType.station));
-        lines.add(row.exportValue(this.context, UInfoResultType.salixline));
-
-        // wenn "historisch" gewählt wurde, nur "historisch" anzeigen; sonst für jeden scen-wert ne neue Spalte und "hist"
-        // ausblenden!...!..!!
-        lines.add(row.exportValue(this.context, UInfoResultType.salixlinehist));
-        lines.add(row.exportValue(this.context, UInfoResultType.salixlinescen));
-        return lines.toArray(new String[lines.size()]);
-    }
-
-    @Override
-    protected final void addJRMetaData(final MetaAndTableJRDataSource source, final SalixLineCalculationResults results) {
-
-        super.addJRMetaData(source, results);
-
-        /* additional column headings */
-        source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta()));
-
-        source.addMetaData("salix_line", UInfoResultType.salixline.getPdfHeader(this.context.getMeta()));
-        // wenn "historisch" gewählt wurde, nur "historisch" anzeigen; sonst für jeden scen-wert ne neue Spalte und "hist"
-        // ausblenden!...!..!!
-        source.addMetaData("salix_line_hist", UInfoResultType.salixlinehist.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("salix_line_scen", UInfoResultType.salixlinescen.getPdfHeader(this.context.getMeta()));
-    }
-
-    @Override
-    protected void writePDF(final OutputStream out) {
+    protected void doWritePdf(final OutputStream out, final SalixLineCalculationResults results) {
+        // TODO: Move to super
         try {
-            final MetaAndTableJRDataSource source = createJRData(this.data);
+            final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null);
 
             final JasperReporter reporter = new JasperReporter();
-            reporter.addReport(JASPER_FILE, source);
+
+            for (final AbstractCalculationExportableResult<SalixLineCalculationResults> result : results.getResults()) {
+                final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+                getHelper().addJRMetaDataUSINFO(source, results);
+
+                result.addReport(exportContextCSV, results, reporter, source);
+            }
+
             reporter.exportPDF(out);
         }
         catch (final JRException je) {
             getLog().warn("Error generating PDF Report!", je);
         }
+    }
 
+    @Override
+    protected void doWriteCSVData(final CSVWriter writer, final SalixLineCalculationResults results) {
+        // TODO: Diesen Ablauf in super? - ist etwas anders bei den globalen metadaten
+
+        // TODO: move results into context?
+        final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer);
+
+        getLog().info("writeCSVData");
+
+        /* write as csv */
+        exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse
+
+        // writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+
+        // "# Höhensystem des Flusses: "
+        exportContextCSV.writeCSVMetaEntry(I18NStrings.CSV_META_HEIGHT_UNIT_RIVER, results.getRiver().getWstUnit());
+
+        // Add Auswerter, Bezugspegel, Jahr/Zeitraum der Wasserspiegellage
+
+        // "# Auswerter: "
+        exportContextCSV.writeCSVMetaEntry("uinfo.export.salix_line.csv.meta.header.evaluator", "sounding.getEvaluationBy()");
+        // "# Bezugspegel: "
+        exportContextCSV.writeCSVMetaEntry("uinfo.export.salix_line.csv.meta.header.waterlevel.gauge", "wst.getGauge()");
+
+        // "# Jahr/Zeitraum der Wasserspiegellage: "
+        // final int year = wst.getYear();
+        // if (year > 0)
+        exportContextCSV.writeCSVMetaEntry("uinfo.export.salix_line.csv.meta.header.waterlevel.year", "Integer.toString(year)");
+
+        final RiverInfo river = results.getRiver();
+
+        final Class<?> lastResultType = null;
+
+        for (final AbstractCalculationExportableResult<SalixLineCalculationResults> result : results.getResults()) {
+
+            final Class<?> resultType = result.getClass();
+            if (lastResultType == null || lastResultType != resultType) {
+                exportContextCSV.writeBlankLine();
+                result.writeCSVHeader(exportContextCSV, results, river);
+                exportContextCSV.writeBlankLine();
+            } else
+                exportContextCSV.writeCSVLine(new String[] { "#" });
+
+            result.writeCsv(exportContextCSV, results);
+        }
     }
 
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineState.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineState.java	Thu Jun 14 17:03:53 2018 +0200
@@ -1,6 +1,6 @@
 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
- * Software engineering by 
- *  Björnsen Beratende Ingenieure GmbH 
+ * Software engineering by
+ *  Björnsen Beratende Ingenieure GmbH
  *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
  *
  * This file is Free Software under the GNU AGPL (>=v3)
@@ -15,6 +15,7 @@
 import org.dive4elements.artifacts.CallContext;
 import org.dive4elements.river.artifacts.ChartArtifact;
 import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
 import org.dive4elements.river.artifacts.model.Calculation;
 import org.dive4elements.river.artifacts.model.CalculationResult;
 import org.dive4elements.river.artifacts.model.DataFacet;
@@ -77,7 +78,7 @@
 
         final SalixLineCalculationResults results = (SalixLineCalculationResults) res.getData();
 
-        List<SalixLineCalculationResult> resultList = results.getResults();
+        final List<AbstractCalculationExportableResult<SalixLineCalculationResults>> resultList = results.getResults();
 
         if (!resultList.isEmpty()) {
             final Facet csv = new DataFacet(FacetTypes.CSV, "CSV data", ComputeType.ADVANCE, hash, this.id);
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCalculationResult.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCalculationResult.java	Thu Jun 14 17:03:53 2018 +0200
@@ -9,20 +9,82 @@
  */
 package org.dive4elements.river.artifacts.uinfo.vegetationzones;
 
+import java.util.ArrayList;
 import java.util.Collection;
 
-import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.ExportContextCSV;
+import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
 import org.dive4elements.river.artifacts.common.ResultRow;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+import org.dive4elements.river.artifacts.uinfo.commons.UInfoResultType;
 
 /**
  * @author Domenico Nardi Tironi
  */
-final class VegetationZonesCalculationResult extends AbstractCalculationResult {
+final class VegetationZonesCalculationResult extends AbstractCalculationExportableResult<VegetationZonesCalculationResults> {
+    private static final long serialVersionUID = 1L;
 
-    private static final long serialVersionUID = 1L;
+    private static final String JASPER_FILE = "/jasper/templates/uinfo.vegetationzones.jrxml";
 
     public VegetationZonesCalculationResult(final String label, final Collection<ResultRow> rows) {
         super(label, rows);
     }
 
+    @Override
+    public void writeCSVHeader(final ExportContextCSV exportContextCSV, final VegetationZonesCalculationResults results, final RiverInfo river) {
+
+        final Collection<String> header = new ArrayList<>(11);
+
+        header.add(exportContextCSV.formatCsvHeader(UInfoResultType.vegname));
+        header.add(exportContextCSV.formatCsvHeader(UInfoResultType.vegdauervon));
+        header.add(exportContextCSV.formatCsvHeader(UInfoResultType.vegdauerbis));
+
+        exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
+    }
+
+    @Override
+    protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final VegetationZonesCalculationResults results) {
+        // no metadata
+
+    }
+
+    @Override
+    protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final VegetationZonesCalculationResults results, final ResultRow row) {
+        return formatRow(exportContextCSV, results, row);
+    }
+
+    @Override
+    protected String[] formatPDFRow(final ExportContextCSV exportContextPDF, final VegetationZonesCalculationResults results, final ResultRow row) {
+
+        return formatRow(exportContextPDF, results, row);
+    }
+
+    @Override
+    protected String getJasperFile() {
+
+        return JASPER_FILE;
+    }
+
+    @Override
+    protected void addJRTableHeader(final ExportContextCSV exportContextPDF, final MetaAndTableJRDataSource source,
+            final VegetationZonesCalculationResults results) {
+        /* additional column headings */
+        exportContextPDF.addJRMetadata(source, "veg_name", UInfoResultType.vegname);
+        exportContextPDF.addJRMetadata(source, "veg_dauervon", UInfoResultType.vegdauervon);
+        exportContextPDF.addJRMetadata(source, "veg_dauerbis", UInfoResultType.vegdauerbis);
+
+    }
+
+    protected String[] formatRow(final ExportContextCSV context, final VegetationZonesCalculationResults results, final ResultRow row) {
+
+        final Collection<String> lines = new ArrayList<>(11);
+
+        lines.add(context.formatRowValue(row, UInfoResultType.vegname));
+        lines.add(context.formatRowValue(row, UInfoResultType.vegdauervon));
+        lines.add(context.formatRowValue(row, UInfoResultType.vegdauerbis));
+
+        return lines.toArray(new String[lines.size()]);
+    }
+
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCalculationResults.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCalculationResults.java	Thu Jun 14 17:03:53 2018 +0200
@@ -1,6 +1,6 @@
 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
- * Software engineering by 
- *  Björnsen Beratende Ingenieure GmbH 
+ * Software engineering by
+ *  Björnsen Beratende Ingenieure GmbH
  *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
  *
  * This file is Free Software under the GNU AGPL (>=v3)
@@ -10,14 +10,15 @@
 package org.dive4elements.river.artifacts.uinfo.vegetationzones;
 
 import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.artifacts.common.AbstractCalculationResults;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationListResults;
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 
 /**
  * @author Domenico Nardi Tironi
  *
  */
-final class VegetationZonesCalculationResults extends AbstractCalculationResults<VegetationZonesCalculationResult> {
+final class VegetationZonesCalculationResults extends AbstractCalculationListResults<AbstractCalculationExportableResult<VegetationZonesCalculationResults>> {
 
     private static final long serialVersionUID = 1L;
 
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesExporter.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesExporter.java	Thu Jun 14 17:03:53 2018 +0200
@@ -10,18 +10,13 @@
 package org.dive4elements.river.artifacts.uinfo.vegetationzones;
 
 import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
 
-import org.apache.commons.lang.math.DoubleRange;
-import org.apache.log4j.Logger;
-import org.dive4elements.river.artifacts.common.I18NStrings;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCommonExporter;
+import org.dive4elements.river.artifacts.common.ExportContextCSV;
 import org.dive4elements.river.artifacts.common.JasperReporter;
 import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
-import org.dive4elements.river.artifacts.common.ResultRow;
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-import org.dive4elements.river.artifacts.uinfo.commons.AbstractUInfoExporter;
-import org.dive4elements.river.artifacts.uinfo.commons.UInfoResultType;
 
 import au.com.bytecode.opencsv.CSVWriter;
 import net.sf.jasperreports.engine.JRException;
@@ -30,94 +25,23 @@
  * @author Domenico Nardi Tironi
  *
  */
-public class VegetationZonesExporter extends AbstractUInfoExporter<VegetationZonesCalculationResult, VegetationZonesCalculationResults> {
-
-    /** The log used in this exporter. */
-    private static Logger log = Logger.getLogger(VegetationZonesExporter.class);
-
-    private static final String JASPER_FILE = "/jasper/templates/uinfo.vegetationzones.jrxml";
-
-    @Override
-    protected Logger getLog() {
-        return log;
-    }
+public class VegetationZonesExporter extends AbstractCommonExporter<VegetationZonesCalculationResults> {
 
     @Override
-    protected void writeCSVGlobalMetadata(final CSVWriter writer, final VegetationZonesCalculationResults results) {
-        log.info("SalixLineExporter.writeCSVMeta");
-        super.writeCSVGlobalMetadataDefaults(writer, results);
-
-        final DoubleRange calcRange = results.getCalcRange();
-        if (calcRange != null) {
-            // "# Ort/Bereich (km): "
-            writeCSVMetaEntry(writer, I18NStrings.CSV_META_RANGE, msg(I18NStrings.CSV_META_RANGE_LABEL), getKmFormatter().format(calcRange.getMinimumDouble()),
-                    getKmFormatter().format(calcRange.getMaximumDouble()));
-        }
-    }
-
-    /**
-     * Write the header, with different headings depending on whether at a
-     * gauge or at a location.
-     *
-     * @param river
-     * @param useTkh
-     */
-    @Override
-    protected void writeCSVHeader(final CSVWriter writer, final VegetationZonesCalculationResults results, final RiverInfo river) {
-        log.info("FlowDepthExporter.writeCSVHeader");
-
-        final Collection<String> header = new ArrayList<>(11);
-
-        header.add(msg(UInfoResultType.vegname.getCsvHeader()));
-        header.add(msg(UInfoResultType.vegdauervon.getCsvHeader()));
-        header.add(msg(UInfoResultType.vegdauerbis.getCsvHeader()));
-
-        writer.writeNext(header.toArray(new String[header.size()]));
-    }
-
-    /**
-     * Format a row of a flow depth result into an array of string, both used by csv and pdf
-     *
-     * @param pdf
-     *
-     * @param useTkh
-     */
-    @Override
-    protected String[] formatRow(final VegetationZonesCalculationResults results, final ResultRow row, final ExportMode mode) {
-
-        final Collection<String> lines = new ArrayList<>(11);
-
-        lines.add(row.exportValue(this.context, UInfoResultType.vegname));
-        lines.add(row.exportValue(this.context, UInfoResultType.vegdauervon));
-        lines.add(row.exportValue(this.context, UInfoResultType.vegdauerbis));
-
-        return lines.toArray(new String[lines.size()]);
-    }
-
-    @Override
-    protected void writeCSVResultMetadata(final CSVWriter writer, final VegetationZonesCalculationResults results,
-            final VegetationZonesCalculationResult result) {
-
-    }
-
-    @Override
-    protected final void addJRMetaData(final MetaAndTableJRDataSource source, final VegetationZonesCalculationResults results) {
-
-        super.addJRMetaData(source, results);
-
-        /* additional column headings */
-        source.addMetaData("veg_name", UInfoResultType.vegname.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("veg_dauervon", UInfoResultType.vegdauervon.getPdfHeader(this.context.getMeta()));
-        source.addMetaData("veg_dauerbis", UInfoResultType.vegdauerbis.getPdfHeader(this.context.getMeta()));
-    }
-
-    @Override
-    protected void writePDF(final OutputStream out) {
+    protected void doWritePdf(final OutputStream out, final VegetationZonesCalculationResults results) {
+        // TODO: Move to super
         try {
-            final MetaAndTableJRDataSource source = createJRData(this.data);
+            final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null);
 
             final JasperReporter reporter = new JasperReporter();
-            reporter.addReport(JASPER_FILE, source);
+
+            for (final AbstractCalculationExportableResult<VegetationZonesCalculationResults> result : results.getResults()) {
+                final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+                getHelper().addJRMetaDataUSINFO(source, results);
+
+                result.addReport(exportContextCSV, results, reporter, source);
+            }
+
             reporter.exportPDF(out);
         }
         catch (final JRException je) {
@@ -125,4 +49,35 @@
         }
     }
 
+    @Override
+    protected void doWriteCSVData(final CSVWriter writer, final VegetationZonesCalculationResults results) {
+        // TODO: Diesen Ablauf in super?
+
+        // TODO: move results into context?
+        final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer);
+
+        getLog().info("writeCSVData");
+
+        /* write as csv */
+        exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse
+
+        // writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+
+        final RiverInfo river = results.getRiver();
+
+        final Class<?> lastResultType = null;
+
+        for (final AbstractCalculationExportableResult<VegetationZonesCalculationResults> result : results.getResults()) {
+
+            final Class<?> resultType = result.getClass();
+            if (lastResultType == null || lastResultType != resultType) {
+                exportContextCSV.writeBlankLine();
+                result.writeCSVHeader(exportContextCSV, results, river);
+                exportContextCSV.writeBlankLine();
+            } else
+                exportContextCSV.writeCSVLine(new String[] { "#" });
+
+            result.writeCsv(exportContextCSV, results);
+        }
+    }
 }
\ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesState.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesState.java	Thu Jun 14 17:03:53 2018 +0200
@@ -15,6 +15,7 @@
 import org.dive4elements.artifacts.CallContext;
 import org.dive4elements.river.artifacts.ChartArtifact;
 import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
 import org.dive4elements.river.artifacts.model.Calculation;
 import org.dive4elements.river.artifacts.model.CalculationResult;
 import org.dive4elements.river.artifacts.model.DataFacet;
@@ -76,7 +77,7 @@
 
         final VegetationZonesCalculationResults results = (VegetationZonesCalculationResults) res.getData();
 
-        final List<VegetationZonesCalculationResult> resultList = results.getResults();
+        final List<AbstractCalculationExportableResult<VegetationZonesCalculationResults>> resultList = results.getResults();
 
         if (!resultList.isEmpty()) {
             final Facet csv = new DataFacet(FacetTypes.CSV, "CSV data", ComputeType.ADVANCE, hash, this.id);
--- a/artifacts/src/main/java/org/dive4elements/river/exports/AbstractExporter.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/AbstractExporter.java	Thu Jun 14 17:03:53 2018 +0200
@@ -11,30 +11,22 @@
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
-
 import java.text.NumberFormat;
 
-import org.w3c.dom.Document;
-
 import org.apache.log4j.Logger;
-
-import au.com.bytecode.opencsv.CSVWriter;
-
+import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
+import org.dive4elements.artifactdatabase.state.Settings;
 import org.dive4elements.artifacts.Artifact;
 import org.dive4elements.artifacts.CallContext;
-
-import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
-import org.dive4elements.artifactdatabase.state.Settings;
-
 import org.dive4elements.artifacts.common.ArtifactNamespaceContext;
 import org.dive4elements.artifacts.common.utils.XMLUtils;
-
 import org.dive4elements.river.artifacts.resources.Resources;
 import org.dive4elements.river.collections.D4EArtifactCollection;
-
 import org.dive4elements.river.themes.ThemeDocument;
 import org.dive4elements.river.utils.Formatter;
+import org.w3c.dom.Document;
 
+import au.com.bytecode.opencsv.CSVWriter;
 
 /**
  * Abstract exporter that implements some basic methods for exporting data of
@@ -44,7 +36,7 @@
  */
 public abstract class AbstractExporter implements OutGenerator {
 
-    /** The log used in this exporter.*/
+    /** The log used in this exporter. */
     private static Logger log = Logger.getLogger(AbstractExporter.class);
 
     /* XXX: Why does AbstractExporter do not implement FacetTypes? */
@@ -82,7 +74,7 @@
     /** The selected facet. */
     protected String facet;
 
-    /** The collection.*/
+    /** The collection. */
     protected D4EArtifactCollection collection;
 
     /** The master artifact. */
@@ -106,24 +98,26 @@
      * Concrete subclasses need to use this method to write their special data
      * objects into the CSV document.
      *
-     * @param writer The CSVWriter.
+     * @param writer
+     *            The CSVWriter.
      */
     protected abstract void writeCSVData(CSVWriter writer) throws IOException;
 
-
     /**
      * Write lines of informative content to CSV file.
      * Usually this will be done above the column headers from within
      * the implementation of writeCSVData in concret subclasses.
      *
-     * @param writer The CSVWriter
-     * @param infolines Array of Strings with informative content.
-     * Each will be written to a separate line prefixed with START_META_CHAR.
+     * @param writer
+     *            The CSVWriter
+     * @param infolines
+     *            Array of Strings with informative content.
+     *            Each will be written to a separate line prefixed with START_META_CHAR.
      */
-    protected void  writeCSVInfo(CSVWriter writer, String[] infolines) {
-        String[] metaline = new String[1];
+    protected void writeCSVInfo(final CSVWriter writer, final String[] infolines) {
+        final String[] metaline = new String[1];
 
-        for (String infoline: infolines) {
+        for (final String infoline : infolines) {
             metaline[0] = START_META_CHAR + " " + infoline;
             writer.writeNext(metaline);
         }
@@ -136,74 +130,66 @@
      */
     protected abstract void writePDF(OutputStream out);
 
-
     /**
      * This method enables concrete subclasses to collected its own special
      * data.
      *
-     * @param data The artifact that stores the data that has to be
-     * exported.
+     * @param data
+     *            The artifact that stores the data that has to be
+     *            exported.
      */
     protected abstract void addData(Object data);
 
-    public void setup(Object config) {
+    @Override
+    public void setup(final Object config) {
         log.debug("AbstractExporter.setup");
     }
 
-
     @Override
-    public void init(
-        String       outName,
-        Document     request,
-        OutputStream out,
-        CallContext  context
-    ) {
+    public void init(final String outName, final Document request, final OutputStream out, final CallContext context) {
         log.debug("AbstractExporter.init");
 
         this.outName = outName;
         this.request = request;
-        this.out     = out;
+        this.out = out;
         this.context = context;
     }
 
-
     @Override
-    public void setMasterArtifact(Artifact master) {
+    public void setMasterArtifact(final Artifact master) {
         this.master = master;
     }
 
-    /** Get the callcontext that this exporter has been initialized
-     * with. */
+    /**
+     * Get the callcontext that this exporter has been initialized
+     * with.
+     */
     public CallContext getCallContext() {
         return this.context;
     }
 
-
     @Override
-    public void setCollection(D4EArtifactCollection collection) {
+    public void setCollection(final D4EArtifactCollection collection) {
         this.collection = collection;
     }
 
-
     /**
      * This doOut() just collects the data of multiple artifacts. Therefore, it
      * makes use of the addData() method which enables concrete subclasses to
      * store its data on its own. The real output creation takes place in the
      * concrete generate() methods.
      *
-     * @param artifactFacet The artifact and facet.
-     * The facet to add - NOTE: the facet needs to fit to the first
-     * facet inserted into this exporter. Otherwise this artifact/facet is
-     * skipped.
-     * @param attr The attr document.
+     * @param artifactFacet
+     *            The artifact and facet.
+     *            The facet to add - NOTE: the facet needs to fit to the first
+     *            facet inserted into this exporter. Otherwise this artifact/facet is
+     *            skipped.
+     * @param attr
+     *            The attr document.
      */
     @Override
-    public void doOut(
-        ArtifactAndFacet artifactFacet,
-        ThemeDocument    attr,
-        boolean          visible
-    ) {
-        String name = artifactFacet.getFacetName();
+    public void doOut(final ArtifactAndFacet artifactFacet, final ThemeDocument attr, final boolean visible) {
+        final String name = artifactFacet.getFacetName();
 
         log.debug("AbstractExporter.doOut: " + name);
 
@@ -212,109 +198,98 @@
             return;
         }
 
-        addData(artifactFacet.getData(context));
+        addData(artifactFacet.getData(this.context));
     }
 
-
     /**
      * Generates an export based on a specified facet.
      */
     @Override
-    public void generate()
-    throws IOException
-    {
+    public void generate() throws IOException {
         log.debug("AbstractExporter.generate");
 
-        if (facet == null) {
+        if (this.facet == null) {
             throw new IOException("invalid (null) facet for exporter");
         }
 
-        if (facet.equals(FACET_CSV)) {
+        if (this.facet.equals(FACET_CSV)) {
             generateCSV();
-        }
-        else if (facet.equals(FACET_PDF)) {
+        } else if (this.facet.equals(FACET_PDF)) {
             generatePDF();
-        }
-        else {
-            throw new IOException(
-                "invalid facet for exporter: '" + facet + "'");
+        } else {
+            throw new IOException("invalid facet for exporter: '" + this.facet + "'");
         }
     }
 
-
     /**
      * Determines if the desired facet is valid for this exporter. If no facet
      * is currently set, <i>facet</i> is set.
      *
-     * @param facet The desired facet.
+     * @param facet
+     *            The desired facet.
      *
      * @return true, if <i>facet</i> is valid, otherwise false.
      */
-    protected boolean isFacetValid(String facet) {
-        log.debug("AbstractExporter.isFacetValid : "
-            + facet + " (" + getFacet() + ")" );
+    protected boolean isFacetValid(final String facet) {
+        log.debug("AbstractExporter.isFacetValid : " + facet + " (" + getFacet() + ")");
 
-        String thisFacet = getFacet();
+        final String thisFacet = getFacet();
 
         if (thisFacet == null || thisFacet.length() == 0) {
             return false;
-        }
-        else if (facet == null || facet.length() == 0) {
+        } else if (facet == null || facet.length() == 0) {
             return false;
-        }
-        else {
+        } else {
             return thisFacet.equals(facet);
         }
     }
 
-
     /**
      * Returns the name of the desired facet.
      *
      * @return the name of the desired facet.
      */
     protected String getFacet() {
-        if (facet == null) {
-            facet = getFacetFromRequest();
+        if (this.facet == null) {
+            this.facet = getFacetFromRequest();
         }
 
-        return facet;
+        return this.facet;
     }
 
-
     /**
      * Extracts the name of the requested facet from request document.
      *
      * @return the name of the requested facet.
      */
     protected String getFacetFromRequest() {
-        return XMLUtils.xpathString(
-            request, XPATH_FACET, ArtifactNamespaceContext.INSTANCE);
+        return XMLUtils.xpathString(this.request, XPATH_FACET, ArtifactNamespaceContext.INSTANCE);
     }
 
     protected String msg(final String key) {
-        return Resources.getMsg(context.getMeta(), key, key);
+        return Resources.getMsg(this.context.getMeta(), key, key);
     }
 
-    protected String msg(String key, final String def) {
-        return Resources.getMsg(context.getMeta(), key, def);
+    protected String msg(final String key, final String def) {
+        return Resources.getMsg(this.context.getMeta(), key, def);
     }
 
-    protected String msg(String key, Object[] args) {
-        return Resources.getMsg(context.getMeta(), key, key, args);
+    protected String msg(final String key, final Object[] args) {
+        return Resources.getMsg(this.context.getMeta(), key, key, args);
     }
 
-    protected String msg(String key, String def, Object[] args) {
-        return Resources.getMsg(context.getMeta(), key, def, args);
+    protected String msg(final String key, final String def, final Object[] args) {
+        return Resources.getMsg(this.context.getMeta(), key, def, args);
     }
 
     protected String msgVarg(final String key, final Object... args) {
-        return Resources.getMsg(context.getMeta(), key, key, args);
+        return Resources.getMsg(this.context.getMeta(), key, key, args);
     }
 
     /**
      * Formats header with unit: msg [unit]
      */
+    // TODO: REMOVE, because it has moved to ExportContextCSV
     protected final String msgUnit(final String key, final String unit) {
         final String msg = msg(key);
         return String.format("%s [%s]", msg, unit);
@@ -324,116 +299,104 @@
      * This method starts CSV creation. It makes use of writeCSVData() which has
      * to be implemented by concrete subclasses.
      */
-    protected void generateCSV()
-    throws    IOException
-    {
+    protected void generateCSV() throws IOException {
         log.info("AbstractExporter.generateCSV");
 
-        char quote = '"';
-        char escape = '\\';
+        final char quote = '"';
+        final char escape = '\\';
 
-        CSVWriter writer = new CSVWriter(
-            new OutputStreamWriter(
-                out,
-                DEFAULT_CSV_CHARSET),
-            DEFAULT_CSV_SEPARATOR, quote, escape, "\r\n");
+        final CSVWriter writer = new CSVWriter(new OutputStreamWriter(this.out, DEFAULT_CSV_CHARSET), DEFAULT_CSV_SEPARATOR, quote, escape, "\r\n");
 
         writeCSVData(writer);
 
         writer.close();
     }
 
-
     /**
      * This method starts PDF creation.
      */
-    protected void generatePDF()
-    throws    IOException
-    {
+    protected void generatePDF() throws IOException {
         log.info("AbstractExporter.generatePDF");
         writePDF(this.out);
     }
 
-
     /**
      * Returns an instance of <i>EmptySettings</i> currently!
      *
      * @return an instance of <i>EmptySettings</i>.
      */
+    @Override
     public Settings getSettings() {
         return new EmptySettings();
     }
 
-
     /**
      * This method is not implemented. Override it in subclasses if those need a
      * <i>Settings</i> object.
      */
-    public void setSettings(Settings settings) {
+    @Override
+    public void setSettings(final Settings settings) {
         // do nothing
     }
 
-
     /**
      * Returns the number formatter for kilometer values.
      *
      * @return the number formatter for kilometer values.
      */
     protected NumberFormat getKmFormatter() {
-        if (kmFormat == null) {
-            kmFormat = Formatter.getWaterlevelKM(context);
+        if (this.kmFormat == null) {
+            this.kmFormat = Formatter.getWaterlevelKM(this.context);
         }
-        return kmFormat;
+        return this.kmFormat;
     }
 
-
     /**
      * Returns the number formatter for W values.
      *
      * @return the number formatter for W values.
      */
     protected NumberFormat getWFormatter() {
-        if (wFormat == null) {
-            wFormat = Formatter.getWaterlevelW(context);
+        if (this.wFormat == null) {
+            this.wFormat = Formatter.getWaterlevelW(this.context);
         }
-        return wFormat;
+        return this.wFormat;
     }
 
-
     /**
      * Returns the number formatter for Q values.
      *
      * @return the number formatter for Q values.
      */
     protected NumberFormat getQFormatter() {
-        if (qFormat == null) {
-            qFormat = Formatter.getWaterlevelQ(context);
+        if (this.qFormat == null) {
+            this.qFormat = Formatter.getWaterlevelQ(this.context);
         }
-        return qFormat;
+        return this.qFormat;
     }
-    
+
     protected final NumberFormat getMeanBedHeighFormatter() {
-        if( meanBedHeightFormat == null )
-            meanBedHeightFormat = Formatter.getMeanBedHeight(context); 
-        return meanBedHeightFormat;
+        if (this.meanBedHeightFormat == null)
+            this.meanBedHeightFormat = Formatter.getMeanBedHeight(this.context);
+        return this.meanBedHeightFormat;
     }
 
     protected final NumberFormat getTkhFormatter() {
-        if( tkhFormat == null )
-            tkhFormat = Formatter.getTkh(context);
-        return tkhFormat;
+        if (this.tkhFormat == null)
+            this.tkhFormat = Formatter.getTkh(this.context);
+        return this.tkhFormat;
     }
 
     protected final NumberFormat getFlowDepthFormatter() {
-        if( flowDepthFormat == null )
-            flowDepthFormat = Formatter.getFlowDepth(context);
-        return flowDepthFormat;
+        if (this.flowDepthFormat == null)
+            this.flowDepthFormat = Formatter.getFlowDepth(this.context);
+        return this.flowDepthFormat;
     }
 
     protected final NumberFormat getW2Formatter() {
-        if( w2Format == null )
-            w2Format = Formatter.getFlowDepth(context);
-        return w2Format;
+        if (this.w2Format == null)
+            this.w2Format = Formatter.getFlowDepth(this.context);
+        return this.w2Format;
     }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/CollectionView.java	Thu Jun 14 16:58:35 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/CollectionView.java	Thu Jun 14 17:03:53 2018 +0200
@@ -8,28 +8,16 @@
 
 package org.dive4elements.river.client.client.ui;
 
-import com.google.gwt.core.client.GWT;
-
-import com.google.gwt.user.client.rpc.AsyncCallback;
-
-import com.smartgwt.client.util.SC;
-
-import com.smartgwt.client.widgets.Window;
-
-import com.smartgwt.client.widgets.events.CloseClickEvent;
-import com.smartgwt.client.widgets.events.CloseClickHandler;
-
-import com.smartgwt.client.widgets.layout.Layout;
-import com.smartgwt.client.widgets.layout.VLayout;
-
-import com.smartgwt.client.widgets.tab.TabSet;
-
-import com.smartgwt.client.widgets.tab.events.TabSelectedHandler;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Stack;
 
 import org.dive4elements.river.client.client.Config;
 import org.dive4elements.river.client.client.FLYS;
 import org.dive4elements.river.client.client.FLYSConstants;
-
 import org.dive4elements.river.client.client.event.CollectionChangeEvent;
 import org.dive4elements.river.client.client.event.CollectionChangeHandler;
 import org.dive4elements.river.client.client.event.HasCollectionChangeHandlers;
@@ -38,7 +26,6 @@
 import org.dive4elements.river.client.client.event.OutputModesChangeHandler;
 import org.dive4elements.river.client.client.event.ParameterChangeEvent;
 import org.dive4elements.river.client.client.event.ParameterChangeHandler;
-
 import org.dive4elements.river.client.client.services.AddArtifactService;
 import org.dive4elements.river.client.client.services.AddArtifactServiceAsync;
 import org.dive4elements.river.client.client.services.ArtifactService;
@@ -51,7 +38,6 @@
 import org.dive4elements.river.client.client.services.DescribeCollectionServiceAsync;
 import org.dive4elements.river.client.client.services.LoadArtifactService;
 import org.dive4elements.river.client.client.services.LoadArtifactServiceAsync;
-
 import org.dive4elements.river.client.shared.model.Artifact;
 import org.dive4elements.river.client.shared.model.ArtifactDescription;
 import org.dive4elements.river.client.shared.model.Collection;
@@ -61,45 +47,37 @@
 import org.dive4elements.river.client.shared.model.ReportMode;
 import org.dive4elements.river.client.shared.model.User;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Stack;
-
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.util.SC;
+import com.smartgwt.client.widgets.Window;
+import com.smartgwt.client.widgets.events.CloseClickEvent;
+import com.smartgwt.client.widgets.events.CloseClickHandler;
+import com.smartgwt.client.widgets.layout.Layout;
+import com.smartgwt.client.widgets.layout.VLayout;
+import com.smartgwt.client.widgets.tab.TabSet;
+import com.smartgwt.client.widgets.tab.events.TabSelectedHandler;
 
 /**
  * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
  */
-public class CollectionView
-extends      Window
-implements   CollectionChangeHandler, HasCollectionChangeHandlers,
-             OutputModesChangeHandler, HasOutputModesChangeHandlers,
-             ParameterChangeHandler, CloseClickHandler
-{
+public class CollectionView extends Window implements CollectionChangeHandler, HasCollectionChangeHandlers, OutputModesChangeHandler, HasOutputModesChangeHandlers, ParameterChangeHandler, CloseClickHandler {
     /** The ArtifactService used to communicate with the Artifact server. */
-    protected CreateCollectionServiceAsync createCollectionService =
-        GWT.create(CreateCollectionService.class);
+    protected CreateCollectionServiceAsync createCollectionService = GWT.create(CreateCollectionService.class);
 
     /** The ArtifactService used to communicate with the Artifact server. */
-    protected ArtifactServiceAsync createArtifactService =
-        GWT.create(ArtifactService.class);
+    protected ArtifactServiceAsync createArtifactService = GWT.create(ArtifactService.class);
 
     /** The AddArtifactService used to add an artifact to a collection. */
-    protected AddArtifactServiceAsync addArtifactService =
-        GWT.create(AddArtifactService.class);
+    protected AddArtifactServiceAsync addArtifactService = GWT.create(AddArtifactService.class);
 
     /** The DescribeCollectionService used to update the existing collection. */
-    protected DescribeCollectionServiceAsync describeCollectionService =
-        GWT.create(DescribeCollectionService.class);
+    protected DescribeCollectionServiceAsync describeCollectionService = GWT.create(DescribeCollectionService.class);
 
-    protected CollectionAttributeServiceAsync updater =
-        GWT.create(CollectionAttributeService.class);
+    protected CollectionAttributeServiceAsync updater = GWT.create(CollectionAttributeService.class);
 
-    /** The LoadArtifactService used to load recommendations*/
-    protected LoadArtifactServiceAsync loadArtifactService =
-        GWT.create(LoadArtifactService.class);
+    /** The LoadArtifactService used to load recommendations */
+    protected LoadArtifactServiceAsync loadArtifactService = GWT.create(LoadArtifactService.class);
 
     /** The message class that provides i18n strings. */
     protected FLYSConstants messages = GWT.create(FLYSConstants.class);
@@ -137,7 +115,7 @@
     protected int recommendationQueue;
     protected Stack<Recommendation> newRecommendations;
 
-    /** Values for fix analysis charts*/
+    /** Values for fix analysis charts */
     protected double currentKm;
     protected double minKm;
     protected double maxKm;
@@ -147,18 +125,17 @@
      * This constructor creates a new CollectionView that is used to display the
      * <i>collection</i>.
      */
-    public CollectionView(FLYS flys) {
-        this.flys          = flys;
-        this.tabs          = new TabSet();
-        this.outputTabs    = new HashMap<String, OutputTab>();
-        this.handlers      = new ArrayList<CollectionChangeHandler>();
-        this.outHandlers   = new ArrayList<OutputModesChangeHandler>();
-        this.layout        = new VLayout();
-        this.parameterList = new ParameterList(
-            flys, this, messages.new_project());
-        this.artifactsQueue      = 0;
+    public CollectionView(final FLYS flys) {
+        this.flys = flys;
+        this.tabs = new TabSet();
+        this.outputTabs = new HashMap<String, OutputTab>();
+        this.handlers = new ArrayList<CollectionChangeHandler>();
+        this.outHandlers = new ArrayList<OutputModesChangeHandler>();
+        this.layout = new VLayout();
+        this.parameterList = new ParameterList(flys, this, this.messages.new_project());
+        this.artifactsQueue = 0;
         this.recommendationQueue = 0;
-        this.newRecommendations  = new Stack<Recommendation>();
+        this.newRecommendations = new Stack<Recommendation>();
 
         this.currentKm = -1d;
         this.minKm = -1d;
@@ -166,29 +143,30 @@
         this.steps = -1d;
 
         addCollectionChangeHandler(this);
-        addCollectionChangeHandler(parameterList);
+        addCollectionChangeHandler(this.parameterList);
         addCollectionChangeHandler(flys);
         addOutputModesChangeHandler(this);
-        addOutputModesChangeHandler(parameterList);
+        addOutputModesChangeHandler(this.parameterList);
         addCloseClickHandler(this);
 
-        parameterList.addParameterChangeHandler(this);
+        this.parameterList.addParameterChangeHandler(this);
 
         init();
     }
 
     /**
-     * @param collection The collection to be displayed.
+     * @param collection
+     *            The collection to be displayed.
      */
-    public CollectionView(FLYS flys, Collection collection, Artifact artifact) {
-        this.flys          = flys;
-        this.artifact      = artifact;
-        this.collection    = collection;
-        this.tabs          = new TabSet();
-        this.outputTabs    = new HashMap<String, OutputTab>();
-        this.handlers      = new ArrayList<CollectionChangeHandler>();
-        this.outHandlers   = new ArrayList<OutputModesChangeHandler>();
-        this.layout        = new VLayout();
+    public CollectionView(final FLYS flys, final Collection collection, final Artifact artifact) {
+        this.flys = flys;
+        this.artifact = artifact;
+        this.collection = collection;
+        this.tabs = new TabSet();
+        this.outputTabs = new HashMap<String, OutputTab>();
+        this.handlers = new ArrayList<CollectionChangeHandler>();
+        this.outHandlers = new ArrayList<OutputModesChangeHandler>();
+        this.layout = new VLayout();
 
         this.currentKm = -1d;
         this.minKm = -1d;
@@ -196,31 +174,27 @@
         this.steps = -1d;
 
         if (artifact != null) {
-            this.parameterList = new ParameterList(
-                flys,
-                this,
-                // FIXME: literally every information about the artifact is transported from the server side
-                // but... the international name is resolved client-side.... Instead also transport the description of the artifact and use it!
-                // FIXME: the same holds for a very few other international strings (e.g. names of facets used in Tabs)
-                messages.getString(artifact.getName()),
-                artifact);
-        }
-        else {
-            this.parameterList = new ParameterList(
-                flys, this, messages.new_project());
+            this.parameterList = new ParameterList(flys, this,
+                    // FIXME: literally every information about the artifact is transported from the server side
+                    // but... the international name is resolved client-side.... Instead also transport the description of the artifact and
+                    // use it!
+                    // FIXME: the same holds for a very few other international strings (e.g. names of facets used in Tabs)
+                    this.messages.getString(artifact.getName()), artifact);
+        } else {
+            this.parameterList = new ParameterList(flys, this, this.messages.new_project());
         }
 
-        this.artifactsQueue     = 0;
+        this.artifactsQueue = 0;
         this.newRecommendations = new Stack<Recommendation>();
 
         addCollectionChangeHandler(this);
-        addCollectionChangeHandler(parameterList);
+        addCollectionChangeHandler(this.parameterList);
         addCollectionChangeHandler(flys);
         addOutputModesChangeHandler(this);
-        addOutputModesChangeHandler(parameterList);
+        addOutputModesChangeHandler(this.parameterList);
         addCloseClickHandler(this);
 
-        parameterList.addParameterChangeHandler(this);
+        this.parameterList.addParameterChangeHandler(this);
 
         init();
 
@@ -231,7 +205,6 @@
         }
     }
 
-
     /**
      * This method handles the initial layout stuff.
      */
@@ -241,7 +214,7 @@
 
         setMaximized(true);
 
-        layout.setWidth100();
+        this.layout.setWidth100();
 
         setCanDragReposition(true);
         setCanDragResize(true);
@@ -250,79 +223,72 @@
 
         setTitle("");
 
-        addItem(layout);
+        addItem(this.layout);
 
-        layout.addMember(tabs);
-        tabs.addTab(parameterList);
+        this.layout.addMember(this.tabs);
+        this.tabs.addTab(this.parameterList);
     }
 
     protected FLYS getFlys() {
-        return flys;
+        return this.flys;
     }
 
-
     /**
      * This method registers a new CollectionChangeHandler.
      *
-     * @param handler The new CollectionChangeHandler.
+     * @param handler
+     *            The new CollectionChangeHandler.
      */
     @Override
-    public void addCollectionChangeHandler(CollectionChangeHandler handler) {
+    public void addCollectionChangeHandler(final CollectionChangeHandler handler) {
         if (handler != null) {
-            handlers.add(handler);
+            this.handlers.add(handler);
         }
     }
 
-
     /**
      * This method registers a new OutputModesChangeHandler.
      *
-     * @param handler The new OutputModesChangeHandler.
+     * @param handler
+     *            The new OutputModesChangeHandler.
      */
     @Override
-    public void addOutputModesChangeHandler(OutputModesChangeHandler handler) {
+    public void addOutputModesChangeHandler(final OutputModesChangeHandler handler) {
         if (handler != null) {
-            outHandlers.add(handler);
+            this.outHandlers.add(handler);
         }
     }
 
-
     /**
      * This method calls the <code>onValueChange()</code> method of all
      * registered ValueChangeHanders.
      */
-    protected void fireCollectionChangeEvent(
-        Collection old, Collection newCol)
-    {
-        for (CollectionChangeHandler handler: handlers) {
+    protected void fireCollectionChangeEvent(final Collection old, final Collection newCol) {
+        for (final CollectionChangeHandler handler : this.handlers) {
             handler.onCollectionChange(new CollectionChangeEvent(old, newCol));
         }
     }
 
-
-    protected void fireOutputModesChangeEvent(OutputMode[] outputs) {
-        if (collection == null) {
+    protected void fireOutputModesChangeEvent(final OutputMode[] outputs) {
+        if (this.collection == null) {
             return;
         }
 
-        for (OutputModesChangeHandler handler: outHandlers) {
+        for (final OutputModesChangeHandler handler : this.outHandlers) {
             handler.onOutputModesChange(new OutputModesChangeEvent(outputs));
         }
     }
 
-
     /** Disables input, grey out, show spinning wheel of joy. */
     public void lockUI() {
-        lockScreen = ScreenLock.lockUI(layout, lockScreen);
+        this.lockScreen = ScreenLock.lockUI(this.layout, this.lockScreen);
     }
 
-
     /** Enable input, remove grey, remove spinning wheel of joy. */
     public void unlockUI() {
-        ScreenLock.unlockUI(layout, lockScreen);
+        ScreenLock.unlockUI(this.layout, this.lockScreen);
     }
 
-
     /**
      * This method returns true, if the Collection is new and no plugins has
      * been chosen.
@@ -330,67 +296,62 @@
      * @return true, if the Collection is new.
      */
     public boolean isNew() {
-        return collection.hasItems();
+        return this.collection.hasItems();
     }
 
-
     /**
      * Returns the artifact that is used for the parameterization.
      *
      * @return the artifact that is used for the parameterization.
      */
     public Artifact getArtifact() {
-        return artifact;
+        return this.artifact;
     }
 
-
     public User getUser() {
         return getFlys().getCurrentUser();
     }
 
-
     /**
      * Set the current artifact that is the master of the parameterization.
      *
-     * @param artifact The new artifact.
+     * @param artifact
+     *            The new artifact.
      */
-    public void setArtifact(Artifact artifact) {
+    public void setArtifact(final Artifact artifact) {
         this.artifact = artifact;
 
         onArtifactChanged(artifact);
     }
 
-
-    public void onArtifactChanged(Artifact artifact) {
+    public void onArtifactChanged(final Artifact artifact) {
         artifactChanged();
 
         if (artifact.isInBackground()) {
-            LoadingPanel p = new LoadingPanel(this, artifact);
-            p.addStepBackHandler(parameterList);
+            final LoadingPanel p = new LoadingPanel(this, artifact);
+            p.addStepBackHandler(this.parameterList);
         }
     }
 
-
     /**
      * Implements the onCollectionChange() method to do update the GUI after the
      * parameterization has changed.
      *
-     * @param event The ParameterChangeEvent.
+     * @param event
+     *            The ParameterChangeEvent.
      */
     @Override
-    public void onParameterChange(ParameterChangeEvent event) {
+    public void onParameterChange(final ParameterChangeEvent event) {
         GWT.log("CollectionView.onParameterChange");
         setArtifact(event.getNewValue());
     }
 
-
     protected void artifactChanged() {
-        Collection c = getCollection();
+        final Collection c = getCollection();
 
         if (c != null) {
             loadCollection(c);
-        }
-        else {
+        } else {
             updateView();
         }
     }
@@ -398,70 +359,68 @@
     /**
      * Loads all information of a collection.
      * If 'recommendations' present, load these.
-     * @param c the Collection
+     * 
+     * @param c
+     *            the Collection
      */
-    private void loadCollection(Collection c) {
-        ArtifactDescription desc = getArtifact().getArtifactDescription();
+    private void loadCollection(final Collection c) {
+        final ArtifactDescription desc = getArtifact().getArtifactDescription();
         final Recommendation[] recom = desc.getRecommendations();
-        Config config = Config.getInstance();
-        String locale = config.getLocale();
+        final Config config = Config.getInstance();
+        final String locale = config.getLocale();
 
-        describeCollectionService.describe(c.identifier(), locale,
-            new AsyncCallback<Collection>() {
-                @Override
-                public void onFailure(Throwable caught) {
-                    GWT.log("Could not DESCRIBE collection.");
-                    SC.warn(FLYS.getExceptionString(messages, caught));
-                }
+        this.describeCollectionService.describe(c.identifier(), locale, new AsyncCallback<Collection>() {
+            @Override
+            public void onFailure(final Throwable caught) {
+                GWT.log("Could not DESCRIBE collection.");
+                SC.warn(FLYS.getExceptionString(CollectionView.this.messages, caught));
+            }
 
-                @Override
-                public void onSuccess(Collection newCollection) {
-                    GWT.log("Successfully DESCRIBED collection.");
-                    boolean loaded = true;
-                    for (Recommendation r: recom) {
-                        if(!newCollection.loadedRecommendation(r)) {
-                            loaded = false;
-                        }
-                    }
-                    if  (!loaded) {
-                        loadRecommendedArtifacts(recom);
-                    }
-                    else {
-                        setCollection(newCollection);
+            @Override
+            public void onSuccess(final Collection newCollection) {
+                GWT.log("Successfully DESCRIBED collection.");
+                boolean loaded = true;
+                for (final Recommendation r : recom) {
+                    if (!newCollection.loadedRecommendation(r)) {
+                        loaded = false;
                     }
                 }
+                if (!loaded) {
+                    loadRecommendedArtifacts(recom);
+                } else {
+                    setCollection(newCollection);
+                }
             }
-        );
+        });
     }
 
-
     /**
      * Returns the collection of displayed by this view.
      *
      * @return the collection of this view.
      */
     public Collection getCollection() {
-        return collection;
+        return this.collection;
     }
 
-
-    protected void setCollection(Collection collection) {
+    protected void setCollection(final Collection collection) {
         setCollection(collection, false);
     }
 
-
     /**
      * Set the current collection.
      *
-     * @param collection The new collection.
-     * @param suppress Whether to fire a collectionchangeevent.
+     * @param collection
+     *            The new collection.
+     * @param suppress
+     *            Whether to fire a collectionchangeevent.
      */
-    protected void setCollection(Collection collection, boolean suppress) {
+    protected void setCollection(final Collection collection, final boolean suppress) {
         if (collection != null && this.collection == null) {
-            flys.getWorkspace().addView(collection.identifier(), this);
+            this.flys.getWorkspace().addView(collection.identifier(), this);
         }
 
-        Collection tmp  = this.collection;
+        final Collection tmp = this.collection;
         this.collection = collection;
 
         setTitle(collection.getDisplayName());
@@ -471,23 +430,22 @@
         }
     }
 
-
     @Override
-    public void onCollectionChange(CollectionChangeEvent event) {
-        if (artifactsQueue > 0) {
+    public void onCollectionChange(final CollectionChangeEvent event) {
+        if (this.artifactsQueue > 0) {
             GWT.log("Do not update UI because we are still loading Artifacts.");
             return;
         }
 
-        Collection newCol = event.getNewValue();
+        final Collection newCol = event.getNewValue();
 
-        Map<String, OutputMode> outs = newCol.getOutputModes();
+        final Map<String, OutputMode> outs = newCol.getOutputModes();
 
-        Set<String>  keys     = outs.keySet();
-        OutputMode[] prepared = new OutputMode[outs.size()];
+        final Set<String> keys = outs.keySet();
+        final OutputMode[] prepared = new OutputMode[outs.size()];
 
         int idx = 0;
-        for (String outname: keys) {
+        for (final String outname : keys) {
             prepared[idx++] = outs.get(outname);
         }
 
@@ -496,11 +454,10 @@
         updateView();
     }
 
-
     @Override
-    public void onOutputModesChange(OutputModesChangeEvent event) {
+    public void onOutputModesChange(final OutputModesChangeEvent event) {
         clearOutputTabs();
-        OutputMode[] outs = event.getOutputModes();
+        final OutputMode[] outs = event.getOutputModes();
 
         if (outs == null) {
             return;
@@ -508,11 +465,11 @@
 
         boolean hasCSV = false;
 
-        for (OutputMode out: outs) {
+        for (final OutputMode out : outs) {
             addOutputTab(out.getName(), out);
 
             if (out instanceof ExportMode) {
-                ExportMode export = (ExportMode) out;
+                final ExportMode export = (ExportMode) out;
 
                 if (export.getFacet("csv") != null) {
                     hasCSV = true;
@@ -521,25 +478,25 @@
         }
 
         if (!hasCSV) {
-            parameterList.removeTable();
+            this.parameterList.removeTable();
         }
     }
 
-
     /**
      * Adds a new tab for the OutputMode <i>out</i>.
      *
-     * @param name The name and title of the output.
+     * @param name
+     *            The name and title of the output.
      */
-    protected void addOutputTab(String name, OutputMode out) {
+    protected void addOutputTab(final String name, final OutputMode out) {
         if (out instanceof ExportMode) {
-            ExportMode export = (ExportMode) out;
+            final ExportMode export = (ExportMode) out;
 
-            if (export.getFacet("csv") != null && !parameterList.hasTable()) {
-                TableDataPanel p = new TableDataPanel();
-                p.setUuid(collection.identifier());
+            if (export.getFacet("csv") != null && !this.parameterList.hasTable()) {
+                final TableDataPanel p = new TableDataPanel();
+                p.setUuid(this.collection.identifier());
                 p.setName(out.getName());
-                parameterList.setTable(p);
+                this.parameterList.setTable(p);
             }
 
             return;
@@ -552,31 +509,29 @@
 
         GWT.log("Add new output tab for '" + name + "'");
 
-        String title  = messages.getString(name);
-        OutputTab tab = out.createOutputTab(title, getCollection(), this);
+        final String title = this.messages.getString(name);
+        final OutputTab tab = out.createOutputTab(title, getCollection(), this);
 
         if (tab != null) {
-            outputTabs.put(name, tab);
+            this.outputTabs.put(name, tab);
         }
     }
 
-
     /**
      * Removes all output mode tabs from tab bar.
      */
     protected void clearOutputTabs() {
         GWT.log("Clear OutputTabs.");
 
-        int num = tabs.getNumTabs();
+        final int num = this.tabs.getNumTabs();
 
-        for (int i = num-1; i >= 1; i--) {
-            tabs.removeTab(i);
+        for (int i = num - 1; i >= 1; i--) {
+            this.tabs.removeTab(i);
         }
 
-        outputTabs.clear();
+        this.outputTabs.clear();
     }
 
-
     /**
      * Update the view (refresh the list of old and current data).
      */
@@ -585,189 +540,158 @@
         updateOutputTabs();
     }
 
-
     /**
      * This method is used to update the tabs to show specific output modes.
      */
     protected void updateOutputTabs() {
         GWT.log("Update output tabs.");
-        if (outputTabs != null) {
-            Set<String> keys = outputTabs.keySet();
+        if (this.outputTabs != null) {
+            final Set<String> keys = this.outputTabs.keySet();
 
-            for (String key: keys) {
-                tabs.addTab(outputTabs.get(key));
+            for (final String key : keys) {
+                this.tabs.addTab(this.outputTabs.get(key));
             }
         }
     }
 
-
     @Override
-    public void onCloseClick(CloseClickEvent event) {
-        if (collection != null) {
-            if(artifact != null) {
-                flys.closeProject(collection.identifier());
+    public void onCloseClick(final CloseClickEvent event) {
+        if (this.collection != null) {
+            if (this.artifact != null) {
+                this.flys.closeProject(this.collection.identifier());
+            } else {
+                this.flys.getProjectList().deleteCollection(this.collection);
             }
-            else {
-                flys.getProjectList().deleteCollection(collection);
-            }
-        }
-        else {
+        } else {
             hide();
             destroy();
         }
     }
 
-
-    public void addArtifactToCollection(Artifact artifact) {
-        Config config               = Config.getInstance();
-        final String locale         = config.getLocale();
+    public void addArtifactToCollection(final Artifact artifact) {
+        final Config config = Config.getInstance();
+        final String locale = config.getLocale();
         final Collection collection = getCollection();
 
         GWT.log("CollectionView.addArtifactToCollection " + collection);
 
         if (collection != null) {
-            addArtifactService.add(
-                collection, artifact, locale,
-                new AsyncCallback<Collection>() {
-                    @Override
-                    public void onFailure(Throwable caught) {
-                        GWT.log("An error occured while adding artifact.");
-                        SC.warn(FLYS.getExceptionString(messages, caught));
-                    }
+            this.addArtifactService.add(collection, artifact, locale, new AsyncCallback<Collection>() {
+                @Override
+                public void onFailure(final Throwable caught) {
+                    GWT.log("An error occured while adding artifact.");
+                    SC.warn(FLYS.getExceptionString(CollectionView.this.messages, caught));
+                }
 
-                    @Override
-                    public void onSuccess(Collection newCollection) {
-                        GWT.log("Successfully added artifacts.");
-                        setCollection(newCollection);
-                    }
+                @Override
+                public void onSuccess(final Collection newCollection) {
+                    GWT.log("Successfully added artifacts.");
+                    setCollection(newCollection);
                 }
-            );
-        }
-        else {
+            });
+        } else {
             // Create new collection and add artifact.
             final Artifact art = artifact;
-            createCollectionService.create(
-                locale,
-                flys.getCurrentUser().identifier(),
-                new AsyncCallback<Collection>() {
-                    @Override
-                    public void onFailure(Throwable caught) {
-                        GWT.log("Could not create the new collection.");
-                        SC.warn(FLYS.getExceptionString(messages, caught));
-                    }
+            this.createCollectionService.create(locale, this.flys.getCurrentUser().identifier(), new AsyncCallback<Collection>() {
+                @Override
+                public void onFailure(final Throwable caught) {
+                    GWT.log("Could not create the new collection.");
+                    SC.warn(FLYS.getExceptionString(CollectionView.this.messages, caught));
+                }
 
-                    @Override
-                    public void onSuccess(Collection collection) {
-                        GWT.log("Successfully created a new collection.");
-                        addArtifactService.add(
-                            collection, art, locale,
-                            new AsyncCallback<Collection>() {
-                                @Override
-                                public void onFailure(Throwable caught) {
-                                    GWT.log("An error occured while "
-                                        + "adding artifact.");
-                                    SC.warn(FLYS.getExceptionString(
-                                            messages, caught));
-                                }
+                @Override
+                public void onSuccess(final Collection collection) {
+                    GWT.log("Successfully created a new collection.");
+                    CollectionView.this.addArtifactService.add(collection, art, locale, new AsyncCallback<Collection>() {
+                        @Override
+                        public void onFailure(final Throwable caught) {
+                            GWT.log("An error occured while " + "adding artifact.");
+                            SC.warn(FLYS.getExceptionString(CollectionView.this.messages, caught));
+                        }
 
-                                @Override
-                                public void onSuccess(
-                                    Collection newCollection) {
-                                    GWT.log("Successfully added artifacts.");
-                                    setCollection(newCollection);
-                                }
-                            }
-                        );
-                    }
+                        @Override
+                        public void onSuccess(final Collection newCollection) {
+                            GWT.log("Successfully added artifacts.");
+                            setCollection(newCollection);
+                        }
+                    });
                 }
-            );
+            });
         }
     }
 
-
     protected void addRecommendationsToCollection() {
-        Config config               = Config.getInstance();
-        final String locale         = config.getLocale();
+        final Config config = Config.getInstance();
+        final String locale = config.getLocale();
         final Collection collection = getCollection();
 
-        collection.addRecommendations(newRecommendations);
-
-        updater.update(collection, locale,
-            new AsyncCallback<Collection>() {
-                @Override
-                public void onFailure(Throwable caught) {
-                    newRecommendations.removeAllElements();
-                    setCollection(collection);
+        collection.addRecommendations(this.newRecommendations);
 
-                    GWT.log("An error occured while saving recommendations.");
-                    SC.warn(FLYS.getExceptionString(messages, caught));
-                }
+        this.updater.update(collection, locale, new AsyncCallback<Collection>() {
+            @Override
+            public void onFailure(final Throwable caught) {
+                CollectionView.this.newRecommendations.removeAllElements();
+                setCollection(collection);
 
-                @Override
-                public void onSuccess(Collection newCol) {
-                    GWT.log("Successfully saved recommendations.");
-                    newRecommendations.removeAllElements();
-                    setCollection(newCol);
-                }
+                GWT.log("An error occured while saving recommendations.");
+                SC.warn(FLYS.getExceptionString(CollectionView.this.messages, caught));
             }
-        );
+
+            @Override
+            public void onSuccess(final Collection newCol) {
+                GWT.log("Successfully saved recommendations.");
+                CollectionView.this.newRecommendations.removeAllElements();
+                setCollection(newCol);
+            }
+        });
     }
 
-
-    protected void loadRecommendedArtifacts(Recommendation[] recommendations) {
-        Config config               = Config.getInstance();
-        final String locale         = config.getLocale();
+    protected void loadRecommendedArtifacts(final Recommendation[] recommendations) {
+        final Config config = Config.getInstance();
+        final String locale = config.getLocale();
         final Collection collection = getCollection();
 
-        Artifact masterArtifact = getArtifact();
+        final Artifact masterArtifact = getArtifact();
 
         if (recommendations == null) {
             GWT.log("WARNING: Currently no recommendations.");
             return;
         }
 
-        for (final Recommendation recommendation: recommendations) {
+        for (final Recommendation recommendation : recommendations) {
             if (collection.loadedRecommendation(recommendation)) {
                 continue;
             }
-            newRecommendations.push(recommendation);
+            this.newRecommendations.push(recommendation);
 
             // XXX: UGLY! If no reference artifact given use uuid of
-            //      current artifact as reference.
+            // current artifact as reference.
             if (recommendation.getMasterArtifact() == null) {
                 recommendation.setMasterArtifact(masterArtifact.getUuid());
             }
 
         }
 
-        loadArtifactService.loadMany(
-            collection,
-            recommendations,
-            null,
-            locale,
-            new AsyncCallback<Artifact[]>() {
-                @Override
-                public void onFailure(Throwable caught) {
-                    GWT.log("Error loading recommendations: " +
-                        caught.getMessage());
-                    SC.warn(FLYS.getExceptionString(messages, caught));
-                }
+        this.loadArtifactService.loadMany(collection, recommendations, null, locale, new AsyncCallback<Artifact[]>() {
+            @Override
+            public void onFailure(final Throwable caught) {
+                GWT.log("Error loading recommendations: " + caught.getMessage());
+                SC.warn(FLYS.getExceptionString(CollectionView.this.messages, caught));
+            }
 
-                @Override
-                public void onSuccess(Artifact[] artifacts) {
-                    GWT.log("Loaded artifacts: " + artifacts.length);
-                    addRecommendationsToCollection();
-                }
+            @Override
+            public void onSuccess(final Artifact[] artifacts) {
+                GWT.log("Loaded artifacts: " + artifacts.length);
+                addRecommendationsToCollection();
+            }
         });
     }
 
-
-    public void registerTabHandler(TabSelectedHandler tse) {
-        tabs.addTabSelectedHandler(tse);
+    public void registerTabHandler(final TabSelectedHandler tse) {
+        this.tabs.addTabSelectedHandler(tse);
     }
 
-
-    public void setCurrentKm(double currentKm) {
+    public void setCurrentKm(final double currentKm) {
         this.currentKm = currentKm;
     }
 
@@ -775,7 +699,7 @@
         return this.currentKm;
     }
 
-    public void setMinKm(double km) {
+    public void setMinKm(final double km) {
         this.minKm = km;
     }
 
@@ -783,7 +707,7 @@
         return this.minKm;
     }
 
-    public void setMaxKm(double km) {
+    public void setMaxKm(final double km) {
         this.maxKm = km;
     }
 
@@ -791,7 +715,7 @@
         return this.maxKm;
     }
 
-    public void setSteps(double step) {
+    public void setSteps(final double step) {
         this.steps = step;
     }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gwt-client/src/test/java/test/SinfoTkhRunner.java	Thu Jun 14 17:03:53 2018 +0200
@@ -0,0 +1,70 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ *  Björnsen Beratende Ingenieure GmbH
+ *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * This file is Free Software under the GNU AGPL (>=v3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out the
+ * documentation coming with Dive4Elements River for details.
+ */
+package test;
+
+import java.io.IOException;
+
+import org.dive4elements.artifacts.httpclient.exceptions.ConnectionException;
+import org.dive4elements.river.client.shared.exceptions.ServerException;
+import org.dive4elements.river.client.shared.model.Data;
+import org.dive4elements.river.client.shared.model.DataItem;
+import org.dive4elements.river.client.shared.model.DefaultDataItem;
+import org.dive4elements.river.client.shared.model.StringOptionsData;
+
+import test.BerechnungsartenTester.CalcMode;
+import test.BerechnungsartenTester.FilenameMapper;
+import test.BerechnungsartenTester.River;
+
+/**
+ * @author Domenico Nardi Tironi
+ *
+ */
+public class SinfoTkhRunner extends AbstractModuleRunner {
+
+    public SinfoTkhRunner(final String username, final String password, final CalcMode sinfoCalcFlowDepth, final FilenameMapper file, final double from,
+            final double to, final River river) throws ConnectionException, ServerException {
+        super(username, password, AbstractModuleRunner.Infotype.sinfo, sinfoCalcFlowDepth, file, from, to, river);
+
+    }
+
+    @Override
+    public void runTest(final boolean exportToFile) throws ServerException, IOException {
+        /* Select River */
+        super.selectRiver();
+
+        /* Select CalcMode */
+        super.selectCalcMode();
+
+        /* Select Range */
+        super.selectMaxRange();
+
+        /* Select TRANSPORTKÖRPERHÖHHEN - einziger Unterschied zu FlowdepthMinMax */
+        //
+        // <data name="wq_isq" type="Boolean" />
+        // <data name="wq_isfree" type="Boolean" />
+        // <data name="wq_isrange" type="Boolean" />
+        // <data name="wq_from" type="Double" />
+        // <data name="wq_to" type="Double" />
+        // <data name="wq_step" type="Double" />
+        // <data name="wq_single" type="Double[]" />
+
+        feedAndGo(new Data[] {
+
+                new StringOptionsData("wq_isq", "wq_isq", new DataItem[] { new DefaultDataItem("false", "false", "false") }),
+                new StringOptionsData("wq_isfree", "wq_isfree", new DataItem[] { new DefaultDataItem("false", "false", "false") }),
+                new StringOptionsData("wq_isrange", "wq_isrange", new DataItem[] { new DefaultDataItem("false", "false", "false") }),
+
+                new StringOptionsData("wq_single", "wq_single", new DataItem[] { new DefaultDataItem("1059.446", "1059.446", "1059.446") }) }, 0);
+
+        describeCollection();
+
+        super.export(exportToFile);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gwt-client/src/test/resources/sinfo/tkh/sinfo_tkh_export.csv	Thu Jun 14 17:03:53 2018 +0200
@@ -0,0 +1,1797 @@
+"##Ergebnisausgabe - Beispielfluss - Transportkörperhöhen"
+"# FLYS-Version: 3.3.0"
+"# Bearbeiter: belger"
+"# Datum der Erstellung: 12.06.18"
+"# Gewässer: Beispielfluss"
+"# Höhensystem des Flusses: NHN + m "
+"# Bereich (km): 0,000 - 182,400"
+"# Berechnungsgrundlage: Gleichung nach GILL (1971)"
+""
+"Fluss-km";"Transportkörperhöhe [cm]";"Einteilung der Gewässersohle";"Mittlere Sohlhöhe [NHN + m]";"Wasserstand [NHN + m]";"Q [m³/s]";"Bezeichnung";"Bezugspegel";"Lage"
+""
+"##METADATEN WASSERSPIEGELLAGE"
+"# Bezeichnung der Wasserspiegellage: Q=1059.446 "
+"# Bezugspegel: Torgau"
+""
+"1,600";"0,0";"Starr";"87,83";"94,28";"1.075";"1.059,45";"Torgau";""
+"1,700";"0,0";"Starr";"87,76";"94,26";"1.075";"1.059,45";"Torgau";""
+"1,800";"0,0";"Starr";"87,78";"94,24";"1.075";"1.059,45";"Torgau";""
+"1,900";"0,0";"Starr";"87,78";"94,22";"1.075";"1.059,45";"Torgau";""
+"2,000";"0,0";"Starr";"87,75";"94,19";"1.075";"1.059,45";"Torgau";""
+"2,100";"0,0";"Starr";"87,72";"94,17";"1.075";"1.059,45";"Torgau";""
+"2,200";"0,6";"Starr";"87,67";"94,14";"1.075";"1.059,45";"Torgau";""
+"2,300";"1,7";"Starr";"87,62";"94,11";"1.075";"1.059,45";"Torgau";""
+"2,400";"0,9";"Starr";"87,25";"94,08";"1.075";"1.059,45";"Torgau";""
+"2,500";"0,0";"Starr";"87,02";"94,06";"1.075";"1.059,45";"Torgau";""
+"2,600";"0,0";"Starr";"86,94";"94,03";"1.075";"1.059,45";"Torgau";"Gemeinde: Forberge"
+"2,700";"0,0";"Starr";"86,83";"94,01";"1.075";"1.059,45";"Torgau";""
+"2,800";"0,0";"Starr";"86,68";"93,98";"1.075";"1.059,45";"Torgau";""
+"2,900";"0,0";"Starr";"86,85";"93,97";"1.075";"1.059,45";"Torgau";""
+"3,000";"0,0";"Starr";"87,00";"93,96";"1.075";"1.059,45";"Torgau";""
+"3,100";"0,0";"Starr";"86,89";"93,93";"1.075";"1.059,45";"Torgau";""
+"3,200";"0,0";"Starr";"87,09";"93,90";"1.075";"1.059,45";"Torgau";""
+"3,300";"0,0";"Starr";"87,12";"93,88";"1.075";"1.059,45";"Torgau";""
+"3,400";"0,0";"Starr";"87,12";"93,85";"1.075";"1.059,45";"Torgau";""
+"3,500";"3,0";"Starr";"87,18";"93,83";"1.075";"1.059,45";"Torgau";""
+"3,600";"2,2";"Starr";"87,23";"93,80";"1.075";"1.059,45";"Torgau";""
+"3,700";"1,4";"Starr";"87,22";"93,78";"1.075";"1.059,45";"Torgau";""
+"3,800";"2,7";"Starr";"87,22";"93,75";"1.075";"1.059,45";"Torgau";""
+"3,900";"4,0";"Starr";"87,29";"93,73";"1.075";"1.059,45";"Torgau";""
+"4,000";"0,0";"Starr";"87,33";"93,70";"1.075";"1.059,45";"Torgau";""
+"4,100";"0,0";"Starr";"87,32";"93,68";"1.075";"1.059,45";"Torgau";""
+"4,200";"0,0";"Starr";"87,29";"93,66";"1.075";"1.059,45";"Torgau";""
+"4,300";"0,0";"Starr";"87,28";"93,64";"1.075";"1.059,45";"Torgau";""
+"4,400";"0,0";"Starr";"87,32";"93,61";"1.075";"1.059,45";"Torgau";""
+"4,500";"1,3";"Starr";"87,28";"93,58";"1.075";"1.059,45";"Torgau";""
+"4,600";"3,0";"Starr";"87,19";"93,55";"1.075";"1.059,45";"Torgau";"Gemeinde: Klein-Zschepa"
+"4,700";"4,8";"Starr";"87,07";"93,52";"1.075";"1.059,45";"Torgau";""
+"4,800";"6,8";"Starr";"86,96";"93,49";"1.075";"1.059,45";"Torgau";""
+"4,900";"8,9";"Starr";"86,78";"93,46";"1.075";"1.059,45";"Torgau";""
+"5,000";"14,3";"Starr";"86,45";"93,43";"1.075";"1.059,45";"Torgau";""
+"5,100";"18,4";"Starr";"86,46";"93,40";"1.075";"1.059,45";"Torgau";""
+"5,200";"17,6";"Starr";"86,55";"93,36";"1.075";"1.059,45";"Torgau";""
+"5,300";"17,1";"Starr";"86,50";"93,34";"1.075";"1.059,45";"Torgau";""
+"5,400";"17,2";"Starr";"86,58";"93,31";"1.075";"1.059,45";"Torgau";""
+"5,500";"17,3";"Starr";"86,63";"93,29";"1.075";"1.059,45";"Torgau";""
+"5,600";"16,3";"Starr";"86,65";"93,27";"1.075";"1.059,45";"Torgau";"Gemeinde: Groß-Zschepa"
+"5,700";"14,4";"Starr";"86,71";"93,25";"1.075";"1.059,45";"Torgau";""
+"5,800";"12,8";"Starr";"86,74";"93,23";"1.075";"1.059,45";"Torgau";""
+"5,900";"11,2";"Starr";"86,72";"93,22";"1.075";"1.059,45";"Torgau";""
+"6,000";"13,0";"Starr";"86,64";"93,20";"1.075";"1.059,45";"Torgau";""
+"6,100";"14,7";"Starr";"86,56";"93,18";"1.075";"1.059,45";"Torgau";""
+"6,200";"15,5";"Starr";"86,55";"93,15";"1.075";"1.059,45";"Torgau";""
+"6,300";"16,2";"Starr";"86,52";"93,12";"1.075";"1.059,45";"Torgau";""
+"6,400";"15,3";"Starr";"86,53";"93,09";"1.075";"1.059,45";"Torgau";""
+"6,500";"14,4";"Starr";"86,47";"93,06";"1.075";"1.059,45";"Torgau";""
+"6,600";"16,3";"Starr";"86,10";"93,03";"1.075";"1.059,45";"Torgau";"Gemeinde: Strehla"
+"6,700";"18,1";"Starr";"85,78";"93,01";"1.075";"1.059,45";"Torgau";""
+"6,800";"10,9";"Starr";"86,24";"92,98";"1.075";"1.059,45";"Torgau";""
+"6,900";"3,3";"Starr";"86,19";"92,98";"1.075";"1.059,45";"Torgau";""
+"7,000";"0,3";"Starr";"86,21";"92,97";"1.075";"1.059,45";"Torgau";""
+"7,100";"0,0";"Starr";"86,10";"92,96";"1.075";"1.059,45";"Torgau";""
+"7,200";"5,1";"Starr";"86,06";"92,94";"1.075";"1.059,45";"Torgau";""
+"7,300";"11,3";"Starr";"86,20";"92,91";"1.075";"1.059,45";"Torgau";""
+"7,400";"11,5";"Starr";"86,27";"92,88";"1.075";"1.059,45";"Torgau";""
+"7,500";"11,9";"Starr";"86,25";"92,86";"1.075";"1.059,45";"Torgau";""
+"7,600";"10,6";"Starr";"86,21";"92,83";"1.075";"1.059,45";"Torgau";""
+"7,700";"9,3";"Starr";"86,15";"92,81";"1.075";"1.059,45";"Torgau";""
+"7,800";"19,8";"Starr";"86,16";"92,79";"1.075";"1.059,45";"Torgau";""
+"7,900";"26,2";"Starr";"86,18";"92,73";"1.075";"1.059,45";"Torgau";""
+"8,000";"28,0";"Starr";"86,14";"92,67";"1.075";"1.059,45";"Torgau";""
+"8,100";"29,6";"Starr";"86,09";"92,62";"1.075";"1.059,45";"Torgau";""
+"8,200";"32,2";"Starr";"86,07";"92,57";"1.075";"1.059,45";"Torgau";""
+"8,300";"34,5";"Starr";"85,94";"92,50";"1.075";"1.059,45";"Torgau";""
+"8,400";"30,5";"Starr";"85,54";"92,43";"1.075";"1.059,45";"Torgau";""
+"8,500";"15,7";"Starr";"85,56";"92,47";"1.075";"1.059,45";"Torgau";""
+"8,600";"21,5";"Starr";"85,65";"92,50";"1.075";"1.059,45";"Torgau";"Gemeinde: Nixstein"
+"8,700";"25,8";"Starr";"85,65";"92,45";"1.075";"1.059,45";"Torgau";""
+"8,800";"25,9";"Starr";"85,61";"92,39";"1.075";"1.059,45";"Torgau";""
+"8,900";"25,3";"Starr";"85,72";"92,36";"1.075";"1.059,45";"Torgau";""
+"9,000";"25,9";"Starr";"85,69";"92,33";"1.075";"1.059,45";"Torgau";""
+"9,100";"26,3";"Starr";"85,69";"92,31";"1.075";"1.059,45";"Torgau";""
+"9,200";"29,2";"Starr";"85,68";"92,29";"1.075";"1.059,45";"Torgau";""
+"9,300";"31,1";"Starr";"85,73";"92,25";"1.075";"1.059,45";"Torgau";""
+"9,400";"31,5";"Starr";"85,55";"92,21";"1.075";"1.059,45";"Torgau";""
+"9,500";"34,0";"Starr";"85,00";"92,18";"1.075";"1.059,45";"Torgau";""
+"9,600";"33,8";"Starr";"85,04";"92,14";"1.075";"1.059,45";"Torgau";"Gemeinde: Görzig,Trebnitz"
+"9,700";"32,0";"Starr";"85,35";"92,11";"1.075";"1.059,45";"Torgau";""
+"9,800";"25,9";"Starr";"85,76";"92,08";"1.075";"1.059,45";"Torgau";""
+"9,900";"20,0";"Starr";"85,88";"92,07";"1.075";"1.059,45";"Torgau";""
+"10,000";"20,9";"Starr";"85,50";"92,05";"1.075";"1.059,45";"Torgau";""
+"10,100";"20,5";"Starr";"85,41";"92,03";"1.075";"1.059,45";"Torgau";""
+"10,200";"22,1";"Starr";"85,29";"92,00";"1.075";"1.059,45";"Torgau";""
+"10,300";"23,6";"Starr";"85,20";"91,98";"1.075";"1.059,45";"Torgau";""
+"10,400";"27,9";"Starr";"85,20";"91,95";"1.075";"1.059,45";"Torgau";""
+"10,500";"30,9";"Starr";"85,21";"91,92";"1.075";"1.059,45";"Torgau";""
+"10,600";"27,8";"Starr";"85,25";"91,89";"1.075";"1.059,45";"Torgau";""
+"10,700";"23,9";"Starr";"85,32";"91,88";"1.075";"1.059,45";"Torgau";""
+"10,800";"22,9";"Starr";"85,38";"91,86";"1.075";"1.059,45";"Torgau";"Gemeinde: Kreinitz"
+"10,900";"22,1";"Starr";"85,39";"91,83";"1.075";"1.059,45";"Torgau";""
+"11,000";"19,9";"Starr";"85,39";"91,80";"1.075";"1.059,45";"Torgau";""
+"11,100";"18,0";"Starr";"85,23";"91,77";"1.075";"1.059,45";"Torgau";""
+"11,200";"20,3";"Starr";"85,17";"91,74";"1.075";"1.059,45";"Torgau";""
+"11,300";"21,7";"Starr";"85,27";"91,71";"1.075";"1.059,45";"Torgau";""
+"11,400";"22,8";"Starr";"85,28";"91,68";"1.075";"1.059,45";"Torgau";""
+"11,500";"23,9";"Starr";"85,28";"91,66";"1.075";"1.059,45";"Torgau";""
+"11,600";"23,5";"Starr";"85,27";"91,63";"1.075";"1.059,45";"Torgau";""
+"11,700";"23,2";"Starr";"85,24";"91,60";"1.075";"1.059,45";"Torgau";""
+"11,800";"23,4";"Starr";"85,22";"91,57";"1.075";"1.059,45";"Torgau";""
+"11,900";"23,9";"Starr";"85,12";"91,54";"1.075";"1.059,45";"Torgau";""
+"12,000";"23,6";"Starr";"85,02";"91,51";"1.075";"1.059,45";"Torgau";""
+"12,100";"23,0";"Starr";"84,98";"91,49";"1.075";"1.059,45";"Torgau";""
+"12,200";"21,8";"Starr";"85,05";"91,46";"1.075";"1.059,45";"Torgau";""
+"12,300";"21,0";"Starr";"85,04";"91,44";"1.075";"1.059,45";"Torgau";""
+"12,400";"24,7";"Starr";"84,88";"91,42";"1.075";"1.059,45";"Torgau";""
+"12,500";"27,1";"Starr";"84,89";"91,38";"1.075";"1.059,45";"Torgau";""
+"12,600";"27,7";"Starr";"84,93";"91,34";"1.075";"1.059,45";"Torgau";""
+"12,700";"32,3";"Starr";"84,20";"91,32";"1.075";"1.059,45";"Torgau";""
+"12,800";"32,4";"Starr";"84,32";"91,30";"1.075";"1.059,45";"Torgau";""
+"12,900";"33,7";"Starr";"84,22";"91,27";"1.075";"1.059,45";"Torgau";""
+"13,000";"27,3";"Starr";"84,18";"91,24";"1.075";"1.059,45";"Torgau";""
+"13,100";"31,1";"Starr";"83,97";"91,19";"1.075";"1.059,45";"Torgau";""
+"13,200";"33,1";"Starr";"83,94";"91,14";"1.075";"1.059,45";"Torgau";""
+"13,300";"35,0";"Starr";"83,88";"91,10";"1.075";"1.059,45";"Torgau";""
+"13,400";"33,1";"Starr";"83,81";"91,06";"1.075";"1.059,45";"Torgau";""
+"13,500";"30,1";"Starr";"83,80";"90,95";"1.075";"1.059,45";"Torgau";""
+"13,600";"30,7";"Starr";"83,86";"90,84";"1.075";"1.059,45";"Torgau";""
+"13,700";"31,9";"Starr";"83,82";"90,73";"1.075";"1.059,45";"Torgau";""
+"13,800";"29,2";"Starr";"83,90";"90,62";"1.075";"1.059,45";"Torgau";""
+"13,900";"27,0";"Starr";"83,89";"90,59";"1.075";"1.059,45";"Torgau";""
+"14,000";"26,4";"Starr";"83,84";"90,56";"1.075";"1.059,45";"Torgau";""
+"14,100";"26,0";"Starr";"83,74";"90,55";"1.075";"1.059,45";"Torgau";""
+"14,200";"29,0";"Starr";"83,67";"90,53";"1.075";"1.059,45";"Torgau";""
+"14,300";"31,1";"Starr";"83,68";"90,49";"1.075";"1.059,45";"Torgau";""
+"14,400";"29,4";"Starr";"83,74";"90,44";"1.075";"1.059,45";"Torgau";""
+"14,500";"27,4";"Starr";"83,83";"90,42";"1.075";"1.059,45";"Torgau";""
+"14,600";"30,3";"Starr";"83,72";"90,39";"1.075";"1.059,45";"Torgau";""
+"14,700";"34,5";"Starr";"83,31";"90,35";"1.075";"1.059,45";"Torgau";""
+"14,800";"40,7";"Starr";"82,68";"90,31";"1.075";"1.059,45";"Torgau";""
+"14,900";"43,4";"Starr";"82,55";"90,26";"1.075";"1.059,45";"Torgau";""
+"15,000";"40,1";"Starr";"82,88";"90,21";"1.075";"1.059,45";"Torgau";""
+"15,100";"36,8";"Starr";"83,23";"90,19";"1.075";"1.059,45";"Torgau";""
+"15,200";"33,5";"Starr";"83,48";"90,17";"1.075";"1.059,45";"Torgau";""
+"15,300";"31,5";"Starr";"83,44";"90,16";"1.075";"1.059,45";"Torgau";""
+"15,400";"34,6";"Starr";"83,29";"90,15";"1.075";"1.059,45";"Torgau";""
+"15,500";"36,6";"Starr";"83,24";"90,11";"1.075";"1.059,45";"Torgau";""
+"15,600";"36,7";"Starr";"83,11";"90,07";"1.075";"1.059,45";"Torgau";""
+"15,700";"36,3";"Starr";"83,09";"90,05";"1.075";"1.059,45";"Torgau";""
+"15,800";"37,1";"Starr";"83,12";"90,02";"1.075";"1.059,45";"Torgau";""
+"15,900";"37,9";"Starr";"83,13";"89,99";"1.075";"1.059,45";"Torgau";""
+"16,000";"36,1";"Starr";"83,24";"89,95";"1.075";"1.059,45";"Torgau";""
+"16,100";"35,7";"Starr";"83,12";"89,93";"1.075";"1.059,45";"Torgau";""
+"16,200";"37,8";"Starr";"82,84";"89,90";"1.075";"1.059,45";"Torgau";""
+"16,300";"37,9";"Starr";"82,86";"89,87";"1.075";"1.059,45";"Torgau";""
+"16,400";"39,4";"Starr";"82,92";"89,84";"1.075";"1.059,45";"Torgau";""
+"16,500";"41,9";"Starr";"82,78";"89,81";"1.075";"1.059,45";"Torgau";""
+"16,600";"43,7";"Starr";"82,72";"89,78";"1.075";"1.059,45";"Torgau";""
+"16,700";"44,2";"Starr";"82,78";"89,75";"1.075";"1.059,45";"Torgau";""
+"16,800";"43,3";"Starr";"82,89";"89,71";"1.075";"1.059,45";"Torgau";""
+"16,900";"43,0";"Starr";"82,93";"89,68";"1.075";"1.059,45";"Torgau";""
+"17,000";"42,6";"Starr";"82,92";"89,64";"1.075";"1.059,45";"Torgau";""
+"17,100";"42,9";"Starr";"82,83";"89,61";"1.075";"1.059,45";"Torgau";""
+"17,200";"43,8";"Starr";"82,74";"89,57";"1.075";"1.059,45";"Torgau";""
+"17,300";"44,2";"Starr";"82,72";"89,54";"1.075";"1.059,45";"Torgau";""
+"17,400";"45,9";"Starr";"82,56";"89,51";"1.075";"1.059,45";"Torgau";""
+"17,500";"48,8";"Starr";"82,24";"89,47";"1.075";"1.059,45";"Torgau";""
+"17,600";"45,5";"Starr";"82,56";"89,43";"1.075";"1.059,45";"Torgau";""
+"17,700";"44,1";"Starr";"82,66";"89,40";"1.075";"1.059,45";"Torgau";""
+"17,800";"42,1";"Starr";"82,89";"89,37";"1.075";"1.059,45";"Torgau";""
+"17,900";"46,5";"Starr";"82,33";"89,34";"1.075";"1.059,45";"Torgau";""
+"18,000";"49,3";"Starr";"81,93";"89,31";"1.075";"1.059,45";"Torgau";""
+"18,100";"48,9";"Starr";"81,92";"89,28";"1.075";"1.059,45";"Torgau";""
+"18,200";"48,1";"Starr";"82,15";"89,25";"1.075";"1.059,45";"Torgau";"Geschiebemessstelle: Mühlberg"
+"18,300";"47,2";"Starr";"82,27";"89,21";"1.075";"1.059,45";"Torgau";""
+"18,400";"46,8";"Starr";"82,19";"89,17";"1.075";"1.059,45";"Torgau";""
+"18,500";"47,7";"Starr";"81,95";"89,15";"1.075";"1.059,45";"Torgau";""
+"18,600";"48,8";"Starr";"81,69";"89,12";"1.075";"1.059,45";"Torgau";""
+"18,700";"49,7";"Starr";"81,44";"89,11";"1.075";"1.059,45";"Torgau";"Hafen: Mühlberg -Schutz- und Sicherheitshafen"
+"18,800";"45,9";"Starr";"81,27";"89,10";"1.075";"1.059,45";"Torgau";""
+"18,900";"36,8";"Starr";"81,44";"89,10";"1.075";"1.059,45";"Torgau";""
+"19,000";"43,3";"Starr";"81,47";"89,09";"1.075";"1.059,45";"Torgau";""
+"19,100";"44,2";"Starr";"81,88";"89,06";"1.075";"1.059,45";"Torgau";""
+"19,200";"42,1";"Starr";"82,06";"89,03";"1.075";"1.059,45";"Torgau";""
+"19,300";"42,6";"Starr";"81,87";"89,01";"1.075";"1.059,45";"Torgau";""
+"19,400";"41,1";"Starr";"81,76";"88,98";"1.075";"1.059,45";"Torgau";""
+"19,500";"39,6";"Starr";"81,58";"88,96";"1.075";"1.059,45";"Torgau";"Fähre: Köttlitz -Gierseilfähre"
+"19,600";"42,8";"Starr";"81,18";"88,94";"1.075";"1.059,45";"Torgau";"Zufluss: Lukke"
+"19,700";"43,5";"Starr";"81,14";"88,89";"1.075";"1.059,45";"Torgau";""
+"19,800";"42,8";"Starr";"81,50";"88,84";"1.068";"1.059,45";"Torgau";""
+"19,900";"42,4";"Starr";"81,73";"88,81";"1.068";"1.059,45";"Torgau";""
+"20,000";"41,1";"Starr";"81,91";"88,77";"1.068";"1.059,45";"Torgau";""
+"20,100";"40,5";"Starr";"81,98";"88,74";"1.068";"1.059,45";"Torgau";""
+"20,200";"40,3";"Starr";"81,94";"88,70";"1.068";"1.059,45";"Torgau";""
+"20,300";"40,1";"Starr";"81,90";"88,67";"1.068";"1.059,45";"Torgau";""
+"20,400";"39,1";"Starr";"81,96";"88,64";"1.068";"1.059,45";"Torgau";""
+"20,500";"39,5";"Starr";"81,82";"88,61";"1.068";"1.059,45";"Torgau";""
+"20,600";"39,8";"Starr";"81,91";"88,58";"1.068";"1.059,45";"Torgau";""
+"20,700";"40,8";"Starr";"81,83";"88,54";"1.068";"1.059,45";"Torgau";""
+"20,800";"40,8";"Starr";"81,60";"88,50";"1.068";"1.059,45";"Torgau";""
+"20,900";"40,0";"Starr";"81,39";"88,48";"1.068";"1.059,45";"Torgau";""
+"21,000";"42,3";"Starr";"81,00";"88,45";"1.068";"1.059,45";"Torgau";""
+"21,100";"43,4";"Starr";"80,80";"88,42";"1.068";"1.059,45";"Torgau";""
+"21,200";"42,2";"Starr";"80,90";"88,39";"1.068";"1.059,45";"Torgau";""
+"21,300";"40,4";"Starr";"81,09";"88,36";"1.068";"1.059,45";"Torgau";""
+"21,400";"38,4";"Starr";"81,28";"88,32";"1.068";"1.059,45";"Torgau";""
+"21,500";"40,0";"Starr";"80,94";"88,28";"1.068";"1.059,45";"Torgau";""
+"21,600";"39,8";"Starr";"81,13";"88,24";"1.068";"1.059,45";"Torgau";""
+"21,700";"39,6";"Starr";"81,25";"88,20";"1.068";"1.059,45";"Torgau";""
+"21,800";"38,9";"Starr";"81,28";"88,16";"1.064";"1.059,45";"Torgau";""
+"21,900";"38,6";"Starr";"81,26";"88,13";"1.064";"1.059,45";"Torgau";""
+"22,000";"37,1";"Starr";"81,29";"88,09";"1.064";"1.059,45";"Torgau";""
+"22,100";"35,5";"Starr";"81,30";"88,07";"1.064";"1.059,45";"Torgau";""
+"22,200";"36,1";"Starr";"80,90";"88,04";"1.064";"1.059,45";"Torgau";""
+"22,300";"33,4";"Starr";"80,98";"88,02";"1.064";"1.059,45";"Torgau";""
+"22,400";"35,2";"Starr";"80,94";"87,99";"1.064";"1.059,45";"Torgau";""
+"22,500";"36,5";"Starr";"80,91";"87,95";"1.064";"1.059,45";"Torgau";""
+"22,600";"34,1";"Starr";"81,11";"87,91";"1.064";"1.059,45";"Torgau";""
+"22,700";"32,9";"Starr";"81,09";"87,88";"1.064";"1.059,45";"Torgau";""
+"22,800";"30,8";"Starr";"81,10";"87,84";"1.064";"1.059,45";"Torgau";""
+"22,900";"28,9";"Starr";"81,02";"87,82";"1.064";"1.059,45";"Torgau";""
+"23,000";"28,7";"Starr";"81,11";"87,79";"1.064";"1.059,45";"Torgau";""
+"23,100";"30,2";"Starr";"80,86";"87,75";"1.064";"1.059,45";"Torgau";""
+"23,200";"28,8";"Starr";"80,82";"87,70";"1.064";"1.059,45";"Torgau";""
+"23,300";"27,4";"Starr";"80,78";"87,68";"1.064";"1.059,45";"Torgau";""
+"23,400";"25,2";"Starr";"80,80";"87,65";"1.064";"1.059,45";"Torgau";""
+"23,500";"23,0";"Starr";"80,78";"87,64";"1.064";"1.059,45";"Torgau";""
+"23,600";"29,3";"Starr";"80,74";"87,62";"1.064";"1.059,45";"Torgau";""
+"23,700";"33,6";"Starr";"80,70";"87,58";"1.064";"1.059,45";"Torgau";""
+"23,800";"32,7";"Starr";"80,70";"87,53";"1.064";"1.059,45";"Torgau";""
+"23,900";"32,2";"Starr";"80,64";"87,50";"1.064";"1.059,45";"Torgau";""
+"24,000";"32,9";"Starr";"80,52";"87,47";"1.064";"1.059,45";"Torgau";""
+"24,100";"33,7";"Starr";"80,38";"87,44";"1.064";"1.059,45";"Torgau";""
+"24,200";"35,0";"Starr";"80,16";"87,41";"1.064";"1.059,45";"Torgau";""
+"24,300";"36,3";"Starr";"79,94";"87,39";"1.064";"1.059,45";"Torgau";""
+"24,400";"35,2";"Starr";"80,02";"87,36";"1.064";"1.059,45";"Torgau";""
+"24,500";"33,2";"Starr";"80,24";"87,34";"1.064";"1.059,45";"Torgau";""
+"24,600";"33,7";"Starr";"80,44";"87,31";"1.064";"1.059,45";"Torgau";""
+"24,700";"34,5";"Starr";"80,53";"87,28";"1.064";"1.059,45";"Torgau";""
+"24,800";"35,8";"Starr";"80,50";"87,25";"1.064";"1.059,45";"Torgau";""
+"24,900";"37,9";"Starr";"80,32";"87,21";"1.064";"1.059,45";"Torgau";""
+"25,000";"37,6";"Starr";"80,34";"87,17";"1.064";"1.059,45";"Torgau";""
+"25,100";"37,2";"Starr";"80,36";"87,14";"1.064";"1.059,45";"Torgau";""
+"25,200";"37,2";"Starr";"80,31";"87,11";"1.064";"1.059,45";"Torgau";""
+"25,300";"36,3";"Starr";"80,41";"87,09";"1.064";"1.059,45";"Torgau";""
+"25,400";"35,8";"Starr";"80,36";"87,06";"1.064";"1.059,45";"Torgau";""
+"25,500";"36,5";"Starr";"80,11";"87,04";"1.064";"1.059,45";"Torgau";""
+"25,600";"39,1";"Starr";"79,87";"87,02";"1.064";"1.059,45";"Torgau";""
+"25,700";"40,2";"Starr";"79,79";"86,99";"1.064";"1.059,45";"Torgau";""
+"25,800";"40,0";"Starr";"79,82";"86,95";"1.064";"1.059,45";"Torgau";""
+"25,900";"40,4";"Starr";"79,78";"86,92";"1.064";"1.059,45";"Torgau";""
+"26,000";"41,2";"Starr";"79,52";"86,88";"1.064";"1.059,45";"Torgau";""
+"26,100";"40,3";"Starr";"79,52";"86,86";"1.064";"1.059,45";"Torgau";""
+"26,200";"40,4";"Starr";"79,53";"86,83";"1.064";"1.059,45";"Torgau";""
+"26,300";"40,7";"Starr";"79,52";"86,79";"1.064";"1.059,45";"Torgau";""
+"26,400";"42,0";"Starr";"79,39";"86,75";"1.064";"1.059,45";"Torgau";""
+"26,500";"42,1";"Starr";"79,43";"86,72";"1.064";"1.059,45";"Torgau";""
+"26,600";"38,8";"Starr";"79,75";"86,68";"1.064";"1.059,45";"Torgau";"Bundesland: Freistaat Sachsen"
+"26,700";"36,6";"Starr";"79,90";"86,67";"1.064";"1.059,45";"Torgau";""
+"26,800";"36,9";"Starr";"79,94";"86,65";"1.064";"1.059,45";"Torgau";""
+"26,900";"37,2";"Starr";"79,94";"86,61";"1.064";"1.059,45";"Torgau";""
+"27,000";"37,8";"Starr";"79,91";"86,57";"1.064";"1.059,45";"Torgau";""
+"27,100";"40,2";"Starr";"79,61";"86,53";"1.064";"1.059,45";"Torgau";""
+"27,200";"39,9";"Starr";"79,59";"86,49";"1.064";"1.059,45";"Torgau";""
+"27,300";"38,9";"Starr";"79,68";"86,47";"1.064";"1.059,45";"Torgau";""
+"27,400";"38,2";"Starr";"79,66";"86,45";"1.064";"1.059,45";"Torgau";""
+"27,500";"36,7";"Starr";"79,76";"86,43";"1.064";"1.059,45";"Torgau";""
+"27,600";"34,0";"Starr";"79,89";"86,41";"1.064";"1.059,45";"Torgau";""
+"27,700";"31,0";"Starr";"80,05";"86,39";"1.064";"1.059,45";"Torgau";""
+"27,800";"33,3";"Starr";"79,83";"86,37";"1.064";"1.059,45";"Torgau";""
+"27,900";"36,0";"Starr";"79,52";"86,33";"1.064";"1.059,45";"Torgau";""
+"28,000";"38,4";"Starr";"79,49";"86,29";"1.064";"1.059,45";"Torgau";""
+"28,100";"39,9";"Starr";"79,51";"86,24";"1.064";"1.059,45";"Torgau";""
+"28,200";"38,6";"Starr";"79,52";"86,18";"1.064";"1.059,45";"Torgau";""
+"28,300";"37,6";"Starr";"79,49";"86,17";"1.064";"1.059,45";"Torgau";""
+"28,400";"38,4";"Starr";"79,45";"86,15";"1.064";"1.059,45";"Torgau";""
+"28,500";"38,8";"Starr";"79,44";"86,11";"1.064";"1.059,45";"Torgau";""
+"28,600";"38,5";"Starr";"79,44";"86,07";"1.064";"1.059,45";"Torgau";""
+"28,700";"38,8";"Starr";"79,35";"86,04";"1.064";"1.059,45";"Torgau";""
+"28,800";"39,5";"Starr";"79,27";"86,00";"1.064";"1.059,45";"Torgau";""
+"28,900";"40,1";"Starr";"79,18";"85,97";"1.064";"1.059,45";"Torgau";""
+"29,000";"42,4";"Starr";"78,96";"85,93";"1.064";"1.059,45";"Torgau";""
+"29,100";"42,2";"Starr";"79,04";"85,89";"1.064";"1.059,45";"Torgau";""
+"29,200";"41,0";"Starr";"79,13";"85,84";"1.064";"1.059,45";"Torgau";""
+"29,300";"40,2";"Starr";"79,15";"85,82";"1.064";"1.059,45";"Torgau";""
+"29,400";"39,8";"Starr";"79,16";"85,80";"1.064";"1.059,45";"Torgau";""
+"29,500";"40,0";"Starr";"79,07";"85,77";"1.064";"1.059,45";"Torgau";""
+"29,600";"41,4";"Starr";"78,94";"85,73";"1.064";"1.059,45";"Torgau";""
+"29,700";"42,0";"Starr";"78,91";"85,69";"1.064";"1.059,45";"Torgau";""
+"29,800";"40,2";"Starr";"78,95";"85,64";"1.064";"1.059,45";"Torgau";""
+"29,900";"38,7";"Starr";"78,95";"85,63";"1.064";"1.059,45";"Torgau";""
+"30,000";"43,5";"Starr";"78,45";"85,62";"1.064";"1.059,45";"Torgau";""
+"30,100";"46,0";"Starr";"78,25";"85,59";"1.064";"1.059,45";"Torgau";""
+"30,200";"45,5";"Starr";"78,09";"85,55";"1.064";"1.059,45";"Torgau";""
+"30,300";"43,7";"Starr";"78,07";"85,54";"1.064";"1.059,45";"Torgau";""
+"30,400";"44,8";"Starr";"78,04";"85,52";"1.064";"1.059,45";"Torgau";""
+"30,500";"43,7";"Starr";"78,30";"85,48";"1.064";"1.059,45";"Torgau";""
+"30,600";"44,0";"Starr";"78,27";"85,44";"1.064";"1.059,45";"Torgau";""
+"30,700";"44,6";"Starr";"78,22";"85,42";"1.064";"1.059,45";"Torgau";""
+"30,800";"43,3";"Starr";"78,30";"85,39";"1.062";"1.059,45";"Torgau";""
+"30,900";"42,7";"Starr";"78,26";"85,37";"1.062";"1.059,45";"Torgau";""
+"31,000";"43,9";"Starr";"78,19";"85,34";"1.062";"1.059,45";"Torgau";""
+"31,100";"44,2";"Starr";"78,19";"85,29";"1.062";"1.059,45";"Torgau";""
+"31,200";"46,7";"Starr";"78,03";"85,24";"1.062";"1.059,45";"Torgau";""
+"31,300";"50,3";"Starr";"77,69";"85,19";"1.062";"1.059,45";"Torgau";""
+"31,400";"47,7";"Starr";"77,98";"85,14";"1.062";"1.059,45";"Torgau";""
+"31,500";"45,8";"Starr";"78,14";"85,09";"1.062";"1.059,45";"Torgau";""
+"31,600";"45,6";"Starr";"78,05";"85,03";"1.062";"1.059,45";"Torgau";""
+"32,200";"43,3";"Starr";"77,85";"85,01";"1.062";"1.059,45";"Torgau";""
+"32,300";"42,8";"Starr";"77,84";"85,00";"1.062";"1.059,45";"Torgau";""
+"32,400";"44,5";"Starr";"77,69";"84,98";"1.062";"1.059,45";"Torgau";""
+"32,500";"45,1";"Starr";"77,68";"84,95";"1.062";"1.059,45";"Torgau";""
+"32,600";"45,1";"Starr";"77,75";"84,92";"1.062";"1.059,45";"Torgau";""
+"32,700";"45,9";"Starr";"77,70";"84,89";"1.062";"1.059,45";"Torgau";""
+"32,800";"46,3";"Starr";"77,59";"84,85";"1.062";"1.059,45";"Torgau";""
+"32,900";"44,9";"Starr";"77,74";"84,83";"1.062";"1.059,45";"Torgau";""
+"33,000";"47,0";"Starr";"77,45";"84,80";"1.062";"1.059,45";"Torgau";""
+"33,100";"47,6";"Starr";"77,35";"84,78";"1.062";"1.059,45";"Torgau";""
+"33,200";"47,2";"Starr";"77,40";"84,76";"1.062";"1.059,45";"Torgau";""
+"33,300";"46,1";"Starr";"77,55";"84,74";"1.062";"1.059,45";"Torgau";""
+"33,400";"45,9";"Starr";"77,57";"84,71";"1.062";"1.059,45";"Torgau";""
+"33,500";"46,1";"Starr";"77,54";"84,69";"1.062";"1.059,45";"Torgau";""
+"33,600";"47,7";"Starr";"77,42";"84,67";"1.062";"1.059,45";"Torgau";""
+"33,700";"48,4";"Starr";"77,39";"84,64";"1.062";"1.059,45";"Torgau";""
+"33,800";"49,6";"Starr";"77,24";"84,61";"1.062";"1.059,45";"Torgau";""
+"33,900";"50,9";"Starr";"77,08";"84,59";"1.062";"1.059,45";"Torgau";""
+"34,000";"50,0";"Starr";"77,04";"84,56";"1.062";"1.059,45";"Torgau";""
+"34,100";"50,3";"Starr";"76,80";"84,54";"1.062";"1.059,45";"Torgau";""
+"34,200";"50,4";"Starr";"76,77";"84,52";"1.062";"1.059,45";"Torgau";""
+"34,300";"48,9";"Starr";"76,95";"84,50";"1.062";"1.059,45";"Torgau";""
+"34,400";"49,2";"Starr";"77,08";"84,47";"1.062";"1.059,45";"Torgau";""
+"34,500";"49,4";"Starr";"77,19";"84,45";"1.062";"1.059,45";"Torgau";""
+"34,600";"48,6";"Starr";"77,31";"84,42";"1.062";"1.059,45";"Torgau";""
+"34,700";"48,2";"Starr";"77,36";"84,39";"1.062";"1.059,45";"Torgau";""
+"34,800";"50,8";"Starr";"77,05";"84,36";"1.062";"1.059,45";"Torgau";""
+"34,900";"52,9";"Starr";"76,83";"84,35";"1.062";"1.059,45";"Torgau";""
+"35,000";"51,5";"Starr";"76,88";"84,33";"1.062";"1.059,45";"Torgau";""
+"35,100";"52,6";"Mobil";"76,55";"84,31";"1.062";"1.059,45";"Torgau";""
+"35,200";"53,8";"Mobil";"76,52";"84,28";"1.062";"1.059,45";"Torgau";""
+"35,300";"53,6";"Starr";"76,62";"84,25";"1.062";"1.059,45";"Torgau";""
+"35,400";"53,4";"Starr";"76,63";"84,21";"1.062";"1.059,45";"Torgau";""
+"35,500";"54,3";"Starr";"76,52";"84,19";"1.062";"1.059,45";"Torgau";""
+"35,600";"57,6";"Starr";"76,11";"84,16";"1.062";"1.059,45";"Torgau";""
+"35,700";"59,8";"Starr";"75,83";"84,13";"1.062";"1.059,45";"Torgau";""
+"35,800";"60,1";"Starr";"75,82";"84,10";"1.062";"1.059,45";"Torgau";""
+"35,900";"59,7";"Starr";"75,88";"84,07";"1.062";"1.059,45";"Torgau";""
+"36,000";"59,6";"Starr";"75,87";"84,03";"1.062";"1.059,45";"Torgau";""
+"36,100";"58,5";"Starr";"75,98";"84,00";"1.062";"1.059,45";"Torgau";""
+"36,200";"57,9";"Starr";"75,83";"83,97";"1.062";"1.059,45";"Torgau";""
+"36,300";"56,8";"Starr";"75,71";"83,96";"1.062";"1.059,45";"Torgau";""
+"36,400";"57,3";"Starr";"75,97";"83,94";"1.062";"1.059,45";"Torgau";""
+"36,500";"56,3";"Starr";"76,21";"83,90";"1.062";"1.059,45";"Torgau";""
+"36,600";"57,5";"Starr";"76,00";"83,86";"1.062";"1.059,45";"Torgau";""
+"36,700";"55,3";"Starr";"76,19";"83,84";"1.062";"1.059,45";"Torgau";""
+"36,800";"55,7";"Starr";"76,17";"83,81";"1.062";"1.059,45";"Torgau";""
+"36,900";"55,0";"Starr";"76,25";"83,78";"1.062";"1.059,45";"Torgau";""
+"37,000";"55,1";"Starr";"76,21";"83,74";"1.062";"1.059,45";"Torgau";""
+"37,100";"56,0";"Starr";"76,08";"83,71";"1.062";"1.059,45";"Torgau";""
+"37,200";"55,6";"Starr";"76,03";"83,68";"1.062";"1.059,45";"Torgau";""
+"37,300";"55,2";"Starr";"75,99";"83,66";"1.062";"1.059,45";"Torgau";""
+"37,400";"52,7";"Starr";"76,20";"83,64";"1.062";"1.059,45";"Torgau";""
+"37,500";"50,8";"Starr";"76,34";"83,63";"1.062";"1.059,45";"Torgau";""
+"37,600";"52,1";"Starr";"76,23";"83,61";"1.062";"1.059,45";"Torgau";""
+"37,700";"52,1";"Starr";"76,25";"83,58";"1.062";"1.059,45";"Torgau";""
+"37,800";"51,3";"Starr";"75,97";"83,55";"1.062";"1.059,45";"Torgau";""
+"37,900";"46,1";"Starr";"75,94";"83,56";"1.062";"1.059,45";"Torgau";""
+"38,000";"46,6";"Starr";"76,03";"83,56";"1.062";"1.059,45";"Torgau";""
+"38,100";"46,7";"Starr";"76,14";"83,54";"1.062";"1.059,45";"Torgau";""
+"38,200";"48,6";"Starr";"76,17";"83,52";"1.062";"1.059,45";"Torgau";""
+"38,300";"50,7";"Starr";"76,05";"83,47";"1.062";"1.059,45";"Torgau";""
+"38,400";"48,9";"Starr";"76,12";"83,42";"1.062";"1.059,45";"Torgau";""
+"38,500";"47,5";"Starr";"76,14";"83,40";"1.062";"1.059,45";"Torgau";""
+"38,600";"48,0";"Starr";"76,22";"83,37";"1.062";"1.059,45";"Torgau";""
+"38,700";"49,2";"Starr";"76,15";"83,33";"1.062";"1.059,45";"Torgau";""
+"38,800";"48,7";"Starr";"76,22";"83,29";"1.062";"1.059,45";"Torgau";""
+"38,900";"48,2";"Starr";"76,29";"83,26";"1.062";"1.059,45";"Torgau";""
+"39,000";"46,1";"Starr";"76,29";"83,23";"1.062";"1.059,45";"Torgau";""
+"39,100";"44,6";"Starr";"76,10";"83,22";"1.062";"1.059,45";"Torgau";""
+"39,200";"45,6";"Starr";"76,13";"83,21";"1.062";"1.059,45";"Torgau";""
+"39,300";"45,9";"Starr";"76,20";"83,18";"1.062";"1.059,45";"Torgau";""
+"39,400";"47,3";"Starr";"75,99";"83,14";"1.062";"1.059,45";"Torgau";""
+"39,500";"47,6";"Starr";"75,94";"83,12";"1.062";"1.059,45";"Torgau";""
+"39,600";"49,1";"Starr";"75,74";"83,09";"1.062";"1.059,45";"Torgau";""
+"39,700";"49,8";"Starr";"75,63";"83,06";"1.062";"1.059,45";"Torgau";""
+"39,800";"50,7";"Starr";"75,41";"83,02";"1.062";"1.059,45";"Torgau";""
+"39,900";"51,5";"Starr";"75,20";"83,01";"1.062";"1.059,45";"Torgau";""
+"40,000";"51,8";"Starr";"75,08";"82,99";"1.062";"1.059,45";"Torgau";""
+"40,100";"51,2";"Starr";"75,07";"82,98";"1.062";"1.059,45";"Torgau";""
+"40,200";"50,1";"Starr";"75,00";"82,96";"1.062";"1.059,45";"Torgau";""
+"40,300";"47,8";"Starr";"75,04";"82,94";"1.062";"1.059,45";"Torgau";""
+"40,400";"47,9";"Starr";"74,99";"82,92";"1.062";"1.059,45";"Torgau";""
+"40,500";"48,8";"Starr";"74,83";"82,90";"1.062";"1.059,45";"Torgau";""
+"40,600";"46,1";"Starr";"75,04";"82,87";"1.062";"1.059,45";"Torgau";""
+"40,700";"42,7";"Starr";"75,37";"82,85";"1.062";"1.059,45";"Torgau";""
+"40,800";"39,3";"Starr";"75,44";"82,83";"1.059";"1.059,45";"Torgau";""
+"40,900";"36,1";"Starr";"75,39";"82,82";"1.059";"1.059,45";"Torgau";""
+"41,000";"38,1";"Starr";"75,40";"82,81";"1.059";"1.059,45";"Torgau";""
+"41,100";"39,2";"Starr";"75,49";"82,78";"1.059";"1.059,45";"Torgau";""
+"41,200";"41,9";"Starr";"75,40";"82,75";"1.059";"1.059,45";"Torgau";""
+"41,300";"46,9";"Starr";"74,89";"82,71";"1.059";"1.059,45";"Torgau";""
+"41,400";"48,9";"Starr";"74,60";"82,67";"1.059";"1.059,45";"Torgau";""
+"41,500";"48,9";"Starr";"74,63";"82,66";"1.059";"1.059,45";"Torgau";""
+"41,600";"47,3";"Starr";"74,75";"82,65";"1.059";"1.059,45";"Torgau";""
+"41,700";"47,8";"Starr";"74,71";"82,63";"1.059";"1.059,45";"Torgau";""
+"41,800";"46,4";"Starr";"74,91";"82,61";"1.059";"1.059,45";"Torgau";""
+"41,900";"45,3";"Starr";"75,05";"82,59";"1.059";"1.059,45";"Torgau";""
+"42,000";"47,6";"Starr";"75,07";"82,56";"1.059";"1.059,45";"Torgau";""
+"42,100";"49,7";"Starr";"75,05";"82,53";"1.059";"1.059,45";"Torgau";""
+"42,200";"49,2";"Starr";"74,97";"82,50";"1.059";"1.059,45";"Torgau";""
+"42,300";"49,6";"Starr";"74,74";"82,49";"1.059";"1.059,45";"Torgau";""
+"42,400";"51,0";"Starr";"74,68";"82,48";"1.059";"1.059,45";"Torgau";""
+"42,500";"52,9";"Starr";"74,52";"82,46";"1.059";"1.059,45";"Torgau";""
+"42,600";"53,0";"Starr";"74,49";"82,43";"1.059";"1.059,45";"Torgau";""
+"42,700";"53,7";"Starr";"74,39";"82,42";"1.059";"1.059,45";"Torgau";""
+"42,800";"55,1";"Starr";"74,34";"82,40";"1.059";"1.059,45";"Torgau";""
+"42,900";"57,7";"Starr";"74,13";"82,38";"1.059";"1.059,45";"Torgau";""
+"43,000";"58,6";"Starr";"74,10";"82,36";"1.059";"1.059,45";"Torgau";""
+"43,100";"56,2";"Starr";"74,47";"82,34";"1.059";"1.059,45";"Torgau";""
+"43,200";"58,1";"Starr";"74,35";"82,32";"1.059";"1.059,45";"Torgau";""
+"43,300";"57,8";"Starr";"74,48";"82,30";"1.059";"1.059,45";"Torgau";""
+"43,400";"58,2";"Starr";"74,58";"82,28";"1.059";"1.059,45";"Torgau";""
+"43,500";"60,7";"Starr";"74,40";"82,26";"1.059";"1.059,45";"Torgau";""
+"43,600";"60,6";"Starr";"74,43";"82,24";"1.059";"1.059,45";"Torgau";""
+"43,700";"59,5";"Starr";"74,57";"82,23";"1.059";"1.059,45";"Torgau";""
+"43,800";"60,2";"Starr";"74,35";"82,22";"1.059";"1.059,45";"Torgau";""
+"43,900";"60,0";"Starr";"74,18";"82,22";"1.059";"1.059,45";"Torgau";""
+"44,000";"61,4";"Starr";"74,41";"82,21";"1.059";"1.059,45";"Torgau";""
+"44,100";"62,9";"Starr";"74,47";"82,17";"1.059";"1.059,45";"Torgau";""
+"44,200";"64,4";"Starr";"74,30";"82,13";"1.059";"1.059,45";"Torgau";""
+"44,300";"65,7";"Starr";"74,17";"82,13";"1.059";"1.059,45";"Torgau";""
+"44,400";"68,0";"Starr";"74,08";"82,13";"1.059";"1.059,45";"Torgau";""
+"44,500";"72,2";"Starr";"73,75";"82,11";"1.059";"1.059,45";"Torgau";""
+"44,600";"74,3";"Starr";"73,66";"82,08";"1.059";"1.059,45";"Torgau";""
+"44,700";"75,3";"Starr";"73,65";"82,05";"1.059";"1.059,45";"Torgau";""
+"44,800";"76,0";"Starr";"73,62";"82,02";"1.059";"1.059,45";"Torgau";""
+"44,900";"77,6";"Starr";"73,52";"82,00";"1.059";"1.059,45";"Torgau";""
+"45,000";"79,8";"Starr";"73,35";"81,98";"1.059";"1.059,45";"Torgau";""
+"45,100";"80,2";"Starr";"73,36";"81,97";"1.059";"1.059,45";"Torgau";""
+"45,200";"80,4";"Starr";"73,46";"81,96";"1.059";"1.059,45";"Torgau";""
+"45,300";"80,7";"Starr";"73,47";"81,93";"1.059";"1.059,45";"Torgau";""
+"45,400";"82,1";"Starr";"73,39";"81,89";"1.059";"1.059,45";"Torgau";""
+"45,500";"82,8";"Mobil";"73,39";"81,89";"1.059";"1.059,45";"Torgau";""
+"45,600";"83,0";"Mobil";"73,45";"81,88";"1.059";"1.059,45";"Torgau";""
+"45,700";"79,7";"Mobil";"73,58";"81,84";"1.059";"1.059,45";"Torgau";""
+"45,800";"76,5";"Mobil";"73,73";"81,80";"1.059";"1.059,45";"Torgau";"Hafen: Torgau"
+"45,900";"77,8";"Starr";"73,47";"81,80";"1.059";"1.059,45";"Torgau";""
+"46,000";"75,4";"Starr";"73,56";"81,79";"1.059";"1.059,45";"Torgau";""
+"46,100";"71,9";"Starr";"73,76";"81,77";"1.059";"1.059,45";"Torgau";"Brücke: Torgau -Straße B87"
+"46,200";"64,2";"Starr";"74,44";"81,75";"1.059";"1.059,45";"Torgau";""
+"46,300";"65,9";"Starr";"74,17";"81,72";"1.059";"1.059,45";"Torgau";""
+"46,400";"65,5";"Starr";"74,07";"81,69";"1.059";"1.059,45";"Torgau";""
+"46,500";"62,8";"Starr";"74,20";"81,66";"1.059";"1.059,45";"Torgau";""
+"46,600";"61,5";"Starr";"74,18";"81,63";"1.059";"1.059,45";"Torgau";""
+"46,700";"60,8";"Starr";"74,09";"81,61";"1.059";"1.059,45";"Torgau";""
+"46,800";"63,0";"Starr";"73,58";"81,59";"1.059";"1.059,45";"Torgau";"Geschiebemessstelle: Torgau"
+"46,900";"62,0";"Starr";"73,51";"81,58";"1.059";"1.059,45";"Torgau";""
+"47,000";"62,6";"Starr";"73,62";"81,57";"1.059";"1.059,45";"Torgau";""
+"47,100";"61,6";"Starr";"73,80";"81,53";"1.059";"1.059,45";"Torgau";""
+"47,200";"60,3";"Starr";"73,81";"81,48";"1.059";"1.059,45";"Torgau";""
+"47,300";"65,5";"Starr";"73,09";"81,48";"1.059";"1.059,45";"Torgau";""
+"47,400";"65,1";"Starr";"72,85";"81,47";"1.059";"1.059,45";"Torgau";""
+"47,500";"61,3";"Starr";"72,84";"81,47";"1.059";"1.059,45";"Torgau";""
+"47,600";"61,6";"Starr";"72,92";"81,46";"1.059";"1.059,45";"Torgau";""
+"47,700";"58,2";"Starr";"73,43";"81,44";"1.059";"1.059,45";"Torgau";""
+"47,800";"58,4";"Starr";"73,35";"81,41";"1.059";"1.059,45";"Torgau";""
+"47,900";"58,5";"Starr";"73,29";"81,40";"1.059";"1.059,45";"Torgau";""
+"48,000";"57,9";"Starr";"73,58";"81,38";"1.059";"1.059,45";"Torgau";""
+"48,100";"59,0";"Starr";"73,56";"81,35";"1.059";"1.059,45";"Torgau";""
+"48,200";"60,0";"Starr";"73,51";"81,32";"1.059";"1.059,45";"Torgau";""
+"48,300";"60,3";"Starr";"73,52";"81,30";"1.059";"1.059,45";"Torgau";""
+"48,400";"60,2";"Starr";"73,47";"81,27";"1.059";"1.059,45";"Torgau";""
+"48,500";"58,7";"Starr";"73,57";"81,25";"1.059";"1.059,45";"Torgau";""
+"48,600";"58,7";"Starr";"73,51";"81,22";"1.059";"1.059,45";"Torgau";""
+"48,700";"59,3";"Starr";"73,40";"81,20";"1.059";"1.059,45";"Torgau";""
+"48,800";"58,8";"Starr";"73,36";"81,17";"1.059";"1.059,45";"Torgau";""
+"48,900";"58,0";"Starr";"73,38";"81,16";"1.059";"1.059,45";"Torgau";""
+"49,000";"59,1";"Starr";"73,28";"81,15";"1.059";"1.059,45";"Torgau";""
+"49,100";"56,6";"Starr";"73,56";"81,12";"1.059";"1.059,45";"Torgau";""
+"49,200";"56,0";"Starr";"73,66";"81,08";"1.059";"1.059,45";"Torgau";""
+"49,300";"56,6";"Starr";"73,62";"81,06";"1.059";"1.059,45";"Torgau";""
+"49,400";"57,8";"Starr";"73,35";"81,04";"1.059";"1.059,45";"Torgau";""
+"49,500";"57,8";"Starr";"73,17";"81,03";"1.059";"1.059,45";"Torgau";""
+"49,600";"56,6";"Starr";"73,27";"81,01";"1.059";"1.059,45";"Torgau";""
+"49,700";"57,1";"Starr";"73,16";"80,99";"1.059";"1.059,45";"Torgau";""
+"49,800";"58,3";"Starr";"72,93";"80,96";"1.059";"1.059,45";"Torgau";""
+"49,900";"58,0";"Starr";"72,90";"80,94";"1.059";"1.059,45";"Torgau";""
+"50,000";"57,4";"Starr";"73,21";"80,92";"1.059";"1.059,45";"Torgau";""
+"50,100";"58,0";"Starr";"73,23";"80,87";"1.059";"1.059,45";"Torgau";""
+"50,200";"57,6";"Starr";"73,12";"80,82";"1.059";"1.059,45";"Torgau";""
+"50,300";"59,3";"Starr";"72,76";"80,81";"1.059";"1.059,45";"Torgau";""
+"50,400";"55,6";"Starr";"73,07";"80,79";"1.059";"1.059,45";"Torgau";""
+"50,500";"52,0";"Starr";"73,36";"80,78";"1.059";"1.059,45";"Torgau";""
+"50,600";"51,8";"Starr";"73,34";"80,76";"1.059";"1.059,45";"Torgau";""
+"50,700";"51,8";"Starr";"73,30";"80,74";"1.059";"1.059,45";"Torgau";""
+"50,800";"52,7";"Starr";"73,23";"80,72";"1.059";"1.059,45";"Torgau";""
+"50,900";"53,9";"Starr";"73,11";"80,70";"1.059";"1.059,45";"Torgau";""
+"51,000";"54,2";"Starr";"73,12";"80,67";"1.059";"1.059,45";"Torgau";""
+"51,100";"57,2";"Starr";"72,77";"80,64";"1.059";"1.059,45";"Torgau";""
+"51,200";"57,6";"Starr";"72,70";"80,61";"1.059";"1.059,45";"Torgau";""
+"51,300";"57,8";"Starr";"72,64";"80,58";"1.059";"1.059,45";"Torgau";""
+"51,400";"58,2";"Starr";"72,55";"80,55";"1.059";"1.059,45";"Torgau";""
+"51,500";"56,1";"Starr";"72,78";"80,53";"1.059";"1.059,45";"Torgau";""
+"51,600";"56,3";"Starr";"72,75";"80,50";"1.059";"1.059,45";"Torgau";""
+"51,700";"56,5";"Starr";"72,71";"80,48";"1.059";"1.059,45";"Torgau";""
+"51,800";"57,1";"Starr";"72,66";"80,45";"1.059";"1.059,45";"Torgau";""
+"51,900";"55,8";"Starr";"72,82";"80,42";"1.059";"1.059,45";"Torgau";""
+"52,000";"54,1";"Starr";"72,92";"80,39";"1.059";"1.059,45";"Torgau";""
+"52,100";"57,7";"Starr";"72,40";"80,37";"1.059";"1.059,45";"Torgau";""
+"52,200";"59,4";"Starr";"72,19";"80,34";"1.059";"1.059,45";"Torgau";""
+"52,300";"60,4";"Starr";"72,07";"80,32";"1.059";"1.059,45";"Torgau";""
+"52,400";"60,6";"Starr";"72,00";"80,29";"1.059";"1.059,45";"Torgau";""
+"52,500";"60,9";"Starr";"71,90";"80,28";"1.059";"1.059,45";"Torgau";""
+"52,600";"62,6";"Starr";"71,75";"80,27";"1.059";"1.059,45";"Torgau";""
+"52,700";"60,8";"Starr";"72,02";"80,26";"1.059";"1.059,45";"Torgau";""
+"52,800";"62,4";"Starr";"72,01";"80,24";"1.059";"1.059,45";"Torgau";""
+"52,900";"59,8";"Starr";"72,42";"80,20";"1.059";"1.059,45";"Torgau";""
+"53,000";"60,2";"Starr";"72,39";"80,16";"1.059";"1.059,45";"Torgau";""
+"53,100";"62,4";"Starr";"72,18";"80,14";"1.059";"1.059,45";"Torgau";""
+"53,200";"63,2";"Starr";"72,18";"80,12";"1.059";"1.059,45";"Torgau";""
+"53,300";"63,5";"Starr";"72,21";"80,09";"1.059";"1.059,45";"Torgau";""
+"53,400";"63,2";"Starr";"72,22";"80,05";"1.059";"1.059,45";"Torgau";""
+"53,500";"66,8";"Starr";"71,83";"80,03";"1.059";"1.059,45";"Torgau";""
+"53,600";"64,7";"Starr";"72,06";"80,00";"1.059";"1.059,45";"Torgau";""
+"53,700";"66,0";"Starr";"71,92";"79,99";"1.059";"1.059,45";"Torgau";""
+"53,800";"66,3";"Starr";"71,92";"79,97";"1.059";"1.059,45";"Torgau";""
+"53,900";"65,1";"Starr";"72,06";"79,96";"1.059";"1.059,45";"Torgau";""
+"54,000";"64,8";"Starr";"72,18";"79,94";"1.059";"1.059,45";"Torgau";""
+"54,100";"66,0";"Starr";"72,13";"79,92";"1.059";"1.059,45";"Torgau";""
+"54,200";"65,3";"Starr";"72,19";"79,90";"1.059";"1.059,45";"Torgau";""
+"54,300";"66,3";"Starr";"72,10";"79,89";"1.059";"1.059,45";"Torgau";""
+"54,400";"68,4";"Starr";"71,94";"79,88";"1.059";"1.059,45";"Torgau";""
+"54,500";"66,4";"Starr";"72,20";"79,86";"1.059";"1.059,45";"Torgau";""
+"54,600";"66,0";"Starr";"72,30";"79,84";"1.059";"1.059,45";"Torgau";""
+"54,700";"67,2";"Mobil";"72,21";"79,81";"1.059";"1.059,45";"Torgau";""
+"54,800";"73,0";"Mobil";"71,64";"79,77";"1.059";"1.059,45";"Torgau";""
+"54,900";"76,4";"Mobil";"71,34";"79,77";"1.059";"1.059,45";"Torgau";""
+"55,000";"77,4";"Mobil";"71,34";"79,76";"1.059";"1.059,45";"Torgau";""
+"55,100";"71,1";"Mobil";"71,85";"79,73";"1.059";"1.059,45";"Torgau";""
+"55,200";"73,4";"Mobil";"71,53";"79,69";"1.059";"1.059,45";"Torgau";""
+"55,300";"69,6";"Mobil";"71,82";"79,67";"1.059";"1.059,45";"Torgau";""
+"55,400";"68,4";"Starr";"71,84";"79,64";"1.059";"1.059,45";"Torgau";""
+"55,500";"67,1";"Starr";"71,88";"79,62";"1.059";"1.059,45";"Torgau";""
+"55,600";"62,9";"Starr";"72,21";"79,60";"1.059";"1.059,45";"Torgau";""
+"55,700";"63,3";"Starr";"72,07";"79,59";"1.059";"1.059,45";"Torgau";""
+"55,800";"63,0";"Starr";"72,07";"79,57";"1.059";"1.059,45";"Torgau";""
+"55,900";"64,0";"Starr";"71,91";"79,54";"1.059";"1.059,45";"Torgau";""
+"56,000";"65,5";"Starr";"71,57";"79,51";"1.059";"1.059,45";"Torgau";""
+"56,100";"64,2";"Starr";"71,47";"79,50";"1.059";"1.059,45";"Torgau";""
+"56,200";"60,4";"Starr";"71,75";"79,49";"1.059";"1.059,45";"Torgau";""
+"56,300";"58,4";"Starr";"71,82";"79,48";"1.059";"1.059,45";"Torgau";""
+"56,400";"59,7";"Starr";"71,64";"79,46";"1.059";"1.059,45";"Torgau";""
+"56,500";"57,3";"Starr";"71,88";"79,44";"1.059";"1.059,45";"Torgau";""
+"56,600";"56,2";"Starr";"71,80";"79,41";"1.059";"1.059,45";"Torgau";""
+"56,700";"56,9";"Starr";"71,48";"79,39";"1.059";"1.059,45";"Torgau";""
+"56,800";"56,6";"Starr";"71,38";"79,37";"1.059";"1.059,45";"Torgau";""
+"56,900";"55,5";"Starr";"71,38";"79,35";"1.059";"1.059,45";"Torgau";""
+"57,000";"54,5";"Starr";"71,43";"79,33";"1.059";"1.059,45";"Torgau";""
+"57,100";"52,8";"Starr";"71,57";"79,31";"1.059";"1.059,45";"Torgau";""
+"57,200";"49,5";"Starr";"72,00";"79,28";"1.059";"1.059,45";"Torgau";""
+"57,300";"52,3";"Starr";"71,64";"79,26";"1.059";"1.059,45";"Torgau";""
+"57,400";"57,0";"Starr";"70,98";"79,23";"1.059";"1.059,45";"Torgau";""
+"57,500";"56,6";"Starr";"70,97";"79,20";"1.059";"1.059,45";"Torgau";""
+"57,600";"54,7";"Starr";"71,21";"79,17";"1.059";"1.059,45";"Torgau";""
+"57,700";"52,9";"Starr";"71,41";"79,13";"1.059";"1.059,45";"Torgau";""
+"57,800";"52,6";"Starr";"71,21";"79,09";"1.059";"1.059,45";"Torgau";""
+"57,900";"51,6";"Starr";"71,08";"79,07";"1.059";"1.059,45";"Torgau";""
+"58,000";"50,7";"Starr";"71,20";"79,05";"1.059";"1.059,45";"Torgau";""
+"58,100";"49,7";"Starr";"71,34";"79,03";"1.059";"1.059,45";"Torgau";""
+"58,200";"45,8";"Starr";"71,58";"79,01";"1.059";"1.059,45";"Torgau";""
+"58,300";"43,1";"Starr";"71,62";"79,00";"1.059";"1.059,45";"Torgau";""
+"58,400";"41,0";"Starr";"71,70";"78,98";"1.059";"1.059,45";"Torgau";""
+"58,500";"42,4";"Starr";"71,18";"78,96";"1.059";"1.059,45";"Torgau";""
+"58,600";"44,2";"Starr";"70,75";"78,94";"1.059";"1.059,45";"Torgau";""
+"58,700";"41,6";"Starr";"71,06";"78,92";"1.059";"1.059,45";"Torgau";""
+"58,800";"36,5";"Starr";"71,38";"78,90";"1.059";"1.059,45";"Torgau";""
+"58,900";"31,2";"Starr";"71,71";"78,88";"1.059";"1.059,45";"Torgau";""
+"59,000";"33,0";"Starr";"71,54";"78,86";"1.059";"1.059,45";"Torgau";""
+"59,100";"34,2";"Starr";"71,49";"78,84";"1.059";"1.059,45";"Torgau";""
+"59,200";"25,3";"Starr";"71,31";"78,81";"1.059";"1.059,45";"Torgau";""
+"59,300";"9,8";"Starr";"71,07";"78,82";"1.059";"1.059,45";"Torgau";""
+"59,400";"22,2";"Starr";"70,97";"78,82";"1.059";"1.059,45";"Torgau";""
+"59,500";"32,1";"Mobil";"70,79";"78,80";"1.059";"1.059,45";"Torgau";""
+"59,600";"31,8";"Mobil";"70,95";"78,77";"1.059";"1.059,45";"Torgau";""
+"59,700";"31,3";"Mobil";"71,15";"78,75";"1.059";"1.059,45";"Torgau";""
+"59,800";"30,6";"Mobil";"71,37";"78,73";"1.059";"1.059,45";"Torgau";""
+"59,900";"30,6";"Mobil";"71,44";"78,72";"1.059";"1.059,45";"Torgau";""
+"60,000";"30,5";"Mobil";"71,49";"78,70";"1.059";"1.059,45";"Torgau";""
+"60,100";"30,1";"Mobil";"71,59";"78,69";"1.059";"1.059,45";"Torgau";""
+"60,200";"36,0";"Mobil";"71,53";"78,67";"1.059";"1.059,45";"Torgau";"HW-Schutz: Prettiner-Deich"
+"60,300";"40,1";"Mobil";"71,52";"78,63";"1.059";"1.059,45";"Torgau";""
+"60,400";"40,1";"Mobil";"71,41";"78,59";"1.059";"1.059,45";"Torgau";""
+"60,500";"39,3";"Mobil";"71,43";"78,58";"1.059";"1.059,45";"Torgau";""
+"60,600";"38,8";"Mobil";"71,44";"78,57";"1.059";"1.059,45";"Torgau";""
+"60,700";"39,4";"Mobil";"71,25";"78,56";"1.059";"1.059,45";"Torgau";""
+"60,800";"41,8";"Mobil";"71,18";"78,54";"1.059";"1.059,45";"Torgau";""
+"60,900";"44,0";"Mobil";"71,12";"78,52";"1.059";"1.059,45";"Torgau";""
+"61,000";"45,0";"Mobil";"70,93";"78,50";"1.059";"1.059,45";"Torgau";""
+"61,100";"45,1";"Mobil";"70,88";"78,49";"1.059";"1.059,45";"Torgau";""
+"61,200";"49,4";"Mobil";"70,83";"78,47";"1.059";"1.059,45";"Torgau";""
+"61,300";"51,9";"Mobil";"70,88";"78,45";"1.059";"1.059,45";"Torgau";""
+"61,400";"52,9";"Mobil";"70,77";"78,42";"1.059";"1.059,45";"Torgau";""
+"61,500";"51,2";"Mobil";"71,01";"78,41";"1.059";"1.059,45";"Torgau";""
+"61,600";"53,8";"Mobil";"70,81";"78,39";"1.059";"1.059,45";"Torgau";""
+"61,700";"57,2";"Mobil";"70,52";"78,37";"1.059";"1.059,45";"Torgau";""
+"61,800";"58,6";"Mobil";"70,39";"78,35";"1.059";"1.059,45";"Torgau";""
+"61,900";"59,2";"Mobil";"70,36";"78,34";"1.059";"1.059,45";"Torgau";""
+"62,000";"60,8";"Mobil";"70,41";"78,32";"1.059";"1.059,45";"Torgau";""
+"62,100";"65,4";"Mobil";"70,07";"78,30";"1.059";"1.059,45";"Torgau";""
+"62,200";"62,1";"Mobil";"70,53";"78,28";"1.059";"1.059,45";"Torgau";""
+"62,300";"59,3";"Mobil";"70,94";"78,26";"1.059";"1.059,45";"Torgau";""
+"62,400";"58,9";"Starr";"71,11";"78,24";"1.059";"1.059,45";"Torgau";""
+"62,500";"59,0";"Starr";"71,23";"78,23";"1.059";"1.059,45";"Torgau";""
+"62,600";"61,4";"Starr";"71,06";"78,21";"1.059";"1.059,45";"Torgau";""
+"62,700";"62,5";"Starr";"70,89";"78,20";"1.059";"1.059,45";"Torgau";""
+"62,800";"63,4";"Starr";"70,83";"78,18";"1.059";"1.059,45";"Torgau";""
+"62,900";"65,4";"Mobil";"70,62";"78,15";"1.059";"1.059,45";"Torgau";""
+"63,000";"64,6";"Mobil";"70,66";"78,12";"1.059";"1.059,45";"Torgau";""
+"63,100";"62,7";"Mobil";"70,83";"78,10";"1.059";"1.059,45";"Torgau";""
+"63,200";"63,5";"Mobil";"70,73";"78,08";"1.059";"1.059,45";"Torgau";""
+"63,300";"64,5";"Mobil";"70,62";"78,05";"1.059";"1.059,45";"Torgau";""
+"63,400";"65,2";"Mobil";"70,49";"78,02";"1.059";"1.059,45";"Torgau";""
+"63,500";"64,9";"Mobil";"70,47";"78,00";"1.059";"1.059,45";"Torgau";""
+"63,600";"65,2";"Mobil";"70,40";"77,98";"1.059";"1.059,45";"Torgau";"Fähre: Prettin -Gierseilfähre"
+"63,700";"67,8";"Mobil";"70,09";"77,96";"1.059";"1.059,45";"Torgau";""
+"63,800";"70,9";"Mobil";"69,85";"77,94";"1.059";"1.059,45";"Torgau";""
+"63,900";"68,6";"Mobil";"70,08";"77,91";"1.059";"1.059,45";"Torgau";""
+"64,000";"63,1";"Mobil";"70,59";"77,87";"1.059";"1.059,45";"Torgau";""
+"64,100";"62,6";"Mobil";"70,60";"77,85";"1.059";"1.059,45";"Torgau";"HW-Schutz: Axiener-Deich"
+"64,200";"64,6";"Mobil";"70,38";"77,82";"1.059";"1.059,45";"Torgau";""
+"64,300";"67,0";"Mobil";"70,12";"77,80";"1.059";"1.059,45";"Torgau";""
+"64,400";"67,3";"Mobil";"70,07";"77,78";"1.059";"1.059,45";"Torgau";""
+"64,500";"66,8";"Mobil";"70,09";"77,75";"1.059";"1.059,45";"Torgau";""
+"64,600";"65,2";"Mobil";"70,20";"77,71";"1.059";"1.059,45";"Torgau";""
+"64,700";"65,1";"Mobil";"70,17";"77,69";"1.059";"1.059,45";"Torgau";""
+"64,800";"63,7";"Mobil";"70,27";"77,67";"1.059";"1.059,45";"Torgau";""
+"64,900";"62,2";"Mobil";"70,37";"77,66";"1.059";"1.059,45";"Torgau";""
+"65,000";"62,4";"Mobil";"70,30";"77,65";"1.059";"1.059,45";"Torgau";""
+"65,100";"63,5";"Mobil";"70,10";"77,63";"1.059";"1.059,45";"Torgau";""
+"65,200";"64,8";"Mobil";"69,85";"77,61";"1.059";"1.059,45";"Torgau";""
+"65,300";"61,2";"Mobil";"70,10";"77,60";"1.059";"1.059,45";"Torgau";""
+"65,400";"62,6";"Mobil";"70,15";"77,59";"1.059";"1.059,45";"Torgau";""
+"65,500";"64,9";"Mobil";"69,99";"77,56";"1.059";"1.059,45";"Torgau";""
+"65,600";"64,6";"Mobil";"69,96";"77,52";"1.059";"1.059,45";"Torgau";""
+"65,700";"56,7";"Mobil";"70,14";"77,50";"1.059";"1.059,45";"Torgau";""
+"65,800";"51,2";"Mobil";"70,11";"77,47";"1.059";"1.059,45";"Torgau";""
+"65,900";"47,0";"Mobil";"69,92";"77,44";"1.059";"1.059,45";"Torgau";""
+"66,000";"42,5";"Mobil";"69,95";"77,41";"1.059";"1.059,45";"Torgau";""
+"66,100";"38,9";"Mobil";"69,92";"77,38";"1.059";"1.059,45";"Torgau";""
+"66,200";"34,8";"Mobil";"69,93";"77,35";"1.059";"1.059,45";"Torgau";""
+"66,300";"31,6";"Mobil";"69,83";"77,32";"1.059";"1.059,45";"Torgau";""
+"66,400";"24,1";"Starr";"69,83";"77,29";"1.059";"1.059,45";"Torgau";""
+"66,500";"15,6";"Starr";"69,78";"77,27";"1.059";"1.059,45";"Torgau";""
+"66,600";"10,6";"Starr";"69,89";"77,25";"1.059";"1.059,45";"Torgau";""
+"66,700";"16,1";"Starr";"69,93";"77,23";"1.059";"1.059,45";"Torgau";""
+"66,800";"21,8";"Starr";"69,93";"77,20";"1.059";"1.059,45";"Torgau";""
+"66,900";"27,8";"Mobil";"69,78";"77,17";"1.059";"1.059,45";"Torgau";""
+"67,000";"33,2";"Mobil";"69,69";"77,14";"1.059";"1.059,45";"Torgau";""
+"67,100";"38,0";"Mobil";"69,69";"77,11";"1.059";"1.059,45";"Torgau";""
+"67,200";"43,7";"Mobil";"69,57";"77,08";"1.059";"1.059,45";"Torgau";""
+"67,300";"47,8";"Mobil";"69,65";"77,05";"1.059";"1.059,45";"Torgau";""
+"67,400";"51,4";"Mobil";"69,65";"77,02";"1.059";"1.059,45";"Torgau";""
+"67,500";"56,7";"Mobil";"69,52";"77,01";"1.059";"1.059,45";"Torgau";""
+"67,600";"55,9";"Mobil";"69,45";"76,99";"1.059";"1.059,45";"Torgau";""
+"67,700";"53,9";"Mobil";"69,63";"76,97";"1.059";"1.059,45";"Torgau";""
+"67,800";"57,0";"Mobil";"69,32";"76,95";"1.059";"1.059,45";"Torgau";""
+"67,900";"60,6";"Mobil";"68,97";"76,93";"1.059";"1.059,45";"Torgau";""
+"68,000";"60,8";"Mobil";"69,00";"76,90";"1.059";"1.059,45";"Torgau";""
+"68,100";"60,3";"Mobil";"69,07";"76,86";"1.059";"1.059,45";"Torgau";""
+"68,200";"59,0";"Mobil";"69,20";"76,82";"1.059";"1.059,45";"Torgau";""
+"68,300";"57,4";"Mobil";"69,37";"76,79";"1.059";"1.059,45";"Torgau";""
+"68,400";"57,7";"Mobil";"69,26";"76,76";"1.059";"1.059,45";"Torgau";""
+"68,500";"56,1";"Mobil";"69,39";"76,75";"1.059";"1.059,45";"Torgau";""
+"68,600";"55,4";"Mobil";"69,45";"76,73";"1.059";"1.059,45";"Torgau";""
+"68,700";"56,0";"Mobil";"69,37";"76,72";"1.059";"1.059,45";"Torgau";""
+"68,800";"53,7";"Mobil";"69,49";"76,70";"1.059";"1.059,45";"Torgau";""
+"68,900";"53,9";"Mobil";"69,23";"76,68";"1.059";"1.059,45";"Torgau";""
+"69,000";"56,5";"Mobil";"69,05";"76,66";"1.059";"1.059,45";"Torgau";""
+"69,100";"59,2";"Mobil";"68,84";"76,64";"1.059";"1.059,45";"Torgau";""
+"69,200";"58,7";"Mobil";"68,90";"76,61";"1.059";"1.059,45";"Torgau";""
+"69,300";"58,4";"Mobil";"68,94";"76,59";"1.059";"1.059,45";"Torgau";""
+"69,400";"56,6";"Mobil";"69,09";"76,57";"1.059";"1.059,45";"Torgau";""
+"69,500";"58,1";"Mobil";"68,85";"76,56";"1.059";"1.059,45";"Torgau";""
+"69,600";"59,2";"Mobil";"68,82";"76,54";"1.059";"1.059,45";"Torgau";""
+"69,700";"60,4";"Mobil";"68,77";"76,52";"1.059";"1.059,45";"Torgau";""
+"69,800";"59,4";"Mobil";"68,74";"76,50";"1.059";"1.059,45";"Torgau";""
+"69,900";"56,3";"Mobil";"68,94";"76,49";"1.059";"1.059,45";"Torgau";""
+"70,000";"59,4";"Mobil";"68,84";"76,47";"1.059";"1.059,45";"Torgau";""
+"70,100";"59,9";"Mobil";"68,92";"76,43";"1.059";"1.059,45";"Torgau";""
+"70,200";"58,5";"Mobil";"69,00";"76,39";"1.059";"1.059,45";"Torgau";""
+"70,300";"59,5";"Mobil";"68,82";"76,38";"1.059";"1.059,45";"Torgau";""
+"70,400";"58,5";"Mobil";"68,96";"76,36";"1.059";"1.059,45";"Torgau";""
+"70,500";"59,3";"Mobil";"68,88";"76,34";"1.059";"1.059,45";"Torgau";""
+"70,600";"59,9";"Mobil";"68,80";"76,32";"1.059";"1.059,45";"Torgau";""
+"70,700";"60,3";"Mobil";"68,74";"76,31";"1.059";"1.059,45";"Torgau";""
+"70,800";"59,4";"Mobil";"68,80";"76,29";"1.059";"1.059,45";"Torgau";""
+"70,900";"58,6";"Mobil";"68,84";"76,27";"1.059";"1.059,45";"Torgau";""
+"71,000";"57,9";"Mobil";"68,97";"76,25";"1.059";"1.059,45";"Torgau";""
+"71,100";"58,8";"Mobil";"68,92";"76,23";"1.059";"1.059,45";"Torgau";""
+"71,200";"60,2";"Mobil";"68,73";"76,20";"1.059";"1.059,45";"Torgau";""
+"71,300";"57,3";"Mobil";"69,01";"76,18";"1.059";"1.059,45";"Torgau";""
+"71,400";"59,6";"Mobil";"68,78";"76,15";"1.059";"1.059,45";"Torgau";""
+"71,500";"61,1";"Mobil";"68,65";"76,14";"1.059";"1.059,45";"Torgau";""
+"71,600";"60,0";"Mobil";"68,80";"76,12";"1.059";"1.059,45";"Torgau";"Bundesland: Sachsen-Anhalt"
+"71,700";"61,2";"Mobil";"68,68";"76,10";"1.059";"1.059,45";"Torgau";""
+"71,800";"59,4";"Mobil";"68,80";"76,08";"1.059";"1.059,45";"Torgau";""
+"71,900";"60,2";"Mobil";"68,59";"76,06";"1.059";"1.059,45";"Torgau";""
+"72,000";"63,3";"Mobil";"68,30";"76,04";"1.059";"1.059,45";"Torgau";""
+"72,100";"62,9";"Mobil";"68,37";"76,01";"1.059";"1.059,45";"Torgau";""
+"72,200";"61,7";"Mobil";"68,52";"75,98";"1.059";"1.059,45";"Torgau";""
+"72,300";"60,9";"Mobil";"68,60";"75,95";"1.059";"1.059,45";"Torgau";""
+"72,400";"62,6";"Mobil";"68,35";"75,91";"1.059";"1.059,45";"Torgau";""
+"72,500";"58,2";"Mobil";"68,73";"75,89";"1.059";"1.059,45";"Torgau";"HW-Schutz: Maukener-Deich"
+"72,600";"61,8";"Mobil";"68,21";"75,87";"1.059";"1.059,45";"Torgau";""
+"72,700";"57,6";"Mobil";"68,54";"75,86";"1.059";"1.059,45";"Torgau";""
+"72,800";"57,3";"Mobil";"68,58";"75,85";"1.059";"1.059,45";"Torgau";""
+"72,900";"57,0";"Mobil";"68,64";"75,84";"1.059";"1.059,45";"Torgau";""
+"73,000";"57,4";"Mobil";"68,66";"75,82";"1.059";"1.059,45";"Torgau";""
+"73,100";"59,2";"Mobil";"68,51";"75,79";"1.059";"1.059,45";"Torgau";""
+"73,200";"61,7";"Mobil";"68,16";"75,76";"1.059";"1.059,45";"Torgau";""
+"73,300";"60,9";"Mobil";"68,17";"75,75";"1.059";"1.059,45";"Torgau";""
+"73,400";"60,9";"Mobil";"68,23";"75,73";"1.059";"1.059,45";"Torgau";""
+"73,500";"60,0";"Mobil";"68,35";"75,70";"1.059";"1.059,45";"Torgau";""
+"73,600";"60,4";"Mobil";"68,28";"75,67";"1.059";"1.059,45";"Torgau";""
+"73,700";"58,8";"Mobil";"68,44";"75,65";"1.059";"1.059,45";"Torgau";""
+"73,800";"60,6";"Mobil";"68,23";"75,63";"1.059";"1.059,45";"Torgau";""
+"73,900";"58,7";"Mobil";"68,43";"75,61";"1.059";"1.059,45";"Torgau";""
+"74,000";"59,9";"Mobil";"68,27";"75,58";"1.059";"1.059,45";"Torgau";""
+"74,100";"62,3";"Mobil";"68,00";"75,56";"1.059";"1.059,45";"Torgau";""
+"74,200";"61,3";"Mobil";"68,11";"75,53";"1.059";"1.059,45";"Torgau";""
+"74,300";"62,1";"Mobil";"68,02";"75,50";"1.059";"1.059,45";"Torgau";""
+"74,400";"63,7";"Mobil";"67,80";"75,46";"1.059";"1.059,45";"Torgau";""
+"74,500";"63,0";"Mobil";"67,83";"75,43";"1.059";"1.059,45";"Torgau";""
+"74,600";"60,6";"Mobil";"68,06";"75,40";"1.059";"1.059,45";"Torgau";""
+"74,700";"62,4";"Mobil";"67,85";"75,37";"1.059";"1.059,45";"Torgau";""
+"74,800";"62,4";"Mobil";"67,81";"75,34";"1.059";"1.059,45";"Torgau";""
+"74,900";"59,4";"Mobil";"68,07";"75,33";"1.059";"1.059,45";"Torgau";""
+"75,000";"60,2";"Mobil";"67,97";"75,32";"1.059";"1.059,45";"Torgau";""
+"75,100";"59,1";"Mobil";"68,05";"75,30";"1.059";"1.059,45";"Torgau";""
+"75,200";"56,8";"Mobil";"68,27";"75,27";"1.059";"1.059,45";"Torgau";""
+"75,300";"55,4";"Mobil";"68,41";"75,26";"1.059";"1.059,45";"Torgau";""
+"75,400";"57,3";"Mobil";"68,20";"75,24";"1.059";"1.059,45";"Torgau";""
+"75,500";"58,3";"Mobil";"68,06";"75,22";"1.059";"1.059,45";"Torgau";""
+"75,600";"61,2";"Mobil";"67,76";"75,19";"1.059";"1.059,45";"Torgau";""
+"75,700";"60,6";"Mobil";"67,81";"75,16";"1.059";"1.059,45";"Torgau";""
+"75,800";"59,7";"Mobil";"67,87";"75,12";"1.059";"1.059,45";"Torgau";""
+"75,900";"60,5";"Mobil";"67,76";"75,10";"1.059";"1.059,45";"Torgau";""
+"76,000";"59,7";"Mobil";"67,84";"75,08";"1.059";"1.059,45";"Torgau";""
+"76,100";"59,9";"Mobil";"67,80";"75,06";"1.059";"1.059,45";"Torgau";""
+"76,200";"58,9";"Mobil";"67,86";"75,03";"1.059";"1.059,45";"Torgau";""
+"76,300";"54,5";"Mobil";"68,27";"75,01";"1.059";"1.059,45";"Torgau";""
+"76,400";"54,2";"Mobil";"68,22";"74,99";"1.059";"1.059,45";"Torgau";"HW-Schutz: Kloedener-Deich"
+"76,500";"59,7";"Mobil";"67,46";"74,98";"1.059";"1.059,45";"Torgau";""
+"76,600";"62,3";"Mobil";"67,38";"74,96";"1.059";"1.059,45";"Torgau";"Geschiebemessstelle: Pretsch-Mauken"
+"76,700";"62,6";"Mobil";"67,43";"74,93";"1.059";"1.059,45";"Torgau";""
+"76,800";"61,4";"Mobil";"67,54";"74,90";"1.059";"1.059,45";"Torgau";""
+"76,900";"61,9";"Mobil";"67,46";"74,88";"1.059";"1.059,45";"Torgau";""
+"77,000";"63,0";"Mobil";"67,32";"74,85";"1.059";"1.059,45";"Torgau";""
+"77,100";"62,1";"Mobil";"67,40";"74,84";"1.059";"1.059,45";"Torgau";""
+"77,200";"56,8";"Mobil";"68,02";"74,82";"1.059";"1.059,45";"Torgau";""
+"77,300";"60,0";"Mobil";"67,71";"74,79";"1.059";"1.059,45";"Torgau";""
+"77,400";"57,3";"Mobil";"67,97";"74,76";"1.059";"1.059,45";"Torgau";""
+"77,500";"58,2";"Mobil";"67,86";"74,73";"1.059";"1.059,45";"Torgau";""
+"77,600";"59,5";"Mobil";"67,71";"74,69";"1.059";"1.059,45";"Torgau";""
+"77,700";"59,4";"Mobil";"67,72";"74,68";"1.059";"1.059,45";"Torgau";""
+"77,800";"60,5";"Mobil";"67,62";"74,66";"1.059";"1.059,45";"Torgau";""
+"77,900";"60,6";"Mobil";"67,61";"74,65";"1.059";"1.059,45";"Torgau";""
+"78,000";"60,3";"Mobil";"67,64";"74,63";"1.059";"1.059,45";"Torgau";""
+"78,100";"57,7";"Mobil";"67,90";"74,62";"1.059";"1.059,45";"Torgau";""
+"78,200";"59,6";"Mobil";"67,74";"74,60";"1.059";"1.059,45";"Torgau";""
+"78,300";"59,1";"Mobil";"67,79";"74,58";"1.059";"1.059,45";"Torgau";""
+"78,400";"59,1";"Mobil";"67,79";"74,55";"1.059";"1.059,45";"Torgau";""
+"78,500";"61,5";"Mobil";"67,55";"74,52";"1.059";"1.059,45";"Torgau";""
+"78,600";"61,4";"Mobil";"67,54";"74,49";"1.059";"1.059,45";"Torgau";""
+"78,700";"59,9";"Mobil";"67,67";"74,47";"1.059";"1.059,45";"Torgau";""
+"78,800";"59,0";"Mobil";"67,76";"74,44";"1.059";"1.059,45";"Torgau";""
+"78,900";"62,8";"Mobil";"67,42";"74,42";"1.059";"1.059,45";"Torgau";""
+"79,000";"62,1";"Mobil";"67,46";"74,39";"1.059";"1.059,45";"Torgau";""
+"79,100";"63,9";"Mobil";"67,26";"74,37";"1.059";"1.059,45";"Torgau";""
+"79,200";"60,8";"Mobil";"67,56";"74,34";"1.059";"1.059,45";"Torgau";""
+"79,300";"60,4";"Mobil";"67,61";"74,31";"1.059";"1.059,45";"Torgau";""
+"79,400";"61,7";"Mobil";"67,50";"74,28";"1.059";"1.059,45";"Torgau";""
+"79,500";"60,9";"Mobil";"67,58";"74,27";"1.059";"1.059,45";"Torgau";""
+"79,600";"61,1";"Mobil";"67,59";"74,25";"1.059";"1.059,45";"Torgau";""
+"79,700";"62,5";"Mobil";"67,45";"74,24";"1.059";"1.059,45";"Torgau";""
+"79,800";"61,7";"Mobil";"67,54";"74,22";"1.059";"1.059,45";"Torgau";""
+"79,900";"63,6";"Mobil";"67,29";"74,19";"1.059";"1.059,45";"Torgau";""
+"80,000";"63,7";"Mobil";"67,30";"74,16";"1.059";"1.059,45";"Torgau";""
+"80,100";"63,9";"Mobil";"67,30";"74,14";"1.059";"1.059,45";"Torgau";""
+"80,200";"62,7";"Mobil";"67,39";"74,11";"1.059";"1.059,45";"Torgau";""
+"80,300";"64,0";"Mobil";"67,24";"74,09";"1.059";"1.059,45";"Torgau";""
+"80,400";"64,5";"Mobil";"67,18";"74,06";"1.059";"1.059,45";"Torgau";""
+"80,500";"64,1";"Mobil";"67,20";"74,04";"1.059";"1.059,45";"Torgau";""
+"80,600";"60,4";"Mobil";"67,43";"74,01";"1.059";"1.059,45";"Torgau";""
+"80,700";"59,9";"Mobil";"67,33";"73,98";"1.059";"1.059,45";"Torgau";""
+"80,800";"61,5";"Mobil";"67,19";"73,94";"1.059";"1.059,45";"Torgau";""
+"80,900";"61,7";"Mobil";"67,17";"73,91";"1.059";"1.059,45";"Torgau";""
+"81,000";"61,5";"Mobil";"67,11";"73,87";"1.055";"1.059,45";"Torgau";""
+"81,100";"60,1";"Mobil";"67,15";"73,84";"1.055";"1.059,45";"Torgau";""
+"81,200";"59,4";"Mobil";"67,18";"73,80";"1.055";"1.059,45";"Torgau";""
+"81,300";"58,9";"Mobil";"67,18";"73,77";"1.055";"1.059,45";"Torgau";""
+"81,400";"60,1";"Mobil";"67,05";"73,73";"1.055";"1.059,45";"Torgau";""
+"81,500";"59,0";"Mobil";"67,12";"73,70";"1.055";"1.059,45";"Torgau";""
+"81,600";"59,6";"Mobil";"67,04";"73,66";"1.055";"1.059,45";"Torgau";""
+"81,700";"59,3";"Mobil";"67,04";"73,63";"1.055";"1.059,45";"Torgau";""
+"81,800";"59,6";"Mobil";"67,12";"73,59";"1.055";"1.059,45";"Torgau";""
+"81,900";"59,1";"Mobil";"67,27";"73,57";"1.055";"1.059,45";"Torgau";""
+"82,000";"64,4";"Mobil";"66,79";"73,54";"1.055";"1.059,45";"Torgau";""
+"82,100";"64,7";"Mobil";"66,74";"73,51";"1.055";"1.059,45";"Torgau";""
+"82,200";"65,2";"Mobil";"66,65";"73,48";"1.055";"1.059,45";"Torgau";""
+"82,300";"66,9";"Mobil";"66,45";"73,45";"1.055";"1.059,45";"Torgau";""
+"82,400";"66,0";"Mobil";"66,59";"73,41";"1.055";"1.059,45";"Torgau";""
+"82,500";"66,9";"Mobil";"66,58";"73,40";"1.055";"1.059,45";"Torgau";""
+"82,600";"67,4";"Mobil";"66,56";"73,38";"1.055";"1.059,45";"Torgau";""
+"82,700";"68,8";"Mobil";"66,45";"73,36";"1.055";"1.059,45";"Torgau";""
+"82,800";"66,8";"Mobil";"66,50";"73,33";"1.055";"1.059,45";"Torgau";""
+"82,900";"65,3";"Mobil";"66,50";"73,30";"1.055";"1.059,45";"Torgau";""
+"83,000";"67,1";"Mobil";"66,32";"73,27";"1.055";"1.059,45";"Torgau";""
+"83,100";"66,0";"Mobil";"66,40";"73,25";"1.055";"1.059,45";"Torgau";""
+"83,200";"67,2";"Mobil";"66,36";"73,22";"1.055";"1.059,45";"Torgau";""
+"83,300";"66,0";"Mobil";"66,52";"73,21";"1.055";"1.059,45";"Torgau";""
+"83,400";"66,8";"Mobil";"66,37";"73,19";"1.055";"1.059,45";"Torgau";""
+"83,500";"66,8";"Mobil";"66,25";"73,16";"1.055";"1.059,45";"Torgau";""
+"83,600";"63,8";"Mobil";"66,48";"73,12";"1.055";"1.059,45";"Torgau";""
+"83,700";"63,3";"Mobil";"66,48";"73,09";"1.055";"1.059,45";"Torgau";""
+"83,800";"62,6";"Mobil";"66,53";"73,06";"1.055";"1.059,45";"Torgau";""
+"83,900";"61,4";"Mobil";"66,64";"73,04";"1.055";"1.059,45";"Torgau";""
+"84,000";"63,3";"Mobil";"66,47";"73,02";"1.055";"1.059,45";"Torgau";""
+"84,100";"64,7";"Mobil";"66,33";"73,00";"1.055";"1.059,45";"Torgau";""
+"84,200";"64,5";"Mobil";"66,28";"72,97";"1.055";"1.059,45";"Torgau";""
+"84,300";"65,6";"Mobil";"66,11";"72,95";"1.055";"1.059,45";"Torgau";""
+"84,400";"66,7";"Mobil";"66,04";"72,92";"1.055";"1.059,45";"Torgau";""
+"84,500";"68,3";"Mobil";"65,91";"72,90";"1.055";"1.059,45";"Torgau";""
+"84,600";"69,0";"Mobil";"65,83";"72,88";"1.055";"1.059,45";"Torgau";"HW-Schutz: Schuetzberger-Deich"
+"84,700";"65,7";"Mobil";"66,10";"72,86";"1.055";"1.059,45";"Torgau";""
+"84,800";"65,7";"Mobil";"66,07";"72,84";"1.055";"1.059,45";"Torgau";""
+"84,900";"64,8";"Mobil";"66,12";"72,82";"1.055";"1.059,45";"Torgau";""
+"85,000";"65,4";"Mobil";"66,05";"72,80";"1.055";"1.059,45";"Torgau";""
+"85,100";"66,0";"Mobil";"65,99";"72,79";"1.055";"1.059,45";"Torgau";""
+"85,200";"67,3";"Mobil";"65,85";"72,77";"1.055";"1.059,45";"Torgau";""
+"85,300";"66,2";"Mobil";"65,93";"72,75";"1.055";"1.059,45";"Torgau";""
+"85,400";"64,8";"Mobil";"66,02";"72,73";"1.055";"1.059,45";"Torgau";""
+"85,500";"64,2";"Mobil";"66,03";"72,71";"1.055";"1.059,45";"Torgau";""
+"85,600";"62,6";"Mobil";"66,12";"72,68";"1.050";"1.059,45";"Torgau";""
+"85,700";"60,4";"Mobil";"66,26";"72,66";"1.050";"1.059,45";"Torgau";""
+"85,800";"59,1";"Mobil";"66,33";"72,63";"1.050";"1.059,45";"Torgau";""
+"85,900";"62,6";"Mobil";"65,98";"72,61";"1.050";"1.059,45";"Torgau";""
+"86,000";"60,3";"Mobil";"66,17";"72,58";"1.050";"1.059,45";"Torgau";""
+"86,100";"60,5";"Mobil";"66,15";"72,56";"1.050";"1.059,45";"Torgau";""
+"86,200";"60,3";"Mobil";"66,15";"72,53";"1.050";"1.059,45";"Torgau";""
+"86,300";"62,4";"Mobil";"65,95";"72,51";"1.050";"1.059,45";"Torgau";""
+"86,400";"61,8";"Mobil";"66,00";"72,49";"1.050";"1.059,45";"Torgau";""
+"86,500";"61,5";"Mobil";"66,00";"72,48";"1.050";"1.059,45";"Torgau";""
+"86,600";"62,0";"Mobil";"65,94";"72,46";"1.050";"1.059,45";"Torgau";""
+"86,700";"62,3";"Mobil";"65,88";"72,45";"1.050";"1.059,45";"Torgau";""
+"86,800";"62,7";"Mobil";"65,81";"72,43";"1.050";"1.059,45";"Torgau";""
+"86,900";"62,7";"Mobil";"65,77";"72,42";"1.050";"1.059,45";"Torgau";""
+"87,000";"62,5";"Mobil";"65,77";"72,40";"1.050";"1.059,45";"Torgau";""
+"87,100";"61,7";"Mobil";"65,82";"72,39";"1.050";"1.059,45";"Torgau";""
+"87,200";"63,9";"Mobil";"65,61";"72,37";"1.050";"1.059,45";"Torgau";""
+"87,300";"64,3";"Mobil";"65,53";"72,35";"1.050";"1.059,45";"Torgau";""
+"87,400";"64,4";"Mobil";"65,50";"72,32";"1.050";"1.059,45";"Torgau";""
+"87,500";"64,7";"Mobil";"65,43";"72,32";"1.050";"1.059,45";"Torgau";""
+"87,600";"63,5";"Mobil";"65,53";"72,31";"1.050";"1.059,45";"Torgau";""
+"87,700";"62,6";"Mobil";"65,59";"72,30";"1.050";"1.059,45";"Torgau";""
+"87,800";"62,2";"Mobil";"65,59";"72,28";"1.050";"1.059,45";"Torgau";""
+"87,900";"63,2";"Mobil";"65,47";"72,27";"1.050";"1.059,45";"Torgau";""
+"88,000";"62,5";"Mobil";"65,53";"72,25";"1.050";"1.059,45";"Torgau";""
+"88,100";"62,4";"Mobil";"65,53";"72,24";"1.050";"1.059,45";"Torgau";""
+"88,200";"62,8";"Mobil";"65,43";"72,22";"1.050";"1.059,45";"Torgau";""
+"88,300";"62,8";"Mobil";"65,36";"72,21";"1.050";"1.059,45";"Torgau";""
+"88,400";"60,7";"Mobil";"65,50";"72,20";"1.050";"1.059,45";"Torgau";""
+"88,500";"60,4";"Mobil";"65,45";"72,19";"1.050";"1.059,45";"Torgau";""
+"88,600";"62,5";"Mobil";"65,36";"72,17";"1.050";"1.059,45";"Torgau";""
+"88,700";"62,3";"Mobil";"65,41";"72,15";"1.050";"1.059,45";"Torgau";""
+"88,800";"63,3";"Mobil";"65,28";"72,12";"1.050";"1.059,45";"Torgau";""
+"88,900";"63,3";"Mobil";"65,26";"72,11";"1.050";"1.059,45";"Torgau";""
+"89,000";"61,7";"Mobil";"65,36";"72,09";"1.050";"1.059,45";"Torgau";""
+"89,100";"61,0";"Mobil";"65,32";"72,08";"1.050";"1.059,45";"Torgau";""
+"89,200";"61,4";"Mobil";"65,28";"72,06";"1.050";"1.059,45";"Torgau";""
+"89,300";"62,1";"Mobil";"65,20";"72,05";"1.050";"1.059,45";"Torgau";""
+"89,400";"63,1";"Mobil";"65,05";"72,03";"1.050";"1.059,45";"Torgau";""
+"89,500";"61,9";"Mobil";"65,12";"72,02";"1.050";"1.059,45";"Torgau";""
+"89,600";"63,9";"Mobil";"65,02";"72,01";"1.050";"1.059,45";"Torgau";""
+"89,700";"63,8";"Mobil";"65,05";"71,98";"1.050";"1.059,45";"Torgau";""
+"89,800";"64,6";"Mobil";"64,95";"71,95";"1.050";"1.059,45";"Torgau";""
+"89,900";"63,2";"Mobil";"65,05";"71,92";"1.050";"1.059,45";"Torgau";""
+"90,000";"63,6";"Mobil";"64,98";"71,89";"1.050";"1.059,45";"Torgau";""
+"90,100";"66,4";"Mobil";"64,95";"71,85";"1.050";"1.059,45";"Torgau";""
+"90,200";"69,4";"Mobil";"64,94";"71,81";"1.050";"1.059,45";"Torgau";"Zufluss: Schwarze Elster"
+"90,300";"71,0";"Mobil";"64,79";"71,80";"1.050";"1.059,45";"außerh. d. Bez.pegels";""
+"90,400";"69,9";"Mobil";"64,79";"71,78";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"90,500";"68,3";"Mobil";"64,85";"71,76";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"90,600";"68,4";"Mobil";"64,74";"71,73";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"90,700";"66,9";"Mobil";"64,78";"71,71";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"90,800";"66,6";"Mobil";"64,69";"71,68";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"90,900";"64,6";"Mobil";"64,76";"71,64";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"91,000";"63,9";"Mobil";"64,71";"71,60";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"91,100";"63,5";"Mobil";"64,67";"71,58";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"91,200";"60,1";"Mobil";"64,92";"71,55";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"91,300";"60,5";"Mobil";"64,80";"71,54";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"91,400";"60,7";"Mobil";"64,69";"71,52";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"91,500";"57,6";"Starr";"64,88";"71,49";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"91,600";"55,6";"Starr";"64,99";"71,45";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"91,700";"54,4";"Starr";"65,02";"71,44";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"91,800";"53,3";"Starr";"65,06";"71,42";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"91,900";"53,3";"Starr";"64,97";"71,39";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"92,000";"53,0";"Starr";"64,90";"71,36";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"92,100";"52,5";"Starr";"64,86";"71,34";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"92,200";"52,2";"Starr";"64,81";"71,32";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"92,300";"50,9";"Mobil";"64,84";"71,30";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"92,400";"51,0";"Mobil";"64,73";"71,27";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"92,500";"50,9";"Mobil";"64,64";"71,25";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"92,600";"51,3";"Mobil";"64,48";"71,23";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"92,700";"50,7";"Mobil";"64,46";"71,22";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"92,800";"49,4";"Mobil";"64,53";"71,20";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"92,900";"48,8";"Mobil";"64,54";"71,18";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"93,000";"47,4";"Mobil";"64,56";"71,16";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"93,100";"47,3";"Mobil";"64,42";"71,14";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"93,200";"46,0";"Mobil";"64,51";"71,11";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"93,300";"45,5";"Mobil";"64,51";"71,09";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"93,400";"41,9";"Mobil";"64,79";"71,06";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"93,500";"41,9";"Mobil";"64,62";"71,05";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"93,600";"39,8";"Mobil";"64,71";"71,03";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"93,700";"37,8";"Mobil";"64,80";"71,01";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"93,800";"38,5";"Mobil";"64,69";"70,99";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"93,900";"37,7";"Mobil";"64,77";"70,97";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"94,000";"38,8";"Mobil";"64,55";"70,95";"1.119";"1.059,45";"außerh. d. Bez.pegels";"Zufluss: Zugbach"
+"94,100";"38,6";"Mobil";"64,52";"70,93";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"94,200";"38,1";"Mobil";"64,51";"70,91";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"94,300";"37,9";"Mobil";"64,46";"70,89";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"94,400";"36,6";"Mobil";"64,55";"70,86";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"94,500";"35,8";"Mobil";"64,56";"70,84";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"94,600";"34,0";"Mobil";"64,60";"70,82";"1.119";"1.059,45";"außerh. d. Bez.pegels";"HW-Schutz: Galliner-Deich"
+"94,700";"32,8";"Mobil";"64,64";"70,81";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"94,800";"33,2";"Mobil";"64,59";"70,79";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"94,900";"34,0";"Mobil";"64,45";"70,77";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"95,000";"33,0";"Mobil";"64,47";"70,74";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"95,100";"33,2";"Mobil";"64,26";"70,73";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"95,200";"32,4";"Mobil";"64,35";"70,71";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"95,300";"32,0";"Mobil";"64,36";"70,69";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"95,400";"27,8";"Mobil";"64,51";"70,67";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"95,500";"23,6";"Mobil";"64,50";"70,66";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"95,600";"22,3";"Mobil";"64,48";"70,65";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"95,700";"21,2";"Mobil";"64,39";"70,64";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"95,800";"31,3";"Mobil";"64,22";"70,63";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"95,900";"36,6";"Mobil";"64,21";"70,59";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"96,000";"42,2";"Mobil";"64,01";"70,55";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"96,100";"44,8";"Mobil";"63,91";"70,49";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"96,200";"44,9";"Mobil";"63,81";"70,43";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"96,300";"43,2";"Mobil";"63,95";"70,41";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"96,400";"42,4";"Mobil";"64,09";"70,38";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"96,500";"42,9";"Mobil";"64,06";"70,35";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"96,600";"43,7";"Mobil";"63,87";"70,32";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"96,700";"42,3";"Mobil";"63,92";"70,31";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"96,800";"37,7";"Mobil";"63,90";"70,29";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"96,900";"26,3";"Mobil";"63,92";"70,30";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"97,000";"39,5";"Mobil";"64,12";"70,31";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"97,100";"42,6";"Mobil";"64,17";"70,25";"1.119";"1.059,45";"außerh. d. Bez.pegels";"Zufluss: Alte Elbe"
+"97,200";"42,8";"Mobil";"64,02";"70,18";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"97,300";"44,7";"Mobil";"63,66";"70,17";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"97,400";"45,5";"Mobil";"63,55";"70,15";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"97,500";"46,1";"Mobil";"63,47";"70,13";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"97,600";"44,4";"Mobil";"63,45";"70,10";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"97,700";"40,9";"Mobil";"63,56";"70,10";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"97,800";"44,1";"Mobil";"63,48";"70,09";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"97,900";"46,5";"Mobil";"63,39";"70,06";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"98,000";"46,1";"Mobil";"63,40";"70,03";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"98,100";"44,5";"Mobil";"63,57";"70,01";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"98,200";"44,9";"Mobil";"63,54";"69,99";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"98,300";"43,8";"Mobil";"63,70";"69,97";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"98,400";"41,4";"Mobil";"63,86";"69,95";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"98,500";"40,2";"Mobil";"63,83";"69,94";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"98,600";"41,2";"Mobil";"63,90";"69,92";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"98,700";"44,3";"Mobil";"63,64";"69,90";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"98,800";"47,2";"Mobil";"63,43";"69,87";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"98,900";"49,8";"Mobil";"63,21";"69,84";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"99,000";"52,5";"Mobil";"62,85";"69,81";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"99,100";"51,1";"Mobil";"62,95";"69,79";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"99,200";"51,8";"Mobil";"62,94";"69,76";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"99,300";"51,6";"Mobil";"63,03";"69,74";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"99,400";"49,1";"Mobil";"63,25";"69,72";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"99,500";"48,1";"Mobil";"63,32";"69,71";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"99,600";"46,0";"Mobil";"63,45";"69,69";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"99,700";"44,5";"Mobil";"63,46";"69,68";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"99,800";"45,9";"Mobil";"63,40";"69,66";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"99,900";"47,1";"Mobil";"63,35";"69,64";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"100,000";"48,6";"Mobil";"63,40";"69,62";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"100,100";"49,9";"Mobil";"63,32";"69,58";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"100,200";"50,1";"Mobil";"63,26";"69,54";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"100,300";"52,4";"Mobil";"62,98";"69,52";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"100,400";"51,6";"Mobil";"62,93";"69,50";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"100,500";"50,7";"Mobil";"62,79";"69,49";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"100,600";"48,1";"Mobil";"62,81";"69,48";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"100,700";"43,7";"Mobil";"62,89";"69,48";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"100,800";"46,5";"Mobil";"62,84";"69,47";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"100,900";"48,7";"Mobil";"62,81";"69,45";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"101,000";"49,6";"Mobil";"62,94";"69,43";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"101,100";"51,9";"Mobil";"62,82";"69,41";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"101,200";"53,4";"Mobil";"62,73";"69,39";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"101,300";"53,4";"Mobil";"62,77";"69,37";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"101,400";"53,3";"Mobil";"62,77";"69,34";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"101,500";"53,0";"Mobil";"62,80";"69,32";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"101,600";"51,2";"Mobil";"63,01";"69,30";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"101,700";"49,9";"Mobil";"63,16";"69,28";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"101,800";"49,6";"Mobil";"63,05";"69,26";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"101,900";"47,1";"Mobil";"63,10";"69,25";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"102,000";"45,8";"Mobil";"63,11";"69,23";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"102,100";"44,7";"Mobil";"63,08";"69,22";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"102,200";"45,9";"Mobil";"62,90";"69,20";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"102,300";"47,1";"Mobil";"62,75";"69,19";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"102,400";"51,9";"Mobil";"62,67";"69,18";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"102,500";"54,3";"Mobil";"62,63";"69,16";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"102,600";"52,8";"Mobil";"62,71";"69,13";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"102,700";"51,3";"Mobil";"62,78";"69,12";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"102,800";"51,8";"Mobil";"62,75";"69,10";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"102,900";"52,6";"Mobil";"62,68";"69,08";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"103,000";"50,8";"Mobil";"62,85";"69,06";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"103,100";"51,0";"Mobil";"62,80";"69,05";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"103,200";"51,0";"Mobil";"62,83";"69,03";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"103,300";"51,0";"Mobil";"62,84";"69,01";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"103,400";"51,1";"Mobil";"62,92";"68,99";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"103,500";"51,4";"Mobil";"62,94";"68,97";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"103,600";"55,0";"Mobil";"62,62";"68,95";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"103,700";"58,5";"Mobil";"62,28";"68,92";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"103,800";"56,6";"Mobil";"62,44";"68,88";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"103,900";"55,6";"Mobil";"62,53";"68,86";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"104,000";"56,2";"Mobil";"62,44";"68,83";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"104,100";"58,4";"Mobil";"62,21";"68,82";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"104,200";"56,5";"Mobil";"62,41";"68,80";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"104,300";"55,1";"Mobil";"62,53";"68,78";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"104,400";"54,5";"Mobil";"62,59";"68,75";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"104,500";"54,5";"Mobil";"62,59";"68,73";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"104,600";"55,9";"Mobil";"62,43";"68,70";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"104,700";"54,6";"Mobil";"62,54";"68,69";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"104,800";"55,6";"Mobil";"62,46";"68,67";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"104,900";"56,4";"Mobil";"62,37";"68,64";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"105,000";"58,2";"Mobil";"62,19";"68,61";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"105,100";"60,1";"Mobil";"61,98";"68,59";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"105,200";"61,7";"Mobil";"61,82";"68,57";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"105,300";"62,1";"Mobil";"61,77";"68,55";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"105,400";"60,8";"Mobil";"61,90";"68,53";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"105,500";"61,8";"Mobil";"61,80";"68,51";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"105,600";"63,9";"Mobil";"61,59";"68,48";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"105,700";"60,9";"Mobil";"61,77";"68,44";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"105,800";"62,2";"Mobil";"61,61";"68,39";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"105,900";"61,4";"Mobil";"61,66";"68,37";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"106,000";"61,7";"Mobil";"61,66";"68,34";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"106,100";"60,3";"Mobil";"61,83";"68,32";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"106,200";"59,1";"Mobil";"61,95";"68,30";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"106,300";"57,8";"Mobil";"62,08";"68,28";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"106,400";"58,1";"Mobil";"62,05";"68,26";"1.119";"1.059,45";"außerh. d. Bez.pegels";"Schwebstoffmessstelle: Wittenberg"
+"106,500";"59,0";"Mobil";"61,94";"68,24";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"106,600";"60,1";"Mobil";"61,80";"68,22";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"106,700";"60,4";"Mobil";"61,74";"68,20";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"106,800";"60,4";"Mobil";"61,70";"68,17";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"106,900";"58,3";"Mobil";"61,85";"68,15";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"107,000";"57,4";"Mobil";"61,91";"68,12";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"107,100";"59,4";"Mobil";"61,70";"68,10";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"107,200";"59,4";"Mobil";"61,65";"68,08";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"107,300";"57,8";"Starr";"61,76";"68,06";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"107,400";"57,7";"Starr";"61,75";"68,04";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"107,500";"57,9";"Starr";"61,70";"68,02";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"107,600";"57,9";"Starr";"61,64";"67,99";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"107,700";"56,4";"Starr";"61,72";"67,97";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"107,800";"58,4";"Starr";"61,52";"67,94";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"107,900";"57,3";"Starr";"61,61";"67,92";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"108,000";"55,5";"Starr";"61,76";"67,90";"1.119";"1.059,45";"außerh. d. Bez.pegels";"Hafen: Wittenberg -Schutz- und Sicherheitshafen"
+"108,100";"54,0";"Starr";"61,87";"67,88";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"108,200";"55,8";"Starr";"61,67";"67,85";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"108,300";"56,0";"Starr";"61,62";"67,83";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"108,400";"54,2";"Mobil";"61,78";"67,81";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"108,500";"53,5";"Mobil";"61,82";"67,79";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"108,600";"53,8";"Mobil";"61,76";"67,77";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"108,700";"52,2";"Mobil";"61,88";"67,75";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"108,800";"51,3";"Mobil";"61,93";"67,72";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"108,900";"49,6";"Mobil";"62,06";"67,70";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"109,000";"48,8";"Mobil";"62,11";"67,67";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"109,100";"51,4";"Mobil";"61,82";"67,65";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"109,200";"52,2";"Mobil";"61,70";"67,62";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"109,300";"51,0";"Mobil";"61,76";"67,59";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"109,400";"48,8";"Mobil";"61,91";"67,56";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"109,500";"51,7";"Mobil";"61,56";"67,53";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"109,600";"56,0";"Mobil";"61,20";"67,49";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"109,700";"56,4";"Mobil";"61,17";"67,47";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"109,800";"58,6";"Mobil";"60,92";"67,45";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"109,900";"59,2";"Mobil";"60,82";"67,44";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"110,000";"59,3";"Mobil";"60,86";"67,42";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"110,100";"60,0";"Mobil";"60,78";"67,39";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"110,200";"57,9";"Mobil";"60,95";"67,35";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"110,300";"58,3";"Mobil";"60,87";"67,34";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"110,400";"59,2";"Mobil";"60,77";"67,32";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"110,500";"60,2";"Mobil";"60,65";"67,30";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"110,600";"59,6";"Mobil";"60,68";"67,28";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"110,700";"57,8";"Mobil";"60,83";"67,27";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"110,800";"55,5";"Mobil";"61,07";"67,25";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"110,900";"54,1";"Mobil";"61,21";"67,23";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"111,000";"52,6";"Mobil";"61,34";"67,21";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"111,100";"52,5";"Mobil";"61,34";"67,19";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"111,200";"58,6";"Mobil";"60,72";"67,17";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"111,300";"62,1";"Mobil";"60,37";"67,16";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"111,400";"61,0";"Mobil";"60,50";"67,14";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"111,500";"58,4";"Mobil";"60,74";"67,12";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"111,600";"59,3";"Mobil";"60,64";"67,09";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"111,700";"59,1";"Mobil";"60,65";"67,08";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"111,800";"59,5";"Mobil";"60,59";"67,06";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"111,900";"58,8";"Mobil";"60,64";"67,05";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"112,000";"57,3";"Mobil";"60,79";"67,03";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"112,100";"56,8";"Mobil";"60,83";"67,01";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"112,200";"55,3";"Mobil";"60,95";"66,99";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"112,300";"55,5";"Mobil";"60,91";"66,98";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"112,400";"54,1";"Mobil";"61,06";"66,96";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"112,500";"53,3";"Mobil";"61,15";"66,94";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"112,600";"52,7";"Mobil";"61,20";"66,92";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"112,700";"52,4";"Mobil";"61,21";"66,90";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"112,800";"51,9";"Mobil";"61,26";"66,88";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"112,900";"54,2";"Mobil";"61,03";"66,86";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"113,000";"53,7";"Mobil";"61,06";"66,84";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"113,100";"53,1";"Mobil";"61,11";"66,82";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"113,200";"52,7";"Mobil";"61,11";"66,80";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"113,300";"52,8";"Mobil";"61,07";"66,79";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"113,400";"51,5";"Mobil";"61,18";"66,78";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"113,500";"51,6";"Mobil";"61,15";"66,77";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"113,600";"54,2";"Mobil";"60,82";"66,75";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"113,700";"55,3";"Mobil";"60,59";"66,74";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"113,800";"58,3";"Mobil";"60,35";"66,73";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"113,900";"61,4";"Mobil";"60,08";"66,72";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"114,000";"62,3";"Mobil";"60,01";"66,70";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"114,100";"61,3";"Mobil";"60,11";"66,69";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"114,200";"58,7";"Mobil";"60,24";"66,68";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"114,300";"54,3";"Mobil";"60,44";"66,67";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"114,400";"54,8";"Mobil";"60,44";"66,66";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"114,500";"55,3";"Mobil";"60,42";"66,65";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"114,600";"50,3";"Mobil";"60,50";"66,64";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"114,700";"40,5";"Mobil";"60,59";"66,64";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"114,800";"52,3";"Mobil";"60,32";"66,64";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"114,900";"56,2";"Mobil";"60,32";"66,63";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"115,000";"56,6";"Mobil";"60,28";"66,61";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"115,100";"56,9";"Mobil";"60,26";"66,61";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"115,200";"58,7";"Mobil";"60,13";"66,60";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"115,300";"62,1";"Mobil";"59,81";"66,59";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"115,400";"63,0";"Mobil";"59,79";"66,57";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"115,500";"61,4";"Mobil";"59,99";"66,56";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"115,600";"59,2";"Mobil";"60,21";"66,55";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"115,700";"57,9";"Mobil";"60,34";"66,54";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"115,800";"60,1";"Mobil";"60,11";"66,53";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"115,900";"63,1";"Mobil";"59,78";"66,52";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"116,000";"61,5";"Mobil";"59,92";"66,51";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"116,100";"57,7";"Mobil";"60,28";"66,51";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"116,200";"54,4";"Mobil";"60,54";"66,50";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"116,300";"52,5";"Mobil";"60,62";"66,50";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"116,400";"55,4";"Mobil";"60,41";"66,49";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"116,500";"59,1";"Mobil";"60,11";"66,48";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"116,600";"57,5";"Mobil";"60,29";"66,47";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"116,700";"57,8";"Mobil";"60,28";"66,46";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"116,800";"56,7";"Mobil";"60,36";"66,44";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"116,900";"56,8";"Mobil";"60,33";"66,43";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"117,000";"57,7";"Mobil";"60,29";"66,42";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"117,100";"57,5";"Mobil";"60,27";"66,40";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"117,200";"60,6";"Mobil";"59,98";"66,38";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"117,300";"59,5";"Mobil";"60,06";"66,35";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"117,400";"60,6";"Mobil";"59,92";"66,31";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"117,500";"63,9";"Mobil";"59,60";"66,30";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"117,600";"69,4";"Mobil";"59,08";"66,29";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"117,700";"70,3";"Mobil";"58,95";"66,27";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"117,800";"72,4";"Mobil";"58,76";"66,24";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"117,900";"69,9";"Mobil";"58,98";"66,22";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"118,000";"68,7";"Mobil";"59,06";"66,20";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"118,100";"70,3";"Mobil";"58,89";"66,18";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"118,200";"68,9";"Mobil";"58,99";"66,15";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"118,300";"64,8";"Mobil";"59,34";"66,13";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"118,400";"63,3";"Mobil";"59,44";"66,11";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"118,500";"63,4";"Mobil";"59,38";"66,08";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"118,600";"64,3";"Mobil";"59,28";"66,05";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"118,700";"63,2";"Mobil";"59,38";"66,04";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"118,800";"62,4";"Mobil";"59,44";"66,03";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"118,900";"61,9";"Mobil";"59,45";"66,01";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"119,000";"62,0";"Mobil";"59,41";"65,98";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"119,100";"60,9";"Mobil";"59,47";"65,95";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"119,200";"60,9";"Mobil";"59,43";"65,92";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"119,300";"61,8";"Mobil";"59,33";"65,90";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"119,400";"60,5";"Mobil";"59,44";"65,87";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"119,500";"60,0";"Mobil";"59,49";"65,85";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"119,600";"62,7";"Mobil";"59,25";"65,83";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"119,700";"63,4";"Mobil";"59,15";"65,83";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"119,800";"64,6";"Mobil";"58,99";"65,82";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"119,900";"65,6";"Mobil";"58,84";"65,81";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"120,000";"67,7";"Mobil";"58,56";"65,79";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"120,100";"65,7";"Mobil";"58,66";"65,78";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"120,200";"66,1";"Mobil";"58,59";"65,77";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"120,300";"62,5";"Mobil";"58,92";"65,75";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"120,400";"64,9";"Mobil";"58,60";"65,73";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"120,500";"60,8";"Mobil";"58,93";"65,71";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"120,600";"59,4";"Mobil";"59,02";"65,68";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"120,700";"58,3";"Mobil";"59,09";"65,66";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"120,800";"61,1";"Mobil";"58,76";"65,64";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"120,900";"62,9";"Mobil";"58,51";"65,61";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"121,000";"60,8";"Mobil";"58,69";"65,57";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"121,100";"57,1";"Mobil";"59,01";"65,54";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"121,200";"56,3";"Mobil";"59,01";"65,50";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"121,300";"55,4";"Mobil";"59,03";"65,49";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"121,400";"54,5";"Mobil";"59,07";"65,48";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"121,500";"54,5";"Mobil";"59,00";"65,46";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"121,600";"56,0";"Mobil";"58,82";"65,44";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"121,700";"58,2";"Mobil";"58,55";"65,41";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"121,800";"56,5";"Mobil";"58,67";"65,38";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"121,900";"53,4";"Mobil";"58,94";"65,36";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"122,000";"51,2";"Mobil";"59,13";"65,33";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"122,100";"49,9";"Mobil";"59,22";"65,31";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"122,200";"50,1";"Mobil";"59,15";"65,28";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"122,300";"53,4";"Mobil";"58,77";"65,25";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"122,400";"53,1";"Mobil";"58,70";"65,22";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"122,500";"50,0";"Mobil";"58,93";"65,21";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"122,600";"50,4";"Mobil";"58,80";"65,20";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"122,700";"49,8";"Mobil";"58,74";"65,19";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"122,800";"47,5";"Mobil";"58,94";"65,17";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"122,900";"49,2";"Mobil";"58,67";"65,15";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"123,000";"49,3";"Mobil";"58,69";"65,13";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"123,100";"49,2";"Mobil";"58,71";"65,11";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"123,200";"47,7";"Mobil";"58,84";"65,08";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"123,300";"48,4";"Mobil";"58,71";"65,05";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"123,400";"48,7";"Mobil";"58,61";"65,02";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"123,500";"49,4";"Mobil";"58,46";"65,00";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"123,600";"51,5";"Mobil";"58,11";"64,98";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"123,700";"49,8";"Mobil";"58,18";"64,96";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"123,800";"49,8";"Mobil";"58,09";"64,93";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"123,900";"47,7";"Mobil";"58,26";"64,92";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"124,000";"50,6";"Mobil";"57,92";"64,90";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"124,100";"54,2";"Mobil";"57,49";"64,88";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"124,200";"52,7";"Mobil";"57,58";"64,85";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"124,300";"50,7";"Mobil";"57,74";"64,83";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"124,400";"48,1";"Mobil";"58,04";"64,80";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"124,500";"45,5";"Mobil";"58,34";"64,78";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"124,600";"40,9";"Mobil";"58,78";"64,75";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"124,700";"40,9";"Mobil";"58,69";"64,73";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"124,800";"41,6";"Mobil";"58,53";"64,70";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"124,900";"42,1";"Mobil";"58,37";"64,68";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"125,000";"43,4";"Mobil";"58,25";"64,66";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"125,100";"43,2";"Mobil";"58,32";"64,64";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"125,200";"42,3";"Mobil";"58,47";"64,62";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"125,300";"42,3";"Mobil";"58,50";"64,60";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"125,400";"41,2";"Mobil";"58,56";"64,58";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"125,500";"40,7";"Mobil";"58,53";"64,56";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"125,600";"40,2";"Mobil";"58,51";"64,54";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"125,700";"40,6";"Mobil";"58,37";"64,52";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"125,800";"43,2";"Mobil";"58,24";"64,50";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"125,900";"44,5";"Mobil";"58,24";"64,48";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"126,000";"44,9";"Mobil";"58,21";"64,46";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"126,100";"44,5";"Mobil";"58,27";"64,44";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"126,200";"43,9";"Mobil";"58,28";"64,41";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"126,300";"42,6";"Mobil";"58,37";"64,39";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"126,400";"44,3";"Mobil";"58,18";"64,37";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"126,500";"43,9";"Mobil";"58,26";"64,35";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"126,600";"41,0";"Mobil";"58,44";"64,33";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"126,700";"40,1";"Mobil";"58,32";"64,32";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"126,800";"41,0";"Mobil";"58,23";"64,30";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"126,900";"41,0";"Mobil";"58,25";"64,29";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"127,000";"43,1";"Mobil";"58,02";"64,27";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"127,100";"42,7";"Mobil";"58,12";"64,25";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"127,200";"43,4";"Mobil";"58,12";"64,23";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"127,300";"45,8";"Mobil";"57,90";"64,21";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"127,400";"46,8";"Mobil";"57,74";"64,18";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"127,500";"45,2";"Mobil";"57,92";"64,17";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"127,600";"46,3";"Mobil";"57,90";"64,15";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"127,700";"49,3";"Mobil";"57,62";"64,12";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"127,800";"49,7";"Mobil";"57,59";"64,08";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"127,900";"50,0";"Mobil";"57,58";"64,05";"1.118";"1.059,45";"außerh. d. Bez.pegels";"Fähre: Coswig -Gierseilfähre"
+"128,000";"51,5";"Mobil";"57,47";"64,02";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"128,100";"51,5";"Mobil";"57,49";"63,99";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"128,200";"53,1";"Mobil";"57,30";"63,95";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"128,300";"54,0";"Mobil";"57,18";"63,93";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"128,400";"54,2";"Mobil";"57,17";"63,90";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"128,500";"53,2";"Mobil";"57,27";"63,86";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"128,600";"53,1";"Mobil";"57,24";"63,82";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"128,700";"51,7";"Mobil";"57,35";"63,79";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"128,800";"52,8";"Mobil";"57,24";"63,75";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"128,900";"53,2";"Mobil";"57,19";"63,72";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"129,000";"53,8";"Mobil";"57,11";"63,69";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"129,100";"52,9";"Mobil";"57,19";"63,67";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"129,200";"53,9";"Mobil";"57,07";"63,65";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"129,300";"54,6";"Mobil";"56,99";"63,63";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"129,400";"50,4";"Mobil";"57,39";"63,60";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"129,500";"52,9";"Mobil";"57,10";"63,59";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"129,600";"54,0";"Mobil";"56,98";"63,58";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"129,700";"54,2";"Mobil";"56,96";"63,57";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"129,800";"54,8";"Mobil";"56,89";"63,55";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"129,900";"54,4";"Mobil";"56,91";"63,53";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"130,000";"55,1";"Mobil";"56,83";"63,51";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"130,100";"54,0";"Mobil";"56,92";"63,49";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"130,200";"53,3";"Mobil";"56,97";"63,47";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"130,300";"53,0";"Mobil";"56,98";"63,46";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"130,400";"51,0";"Mobil";"57,20";"63,44";"1.118";"1.059,45";"außerh. d. Bez.pegels";"HW-Schutz: Buroer-Deich"
+"130,500";"51,4";"Mobil";"57,14";"63,43";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"130,600";"52,2";"Mobil";"57,05";"63,42";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"130,700";"51,7";"Mobil";"57,08";"63,41";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"130,800";"51,9";"Mobil";"57,12";"63,39";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"130,900";"52,4";"Mobil";"57,12";"63,37";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"131,000";"52,5";"Mobil";"57,12";"63,34";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"131,100";"52,6";"Mobil";"57,11";"63,32";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"131,200";"53,6";"Mobil";"56,98";"63,29";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"131,300";"53,1";"Mobil";"57,00";"63,28";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"131,400";"52,8";"Mobil";"57,04";"63,26";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"131,500";"54,6";"Mobil";"56,86";"63,25";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"131,600";"57,9";"Mobil";"56,53";"63,23";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"131,700";"57,7";"Mobil";"56,57";"63,22";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"131,800";"57,2";"Mobil";"56,65";"63,20";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"131,900";"59,1";"Mobil";"56,48";"63,18";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"132,000";"60,0";"Mobil";"56,43";"63,15";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"132,100";"61,2";"Mobil";"56,31";"63,11";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"132,200";"61,4";"Mobil";"56,28";"63,06";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"132,300";"63,9";"Mobil";"56,04";"63,04";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"132,400";"65,0";"Mobil";"55,94";"63,01";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"132,500";"62,8";"Mobil";"56,14";"62,99";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"132,600";"59,6";"Mobil";"56,41";"62,96";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"132,700";"56,0";"Mobil";"56,64";"62,92";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"132,800";"58,7";"Mobil";"56,43";"62,87";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"132,900";"63,2";"Mobil";"56,06";"62,86";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"133,000";"62,5";"Mobil";"56,15";"62,85";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"133,100";"59,6";"Mobil";"56,44";"62,84";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"133,200";"57,6";"Mobil";"56,63";"62,83";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"133,300";"57,0";"Mobil";"56,70";"62,82";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"133,400";"58,3";"Mobil";"56,58";"62,81";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"133,500";"60,0";"Mobil";"56,43";"62,80";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"133,600";"59,8";"Mobil";"56,46";"62,78";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"133,700";"61,6";"Mobil";"56,29";"62,77";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"133,800";"65,4";"Mobil";"55,95";"62,75";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"133,900";"67,8";"Mobil";"55,73";"62,73";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"134,000";"69,8";"Mobil";"55,56";"62,71";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"134,100";"69,6";"Mobil";"55,59";"62,70";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"134,200";"67,3";"Mobil";"55,76";"62,68";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"134,300";"63,7";"Mobil";"55,99";"62,68";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"134,400";"61,9";"Mobil";"56,24";"62,67";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"134,500";"61,0";"Mobil";"56,39";"62,66";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"134,600";"62,7";"Mobil";"56,31";"62,65";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"134,700";"61,7";"Mobil";"56,39";"62,63";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"134,800";"62,7";"Mobil";"56,28";"62,60";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"134,900";"64,5";"Mobil";"56,10";"62,58";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"135,000";"66,3";"Mobil";"55,92";"62,56";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"135,100";"64,9";"Mobil";"56,04";"62,55";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"135,200";"69,4";"Mobil";"55,63";"62,53";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"135,300";"72,1";"Mobil";"55,40";"62,52";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"135,400";"72,8";"Mobil";"55,31";"62,50";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"135,500";"74,1";"Mobil";"55,12";"62,47";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"135,600";"71,4";"Mobil";"55,36";"62,43";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"135,700";"70,4";"Mobil";"55,47";"62,42";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"135,800";"69,6";"Mobil";"55,48";"62,40";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"135,900";"66,6";"Mobil";"55,67";"62,37";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"136,000";"64,3";"Mobil";"55,84";"62,33";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"136,100";"62,0";"Mobil";"56,04";"62,32";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"136,200";"62,5";"Mobil";"56,00";"62,30";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"136,300";"62,3";"Mobil";"56,00";"62,28";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"136,400";"63,8";"Mobil";"55,83";"62,26";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"136,500";"62,4";"Mobil";"55,91";"62,24";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"136,600";"60,6";"Mobil";"56,07";"62,21";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"136,700";"64,1";"Mobil";"55,77";"62,19";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"136,800";"64,0";"Mobil";"55,77";"62,16";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"136,900";"63,6";"Mobil";"55,79";"62,15";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"137,000";"65,8";"Mobil";"55,55";"62,13";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"137,100";"67,2";"Mobil";"55,33";"62,09";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"137,200";"67,0";"Mobil";"55,30";"62,05";"1.118";"1.059,45";"außerh. d. Bez.pegels";"Geschiebemessstelle: Vockerode"
+"137,300";"63,3";"Mobil";"55,57";"62,02";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"137,400";"60,4";"Mobil";"55,86";"61,99";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"137,500";"61,0";"Mobil";"55,85";"61,98";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"137,600";"61,1";"Mobil";"55,85";"61,96";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"137,700";"62,9";"Mobil";"55,70";"61,95";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"137,800";"64,5";"Mobil";"55,55";"61,94";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"137,900";"65,8";"Mobil";"55,42";"61,93";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"138,000";"64,6";"Mobil";"55,51";"61,91";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"138,100";"64,8";"Mobil";"55,46";"61,89";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"138,200";"65,4";"Mobil";"55,38";"61,87";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"138,300";"66,5";"Mobil";"55,24";"61,85";"1.118";"1.059,45";"außerh. d. Bez.pegels";"HW-Schutz: Kliekener-Deich"
+"138,400";"63,8";"Mobil";"55,44";"61,82";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"138,500";"69,1";"Mobil";"54,96";"61,80";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"138,600";"67,3";"Mobil";"55,12";"61,78";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"138,700";"63,4";"Mobil";"55,45";"61,76";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"138,800";"66,2";"Mobil";"55,19";"61,73";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"138,900";"62,8";"Mobil";"55,48";"61,72";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"139,000";"63,7";"Mobil";"55,38";"61,70";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"139,100";"62,1";"Mobil";"55,50";"61,68";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"139,200";"63,3";"Mobil";"55,38";"61,66";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"139,300";"63,1";"Mobil";"55,40";"61,64";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"139,400";"61,2";"Mobil";"55,52";"61,62";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"139,500";"60,6";"Mobil";"55,50";"61,59";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"139,600";"62,9";"Mobil";"55,27";"61,56";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"139,700";"61,8";"Mobil";"55,33";"61,54";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"139,800";"60,3";"Mobil";"55,45";"61,51";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"139,900";"62,9";"Mobil";"55,21";"61,49";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"140,000";"64,0";"Mobil";"55,07";"61,47";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"140,100";"63,8";"Mobil";"55,04";"61,44";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"140,200";"62,0";"Mobil";"55,16";"61,41";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"140,300";"62,1";"Mobil";"55,11";"61,39";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"140,400";"64,2";"Mobil";"54,94";"61,37";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"140,500";"66,8";"Mobil";"54,72";"61,35";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"140,600";"67,4";"Mobil";"54,59";"61,33";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"140,700";"66,2";"Mobil";"54,58";"61,29";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"140,800";"63,1";"Mobil";"54,80";"61,25";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"140,900";"61,4";"Mobil";"54,90";"61,22";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"141,000";"61,1";"Mobil";"54,89";"61,19";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"141,100";"60,9";"Mobil";"54,88";"61,16";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"141,200";"61,1";"Mobil";"54,80";"61,13";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"141,300";"60,4";"Mobil";"54,80";"61,10";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"141,400";"61,8";"Mobil";"54,67";"61,06";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"141,500";"62,4";"Mobil";"54,62";"61,04";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"141,600";"63,9";"Mobil";"54,47";"61,01";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"143,700";"65,5";"Mobil";"54,24";"60,85";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"143,800";"65,7";"Mobil";"54,22";"60,83";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"143,900";"63,8";"Mobil";"54,34";"60,80";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"144,000";"62,6";"Mobil";"54,39";"60,77";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"144,100";"64,1";"Mobil";"54,24";"60,74";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"144,200";"65,7";"Mobil";"54,08";"60,70";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"144,300";"66,6";"Mobil";"53,99";"60,68";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"144,400";"67,7";"Mobil";"53,89";"60,65";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"144,500";"67,4";"Mobil";"53,90";"60,63";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"144,600";"64,0";"Mobil";"54,18";"60,60";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"144,700";"62,0";"Mobil";"54,30";"60,57";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"144,800";"61,9";"Mobil";"54,25";"60,54";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"144,900";"59,2";"Mobil";"54,41";"60,52";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"145,000";"60,0";"Mobil";"54,28";"60,49";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"145,100";"61,2";"Mobil";"54,15";"60,47";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"145,200";"62,4";"Mobil";"54,03";"60,44";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"145,300";"62,4";"Mobil";"54,06";"60,42";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"145,400";"62,1";"Mobil";"54,11";"60,40";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"145,500";"61,3";"Mobil";"54,11";"60,37";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"145,600";"59,6";"Mobil";"54,16";"60,34";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"145,700";"63,8";"Mobil";"53,91";"60,31";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"145,800";"63,8";"Mobil";"53,96";"60,28";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"145,900";"61,6";"Mobil";"54,14";"60,25";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"146,000";"60,7";"Mobil";"54,19";"60,22";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"146,100";"64,8";"Mobil";"53,79";"60,20";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"146,200";"66,1";"Mobil";"53,64";"60,18";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"146,300";"66,2";"Mobil";"53,60";"60,15";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"146,400";"66,3";"Mobil";"53,56";"60,11";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"146,500";"64,0";"Mobil";"53,76";"60,11";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"146,600";"63,1";"Mobil";"53,84";"60,10";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"146,700";"64,4";"Mobil";"53,70";"60,09";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"146,800";"62,4";"Mobil";"53,84";"60,07";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"146,900";"61,2";"Mobil";"53,92";"60,06";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"147,000";"61,6";"Mobil";"53,85";"60,04";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"147,100";"62,6";"Mobil";"53,77";"60,02";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"147,200";"63,1";"Mobil";"53,71";"60,00";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"147,300";"62,6";"Mobil";"53,73";"59,99";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"147,400";"61,5";"Mobil";"53,78";"59,97";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"147,500";"60,1";"Mobil";"53,89";"59,96";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"147,600";"59,5";"Mobil";"53,93";"59,95";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"147,700";"58,0";"Mobil";"53,78";"59,94";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"147,800";"56,7";"Starr";"53,61";"59,93";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"147,900";"53,3";"Starr";"53,47";"59,92";"1.118";"1.059,45";"außerh. d. Bez.pegels";"HW-Schutz: Rosslau-Deich"
+"148,000";"47,7";"Starr";"53,49";"59,90";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"148,100";"47,7";"Starr";"53,51";"59,89";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"148,200";"46,9";"Starr";"53,59";"59,88";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"148,300";"46,2";"Starr";"53,57";"59,87";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"148,400";"45,4";"Starr";"53,57";"59,86";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"148,500";"45,7";"Starr";"53,49";"59,85";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"148,600";"45,2";"Starr";"53,49";"59,83";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"148,700";"38,6";"Starr";"53,52";"59,82";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"148,800";"26,4";"Starr";"53,51";"59,81";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"148,900";"37,9";"Starr";"53,37";"59,79";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"149,000";"42,6";"Starr";"53,27";"59,77";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"149,100";"45,7";"Starr";"53,18";"59,75";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"149,200";"46,3";"Starr";"53,12";"59,72";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"149,300";"43,5";"Starr";"53,16";"59,70";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"149,400";"38,0";"Starr";"53,19";"59,67";"1.118";"1.059,45";"außerh. d. Bez.pegels";"Zufluss: Rossel"
+"149,500";"37,3";"Starr";"53,26";"59,65";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"149,600";"37,9";"Starr";"53,14";"59,63";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"149,700";"39,7";"Starr";"53,07";"59,59";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"149,800";"38,8";"Starr";"53,36";"59,54";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"149,900";"43,8";"Starr";"52,78";"59,48";"1.118";"1.059,45";"außerh. d. Bez.pegels";"Hafen: Werfthafen"
+"150,000";"44,9";"Starr";"52,73";"59,42";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"150,100";"45,0";"Starr";"52,87";"59,41";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"150,200";"45,4";"Starr";"52,97";"59,39";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"150,300";"47,4";"Starr";"52,98";"59,37";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"150,400";"48,8";"Starr";"53,06";"59,35";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"150,500";"50,8";"Starr";"53,01";"59,33";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"150,600";"52,8";"Starr";"52,96";"59,31";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"150,700";"54,4";"Starr";"53,01";"59,30";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"150,800";"56,4";"Starr";"53,01";"59,28";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"150,900";"57,7";"Starr";"53,05";"59,26";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"151,000";"60,0";"Mobil";"53,00";"59,24";"1.118";"1.059,45";"außerh. d. Bez.pegels";"Geschiebemessstelle: Dessau 259 (oberhalb Muldemündung)"
+"151,100";"62,7";"Mobil";"52,92";"59,23";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"151,200";"68,4";"Mobil";"52,54";"59,21";"1.118";"1.059,45";"außerh. d. Bez.pegels";"Zufluss: Mulde"
+"151,300";"74,9";"Mobil";"51,99";"59,19";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"151,400";"70,2";"Mobil";"52,39";"59,17";"1.298";"1.059,45";"außerh. d. Bez.pegels";"Geschiebemessstelle: Dessau 260 (unterhalb Muldemündung)"
+"151,500";"72,2";"Mobil";"52,14";"59,15";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"151,600";"69,4";"Mobil";"52,30";"59,12";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"151,700";"66,7";"Mobil";"52,54";"59,11";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"151,800";"67,2";"Mobil";"52,49";"59,10";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"151,900";"65,6";"Mobil";"52,63";"59,08";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"152,000";"70,1";"Mobil";"52,22";"59,05";"1.298";"1.059,45";"außerh. d. Bez.pegels";"Hafen: Dessau-Wallwitz"
+"152,100";"74,7";"Mobil";"51,79";"59,04";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"152,200";"73,5";"Mobil";"51,88";"59,03";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"152,300";"70,8";"Mobil";"52,09";"59,01";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"152,400";"65,8";"Mobil";"52,51";"58,98";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"152,500";"62,8";"Mobil";"52,74";"58,96";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"152,600";"62,0";"Mobil";"52,79";"58,94";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"152,700";"64,8";"Mobil";"52,51";"58,93";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"152,800";"67,4";"Mobil";"52,26";"58,91";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"152,900";"68,2";"Mobil";"52,16";"58,89";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"153,000";"70,1";"Mobil";"51,96";"58,87";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"153,100";"69,0";"Mobil";"52,05";"58,85";"1.298";"1.059,45";"außerh. d. Bez.pegels";"Hafen: Leopoldhafen"
+"153,200";"68,6";"Mobil";"52,06";"58,83";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"153,300";"67,3";"Mobil";"52,15";"58,82";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"153,400";"68,9";"Mobil";"52,00";"58,80";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"153,500";"67,8";"Mobil";"52,07";"58,78";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"153,600";"70,0";"Mobil";"51,83";"58,76";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"153,700";"70,4";"Mobil";"51,76";"58,74";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"153,800";"70,3";"Mobil";"51,74";"58,72";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"153,900";"68,3";"Mobil";"51,90";"58,71";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"154,000";"67,0";"Mobil";"52,00";"58,70";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"154,100";"67,1";"Mobil";"51,97";"58,69";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"154,200";"66,8";"Mobil";"51,98";"58,67";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"154,300";"66,6";"Mobil";"51,96";"58,66";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"154,400";"66,9";"Mobil";"51,91";"58,64";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"154,500";"64,8";"Mobil";"52,07";"58,62";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"154,600";"66,0";"Mobil";"51,93";"58,60";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"154,700";"65,5";"Mobil";"51,96";"58,59";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"154,800";"64,5";"Mobil";"52,01";"58,57";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"154,900";"64,0";"Mobil";"52,02";"58,56";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"155,000";"67,9";"Mobil";"51,64";"58,54";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"155,100";"67,3";"Mobil";"51,64";"58,52";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"155,200";"67,5";"Mobil";"51,57";"58,49";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"155,300";"67,7";"Mobil";"51,56";"58,47";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"155,400";"67,0";"Mobil";"51,62";"58,45";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"155,500";"66,6";"Mobil";"51,56";"58,43";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"155,600";"66,8";"Mobil";"51,42";"58,40";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"155,700";"68,9";"Mobil";"51,22";"58,37";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"155,800";"67,3";"Mobil";"51,36";"58,34";"1.294";"1.059,45";"außerh. d. Bez.pegels";"Hafen: Roßlau Industriehafen"
+"155,900";"67,8";"Mobil";"51,29";"58,30";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"156,000";"71,5";"Mobil";"50,92";"58,25";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"156,100";"69,6";"Mobil";"51,10";"58,25";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"156,200";"70,0";"Mobil";"51,06";"58,24";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"156,300";"68,1";"Mobil";"51,19";"58,18";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"156,400";"65,9";"Mobil";"51,34";"58,12";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"156,500";"63,9";"Mobil";"51,50";"58,10";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"156,600";"62,3";"Mobil";"51,62";"58,08";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"156,700";"60,2";"Mobil";"51,81";"58,07";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"156,800";"60,3";"Mobil";"51,80";"58,05";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"156,900";"59,2";"Mobil";"51,87";"58,04";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"157,000";"59,5";"Mobil";"51,83";"58,02";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"157,100";"59,1";"Mobil";"51,83";"58,00";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"157,200";"59,0";"Mobil";"51,79";"57,98";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"157,300";"59,5";"Mobil";"51,72";"57,96";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"157,400";"60,3";"Mobil";"51,62";"57,94";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"157,500";"61,0";"Mobil";"51,56";"57,92";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"157,600";"62,5";"Mobil";"51,43";"57,90";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"157,700";"62,6";"Mobil";"51,41";"57,88";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"157,800";"62,5";"Mobil";"51,40";"57,86";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"157,900";"63,3";"Mobil";"51,30";"57,83";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"158,000";"62,7";"Mobil";"51,33";"57,80";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"158,100";"62,1";"Mobil";"51,37";"57,78";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"158,200";"61,7";"Mobil";"51,39";"57,76";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"158,300";"62,1";"Mobil";"51,34";"57,75";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"158,400";"60,4";"Mobil";"51,47";"57,73";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"158,500";"60,8";"Mobil";"51,43";"57,71";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"158,600";"61,4";"Mobil";"51,35";"57,69";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"158,700";"60,8";"Mobil";"51,39";"57,67";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"158,800";"61,3";"Mobil";"51,33";"57,65";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"158,900";"60,6";"Mobil";"51,38";"57,63";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"159,000";"61,0";"Mobil";"51,32";"57,61";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"159,100";"61,8";"Mobil";"51,20";"57,59";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"159,200";"62,7";"Mobil";"51,09";"57,56";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"159,300";"61,1";"Mobil";"51,26";"57,55";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"159,400";"60,7";"Mobil";"51,28";"57,53";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"159,500";"61,2";"Mobil";"51,22";"57,51";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"159,600";"62,3";"Mobil";"51,10";"57,49";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"159,700";"64,6";"Mobil";"50,87";"57,47";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"159,800";"65,3";"Mobil";"50,79";"57,45";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"159,900";"62,1";"Mobil";"51,05";"57,43";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"160,000";"59,8";"Mobil";"51,24";"57,40";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"160,100";"59,4";"Mobil";"51,27";"57,39";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"160,200";"63,1";"Mobil";"50,93";"57,38";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"160,300";"66,1";"Mobil";"50,64";"57,37";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"160,400";"65,9";"Mobil";"50,64";"57,35";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"160,500";"65,7";"Mobil";"50,65";"57,33";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"160,600";"65,7";"Mobil";"50,63";"57,31";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"160,700";"62,5";"Mobil";"50,92";"57,29";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"160,800";"61,8";"Mobil";"50,95";"57,27";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"160,900";"62,2";"Mobil";"50,90";"57,25";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"161,000";"61,9";"Mobil";"50,91";"57,23";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"161,100";"62,4";"Mobil";"50,85";"57,22";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"161,200";"61,2";"Mobil";"50,96";"57,20";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"161,300";"60,3";"Mobil";"51,03";"57,19";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"161,400";"60,4";"Mobil";"51,00";"57,17";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"161,500";"62,6";"Mobil";"50,79";"57,16";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"161,600";"63,6";"Mobil";"50,66";"57,14";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"161,700";"63,4";"Mobil";"50,68";"57,13";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"161,800";"64,9";"Mobil";"50,53";"57,11";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"161,900";"61,4";"Mobil";"50,84";"57,10";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"162,000";"60,8";"Mobil";"50,89";"57,08";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"162,100";"62,1";"Mobil";"50,74";"57,06";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"162,200";"61,9";"Mobil";"50,72";"57,04";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"162,300";"60,0";"Mobil";"50,86";"57,03";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"162,400";"62,4";"Mobil";"50,60";"57,02";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"162,500";"63,6";"Mobil";"50,52";"57,00";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"162,600";"63,2";"Mobil";"50,57";"56,98";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"162,700";"63,4";"Mobil";"50,54";"56,97";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"162,800";"67,9";"Mobil";"50,13";"56,95";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"162,900";"67,8";"Mobil";"50,12";"56,93";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"163,000";"66,9";"Mobil";"50,18";"56,90";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"163,100";"63,8";"Mobil";"50,42";"56,87";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"163,200";"62,9";"Mobil";"50,47";"56,84";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"163,300";"63,0";"Mobil";"50,45";"56,83";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"163,400";"62,2";"Mobil";"50,53";"56,82";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"163,500";"61,9";"Mobil";"50,55";"56,80";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"163,600";"60,9";"Mobil";"50,62";"56,78";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"163,700";"63,0";"Mobil";"50,40";"56,77";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"163,800";"64,4";"Mobil";"50,24";"56,75";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"163,900";"63,9";"Mobil";"50,28";"56,73";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"164,000";"63,9";"Mobil";"50,26";"56,71";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"164,100";"62,9";"Mobil";"50,36";"56,70";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"164,200";"64,0";"Mobil";"50,25";"56,68";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"164,300";"66,4";"Mobil";"50,01";"56,67";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"164,400";"65,6";"Mobil";"50,07";"56,65";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"164,500";"65,6";"Mobil";"50,05";"56,63";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"164,600";"65,8";"Mobil";"50,00";"56,60";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"164,700";"65,7";"Mobil";"50,00";"56,59";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"164,800";"66,1";"Mobil";"49,96";"56,57";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"164,900";"64,8";"Mobil";"50,05";"56,56";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"165,000";"62,6";"Mobil";"50,21";"56,54";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"165,100";"62,7";"Mobil";"50,18";"56,52";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"165,200";"63,3";"Mobil";"50,10";"56,49";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"165,300";"64,2";"Mobil";"50,02";"56,47";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"165,400";"65,1";"Mobil";"49,93";"56,45";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"165,500";"63,8";"Mobil";"50,02";"56,44";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"165,600";"63,6";"Mobil";"50,01";"56,42";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"165,700";"63,8";"Mobil";"50,00";"56,40";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"165,800";"65,7";"Mobil";"49,82";"56,37";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"165,900";"67,3";"Mobil";"49,67";"56,35";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"166,000";"68,6";"Mobil";"49,54";"56,33";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"166,100";"68,6";"Mobil";"49,53";"56,32";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"166,200";"69,5";"Mobil";"49,43";"56,30";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"166,300";"68,2";"Mobil";"49,53";"56,28";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"166,400";"65,4";"Mobil";"49,76";"56,26";"1.290";"1.059,45";"außerh. d. Bez.pegels";"Hafen: Hornhafen Aken"
+"166,500";"67,5";"Mobil";"49,56";"56,25";"1.290";"1.059,45";"außerh. d. Bez.pegels";"Fähre: Aken -Gierseilfähre"
+"166,600";"65,6";"Mobil";"49,72";"56,23";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"166,700";"66,9";"Mobil";"49,60";"56,22";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"166,800";"67,2";"Mobil";"49,57";"56,20";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"166,900";"68,7";"Mobil";"49,40";"56,19";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"167,000";"69,0";"Mobil";"49,34";"56,17";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"167,100";"67,8";"Mobil";"49,43";"56,15";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"167,200";"67,5";"Mobil";"49,45";"56,13";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"167,300";"69,5";"Mobil";"49,24";"56,11";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"167,400";"68,1";"Mobil";"49,33";"56,09";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"167,500";"65,7";"Mobil";"49,55";"56,08";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"167,600";"63,6";"Mobil";"49,74";"56,06";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"167,700";"64,9";"Mobil";"49,61";"56,04";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"167,800";"67,5";"Mobil";"49,36";"56,02";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"167,900";"68,4";"Mobil";"49,23";"56,00";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"168,000";"67,5";"Mobil";"49,25";"55,98";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"168,100";"66,6";"Mobil";"49,32";"55,96";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"168,200";"65,7";"Mobil";"49,38";"55,94";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"168,300";"63,6";"Mobil";"49,54";"55,93";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"168,400";"63,0";"Mobil";"49,58";"55,91";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"168,500";"63,7";"Mobil";"49,51";"55,89";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"168,600";"65,6";"Mobil";"49,33";"55,87";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"168,700";"68,1";"Mobil";"49,10";"55,85";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"168,800";"70,8";"Mobil";"48,85";"55,83";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"168,900";"71,4";"Mobil";"48,79";"55,81";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"169,000";"67,0";"Mobil";"49,16";"55,79";"1.290";"1.059,45";"außerh. d. Bez.pegels";"Hafen: Verkehrshafen Aken"
+"169,100";"71,1";"Mobil";"48,80";"55,77";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"169,200";"74,1";"Mobil";"48,52";"55,75";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"169,300";"74,5";"Mobil";"48,47";"55,74";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"169,400";"74,5";"Mobil";"48,46";"55,72";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"169,500";"73,3";"Mobil";"48,54";"55,70";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"169,600";"72,6";"Mobil";"48,57";"55,68";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"169,700";"72,7";"Mobil";"48,55";"55,67";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"169,800";"72,4";"Mobil";"48,57";"55,65";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"169,900";"72,0";"Mobil";"48,59";"55,64";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"170,000";"70,9";"Mobil";"48,68";"55,62";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"170,100";"69,2";"Mobil";"48,84";"55,61";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"170,200";"67,9";"Mobil";"48,95";"55,59";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"170,300";"67,7";"Mobil";"48,95";"55,57";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"170,400";"69,7";"Mobil";"48,75";"55,55";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"170,500";"74,3";"Mobil";"48,31";"55,53";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"170,600";"70,8";"Mobil";"48,60";"55,51";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"170,700";"68,4";"Mobil";"48,80";"55,50";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"170,800";"68,3";"Mobil";"48,79";"55,48";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"170,900";"70,5";"Mobil";"48,56";"55,47";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"171,000";"70,4";"Mobil";"48,53";"55,46";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"171,100";"71,3";"Mobil";"48,44";"55,44";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"171,200";"69,4";"Mobil";"48,60";"55,42";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"171,300";"69,0";"Mobil";"48,63";"55,40";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"171,400";"67,5";"Mobil";"48,74";"55,38";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"171,500";"69,4";"Mobil";"48,56";"55,37";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"171,600";"69,7";"Mobil";"48,51";"55,35";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"171,700";"68,0";"Mobil";"48,63";"55,33";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"171,800";"67,7";"Mobil";"48,62";"55,30";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"171,900";"70,4";"Mobil";"48,38";"55,29";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"172,000";"71,0";"Mobil";"48,33";"55,27";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"172,100";"71,4";"Mobil";"48,27";"55,26";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"172,200";"70,0";"Mobil";"48,37";"55,24";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"172,300";"69,0";"Mobil";"48,43";"55,22";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"172,400";"67,2";"Mobil";"48,56";"55,19";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"172,500";"66,1";"Mobil";"48,61";"55,17";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"172,600";"65,5";"Mobil";"48,62";"55,15";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"172,700";"67,6";"Mobil";"48,44";"55,13";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"172,800";"68,2";"Mobil";"48,38";"55,11";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"172,900";"66,3";"Mobil";"48,47";"55,09";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"173,000";"64,8";"Mobil";"48,52";"55,07";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"173,100";"65,9";"Mobil";"48,45";"55,05";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"173,200";"67,8";"Mobil";"48,30";"55,02";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"173,300";"68,4";"Mobil";"48,26";"55,00";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"173,400";"67,4";"Mobil";"48,36";"54,97";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"173,500";"68,7";"Mobil";"48,23";"54,95";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"173,600";"68,5";"Mobil";"48,24";"54,93";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"173,700";"67,1";"Mobil";"48,29";"54,89";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"173,800";"67,5";"Mobil";"48,20";"54,84";"1.288";"1.059,45";"außerh. d. Bez.pegels";"Geschiebemessstelle: Aken"
+"173,900";"68,9";"Mobil";"48,08";"54,83";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"174,000";"69,7";"Mobil";"48,00";"54,82";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"174,100";"68,6";"Mobil";"48,09";"54,81";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"174,200";"67,7";"Mobil";"48,16";"54,80";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"174,300";"71,6";"Mobil";"47,80";"54,79";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"174,400";"71,4";"Mobil";"47,80";"54,77";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"174,500";"72,2";"Mobil";"47,68";"54,75";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"174,600";"69,9";"Mobil";"47,83";"54,72";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"174,700";"67,4";"Mobil";"48,06";"54,71";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"174,800";"66,8";"Mobil";"48,11";"54,69";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"174,900";"66,9";"Mobil";"48,07";"54,67";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"175,000";"68,4";"Mobil";"47,90";"54,65";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"175,100";"69,4";"Mobil";"47,80";"54,64";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"175,200";"69,2";"Mobil";"47,81";"54,62";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"175,300";"68,3";"Mobil";"47,86";"54,60";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"175,400";"69,3";"Mobil";"47,73";"54,57";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"175,500";"70,9";"Mobil";"47,58";"54,56";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"175,600";"75,0";"Mobil";"47,20";"54,55";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"175,700";"71,5";"Mobil";"47,47";"54,53";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"175,800";"70,3";"Mobil";"47,54";"54,51";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"175,900";"70,6";"Mobil";"47,52";"54,50";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"176,000";"68,7";"Mobil";"47,69";"54,48";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"176,100";"68,3";"Mobil";"47,69";"54,46";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"176,200";"68,8";"Mobil";"47,61";"54,43";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"176,300";"70,3";"Mobil";"47,46";"54,42";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"176,400";"70,4";"Mobil";"47,44";"54,40";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"176,500";"68,4";"Mobil";"47,58";"54,38";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"176,600";"67,9";"Mobil";"47,59";"54,35";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"176,700";"66,8";"Mobil";"47,65";"54,34";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"176,800";"66,1";"Mobil";"47,66";"54,32";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"176,900";"65,5";"Mobil";"47,67";"54,30";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"177,000";"70,8";"Mobil";"47,14";"54,27";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"177,100";"69,7";"Mobil";"47,24";"54,26";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"177,200";"68,2";"Mobil";"47,36";"54,24";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"177,300";"67,8";"Mobil";"47,39";"54,22";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"177,400";"71,5";"Mobil";"47,04";"54,19";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"177,500";"76,7";"Mobil";"46,57";"54,16";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"177,600";"76,0";"Mobil";"46,61";"54,13";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"177,700";"73,8";"Mobil";"46,75";"54,10";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"177,800";"69,6";"Mobil";"47,07";"54,06";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"177,900";"67,3";"Mobil";"47,25";"54,04";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"178,000";"66,4";"Mobil";"47,32";"54,02";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"178,100";"66,7";"Mobil";"47,31";"54,01";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"178,200";"65,8";"Mobil";"47,40";"53,99";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"178,300";"66,9";"Mobil";"47,24";"53,97";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"178,400";"66,3";"Mobil";"47,21";"53,95";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"178,500";"64,8";"Mobil";"47,33";"53,93";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"178,600";"65,4";"Mobil";"47,26";"53,91";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"178,700";"68,1";"Mobil";"47,03";"53,89";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"178,800";"69,8";"Mobil";"46,88";"53,87";"1.288";"1.059,45";"außerh. d. Bez.pegels";"Fähre: Breitenhagen -Gierseilfähre"
+"178,900";"70,8";"Mobil";"46,75";"53,86";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"179,000";"71,5";"Mobil";"46,66";"53,84";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"179,100";"68,9";"Mobil";"46,86";"53,80";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"179,200";"68,1";"Mobil";"46,89";"53,76";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"179,300";"66,2";"Mobil";"47,06";"53,74";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"179,400";"67,0";"Mobil";"46,99";"53,72";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"179,500";"68,0";"Mobil";"46,88";"53,71";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"179,600";"67,3";"Mobil";"46,92";"53,69";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"179,700";"68,3";"Mobil";"46,82";"53,67";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"179,800";"67,0";"Mobil";"46,91";"53,64";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"179,900";"66,9";"Mobil";"46,89";"53,63";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"180,000";"66,8";"Mobil";"46,87";"53,61";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"180,100";"67,8";"Mobil";"46,75";"53,59";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"180,200";"67,0";"Mobil";"46,79";"53,57";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"180,300";"66,6";"Mobil";"46,80";"53,55";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"180,400";"67,9";"Mobil";"46,67";"53,52";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"180,500";"68,5";"Mobil";"46,59";"53,50";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"180,600";"69,1";"Mobil";"46,52";"53,48";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"180,700";"69,4";"Mobil";"46,48";"53,46";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"180,800";"69,4";"Mobil";"46,47";"53,43";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"180,900";"69,3";"Mobil";"46,46";"53,41";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"181,000";"68,6";"Mobil";"46,51";"53,39";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"181,100";"68,0";"Mobil";"46,54";"53,37";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"181,200";"68,1";"Mobil";"46,50";"53,35";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"181,300";"67,6";"Mobil";"46,55";"53,33";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"181,400";"68,4";"Mobil";"46,46";"53,30";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"181,500";"67,0";"Mobil";"46,56";"53,29";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"181,600";"66,2";"Mobil";"46,59";"53,27";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"181,800";"68,0";"Mobil";"46,43";"53,22";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"181,900";"68,8";"Mobil";"46,34";"53,21";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"182,000";"69,9";"Mobil";"46,22";"53,19";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"182,100";"69,2";"Mobil";"46,27";"53,18";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"182,200";"70,2";"Starr";"46,29";"53,16";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+""

http://dive4elements.wald.intevation.org